Commit 059c12ea687c15264f5f490ea3ddf08b2b09d34c
Merge remote-tracking branch 'origin/develop' into develop
Showing
17 changed files
with
319 additions
and
218 deletions
ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue
... | ... | @@ -142,11 +142,11 @@ |
142 | 142 | |
143 | 143 | <span slot="action" slot-scope="text, record"> |
144 | 144 | <a v-if="record.status == 1" v-has="'taskHeader:executeTask'" @click="executeTask(record)">执行<a-divider type="vertical"/></a> |
145 | - <a v-if="record.isEmptyOut == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handleEmptyOutTask(record)">修复空出数据 | |
145 | + <a v-if="record.isEmptyOut == 1 && record.exceptionState == 1" v-has="'taskHeader:handleEmptyOutTask'" @click="handleEmptyOutTask(record)">修复空出数据 | |
146 | 146 | <a-divider type="vertical"/></a> |
147 | - <a v-if="record.isPickupError == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handlePickupErrorTask(record)">修复取货错数据 | |
147 | + <a v-if="record.isPickupError == 1 && record.exceptionState == 1" v-has="'taskHeader:handlePickupErrorTask'" @click="handlePickupErrorTask(record)">修复取货错数据 | |
148 | 148 | <a-divider type="vertical"/></a> |
149 | - <a v-if="record.isDoubleIn == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handleDoubleInTask(record)">修复重入数据 | |
149 | + <a v-if="record.isDoubleIn == 1 && record.exceptionState == 1" v-has="'taskHeader:handleDoubleInTask'" @click="handleDoubleInTask(record)">修复重入数据 | |
150 | 150 | <a-divider type="vertical"/></a> |
151 | 151 | <a v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" @click="cancelTask(record)">取消</a> |
152 | 152 | </span> |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java
... | ... | @@ -10,6 +10,7 @@ import java.util.stream.Collectors; |
10 | 10 | import javax.annotation.Resource; |
11 | 11 | |
12 | 12 | import org.jeecg.common.api.vo.Result; |
13 | +import org.jeecg.common.exception.JeecgBootException; | |
13 | 14 | import org.jeecg.modules.wms.api.erp.entity.*; |
14 | 15 | import org.jeecg.modules.wms.api.erp.service.IErpService; |
15 | 16 | import org.jeecg.modules.wms.config.address.service.IAddressService; |
... | ... | @@ -38,7 +39,6 @@ import org.springframework.stereotype.Service; |
38 | 39 | import org.springframework.transaction.annotation.Transactional; |
39 | 40 | |
40 | 41 | import com.alibaba.fastjson.JSON; |
41 | -import org.jeecg.common.exception.JeecgBootException; | |
42 | 42 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
43 | 43 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
44 | 44 | |
... | ... | @@ -399,6 +399,7 @@ public class ErpServiceImpl implements IErpService { |
399 | 399 | } |
400 | 400 | |
401 | 401 | @Override |
402 | + @Transactional(rollbackFor = Exception.class) | |
402 | 403 | public Result backReceipt(ReceiptHeader receiptHeader) { |
403 | 404 | if (receiptHeader == null) { |
404 | 405 | return Result.error("回传入库单, 入库单为空!!"); |
... | ... | @@ -436,6 +437,7 @@ public class ErpServiceImpl implements IErpService { |
436 | 437 | } |
437 | 438 | |
438 | 439 | @Override |
440 | + @Transactional(rollbackFor = Exception.class) | |
439 | 441 | public Result backShipment(ShipmentHeader shipmentHeader) { |
440 | 442 | if (shipmentHeader == null) { |
441 | 443 | return Result.error("回传出库单, 出库单为空!!"); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/service/IMobileService.java
... | ... | @@ -8,5 +8,6 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; |
8 | 8 | public interface IMobileService { |
9 | 9 | |
10 | 10 | Result<TaskHeader> callBox(CallBoxBean bean, String warehouseCode); |
11 | + | |
11 | 12 | Result<TaskHeader> quickReceipt(QuickReceiptBean bean, String warehouseCode); |
12 | 13 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/service/impl/MobileService.java
1 | 1 | package org.jeecg.modules.wms.api.mobile.service.impl; |
2 | 2 | |
3 | +import java.util.ArrayList; | |
4 | +import java.util.List; | |
5 | + | |
3 | 6 | import javax.annotation.Resource; |
4 | 7 | |
5 | 8 | import org.apache.commons.lang3.StringUtils; |
6 | 9 | import org.jeecg.common.api.vo.Result; |
10 | +import org.jeecg.common.exception.JeecgBootException; | |
7 | 11 | import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean; |
8 | 12 | import org.jeecg.modules.wms.api.mobile.entity.QuickReceiptBean; |
9 | 13 | import org.jeecg.modules.wms.api.mobile.service.IMobileService; |
10 | 14 | import org.jeecg.modules.wms.config.container.entity.Container; |
11 | 15 | import org.jeecg.modules.wms.config.container.service.IContainerService; |
12 | -import org.jeecg.modules.wms.config.location.entity.Location; | |
13 | 16 | import org.jeecg.modules.wms.config.location.service.ILocationService; |
17 | +import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; | |
14 | 18 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; |
15 | 19 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; |
16 | 20 | import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService; |
... | ... | @@ -24,11 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired; |
24 | 28 | import org.springframework.stereotype.Service; |
25 | 29 | import org.springframework.transaction.annotation.Transactional; |
26 | 30 | |
27 | -import org.jeecg.common.exception.JeecgBootException; | |
28 | - | |
29 | -import java.util.ArrayList; | |
30 | -import java.util.List; | |
31 | - | |
32 | 31 | /** |
33 | 32 | */ |
34 | 33 | @Service |
... | ... | @@ -51,56 +50,47 @@ public class MobileService implements IMobileService { |
51 | 50 | |
52 | 51 | @Resource |
53 | 52 | private IReceiveService receiveService; |
53 | + @Resource | |
54 | + private IParameterConfigurationService parameterConfigurationService; | |
54 | 55 | |
55 | 56 | @Override |
56 | 57 | @Transactional(rollbackFor = Exception.class) |
57 | 58 | public Result<TaskHeader> callBox(CallBoxBean bean, String warehouseCode) { |
59 | + String containerCode = bean.getContainerCode(); | |
58 | 60 | if (StringUtils.isEmpty(bean.getContainerCode())) { |
59 | - return Result.error("托盘号containerCode不能为空"); | |
61 | + return Result.error("呼叫料盒,托盘号containerCode不能为空"); | |
60 | 62 | } |
61 | 63 | |
62 | 64 | if (StringUtils.isEmpty(bean.getLocationCode())) { |
63 | - return Result.error("库位locationCode不能为空"); | |
65 | + return Result.error("呼叫料盒, 库位locationCode不能为空"); | |
64 | 66 | } |
65 | 67 | |
66 | 68 | if (StringUtils.isEmpty(bean.getCompanyCode())) { |
67 | - return Result.error("货主companyCode不能为空"); | |
69 | + return Result.error("呼叫料盒, 货主companyCode不能为空"); | |
68 | 70 | } |
69 | 71 | |
70 | - if(StringUtils.isEmpty(bean.getPort())){ | |
71 | - return Result.error("出库口不能为空"); | |
72 | + if (StringUtils.isEmpty(bean.getPort())) { | |
73 | + return Result.error("呼叫料盒, 出库口不能为空"); | |
72 | 74 | } |
73 | - | |
74 | - Container container = containerService.getContainerByCode(bean.getContainerCode(), warehouseCode); | |
75 | + Container container = containerService.getContainerByCode(containerCode, warehouseCode); | |
75 | 76 | if (container == null) { |
76 | - return Result.error(bean.getContainerCode() + " " + warehouseCode + "容器不存在"); | |
77 | + return Result.error("呼叫料盒,容器为空"); | |
77 | 78 | } |
78 | - | |
79 | - if (StringUtils.isEmpty(container.getLocationCode())) { | |
80 | - return Result.error(bean.getContainerCode() + "容器不在库位上"); | |
79 | + String fromLocationCode = container.getLocationCode(); | |
80 | + String toLocationCode = QuantityConstant.EMPTY_STRING; | |
81 | + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION); | |
82 | + int taskLocationRule = Integer.parseInt(value); | |
83 | + if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) { | |
84 | + toLocationCode = fromLocationCode; | |
81 | 85 | } |
82 | - | |
83 | - if (!container.getLocationCode().equals(bean.getLocationCode())) { | |
84 | - return Result.error(bean.getContainerCode() + "容器不在库位[" + bean.getLocationCode() + "]上"); | |
85 | - } | |
86 | - | |
87 | - Location loc = locationService.getLocationByCode(bean.getLocationCode(), warehouseCode); | |
88 | - // 校验目标地址 | |
89 | - if (loc == null) { | |
90 | - return Result.error("目标库位不存在"); | |
91 | - } | |
92 | - if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(loc.getStatus())) { | |
93 | - return Result.error("目标库位非空闲"); | |
94 | - } | |
95 | - // 判断托盘是否已经存在任务 | |
96 | - TaskHeader taskHeader = taskHeaderService.getUnCompleteTaskByContainerCode(bean.getContainerCode(), warehouseCode); | |
97 | - if (taskHeader != null) { | |
98 | - return Result.error("容器已存在任务"); | |
86 | + Result result = taskHeaderService.createTaskLockContainerAndLocation(bean.getType(), containerCode, fromLocationCode, toLocationCode, warehouseCode); | |
87 | + if (!result.isSuccess()) { | |
88 | + throw new JeecgBootException(result.getMessage()); | |
99 | 89 | } |
100 | 90 | |
101 | 91 | // 创建主任务 |
102 | - taskHeader = new TaskHeader(); | |
103 | - taskHeader.setWarehouseCode(loc.getWarehouseCode()); | |
92 | + TaskHeader taskHeader = new TaskHeader(); | |
93 | + taskHeader.setWarehouseCode(warehouseCode); | |
104 | 94 | taskHeader.setCompanyCode(bean.getCompanyCode()); |
105 | 95 | taskHeader.setToPortCode(bean.getPort()); |
106 | 96 | if (bean.getType() == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) { |
... | ... | @@ -112,14 +102,12 @@ public class MobileService implements IMobileService { |
112 | 102 | taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_SHIPMENT); |
113 | 103 | taskHeader.setTaskType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT); |
114 | 104 | } |
115 | - taskHeader.setContainerCode(container.getCode()); | |
105 | + taskHeader.setContainerCode(containerCode); | |
116 | 106 | taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); |
117 | - taskHeader.setFromLocationCode(loc.getCode()); | |
118 | - if (taskHeaderService.save(taskHeader)) { | |
119 | - // 锁定库位状态 | |
120 | - locationService.updateStatus(loc.getCode(), QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode); | |
121 | - } else { | |
122 | - throw new JeecgBootException("补充入库主表生成失败!"); | |
107 | + taskHeader.setFromLocationCode(fromLocationCode); | |
108 | + taskHeader.setToLocationCode(toLocationCode); | |
109 | + if (!taskHeaderService.save(taskHeader)) { | |
110 | + throw new JeecgBootException("呼叫料盒, 保存任务失败"); | |
123 | 111 | } |
124 | 112 | |
125 | 113 | return Result.OK("呼叫料盒成功", taskHeader); |
... | ... | @@ -141,7 +129,7 @@ public class MobileService implements IMobileService { |
141 | 129 | return Result.error("收货明细不能为空"); |
142 | 130 | } |
143 | 131 | |
144 | - //创建入库单 | |
132 | + // 创建入库单 | |
145 | 133 | ReceiptHeader receiptHeader = new ReceiptHeader(); |
146 | 134 | receiptHeader.setType(bean.getReceiptType()); |
147 | 135 | receiptHeader.setCompanyCode(bean.getCompanyCode()); |
... | ... | @@ -153,32 +141,32 @@ public class MobileService implements IMobileService { |
153 | 141 | } else { |
154 | 142 | throw new JeecgBootException(rs1.getMessage()); |
155 | 143 | } |
156 | - | |
144 | + List<ReceiptDetail> receiptDetailList = bean.getReceiptDetails(); | |
157 | 145 | List<Receive> receiveList = new ArrayList<>(); |
158 | - for (ReceiptDetail d : bean.getReceiptDetails()) { | |
159 | - d.setReceiptId(receiptHeader.getId()); | |
160 | - Result rs2 = receiptDetailService.saveReceiptDetail(d); | |
161 | - if(!rs2.isSuccess()) { | |
146 | + for (ReceiptDetail receiptDetail : receiptDetailList) { | |
147 | + receiptDetail.setReceiptId(receiptHeader.getId()); | |
148 | + Result rs2 = receiptDetailService.saveReceiptDetail(receiptDetail); | |
149 | + if (!rs2.isSuccess()) { | |
162 | 150 | throw new JeecgBootException(rs2.getMessage()); |
163 | 151 | } |
164 | - Receive v = new Receive(); | |
165 | - v.setId(d.getId()); | |
166 | - v.setQty(d.getQty()); | |
167 | - v.setTaskQty(d.getQty()); | |
168 | - v.setInventoryStatus(d.getInventoryStatus()); | |
169 | - v.setMaterialCode(d.getMaterialCode()); | |
170 | - v.setMaterialName(d.getMaterialName()); | |
171 | - v.setBatch(d.getBatch()); | |
172 | - v.setMaterialSpec(d.getMaterialSpec()); | |
173 | - v.setMaterialUnit(d.getMaterialUnit()); | |
174 | - v.setContainerCode(bean.getContainerCode()); | |
175 | - receiveList.add(v); | |
152 | + Receive receive = new Receive(); | |
153 | + receive.setId(receiptDetail.getId()); | |
154 | + receive.setQty(receiptDetail.getQty()); | |
155 | + receive.setTaskQty(receiptDetail.getQty()); | |
156 | + receive.setInventoryStatus(receiptDetail.getInventoryStatus()); | |
157 | + receive.setMaterialCode(receiptDetail.getMaterialCode()); | |
158 | + receive.setMaterialName(receiptDetail.getMaterialName()); | |
159 | + receive.setBatch(receiptDetail.getBatch()); | |
160 | + receive.setMaterialSpec(receiptDetail.getMaterialSpec()); | |
161 | + receive.setMaterialUnit(receiptDetail.getMaterialUnit()); | |
162 | + receive.setContainerCode(bean.getContainerCode()); | |
163 | + receiveList.add(receive); | |
176 | 164 | } |
177 | 165 | |
178 | 166 | Result<TaskHeader> rs3 = receiveService.receivingAndCreateTask(receiveList, warehouseCode); |
179 | - if(rs3.isSuccess()) { | |
167 | + if (rs3.isSuccess()) { | |
180 | 168 | return rs3; |
181 | - }else{ | |
169 | + } else { | |
182 | 170 | throw new JeecgBootException(rs3.getMessage()); |
183 | 171 | } |
184 | 172 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/controller/WcsController.java
1 | 1 | package org.jeecg.modules.wms.api.wcs.controller; |
2 | 2 | |
3 | -import java.net.SocketException; | |
4 | - | |
5 | 3 | import javax.annotation.Resource; |
6 | 4 | import javax.servlet.http.HttpServletRequest; |
7 | 5 | |
... | ... | @@ -40,7 +38,7 @@ public class WcsController extends HuahengBaseController { |
40 | 38 | @ResponseBody |
41 | 39 | @ApiOperation("仓位分配") |
42 | 40 | @ApiLogger(apiName = "仓位分配", from = "WCS") |
43 | - @AccessLimit(seconds = 5, maxCount = 5) | |
41 | + @AccessLimit(seconds = 5, maxCount = 10) | |
44 | 42 | public Result warecellAllocation(@RequestBody WarecellDomain warecellDomain, HttpServletRequest req) { |
45 | 43 | String warehouseCode = warecellDomain.getWarehouseCode(); |
46 | 44 | String taskNo = warecellDomain.getTaskNo(); |
... | ... | @@ -51,7 +49,7 @@ public class WcsController extends HuahengBaseController { |
51 | 49 | if (StringUtils.isEmpty(taskNo)) { |
52 | 50 | return Result.error("仓位分配, 任务号为空"); |
53 | 51 | } |
54 | - if (StringUtils.isEmpty(warecellDomain.getZoneCode())) { | |
52 | + if (StringUtils.isEmpty(zoneCode)) { | |
55 | 53 | return Result.error("仓位分配, 目的区域为空"); |
56 | 54 | } |
57 | 55 | if (StringUtils.isEmpty(warecellDomain.getHeight())) { |
... | ... | @@ -146,7 +144,7 @@ public class WcsController extends HuahengBaseController { |
146 | 144 | @ResponseBody |
147 | 145 | @ApiOperation("WCS任务完成") |
148 | 146 | @ApiLogger(apiName = "WCS任务完成", from = "WCS") |
149 | - @AccessLimit(seconds = 5, maxCount = 5) | |
147 | + @AccessLimit(seconds = 5, maxCount = 10) | |
150 | 148 | public Result completeTaskByWMS(@RequestBody TaskEntity taskEntity) { |
151 | 149 | String taskNo = taskEntity.getTaskNo(); |
152 | 150 | String lockKey = taskNo; |
... | ... | @@ -182,7 +180,7 @@ public class WcsController extends HuahengBaseController { |
182 | 180 | @ResponseBody |
183 | 181 | @ApiOperation("到达拣选台") |
184 | 182 | @ApiLogger(apiName = "到达拣选台", from = "WCS") |
185 | - @AccessLimit(seconds = 5, maxCount = 5) | |
183 | + @AccessLimit(seconds = 5, maxCount = 10) | |
186 | 184 | public Result arrivedNotice(@RequestBody ArriveEntity arriveEntity) { |
187 | 185 | String taskNo = arriveEntity.getTaskNo(); |
188 | 186 | String port = arriveEntity.getPort(); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
... | ... | @@ -25,7 +25,6 @@ import org.jeecg.utils.StringUtils; |
25 | 25 | import org.jeecg.utils.constant.QuantityConstant; |
26 | 26 | import org.springframework.stereotype.Service; |
27 | 27 | import org.springframework.transaction.annotation.Transactional; |
28 | -import org.springframework.util.StopWatch; | |
29 | 28 | |
30 | 29 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
31 | 30 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
... | ... | @@ -97,7 +96,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService |
97 | 96 | roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList()); |
98 | 97 | } |
99 | 98 | String value = parameterConfigurationService.getValueByCode(QuantityConstant.DOUBLE_FORK_RESERVE_LOCATION); |
100 | - int reserveNumber = 10; | |
99 | + int reserveNumber = 4; | |
101 | 100 | if (StringUtils.isNotEmpty(value)) { |
102 | 101 | reserveNumber = Integer.parseInt(value); |
103 | 102 | } |
... | ... | @@ -106,7 +105,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService |
106 | 105 | if (StringUtils.isNotEmpty(value)) { |
107 | 106 | searchNumber = Integer.parseInt(value); |
108 | 107 | } |
109 | - String lastString = "ORDER BY layer asc, id asc limit " + searchNumber; | |
108 | + String lastString = "ORDER BY high asc, layer asc, id asc limit " + searchNumber; | |
110 | 109 | List<Integer> removeRoadWays = new ArrayList<>(); |
111 | 110 | // 寻找可用巷道,空闲的空库位低于设定值,那么这个巷道就不能用来分配库位 |
112 | 111 | for (Integer roadWay : roadWays) { |
... | ... | @@ -176,12 +175,13 @@ public class LocationAllocationServiceImpl implements LocationAllocationService |
176 | 175 | List<Location> locationList = locationService.getLocationListByZoneCode(zoneCode, warehouseCode); |
177 | 176 | roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList()); |
178 | 177 | } |
178 | + String lastString = "ORDER BY high asc, layer asc, id asc limit 1"; | |
179 | 179 | Integer roadWay = locationAllocationService.getRoadWay(roadWays, warehouseCode); |
180 | 180 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); |
181 | 181 | locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) |
182 | 182 | .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) |
183 | 183 | .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).in(Location::getLocationTypeCode, locationTypeCodeList) |
184 | - .eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last("ORDER BY layer asc, id asc limit 1"); | |
184 | + .eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last(lastString); | |
185 | 185 | // 单伸位逻辑简单,只需要找到一个空闲库位 |
186 | 186 | Location location = locationService.getOne(locationLambdaQueryWrapper); |
187 | 187 | if (location == null) { |
... | ... |
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.api.mobile.entity.CallBoxBean; | |
5 | +import org.jeecg.modules.wms.api.mobile.entity.QuickReceiptBean; | |
4 | 6 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; |
7 | +import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; | |
5 | 8 | import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel; |
6 | 9 | import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader; |
7 | 10 | import org.jeecg.modules.wms.shipment.shipmentHeader.entity.CombinationParam; |
11 | +import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; | |
8 | 12 | import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; |
9 | 13 | |
10 | 14 | /** |
... | ... | @@ -25,4 +29,12 @@ public interface IHuahengMultiHandlerService { |
25 | 29 | Result autoCombination(String shipmentCode, String warehouseCode); |
26 | 30 | |
27 | 31 | Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber); |
32 | + | |
33 | + Result callBox(CallBoxBean bean, String warehouseCode); | |
34 | + | |
35 | + Result quickReceipt(QuickReceiptBean bean, String warehouseCode); | |
36 | + | |
37 | + Result backReceipt(ReceiptHeader receiptHeader); | |
38 | + | |
39 | + Result backShipment(ShipmentHeader shipmentHeader); | |
28 | 40 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
... | ... | @@ -5,18 +5,24 @@ import java.math.BigDecimal; |
5 | 5 | import javax.annotation.Resource; |
6 | 6 | |
7 | 7 | import org.jeecg.common.api.vo.Result; |
8 | +import org.jeecg.modules.wms.api.erp.service.IErpService; | |
9 | +import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean; | |
10 | +import org.jeecg.modules.wms.api.mobile.entity.QuickReceiptBean; | |
11 | +import org.jeecg.modules.wms.api.mobile.service.IMobileService; | |
8 | 12 | import org.jeecg.modules.wms.framework.controller.HuahengBaseController; |
9 | 13 | import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; |
10 | 14 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
11 | 15 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; |
12 | 16 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader; |
13 | 17 | import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService; |
18 | +import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; | |
14 | 19 | import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel; |
15 | 20 | import org.jeecg.modules.wms.shipment.shipmentCombination.service.IShipmentCombinationService; |
16 | 21 | import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader; |
17 | 22 | import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService; |
18 | 23 | import org.jeecg.modules.wms.shipment.shipmentHeader.entity.CombinationParam; |
19 | 24 | import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail; |
25 | +import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; | |
20 | 26 | import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService; |
21 | 27 | import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; |
22 | 28 | import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; |
... | ... | @@ -41,6 +47,10 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem |
41 | 47 | private IInventoryDetailService inventoryDetailService; |
42 | 48 | @Resource |
43 | 49 | private IShipmentContainerHeaderService shipmentContainerHeaderService; |
50 | + @Resource | |
51 | + private IMobileService mobileService; | |
52 | + @Resource | |
53 | + private IErpService erpService; | |
44 | 54 | |
45 | 55 | @Override |
46 | 56 | @Transactional(rollbackFor = Exception.class) |
... | ... | @@ -119,6 +129,7 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem |
119 | 129 | } |
120 | 130 | |
121 | 131 | @Override |
132 | + @Transactional(rollbackFor = Exception.class) | |
122 | 133 | public Result autoCombination(String shipmentCode, String warehouseCode) { |
123 | 134 | Result result = handleMultiProcess("combination", new MultiProcessListener() { |
124 | 135 | @Override |
... | ... | @@ -131,6 +142,7 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem |
131 | 142 | } |
132 | 143 | |
133 | 144 | @Override |
145 | + @Transactional(rollbackFor = Exception.class) | |
134 | 146 | public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber) { |
135 | 147 | Result result = handleMultiProcess("createShipmentTask", new MultiProcessListener() { |
136 | 148 | @Override |
... | ... | @@ -142,4 +154,58 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem |
142 | 154 | return result; |
143 | 155 | } |
144 | 156 | |
157 | + @Override | |
158 | + @Transactional(rollbackFor = Exception.class) | |
159 | + public Result callBox(CallBoxBean bean, String warehouseCode) { | |
160 | + String lockKey = warehouseCode; | |
161 | + Result result = handleMultiProcess("callBox", lockKey, new MultiProcessListener() { | |
162 | + @Override | |
163 | + public Result<?> doProcess() { | |
164 | + Result result = mobileService.callBox(bean, warehouseCode); | |
165 | + return result; | |
166 | + } | |
167 | + }); | |
168 | + return result; | |
169 | + } | |
170 | + | |
171 | + @Override | |
172 | + @Transactional(rollbackFor = Exception.class) | |
173 | + public Result quickReceipt(QuickReceiptBean bean, String warehouseCode) { | |
174 | + String lockKey = warehouseCode; | |
175 | + Result result = handleMultiProcess("quickReceipt", lockKey, new MultiProcessListener() { | |
176 | + @Override | |
177 | + public Result<?> doProcess() { | |
178 | + Result result = mobileService.quickReceipt(bean, warehouseCode); | |
179 | + return result; | |
180 | + } | |
181 | + }); | |
182 | + return result; | |
183 | + } | |
184 | + | |
185 | + @Override | |
186 | + @Transactional(rollbackFor = Exception.class) | |
187 | + public Result backReceipt(ReceiptHeader receiptHeader) { | |
188 | + Result result = handleMultiProcess("backReceipt", new MultiProcessListener() { | |
189 | + @Override | |
190 | + public Result<?> doProcess() { | |
191 | + Result result = erpService.backReceipt(receiptHeader); | |
192 | + return result; | |
193 | + } | |
194 | + }); | |
195 | + return result; | |
196 | + } | |
197 | + | |
198 | + @Override | |
199 | + @Transactional(rollbackFor = Exception.class) | |
200 | + public Result backShipment(ShipmentHeader shipmentHeader) { | |
201 | + Result result = handleMultiProcess("backShipment", new MultiProcessListener() { | |
202 | + @Override | |
203 | + public Result<?> doProcess() { | |
204 | + Result result = erpService.backShipment(shipmentHeader); | |
205 | + return result; | |
206 | + } | |
207 | + }); | |
208 | + return result; | |
209 | + } | |
210 | + | |
145 | 211 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/ErpTask.java
1 | 1 | package org.jeecg.modules.wms.monitor.job; |
2 | 2 | |
3 | -import java.util.HashMap; | |
4 | 3 | import java.util.List; |
5 | -import java.util.Map; | |
6 | 4 | |
7 | 5 | import javax.annotation.Resource; |
8 | 6 | |
9 | -import org.apache.commons.collections.MapUtils; | |
10 | 7 | import org.jeecg.modules.wms.api.erp.service.IErpService; |
8 | +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; | |
11 | 9 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; |
12 | 10 | import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService; |
13 | 11 | import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; |
14 | 12 | import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService; |
15 | 13 | import org.jeecg.utils.constant.QuantityConstant; |
16 | -import org.quartz.DisallowConcurrentExecution; | |
17 | -import org.quartz.Job; | |
18 | -import org.quartz.JobExecutionContext; | |
19 | -import org.quartz.JobExecutionException; | |
20 | -import org.quartz.PersistJobDataAfterExecution; | |
14 | +import org.quartz.*; | |
21 | 15 | |
22 | 16 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
23 | 17 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
... | ... | @@ -42,6 +36,8 @@ public class ErpTask implements Job { |
42 | 36 | |
43 | 37 | @Resource |
44 | 38 | private IErpService erpService; |
39 | + @Resource | |
40 | + private IHuahengMultiHandlerService huahengMultiHandlerService; | |
45 | 41 | |
46 | 42 | @Override |
47 | 43 | public void execute(JobExecutionContext context) throws JobExecutionException { |
... | ... | @@ -51,7 +47,7 @@ public class ErpTask implements Job { |
51 | 47 | List<ReceiptHeader> receiptHeaderList = receiptHeaderService.list(receiptHeaderLambdaQueryWrapper); |
52 | 48 | for (ReceiptHeader receiptHeader : receiptHeaderList) { |
53 | 49 | try { |
54 | - erpService.backReceipt(receiptHeader); | |
50 | + huahengMultiHandlerService.backReceipt(receiptHeader); | |
55 | 51 | } catch (Exception e) { |
56 | 52 | e.printStackTrace(); |
57 | 53 | } |
... | ... | @@ -63,7 +59,7 @@ public class ErpTask implements Job { |
63 | 59 | List<ShipmentHeader> shipmentHeaderList = shipmentHeaderService.list(shipmentHeaderLambdaQueryWrapper); |
64 | 60 | for (ShipmentHeader shipmentHeader : shipmentHeaderList) { |
65 | 61 | try { |
66 | - erpService.backShipment(shipmentHeader); | |
62 | + huahengMultiHandlerService.backShipment(shipmentHeader); | |
67 | 63 | } catch (Exception e) { |
68 | 64 | e.printStackTrace(); |
69 | 65 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
... | ... | @@ -137,7 +137,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai |
137 | 137 | // 锁定容器和库位 |
138 | 138 | Result result = taskHeaderService.createTaskLockContainerAndLocation(taskType, containerCode, fromLocationCode, toLocationCode, warehouseCode); |
139 | 139 | if (!result.isSuccess()) { |
140 | - return result; | |
140 | + throw new JeecgBootException(result.getMessage()); | |
141 | 141 | } |
142 | 142 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
143 | 143 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
... | ... | @@ -24,6 +24,7 @@ import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean; |
24 | 24 | import org.jeecg.modules.wms.api.mobile.entity.QuickReceiptBean; |
25 | 25 | import org.jeecg.modules.wms.api.mobile.service.IMobileService; |
26 | 26 | import org.jeecg.modules.wms.config.material.service.IMaterialService; |
27 | +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; | |
27 | 28 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; |
28 | 29 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; |
29 | 30 | import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService; |
... | ... | @@ -80,6 +81,8 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec |
80 | 81 | private IMaterialService materialService; |
81 | 82 | @Resource |
82 | 83 | private IErpService erpService; |
84 | + @Resource | |
85 | + private IHuahengMultiHandlerService huahengMultiHandlerService; | |
83 | 86 | |
84 | 87 | /*---------------------------------主表处理-begin-------------------------------------*/ |
85 | 88 | |
... | ... | @@ -357,7 +360,7 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec |
357 | 360 | @RequiresPermissions("receiptHeader:back") |
358 | 361 | @RequestMapping(value = "/backErpReceipt", method = {RequestMethod.PUT, RequestMethod.POST}) |
359 | 362 | public Result<?> backErpReceipt(@RequestBody ReceiptHeader receiptHeader) { |
360 | - return erpService.backReceipt(receiptHeader); | |
363 | + return huahengMultiHandlerService.backReceipt(receiptHeader); | |
361 | 364 | } |
362 | 365 | |
363 | 366 | @AutoLog(value = "PDA入库-快速入库") |
... | ... | @@ -368,9 +371,8 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec |
368 | 371 | public Result<?> quickReceipt(@RequestBody QuickReceiptBean bean, HttpServletRequest req) { |
369 | 372 | String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); |
370 | 373 | bean.setWarehouseCode(warehouseCode); |
371 | - | |
372 | - return mobileService.quickReceipt(bean, warehouseCode); | |
373 | - | |
374 | + Result result = huahengMultiHandlerService.quickReceipt(bean, warehouseCode); | |
375 | + return result; | |
374 | 376 | } |
375 | 377 | |
376 | 378 | @AutoLog(value = "PDA入库-呼叫料盒") |
... | ... | @@ -382,6 +384,7 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec |
382 | 384 | String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); |
383 | 385 | // 补充入库类型 |
384 | 386 | bean.setType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT); |
385 | - return mobileService.callBox(bean, warehouseCode); | |
387 | + Result result = huahengMultiHandlerService.callBox(bean, warehouseCode); | |
388 | + return result; | |
386 | 389 | } |
387 | 390 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
... | ... | @@ -512,7 +512,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi |
512 | 512 | // 锁定容器、库位 |
513 | 513 | Result result = taskHeaderService.createTaskLockContainerAndLocation(taskType, containerCode, fromLocationCode, toLocationCode, warehouseCode); |
514 | 514 | if (!result.isSuccess()) { |
515 | - return result; | |
515 | + throw new JeecgBootException(result.getMessage()); | |
516 | 516 | } |
517 | 517 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
518 | 518 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
... | ... | @@ -24,6 +24,7 @@ import org.jeecg.common.util.oConvertUtils; |
24 | 24 | import org.jeecg.modules.wms.api.erp.service.IErpService; |
25 | 25 | import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean; |
26 | 26 | import org.jeecg.modules.wms.api.mobile.service.IMobileService; |
27 | +import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService; | |
27 | 28 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
28 | 29 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; |
29 | 30 | import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail; |
... | ... | @@ -40,16 +41,7 @@ import org.jeecgframework.poi.excel.entity.ExportParams; |
40 | 41 | import org.jeecgframework.poi.excel.entity.ImportParams; |
41 | 42 | import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; |
42 | 43 | import org.springframework.beans.factory.annotation.Autowired; |
43 | -import org.springframework.web.bind.annotation.DeleteMapping; | |
44 | -import org.springframework.web.bind.annotation.GetMapping; | |
45 | -import org.springframework.web.bind.annotation.PathVariable; | |
46 | -import org.springframework.web.bind.annotation.PostMapping; | |
47 | -import org.springframework.web.bind.annotation.RequestBody; | |
48 | -import org.springframework.web.bind.annotation.RequestMapping; | |
49 | -import org.springframework.web.bind.annotation.RequestMethod; | |
50 | -import org.springframework.web.bind.annotation.RequestParam; | |
51 | -import org.springframework.web.bind.annotation.ResponseBody; | |
52 | -import org.springframework.web.bind.annotation.RestController; | |
44 | +import org.springframework.web.bind.annotation.*; | |
53 | 45 | import org.springframework.web.multipart.MultipartFile; |
54 | 46 | import org.springframework.web.multipart.MultipartHttpServletRequest; |
55 | 47 | import org.springframework.web.servlet.ModelAndView; |
... | ... | @@ -89,6 +81,8 @@ public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IS |
89 | 81 | private IErpService erpService; |
90 | 82 | @Resource |
91 | 83 | private IInventoryDetailService inventoryDetailService; |
84 | + @Resource | |
85 | + private IHuahengMultiHandlerService huahengMultiHandlerService; | |
92 | 86 | |
93 | 87 | /*---------------------------------主表处理-begin-------------------------------------*/ |
94 | 88 | |
... | ... | @@ -378,7 +372,7 @@ public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IS |
378 | 372 | @RequiresPermissions("shipmentHeader:back") |
379 | 373 | @RequestMapping(value = "/backErpShipment", method = {RequestMethod.PUT, RequestMethod.POST}) |
380 | 374 | public Result<?> backErpShipment(@RequestBody ShipmentHeader shipmentHeader) { |
381 | - return erpService.backShipment(shipmentHeader); | |
375 | + return huahengMultiHandlerService.backShipment(shipmentHeader); | |
382 | 376 | } |
383 | 377 | |
384 | 378 | @AutoLog(value = "PDA出库-呼叫料盒") |
... | ... | @@ -390,6 +384,7 @@ public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IS |
390 | 384 | String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); |
391 | 385 | // 补充入库类型 |
392 | 386 | bean.setType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT); |
393 | - return mobileService.callBox(bean, warehouseCode); | |
387 | + Result result = huahengMultiHandlerService.callBox(bean, warehouseCode); | |
388 | + return result; | |
394 | 389 | } |
395 | 390 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java
... | ... | @@ -227,7 +227,7 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap |
227 | 227 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_CYCLECOUNT, containerCode, fromLocationCode, toLocationCode, |
228 | 228 | warehouseCode); |
229 | 229 | if (!result.isSuccess()) { |
230 | - return result; | |
230 | + throw new JeecgBootException(result.getMessage()); | |
231 | 231 | } |
232 | 232 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
233 | 233 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountHeader/service/impl/CycleCountHeaderServiceImpl.java
1 | 1 | package org.jeecg.modules.wms.stocktaking.cycleCountHeader.service.impl; |
2 | 2 | |
3 | -import org.jeecg.common.exception.JeecgBootException; | |
4 | -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
5 | -import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |
3 | +import java.text.SimpleDateFormat; | |
4 | +import java.util.Comparator; | |
5 | +import java.util.Date; | |
6 | +import java.util.List; | |
7 | +import java.util.stream.Collectors; | |
8 | + | |
9 | +import javax.annotation.Resource; | |
10 | + | |
6 | 11 | import org.jeecg.common.api.vo.Result; |
7 | -import org.jeecg.modules.wms.config.receiptType.entity.ReceiptType; | |
8 | -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; | |
12 | +import org.jeecg.common.exception.JeecgBootException; | |
9 | 13 | import org.jeecg.modules.wms.stocktaking.cycleCountDetail.entity.CycleCountDetail; |
10 | 14 | import org.jeecg.modules.wms.stocktaking.cycleCountDetail.service.impl.CycleCountDetailServiceImpl; |
11 | 15 | import org.jeecg.modules.wms.stocktaking.cycleCountHeader.entity.CycleCountHeader; |
... | ... | @@ -14,29 +18,21 @@ import org.jeecg.modules.wms.stocktaking.cycleCountHeader.service.ICycleCountHea |
14 | 18 | import org.jeecg.utils.StringUtils; |
15 | 19 | import org.jeecg.utils.constant.QuantityConstant; |
16 | 20 | import org.springframework.stereotype.Service; |
17 | - | |
18 | -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
19 | 21 | import org.springframework.transaction.annotation.Transactional; |
20 | 22 | |
21 | -import javax.annotation.Resource; | |
22 | -import java.text.SimpleDateFormat; | |
23 | -import java.util.Comparator; | |
24 | -import java.util.Date; | |
25 | -import java.util.List; | |
26 | -import java.util.stream.Collectors; | |
23 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
24 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |
25 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
27 | 26 | |
28 | 27 | /** |
29 | 28 | * @Description: 盘点主表 |
30 | - * @Author: jeecg-boot | |
31 | - * @Date: 2023-01-30 | |
32 | - * @Version: V1.0 | |
29 | + * @Author: jeecg-boot | |
30 | + * @Date: 2023-01-30 | |
31 | + * @Version: V1.0 | |
33 | 32 | */ |
34 | 33 | @Service |
35 | 34 | public class CycleCountHeaderServiceImpl extends ServiceImpl<CycleCountHeaderMapper, CycleCountHeader> implements ICycleCountHeaderService { |
36 | 35 | |
37 | - | |
38 | - | |
39 | - | |
40 | 36 | @Resource |
41 | 37 | private CycleCountDetailServiceImpl cycleCountDetailService; |
42 | 38 | |
... | ... | @@ -56,55 +52,54 @@ public class CycleCountHeaderServiceImpl extends ServiceImpl<CycleCountHeaderMap |
56 | 52 | } |
57 | 53 | |
58 | 54 | @Override |
55 | + @Transactional | |
59 | 56 | public void updataHeaderStatus(String cycleCountHeaderCode) { |
60 | - //查询明细单状态,然后更新主单状态 | |
61 | - //执行中时,对比主单状态,比主单数值小的不改变主单,明细单大于主单状态时改变主单状态到和明细单相同 | |
62 | - //完成时在全部单据都完成后才能修改主单状态为完成 | |
63 | - //当其中一条明细有差异时,主单为有差异状态 | |
57 | + // 查询明细单状态,然后更新主单状态 | |
58 | + // 执行中时,对比主单状态,比主单数值小的不改变主单,明细单大于主单状态时改变主单状态到和明细单相同 | |
59 | + // 完成时在全部单据都完成后才能修改主单状态为完成 | |
60 | + // 当其中一条明细有差异时,主单为有差异状态 | |
64 | 61 | CycleCountHeader cyclecountHeader = new CycleCountHeader(); |
65 | 62 | cyclecountHeader.setCode(cycleCountHeaderCode); |
66 | 63 | // cyclecountHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); |
67 | 64 | LambdaQueryWrapper<CycleCountHeader> lamb = Wrappers.lambdaQuery(cyclecountHeader); |
68 | 65 | cyclecountHeader = this.getOne(lamb); |
69 | - if(StringUtils.isNull(cyclecountHeader)){ | |
66 | + if (StringUtils.isNull(cyclecountHeader)) { | |
70 | 67 | throw new JeecgBootException("没有找到盘点主单!"); |
71 | 68 | } |
72 | 69 | CycleCountDetail temp = new CycleCountDetail(); |
73 | 70 | temp.setCycleCountHeadCode(cyclecountHeader.getCode()); |
74 | 71 | temp.setWarehouseCode(cyclecountHeader.getWarehouseCode()); |
75 | - //temp.setCompanyCode(cyclecountHeader.getCompanyCode()); | |
72 | + // temp.setCompanyCode(cyclecountHeader.getCompanyCode()); | |
76 | 73 | LambdaQueryWrapper<CycleCountDetail> lam = Wrappers.lambdaQuery(temp); |
77 | 74 | List<CycleCountDetail> list = cycleCountDetailService.list(lam); |
78 | - if(list.size() < 1){ | |
75 | + if (list.size() < 1) { | |
79 | 76 | throw new JeecgBootException("明细为空!"); |
80 | 77 | } |
81 | - //当有子单的状态为100时触发主单的完成状态 | |
82 | - //100状态只有全部完成才写入主单 | |
83 | - long count100 = list.stream().filter(t-> t.getEnableStatus().equals(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED)).count(); //明细已完成的条数 | |
84 | - if(count100 == list.size() ){ | |
78 | + // 当有子单的状态为100时触发主单的完成状态 | |
79 | + // 100状态只有全部完成才写入主单 | |
80 | + long count100 = list.stream().filter(t -> t.getEnableStatus().equals(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED)).count(); // 明细已完成的条数 | |
81 | + if (count100 == list.size()) { | |
85 | 82 | cyclecountHeader.setStatusCyc(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED); |
86 | 83 | this.updateById(cyclecountHeader); |
87 | 84 | } |
88 | - //有任何子单没有完成则主单不修改为100 | |
89 | - //有到100的子单时,主单的状态一定是100的前一个状态,所以状态不变 | |
90 | - if(count100 == 0){ | |
91 | - //所有子单状态比较主单状态,只有在明细单大于主单状态时才更改主单状态 | |
85 | + // 有任何子单没有完成则主单不修改为100 | |
86 | + // 有到100的子单时,主单的状态一定是100的前一个状态,所以状态不变 | |
87 | + if (count100 == 0) { | |
88 | + // 所有子单状态比较主单状态,只有在明细单大于主单状态时才更改主单状态 | |
92 | 89 | int headerStatus = cyclecountHeader.getStatusCyc(); |
93 | - long count = list.stream().filter(t->t.getEnableStatus() > headerStatus).count(); | |
94 | - if(count > 0 ){ | |
95 | - //stream流取出明细状态中最大的值,赋给主单状态 | |
96 | - List<CycleCountDetail> cycleCountDetailList = list.stream().sorted( | |
97 | - Comparator.comparing(CycleCountDetail::getEnableStatus).reversed()).collect(Collectors.toList()); | |
90 | + long count = list.stream().filter(t -> t.getEnableStatus() > headerStatus).count(); | |
91 | + if (count > 0) { | |
92 | + // stream流取出明细状态中最大的值,赋给主单状态 | |
93 | + List<CycleCountDetail> cycleCountDetailList = | |
94 | + list.stream().sorted(Comparator.comparing(CycleCountDetail::getEnableStatus).reversed()).collect(Collectors.toList()); | |
98 | 95 | cyclecountHeader.setStatusCyc(cycleCountDetailList.get(0).getEnableStatus()); |
99 | 96 | this.updateById(cyclecountHeader); |
100 | 97 | } |
101 | 98 | |
102 | 99 | } |
103 | 100 | |
104 | - | |
105 | 101 | } |
106 | 102 | |
107 | - | |
108 | 103 | @Transactional |
109 | 104 | public String createCode(String receiptType) { |
110 | 105 | String code = null; |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
... | ... | @@ -598,7 +598,7 @@ public class TaskHeaderController extends HuahengBaseController { |
598 | 598 | } |
599 | 599 | String fromLocationCode = container.getLocationCode(); |
600 | 600 | if (StringUtils.isEmpty(fromLocationCode)) { |
601 | - return Result.error("选择整出口, 起始库位号为空"); | |
601 | + return Result.error("选择分拣口, 起始库位号为空"); | |
602 | 602 | } |
603 | 603 | Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); |
604 | 604 | if (fromLocation == null) { |
... | ... | @@ -656,7 +656,13 @@ public class TaskHeaderController extends HuahengBaseController { |
656 | 656 | @ResponseBody |
657 | 657 | @ApiLogger(apiName = "修复空出的数据", from = "WMS") |
658 | 658 | public Result handleEmptyOut(@RequestParam(name = "id", required = true) String id) { |
659 | - Result result = taskHeaderService.handleEmptyOut(id); | |
659 | + Result result = handleMultiProcess("handleEmptyOut", new MultiProcessListener() { | |
660 | + @Override | |
661 | + public Result<?> doProcess() { | |
662 | + Result result = taskHeaderService.handleEmptyOut(id); | |
663 | + return result; | |
664 | + } | |
665 | + }); | |
660 | 666 | return result; |
661 | 667 | } |
662 | 668 | |
... | ... | @@ -670,7 +676,13 @@ public class TaskHeaderController extends HuahengBaseController { |
670 | 676 | @ResponseBody |
671 | 677 | @ApiLogger(apiName = "修复重入的数据", from = "WMS") |
672 | 678 | public Result handleDoubleIn(@RequestParam(name = "id", required = true) String id) { |
673 | - Result result = taskHeaderService.handleDoubleIn(id); | |
679 | + Result result = handleMultiProcess("handleDoubleIn", new MultiProcessListener() { | |
680 | + @Override | |
681 | + public Result<?> doProcess() { | |
682 | + Result result = taskHeaderService.handleDoubleIn(id); | |
683 | + return result; | |
684 | + } | |
685 | + }); | |
674 | 686 | return result; |
675 | 687 | } |
676 | 688 | |
... | ... | @@ -684,7 +696,13 @@ public class TaskHeaderController extends HuahengBaseController { |
684 | 696 | @ResponseBody |
685 | 697 | @ApiLogger(apiName = "修复取货错的数据", from = "WMS") |
686 | 698 | public Result handlePickupError(@RequestParam(name = "id", required = true) String id) { |
687 | - Result result = taskHeaderService.handlePickupError(id); | |
699 | + Result result = handleMultiProcess("handlePickupError", new MultiProcessListener() { | |
700 | + @Override | |
701 | + public Result<?> doProcess() { | |
702 | + Result result = taskHeaderService.handlePickupError(id); | |
703 | + return result; | |
704 | + } | |
705 | + }); | |
688 | 706 | return result; |
689 | 707 | } |
690 | 708 | |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
... | ... | @@ -257,7 +257,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
257 | 257 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_TRANSFER, containerCode, fromLocationCode, toLocationCode, |
258 | 258 | warehouseCode); |
259 | 259 | if (!result.isSuccess()) { |
260 | - return result; | |
260 | + throw new JeecgBootException(result.getMessage()); | |
261 | 261 | } |
262 | 262 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
263 | 263 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... | @@ -308,7 +308,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
308 | 308 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_CHECK_OUT, containerCode, fromLocationCode, toLocationCode, |
309 | 309 | warehouseCode); |
310 | 310 | if (!result.isSuccess()) { |
311 | - return result; | |
311 | + throw new JeecgBootException(result.getMessage()); | |
312 | 312 | } |
313 | 313 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
314 | 314 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... | @@ -380,7 +380,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
380 | 380 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_OVER_STATION, containerCode, QuantityConstant.EMPTY_STRING, |
381 | 381 | QuantityConstant.EMPTY_STRING, warehouseCode); |
382 | 382 | if (!result.isSuccess()) { |
383 | - return result; | |
383 | + throw new JeecgBootException(result.getMessage()); | |
384 | 384 | } |
385 | 385 | TaskHeader taskHeader = new TaskHeader(); |
386 | 386 | taskHeader.setWarehouseCode(warehouseCode); |
... | ... | @@ -476,7 +476,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
476 | 476 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT, containerCode, |
477 | 477 | QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode); |
478 | 478 | if (!result.isSuccess()) { |
479 | - return result; | |
479 | + throw new JeecgBootException(result.getMessage()); | |
480 | 480 | } |
481 | 481 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
482 | 482 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... | @@ -512,7 +512,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
512 | 512 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT, containerCode, |
513 | 513 | QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode); |
514 | 514 | if (!result.isSuccess()) { |
515 | - return result; | |
515 | + throw new JeecgBootException(result.getMessage()); | |
516 | 516 | } |
517 | 517 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
518 | 518 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... | @@ -912,7 +912,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
912 | 912 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYRECEIPT, containerCode, QuantityConstant.EMPTY_STRING, |
913 | 913 | toLocationCode, warehouseCode); |
914 | 914 | if (!result.isSuccess()) { |
915 | - return result; | |
915 | + throw new JeecgBootException(result.getMessage()); | |
916 | 916 | } |
917 | 917 | TaskHeader taskHeader = new TaskHeader(); |
918 | 918 | taskHeader.setWarehouseCode(warehouseCode); |
... | ... | @@ -954,7 +954,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
954 | 954 | Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT, containerCode, QuantityConstant.EMPTY_STRING, |
955 | 955 | QuantityConstant.EMPTY_STRING, warehouseCode); |
956 | 956 | if (!result.isSuccess()) { |
957 | - return result; | |
957 | + throw new JeecgBootException(result.getMessage()); | |
958 | 958 | } |
959 | 959 | TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult(); |
960 | 960 | String zoneCode = taskLockEntity.getZoneCode(); |
... | ... | @@ -1011,7 +1011,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1011 | 1011 | return Result.ok("入库任务(" + taskHeader.getId() + ")已经是完成的!"); |
1012 | 1012 | } |
1013 | 1013 | if (taskDetailList.isEmpty()) { |
1014 | - throw new JeecgBootException("入库任务明细为空"); | |
1014 | + throw new JeecgBootException("完成入库任务时, 入库任务明细为空"); | |
1015 | 1015 | } |
1016 | 1016 | Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode); |
1017 | 1017 | if (toLocation == null) { |
... | ... | @@ -1442,6 +1442,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1442 | 1442 | case QuantityConstant.TASK_TYPE_OVER_STATION: |
1443 | 1443 | result = taskHeaderService.createOverStationTaskLockContainer(containerCode, warehouseCode); |
1444 | 1444 | break; |
1445 | + default: | |
1446 | + throw new JeecgBootException("创建任务时,没有匹配到这种任务类型" + taskType); | |
1445 | 1447 | } |
1446 | 1448 | return result; |
1447 | 1449 | } |
... | ... | @@ -1767,6 +1769,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1767 | 1769 | * 盘点完成,传入任务主单,查出任务明细,通过任务明细查找盘点的明细单, |
1768 | 1770 | * 完成任务同时,修改盘点细单和主单的状态,完成后库存锁复位 |
1769 | 1771 | */ |
1772 | + log.info("开始完成盘点任务"); | |
1770 | 1773 | String warehouseCode = taskHeader.getWarehouseCode(); |
1771 | 1774 | String containerCode = taskHeader.getContainerCode(); |
1772 | 1775 | String fromLocationCode = taskHeader.getFromLocationCode(); |
... | ... | @@ -1778,44 +1781,52 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1778 | 1781 | if (StringUtils.isEmpty(toLocationCode)) { |
1779 | 1782 | return Result.error("完成盘点任务时,目标库位号为空"); |
1780 | 1783 | } |
1781 | -// LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); | |
1784 | + if (StringUtils.isEmpty(containerCode)) { | |
1785 | + return Result.error("完成盘点任务时,托盘号为空"); | |
1786 | + } | |
1787 | + if (StringUtils.isEmpty(warehouseCode)) { | |
1788 | + return Result.error("完成盘点任务时,仓库编码为空"); | |
1789 | + } | |
1782 | 1790 | taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); |
1783 | 1791 | |
1784 | 1792 | // 1.先拿到盘点单主单据 |
1785 | 1793 | CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(taskHeader.getShipmentContainerHeaderId()); |
1786 | - | |
1787 | - if (cycleCountDetail.getGapQty().compareTo(BigDecimal.ZERO) == 0) { | |
1788 | - return Result.error("盘点单据系统实盘数量跟差异数量0,不能完成 单据号" + cycleCountDetail.getCycleCountHeadCode()); | |
1794 | + if (cycleCountDetail == null) { | |
1795 | + return Result.error("完成盘点任务时,盘点单详情为空" + taskHeader.getShipmentContainerHeaderId()); | |
1789 | 1796 | } |
1797 | +// if (cycleCountDetail.getGapQty().compareTo(BigDecimal.ZERO) == 0) { | |
1798 | +// return Result.error("完成盘点任务时,盘点单据系统实盘数量跟差异数量0,不能完成 单据号" + cycleCountDetail.getCycleCountHeadCode()); | |
1799 | +// } | |
1790 | 1800 | |
1791 | 1801 | // 2.盘点单主单据查明细单据list |
1792 | 1802 | LambdaQueryWrapper<CycleCountDetailChild> childLambdaQueryWrapper = new LambdaQueryWrapper<CycleCountDetailChild>(); |
1793 | 1803 | childLambdaQueryWrapper.eq(CycleCountDetailChild::getCycleCountDetailid, cycleCountDetail.getId()); |
1794 | 1804 | List<CycleCountDetailChild> children = cycleCountDetailChildService.list(childLambdaQueryWrapper); |
1795 | - | |
1805 | + if (children.size() == 0) { | |
1806 | + return Result.error("完成盘点任务时,盘点单详情明细为空" + cycleCountDetail.getId()); | |
1807 | + } | |
1796 | 1808 | // 3.单据list如果差异数量+生成入库单,差异数-生成出库单进行回传类型其他出库单 |
1797 | - | |
1798 | 1809 | InventoryHeader inventoryHeader = inventoryHeaderService.getById(cycleCountDetail.getInventoryHeaderId()); |
1799 | - | |
1810 | + if (inventoryHeader == null) { | |
1811 | + return Result.error("完成盘点任务时,没有找到库存头" + cycleCountDetail.getInventoryHeaderId()); | |
1812 | + } | |
1800 | 1813 | int outboundOrderId = 0; |
1801 | 1814 | String outboundOrderCode = null; |
1802 | 1815 | int warehousingOrderId = 0; |
1803 | 1816 | String warehousingOrderCode = null; |
1804 | - | |
1805 | 1817 | for (CycleCountDetailChild child : children) { |
1806 | 1818 | if (!child.getChildStatus().equals(QuantityConstant.CYCLECOUNT_STATUS_REGISTERED)) { |
1807 | 1819 | throw new JeecgBootException("当前任务里面还有没有进行登记的数据,不能完成任务"); |
1808 | 1820 | } |
1809 | - | |
1810 | 1821 | if (child.getInventoryDetaiId() != null) { |
1811 | 1822 | InventoryDetail inventoryDetail = inventoryDetailService.getById(child.getInventoryDetaiId()); |
1812 | 1823 | if (inventoryDetail == null) { |
1813 | 1824 | throw new JeecgBootException("盘点还没完成 库存明细单据就不存在了 可能出现了问题或者所容器没成功"); |
1814 | 1825 | } |
1815 | - inventoryHeader.setLocationCode(toLocationCode); | |
1816 | - inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().add(child.getGapQty())); | |
1817 | - inventoryDetail.setQty(child.getCountedQty()); | |
1818 | - inventoryDetailService.updateById(inventoryDetail); | |
1826 | + success = inventoryDetailService.updateQtyAndTaskQtyAndLocationCode(child.getCountedQty(), BigDecimal.ZERO, toLocationCode, inventoryDetail.getId()); | |
1827 | + if (!success) { | |
1828 | + throw new JeecgBootException("完成盘点任务时, 更新库存详情失败"); | |
1829 | + } | |
1819 | 1830 | } else { |
1820 | 1831 | InventoryDetail inventoryDetail = new InventoryDetail(); |
1821 | 1832 | inventoryDetail.setInventoryHeaderId(inventoryHeader.getId()); |
... | ... | @@ -1832,7 +1843,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1832 | 1843 | inventoryDetail.setTaskQty(BigDecimal.ZERO); |
1833 | 1844 | inventoryDetail.setInventoryStatus(child.getInventoryStatus()); |
1834 | 1845 | inventoryDetail.setBatch(child.getBatch()); |
1835 | - inventoryDetailService.save(inventoryDetail); | |
1846 | + success = inventoryDetailService.save(inventoryDetail); | |
1847 | + if (!success) { | |
1848 | + throw new JeecgBootException("完成盘点任务时, 保存库存详情失败"); | |
1849 | + } | |
1836 | 1850 | child.setInventoryDetaiId(inventoryDetail.getId()); |
1837 | 1851 | } |
1838 | 1852 | |
... | ... | @@ -1845,12 +1859,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1845 | 1859 | receiptHeader.setType(QuantityConstant.RECEIPT_BILL_TYPE_QTR); |
1846 | 1860 | receiptHeader.setRemark("盘盈 单号" + cycleCountDetail.getCycleCountHeadCode()); |
1847 | 1861 | Result result = receiptHeaderService.saveReceiptHeader(receiptHeader); |
1848 | - if (result.getCode() != 200) { | |
1862 | + if (!result.isSuccess()) { | |
1849 | 1863 | return result; |
1850 | 1864 | } |
1851 | 1865 | receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); |
1852 | 1866 | receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); |
1853 | - receiptHeaderService.updateById(receiptHeader); | |
1867 | + success = receiptHeaderService.updateById(receiptHeader); | |
1868 | + if (!success) { | |
1869 | + throw new JeecgBootException("完成盘点任务时, 更新入库表单头失败"); | |
1870 | + } | |
1854 | 1871 | // 生成入库单并且赋值给warehousingOrderId |
1855 | 1872 | warehousingOrderId = receiptHeader.getId(); |
1856 | 1873 | warehousingOrderCode = receiptHeader.getCode(); |
... | ... | @@ -1872,8 +1889,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1872 | 1889 | receiptDetail.setBatch(child.getBatch()); |
1873 | 1890 | receiptDetail.setLot(child.getLot()); |
1874 | 1891 | receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); |
1875 | - receiptDetailService.save(receiptDetail); | |
1876 | - | |
1892 | + success = receiptDetailService.save(receiptDetail); | |
1893 | + if (!success) { | |
1894 | + throw new JeecgBootException("完成盘点任务时, 新增入库表单详情失败"); | |
1895 | + } | |
1877 | 1896 | // 增加库存交易记录 |
1878 | 1897 | InventoryTransaction inventoryTransaction = new InventoryTransaction(); |
1879 | 1898 | inventoryTransaction.setWarehouseCode(taskHeader.getWarehouseCode()); |
... | ... | @@ -1891,14 +1910,19 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1891 | 1910 | inventoryTransaction.setQty(child.getCountedQty()); |
1892 | 1911 | inventoryTransaction.setBatch(child.getBatch()); |
1893 | 1912 | inventoryTransaction.setLot(child.getLot()); |
1894 | - inventoryTransactionService.save(inventoryTransaction); | |
1895 | - | |
1913 | + success = inventoryTransactionService.save(inventoryTransaction); | |
1914 | + if (!success) { | |
1915 | + throw new JeecgBootException("完成盘点任务时, 新增库存交易详情失败"); | |
1916 | + } | |
1896 | 1917 | } |
1897 | 1918 | |
1898 | 1919 | if (child.getGapQty().compareTo(BigDecimal.ZERO) == -1) { |
1899 | 1920 | |
1900 | 1921 | if (child.getGapQty().abs().compareTo(child.getSystemQty()) > -1) { |
1901 | - inventoryDetailService.removeById(child.getInventoryDetaiId()); | |
1922 | + success = inventoryDetailService.removeById(child.getInventoryDetaiId()); | |
1923 | + if (!success) { | |
1924 | + throw new JeecgBootException("完成盘点任务时, 删除库存详情失败"); | |
1925 | + } | |
1902 | 1926 | } |
1903 | 1927 | |
1904 | 1928 | if (outboundOrderId == 0) { |
... | ... | @@ -1908,12 +1932,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1908 | 1932 | shipmentHeader.setType(QuantityConstant.SHIPMENT_BILL_TYPE_QTC); |
1909 | 1933 | shipmentHeader.setRemark("盘亏 单号" + cycleCountDetail.getCycleCountHeadCode()); |
1910 | 1934 | Result result = shipmentHeaderService.saveShipmentHeader(shipmentHeader); |
1911 | - if (result.getCode() != 200) { | |
1935 | + if (!result.isSuccess()) { | |
1912 | 1936 | return result; |
1913 | 1937 | } |
1914 | 1938 | shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); |
1915 | 1939 | shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); |
1916 | - shipmentHeaderService.updateById(shipmentHeader); | |
1940 | + success = shipmentHeaderService.updateById(shipmentHeader); | |
1941 | + if (!success) { | |
1942 | + throw new JeecgBootException("完成盘点任务时, 更新出库单详情失败"); | |
1943 | + } | |
1917 | 1944 | // 生成出库单并且赋值给outboundOrderId |
1918 | 1945 | outboundOrderId = shipmentHeader.getId(); |
1919 | 1946 | outboundOrderCode = shipmentHeader.getCode(); |
... | ... | @@ -1935,8 +1962,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1935 | 1962 | shipmentDetail.setBatch(child.getBatch()); |
1936 | 1963 | shipmentDetail.setLot(child.getLot()); |
1937 | 1964 | shipmentDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); |
1938 | - shipmentDetailService.save(shipmentDetail); | |
1939 | - | |
1965 | + success = shipmentDetailService.save(shipmentDetail); | |
1966 | + if (!success) { | |
1967 | + throw new JeecgBootException("完成盘点任务时, 保存出库单详情失败"); | |
1968 | + } | |
1940 | 1969 | InventoryTransaction inventoryTransaction = new InventoryTransaction(); |
1941 | 1970 | inventoryTransaction.setWarehouseCode(taskHeader.getWarehouseCode()); |
1942 | 1971 | inventoryTransaction.setCompanyCode(taskHeader.getCompanyCode()); |
... | ... | @@ -1953,51 +1982,49 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1953 | 1982 | inventoryTransaction.setQty(child.getCountedQty()); |
1954 | 1983 | inventoryTransaction.setBatch(child.getBatch()); |
1955 | 1984 | inventoryTransaction.setLot(child.getLot()); |
1956 | - inventoryTransactionService.save(inventoryTransaction); | |
1985 | + success = inventoryTransactionService.save(inventoryTransaction); | |
1986 | + if (!success) { | |
1987 | + throw new JeecgBootException("完成盘点任务时, 保存出库单详情失败"); | |
1988 | + } | |
1989 | + } | |
1990 | + success = cycleCountDetailChildService.updateById(child); | |
1991 | + if (!success) { | |
1992 | + throw new JeecgBootException("完成盘点任务时, 更新盘点详情失败"); | |
1957 | 1993 | } |
1958 | - cycleCountDetailChildService.updateById(child); | |
1959 | 1994 | } |
1960 | 1995 | |
1961 | 1996 | if (inventoryHeader.getTotalQty().compareTo(BigDecimal.ZERO) < 1) { |
1962 | - inventoryHeaderService.removeById(inventoryHeader); | |
1997 | + success = inventoryHeaderService.removeById(inventoryHeader); | |
1998 | + if (!success) { | |
1999 | + throw new JeecgBootException("完成盘点任务时, 删除库存头失败"); | |
2000 | + } | |
2001 | + } else { | |
2002 | + success = inventoryHeaderService.updateLocationCodeById(toLocationCode, cycleCountDetail.getInventoryHeaderId()); | |
2003 | + if (!success) { | |
2004 | + throw new JeecgBootException("完成盘点任务时, 更新库存头失败"); | |
2005 | + } | |
1963 | 2006 | } |
1964 | 2007 | |
1965 | - inventoryHeaderService.updateById(inventoryHeader); | |
1966 | - | |
1967 | - // 4.完成当前任务 | |
1968 | - if (!taskHeaderService.saveOrUpdate(taskHeader)) { | |
1969 | - throw new JeecgBootException("盘点任务单据状态更新失败!"); | |
1970 | - } | |
1971 | 2008 | // 盘点明细状态 |
1972 | 2009 | cycleCountDetail.setEnableStatus(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED); |
1973 | 2010 | cycleCountDetail.setCompletedAt(new Date()); |
1974 | - cycleCountDetailService.updateById(cycleCountDetail); | |
2011 | + success = cycleCountDetailService.updateById(cycleCountDetail); | |
2012 | + if (!success) { | |
2013 | + throw new JeecgBootException("完成盘点任务时, 更新盘点单详情失败"); | |
2014 | + } | |
1975 | 2015 | // 更新主单状态 |
1976 | 2016 | cycleCountHeaderService.updataHeaderStatus(cycleCountDetail.getCycleCountHeadCode()); |
1977 | 2017 | |
1978 | - // 释放库位 | |
1979 | - locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); | |
1980 | - | |
1981 | - locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); | |
1982 | - | |
1983 | -// // 还原容器状态 | |
1984 | -// containerService.restoreContainer(cycleCountDetail.getContainerCode(), taskHeader.getWarehouseCode()); | |
1985 | - List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); | |
1986 | - if (inventoryDetailList.size() != 0) { | |
1987 | - if (fromLocationCode.equals(toLocationCode)) { | |
1988 | - success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); | |
1989 | - } else { | |
1990 | - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); | |
1991 | - } | |
1992 | - if (!success) { | |
1993 | - throw new JeecgBootException("完成出库查看任务时,更新容器状态失败"); | |
1994 | - } | |
1995 | - } else { | |
1996 | - success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); | |
1997 | - if (!success) { | |
1998 | - throw new JeecgBootException("完成出库查看任务时,更新容器状态失败"); | |
1999 | - } | |
2018 | + Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_CHECK_OUT, | |
2019 | + containerCode, fromLocationCode, toLocationCode, warehouseCode); | |
2020 | + if (!result.isSuccess()) { | |
2021 | + throw new JeecgBootException(result.getMessage()); | |
2000 | 2022 | } |
2023 | + success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId()); | |
2024 | + if (!success) { | |
2025 | + throw new JeecgBootException("完成盘点任务时, 更新任务失败"); | |
2026 | + } | |
2027 | + log.info("完成盘点任务"); | |
2001 | 2028 | return Result.OK("完成盘点任务成功"); |
2002 | 2029 | } |
2003 | 2030 | |
... | ... | @@ -2045,10 +2072,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
2045 | 2072 | throw new JeecgBootException(result.getMessage()); |
2046 | 2073 | } |
2047 | 2074 | boolean success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId()); |
2048 | - log.info("完成空托盘出库任务" + taskHeader.getId()); | |
2049 | 2075 | if (!success) { |
2050 | 2076 | throw new JeecgBootException("完成空托盘出库任务时, 更新任务失败"); |
2051 | 2077 | } |
2078 | + log.info("完成空托盘出库任务" + taskHeader.getId()); | |
2052 | 2079 | return Result.OK("完成空托盘出库成功"); |
2053 | 2080 | } |
2054 | 2081 | |
... | ... |