Преглед изворни кода

招行支付2.0—查询对账单sql优化

ZhangWenQiang пре 4 година
родитељ
комит
082cd08617

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

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

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

@@ -20,16 +20,32 @@
         </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
+        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.payment_id = p.id and pd.status = 3
+        WHERE
+        (p.statement_url IS NULL or pd.statement_url IS NULL)
+        AND a.payment_detail_id IS NULL
+        AND TO_DAYS(NOW()) - TO_DAYS(a.create_time) = 1
+        GROUP BY a.id
+	</select>
+
+    <select id="findDetailNoStatementList" resultType="org.jeecg.modules.hlwpayaccount.entity.HlwPayRecord">
+        SELECT
+        a.*
+        FROM
+        hlw_pay_record a
+        left join hlw_payment_detail pd on pd.id = a.payment_detail_id and pd.status = 4
+        WHERE
+        pd.statement_url IS NULL
+        AND a.payment_detail_id IS NOT NULL
+        AND TO_DAYS(NOW()) - TO_DAYS(a.create_time) = 1
+        GROUP BY a.id
 	</select>
 
 </mapper>

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

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

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

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

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

@@ -121,7 +121,7 @@ public class PaymentRsaDownloadJob {
     }
 
     /**
-     * 按明细打印(包括正常支付明细+补发明细)
+     * 按明细打印(正常支付明细)
      *
      * @param param
      * @return
@@ -156,6 +156,41 @@ public class PaymentRsaDownloadJob {
     }
 
     /**
+     * 按明细打印(补发明细)
+     *
+     * @param param
+     * @return
+     * @throws Exception
+     */
+    @XxlJob("paymentRsaDownDetailSuppleJobHandler")
+    @Transactional(rollbackFor = Exception.class)
+    public ReturnT<String> paymentRsaDownDetailSuppleJobHandler(String param) throws Exception {
+        log.info(String.format(" 回执单定时器!  时间:" + DateUtils.getTimestamp()));
+        XxlJobLogger.log(String.format(" 回执单定时器!  时间:" + DateUtils.getTimestamp()));
+        //查询前一天未下载对账单的付款记录(考虑补发,按付款批次记录查询)
+        List<HlwPayRecord> hlwPayRecordList = hlwPayRecordService.findDetailNoStatementList();
+        for (HlwPayRecord hlwPayRecord : hlwPayRecordList) {
+            //付款单
+            HlwPayment hlwPayment = hlwPaymentService.getById(hlwPayRecord.getPaymentId());
+            //服务商信息
+            HlwSubcontractor hlwSubcontractor = hlwSubcontractorService.getById(hlwPayment.getSubcontractorId());
+            //打印模式 S:逐笔打印:每笔明细生成一个PDF文件 M:批量打印:所有明细生成生成到一个PDF文件里面
+            printMode = "S";
+            //请求银行接口查询结果
+            JSONObject jsonObjectBody = PayRsaCommon.DCAGPPDF(hlwPayRecord, hlwSubcontractor, printMode);
+            if (jsonObjectBody != null) {
+                //打印任务编号
+                String printId = jsonObjectBody.getString("printid");
+                //每个下载任务独立线程池(需要考虑并发问题)
+                ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(2);
+                //下载对账单
+                downLoad(hlwPayment, printId, hlwSubcontractor, scheduledThreadPoolExecutor);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    /**
      * 下载对账单
      * schedule:一次性调度线程
      * scheduleAtFixedRate
@@ -209,7 +244,7 @@ public class PaymentRsaDownloadJob {
             httpURLConnection.connect();
             InputStream inputStream = httpURLConnection.getInputStream();
             ZipInputStream zipInputStream = new ZipInputStream(inputStream);
-            //解压文件
+            //解压文件并上传oss
             decompressionFile("/mnt/opt", zipInputStream, hlwPayment);
             if (inputStream != null) {
                 inputStream.close();