소스 검색

升级超级会员-支付

chao 3 년 전
부모
커밋
5f0c529a07

+ 9 - 21
src/main/java/com/caimei365/order/controller/PayNonOrderApi.java

@@ -111,8 +111,7 @@ public class PayNonOrderApi {
     /**
      * 升级超级会员-微信线上支付
      * @param payVipDto {
-     *                  userId        用户Id
-     *                  vipId         会员套餐Id
+     *                  vipRecordId   会员购买记录Id
      *                  returnUrl     页面回调地址
      *                  code          微信小程序code
      *                  state         微信公众号state参数
@@ -121,11 +120,8 @@ public class PayNonOrderApi {
     @ApiOperation("升级超级会员-微信线上支付")
     @PostMapping("/vip/wechat")
     public ResponseJson<JSONObject> paySuperVipByWeChat(PayVipDto payVipDto, @RequestHeader HttpHeaders headers){
-        if (null == payVipDto.getUserId()) {
-            return ResponseJson.error("用户Id不能为空!", null);
-        }
-        if (null == payVipDto.getVipId()) {
-            return ResponseJson.error("会员套餐Id不能为空!", null);
+        if (null == payVipDto.getVipRecordId()) {
+            return ResponseJson.error("会员购买记录Id不能为空!", null);
         }
         if (StringUtils.isEmpty(payVipDto.getCode())) {
             return ResponseJson.error("微信code不能为空!", null);
@@ -136,19 +132,15 @@ public class PayNonOrderApi {
     /**
      * 升级超级会员-支付宝线上支付
      * @param payVipDto {
-     *                  userId        用户Id
-     *                  vipId         会员套餐Id
+     *                  vipRecordId   会员购买记录Id
      *                  returnUrl     页面回调地址
      * }
      */
     @ApiOperation("升级超级会员-支付宝线上支付")
     @PostMapping("/vip/alipay")
     public ResponseJson<JSONObject> paySuperVipByAlipay(PayVipDto payVipDto, @RequestHeader HttpHeaders headers){
-        if (null == payVipDto.getUserId()) {
-            return ResponseJson.error("用户Id不能为空!", null);
-        }
-        if (null == payVipDto.getVipId()) {
-            return ResponseJson.error("会员套餐Id不能为空!", null);
+        if (null == payVipDto.getVipRecordId()) {
+            return ResponseJson.error("会员购买记录Id不能为空!", null);
         }
         if (StringUtils.isEmpty(payVipDto.getReturnUrl())) {
             return ResponseJson.error("回调地址不能为空!", null);
@@ -159,8 +151,7 @@ public class PayNonOrderApi {
     /**
      * 升级超级会员-银联线上支付
      * @param payVipDto {
-     *               userId        用户Id
-     *               vipId         会员套餐Id
+     *               vipRecordId   会员购买记录Id
      *               returnUrl     页面回调地址
      *               bankCode      银行编码(银联支付使用)
      *               userType      用户类型(银联支付使用)企业:ENTERPRISE,个人:USER
@@ -169,11 +160,8 @@ public class PayNonOrderApi {
     @ApiOperation("升级超级会员-银联线上支付(旧:/PayOrder/secondHandPay[UNIONPAY])")
     @PostMapping("/vip/union")
     public ResponseJson<JSONObject> paySuperVipByUnionPay(PayVipDto payVipDto, @RequestHeader HttpHeaders headers){
-        if (null == payVipDto.getUserId()) {
-            return ResponseJson.error("用户Id不能为空!", null);
-        }
-        if (null == payVipDto.getVipId()) {
-            return ResponseJson.error("会员套餐Id不能为空!", null);
+        if (null == payVipDto.getVipRecordId()) {
+            return ResponseJson.error("会员购买记录Id不能为空!", null);
         }
         if (StringUtils.isEmpty(payVipDto.getReturnUrl())) {
             return ResponseJson.error("回调地址不能为空!", null);

+ 5 - 5
src/main/java/com/caimei365/order/mapper/PayOrderMapper.java

@@ -137,11 +137,11 @@ public interface PayOrderMapper {
      * 查询已支付运费
      */
     Double getPaidShipping(Integer orderId, Integer shopId);
-//    /**
-//     * 获取会员套餐价格
-//     * @param id 会员套餐Id
-//     */
-//    Double getVipPackagePriceById(Integer id);
+    /**
+     * 获取会员套餐价格
+     * @param id 会员套餐Id
+     */
+    Double getVipPackagePriceById(Integer id);
     /**
      * 获取会员套餐月份
      * @param id 会员套餐Id

+ 4 - 0
src/main/java/com/caimei365/order/model/bo/PayParamBo.java

@@ -26,6 +26,10 @@ public class PayParamBo implements Serializable {
      * 二手发布商品id
      */
     private Integer productId;
+    /**
+     * 会员购买记录Id
+     */
+    private Integer vipRecordId;
     /**
      * 会员套餐id
      */

+ 3 - 8
src/main/java/com/caimei365/order/model/dto/PayVipDto.java

@@ -15,15 +15,10 @@ import java.io.Serializable;
 public class PayVipDto implements Serializable {
     private static final long serialVersionUID = 1L;
     /**
-     * 用户id
+     * 会员购买记录Id
      */
-    @ApiModelProperty("用户id")
-    private Integer userId;
-    /**
-     * 会员套餐id
-     */
-    @ApiModelProperty("会员套餐Id")
-    private Integer vipId;
+    @ApiModelProperty("会员购买记录Id")
+    private Integer vipRecordId;
     /**
      * 页面回调地址
      */

+ 3 - 6
src/main/java/com/caimei365/order/service/PayNonOrderService.java

@@ -52,8 +52,7 @@ public interface PayNonOrderService {
     /**
      * 升级超级会员-微信线上支付
      * @param payVipDto {
-     *               userId        用户Id
-     *               vipId         会员套餐Id
+     *               vipRecordId   会员购买记录Id
      *               returnUrl     页面回调地址
      *               code          微信小程序code
      *               state         微信公众号state参数
@@ -63,8 +62,7 @@ public interface PayNonOrderService {
     /**
      * 升级超级会员-支付宝线上支付
      * @param payVipDto {
-     *               userId        用户Id
-     *               vipId         会员套餐Id
+     *               vipRecordId   会员购买记录Id
      *               returnUrl     页面回调地址
      * }
      */
@@ -72,8 +70,7 @@ public interface PayNonOrderService {
     /**
      * 升级超级会员-银联线上支付
      * @param payVipDto {
-     *               userId        用户Id
-     *               vipId         会员套餐Id
+     *               vipRecordId   会员购买记录Id
      *               returnUrl     页面回调地址
      *               bankCode      银行编码(银联支付使用)
      *               userType      用户类型(银联支付使用)企业:ENTERPRISE,个人:USER

+ 24 - 12
src/main/java/com/caimei365/order/service/impl/PayNonOrderServiceImpl.java

@@ -5,6 +5,7 @@ import com.caimei365.order.components.WeChatService;
 import com.caimei365.order.mapper.PayOrderMapper;
 import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.bo.PayParamBo;
+import com.caimei365.order.model.bo.VipRecordBo;
 import com.caimei365.order.model.dto.PaySecondDto;
 import com.caimei365.order.model.dto.PayVipDto;
 import com.caimei365.order.model.po.SplitAccountPo;
@@ -312,8 +313,7 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
      * 升级超级会员-微信线上支付
      *
      * @param payVipDto {
-     *                  userId        用户Id
-     *                  vipId         会员套餐Id
+     *                  vipRecordId   会员购买记录Id
      *                  returnUrl     页面回调地址
      *                  code          微信小程序code
      *                  state         微信公众号state参数
@@ -330,8 +330,12 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
             return ResponseJson.error(jsonParam.getMsg(), null);
         }
         PayParamBo payParam = jsonParam.getData();
+        // 获取会员套餐记录
+        VipRecordBo record = payOrderMapper.getVipPackageRecord(payParam.getVipRecordId());
+        payParam.setVipId(record.getPackageId());
+        payParam.setUserId(record.getUserId());
         // 获取会员套餐价格
-        Double price = payOrderMapper.getVipPackagePriceById(payParam.getVipId());
+        Double price = payOrderMapper.getVipPackagePriceById(record.getPackageId());
         payParam.setPayAmount(MathUtil.mul(price, 100).intValue());
         payParam.setNotifyUrl(superVipUrl);
         log.info("【升级超级会员微信支付】>>>>>>>>>>>vipId:" + payParam.getVipId()+",获取openId:" + payParam.getOpenId());
@@ -342,8 +346,7 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
      * 升级超级会员-支付宝线上支付
      *
      * @param payVipDto {
-     *                  userId        用户Id
-     *                  vipId         会员套餐Id
+     *                  vipRecordId   会员购买记录Id
      *                  returnUrl     页面回调地址
      *                  }
      * @param headers
@@ -356,8 +359,12 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         //支付宝支付
         payParam.setPayWay("ALIPAY");
         payParam.setPayType("ALIPAY_H5");
+        // 获取会员套餐记录
+        VipRecordBo record = payOrderMapper.getVipPackageRecord(payParam.getVipRecordId());
+        payParam.setVipId(record.getPackageId());
+        payParam.setUserId(record.getUserId());
         // 获取会员套餐价格
-        Double price = payOrderMapper.getVipPackagePriceById(payParam.getVipId());
+        Double price = payOrderMapper.getVipPackagePriceById(record.getPackageId());
         payParam.setPayAmount(MathUtil.mul(price, 100).intValue());
         payParam.setNotifyUrl(superVipUrl);
         log.info("【升级超级会员支付宝支付】>>>>>>>>>>>vipId:" + payParam.getVipId());
@@ -368,8 +375,7 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
      * 升级超级会员-银联线上支付
      *
      * @param payVipDto {
-     *                  userId        用户Id
-     *                  vipId         会员套餐Id
+     *                  vipRecordId   会员购买记录Id
      *                  returnUrl     页面回调地址
      *                  bankCode      银行编码(银联支付使用)
      *                  userType      用户类型(银联支付使用)企业:ENTERPRISE,个人:USER
@@ -384,8 +390,12 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         // 银联支付
         payParam.setPayWay("UNIONPAY");
         payParam.setPayType("GATEWAY_UNIONPAY");
+        // 获取会员套餐记录
+        VipRecordBo record = payOrderMapper.getVipPackageRecord(payParam.getVipRecordId());
+        payParam.setVipId(record.getPackageId());
+        payParam.setUserId(record.getUserId());
         // 获取会员套餐价格
-        Double price = payOrderMapper.getVipPackagePriceById(payParam.getVipId());
+        Double price = payOrderMapper.getVipPackagePriceById(record.getPackageId());
         payParam.setPayAmount(MathUtil.mul(price, 100).intValue());
         payParam.setNotifyUrl(superVipUrl);
         log.info("【升级超级会员银联线上支付】>>>>>>>>>>>vipId:" + payParam.getVipId());
@@ -412,12 +422,12 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
                 environment = "BETA";
             }
             // 商户订单号
-            String orderId = payParam.getUserId() + "V" + payParam.getVipId() + "T" + time + environment;
+            String orderId = payParam.getUserId()+ "R" + payParam.getVipRecordId() + "V" + payParam.getVipId() + "T" + time + environment;
             json.put("orderId", orderId);
             //商品名称
             String product = "采美订单" + orderId;
             json.put("product", product);
-            String attach = payParam.getVipId() + "," + payParam.getPayType()+ "," + payParam.getUserId();
+            String attach = payParam.getVipId() + "," + payParam.getPayType()+ "," + payParam.getUserId() + "," + payParam.getVipRecordId();
             json.put("attach", attach);
             // 升级超级会员默认公账
             List<Map<String, String>> list = new ArrayList<>();
@@ -505,7 +515,7 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
             return "支付失败";
         }
         log.info("【升级超级会员异步回调】>>>>>>>>>>>>>>本次支付金额:" + amount);
-        // 附加数据,支付时若有传输则原样返回(vipId,payType,userId),下单时为空,则不返回该数据
+        // 附加数据,支付时若有传输则原样返回(vipId,payType,userId,recordId),下单时为空,则不返回该数据
         String attach = json.getString("attach");
         String[] split = attach.split(",");
         // 会员套餐Id
@@ -514,6 +524,8 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         String payType = split[1];
         // 用户Id
         Integer userId = Integer.valueOf(split[2]);
+        // 购买历史记录Id
+        Integer recordId = Integer.valueOf(split[3]);
         // 金额
         double payAmount = amount.doubleValue();
         String payFormData = json.toJSONString();

+ 3 - 3
src/main/resources/mapper/PayOrderMapper.xml

@@ -215,9 +215,9 @@
         AND shopId = #{shopId}
         AND productType = 2 AND payStatus = 1
     </select>
-<!--    <select id="getVipPackagePriceById" resultType="java.lang.Double">-->
-<!--        SELECT price FROM cm_svip_package WHERE id = #{id};-->
-<!--    </select>-->
+    <select id="getVipPackagePriceById" resultType="java.lang.Double">
+        SELECT price FROM cm_svip_package WHERE id = #{id};
+    </select>
     <select id="getVipPackageDurationById" resultType="java.lang.Integer">
         SELECT duration FROM cm_svip_package WHERE id = #{id};
     </select>