|
|
@@ -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());
|
|
|
}
|
|
|
}
|
|
|
|