This commit is contained in:
linfso 2025-03-14 15:38:41 +08:00
parent ff8f78ebcd
commit 05f4014b9a
2 changed files with 160 additions and 103 deletions

View File

@ -151,11 +151,8 @@ public class EmisBaseService {
@Autowired @Autowired
private EmisTmsCostFeeMapper emisTmsCostFeeMapper; private EmisTmsCostFeeMapper emisTmsCostFeeMapper;
private static SysUser emptySysUser = new SysUser(); private static SysUser emptySysUser = new SysUser();
static { static {
emptySysUser.setUserId(0L); emptySysUser.setUserId(0L);
emptySysUser.setEmpCode("0"); emptySysUser.setEmpCode("0");
@ -191,7 +188,6 @@ public class EmisBaseService {
@Autowired @Autowired
private EmisSettleBillMapper emisSettleBillMapper; private EmisSettleBillMapper emisSettleBillMapper;
@Autowired @Autowired
private EmisSettleSubBillFeeitemMapper emisSettleSubBillFeeitemMapper; private EmisSettleSubBillFeeitemMapper emisSettleSubBillFeeitemMapper;
@ -215,110 +211,119 @@ public class EmisBaseService {
} }
/** /**
* 新下单使用信用额度 * 获取运单结算方式 1-现金 2-月结 3-其它(免单)
* @param emisWaybill * @param waybill
* @return
*/ */
public void newUseQuotaCredit(EmisWaybill emisWaybill) throws EmisBizError { private String getWaybillSettleType(EmisWaybill waybill){
String paymentType=emisWaybill.getPaymentType(); String settleType="";
String paymentType = waybill.getPaymentType();
// 月结客户 if ("2".equals(paymentType)
if("2".equals(paymentType) || "4".equals(paymentType)
|| "4".equals(paymentType) || "5".equals(paymentType)
|| "5".equals(paymentType) ) {
){ settleType="2";
}else if ("1".equals(paymentType) || "3".equals(paymentType)){
// 月结额度占用 settleType="1";
EmisCreditCustomer queryCreditCustomer = new EmisCreditCustomer(); }
queryCreditCustomer.setMonthlyPayCode(emisWaybill.getCustNo()); else if ("1".equals(paymentType) || "3".equals(paymentType)){
queryCreditCustomer.getParams().put("sendDate",emisWaybill.getSendDate()); settleType="3";
queryCreditCustomer.setTransType(emisWaybill.getTransType()); }
List<EmisCreditCustomer> listCreditCustomer=emisCreditCustomerMapper.selectEmisCreditCustomerList(queryCreditCustomer); return settleType;
if(!CollectionUtils.isEmpty(listCreditCustomer)){
EmisCreditCustomer item0=listCreditCustomer.get(0);
BigDecimal preBalance=item0.getCreditMoney().subtract(item0.getUseMoney());
if(emisWaybill.getFreight().compareTo(preBalance) == 1 ){
// 提示异常
throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
}else{
// 加入额度占用
BigDecimal changeMoney=emisWaybill.getFreight();
emisCreditCustomerMapper.changeBalance(item0.getAccCode(),changeMoney);
}
}
}
else if( "1".equals(paymentType) || "3".equals(paymentType) ){
// 现金额度占用
EmisCreditSalesmen queryCreditSalesmen= new EmisCreditSalesmen();
queryCreditSalesmen.setSalesmen(emisWaybill.getSalesmen());
queryCreditSalesmen.getParams().put("sendDate",emisWaybill.getSendDate());
queryCreditSalesmen.setTransType(emisWaybill.getTransType());
queryCreditSalesmen.setBlOpen("1");
List<EmisCreditSalesmen> listCreditSalesmen=emisCreditSalesmenMapper.selectEmisCreditSalesmenList(queryCreditSalesmen);
if(!CollectionUtils.isEmpty(listCreditSalesmen)){
EmisCreditSalesmen item0=listCreditSalesmen.get(0);
BigDecimal preBalance=item0.getCreditMoney().subtract(item0.getUseMoney());
if(emisWaybill.getFreight().compareTo(preBalance) == 1 ){
// 提示异常
throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
}else{
// 更新余额
BigDecimal changeMoney=emisWaybill.getFreight();
emisCreditSalesmenMapper.changeBalance(item0.getAccCode(),changeMoney);
}
}
}
} }
/** /**
* 检查是否可调整额度 * 检查是否可调整额度
* @param oldBill * @param oldBill
* @param newBill * @param newBill
* @throws EmisBizError * @throws EmisBizError
*/ */
public void checkCanUseQuotaCredit(EmisWaybill oldBill,EmisWaybill newBill) throws EmisBizError { public void checkUseQuotaCredit(EmisWaybill oldBill,EmisWaybill newBill) throws EmisBizError {
// 判断调整是否超额 // 修改情况
if(oldBill!=null&&newBill!=null){ if(oldBill!=null&&newBill!=null){
// String oldSettleType=getWaybillSettleType(oldBill);
// if(oldBill.getPaymentType().equals(newBill.getPaymentType())){ String newSettleType=getWaybillSettleType(newBill);
//
// }
//1.改变支付方式 现金改月结或月结改现金 // 结算方式相同,判断增加的额度是否在范围内
// String oldSettleType=""; if(oldSettleType.equals(newSettleType)){
// String oldPaymentType = oldBill.getPaymentType(); BigDecimal changeMoney=newBill.getFreight().subtract(oldBill.getFreight());
// if ("2".equals(oldPaymentType) if(changeMoney.compareTo(BigDecimal.ZERO)>0){
// || "4".equals(oldPaymentType) if("2".equals(newSettleType)){
// || "5".equals(oldPaymentType) EmisCreditCustomer creditCustomer = getEmisCreditCustomerByCond(newBill.getCustNo(),newBill.getSendDate(),newBill.getCarryType());
// ) { BigDecimal preBalance=creditCustomer.getCreditMoney().subtract(creditCustomer.getUseMoney());
// oldSettleType="2"; if(changeMoney.compareTo(preBalance) > 0 ){
// }else if ("1".equals(oldPaymentType) || "3".equals(oldPaymentType)){ // 提示异常
// oldSettleType="1"; throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
// } }
// }
// String newSettleType=""; else if("1".equals(newSettleType)){
// if ("2".equals(oldPaymentType) EmisCreditSalesmen creditSalesmen = getEmisCreditSalesmenByCond(newBill.getSalesmen(),newBill.getSendDate(),newBill.getCarryType());
// || "4".equals(oldPaymentType) BigDecimal preBalance=creditSalesmen.getCreditMoney().subtract(creditSalesmen.getUseMoney());
// || "5".equals(oldPaymentType) if(changeMoney.compareTo(preBalance) > 0 ){
// ) { // 提示异常
// oldSettleType="2"; throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
// } }
}
}
}
// 如果结算方式不同,需要判断新的
else{
BigDecimal changeMoney=newBill.getFreight();
if("2".equals(newSettleType)){
EmisCreditCustomer creditCustomer = getEmisCreditCustomerByCond(newBill.getCustNo(),newBill.getSendDate(),newBill.getCarryType());
BigDecimal preBalance=creditCustomer.getCreditMoney().subtract(creditCustomer.getUseMoney());
if(changeMoney.compareTo(preBalance) > 0 ){
// 提示异常
throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
}
}
else if("1".equals(newSettleType)){
EmisCreditSalesmen creditSalesmen = getEmisCreditSalesmenByCond(newBill.getSalesmen(),newBill.getSendDate(),newBill.getCarryType());
BigDecimal preBalance=creditSalesmen.getCreditMoney().subtract(creditSalesmen.getUseMoney());
if(changeMoney.compareTo(preBalance) > 0 ){
// 提示异常
throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
}
}
}
} }
// 新增情况
else{
// 新单
if(newBill!=null){
String newSettleType=getWaybillSettleType(newBill);
BigDecimal changeMoney=newBill.getFreight();
if(changeMoney.compareTo(BigDecimal.ZERO)>0){
if("2".equals(newSettleType)){
EmisCreditCustomer creditCustomer = getEmisCreditCustomerByCond(newBill.getCustNo(),newBill.getSendDate(),newBill.getCarryType());
BigDecimal preBalance=creditCustomer.getCreditMoney().subtract(creditCustomer.getUseMoney());
if(changeMoney.compareTo(preBalance) > 0 ){
// 提示异常
throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
}
}
else if("1".equals(newSettleType)){
EmisCreditSalesmen creditSalesmen = getEmisCreditSalesmenByCond(newBill.getSalesmen(),newBill.getSendDate(),newBill.getCarryType());
BigDecimal preBalance=creditSalesmen.getCreditMoney().subtract(creditSalesmen.getUseMoney());
if(changeMoney.compareTo(preBalance) > 0 ){
// 提示异常
throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度");
}
}
}
}
}
} }
/** /**
* 重新计算使用信用额度 * 重新计算使用信用额度
* @param oldBill * @param oldBill
* @param newBill * @param newBill
*/ */
public void adjustUseQuotaCredit(EmisWaybill oldBill,EmisWaybill newBill) throws EmisBizError { public void reCalcUseQuotaCredit(EmisWaybill oldBill,EmisWaybill newBill) throws EmisBizError {
// 更新旧的统计 // 更新旧的统计
if(oldBill!=null) { if(oldBill!=null) {
@ -418,6 +423,49 @@ public class EmisBaseService {
} }
} }
/**
* 获取月结额度
* @param custNo
* @param sendDate
* @param transType
* @return
*/
public EmisCreditCustomer getEmisCreditCustomerByCond(String custNo,Date sendDate,String transType){
EmisCreditCustomer queryCreditCustomer = new EmisCreditCustomer();
queryCreditCustomer.setMonthlyPayCode(custNo);
queryCreditCustomer.getParams().put("sendDate", sendDate);
queryCreditCustomer.setTransType(transType);
List<EmisCreditCustomer> listCreditCustomer = emisCreditCustomerMapper.selectEmisCreditCustomerList(queryCreditCustomer);
if (!CollectionUtils.isEmpty(listCreditCustomer)) {
return listCreditCustomer.get(0);
}
return null;
}
/**
* 现金额度占用
* @param salesmen
* @param sendDate
* @param transType
* @return
*/
public EmisCreditSalesmen getEmisCreditSalesmenByCond(String salesmen,Date sendDate,String transType){
EmisCreditSalesmen queryCreditSalesmen = new EmisCreditSalesmen();
queryCreditSalesmen.setSalesmen(salesmen);
queryCreditSalesmen.getParams().put("sendDate", sendDate);
queryCreditSalesmen.setTransType(transType);
queryCreditSalesmen.setBlOpen("1");
List<EmisCreditSalesmen> listCreditSalesmen = emisCreditSalesmenMapper.selectEmisCreditSalesmenList(queryCreditSalesmen);
if (!CollectionUtils.isEmpty(listCreditSalesmen)) {
return listCreditSalesmen.get(0);
}
return null;
}
/** /**
* 录入运单操作日志 * 录入运单操作日志
* @param billCode * @param billCode
@ -2064,7 +2112,7 @@ public class EmisBaseService {
Integer typeId = emisProblemType.getId(); Integer typeId = emisProblemType.getId();
if(typeId == 173 || typeId == 170 || typeId == 151) { if(typeId == 173 || typeId == 170 || typeId == 151) {
try { try {
adjustUseQuotaCredit(oldEmisWaybill, null); reCalcUseQuotaCredit(oldEmisWaybill, null);
} catch (EmisBizError emisBizError) { } catch (EmisBizError emisBizError) {
log.error("问题件信用额度计算失败"); log.error("问题件信用额度计算失败");
emisBizError.printStackTrace(); emisBizError.printStackTrace();

View File

@ -1421,11 +1421,14 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
// 把历史发货日期带过来用于重新计算预估到到时间 // 把历史发货日期带过来用于重新计算预估到到时间
emisWaybillSave.setSendDate(emisWaybillOld.getSendDate()); emisWaybillSave.setSendDate(emisWaybillOld.getSendDate());
// 检查信用额度
checkUseQuotaCredit(null,emisWaybillSave);
// 修改运单 // 修改运单
reUpdateWayBill(emisWaybillOld, emisWaybillSave); reUpdateWayBill(emisWaybillOld, emisWaybillSave);
// 信用额度计算 // 信用额度计算
adjustUseQuotaCredit(emisWaybillOld,emisWaybillSave); reCalcUseQuotaCredit(emisWaybillOld,emisWaybillSave);
} }
} }
@ -1627,8 +1630,7 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
emisWaybillSave.setGoodsPics("1"); emisWaybillSave.setGoodsPics("1");
} }
// 新占用信用额度
newUseQuotaCredit(emisWaybillSave);
// 基础信息更新 // 基础信息更新
emisWaybillMapper.updateEmisWaybill(emisWaybillSave); emisWaybillMapper.updateEmisWaybill(emisWaybillSave);
@ -1714,6 +1716,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
dispatchOrSendManCode=emisWaybillSave.getTakePieceEmployeeCode(); dispatchOrSendManCode=emisWaybillSave.getTakePieceEmployeeCode();
} }
// 检查信用额度
checkUseQuotaCredit(null,emisWaybillSave);
// 做订单接单确认 // 做订单接单确认
emisWaybillMapper.confirmOrder(emisWaybillSave); emisWaybillMapper.confirmOrder(emisWaybillSave);
@ -1738,10 +1743,14 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
// 运单修改需要重新出账 // 运单修改需要重新出账
try { try {
redoGenerateBill(emisWaybillSave.getBillCode()); redoGenerateBill(emisWaybillSave.getBillCode());
// 新占用信用额度
reCalcUseQuotaCredit(emisWaybillSave,null);
}catch (Exception ex){ }catch (Exception ex){
ex.printStackTrace(); ex.printStackTrace();
} }
// 生成寄件底单联 // 生成寄件底单联
try { try {
this.genWaybillOrigAttach(emisWaybillSave.getBillCode()); this.genWaybillOrigAttach(emisWaybillSave.getBillCode());
@ -3019,8 +3028,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
emisWaybillSave.setGoodsPics("1"); emisWaybillSave.setGoodsPics("1");
} }
// 新占用信用额度
newUseQuotaCredit(emisWaybillSave); // 检查信用额度
checkUseQuotaCredit(null,emisWaybillSave);
//插入新单 //插入新单
emisWaybillMapper.insertEmisWaybill(emisWaybillSave); emisWaybillMapper.insertEmisWaybill(emisWaybillSave);
@ -3155,6 +3165,10 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
try { try {
// 出账 // 出账
redoGenerateBill(emisWaybillSave.getBillCode()); redoGenerateBill(emisWaybillSave.getBillCode());
// 更新信用额度
reCalcUseQuotaCredit(null, emisWaybillSave);
// 重新计算提成 // 重新计算提成
emisCommissionProfitService.reCalcProfitByBillCode(emisWaybillSave.getBillCode()); emisCommissionProfitService.reCalcProfitByBillCode(emisWaybillSave.getBillCode());
@ -3385,13 +3399,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
// 公共计算部分 // 公共计算部分
calcWayBillCommonInfoByApi(emisWaybillSave,true); calcWayBillCommonInfoByApi(emisWaybillSave,true);
// 新占用信用额度
newUseQuotaCredit(emisWaybillSave);
// 插入运单数据 // 插入运单数据
emisWaybillMapper.insertEmisWaybill(emisWaybillSave); emisWaybillMapper.insertEmisWaybill(emisWaybillSave);
// 绑定专属业务员 // 绑定专属业务员
String bindEmpCode=emisWaybillSave.getTakePieceEmployeeCode(); String bindEmpCode=emisWaybillSave.getTakePieceEmployeeCode();
if(StringUtils.isEmpty(bindEmpCode)){ if(StringUtils.isEmpty(bindEmpCode)){
@ -3403,7 +3413,6 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb
bindSalesmen(bindEmpCode,customerCode); bindSalesmen(bindEmpCode,customerCode);
} }
// 扣减子单 // 扣减子单
emisElectronicSitePagService.realMatchSubBill(emisWaybillSave.getSendSiteCode(),"T7080",emisWaybillSave.getParcelQty()); emisElectronicSitePagService.realMatchSubBill(emisWaybillSave.getSendSiteCode(),"T7080",emisWaybillSave.getParcelQty());