package com.xzx.gc.user.service;
|
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.json.JSONUtil;
|
import com.xzx.gc.common.constant.CommonEnum;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.OrderEnum;
|
import com.xzx.gc.common.utils.BusinessUtil;
|
import com.xzx.gc.entity.AccountInfo;
|
import com.xzx.gc.entity.AccountLog;
|
import com.xzx.gc.entity.PartnerAccount;
|
import com.xzx.gc.entity.PartnerAccountLog;
|
import com.xzx.gc.model.comon.account.AllAcountParamDto;
|
import com.xzx.gc.service.BaseAccountService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.Iterator;
|
import java.util.List;
|
|
@Service
|
@Transactional
|
@Slf4j
|
public class LimitChangeService extends BaseAccountService {
|
|
@Autowired
|
private AccountService accountService;
|
@Autowired
|
private BusinessUtil businessUtil;
|
|
|
@Autowired
|
private PartnerAccountLogService partnerAccountLogService;
|
|
@Autowired
|
private PartnerAccountService partnerAccountService;
|
|
@Autowired
|
private AccountLogService accountLogService;
|
|
|
@Override
|
public Object account(AllAcountParamDto allAcountParamDto) {
|
|
String now=DateUtil.now();
|
//计算额度之间的差额
|
BigDecimal overBalance=BigDecimal.ZERO;
|
for (Iterator<AccountInfo> iterator = allAcountParamDto.getAccountInfoList().iterator(); iterator.hasNext(); ) {
|
AccountInfo accountInfo1=iterator.next();
|
AccountInfo accountInfo = accountService.findById(accountInfo1.getAccountId());
|
BigDecimal overdraftLimit = Convert.toBigDecimal(accountInfo1.getOverdraftLimit(),Constants.MONEY_INIT);
|
BigDecimal fixLimit = Convert.toBigDecimal(accountInfo1.getFixedLimit(),Constants.MONEY_INIT);
|
BigDecimal oldOverdraftLimit = Convert.toBigDecimal(accountInfo.getOverdraftLimit(), Constants.MONEY_INIT);
|
BigDecimal oldFixLimit = Convert.toBigDecimal(accountInfo.getFixedLimit(), Constants.MONEY_INIT);
|
BigDecimal sub=NumberUtil.sub(oldOverdraftLimit,overdraftLimit);
|
BigDecimal fix=NumberUtil.sub(oldFixLimit,fixLimit);
|
//无任何额度改变
|
if(sub.compareTo(BigDecimal.ZERO)==0){
|
iterator.remove();
|
continue;
|
}
|
accountInfo1.setOldFixLimit(oldFixLimit);
|
accountInfo1.setOldOverdraftLimit(oldOverdraftLimit);
|
accountInfo1.setOverBalance(sub);
|
accountInfo1.setOverFix(fix);
|
overBalance=NumberUtil.add(overBalance,sub);
|
|
}
|
|
//总的差额
|
allAcountParamDto.setOverBlance(overBalance);
|
|
log.debug("准备进行额度管理操作:{}",JSONUtil.toJsonPrettyStr(allAcountParamDto));
|
//打包员额度管理 打包员账户增加或减少,打包站增加或减少,先增减额度再增减余额
|
List<AccountInfo> accountInfoList = allAcountParamDto.getAccountInfoList();
|
BigDecimal overBlance = allAcountParamDto.getOverBlance();
|
String partnerAccountId = allAcountParamDto.getPartnerAccountId();
|
for (AccountInfo info : accountInfoList) {
|
accountService.updateOverLimitByAccountId( info.getAccountId(),Convert.toBigDecimal(info.getOverdraftLimit()));
|
accountService.updateFixLimitByAccountId( info.getAccountId(),Convert.toBigDecimal(info.getFixedLimit()));
|
AccountLog accountLog = new AccountLog();
|
accountLog.setCreateTime(now);
|
accountLog.setAccountId(info.getAccountId());
|
accountLog.setCreateUserId(info.getUserId());
|
overBalance = info.getOverBalance();
|
BigDecimal overFix = info.getOverFix();
|
if(overBalance.compareTo(BigDecimal.ZERO)>0) {
|
accountLog.setChannelType(Convert.toShort(CommonEnum.额度降低.getValue()));
|
}else if(overBalance.compareTo(BigDecimal.ZERO)<0){
|
accountLog.setChannelType(Convert.toShort(CommonEnum.额度申请.getValue()));
|
}
|
|
if(overFix.compareTo(BigDecimal.ZERO)!=0){
|
accountLog.setOldLimit(businessUtil.changeMoney(info.getOldOverdraftLimit()));
|
accountLog.setNewLimit(businessUtil.changeMoney(info.getOverdraftLimit()));
|
accountLog.setOldFixedLimit(businessUtil.changeMoney(info.getOldFixLimit()));
|
accountLog.setNewFixedLimit(businessUtil.changeMoney(info.getFixedLimit()));
|
}else if(overBalance.compareTo(BigDecimal.ZERO)!=0){
|
accountLog.setOldLimit(businessUtil.changeMoney(info.getOldOverdraftLimit()));
|
accountLog.setNewLimit(businessUtil.changeMoney(info.getOverdraftLimit()));
|
}
|
accountLog.setOrderId(partnerAccountId);
|
accountLogService.add(accountLog);
|
}
|
|
//修改打包站账户 先扣额度再扣环保金
|
PartnerAccountLog partnerAccountLog1=partnerAccountService.updateAll(partnerAccountId, overBlance);
|
PartnerAccountLog partnerAccountLog = new PartnerAccountLog();
|
partnerAccountLog.setAccountId(partnerAccountId);
|
partnerAccountLog.setFlowNo(partnerAccountId);
|
partnerAccountLog.setType(OrderEnum.额度调整.getValue());
|
partnerAccountLog.setMoney(partnerAccountLog1.getMoney());
|
partnerAccountLog.setManageLimit(partnerAccountLog1.getManageLimit());
|
partnerAccountLog.setManageLimitFix(partnerAccountLog1.getManageLimitFix());
|
PartnerAccount partnerAccount=new PartnerAccount();
|
partnerAccount.setHbb(partnerAccountLog1.getAccountMoney());
|
partnerAccount.setOverdraftLimit(partnerAccountLog1.getOldLimit());
|
partnerAccount.setFixedLimit(partnerAccountLog1.getOldLimitFix());
|
partnerAccountLog.setPartnerAccount(partnerAccount);
|
partnerAccountLogService.add(partnerAccountLog);
|
|
log.debug("额度管理操作已完成");
|
return null;
|
}
|
}
|