xiaoyong931011
2021-08-04 ea868a98b776b9e89db429a195704a1412ca8905
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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;
    }
}