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