Files
nuttyreading-java/src/main/java/com/peanut/modules/master/controller/UserVipController.java
2024-11-08 16:50:43 +08:00

191 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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("天医币不足");
}
}
}