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 c0455e8c5..3f9ae79c0 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderCodeManController.java @@ -1,12 +1,14 @@ package com.glxp.api.controller.collect; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageInfo; import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.controller.BaseController; import com.glxp.api.entity.collect.IoCollectOrder; +import com.glxp.api.entity.collect.IoCollectOrderCodeMan; import com.glxp.api.exception.JsonException; import com.glxp.api.req.collect.CollectOrderCodeManRequest; import com.glxp.api.req.inout.AddTagCodeReqeust; @@ -17,6 +19,7 @@ import com.glxp.api.res.inout.VailCodeResultResponse; import com.glxp.api.res.inout.VailTagResultResponse; import com.glxp.api.service.collect.IoCollectOrderCodeManService; import com.glxp.api.service.collect.IoCollectOrderService; +import com.glxp.api.util.IntUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; @@ -27,7 +30,9 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j @RestController @@ -88,6 +93,7 @@ public class IoCollectOrderCodeManController extends BaseController { IoCollectOrder collectOrder = null; VailTagResultResponse vailTagResultResponse = new VailTagResultResponse(); List vailCodeResultResponses = new ArrayList<>(); + List vailCodesList = new ArrayList(); if (CollUtil.isNotEmpty(addTagCodeReqeust.getCodeList())) { for (String code : addTagCodeReqeust.getCodeList()) { VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); @@ -97,21 +103,87 @@ public class IoCollectOrderCodeManController extends BaseController { try { collectOrder = collectOrderCodeManService.prescribeTagCode(addTagCodeReqeust); } catch (JsonException e) { + vailCodeResultResponse.setErrMsg(e.getMessage()); if (e.getCode() == 502) { vailCodeResultResponse.setStatus(3); + } else if (e.getCode() == 503) { + // 单据扫码数量大于1 的需要拆零确认 + String msg = e.getMessage(); + String[] data = msg.split(";"); + String count = data[1]; + if (IntUtil.value(count) > 1) { + vailCodeResultResponse.setStatus(4); + vailCodeResultResponse.setBizId(data[0]); + vailCodeResultResponse.setErrMsg(data[2]); + } + vailCodesList.add(code); } else { vailCodeResultResponse.setStatus(2); } - vailCodeResultResponse.setErrMsg(e.getMessage()); } vailCodeResultResponses.add(vailCodeResultResponse); } } vailTagResultResponse.setCollectOrder(collectOrder); vailTagResultResponse.setVailCodeResultResponses(vailCodeResultResponses); + String errMsg = countSameErrMsg(vailCodeResultResponses); + if (StrUtil.isNotEmpty(errMsg)) { + return ResultVOUtils.error(500, errMsg); + } else { + addTagCodeReqeust.setCodeList(vailCodesList); + addTagCodeReqeust.setInsert(true); + for (String code : vailCodesList) { + addTagCodeReqeust.setCode(code); + collectOrderCodeManService.prescribeTagCode(addTagCodeReqeust); + } + + } return ResultVOUtils.success(vailTagResultResponse); } + /** + * @param + * @return + */ + @PostMapping("/udiwms/ioSplit/collect/order/batchUpdateCode") + public BaseResponse batchUpdate(@RequestBody AddTagCodeReqeust addTagCodeReqeust, + BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + List collectOrderCodeMEN = addTagCodeReqeust.getCollectOrderCodeManList(); + if (CollUtil.isNotEmpty(collectOrderCodeMEN)) { + for (IoCollectOrderCodeMan collectOrderCodeMan : collectOrderCodeMEN) { + collectOrderCodeManService.updateById(collectOrderCodeMan); + } + return ResultVOUtils.success("更新成功!"); + } else { + return ResultVOUtils.error("数据不能为空"); + } + + } + + public String countSameErrMsg(List vailCodeResultResponses) { + Map errMsgCountMap = new HashMap<>(); + + for (VailCodeResultResponse response : vailCodeResultResponses) { + String errMsg = response.getCode().substring(0, 7) + ";" + response.getErrMsg(); + if (errMsgCountMap.containsKey(errMsg)) { + errMsgCountMap.put(errMsg, errMsgCountMap.get(errMsg) + 1); + } else { + errMsgCountMap.put(errMsg, 1); + } + } + + for (Map.Entry entry : errMsgCountMap.entrySet()) { + String key = entry.getKey(); + Integer value = entry.getValue(); + if (value > 1) { + return key.substring(8); + } + } + return null; + } @PostMapping("/udiwms/ioSplit/collect/code/remove") public BaseResponse removeCode(@RequestBody @Valid DeleteTageCodeRequest deleteTageCodeRequest, 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 18374a825..dc5e023ce 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java @@ -383,7 +383,7 @@ public class IoCollectOrderController extends BaseController { SysWorkplaceDocumentService sysWorkplaceDocumentService; /** - * 单据挂起 + * 完成单据 * * @return */ @@ -409,7 +409,7 @@ public class IoCollectOrderController extends BaseController { } } collectOrderRequest.setUpdateUser(getUserId()); - collectOrderService.finishOrder(collectOrderRequest,getUser()); + collectOrderService.finishOrder(collectOrderRequest, getUser()); return ResultVOUtils.success(); } diff --git a/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeMan.java b/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeMan.java index e769893e7..d5dba69cc 100644 --- a/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeMan.java +++ b/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeMan.java @@ -97,12 +97,17 @@ public class IoCollectOrderCodeMan implements Serializable { @ApiModelProperty(value = "") private Long updateUser; + @TableField(value = "isSplitCode") + @ApiModelProperty(value = "是否拆零码") + private Boolean isSplitCode; + @TableField(exist = false) private Boolean removeFlag; @TableField(exist = false) private Boolean splitFlag; - + @TableField(exist = false) + private Integer remainCount; private static final long serialVersionUID = 1L; } diff --git a/src/main/java/com/glxp/api/entity/inv/AnncmntProductEntity.java b/src/main/java/com/glxp/api/entity/inv/AnncmntProductEntity.java index 27d245a90..140091173 100644 --- a/src/main/java/com/glxp/api/entity/inv/AnncmntProductEntity.java +++ b/src/main/java/com/glxp/api/entity/inv/AnncmntProductEntity.java @@ -12,6 +12,9 @@ import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.Date; +/** + * 不良产品信息库 + */ @Data @Builder @AllArgsConstructor 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 485ea208e..f71887f86 100644 --- a/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java +++ b/src/main/java/com/glxp/api/req/inout/AddTagCodeReqeust.java @@ -1,5 +1,6 @@ package com.glxp.api.req.inout; +import com.glxp.api.entity.collect.IoCollectOrderCodeMan; import lombok.Data; import javax.validation.constraints.NotNull; @@ -54,5 +55,12 @@ public class AddTagCodeReqeust { private String shipper; + /** + * 是否拆零码 + */ + private Boolean isSplitCode; + + List collectOrderCodeManList; + } diff --git a/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java b/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java index 11d17fcce..181b2b276 100644 --- a/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java +++ b/src/main/java/com/glxp/api/res/inout/VailCodeResultResponse.java @@ -11,4 +11,6 @@ public class VailCodeResultResponse { */ private Integer status; private String errMsg; + private String productInfo; + private String bizId; } 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 2d8cf8233..b5ae9b5a1 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java @@ -279,7 +279,7 @@ public class IoCollectOrderCodeManService extends ServiceImpl 0) { if (vailInSplit(collectOrderBiz, putWorkPlaceCode, needCount)) { - throw new JsonException(502, "当前拆零数量还有剩余,是否继续扫码?"); + throw new JsonException(502, collectOrderBiz.getCpmctymc() + "当前拆零数量还有剩余,是否继续扫码进行拆零?"); } } - throw new JsonException(500, "扫码数量超出!"); + throw new JsonException(500, collectOrderBiz.getCpmctymc() + "扫码数量超出!"); } collectOrderBiz.setScanCount(count); collectOrderBiz.setScanActCount(actCount); @@ -393,7 +393,7 @@ public class IoCollectOrderCodeManService extends ServiceImpl udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(ioCollectOrderCodeMan.getNameCode(), null); + IoCollectOrder ioCollectOrder = collectOrderMapper.selectOne(new LambdaQueryWrapper().eq(IoCollectOrder::getBillNo, ioCollectOrderCodeMan.getOrderIdFk())); + String busType = ioCollectOrder.getBusType(); + Long workPlaceCode = ioCollectOrder.getWorkPlaceCode(); + SysWorkplaceDocumentEntity byWorkplaceCode = sysWorkplaceDocumentService.findByWorkplaceCode(workPlaceCode, busType); Long bizIdFk = ioCollectOrderCodeMan.getBizIdFk(); Integer scanCount = ioCollectOrderCodeMan.getScanCount(); Integer delCount = 0; if (delType == 1) {//1.减一,,,IoCollectOrderCodeMan-1 IoCollectOrderBiz-1 Integer newCount = scanCount - 1; delCount = 1; - if (newCount == 0) { + if (newCount <= 0) { ioCollectOrderCodeManService.removeById(codeManId); } else { ioCollectOrderCodeMan.setScanCount(newCount); + if (IntUtil.value(byWorkplaceCode.getOrderCirType()) == 1) { + ioCollectOrderCodeMan.setScanActCount(IntUtil.value(ioCollectOrderCodeMan.getScanActCount()) - delCount * udiCalCountUtil.getCirActCount(udiRelevanceResponses.get(0))); + } else { + ioCollectOrderCodeMan.setScanActCount(IntUtil.value(ioCollectOrderCodeMan.getScanActCount()) - delCount * udiCalCountUtil.getUseActCount(udiRelevanceResponses.get(0))); + } ioCollectOrderCodeManService.updateById(ioCollectOrderCodeMan); } } else if (delType == 2) {//2.删除 IoCollectOrderCodeMan-删除 IoCollectOrderBiz-数量 @@ -723,12 +733,9 @@ public class IoCollectOrderService extends ServiceImpl().eq(IoCollectOrder::getBillNo, orderIdFk)); + if (ioCollectOrder == null) throw new JsonException("反查单据失败"); - String busType = ioCollectOrder.getBusType(); - Long workPlaceCode = ioCollectOrder.getWorkPlaceCode(); - SysWorkplaceDocumentEntity byWorkplaceCode = sysWorkplaceDocumentService.findByWorkplaceCode(workPlaceCode, busType); + if (byWorkplaceCode == null) throw new JsonException("反查工位单据类型失败"); Integer scanType = byWorkplaceCode.getScanType(); Integer oneScanCount = bizServiceOne.getScanCount(); @@ -738,7 +745,6 @@ public class IoCollectOrderService extends ServiceImpl udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(ioCollectOrderCodeMan.getNameCode(), null); if (IntUtil.value(byWorkplaceCode.getOrderCirType()) == 1) { bizServiceOne.setScanActCount(IntUtil.value(bizServiceOne.getScanActCount()) - delCount * udiCalCountUtil.getCirActCount(udiRelevanceResponses.get(0))); } else { diff --git a/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java b/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java index 2c4c8aca4..9e4af1160 100644 --- a/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java +++ b/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java @@ -281,60 +281,37 @@ public class IoSplitCodeService extends ServiceImpl -unTagCount) { - - Optional firstMatch = collectOrderCodeMEN.stream() - .filter(item -> - IntUtil.value(item.getRemoveFlag()) && item.getBizIdFk().equals(collectOrderBiz.getId())) - .findFirst(); - IoCollectOrderCodeMan result = null; - if (firstMatch.isPresent()) { - result = firstMatch.get(); - } else { - Optional firstMatch1 = collectOrderCodeMEN.stream() - .filter(item -> - !IntUtil.value(item.getSplitFlag()) && item.getBizIdFk().equals(collectOrderBiz.getId())) - .findFirst(); - if (firstMatch1.isPresent()) { - result = firstMatch1.get(); - if (result != null) { - IoSplitCodeEntity ioSplitCodeEntity = IoSplitCodeEntity.builder().code(result.getUdiCode()) - .errUdiCode(result.getUdiCode()) - .orderId(result.getOrderIdFk()) - .action(collectOrder.getBusType()) - .relId(result.getRelId()) - .nameCode(result.getNameCode()) - .batchNo(result.getBatchNo()) - .produceDate(result.getProductDate()) - .expireDate(result.getExpireDate()) - .serialNo(result.getSerialNo()) - .scanCount(result.getScanCount()) - .totalCount(result.getScanCount()) - .workPlaceCode(putWorkPlaceCode) - .status(2) - .fifoSplit(1) - .createTime(new Date()).updateTime(new Date()) - .remainCount(-unTagCount).build(); - this.decorateUnpackExpireTime(ioSplitCodeEntity); - splitCodeService.save(ioSplitCodeEntity); - } + List newList = filterCode(collectOrderCodeMEN, collectOrderBiz, udiRelevanceResponse); + if (CollUtil.isNotEmpty(newList)) { + for (IoCollectOrderCodeMan item : newList) { + if (IntUtil.value(item.getSplitFlag())) { + IoSplitCodeEntity splitCodeEntity = splitCodeService.findByCode(item.getUdiCode(), putWorkPlaceCode); + splitCodeEntity.setRemainCount(-unTagCount); + splitCodeService.updateById(splitCodeEntity); } else { - firstMatch1 = collectOrderCodeMEN.stream() - .filter(item -> - IntUtil.value(item.getSplitFlag()) && item.getBizIdFk().equals(collectOrderBiz.getId())) - .findFirst(); - if (firstMatch1.isPresent()) { - result = firstMatch1.get(); - IoSplitCodeEntity splitCodeEntity = splitCodeService.findByCode(result.getUdiCode(), putWorkPlaceCode); - splitCodeEntity.setRemainCount(-unTagCount); - splitCodeService.updateById(splitCodeEntity); - } + IoSplitCodeEntity ioSplitCodeEntity = IoSplitCodeEntity.builder().code(item.getUdiCode()) + .errUdiCode(item.getUdiCode()) + .orderId(item.getOrderIdFk()) + .action(collectOrder.getBusType()) + .relId(item.getRelId()) + .nameCode(item.getNameCode()) + .batchNo(item.getBatchNo()) + .produceDate(item.getProductDate()) + .expireDate(item.getExpireDate()) + .serialNo(item.getSerialNo()) + .scanCount(item.getScanCount()) + .totalCount(item.getScanCount()) + .workPlaceCode(putWorkPlaceCode) + .status(2) + .fifoSplit(1) + .createTime(new Date()).updateTime(new Date()) + .remainCount(item.getRemainCount()).build(); + this.decorateUnpackExpireTime(ioSplitCodeEntity); + splitCodeService.save(ioSplitCodeEntity); } - } - + } } - } continue; } @@ -395,7 +372,43 @@ public class IoSplitCodeService extends ServiceImpl filterCode(List collectOrderCodes, IoCollectOrderBiz collectOrderBiz, UdiRelevanceResponse udiRelevanceResponse) { + int unTagCount = IntUtil.value(collectOrderBiz.getScanActCount()) - collectOrderBiz.getCount(); + List newList = new ArrayList(); + int count = 0; + boolean first = true; + for (IoCollectOrderCodeMan collectOrderCode : collectOrderCodes) { + if (collectOrderCode.getBizIdFk().equals(collectOrderBiz.getId())) { + if (IntUtil.value(collectOrderCode.getIsSplitCode())) { + if (first) { + int remainder = unTagCount % IntUtil.value(udiRelevanceResponse.getBhxjsl()); + collectOrderCode.setRemainCount(remainder); + first = false; + } else { + collectOrderCode.setRemainCount(collectOrderCode.getScanActCount()); + } + newList.add(collectOrderCode); + } else { + count = count + collectOrderCode.getScanActCount(); + if (!IntUtil.value(collectOrderCode.getRemoveFlag())) { + if (count > collectOrderBiz.getCount()) { + if (first) { + int remainder = unTagCount % IntUtil.value(udiRelevanceResponse.getBhxjsl()); + collectOrderCode.setRemainCount(remainder); + first = false; + } else { + collectOrderCode.setRemainCount(collectOrderCode.getScanActCount()); + } + newList.add(collectOrderCode); + } + } + } + + } + } + return newList; } diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index a21055e00..df2676e49 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -4556,6 +4556,12 @@ CALL Pro_Temp_ColumnWork('io_collect_order_code_man', 'scanActCount', 'int NULL DEFAULT NULL COMMENT ''扫码实际数量''', 1); +CALL Pro_Temp_ColumnWork('io_collect_order_code_man', 'isSplitCode', + ' tinyint NULL DEFAULT NULL COMMENT ''是否拆零码''', + 1); + + + CALL Pro_Temp_ColumnWork('io_code_temp', 'drugLink', ' tinyint NULL DEFAULT b''0''COMMENT ''药品关联关系是否存在 0不存在 1存在''', 1);