From 05f4014b9a813b8e0a81aa09a4d7a5dd7e14ac64 Mon Sep 17 00:00:00 2001 From: linfso Date: Fri, 14 Mar 2025 15:38:41 +0800 Subject: [PATCH] md --- .../erp/emis/service/EmisBaseService.java | 234 +++++++++++------- .../service/impl/EmisWaybillServiceImpl.java | 29 ++- 2 files changed, 160 insertions(+), 103 deletions(-) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index 601e82f5a..eee1fa185 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -151,11 +151,8 @@ public class EmisBaseService { @Autowired private EmisTmsCostFeeMapper emisTmsCostFeeMapper; - - private static SysUser emptySysUser = new SysUser(); - static { emptySysUser.setUserId(0L); emptySysUser.setEmpCode("0"); @@ -191,7 +188,6 @@ public class EmisBaseService { @Autowired private EmisSettleBillMapper emisSettleBillMapper; - @Autowired private EmisSettleSubBillFeeitemMapper emisSettleSubBillFeeitemMapper; @@ -215,110 +211,119 @@ public class EmisBaseService { } /** - * 新下单使用信用额度 - * @param emisWaybill + * 获取运单结算方式 1-现金 2-月结 3-其它(免单) + * @param waybill + * @return */ - public void newUseQuotaCredit(EmisWaybill emisWaybill) throws EmisBizError { - String paymentType=emisWaybill.getPaymentType(); - - // 月结客户 - if("2".equals(paymentType) - || "4".equals(paymentType) - || "5".equals(paymentType) - ){ - - // 月结额度占用 - EmisCreditCustomer queryCreditCustomer = new EmisCreditCustomer(); - queryCreditCustomer.setMonthlyPayCode(emisWaybill.getCustNo()); - queryCreditCustomer.getParams().put("sendDate",emisWaybill.getSendDate()); - queryCreditCustomer.setTransType(emisWaybill.getTransType()); - List listCreditCustomer=emisCreditCustomerMapper.selectEmisCreditCustomerList(queryCreditCustomer); - - 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 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); - } - } - } + private String getWaybillSettleType(EmisWaybill waybill){ + String settleType=""; + String paymentType = waybill.getPaymentType(); + if ("2".equals(paymentType) + || "4".equals(paymentType) + || "5".equals(paymentType) + ) { + settleType="2"; + }else if ("1".equals(paymentType) || "3".equals(paymentType)){ + settleType="1"; + } + else if ("1".equals(paymentType) || "3".equals(paymentType)){ + settleType="3"; + } + return settleType; } + /** * 检查是否可调整额度 * @param oldBill * @param newBill * @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.getPaymentType().equals(newBill.getPaymentType())){ -// -// } + String oldSettleType=getWaybillSettleType(oldBill); + String newSettleType=getWaybillSettleType(newBill); - //1.改变支付方式 现金改月结或月结改现金 -// String oldSettleType=""; -// String oldPaymentType = oldBill.getPaymentType(); -// if ("2".equals(oldPaymentType) -// || "4".equals(oldPaymentType) -// || "5".equals(oldPaymentType) -// ) { -// oldSettleType="2"; -// }else if ("1".equals(oldPaymentType) || "3".equals(oldPaymentType)){ -// oldSettleType="1"; -// } -// -// String newSettleType=""; -// if ("2".equals(oldPaymentType) -// || "4".equals(oldPaymentType) -// || "5".equals(oldPaymentType) -// ) { -// oldSettleType="2"; -// } + // 结算方式相同,判断增加的额度是否在范围内 + if(oldSettleType.equals(newSettleType)){ + BigDecimal changeMoney=newBill.getFreight().subtract(oldBill.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, "超出信用额度"); + } + } + } + } + // 如果结算方式不同,需要判断新的 + 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 newBill - */ - public void adjustUseQuotaCredit(EmisWaybill oldBill,EmisWaybill newBill) throws EmisBizError { - - - + /** + * 重新计算使用信用额度 + * @param oldBill + * @param newBill + */ + public void reCalcUseQuotaCredit(EmisWaybill oldBill,EmisWaybill newBill) throws EmisBizError { // 更新旧的统计 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 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 listCreditSalesmen = emisCreditSalesmenMapper.selectEmisCreditSalesmenList(queryCreditSalesmen); + + if (!CollectionUtils.isEmpty(listCreditSalesmen)) { + return listCreditSalesmen.get(0); + } + + return null; + } + + + /** * 录入运单操作日志 * @param billCode @@ -2064,7 +2112,7 @@ public class EmisBaseService { Integer typeId = emisProblemType.getId(); if(typeId == 173 || typeId == 170 || typeId == 151) { try { - adjustUseQuotaCredit(oldEmisWaybill, null); + reCalcUseQuotaCredit(oldEmisWaybill, null); } catch (EmisBizError emisBizError) { log.error("问题件信用额度计算失败"); emisBizError.printStackTrace(); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java index 8b1bcd64d..02358ae92 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java @@ -1421,11 +1421,14 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb // 把历史发货日期带过来用于重新计算预估到到时间 emisWaybillSave.setSendDate(emisWaybillOld.getSendDate()); + // 检查信用额度 + checkUseQuotaCredit(null,emisWaybillSave); + // 修改运单 reUpdateWayBill(emisWaybillOld, emisWaybillSave); // 信用额度计算 - adjustUseQuotaCredit(emisWaybillOld,emisWaybillSave); + reCalcUseQuotaCredit(emisWaybillOld,emisWaybillSave); } } @@ -1627,8 +1630,7 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb emisWaybillSave.setGoodsPics("1"); } - // 新占用信用额度 - newUseQuotaCredit(emisWaybillSave); + // 基础信息更新 emisWaybillMapper.updateEmisWaybill(emisWaybillSave); @@ -1714,6 +1716,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb dispatchOrSendManCode=emisWaybillSave.getTakePieceEmployeeCode(); } + // 检查信用额度 + checkUseQuotaCredit(null,emisWaybillSave); + // 做订单接单确认 emisWaybillMapper.confirmOrder(emisWaybillSave); @@ -1738,10 +1743,14 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb // 运单修改需要重新出账 try { redoGenerateBill(emisWaybillSave.getBillCode()); + // 新占用信用额度 + reCalcUseQuotaCredit(emisWaybillSave,null); }catch (Exception ex){ ex.printStackTrace(); } + + // 生成寄件底单联 try { this.genWaybillOrigAttach(emisWaybillSave.getBillCode()); @@ -3019,8 +3028,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb emisWaybillSave.setGoodsPics("1"); } - // 新占用信用额度 - newUseQuotaCredit(emisWaybillSave); + + // 检查信用额度 + checkUseQuotaCredit(null,emisWaybillSave); //插入新单 emisWaybillMapper.insertEmisWaybill(emisWaybillSave); @@ -3155,6 +3165,10 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb try { // 出账 redoGenerateBill(emisWaybillSave.getBillCode()); + + // 更新信用额度 + reCalcUseQuotaCredit(null, emisWaybillSave); + // 重新计算提成 emisCommissionProfitService.reCalcProfitByBillCode(emisWaybillSave.getBillCode()); @@ -3385,13 +3399,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb // 公共计算部分 calcWayBillCommonInfoByApi(emisWaybillSave,true); - // 新占用信用额度 - newUseQuotaCredit(emisWaybillSave); - // 插入运单数据 emisWaybillMapper.insertEmisWaybill(emisWaybillSave); - // 绑定专属业务员 String bindEmpCode=emisWaybillSave.getTakePieceEmployeeCode(); if(StringUtils.isEmpty(bindEmpCode)){ @@ -3403,7 +3413,6 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb bindSalesmen(bindEmpCode,customerCode); } - // 扣减子单 emisElectronicSitePagService.realMatchSubBill(emisWaybillSave.getSendSiteCode(),"T7080",emisWaybillSave.getParcelQty());