Browse Source

支付成功-超级会员数据库修改

chao 3 years ago
parent
commit
b1472c3b6a

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

@@ -1,10 +1,7 @@
 package com.caimei365.order.mapper;
 
 import com.caimei365.order.model.bo.VipRecordBo;
-import com.caimei365.order.model.po.OrderReceiptRelationPo;
-import com.caimei365.order.model.po.PayShopPo;
-import com.caimei365.order.model.po.PayShopRecordPo;
-import com.caimei365.order.model.po.SplitAccountPo;
+import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.OrderPayLinkVo;
 import com.caimei365.order.model.vo.OrderVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -147,10 +144,26 @@ public interface PayOrderMapper {
      * @param id 会员套餐Id
      */
     Integer getVipPackageDurationById(Integer id);
-
     /**
      * 获取会员套餐记录
      * @param id
      */
     VipRecordBo getVipPackageRecord(Integer id);
+    /**
+     * 获取会员信息
+     * @param userId
+     */
+    UserVipPo getUserVipInfo(Integer userId);
+    /**
+     * 新增会员信息
+     */
+    void insertUserVipInfo(UserVipPo userVip);
+    /**
+     * 更新会员信息
+     */
+    void updateUserVipInfo(UserVipPo userVip);
+    /**
+     * 更新会员支付历史记录
+     */
+    void updateVipPackageRecord(Integer recordId);
 }

+ 41 - 0
src/main/java/com/caimei365/order/model/po/UserVipPo.java

@@ -0,0 +1,41 @@
+package com.caimei365.order.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/12
+ */
+@Data
+public class UserVipPo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * id
+     */
+    private Integer id;
+    /**
+     * 用户id
+     */
+    private Integer userId;
+    /**
+     * 开始时间
+     */
+    private Date beginTime;
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+    /**
+     * 结束时间
+     */
+    private Date updateTime;
+    /**
+     * 删除标记 0否,其余是
+     */
+    private Integer delFlag;
+}

+ 64 - 11
src/main/java/com/caimei365/order/service/impl/PayNonOrderServiceImpl.java

@@ -9,6 +9,7 @@ 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;
+import com.caimei365.order.model.po.UserVipPo;
 import com.caimei365.order.service.PayNonOrderService;
 import com.caimei365.order.utils.MathUtil;
 import com.caimei365.order.utils.PayUtil;
@@ -24,10 +25,8 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.security.NoSuchAlgorithmException;
 import java.security.spec.InvalidKeySpecException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * Description
@@ -332,6 +331,9 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         PayParamBo payParam = jsonParam.getData();
         // 获取会员套餐记录
         VipRecordBo record = payOrderMapper.getVipPackageRecord(payParam.getVipRecordId());
+        if (null != record.getPayStatus() && 1 == record.getPayStatus()){
+            return ResponseJson.error("该笔记录已支付,请勿重复支付!", null);
+        }
         payParam.setVipId(record.getPackageId());
         payParam.setUserId(record.getUserId());
         // 获取会员套餐价格
@@ -361,6 +363,9 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         payParam.setPayType("ALIPAY_H5");
         // 获取会员套餐记录
         VipRecordBo record = payOrderMapper.getVipPackageRecord(payParam.getVipRecordId());
+        if (null != record.getPayStatus() && 1 == record.getPayStatus()){
+            return ResponseJson.error("该笔记录已支付,请勿重复支付!", null);
+        }
         payParam.setVipId(record.getPackageId());
         payParam.setUserId(record.getUserId());
         // 获取会员套餐价格
@@ -392,6 +397,9 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         payParam.setPayType("GATEWAY_UNIONPAY");
         // 获取会员套餐记录
         VipRecordBo record = payOrderMapper.getVipPackageRecord(payParam.getVipRecordId());
+        if (null != record.getPayStatus() && 1 == record.getPayStatus()){
+            return ResponseJson.error("该笔记录已支付,请勿重复支付!", null);
+        }
         payParam.setVipId(record.getPackageId());
         payParam.setUserId(record.getUserId());
         // 获取会员套餐价格
@@ -427,7 +435,7 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
             //商品名称
             String product = "采美订单" + orderId;
             json.put("product", product);
-            String attach = payParam.getVipId() + "," + payParam.getPayType()+ "," + payParam.getUserId() + "," + payParam.getVipRecordId();
+            String attach = payParam.getVipId() + "," + payParam.getUserId() + "," + payParam.getVipRecordId() + "," + payParam.getPayWay() + "," + payParam.getPayType();
             json.put("attach", attach);
             // 升级超级会员默认公账
             List<Map<String, String>> list = new ArrayList<>();
@@ -520,17 +528,62 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         String[] split = attach.split(",");
         // 会员套餐Id
         Integer vipId = Integer.valueOf(split[0]);
-        // 支付类型
-        String payType = split[1];
         // 用户Id
-        Integer userId = Integer.valueOf(split[2]);
+        Integer userId = Integer.valueOf(split[1]);
         // 购买历史记录Id
-        Integer recordId = Integer.valueOf(split[3]);
+        Integer recordId = Integer.valueOf(split[2]);
+        // 支付方式
+        String payWay = split[3];
+        // 区分微信支付
+        String payType = split[4];
         // 金额
         double payAmount = amount.doubleValue();
         String payFormData = json.toJSONString();
-
-        //todo 支付成功-超级会员数据库修改
+        // todo 支付成功-超级会员数据库修改
+        UserVipPo userVip = new UserVipPo();
+        UserVipPo dbUserVip = payOrderMapper.getUserVipInfo(userId);
+        Date beginTime = new Date();
+        if (null != dbUserVip && null != dbUserVip.getEndTime()) {
+            // 有效期内续费
+            beginTime = dbUserVip.getEndTime();
+            userVip.setId(dbUserVip.getId());
+        }
+        userVip.setUserId(userId);
+        userVip.setUpdateTime(new Date());
+        userVip.setBeginTime(beginTime);
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(beginTime);
+        // 超级会员套餐时长(月)
+        Integer mouth = payOrderMapper.getVipPackageDurationById(vipId);
+        cal.add(Calendar.MONTH, mouth);
+        userVip.setEndTime(cal.getTime());
+        userVip.setDelFlag(0);
+        if (null != userVip.getId()) {
+            // 更新会员信息
+            payOrderMapper.updateUserVipInfo(userVip);
+        } else {
+            // 新增会员信息
+            payOrderMapper.insertUserVipInfo(userVip);
+        }
+        // 修改会员历史记录支付状态
+        VipRecordBo record = payOrderMapper.getVipPackageRecord(recordId);
+        record.setPayStatus(1);
+        record.setBeginTime(beginTime);
+        record.setEndTime(cal.getTime());
+        record.setPayWay(1);
+        if ("WEIXIN".equals(payWay)){
+            record.setPayType(8);
+            if ("MINIAPP_WEIXIN".equals(payType)) {
+                record.setPayType(15);
+            } else if ("JSAPI_WEIXIN".equals(payType)) {
+                record.setPayType(13);
+            }
+        } else if ("ALIPAY".equals(payWay)) {
+            record.setPayType(7);
+        }else if("UNIONPAY".equals(payWay)) {
+            record.setPayType(12);
+        }
+        payOrderMapper.updateVipPackageRecord(recordId);
 
         //修改分账付款状态
         payOrderMapper.updateSplitAccountByPay(mbOrderId);

+ 17 - 0
src/main/resources/mapper/PayOrderMapper.xml

@@ -51,6 +51,18 @@
         INSERT INTO cm_pay_shop_record (shopID, shopOrderID, shopOrderNo, payAmount, wipePayment, payType, payTime, payShopID, status, delFlag)
         VALUES (#{shopId}, #{shopOrderId}, #{shopOrderNo}, #{payAmount}, #{wipePayment}, #{payType}, #{payTime}, #{payShopId}, #{status}, #{delFlag})
     </insert>
+    <insert id="insertUserVipInfo">
+        INSERT INTO cm_svip_user(userId, beginTime, endTime, delFlag, updateTime)
+        VALUES (#{userId}, #{beginTime}, #{endTime}, #{delFlag}, #{updateTime})
+    </insert>
+    <update id="updateUserVipInfo">
+        UPDATE cm_svip_user set userId=#{userId}, beginTime=#{beginTime}, endTime=#{endTime}, delFlag=#{delFlag}, updateTime=#{updateTime}
+        WHERE userId = #{userId}
+    </update>
+    <update id="updateVipPackageRecord">
+        UPDATE cm_svip_history set payStatus=#{payStatus},payWay=#{payWay},payType=#{payType},beginTime=#{beginTime},endTime=#{endTime}
+        WHERE id = #{id}
+    </update>
     <update id="updateOrderPayLink">
         UPDATE cm_order_pay_link SET
             orderId = #{orderId}, vipRecordId = #{vipRecordId}, linkLogo = #{linkLogo}, unpaidAmount = #{unpaidAmount}, generateTime = #{generateTime},
@@ -224,4 +236,9 @@
     <select id="getVipPackageRecord" resultType="com.caimei365.order.model.bo.VipRecordBo">
         SELECT id, userId, packageId, price, payStatus FROM cm_svip_history WHERE id = #{id};
     </select>
+    <select id="getUserVipInfo" resultType="com.caimei365.order.model.po.UserVipPo">
+        SELECT id,userId, beginTime, endTime, updateTime, delFlag
+        FROM cm_svip_user
+        WHERE userId = #{#userId} and endTime > now()
+    </select>
 </mapper>