Forráskód Böngészése

采美豆购买会员终极版

zhijiezhao 3 éve
szülő
commit
e34dd3219e

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

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

+ 10 - 3
src/main/java/com/caimei365/user/mapper/SuperVipMapper.java

@@ -2,6 +2,7 @@ package com.caimei365.user.mapper;
 
 import com.caimei365.user.model.po.SuperVipPo;
 import com.caimei365.user.model.po.VipPayHistoryPo;
+import com.caimei365.user.model.vo.CouponVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -14,8 +15,14 @@ import java.util.List;
 @Mapper
 public interface SuperVipMapper {
 
-
-
+    /**
+     * 超级会员每个月卷
+     *
+     * @param userId 机构用户id
+     * @param useTime 当月月份
+     * @return
+     */
+    List<CouponVo> findVipCoupon(@Param("userId") Integer userId, @Param("useTime") Integer useTime);
     /**
      * 查vip信息
      *
@@ -46,7 +53,7 @@ public interface SuperVipMapper {
      * @param userId
      * @param userBeans
      */
-    void updateUserBeansHistory(Integer userId, Integer userBeans);
+    void addUserBeansHistory(Integer userId, Integer userBeans);
 
     /**
      * 用户权限修改

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

@@ -16,7 +16,7 @@ import java.util.Date;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-public class SuperVipPo implements Serializable {
+public class SuperVipPo extends VipPayHistoryPo implements Serializable {
 
     /**
      *     CREATE TABLE `cm_svip_user`(

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

@@ -15,6 +15,7 @@ import java.util.Date;
 @AllArgsConstructor
 @NoArgsConstructor
 public class VipPayHistoryPo implements Serializable {
+
     private Integer userId;
     /**
      * 套餐id

+ 91 - 0
src/main/java/com/caimei365/user/model/vo/CouponVo.java

@@ -0,0 +1,91 @@
+package com.caimei365.user.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : plf
+ * @date : 2021/8/12
+ */
+@Data
+public class CouponVo implements Serializable {
+
+
+    /**
+     * 领券时间
+     */
+    @JsonFormat(pattern = "yyyy.MM.dd", timezone = "GMT+8")
+    private Date getTime;
+    /**
+     * 优惠券id
+     */
+    private Integer couponId;
+
+    /**
+     * 优惠券金额(面值)
+     */
+    private BigDecimal couponAmount;
+
+    /**
+     * 优惠满减条件金额
+     */
+    private BigDecimal touchPrice;
+
+    /**
+     * 使用开始时间(有效期)
+     */
+    @JsonFormat(pattern = "yyyy.MM.dd", timezone = "GMT+8")
+    private Date startDate;
+
+    /**
+     * 使用结束时间(有效期)
+     */
+    @JsonFormat(pattern = "yyyy.MM.dd", timezone = "GMT+8")
+    private Date endDate;
+
+    /**
+     * 劵类型 0活动券 1品类券 2用户专享券 3店铺券 4新用户券
+     */
+    private Integer couponType;
+
+    /**
+     * 机构用户id(用户专享券有效)
+     */
+    private Integer userId;
+
+    /**
+     * 供应商id(店铺券有效)
+     */
+    private Integer shopId;
+
+    /**
+     * 优惠商品:1全商城商品 2指定商品(活动券有效)
+     */
+    private Integer productType;
+
+    /**
+     * 优惠品类:1产品 2仪器(品类券有效)
+     */
+    private Integer categoryType;
+
+    /**
+     * 供应商名称
+     */
+    private String shopName;
+
+    /**
+     * 使用状态: 1未使用 2已使用 3已失效
+     */
+    private Integer useStatus;
+
+    /**
+     * 领取状态: 0未领取 1已领取 (前端使用)
+     */
+    private Integer couponBtnType = 0;
+}

+ 1 - 1
src/main/java/com/caimei365/user/model/vo/UserLoginVo.java

@@ -18,7 +18,7 @@ public class UserLoginVo implements Serializable {
     /**
      * 过期标记
      */
-    @ApiModelProperty("过期套餐标记,0未买过,-1过期,1有效/无过期时间接口0不是会员,1是")
+    @ApiModelProperty("过期套餐标记,0未买过,-1过期,1有效/无过期时间接口0不是会员,1是会员")
     private Integer vipFlag;
     /**
      * 用户Id

+ 3 - 2
src/main/java/com/caimei365/user/service/RegisterService.java

@@ -4,6 +4,7 @@ import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.*;
 import com.caimei365.user.model.vo.ClubTemporaryVo;
 import org.springframework.http.HttpHeaders;
+import org.springframework.web.bind.annotation.RequestHeader;
 
 /**
  * Description
@@ -153,9 +154,9 @@ public interface RegisterService {
 
     /**
      * 采美豆购买超级会员
-     * @param superVipDto
+     * @param
      * @param headers
      * @return
      */
-    ResponseJson superVipUpByBeans(SuperVipDto superVipDto, HttpHeaders headers);
+    ResponseJson superVipUpByBeans(Integer userId, Integer packageId, HttpHeaders headers);
 }

+ 3 - 2
src/main/java/com/caimei365/user/service/impl/BaseServiceImpl.java

@@ -497,9 +497,10 @@ public class BaseServiceImpl implements BaseService {
             if (endTime == null) {
                 superVipDto.setVipFlag(-1);
                 superVipDto.setEndTime(superVip.getEndTime());
+            }else{
+                superVipDto.setVipFlag(1);
+                superVipDto.setEndTime(superVip.getEndTime());
             }
-            superVipDto.setVipFlag(1);
-            superVipDto.setEndTime(endTime.getEndTime());
         }
         return superVipDto;
     }

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

@@ -86,7 +86,7 @@ public class LoginServiceImpl implements LoginService {
         }
         //处理比对密码
         UserLoginVo baseUser = loginMapper.getLoginUserByMobileOrEmail(mobileOrEmail);
-        
+
         if (baseUser != null) {
             // 如果前端传入unionId,则存入返回前端
             baseUser.setUnionId(unionId);
@@ -685,13 +685,13 @@ public class LoginServiceImpl implements LoginService {
             if (endTime == null) {
                 superVipDto.setVipFlag(-1);
                 superVipDto.setEndTime(superVip.getEndTime());
+            } else {
+                superVipDto.setVipFlag(1);
+                superVipDto.setEndTime(endTime.getEndTime());
             }
-            superVipDto.setVipFlag(1);
-            superVipDto.setEndTime(endTime.getEndTime());
         }
         return superVipDto;
     }
 
 
-
 }

+ 71 - 41
src/main/java/com/caimei365/user/service/impl/RegisterServiceImpl.java

@@ -13,13 +13,17 @@ import com.caimei365.user.utils.AliyunSmsUtil;
 import com.caimei365.user.utils.CodeUtil;
 import com.caimei365.user.utils.Md5Util;
 import com.caimei365.user.utils.ValidateUtil;
+import io.netty.util.internal.MathUtil;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestHeader;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
@@ -961,27 +965,27 @@ public class RegisterServiceImpl implements RegisterService {
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public ResponseJson superVipUpByBeans(SuperVipDto vipDto, HttpHeaders headers) {
-        Integer userId = vipDto.getUserId();
+    public ResponseJson superVipUpByBeans(Integer userId, Integer packageId, HttpHeaders headers) {
         SuperVipDto endFlag = findEnd(userId);
+        Integer userBeans = vipMapper.findUserBeans(userId);
+        Double price = vipMapper.findUserPackage(packageId);
         //过期和没买过都是生效时间重置,到期时间=现在+套餐时间
-        if (endFlag.getVipFlag() == 0 || endFlag.getVipFlag()==-1) {
-            Integer userBeans = vipMapper.findUserBeans(userId);
-            Integer userPackage = vipDto.getUserPackage();
-            Double price = vipMapper.findUserPackage(userPackage);
+        if (endFlag.getVipFlag() == 0 || endFlag.getVipFlag() == -1) {
             //1.查用户采美豆,够就用采美豆下单,不够就返回信息
             if (Double.valueOf(userBeans) >= (price * 100)) {
                 //用户采美豆>=套餐需要的采美豆,调用采美豆支付方法
                 //传空表示新客户
-                beanPay(vipDto, null, 0);
+                beanPay(userId, packageId, null, endFlag.getVipFlag());
+                return ResponseJson.success("支付采美豆购买成功");
+            }
+            return ResponseJson.error("用户采美豆不足,请确认后再支付", null);
+        } else {
+            if (Double.valueOf(userBeans) >= (price * 100)) {
+                //续费生效时间不变,原到期时间+套餐时间
+                beanPay(userId, packageId, endFlag.getEndTime(), endFlag.getVipFlag());
                 return ResponseJson.success("支付采美豆购买成功");
             }
             return ResponseJson.error("用户采美豆不足,请确认后再支付", null);
-        }
-        else{
-            //续费生效时间不变,原到期时间+套餐时间
-            beanPay(vipDto, endFlag.getEndTime(), 1);
-            return ResponseJson.success("支付采美豆购买成功", null);
         }
     }
 
@@ -999,75 +1003,101 @@ public class RegisterServiceImpl implements RegisterService {
             if (endTime == null) {
                 superVipDto.setVipFlag(-1);
                 superVipDto.setEndTime(superVip.getEndTime());
+            } else {
+                superVipDto.setVipFlag(1);
+                superVipDto.setEndTime(endTime.getEndTime());
             }
-            superVipDto.setVipFlag(1);
-            superVipDto.setEndTime(endTime.getEndTime());
         }
         return superVipDto;
     }
 
     /**
      * 支付采美豆买会员
+     * flag=0未买过,-1过期,1有效,endTime过期时间
      *
-     * @param vipDto
+     * @param
      * @param beginTime
      */
-    private void beanPay(SuperVipDto vipDto, Date beginTime, Integer repayFlag) {
+    private void beanPay(Integer userId, Integer packageId, Date beginTime, Integer repayFlag) {
         //1.user表扣豆子
-        Integer userId = vipDto.getUserId();
-        Integer userPackageId = vipDto.getUserPackage();
-        Double price = vipMapper.findUserPackage(userPackageId);
+        Double price = vipMapper.findUserPackage(packageId);
         Integer userBeans = vipMapper.findUserBeans(userId);
-        vipMapper.updateUserBeans(vipDto.getUserId(), Integer.valueOf(String.valueOf(userBeans - price * 100)));
-        //采美豆消费表记录
-        vipMapper.updateUserBeansHistory(userId, Integer.valueOf((int) (price * 100)));
+        Long l = Math.multiplyExact(Math.round(price), 100);
+        Long beans = Long.valueOf(userBeans);
+        Long result = Math.subtractExact(beans, l);
+        String s = result.toString();
+        vipMapper.updateUserBeans(userId, Integer.valueOf(s));
+        //采美豆消费表记录消费
+        vipMapper.addUserBeansHistory(userId, Integer.valueOf((int) (price * 100)));
+        Calendar cal = Calendar.getInstance();
         if (repayFlag == 0) {
             SuperVipPo superVip = new SuperVipPo();
             beginTime = new Date();
+            superVip.setPrice(price);
+            superVip.setPackageId(packageId);
             superVip.setBeginTime(beginTime);
             superVip.setUpdateTime(beginTime);
             superVip.setDelFlag(0);
             superVip.setUserId(userId);
-            Calendar cal = Calendar.getInstance();
             cal.setTime(beginTime);
-            Integer userPackageTime = vipMapper.findUserPackageTime(userPackageId);
+            Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
             cal.add(Calendar.MONTH, userPackageTime);
-            superVip.setEndTime(beginTime);
+            superVip.setEndTime(cal.getTime());
             //2.超级会员表更改,重买标记是0生效时间就是now
             vipMapper.addVip(superVip);
             //购买记录表加数据
-            setHistory(userId,price,userPackageId,beginTime);
-        }else{
+            setHistory(superVip);
+        } else if (repayFlag == 1) {
+            //有效期内续费
             SuperVipPo superVip = vipMapper.findSuperVip(userId);
             superVip.setUpdateTime(new Date());
-            Calendar cal = Calendar.getInstance();
+            superVip.setPackageId(packageId);
+            superVip.setPrice(price);
             //续费加时间
             cal.setTime(beginTime);
-            Integer userPackageTime = vipMapper.findUserPackageTime(userPackageId);
+            Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
+            cal.add(Calendar.MONTH, userPackageTime);
+            superVip.setEndTime(cal.getTime());
+            //vip表改到期时间
+            vipMapper.updateVip(superVip);
+            //购买记录表加数据
+            setHistory(superVip);
+        } else if (repayFlag == -1) {
+            //过期续费
+            SuperVipPo superVip = vipMapper.findSuperVip(userId);
+            superVip.setUpdateTime(new Date());
+            superVip.setPackageId(packageId);
+            superVip.setPrice(price);
+            //重设生效起始时间
+            beginTime=new Date();
+            superVip.setBeginTime(beginTime);
+            //到期时间现在时间+套餐时间
+            cal.setTime(beginTime);
+            Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
             cal.add(Calendar.MONTH, userPackageTime);
-            superVip.setEndTime(beginTime);
+            superVip.setEndTime(cal.getTime());
+            //vip表改到期时间
             vipMapper.updateVip(superVip);
             //购买记录表加数据
-            setHistory(userId,price,userPackageId,beginTime);
+            setHistory(superVip);
         }
+        log.info(userId + "消费采美豆" + l + "会员到期时间至" + cal.getTime());
     }
 
     /**
      * 修改超级会员记录表
-     * @param userId
-     * @param price
-     * @param userPackageId
-     * @param beginTime
+     *
      */
-    private void setHistory(Integer userId,Double price,Integer userPackageId,Date beginTime){
+    private void setHistory(SuperVipPo vip) {
         VipPayHistoryPo payHistory = new VipPayHistoryPo();
-        payHistory.setUserId(userId);
-        payHistory.setUserBeans(price * 100);
-        payHistory.setPayTime(new Date());
+        payHistory.setUserId(vip.getUserId());
+        payHistory.setUserBeans(vip.getPrice() * 100);
+        payHistory.setPayTime(vip.getUpdateTime());
         payHistory.setPayWay(4);
-        payHistory.setPackageId(userPackageId);
+        payHistory.setPackageId(vip.getPackageId());
         payHistory.setPrice(0.00);
-        payHistory.setBeginTime(beginTime);
+        payHistory.setBeginTime(vip.getBeginTime());
+        payHistory.setEndTime(vip.getEndTime());
         vipMapper.addPayHistory(payHistory);
     }
 }

+ 37 - 18
src/main/resources/mapper/SuperVipMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.caimei365.user.mapper.SuperVipMapper">
 
     <select id="findSuperVip" resultType="com.caimei365.user.model.po.SuperVipPo">
-        select beginTime, endTime, updateTime
+        select userId, beginTime, endTime, updateTime
         from cm_svip_user
         where userId = #{#userId}
     </select>
@@ -20,15 +20,11 @@
         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>
+    <insert id="addUserBeansHistory">
+        insert into user_beans_history
+            (num, type, pushStatus, addTime, beansType, userId)
+        values (#{userBeans}, 2, 0, now(), 14, #{userId})
+    </insert>
 
     <update id="updateUserPermission">
         update user
@@ -73,17 +69,17 @@
     <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 test="beginTime != null">
+            beginTime = #{beginTime},
         </if>
         <if test="delFlag != null and delFlag != ''">
-            delFlag=#{delFlag},
+            delFlag= #{delFlag},
+        </if>
+        <if test="endTime != null">
+            endTime = #{endTime},
         </if>
-        <if test="endTime!=null and endTime!=''">
-            endTime = #{endTime}
+        <if test="updateTime != null">
+            updateTime = #{updateTime}
         </if>
         where userId = #{userId}
     </update>
@@ -108,4 +104,27 @@
         where userId = #{userId}
           and endTime > now()
     </select>
+
+
+    <select id="findVipCoupon" resultType="com.caimei365.user.model.vo.CouponVo">
+        SELECT cc.`id` AS "couponId",
+        cc.`couponAmount`,
+        cc.`touchPrice`,
+        cc.`startDate`,
+        cc.`endDate`,
+        cc.`couponType`,
+        cc.`userId`,
+        cc.`shopId`,
+        cc.`productType`,
+        cc.`categoryType`
+        FROM cm_coupon cc
+        INNER JOIN cm_svip_coupon cs ON cs.couponId = cc.id
+        WHERE cc.delFlag = 0
+        AND cc.status != 2
+        <if test="useTime != null and userTime != ''">
+            AND cs.useTime=#{userTime}
+        </if>
+        ORDER BY cs.created_time DESC
+    </select>
+
 </mapper>

+ 32 - 2
src/test/java/com/caimei365/user/UserApplicationTests.java

@@ -1,11 +1,18 @@
 package com.caimei365.user;
 
+import com.caimei365.user.mapper.SuperVipMapper;
+import com.caimei365.user.model.po.SuperVipPo;
 import com.caimei365.user.utils.AliyunSmsUtil;
 import com.caimei365.user.utils.CodeUtil;
 import com.caimei365.user.utils.ValidateUtil;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
 @SpringBootTest
 class UserApplicationTests {
 
@@ -15,7 +22,7 @@ class UserApplicationTests {
         System.out.println(b);
     }*/
 
-//    @Test
+    //    @Test
 //    void sms(){
 //        String mobile = "15814011616";
 //        String randomCode = CodeUtil.generateCodeInt(6);
@@ -24,6 +31,29 @@ class UserApplicationTests {
 //        AliyunSmsUtil.sendSms(mobile, 11, "{name:\""+ name +"\",code:" + randomCode + "}");
 //
 //    }
-
+//    @Test
+//    public static void main(String[] args) {
+//        Calendar cal = Calendar.getInstance();
+//        Date now = new Date();
+//        System.out.println(now);
+//        cal.setTime(now);
+//        cal.add(Calendar.MONTH,1);
+//        System.out.println(cal.getTime());
+//    }
+//    @Resource
+//    SuperVipMapper mapper;
+//
+//    @Test
+//    void testmap(){
+//        Calendar cal = Calendar.getInstance();
+//        SuperVipPo vip = new SuperVipPo();
+//        Date date = new Date();
+//        vip.setUpdateTime(date);
+//        cal.setTime(date);
+//        cal.add(Calendar.MONTH,36);
+//        vip.setUserId(13990);
+//        vip.setEndTime(cal.getTime());
+//        mapper.updateVip(vip);
+//    }
 
 }