diff --git a/src/main/java/com/glxp/api/controller/collect/IoCollectCodeBackupController.java b/src/main/java/com/glxp/api/controller/collect/IoCollectCodeBackupController.java index cef26cf60..2a24c5522 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectCodeBackupController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectCodeBackupController.java @@ -206,7 +206,7 @@ public class IoCollectCodeBackupController extends BaseController { @GetMapping("/udiwms/basic/collect/ioCollectCodeBackup/retrace") public BaseResponse retraceCodeList(IoCollectCodeRequest ioCollectCodeRequest, - BindingResult bindingResult) { + BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); } 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 b6b2c5b4b..068637c1c 100644 --- a/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java +++ b/src/main/java/com/glxp/api/controller/collect/IoCollectOrderController.java @@ -36,7 +36,6 @@ import com.glxp.api.service.inout.IoSplitCodeService; import com.glxp.api.util.Excel.ExcelHandler; import com.glxp.api.util.Excel.Exception.RenException; import com.glxp.api.util.IntUtil; -import com.glxp.api.util.StringUtils; import com.glxp.api.util.udi.FilterUdiUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -81,9 +80,7 @@ public class IoCollectOrderController extends BaseController { request.setUserId(userId.toString()); page = basicCollectUserService.filterList(request); if (page != null && page.size() > 0) { - workPlaceCodes = page.stream() - .map(UserWorkResponse::getWorkplaceId) - .collect(Collectors.toList()); + workPlaceCodes = page.stream().map(UserWorkResponse::getWorkplaceId).collect(Collectors.toList()); } //通过工位列表 获取出 业务列表 workBindBusTypeRequest.setWorkPlaceCodes(workPlaceCodes); @@ -99,9 +96,7 @@ public class IoCollectOrderController extends BaseController { } if (CollUtil.isNotEmpty(sysWorkplaceDocumentResponses)) { - Set uniqueDocumentTypeCodesLinkedHashSet = sysWorkplaceDocumentResponses.stream() - .map(SysWorkplaceDocumentResponse::getDocumentTypeCode) - .collect(Collectors.toCollection(LinkedHashSet::new)); + Set uniqueDocumentTypeCodesLinkedHashSet = sysWorkplaceDocumentResponses.stream().map(SysWorkplaceDocumentResponse::getDocumentTypeCode).collect(Collectors.toCollection(LinkedHashSet::new)); List documentTypeCodes = new ArrayList<>(uniqueDocumentTypeCodesLinkedHashSet); collectOrderRequest.setDocumentTypeCodes(documentTypeCodes); @@ -129,8 +124,7 @@ public class IoCollectOrderController extends BaseController { request.setBusType(collectOrderRequest.getBusType()); request.setTagStatusList(List.of(1)); List orderResponses = collectOrderService.filterList(request); - if (CollUtil.isNotEmpty(orderResponses)) - return ResultVOUtils.success(orderResponses.get(0)); + if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); return ResultVOUtils.error(500, "该工位已无待处理单据"); } @@ -155,20 +149,17 @@ public class IoCollectOrderController extends BaseController { request.setUpdateUser(getUserId()); request.setTagStatus(2); List orderResponses = collectOrderService.filterList(request); - if (CollUtil.isNotEmpty(orderResponses)) - return ResultVOUtils.success(orderResponses.get(0)); + if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); else { request.setTagStatus(-1); orderResponses = collectOrderService.filterList(request); - if (CollUtil.isNotEmpty(orderResponses)) - return ResultVOUtils.success(orderResponses.get(0)); + if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); else { IoCollectSet collectSet = collectSetService.getSet(); if (IntUtil.value(collectSet.getAutoAllotOrder())) { request.setTagStatus(1); orderResponses = collectOrderService.filterList(request); - if (CollUtil.isNotEmpty(orderResponses)) - return ResultVOUtils.success(orderResponses.get(0)); + if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); } } } @@ -193,13 +184,11 @@ public class IoCollectOrderController extends BaseController { request.setLimit(1); request.setBillNo(collectOrderRequest.getBillNo()); List orderResponses = collectOrderService.filterList(request); - if (CollUtil.isNotEmpty(orderResponses)) - return ResultVOUtils.success(orderResponses.get(0)); + if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); else { request.setTagStatus(-1); orderResponses = collectOrderService.filterList(request); - if (CollUtil.isNotEmpty(orderResponses)) - return ResultVOUtils.success(orderResponses.get(0)); + if (CollUtil.isNotEmpty(orderResponses)) return ResultVOUtils.success(orderResponses.get(0)); } return ResultVOUtils.error(500, "未查到待处理单据"); } @@ -415,31 +404,54 @@ public class IoCollectOrderController extends BaseController { @PostMapping("/udiwms/basic/collect/order/finish") @Transactional(rollbackFor = Exception.class) public BaseResponse saveFinishOrder(@RequestBody CollectOrderRequest collectOrderRequest) { + List billNos = new ArrayList<>(); + if (StrUtil.isEmpty(collectOrderRequest.getBillNo())) return ResultVOUtils.error(500, "单号不能为空!"); + IoCollectOrder collectOrder = collectOrderService.getByBillNo(collectOrderRequest.getBillNo()); + if (StrUtil.isNotEmpty(collectOrder.getSummaryNo())) { + billNos = collectOrderService.getBillBySummary(collectOrder.getSummaryNo()); + } else { + billNos.add(collectOrderRequest.getBillNo()); + } + boolean isAllTag = true; + if (!IntUtil.value(collectOrderRequest.getConfirmFinish())) { //1.校验是否全部自动赋码 CollectOrderBizRequest collectOrderBizRequest = new CollectOrderBizRequest(); collectOrderBizRequest.setOrderIdFk(collectOrderRequest.getBillNo()); - List collectOrderBizResponses = collectOrderService.combieOrderDetail(collectOrderBizRequest); - boolean isAllTag = true; String msg = ""; - if (CollUtil.isNotEmpty(collectOrderBizResponses)) { - for (int i = 0; i < collectOrderBizResponses.size(); i++) { - CollectOrderBizResponse collectOrderBizResponse = collectOrderBizResponses.get(i); - if (!(StrUtil.isNotEmpty(collectOrderBizResponse.getFinishUdiCode()) || collectOrderBizResponse.getAutoTagStatus() == 2)) { - isAllTag = false; - String cpmctymc = collectOrderBizResponse.getCpmctymc(); - Integer count = collectOrderBizResponse.getCount(); - Integer autoResCount = IntUtil.value(collectOrderBizResponse.getAutoResCount()); - msg = msg + " " + cpmctymc + ":未采集数量" + (count - autoResCount) + ";"; + for (String billNo : billNos) { + collectOrderBizRequest.setOrderIdFk(billNo); + List collectOrderBizResponses = collectOrderService.combieOrderDetail(collectOrderBizRequest); + if (CollUtil.isNotEmpty(collectOrderBizResponses)) { + for (int i = 0; i < collectOrderBizResponses.size(); i++) { + CollectOrderBizResponse collectOrderBizResponse = collectOrderBizResponses.get(i); + if (!(StrUtil.isNotEmpty(collectOrderBizResponse.getFinishUdiCode()) || collectOrderBizResponse.getAutoTagStatus() == 2)) { + isAllTag = false; + String cpmctymc = collectOrderBizResponse.getCpmctymc(); + Integer count = collectOrderBizResponse.getCount(); + Integer autoResCount = IntUtil.value(collectOrderBizResponse.getAutoResCount()); + msg = msg + " " + cpmctymc + ":未采集数量" + (count - autoResCount) + ";"; + } } } } - if (!isAllTag) { return ResultVOUtils.error(502, "该业务单据未全部赋码【" + msg.replaceAll(";$", "") + "】,是否强制完成单据?"); } } - collectOrderService.finishOrder(collectOrderRequest, getUser(), false); + if (CollUtil.isNotEmpty(billNos)) { + List collectOrders = collectOrderService.list(new LambdaQueryWrapper().in(IoCollectOrder::getBillNo, billNos)); + if (CollUtil.isNotEmpty(collectOrders)) { + for (IoCollectOrder temp : collectOrders) { + CollectOrderRequest tempRequest = new CollectOrderRequest(); + BeanUtils.copyProperties(temp, tempRequest); + collectOrderService.finishOrder(tempRequest, getUser(), false); + } + } + } else { + collectOrderService.finishOrder(collectOrderRequest, getUser(), false); + } + return ResultVOUtils.success(); } @@ -453,9 +465,14 @@ public class IoCollectOrderController extends BaseController { if (collectOrderRequest.getIsCheckFinish() != null) { collectOrderBizRequest.setIsOrderCheck(collectOrderRequest.getIsCheckFinish()); } + + + IoCollectOrder collectOrder = collectOrderService.getByBillNo(collectOrderRequest.getBillNo()); + if (StrUtil.isNotEmpty(collectOrder.getSummaryNo())) { + collectOrderBizRequest.setSummaryNo(collectOrder.getSummaryNo()); + } List collectOrderBizResponses = collectOrderService.combieOrderDetail(collectOrderBizRequest); - boolean isAllTag = collectOrderBizResponses.stream() - .allMatch(obj -> StrUtil.isNotEmpty(obj.getFinishUdiCode()) || obj.getAutoTagStatus() == 2); + boolean isAllTag = collectOrderBizResponses.stream().allMatch(obj -> StrUtil.isNotEmpty(obj.getFinishUdiCode()) || obj.getAutoTagStatus() == 2); } collectOrderService.finishOrder(collectOrderRequest, getUser(), false); return ResultVOUtils.success(); @@ -480,8 +497,7 @@ public class IoCollectOrderController extends BaseController { if (!IntUtil.value(collectSet.getGetSplitConfirm())) { confirmOrderBiz.setSkipSplitConfirm(true); } - ConfirmResponse splitInfo = splitCodeService.confirmBizAutiTagCode(confirmOrderBiz, confirmOrderBiz.getQueueCode(), - confirmOrderBiz.getConfirmSplitCode(), confirmOrderBiz.getSkipSplitConfirm()); + ConfirmResponse splitInfo = splitCodeService.confirmBizAutiTagCode(confirmOrderBiz, confirmOrderBiz.getQueueCode(), confirmOrderBiz.getConfirmSplitCode(), confirmOrderBiz.getSkipSplitConfirm()); return ResultVOUtils.success(splitInfo); } @@ -498,8 +514,7 @@ public class IoCollectOrderController extends BaseController { return ResultVOUtils.error(500, "单据号不能为空!"); } List collectOrderBizs = collectOrderBizService.listByBillNo(collectOrderRequest.getBillNo()); - boolean allConfirmed = CollUtil.isNotEmpty(collectOrderBizs) && - collectOrderBizs.stream().allMatch(biz -> IntUtil.value(biz.getGetConfirm())); + boolean allConfirmed = CollUtil.isNotEmpty(collectOrderBizs) && collectOrderBizs.stream().allMatch(biz -> IntUtil.value(biz.getGetConfirm())); if (allConfirmed) { collectOrderService.confirmFinishOrder(collectOrderRequest, getUser()); return ResultVOUtils.success("单据完成!"); @@ -634,8 +649,7 @@ public class IoCollectOrderController extends BaseController { @PostMapping("/udiwms/basic/collect/order/finishReturnOrder") @Transactional(rollbackFor = Exception.class) public BaseResponse finishReturnOrder(@RequestBody CollectOrderRequest collectOrderRequest) { - return collectOriginService.finishReturnOrder(collectOrderRequest); -// return collectOriginService.submitreturnOrder(collectOrderRequest,1); + return collectOriginService.submitreturnOrder(collectOrderRequest,1); } diff --git a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java index cc893104c..ee3750bf9 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -1830,12 +1830,16 @@ public class IoCodeTempController extends BaseController { return ResultVOUtils.error(533, "扫码重复!"); } } else if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) { - if (fifoCodeEntity == null) { - return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!"); - } - if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo()) - return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!"); + IoCollectSet collectSet = collectSetService.getSet(); + if (!IntUtil.value(collectSet.getConflictReturn())) { + if (fifoCodeEntity == null) { + return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!"); + } + if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo()) + return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!"); + } } + if (codeTempEntity != null) { return ResultVOUtils.error(533, "扫码重复!"); } diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java index 833010afb..fa4f76d86 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java @@ -433,11 +433,11 @@ public class IoOrderController extends BaseController { if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) { for (IoCodeTempEntity codeTempEntity : codeTempEntities) { IoSplitFifoCodeEntity fifoCodeEntity = fifoCodeService.findByCode(codeTempEntity.getCode(), addOrderRequest.getWorkPlaceCode()); - if (fifoCodeEntity == null && StrUtil.isEmpty(fifoCodeEntity.getSerialNo())) { - return ResultVOUtils.error(500, "当前追溯码:" + fifoCodeEntity.getCode() + "未上货!"); - } +// if (fifoCodeEntity == null) { +// return ResultVOUtils.error(500, "当前追溯码:" + fifoCodeEntity.getCode() + "未上货!"); +// } //校验工位库存 - if (fifoCodeEntity.getTotalCount() < codeTempEntity.getReCount()) { + if (fifoCodeEntity!=null && fifoCodeEntity.getTotalCount() < codeTempEntity.getReCount()) { return ResultVOUtils.error(500, "当前码:" + fifoCodeEntity.getCode() + "库存不足,请更改码明细!"); } } diff --git a/src/main/java/com/glxp/api/entity/collect/IoCollectSet.java b/src/main/java/com/glxp/api/entity/collect/IoCollectSet.java index 6b3dfb09e..2e5202e30 100644 --- a/src/main/java/com/glxp/api/entity/collect/IoCollectSet.java +++ b/src/main/java/com/glxp/api/entity/collect/IoCollectSet.java @@ -130,6 +130,15 @@ public class IoCollectSet implements Serializable { private Boolean delayTageCode; + @TableField(value = "conflictScan") + @ApiModelProperty(value = "是否启用扫码冲突替换:1:是;0:否") + private Boolean conflictScan; + + @TableField(value = "conflictReturn") + @ApiModelProperty(value = "是否启用退货扫码冲突替换:1:是;0:否") + private Boolean conflictReturn; + + private static final long serialVersionUID = 1L; @TableField(exist = false) 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 e577e2eca..16de02f17 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderCodeManService.java @@ -57,7 +57,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; import java.util.stream.Collectors; @Service @@ -139,18 +142,12 @@ public class IoCollectOrderCodeManService extends ServiceImpl collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo()); + List collectOrderBizs; + collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); + if (StrUtil.isNotEmpty(collectOrder.getSummaryNo())) { + collectOrderBizs = collectOrderService.getOrderBizs(collectOrder.getSummaryNo()); + } else { + collectOrderBizs = collectOrderBizService.listByBillNo(addTagCodeReqeust.getBillNo()); + } //2.校验是否处方单UDI码 if (IntUtil.value(sysWorkplaceDocumentEntity.getScanType()) == WorkOperType.TYPE_GEN_ORDER) { if (StrUtil.isEmpty(addTagCodeReqeust.getBillNo())) { @@ -544,26 +546,11 @@ public class IoCollectOrderCodeManService extends ServiceImpl udiRelevanceResponses, List collectOrderBizs, UdiEntity udiEntity, IoCollectOrder collectOrder) { for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) { for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { - if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) && - (StrUtil.trimToEmpty(collectOrderBiz.getBatchNo()).equals(StrUtil.trimToEmpty(udiEntity.getBatchNo()))) - ) { + if (udiRelevanceResponse.getId().equals(collectOrderBiz.getRelId()) && (StrUtil.trimToEmpty(collectOrderBiz.getBatchNo()).equals(StrUtil.trimToEmpty(udiEntity.getBatchNo())))) { int actCount = 0; if (IntUtil.value(collectOrder.getOrderCirType()) == 1) { actCount = +calCountUtil.getCirActCount(udiRelevanceResponse); @@ -780,9 +765,7 @@ public class IoCollectOrderCodeManService extends ServiceImpl vailCodeResultResponses = new ArrayList<>(); for (String code : request.getUdiCodeList()) { - IoCollectOrderCodeMan ioCollectOrderCodeMan = collectOrderCodeManMapper.selectOne(new LambdaQueryWrapper() - .eq(IoCollectOrderCodeMan::getOrderIdFk, request.getOrderIdFk()) - .eq(IoCollectOrderCodeMan::getUdiCode, code)); + IoCollectOrderCodeMan ioCollectOrderCodeMan = collectOrderCodeManMapper.selectOne(new LambdaQueryWrapper().eq(IoCollectOrderCodeMan::getOrderIdFk, request.getOrderIdFk()).eq(IoCollectOrderCodeMan::getUdiCode, code)); VailCodeResultResponse vailCodeResultResponse = new VailCodeResultResponse(); if (ioCollectOrderCodeMan != null) { vailCodeResultResponse.setStatus(1); 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 6cc74434e..b23222260 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java @@ -1013,4 +1013,19 @@ public class IoCollectOrderService extends ServiceImpl(summarizedMap.values()); } + + public List getBillBySummary(String summaryNo) { + List billNos = listObjs(new LambdaQueryWrapper().select(IoCollectOrder::getBillNo).eq(IoCollectOrder::getSummaryNo, summaryNo), Object::toString); + return billNos; + } + + + public List getOrderBizs(String summaryNo) { + List collectOrderBizs = null; + List billNos = getBillBySummary(summaryNo); + if (CollUtil.isNotEmpty(billNos)) { + collectOrderBizs = collectOrderBizService.list(new LambdaQueryWrapper().in(IoCollectOrderBiz::getOrderIdFk, billNos)); + } + return collectOrderBizs; + } } diff --git a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java index 35ffd0082..0bc020f38 100644 --- a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java +++ b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java @@ -919,11 +919,14 @@ public class AddCoodeService { return ResultVOUtils.error(533, "扫码重复!"); } } else if (bussinessTypeEntity.getAction().equals(ConstantType.SPLIT_RETURN)) { - if (fifoCodeEntity == null) { - return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!"); - } - if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo()) - return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!"); + IoCollectSet collectSet = collectSetService.getSet(); + if (!IntUtil.value(collectSet.getConflictReturn())) { + if (fifoCodeEntity == null) { + return ResultVOUtils.error(500, "当前追溯码未上货或已出库完毕!"); + } + if (splitCodeEntity != null) {//&& StrUtil.isNotEmpty(splitCodeEntity.getSerialNo()) + return ResultVOUtils.error(533, "当前追溯码已经拆零,无法退货!"); + } } if (codeTempEntity != null) { return ResultVOUtils.error(533, "扫码重复!"); diff --git a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java index 13b52f217..b87b68c20 100644 --- a/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java +++ b/src/main/java/com/glxp/api/service/inout/IoCheckInoutService.java @@ -1283,7 +1283,7 @@ public class IoCheckInoutService { } else if (orderEntity.getAction().equals(ConstantType.SPLIT_RETURN)) { //拆零预出库退回 List codeList = codeService.findByOrderId(orderEntity.getBillNo()); - fifoInvService.removeInv(codeList, orderEntity.getWorkPlaceCode()); + fifoInvService.removeInv(codeList, orderEntity); splitFifoCodeService.updateAllInvAlert(orderEntity.getWorkPlaceCode()); } } 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 198d3081a..078f96d95 100644 --- a/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java +++ b/src/main/java/com/glxp/api/service/inout/IoSplitCodeService.java @@ -199,20 +199,24 @@ public class IoSplitCodeService extends ServiceImpl collectOrderBizs = collectOrderBizService.listByBillNo(collectOrder.getBillNo()); - + List collectOrderBizs = null; + collectOrderBizs = collectOrderBizService.listByBillNo(collectOrder.getBillNo()); //如果手动扫码判断该码是否在队列里,如果已在队列,则队列里剔除 List collectOrderCodeMEN = collectOrderCodeManService.listByBillNo(collectOrder.getBillNo()); if (CollUtil.isNotEmpty(collectOrderCodeMEN)) { //扫码冲突 -// dealOrderReplace(collectOrderCodeMEN, collectOrder,putWorkPlaceCode); + if (IntUtil.value(collectSet.getConflictScan())) { + dealOrderReplace(collectOrderCodeMEN, collectOrder, putWorkPlaceCode); + } for (IoCollectOrderCodeMan collectOrderCodeMan : collectOrderCodeMEN) { if (IntUtil.value(collectOrderCodeMan.getRemoveFlag())) { continue; @@ -371,17 +375,22 @@ public class IoSplitCodeService extends ServiceImpl collectOrderCodeManList, IoCollectOrder collectOrder,Long putWorkPlaceCode) { + public void dealOrderReplace(List collectOrderCodeManList, IoCollectOrder collectOrder, Long putWorkPlaceCode) { for (IoCollectOrderCodeMan collectOrderCodeMan : collectOrderCodeManList) { // 1. 查找已完成成单据扫码是否已被分配 - List collectCodeBackups = collectCodeBackMapper.selectList(new LambdaQueryWrapper().eq(IoCollectCodeBackup::getBusType, collectOrder.getBusType()).eq(IoCollectCodeBackup::getCode, collectOrderCodeMan.getUdiCode()).eq(IoCollectCodeBackup::getIsSplitCode, 0)); + List collectCodeBackups = collectCodeBackMapper.selectList(new LambdaQueryWrapper().eq(IoCollectCodeBackup::getBusType, collectOrder.getBusType()).eq(IoCollectCodeBackup::getCode, collectOrderCodeMan.getUdiCode())); if (CollUtil.isNotEmpty(collectCodeBackups)) { IoCollectCodeBackup collectCodeBackup = collectCodeBackups.get(0); + // 1. 如果本身标记为手动整取,则应报错提示,重复扫码 if (IntUtil.value(collectCodeBackup.getFifoSplit()) == 3) { throw new JsonException(500, collectCodeBackup.getCode() + "重复扫码,请盘查后重试!"); } + // 不管是自动拆零或者手动拆零直接忽略,不走冲突赋码逻辑 + if (IntUtil.value(collectCodeBackup.getFifoSplit()) != 2) { + break; + } IoCollectOrderBackup collectOrderBackup = collectOrderBackupMapper.selectOne(new LambdaQueryWrapper().eq(IoCollectOrderBackup::getBillNo, collectCodeBackup.getBillNo())); collectOrderCodeMan.setRemoveFlag(true); @@ -403,7 +412,7 @@ public class IoSplitCodeService extends ServiceImpl splitFifoCodeEntitys = splitFifoCodeService.findByRelId(workPlaceCode, codeEntity.getRelId(), codeEntity.getBatchNo(), null); - if (CollUtil.isEmpty(splitFifoCodeEntitys)) { - throw new JsonException(500, "工位库存不足!"); - } -// ioSplitFifoCodeEntity = splitFifoCodeEntitys.get(0); - - List collectCodeBackups = collectCodeBackMapper.selectList(new LambdaQueryWrapper().eq(IoCollectCodeBackup::getCode, ioSplitFifoCodeEntity.getCode())); - if (CollUtil.isNotEmpty(collectCodeBackups)) { - IoCollectCodeBackup collectCodeBackup = collectCodeBackups.get(0); + // 1.判断工位库存是否足够 + // 2.工位库存足够的话,判断已完成单是否存在, + // 3.存在的话,判断已完成单是否已上传医保 + // 4.已上传医保的话,调用医保删除接口 - if (IntUtil.value(collectCodeBackup.getFifoSplit()) == 3) { - throw new JsonException(500, collectCodeBackup.getCode() + "重复扫码,请盘查后重试!"); + List splitFifoCodeEntitys = splitFifoCodeService.findByRelId(workPlaceCode, codeEntity.getRelId(), codeEntity.getBatchNo(), null); + if (CollUtil.isEmpty(splitFifoCodeEntitys)) { + throw new JsonException(500, "工位库存不足!"); + } + IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeEntitys.get(0); + + List collectCodeBackups = collectCodeBackMapper.selectList(new LambdaQueryWrapper().eq(IoCollectCodeBackup::getCode, codeEntity.getCode())); + if (CollUtil.isNotEmpty(collectCodeBackups)) { + IoCollectCodeBackup collectCodeBackup = collectCodeBackups.get(0); +// if (IntUtil.value(collectCodeBackup.getFifoSplit()) == 3) { +// throw new JsonException(500, collectCodeBackup.getCode() + "重复扫码,请盘查后重试!"); +// } + IoCollectOrderBackup collectOrderBackup = collectOrderBackupMapper.selectOne(new LambdaQueryWrapper().eq(IoCollectOrderBackup::getBillNo, collectCodeBackup.getBillNo())); + if (IntUtil.value(collectOrderBackup.getUploadStatus()) == 2) { + // 单据已被上传至医保 ---- 取当前库存的码替换至已完成单的码,并退库,以当前的码为退库单的码,并生成替换日志 + IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity); + if (splitFifoCodeEntity == null) { + throw new JsonException(500, "工位存量不足!"); } - IoCollectOrderBackup collectOrderBackup = collectOrderBackupMapper.selectOne(new LambdaQueryWrapper().eq(IoCollectOrderBackup::getBillNo, collectCodeBackup.getBillNo())); + IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(codeEntity.getCode()).type(4) //退货已上传医保替换码 + .updateTime(new Date()).build(); + collectErrorLogMapper.insert(ioCollectErrorLog); + collectCodeBackup.setCode(splitFifoCodeEntity.getCode()); + collectCodeBackMapper.updateById(collectCodeBackup); - if (IntUtil.value(collectOrderBackup.getUploadStatus()) == 2) { - // 单据已被上传至医保 ---- 取当前库存的码替换至已完成单的码,并退库,以当前的码为退库单的码,并生成替换日志 - IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity); - if (splitFifoCodeEntity == null) { - throw new JsonException(500, "工位存量不足!"); - } + // 若已完成单已上传医保,则当前已完成单的码就与医保实际已上传的码不匹配; + // 解决方案1: 调用医保接口删除当前单据,并重新把最新的单据上传; - IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(ioSplitFifoCodeEntity.getCode()).type(4) //退货已上传医保替换码 - .updateTime(new Date()).build(); - collectErrorLogMapper.insert(ioCollectErrorLog); - collectCodeBackup.setCode(splitFifoCodeEntity.getCode()); - collectCodeBackMapper.updateById(collectCodeBackup); - - // 若已完成单已上传医保,则当前已完成单的码就与医保实际已上传的码不匹配; - // 解决方案1: 调用医保接口删除当前单据,并重新把最新的单据上传; - - - // 解决方案2: 不管,保留替换记录 + // 解决方案2: 不管,保留替换记录 - } else { - //单据未上传医保,上传医保失败 - IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity); - if (splitFifoCodeEntity == null) { - throw new JsonException(500, "工位存量不足!"); - } - IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(codeEntity.getCode()).type(3) //退货未上传医保替换码 - .updateTime(new Date()).build(); - collectErrorLogMapper.insert(ioCollectErrorLog); - //替换已完成单据的码 - collectCodeBackup.setCode(splitFifoCodeEntity.getCode()); - collectCodeBackMapper.updateById(collectCodeBackup); + } else { + //单据未上传医保,上传医保失败 + IoSplitFifoCodeEntity splitFifoCodeEntity = removeInvByCode(ioSplitFifoCodeEntity); + if (splitFifoCodeEntity == null) { + throw new JsonException(500, "工位存量不足!"); } + IoCollectErrorLog ioCollectErrorLog = IoCollectErrorLog.builder().orderId(codeEntity.getOrderId()).autoCode(splitFifoCodeEntity.getCode()).manuCode(codeEntity.getCode()).type(3) //退货未上传医保替换码 + .updateTime(new Date()).build(); + collectErrorLogMapper.insert(ioCollectErrorLog); + //替换已完成单据的码 + collectCodeBackup.setCode(splitFifoCodeEntity.getCode()); + collectCodeBackMapper.updateById(collectCodeBackup); } - } + } @@ -501,8 +503,9 @@ public class IoSplitCodeService extends ServiceImpl 0) { collectOrder.setTagStatus(6); //拆零未赋码 + break; } - break; + } } collectOrderBackupService.updateByBillNo(collectOrder); @@ -593,7 +596,8 @@ public class IoSplitCodeService extends ServiceImpl 0) { count = IntUtil.value(ioSplitCodeEntity.getRemainCount()) - unCount; - IoCollectOrderCodeAuto collectOrderCodeAuto = IoCollectOrderCodeAuto.builder().codeIdFk(ioSplitCodeEntity.getId()).udiCode(ioSplitCodeEntity.getCode()).orderIdFk(collectOrder.getBillNo()).batchNo(ioSplitCodeEntity.getBatchNo()).productDate(ioSplitCodeEntity.getProduceDate()).expireDate(ioSplitCodeEntity.getExpireDate()).serialNo(ioSplitCodeEntity.getSerialNo()).relId(collectOrderBiz.getRelId()).bizIdFk(collectOrderBiz.getId()).fifoSplit(count > 0 ? count : 0).reCount(count).createTime(new Date()).updateTime(new Date()).build(); + IoCollectOrderCodeAuto collectOrderCodeAuto = IoCollectOrderCodeAuto.builder().codeIdFk(ioSplitCodeEntity.getId()).udiCode(ioSplitCodeEntity.getCode()).orderIdFk(collectOrder.getBillNo()).batchNo(ioSplitCodeEntity.getBatchNo()).productDate(ioSplitCodeEntity.getProduceDate()).expireDate(ioSplitCodeEntity.getExpireDate()).serialNo(ioSplitCodeEntity.getSerialNo()).relId(collectOrderBiz.getRelId()).bizIdFk(collectOrderBiz.getId()) + .fifoSplit(1).reCount(count > 0 ? count : 0).createTime(new Date()).updateTime(new Date()).build(); collectOrderCodeAutoService.save(collectOrderCodeAuto); codeAutoList.add(collectOrderCodeAuto); if (count > 0) { @@ -635,26 +639,11 @@ public class IoSplitCodeService extends ServiceImpl codeAutoList, IoCollectOrderBackup collectOrder) { - if (CollUtil.isEmpty(codeAutoList)) - return; + if (CollUtil.isEmpty(codeAutoList)) return; List ioCollectCodes = new ArrayList<>(); for (IoCollectOrderCodeAuto collectOrderCodeAuto : codeAutoList) { UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByRelId(collectOrderCodeAuto.getRelId() + ""); - ioCollectCodes.add(IoCollectCodeBackup.builder().code(collectOrderCodeAuto.getUdiCode()) - .fromType(collectOrder.getFromType()) - .busType(collectOrder.getBusType()) - .billNo(collectOrder.getBillNo()) - .fromCorp(collectOrder.getFromCorp()) - .operTime(collectOrder.getUpdateTime()) - .operUser(collectOrder.getCreateUser()) - .fifoSplit(1) - .relId(collectOrderCodeAuto.getRelId()) - .workPlaceCode(collectOrder.getWorkPlaceCode()) - .remark(collectOrder.getRemark()) - .purType(udiRelevanceResponse.getPurType()) - .inBatchNo(System.currentTimeMillis()) - .reCount(collectOrderCodeAuto.getReCount()) - .build()); + ioCollectCodes.add(IoCollectCodeBackup.builder().code(collectOrderCodeAuto.getUdiCode()).fromType(collectOrder.getFromType()).busType(collectOrder.getBusType()).billNo(collectOrder.getBillNo()).fromCorp(collectOrder.getFromCorp()).operTime(collectOrder.getUpdateTime()).operUser(collectOrder.getCreateUser()).fifoSplit(1).relId(collectOrderCodeAuto.getRelId()).workPlaceCode(collectOrder.getWorkPlaceCode()).remark(collectOrder.getRemark()).purType(udiRelevanceResponse.getPurType()).inBatchNo(System.currentTimeMillis()).reCount(collectOrderCodeAuto.getReCount()).build()); } collectCodeBackService.saveBatch(ioCollectCodes); } diff --git a/src/main/java/com/glxp/api/service/inout/IoSplitFifoInvService.java b/src/main/java/com/glxp/api/service/inout/IoSplitFifoInvService.java index 72d9b0846..a36f66540 100644 --- a/src/main/java/com/glxp/api/service/inout/IoSplitFifoInvService.java +++ b/src/main/java/com/glxp/api/service/inout/IoSplitFifoInvService.java @@ -13,10 +13,7 @@ import com.glxp.api.dao.inout.IoSplitFifoInvMapper; import com.glxp.api.entity.basic.SysWorkplaceLayer; import com.glxp.api.entity.basic.SysWorkplacePutRel; import com.glxp.api.entity.basic.SysWorkplaceQueue; -import com.glxp.api.entity.collect.IoCollectCodeBackup; -import com.glxp.api.entity.collect.IoCollectErrorLog; -import com.glxp.api.entity.collect.IoCollectOrderBackup; -import com.glxp.api.entity.collect.IoSplitFifoInvRel; +import com.glxp.api.entity.collect.*; import com.glxp.api.entity.inout.*; import com.glxp.api.exception.JsonException; import com.glxp.api.req.basic.SysWorkplaceLayerRequest; @@ -28,6 +25,7 @@ import com.glxp.api.service.basic.SysWorkplaceDocumentService; import com.glxp.api.service.basic.SysWorkplaceLayerService; import com.glxp.api.service.basic.SysWorkplaceQueueService; import com.glxp.api.service.basic.UdiRelevanceService; +import com.glxp.api.service.collect.IoCollectSetService; import com.glxp.api.service.collect.IoSplitFifoInvRelService; import com.glxp.api.service.thrsys.SysWorkplacePutRelService; import com.glxp.api.util.IntUtil; @@ -226,58 +224,62 @@ public class IoSplitFifoInvService extends ServiceImpl codeList, Long workPlaceCode) { + public void removeInv(List codeList, IoOrderEntity orderEntity) { List splitCodeEntities = new ArrayList<>(); + IoCollectSet collectSet = collectSetService.getSet(); if (CollUtil.isNotEmpty(codeList)) { for (IoCodeEntity codeEntity : codeList) { - IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), workPlaceCode); - - - - if (StrUtil.isEmpty(codeEntity.getSerialNo())) { - if (ioSplitFifoCodeEntity != null) { - ioSplitFifoCodeEntity.setScanCount(IntUtil.value(ioSplitFifoCodeEntity.getScanCount()) - IntUtil.value(codeEntity.getCount())); - ioSplitFifoCodeEntity.setTotalCount(IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()) - IntUtil.value(codeEntity.getReCount())); - ioSplitFifoCodeEntity.setUpdateTime(new Date()); - splitFifoCodeService.updateById(ioSplitFifoCodeEntity); - IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity); - if (splitFifoInv != null) { - splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(codeEntity.getReCount())); - splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + IntUtil.value(codeEntity.getCount())); - splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(codeEntity.getReCount())); - splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount())); - splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount())); - updateById(splitFifoInv); + IoSplitFifoCodeEntity ioSplitFifoCodeEntity = splitFifoCodeService.findByCode(codeEntity.getCode(), orderEntity.getWorkPlaceCode()); + if (ioSplitFifoCodeEntity == null && IntUtil.value(collectSet.getConflictReturn())) { + ioSplitCodeService.workReturnReplace(codeEntity, orderEntity.getWorkPlaceCode()); + } else { + //退库扫码冲突判断 + if (StrUtil.isEmpty(codeEntity.getSerialNo())) { + if (ioSplitFifoCodeEntity != null) { + ioSplitFifoCodeEntity.setScanCount(IntUtil.value(ioSplitFifoCodeEntity.getScanCount()) - IntUtil.value(codeEntity.getCount())); + ioSplitFifoCodeEntity.setTotalCount(IntUtil.value(ioSplitFifoCodeEntity.getTotalCount()) - IntUtil.value(codeEntity.getReCount())); + ioSplitFifoCodeEntity.setUpdateTime(new Date()); + splitFifoCodeService.updateById(ioSplitFifoCodeEntity); + IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity); + if (splitFifoInv != null) { + splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(codeEntity.getReCount())); + splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + IntUtil.value(codeEntity.getCount())); + splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(codeEntity.getReCount())); + splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount())); + splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount())); + updateById(splitFifoInv); + } + if (ioSplitFifoCodeEntity.getScanCount() == 0) { + splitFifoCodeService.removeById(ioSplitFifoCodeEntity); + } } - if (ioSplitFifoCodeEntity.getScanCount() == 0) { - splitFifoCodeService.removeById(ioSplitFifoCodeEntity); + } else { + if (ioSplitFifoCodeEntity != null) splitCodeEntities.add(ioSplitFifoCodeEntity); + splitFifoCodeService.removeBatchByIds(splitCodeEntities); + for (IoSplitFifoCodeEntity tempEntity : splitCodeEntities) { + IoSplitFifoInv splitFifoInv = findByFifoCode(tempEntity); + if (splitFifoInv != null) { + splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(tempEntity.getTotalCount())); + splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + 1); + splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount())); + splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount())); + splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount())); + updateById(splitFifoInv); + } } } - } else { - if (ioSplitFifoCodeEntity != null) splitCodeEntities.add(ioSplitFifoCodeEntity); } + } } - splitFifoCodeService.removeBatchByIds(splitCodeEntities); - for (IoSplitFifoCodeEntity ioSplitFifoCodeEntity : splitCodeEntities) { - IoSplitFifoInv splitFifoInv = findByFifoCode(ioSplitFifoCodeEntity); - if (splitFifoInv != null) { - splitFifoInv.setOutCount(IntUtil.value(splitFifoInv.getOutCount()) + IntUtil.value(ioSplitFifoCodeEntity.getTotalCount())); - splitFifoInv.setOutCodeCount(IntUtil.value(splitFifoInv.getOutCodeCount()) + 1); - splitFifoInv.setReCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount())); - splitFifoInv.setReCodeCount(IntUtil.value(splitFifoInv.getInCodeCount()) - IntUtil.value(splitFifoInv.getOutCodeCount())); - splitFifoInv.setAvailableCount(IntUtil.value(splitFifoInv.getInCount()) - IntUtil.value(splitFifoInv.getOutCount()) - IntUtil.value(splitFifoInv.getLockCount())); - updateById(splitFifoInv); - } - } + } diff --git a/src/main/resources/mybatis/mapper/collect/IoCollectCodeBackMapper.xml b/src/main/resources/mybatis/mapper/collect/IoCollectCodeBackMapper.xml index ae460d90d..44a717a66 100644 --- a/src/main/resources/mybatis/mapper/collect/IoCollectCodeBackMapper.xml +++ b/src/main/resources/mybatis/mapper/collect/IoCollectCodeBackMapper.xml @@ -30,7 +30,7 @@ AND iccb.code LIKE concat( #{code}, '%') - AND iccb.billNo LIKE concat(#{billNo}, '%') + AND iccb.billNo = #{billNo} AND iccb.relId = #{relId} diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index abcf94a11..40ad2360a 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -5590,6 +5590,15 @@ CALL Pro_Temp_ColumnWork('io_collect_set', 'delayTageCode', 1); +CALL Pro_Temp_ColumnWork('io_collect_set', 'conflictScan', + 'tinyint NULL DEFAULT NULL COMMENT ''是否启用扫码冲突替换:1:是;0:否''', + 1); + +CALL Pro_Temp_ColumnWork('io_collect_set', 'conflictReturn', + 'tinyint NULL DEFAULT NULL COMMENT ''是否启用退货扫码冲突替换:1:是;0:否''', + 1); + + CREATE TABLE IF NOT EXISTS `yb_uploading_log` ( `id` int NOT NULL AUTO_INCREMENT, `ybParam` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '医保入参',