diff --git a/src/main/java/com/peanut/modules/common/entity/VipBuyConfigEntity.java b/src/main/java/com/peanut/modules/common/entity/VipBuyConfigEntity.java index db4b83f6..14d77929 100644 --- a/src/main/java/com/peanut/modules/common/entity/VipBuyConfigEntity.java +++ b/src/main/java/com/peanut/modules/common/entity/VipBuyConfigEntity.java @@ -1,5 +1,6 @@ package com.peanut.modules.common.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; @@ -25,6 +26,8 @@ public class VipBuyConfigEntity { private BigDecimal fee; + private BigDecimal rebateFee; + private Integer dateType; private Date startTime; @@ -32,6 +35,12 @@ public class VipBuyConfigEntity { private Date endTime; @TableLogic - private Integer del_flag; + private Integer delFlag; + + /** + * 最终价格,后台算好个人的价格后返给前端 + */ + @TableField(exist = false) + private BigDecimal lastFee; } diff --git a/src/main/java/com/peanut/modules/sociology/controller/UserController.java b/src/main/java/com/peanut/modules/sociology/controller/UserController.java index 725b2020..4a96992a 100644 --- a/src/main/java/com/peanut/modules/sociology/controller/UserController.java +++ b/src/main/java/com/peanut/modules/sociology/controller/UserController.java @@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.text.ParseException; + @Slf4j @RestController("sociologyUser") @RequestMapping("sociology/user") @@ -15,7 +17,7 @@ public class UserController { private VipService vipService; @RequestMapping("/getVipProductForUser") - public R getVipProductForUser(){ + public R getVipProductForUser() throws ParseException { return vipService.getVipProductForUser(); } diff --git a/src/main/java/com/peanut/modules/sociology/service/VipService.java b/src/main/java/com/peanut/modules/sociology/service/VipService.java index bd4bc8ba..ec422527 100644 --- a/src/main/java/com/peanut/modules/sociology/service/VipService.java +++ b/src/main/java/com/peanut/modules/sociology/service/VipService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.peanut.common.utils.R; import com.peanut.modules.common.entity.VipBuyConfigEntity; +import java.text.ParseException; + public interface VipService extends IService { - R getVipProductForUser(); + R getVipProductForUser() throws ParseException; } diff --git a/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java b/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java index 98375a9b..d44035f4 100644 --- a/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java +++ b/src/main/java/com/peanut/modules/sociology/service/impl/VipServiceImpl.java @@ -5,40 +5,92 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.peanut.common.utils.R; import com.peanut.common.utils.ShiroUtils; import com.peanut.modules.common.dao.MyUserDao; +import com.peanut.modules.common.dao.UserVipDao; import com.peanut.modules.common.dao.VipBuyConfigDao; import com.peanut.modules.common.entity.MyUserEntity; +import com.peanut.modules.common.entity.UserVip; import com.peanut.modules.common.entity.VipBuyConfigEntity; +import com.peanut.modules.common.service.UserVipService; import com.peanut.modules.sociology.service.VipService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; -import java.util.List; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; @Slf4j @Service("sociologyUserService") public class VipServiceImpl extends ServiceImpl implements VipService { @Autowired private MyUserDao myUserDao; + @Autowired + private UserVipDao userVipDao; /** * 获取国学vip商品 * @return */ @Override - public R getVipProductForUser() { + public R getVipProductForUser() throws ParseException { int uid = ShiroUtils.getUId(); MyUserEntity userEntity = myUserDao.selectById(uid); + Integer chaoCount = userVipDao.selectCount(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 1).lt(UserVip::getEndTime,new Date()).eq(UserVip::getState,0)); + Integer sociologyCount = userVipDao.selectCount(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).lt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); //获取超v列表 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(VipBuyConfigEntity::getType, 1); + wrapper.in(VipBuyConfigEntity::getType,userEntity.getVip().equals("1")||userEntity.getVip().equals("2")? Collections.singletonList(1):Arrays.asList(1,3)); wrapper.and(r->r.eq(VipBuyConfigEntity::getDateType,0).or(f->f.eq(VipBuyConfigEntity::getDateType,1).lt(VipBuyConfigEntity::getStartTime,new Date()).gt(VipBuyConfigEntity::getEndTime,new Date()))); List vipBuyConfigEntities = this.getBaseMapper().selectList(wrapper); - - - - - return R.ok().put("list",vipBuyConfigEntities); + for (VipBuyConfigEntity v:vipBuyConfigEntities){ + if(v.getType()==1){ + if(!Objects.equals(userEntity.getVip(), "1") &&chaoCount==0){ + v.setLastFee(v.getFee()); + } else { + if(userEntity.getVip().equals("2")){//医学转超v计算价格 + List userVips = userVipDao.selectList(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 2).lt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); + if(userVips.size()!=1){ + return R.error("用户vip信息异常,请联系管理员"); + } + UserVip userVip = userVips.get(0); + Date nowDate = new Date(); // 第一个日期 + Date endDate = userVip.getEndTime(); // 第二个日期 + long differenceInMilliseconds = endDate.getTime() - nowDate.getTime(); + int differenceInDays = (int)TimeUnit.MILLISECONDS.toDays(differenceInMilliseconds); + int i = (12000 / (3 * 365)) * differenceInDays;//默认按照打折价格抵扣 + BigDecimal chaFee = BigDecimal.valueOf(i); + v.setLastFee(chaoCount>0?v.getRebateFee().subtract(chaFee):v.getFee().subtract(chaFee)); + } else if (userEntity.getVip().equals("3")) {//国学vip转超v计算价格 + List userVips = userVipDao.selectList(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).lt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); + if(userVips.size()!=1){ + return R.error("用户vip信息异常,请联系管理员"); + } + UserVip userVip = userVips.get(0); + Date nowDate = new Date(); // 第一个日期 + Date endDate = userVip.getEndTime(); // 第二个日期 + long differenceInMilliseconds = endDate.getTime() - nowDate.getTime(); + int differenceInDays = (int)TimeUnit.MILLISECONDS.toDays(differenceInMilliseconds); + int i = (5888 / (3 * 365)) * differenceInDays;//默认按照打折价格抵扣 + BigDecimal chaFee = BigDecimal.valueOf(i); + v.setLastFee(chaoCount>0?v.getRebateFee().subtract(chaFee):v.getFee().subtract(chaFee)); + }else { + v.setLastFee(v.getRebateFee()); + } + } + }else { + v.setLastFee(chaoCount>0||sociologyCount>0?v.getRebateFee():v.getFee()); + } + } + Map> flag = new HashMap<>(); + List collect = vipBuyConfigEntities.stream().filter(r -> r.getType() == 1).collect(Collectors.toList()); + List collect1 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 3).collect(Collectors.toList()); + if(collect.size()>0) flag.put("super",collect); + if(collect1.size()>0) flag.put("sociology",collect1); + return R.ok().put("list",flag); } }