Browse Source

fix: 充值回调

xdd 1 month ago
parent
commit
da9e6a3508

+ 0 - 1
fs-service/src/main/java/com/fs/company/service/CompanyRechargeOrderService.java

@@ -15,5 +15,4 @@ public interface CompanyRechargeOrderService {
     CompanyRechargeOrder queryOrder(String orderNo);
 
 
-    String payConfirm(String payCode,String tradeNo,String bankTransactionId,String bankSerialNo,String content);
 }

+ 0 - 16
fs-service/src/main/java/com/fs/company/service/impl/CompanyRechargeOrderServiceImpl.java

@@ -105,22 +105,6 @@ public class CompanyRechargeOrderServiceImpl implements CompanyRechargeOrderServ
         return companyRechargeOrderMapper.selectByOrderNo(orderNo);
     }
 
-    @Override
-    public String payConfirm(String payCode, String tradeNo, String bankTransactionId, String bankSerialNo,String content) {
-        CompanyRechargeOrder order = companyRechargeOrderMapper.selectByOrderNo(payCode);
-        order.setPayStatus(2);
-        order.setTransactionId(bankTransactionId);
-        order.setCallbackContent(content);
-        companyRechargeOrderMapper.updateByOrderNo(order);
-        FsUser user = fsUserMapper.selectFsUserByUserIdForUpdate(order.getUserId());
-        BigDecimal money = user.getMoney();
-        if(ObjectUtils.isNull(money)) {
-            money = BigDecimal.ZERO;
-        }
-        user.setMoney(money.add(order.getPayAmount()));
-        fsUserMapper.updateFsUser(user);
-        return "SUCCESS";
-    }
 
 
 }

+ 3 - 0
fs-service/src/main/java/com/fs/recharge/service/RechargeTemplateService.java

@@ -71,4 +71,7 @@ public interface RechargeTemplateService extends IService<RechargeTemplate> {
      * @return
      */
     List<RechargeTemplateVO> queryList(RechargeTemplateQuery query);
+
+    String payConfirm(String payCode,String tradeNo,String bankTransactionId,String bankSerialNo,String content);
+
 }

+ 42 - 0
fs-service/src/main/java/com/fs/recharge/service/impl/RechargeTemplateServiceImpl.java

@@ -11,6 +11,7 @@ import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.ip.IpUtils;
+import com.fs.company.domain.CompanyRechargeOrder;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.his.domain.FsPayConfig;
 import com.fs.his.domain.FsStoreOrder;
@@ -308,6 +309,7 @@ public class RechargeTemplateServiceImpl extends ServiceImpl<RechargeTemplateMap
                 updateRecord.setTradeNo(result.getHf_seq_id());
                 updateRecord.setPayParams(JSONUtil.toJsonStr(result));
                 updateRecord.setUpdateTime(new Date());
+                updateRecord.setTemplateId(rechargeRecord.getTemplateId());
                 fsUserRechargeRecordService.updateRechargeRecord(updateRecord);
 
                 return R.ok().put("isPay", 0).put("data", result).put("type", "hf");
@@ -360,6 +362,46 @@ public class RechargeTemplateServiceImpl extends ServiceImpl<RechargeTemplateMap
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public String payConfirm(String payCode, String tradeNo, String bankTransactionId, String bankSerialNo,String content) {
+        FsUserRechargeRecord rechargeRecord = fsUserRechargeRecordService.selectRechargeRecordByCode(payCode);
+
+        // 1. 查询充值模板
+        RechargeTemplate template = rechargeTemplateService.getById(rechargeRecord.getTemplateId());
+        if (template == null) {
+            log.error("充值模板不存在,templateId={}", rechargeRecord.getTemplateId());
+            throw new RuntimeException("充值模板不存在");
+        }
+        // 2. 增加用户余额
+        FsUser user = fsUserService.selectFsUserByUserIdForUpdate(rechargeRecord.getUserId());
+        BigDecimal totalAmount = rechargeRecord.getRechargeAmount().add(rechargeRecord.getBonusAmount());
+        BigDecimal money = user.getMoney();
+        if(ObjectUtils.isNull(money)) {
+            money = BigDecimal.ZERO;
+        }
+        user.setMoney(money.add(totalAmount));
+
+        // 3. 发放优惠券
+        if (StringUtil.isNotEmpty(template.getCouponIds())) {
+            String[] couponIds = template.getCouponIds().split(",");
+            for (String couponId : couponIds) {
+                try {
+                    Long cId = Long.parseLong(couponId);
+
+                    FsCouponReceiveParam param = new FsCouponReceiveParam();
+                    param.setCouponId(cId);
+                    param.setUserId(rechargeRecord.getUserId());
+                    param.setCompanyId(user.getCompanyId());
+                    param.setCompanyUserId(user.getCompanyUserId());
+                    fsCouponService.receive(param);
+                } catch (Exception e) {
+                    log.error("发放优惠券失败,couponId={}, userId={}", couponId, rechargeRecord.getUserId(), e);
+                }
+            }
+        }
+        return "SUCCESS";
+    }
+
     /**
      * 将实体对象转换为VO对象
      */

+ 4 - 2
fs-user-app/src/main/java/com/fs/app/controller/store/PayScrmController.java

@@ -5,11 +5,13 @@ import com.alibaba.fastjson.JSON;
 import com.fs.common.config.FSSysConfig;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.company.service.CompanyRechargeOrderService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.hisStore.service.*;
 import com.fs.huifuPay.domain.HuiFuResult;
+import com.fs.recharge.service.RechargeTemplateService;
 import com.fs.ybPay.domain.OrderCallback;
 import com.fs.ybPay.domain.OrderResult;
 import com.fs.pay.pay.dto.OrderQueryDTO;
@@ -68,7 +70,7 @@ public class PayScrmController {
     private ICompanyUserService companyUserService;
 
     @Autowired
-    private IFsStorePaymentScrmService fsStorePaymentScrmService;
+    private RechargeTemplateService rechargeTemplateService;
 
     @ApiOperation("汇付第三方支付回调")
     @PostMapping(value="/hfPayNotify")
@@ -86,7 +88,7 @@ public class PayScrmController {
                 case "payment":
                     return storePaymentService.payConfirm(order[1],o.getHf_seq_id(),o.getOut_trans_id(),o.getParty_order_id());
                 case "recharge":
-                    return fsStorePaymentScrmService.payConfirm(order[1],o.getHf_seq_id(),o.getOut_trans_id(),resp_data);
+                    return rechargeTemplateService.payConfirm(order[1],o.getHf_seq_id(),o.getOut_trans_id(),o.getParty_order_id(),resp_data);
             }
 
         }