diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java index 25178c3..900ced0 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java @@ -9,11 +9,13 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.exception.JeecgBootException; import org.jeecg.modules.wms.api.mes.entity.*; import org.jeecg.modules.wms.api.mes.servuce.IMesService; import org.jeecg.modules.wms.config.address.service.IAddressService; import org.jeecg.modules.wms.config.container.entity.Container; import org.jeecg.modules.wms.config.container.service.IContainerService; +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; @@ -42,7 +44,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; -import org.jeecg.common.exception.JeecgBootException; import com.baomidou.mybatisplus.core.toolkit.IdWorker; /** @@ -77,6 +78,8 @@ public class MesServiceImpl implements IMesService { private ITaskHeaderService taskHeaderService; @Resource private IContainerService containerService; + @Resource + private IHuahengMultiHandlerService huahengMultiHandlerService; /** * 要求入库单详情 必须是不重样的 @@ -147,7 +150,7 @@ public class MesServiceImpl implements IMesService { if (!success) { throw new JeecgBootException("MES下发入库信息,更新入库组盘头失败"); } - return receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode); + return huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode); } @Override diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java index 973771e..d607aeb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java @@ -160,10 +160,7 @@ public class WcsServiceImpl implements WcsService { int allocationRule = Integer.parseInt(value); String materialAreaCode = null; // 查询任务明细 - LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); - taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskHeaderId, taskNo); - List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambdaQueryWrapper); - + List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(Integer.parseInt(taskNo)); if (taskDetailList.size() > 0) { String materialCode = taskDetailList.get(0).getMaterialCode(); if (StringUtils.isNotEmpty(materialCode)) { @@ -199,12 +196,12 @@ public class WcsServiceImpl implements WcsService { } // 去重 receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList()); - if (receiptContainerDetailList.size() > 0) { // 更新库位编码到组盘头表 ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailList.get(0); if (receiptContainerDetail != null) { - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId()); + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); + receiptContainerHeader.setId(receiptContainerDetail.getReceiptContainerId()); receiptContainerHeader.setToLocationCode(locationCode); if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { throw new JeecgBootException("分配库位时,更新入库组盘的库位号失败"); @@ -241,6 +238,8 @@ public class WcsServiceImpl implements WcsService { } } + taskHeader = new TaskHeader(); + taskHeader.setId(Integer.parseInt(taskNo)); taskHeader.setZoneCode(location.getZoneCode()); taskHeader.setPreTaskNo(preTaskNo); taskHeader.setWeight(Integer.parseInt(warecellDomain.getWeight())); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java index e3cba94..d34b506 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java @@ -3,10 +3,10 @@ package org.jeecg.modules.wms.framework.controller; import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; +import javax.annotation.Resource; import org.jeecg.common.api.vo.Result; import org.jeecg.utils.support.RedissonDistributedLocker; -import org.springframework.beans.factory.annotation.Autowired; import cn.hutool.core.date.SystemClock; import cn.hutool.core.util.StrUtil; @@ -18,7 +18,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class HuahengBaseController { - @Autowired + @Resource private RedissonDistributedLocker redissonDistributedLocker; public interface MultiProcessListener { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java index b6efdc9..fe52e27 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java @@ -1,6 +1,7 @@ package org.jeecg.modules.wms.framework.service; import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; /** @@ -9,4 +10,6 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; public interface IHuahengMultiHandlerService { Result sendTaskToWcs(TaskHeader taskHeader); + + Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java index d3a91a1..e72f5b6 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java @@ -5,6 +5,8 @@ import javax.annotation.Resource; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.wms.framework.controller.HuahengBaseController; import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; +import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; +import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; import org.springframework.stereotype.Service; @@ -17,6 +19,8 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem @Resource private ITaskHeaderService taskHeaderService; + @Resource + private IReceiptContainerHeaderService receiptContainerHeaderService; @Override public Result sendTaskToWcs(TaskHeader taskHeader) { @@ -33,4 +37,17 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem }); return result; } + + @Override + public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) { + String lockKey = warehouseCode; + Result result = handleMultiProcess("createReceiptTask", lockKey, new MultiProcessListener() { + @Override + public Result<?> doProcess() { + Result result = receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode); + return result; + } + }); + return result; + } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java index 0d5e80d..59f6d5f 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java @@ -3,8 +3,6 @@ package org.jeecg.modules.wms.inventory.inventoryHeader.service; import java.math.BigDecimal; import java.util.List; -import javax.servlet.http.HttpServletRequest; - import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -34,11 +32,12 @@ public interface IInventoryDetailService extends IService<InventoryDetail> { /** * 分页查询库存明细,组装容器填充度 - * @author TanYibin - * @createDate 2023年4月7日 - * @param page - * @param queryWrapper + * @author TanYibin + * @createDate 2023年4月7日 + * @param page + * @param queryWrapper * @return */ IPage<InventoryDetail> queryPage(Page<InventoryDetail> page, QueryWrapper<InventoryDetail> queryWrapper); + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java index 4982320..7ca8af2 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java @@ -28,4 +28,8 @@ public interface IInventoryHeaderService extends IService<InventoryHeader> { InventoryHeader getInventoryHeaderByContainerCode(String containerCode, String warehouseCode); boolean updateInventoryContainerStatusByContainerCode(String containerCode, String warehouseCode); + + boolean updateInventoryLocationAndZoneById(String locationCode, String zoneCode, Integer id); + + boolean updateContainerStatusById(String containerStatus, Integer id); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java index 210e341..39feb83 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java @@ -4,19 +4,13 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; - -import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.wms.config.container.entity.Container; import org.jeecg.modules.wms.config.container.service.IContainerService; import org.jeecg.modules.wms.config.containerCapacity.entity.ContainerCapacity; import org.jeecg.modules.wms.config.containerCapacity.service.IContainerCapacityService; -import org.jeecg.modules.wms.config.location.entity.Location; -import org.jeecg.modules.wms.config.material.entity.Material; import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; import org.jeecg.modules.wms.inventory.inventoryHeader.mapper.InventoryDetailMapper; import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; @@ -24,7 +18,6 @@ import org.jeecg.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.RequestParam; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -120,9 +113,9 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe /** * 计算库存明细托盘填充度 - * @author TanYibin - * @createDate 2023年4月7日 - * @param inventoryDetailList + * @author TanYibin + * @createDate 2023年4月7日 + * @param inventoryDetailList */ private void calculateFillDensity(List<InventoryDetail> inventoryDetailList) { // 根据仓库编码分组库存明细 diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java index d840ad7..348aec7 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java @@ -1,6 +1,7 @@ package org.jeecg.modules.wms.inventory.inventoryHeader.service.impl; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -74,21 +75,44 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe } InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode); if (inventoryHeader != null) { - inventoryHeader.setContainerStatus(container.getStatus()); - boolean success = inventoryHeaderService.updateById(inventoryHeader); + boolean success = inventoryHeaderService.updateContainerStatusById(container.getStatus(), inventoryHeader.getId()); if (!success) { return success; } List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); + List<InventoryDetail> inventoryDetailList1 = new ArrayList<>(); if (inventoryDetailList.size() > 0) { for (InventoryDetail inventoryDetail : inventoryDetailList) { inventoryDetail.setContainerStatus(container.getStatus()); + InventoryDetail inventoryDetail1 = new InventoryDetail(); + inventoryDetail1.setId(inventoryDetail.getId()); + inventoryDetail1.setContainerStatus(container.getStatus()); + inventoryDetailList1.add(inventoryDetail1); } - success = inventoryDetailService.updateBatchById(inventoryDetailList); + success = inventoryDetailService.updateBatchById(inventoryDetailList1); } return success; } return false; } + @Override + public boolean updateInventoryLocationAndZoneById(String locationCode, String zoneCode, Integer id) { + InventoryHeader inventoryHeader = new InventoryHeader(); + inventoryHeader.setId(id); + inventoryHeader.setLocationCode(locationCode); + inventoryHeader.setZoneCode(zoneCode); + boolean success = inventoryHeaderService.updateById(inventoryHeader); + return success; + } + + @Override + public boolean updateContainerStatusById(String containerStatus, Integer id) { + InventoryHeader inventoryHeader = new InventoryHeader(); + inventoryHeader.setId(id); + inventoryHeader.setContainerStatus(containerStatus); + boolean success = inventoryHeaderService.updateById(inventoryHeader); + return success; + } + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java index 846e2ba..2ab373b 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java @@ -24,6 +24,7 @@ import org.jeecg.modules.wms.config.port.entity.Port; import org.jeecg.modules.wms.config.port.service.IPortService; import org.jeecg.modules.wms.config.zone.entity.Zone; import org.jeecg.modules.wms.config.zone.service.IZoneService; +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerDetail; import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerDetailService; @@ -77,6 +78,9 @@ public class ReceiptContainerHeaderController extends JeecgController<ReceiptCon @Autowired private IPortService portService; + @Resource + private IHuahengMultiHandlerService huahengMultiHandlerService; + /*---------------------------------主表处理-begin-------------------------------------*/ /** @@ -332,7 +336,8 @@ public class ReceiptContainerHeaderController extends JeecgController<ReceiptCon @ResponseBody public Result createReceiptTask(@RequestBody ReceiptContainerHeader receiptContainerHeader, HttpServletRequest req) { String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); - return receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode); + Result result = huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode); + return result; } /** diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java index e0b51ab..e2d1781 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java @@ -15,6 +15,7 @@ import org.jeecg.modules.wms.config.container.entity.Container; import org.jeecg.modules.wms.config.container.service.IContainerService; import org.jeecg.modules.wms.config.location.entity.Location; import org.jeecg.modules.wms.config.location.service.ILocationService; +import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerDetail; import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; @@ -76,6 +77,8 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai private IReceiptHeaderService receiptHeaderService; @Resource private IInventoryHeaderService inventoryHeaderService; + @Resource + private IParameterConfigurationService parameterConfigurationService; @Override @Transactional @@ -224,6 +227,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai } ReceiptContainerHeader receiptContainerHeader1 = new ReceiptContainerHeader(); receiptContainerHeader1.setId(receiptContainerHeader.getId()); + receiptContainerHeader1.setToPort(receiptContainerHeader.getToPort()); receiptContainerHeader1.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK); success = this.updateById(receiptContainerHeader1); if (!success) { @@ -320,7 +324,6 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'入库任务取消'", extra = "#extraJsonString", msg = "'任务ID:' + #taskHeader.getId()", condition = "#receiptContainerDetailList.size() > 0", recordReturnValue = true) public boolean cancelReceiptTask(TaskHeader taskHeader) { - log.info("开始取消入库任务"); ReceiptContainerHeader receiptContainerHeader = getById(taskHeader.getReceiptContainerHeaderId()); if (receiptContainerHeader == null) { return false; @@ -329,11 +332,18 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai if (receiptContainerStatus != QuantityConstant.RECEIPT_CONTAINER_TASK) { throw new JeecgBootException("取消入库任务时, 任务状态不为生成任务状态"); } + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION); + if (StringUtils.isEmpty(value)) { + throw new JeecgBootException("取消入库任务时, 没有获取到配置属性"); + } + int taskLocationRule = Integer.parseInt(value); receiptContainerHeader = new ReceiptContainerHeader(); receiptContainerHeader.setId(taskHeader.getReceiptContainerHeaderId()); receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD); // 取消任务后,不指定组盘库位 - receiptContainerHeader.setToLocationCode(QuantityConstant.EMPTY_STRING); + if (taskLocationRule == QuantityConstant.RULE_TASK_NOT_LOCATION) { + receiptContainerHeader.setToLocationCode(QuantityConstant.EMPTY_STRING); + } boolean success = receiptContainerHeaderService.updateById(receiptContainerHeader); if (!success) { throw new JeecgBootException("取消入库任务时, 更新入库组盘头失败"); @@ -370,7 +380,6 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai } LogRecordContext.putVariable("receiptContainerDetailList", receiptContainerDetailList);// 操作日志收集 LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(receiptContainerDetailList));// 操作日志收集 - log.info("完成取消入库任务"); return true; } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java index 33d462b..aa203f2 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java @@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.wms.framework.controller.HuahengBaseController; import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService; import org.jeecg.modules.wms.receipt.receiving.domain.Receive; @@ -31,7 +32,7 @@ import lombok.extern.slf4j.Slf4j; @RestController @RequestMapping("/receipt/receiveHeader") @Slf4j -public class ReceiveController { +public class ReceiveController extends HuahengBaseController { @Resource private IReceiptDetailService receiptDetailService; @@ -80,7 +81,15 @@ public class ReceiveController { @ResponseBody public Result receiving(@RequestBody List<Receive> receiveList, HttpServletRequest req) { String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); - return receiveService.receiving(receiveList, warehouseCode); + String lockKey = warehouseCode; + Result result = handleMultiProcess("receiving", lockKey, new MultiProcessListener() { + @Override + public Result<?> doProcess() { + Result result = receiveService.receiving(receiveList, warehouseCode); + return result; + } + }); + return result; } /** @@ -93,7 +102,15 @@ public class ReceiveController { @ResponseBody public Result<TaskHeader> receivingAndCreateTask(@RequestBody List<Receive> receiveList, HttpServletRequest req) { String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); - return receiveService.receivingAndCreateTask(receiveList, warehouseCode); + String lockKey = warehouseCode; + Result result = handleMultiProcess("receivingAndCreateTask", lockKey, new MultiProcessListener() { + @Override + public Result<?> doProcess() { + Result result = receiveService.receivingAndCreateTask(receiveList, warehouseCode); + return result; + } + }); + return result; } } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java index 61f8317..2695f52 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java @@ -9,7 +9,6 @@ import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -116,7 +115,7 @@ public class TaskHeader implements Serializable { @ApiModelProperty(value = "目标出入口") private String toPortCode; @ApiModelProperty(value = "AGV关联任务ID") - private int agvTaskId; + private Integer agvTaskId; @ApiModelProperty(value = "生成agv任务") private Integer sendAgv; @ApiModelProperty(value = "回传MES信息") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java index e166788..19c5382 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java @@ -295,4 +295,19 @@ public interface ITaskHeaderService extends IService<TaskHeader> { * @return */ Result cancelShipmentTask(TaskHeader taskHeader); + + /** + * 更新状态 + * @param status + * @param id + * @return + */ + boolean updateStatusById(int status, int id); + + /** + * 合并库存 + * @param taskHeader + * @return + */ + boolean combineInventoryDetail(TaskHeader taskHeader); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index dbd3914..21cc2be 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java @@ -33,7 +33,6 @@ import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailS import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService; -import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; @@ -73,6 +72,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.monitor4all.logRecord.annotation.OperationLog; import cn.monitor4all.logRecord.context.LogRecordContext; +import lombok.extern.slf4j.Slf4j; /** * @Description: 任务表 @@ -80,6 +80,7 @@ import cn.monitor4all.logRecord.context.LogRecordContext; * @Date: 2022-11-10 * @Version: V1.0 */ +@Slf4j @Service public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHeader> implements ITaskHeaderService { @@ -1092,8 +1093,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea recordReturnValue = true) public Result completeReceiptTask(TaskHeader taskHeader) { if (taskHeader == null) { - return Result.error("任务未找到,执行中止"); + return Result.error("入库任务未找到,执行中止"); } + log.info("开始完成入库任务, 任务号" + taskHeader.getId()); String warehouseCode = taskHeader.getWarehouseCode(); String fromLocationCode = taskHeader.getFromLocationCode(); String toLocationCode = taskHeader.getToLocationCode(); @@ -1103,27 +1105,33 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(taskHeader.getId()); boolean success = false; if (taskHeader.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { - return Result.ok("任务(" + taskHeader.getId() + ")任务已经是完成的!"); + return Result.ok("入库任务(" + taskHeader.getId() + ")已经是完成的!"); } if (taskDetailList.isEmpty()) { - throw new JeecgBootException("任务明细为空"); + throw new JeecgBootException("入库任务明细为空"); } Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode); if (toLocation == null) { - throw new JeecgBootException("完成任务时,没有找到目的库位"); + throw new JeecgBootException("完成入库任务时,没有找到目的库位"); } InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode); if (inventoryHeader != null) { if (taskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) { - inventoryHeader.setLocationCode(toLocationCode); - inventoryHeader.setZoneCode(zoneCode); - inventoryHeaderService.updateById(inventoryHeader); + if (!inventoryHeaderService.updateInventoryLocationAndZoneById(toLocationCode, zoneCode, inventoryHeader.getId())) { + throw new JeecgBootException("完成入库任务时,没有找到目的库位"); + } List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByInventoryHeaderId(inventoryHeader.getId()); - for (InventoryDetail inventoryDetail : inventoryDetailList) { - inventoryDetail.setLocationCode(toLocationCode); - inventoryDetail.setZoneCode(zoneCode); - if (!inventoryDetailService.updateById(inventoryDetail)) { - throw new ServiceException("更新库存详情失败"); + if (inventoryDetailList.size() > 0) { + List<InventoryDetail> inventoryDetailList1 = new ArrayList<>(); + for (InventoryDetail inventoryDetail : inventoryDetailList) { + InventoryDetail inventoryDetail1 = new InventoryDetail(); + inventoryDetail1.setId(inventoryDetail.getId()); + inventoryDetail1.setLocationCode(toLocationCode); + inventoryDetail1.setZoneCode(zoneCode); + inventoryDetailList1.add(inventoryDetail1); + } + if (!inventoryDetailService.updateBatchById(inventoryDetailList1)) { + throw new ServiceException("完成入库任务时,更新库存详情失败"); } } } @@ -1155,12 +1163,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea taskDetail.setReceiptCode(receiptDetail.getReceiptCode()); BigDecimal taskQty = receiptDetail.getTaskQty(); BigDecimal qty = receiptDetail.getQty(); + int receiptId = receiptDetail.getReceiptId(); + ReceiptDetail receiptDetail1 = new ReceiptDetail(); + receiptDetail1.setId(receiptDetail.getId()); + receiptDetail1.setReceiptId(receiptId); if (taskQty.compareTo(qty) >= 0) { - receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); + receiptDetail1.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); } else { - receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_SHELF); + receiptDetail1.setStatus(QuantityConstant.RECEIPT_HEADER_SHELF); } - receiptDetaiList.add(receiptDetail); + receiptDetaiList.add(receiptDetail1); BigDecimal receiptQty = taskDetail.getQty(); InventoryDetail inventoryDetail = new InventoryDetail(); @@ -1229,8 +1241,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("完成入库任务时,更新库位失败"); } - taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); - success = taskHeaderService.updateById(taskHeader); + success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId()); if (!success) { throw new JeecgBootException("完成入库任务时,更新任务失败"); } @@ -1239,7 +1250,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("完成入库任务时,更新容器失败"); } - if (!combineInventoryDetail(taskHeader)) { + if (!taskHeaderService.combineInventoryDetail(taskHeader)) { throw new JeecgBootException("合并入库库存失败"); } if (!receiptDetailService.updateBatchById(receiptDetaiList)) { @@ -1261,6 +1272,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea LogRecordContext.putVariable("extraJsonString1", JSON.toJSONString(taskDetailList)); LogRecordContext.putVariable("receiptDetaiList", receiptDetaiList); LogRecordContext.putVariable("extraJsonString2", JSON.toJSONString(receiptDetaiList)); + log.info("完成入库任务, 任务号" + taskHeader.getId()); return Result.ok("完成入库任务"); } @@ -1287,7 +1299,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea String fromLocationCode = taskHeader.getFromLocationCode(); String toLocationCode = taskHeader.getToLocationCode(); String containerCode = taskHeader.getContainerCode(); -// String zoneCode = taskHeader.getZoneCode(); + String zoneCode = taskHeader.getZoneCode(); int taskType = taskHeader.getTaskType(); List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(taskHeader.getId()); boolean success = false; @@ -1468,6 +1480,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.ok("完成出库任务"); } + @Override @Transactional(rollbackFor = Exception.class) public boolean combineInventoryDetail(TaskHeader taskHeader) { boolean success = false; @@ -1488,9 +1501,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea InventoryDetail inventoryDetail2 = inventoryDetailList.get(j); if (inventoryDetail1.getMaterialCode().equals(inventoryDetail2.getMaterialCode()) && inventoryDetail1.getBatch().equals(inventoryDetail2.getBatch()) && inventoryDetail1.getLot().equals(inventoryDetail2.getLot()) && inventoryDetail1.getProject().equals(inventoryDetail2.getProject())) { + // 属性一样的库存,相加合并。 BigDecimal totalQty = inventoryDetail1.getQty().add(inventoryDetail2.getQty()); - inventoryDetail1.setQty(totalQty); - success = inventoryDetailService.updateById(inventoryDetail1); + InventoryDetail inventoryDetail = new InventoryDetail(); + inventoryDetail.setId(inventoryDetail1.getId()); + inventoryDetail.setQty(totalQty); + success = inventoryDetailService.updateById(inventoryDetail); if (!success) { throw new JeecgBootException("合并库存时, 更新库存详情失败:" + inventoryDetail1.getId()); } @@ -1512,6 +1528,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (container == null) { throw new JeecgBootException("合并库存时, 没有找到容器, 容器编码为" + containerCode); } + int inventoryId = inventoryHeader.getId(); + inventoryHeader = new InventoryHeader(); + inventoryHeader.setId(inventoryId); inventoryHeader.setTotalQty(totalQty); inventoryHeader.setTotalLines(totalLines); inventoryHeader.setContainerStatus(container.getStatus()); @@ -2206,25 +2225,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Override @Transactional(rollbackFor = Exception.class) public Result cancelReceiptTask(TaskHeader taskHeader) { + log.info("开始取消入库任务"); boolean success = receiptContainerHeaderService.cancelReceiptTask(taskHeader); if (!success) { throw new JeecgBootException("取消入库任务时, 更新组盘头状态失败"); } - String containerCode = taskHeader.getContainerCode(); - String warehouseCode = taskHeader.getWarehouseCode(); - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getUnCompleteReceiptContainerByCode(containerCode, warehouseCode); - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION); - if (StringUtils.isEmpty(value)) { - throw new JeecgBootException("取消入库任务时, 没有获取到配置属性"); - } - int taskLocationRule = Integer.parseInt(value); - if (taskLocationRule == QuantityConstant.RULE_TASK_NOT_LOCATION) { - receiptContainerHeader.setToLocationCode(QuantityConstant.EMPTY_STRING); - success = receiptContainerHeaderService.updateById(receiptContainerHeader); - if (!success) { - throw new JeecgBootException("取消入库任务时, 更新组盘头状态失败!!"); - } - } + log.info("完成取消入库任务"); return Result.ok("取消入库任务成功"); } @@ -2243,6 +2249,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea return Result.ok("取消出库任务成功"); } + @Override + public boolean updateStatusById(int status, int id) { + TaskHeader taskHeader = new TaskHeader(); + taskHeader.setId(id); + taskHeader.setStatus(status); + boolean success = taskHeaderService.updateById(taskHeader); + return success; + } + /** * 取消任务,恢复容器和库位状态 * @param taskHeader @@ -2277,6 +2292,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new JeecgBootException("取消任务时, 没有找到容器"); } if (inventoryHeader != null) { + Integer inventoryHeaderId = inventoryHeader.getId(); + inventoryHeader = new InventoryHeader(); + inventoryHeader.setId(inventoryHeaderId); inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY); success = inventoryHeaderService.updateById(inventoryHeader); if (!success) {