Files
nuttyreading-java/src/main/java/com/peanut/modules/master/controller/UserVipController.java

351 lines
17 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.modules.book.service.TransactionDetailsService;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.JfTransactionDetailsService;
import com.peanut.modules.common.service.UserVipLogService;
import com.peanut.modules.master.service.MyUserService;
import com.peanut.modules.master.service.UserVipService;
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 jakarta.transaction.Transactional;
import java.math.BigDecimal;
import java.util.*;
/**
* 超V管理
*/
@Slf4j
@RestController("masterUserVip")
@RequestMapping("master/userVip")
public class UserVipController {
@Autowired
private UserVipService userVipService;
@Autowired
private MyUserService userService;
@Autowired
private UserVipLogService userVipLogService;
@Autowired
private TransactionDetailsService transactionDetailsService;
@Autowired
private JfTransactionDetailsService jfTransactionDetailsService;
@RequestMapping("/getUserVipList")
public R getUserVipList(@RequestBody Map<String, Object> params) {
MPJLambdaWrapper<MyUserEntity> wrapper = new MPJLambdaWrapper();
wrapper.select(MyUserEntity::getId,MyUserEntity::getName,MyUserEntity::getTel,MyUserEntity::getEmail);
wrapper.rightJoin(UserVip.class, UserVip::getUserId, MyUserEntity::getId);
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"));
}
if (params.containsKey("isLog")&& StringUtils.isNotEmpty(params.get("isLog").toString())) {
wrapper.inSql(UserVip::getUserId,"select user_id from (select uv.*,uvl.id uvlid from user_vip uv left join user_vip_log uvl on uvl.user_vip_id = uv.id where uv.del_flag = 0 ) t where t.uvlid is null group by user_id");
}
wrapper.groupBy(UserVip::getUserId);
Page<MyUserEntity> page = userService.page(new Page<>(
Long.parseLong(params.get("current").toString()), Long.parseLong(params.get("limit").toString())), wrapper);
List<MyUserEntity> users = page.getRecords();
for (MyUserEntity user : users) {
List<UserVip> userVips = userVipService.list(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId, user.getId())
.eq(StringUtils.isNotEmpty(params.get("state").toString()),UserVip::getState, params.get("state").toString()));
user.setUserVips(userVips);
for(UserVip userVip : userVips){
userVip.setUserVipLogs(userVipLogService.list(new LambdaQueryWrapper<UserVipLog>()
.eq(UserVipLog::getUserVipId,userVip.getId())));
}
}
return R.ok().put("result", page);
}
@RequestMapping("/addUserVipByAdmin")
@Transactional
public R addUserVipByAdmin(@RequestBody Map<String, Object> params) {
params.put("userVipType","master");
Date startTime = new Date();
Date endTime = DateUtils.addDateYears(startTime, Integer.parseInt(params.get("year").toString()));
BigDecimal fee = new BigDecimal(params.get("fee").toString());
BigDecimal jf = new BigDecimal(StringUtils.isEmpty(params.get("jf").toString()) ? "0" : params.get("jf").toString());
if ("天医币".equals(params.get("payType"))){
MyUserEntity user = userService.getById(params.get("userId").toString());
if(user.getPeanutCoin().compareTo(fee)>=0){
user.setPeanutCoin(user.getPeanutCoin().subtract(fee));
TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity();
transactionDetailsEntity.setRemark("后台充扣操作");
transactionDetailsEntity.setUserId(user.getId());
transactionDetailsEntity.setUserName(user.getNickname());
transactionDetailsEntity.setChangeAmount(fee.negate());
transactionDetailsEntity.setUserBalance(user.getPeanutCoin());
transactionDetailsEntity.setTel(user.getTel());
transactionDetailsEntity.setOrderType("扣费");
transactionDetailsEntity.setNote("购买VIP");
transactionDetailsService.save(transactionDetailsEntity);
}else {
return R.error("天医币不足");
}
if (jf.compareTo(BigDecimal.ZERO)>0){
if(user.getJf().compareTo(jf)>=0){
user.setJf(user.getJf().subtract(jf));
JfTransactionDetails jfDetail = new JfTransactionDetails();
jfDetail.setUserId(user.getId());
jfDetail.setActType(1);
jfDetail.setChangeAmount(jf.negate());
jfDetail.setUserBalance(user.getJf());
jfDetail.setRemark("购买VIP扣除");
jfTransactionDetailsService.save(jfDetail);
}else {
return R.error("积分不足");
}
}
userService.updateById(user);
}
List<Integer> typeList = new ArrayList<>();
int count = 1;
if ("11".equals(params.get("type").toString())) {//超v
count = 6;
for (int i=4;i<10;i++){
typeList.add(i);
}
}else if ("12".equals(params.get("type").toString())) {//简易超v
count = 5;
for (int i=4;i<10;i++){
if (i==7){
continue;
}
typeList.add(i);
}
}else if ("1".equals(params.get("type").toString())) {//医学超级
count = 4;
for (int i=4;i<8;i++){
if (i==7){
i = 9;
}
typeList.add(i);
}
}else if ("2".equals(params.get("type").toString())) {//国心超级
count = 2;
for (int i=7;i<9;i++){
typeList.add(i);
}
}else {
typeList.add(Integer.parseInt(params.get("type").toString()));
}
for (Integer t : typeList) {
UserVip userVip = new UserVip();
userVip.setUserId(Integer.parseInt(params.get("userId").toString()));
userVip.setStartTime(startTime);
userVip.setEndTime(endTime);
userVip.setType(t);
userVipService.save(userVip);
params.put("fee",fee.divide(new BigDecimal(count),2, BigDecimal.ROUND_HALF_UP));
params.put("jf",jf.divide(new BigDecimal(count),2, BigDecimal.ROUND_HALF_UP));
userVipLogService.addUserVipLog(params, userVip);
}
return R.ok();
}
@RequestMapping("/getUserVipInfoByUserId")
public R getUserVipInfoByUserId(@RequestBody Map<String, Object> params) {
List<UserVip> userVips = userVipService.list(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,params.get("userId").toString())
.eq("0".equals(params.get("state").toString()),UserVip::getState,params.get("state").toString()));
for (UserVip userVip : userVips) {
userVip.setUserVipLogs(userVipLogService.list(new LambdaQueryWrapper<UserVipLog>()
.eq(UserVipLog::getUserVipId,userVip.getId())));
}
return R.ok().put("userVips", userVips);
}
@RequestMapping("/addUserVipLog")
@Transactional
public R addUserVipLog(@RequestBody Map<String, Object> params) {
List<UserVip> userVips = new ArrayList<>();
String vipType = params.get("vipType").toString();
String userId = params.get("userId").toString();
if ("11".equals(vipType)){//超级所有
userVips = userVipService.list(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,userId)
.in(UserVip::getType,4,5,6,7,8,9));
}
if ("12".equals(vipType)){//简易超v
userVips = userVipService.list(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,userId)
.in(UserVip::getType,4,5,6,8,9));
}
if ("1".equals(vipType)){//简易超v
userVips = userVipService.list(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,userId)
.in(UserVip::getType,4,5,6,9));
}
if ("2".equals(vipType)){//国心超级
userVips = userVipService.list(new LambdaQueryWrapper<UserVip>()
.eq(UserVip::getUserId,userId)
.in(UserVip::getType,7,8));
}
if (userVips.size()>0){
for (UserVip userVip : userVips) {
UserVipLog userVipLog = new UserVipLog();
userVipLog.setUserId(userVip.getUserId());
userVipLog.setUserVipId(userVip.getId());
userVipLog.setType(params.get("type").toString());
userVipLog.setPayTime(params.containsKey("payTime")?DateUtils.stringToDate(params.get("payTime").toString(), "yyyy-MM-dd HH:mm:ss"):null);
if (params.containsKey("orderSn")){
userVipLog.setOrderSn(params.get("orderSn").toString());
}
userVipLog.setAdminId(Integer.parseInt(params.get("adminId").toString()));
userVipLog.setStartTime(DateUtils.stringToDate(params.get("startTime").toString(), "yyyy-MM-dd HH:mm:ss"));
userVipLog.setEndTime(DateUtils.stringToDate(params.get("endTime").toString(), "yyyy-MM-dd HH:mm:ss"));
BigDecimal fee = new BigDecimal(params.get("fee").toString());
BigDecimal jf = new BigDecimal(params.get("jf").toString());
userVipLog.setFee(fee.divide(new BigDecimal(userVips.size()),2, BigDecimal.ROUND_HALF_UP));
userVipLog.setJf(jf.divide(new BigDecimal(userVips.size()),2, BigDecimal.ROUND_HALF_UP));
userVipLog.setPayType(params.get("payType").toString());
if (params.containsKey("remark")){
userVipLog.setRemark(params.get("remark").toString());
}
userVipLogService.addUserVipLog(userVipLog);
}
return R.ok();
}else {
UserVipLog userVipLog = new UserVipLog();
userVipLog.setUserId(Integer.parseInt(userId));
userVipLog.setUserVipId(Integer.parseInt(params.get("userVipId").toString()));
userVipLog.setType(params.get("type").toString());
userVipLog.setPayTime(params.containsKey("payTime")?DateUtils.stringToDate(params.get("payTime").toString(), "yyyy-MM-dd HH:mm:ss"):null);
if (params.containsKey("orderSn")){
userVipLog.setOrderSn(params.get("orderSn").toString());
}
userVipLog.setAdminId(Integer.parseInt(params.get("adminId").toString()));
userVipLog.setStartTime(DateUtils.stringToDate(params.get("startTime").toString(), "yyyy-MM-dd HH:mm:ss"));
userVipLog.setEndTime(DateUtils.stringToDate(params.get("endTime").toString(), "yyyy-MM-dd HH:mm:ss"));
userVipLog.setFee(new BigDecimal(params.get("fee").toString()));
userVipLog.setJf(new BigDecimal(params.get("jf").toString()));
userVipLog.setPayType(params.get("payType").toString());
if (params.containsKey("remark")){
userVipLog.setRemark(params.get("remark").toString());
}
userVipLogService.addUserVipLog(userVipLog);
}
return R.ok();
}
@RequestMapping("/delUserVipLogById")
public R delUserVipLogById(@RequestBody UserVipLog userVipLog) {
userVipLogService.removeById(userVipLog);
return R.ok();
}
@RequestMapping("/updateUserVipLogById")
public R updateUserVipLogById(@RequestBody UserVipLog userVipLog) {
userVipLog.setDayAmount(userVipLogService.countDayAmount(userVipLog));
if (userVipLogService.updateById(userVipLog)){
return R.ok();
}else {
return R.error("数据异常添加失败");
}
}
@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 = userVipService.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())));
userVipService.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 = userVipService.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);
userVipService.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("天医币不足");
}
}
}