package com.xzx.gc.user.service;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.util.NumberUtil;
|
import com.xzx.gc.common.Result;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.PayEnum;
|
import com.xzx.gc.entity.AccountInfo;
|
import com.xzx.gc.entity.PartnerAccount;
|
import com.xzx.gc.entity.PayRequestInfo;
|
import com.xzx.gc.model.comon.account.AllAcountParamDto;
|
import com.xzx.gc.model.order.PackageSiteLimitDto;
|
import com.xzx.gc.service.AccountContext;
|
import com.xzx.gc.user.mapper.PayRequestMapper;
|
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.List;
|
|
@Service
|
@Transactional
|
public class PackageSiteService {
|
|
@Autowired
|
private LimitChangeService limitChangeService;
|
|
@Autowired
|
private PayRequestMapper payRequestMapper;
|
|
@Autowired
|
private PayRequestService payRequestService;
|
@Autowired
|
private PartnerAccountService partnerAccountService;
|
|
public Result updateLimit(PackageSiteLimitDto packageSiteLimitDto) {
|
BigDecimal bigDecimal = Convert.toBigDecimal(packageSiteLimitDto.getAll(), Constants.MONEY_INIT);
|
List<AccountInfo> accountInfos = packageSiteLimitDto.getAccountInfos();
|
BigDecimal all = BigDecimal.ZERO;
|
|
//额度验证
|
for (AccountInfo accountInfo : accountInfos) {
|
BigDecimal overdraftLimit = Convert.toBigDecimal(accountInfo.getOverdraftLimit(), Constants.MONEY_INIT);
|
BigDecimal fixedLimit = Convert.toBigDecimal(accountInfo.getFixedLimit(), Constants.MONEY_INIT);
|
|
if (overdraftLimit.compareTo(fixedLimit) > 0) {
|
return Result.error(-1, "可用额度不能大于固定额度,请重新分配");
|
}
|
all = NumberUtil.add(all, fixedLimit);
|
if (all.compareTo(bigDecimal) > 0) {
|
return Result.error(-1, "固定额度总和大于总额度,请重新分配");
|
}
|
}
|
|
AllAcountParamDto allAcountParamDto = AllAcountParamDto.builder().type(5).accountInfoList(accountInfos).partnerAccountId(packageSiteLimitDto.getPartnerAccountId()).build();
|
// accountFactory.getService(5).account(allAcountParamDto);
|
new AccountContext(limitChangeService).account(allAcountParamDto);
|
|
return Result.success("");
|
}
|
|
|
/**
|
* 打包站恢复额度
|
* @param partnerId 打包站id
|
*/
|
public Result limitRecovery(String partnerId,String userId) {
|
|
PayRequestInfo info=new PayRequestInfo();
|
info.setCreateUserId(partnerId);
|
info.setPayType(PayEnum.额度恢复.getValue());
|
info.setStatus(PayEnum.待审核.getValue());
|
List<PayRequestInfo> select = payRequestMapper.select(info);
|
if(CollUtil.isNotEmpty(select)){
|
return Result.error(-1,"正在审核中,不能重复恢复");
|
}
|
|
Result result=new Result();
|
PayRequestInfo payRequestInfo=new PayRequestInfo();
|
payRequestInfo.setCreateUserId(userId);
|
|
//查询打包站的账户
|
PartnerAccount accountInfo1 = partnerAccountService.findByPartnerId(partnerId);
|
if(accountInfo1!=null){
|
if(Convert.toBigDecimal(accountInfo1.getFixedLimit(),Constants.MONEY_INIT).compareTo(BigDecimal.ZERO)==0){
|
return Result.error(-1,"未设置固定额度");
|
}else if(Convert.toBigDecimal(accountInfo1.getOverdraftLimit(),Constants.MONEY_INIT).compareTo(Convert.toBigDecimal(accountInfo1.getFixedLimit(),Constants.MONEY_INIT))>=0){
|
return Result.error(-1,"额度已充足");
|
}
|
payRequestInfo.setMoney(Convert.toStr(NumberUtil.sub(Convert.toBigDecimal(accountInfo1.getFixedLimit()),Convert.toBigDecimal(accountInfo1.getOverdraftLimit()))));
|
}else{
|
return Result.error(-1,"账户不存在");
|
}
|
payRequestInfo.setAccountId(accountInfo1.getAccount());
|
payRequestInfo.setPayType(PayEnum.额度恢复.getValue());
|
//代表打包站
|
payRequestInfo.setOpenId("-1");
|
payRequestService.add(payRequestInfo);
|
return result;
|
}
|
}
|