瀏覽代碼

Merge remote-tracking branch 'origin/developerA' into developerA

chao 3 年之前
父節點
當前提交
8f1e0545ab

+ 54 - 40
src/main/java/com/caimei365/user/controller/BaseApi.java

@@ -7,6 +7,7 @@ import com.caimei365.user.service.BaseService;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
@@ -17,7 +18,7 @@ import java.util.Map;
  * @author : Charles
  * @date : 2021/3/4
  */
-@Api(tags="用户公共API")
+@Api(tags = "用户公共API")
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("/user")
@@ -28,8 +29,8 @@ public class BaseApi {
     private Boolean swaggerEnabled;
 
     @GetMapping("")
-    public String welcome(){
-        if (swaggerEnabled){
+    public String welcome() {
+        if (swaggerEnabled) {
             return "欢迎使用!<br><a href='http://47.119.112.46:18011/doc.html'>doc接口文档入口(beta)</a><br><a href='http://47.119.112.46:18011/swagger-ui/index.html'>swagger接口文档入口(beta)</a>";
         }
         return "欢迎使用!";
@@ -37,7 +38,7 @@ public class BaseApi {
 
     /**
      * 获取图片验证码
-     *
+     * <p>
      * spi旧接口:/user/getImgVerifyCode
      *
      * @param platformType 0:www,1:crm/h5,2:小程序
@@ -51,7 +52,7 @@ public class BaseApi {
 
     /**
      * 获取短信验证码
-     *
+     * <p>
      * spi旧接口:/user/activateCodeByReg
      *
      * @param mobile           手机号
@@ -63,12 +64,12 @@ public class BaseApi {
      */
     @ApiOperation("获取短信验证码")
     @ApiImplicitParams({
-        @ApiImplicitParam(required = true, name = "mobile", value = "手机号"),
-        @ApiImplicitParam(required = true, name = "activateCodeType", value = "1:找回密码,2:注册机构,3:供应商注册,4:更换联系人手机号-旧手机验证码,5:更换联系人手机号-新手机验证码"),
-        @ApiImplicitParam(required = false, name = "platformType", value = "0:www,1:crm/h5,2:小程序"),
-        @ApiImplicitParam(required = false, name = "isCheckCaptcha", value = "是否检查图片验证码,0:检查,1:不检查"),
-        @ApiImplicitParam(required = false, name = "imgCode", value = "图片验证码"),
-        @ApiImplicitParam(required = false, name = "token", value = "图片token")
+            @ApiImplicitParam(required = true, name = "mobile", value = "手机号"),
+            @ApiImplicitParam(required = true, name = "activateCodeType", value = "1:找回密码,2:注册机构,3:供应商注册,4:更换联系人手机号-旧手机验证码,5:更换联系人手机号-新手机验证码"),
+            @ApiImplicitParam(required = false, name = "platformType", value = "0:www,1:crm/h5,2:小程序"),
+            @ApiImplicitParam(required = false, name = "isCheckCaptcha", value = "是否检查图片验证码,0:检查,1:不检查"),
+            @ApiImplicitParam(required = false, name = "imgCode", value = "图片验证码"),
+            @ApiImplicitParam(required = false, name = "token", value = "图片token")
 
     })
     @GetMapping("/sms/code")
@@ -78,26 +79,26 @@ public class BaseApi {
 
     /**
      * 绑定账号,发送短信验证
-     *
+     * <p>
      * spi旧接口:/user/note
      *
-     * @param mobile           运营人员手机号
-     * @param bindMobile       机构手机号
-     * @param userId           机构Id
-     * @param platformType     0:www,1:crm/h5,2:小程序
-     * @param isCheckCaptcha   是否检查图片验证码,0:检查,1:不检查
-     * @param imgCode          图片验证码
-     * @param token            图片验证码token
+     * @param mobile         运营人员手机号
+     * @param bindMobile     机构手机号
+     * @param userId         机构Id
+     * @param platformType   0:www,1:crm/h5,2:小程序
+     * @param isCheckCaptcha 是否检查图片验证码,0:检查,1:不检查
+     * @param imgCode        图片验证码
+     * @param token          图片验证码token
      */
     @ApiOperation("绑定账号,发送短信验证")
     @ApiImplicitParams({
-        @ApiImplicitParam(required = true, name = "mobile", value = "运营人员手机号"),
-        @ApiImplicitParam(required = false, name = "bindMobile", value = "机构手机号"),
-        @ApiImplicitParam(required = false, name = "userId", value = "机构Id"),
-        @ApiImplicitParam(required = false, name = "platformType", value = "0:www,1:crm/h5,2:小程序"),
-        @ApiImplicitParam(required = false, name = "isCheckCaptcha", value = "是否检查图片验证码,0:检查,1:不检查"),
-        @ApiImplicitParam(required = false, name = "imgCode", value = "图片验证码"),
-        @ApiImplicitParam(required = false, name = "token", value = "图片token")
+            @ApiImplicitParam(required = true, name = "mobile", value = "运营人员手机号"),
+            @ApiImplicitParam(required = false, name = "bindMobile", value = "机构手机号"),
+            @ApiImplicitParam(required = false, name = "userId", value = "机构Id"),
+            @ApiImplicitParam(required = false, name = "platformType", value = "0:www,1:crm/h5,2:小程序"),
+            @ApiImplicitParam(required = false, name = "isCheckCaptcha", value = "是否检查图片验证码,0:检查,1:不检查"),
+            @ApiImplicitParam(required = false, name = "imgCode", value = "图片验证码"),
+            @ApiImplicitParam(required = false, name = "token", value = "图片token")
     })
     @GetMapping("/sms/bind")
     public ResponseJson getBindSmsCode(String mobile, String bindMobile, Integer userId, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
@@ -113,8 +114,8 @@ public class BaseApi {
      */
     @ApiOperation("获取邮箱验证码(旧:/user/mailbox)")
     @ApiImplicitParams({
-        @ApiImplicitParam(required = true, name = "email", value = "邮箱"),
-        @ApiImplicitParam(required = true, name = "status", value = "1:绑定邮箱,2邮箱注册,3邮箱找回秘密")
+            @ApiImplicitParam(required = true, name = "email", value = "邮箱"),
+            @ApiImplicitParam(required = true, name = "status", value = "1:绑定邮箱,2邮箱注册,3邮箱找回秘密")
     })
     @GetMapping("/mail/code")
     public ResponseJson sendMail(String email, Integer status) {
@@ -125,12 +126,12 @@ public class BaseApi {
      * 修改密码(找回密码)
      *
      * @param passwordDto {
-     *                           mobileOrEmail 手机号或邮箱
-     *                           smsCode       短信验证码(旧:activationCode)
-     *                           password      密码
-     *                           confirmPwd    确认密码
-     *                           status        1:手机号找回,2:邮箱找回
-     * }
+     *                    mobileOrEmail 手机号或邮箱
+     *                    smsCode       短信验证码(旧:activationCode)
+     *                    password      密码
+     *                    confirmPwd    确认密码
+     *                    status        1:手机号找回,2:邮箱找回
+     *                    }
      */
     @ApiOperation("修改密码(旧:/user/findCompanyPwd)")
     @PostMapping("/update/password")
@@ -142,12 +143,12 @@ public class BaseApi {
      * 更换联系人手机号
      *
      * @param mobileDto {
-     *                      mobile          旧手机号(contractMobile)
-     *                      smsCode         旧手机短信验证码(mobileCode)
-     *                      newMobile       新手机号(contractMobile2)
-     *                      newSmsCode      新手机短信验证码(mobileCode)
-     *                      userId          用户Id
-     * }
+     *                  mobile          旧手机号(contractMobile)
+     *                  smsCode         旧手机短信验证码(mobileCode)
+     *                  newMobile       新手机号(contractMobile2)
+     *                  newSmsCode      新手机短信验证码(mobileCode)
+     *                  userId          用户Id
+     *                  }
      */
     @ApiOperation("更换联系人手机号(旧:/club/changeMobile)")
     @PostMapping("/update/mobile")
@@ -155,4 +156,17 @@ public class BaseApi {
         return baseService.updateMobile(mobileDto);
     }
 
+    @ApiOperation("超级会员购买记录接口")
+    @GetMapping("super/history")
+    public ResponseJson findVipHistory(Integer userId,
+                                       @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                       @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
+        return baseService.findVipHistory(userId, pageNum, pageSize);
+    }
+
+    @ApiOperation("超级会员会员中心")
+    @GetMapping("super/center")
+    public ResponseJson<Map<String, Object>> superCenter(Integer userId) {
+        return baseService.superCenter(userId);
+    }
 }

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

@@ -247,6 +247,25 @@ public class RegisterApi {
         }
         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);
+    }
+
 }
 
 

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

@@ -0,0 +1,115 @@
+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 org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @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);
+
+    /**
+     * 查超级会员购买记录
+     * @param userId
+     * @return
+     */
+    List<VipPayHistoryPo> findVipHistory(@Param("userId") Integer userId);
+
+    /**
+     * 查会员是否过期
+     * @param userId
+     * @return
+     */
+    SuperVipPo findEndTime(Integer userId);
+}

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

@@ -0,0 +1,35 @@
+package com.caimei365.user.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author zzj
+ * 超级会员
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SuperVipDto implements Serializable {
+
+
+    @ApiModelProperty("用户Id")
+    private Integer userId;
+
+    /**
+     * 购买套餐id,1套餐12个月,2套餐3个月,3套餐1个月
+     */
+    @ApiModelProperty("购买套餐id")
+    private Integer userPackage;
+
+    @ApiModelProperty("套餐到期时间")
+    private Date endTime;
+
+    @ApiModelProperty("过期套餐标记,0未开通,-1过期,1未过期")
+    private String endFlag;
+}

+ 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;
+
+}

+ 4 - 0
src/main/java/com/caimei365/user/service/BaseService.java

@@ -90,4 +90,8 @@ public interface BaseService {
      * }
      */
     ResponseJson updateMobile(MobileDto mobileDto);
+
+    ResponseJson findVipHistory(Integer userId,Integer pageNum,Integer pageSize);
+
+    ResponseJson<Map<String, Object>> superCenter(Integer userId);
 }

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

@@ -142,4 +142,20 @@ public interface RegisterService {
      * @return
      */
     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);
 }

+ 98 - 33
src/main/java/com/caimei365/user/service/impl/BaseServiceImpl.java

@@ -3,23 +3,32 @@ package com.caimei365.user.service.impl;
 import com.caimei365.user.components.CommonService;
 import com.caimei365.user.mapper.BaseMapper;
 import com.caimei365.user.mapper.LoginMapper;
+import com.caimei365.user.mapper.SuperVipMapper;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.components.RedisService;
 import com.caimei365.user.model.dto.MobileDto;
 import com.caimei365.user.model.dto.PasswordDto;
+import com.caimei365.user.model.dto.SuperVipDto;
 import com.caimei365.user.model.po.ShopPo;
+import com.caimei365.user.model.po.SuperVipPo;
+import com.caimei365.user.model.po.VipPayHistoryPo;
+import com.caimei365.user.model.vo.ClubTemporaryVo;
 import com.caimei365.user.model.vo.ShopVo;
 import com.caimei365.user.model.vo.UserLoginVo;
 import com.caimei365.user.model.vo.UserVo;
 import com.caimei365.user.service.BaseService;
 import com.caimei365.user.utils.*;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 
@@ -32,6 +41,8 @@ import java.util.Map;
 @Slf4j
 @Service
 public class BaseServiceImpl implements BaseService {
+    @Resource
+    private SuperVipMapper vipMapper;
     @Resource
     private CommonService commonService;
     @Resource
@@ -68,7 +79,7 @@ public class BaseServiceImpl implements BaseService {
             }
             result.put("baseImage", captcha.getBase64Image());
             result.put("token", captcha.getMd5Code());
-            log.info("获取图片验证码:"+captcha.getCode() + ",token:" + captcha.getMd5Code());
+            log.info("获取图片验证码:" + captcha.getCode() + ",token:" + captcha.getMd5Code());
             return ResponseJson.success(result);
         } catch (Exception e) {
             log.info(e.getMessage());
@@ -86,7 +97,7 @@ public class BaseServiceImpl implements BaseService {
      */
     @Override
     public Boolean checkCaptchaImage(String token, String imgCode, Integer platformType) {
-        if (StringUtils.isBlank(token) || StringUtils.isBlank(imgCode)){
+        if (StringUtils.isBlank(token) || StringUtils.isBlank(imgCode)) {
             return false;
         }
         String captchaKey = ImageCaptchaUtil.getCaptchaKey(token, platformType);
@@ -114,9 +125,11 @@ public class BaseServiceImpl implements BaseService {
     public ResponseJson getSmsCode(String mobile, Integer activateCodeType, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
         // 验证手机号
         String result = ValidateUtil.validateMobile(mobile);
-        if (result != null) {return ResponseJson.error(result);}
+        if (result != null) {
+            return ResponseJson.error(result);
+        }
         // 检查图片验证码
-        if (null == isCheckCaptcha || 0 == isCheckCaptcha){
+        if (null == isCheckCaptcha || 0 == isCheckCaptcha) {
             Boolean checkFlag = checkCaptchaImage(token, imgCode, platformType);
             if (!checkFlag) {
                 return ResponseJson.error("图片验证码错误");
@@ -126,7 +139,7 @@ public class BaseServiceImpl implements BaseService {
         // 生成六位验证码
         String randomCode = CodeUtil.generateCodeInt(6);
         boolean isBeta = "dev".equals(profile) || "beta".equals(profile);
-        if (isBeta){
+        if (isBeta) {
             // 开发 和 测试环境 固定短信验证码 666666
             randomCode = "666666";
         }
@@ -140,7 +153,7 @@ public class BaseServiceImpl implements BaseService {
             // 找回密码
             sendFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 1, "{code:" + randomCode + "}");
             codeTypeTxt = "找回密码";
-        } else if (2 == activateCodeType || 3 == activateCodeType){
+        } else if (2 == activateCodeType || 3 == activateCodeType) {
             if (null != userId && userId > 0) {
                 return ResponseJson.error("该手机号已被使用");
             }
@@ -150,27 +163,27 @@ public class BaseServiceImpl implements BaseService {
                 codeTypeTxt = "机构(自主)注册";
             } else if (3 == activateCodeType) {
                 // 供应商(自主)注册
-                sendFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 9, "{code:"+ randomCode +"}");
+                sendFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 9, "{code:" + randomCode + "}");
                 codeTypeTxt = "供应商(自主)注册";
             } else {
                 return ResponseJson.error("参数错误:activateCodeType");
             }
         } else if (4 == activateCodeType) {
             // 您正在更换联系人手机号,您的验证码为:${code}。
-            sendFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 13, "{code:"+ randomCode +"}");
+            sendFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 13, "{code:" + randomCode + "}");
             codeTypeTxt = "更换联系人(旧手机号验证码)";
         } else if (5 == activateCodeType) {
             if (null != userId && userId > 0) {
                 return ResponseJson.error("该手机号已被使用");
             }
             // 您正在更换联系人手机号,您的验证码为:${code}。
-            sendFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 13, "{code:"+ randomCode +"}");
+            sendFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 13, "{code:" + randomCode + "}");
             codeTypeTxt = "更换联系人(新手机号验证码)";
         } else {
             return ResponseJson.error("参数错误:activateCodeType");
         }
         if (sendFlag) {
-            redisService.set("code:"+mobile, randomCode, 1800L);
+            redisService.set("code:" + mobile, randomCode, 1800L);
             log.info(codeTypeTxt + ",发送到:" + mobile + "的短信验证码为: " + randomCode);
         } else {
             log.info(codeTypeTxt + ",验证码发送失败!");
@@ -193,40 +206,44 @@ public class BaseServiceImpl implements BaseService {
     public ResponseJson getBindSmsCode(String mobile, String bindMobile, Integer userId, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
         // 验证手机号
         String result = ValidateUtil.validateMobile(mobile);
-        if (result != null) {return ResponseJson.error(result);}
+        if (result != null) {
+            return ResponseJson.error(result);
+        }
         // 检查图片验证码
-        if (null == isCheckCaptcha || 0 == isCheckCaptcha){
+        if (null == isCheckCaptcha || 0 == isCheckCaptcha) {
             Boolean checkFlag = checkCaptchaImage(token, imgCode, platformType);
             if (!checkFlag) {
                 return ResponseJson.error("图片验证码错误");
             }
         }
         Integer dbUserId = null;
-        if (StringUtils.isNotBlank(bindMobile)){
+        if (StringUtils.isNotBlank(bindMobile)) {
             result = ValidateUtil.validateMobile(bindMobile);
-            if (result != null) {return ResponseJson.error(result);}
+            if (result != null) {
+                return ResponseJson.error(result);
+            }
             // 根据手机号查询用户Id
             dbUserId = baseMapper.getUserIdByMobile(bindMobile);
-        } else if(null != userId) {
+        } else if (null != userId) {
             // 根据用户Id查询用户是否存在
             dbUserId = baseMapper.getUserIdByUserId(userId);
         }
-        if (null == dbUserId){
+        if (null == dbUserId) {
             return ResponseJson.error("你输入的账号不存在");
         }
         Integer operationUserId = baseMapper.getOperationUserIdByMobile(mobile);
-        if (null != operationUserId){
+        if (null != operationUserId) {
             // 判断运营人员是否是机构手机号
             Integer tempId = baseMapper.getUserIdByMobile(mobile);
-            if (null != tempId && tempId.equals(userId)){
+            if (null != tempId && tempId.equals(userId)) {
                 // 判断机构状态
                 Integer clubStatus = baseMapper.getClubStatusByUserId(operationUserId);
-                if(null != clubStatus && 91 != clubStatus) {
+                if (null != clubStatus && 91 != clubStatus) {
                     return ResponseJson.error("该手机号已被机构使用");
                 }
                 // 判断供应商状态
                 Integer shopStatus = baseMapper.getShopStatusByUserId(operationUserId);
-                if(null != shopStatus && 91 != shopStatus) {
+                if (null != shopStatus && 91 != shopStatus) {
                     return ResponseJson.error("该手机号已被供应商使用");
                 }
             }
@@ -234,20 +251,20 @@ public class BaseServiceImpl implements BaseService {
         // 生成六位验证码
         String randomCode = CodeUtil.generateCodeInt(6);
         boolean isBeta = "dev".equals(profile) || "beta".equals(profile);
-        if (isBeta){
+        if (isBeta) {
             // 开发 和 测试环境 固定短信验证码 666666
             randomCode = "666666";
         }
         String userName = baseMapper.getUserNameByUserId(userId);
         // 欢迎成为${name}的运营人员,您的邀请码为${code}。
-        boolean smsFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 11, "{name:"+ userName +",code:"+ randomCode +"}");
+        boolean smsFlag = isBeta || AliyunSmsUtil.sendSms(mobile, 11, "{name:" + userName + ",code:" + randomCode + "}");
         if (!smsFlag) {
             // 短信发送失败重试一次
-            smsFlag = AliyunSmsUtil.sendSms(mobile, 11, "{name:\""+ userName +"\",code:"+ randomCode +"}");
+            smsFlag = AliyunSmsUtil.sendSms(mobile, 11, "{name:\"" + userName + "\",code:" + randomCode + "}");
         }
         if (smsFlag) {
-            redisService.set("code:"+mobile, randomCode, 1800L);
-            log.info( "绑定账号,发送到:" + mobile + "的短信验证码为: " + randomCode);
+            redisService.set("code:" + mobile, randomCode, 1800L);
+            log.info("绑定账号,发送到:" + mobile + "的短信验证码为: " + randomCode);
             return ResponseJson.success("发送验证码成功");
         } else {
             return ResponseJson.error("验证码发送失败!请稍后重试");
@@ -271,7 +288,7 @@ public class BaseServiceImpl implements BaseService {
             // 生成六位验证码
             String randomCode = CodeUtil.generateCodeInt(6);
             boolean isBeta = "dev".equals(profile) || "beta".equals(profile);
-            if (isBeta){
+            if (isBeta) {
                 // 开发 和 测试环境 固定短信验证码 666666
                 randomCode = "666666";
             }
@@ -295,8 +312,8 @@ public class BaseServiceImpl implements BaseService {
                 subject = "采美365网修改密码验证邮件";
             }
             EmailUtil.sendMail(email, subject, html);
-            redisService.set("code:"+email, randomCode, 1800L);
-            log.info( "subject,发送到:" + email + "的验证码为: " + randomCode);
+            redisService.set("code:" + email, randomCode, 1800L);
+            log.info("subject,发送到:" + email + "的验证码为: " + randomCode);
         } catch (Exception e) {
             return ResponseJson.error("发送验证码失败");
         }
@@ -324,7 +341,9 @@ public class BaseServiceImpl implements BaseService {
         if (status == 1) {
             // 验证手机号
             String result = ValidateUtil.validateMobile(mobileOrEmail);
-            if (result != null) {return ResponseJson.error(result);}
+            if (result != null) {
+                return ResponseJson.error(result);
+            }
         } else {
             // 验证邮箱
             if (!ValidateUtil.validateEmail(mobileOrEmail)) {
@@ -336,7 +355,7 @@ public class BaseServiceImpl implements BaseService {
         }
         String redisSmsCode = (String) redisService.get("code:" + mobileOrEmail);
         // 开发 和 测试环境 固定短信验证码 666666
-        if ("dev".equals(profile) || "beta".equals(profile)){
+        if ("dev".equals(profile) || "beta".equals(profile)) {
             redisSmsCode = (null != redisSmsCode && !"null".equals(redisSmsCode) ? redisSmsCode : "666666");
         }
         if (!smsCode.equals(redisSmsCode)) {
@@ -401,10 +420,12 @@ public class BaseServiceImpl implements BaseService {
         }
         // 旧手机号与验证码校验
         String result = ValidateUtil.validateMobile(mobileDto.getMobile());
-        if (result != null) {return ResponseJson.error(result);}
+        if (result != null) {
+            return ResponseJson.error(result);
+        }
         String smsCode = (String) redisService.get("code:" + mobileDto.getMobile());
         // 开发 和 测试环境 固定短信验证码 666666
-        if ("dev".equals(profile) || "beta".equals(profile)){
+        if ("dev".equals(profile) || "beta".equals(profile)) {
             smsCode = (null != smsCode && !"null".equals(smsCode) ? smsCode : "666666");
         }
         if (!mobileDto.getSmsCode().equals(smsCode)) {
@@ -416,7 +437,9 @@ public class BaseServiceImpl implements BaseService {
         }
         //验证新手机号是否可用
         result = commonService.mobileAndCodeValidate(mobileDto.getNewMobile(), mobileDto.getNewSmsCode());
-        if (result != null) {return ResponseJson.error(result);}
+        if (result != null) {
+            return ResponseJson.error(result);
+        }
         // 更新user表手机号
         baseMapper.updateMobileByUserId(mobileDto.getNewMobile(), mobileDto.getUserId());
         if (user.getUserIdentity() == 3) {
@@ -429,4 +452,46 @@ public class BaseServiceImpl implements BaseService {
         return ResponseJson.success();
     }
 
+    /**
+     * 根据id查超级会员购买记录
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public ResponseJson findVipHistory(Integer userId, Integer pageNum, Integer pageSize) {
+        if (null == userId) {
+            return ResponseJson.error("参数异常:用户Id不能为空!", null);
+        }
+        PageHelper.startPage(pageNum, pageSize);
+        List<VipPayHistoryPo> vipHistory = vipMapper.findVipHistory(userId);
+        PageInfo<VipPayHistoryPo> pageInfo = new PageInfo<>(vipHistory);
+        return ResponseJson.success(pageInfo);
+    }
+
+    @Override
+    public ResponseJson<Map<String, Object>> superCenter(Integer userId) {
+        if (null == userId) {
+            return ResponseJson.error("参数异常:用户Id不能为空!", null);
+        }
+        //1.封装vipDto看超级会员是否过期,0未开通,-1过期,1未过期
+        SuperVipPo superVip = vipMapper.findSuperVip(userId);
+        SuperVipDto superVipDto = new SuperVipDto();
+        if (superVip == null) {
+            superVipDto.setEndFlag("0");
+        }
+        SuperVipPo endTime = vipMapper.findEndTime(userId);
+        if (endTime == null) {
+            superVipDto.setEndFlag("-1");
+            superVipDto.setEndTime(superVip.getEndTime());
+        }
+        superVipDto.setEndFlag("1");
+        superVipDto.setEndTime(endTime.getEndTime());
+        Map<String, Object> map = new HashMap(3);
+        map.put("vip", superVipDto);
+        //todo 2.查专属优惠卷
+
+        //todo 3.查专属商品
+        return ResponseJson.success(map);
+    }
 }

+ 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 dbPassword = baseUser.getPassword();
             if (md5Password.equals(dbPassword)) {
+                /**
+                 *     登录成功
+                 *
+                 */
+
                 if (baseUser.getUserIdentity() == 1) {
                     // 协销登录
                     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.RedisService;
 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.dto.*;
 import com.caimei365.user.model.po.*;
@@ -23,7 +20,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.Map;
 
@@ -37,6 +36,8 @@ import java.util.Map;
 @Service
 public class RegisterServiceImpl implements RegisterService {
 
+    @Resource
+    private SuperVipMapper vipMapper;
     @Resource
     private RedisService redisService;
     @Resource
@@ -944,5 +945,106 @@ public class RegisterServiceImpl implements RegisterService {
         }
         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)));
+    }
 }
 

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

@@ -0,0 +1,108 @@
+<?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>
+
+    <select id="findVipHistory" resultType="com.caimei365.user.model.po.VipPayHistoryPo">
+        select packageId,
+               beginTime,
+               endTime,
+               payWay,
+               payType,
+               price,
+               userBeans,
+               payTime
+        from cm_svip_history
+        where userId = #{userId}
+        order by payTime desc
+    </select>
+    <select id="findEndTime" resultType="com.caimei365.user.model.po.SuperVipPo">
+        select beginTime, endTime, delFlag, updateTime
+        from cm_svip_user
+        where userId = #{userId}
+          and (now() between beginTime and endTime)
+    </select>
+</mapper>