This commit is contained in:
linfso 2025-07-11 09:34:31 +08:00
parent 8afce5fdaf
commit 4ff754cfaf

View File

@ -492,7 +492,7 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
// 网点机场短驳费 - 1002
// (2)新创建表(短驳费):机场到网点之间的距离表;记录 起始网点、下一网点、开始日期、结束日期、公里数、单价、供应商、计费类型:按公斤
// 删除短驳费
// 删除短驳费
emisTmsCostFeeSplitMapper.deleteByBillCodeAndFeeType(billCode,"1002");
// 重新计算短驳费
List<EmisTmsCostQuotePrice> 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<EmisTmsCostQuotePrice> 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<String, Object> 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);
}
}
}