From 4ff754cfaf8abf5097edaeaaacafa0dc88bd4513 Mon Sep 17 00:00:00 2001 From: linfso Date: Fri, 11 Jul 2025 09:34:31 +0800 Subject: [PATCH] md --- .../impl/EmisTmsCostFeeServiceImpl.java | 106 +++++++++++++++++- 1 file changed, 104 insertions(+), 2 deletions(-) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java index fa67116ed..b28cd736c 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java @@ -492,7 +492,7 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT // 网点机场短驳费 - 1002 // (2)新创建表(短驳费):机场到网点之间的距离表;记录 起始网点、下一网点、开始日期、结束日期、公里数、单价、供应商、计费类型:按公斤 - // 删除短驳费 + // 删除短驳费 emisTmsCostFeeSplitMapper.deleteByBillCodeAndFeeType(billCode,"1002"); // 重新计算短驳费 List fixedQuotePrice1002List=emisTmsCostQuotePriceMapper.matchBatchFixedQuotePriceByBillCode(billCode,"1002",1); @@ -509,7 +509,6 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT existsMap.put(uniqKey,1); - EmisTmsCostFeeSplit splitItem = new EmisTmsCostFeeSplit(); splitItem.setBillCode(billCode.trim()); @@ -699,6 +698,109 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT emisTmsCostFeeSplitMapper.insertEmisTmsCostFeeSplit(splitItem); } } + + + // 春疆货场固定报关成本费 - 1005 + emisTmsCostFeeSplitMapper.deleteByBillCodeAndFeeType(billCode,"1005"); + // 计算固定报关成本费 + List fixedQuotePrice1005List=emisTmsCostQuotePriceMapper.matchBatchFixedQuotePriceByBillCode(billCode,"1005",-1); + if(!CollectionUtils.isEmpty(fixedQuotePrice1005List)){ + // 检查重复 + Map existsMap = new HashMap(); + for (EmisTmsCostQuotePrice quotePriceItem : fixedQuotePrice1005List) { + + // 判断是否忽略自清自提 + if("2".equals(mainWaybill.getCustomsClear())&&"1".equals(quotePriceItem.getBlIgnoreZt())){ + continue; + } + + // 如果网点重复就忽略 + String uniqKey = quotePriceItem.getStartSiteCode() + "-"+quotePriceItem.getNextSiteCode(); + if(existsMap.containsKey(uniqKey)){ + continue; + } + existsMap.put(uniqKey,1); + + // 获取批次结算重量 + BigDecimal transVolume=quotePriceItem.getTotalVolume(); + BigDecimal totalSettlementWeight=emisTmsCostQuotePriceMapper.getTotalSettlementWeightByBatchNo(quotePriceItem.getBatchNo()); + BigDecimal transWeight=totalSettlementWeight; + + // 计算 机场提货费操作费 + EmisTmsCostFeeSplit splitItem = new EmisTmsCostFeeSplit(); + splitItem.setBillCode(billCode.trim()); + + splitItem.setMainBillCode(mainBillCode.trim()); + splitItem.setBillWeight(waybill.getSettlementWeight()); // 运单重量 + splitItem.setTotalVolume(waybill.getTotalVolume()); // 运单体积 + + // 运输成本 + splitItem.setBlManual("1"); // 手工计算 + splitItem.setCostNo("-1"); // 固定成本 + splitItem.setBatchNo(quotePriceItem.getBatchNo()); + splitItem.setTransWeight(transWeight); // 运输重量 + splitItem.setTransVolume(transVolume); // 运输体积 + + // 供应商 + splitItem.setSupplierCode(quotePriceItem.getSupplierCode()); // 供应商 + splitItem.setTransSignNo(quotePriceItem.getCarNo()); // 运输号 + + // 起点到目的点 + splitItem.setSendPlace(quotePriceItem.getStartSiteName()); + splitItem.setDestPlace(quotePriceItem.getNextSiteName()); + + splitItem.setBillMonth(DateUtils.parseDateToStr(DateUtils.YYYY_MM, waybill.getSendDate())); + splitItem.setTradeDate(quotePriceItem.getEtd()); + + // 成本分摊 + splitItem.setFeeType("1005"); // 计算固定报关成本费 + splitItem.setSplitType("1"); // 按重量分摊 + splitItem.setFeeItemId(-1L); // 无成本费用项来源 + splitItem.setSplitValue(waybill.getSettlementWeight()); // 分摊重量 + + // 总费用=单价*公里数 + BigDecimal totalDbCostFee = quotePriceItem.getPrice().multiply(transWeight); + + String itemCalcExpr = quotePriceItem.getCalculateExpression(); + + String calcExprStr = itemCalcExpr.replaceAll("w", mainWaybill.getSettlementWeight().stripTrailingZeros().toPlainString()) + .replaceAll("t", transWeight.stripTrailingZeros().toPlainString()) + .replaceAll("c", totalDbCostFee.stripTrailingZeros().toPlainString()); + + Map env = new HashMap<>(); + env.put("w", waybill.getSettlementWeight()); + env.put("t", transWeight); + env.put("d", quotePriceItem.getPrice()); + env.put("c", totalDbCostFee); + double costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString()); + + log.info("固定报关成本费:计算公式:" + calcExprStr + ",重量:" + waybill.getSettlementWeight().stripTrailingZeros().toPlainString()); + + // 如果计算出来的成本大于单项收费取成本费用 + if(costFee > totalDbCostFee.doubleValue()){ + costFee=totalDbCostFee.doubleValue(); + calcExprStr=totalDbCostFee.stripTrailingZeros().toPlainString(); + } + + costFee = WaybillHelper.calcSettledFee(costFee, quotePriceItem.getPriceType()); + + BigDecimal splitCostFee = BigDecimal.valueOf(costFee); + splitItem.setCostFee(splitCostFee); + splitItem.setCurrency("CNY"); + splitItem.setCalcExpr(itemCalcExpr); + splitItem.setCalcRemark(calcExprStr + "=" + splitCostFee.stripTrailingZeros().toPlainString()); + splitItem.setRemark("固定报关成本费"); + + // 总成本费用 + splitItem.setTransCostFee(totalDbCostFee); + splitItem.setCnyFee(totalDbCostFee); + splitItem.setPrice(quotePriceItem.getPrice()); + splitItem.setBlVirtual(waybill.getBlVirtual()); + + // 插入分摊明细数据 + emisTmsCostFeeSplitMapper.insertEmisTmsCostFeeSplit(splitItem); + } + } }