This commit is contained in:
linfso 2025-07-04 09:31:56 +08:00
parent 93c12a6e72
commit fe60f49f68

View File

@ -18,7 +18,9 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Options;
import com.xdadan.erp.common.core.domain.entity.SysUser;
import com.xdadan.erp.common.utils.DateUtils;
import com.xdadan.erp.emis.domain.*;
@ -325,7 +327,11 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
itemCalcExpr="s";
}
String calcExprStr=getCalcFeeExpStr(itemCalcExpr,mainWaybill.getBillWeight(),BigDecimal.valueOf(10.0D),BigDecimal.valueOf(1.0D));
double costFee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString());
Map<String, Object> env = new HashMap<>();
env.put("w", mainWaybill.getBillWeight());
env.put("s", BigDecimal.valueOf(10.0D));
env.put("d", BigDecimal.valueOf(1.0D));
double costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
log.info("网点取件费:计算公式:" + calcExprStr + ",重量:" + mainWaybill.getBillWeight().stripTrailingZeros().toPlainString());
// 取件费按进1获取
@ -417,7 +423,12 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
}
String calcExprStr=getCalcFeeExpStr(itemCalcExpr,mainWaybill.getBillWeight(),BigDecimal.valueOf(15.0D),BigDecimal.valueOf(1.5D));
double costFee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString());
Map<String, Object> env = new HashMap<>();
env.put("w", mainWaybill.getBillWeight());
env.put("s", BigDecimal.valueOf(15.0D));
env.put("d", BigDecimal.valueOf(1.5D));
double costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
log.info("网点派送费:计算公式:" + calcExprStr + ",重量:" + mainWaybill.getBillWeight().stripTrailingZeros().toPlainString());
costFee=WaybillHelper.calcSettledFee(costFee,"5");
@ -497,7 +508,11 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
.replaceAll("t", quotePriceItem.getTransWeight().stripTrailingZeros().toPlainString())
.replaceAll("c", totalDbCostFee.stripTrailingZeros().toPlainString());
double costFee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString());
Map<String, Object> env = new HashMap<>();
env.put("w", mainWaybill.getBillWeight());
env.put("t", quotePriceItem.getTransWeight());
env.put("c", totalDbCostFee);
double costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
log.info("网点机场短驳费:计算公式:" + calcExprStr + ",重量:" + waybill.getBillWeight().stripTrailingZeros().toPlainString());
@ -588,7 +603,12 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
}
double costFee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString());
Map<String, Object> env = new HashMap<>();
env.put("w", mainWaybill.getBillWeight());
env.put("t", quotePriceItem.getTransWeight());
env.put("d", quotePriceItem.getPrice());
env.put("c", totalDbCostFee);
double costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
log.info("机场提货费操作费:计算公式:" + calcExprStr + ",重量:" + waybill.getBillWeight().stripTrailingZeros().toPlainString());
@ -884,7 +904,11 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
.replaceAll("t", oldCostFee.getRealTotalWeight().stripTrailingZeros().toPlainString())
.replaceAll("c", totalDbCostFee.stripTrailingZeros().toPlainString());
costFee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString());
Map<String, Object> env = new HashMap<>();
env.put("w", waybill.getBillWeight());
env.put("t", oldCostFee.getRealTotalWeight());
env.put("c", totalDbCostFee);
costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
log.info("按重量分摊:计算公式:" + calcExprStr + ",重量:" + waybill.getBillWeight().stripTrailingZeros().toPlainString());
}
@ -894,7 +918,11 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
calcExprStr=itemCalcExpr.replaceAll("w", waybill.getTotalVolume().stripTrailingZeros().toPlainString())
.replaceAll("t", oldCostFee.getRealTotalVolume().stripTrailingZeros().toPlainString())
.replaceAll("c", totalDbCostFee.stripTrailingZeros().toPlainString());
costFee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString());
Map<String, Object> env = new HashMap<>();
env.put("w", waybill.getBillWeight());
env.put("t", oldCostFee.getRealTotalVolume());
env.put("c", totalDbCostFee);
costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
log.info("按体积分摊:计算公式:" + calcExprStr + ",重量:" + waybill.getBillWeight().stripTrailingZeros().toPlainString());
}
@ -903,7 +931,10 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
itemCalcExpr="(1/t)*c";
calcExprStr=itemCalcExpr.replaceAll("t",sendPieceSum.toString())
.replaceAll("c", totalDbCostFee.stripTrailingZeros().toPlainString());
costFee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString());
Map<String, Object> env = new HashMap<>();
env.put("t", new BigDecimal(sendPieceSum.toString()));
env.put("c", totalDbCostFee);
costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
log.info("按票分摊:计算公式:" + calcExprStr + ",票数:1");
}
@ -1117,8 +1148,23 @@ public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisT
}
public static void main(String[] args) {
double costFee=WaybillHelper.calcSettledFee(0.001,"5");
// double costFee=WaybillHelper.calcSettledFee(0.001,"5");
// BigDecimal splitCostFee = BigDecimal.valueOf(costFee).setScale(0,BigDecimal.ROUND_HALF_UP);
// double costFee = AviatorEvaluator.execute("(19/234)*150");
// 设置全局选项
String itemCalcExpr="(w/t)*c";
AviatorEvaluator.setOption(Options.ALWAYS_PARSE_FLOATING_POINT_NUMBER_INTO_DECIMAL, true);
String calcExprStr="(19/234)*150";
// System.out.println(JSON.toJSONString(AviatorEvaluator.execute(calcExprStr)));
Map<String, Object> env = new HashMap<>();
env.put("w", new BigDecimal("19"));
env.put("t", new BigDecimal("234"));
env.put("c", new BigDecimal("150"));
double costFee = Double.valueOf(AviatorEvaluator.execute(itemCalcExpr,env).toString());
System.out.println(costFee);
}