diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderInfoServiceImpl.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderInfoServiceImpl.java index 040ac40b..a9eb03e2 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderInfoServiceImpl.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderInfoServiceImpl.java @@ -2021,6 +2021,7 @@ public class OrderInfoServiceImpl implements OrderInfoService { public R mergeOrderItem(String entId, String orderInfoId,List itemList) throws Exception{ List orderItemInfos = orderItemInfoMapper.selectAllByOrderId(Arrays.asList(orderInfoId), null); + OrderInfo orderInfo = orderMapper.selectOrderInfoByOrderId(orderInfoId, null); if(ObjectUtil.isNull(orderItemInfos)){ return R.error("根据订单号未查询到明细行信息"); } @@ -2033,6 +2034,12 @@ public class OrderInfoServiceImpl implements OrderInfoService { }else{ collect = orderItemInfos; } + TaxEquipmentInfo taxEquipmentInfo = simsBackService.queryTaxEquipment(orderInfo.getNsrsbh(), entId); + if(taxEquipmentInfo == null ||StringUtils.isBlank(taxEquipmentInfo.getSksbCode())){ + return R.error("税控设备查询为空"); + } + String sksbCode = taxEquipmentInfo.getSksbCode(); + boolean termType = OrderInfoEnum.TAX_EQUIPMENT_FGBW.equals(sksbCode) || OrderInfoEnum.TAX_EQUIPMENT_FGUKEY.equals(sksbCode); Map> collect1 = collect.stream().map(t->{ t.setXmmc(StringUtils.isBlank(t.getXmmc())?"":t.getXmmc()); t.setXmdw(StringUtils.isBlank(t.getXmdw())?"":t.getXmdw()); @@ -2070,16 +2077,16 @@ public class OrderInfoServiceImpl implements OrderInfoService { } orderItemInfo.setCreateTime(new Date()); orderItemInfo.setSe(se.toString()); - if(se.subtract(taxAmount).abs().doubleValue() > 0.06){ - log.info("订单id:{}合并明细超过0.06",orderInfoId); + if((termType && se.subtract(taxAmount).abs().doubleValue() > 0.01) || (!termType &&se.subtract(taxAmount).abs().doubleValue() > 0.06)){ + log.info("订单id:{}合并明细误差超过额度",orderInfoId); BigDecimal taxAndAmount = xmje.add(se); BigDecimal taxAmountNew = taxAndAmount.divide(new BigDecimal("1").add(taxRate),0).multiply(taxRate).setScale(2,RoundingMode.HALF_UP); - BigDecimal xmjeNew = taxAndAmount.multiply(taxAmountNew); - orderItemInfo.setXmje(xmje.add(se).subtract(taxAmountNew).toString()); + BigDecimal xmjeNew = taxAndAmount.subtract(taxAmountNew); + orderItemInfo.setXmje(xmjeNew.toString()); orderItemInfo.setSe(taxAmountNew.toString()); if(StringUtils.isNotBlank(orderItemInfo.getXmsl())){ BigDecimal xmdj = xmjeNew.divide(xmsl, 8, RoundingMode.HALF_UP); - if(xmdj.multiply(xmsl).subtract(xmjeNew).longValue() > 0.01){ + if(xmdj.multiply(xmsl).subtract(xmjeNew).doubleValue() > 0.01){ orderItemInfo.setXmsl(xmjeNew.divide(xmdj,8,RoundingMode.HALF_UP).toString()); } orderItemInfo.setXmdj(xmdj.toString()); @@ -2092,12 +2099,14 @@ public class OrderInfoServiceImpl implements OrderInfoService { deleteItem.addAll(value.stream().map(t->t.getId()).collect(Collectors.toList())); } log.debug("合并明细{}",JSONObject.toJSONString(orderItemInfoList)); + if((termType && diffSe.abs().doubleValue() > 0.06) || (!termType && diffSe.abs().doubleValue() > 1.27)){ + return R.error("合并失败,合并明细后价税合计超过总的误差范围"); + } if(!orderItemInfoList.isEmpty()){ orderItemInfoMapper.deleteItemByItemId(deleteItem); orderItemInfoMapper.insertOrderItemByList(orderItemInfoList); } //更新清单标志 重新设置金额 - OrderInfo orderInfo = orderMapper.selectOrderInfoByOrderId(orderInfoId, null); OrderInfo orderInfoNew = new OrderInfo(); orderInfoNew.setId(orderInfoId); orderInfoNew.setUpdateTime(new Date());