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
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<EmisCreditCustomer> 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<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);
}
}
}
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<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
@ -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();

View File

@ -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());