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 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 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; } }