|  | @@ -1,10 +1,16 @@
 | 
	
		
			
				|  |  |  package com.yonge.cooleshow.biz.dal.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
	
		
			
				|  |  | +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.enums.CacheNameEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.FrozenTypeEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
 | 
	
	
		
			
				|  | @@ -13,6 +19,8 @@ import com.yonge.cooleshow.biz.dal.vo.res.AccountTotal;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.entity.HttpResponseResult;
 | 
	
		
			
				|  |  |  import com.yonge.toolset.base.exception.BizException;
 | 
	
		
			
				|  |  |  import org.redisson.api.RedissonClient;
 | 
	
		
			
				|  |  | +import org.slf4j.Logger;
 | 
	
		
			
				|  |  | +import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.entity.UserAccount;
 | 
	
	
		
			
				|  | @@ -30,10 +38,14 @@ import java.util.concurrent.TimeUnit;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAccount> implements UserAccountService {
 | 
	
		
			
				|  |  | +    private final static Logger log = LoggerFactory.getLogger(UserAccountServiceImpl.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private UserAccountRecordService userAccountRecordService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private RedissonClient redissonClient;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private UserOrderService orderService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public UserAccountVo detail(Long id) {
 | 
	
	
		
			
				|  | @@ -118,18 +130,31 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecordDto accountRecordDto) {
 | 
	
		
			
				|  |  |          UserAccountVo detail = detail(accountRecordDto.getUserId());
 | 
	
		
			
				|  |  | +        //收入要校验金额
 | 
	
		
			
				|  |  | +        if (InOrOutEnum.IN.equals(accountRecordDto.getInOrOut())) {
 | 
	
		
			
				|  |  | +            UserOrder userOrder = orderService.getOne(Wrappers.<UserOrder>lambdaQuery()
 | 
	
		
			
				|  |  | +                    .eq(UserOrder::getOrderNo, accountRecordDto.getOrderNo()));
 | 
	
		
			
				|  |  | +            BigDecimal totalTransAmount = baseMapper.totalTransAmount(accountRecordDto);
 | 
	
		
			
				|  |  | +            if (null == totalTransAmount) {
 | 
	
		
			
				|  |  | +                totalTransAmount = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //金额校验失败,入账为冻结金额
 | 
	
		
			
				|  |  | +            if (null == userOrder || totalTransAmount.add(accountRecordDto.getTransAmount()).compareTo(userOrder.getActualPrice()) > 0) {
 | 
	
		
			
				|  |  | +                log.error("账户变更失败,param is " + JSONObject.toJSONString(accountRecordDto));
 | 
	
		
			
				|  |  | +                accountRecordDto.setErrFlag(1);
 | 
	
		
			
				|  |  | +                accountRecordDto.setErrMsg("账户变更异常,订单入账总金额大于购买金额,订单号:" + accountRecordDto.getOrderNo());
 | 
	
		
			
				|  |  | +                accountRecordDto.setFrozenType(FrozenTypeEnum.FROZEN);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (FrozenTypeEnum.FROZEN.equals(accountRecordDto.getFrozenType())) {
 | 
	
		
			
				|  |  |              //校验冻结金额
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              baseMapper.frozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
 | 
	
		
			
				|  |  |          } else if (FrozenTypeEnum.FROZEN_DEDUCT.equals(accountRecordDto.getFrozenType())) {
 | 
	
		
			
				|  |  |              baseMapper.frozenDeductChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
 | 
	
		
			
				|  |  |          } else if (FrozenTypeEnum.FROZEN_BACK.equals(accountRecordDto.getFrozenType())) {
 | 
	
		
			
				|  |  |              baseMapper.frozenBackChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              baseMapper.changeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -141,6 +166,7 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
 | 
	
		
			
				|  |  |              //插入账户变更记录
 | 
	
		
			
				|  |  |              accountRecordDto.setAccountId(accountRecordDto.getUserId());
 | 
	
		
			
				|  |  |              accountRecordDto.setAccountBalance(detail.getAmountUsable());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              userAccountRecordService.save(accountRecordDto);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return HttpResponseResult.succeed(accountRecordDto);
 |