Explorar o código

招行支付2.0—对账单逻辑调整,考虑补发情况,从record表查询

ZhangWenQiang %!s(int64=4) %!d(string=hai) anos
pai
achega
85a414ff53

+ 2 - 0
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/modules/hlwpayaccount/mapper/HlwPayRecordMapper.java

@@ -17,4 +17,6 @@ public interface HlwPayRecordMapper extends BaseMapper<HlwPayRecord> {
     List<HlwPayRecord> findNoPayList();
 
     List<HlwPayRecord> findNoPayRsaList();
+
+    List<HlwPayRecord> findNoStatementList();
 }

+ 12 - 0
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/modules/hlwpayaccount/mapper/xml/HlwPayRecordMapper.xml

@@ -20,4 +20,16 @@
         </where>
     </select>
 
+    <select id="findNoStatementList" resultType="org.jeecg.modules.hlwpayaccount.entity.HlwPayRecord">
+		SELECT
+		a.*
+		FROM
+		hlw_pay_record a
+		left join hlw_payment p on p.id = a.payment_id
+		left join hlw_payment_detail pd on pd.id = a.payment_detail_id
+		WHERE
+		(p.statement_url IS NULL or pd.statement_url IS NULL)
+		AND TO_DAYS(NOW()) - TO_DAYS(a.create_time) = 1
+	</select>
+
 </mapper>

+ 2 - 0
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/modules/hlwpayaccount/service/IHlwPayRecordService.java

@@ -16,4 +16,6 @@ public interface IHlwPayRecordService extends IService<HlwPayRecord> {
     List<HlwPayRecord> findNoPayList();
 
     List<HlwPayRecord> findNoPayRsaList();
+
+    List<HlwPayRecord> findNoStatementList();
 }

+ 5 - 0
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/modules/hlwpayaccount/service/impl/HlwPayRecordServiceImpl.java

@@ -27,4 +27,9 @@ public class HlwPayRecordServiceImpl extends ServiceImpl<HlwPayRecordMapper, Hlw
     public List<HlwPayRecord> findNoPayRsaList() {
         return baseMapper.findNoPayRsaList();
     }
+
+    @Override
+    public List<HlwPayRecord> findNoStatementList() {
+        return baseMapper.findNoStatementList();
+    }
 }

+ 17 - 17
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/modules/hlwpayment/task/PaymentRsaDownloadJob.java

@@ -32,6 +32,7 @@ import java.util.Calendar;
 import java.util.List;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -93,19 +94,20 @@ public class PaymentRsaDownloadJob {
     public ReturnT<String> paymentRsaDownJobHandler(String param) throws Exception {
         log.info(String.format(" 回执单定时器!  时间:" + DateUtils.getTimestamp()));
         XxlJobLogger.log(String.format(" 回执单定时器!  时间:" + DateUtils.getTimestamp()));
-        //查询前一天未下载对账单的付款单
-        List<HlwPayment> hlwPaymentList = hlwPaymentService.findNoStatementList();
-        for (HlwPayment hlwPayment : hlwPaymentList) {
+        //查询前一天未下载对账单的付款记录(考虑补发,按付款批次记录查询)
+        List<HlwPayRecord> hlwPayRecordList = hlwPayRecordService.findNoStatementList();
+        //移除补发的记录
+        hlwPayRecordList = hlwPayRecordList.stream().filter(item -> item.getPaymentDetailId() == null).collect(Collectors.toList());
+        log.info("按批次====={}", hlwPayRecordList.size());
+        for (HlwPayRecord hlwPayRecord : hlwPayRecordList) {
+            //付款单
+            HlwPayment hlwPayment = hlwPaymentService.getById(hlwPayRecord.getPaymentId());
             //服务商信息
             HlwSubcontractor hlwSubcontractor = hlwSubcontractorService.getById(hlwPayment.getSubcontractorId());
-            //付款记录
-            QueryWrapper<HlwPayRecord> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("payment_id", hlwPayment.getId());
-            HlwPayRecord hlwPayRecord = hlwPayRecordService.getOne(queryWrapper);
             //打印模式 S:逐笔打印:每笔明细生成一个PDF文件 M:批量打印:所有明细生成生成到一个PDF文件里面
             printMode = "M";
             //请求银行接口查询结果
-            JSONObject jsonObjectBody = PayRsaCommon.DCAGPPDF(hlwPayment, hlwPayRecord, hlwSubcontractor, printMode);
+            JSONObject jsonObjectBody = PayRsaCommon.DCAGPPDF(hlwPayRecord, hlwSubcontractor, printMode);
             if (jsonObjectBody != null) {
                 //打印任务编号
                 String printId = jsonObjectBody.getString("printid");
@@ -119,7 +121,7 @@ public class PaymentRsaDownloadJob {
     }
 
     /**
-     * 按明细打印
+     * 按明细打印(包括正常支付明细+补发明细)
      *
      * @param param
      * @return
@@ -130,19 +132,17 @@ public class PaymentRsaDownloadJob {
     public ReturnT<String> paymentRsaDownDetailJobHandler(String param) throws Exception {
         log.info(String.format(" 回执单定时器!  时间:" + DateUtils.getTimestamp()));
         XxlJobLogger.log(String.format(" 回执单定时器!  时间:" + DateUtils.getTimestamp()));
-        //查询前一天未下载对账单的付款单
-        List<HlwPayment> hlwPaymentList = hlwPaymentService.findNoStatementList();
-        for (HlwPayment hlwPayment : hlwPaymentList) {
+        //查询前一天未下载对账单的付款记录(考虑补发,按付款批次记录查询)
+        List<HlwPayRecord> hlwPayRecordList = hlwPayRecordService.findNoStatementList();
+        for (HlwPayRecord hlwPayRecord : hlwPayRecordList) {
+            //付款单
+            HlwPayment hlwPayment = hlwPaymentService.getById(hlwPayRecord.getPaymentId());
             //服务商信息
             HlwSubcontractor hlwSubcontractor = hlwSubcontractorService.getById(hlwPayment.getSubcontractorId());
-            //付款记录
-            QueryWrapper<HlwPayRecord> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("payment_id", hlwPayment.getId());
-            HlwPayRecord hlwPayRecord = hlwPayRecordService.getOne(queryWrapper);
             //打印模式 S:逐笔打印:每笔明细生成一个PDF文件 M:批量打印:所有明细生成生成到一个PDF文件里面
             printMode = "S";
             //请求银行接口查询结果
-            JSONObject jsonObjectBody = PayRsaCommon.DCAGPPDF(hlwPayment, hlwPayRecord, hlwSubcontractor, printMode);
+            JSONObject jsonObjectBody = PayRsaCommon.DCAGPPDF(hlwPayRecord, hlwSubcontractor, printMode);
             if (jsonObjectBody != null) {
                 //打印任务编号
                 String printId = jsonObjectBody.getString("printid");

+ 3 - 3
happy-cloud-wisdom/happy-cloud-wisdom-biz/src/main/java/org/jeecg/modules/utils/PayRsaCommon.java

@@ -423,7 +423,7 @@ public class PayRsaCommon {
      *
      * @param hlwSubcontractor
      */
-    public static JSONObject DCAGPPDF(HlwPayment hlwPayment, HlwPayRecord hlwPayRecord, HlwSubcontractor hlwSubcontractor, String prtmod) {
+    public static JSONObject DCAGPPDF(HlwPayRecord hlwPayRecord, HlwSubcontractor hlwSubcontractor, String prtmod) {
         JSONObject jsonObjectBody = new JSONObject();
         try {
             // body
@@ -437,9 +437,9 @@ public class PayRsaCommon {
             //付款账户
             obj_body.put("payeac", hlwPayAccountCmb.getAccnbr());
             //开始日期
-            obj_body.put("begdat", DateUtils.GetTime(hlwPayment.getCreateTime(), "yyyy-MM-dd"));
+            obj_body.put("begdat", DateUtils.GetTime(hlwPayRecord.getCreateTime(), "yyyy-MM-dd"));
             //结束日期
-            obj_body.put("enddat", DateUtils.GetTime(hlwPayment.getCreateTime(), "yyyy-MM-dd"));
+            obj_body.put("enddat", DateUtils.GetTime(hlwPayRecord.getCreateTime(), "yyyy-MM-dd"));
             //业务类型
             obj_body.put("buscod", hlwSubcontractor.getBuscod());
             //业务模式