191 lines
11 KiB
Java
191 lines
11 KiB
Java
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<String, Object> params){
|
||
int uid = Integer.parseInt(params.get("uid").toString());
|
||
MyUserEntity userEntity = userService.getById(uid);
|
||
Integer chaoCount = vipService.count(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, uid).eq(UserVip::getType, 1).gt(UserVip::getEndTime,new Date()).eq(UserVip::getState,0));
|
||
Integer medicalCount = vipService.count(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, uid).eq(UserVip::getType, 2).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0));
|
||
Integer sociologyCount = vipService.count(new LambdaQueryWrapper<UserVip>().eq(UserVip::getUserId, uid).eq(UserVip::getType, 3).gt(UserVip::getEndTime, new Date()).eq(UserVip::getState, 0));
|
||
//获取超v列表
|
||
LambdaQueryWrapper<VipBuyConfigEntity> 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<VipBuyConfigEntity> 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<UserVip> userVips = vipService.list(new LambdaQueryWrapper<UserVip>().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<UserVip> userVips = vipService.list(new LambdaQueryWrapper<UserVip>().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<String, List<VipBuyConfigEntity>> flag = new HashMap<>();
|
||
List<VipBuyConfigEntity> collect = vipBuyConfigEntities.stream().filter(r -> r.getType() == 1 &&r.getDateType()==0).collect(Collectors.toList());
|
||
List<VipBuyConfigEntity> collect2 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 1 && r.getDateType() == 1).collect(Collectors.toList());
|
||
List<VipBuyConfigEntity> collect4 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 2 && r.getDateType()==0).collect(Collectors.toList());
|
||
List<VipBuyConfigEntity> collect5 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 2 && r.getDateType() == 1).collect(Collectors.toList());
|
||
List<VipBuyConfigEntity> collect1 = vipBuyConfigEntities.stream().filter(r -> r.getType() == 3 && r.getDateType()==0).collect(Collectors.toList());
|
||
List<VipBuyConfigEntity> 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<String, Object> params) {
|
||
MPJLambdaWrapper<UserVip> 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<UserVip> page = vipService.page(new Page<>(
|
||
Long.parseLong(params.get("current").toString()), Long.parseLong(params.get("limit").toString())), wrapper);
|
||
List<UserVip> 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<String, Object> 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<String, Object> 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("天医币不足");
|
||
}
|
||
}
|
||
|
||
}
|
||
|