| package com.xzx.gc.pay.service;  | 
|   | 
| import cn.hutool.core.convert.Convert;  | 
| import cn.hutool.core.date.DateUtil;  | 
| import cn.hutool.core.util.NumberUtil;  | 
| import cn.hutool.core.util.StrUtil;  | 
| 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 RestoreLimitService 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;  | 
|   | 
|   | 
|     /**  | 
|      * 打包站标识  | 
|      */  | 
|     private static final String DBZ="1";  | 
|   | 
|     @Override  | 
|     public Object account(AllAcountParamDto allAcountParamDto) {  | 
|         //额度恢复 恢复入库员的固定额度 同时要减去合伙人的金额 打包员则 需要 减去 打包站的额度(按额度优先原则 )  | 
|   | 
|         //打包站恢复额度则需要减去合伙人的环保币  | 
|   | 
|         String partnerId=null;  | 
|         if(StrUtil.isBlank(allAcountParamDto.getUserRealType())) {  | 
|             AccountInfo byUserId = accountService.findByUserId(allAcountParamDto.getUserId());  | 
|             if (byUserId == null) {  | 
|                 throw new RestException(-1, "账户被禁用");  | 
|             }  | 
|             OtherUserInfo byId = otherUserService.findById(allAcountParamDto.getUserId());  | 
|             partnerId = byId.getPartnerId();  | 
|             allAcountParamDto.setFixedLimit(byUserId.getFixedLimit());  | 
|             allAcountParamDto.setAccountId(byUserId.getAccountId());  | 
|             allAcountParamDto.setOverdraftLimit(byUserId.getOverdraftLimit());  | 
|             CityPartner byId1 = cityPartnerService.queryById(partnerId);  | 
|             //1:合伙人。2:打包站  | 
|             String partnerType = byId1.getPartnerType();  | 
|             allAcountParamDto.setPartnerType(partnerType);  | 
|             allAcountParamDto.setPartnerId(partnerId);  | 
|             allAcountParamDto.setPartnerAccountId(byId1.getAccountNo());  | 
|   | 
|         }else if(DBZ.equals(allAcountParamDto.getUserRealType())){  | 
|             String userId=allAcountParamDto.getUserId();  | 
|             //根据主打包员查询所属的打包站ID  | 
|             CityPartner byuserId = cityPartnerService.findByUserId(userId, OrderEnum.打包站.getValue());  | 
|             if(byuserId==null){  | 
|                 throw new RestException("找不到对应的打包站");  | 
|             }  | 
|             partnerId=byuserId.getId()+"";  | 
|             //查询打包站的账户  | 
|             PartnerAccount accountInfo1 = partnerAccountService.findByPartnerId(partnerId);  | 
|             allAcountParamDto.setFixedLimit(accountInfo1.getFixedLimit());  | 
|   | 
|             //打包站的账户  | 
|             allAcountParamDto.setAccountId(accountInfo1.getAccount());  | 
|             allAcountParamDto.setOverdraftLimit(accountInfo1.getOverdraftLimit());  | 
|   | 
|             CityPartner byId1 = cityPartnerService.queryById(byuserId.getPackingStation());  | 
|             allAcountParamDto.setPartnerId(byId1.getId().toString());  | 
|             //合伙人的账户  | 
|             allAcountParamDto.setPartnerAccountId(byId1.getAccountNo());  | 
|         }  | 
|   | 
|   | 
|         log.debug("准备进行额度恢复操作:{}",JSONUtil.toJsonPrettyStr(allAcountParamDto));  | 
|         //额度恢复 入库员加钱 合伙人扣钱  | 
|         BigDecimal limit=Convert.toBigDecimal(allAcountParamDto.getOverdraftLimit(),Constants.MONEY_INIT);  | 
|         //实际恢复的额度  | 
|         BigDecimal realLimit=NumberUtil.sub(Convert.toBigDecimal(allAcountParamDto.getFixedLimit()),limit);  | 
|   | 
|         if(StrUtil.isBlank(allAcountParamDto.getUserRealType())) {  | 
|             AccountInfo accountInfo = new AccountInfo();  | 
|             accountInfo.setAccountId(allAcountParamDto.getAccountId());  | 
|             accountInfo.setOverdraftLimit(allAcountParamDto.getFixedLimit());  | 
|             accountInfo.setUpdateTime(DateUtil.now());  | 
|             accountService.update(accountInfo);  | 
|   | 
|             AccountLog accountLog = new AccountLog();  | 
|             accountLog.setAccountId(allAcountParamDto.getAccountId());  | 
|             accountLog.setCreateUserId(allAcountParamDto.getUserId());  | 
|             accountLog.setChannelType(Convert.toShort(CommonEnum.额度恢复.getValue()));  | 
|             accountLog.setOrderId(allAcountParamDto.getFlowNo());  | 
|             accountLog.setOldLimit(allAcountParamDto.getOverdraftLimit());  | 
|             accountLog.setNewLimit(allAcountParamDto.getFixedLimit());  | 
|             accountLog.setOldFixedLimit(accountLog.getNewLimit());  | 
|             accountLog.setNewFixedLimit(accountLog.getNewLimit());  | 
|             accountLogService.add(accountLog);  | 
|   | 
|   | 
|             //合伙人  | 
|             if("1".equals(allAcountParamDto.getPartnerType())){  | 
|                 PartnerAccountLog partnerAccountLog=new PartnerAccountLog();  | 
|                 partnerAccountLog.setPartnerId(allAcountParamDto.getPartnerId());  | 
|                 partnerAccountLog.setFlowNo(allAcountParamDto.getFlowNo());  | 
|                 partnerAccountLog.setType(OrderEnum.额度调整.getValue());  | 
|                 partnerAccountLog.setMoney("-"+realLimit.toString());  | 
|                 partnerAccountLogService.add(partnerAccountLog);  | 
|                 partnerAccountService.updateReduceMoneyByPartnerId(allAcountParamDto.getPartnerId(),realLimit);  | 
|             }else if("2".equals(allAcountParamDto.getPartnerType())){  | 
|                 //打包站 先扣额度再扣钱  | 
|                 PartnerAccountLog partnerAccountLog1=partnerAccountService.updateAll(allAcountParamDto.getPartnerAccountId(), Convert.toBigDecimal("-"+realLimit.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);  | 
|             }  | 
|   | 
|   | 
|         }else if(DBZ.equals(allAcountParamDto.getUserRealType())){  | 
|   | 
|             //打包站可用额度恢复  | 
|             PartnerAccountLog partnerAccountLog = new PartnerAccountLog();  | 
|             partnerAccountLog.setAccountId(allAcountParamDto.getAccountId());  | 
|             partnerAccountLog.setFlowNo(allAcountParamDto.getFlowNo());  | 
|             partnerAccountLog.setType(OrderEnum.恢复额度.getValue());  | 
|             partnerAccountLog.setManageLimit(realLimit.toString());  | 
|             PartnerAccount  partnerAccount=new PartnerAccount();  | 
|             partnerAccount.setOverdraftLimit(allAcountParamDto.getOverdraftLimit());  | 
|             partnerAccountLog.setPartnerAccount(partnerAccount);  | 
|             partnerAccountLogService.add(partnerAccountLog);  | 
|   | 
|             PartnerAccount accountInfo = new PartnerAccount();  | 
|             accountInfo.setAccount(allAcountParamDto.getAccountId());  | 
|             accountInfo.setOverdraftLimit(allAcountParamDto.getFixedLimit());  | 
|             accountInfo.setUpdateTime(DateUtil.now());  | 
|             partnerAccountService.updateByAccount(accountInfo);  | 
|   | 
|   | 
|   | 
|             //合伙人扣除环保币  | 
|             partnerAccountLog=new PartnerAccountLog();  | 
|             partnerAccountLog.setPartnerId(allAcountParamDto.getPartnerId());  | 
|             partnerAccountLog.setFlowNo(allAcountParamDto.getFlowNo());  | 
|             partnerAccountLog.setType(OrderEnum.恢复额度.getValue());  | 
|             partnerAccountLog.setMoney("-"+realLimit.toString());  | 
|             partnerAccountLogService.add(partnerAccountLog);  | 
|             partnerAccountService.updateReduceMoneyByPartnerId(allAcountParamDto.getPartnerId(),realLimit);  | 
|         }  | 
|   | 
|   | 
|   | 
|         log.debug("额度恢复操作已完成");  | 
|         return null;  | 
|     }  | 
| }  |