@@ -1,11 +1,14 @@
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.common.entity.MyUserEntity ;
import com.peanut.modules.common.entity.UserVip ;
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 ;
@@ -27,9 +30,237 @@ import java.util.*;
public class UserVipController {
@Autowired
private UserVipService v ipService;
private UserVipService userV ipService;
@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 " ) ) ;
}
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 ( ) ) ;
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 ( ) ) ;
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 ) {
@@ -53,7 +284,7 @@ public class UserVipController {
}
wrapper . orderByAsc ( UserVip : : getState ) ;
wrapper . orderByAsc ( UserVip : : getEndTime ) ;
Page < UserVip > page = v ipService. page ( new Page < > (
Page < UserVip > page = userV ipService. 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 ) {
@@ -74,7 +305,7 @@ public class UserVipController {
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 ( ) ) ) ) ;
v ipService. save ( userVip ) ;
userV ipService. 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 ( ) ) ;
@@ -91,13 +322,13 @@ public class UserVipController {
//延长过期时间, month为延长月数
@RequestMapping ( " /extendUserVip " )
public R extendUserVip ( @RequestBody Map < String , Object > params ) {
UserVip userVip = v ipService. getById ( params . get ( " userVipId " ) . toString ( ) ) ;
UserVip userVip = userV ipService. 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 ) ;
v ipService. saveOrUpdate ( userVip ) ;
userV ipService. 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 ) ;