Prechádzať zdrojové kódy

完善获取收款记录异常处理逻辑

cgp 5 dní pred
rodič
commit
f52f0bd434

+ 48 - 36
fs-service/src/main/java/com/fs/qw/service/impl/FsCompanyExternalPayReceiptServiceImpl.java

@@ -24,57 +24,69 @@ public class FsCompanyExternalPayReceiptServiceImpl implements IFsCompanyExterna
 
     @Autowired
     private WeWorkExternalPayService weWorkPayService;
-
     @Autowired
     private FsCompanyExternalPayReceiptMapper receiptMapper;
-
     @Autowired
     private FsCompanyExternalPayRefundMapper refundMapper;
 
     // 同步收、退款记录(定时任务同步或手动同步)
     @Override
-    @Transactional(rollbackFor = Exception.class)
+    // 注意:移除 @Transactional,因为每个企业应独立处理,一个失败不应回滚其他企业
     public void syncReceipts(Long beginTime, Long endTime, String payeeUserid, List<QwCompany> qwCompanyList) {
+        if (CollectionUtils.isEmpty(qwCompanyList)) {
+            log.info("企业列表为空,无需同步");
+            return;
+        }
+
         for (QwCompany qwCompany : qwCompanyList) {
-            List<ReceiptDto> receiptList = weWorkPayService.fetchAllReceipts(beginTime, endTime, payeeUserid, qwCompany.getCorpId());
-            if (CollectionUtils.isEmpty(receiptList)) {
-                log.info("{}:没有需要同步的记录", qwCompany.getCorpName());
-                return;
-            }
+            String corpId = qwCompany.getCorpId();
+            String corpName = qwCompany.getCorpName();
+            try {
+                List<ReceiptDto> receiptList = weWorkPayService.fetchAllReceipts(beginTime, endTime, payeeUserid, corpId);
+                if (CollectionUtils.isEmpty(receiptList)) {
+                    log.info("{}: 没有需要同步的记录", corpName);
+                    continue;  // 重要:continue,不要 return
+                }
 
-            for (ReceiptDto dto : receiptList) {
-                if (dto.getBillType() == 0) {
-                    // 收款记录
-                    FsCompanyExternalPayReceipt entity = new FsCompanyExternalPayReceipt();
-                    BeanUtils.copyProperties(dto, entity);
-                    entity.setTotalFee(MoneyUtils.centToYuan(dto.getTotalFee()));
-                    entity.setTotalRefundFee(MoneyUtils.centToYuan(dto.getTotalRefundFee()));
+                for (ReceiptDto dto : receiptList) {
+                    if (dto.getBillType() == 0) {
+                        // 收款记录
+                        FsCompanyExternalPayReceipt entity = new FsCompanyExternalPayReceipt();
+                        BeanUtils.copyProperties(dto, entity);
+                        entity.setCorpId(corpId);        // 设置企业ID
+                        entity.setCorpName(corpName);    // 设置企业名称
+                        entity.setTotalFee(MoneyUtils.centToYuan(dto.getTotalFee()));
+                        entity.setTotalRefundFee(MoneyUtils.centToYuan(dto.getTotalRefundFee()));
 
-                    FsCompanyExternalPayReceipt exist = receiptMapper.selectByTransactionId(dto.getTransactionId());
-                    if (exist == null) {
-                        receiptMapper.insertFsCompanyExternalPayReceipt(entity);
-                    } else {
-                        entity.setId(exist.getId());
-                        receiptMapper.updateFsCompanyExternalPayReceipt(entity);
-                    }
-                } else if (dto.getBillType() == 1) {
-                    // 退款记录
-                    FsCompanyExternalPayRefund refund = new FsCompanyExternalPayRefund();
-                    // 复制同名同类型字段
-                    BeanUtils.copyProperties(dto, refund);
-                    // 单独处理金额(分转元)
-                    refund.setRefundFee(MoneyUtils.centToYuan(dto.getRefundFee()));
+                        FsCompanyExternalPayReceipt exist = receiptMapper.selectByTransactionId(dto.getTransactionId());
+                        if (exist == null) {
+                            receiptMapper.insertFsCompanyExternalPayReceipt(entity);
+                        } else {
+                            entity.setId(exist.getId());
+                            receiptMapper.updateFsCompanyExternalPayReceipt(entity);
+                        }
+                    } else if (dto.getBillType() == 1) {
+                        // 退款记录
+                        FsCompanyExternalPayRefund refund = new FsCompanyExternalPayRefund();
+                        BeanUtils.copyProperties(dto, refund);
+                        refund.setCorpId(corpId);
+                        refund.setCorpName(corpName);
+                        refund.setRefundFee(MoneyUtils.centToYuan(dto.getRefundFee()));
 
-                    FsCompanyExternalPayRefund existRefund = refundMapper.selectByTransactionId(dto.getTransactionId());
-                    if (existRefund == null) {
-                        refundMapper.insertRefund(refund);
-                    } else {
-                        refund.setId(existRefund.getId());
-                        refundMapper.updateRefund(refund);
+                        FsCompanyExternalPayRefund existRefund = refundMapper.selectByTransactionId(dto.getTransactionId());
+                        if (existRefund == null) {
+                            refundMapper.insertRefund(refund);
+                        } else {
+                            refund.setId(existRefund.getId());
+                            refundMapper.updateRefund(refund);
+                        }
                     }
                 }
+                log.info("{}: 同步完成,共处理 {} 条记录", corpName, receiptList.size());
+            } catch (Exception e) {
+                log.error("{}: 同步收款记录失败", corpName, e);
+                // 继续处理下一个企业,不抛出异常
             }
-            log.info("{}:同步完成,共处理 {} 条记录",qwCompany.getCorpName(), receiptList.size());
         }
     }