|
@@ -1359,7 +1359,7 @@ public class BmstruckDetailsOrderServiceImpl implements IBmstruckDetailsOrderSer
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public int updateDetailsDirect(Map<String, Object> mapValue) throws Exception {
|
|
|
+ public synchronized int updateDetailsDirect(Map<String, Object> mapValue) throws Exception {
|
|
|
List<BigDecimal> orderIds = (List<BigDecimal>) mapValue.get("orderList");
|
|
|
BigDecimal priceValue = DataChange.dataToBigDecimal(mapValue.get("detailAmount"));//以java变量名为准,这里是所填写的单价值
|
|
|
if(priceValue.intValue() < 0){
|
|
@@ -1388,32 +1388,39 @@ public class BmstruckDetailsOrderServiceImpl implements IBmstruckDetailsOrderSer
|
|
|
bmstruckDetailsOrderMapper.updateAsomPriceIdByOrderId(orderId,priceId);
|
|
|
saleLogUtil.logOrder(orderId,"直接修改单价",userName,SaleLogUtil.UPDATE);
|
|
|
//查询订单计量详情
|
|
|
- List<Map<String,Object>> weightTaskResultIdList = bmstruckDetailsOrderMapper.getSteelWeightTaskResultId(orderId);
|
|
|
- for (Map<String, Object> map : weightTaskResultIdList) {
|
|
|
- BigDecimal weightTaskResultId = DataChange.dataToBigDecimal(map.get("weightTaskResultId"));
|
|
|
- BigDecimal netWeightIsNull = bmstruckDetailsOrderMapper.getNetWeight(weightTaskResultId);
|
|
|
- if (netWeightIsNull == null) {
|
|
|
+ List<Map<String,Object>> batchIdList = bmstruckDetailsOrderMapper.getWeightBatchIds(orderId);
|
|
|
+ for (Map<String, Object> map : batchIdList) {
|
|
|
+ BigDecimal weightBatchId = DataChange.dataToBigDecimal(map.get("weightBatchId"));
|
|
|
+ //根据计量实绩查找批次ID
|
|
|
+ BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
|
|
|
+ if (netWeight == null) {
|
|
|
System.out.println("没有计量实绩,不生成结算数据:" + orderId);
|
|
|
continue;
|
|
|
}
|
|
|
- //计算总费用
|
|
|
- BigDecimal detailsAmountOld = generateTruckFeesForDirect(priceValue, weightTaskResultId);
|
|
|
+ // 得到计费公式
|
|
|
+ String formula_string = null;
|
|
|
+ if (orderType.intValue() >= 1 && orderType.intValue() <= 3) {
|
|
|
+ // 得到销售10km差距内的汽运计费公式
|
|
|
+ formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(10));
|
|
|
+ // 替换采购汽运运计算公式
|
|
|
+ formula_string = formula_string.replace("运输单价",priceValue.toString())
|
|
|
+ .replace("物资净重",netWeight.toString());
|
|
|
+ }
|
|
|
+ String s = toSufExpr(formula_string);
|
|
|
+ BigDecimal detailsAmountOld = calSufExpr(s);
|
|
|
Double amount = detailsAmountOld.doubleValue();
|
|
|
BigDecimal detailsAmount = new BigDecimal(amount).setScale(2,RoundingMode.HALF_UP);
|
|
|
- //判断该计量实绩有没有结算数据
|
|
|
- if(bmstruckDetailsOrderMapper.getIsHaveDetailsOrder(weightTaskResultId) > 0 ){
|
|
|
- //如果有,更新
|
|
|
- Map<String,Object> temp =new HashMap<>();
|
|
|
- temp.put("orderId",orderId);
|
|
|
- temp.put("weightTaskResultId",weightTaskResultId);
|
|
|
- temp.put("priceValue",priceValue);
|
|
|
- temp.put("detailAmount",detailsAmount);
|
|
|
- temp.put("detailRemark",detailRemark);
|
|
|
- temp.put("url",url);
|
|
|
- temp.put("userId",userId);
|
|
|
- result +=bmstruckDetailsOrderMapper.updateTruckDetails(temp);
|
|
|
+ if(bmstruckDetailsOrderMapper.getIsHaveDetailsOrderByBatch(weightBatchId) > 0 ){
|
|
|
+ //获取详单ID
|
|
|
+ BigDecimal detailsId = bmstruckDetailsOrderMapper.getDetailsIdByBatchId(weightBatchId);
|
|
|
+ BmstruckDetailsOrder bmstruckDetailsOrder = bmstruckDetailsOrderMapper.selectByPrimaryKey(detailsId);
|
|
|
+ bmstruckDetailsOrder.setDetailsId(detailsId);
|
|
|
+ bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
|
|
|
+ result += bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder);
|
|
|
continue;
|
|
|
}
|
|
|
+ //计算总费用
|
|
|
+ //判断该计量实绩有没有结算数据
|
|
|
//否则,新增详单
|
|
|
try {
|
|
|
BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
|
|
@@ -1422,7 +1429,7 @@ public class BmstruckDetailsOrderServiceImpl implements IBmstruckDetailsOrderSer
|
|
|
BigDecimal detailsId = selectMaxId();
|
|
|
String detailsNo = noUtil.setResultNo("QYXD", detailsId);
|
|
|
bmstruckDetailsOrder.setDetailsId(detailsId);
|
|
|
- bmstruckDetailsOrder.setWeightTaskResultId(weightTaskResultId);
|
|
|
+ bmstruckDetailsOrder.setWeightBatchId(weightBatchId);
|
|
|
bmstruckDetailsOrder.setOrderId(orderId);
|
|
|
bmstruckDetailsOrder.setDetailsNo(detailsNo);
|
|
|
bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
|