Quellcode durchsuchen

分账回调处理

Evan vor 2 Jahren
Ursprung
Commit
b1e71e4ca2

+ 39 - 6
mp-admin/src/main/java/com/qs/mp/web/controller/api/callback/YsPayCallBackController.java

@@ -15,7 +15,9 @@ import com.eptok.yspay.opensdkjava.util.YsfSignUtil;
 import com.qs.mp.common.constant.DivisionLogStatusConstants;
 import com.qs.mp.common.constant.YsServerApiConstants;
 import com.qs.mp.common.domain.YsCallLog;
+import com.qs.mp.common.enums.DivisionStatusEnum;
 import com.qs.mp.common.enums.PayOrderStatusEnum;
+import com.qs.mp.common.enums.YsCallBizTypeEnum;
 import com.qs.mp.common.service.IYsCallLogService;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.pay.domain.DivisionLog;
@@ -124,6 +126,15 @@ public class YsPayCallBackController {
         PayOrder order = payOrderService.getOne(new LambdaQueryWrapper<PayOrder>()
             .eq(PayOrder::getTradeNo, tradeNo));
 
+        YsCallLog payYsCallLog = ysCallLogService.getOne(new LambdaQueryWrapper<YsCallLog>()
+            .eq(YsCallLog::getBizId, order.getOrderId())
+            .eq(YsCallLog::getBizType, YsCallBizTypeEnum.ORDER_PAY));
+        if (payYsCallLog != null) {
+            ysCallLogService.update(new LambdaUpdateWrapper<YsCallLog>()
+                .set(YsCallLog::getCallbackJson, JSONObject.toJSONString(params))
+                .eq(YsCallLog::getId, payYsCallLog.getId()));
+        }
+
         if (PayOrderStatusEnum.SUCCESS.getValue().equals(order.getOrderStatus())) {
             logger.info("支付订单已成功,消息忽略,shopOrderNo:" + orderNo);
             responseWrite(response,"true");
@@ -199,9 +210,12 @@ public class YsPayCallBackController {
         req.setParamData(bizContent);
         String result = null;
         DivisionLog divisionLog = new DivisionLog();
+        divisionLog.setStatus(DivisionStatusEnum.INIT);
         YsCallLog ysCallLog = new YsCallLog();
         ysCallLog.setInterfaceId("ysepay.single.division.online.accept");
         ysCallLog.setReqJson(JSONObject.toJSONString(req));
+        ysCallLog.setBizType(YsCallBizTypeEnum.DIVISION);
+        ysCallLog.setBizId(divTradeNo);
         try{
             logger.info("分账登记调用sdk接口addScanMerc请求入参为:"+ JSONObject.toJSONString(req));
             result = MercFundApi.divisionOnlineAccept(req);
@@ -209,6 +223,7 @@ public class YsPayCallBackController {
             logger.info("分账登记调用addScanMerc出参为:"+ result);
             //根据返回结果处理自己的业务逻辑,result内容详见接口文档
         }catch (Exception e){
+            divisionLog.setStatus(DivisionStatusEnum.SUBMIT_FAIL);
             logger.error("线上分账登记接口失败:"+ e.getMessage());
         }
         // 保存调用日志
@@ -216,7 +231,6 @@ public class YsPayCallBackController {
 
         // 保存分账登记记录
         divisionLog.setTradeNo(divTradeNo);
-        divisionLog.setStatus(DivisionLogStatusConstants.INIT);
         divisionLog.setAmount(totalAmount);
         divisionLog.setOrderNo(orderNo);
         divisionLog.setBizId(payOrder.getOrderId());
@@ -231,7 +245,7 @@ public class YsPayCallBackController {
      * @throws Exception
      */
     @RequestMapping(value = "/ysDivCallback", method = RequestMethod.GET)
-    public void divCallback(HttpServletRequest request, HttpServletResponse response) throws Exception {
+    public void divCallback(HttpServletRequest request, HttpServletResponse response) {
         Map<String, String[]> reqParams = request.getParameterMap();
 
         Map<String, String> params = new HashMap<>();
@@ -245,15 +259,34 @@ public class YsPayCallBackController {
         }
 
         System.out.println("分账回调的数据 = " + JSONObject.toJSONString(params));
-
-
         String divTradeNo = params.get("out_trade_no");
-
+        String divisionStatusCode = params.get("division_status_code");
+        YsCallLog ysCallLog = ysCallLogService.getOne(new LambdaQueryWrapper<YsCallLog>()
+            .eq(YsCallLog::getBizId, divTradeNo)
+            .eq(YsCallLog::getBizType, YsCallBizTypeEnum.DIVISION));
+        if (ysCallLog != null) {
+            ysCallLogService.update(new LambdaUpdateWrapper<YsCallLog>()
+                .set(YsCallLog::getCallbackJson, JSONObject.toJSONString(params))
+                .eq(YsCallLog::getId, ysCallLog.getId()));
+        }
         DivisionLog divisionLog = divisionLogService.getOne(
             new LambdaQueryWrapper<DivisionLog>().eq(DivisionLog::getTradeNo, divTradeNo));
 
-        responseWrite(response, "success");
+        if ("00".equals(divisionStatusCode)) {
+            divisionLog.setStatus(DivisionStatusEnum.COMPLETE);
+        } else {
+            divisionLog.setStatus(DivisionStatusEnum.FAIL);
+        }
 
+        boolean res = divisionLogService.update(new LambdaUpdateWrapper<DivisionLog>()
+            .set(DivisionLog::getStatus, divisionLog.getStatus())
+            .eq(DivisionLog::getStatus, DivisionStatusEnum.INIT)
+            .eq(DivisionLog::getId, divisionLog.getId()));
+        if (!res) {
+            logger.error("更新分账状态失败,分账tradeNo:" + divTradeNo);
+        }
+
+        responseWrite(response, "success");
     }
 
 

+ 46 - 0
mp-common/src/main/java/com/qs/mp/common/enums/DivisionStatusEnum.java

@@ -0,0 +1,46 @@
+package com.qs.mp.common.enums;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONType;
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
+
+/**
+ * 分账状态枚举
+ * @author Evan
+ * @date 2023/3/30
+ */
+@JSONType(deserializer = EnumValueDeserializer.class)
+public enum DivisionStatusEnum implements IEnum<Integer> {
+
+    INIT(0,"初始化"),
+    COMPLETE(1,"完成"),
+    SUBMIT_FAIL(2,"登记失败"),
+    FAIL(3,"失败");
+
+
+    private final int value;
+    private final String desc;
+
+    DivisionStatusEnum(final int value, final String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getValue() {
+        return value;
+    }
+
+    /**
+     * 重写toString,单个转化成json
+     * @return
+     */
+    @Override
+    public String toString() {
+        JSONObject object = new JSONObject();
+        object.put("value",value);
+        object.put("desc", desc);
+        return object.toString();
+    }
+}

+ 4 - 0
mp-service/src/main/java/com/qs/mp/common/domain/YsCallLog.java

@@ -67,6 +67,10 @@ public class YsCallLog implements Serializable {
     @TableField("res_json")
     private String resJson;
 
+    @ApiModelProperty("回调数据")
+    @TableField("callback_json")
+    private String callbackJson;
+
     /**
      * 创建时间
      */

+ 6 - 2
mp-service/src/main/java/com/qs/mp/pay/domain/DivisionLog.java

@@ -1,7 +1,10 @@
 package com.qs.mp.pay.domain;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.qs.mp.common.enums.DivisionStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import java.util.Date;
@@ -62,9 +65,10 @@ public class DivisionLog implements Serializable {
     /**
      * 状态:1初始化,2完成,3失败
      */
-    @ApiModelProperty("状态:1初始化,2完成,3失败")
+    @ApiModelProperty("状态:0初始化,1完成,2登记失败,3失败")
     @TableField("status")
-    private Integer status;
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private DivisionStatusEnum status;
 
     /**
      * 创建时间