package com.peanut.modules.master.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.peanut.common.utils.DateUtils; import com.peanut.common.utils.R; import com.peanut.common.utils.ShiroUtils; 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.master.service.MyUserService; import com.peanut.modules.master.service.UserVipService; import com.peanut.modules.sociology.service.VipBuyConfigService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.transaction.Transactional; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 超V管理 */ @Slf4j @RestController("masterUserVip") @RequestMapping("master/userVip") public class UserVipController { @Autowired private UserVipService vipService; @Autowired private MyUserService userService; @Autowired private VipBuyConfigService vipBuyConfigService; //获取vip商品 @RequestMapping("/getVipProductForUser") public R getVipProductForUser(@RequestBody Map params){ int uid = Integer.parseInt(params.get("uid").toString()); MyUserEntity userEntity = userService.getById(uid); Integer chaoCount = vipService.count(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 1).gt(UserVip::getEndTime,new Date()).eq(UserVip::getState,0)); Integer medicalCount = vipService.count(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 2).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); Integer sociologyCount = vipService.count(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0)); //获取超v列表 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(VipBuyConfigEntity::getType,userEntity.getVip().equals("1")||userEntity.getVip().equals("2")||userEntity.getVip().equals("3")? Collections.singletonList(1): Arrays.asList(1,2,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 = vipBuyConfigService.list(wrapper); for (VipBuyConfigEntity v:vipBuyConfigEntities){ if(v.getType()==1){ if(userEntity.getVip().equals("0")){ v.setLastFee(chaoCount==0?v.getFee():v.getRebateFee()); } else { if(userEntity.getVip().equals("2")){//医学转超v计算价格 List userVips = vipService.list(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 2).gt(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 = (18000 / (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 = vipService.list(new LambdaQueryWrapper().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).gt(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 = (8888 / (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||medicalCount>0||sociologyCount>0?v.getRebateFee():v.getFee()); } } Map> flag = new HashMap<>(); List collect = vipBuyConfigEntities.stream().filter(r -> r.getType() == 1 &&r.getDateType()==0).collect(Collectors.toList()); List collect2 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 1 && r.getDateType() == 1).collect(Collectors.toList()); List collect4 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 2 && r.getDateType()==0).collect(Collectors.toList()); List collect5 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 2 && r.getDateType() == 1).collect(Collectors.toList()); List collect1 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 3 && r.getDateType()==0).collect(Collectors.toList()); List collect3 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 3 && r.getDateType() == 1).collect(Collectors.toList()); flag.put("super",collect); flag.put("super_hd",collect2); flag.put("sociology",collect1); flag.put("sociology_hd",collect3); flag.put("medical",collect4); flag.put("medical_hd",collect5); return R.ok().put("list",flag); } @RequestMapping("/listByPage") public R listByPage(@RequestBody Map params) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper(); wrapper.selectAll(UserVip.class); wrapper.leftJoin(MyUserEntity.class, MyUserEntity::getId, UserVip::getUserId); if (params.containsKey("userName")&& StringUtils.isNotEmpty(params.get("userName").toString())) { wrapper.like(MyUserEntity::getName,params.get("userName")); } if (params.containsKey("tel")&& StringUtils.isNotEmpty(params.get("tel").toString())) { wrapper.like(MyUserEntity::getTel,params.get("tel")); } if (params.containsKey("email")&& StringUtils.isNotEmpty(params.get("email").toString())) { wrapper.like(MyUserEntity::getEmail,params.get("email")); } if (params.containsKey("type")&& StringUtils.isNotEmpty(params.get("type").toString())) { wrapper.eq(UserVip::getType,params.get("type")); } if (params.containsKey("state")&& StringUtils.isNotEmpty(params.get("state").toString())) { wrapper.eq(UserVip::getState,params.get("state")); } wrapper.orderByAsc(UserVip::getState); wrapper.orderByAsc(UserVip::getEndTime); Page page = vipService.page(new Page<>( Long.parseLong(params.get("current").toString()), Long.parseLong(params.get("limit").toString())), wrapper); List userVips = page.getRecords(); if (userVips.size() > 0){ for (UserVip userVip : userVips) { userVip.setUser(userService.getById(userVip.getUserId())); } } return R.ok().put("result", page); } @RequestMapping("/saveUserVip") @Transactional public R saveUserVip(@RequestBody Map params) { MyUserEntity user = userService.getById(params.get("userId").toString()); if (user.getPeanutCoin().compareTo(new BigDecimal(params.get("point").toString()))>=0){ if (user.getPeanutCoin().compareTo(new BigDecimal(params.get("jf").toString()))>=0){ UserVip userVip = new UserVip(); userVip.setUserId(Integer.parseInt(params.get("userId").toString())); userVip.setType(Integer.parseInt(params.get("type").toString())); userVip.setEndTime(DateUtils.addDateMonths(new Date(),Integer.parseInt(params.get("month").toString()))); vipService.save(userVip); user.setPeanutCoin(user.getPeanutCoin().subtract(new BigDecimal(params.get("point").toString()))); user.setJf(user.getJf().subtract(new BigDecimal(params.get("jf").toString()))); user.setVip(params.get("type").toString()); userService.saveOrUpdate(user); return R.ok(); }else { return R.error("积分不足"); } }else { return R.error("天医币不足"); } } //延长过期时间,month为延长月数 @RequestMapping("/extendUserVip") public R extendUserVip(@RequestBody Map params) { UserVip userVip = vipService.getById(params.get("userVipId").toString()); MyUserEntity user = userService.getById(userVip.getUserId()); if (user.getPeanutCoin().compareTo(new BigDecimal(params.get("point").toString()))>=0){ if (user.getPeanutCoin().compareTo(new BigDecimal(params.get("jf").toString()))>=0){ Date newEndTime = DateUtils.addDateMonths(userVip.getEndTime(),Integer.parseInt(params.get("month").toString())); userVip.setEndTime(newEndTime); vipService.saveOrUpdate(userVip); user.setPeanutCoin(user.getPeanutCoin().subtract(new BigDecimal(params.get("point").toString()))); user.setJf(user.getJf().subtract(new BigDecimal(params.get("jf").toString()))); userService.saveOrUpdate(user); return R.ok(); }else { return R.error("积分不足"); } }else { return R.error("天医币不足"); } } }