From d0500ba4584954d433f617940859818d6c81b100 Mon Sep 17 00:00:00 2001 From: yewj Date: Wed, 9 Apr 2025 22:42:06 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B4=A7=E6=80=A5=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8Cbug=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=90=8E?= =?UTF-8?q?=E7=BD=AE=E6=8B=86=E9=9B=B6=EF=BC=8C=E6=89=AB=E7=A0=81=E5=8A=A0?= =?UTF-8?q?=E9=94=81=EF=BC=8C=E5=AE=8C=E6=88=90=E5=8D=95=E6=8D=AE=E6=8B=86?= =?UTF-8?q?=E9=9B=B6=E5=BE=85=E8=B5=8B=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/SysCustomConfigController.java | 1 - .../inout/IoCodeTempController.java | 7 +- .../controller/inout/IoSplitController.java | 19 ++- .../api/service/inout/AddCoodeService.java | 117 ++++++++++-------- .../glxp/api/service/sync/HeartService.java | 2 +- .../sync/impl/BasicExportTimeServiceImpl.java | 4 +- 6 files changed, 87 insertions(+), 63 deletions(-) diff --git a/src/main/java/com/glxp/api/controller/auth/SysCustomConfigController.java b/src/main/java/com/glxp/api/controller/auth/SysCustomConfigController.java index 99bf21844..e43de1379 100644 --- a/src/main/java/com/glxp/api/controller/auth/SysCustomConfigController.java +++ b/src/main/java/com/glxp/api/controller/auth/SysCustomConfigController.java @@ -126,7 +126,6 @@ public class SysCustomConfigController extends BaseController { @AuthRuleAnnotation("") @PostMapping("/getConfigs") - @Log(title = "界面配置管理") public BaseResponse getConfigs(@RequestBody SysCustomConfigRequest request, BindingResult bindingResult) { if (bindingResult.hasErrors()) { 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 3ac6015ca..4466f31d6 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoCodeTempController.java @@ -463,21 +463,22 @@ public class IoCodeTempController extends BaseController { AddCodeResult addCodeResult = new AddCodeResult(); List codeList = addOrderCodeRequest.getCodeList(); if (CollUtil.isEmpty(codeList) && StrUtil.isEmpty(addOrderCodeRequest.getCode())) - return ResultVOUtils.error(500, "追溯码不能为空"); + return ResultVOUtils.error(550, "追溯码不能为空"); if (StrUtil.isNotEmpty(addOrderCodeRequest.getCode()) && CollUtil.isEmpty(codeList)) { codeList = new ArrayList<>(); codeList.add(addOrderCodeRequest.getCode()); addOrderCodeRequest.setCodeList(codeList); } - if (CollUtil.isNotEmpty(codeList)) { String firstCode = codeList.get(0); UdiEntity udiEntity = FilterUdiUtils.getUdi(firstCode); + if (udiEntity == null) { + return ResultVOUtils.error(550, "追溯码格式错误!"); + } if (IntUtil.value(udiEntity.getProductType()) == 2) { addOrderCodeRequest.setProductType(2); } } - // 获取第一个码判断类型,如果是药品类型则使用批量处理方法 if (!codeList.isEmpty() && IntUtil.value(addOrderCodeRequest.getProductType()) == 2) { String firstCode = codeList.get(0); diff --git a/src/main/java/com/glxp/api/controller/inout/IoSplitController.java b/src/main/java/com/glxp/api/controller/inout/IoSplitController.java index 58259a40c..51080ac18 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoSplitController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoSplitController.java @@ -2,6 +2,7 @@ package com.glxp.api.controller.inout; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.pagehelper.PageInfo; import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.res.BaseResponse; @@ -33,6 +34,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -127,7 +129,18 @@ public class IoSplitController extends BaseController { */ @PostMapping("/udiwms/ioSplit/material/order/split") public BaseResponse startSplit(@RequestBody AddTagCodeReqeust addTagCodeReqeust) { + List collectOrders = new ArrayList<>(); IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); + if (StrUtil.isNotEmpty(collectOrder.getSummaryNo())) { + List temps = collectOrderService.list(new LambdaQueryWrapper().eq(IoCollectOrder::getSummaryNo, collectOrder.getSummaryNo())); + if (CollUtil.isNotEmpty(temps)) { + collectOrders.addAll(temps); + } + } else { + collectOrders.add(collectOrder); + } + + if (collectOrder == null) { return ResultVOUtils.error(500, "未找到单据"); } @@ -137,7 +150,11 @@ public class IoSplitController extends BaseController { if (sysWorkplaceDocumentEntity.getProductType() == 1) { splitCodeService.preQxAutoTagCode(collectOrder, null); } else { - splitCodeService.preAutoTagCode(collectOrder, null); + + for (IoCollectOrder temp : collectOrders) { + splitCodeService.preAutoTagCode(temp, null); + } + } collectOrderService.updateById(collectOrder); return ResultVOUtils.success("后台已开始赋码,请稍后刷新查看"); 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 b899b2249..8ddd32597 100644 --- a/src/main/java/com/glxp/api/service/inout/AddCoodeService.java +++ b/src/main/java/com/glxp/api/service/inout/AddCoodeService.java @@ -235,16 +235,16 @@ public class AddCoodeService { if (StringUtils.isNotBlank(orderId)) { existingCodesMap = codeTempService.batchCheckCodesExistence(processedCodes, orderId); } - for (Map.Entry entry : existingCodesMap.entrySet()) { - IoCodeTempEntity codeTempEntity = entry.getValue(); - if (codeTempEntity != null) { - VailCodeResultResponse invalidResponse = new VailCodeResultResponse(); - invalidResponse.setCode(codeTempEntity.getCode()); - invalidResponse.setStatus(2); - invalidResponse.setErrMsg("重复扫码"); - vailCodeResultResponses.add(invalidResponse); - } - } +// for (Map.Entry entry : existingCodesMap.entrySet()) { +// IoCodeTempEntity codeTempEntity = entry.getValue(); +// if (codeTempEntity != null) { +// VailCodeResultResponse invalidResponse = new VailCodeResultResponse(); +// invalidResponse.setCode(codeTempEntity.getCode()); +// invalidResponse.setStatus(2); +// invalidResponse.setErrMsg("重复扫码"); +// vailCodeResultResponses.add(invalidResponse); +// } +// } InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(invCode); // 4. 获取组编号 @@ -253,49 +253,54 @@ public class AddCoodeService { int processors = Runtime.getRuntime().availableProcessors(); ExecutorService executor = Executors.newFixedThreadPool(Math.min(processors * 2, 10)); // 准备请求参数 + IoOrderEntity orderEntity; AddOrderRequest addOrderRequest = new AddOrderRequest(); - BeanUtils.copyProperties(addOrderCodeRequest, addOrderRequest); - addOrderRequest.setBillNo(orderId); - addOrderRequest.setInvCode(invCode); - IoOrderEntity isExit = orderService.findByBillNo(orderId); - IoOrderEntity orderEntity = new IoOrderEntity(); - if (isExit == null) { - String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); - orderEntity.setBillNo(orderNo); - orderEntity.setCorpOrderId(addOrderRequest.getCorpOrderId()); - orderEntity.setMainAction(bussinessTypeEntity.getMainAction()); - orderEntity.setAction(bussinessTypeEntity.getAction()); - orderEntity.setFromCorp(addOrderRequest.getFromCorp()); - if (StrUtil.isNotEmpty(addOrderRequest.getFromInvCode())) { - InvWarehouseEntity invWarehouseEntity1 = invWarehouseService.findByInvSubByCode(addOrderRequest.getFromInvCode()); - orderEntity.setFromDeptCode(invWarehouseEntity1.getParentId()); - } - orderEntity.setFromInvCode(addOrderRequest.getFromInvCode()); - orderEntity.setFromType(ConstantStatus.FROM_WEBNEW); - orderEntity.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE); - orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT); - orderEntity.setCreateUser(authAdmin.getId() + ""); - orderEntity.setCreateTime(new Date()); - orderEntity.setUpdateUser(authAdmin.getId() + ""); - orderEntity.setUpdateTime(new Date()); - orderEntity.setCustomerId(authAdmin.getCustomerId() + ""); - orderEntity.setDeptCode(invWarehouseEntity.getParentId()); - orderEntity.setCheckPreInOrders(addOrderRequest.getCheckPreInOrders()); - orderEntity.setInvCode(addOrderRequest.getInvCode()); - orderEntity.setOrderType(addOrderRequest.getOrderType()); - orderEntity.setBusType(bussinessTypeEntity.getBusType()); - orderEntity.setSickerAdNum(addOrderRequest.getSickerAdNum()); - orderEntity.setWorkPlaceCode(addOrderRequest.getWorkPlaceCode()); - orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); - orderEntity.setFifoSplit(addOrderRequest.getFifoSplit()); - - orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); -// orderEntity.setWorkPlaceQueueCode(queueCode); - orderEntity.setProductType(2); - orderEntity.setFifoSplitTag(addOrderRequest.getFifoSplitTag()); - orderService.insertOrder(orderEntity); - addOrderRequest.setBillNo(orderNo); - } else orderEntity = isExit; + synchronized (addOrderCodeRequest.getCorpOrderId().intern()) { + BeanUtils.copyProperties(addOrderCodeRequest, addOrderRequest); + addOrderRequest.setBillNo(orderId); + addOrderRequest.setInvCode(invCode); + IoOrderEntity isExit = orderService.findByBillNo(orderId); + orderEntity = new IoOrderEntity(); + if (isExit == null) { + String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); + orderEntity.setBillNo(orderNo); + orderEntity.setCorpOrderId(addOrderRequest.getCorpOrderId()); + orderEntity.setMainAction(bussinessTypeEntity.getMainAction()); + orderEntity.setAction(bussinessTypeEntity.getAction()); + orderEntity.setFromCorp(addOrderRequest.getFromCorp()); + if (StrUtil.isNotEmpty(addOrderRequest.getFromInvCode())) { + InvWarehouseEntity invWarehouseEntity1 = invWarehouseService.findByInvSubByCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromDeptCode(invWarehouseEntity1.getParentId()); + } + orderEntity.setFromInvCode(addOrderRequest.getFromInvCode()); + orderEntity.setFromType(ConstantStatus.FROM_WEBNEW); + orderEntity.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE); + orderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT); + orderEntity.setCreateUser(authAdmin.getId() + ""); + orderEntity.setCreateTime(new Date()); + orderEntity.setUpdateUser(authAdmin.getId() + ""); + orderEntity.setUpdateTime(new Date()); + orderEntity.setCustomerId(authAdmin.getCustomerId() + ""); + orderEntity.setDeptCode(invWarehouseEntity.getParentId()); + orderEntity.setCheckPreInOrders(addOrderRequest.getCheckPreInOrders()); + orderEntity.setInvCode(addOrderRequest.getInvCode()); + orderEntity.setOrderType(addOrderRequest.getOrderType()); + orderEntity.setBusType(bussinessTypeEntity.getBusType()); + orderEntity.setSickerAdNum(addOrderRequest.getSickerAdNum()); + orderEntity.setWorkPlaceCode(addOrderRequest.getWorkPlaceCode()); + orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); + orderEntity.setFifoSplit(addOrderRequest.getFifoSplit()); + orderEntity.setProductType(2); + orderEntity.setFifoSplitTag(addOrderRequest.getFifoSplitTag()); + + // 使用corpOrderId作为同步锁 + synchronized (addOrderRequest.getCorpOrderId().intern()) { + orderService.insertOrder(orderEntity); + addOrderRequest.setBillNo(orderNo); + } + } else orderEntity = isExit; + } + try { // 创建异步任务 List> futures = udiEntityMap.entrySet().stream().map(entry -> { @@ -366,8 +371,10 @@ public class AddCoodeService { }); if (CollUtil.isNotEmpty(successCodes)) { - List codeTempEntities = codeTempService.selectByCodes(successCodes, orderEntity.getBillNo()); - genOrderDetailCodeBatch(orderEntity, codeTempEntities); + synchronized (orderEntity.getBillNo().intern()) { + List codeTempEntities = codeTempService.selectByCodes(successCodes, orderEntity.getBillNo()); + genOrderDetailCodeBatch(orderEntity, codeTempEntities); + } } addCodeResult.setOrderId(orderEntity.getBillNo()); addCodeResult.setVailCodeResultResponses(vailCodeResultResponses); @@ -521,7 +528,7 @@ public class AddCoodeService { if (byBillNo != null && !StrUtil.isBlank(byBillNo.getWorkPlaceQueueCode())) { queueCode = byBillNo.getWorkPlaceQueueCode(); } else { - // userId 没有什么用 设置为1 问题不大 避免空指针 + // userId Nothing 没有什么用 设置为1 问题不大 避免空指针 queueCode = ioSplitFifoInvService.setQueueCode(addOrderRequest.getWorkPlaceCode(), 1 + "", udiRelevanceResponse1.getRelId()); addCodeResult.setQueueCode(queueCode); } diff --git a/src/main/java/com/glxp/api/service/sync/HeartService.java b/src/main/java/com/glxp/api/service/sync/HeartService.java index 60a2ce730..1475d8f89 100644 --- a/src/main/java/com/glxp/api/service/sync/HeartService.java +++ b/src/main/java/com/glxp/api/service/sync/HeartService.java @@ -1527,7 +1527,7 @@ public class HeartService { * * @param exportType 任务类型 */ - @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) public void pullData(BasicExportTypeEnum exportType) { switch (exportType) { case IO_ORDER: diff --git a/src/main/java/com/glxp/api/service/sync/impl/BasicExportTimeServiceImpl.java b/src/main/java/com/glxp/api/service/sync/impl/BasicExportTimeServiceImpl.java index adb16da43..1e990bdf7 100644 --- a/src/main/java/com/glxp/api/service/sync/impl/BasicExportTimeServiceImpl.java +++ b/src/main/java/com/glxp/api/service/sync/impl/BasicExportTimeServiceImpl.java @@ -15,7 +15,7 @@ import java.util.List; @Service @Transactional(rollbackFor = Exception.class) -public class BasicExportTimeServiceImpl extends ServiceImpl implements BasicExportTimeService { +public class BasicExportTimeServiceImpl extends ServiceImpl implements BasicExportTimeService { @Resource BasicExportTimeDao basicExportTimeDao; @@ -42,7 +42,7 @@ public class BasicExportTimeServiceImpl extends ServiceImpl