From 37f104fd2b9b4cddeb621034dbb0eb8da69ee212 Mon Sep 17 00:00:00 2001 From: wangwei <1610949092@qq.com> Date: Tue, 8 Apr 2025 11:39:01 +0800 Subject: [PATCH] =?UTF-8?q?4/8=20=E9=80=80=E8=B4=A7=E4=BC=98=E5=8C=961.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IoCollectOrderCodeManController.java | 53 ++- .../collect/IoCollectOrderController.java | 25 +- .../collect/IoCollectOriginController.java | 2 +- .../req/collect/CollectOrderBizRequest.java | 4 + .../glxp/api/req/inout/AddTagCodeReqeust.java | 2 + .../res/collect/CollectOrderBizResponse.java | 2 + .../collect/IoCollectOrderBizService.java | 86 ++++ .../collect/IoCollectOrderCodeManService.java | 400 +++++++++++++++++- .../collect/IoCollectOrderService.java | 1 + .../collect/IoCollectOriginService.java | 45 +- 10 files changed, 607 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java index a7abc4751..5c9404c6d 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java @@ -84,7 +84,11 @@ public class IoCollectOrderCodeManController extends BaseController { } IoCollectOrder collectOrder; try { - collectOrder = collectOrderCodeManService.prescribeTagCode(addTagCodeReqeust); + if (addTagCodeReqeust.getBusType().startsWith("YPCFTF")){ + collectOrder = collectOrderCodeManService.prescribeReturnOrderCode(addTagCodeReqeust); + } else { + collectOrder = collectOrderCodeManService.prescribeTagCode(addTagCodeReqeust); + } return ResultVOUtils.success(collectOrder); } catch (JsonException e) { if (e.getCode() == 503) { @@ -273,8 +277,6 @@ public class IoCollectOrderCodeManController extends BaseController { } else { collectOrderService.removeCode(deleteTageCodeRequest); } - - return ResultVOUtils.success("操作成功!"); } @@ -323,4 +325,49 @@ public class IoCollectOrderCodeManController extends BaseController { } + + /** + * + * + * @return + */ + @PostMapping("/udiwms/ioSplit/collect/order/splitReturnOrderCode") + @CusRedissonAnnotation(cacheName = RedissonCacheKey.PRESCRIBE_ADD_CODE, key = {"#addTagCodeReqeust.billNo", "#addTagCodeReqeust.code"}, waitTime = 1, leaseTime = 3, timeOutMsg = "扫码重复提交") + public BaseResponse splitReturnOrderCode(@RequestBody @Valid AddTagCodeReqeust addTagCodeReqeust, + BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + //单行拆零退货 + return collectOrderCodeManService.splitReturnOrderCode(addTagCodeReqeust,1); + } + + + @PostMapping("/udiwms/ioSplit/collect/order/splitOrderCode") + @CusRedissonAnnotation(cacheName = RedissonCacheKey.PRESCRIBE_ADD_CODE, key = {"#addTagCodeReqeust.billNo", "#addTagCodeReqeust.code"}, waitTime = 1, leaseTime = 3, timeOutMsg = "扫码重复提交") + public BaseResponse splitReturnFullOrderCode(@RequestBody @Valid AddTagCodeReqeust addTagCodeReqeust, + BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + //整单 拆零退货 + return collectOrderCodeManService.splitReturnOrderCode(addTagCodeReqeust,2); + } + + + @PostMapping("/udiwms/ioSplit/collect/code/codeReturnRemove") + public BaseResponse codeReturnRemove(@RequestBody @Valid DeleteTageCodeRequest deleteTageCodeRequest, + BindingResult bindingResult) { + if (CollUtil.isNotEmpty(deleteTageCodeRequest.getCodeManIds())) { + for (Long codeManId : deleteTageCodeRequest.getCodeManIds()) { + deleteTageCodeRequest.setCodeManId(codeManId); + collectOrderService.removeCode(deleteTageCodeRequest); + } + } else { + collectOrderService.removeCode(deleteTageCodeRequest); + } + + + return ResultVOUtils.success("操作成功!"); + } } diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java index 8445b2423..ccf1d77e5 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java @@ -633,8 +633,31 @@ public class IoCollectOrderController extends BaseController { @PostMapping("/udiwms/basic/collect/order/finishReturnOrder") @Transactional(rollbackFor = Exception.class) public BaseResponse finishReturnOrder(@RequestBody CollectOrderRequest collectOrderRequest) { - return collectOriginService.submitreturnOrder(collectOrderRequest,1); + return collectOriginService.finishReturnOrder(collectOrderRequest); +// return collectOriginService.submitreturnOrder(collectOrderRequest,1); } + + @GetMapping("/udiwms/basic/collect/ReturnOrder/detail") + public BaseResponse returnOrderDetail(CollectOrderBizRequest collectOrderBizRequest) { + if (StrUtil.isBlank(collectOrderBizRequest.getOrderIdFk())) { + return ResultVOUtils.error(500, "单据号不能为空"); + } + IoCollectOrder collectOrder = collectOrderService.getByBillNo(collectOrderBizRequest.getOrderIdFk()); + if (collectOrder == null) { + return ResultVOUtils.error(500, "未找到单据"); + } + List list = collectOrderBizService.filterReturnOrderList(collectOrderBizRequest,collectOrder); + PageInfo pageInfo = new PageInfo<>(list); + PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); + pageSimpleResponse.setTotal(pageInfo.getTotal()); + pageSimpleResponse.setList(list); + return ResultVOUtils.success(pageSimpleResponse); + } + + + + + } diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java index 3f7f6cb4f..05b557515 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOriginController.java @@ -325,7 +325,7 @@ public class IoCollectOriginController extends BaseController { @PostMapping("/udiwms/basic/collect/origin/order/returnSubmit") public BaseResponse returnOrderSubmit(@RequestBody CollectOrderRequest collectOrderRequest) { - //假数据设置 + //假数据设置returnOrderSubmit return collectOriginService.submitreturnOrder(collectOrderRequest,2); } } diff --git a/src/main/java/com/glxp/api/req/collect/CollectOrderBizRequest.java b/src/main/java/com/glxp/api/req/collect/CollectOrderBizRequest.java index dab8bf66f..0100d7e83 100644 --- a/src/main/java/com/glxp/api/req/collect/CollectOrderBizRequest.java +++ b/src/main/java/com/glxp/api/req/collect/CollectOrderBizRequest.java @@ -137,4 +137,8 @@ public class CollectOrderBizRequest extends ListPageRequest { @TableField(value = "summaryNo") @ApiModelProperty(value = "汇总单号") private String summaryNo; + + + private String busType; + } diff --git a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java index bafab8d99..e1c5abd86 100644 --- a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java +++ b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java @@ -61,6 +61,8 @@ public class AddTagCodeReqeust { */ private Boolean isSplitCode; + private Long relId; + List collectOrderCodeManList; diff --git a/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java b/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java index 994ff6a1e..78a375f7b 100644 --- a/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java +++ b/src/main/java/com/glxp/api/res/collect/CollectOrderBizResponse.java @@ -206,6 +206,8 @@ public class CollectOrderBizResponse { private Integer shouldCount; + private Integer isSplit; + // /** diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java index b7042e038..3b7b10c4e 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderBizService.java @@ -9,16 +9,23 @@ import com.glxp.api.dao.basic.BasicProductsDao; import com.glxp.api.dao.collect.IoCollectOrderBizMapper; import com.glxp.api.entity.basic.BasicProductsEntity; import com.glxp.api.entity.basic.UdiProductEntity; +import com.glxp.api.entity.collect.IoCollectCodeBackup; +import com.glxp.api.entity.collect.IoCollectOrder; import com.glxp.api.entity.collect.IoCollectOrderBiz; +import com.glxp.api.entity.collect.IoCollectOrderCodeMan; import com.glxp.api.req.collect.CollectOrderBizRequest; import com.glxp.api.res.collect.CollectOrderBizResponse; import com.glxp.api.service.basic.UdiProductService; import com.glxp.api.util.IntUtil; +import com.ibm.icu.text.UFormat; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; @Service public class IoCollectOrderBizService extends ServiceImpl { @@ -29,6 +36,9 @@ public class IoCollectOrderBizService extends ServiceImpl filterList(CollectOrderBizRequest collectOrderRequest) { if (collectOrderRequest == null) { @@ -134,4 +144,80 @@ public class IoCollectOrderBizService extends ServiceImpl filterReturnOrderList(CollectOrderBizRequest collectOrderRequest, IoCollectOrder collectOrder) { + if (collectOrderRequest == null) { + return Collections.emptyList(); + } + if (collectOrderRequest.getPage() != null) { + int offset = (collectOrderRequest.getPage() - 1) * collectOrderRequest.getLimit(); + PageHelper.offsetPage(offset, collectOrderRequest.getLimit()); + } + List data = collectOrderBizMapper.filterList(collectOrderRequest); + if (collectOrderRequest.getIsOrderCheck() == null) { + for (CollectOrderBizResponse collectOrderBizResponse : data) { + collectOrderBizResponse.setProductLocation(setProductName(collectOrderBizResponse)); + } + } + + //设置 应该扫码数量 shouldCount + if (data.size() > 0) { + for (CollectOrderBizResponse collectOrderBizResponse : data) { + List collectOrderCodeManList = collectOrderCodeManService.list( + new LambdaQueryWrapper() + .eq(IoCollectOrderCodeMan::getOrderIdFk, collectOrderRequest.getOrderIdFk()) + .eq(IoCollectOrderCodeMan::getRelId,collectOrderBizResponse.getRelId())); + List list = ioCollectCodeBackService.list(new LambdaQueryWrapper() + .eq(IoCollectCodeBackup::getBillNo, collectOrder.getRemark()) + .eq(IoCollectCodeBackup::getRelId, collectOrderBizResponse.getRelId())); + //获取整取 + List fullList = list.stream() + .filter(item -> item.getReCount() == 0 || item.getReCount() == null) + .collect(Collectors.toList()); + + //拆零 + List spiltList = list.stream() + .filter(item -> { + Integer reCount = item.getReCount(); + return reCount > 0; + }) + .collect(Collectors.toList()); + if (spiltList.size() > 0) { + if (collectOrderCodeManList.size() > 0){ + // 提前将collectOrderCodeManList的udiCode提取到Set中,提升查找效率 + Set udiCodeSet = collectOrderCodeManList.stream() + .map(IoCollectOrderCodeMan::getUdiCode) + .collect(Collectors.toSet()); + + // 检查spiltList中的所有code是否都在udiCodeSet中 + boolean allCodesPresent = spiltList.stream() + .allMatch(item -> udiCodeSet.contains(item.getCode())); + if (allCodesPresent) { + collectOrderBizResponse.setIsSplit(0); + }else { + collectOrderBizResponse.setIsSplit(1); + } + }else { + collectOrderBizResponse.setIsSplit(1); + } + + } + Integer shouldCount = 0; + if (fullList.size() > 0){ + shouldCount = fullList.size(); + } + collectOrderBizResponse.setShouldCount(shouldCount); + collectOrderBizResponse.setShouldCount(shouldCount); + if (collectOrderBizResponse.getScanCount() == null) { + collectOrderBizResponse.setScanCount(0); + } + if (collectOrderBizResponse.getScanActCount() == null) { + collectOrderBizResponse.setScanActCount(0); + } + } + } + return data; + } } diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java index 0a29a4a87..e577e2eca 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java @@ -57,10 +57,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Service public class IoCollectOrderCodeManService extends ServiceImpl { @@ -833,4 +831,398 @@ public class IoCollectOrderCodeManService extends ServiceImpl udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(udiEntity.getUdi(), null); + if (CollUtil.isEmpty(udiRelevanceResponses)) throw new JsonException(500, "产品字典不存在此产品!"); + else udiRelevanceResponse = udiRelevanceResponses.get(0); + + //如果是处方退药的码 要去校验是 否是 原始单据处方已完成的码 + collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); + IoCollectCodeRequest ioCollectCodeRequest = new IoCollectCodeRequest(); + ioCollectCodeRequest.setBillNo(collectOrder.getRemark()); + ioCollectCodeRequest.setCode(code); + List ioCollectCodeResponses = ioCollectCodeBackService.filterList(ioCollectCodeRequest); + if (ioCollectCodeResponses.size() == 0){ + throw new JsonException(500, "当前追溯码非原始处方追溯码"); + } + IoCollectCodeResponse ioCollectCodeResponse = ioCollectCodeResponses.get(0); +// if (ioCollectCodeResponse.getReCount() != 0 || ioCollectCodeResponse.getReCount() != null){ +// //扫入的为拆零码 +// //这个为 退货的数量 如果退货数量 是 +// Integer count = collectOrderBiz1.getCount(); +// } + if (!ioCollectCodeResponse.getCode().equals(code)){ + throw new JsonException(500, "当前追溯码非原始处方追溯码"); + } + + //流通数量 + Integer circleCount = calCountUtil.getCirActCount(udiRelevanceResponse); + //使用数量 + Integer useCount = calCountUtil.getUseActCount(udiRelevanceResponse); + Integer scanCount = 0; + + IoCollectOrderCodeMan exitCode = this.findByCode(addTagCodeReqeust.getBillNo(), code); + if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && exitCode != null) { + throw new JsonException(500, "重复扫码!"); + } + IoSplitCodeEntity splitCodeEntity = splitCodeService.findByCode(code, putWorkPlaceCode); + List collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo()); + //2.校验是否处方单UDI码 + if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_GEN_ORDER) { + if (StrUtil.isEmpty(addTagCodeReqeust.getBillNo())) { + String orderNo = gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_ORDER, "yyyyMMdd")); + collectOrder = IoCollectOrder.builder() + .billNo(orderNo) + .busType(sysWorkplaceDocumentEntity.getDocumentTypeCode()) + .fromCorp(addTagCodeReqeust.getFromCorp()) + .fromCorpName(addTagCodeReqeust.getFromCorpName()) + .billTime(new Date()) + .workPlaceCode(workPlace.getWorkplaceId()) + .createTime(new Date()) + .createUser(userIds) + .shipper(addTagCodeReqeust.getInvCode()) + .updateTime(new Date()) + .orderCirType(sysWorkplaceDocumentEntity.getOrderCirType()) + .tagStatus(1) + .build(); + if (StrUtil.isNotEmpty(addTagCodeReqeust.getShipper())) { + collectOrder.setShipper(addTagCodeReqeust.getShipper()); + collectOrder.setShipperName(addTagCodeReqeust.getShipperName()); + } + if (IntUtil.value(sysWorkplaceDocumentEntity.getIsMatching()) == 1) { + collectOrder.setFromType("药械追溯管理系统"); + } else { + ThrBusTypeOriginEntity one = thrBusTypeOriginService.getOne(new LambdaQueryWrapper() + .eq(ThrBusTypeOriginEntity::getAction, sysWorkplaceDocumentEntity.getDocumentTypeCode())); + if (one != null) { + ThrSystemEntity thrSystemEntity = thrSystemService.getOne(new LambdaQueryWrapper().eq(ThrSystemEntity::getThirdId, one.getThirdSys())); + if (thrSystemEntity != null) { + collectOrder.setFromType(thrSystemEntity.getThirdName()); + } + } + } + collectOrderService.save(collectOrder); + } else { + collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); + } + + //直接扫码单生成业务单 + collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder); + collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); + collectOrderBizService.saveOrUpdate(collectOrderBiz); + } else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_VAIL_BATCH) { + collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); + collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode()); + if (collectOrder == null) + throw new JsonException(500, "单据不存在!"); + if (splitCodeEntity != null && StrUtil.isNotEmpty(splitCodeEntity.getSerialNo())) { + if (IntUtil.value(splitCodeEntity.getRemainCount()) < 1) { + throw new JsonException(500, "当前追溯码已被拆零!"); + } else { + circleCount = splitCodeEntity.getRemainCount(); + useCount = splitCodeEntity.getRemainCount(); + } + } + if (IntUtil.value(collectOrder.getOrderCirType()) == 1) { + scanCount = circleCount; + } else { + scanCount = useCount; + } + + CollectOrderCodeManRequest collectOrderCodeManRequest = new CollectOrderCodeManRequest(); + collectOrderCodeManRequest.setUdiCode(code); + collectOrderCodeManRequest.setBusType(sysWorkplaceDocumentEntity.getDocumentTypeCode()); + IoCollectOrderCodeMan collectOrderCodeMan = collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest); + IoCodeLostEntity codeLostEntity = codeLostService.findByCode(code); + if (codeLostEntity != null) { + udiEntity.setBatchNo(codeLostEntity.getBatchNo()); + udiEntity.setProduceDate(codeLostEntity.getProduceDate()); + udiEntity.setExpireDate(codeLostEntity.getExpireDate()); + + } + if (collectOrderCodeMan != null && StrUtil.isNotEmpty(collectOrderCodeMan.getSerialNo())) { + throw new JsonException(500, "当前追溯码已被其他单据关联!"); + } + + collectOrderBiz = vailByBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity); + switch (sysWorkplaceDocumentEntity.getCheckInsert()) { + case 1: //插入 + if (collectOrderBiz == null) { + collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder); + collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); + } else { + collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1); + collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount); + } + break; + case 2: //不插入 + if (collectOrderBiz == null) + throw new JsonException(500, "非此单据追溯码!"); + int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1; + + int actCount = 0; + actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount; + if (actCount > IntUtil.value(collectOrderBiz.getCount())) { + + int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount()); + if (needCount > 0) { + if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) { + throw new JsonException(502, collectOrderBiz.getCpmctymc() + "拆零数量还有剩余,是否继续添加?"); + } + } + throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!"); + } + collectOrderBiz.setScanCount(count); + collectOrderBiz.setScanActCount(actCount); + break; + case 3: //提醒是否插入 + if (!IntUtil.value(addTagCodeReqeust.getInsert())) { + if (collectOrderBiz == null) + throw new JsonException(502, addTagCodeReqeust.getCode() + "非此单据追溯码,是否继续添加!"); + int count1 = IntUtil.value(collectOrderBiz.getScanCount()) + 1; + int actCount1 = 0; + actCount1 = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount; + if (actCount1 > collectOrderBiz.getCount()) { + int needCount = IntUtil.value(collectOrderBiz.getCount()) - IntUtil.value(collectOrderBiz.getScanActCount()); + if (needCount > 0) { + if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) { + throw new JsonException(502, collectOrderBiz.getCpmctymc() + "拆零数量还有剩余,是否继续扫码?"); + } + int myUseCount = calCountUtil.getUseActCount(udiRelevanceResponse); + if (needCount > myUseCount) { + throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!"); + } else { + collectOrderBiz.setSplitUnCheck(true); + if (IntUtil.value(collectSet.getLastCodeSplit())) { + throw new JsonException(503, collectOrderBiz.getId() + ";" + count1 + ";" + collectOrderBiz.getCpmctymc() + ";" + "扫码数量超出!"); + } + } + } + } + collectOrderBiz.setScanCount(count1); + collectOrderBiz.setScanActCount(actCount1); + } else { + if (collectOrderBiz == null) { + collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder); + collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); + } else { + collectOrderBiz.setScanCount(IntUtil.value(collectOrderBiz.getScanCount()) + 1); + if (IntUtil.value(collectOrder.getOrderCirType()) == 1) { + collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getCirActCount(udiRelevanceResponse)); + } else { + collectOrderBiz.setScanActCount(IntUtil.value(collectOrderBiz.getScanActCount()) + calCountUtil.getUseActCount(udiRelevanceResponse)); + } + } + } + break; + default: + break; + } + collectOrderBizService.saveOrUpdate(collectOrderBiz); + } else if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_UNVAIL_BATCH) { + collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); + collectOrder.setWorkPlaceCode(addTagCodeReqeust.getWorkPlaceCode()); + if (collectOrder == null) + throw new JsonException(500, "单据不存在!"); + //按单不校验三期 + collectOrderBiz = vailNoBatchNo(udiRelevanceResponses, collectOrderBizs, udiEntity); + + CollectOrderCodeManRequest collectOrderCodeManRequest = new CollectOrderCodeManRequest(); + collectOrderCodeManRequest.setUdiCode(code); + collectOrderCodeManRequest.setBusType(sysWorkplaceDocumentEntity.getDocumentTypeCode()); + IoCollectOrderCodeMan collectOrderCodeMan = collectOrderCodeManMapper.exitCode(collectOrderCodeManRequest); + if (collectOrderCodeMan != null && StrUtil.isNotEmpty(collectOrderCodeMan.getSerialNo())) { + throw new JsonException(500, "当前追溯码已被其他单据关联!"); + } + + if (IntUtil.value(collectOrder.getOrderCirType()) == 1) { + scanCount = circleCount; + } else { + scanCount = useCount; + } + switch (sysWorkplaceDocumentEntity.getCheckInsert()) { + case 1: //插入 + if (collectOrderBiz == null) { + if (collectOrderBiz == null) + throw new JsonException(500, addTagCodeReqeust.getCode() + "非此单据追溯码,请检查!"); + } else { + collectOrderBiz.setAddScanCount(1); + collectOrderBiz.setAddScanActCount(scanCount); + } + break; + case 2: //不插入 + if (collectOrderBiz == null) + throw new JsonException(500, "非此单据追溯码!"); + int count = IntUtil.value(collectOrderBiz.getScanCount()) + 1; + int actCount = 0; + actCount = IntUtil.value(collectOrderBiz.getScanActCount()) + scanCount; + collectOrderBiz.setAddScanCount(1); + collectOrderBiz.setAddScanActCount(scanCount); + break; + case 3: //提醒是否插入 + if (!IntUtil.value(addTagCodeReqeust.getInsert())) { + if (collectOrderBiz == null) + throw new JsonException(500, addTagCodeReqeust.getCode() + "非此单据追溯码,请检查!"); + collectOrderBiz.setAddScanCount(1); + collectOrderBiz.setAddScanActCount(scanCount); + } else { + if (collectOrderBiz == null) { + collectOrderBiz = scanGenOrder(udiRelevanceResponses, collectOrderBizs, udiEntity, collectOrder); + collectOrderBiz.setOrderIdFk(collectOrder.getBillNo()); + } else { + collectOrderBiz.setAddScanCount(1); + collectOrderBiz.setAddScanActCount(scanCount); + } + } + break; + default: + break; + } + collectOrderBizService.insertOrUpdate(collectOrderBiz); + } + + int count = 0; + if (StrUtil.isEmpty(udiEntity.getSerialNo()) && exitCode != null) { + exitCode.setScanCount(IntUtil.value(exitCode.getScanCount()) + 1); + exitCode.setScanActCount(IntUtil.value(exitCode.getScanActCount()) + scanCount); + exitCode.setBizIdFk(collectOrderBiz.getId()); + this.updateById(exitCode); + } else { +// if (isExitRel(code, collectOrder.getBillNo())) { +// throw new JsonException(500, "当前追溯码已上传关联关系,请勿重复扫码!"); +// } + IoCollectOrderCodeMan collectOrderCodeMan = + IoCollectOrderCodeMan.builder() + .udiCode(code) + .orderIdFk(collectOrder.getBillNo()) + .bizIdFk(collectOrderBiz.getId()) + .relId(collectOrderBiz.getRelId()) + .nameCode(udiEntity.getUdi()) + .batchNo(udiEntity.getBatchNo() == null ? collectOrderBiz.getBatchNo() : udiEntity.getBatchNo()) + .serialNo(udiEntity.getSerialNo()) + .productDate(udiEntity.getProduceDate() == null ? collectOrderBiz.getProductDate() : udiEntity.getProduceDate()) + .expireDate(udiEntity.getExpireDate() == null ? collectOrderBiz.getExpireDate() : udiEntity.getExpireDate()) + .createTime(new Date()) + .createUser(userId) + .updateTime(new Date()) + .updateUser(userId) + .scanCount(count + 1) +// .scanCount(scanCount) + .isSplitCode(addTagCodeReqeust.getIsSplitCode()) + .scanActCount(scanCount) + .build(); + + +// RelCodeDetailResponse codeRelEntity = relCodeDetailService.findByCode(code); +// if (codeRelEntity != null) { +// collectOrderCodeMan.setParentCode(codeRelEntity.getParentCode()); +// RelCodeDetail relCodeDetail = relCodeDetailService.getOneByCode(codeRelEntity.getParentCode()); +// if (relCodeDetail != null) { +// collectOrderCodeMan.setGrantPaCode(relCodeDetail.getParentCode()); +// } +// //当关联关系存在的时候 以关联关系为准 +// collectOrderCodeMan.setBatchNo(codeRelEntity.getBatchNo()); +// collectOrderCodeMan.setProductDate(codeRelEntity.getMadeDate() + ""); +// collectOrderCodeMan.setExpireDate(codeRelEntity.getValidateDate() + ""); +// } + this.save(collectOrderCodeMan); + } + collectOrder.setTagStatus(2); + collectOrderService.updateById(collectOrder); + return collectOrder; + } + + + @Resource + IoCollectOrderCodeManService collectOrderCodeManService; + + @Transactional(rollbackFor = Exception.class) + public BaseResponse splitReturnOrderCode(AddTagCodeReqeust addTagCodeReqeust,Integer type) { + if (StrUtil.isBlank(addTagCodeReqeust.getBillNo())){ + throw new JsonException(500,"单据号不能为空"); + } + IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); + if (collectOrder == null){ + throw new JsonException(500,"单据不存在"); + } + + List ioCollectOrderBizs = null; + if (type == 1){ + ioCollectOrderBizs = collectOrderBizService.list(new LambdaQueryWrapper().eq(IoCollectOrderBiz::getOrderIdFk,collectOrder.getBillNo()) + .eq(IoCollectOrderBiz::getRelId,addTagCodeReqeust.getRelId())); + } + if (type == 2){ + ioCollectOrderBizs = collectOrderBizService.list(new LambdaQueryWrapper().eq(IoCollectOrderBiz::getOrderIdFk,collectOrder.getBillNo())); + } + + for (IoCollectOrderBiz ioCollectOrderBiz:ioCollectOrderBizs){ + List ioCollectCodeBackups = ioCollectCodeBackService.list(new LambdaQueryWrapper() + .eq(IoCollectCodeBackup::getBillNo, collectOrder.getRemark()) + .eq(IoCollectCodeBackup::getRelId, ioCollectOrderBiz.getRelId())); + //拆零 + List spiltList = ioCollectCodeBackups.stream() + .filter(item -> { + Integer reCount = item.getReCount(); + return reCount > 0; + }) + .collect(Collectors.toList()); + //所有拆零码 如果type == 2 需要查看manList里面的码 是重复 过滤掉重复的 + if (type == 2){ + List collectOrderCodeManList = collectOrderCodeManService.list( + new LambdaQueryWrapper() + .eq(IoCollectOrderCodeMan::getOrderIdFk, addTagCodeReqeust.getBillNo())); + if (collectOrderCodeManList.size() > 0){ + // 提前将collectOrderCodeManList的udiCode提取到Set中,提升查找效率 + Set udiCodeSet = collectOrderCodeManList.stream() + .map(IoCollectOrderCodeMan::getUdiCode) + .collect(Collectors.toSet()); + + // 过滤掉spiltList中code存在于udiCodeSet中的项 + spiltList = spiltList.stream() + .filter(item -> !udiCodeSet.contains(item.getCode())) + .collect(Collectors.toList()); + } + } + + for (IoCollectCodeBackup ioCollectCodeBackup : spiltList){ + addTagCodeReqeust.setBusType(collectOrder.getBusType()); + addTagCodeReqeust.setCode(ioCollectCodeBackup.getCode()); + addTagCodeReqeust.setFromCorp(collectOrder.getFromCorp()); + addTagCodeReqeust.setFromCorpName(collectOrder.getFromCorpName()); + addTagCodeReqeust.setShipperName(collectOrder.getShipperName()); + this.prescribeReturnOrderCode(addTagCodeReqeust); + } + + } + return ResultVOUtils.success(); + } } diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java index 765df450a..6cc74434e 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java @@ -1012,4 +1012,5 @@ public class IoCollectOrderService extends ServiceImpl(summarizedMap.values()); } + } diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOriginService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOriginService.java index f3cbfa22b..b7da15ec1 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOriginService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOriginService.java @@ -35,9 +35,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 原始单据下载 @@ -239,6 +238,9 @@ public class IoCollectOriginService { return null; } + + @Resource + IoCollectOrderCodeManService collectOrderCodeManService; @Transactional(rollbackFor = Exception.class) public BaseResponse submitreturnOrder(CollectOrderRequest collectOrderRequest,Integer type) { if (StrUtil.isBlank(collectOrderRequest.getBillNo())) { @@ -273,6 +275,23 @@ public class IoCollectOriginService { if (ioCollectCodeResponses.isEmpty()){ return ResultVOUtils.error(500,"码明细为空"); } + + if (type == 2){ + List collectOrderCodeManList = collectOrderCodeManService.list( + new LambdaQueryWrapper() + .eq(IoCollectOrderCodeMan::getOrderIdFk, collectOrder.getBillNo())); + if (collectOrderCodeManList.size() > 0){ + // 提前将collectOrderCodeManList的udiCode提取到Set中,提升查找效率 + Set udiCodeSet = collectOrderCodeManList.stream() + .map(IoCollectOrderCodeMan::getUdiCode) + .collect(Collectors.toSet()); + + // 过滤掉spiltList中code存在于udiCodeSet中的项 + ioCollectCodeResponses = ioCollectCodeResponses.stream() + .filter(item -> !udiCodeSet.contains(item.getCode())) + .collect(Collectors.toList()); + } + } //码明细 for(IoCollectCodeResponse ioCollectCodeResponse : ioCollectCodeResponses){ //拆零码 @@ -340,7 +359,7 @@ public class IoCollectOriginService { if (type == 1 && one != null){ //手动扫码退货 ioCollectCodeBackups.add(collectCodeBackup); - }else if (type == 2){ + } else if (type == 2){ ioCollectCodeBackups.add(collectCodeBackup); } @@ -375,6 +394,24 @@ public class IoCollectOriginService { return ResultVOUtils.success(); } + public BaseResponse finishReturnOrder(CollectOrderRequest collectOrderRequest) { + List ioCollectOrderBizs = collectOrderBizService.listByBillNo(collectOrderRequest.getBillNo()); + // 过滤出getCount大于getScanCount的对象 + if (!collectOrderRequest.getConfirmFinish()){ + List inconsistentList = ioCollectOrderBizs.stream() + .filter(item -> item.getCount() > item.getScanActCount()) + .collect(Collectors.toList()); + if (inconsistentList.size() > 0){ + Set cpmctymcs = inconsistentList.stream() + .map(IoCollectOrderBiz::getCpmctymc) + .collect(Collectors.toSet()); + String errorMessage = "当前单据退货数量不足:\n" + String.join("\n", cpmctymcs) + "\n是否强制退货"; + return ResultVOUtils.error(502, errorMessage); + } + } + return this.submitreturnOrder(collectOrderRequest,1); + } + // @Transactional(rollbackFor = Exception.class) // public BaseResponse errorHandleSubmit(CollectOrderRequest collectOrderRequest) {