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 params) { MPJLambdaWrapper 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 page = userService.page(new Page<>( Long.parseLong(params.get("current").toString()), Long.parseLong(params.get("limit").toString())), wrapper); List users = page.getRecords(); for (MyUserEntity user : users) { List userVips = userVipService.list(new LambdaQueryWrapper() .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() .eq(UserVipLog::getUserVipId,userVip.getId()))); } } return R.ok().put("result", page); } @RequestMapping("/addUserVipByAdmin") @Transactional public R addUserVipByAdmin(@RequestBody Map 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 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 params) { List userVips = userVipService.list(new LambdaQueryWrapper() .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() .eq(UserVipLog::getUserVipId,userVip.getId()))); } return R.ok().put("userVips", userVips); } @RequestMapping("/addUserVipLog") @Transactional public R addUserVipLog(@RequestBody Map params) { List userVips = new ArrayList<>(); String vipType = params.get("vipType").toString(); String userId = params.get("userId").toString(); if ("11".equals(vipType)){//超级所有 userVips = userVipService.list(new LambdaQueryWrapper() .eq(UserVip::getUserId,userId) .in(UserVip::getType,4,5,6,7,8,9)); } if ("12".equals(vipType)){//简易超v userVips = userVipService.list(new LambdaQueryWrapper() .eq(UserVip::getUserId,userId) .in(UserVip::getType,4,5,6,8,9)); } if ("1".equals(vipType)){//简易超v userVips = userVipService.list(new LambdaQueryWrapper() .eq(UserVip::getUserId,userId) .in(UserVip::getType,4,5,6,9)); } if ("2".equals(vipType)){//国心超级 userVips = userVipService.list(new LambdaQueryWrapper() .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 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 = userVipService.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()))); 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 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("天医币不足"); } } }