Commit a5e8ff078379bdb37ab52e9eaa65a8afa2427ca7
1 parent
188ca5d6
完善入库流程
Showing
15 changed files
with
180 additions
and
75 deletions
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; |
9 | 9 | import javax.annotation.Resource; |
10 | 10 | |
11 | 11 | import org.jeecg.common.api.vo.Result; |
12 | +import org.jeecg.common.exception.JeecgBootException; | |
12 | 13 | import org.jeecg.modules.wms.api.mes.entity.*; |
13 | 14 | import org.jeecg.modules.wms.api.mes.servuce.IMesService; |
14 | 15 | import org.jeecg.modules.wms.config.address.service.IAddressService; |
15 | 16 | import org.jeecg.modules.wms.config.container.entity.Container; |
16 | 17 | import org.jeecg.modules.wms.config.container.service.IContainerService; |
18 | +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; | |
17 | 19 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; |
18 | 20 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; |
19 | 21 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; |
... | ... | @@ -42,7 +44,6 @@ import org.springframework.stereotype.Service; |
42 | 44 | import org.springframework.transaction.annotation.Transactional; |
43 | 45 | |
44 | 46 | import com.alibaba.fastjson.JSON; |
45 | -import org.jeecg.common.exception.JeecgBootException; | |
46 | 47 | import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
47 | 48 | |
48 | 49 | /** |
... | ... | @@ -77,6 +78,8 @@ public class MesServiceImpl implements IMesService { |
77 | 78 | private ITaskHeaderService taskHeaderService; |
78 | 79 | @Resource |
79 | 80 | private IContainerService containerService; |
81 | + @Resource | |
82 | + private IHuahengMultiHandlerService huahengMultiHandlerService; | |
80 | 83 | |
81 | 84 | /** |
82 | 85 | * 要求入库单详情 必须是不重样的 |
... | ... | @@ -147,7 +150,7 @@ public class MesServiceImpl implements IMesService { |
147 | 150 | if (!success) { |
148 | 151 | throw new JeecgBootException("MES下发入库信息,更新入库组盘头失败"); |
149 | 152 | } |
150 | - return receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode); | |
153 | + return huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode); | |
151 | 154 | } |
152 | 155 | |
153 | 156 | @Override |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
... | ... | @@ -160,10 +160,7 @@ public class WcsServiceImpl implements WcsService { |
160 | 160 | int allocationRule = Integer.parseInt(value); |
161 | 161 | String materialAreaCode = null; |
162 | 162 | // 查询任务明细 |
163 | - LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
164 | - taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskHeaderId, taskNo); | |
165 | - List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambdaQueryWrapper); | |
166 | - | |
163 | + List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(Integer.parseInt(taskNo)); | |
167 | 164 | if (taskDetailList.size() > 0) { |
168 | 165 | String materialCode = taskDetailList.get(0).getMaterialCode(); |
169 | 166 | if (StringUtils.isNotEmpty(materialCode)) { |
... | ... | @@ -199,12 +196,12 @@ public class WcsServiceImpl implements WcsService { |
199 | 196 | } |
200 | 197 | // 去重 |
201 | 198 | receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList()); |
202 | - | |
203 | 199 | if (receiptContainerDetailList.size() > 0) { |
204 | 200 | // 更新库位编码到组盘头表 |
205 | 201 | ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailList.get(0); |
206 | 202 | if (receiptContainerDetail != null) { |
207 | - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId()); | |
203 | + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); | |
204 | + receiptContainerHeader.setId(receiptContainerDetail.getReceiptContainerId()); | |
208 | 205 | receiptContainerHeader.setToLocationCode(locationCode); |
209 | 206 | if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { |
210 | 207 | throw new JeecgBootException("分配库位时,更新入库组盘的库位号失败"); |
... | ... | @@ -241,6 +238,8 @@ public class WcsServiceImpl implements WcsService { |
241 | 238 | } |
242 | 239 | } |
243 | 240 | |
241 | + taskHeader = new TaskHeader(); | |
242 | + taskHeader.setId(Integer.parseInt(taskNo)); | |
244 | 243 | taskHeader.setZoneCode(location.getZoneCode()); |
245 | 244 | taskHeader.setPreTaskNo(preTaskNo); |
246 | 245 | taskHeader.setWeight(Integer.parseInt(warecellDomain.getWeight())); |
... | ... |
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; |
3 | 3 | import java.util.concurrent.TimeUnit; |
4 | 4 | |
5 | 5 | import javax.annotation.Nonnull; |
6 | +import javax.annotation.Resource; | |
6 | 7 | |
7 | 8 | import org.jeecg.common.api.vo.Result; |
8 | 9 | import org.jeecg.utils.support.RedissonDistributedLocker; |
9 | -import org.springframework.beans.factory.annotation.Autowired; | |
10 | 10 | |
11 | 11 | import cn.hutool.core.date.SystemClock; |
12 | 12 | import cn.hutool.core.util.StrUtil; |
... | ... | @@ -18,7 +18,7 @@ import lombok.extern.slf4j.Slf4j; |
18 | 18 | @Slf4j |
19 | 19 | public class HuahengBaseController { |
20 | 20 | |
21 | - @Autowired | |
21 | + @Resource | |
22 | 22 | private RedissonDistributedLocker redissonDistributedLocker; |
23 | 23 | |
24 | 24 | public interface MultiProcessListener { |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
1 | 1 | package org.jeecg.modules.wms.framework.service; |
2 | 2 | |
3 | 3 | import org.jeecg.common.api.vo.Result; |
4 | +import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; | |
4 | 5 | import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; |
5 | 6 | |
6 | 7 | /** |
... | ... | @@ -9,4 +10,6 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; |
9 | 10 | public interface IHuahengMultiHandlerService { |
10 | 11 | |
11 | 12 | Result sendTaskToWcs(TaskHeader taskHeader); |
13 | + | |
14 | + Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode); | |
12 | 15 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
... | ... | @@ -5,6 +5,8 @@ import javax.annotation.Resource; |
5 | 5 | import org.jeecg.common.api.vo.Result; |
6 | 6 | import org.jeecg.modules.wms.framework.controller.HuahengBaseController; |
7 | 7 | import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; |
8 | +import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; | |
9 | +import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; | |
8 | 10 | import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; |
9 | 11 | import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; |
10 | 12 | import org.springframework.stereotype.Service; |
... | ... | @@ -17,6 +19,8 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem |
17 | 19 | |
18 | 20 | @Resource |
19 | 21 | private ITaskHeaderService taskHeaderService; |
22 | + @Resource | |
23 | + private IReceiptContainerHeaderService receiptContainerHeaderService; | |
20 | 24 | |
21 | 25 | @Override |
22 | 26 | public Result sendTaskToWcs(TaskHeader taskHeader) { |
... | ... | @@ -33,4 +37,17 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem |
33 | 37 | }); |
34 | 38 | return result; |
35 | 39 | } |
40 | + | |
41 | + @Override | |
42 | + public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) { | |
43 | + String lockKey = warehouseCode; | |
44 | + Result result = handleMultiProcess("createReceiptTask", lockKey, new MultiProcessListener() { | |
45 | + @Override | |
46 | + public Result<?> doProcess() { | |
47 | + Result result = receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode); | |
48 | + return result; | |
49 | + } | |
50 | + }); | |
51 | + return result; | |
52 | + } | |
36 | 53 | } |
... | ... |
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; |
3 | 3 | import java.math.BigDecimal; |
4 | 4 | import java.util.List; |
5 | 5 | |
6 | -import javax.servlet.http.HttpServletRequest; | |
7 | - | |
8 | 6 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
9 | 7 | |
10 | 8 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
... | ... | @@ -34,11 +32,12 @@ public interface IInventoryDetailService extends IService<InventoryDetail> { |
34 | 32 | |
35 | 33 | /** |
36 | 34 | * 分页查询库存明细,组装容器填充度 |
37 | - * @author TanYibin | |
38 | - * @createDate 2023年4月7日 | |
39 | - * @param page | |
40 | - * @param queryWrapper | |
35 | + * @author TanYibin | |
36 | + * @createDate 2023年4月7日 | |
37 | + * @param page | |
38 | + * @param queryWrapper | |
41 | 39 | * @return |
42 | 40 | */ |
43 | 41 | IPage<InventoryDetail> queryPage(Page<InventoryDetail> page, QueryWrapper<InventoryDetail> queryWrapper); |
42 | + | |
44 | 43 | } |
... | ... |
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> { |
28 | 28 | InventoryHeader getInventoryHeaderByContainerCode(String containerCode, String warehouseCode); |
29 | 29 | |
30 | 30 | boolean updateInventoryContainerStatusByContainerCode(String containerCode, String warehouseCode); |
31 | + | |
32 | + boolean updateInventoryLocationAndZoneById(String locationCode, String zoneCode, Integer id); | |
33 | + | |
34 | + boolean updateContainerStatusById(String containerStatus, Integer id); | |
31 | 35 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
... | ... | @@ -4,19 +4,13 @@ import java.math.BigDecimal; |
4 | 4 | import java.math.RoundingMode; |
5 | 5 | import java.util.List; |
6 | 6 | import java.util.Map; |
7 | -import java.util.Set; | |
8 | 7 | import java.util.function.Function; |
9 | 8 | import java.util.stream.Collectors; |
10 | 9 | |
11 | -import javax.servlet.http.HttpServletRequest; | |
12 | - | |
13 | -import org.jeecg.common.system.query.QueryGenerator; | |
14 | 10 | import org.jeecg.modules.wms.config.container.entity.Container; |
15 | 11 | import org.jeecg.modules.wms.config.container.service.IContainerService; |
16 | 12 | import org.jeecg.modules.wms.config.containerCapacity.entity.ContainerCapacity; |
17 | 13 | import org.jeecg.modules.wms.config.containerCapacity.service.IContainerCapacityService; |
18 | -import org.jeecg.modules.wms.config.location.entity.Location; | |
19 | -import org.jeecg.modules.wms.config.material.entity.Material; | |
20 | 14 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
21 | 15 | import org.jeecg.modules.wms.inventory.inventoryHeader.mapper.InventoryDetailMapper; |
22 | 16 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; |
... | ... | @@ -24,7 +18,6 @@ import org.jeecg.utils.StringUtils; |
24 | 18 | import org.springframework.beans.factory.annotation.Autowired; |
25 | 19 | import org.springframework.stereotype.Service; |
26 | 20 | import org.springframework.util.CollectionUtils; |
27 | -import org.springframework.web.bind.annotation.RequestParam; | |
28 | 21 | |
29 | 22 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
30 | 23 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
... | ... | @@ -120,9 +113,9 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe |
120 | 113 | |
121 | 114 | /** |
122 | 115 | * 计算库存明细托盘填充度 |
123 | - * @author TanYibin | |
124 | - * @createDate 2023年4月7日 | |
125 | - * @param inventoryDetailList | |
116 | + * @author TanYibin | |
117 | + * @createDate 2023年4月7日 | |
118 | + * @param inventoryDetailList | |
126 | 119 | */ |
127 | 120 | private void calculateFillDensity(List<InventoryDetail> inventoryDetailList) { |
128 | 121 | // 根据仓库编码分组库存明细 |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java
1 | 1 | package org.jeecg.modules.wms.inventory.inventoryHeader.service.impl; |
2 | 2 | |
3 | 3 | import java.io.Serializable; |
4 | +import java.util.ArrayList; | |
4 | 5 | import java.util.Collection; |
5 | 6 | import java.util.List; |
6 | 7 | |
... | ... | @@ -74,21 +75,44 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe |
74 | 75 | } |
75 | 76 | InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode); |
76 | 77 | if (inventoryHeader != null) { |
77 | - inventoryHeader.setContainerStatus(container.getStatus()); | |
78 | - boolean success = inventoryHeaderService.updateById(inventoryHeader); | |
78 | + boolean success = inventoryHeaderService.updateContainerStatusById(container.getStatus(), inventoryHeader.getId()); | |
79 | 79 | if (!success) { |
80 | 80 | return success; |
81 | 81 | } |
82 | 82 | List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); |
83 | + List<InventoryDetail> inventoryDetailList1 = new ArrayList<>(); | |
83 | 84 | if (inventoryDetailList.size() > 0) { |
84 | 85 | for (InventoryDetail inventoryDetail : inventoryDetailList) { |
85 | 86 | inventoryDetail.setContainerStatus(container.getStatus()); |
87 | + InventoryDetail inventoryDetail1 = new InventoryDetail(); | |
88 | + inventoryDetail1.setId(inventoryDetail.getId()); | |
89 | + inventoryDetail1.setContainerStatus(container.getStatus()); | |
90 | + inventoryDetailList1.add(inventoryDetail1); | |
86 | 91 | } |
87 | - success = inventoryDetailService.updateBatchById(inventoryDetailList); | |
92 | + success = inventoryDetailService.updateBatchById(inventoryDetailList1); | |
88 | 93 | } |
89 | 94 | return success; |
90 | 95 | } |
91 | 96 | return false; |
92 | 97 | } |
93 | 98 | |
99 | + @Override | |
100 | + public boolean updateInventoryLocationAndZoneById(String locationCode, String zoneCode, Integer id) { | |
101 | + InventoryHeader inventoryHeader = new InventoryHeader(); | |
102 | + inventoryHeader.setId(id); | |
103 | + inventoryHeader.setLocationCode(locationCode); | |
104 | + inventoryHeader.setZoneCode(zoneCode); | |
105 | + boolean success = inventoryHeaderService.updateById(inventoryHeader); | |
106 | + return success; | |
107 | + } | |
108 | + | |
109 | + @Override | |
110 | + public boolean updateContainerStatusById(String containerStatus, Integer id) { | |
111 | + InventoryHeader inventoryHeader = new InventoryHeader(); | |
112 | + inventoryHeader.setId(id); | |
113 | + inventoryHeader.setContainerStatus(containerStatus); | |
114 | + boolean success = inventoryHeaderService.updateById(inventoryHeader); | |
115 | + return success; | |
116 | + } | |
117 | + | |
94 | 118 | } |
... | ... |
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; |
24 | 24 | import org.jeecg.modules.wms.config.port.service.IPortService; |
25 | 25 | import org.jeecg.modules.wms.config.zone.entity.Zone; |
26 | 26 | import org.jeecg.modules.wms.config.zone.service.IZoneService; |
27 | +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; | |
27 | 28 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerDetail; |
28 | 29 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; |
29 | 30 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerDetailService; |
... | ... | @@ -77,6 +78,9 @@ public class ReceiptContainerHeaderController extends JeecgController<ReceiptCon |
77 | 78 | @Autowired |
78 | 79 | private IPortService portService; |
79 | 80 | |
81 | + @Resource | |
82 | + private IHuahengMultiHandlerService huahengMultiHandlerService; | |
83 | + | |
80 | 84 | /*---------------------------------主表处理-begin-------------------------------------*/ |
81 | 85 | |
82 | 86 | /** |
... | ... | @@ -332,7 +336,8 @@ public class ReceiptContainerHeaderController extends JeecgController<ReceiptCon |
332 | 336 | @ResponseBody |
333 | 337 | public Result createReceiptTask(@RequestBody ReceiptContainerHeader receiptContainerHeader, HttpServletRequest req) { |
334 | 338 | String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); |
335 | - return receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode); | |
339 | + Result result = huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode); | |
340 | + return result; | |
336 | 341 | } |
337 | 342 | |
338 | 343 | /** |
... | ... |
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; |
15 | 15 | import org.jeecg.modules.wms.config.container.service.IContainerService; |
16 | 16 | import org.jeecg.modules.wms.config.location.entity.Location; |
17 | 17 | import org.jeecg.modules.wms.config.location.service.ILocationService; |
18 | +import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; | |
18 | 19 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; |
19 | 20 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerDetail; |
20 | 21 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; |
... | ... | @@ -76,6 +77,8 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai |
76 | 77 | private IReceiptHeaderService receiptHeaderService; |
77 | 78 | @Resource |
78 | 79 | private IInventoryHeaderService inventoryHeaderService; |
80 | + @Resource | |
81 | + private IParameterConfigurationService parameterConfigurationService; | |
79 | 82 | |
80 | 83 | @Override |
81 | 84 | @Transactional |
... | ... | @@ -224,6 +227,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai |
224 | 227 | } |
225 | 228 | ReceiptContainerHeader receiptContainerHeader1 = new ReceiptContainerHeader(); |
226 | 229 | receiptContainerHeader1.setId(receiptContainerHeader.getId()); |
230 | + receiptContainerHeader1.setToPort(receiptContainerHeader.getToPort()); | |
227 | 231 | receiptContainerHeader1.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK); |
228 | 232 | success = this.updateById(receiptContainerHeader1); |
229 | 233 | if (!success) { |
... | ... | @@ -320,7 +324,6 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai |
320 | 324 | @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'入库任务取消'", extra = "#extraJsonString", msg = "'任务ID:' + #taskHeader.getId()", |
321 | 325 | condition = "#receiptContainerDetailList.size() > 0", recordReturnValue = true) |
322 | 326 | public boolean cancelReceiptTask(TaskHeader taskHeader) { |
323 | - log.info("开始取消入库任务"); | |
324 | 327 | ReceiptContainerHeader receiptContainerHeader = getById(taskHeader.getReceiptContainerHeaderId()); |
325 | 328 | if (receiptContainerHeader == null) { |
326 | 329 | return false; |
... | ... | @@ -329,11 +332,18 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai |
329 | 332 | if (receiptContainerStatus != QuantityConstant.RECEIPT_CONTAINER_TASK) { |
330 | 333 | throw new JeecgBootException("取消入库任务时, 任务状态不为生成任务状态"); |
331 | 334 | } |
335 | + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION); | |
336 | + if (StringUtils.isEmpty(value)) { | |
337 | + throw new JeecgBootException("取消入库任务时, 没有获取到配置属性"); | |
338 | + } | |
339 | + int taskLocationRule = Integer.parseInt(value); | |
332 | 340 | receiptContainerHeader = new ReceiptContainerHeader(); |
333 | 341 | receiptContainerHeader.setId(taskHeader.getReceiptContainerHeaderId()); |
334 | 342 | receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD); |
335 | 343 | // 取消任务后,不指定组盘库位 |
336 | - receiptContainerHeader.setToLocationCode(QuantityConstant.EMPTY_STRING); | |
344 | + if (taskLocationRule == QuantityConstant.RULE_TASK_NOT_LOCATION) { | |
345 | + receiptContainerHeader.setToLocationCode(QuantityConstant.EMPTY_STRING); | |
346 | + } | |
337 | 347 | boolean success = receiptContainerHeaderService.updateById(receiptContainerHeader); |
338 | 348 | if (!success) { |
339 | 349 | throw new JeecgBootException("取消入库任务时, 更新入库组盘头失败"); |
... | ... | @@ -370,7 +380,6 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai |
370 | 380 | } |
371 | 381 | LogRecordContext.putVariable("receiptContainerDetailList", receiptContainerDetailList);// 操作日志收集 |
372 | 382 | LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(receiptContainerDetailList));// 操作日志收集 |
373 | - log.info("完成取消入库任务"); | |
374 | 383 | return true; |
375 | 384 | } |
376 | 385 | |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
... | ... | @@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletRequest; |
10 | 10 | import org.jeecg.common.api.vo.Result; |
11 | 11 | import org.jeecg.common.aspect.annotation.AutoLog; |
12 | 12 | import org.jeecg.common.system.query.QueryGenerator; |
13 | +import org.jeecg.modules.wms.framework.controller.HuahengBaseController; | |
13 | 14 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; |
14 | 15 | import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService; |
15 | 16 | import org.jeecg.modules.wms.receipt.receiving.domain.Receive; |
... | ... | @@ -31,7 +32,7 @@ import lombok.extern.slf4j.Slf4j; |
31 | 32 | @RestController |
32 | 33 | @RequestMapping("/receipt/receiveHeader") |
33 | 34 | @Slf4j |
34 | -public class ReceiveController { | |
35 | +public class ReceiveController extends HuahengBaseController { | |
35 | 36 | |
36 | 37 | @Resource |
37 | 38 | private IReceiptDetailService receiptDetailService; |
... | ... | @@ -80,7 +81,15 @@ public class ReceiveController { |
80 | 81 | @ResponseBody |
81 | 82 | public Result receiving(@RequestBody List<Receive> receiveList, HttpServletRequest req) { |
82 | 83 | String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); |
83 | - return receiveService.receiving(receiveList, warehouseCode); | |
84 | + String lockKey = warehouseCode; | |
85 | + Result result = handleMultiProcess("receiving", lockKey, new MultiProcessListener() { | |
86 | + @Override | |
87 | + public Result<?> doProcess() { | |
88 | + Result result = receiveService.receiving(receiveList, warehouseCode); | |
89 | + return result; | |
90 | + } | |
91 | + }); | |
92 | + return result; | |
84 | 93 | } |
85 | 94 | |
86 | 95 | /** |
... | ... | @@ -93,7 +102,15 @@ public class ReceiveController { |
93 | 102 | @ResponseBody |
94 | 103 | public Result<TaskHeader> receivingAndCreateTask(@RequestBody List<Receive> receiveList, HttpServletRequest req) { |
95 | 104 | String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); |
96 | - return receiveService.receivingAndCreateTask(receiveList, warehouseCode); | |
105 | + String lockKey = warehouseCode; | |
106 | + Result result = handleMultiProcess("receivingAndCreateTask", lockKey, new MultiProcessListener() { | |
107 | + @Override | |
108 | + public Result<?> doProcess() { | |
109 | + Result result = receiveService.receivingAndCreateTask(receiveList, warehouseCode); | |
110 | + return result; | |
111 | + } | |
112 | + }); | |
113 | + return result; | |
97 | 114 | } |
98 | 115 | |
99 | 116 | } |
... | ... |
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; |
9 | 9 | import org.jeecgframework.poi.excel.annotation.Excel; |
10 | 10 | |
11 | 11 | import com.baomidou.mybatisplus.annotation.IdType; |
12 | -import com.baomidou.mybatisplus.annotation.TableField; | |
13 | 12 | import com.baomidou.mybatisplus.annotation.TableId; |
14 | 13 | import com.baomidou.mybatisplus.annotation.TableName; |
15 | 14 | |
... | ... | @@ -116,7 +115,7 @@ public class TaskHeader implements Serializable { |
116 | 115 | @ApiModelProperty(value = "目标出入口") |
117 | 116 | private String toPortCode; |
118 | 117 | @ApiModelProperty(value = "AGV关联任务ID") |
119 | - private int agvTaskId; | |
118 | + private Integer agvTaskId; | |
120 | 119 | @ApiModelProperty(value = "生成agv任务") |
121 | 120 | private Integer sendAgv; |
122 | 121 | @ApiModelProperty(value = "回传MES信息") |
... | ... |
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> { |
295 | 295 | * @return |
296 | 296 | */ |
297 | 297 | Result cancelShipmentTask(TaskHeader taskHeader); |
298 | + | |
299 | + /** | |
300 | + * 更新状态 | |
301 | + * @param status | |
302 | + * @param id | |
303 | + * @return | |
304 | + */ | |
305 | + boolean updateStatusById(int status, int id); | |
306 | + | |
307 | + /** | |
308 | + * 合并库存 | |
309 | + * @param taskHeader | |
310 | + * @return | |
311 | + */ | |
312 | + boolean combineInventoryDetail(TaskHeader taskHeader); | |
298 | 313 | } |
... | ... |
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 |
33 | 33 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; |
34 | 34 | import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; |
35 | 35 | import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService; |
36 | -import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; | |
37 | 36 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; |
38 | 37 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; |
39 | 38 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; |
... | ... | @@ -73,6 +72,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
73 | 72 | |
74 | 73 | import cn.monitor4all.logRecord.annotation.OperationLog; |
75 | 74 | import cn.monitor4all.logRecord.context.LogRecordContext; |
75 | +import lombok.extern.slf4j.Slf4j; | |
76 | 76 | |
77 | 77 | /** |
78 | 78 | * @Description: 任务表 |
... | ... | @@ -80,6 +80,7 @@ import cn.monitor4all.logRecord.context.LogRecordContext; |
80 | 80 | * @Date: 2022-11-10 |
81 | 81 | * @Version: V1.0 |
82 | 82 | */ |
83 | +@Slf4j | |
83 | 84 | @Service |
84 | 85 | public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHeader> implements ITaskHeaderService { |
85 | 86 | |
... | ... | @@ -1092,8 +1093,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1092 | 1093 | recordReturnValue = true) |
1093 | 1094 | public Result completeReceiptTask(TaskHeader taskHeader) { |
1094 | 1095 | if (taskHeader == null) { |
1095 | - return Result.error("任务未找到,执行中止"); | |
1096 | + return Result.error("入库任务未找到,执行中止"); | |
1096 | 1097 | } |
1098 | + log.info("开始完成入库任务, 任务号" + taskHeader.getId()); | |
1097 | 1099 | String warehouseCode = taskHeader.getWarehouseCode(); |
1098 | 1100 | String fromLocationCode = taskHeader.getFromLocationCode(); |
1099 | 1101 | String toLocationCode = taskHeader.getToLocationCode(); |
... | ... | @@ -1103,27 +1105,33 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1103 | 1105 | List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(taskHeader.getId()); |
1104 | 1106 | boolean success = false; |
1105 | 1107 | if (taskHeader.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { |
1106 | - return Result.ok("任务(" + taskHeader.getId() + ")任务已经是完成的!"); | |
1108 | + return Result.ok("入库任务(" + taskHeader.getId() + ")已经是完成的!"); | |
1107 | 1109 | } |
1108 | 1110 | if (taskDetailList.isEmpty()) { |
1109 | - throw new JeecgBootException("任务明细为空"); | |
1111 | + throw new JeecgBootException("入库任务明细为空"); | |
1110 | 1112 | } |
1111 | 1113 | Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode); |
1112 | 1114 | if (toLocation == null) { |
1113 | - throw new JeecgBootException("完成任务时,没有找到目的库位"); | |
1115 | + throw new JeecgBootException("完成入库任务时,没有找到目的库位"); | |
1114 | 1116 | } |
1115 | 1117 | InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode); |
1116 | 1118 | if (inventoryHeader != null) { |
1117 | 1119 | if (taskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) { |
1118 | - inventoryHeader.setLocationCode(toLocationCode); | |
1119 | - inventoryHeader.setZoneCode(zoneCode); | |
1120 | - inventoryHeaderService.updateById(inventoryHeader); | |
1120 | + if (!inventoryHeaderService.updateInventoryLocationAndZoneById(toLocationCode, zoneCode, inventoryHeader.getId())) { | |
1121 | + throw new JeecgBootException("完成入库任务时,没有找到目的库位"); | |
1122 | + } | |
1121 | 1123 | List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByInventoryHeaderId(inventoryHeader.getId()); |
1122 | - for (InventoryDetail inventoryDetail : inventoryDetailList) { | |
1123 | - inventoryDetail.setLocationCode(toLocationCode); | |
1124 | - inventoryDetail.setZoneCode(zoneCode); | |
1125 | - if (!inventoryDetailService.updateById(inventoryDetail)) { | |
1126 | - throw new ServiceException("更新库存详情失败"); | |
1124 | + if (inventoryDetailList.size() > 0) { | |
1125 | + List<InventoryDetail> inventoryDetailList1 = new ArrayList<>(); | |
1126 | + for (InventoryDetail inventoryDetail : inventoryDetailList) { | |
1127 | + InventoryDetail inventoryDetail1 = new InventoryDetail(); | |
1128 | + inventoryDetail1.setId(inventoryDetail.getId()); | |
1129 | + inventoryDetail1.setLocationCode(toLocationCode); | |
1130 | + inventoryDetail1.setZoneCode(zoneCode); | |
1131 | + inventoryDetailList1.add(inventoryDetail1); | |
1132 | + } | |
1133 | + if (!inventoryDetailService.updateBatchById(inventoryDetailList1)) { | |
1134 | + throw new ServiceException("完成入库任务时,更新库存详情失败"); | |
1127 | 1135 | } |
1128 | 1136 | } |
1129 | 1137 | } |
... | ... | @@ -1155,12 +1163,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1155 | 1163 | taskDetail.setReceiptCode(receiptDetail.getReceiptCode()); |
1156 | 1164 | BigDecimal taskQty = receiptDetail.getTaskQty(); |
1157 | 1165 | BigDecimal qty = receiptDetail.getQty(); |
1166 | + int receiptId = receiptDetail.getReceiptId(); | |
1167 | + ReceiptDetail receiptDetail1 = new ReceiptDetail(); | |
1168 | + receiptDetail1.setId(receiptDetail.getId()); | |
1169 | + receiptDetail1.setReceiptId(receiptId); | |
1158 | 1170 | if (taskQty.compareTo(qty) >= 0) { |
1159 | - receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); | |
1171 | + receiptDetail1.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); | |
1160 | 1172 | } else { |
1161 | - receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_SHELF); | |
1173 | + receiptDetail1.setStatus(QuantityConstant.RECEIPT_HEADER_SHELF); | |
1162 | 1174 | } |
1163 | - receiptDetaiList.add(receiptDetail); | |
1175 | + receiptDetaiList.add(receiptDetail1); | |
1164 | 1176 | |
1165 | 1177 | BigDecimal receiptQty = taskDetail.getQty(); |
1166 | 1178 | InventoryDetail inventoryDetail = new InventoryDetail(); |
... | ... | @@ -1229,8 +1241,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1229 | 1241 | throw new JeecgBootException("完成入库任务时,更新库位失败"); |
1230 | 1242 | } |
1231 | 1243 | |
1232 | - taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | |
1233 | - success = taskHeaderService.updateById(taskHeader); | |
1244 | + success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId()); | |
1234 | 1245 | if (!success) { |
1235 | 1246 | throw new JeecgBootException("完成入库任务时,更新任务失败"); |
1236 | 1247 | } |
... | ... | @@ -1239,7 +1250,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1239 | 1250 | if (!success) { |
1240 | 1251 | throw new JeecgBootException("完成入库任务时,更新容器失败"); |
1241 | 1252 | } |
1242 | - if (!combineInventoryDetail(taskHeader)) { | |
1253 | + if (!taskHeaderService.combineInventoryDetail(taskHeader)) { | |
1243 | 1254 | throw new JeecgBootException("合并入库库存失败"); |
1244 | 1255 | } |
1245 | 1256 | if (!receiptDetailService.updateBatchById(receiptDetaiList)) { |
... | ... | @@ -1261,6 +1272,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1261 | 1272 | LogRecordContext.putVariable("extraJsonString1", JSON.toJSONString(taskDetailList)); |
1262 | 1273 | LogRecordContext.putVariable("receiptDetaiList", receiptDetaiList); |
1263 | 1274 | LogRecordContext.putVariable("extraJsonString2", JSON.toJSONString(receiptDetaiList)); |
1275 | + log.info("完成入库任务, 任务号" + taskHeader.getId()); | |
1264 | 1276 | return Result.ok("完成入库任务"); |
1265 | 1277 | } |
1266 | 1278 | |
... | ... | @@ -1287,7 +1299,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1287 | 1299 | String fromLocationCode = taskHeader.getFromLocationCode(); |
1288 | 1300 | String toLocationCode = taskHeader.getToLocationCode(); |
1289 | 1301 | String containerCode = taskHeader.getContainerCode(); |
1290 | -// String zoneCode = taskHeader.getZoneCode(); | |
1302 | + String zoneCode = taskHeader.getZoneCode(); | |
1291 | 1303 | int taskType = taskHeader.getTaskType(); |
1292 | 1304 | List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(taskHeader.getId()); |
1293 | 1305 | boolean success = false; |
... | ... | @@ -1468,6 +1480,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1468 | 1480 | return Result.ok("完成出库任务"); |
1469 | 1481 | } |
1470 | 1482 | |
1483 | + @Override | |
1471 | 1484 | @Transactional(rollbackFor = Exception.class) |
1472 | 1485 | public boolean combineInventoryDetail(TaskHeader taskHeader) { |
1473 | 1486 | boolean success = false; |
... | ... | @@ -1488,9 +1501,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1488 | 1501 | InventoryDetail inventoryDetail2 = inventoryDetailList.get(j); |
1489 | 1502 | if (inventoryDetail1.getMaterialCode().equals(inventoryDetail2.getMaterialCode()) && inventoryDetail1.getBatch().equals(inventoryDetail2.getBatch()) |
1490 | 1503 | && inventoryDetail1.getLot().equals(inventoryDetail2.getLot()) && inventoryDetail1.getProject().equals(inventoryDetail2.getProject())) { |
1504 | + // 属性一样的库存,相加合并。 | |
1491 | 1505 | BigDecimal totalQty = inventoryDetail1.getQty().add(inventoryDetail2.getQty()); |
1492 | - inventoryDetail1.setQty(totalQty); | |
1493 | - success = inventoryDetailService.updateById(inventoryDetail1); | |
1506 | + InventoryDetail inventoryDetail = new InventoryDetail(); | |
1507 | + inventoryDetail.setId(inventoryDetail1.getId()); | |
1508 | + inventoryDetail.setQty(totalQty); | |
1509 | + success = inventoryDetailService.updateById(inventoryDetail); | |
1494 | 1510 | if (!success) { |
1495 | 1511 | throw new JeecgBootException("合并库存时, 更新库存详情失败:" + inventoryDetail1.getId()); |
1496 | 1512 | } |
... | ... | @@ -1512,6 +1528,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1512 | 1528 | if (container == null) { |
1513 | 1529 | throw new JeecgBootException("合并库存时, 没有找到容器, 容器编码为" + containerCode); |
1514 | 1530 | } |
1531 | + int inventoryId = inventoryHeader.getId(); | |
1532 | + inventoryHeader = new InventoryHeader(); | |
1533 | + inventoryHeader.setId(inventoryId); | |
1515 | 1534 | inventoryHeader.setTotalQty(totalQty); |
1516 | 1535 | inventoryHeader.setTotalLines(totalLines); |
1517 | 1536 | inventoryHeader.setContainerStatus(container.getStatus()); |
... | ... | @@ -2206,25 +2225,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
2206 | 2225 | @Override |
2207 | 2226 | @Transactional(rollbackFor = Exception.class) |
2208 | 2227 | public Result cancelReceiptTask(TaskHeader taskHeader) { |
2228 | + log.info("开始取消入库任务"); | |
2209 | 2229 | boolean success = receiptContainerHeaderService.cancelReceiptTask(taskHeader); |
2210 | 2230 | if (!success) { |
2211 | 2231 | throw new JeecgBootException("取消入库任务时, 更新组盘头状态失败"); |
2212 | 2232 | } |
2213 | - String containerCode = taskHeader.getContainerCode(); | |
2214 | - String warehouseCode = taskHeader.getWarehouseCode(); | |
2215 | - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getUnCompleteReceiptContainerByCode(containerCode, warehouseCode); | |
2216 | - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION); | |
2217 | - if (StringUtils.isEmpty(value)) { | |
2218 | - throw new JeecgBootException("取消入库任务时, 没有获取到配置属性"); | |
2219 | - } | |
2220 | - int taskLocationRule = Integer.parseInt(value); | |
2221 | - if (taskLocationRule == QuantityConstant.RULE_TASK_NOT_LOCATION) { | |
2222 | - receiptContainerHeader.setToLocationCode(QuantityConstant.EMPTY_STRING); | |
2223 | - success = receiptContainerHeaderService.updateById(receiptContainerHeader); | |
2224 | - if (!success) { | |
2225 | - throw new JeecgBootException("取消入库任务时, 更新组盘头状态失败!!"); | |
2226 | - } | |
2227 | - } | |
2233 | + log.info("完成取消入库任务"); | |
2228 | 2234 | return Result.ok("取消入库任务成功"); |
2229 | 2235 | } |
2230 | 2236 | |
... | ... | @@ -2243,6 +2249,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
2243 | 2249 | return Result.ok("取消出库任务成功"); |
2244 | 2250 | } |
2245 | 2251 | |
2252 | + @Override | |
2253 | + public boolean updateStatusById(int status, int id) { | |
2254 | + TaskHeader taskHeader = new TaskHeader(); | |
2255 | + taskHeader.setId(id); | |
2256 | + taskHeader.setStatus(status); | |
2257 | + boolean success = taskHeaderService.updateById(taskHeader); | |
2258 | + return success; | |
2259 | + } | |
2260 | + | |
2246 | 2261 | /** |
2247 | 2262 | * 取消任务,恢复容器和库位状态 |
2248 | 2263 | * @param taskHeader |
... | ... | @@ -2277,6 +2292,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
2277 | 2292 | throw new JeecgBootException("取消任务时, 没有找到容器"); |
2278 | 2293 | } |
2279 | 2294 | if (inventoryHeader != null) { |
2295 | + Integer inventoryHeaderId = inventoryHeader.getId(); | |
2296 | + inventoryHeader = new InventoryHeader(); | |
2297 | + inventoryHeader.setId(inventoryHeaderId); | |
2280 | 2298 | inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY); |
2281 | 2299 | success = inventoryHeaderService.updateById(inventoryHeader); |
2282 | 2300 | if (!success) { |
... | ... |