package com.xzx.gc.order.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.exception.RestException;
|
import com.xzx.gc.entity.*;
|
import com.xzx.gc.model.comon.account.AllAcountParamDto;
|
import com.xzx.gc.pay.service.*;
|
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;
|
|
@Service
|
@Transactional
|
@Slf4j
|
public class LimitApplyService extends BaseAccountService {
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
|
@Autowired
|
private OtherUserService otherUserService;
|
|
|
@Autowired
|
private AccountService accountService;
|
|
|
@Autowired
|
private PartnerAccountService partnerAccountService;
|
|
|
@Autowired
|
private PartnerAccountLogService partnerAccountLogService;
|
|
|
@Autowired
|
private AccountLogService accountLogService;
|
|
|
|
@Override
|
public Object account(AllAcountParamDto allAcountParamDto) {
|
AccountInfo byUserId = accountService.findByUserIdForbidden(allAcountParamDto.getUserId());
|
if("1".equals(byUserId.getIsProhibit())){
|
throw new RestException(-1,"账户被禁用");
|
}
|
String partnerId = otherUserService.findById(allAcountParamDto.getUserId()).getPartnerId();
|
CityPartner byId1 = cityPartnerService.queryById(partnerId);
|
//1:合伙人。2:打包站
|
String partnerType = byId1.getPartnerType();
|
String accountId = byUserId.getAccountId();
|
allAcountParamDto.setAccountId(accountId);
|
allAcountParamDto.setOverdraftLimit(byUserId.getOverdraftLimit());
|
allAcountParamDto.setFixedLimit(byUserId.getFixedLimit());
|
allAcountParamDto.setPartnerId(partnerId);
|
allAcountParamDto.setPartnerType(partnerType);
|
allAcountParamDto.setPartnerAccountId(byId1.getAccountNo());
|
|
log.debug("准备进行额度申请操作:{}",JSONUtil.toJsonPrettyStr(allAcountParamDto));
|
//合伙人扣钱或打包站先扣额度再扣钱 平台用户加钱
|
accountId = allAcountParamDto.getAccountId();
|
BigDecimal overdraftLimit = Convert.toBigDecimal(allAcountParamDto.getOverdraftLimit(),Constants.MONEY_INIT);
|
BigDecimal fixLimit = Convert.toBigDecimal(allAcountParamDto.getFixedLimit(),Constants.MONEY_INIT);
|
AccountInfo accountInfo=new AccountInfo();
|
accountInfo.setAccountId(accountId);
|
accountInfo.setOverdraftLimit(Convert.toStr(NumberUtil.add(overdraftLimit,allAcountParamDto.getMoney())));
|
accountInfo.setFixedLimit(Convert.toStr(NumberUtil.add(fixLimit,allAcountParamDto.getMoney())));
|
accountInfo.setUpdateTime(DateUtil.now());
|
accountService.update(accountInfo);
|
|
AccountLog accountLog=new AccountLog();
|
accountLog.setAccountId(accountId);
|
accountLog.setCreateUserId(allAcountParamDto.getUserId());
|
accountLog.setChannelType(Convert.toShort(CommonEnum.额度申请.getValue()));
|
accountLog.setOrderId(allAcountParamDto.getFlowNo());
|
accountLog.setOldLimit(Convert.toStr(overdraftLimit));
|
accountLog.setOldFixedLimit(Convert.toStr(fixLimit));
|
accountLog.setNewLimit(Convert.toStr(NumberUtil.add(overdraftLimit,allAcountParamDto.getMoney())));
|
accountLog.setNewFixedLimit(Convert.toStr(NumberUtil.add(fixLimit,allAcountParamDto.getMoney())));
|
accountLogService.add(accountLog);
|
|
//平台操作
|
partnerType = allAcountParamDto.getPartnerType();
|
//合伙人
|
if("1".equals(partnerType)){
|
PartnerAccountLog partnerAccountLog=new PartnerAccountLog();
|
partnerAccountLog.setPartnerId(allAcountParamDto.getPartnerId());
|
partnerAccountLog.setFlowNo(allAcountParamDto.getFlowNo());
|
partnerAccountLog.setType(OrderEnum.额度调整.getValue());
|
partnerAccountLog.setMoney("-"+allAcountParamDto.getMoney().toString());
|
partnerAccountLogService.add(partnerAccountLog);
|
partnerAccountService.updateReduceMoneyByPartnerId(allAcountParamDto.getPartnerId(),allAcountParamDto.getMoney());
|
}else if("2".equals(partnerType)){
|
//打包站 先扣额度再扣钱
|
PartnerAccountLog partnerAccountLog1=partnerAccountService.updateAll(allAcountParamDto.getPartnerAccountId(), Convert.toBigDecimal("-"+allAcountParamDto.getMoney().toString()));
|
PartnerAccountLog partnerAccountLog = new PartnerAccountLog();
|
partnerAccountLog.setAccountId(allAcountParamDto.getPartnerAccountId());
|
partnerAccountLog.setFlowNo(allAcountParamDto.getFlowNo());
|
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("额度申请操作已完成:用户:{},额度:{}",allAcountParamDto.getUserId(),allAcountParamDto.getMoney().toString());
|
return null;
|
}
|
}
|