|
|
@@ -7,17 +7,20 @@ import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseOrderItemDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpensePayOrderDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpensePayOrderItemDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.ccb.CcbPayCallbackRecordDO;
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.ccb.MerchantRecordDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderItemMapper;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderMapper;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpensePayOrderItemMapper;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpensePayOrderMapper;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.ccb.CcbPayCallbackRecordMapper;
|
|
|
+import cn.iocoder.yudao.module.system.dal.mysql.ccb.MerchantRecordMapper;
|
|
|
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
|
|
|
import cn.iocoder.yudao.module.system.enums.change.BusinessConstants;
|
|
|
import cn.iocoder.yudao.module.system.enums.common.BooleanEnum;
|
|
|
import cn.iocoder.yudao.module.system.util.pay.CcbPayConstant;
|
|
|
import cn.iocoder.yudao.module.system.util.pay.CcbPayUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -48,22 +51,15 @@ public class CcbBusinessService {
|
|
|
@Resource
|
|
|
private ExpensePayOrderItemMapper expensePayOrderItemMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private MerchantRecordMapper merchantRecordMapper;
|
|
|
|
|
|
- public void handleOrderBusiness(Map<String, String> paramMap) throws Exception {
|
|
|
- // 1.校验商户柜台代码、分行代码(与配置匹配)
|
|
|
- String callbackPosId = CcbPayUtils.getMapValue(paramMap, "POSID");
|
|
|
- String callbackBranchId = CcbPayUtils.getMapValue(paramMap, "BRANCHID");
|
|
|
- if (!CcbPayConstant.POSID.equals(callbackPosId) || !CcbPayConstant.BRANCHID.equals(callbackBranchId)) {
|
|
|
- String errorMessage = "商户信息不匹配:POSID=" + callbackPosId + ",BRANCHID=" + callbackBranchId;
|
|
|
- saveCallbackRecord(paramMap, errorMessage);
|
|
|
- throw new Exception(errorMessage);
|
|
|
- }
|
|
|
|
|
|
+ public void handleOrderBusiness(Map<String, String> paramMap) throws Exception {
|
|
|
+ //1.校验账单是否存在
|
|
|
String orderId = CcbPayUtils.getMapValue(paramMap, "ORDERID");
|
|
|
String callbackAmountStr = CcbPayUtils.getMapValue(paramMap, "PAYMENT");
|
|
|
BigDecimal callbackAmount = new BigDecimal(callbackAmountStr);
|
|
|
-
|
|
|
- //3.校验账单是否存在
|
|
|
ExpenseOrderDO expenseOrderDO = expenseOrderMapper.selectOne(new LambdaQueryWrapperX<ExpenseOrderDO>()
|
|
|
.eq(ExpenseOrderDO::getBillOrderNumber, orderId)
|
|
|
.last("FOR UPDATE")); //加悲观锁,防止并发操作导致数据不一致的问题
|
|
|
@@ -72,7 +68,18 @@ public class CcbBusinessService {
|
|
|
saveCallbackRecord(paramMap, errorMessage);
|
|
|
throw exception(ErrorCodeConstants.COMMON_NOT_FOUND);
|
|
|
}
|
|
|
- //4.校验账单是否已经支付
|
|
|
+ // 商户信息
|
|
|
+ MerchantRecordDO merchantRecordDO = merchantRecordMapper.selectOne(new LambdaQueryWrapperX<MerchantRecordDO>()
|
|
|
+ .eq(MerchantRecordDO::getTenantId, expenseOrderDO.getTenantId()));
|
|
|
+ // 2.校验商户柜台代码、分行代码(与配置匹配)
|
|
|
+ String callbackPosId = CcbPayUtils.getMapValue(paramMap, "POSID");
|
|
|
+ String callbackBranchId = CcbPayUtils.getMapValue(paramMap, "BRANCHID");
|
|
|
+ if (!merchantRecordDO.getCounterNumber().equals(callbackPosId) || !CcbPayConstant.BRANCHID.equals(callbackBranchId)) {
|
|
|
+ String errorMessage = "商户信息不匹配:POSID=" + callbackPosId + ",BRANCHID=" + callbackBranchId;
|
|
|
+ saveCallbackRecord(paramMap, errorMessage);
|
|
|
+ throw new Exception(errorMessage);
|
|
|
+ }
|
|
|
+ //3.校验账单是否已经支付
|
|
|
if (expenseOrderDO.getPayStatus().equals(BooleanEnum.TRUE.getValue())) {
|
|
|
String errorMessage = "订单已经支付: " + orderId;
|
|
|
saveCallbackRecord(paramMap, errorMessage);
|