刘俊驰 8 hónapja
szülő
commit
1bd8a29979

+ 4 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/VipCardRecordController.java

@@ -1,12 +1,14 @@
 package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.enums.EVipRecordStatus;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
@@ -31,6 +33,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("${app-config.url.admin:}/vipCardRecord")
@@ -81,7 +84,7 @@ public class VipCardRecordController extends BaseController {
         // 判断是否有待支付订单 如果有返回不可下单
         OrderSearch search = new OrderSearch();
         search.setOrderClient(addVipCardRecord.getClientType().name());
-        search.setGoodType(addVipCardRecord.getVipType().name());
+        search.setGoodType(Lists.newArrayList(GoodTypeEnum.VIP, GoodTypeEnum.SVIP).stream().map(GoodTypeEnum::name).collect(Collectors.joining(",")));
         search.setUserId(addVipCardRecord.getUserId());
 
         UserOrderVo userOrderVo = userOrderDao.getPendingOrder(search);

+ 1 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java

@@ -2,8 +2,6 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -11,15 +9,11 @@ import com.yonge.cooleshow.biz.dal.enums.EVipType;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
-import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -106,7 +100,7 @@ public interface VipCardRecordService extends IService<VipCardRecord> {
      * @param clientEnum
      * @return
      */
-    VipCardRecordWrapper.UserVip UserVipInfo(Long userId, ClientEnum clientEnum);
+    VipCardRecordWrapper.UserVip userVipInfo(Long userId, ClientEnum clientEnum);
 
     void add(VipCardRecordWrapper.AddVipCardRecord addVipCardRecord);
 

+ 18 - 21
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java

@@ -3,11 +3,11 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
-import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
@@ -24,16 +24,12 @@ import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
-import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.ActivityShareEnum;
-import com.yonge.cooleshow.common.enums.RewardTypeEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.string.MessageFormatter;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.date.DateUtil;
-import jodd.time.TimeUtil;
 import org.joda.time.DateTime;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -148,7 +145,7 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
     private void checkVip(MemberPriceSettingsVo detail, Integer vipDays, Long userId, ClientEnum client, Integer num) {
         // 判断会员剩余天数是否改变
         if (detail.getVipType() == EVipType.SVIP && vipDays != null && vipDays > 0) {
-            VipCardRecordWrapper.UserVip userVip = vipCardRecordService.UserVipInfo(userId, client);
+            VipCardRecordWrapper.UserVip userVip = vipCardRecordService.userVipInfo(userId, client);
             if (!userVip.getVipEndDays().equals(vipDays)) {
                 throw new BizException(998, "您当前VIP天数更新,请刷新后尝试");
             }
@@ -223,7 +220,7 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
         // 判断转换天数
 
-        VipCardRecordWrapper.UserVip userVip = vipCardRecordService.UserVipInfo(orderDetailVo.getUserId(), orderDetailVo.getOrderClient());
+        VipCardRecordWrapper.UserVip userVip = vipCardRecordService.userVipInfo(orderDetailVo.getUserId(), orderDetailVo.getOrderClient());
         int svipDays = getSvipDays(detail, orderDetailVo.getGoodNum(), userVip);
         if (detail.getVipType() == EVipType.SVIP &&userVip.getVipEndDays() !=null && svipDays >=userVip.getVipEndDays()) {
             addVipCardRecord.setVipDays(userVip.getVipEndDays());
@@ -357,20 +354,20 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         return result;
     }
 
-    @Deprecated
+//    @Deprecated
 //    @Override
-    public Boolean addVip(VipSubmitReq vipSubmitReq, ClientEnum client, SysUser sysUser) {
-
-        VipCardRecord vipCardRecord = vipCardRecordService.getVipCardRecord(vipSubmitReq.getUserId(), client, null, null, vipSubmitReq.getType().toString(),
-                            null, vipSubmitReq.getTimes(),SourceTypeEnum.PLATFORM, sysUser.getId(), vipSubmitReq.getReason());
-
-        getUserVipInfoVo(vipCardRecord);
-
-        // 发消息
-        sendAddVipMessage(vipSubmitReq.getUserId(),sysUser.getPhone(),client,vipSubmitReq.getTimes(),vipSubmitReq.getType(),vipSubmitReq.getReason());
-
-        return true;
-    }
+//    public Boolean addVip(VipSubmitReq vipSubmitReq, ClientEnum client, SysUser sysUser) {
+//
+//        VipCardRecord vipCardRecord = vipCardRecordService.getVipCardRecord(vipSubmitReq.getUserId(), client, null, null, vipSubmitReq.getType().toString(),
+//                            null, vipSubmitReq.getTimes(),SourceTypeEnum.PLATFORM, sysUser.getId(), vipSubmitReq.getReason());
+//
+//        getUserVipInfoVo(vipCardRecord);
+//
+//        // 发消息
+//        sendAddVipMessage(vipSubmitReq.getUserId(),sysUser.getPhone(),client,vipSubmitReq.getTimes(),vipSubmitReq.getType(),vipSubmitReq.getReason());
+//
+//        return true;
+//    }
 
     @Override
     public MemberPriceVo getVipShare(MemberPriceSettingsSearch query) {
@@ -465,7 +462,7 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         // 判断是否有待支付订单 如果有返回不可下单
         OrderSearch search = new OrderSearch();
         search.setOrderClient(orderGoodsInfo.name());
-        search.setGoodType(orderType);
+        search.setGoodType(Lists.newArrayList(GoodTypeEnum.VIP, GoodTypeEnum.SVIP).stream().map(GoodTypeEnum::name).collect(Collectors.joining(",")));
         search.setUserId(userId);
 
         UserOrderVo userOrderVo = userOrderDao.getPendingOrder(search);

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -136,7 +136,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     @Override
     public StudentVo detail(Long userId) {
         StudentVo detail = baseMapper.detail(userId);
-        VipCardRecordWrapper.UserVip userVip = vipCardRecordService.UserVipInfo(userId, ClientEnum.STUDENT);
+        VipCardRecordWrapper.UserVip userVip = vipCardRecordService.userVipInfo(userId, ClientEnum.STUDENT);
         detail.setUserVip(userVip);
         detail.setVipType(EUserVipType.NORMAL);
         List<VipCardRecordWrapper.UserVipInfo> userVipInfos = vipCardRecordService.queryUserVipInfo(Collections.singletonList(userId), ClientEnum.STUDENT.getCode());
@@ -222,7 +222,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         // 设置会员信息
 
 
-        studentHomeVo.setUserVip(vipCardRecordService.UserVipInfo(user.getId(), ClientEnum.STUDENT));
+        studentHomeVo.setUserVip(vipCardRecordService.userVipInfo(user.getId(), ClientEnum.STUDENT));
 
 
         // IM聊天用户ID

+ 2 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -56,7 +56,6 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.biz.dal.wordfilter.WordFilter;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
-import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
@@ -231,7 +230,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
 
         // 会员信息
-        detail.setUserVip(vipCardRecordService.UserVipInfo(detail.getUserId(), ClientEnum.TEACHER));
+        detail.setUserVip(vipCardRecordService.userVipInfo(detail.getUserId(), ClientEnum.TEACHER));
         List<VipCardRecordWrapper.UserVipInfo> userVipInfos = vipCardRecordService.queryUserVipInfo(Collections.singletonList(userId), ClientEnum.TEACHER.getCode());
         Map<Long, VipCardRecordWrapper.UserVipInfo> curVipMap = userVipInfos.stream().collect(Collectors.toMap(VipCardRecordWrapper.UserVipInfo::getUserId, Function.identity()));
         VipCardRecordWrapper.UserVipInfo vipType = curVipMap.getOrDefault(userId, new VipCardRecordWrapper.UserVipInfo());
@@ -395,7 +394,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
         // 会员信息
 
-        teacherHomeVo.setUserVip(vipCardRecordService.UserVipInfo(teacherHomeVo.getUserId(), ClientEnum.TEACHER));
+        teacherHomeVo.setUserVip(vipCardRecordService.userVipInfo(teacherHomeVo.getUserId(), ClientEnum.TEACHER));
 
 
         if (YesOrNoEnum.YES.equals(teacher.getMusicianFlag())) {

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -27,6 +27,7 @@ import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -157,6 +158,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private TenantAlbumPurchaseService tenantAlbumPurchaseService;
 
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+
+
     //验证订单是否可以下单,获取订单金额信息
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
@@ -292,6 +297,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 if (o.getGoodType().equals(GoodTypeEnum.TENANT_ALBUM) && userOrderVo.getOrderClient().equals(ClientEnum.TENANT)) {
                     TenantAlbumPurchase albumPurchase = tenantAlbumPurchaseService.getByOrderNo(userOrderVo.getOrderNo());
                     o.getBizInfo().setRecordId(albumPurchase.getId());
+                } else if (o.getGoodType().equals(GoodTypeEnum.SVIP)) {
+                    VipCardRecordWrapper.UserVip userVip = vipCardRecordService.userVipInfo(o.getUserId(), o.getOrderClient());
+                    o.setVipEndDays(userVip.getVipEndDays());
                 }
             });
 
@@ -700,7 +708,12 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Override
     public HttpResponseResult<UserOrderVo> getPendingOrder(OrderSearch query) {
+        if (query.getGoodType().equals(GoodTypeEnum.VIP.name()) || query.getGoodType().equals(GoodTypeEnum.SVIP.name())) {
+            query.setGoodType(Lists.newArrayList(GoodTypeEnum.VIP, GoodTypeEnum.SVIP).stream().map(GoodTypeEnum::name).collect(Collectors.joining(",")));
+        }
         UserOrderVo userOrderVo = baseMapper.getPendingOrder(query);
+
+        // SVIP和VIP同时只能存在一个待支付订单
         if (null != userOrderVo) {
             userOrderVo.setOrderDetailList(orderDetailService.getOrderDetilListByOrderNo(userOrderVo.getOrderNo()));
 

+ 24 - 28
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java

@@ -97,23 +97,20 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
             return null;
         }
         // 按时间区分 个数
-        Integer timeNum = 0;
+        Integer timeNum = orderDetailVo.getGoodNum();
         String periodType  = null;
 
         if (PeriodEnum.DAY.equals(detail.getPeriod())) {
-            timeNum = 1;
             periodType = PeriodEnum.DAY.getCode();
         } else if (PeriodEnum.MONTH.equals(detail.getPeriod())) {
-            timeNum = 1;
             periodType = PeriodEnum.MONTH.getCode();
         } else if (PeriodEnum.QUARTERLY.equals(detail.getPeriod())) {
-            timeNum = 3;
+            timeNum = timeNum*3;
             periodType = PeriodEnum.MONTH.getCode();
         } else if (PeriodEnum.YEAR_HALF.equals(detail.getPeriod())) {
-            timeNum = 6;
+            timeNum = timeNum*6;
             periodType = PeriodEnum.MONTH.getCode();
         } else if (PeriodEnum.YEAR.equals(detail.getPeriod())) {
-            timeNum = 1;
             periodType = PeriodEnum.YEAR.getCode();
         }
 
@@ -131,23 +128,6 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
     @Override
     public VipCardRecord getVipCardRecord(Long userId, ClientEnum client, String orderNo, String subOrderNo, String periodType,
                                           Long memberPriceSettingsId, Integer timeNum, SourceTypeEnum sourceType, Long createBy, String reason) {
-        //修改用户会员时长
-        Date membershipEndTime = null;
-        if (client.equals(ClientEnum.STUDENT)) {
-            StudentVo studentVo = studentService.detail(userId);
-            if (null == studentVo) {
-                return null;
-            }
-            membershipEndTime = studentVo.getMembershipEndTime();
-        } else if (client.equals(ClientEnum.TEACHER)){
-            TeacherVo teacherVo = teacherService.detail(userId);
-            if (null == teacherVo) {
-                return null;
-            }
-            membershipEndTime = teacherVo.getMembershipEndTime();
-        } else {
-            return null;
-        }
 
         VipCardRecord vipCardRecord = new VipCardRecord();
         vipCardRecord.setUserId(userId);
@@ -162,11 +142,27 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         vipCardRecord.setCreateBy(createBy);
         vipCardRecord.setReason(reason);
 
-        if (null == membershipEndTime || membershipEndTime.before(new Date())) {
-            //没有会员、会员已过期 会员卡生效时间为当前时间
+        MemberPriceSettings memberPriceSettings = memberPriceSettingsDao.selectById(memberPriceSettingsId);
+        if (memberPriceSettings == null) {
+            return null;
+        }
+
+        VipCardRecordWrapper.UserVip userVip = userVipInfo(userId, client);
+
+        if (userVip.getVipType() == EVipType.NOT_VIP) {
             vipCardRecord.setStartTime(new Date());
-        } else {
-            vipCardRecord.setStartTime(membershipEndTime);
+        } else if (userVip.getVipType() == EVipType.VIP && memberPriceSettings.getVipType() ==EVipType.VIP){
+            vipCardRecord.setStartTime(userVip.getVipEndDate());
+        } else if  (userVip.getVipType() == EVipType.VIP && memberPriceSettings.getVipType() ==EVipType.SVIP){
+            vipCardRecord.setStartTime(new Date());
+        }else if  (userVip.getVipType() == EVipType.SVIP && memberPriceSettings.getVipType() ==EVipType.VIP){
+            if (userVip.getVipEndDate() !=null) {
+                vipCardRecord.setStartTime(userVip.getVipEndDate());
+            } else {
+                vipCardRecord.setStartTime(userVip.getSvipEndDate());
+            }
+        }else if  (userVip.getVipType() == EVipType.SVIP && memberPriceSettings.getVipType() ==EVipType.SVIP){
+            vipCardRecord.setStartTime(userVip.getSvipEndDate());
         }
         Calendar cal = Calendar.getInstance();
         cal.setTime(vipCardRecord.getStartTime());
@@ -273,7 +269,7 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
      * @return
      */
     @Override
-    public VipCardRecordWrapper.UserVip UserVipInfo(Long userId, ClientEnum clientEnum) {
+    public VipCardRecordWrapper.UserVip userVipInfo(Long userId, ClientEnum clientEnum) {
         // 获取生效中的会员记录
         VipCardRecordWrapper.UserVip userVip = new VipCardRecordWrapper.UserVip();
         List<VipCardRecord> vipCardRecords = this.getEfficientVipRecord(Lists.newArrayList(userId),clientEnum);

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java

@@ -67,6 +67,10 @@ public class UserOrderDetailVo extends UserOrderDetail {
 
     @ApiModelProperty("支付版本 ")
     private EPaymentVersion paymentVersion;
+
+
+    @ApiModelProperty(value = "vip剩余天数")
+    private Integer vipEndDays =0;
     @Data
     public  static class BizInfo implements Serializable {
 

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java

@@ -50,4 +50,5 @@ public class UserOrderVo extends UserOrder {
     @ApiModelProperty("支付配置")
     private  UserPaymentOrderWrapper.PaymentConfig paymentConfig;
 
+
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -241,7 +241,7 @@
         </if>
         and exists (
             select 1 from user_order_detail d where t.order_no_ = d.order_no_
-            and d.good_type_ = #{param.goodType}
+            and find_in_set(d.good_type_ ,#{param.goodType})
             <choose>
                 <when test="param.goodType != null and param.goodType != 'PRACTICE'">
                     <if test="param.bizId != null">