Compare commits

..

2 Commits

Author SHA1 Message Date
hecan bba1478ac1 修改中信的公私钥为生产的 2025-04-18 11:52:06 +08:00
hecan 203953ad8e 发票批量录入查询结果 2025-04-17 17:16:45 +08:00
13 changed files with 196 additions and 13 deletions

View File

@ -0,0 +1,58 @@
package com.hzya.frame.plugin.ht.plugin;
import com.alibaba.fastjson.JSONObject;
import com.hzya.frame.base.PluginBaseEntity;
import com.hzya.frame.plugin.zxBank.plugin.ZxBankResultPluginInitializer;
import com.hzya.frame.seeyon.invoice.service.impl.InvoiceServiceImpl;
import com.hzya.frame.web.entity.JsonResultEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
public class QueryInputInvoiceResultPluginInitializer extends PluginBaseEntity {
Logger logger = LoggerFactory.getLogger(QueryInputInvoiceResultPluginInitializer.class);
@Autowired
private InvoiceServiceImpl invoiceService;
@Override
public void initialize() {
logger.info(getPluginLabel() + "執行初始化方法initialize()");
}
@Override
public void destroy() {
logger.info(getPluginLabel() + "執行銷毀方法destroy()");
}
@Override
public String getPluginId() {
return "QueryInputInvoiceResultPluginInitializer";
}
@Override
public String getPluginName() {
return "查询发票批量录入返回结果插件";
}
@Override
public String getPluginLabel() {
return "QueryInputInvoiceResultPluginInitializer";
}
@Override
public String getPluginType() {
return "1";
}
@Override
public JsonResultEntity executeBusiness(JSONObject requestJson) {
try {
logger.info("======开始执行查询税务进项发票批量录入返回结果========");
return invoiceService.queryInputInvoiceResult(requestJson);
}catch (Exception e){
logger.info("======执行查询税务进项发票批量录入返回结果失败:{}========",e.getMessage());
e.printStackTrace();
}
return null;
}
}

View File

@ -49,6 +49,6 @@ invoice_pdf:
invoice_ofd:
url: D:\yongansystem\invoice\ofd\
zx:
# 测试用这个 这个是银行给的
privateKey: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgtzMo2o6THK3yLIm+83Ch/560+02l2hjjBSFGieWY/Z6gCgYIKoEcz1UBgi2hRANCAATKhwZX4P3XI8vYTKeCOLMVbanUNbaXjrIEZynshwdOzRVgzRQSiPNWo6OBBkAPvqE+2RS+5ABpS82DSlKl81z0
publicKey: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEyocGV+D91yPL2EyngjizFW2p1DW2l46yBGcp7IcHTs0VYM0UEojzVqOjgQZAD76hPtkUvuQAaUvNg0pSpfNc9A==
# 生产用这个 这个是银行给的
privateKey: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgOHOzaKWBWOAbslvtYtS8tcQiJ9W9DT2cGQM3KSgXpfygCgYIKoEcz1UBgi2hRANCAAQNPct0MHOuDrVJBIy0RI7JKx9/PTlFHZlkIJr0EqpC+b/+N+z3JKbCMZ/wcP1V36Q+DlfDJCY9Ai/Uk2PZ9ZaF
publicKey: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEDT3LdDBzrg61SQSMtESOySsffz05RR2ZZCCa9BKqQvm//jfs9ySmwjGf8HD9Vd+kPg5XwyQmPQIv1JNj2fWWhQ==

View File

@ -4,5 +4,6 @@
<bean name="MakeInvoicePluginInitializer" class="com.hzya.frame.plugin.ht.plugin.MakeInvoicePluginInitializer" />
<bean name="InvoiceDistributePluginInitializer" class="com.hzya.frame.plugin.ht.plugin.InvoiceDistributePluginInitializer" />
<bean name="QueryInvoiceResultPluginInitializer" class="com.hzya.frame.plugin.ht.plugin.QueryInvoiceResultPluginInitializer" />
<bean name="QueryInputInvoiceResultPluginInitializer" class="com.hzya.frame.plugin.ht.plugin.QueryInputInvoiceResultPluginInitializer" />
</beans>

View File

@ -59,4 +59,14 @@ public interface IInvoiceDao extends IBaseDao<InvoiceEntity,String> {
* @Date 2025-04-14 16:35
* **/
Integer updateInvoiceResult(InvoiceEntity entity);
/**
*
* @content 进项发票推送结果查询查询发票批量录入结果
* @Param
* @Return
* @Author hecan
* @Date 2025-04-17 15:19
* **/
List<InvoiceEntity> queryInputInvoiceResult(InvoiceEntity entity);
}

View File

@ -56,4 +56,10 @@ public class InvoiceDaoImpl extends MybatisGenericDao<InvoiceEntity,String> impl
public Integer updateInvoiceResult(InvoiceEntity entity) {
return super.update("updateInvoiceResult",entity);
}
@DS("#entity.dataSourceCode")
@Override
public List<InvoiceEntity> queryInputInvoiceResult(InvoiceEntity entity) {
return (List<InvoiceEntity>)super.selectList("queryInputInvoiceResult",entity);
}
}

View File

@ -73,6 +73,24 @@ public class InvoiceEntity extends BaseEntity {
private String result_status;// 开票结果
private String summaryId;//
private String input_result_status_filed;//进项发票结果字段
private String input_result_status;//进项发票结果
public String getInput_result_status_filed() {
return input_result_status_filed;
}
public void setInput_result_status_filed(String input_result_status_filed) {
this.input_result_status_filed = input_result_status_filed;
}
public String getInput_result_status() {
return input_result_status;
}
public void setInput_result_status(String input_result_status) {
this.input_result_status = input_result_status;
}
public String getSummaryId() {
return summaryId;

View File

@ -87,6 +87,12 @@
from v_hzya_invoice where push_status is not null and url is null and (result_status is null or result_status='申请单处理中')
</select>
<select id="queryInputInvoiceResult" resultMap="get-InvoiceEntity-result" parameterType="com.hzya.frame.seeyon.invoice.entity.InvoiceEntity">
select
*
from where
</select>
<!--通过主键修改方法-->
<update id="updateInvoiceUrl" parameterType = "com.hzya.frame.seeyon.invoice.entity.InvoiceEntity" >
update ${tabName} set ${url_field} =#{url} where id=#{id}
@ -101,9 +107,10 @@
<update id="updateInvoiceResult" parameterType = "com.hzya.frame.seeyon.invoice.entity.InvoiceEntity" >
update ${tabName} set
<trim suffix="" suffixOverrides=",">
<if test="invoiceCode != null and invoiceCode != ''"> invoice_code_field = #{invoiceCode},</if>
<if test="invoiceNumber != null and invoiceNumber != ''"> invoice_number_field = #{invoiceNumber},</if>
<if test="resultStatus != null and resultStatus != ''"> result_status_field = #{resultStatus},</if>
<if test="input_result_status != null and input_result_status != ''"> ${input_result_status_filed} = #{input_result_status},</if>
<if test="invoice_code != null and invoice_code != ''"> ${invoice_code_field} = #{invoice_code},</if>
<if test="invoice_number != null and invoice_number != ''"> ${invoice_number_field} = #{invoice_number},</if>
<if test="result_status != null and result_status != ''"> ${result_status_field} = #{result_status},</if>
</trim>
where id=#{id}
</update>

View File

@ -6,7 +6,14 @@ public enum InvoiceState {
zero("0","申请单被关闭"),
one("1","申请单开票成功"),
two("2","申请单处理中"),
three("3","申请单开具异常");
three("3","申请单开具异常"),
inputZero("0","进行中"),
inputOne("1","全部成功"),
inputTwo("2","部分失败"),
inputThree("3","全部失败");
private String type;
//

View File

@ -26,4 +26,14 @@ public interface IInvoiceService extends IBaseService<InvoiceEntity,String> {
* @Date 2025-04-02 14:10
* **/
JsonResultEntity queryInvoiceResult(JSONObject json);
/**
*
* @content 进项发票推送结果查询查询发票批量录入结果
* @Param
* @Return
* @Author hecan
* @Date 2025-04-17 15:11
* **/
JsonResultEntity queryInputInvoiceResult(JSONObject json);
}

View File

@ -16,6 +16,7 @@ import com.hzya.frame.seeyon.invoice.entity.InvoiceState;
import com.hzya.frame.seeyon.invoice.service.IInvoiceService;
import com.hzya.frame.seeyon.util.OARestUtil;
import com.hzya.frame.seeyon.util.YzfSignUtil;
import com.hzya.frame.seeyon.zxbank.entity.PayState;
import com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity;
import com.hzya.frame.sysnew.comparison.service.impl.ComparisonServiceImpl;
import com.hzya.frame.sysnew.integtationTaskLivingDetails.entity.IntegrationTaskLivingDetailsEntity;
@ -234,6 +235,70 @@ public class InvoiceServiceImpl extends BaseService<InvoiceEntity, String> imple
return null;
}
//进项发票推送结果查询查询发票批量录入结果
@Override
public JsonResultEntity queryInputInvoiceResult(JSONObject json) {
try {
InvoiceEntity invoiceEntity = json.toJavaObject(InvoiceEntity.class);
invoiceEntity.setDataSourceCode("HT-OA");
logger.info("=======开始查询杭泰税务的发票批量录入返回结果=========");
List<InvoiceEntity> invoiceEntities = invoiceDao.queryInputInvoiceResult(invoiceEntity);
if(CollectionUtils.isEmpty(invoiceEntities)){
logger.info("=====杭泰税务中没有需要查询发票批量录入返回结果的数据========");
return BaseResult.getSuccessMessageEntity("查询成功");
}
for (InvoiceEntity entity : invoiceEntities) {
long timestamp = System.currentTimeMillis();
Map<String, Object> parametersMap = new HashMap<>();
parametersMap.put("accessKey","6X3B526P5HqE6ums");
parametersMap.put("timestamp",timestamp);
String sign = YzfSignUtil.signRequest(parametersMap,"34e5fc32ac894a2ba2ade8c3852c7a0a");
JSONObject jsonObject=new JSONObject();
jsonObject.put("serialNumber",entity.getId());
jsonObject.put("accessKey","6X3B526P5HqE6ums");
jsonObject.put("sign",sign);
jsonObject.put("timestamp",timestamp);
logger.info("=======调用杭泰税务查询发票批量录入结果的请求参数为:{}=======",jsonObject.toJSONString());
//发送数据
String result = HttpRequest.post(url).
header("appId", "800060").
header("apiCode", "8000600006").
header("publicKey", "ZJYAmRjjYEDgqw4UXWHZNicYclErG0hsrwKQcHukPlP0K1pCe7eDIk+3zDUT+v578prj").
header("secretKey", "D6AHU3PL8UsNfK6A8I6mL4X1ma2NXckX/vM7AOzI/jmzJf+R1aY06Q6SBz7Y7drHj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
body(jsonObject.toJSONString()).
execute().
body();
logger.info("=====调用杭泰税务查询发票批量录入结果的返回参数为:{}===========",result);
JSONObject resultJson = JSONObject.parseObject(result);
if (!resultJson.getBoolean("flag")) {
saveTaskLivingDetails(entity.getId(), entity.getBusiness_no(), jsonObject.toJSONString(), resultJson.toJSONString(), false,"");
} else {
JSONObject attribute = resultJson.getJSONObject("attribute");
if("0".equals(attribute.getString("code"))) {
JSONObject jsonResult = JSONObject.parseObject(attribute.getString("result"));
if (null != jsonResult) {
String serialNumber = jsonResult.getString("serialNumber");//流水号
String status = jsonResult.getString("status");//发票批量录入返回结果状态
if(serialNumber.equals(entity.getId())){
//修改发票批量录入结果状态
logger.info("=========开始更新进项发票的结果==========");
entity.setInput_result_status(InvoiceState.invoiceStateGetValue(status));
entity.setDataSourceCode("HT-OA");
invoiceDao.updateInvoiceResult(entity);
logger.info("=========更新进项发票的结果完成==========");
saveTaskLivingDetails(entity.getId(),entity.getBusiness_no(),jsonObject.toJSONString(), resultJson.toJSONString(), true,"");
}
}
}
}
}
}catch (Exception e){
logger.info("======查询杭泰税务发票批量录入结果失败====",e.getMessage());
e.printStackTrace();
}
return null;
}
private void ManyfileUpload(File file,InvoiceEntity entity,String sub_reference,String att_reference,JSONObject jsonObject){
JSONObject jsonObjectOfd = OARestUtil.fileUpload(file,"8000590003","8000590001");
if (jsonObjectOfd.getString("fileUrl") != null) {

View File

@ -236,15 +236,15 @@ public class SM2Util {
private void testSignByQuickpass() throws Exception {
//密钥生成
String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgtzMo2o6THK3yLIm+83Ch/560+02l2hjjBSFGieWY/Z6gCgYIKoEcz1UBgi2hRANCAATKhwZX4P3XI8vYTKeCOLMVbanUNbaXjrIEZynshwdOzRVgzRQSiPNWo6OBBkAPvqE+2RS+5ABpS82DSlKl81z0";
String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEyocGV+D91yPL2EyngjizFW2p1DW2l46yBGcp7IcHTs0VYM0UEojzVqOjgQZAD76hPtkUvuQAaUvNg0pSpfNc9A==";
String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgOHOzaKWBWOAbslvtYtS8tcQiJ9W9DT2cGQM3KSgXpfygCgYIKoEcz1UBgi2hRANCAAQNPct0MHOuDrVJBIy0RI7JKx9/PTlFHZlkIJr0EqpC+b/+N+z3JKbCMZ/wcP1V36Q+DlfDJCY9Ai/Uk2PZ9ZaF";
String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEDT3LdDBzrg61SQSMtESOySsffz05RR2ZZCCa9BKqQvm//jfs9ySmwjGf8HD9Vd+kPg5XwyQmPQIv1JNj2fWWhQ==";
// 加验签
//String value = "{\"partner\": \"test\",\"tranTime\": \"20240128003627\",\"seqNo\": \"123456\",\"orderNo\": \"order123456\", \"orderAmt\": \"1500\"}";
String value="{\"data\":{\"companyCode\":\"CN000001\",\"purpose\":\"加入中国光伏行业协会会员单位获得行业技术支持2025年会员单位缴纳标准为1万元/年,汇款时需注明“会费”字样,并在备注中注明汇款单位;缴纳会费后,需有付款凭证,将付款凭证发送至协会邮箱,并填写开票信息等内容\",\"recAccountNum\":\"8110701012801540483\",\"recAccountName\":\"\",\"payAccountNum\":\"8110701012601540892\",\"fundType\":\"0001\",\"transAmount\":\"9.90\",\"documentNo\":\"DG202503240321\",\"recBankCode\":\"\",\"settleAccountType\":\"CASH_TRANSFER\",\"sourceFlowNumber\":\"-3854827654841675885_1539\",\"submitUser\":\"user1\",\"digest\":\"加入中国光伏行业协会会员单位获得行业技术支持2025年会\",\"payChannel\":\"DIRECT\",\"currency\":\"CNY\",\"toPublic\":true,\"payAccountName\":\"\",\"payDate\":\"2025-03-26\"}}";
System.out.println("明文:" + value);
//加密
String encryptStr = encrypt(value, publicKey);
//String encryptStr="BAYF5RocTMvWHK4JLruoWNmvoBtSgEK6bHrXUIBcso3dx312VyI57p3bahg/qjcQufpa59XiMd8wA+cjyXmYm9+P4Y7DY5dZJQi6FdPZpL6awouRZMagdlceOL8yW5zDnx8tMqreUTAwkpvViwKn4DydKdV9EW0XuWkBwsN+4ZQftrY3FT/5Y/g8XtNSQMBu9PIwGWtPtpEtwO0HnaGCu7DGCSF+lo4PvYFmIlj0f2hQ1V1osdNIJ3IqUeZ0IZVFulaaOE72+vgAQN7UO0447kPq5iC8++oyXP7Bhf9kfU1gYOVXciIeAXoxIcjX+5DCB1q/FOmzqnOIBLRhSysqRXJa0ZvFgf1Ebpr6Fvz2Beim8SOEl3pXeLnLCJe91qsMuENLfNTOYnuESgSmdE1np3OJKcZwgeryUIt+WP7L28aJ1zNisWhB+TJaGtvWR++zY2fmMeZmwtJEz25jdmN1OWSuxgjXpI7fhIYoDnKQBQJKM5FQ+cWqJJozUMOlKG8Xhf5Lv1NjZOiNM7klp/Uprb3kUQj466ArWvsLzsoT1OOTOyBRJTbhKPSKi39ekcz4/ELuGSNB8Oz0pNg1tjbuyIcbiy2WCQI9/feiE+LyGgQPiUsaNxte10bYZuJJV33UWrBiezL0eA5pSm55zd98ToCX0QnJJq5OGW/8t8O/7+fZcSq5EFXSfS+3An8+EMLnBvI1ycjb9Q7PFVP4PmZ/VFqWJDNyi98iekWV09DVCtnCHqA5ZqEcPgZCeY40ZN5EQARvy11RWzs14Gj8JninjFbV6qtgB1Cadmy/piZS/SZdEvSnBfe04vTOElgG5GhraLrfMyVhnsmLeoqzLXmMT62uktPXKITjvFgr2NfdzbY5TkkDVMJu1b3VhZxOZENnJ4kW6nctYO0I7Z+xpVuMUnNOVxQBSJch2AdwIuyEL3odJSOXUt+RZIXhGNhyKw2Y8PvPQx+hOoCUyKyaUIS8G6RK/LI+TyMZTMsCUXYBEIxP10slFPp/4PCa7RPLhvdHsgik+cWNJj45tJRql9YXF1moWIaAUmLeu/ytCho1arA3V6/NjjckWI9mnqs41U2FAchJXdU2wNdIDB4AgGSsZs+o9sv+chgMgITV8/8xPNchu6g1UuczEXZRPFtKsVXlAJkNzQgBrMwCatby1S4CJFc5S/AJNIYipwLGW+M+3rh2+Ay+3HqDv7+7LUn+MTxgFfiosyK3hxkekY/eUg==";
//String encryptStr = encrypt(value, publicKey);
String encryptStr="BLTRQV8d8D1ILWs21weVXVubIB1Ppx3Oy3rWqdocyrAXm5WBNhSz6YemoVVPTTtdycJ3mcFF1YuRKhuHsMhU/VkzssS3i7W8FPwWHNyyorhd3LrP0HMx+j3MN/s7kGs9PGRem/X4U+tQsJxoQSi8CkmwCcF42aN78LkQ5292cDQ6/AcobhKYNHBqCeX9+gUhue76pWFM12k9rXQYvCnIqdf+vB5ot+UXuk3eXwnlmVdP+f5kSSKxyWRIC8GjLwHRWChkuk6IkjIhVlSMJfVt1fOseBYq5VW32XkHQFbSZW3JvYUhHpimibw7SP6SK60TT8lfJzsABJ5euADCFlhVwfUZZXZLdSV4YFSB/IQ6vVkHorQmD5RdGxktgu3MbErdEPhiGl7/tLj6gKi2ecRobGkQwu1peKcKB08WgnWFX/6Wbs0dxfavAAc1W3mXta0zx/+q2jiIydCsySUT2xCRDVBlGHPIlN8RDucQ4mOE5gBlr9vvMxnKOG2kdWzTVoj+aibqKh5ljwGbIUetbE3XtwNlO7deupvTaUN565P1M8cuK7zQjLeoUD2gqLMZOzz5fgkrPTzd7jUyf3QatDOGEFxrF1u03BMJVNAssxj7pdq2aSBTrHKwafoplUpWEAogeiUh2xYlVSEu2BUinHoMxqGU57UM/ZU1IRFgVKTdHV/R/4hLOpu55Mq7C5cOTVwVFasnIdbkJvabNX/vN0js9Bx/2QJx5SN2wqCV5R4yrXTH4dUGVTQFNLuiZSX8TML463FCIrtiofHZ/jvp3hEbyYTchkMuPEvH3MBZAt6ZXmwInYEktymF2nvBD7Pw22xQaE1Sqfjig5m4gQHB1mRV/RKCaNv7CuXsef29ldU5mQnER0U=";
System.out.println("加密结果:" + encryptStr);
//解密

View File

@ -76,7 +76,7 @@
<select id="queryResultIsNullZX" resultMap="get-ZxBankEntity-result" parameterType="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity">
select
<include refid="ZxBankEntity_Base_Column_List" />
from v_hzya_pay where push_status is not null and pay_result is null
from v_hzya_pay where push_status is not null and (pay_result is null or pay_result='支付中')
</select>
<select id="queryElecIsNullZX" resultMap="get-ZxBankEntity-result" parameterType="com.hzya.frame.seeyon.zxbank.entity.ZxBankEntity">

View File

@ -195,6 +195,7 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
String data = attribute.getString("data");
logger.info("=======杭泰付款单调用中信支付结果查询返回参数密文为:{}", data);
String decrypt = SM2Util.decrypt(data, privateKey);
logger.info("=======杭泰付款单调用中信支付结果查询返回参数明文为:{}", decrypt);
JSONObject jsonObjectData = JSONObject.parseObject(decrypt);
JSONArray jsonArray = jsonObjectData.getJSONArray("list");
if(CollectionUtils.isNotEmpty(jsonArray)){
@ -221,7 +222,7 @@ public class ZxBankServiceImpl extends BaseService<ZxBankEntity, String> impleme
logger.info("========杭泰付款单查询支付结果执行成功========");
return BaseResult.getSuccessMessageEntity("支付结果查询成功");
}catch (Exception e){
logger.info("=========查询中信返回的支付结果失败=======",e.getMessage());
logger.info("=========查询中信返回的支付结果失败:{}=======",e.getMessage());
e.printStackTrace();
}
return BaseResult.getFailureMessageEntity("支付结果查询失败");