@@ -40,6 +40,7 @@ import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource ;
import java.math.BigDecimal ;
import java.math.RoundingMode ;
import java.util.* ;
import java.util.stream.Collectors ;
@@ -227,11 +228,13 @@ public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserS
*/
@Override
public Boolean updateIntegralMoney ( UserOperateIntegralMoneyRequest request ) {
if ( ObjectUtil . isNull ( request . getMoneyValue ( ) ) | | ObjectUtil . isNull ( request . getIntegralValue ( ) ) ) {
if ( ObjectUtil . isNull ( request . getMoneyValue ( ) ) & & ObjectUtil . isNull ( request . getIntegralValue ( ) ) ) {
throw new CrmebException ( " 至少输入一个金额 " ) ;
}
if ( request . getMoneyValue ( ) . compareTo ( BigDecimal . ZERO ) < 1 & & request . getIntegral Value ( ) < = 0 ) {
throw new CrmebException ( " 修改值不能等小于等于0 " ) ;
boolean moneyValid = request . getMoneyValue ( ) ! = null & & request . getMoney Value ( ) . compareTo ( BigDecimal . ZERO ) > 0 ;
boolean integralValid = request . getIntegralValue ( ) ! = null & & request . getIntegralValue ( ) . compareTo ( BigDecimal . ZERO ) > 0 ;
if ( ! moneyValid & & ! integralValid ) {
throw new CrmebException ( " 修改值不能小于等于0 " ) ;
}
User user = getById ( request . getUid ( ) ) ;
@@ -250,16 +253,16 @@ public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserS
}
}
if ( request . getIntegralType ( ) . equals ( 2 ) & & request . getIntegralValue ( ) ! = 0 ) {
if ( request . getIntegralType ( ) . equals ( 2 ) & & request . getIntegralValue ( ) ! = null & & request . getIntegralValue ( ) . compareTo ( BigDecimal . ZERO ) > 0 ) {
BigDecimal integral = user . getIntegral ( ) ! = null ? user . getIntegral ( ) : BigDecimal . ZERO ;
if ( integral . subtract ( BigDecimal . valueOf ( request. getIntegralValue ( ) ) ) .compareTo ( BigDecimal . ZERO ) < 0 ) {
if ( integral . subtract ( request . getIntegralValue ( ) ) . compareTo ( BigDecimal . ZERO ) < 0 ) {
throw new CrmebException ( " 积分扣减后不能小于0 " ) ;
}
}
if ( request . getIntegralType ( ) . equals ( 1 ) & & request . getIntegralValue ( ) ! = 0 ) {
if ( request . getIntegralType ( ) . equals ( 1 ) & & request . getIntegralValue ( ) ! = null & & request . getIntegralValue ( ) . compareTo ( BigDecimal . ZERO ) > 0 ) {
BigDecimal integral = user . getIntegral ( ) ! = null ? user . getIntegral ( ) : BigDecimal . ZERO ;
if ( integral . add ( BigDecimal . valueOf ( request. getIntegralValue ( ) ) ) .compareTo ( BigDecimal . valueOf ( 99999999) ) > 0 ) {
throw new CrmebException ( " 积分添加后不能大于99999999 " ) ;
if ( integral . add ( request . getIntegralValue ( ) ) . compareTo ( new BigDecimal ( " 999 99999. 999" ) ) > 0 ) {
throw new CrmebException ( " 积分添加后不能大于99999999.999 " ) ;
}
}
@@ -295,28 +298,29 @@ public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserS
}
}
// 处理积分
if ( request . getIntegralValue ( ) > 0 ) {
// 处理积分( 支持小数点后3位)
if ( request . getIntegralValue ( ) ! = null & & request . getIntegralValue ( ) . compareTo ( BigDecimal . ZERO ) > 0 ) {
BigDecimal integralValue = request . getIntegralValue ( ) . setScale ( 3 , RoundingMode . HALF_UP ) ;
// 生成记录
UserIntegralRecord integralRecord = new UserIntegralRecord ( ) ;
integralRecord . setUid ( user . getUid ( ) ) ;
integralRecord . setLinkType ( IntegralRecordConstants . INTEGRAL_RECORD_LINK_TYPE_SYSTEM ) ;
integralRecord . setTitle ( IntegralRecordConstants . BROKERAGE_RECORD_TITLE_SYSTEM ) ;
integralRecord . setIntegral ( BigDecimal . valueOf ( request . getI ntegralValue( ) ) );
integralRecord . setIntegral ( i ntegralValue) ;
integralRecord . setStatus ( IntegralRecordConstants . INTEGRAL_RECORD_STATUS_COMPLETE ) ;
if ( request . getIntegralType ( ) = = 1 ) { // 增加
integralRecord . setType ( IntegralRecordConstants . INTEGRAL_RECORD_TYPE_ADD ) ;
BigDecimal userIntegral = user . getIntegral ( ) ! = null ? user . getIntegral ( ) : BigDecimal . ZERO ;
integralRecord . setBalance ( userIntegral . add ( BigDecimal . valueOf ( request . g etIntegralValue ( ) ) ) . intValue ( ) ) ;
integralRecord . setMark ( StrUtil . format ( " 后台操作增加了{}积分 " , request . getI ntegralValue( ) )) ;
integralRecord . setBalance ( userIntegral . add ( integralValue ) . s etScale ( 0 , RoundingMode . HALF_UP ) . intValue ( ) ) ;
integralRecord . setMark ( StrUtil . format ( " 后台操作增加了{}积分 " , i ntegralValue) ) ;
operationIntegral ( user . getUid ( ) , BigDecimal . valueOf ( request . getI ntegralValue( ) ) , user . getIntegral ( ) , " add " ) ;
operationIntegral ( user . getUid ( ) , i ntegralValue, user . getIntegral ( ) , " add " ) ;
} else {
integralRecord . setType ( IntegralRecordConstants . INTEGRAL_RECORD_TYPE_SUB ) ;
BigDecimal userIntegral = user . getIntegral ( ) ! = null ? user . getIntegral ( ) : BigDecimal . ZERO ;
integralRecord . setBalance ( userIntegral . subtract ( BigDecimal . valueOf ( request . g etIntegralValue ( ) ) ) . intValue ( ) ) ;
integralRecord . setMark ( StrUtil . format ( " 后台操作减少了{}积分 " , request . getI ntegralValue( ) )) ;
operationIntegral ( user . getUid ( ) , BigDecimal . valueOf ( request . getI ntegralValue( ) ) , user . getIntegral ( ) , " sub " ) ;
integralRecord . setBalance ( userIntegral . subtract ( integralValue ) . s etScale ( 0 , RoundingMode . HALF_UP ) . intValue ( ) ) ;
integralRecord . setMark ( StrUtil . format ( " 后台操作减少了{}积分 " , i ntegralValue) ) ;
operationIntegral ( user . getUid ( ) , i ntegralValue, user . getIntegral ( ) , " sub " ) ;
}
userIntegralRecordService . save ( integralRecord ) ;
}