diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index 4e0d40b92..5a889a3f5 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -4839,58 +4839,67 @@ public class EmisBaseService { emisWaybillMapper.updateEmisWaybill(emisWaybill); } - public EmisWaybill checkVirtualParam(EmisWaybill emisWaybillSave, EmisWaybill emisWaybillOld) throws EmisBizError { - if (StringUtil.isBlank(emisWaybillSave.getMasterBillCode())) { - throw new EmisBizError(EmisBizErrorType.FAIL, "主单号不能为空"); - } - if (!"002".equals(emisWaybillSave.getTransLineType()) && !"012".equals(emisWaybillSave.getTransLineType()) && !"014".equals(emisWaybillSave.getTransLineType())) { - throw new EmisBizError(EmisBizErrorType.FAIL, "虚拟单只支持线路为缅甸快递/缅甸快递进口/柬埔寨快递进口"); - } - EmisWaybill masterWaybill = emisWaybillMapper - .selectEmisWaybillByBillCode(emisWaybillSave.getMasterBillCode()); - if (Objects.isNull(masterWaybill)) { - throw new EmisBizError(EmisBizErrorType.FAIL, "主单号不存在"); - } - if (!emisWaybillSave.getReceiveCountry().equals(masterWaybill.getReceiveCountry()) - || !emisWaybillSave.getTransLineType().equals(masterWaybill.getTransLineType()) || !emisWaybillSave.getProductType().equals(masterWaybill.getProductType())) { - throw new EmisBizError(EmisBizErrorType.FAIL, "主单和虚拟单线路不一致"); - } - if ("1".equals(masterWaybill.getBlVirtual())) { - throw new EmisBizError(EmisBizErrorType.FAIL, "虚拟单不能作为主单"); - } - if (emisWaybillOld == null || !"1".equals(emisWaybillOld.getBlVirtual())) { - if (masterWaybill.getVirtualRemark().split(",").length >= masterWaybill.getParcelQty()) { - throw new EmisBizError(EmisBizErrorType.FAIL, emisWaybillSave.getMasterBillCode() + "最多只能绑定" + masterWaybill.getParcelQty() + "个虚拟单"); - } - } + public EmisWaybill checkVirtualParam(EmisWaybill emisWaybillSave, EmisWaybill emisWaybillOld) throws EmisBizError { + if (StringUtil.isBlank(emisWaybillSave.getMasterBillCode())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "主单号不能为空"); + } + if (!"002".equals(emisWaybillSave.getTransLineType()) && !"012".equals(emisWaybillSave.getTransLineType()) + && !"014".equals(emisWaybillSave.getTransLineType())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "虚拟单只支持线路为缅甸快递/缅甸快递进口/柬埔寨快递进口"); + } + EmisWaybill masterWaybill = emisWaybillMapper + .selectEmisWaybillByBillCode(emisWaybillSave.getMasterBillCode()); + if (Objects.isNull(masterWaybill)) { + throw new EmisBizError(EmisBizErrorType.FAIL, "主单号不存在"); + } + if (!emisWaybillSave.getReceiveCountry().equals(masterWaybill.getReceiveCountry()) + || !emisWaybillSave.getTransLineType().equals(masterWaybill.getTransLineType()) + || !emisWaybillSave.getProductType().equals(masterWaybill.getProductType())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "主单和虚拟单线路不一致"); + } + if ("1".equals(masterWaybill.getBlVirtual())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "虚拟单不能作为主单"); + } + if (!emisWaybillSave.getMasterBillCode().equals(emisWaybillOld.getMasterBillCode())) { + String virtualRemark = masterWaybill.getVirtualRemark() == null ? "" : masterWaybill.getVirtualRemark(); + long count = Arrays.stream(virtualRemark.split(",")) + .filter(s -> s != null && !s.trim().isEmpty()) + .count(); + if (count >= masterWaybill.getParcelQty()) { + throw new EmisBizError(EmisBizErrorType.FAIL, + emisWaybillSave.getMasterBillCode() + "最多只能绑定" + masterWaybill.getParcelQty() + "个虚拟单"); + } + } - List batchList = emisTmsSiteBatchMapper.selectEmisTmsSiteBatchListByBillCodes( - Lists.newArrayList(Collections.singleton(emisWaybillSave.getMasterBillCode()))); - if (CollectionUtil.isNotEmpty(batchList)) { - throw new EmisBizError(EmisBizErrorType.FAIL, "该单号已经录入批次,请先在组批次中剔除该运单"); - } - return masterWaybill; - } + List batchList = emisTmsSiteBatchMapper.selectEmisTmsSiteBatchListByBillCodes( + Lists.newArrayList(Collections.singleton(emisWaybillSave.getMasterBillCode()))); + if (CollectionUtil.isNotEmpty(batchList)) { + throw new EmisBizError(EmisBizErrorType.FAIL, "该单号已经录入批次,请先在组批次中剔除该运单"); + } + return masterWaybill; + } - public void handleVirtualForUpdate(EmisWaybill emisWaybillSave, EmisWaybill emisWaybillOld) throws EmisBizError { - if (!StringUtils.isEmpty(emisWaybillSave.getBlVirtual()) && "1".equals(emisWaybillSave.getBlVirtual())) { - handleVirtual(emisWaybillSave,emisWaybillOld); - } else { - String masterBillCode = emisWaybillOld.getMasterBillCode(); - if (StringUtil.isNotBlank(masterBillCode)) { - String virtualBillCodeLastSix = emisWaybillSave.getBillCode().substring(emisWaybillSave.getBillCode().length() - 6); - EmisWaybill masterWaybill = emisWaybillMapper - .selectEmisWaybillByBillCode(masterBillCode); - List filterVirtualRemark = Arrays.stream(masterWaybill.getVirtualRemark().split(",")).filter(i -> !i.equals(virtualBillCodeLastSix)).collect(Collectors.toList()); - String virtualRemark = String.join(",", filterVirtualRemark); - masterWaybill.setVirtualRemark(virtualRemark); - emisWaybillMapper.updateEmisWaybill(masterWaybill); - emisWaybillProblemInfoService.deleteEmisWaybillProblemInfoByBillCode(emisWaybillSave.getBillCode()); - // 重新计算提成 - emisCommissionProfitService.reCalcProfitByBillCode(emisWaybillSave.getBillCode()); - } - } - } + public void handleVirtualForUpdate(EmisWaybill emisWaybillSave, EmisWaybill emisWaybillOld) throws EmisBizError { + if (!StringUtils.isEmpty(emisWaybillSave.getBlVirtual()) && "1".equals(emisWaybillSave.getBlVirtual())) { + handleVirtual(emisWaybillSave, emisWaybillOld); + } else { + String masterBillCode = emisWaybillOld.getMasterBillCode(); + if (StringUtil.isNotBlank(masterBillCode)) { + String virtualBillCodeLastSix = emisWaybillSave.getBillCode() + .substring(emisWaybillSave.getBillCode().length() - 6); + EmisWaybill masterWaybill = emisWaybillMapper + .selectEmisWaybillByBillCode(masterBillCode); + List filterVirtualRemark = Arrays.stream(masterWaybill.getVirtualRemark().split(",")) + .filter(i -> !i.equals(virtualBillCodeLastSix)).collect(Collectors.toList()); + String virtualRemark = String.join(",", filterVirtualRemark); + masterWaybill.setVirtualRemark(virtualRemark); + emisWaybillMapper.updateEmisWaybill(masterWaybill); + emisWaybillProblemInfoService.deleteEmisWaybillProblemInfoByBillCode(emisWaybillSave.getBillCode()); + // 重新计算提成 + emisCommissionProfitService.reCalcProfitByBillCode(emisWaybillSave.getBillCode()); + } + } + } public static void main(String[] args) throws ParseException { // Date startDate = new Date("202"); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java index 548ff7fa9..ffe6aef3d 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java @@ -3128,7 +3128,7 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb // 虚拟件逻辑 if ("1".equals(emisWaybillSave.getBlVirtual())) { - updateMasterWaybill(emisWaybillSave,null); + updateMasterWaybill(emisWaybillSave,new EmisWaybill()); } //插入新单 diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index 85bf867b7..1c1dc6088 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -590,6 +590,7 @@ + order by a.send_date desc limit 10