浏览代码

下单接口、订单付款接口

weifanli 3 年之前
父节点
当前提交
c37ba02225

+ 4 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -27,10 +27,6 @@ public class OrderReq {
     @NotNull(message = "订单类型不能为空")
     @ApiModelProperty(value = "订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ", required = true)
     private OrderTypeEnum orderType;
-    @ApiModelProperty(value = "业务id ")
-    private Long bizId;
-    @ApiModelProperty(value = "业务内容 ")
-    private String bizContent;
     @NotNull(message = "原价不能为空")
     @ApiModelProperty(value = "原价 ", required = true)
     private BigDecimal originalPrice;
@@ -43,10 +39,13 @@ public class OrderReq {
     @NotNull(message = "优惠金额不能为空")
     @ApiModelProperty(value = "优惠金额 ", required = true)
     private BigDecimal couponAmount;
-
     @ApiModelProperty("用户备注 ")
     private String userNote;
 
+    @ApiModelProperty(value = "业务id ")
+    private Long bizId;
+    @ApiModelProperty(value = "业务内容 ")
+    private String bizContent;
     public Long getUserId() {
         return userId;
     }

+ 0 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java

@@ -47,9 +47,6 @@ public class UserOrderPayment implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date arrivalTime;
-    @ApiModelProperty("失败信息 ")
-	@TableField(value = "pay_fail_msg_")
-    private String payFailMsg;
 
     @ApiModelProperty("创建时间 ")
     @TableField(value = "create_time_")
@@ -125,14 +122,6 @@ public class UserOrderPayment implements Serializable {
     public void setArrivalTime(Date arrivalTime) {
         this.arrivalTime = arrivalTime;
     }
-    
-	public String getPayFailMsg() {
-        return payFailMsg;
-    }
-
-    public void setPayFailMsg(String payFailMsg) {
-        this.payFailMsg = payFailMsg;
-    }
 
     public Date getCreateTime() {
         return createTime;

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
 import com.yonge.cooleshow.biz.dal.service.impl.ImGroupMemberServiceImpl;
 import com.yonge.cooleshow.common.constant.CommonConstants;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.toolset.thirdparty.exception.ThirdpartyException;
 import com.yonge.toolset.utils.collection.MapUtil;
 import com.yonge.toolset.utils.http.HttpUtil;
@@ -55,7 +56,7 @@ public class PaymentSdk {
         String errorCode = (String) res.get("error_code");
         if (null != errorCode) {
             String errorMsg = (String) res.get("error_msg");
-            throw new ThirdpartyException(errorMsg);
+            throw new BizException(errorMsg);
         }
         return res;
     }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java

@@ -51,4 +51,11 @@ public interface UserOrderService extends IService<UserOrder>  {
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult
 	 */
     HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq);
+	/***
+	 * 用户付款回调
+	 * @author liweifan
+	 * @param: data
+	 * @updateTime 2022/4/8 18:24
+	 */
+	void orderCallback(String data);
 }

+ 29 - 37
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -22,7 +22,9 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.cooleshow.common.service.IdGeneratorService;
 import com.yonge.toolset.utils.collection.MapUtil;
+import com.yonge.toolset.utils.obj.ObjectUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,20 +55,22 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private UserOrderPaymentService orderPaymentService;
     @Autowired
     private PaymentSdk paymentSdk;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
 
     //验证订单是否可以下单
-    private static final Map<String, Function<OrderReq, HttpResponseResult<OrderCheckRes>>> checkOrder = new HashMap<>();
+    private static final Map<OrderTypeEnum, Function<OrderReq, HttpResponseResult<OrderCheckRes>>> checkOrder = new HashMap<>();
     //插入订单后执行
-    private static final Map<String, Consumer<UserOrderVo>> orderAfter = new HashMap<>();
+    private static final Map<OrderTypeEnum, Consumer<UserOrderVo>> orderAfter = new HashMap<>();
 
     @PostConstruct
     private void init() {
         //vip开通缴费
-        checkOrder.put(OrderTypeEnum.VIP.getCode(), vipCardRecordService::checkOrder);
+        checkOrder.put(OrderTypeEnum.VIP, vipCardRecordService::checkOrder);
 
 
         //vip开通缴费
-        orderAfter.put(OrderTypeEnum.VIP.getCode(), vipCardRecordService::orderAfter);
+        orderAfter.put(OrderTypeEnum.VIP, vipCardRecordService::orderAfter);
     }
 
     @Override
@@ -137,6 +141,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         return HttpResponseResult.failed("订单状态异常");
     }
 
+    @Override
+    public void orderCallback(String data) {
+
+    }
+
     /***
      * 处理待支付订单
      * @author liweifan
@@ -157,7 +166,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         deviceInfo.setDevice_ip(payReq.getIpAddress());
 
         paymentReq.setDevice_info(deviceInfo);
-        paymentReq.setNotify_url("异步通知地址");
+        //todo 异步通知地址
+        //paymentReq.setNotify_url("异步通知地址");
 
         if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
             Map<String, Object> expend = new HashMap<>();
@@ -169,16 +179,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
         OrderPayRes orderPayRes = new OrderPayRes();
         orderPayRes.setPay_amt(detail.getActualPrice().setScale(2).toString());
-
-        orderPayRes.setPay_info(
-                MapUtil.populateMap(new HashMap<>(), res.get("expend"))
-                        .get("pay_info").toString()
-        );
-
-        UserOrderPayment orderPayment = insertOrderPayment(res, payReq);
+        String pay_info =  ((JSONObject)res.get("expend")).getString("pay_info");
+        orderPayRes.setPay_info(pay_info);
         //入订单付款表,同时修改订单状态
-
-
+        UserOrderPayment orderPayment = insertOrderPayment(res, payReq);
         return HttpResponseResult.succeed(orderPayRes);
     }
 
@@ -187,28 +191,15 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderPayment.setOrderNo(payReq.getOrderNo());
         orderPayment.setPayChannel(payReq.getPayChannel());
 
-        try {
-            orderPayment.setTransNo(res.get("id").toString());
-            orderPayment.setPayAmt(
-                    new BigDecimal(res.get("pay_amt").toString()).setScale(2)
-            );
-            String pay_info = MapUtil.populateMap(new HashMap<>(), res.get("expend"))
-                    .get("pay_info").toString();
-            orderPayment.setPayInfo(pay_info);
-            orderPayment.setStatus(PayStatusEnum.pending);
-        } catch (Exception e) {
-            //保存异常信息
-            Map<String, Object> errMsg = new HashMap<>();
-            errMsg.put("error_code", res.get("error_code"));
-            errMsg.put("error_type", res.get("error_type"));
-            errMsg.put("error_msg", res.get("error_msg"));
-            errMsg.put("status", res.get("status"));
-            errMsg.put("invalid_param", res.get("invalid_param"));
-            orderPayment.setPayFailMsg(JSONObject.toJSONString(errMsg));
-            orderPayment.setStatus(PayStatusEnum.failed);
-        }
-
+        orderPayment.setTransNo(res.get("id").toString());
+        orderPayment.setPayAmt(
+                new BigDecimal(res.get("pay_amt").toString()).setScale(2)
+        );
+        String pay_info =  ((JSONObject)res.get("expend")).getString("pay_info");
+        orderPayment.setPayInfo(pay_info);
+        orderPayment.setStatus(PayStatusEnum.pending);
 
+        orderPaymentService.save(orderPayment);
         return orderPayment;
     }
 
@@ -233,8 +224,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      */
     private UserOrderVo insertOrder(OrderReq orderReq, OrderCheckRes data) {
         UserOrder userOrder = new UserOrder();
-        //todo 订单号生产规则
-        userOrder.setOrderNo("123");
+        //订单号生成
+        Long orderNo = idGeneratorService.generatorId("userOrder");
+        userOrder.setOrderNo(orderNo.toString());
         userOrder.setUserId(orderReq.getUserId());
         userOrder.setMerchId(data.getMerchId());
         userOrder.setOrderName(orderReq.getOrderName());

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java

@@ -30,7 +30,9 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     @Override
     public HttpResponseResult<OrderCheckRes> checkOrder(OrderReq orderReq) {
-        return HttpResponseResult.succeed();
+        OrderCheckRes orderCheckRes = new OrderCheckRes();
+        orderCheckRes.setRes(true);
+        return HttpResponseResult.succeed(orderCheckRes);
     }
 
     @Override

+ 0 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml

@@ -10,7 +10,6 @@
         <result column="pay_info_" property="payInfo" />
         <result column="status_" property="status" />
         <result column="arrival_time_" property="arrivalTime" />
-        <result column="pay_fail_msg_" property="payFailMsg" />
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
     </resultMap>
@@ -25,7 +24,6 @@
         , t.pay_info_ as payInfo
         , t.status_ as status
         , t.arrival_time_ as arrivalTime
-        , t.pay_fail_msg_ as payFailMsg
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         </sql>

+ 9 - 22
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java

@@ -1,28 +1,17 @@
 package com.yonge.cooleshow.student.controller;
 
-import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
-import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
-import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.utils.http.HttpUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
-import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
 
 /**
  * @Author: liweifan
@@ -34,14 +23,16 @@ import java.util.concurrent.TimeUnit;
 public class PaymentController {
     @Autowired
     private PaymentSdk paymentSdk;
+    @Autowired
+    private UserOrderService userOrderService;
 
-    @ApiOperation(value = "订单付款")
+/*    @ApiOperation(value = "订单付款")
     @PostMapping("/orderPay")
     public HttpResponseResult<Map<String, Object>> orderPay(@RequestBody PaymentReq param) {
         return HttpResponseResult.succeed(paymentSdk.executePayment(param));
-    }
+    }*/
 
-    @ApiOperation(value = "查询单")
+    @ApiOperation(value = "查询付款单")
     @GetMapping("/queryPayment")
     public HttpResponseResult<Map<String, Object>> queryPayment(String paymentId) throws Exception {
         return HttpResponseResult.succeed(paymentSdk.queryPayment(paymentId));
@@ -67,20 +58,16 @@ public class PaymentController {
             String data = request.getParameter("data");
             //验签传参sign
             String sign = request.getParameter("sign");
-            //验签标记
-            boolean checkSign;
             //验签传参publicKey
             String publicKey = AdapayCore.PUBLIC_KEY;
             //验签
-            checkSign = AdapaySign.verifySign(data, sign, publicKey);
+            boolean checkSign = AdapaySign.verifySign(data, sign, publicKey);
             if (checkSign) {
                 //验签成功逻辑
-                System.out.println("成功返回数据data:" + data);
-            } else {
-                //验签失败逻辑
+                userOrderService.orderCallback(data);
             }
         } catch (Exception e) {
+            e.printStackTrace();
         }
-        return;
     }
 }

+ 0 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -52,7 +52,6 @@ public class UserOrderController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         orderReq.setUserId(user.getId());
-
         Future<HttpResponseResult<UserOrder>> httpResponseResultFuture = DistributedLock.of(redissonClient)
                 .callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
                         , () -> userOrderService.executeOrder(orderReq), 60L, TimeUnit.SECONDS);

+ 12 - 0
toolset/utils/src/main/java/com/yonge/toolset/utils/obj/ObjectUtil.java

@@ -8,6 +8,7 @@ import org.springframework.util.Assert;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 
@@ -40,4 +41,15 @@ public class ObjectUtil {
             return obj instanceof Map ? ((Map)obj).isEmpty() : false;
         }
     }
+
+    public static String getFieldValueByFieldName(String fieldName, Object object) {
+        try {
+            Field field = object.getClass().getDeclaredField(fieldName);
+            //设置对象的访问权限,保证对private的属性的访问
+            field.setAccessible(true);
+            return (String)field.get(object);
+        } catch (Exception e) {
+            return null;
+        }
+    }
 }