You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.sifang.modules.account.service;
import com.jfinal.plugin.activerecord.Record;
import com.sifang.modules.account.dao.TraderAccountDao;
import com.sifang.modules.account.entity.CrmTraderAccount;
import com.sifang.modules.sunshine.SystemSetting.utils.BusinessException;
import com.sifang.modules.sys.common.service.BaseService;
import com.sifang.modules.sys.util.LayuiPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class TraderAccountService extends BaseService {
@Autowired
private TraderAccountDao traderAccountDao;
public CrmTraderAccount findByTraderId(String traderId) {
return traderAccountDao.findByTraderId(traderId);
}
public void addSettleAmount(String traderId, BigDecimal settleAmount) {
int row = traderAccountDao.addSettleAmount(traderId, settleAmount);
if (row == 0) {
throw new BusinessException("增加分包款余额失败");
}
}
public void addBasicQuotaAmountBalance(String traderId, BigDecimal settleAmount) {
int row = traderAccountDao.addBasicQuotaAmountBalance(traderId, settleAmount);
if (row == 0) {
throw new BusinessException("增加标准授信额余额失败");
}
}
public void addMaxQuotaAmountBalance(String traderId, BigDecimal settleAmount) {
int row = traderAccountDao.addMaxQuotaAmountBalance(traderId, settleAmount);
if (row == 0) {
throw new BusinessException("增加可授信额上限余额失败");
}
}
public void listTraderAccount(Map<String, String> queryParams, LayuiPage page){
List<Record> accountList = traderAccountDao.listTraderAccount(queryParams, page);
Long cnt = traderAccountDao.countTraderAccount(queryParams);
page.setData(accountList);
page.setCount(cnt);
}
public List<Record> getListForExportExcel(Map<String, String> map){
return traderAccountDao.getListForExportExcel(map);
}
public Record getBondDetail(String traderId){
Record record= traderAccountDao.getBondDetail(traderId);
return record;
}
public void djsAccountChangeList(LayuiPage<Record> page, Map<String, String> map){
traderAccountDao.djsAccountChangeList(page, map);
}
public void zbjAccountChangeLst(LayuiPage<Record> page, Map<String, String> map){
traderAccountDao.zbjAccountChangeLst(page, map);
}
/**
* 首次发货额度:实缴保证金金额+min(通过踏勘审核的进件量*1.2倍,保证金*2倍
* 发货额度min(实缴保证金金额+保证金*2倍-累计未安装量,保证金*5倍-累计未并网量)
* 累计已发货:代理商物料申请单,平台已确认发货数量*零售价;
* 累计已安装标记已安装电站容量MW*1.5*1000000/10000
* 累计已并网量标记已已并网电站容量MW*1.5*1000000/10000
* 累计未安装:累计已发货-累计已安装
* 累计未并网:累计已发货-累计已并网
*/
public BigDecimal countLimit(String traderId,String type){
logger.info(">>>countLimit traderId:{},type:{}",traderId,type);
try{
if("0".equals(type)){
//取信用额度 的设置
Record edSet=traderAccountDao.getEdSetRecord(traderId,"1");
Record record=traderAccountDao.countLimit(traderId);
//获取友夸初始阶段踏勘量
CrmTraderAccount account = traderAccountDao.findByTraderId(traderId);
BigDecimal ykTklTotalCapacity = account.getYkTklTotalCapacity();
logger.info(">>>>>>>>>>>>>>>countLimit one record:{}",record);
BigDecimal totalCapacity=record.getBigDecimal("totalCapacity");
if(totalCapacity==null){
totalCapacity=ykTklTotalCapacity;
}else {
totalCapacity = totalCapacity.add(ykTklTotalCapacity);
}
if(edSet==null){
throw new IllegalArgumentException("请先账号设置首次发货授信方案!");
}
BigDecimal edOne=totalCapacity.multiply(edSet.getBigDecimal("capacity_ratio")).multiply(edSet.getBigDecimal("capacity_multiple"));
BigDecimal edTwo=record.getBigDecimal("bond_amount_limit").multiply(edSet.getBigDecimal("amount"));
logger.info(">>>>>>>>>>>countLimit edOne:{},edTwo:{}",edOne,edTwo);
BigDecimal resultEd=edOne.compareTo(edTwo)>0?edTwo:edOne; //取二者的最小值
resultEd= (resultEd.add(record.getBigDecimal("bzj_amount"))).divide(BigDecimal.ONE, 2);
resultEd = (resultEd.add(record.getBigDecimal( "ykBzjAmount"))).divide(BigDecimal.ONE, 2);
return resultEd;
}else{
//取信用额度 的设计
Record edSet2=traderAccountDao.getEdSetRecord(traderId,"2");
Record recordTwo= traderAccountDao.countLimitTwo(traderId);
logger.info(">>>>>>>>>>>>>>>countLimit recordTwo:{}",recordTwo);
BigDecimal oneEd=BigDecimal.ZERO;
BigDecimal twoEd=BigDecimal.ZERO;
if(recordTwo!=null){
oneEd=recordTwo.getBigDecimal("bzj_amount").add(recordTwo.getBigDecimal("ykBzjAmount")).add(recordTwo.getBigDecimal("bond_amount_limit").multiply(edSet2.getBigDecimal("amount"))).subtract(recordTwo.getBigDecimal("deliverTotalAmount").subtract(recordTwo.getBigDecimal("yazTotalCapacity1")).add(recordTwo.getBigDecimal("yk_deliverTotalCapacity").subtract(recordTwo.getBigDecimal("ykYazTotalCapacity"))));
twoEd=recordTwo.getBigDecimal("bond_amount_limit").multiply(edSet2.getBigDecimal("capacity_multiple")).subtract(recordTwo.getBigDecimal("deliverTotalAmount").subtract(recordTwo.getBigDecimal("ybwTotalCapacity1")).add(recordTwo.getBigDecimal("yk_deliverTotalCapacity").subtract(recordTwo.getBigDecimal("ykYbwTotalCapacity"))));
}
logger.info(">>>>>>>>>>>>countLimit oneEd:{},twoEd:{}",oneEd,twoEd);
BigDecimal resultEd= oneEd.compareTo(twoEd)>0?twoEd:oneEd;
resultEd.divide(BigDecimal.ONE, 2);
return resultEd;
}
}catch (NullPointerException n){
return BigDecimal.ZERO;
}
}
public Map<String,Object> countLimit2(String traderId,String type){
logger.info(">>>countLimit traderId:{},type:{}",traderId,type);
Map<String,Object> map = new HashMap<>();
try{
if("0".equals(type)){
//取信用额度 的设置
Record edSet=traderAccountDao.getEdSetRecord(traderId,"1");
Record record=traderAccountDao.countLimit(traderId);
//获取友夸初始阶段踏勘量
CrmTraderAccount account = traderAccountDao.findByTraderId(traderId);
BigDecimal ykTklTotalCapacity = account.getYkTklTotalCapacity();
logger.info(">>>>>>>>>>>>>>>countLimit one record:{}",record);
BigDecimal totalCapacity=record.getBigDecimal("totalCapacity");
if(totalCapacity==null){
totalCapacity=ykTklTotalCapacity;
}else {
totalCapacity = totalCapacity.add(ykTklTotalCapacity);
}
if(edSet==null){
throw new IllegalArgumentException("请先账号设置首次发货授信方案!");
}
map.put("totalCapacity",totalCapacity);//通过踏勘审核的进件量
BigDecimal edOne=totalCapacity.multiply(edSet.getBigDecimal("capacity_ratio")).multiply(edSet.getBigDecimal("capacity_multiple"));
//保证金额度
BigDecimal bondAmountLimit = record.getBigDecimal("bond_amount_limit");
map.put("bondAmountLimit",bondAmountLimit);//保证金额度
BigDecimal edTwo= bondAmountLimit.multiply(edSet.getBigDecimal("amount"));
logger.info(">>>>>>>>>>>countLimit edOne:{},edTwo:{}",edOne,edTwo);
BigDecimal resultEd=edOne.compareTo(edTwo)>0?edTwo:edOne; //取二者的最小值
//实缴保证金金额
BigDecimal bzjAmount = record.getBigDecimal("bzj_amount");
//友夸实缴保证金金额
BigDecimal ykBzjAmount = record.getBigDecimal("ykBzjAmount");
map.put("bzjAmount",bzjAmount);//实缴保证金金额
map.put("ykBzjAmount",ykBzjAmount);//友夸实缴保证金金额
map.put("totalBzjAmount",bzjAmount.add(ykBzjAmount));
resultEd= (resultEd.add(bzjAmount)).divide(BigDecimal.ONE, 2);
resultEd = (resultEd.add(ykBzjAmount)).divide(BigDecimal.ONE, 2);
map.put("ed",resultEd);//总信用额度
return map;
}else{
//取信用额度 的设计
Record edSet2=traderAccountDao.getEdSetRecord(traderId,"2");
Record recordTwo= traderAccountDao.countLimitTwo(traderId);
logger.info(">>>>>>>>>>>>>>>countLimit recordTwo:{}",recordTwo);
BigDecimal oneEd=BigDecimal.ZERO;
BigDecimal twoEd=BigDecimal.ZERO;
if(recordTwo!=null){
BigDecimal bzjAmount = recordTwo.getBigDecimal("bzj_amount");
map.put("bzjAmount",bzjAmount);//实缴保证金金额
BigDecimal ykBzjAmount = recordTwo.getBigDecimal("ykBzjAmount");//友夸实缴保证金金额
map.put("ykBzjAmount",ykBzjAmount);//友夸实缴保证金金额
map.put("totalBzjAmount",bzjAmount.add(ykBzjAmount));
BigDecimal bondAmountLimit = recordTwo.getBigDecimal("bond_amount_limit");//保证金额度
map.put("bondAmountLimit",bondAmountLimit);//保证金额度
BigDecimal wazTotalCapacity = recordTwo.getBigDecimal("deliverTotalAmount").subtract(recordTwo.getBigDecimal("yazTotalCapacity1")).add(recordTwo.getBigDecimal("yk_deliverTotalCapacity").subtract(recordTwo.getBigDecimal("ykYazTotalCapacity")));
map.put("wazTotalCapacity",wazTotalCapacity);//累计未安装量
oneEd= bzjAmount.add(ykBzjAmount).add(bondAmountLimit.multiply(edSet2.getBigDecimal("amount"))).subtract(wazTotalCapacity);
BigDecimal wbwTotalCapacity = recordTwo.getBigDecimal("deliverTotalAmount").subtract(recordTwo.getBigDecimal("ybwTotalCapacity1")).add(recordTwo.getBigDecimal("yk_deliverTotalCapacity").subtract(recordTwo.getBigDecimal("ykYbwTotalCapacity")));
map.put("wbwTotalCapacity",wbwTotalCapacity);//累计未并网
twoEd= bondAmountLimit.multiply(edSet2.getBigDecimal("capacity_multiple")).subtract(wbwTotalCapacity);
}
logger.info(">>>>>>>>>>>>countLimit oneEd:{},twoEd:{}",oneEd,twoEd);
BigDecimal resultEd= oneEd.compareTo(twoEd)>0?twoEd:oneEd;
resultEd.divide(BigDecimal.ONE, 2);
map.put("ed",resultEd);//总信用额度
return map;
}
}catch (NullPointerException n){
map.put("ed",BigDecimal.ZERO);
return map;
}
}
}