Browse Source

采美豆开通超级会员

zhijiezhao 3 years ago
parent
commit
e2eaa2d961

+ 19 - 0
src/main/java/com/caimei365/user/controller/RegisterApi.java

@@ -247,6 +247,25 @@ public class RegisterApi {
         }
         }
         return registerService.temporaryData(id);
         return registerService.temporaryData(id);
     }
     }
+
+    @ApiOperation("现金开通超级会员")
+    @GetMapping("super/money")
+    public ResponseJson superVipUpgrade(SuperVipDto superVipDto, @RequestHeader HttpHeaders headers) {
+        return registerService.superVipUpgrade(superVipDto, headers);
+    }
+
+    @ApiOperation("采美豆开通超级会员")
+    @GetMapping("super/beans")
+    public ResponseJson superVipUpByBeans(SuperVipDto superVipDto, @RequestHeader HttpHeaders headers) {
+        if (null == superVipDto.getUserPackage()) {
+            return ResponseJson.error("参数异常:购买套餐不能为空!", null);
+        }
+        if (null == superVipDto.getUserId()) {
+            return ResponseJson.error("参数异常:用户id不能为空", null);
+        }
+        return registerService.superVipUpByBeans(superVipDto, headers);
+    }
+
 }
 }
 
 
 
 

+ 99 - 0
src/main/java/com/caimei365/user/mapper/SuperVipMapper.java

@@ -0,0 +1,99 @@
+package com.caimei365.user.mapper;
+
+import com.caimei365.user.model.po.SuperVipPo;
+import com.caimei365.user.model.po.VipPayHistoryPo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Date;
+
+/**
+ * @author zzj
+ */
+@Mapper
+public interface SuperVipMapper {
+
+    /**
+     * 查vip信息
+     *
+     * @param userId
+     * @return
+     */
+    SuperVipPo findSuperVip(Integer userId);
+
+    /**
+     * 查用户名下采美豆余额
+     *
+     * @param userId
+     * @return
+     */
+    Integer findUserBeans(Integer userId);
+
+    /**
+     * user表修改采美豆数量
+     *
+     * @param userId
+     * @param userBeans
+     */
+    void updateUserBeans(Integer userId, Integer userBeans);
+
+    /**
+     * 采美豆历史表更改
+     *
+     * @param userId
+     * @param userBeans
+     */
+    void updateUserBeansHistory(Integer userId, Integer userBeans);
+
+    /**
+     * 用户权限修改
+     * 用户权限 0游客 1 普通用户 2 会员机构 3 供应商 4 协销 5 普通机构 6 呵呵商城用户【V6.2.0版本后0和1不存在】
+     *
+     * @param userId
+     * @param userPermission
+     */
+    void updateUserPermission(Integer userId, Integer userPermission);
+
+    /**
+     * 用户身份修改
+     * 用户身份 0、个人 1、协销 2、会员机构 3、供应商 4.普通机构 6、呵呵商城用户【V6.2.0版本后0不存在】
+     *
+     * @param userId
+     * @param userIdentity
+     */
+    void updateUserIdentity(Integer userId, Integer userIdentity);
+
+    /**
+     * 查买的套餐的现金价格
+     *
+     * @param userPackageId
+     * @return
+     */
+    Double findUserPackage(Integer userPackageId);
+
+    /**
+     * 新增支付记录
+     *
+     * @param payHistory
+     */
+    void addPayHistory(VipPayHistoryPo payHistory);
+
+    /**
+     * 根据套餐id查套餐时间
+     *
+     * @param userPackageId
+     * @return
+     */
+    Integer findUserPackageTime(Integer userPackageId);
+
+    /**
+     * 超级会员表加数据
+     * @param superVip
+     */
+    void addVip(SuperVipPo superVip);
+
+    /**
+     * 修改超级会员表
+     * @param superVip
+     */
+    void updateVip(SuperVipPo superVip);
+}

+ 42 - 0
src/main/java/com/caimei365/user/model/dto/SuperVipDto.java

@@ -0,0 +1,42 @@
+package com.caimei365.user.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author zzj
+ * 超级会员
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SuperVipDto implements Serializable {
+
+    /**
+     * 用户Id
+     */
+    @ApiModelProperty("用户Id")
+    private Integer userId;
+
+//    /**
+//     * 开通支付采美豆数量
+//     */
+//    @ApiModelProperty("支付采美豆数量")
+//    private Integer userBeans;
+//
+//    /**
+//     * 开通支付现金数量
+//     */
+//    @ApiModelProperty("支付现金数量")
+//    private Integer userPay;
+
+    /**
+     * 购买套餐id,1套餐12个月,2套餐3个月,3套餐1个月
+     */
+    @ApiModelProperty("购买套餐id")
+    private Integer userPackage;
+}

+ 41 - 0
src/main/java/com/caimei365/user/model/po/SuperVipPo.java

@@ -0,0 +1,41 @@
+package com.caimei365.user.model.po;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author zzj
+ * 超级会员
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SuperVipPo implements Serializable {
+
+    /**
+     *     CREATE TABLE `cm_svip_user`(
+     *          `id` INT NOT NULL AUTO_INCREMENT,
+     *          `userId` bigint(11) DEFAULT NULL COMMENT '用户ID',
+     *          `beginTime` DATETIME DEFAULT NULL COMMENT '生效时间',
+     *          `endTime` DATETIME DEFAULT NULL COMMENT '到期时间',
+     *          `delFlag` CHAR(1) DEFAULT '0' COMMENT '删除标记 0否,其余是',
+     *          `updateTime` DATETIME DEFAULT NULL COMMENT '更新时间',
+     *          PRIMARY KEY (`id`)
+     *     ) ENGINE=INNODB CHARSET=utf8mb4 COMMENT='超级会员用户表';
+     */
+
+    private Integer userId;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date beginTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+    private Integer delFlag;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+}

+ 37 - 0
src/main/java/com/caimei365/user/model/po/VipPayHistoryPo.java

@@ -0,0 +1,37 @@
+package com.caimei365.user.model.po;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author zzj
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class VipPayHistoryPo implements Serializable {
+    private Integer userId;
+    /**
+     * 套餐id
+     */
+    private Integer packageId;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date beginTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+    private Integer payWay;
+    private Integer payType;
+    private Double price;
+    /**
+     * 支付采美豆数量
+     */
+    private Double userBeans;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date payTime;
+
+}

+ 16 - 0
src/main/java/com/caimei365/user/service/RegisterService.java

@@ -142,4 +142,20 @@ public interface RegisterService {
      * @return
      * @return
      */
      */
     ResponseJson<ClubTemporaryVo> temporaryData(Integer id);
     ResponseJson<ClubTemporaryVo> temporaryData(Integer id);
+
+    /**
+     * 购买超级会员
+     * @param superVipDto
+     * @param headers
+     * @return
+     */
+    ResponseJson superVipUpgrade(SuperVipDto superVipDto, HttpHeaders headers);
+
+    /**
+     * 采美豆购买超级会员
+     * @param superVipDto
+     * @param headers
+     * @return
+     */
+    ResponseJson superVipUpByBeans(SuperVipDto superVipDto, HttpHeaders headers);
 }
 }

+ 5 - 0
src/main/java/com/caimei365/user/service/impl/LoginServiceImpl.java

@@ -89,6 +89,11 @@ public class LoginServiceImpl implements LoginService {
             String md5Password = Md5Util.md5(password);
             String md5Password = Md5Util.md5(password);
             String dbPassword = baseUser.getPassword();
             String dbPassword = baseUser.getPassword();
             if (md5Password.equals(dbPassword)) {
             if (md5Password.equals(dbPassword)) {
+                /**
+                 *     登录成功
+                 *
+                 */
+
                 if (baseUser.getUserIdentity() == 1) {
                 if (baseUser.getUserIdentity() == 1) {
                     // 协销登录
                     // 协销登录
                     return ResponseJson.success(baseUser);
                     return ResponseJson.success(baseUser);

+ 106 - 4
src/main/java/com/caimei365/user/service/impl/RegisterServiceImpl.java

@@ -3,10 +3,7 @@ package com.caimei365.user.service.impl;
 import com.caimei365.user.components.CommonService;
 import com.caimei365.user.components.CommonService;
 import com.caimei365.user.components.RedisService;
 import com.caimei365.user.components.RedisService;
 import com.caimei365.user.components.WeChatService;
 import com.caimei365.user.components.WeChatService;
-import com.caimei365.user.mapper.BaseMapper;
-import com.caimei365.user.mapper.LoginMapper;
-import com.caimei365.user.mapper.RegisterMapper;
-import com.caimei365.user.mapper.SellerMapper;
+import com.caimei365.user.mapper.*;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.*;
 import com.caimei365.user.model.dto.*;
 import com.caimei365.user.model.po.*;
 import com.caimei365.user.model.po.*;
@@ -23,7 +20,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.Date;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -37,6 +36,8 @@ import java.util.Map;
 @Service
 @Service
 public class RegisterServiceImpl implements RegisterService {
 public class RegisterServiceImpl implements RegisterService {
 
 
+    @Resource
+    private SuperVipMapper vipMapper;
     @Resource
     @Resource
     private RedisService redisService;
     private RedisService redisService;
     @Resource
     @Resource
@@ -944,5 +945,106 @@ public class RegisterServiceImpl implements RegisterService {
         }
         }
         return ResponseJson.success(clubTemporary);
         return ResponseJson.success(clubTemporary);
     }
     }
+
+    /**
+     * 现金买超级会员
+     */
+    @Override
+    public ResponseJson superVipUpgrade(SuperVipDto superVipDto, HttpHeaders headers) {
+
+
+        return null;
+    }
+
+    /**
+     * 采美豆买超级会员
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public ResponseJson superVipUpByBeans(SuperVipDto vipDto, HttpHeaders headers) {
+        Integer userId = vipDto.getUserId();
+        SuperVipPo superVip = vipMapper.findSuperVip(userId);
+        //库里没有则新增
+        if (null == superVip) {
+            //1.查用户采美豆,够就用采美豆下单,不够就返回信息
+            Integer userBeans = vipMapper.findUserBeans(userId);
+            Integer userPackage = vipDto.getUserPackage();
+            Double price = vipMapper.findUserPackage(userPackage);
+            if (Double.valueOf(userBeans) >= (price * 100)) {
+                //用户采美豆>=套餐需要的采美豆,调用采美豆支付方法
+                //传空表示新客户
+                beanPay(vipDto, null, 0);
+                return ResponseJson.success("支付采美豆购买成功");
+            }
+            return ResponseJson.error("用户采美豆不足,请确认后再支付", null);
+        }
+        if (superVip.getDelFlag() != 0) {
+            return ResponseJson.error("用户信息已删除,请确认后重试", null);
+        }
+        //库里有用户信息,查是否过期,没过期续费,过期重买
+        // 设置日期时间格式
+        Long current = System.currentTimeMillis();
+        Long endTime = superVip.getEndTime().getTime();
+        //现在时间大于过期时间则重买,重买begintime=now,不是重买的话begintime=supervip.getendtime否则续费
+        if (current >= endTime) {
+            beanPay(vipDto, null, 0);
+        } else {
+            beanPay(vipDto, superVip.getEndTime(), 1);
+        }
+        return ResponseJson.success("支付采美豆购买成功", null);
+    }
+
+    /**
+     * 超级会员支付采美豆买会员
+     *
+     * @param vipDto
+     * @param beginTime
+     */
+    private void beanPay(SuperVipDto vipDto, Date beginTime, Integer repayFlag) {
+        //1.user表扣豆子
+        Integer userId = vipDto.getUserId();
+        Integer userPackageId = vipDto.getUserPackage();
+        Double price = vipMapper.findUserPackage(userPackageId);
+        Integer userBeans = vipMapper.findUserBeans(userId);
+        vipMapper.updateUserBeans(vipDto.getUserId(), Integer.valueOf(String.valueOf(userBeans - price * 100)));
+        //2.改user权限
+        vipMapper.updateUserPermission(userId, 7);
+        vipMapper.updateUserIdentity(userId, 7);
+        //3.超级会员表更改
+        SuperVipPo superVip = vipMapper.findSuperVip(userId);
+        //重买标记是0生效时间就是now
+        if (repayFlag == 0) {
+            beginTime = new Date();
+            superVip.setBeginTime(beginTime);
+        }
+        superVip.setDelFlag(0);
+        superVip.setUserId(userId);
+        superVip.setUpdateTime(beginTime);
+        //4.改采美豆历史表和会员购买记录
+        VipPayHistoryPo payHistory = new VipPayHistoryPo();
+        payHistory.setUserId(userId);
+        payHistory.setUserBeans(price * 100);
+        payHistory.setPayTime(new Date());
+        payHistory.setPayWay(4);
+        payHistory.setPackageId(userPackageId);
+        payHistory.setPrice(0.00);
+        payHistory.setBeginTime(beginTime);
+        //给begintime加上套餐的时间变成到期时间
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(beginTime);
+        Integer userPackageTime = vipMapper.findUserPackageTime(userPackageId);
+        cal.add(Calendar.MONTH, userPackageTime);
+        payHistory.setEndTime(beginTime);
+        superVip.setEndTime(beginTime);
+        //加入超级会员表,重买标记是1,修改表
+        if (repayFlag == 1) {
+            vipMapper.updateVip(superVip);
+        }
+        vipMapper.addVip(superVip);
+        //加入会员购买记录
+        vipMapper.addPayHistory(payHistory);
+        //采美豆变更加入采美豆历史表
+        vipMapper.updateUserBeansHistory(userId, Integer.valueOf((int) (price * 100)));
+    }
 }
 }
 
 

+ 87 - 0
src/main/resources/mapper/SuperVipMapper.xml

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei365.user.mapper.SuperVipMapper">
+
+    <select id="findSuperVip" resultType="com.caimei365.user.model.po.SuperVipPo">
+        select beginTime, endTime, delFlag, updateTime
+        from cm_svip_user
+        where userId = #{#userId}
+    </select>
+
+    <select id="findUserBeans" resultType="java.lang.Integer">
+        select userBeans
+        from user
+        where userId = #{userId}
+    </select>
+
+    <update id="updateUserBeans">
+        update user
+        set userBeans=#{userBeans}
+        where userId = #{userId}
+    </update>
+
+    <update id="updateUserBeansHistory">
+        update user_beans_history
+        set num=#{userBeans},
+            type=2,
+            pushStatus=0,
+            addTime=now(),
+            beansType=14
+        where userId = #{userId}
+    </update>
+
+    <update id="updateUserPermission">
+        update user
+        set userPermission=#{userPermission}
+        where userId = #{userId}
+    </update>
+
+
+    <update id="updateUserIdentity">
+        update user
+        set userIdentity=#{userIdentity}
+        where userId = #{userId}
+    </update>
+
+    <select id="findUserPackage" resultType="java.lang.Double">
+        select price
+        from cm_svip_package
+        where id = #{userPackageId}
+    </select>
+
+    <insert id="addPayHistory">
+        insert into cm_svip_history (userId, packageId, beginTime,
+                                     endTime, payWay, payType, price,
+                                     userBeans, payTime)
+        values (#{userId}, #{packageId}, #{beginTime},
+                #{endTime}, #{payWay}, #{payType}, #{price}, #{userBeans},
+                #{payTime})
+    </insert>
+
+    <select id="findUserPackageTime" resultType="java.lang.Integer">
+        select duration
+        from cm_svip_package
+        where id = #{userPackageId}
+    </select>
+
+    <insert id="addVip">
+        insert into cm_svip_user(userId, beginTime, endTime, delFlag, updateTime)
+        values (#{userId}, #{beginTime}, #{endTime}, #{delFlag}, #{updateTime})
+    </insert>
+
+    <update id="updateVip">
+        update cm_svip_user
+        set
+        <if test="beginTime != null and beginTime != ''">
+            beginTime=#{beginTime},
+        </if>
+        <if test="updateTime != null and updateTime != ''">
+            updateTime=#{updateTime},
+        </if>
+        <if test="delFlag != null and delFlag != ''">
+            delFlag=#{delFlag},
+        </if>
+        endTime = #{endTime}
+        where userId = #{userId}
+    </update>
+</mapper>