Commit bf74d4a12912b309b4efe199d174a3e6b45304f7

Authored by 肖超群
1 parent 4a0ebc6b

把生成任务的锁定容器和库位,集中到一起

huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/controller/WcsController.java
@@ -5,22 +5,14 @@ import javax.servlet.http.HttpServletRequest; @@ -5,22 +5,14 @@ import javax.servlet.http.HttpServletRequest;
5 5
6 import org.jeecg.common.api.vo.Result; 6 import org.jeecg.common.api.vo.Result;
7 import org.jeecg.common.aspect.annotation.AutoLog; 7 import org.jeecg.common.aspect.annotation.AutoLog;
8 -import org.jeecg.modules.wms.api.wcs.entity.ArriveEntity;  
9 -import org.jeecg.modules.wms.api.wcs.entity.ManyEmptyDomain;  
10 -import org.jeecg.modules.wms.api.wcs.entity.ManyEmptyOutDomain;  
11 -import org.jeecg.modules.wms.api.wcs.entity.MaterialInfoEntity;  
12 -import org.jeecg.modules.wms.api.wcs.entity.TaskEntity;  
13 -import org.jeecg.modules.wms.api.wcs.entity.WarecellDomain; 8 +import org.jeecg.modules.wms.api.wcs.entity.*;
14 import org.jeecg.modules.wms.api.wcs.service.WcsService; 9 import org.jeecg.modules.wms.api.wcs.service.WcsService;
15 import org.jeecg.modules.wms.framework.controller.HuahengBaseController; 10 import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
16 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; 11 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
17 import org.jeecg.utils.StringUtils; 12 import org.jeecg.utils.StringUtils;
  13 +import org.jeecg.utils.interceptor.AccessLimit;
18 import org.jeecg.utils.support.ApiLogger; 14 import org.jeecg.utils.support.ApiLogger;
19 -import org.springframework.web.bind.annotation.PostMapping;  
20 -import org.springframework.web.bind.annotation.RequestBody;  
21 -import org.springframework.web.bind.annotation.RequestMapping;  
22 -import org.springframework.web.bind.annotation.ResponseBody;  
23 -import org.springframework.web.bind.annotation.RestController; 15 +import org.springframework.web.bind.annotation.*;
24 16
25 import io.swagger.annotations.Api; 17 import io.swagger.annotations.Api;
26 import io.swagger.annotations.ApiOperation; 18 import io.swagger.annotations.ApiOperation;
@@ -46,6 +38,7 @@ public class WcsController extends HuahengBaseController { @@ -46,6 +38,7 @@ public class WcsController extends HuahengBaseController {
46 @ResponseBody 38 @ResponseBody
47 @ApiOperation("仓位分配") 39 @ApiOperation("仓位分配")
48 @ApiLogger(apiName = "仓位分配", from = "WCS") 40 @ApiLogger(apiName = "仓位分配", from = "WCS")
  41 + @AccessLimit(seconds = 5, maxCount = 5)
49 public Result warecellAllocation(@RequestBody WarecellDomain warecellDomain, HttpServletRequest req) { 42 public Result warecellAllocation(@RequestBody WarecellDomain warecellDomain, HttpServletRequest req) {
50 String warehouseCode = warecellDomain.getWarehouseCode(); 43 String warehouseCode = warecellDomain.getWarehouseCode();
51 String taskNo = warecellDomain.getTaskNo(); 44 String taskNo = warecellDomain.getTaskNo();
@@ -82,6 +75,7 @@ public class WcsController extends HuahengBaseController { @@ -82,6 +75,7 @@ public class WcsController extends HuahengBaseController {
82 @ResponseBody 75 @ResponseBody
83 @ApiOperation("申请空托盘组入库") 76 @ApiOperation("申请空托盘组入库")
84 @ApiLogger(apiName = "申请空托盘组入库", from = "WCS") 77 @ApiLogger(apiName = "申请空托盘组入库", from = "WCS")
  78 + @AccessLimit(seconds = 5, maxCount = 5)
85 public Result manyEmptyIn(@RequestBody ManyEmptyDomain manyEmptyDomain) { 79 public Result manyEmptyIn(@RequestBody ManyEmptyDomain manyEmptyDomain) {
86 String containerCode = manyEmptyDomain.getContainerCode(); 80 String containerCode = manyEmptyDomain.getContainerCode();
87 String warehouseCode = manyEmptyDomain.getWarehouseCode(); 81 String warehouseCode = manyEmptyDomain.getWarehouseCode();
@@ -117,6 +111,7 @@ public class WcsController extends HuahengBaseController { @@ -117,6 +111,7 @@ public class WcsController extends HuahengBaseController {
117 @ResponseBody 111 @ResponseBody
118 @ApiOperation("申请空托盘组出库") 112 @ApiOperation("申请空托盘组出库")
119 @ApiLogger(apiName = "申请空托盘组出库", from = "WCS") 113 @ApiLogger(apiName = "申请空托盘组出库", from = "WCS")
  114 + @AccessLimit(seconds = 5, maxCount = 5)
120 public Result manyEmptyOut(@RequestBody ManyEmptyOutDomain manyEmptyOutDomain) { 115 public Result manyEmptyOut(@RequestBody ManyEmptyOutDomain manyEmptyOutDomain) {
121 String toPortCode = manyEmptyOutDomain.getPort(); 116 String toPortCode = manyEmptyOutDomain.getPort();
122 String warehouseCode = manyEmptyOutDomain.getWarehouseCode(); 117 String warehouseCode = manyEmptyOutDomain.getWarehouseCode();
@@ -150,6 +145,7 @@ public class WcsController extends HuahengBaseController { @@ -150,6 +145,7 @@ public class WcsController extends HuahengBaseController {
150 @ResponseBody 145 @ResponseBody
151 @ApiOperation("WCS任务完成") 146 @ApiOperation("WCS任务完成")
152 @ApiLogger(apiName = "WCS任务完成", from = "WCS") 147 @ApiLogger(apiName = "WCS任务完成", from = "WCS")
  148 + @AccessLimit(seconds = 5, maxCount = 5)
153 public Result completeTaskByWMS(@RequestBody TaskEntity taskEntity) { 149 public Result completeTaskByWMS(@RequestBody TaskEntity taskEntity) {
154 String taskNo = taskEntity.getTaskNo(); 150 String taskNo = taskEntity.getTaskNo();
155 String lockKey = taskNo; 151 String lockKey = taskNo;
@@ -185,6 +181,7 @@ public class WcsController extends HuahengBaseController { @@ -185,6 +181,7 @@ public class WcsController extends HuahengBaseController {
185 @ResponseBody 181 @ResponseBody
186 @ApiOperation("到达拣选台") 182 @ApiOperation("到达拣选台")
187 @ApiLogger(apiName = "到达拣选台", from = "WCS") 183 @ApiLogger(apiName = "到达拣选台", from = "WCS")
  184 + @AccessLimit(seconds = 5, maxCount = 5)
188 public Result arrivedNotice(@RequestBody ArriveEntity arriveEntity) { 185 public Result arrivedNotice(@RequestBody ArriveEntity arriveEntity) {
189 String taskNo = arriveEntity.getTaskNo(); 186 String taskNo = arriveEntity.getTaskNo();
190 String port = arriveEntity.getPort(); 187 String port = arriveEntity.getPort();
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/entity/WcsTask.java
1 package org.jeecg.modules.wms.api.wcs.entity; 1 package org.jeecg.modules.wms.api.wcs.entity;
2 2
  3 +import org.jeecg.utils.constant.QuantityConstant;
  4 +
3 import io.swagger.annotations.ApiModelProperty; 5 import io.swagger.annotations.ApiModelProperty;
4 import lombok.Data; 6 import lombok.Data;
5 7
@@ -92,6 +94,11 @@ public class WcsTask { @@ -92,6 +94,11 @@ public class WcsTask {
92 private String zoneCode; 94 private String zoneCode;
93 95
94 /** 96 /**
  97 + * 平台
  98 + */
  99 + @ApiModelProperty(value = "平台")
  100 + private String platform = QuantityConstant.PLATFORM_WMS;
  101 + /**
95 * 备注 102 * 备注
96 */ 103 */
97 @ApiModelProperty(value = "备注") 104 @ApiModelProperty(value = "备注")
@@ -114,4 +121,5 @@ public class WcsTask { @@ -114,4 +121,5 @@ public class WcsTask {
114 */ 121 */
115 @ApiModelProperty(value = "顺序数量") 122 @ApiModelProperty(value = "顺序数量")
116 private int sequenceNumber; 123 private int sequenceNumber;
  124 +
117 } 125 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
@@ -39,7 +39,6 @@ import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; @@ -39,7 +39,6 @@ import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
39 import org.jeecg.utils.OkHttpUtils; 39 import org.jeecg.utils.OkHttpUtils;
40 import org.jeecg.utils.StringUtils; 40 import org.jeecg.utils.StringUtils;
41 import org.jeecg.utils.constant.QuantityConstant; 41 import org.jeecg.utils.constant.QuantityConstant;
42 -import org.jeecg.utils.support.ApiLogger;  
43 import org.springframework.stereotype.Service; 42 import org.springframework.stereotype.Service;
44 import org.springframework.transaction.annotation.Transactional; 43 import org.springframework.transaction.annotation.Transactional;
45 44
@@ -262,7 +261,6 @@ public class WcsServiceImpl implements WcsService { @@ -262,7 +261,6 @@ public class WcsServiceImpl implements WcsService {
262 261
263 @Override 262 @Override
264 @Transactional(rollbackFor = Exception.class) 263 @Transactional(rollbackFor = Exception.class)
265 - @ApiLogger(apiName = "任务下发", from = "WCS")  
266 @OperationLog(bizId = "#taskHeader.getId()", bizType = "'任务追踪'", tag = "'任务下发'", extra = "''", 264 @OperationLog(bizId = "#taskHeader.getId()", bizType = "'任务追踪'", tag = "'任务下发'", extra = "''",
267 msg = "'任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", 265 msg = "'任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
268 recordReturnValue = true) 266 recordReturnValue = true)
@@ -471,7 +469,6 @@ public class WcsServiceImpl implements WcsService { @@ -471,7 +469,6 @@ public class WcsServiceImpl implements WcsService {
471 wcsTask.setTaskType(800); 469 wcsTask.setTaskType(800);
472 break; 470 break;
473 case QuantityConstant.TASK_TYPE_OVER_STATION: 471 case QuantityConstant.TASK_TYPE_OVER_STATION:
474 - case QuantityConstant.TASK_TYPE_MANY_OVER_STATION:  
475 wcsTask.setTaskType(1000); 472 wcsTask.setTaskType(1000);
476 break; 473 break;
477 default: 474 default:
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/IReceiptContainerHeaderService.java
@@ -30,7 +30,7 @@ public interface IReceiptContainerHeaderService extends IService<ReceiptContaine @@ -30,7 +30,7 @@ public interface IReceiptContainerHeaderService extends IService<ReceiptContaine
30 30
31 ReceiptContainerHeader getUnCompleteReceiptContainerByCode(String containerCode, String warehouseCode); 31 ReceiptContainerHeader getUnCompleteReceiptContainerByCode(String containerCode, String warehouseCode);
32 32
33 - public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode); 33 + Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode);
34 34
35 boolean updateStatusById(int status, int id); 35 boolean updateStatusById(int status, int id);
36 36
@@ -65,4 +65,9 @@ public interface IReceiptContainerHeaderService extends IService&lt;ReceiptContaine @@ -65,4 +65,9 @@ public interface IReceiptContainerHeaderService extends IService&lt;ReceiptContaine
65 * 更新去向toPort 65 * 更新去向toPort
66 */ 66 */
67 boolean updateToPortById(String toPort, int id); 67 boolean updateToPortById(String toPort, int id);
  68 +
  69 + /**
  70 + * 更新去向toPort和状态status
  71 + */
  72 + boolean updateToPortAndStatus(String toPort, int status, int id);
68 } 73 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
@@ -11,9 +11,7 @@ import javax.annotation.Resource; @@ -11,9 +11,7 @@ import javax.annotation.Resource;
11 11
12 import org.jeecg.common.api.vo.Result; 12 import org.jeecg.common.api.vo.Result;
13 import org.jeecg.common.exception.JeecgBootException; 13 import org.jeecg.common.exception.JeecgBootException;
14 -import org.jeecg.modules.wms.config.container.entity.Container;  
15 import org.jeecg.modules.wms.config.container.service.IContainerService; 14 import org.jeecg.modules.wms.config.container.service.IContainerService;
16 -import org.jeecg.modules.wms.config.location.entity.Location;  
17 import org.jeecg.modules.wms.config.location.service.ILocationService; 15 import org.jeecg.modules.wms.config.location.service.ILocationService;
18 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; 16 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
19 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; 17 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService;
@@ -28,6 +26,7 @@ import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService @@ -28,6 +26,7 @@ import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService
28 import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService; 26 import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService;
29 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail; 27 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
30 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; 28 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
  29 +import org.jeecg.modules.wms.task.taskHeader.entity.TaskLockEntity;
31 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService; 30 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
32 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; 31 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
33 import org.jeecg.utils.StringUtils; 32 import org.jeecg.utils.StringUtils;
@@ -115,63 +114,40 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai @@ -115,63 +114,40 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
115 public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) { 114 public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) {
116 log.info("开始创建入库任务"); 115 log.info("开始创建入库任务");
117 if (!receiptContainerHeader.getWarehouseCode().equals(warehouseCode)) { 116 if (!receiptContainerHeader.getWarehouseCode().equals(warehouseCode)) {
118 - return Result.error("id:" + receiptContainerHeader.getId() + "的入库组盘不能在" + warehouseCode + "仓库操作"); 117 + return Result.error("创建入库任务, id:" + receiptContainerHeader.getId() + "的入库组盘不能在" + warehouseCode + "仓库操作");
119 } 118 }
120 String containerCode = receiptContainerHeader.getContainerCode(); 119 String containerCode = receiptContainerHeader.getContainerCode();
121 - Container container = containerService.getContainerByCode(containerCode, warehouseCode);  
122 - if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {  
123 - return Result.error("托盘已经锁定,不能生成任务");  
124 - } 120 + String fromLocationCode = receiptContainerHeader.getFromLocationCode();
  121 + String toLocationCode = receiptContainerHeader.getToLocationCode();
  122 + int taskType = receiptContainerHeader.getTaskType();
  123 + boolean success = false;
125 List<ReceiptContainerDetail> receiptContainerDetailList = 124 List<ReceiptContainerDetail> receiptContainerDetailList =
126 receiptContainerDetailService.getReceiptContainerDetailListByHeaderId(receiptContainerHeader.getId()); 125 receiptContainerDetailService.getReceiptContainerDetailListByHeaderId(receiptContainerHeader.getId());
127 if (receiptContainerDetailList.size() == 0) { 126 if (receiptContainerDetailList.size() == 0) {
128 - return Result.error("id:" + receiptContainerHeader.getId() + "的入库组盘,没有组盘明细,请先组盘!");  
129 - }  
130 - boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
131 - if (!success) {  
132 - throw new JeecgBootException("更新容器状态失败");  
133 - }  
134 - String fromLocationCode = receiptContainerHeader.getFromLocationCode();  
135 - String toLocaitonCode = receiptContainerHeader.getToLocationCode();  
136 - if (StringUtils.isNotEmpty(fromLocationCode)) {  
137 - success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
138 - if (!success) {  
139 - throw new JeecgBootException("更新起始库位状态失败");  
140 - }  
141 - }  
142 - String zoneCode = null;  
143 - if (StringUtils.isNotEmpty(toLocaitonCode)) {  
144 - if (!toLocaitonCode.equals(fromLocationCode)) {  
145 - success = locationService.updateStatus(toLocaitonCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
146 - if (!success) {  
147 - throw new JeecgBootException("更新目标库位状态失败");  
148 - }  
149 - }  
150 - Location toLocation = locationService.getLocationByCode(toLocaitonCode, warehouseCode);  
151 - if (!toLocation.getWarehouseCode().equals(warehouseCode)) {  
152 - throw new JeecgBootException("库位对应的仓库不匹配");  
153 - }  
154 - zoneCode = toLocation.getZoneCode();  
155 - // 旁边库位有任务  
156 - if (taskHeaderService.haveUncompleteTaskInNear(toLocation)) {  
157 - throw new JeecgBootException("旁边库位任务数大于0");  
158 - } 127 + return Result.error("创建入库任务, id:" + receiptContainerHeader.getId() + "的入库组盘,没有组盘明细,请先组盘!");
159 } 128 }
160 int receiptContainerStatus = receiptContainerHeader.getStatus(); 129 int receiptContainerStatus = receiptContainerHeader.getStatus();
161 if (receiptContainerStatus != QuantityConstant.RECEIPT_CONTAINER_BUILD) { 130 if (receiptContainerStatus != QuantityConstant.RECEIPT_CONTAINER_BUILD) {
162 - throw new JeecgBootException("入库组盘状态不是创建状态"); 131 + return Result.error("创建入库任务, 入库组盘状态不是创建状态");
163 } 132 }
164 String containerFillStatus = QuantityConstant.STATUS_CONTAINER_FILL_SOME; 133 String containerFillStatus = QuantityConstant.STATUS_CONTAINER_FILL_SOME;
165 if (!StringUtils.isEmpty(receiptContainerHeader.getContainerFillStatus())) { 134 if (!StringUtils.isEmpty(receiptContainerHeader.getContainerFillStatus())) {
166 containerFillStatus = receiptContainerHeader.getContainerFillStatus(); 135 containerFillStatus = receiptContainerHeader.getContainerFillStatus();
167 } 136 }
  137 + // 锁定容器和库位
  138 + Result result = taskHeaderService.createTaskLockContainerAndLocation(taskType, containerCode, fromLocationCode, toLocationCode, warehouseCode);
  139 + if (!result.isSuccess()) {
  140 + return result;
  141 + }
  142 + TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
  143 + String zoneCode = taskLockEntity.getZoneCode();
168 TaskHeader taskHeader = new TaskHeader(); 144 TaskHeader taskHeader = new TaskHeader();
169 taskHeader.setContainerCode(containerCode); 145 taskHeader.setContainerCode(containerCode);
170 taskHeader.setContainerFillStatus(containerFillStatus); 146 taskHeader.setContainerFillStatus(containerFillStatus);
171 taskHeader.setTaskType(receiptContainerHeader.getTaskType()); 147 taskHeader.setTaskType(receiptContainerHeader.getTaskType());
172 taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT); 148 taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
173 taskHeader.setFromLocationCode(fromLocationCode); 149 taskHeader.setFromLocationCode(fromLocationCode);
174 - taskHeader.setToLocationCode(toLocaitonCode); 150 + taskHeader.setToLocationCode(toLocationCode);
175 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); 151 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
176 taskHeader.setCompanyCode(receiptContainerHeader.getCompanyCode()); 152 taskHeader.setCompanyCode(receiptContainerHeader.getCompanyCode());
177 taskHeader.setReceiptContainerHeaderId(receiptContainerHeader.getId()); 153 taskHeader.setReceiptContainerHeaderId(receiptContainerHeader.getId());
@@ -180,7 +156,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai @@ -180,7 +156,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
180 taskHeader.setToPortCode(receiptContainerHeader.getToPort()); 156 taskHeader.setToPortCode(receiptContainerHeader.getToPort());
181 success = taskHeaderService.save(taskHeader); 157 success = taskHeaderService.save(taskHeader);
182 if (!success) { 158 if (!success) {
183 - throw new JeecgBootException("任务生成失败"); 159 + throw new JeecgBootException("创建入库任务, 任务生成失败");
184 } 160 }
185 int taskHeaderId = taskHeader.getId(); 161 int taskHeaderId = taskHeader.getId();
186 List<TaskDetail> taskDetailList = new ArrayList<>(); 162 List<TaskDetail> taskDetailList = new ArrayList<>();
@@ -206,7 +182,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai @@ -206,7 +182,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
206 taskDetailList.add(taskDetail); 182 taskDetailList.add(taskDetail);
207 ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()); 183 ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
208 if (receiptDetail == null) { 184 if (receiptDetail == null) {
209 - throw new JeecgBootException("根据id:" + receiptContainerDetail.getReceiptDetailId() + ",没有找到入库单详情"); 185 + throw new JeecgBootException("创建入库任务, 根据id:" + receiptContainerDetail.getReceiptDetailId() + ",没有找到入库单详情");
210 } 186 }
211 Integer receiptId = receiptDetail.getReceiptId(); 187 Integer receiptId = receiptDetail.getReceiptId();
212 receiptDetail = new ReceiptDetail(); 188 receiptDetail = new ReceiptDetail();
@@ -215,33 +191,33 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai @@ -215,33 +191,33 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
215 receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_WAIT_SHELF); 191 receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_WAIT_SHELF);
216 receiptDetailList.add(receiptDetail); 192 receiptDetailList.add(receiptDetail);
217 } 193 }
  194 + if (taskDetailList.size() == 0) {
  195 + throw new JeecgBootException("创建入库任务, 任务详情为空");
  196 + }
218 success = taskDetailService.saveBatch(taskDetailList); 197 success = taskDetailService.saveBatch(taskDetailList);
219 if (!success) { 198 if (!success) {
220 - throw new JeecgBootException("任务详情生成失败"); 199 + throw new JeecgBootException("创建入库任务, 任务详情生成失败");
221 } 200 }
222 if (receiptContainerHeader.getTaskType() == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) { 201 if (receiptContainerHeader.getTaskType() == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {
223 success = inventoryHeaderService.updateInventoryContainerStatusByContainerCode(containerCode, warehouseCode); 202 success = inventoryHeaderService.updateInventoryContainerStatusByContainerCode(containerCode, warehouseCode);
224 if (!success) { 203 if (!success) {
225 - throw new JeecgBootException("生成任务时, 更新库存头失败"); 204 + throw new JeecgBootException("创建入库任务, 更新库存头失败");
226 } 205 }
227 } 206 }
228 - ReceiptContainerHeader receiptContainerHeader1 = new ReceiptContainerHeader();  
229 - receiptContainerHeader1.setId(receiptContainerHeader.getId());  
230 - receiptContainerHeader1.setToPort(receiptContainerHeader.getToPort());  
231 - receiptContainerHeader1.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK);  
232 - success = this.updateById(receiptContainerHeader1); 207 + success = receiptContainerHeaderService.updateToPortAndStatus(receiptContainerHeader.getToPort(), QuantityConstant.RECEIPT_CONTAINER_TASK,
  208 + receiptContainerHeader.getId());
233 if (!success) { 209 if (!success) {
234 - throw new JeecgBootException("生成任务时,更新入库组盘头失败"); 210 + throw new JeecgBootException("创建入库任务,更新入库组盘头失败");
235 } 211 }
236 success = receiptDetailService.updateBatchById(receiptDetailList); 212 success = receiptDetailService.updateBatchById(receiptDetailList);
237 if (!success) { 213 if (!success) {
238 - throw new JeecgBootException("更新入库单明细失败"); 214 + throw new JeecgBootException("创建入库任务,更新入库单明细失败");
239 } 215 }
240 List<Integer> receiptIdList = receiptDetailList.stream().map(ReceiptDetail::getReceiptId).distinct().collect(Collectors.toList()); 216 List<Integer> receiptIdList = receiptDetailList.stream().map(ReceiptDetail::getReceiptId).distinct().collect(Collectors.toList());
241 for (Integer receiptId : receiptIdList) { 217 for (Integer receiptId : receiptIdList) {
242 success = receiptHeaderService.updateReceiptHeaderStatus(receiptId); 218 success = receiptHeaderService.updateReceiptHeaderStatus(receiptId);
243 if (!success) { 219 if (!success) {
244 - throw new JeecgBootException("更新入库单明细失败"); 220 + throw new JeecgBootException("创建入库任务, 更新入库单明细失败");
245 } 221 }
246 } 222 }
247 LogRecordContext.putVariable("taskHeader", taskHeader);// 操作日志收集 223 LogRecordContext.putVariable("taskHeader", taskHeader);// 操作日志收集
@@ -447,4 +423,14 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai @@ -447,4 +423,14 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
447 return success; 423 return success;
448 } 424 }
449 425
  426 + @Override
  427 + public boolean updateToPortAndStatus(String toPort, int status, int id) {
  428 + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
  429 + receiptContainerHeader.setToPort(toPort);
  430 + receiptContainerHeader.setStatus(status);
  431 + receiptContainerHeader.setId(id);
  432 + boolean success = updateById(receiptContainerHeader);
  433 + return success;
  434 + }
  435 +
450 } 436 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
@@ -470,6 +470,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi @@ -470,6 +470,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
470 if (StringUtils.isEmpty(fromLocationCode)) { 470 if (StringUtils.isEmpty(fromLocationCode)) {
471 return Result.error("生成出库任务时, 出库组盘头没有起始库位号"); 471 return Result.error("生成出库任务时, 出库组盘头没有起始库位号");
472 } 472 }
  473 + // 出库时,外侧库位的任务,如果对应的内侧有任务,那么内侧任务执行完成以后,再执行出库任务。
473 Location location = locationService.getLocationByCode(fromLocationCode, warehouseCode); 474 Location location = locationService.getLocationByCode(fromLocationCode, warehouseCode);
474 if (location == null) { 475 if (location == null) {
475 return Result.error("生成出库任务时, 库位号" + fromLocationCode + "没有找到库位"); 476 return Result.error("生成出库任务时, 库位号" + fromLocationCode + "没有找到库位");
@@ -484,21 +485,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi @@ -484,21 +485,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
484 } 485 }
485 } 486 }
486 } 487 }
487 - Container container = containerService.getContainerByCode(containerCode, warehouseCode);  
488 - if (container == null) {  
489 - return Result.error("生成出库任务时, 托盘不存在" + containerCode);  
490 - }  
491 - if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {  
492 - return Result.error("生成出库任务时, 托盘已经锁定" + containerCode);  
493 - }  
494 - boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
495 - if (!success) {  
496 - throw new JeecgBootException("生成出库任务时, 更新容器失败" + containerCode);  
497 - }  
498 - success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
499 - if (!success) {  
500 - throw new JeecgBootException("生成出库任务时, 更新库位失败" + fromLocationCode);  
501 - } 488 + // 根据出库数量,判断任务类型
502 List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); 489 List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode);
503 BigDecimal inventoryTotal = BigDecimal.ZERO; 490 BigDecimal inventoryTotal = BigDecimal.ZERO;
504 for (InventoryDetail inventoryDetail : inventoryDetailList) { 491 for (InventoryDetail inventoryDetail : inventoryDetailList) {
@@ -521,6 +508,11 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi @@ -521,6 +508,11 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
521 if (shipmentTaskRule == QuantityConstant.RULE_TASK_PICK_SHIPMENT) { 508 if (shipmentTaskRule == QuantityConstant.RULE_TASK_PICK_SHIPMENT) {
522 taskType = QuantityConstant.TASK_TYPE_SORTINGSHIPMENT; 509 taskType = QuantityConstant.TASK_TYPE_SORTINGSHIPMENT;
523 } 510 }
  511 + // 锁定容器、库位
  512 + Result result = taskHeaderService.createTaskLockContainerAndLocation(taskType, containerCode, fromLocationCode, toLocationCode, warehouseCode);
  513 + if (!result.isSuccess()) {
  514 + return result;
  515 + }
524 String zoneCode = location.getZoneCode(); 516 String zoneCode = location.getZoneCode();
525 TaskHeader taskHeader = new TaskHeader(); 517 TaskHeader taskHeader = new TaskHeader();
526 taskHeader.setPreTaskNo(preTaskNo); 518 taskHeader.setPreTaskNo(preTaskNo);
@@ -539,7 +531,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi @@ -539,7 +531,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
539 taskHeader.setToLocationCode(toLocationCode); 531 taskHeader.setToLocationCode(toLocationCode);
540 } 532 }
541 taskHeader.setShipmentContainerHeaderId(shipmentContainerHeader.getId()); 533 taskHeader.setShipmentContainerHeaderId(shipmentContainerHeader.getId());
542 - success = taskHeaderService.save(taskHeader); 534 + boolean success = taskHeaderService.save(taskHeader);
543 if (!success) { 535 if (!success) {
544 throw new JeecgBootException("生成出库任务时, 创建任务失败"); 536 throw new JeecgBootException("生成出库任务时, 创建任务失败");
545 } 537 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskLockEntity.java 0 → 100644
  1 +package org.jeecg.modules.wms.task.taskHeader.entity;
  2 +
  3 +import lombok.Data;
  4 +
  5 +@Data
  6 +public class TaskLockEntity {
  7 +
  8 + private String zoneCode;
  9 +}
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
@@ -318,4 +318,35 @@ public interface ITaskHeaderService extends IService&lt;TaskHeader&gt; { @@ -318,4 +318,35 @@ public interface ITaskHeaderService extends IService&lt;TaskHeader&gt; {
318 * @return 318 * @return
319 */ 319 */
320 boolean combineInventoryDetail(TaskHeader taskHeader); 320 boolean combineInventoryDetail(TaskHeader taskHeader);
  321 +
  322 + /**
  323 + * 根据任务区分,在生产任务的时候,锁定容器和库位
  324 + * @param
  325 + */
  326 + Result createTaskLockContainerAndLocation(int taskType, String containerCode, String fromLocationCode, String toLocationCode, String warehouseCode);
  327 +
  328 + /**
  329 + * 入库任务,在生产任务的时候,锁定容器和库位
  330 + * @param
  331 + */
  332 + Result createReceiptTaskLockContainerAndLocation(String containerCode, String toLocationCode, String warehouseCode);
  333 +
  334 + /**
  335 + * 出库任务,在生产任务的时候,锁定容器和库位
  336 + * @param
  337 + */
  338 + Result createShipmentTaskLockContainerAndLocation(String containerCode, String warehouseCode);
  339 +
  340 + /**
  341 + * 分拣任务,在生产任务的时候,锁定容器和库位
  342 + * @param
  343 + */
  344 + Result createSortTaskLockContainerAndLocation(String containerCode, String fromLocationCode, String toLocationCode, String warehouseCode);
  345 +
  346 + /**
  347 + * 跨站任务,在生产任务的时候,锁定容器和库位
  348 + * @param
  349 + */
  350 + Result createOverStationTaskLockContainer(String containerCode, String warehouseCode);
  351 +
321 } 352 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -53,6 +53,7 @@ import org.jeecg.modules.wms.stocktaking.cycleCountDetail.service.impl.CycleCoun @@ -53,6 +53,7 @@ import org.jeecg.modules.wms.stocktaking.cycleCountDetail.service.impl.CycleCoun
53 import org.jeecg.modules.wms.stocktaking.cycleCountHeader.service.impl.CycleCountHeaderServiceImpl; 53 import org.jeecg.modules.wms.stocktaking.cycleCountHeader.service.impl.CycleCountHeaderServiceImpl;
54 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail; 54 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
55 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; 55 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
  56 +import org.jeecg.modules.wms.task.taskHeader.entity.TaskLockEntity;
56 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskDetailMapper; 57 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskDetailMapper;
57 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper; 58 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper;
58 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService; 59 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
@@ -183,6 +184,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -183,6 +184,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
183 @Transactional(rollbackFor = Exception.class) 184 @Transactional(rollbackFor = Exception.class)
184 public Result<TaskHeader> createTransferTask(String fromLocationCode, String toLocationCode, String warehouseCode) { 185 public Result<TaskHeader> createTransferTask(String fromLocationCode, String toLocationCode, String warehouseCode) {
185 log.info("开始创建移库任务,起始库位" + fromLocationCode + ",目标库位" + toLocationCode); 186 log.info("开始创建移库任务,起始库位" + fromLocationCode + ",目标库位" + toLocationCode);
  187 + int preTaskNo = 0;
186 if (StringUtils.isEmpty(fromLocationCode)) { 188 if (StringUtils.isEmpty(fromLocationCode)) {
187 return Result.error("创建移库任务时,起始库位为空"); 189 return Result.error("创建移库任务时,起始库位为空");
188 } 190 }
@@ -190,18 +192,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -190,18 +192,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
190 return Result.error("创建移库任务时,目标库位为空"); 192 return Result.error("创建移库任务时,目标库位为空");
191 } 193 }
192 Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); 194 Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
193 - Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);  
194 - Integer preTaskNo = 0;  
195 - // 1. 判断起点库位和终点库位是否满足移库条件  
196 if (fromLocation == null) { 195 if (fromLocation == null) {
197 return Result.error("创建移库任务时,起始库位:" + fromLocationCode + "未找到"); 196 return Result.error("创建移库任务时,起始库位:" + fromLocationCode + "未找到");
198 } 197 }
199 - if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(fromLocation.getStatus())) {  
200 - return Result.error("创建移库任务时,起始库位:" + fromLocationCode + "状态非空闲");  
201 - }  
202 - if (StringUtils.isEmpty(fromLocation.getContainerCode())) {  
203 - return Result.error("创建移库任务时,起始库位:" + fromLocationCode + "不存在托盘"); 198 + Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);
  199 + if (fromLocation == null) {
  200 + return Result.error("创建移库任务时,起始库位:" + fromLocationCode + "未找到");
204 } 201 }
  202 + String containerCode = fromLocation.getContainerCode();
205 // 这里增加组盘校验,如果此托盘存在未完成的组盘数据,则不能移库 203 // 这里增加组盘校验,如果此托盘存在未完成的组盘数据,则不能移库
206 // 校验入库组盘 204 // 校验入库组盘
207 if (receiptContainerHeaderService.havaUnCompleteCombineByLocationCode(fromLocationCode, warehouseCode)) { 205 if (receiptContainerHeaderService.havaUnCompleteCombineByLocationCode(fromLocationCode, warehouseCode)) {
@@ -212,15 +210,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -212,15 +210,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
212 return Result.error("创建移库任务时,起始库位:" + fromLocationCode + "存在出库组盘,不能移库"); 210 return Result.error("创建移库任务时,起始库位:" + fromLocationCode + "存在出库组盘,不能移库");
213 } 211 }
214 212
215 - if (toLocation == null) {  
216 - return Result.error("创建移库任务时,目标库位:" + toLocationCode + "未找到");  
217 - }  
218 - if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(toLocation.getStatus())) {  
219 - return Result.error("创建移库任务时,目标库位:" + toLocationCode + "状态非空闲");  
220 - }  
221 - if (StringUtils.isNotEmpty(toLocation.getContainerCode())) {  
222 - return Result.error("创建移库任务时,目标库位:" + toLocationCode + "存在托盘");  
223 - }  
224 // 校验入库组盘 213 // 校验入库组盘
225 if (receiptContainerHeaderService.havaUnCompleteCombineByLocationCode(toLocationCode, warehouseCode)) { 214 if (receiptContainerHeaderService.havaUnCompleteCombineByLocationCode(toLocationCode, warehouseCode)) {
226 return Result.error("创建移库任务时,目标库位:" + toLocationCode + "存在入库组盘,不能移库"); 215 return Result.error("创建移库任务时,目标库位:" + toLocationCode + "存在入库组盘,不能移库");
@@ -232,7 +221,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -232,7 +221,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
232 if (taskHeaderService.haveUncompleteTaskInNear(toLocation)) { 221 if (taskHeaderService.haveUncompleteTaskInNear(toLocation)) {
233 return Result.error("创建移库任务时,目标库位:" + toLocationCode + "旁边存在任务,请完成任务以后再分配"); 222 return Result.error("创建移库任务时,目标库位:" + toLocationCode + "旁边存在任务,请完成任务以后再分配");
234 } 223 }
235 -  
236 if (!fromLocation.getRoadWay().equals(toLocation.getRoadWay())) { 224 if (!fromLocation.getRoadWay().equals(toLocation.getRoadWay())) {
237 return Result.error("创建移库任务时,目标库位和源库位不在同一个巷道"); 225 return Result.error("创建移库任务时,目标库位和源库位不在同一个巷道");
238 } 226 }
@@ -266,6 +254,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -266,6 +254,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
266 } 254 }
267 } 255 }
268 256
  257 + Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_TRANSFER, containerCode, fromLocationCode, toLocationCode,
  258 + warehouseCode);
  259 + if (!result.isSuccess()) {
  260 + return result;
  261 + }
269 // 4. 判断源库位旁边有托盘但是没有任务,那么不允许移库 262 // 4. 判断源库位旁边有托盘但是没有任务,那么不允许移库
270 TaskHeader taskHeader = new TaskHeader(); 263 TaskHeader taskHeader = new TaskHeader();
271 taskHeader.setWarehouseCode(warehouseCode); 264 taskHeader.setWarehouseCode(warehouseCode);
@@ -281,21 +274,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -281,21 +274,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
281 if (!success) { 274 if (!success) {
282 throw new JeecgBootException("创建移库任务时,创建任务失败"); 275 throw new JeecgBootException("创建移库任务时,创建任务失败");
283 } 276 }
284 -  
285 - success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
286 - if (!success) {  
287 - throw new JeecgBootException("创建移库任务时, 起始库位" + fromLocationCode + "更新失败");  
288 - }  
289 - success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
290 - if (!success) {  
291 - throw new JeecgBootException("创建移库任务时, 终点库位" + toLocationCode + "更新失败");  
292 - }  
293 - success = containerService.updateStatus(fromLocation.getContainerCode(), QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
294 log.info("完成创建移库任务,起始库位" + fromLocationCode + ",目的库位" + toLocationCode); 277 log.info("完成创建移库任务,起始库位" + fromLocationCode + ",目的库位" + toLocationCode);
295 - if (!success) {  
296 - throw new JeecgBootException("创建移库任务时,容器" + fromLocation.getContainerCode() + "更新失败");  
297 - }  
298 return Result.OK("创建移库任务成功", taskHeader); 278 return Result.OK("创建移库任务成功", taskHeader);
  279 +
299 } 280 }
300 281
301 @Override 282 @Override
@@ -315,10 +296,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -315,10 +296,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
315 if (container == null) { 296 if (container == null) {
316 return Result.error("创建出库查看任务时,容器为空"); 297 return Result.error("创建出库查看任务时,容器为空");
317 } 298 }
318 - if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {  
319 - return Result.error("创建出库查看任务时,容器是锁定状态");  
320 - }  
321 String fromLocationCode = container.getLocationCode(); 299 String fromLocationCode = container.getLocationCode();
  300 + String toLocationCode = QuantityConstant.EMPTY_STRING;
  301 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
  302 + int taskLocationRule = Integer.parseInt(value);
  303 + if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
  304 + toLocationCode = fromLocationCode;
  305 + }
322 if (StringUtils.isEmpty(fromLocationCode)) { 306 if (StringUtils.isEmpty(fromLocationCode)) {
323 return Result.error("创建出库查看任务时,容器不在库位上"); 307 return Result.error("创建出库查看任务时,容器不在库位上");
324 } 308 }
@@ -331,6 +315,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -331,6 +315,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
331 if (port == null) { 315 if (port == null) {
332 return Result.error("创建出库查看任务时,没有找到出库口:" + toPortCode); 316 return Result.error("创建出库查看任务时,没有找到出库口:" + toPortCode);
333 } 317 }
  318 + Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_CHECK_OUT, containerCode, fromLocationCode, toLocationCode,
  319 + warehouseCode);
  320 + if (!result.isSuccess()) {
  321 + return result;
  322 + }
334 boolean success = false; 323 boolean success = false;
335 LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); 324 LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
336 inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getWarehouseCode, warehouseCode) 325 inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getWarehouseCode, warehouseCode)
@@ -350,14 +339,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -350,14 +339,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
350 throw new JeecgBootException("创建出库查看任务时,更新库存详情失败"); 339 throw new JeecgBootException("创建出库查看任务时,更新库存详情失败");
351 } 340 }
352 } 341 }
353 - success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
354 - if (!success) {  
355 - throw new JeecgBootException("创建出库查看任务时,更新库位状态失败");  
356 - }  
357 - success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
358 - if (!success) {  
359 - throw new JeecgBootException("创建出库查看任务时,更新容器状态失败");  
360 - }  
361 TaskHeader taskHeader = new TaskHeader(); 342 TaskHeader taskHeader = new TaskHeader();
362 taskHeader.setWarehouseCode(warehouseCode); 343 taskHeader.setWarehouseCode(warehouseCode);
363 taskHeader.setTaskType(QuantityConstant.TASK_TYPE_CHECK_OUT); 344 taskHeader.setTaskType(QuantityConstant.TASK_TYPE_CHECK_OUT);
@@ -366,11 +347,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -366,11 +347,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
366 taskHeader.setZoneCode(zoneCode); 347 taskHeader.setZoneCode(zoneCode);
367 taskHeader.setFromLocationCode(fromLocationCode); 348 taskHeader.setFromLocationCode(fromLocationCode);
368 taskHeader.setToPortCode(toPortCode); 349 taskHeader.setToPortCode(toPortCode);
369 - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);  
370 - int taskLocationRule = Integer.parseInt(value);  
371 - if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {  
372 - taskHeader.setToLocationCode(fromLocationCode);  
373 - } 350 + taskHeader.setToLocationCode(toLocationCode);
374 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); 351 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
375 success = taskHeaderService.save(taskHeader); 352 success = taskHeaderService.save(taskHeader);
376 log.info("完成创建出库查看任务,容器编码" + containerCode + "目标站台号" + toPortCode); 353 log.info("完成创建出库查看任务,容器编码" + containerCode + "目标站台号" + toPortCode);
@@ -396,16 +373,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -396,16 +373,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
396 if (StringUtils.isEmpty(warehouseCode)) { 373 if (StringUtils.isEmpty(warehouseCode)) {
397 return Result.error("创建跨站任务时,仓库编码为空"); 374 return Result.error("创建跨站任务时,仓库编码为空");
398 } 375 }
399 - Container container = containerService.getContainerByCode(containerCode, warehouseCode);  
400 - if (container == null) {  
401 - return Result.error("创建跨站任务时,容器为空");  
402 - }  
403 - if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {  
404 - return Result.error("创建跨站任务时, 容器状态不为空闲状态");  
405 - }  
406 - if (!container.getFillStatus().equals(QuantityConstant.STATUS_CONTAINER_FILL_EMPTY)) {  
407 - return Result.error("创建跨站任务时,容器状态不为空托盘");  
408 - }  
409 Port fromPort = portService.getPortByCode(fromPortCode, warehouseCode); 376 Port fromPort = portService.getPortByCode(fromPortCode, warehouseCode);
410 if (fromPort == null) { 377 if (fromPort == null) {
411 return Result.error("创建跨站任务时,起始站台为空"); 378 return Result.error("创建跨站任务时,起始站台为空");
@@ -414,7 +381,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -414,7 +381,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
414 if (toPort == null) { 381 if (toPort == null) {
415 return Result.error("创建跨站任务时,目标站台为空"); 382 return Result.error("创建跨站任务时,目标站台为空");
416 } 383 }
417 - 384 + Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_OVER_STATION, containerCode, QuantityConstant.EMPTY_STRING,
  385 + QuantityConstant.EMPTY_STRING, warehouseCode);
  386 + if (!result.isSuccess()) {
  387 + return result;
  388 + }
418 TaskHeader taskHeader = new TaskHeader(); 389 TaskHeader taskHeader = new TaskHeader();
419 taskHeader.setWarehouseCode(warehouseCode); 390 taskHeader.setWarehouseCode(warehouseCode);
420 taskHeader.setContainerCode(containerCode); 391 taskHeader.setContainerCode(containerCode);
@@ -427,11 +398,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -427,11 +398,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
427 if (!success) { 398 if (!success) {
428 return Result.error("创建跨站任务时, 创建任务失败"); 399 return Result.error("创建跨站任务时, 创建任务失败");
429 } 400 }
430 - success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
431 log.info("完成创建跨站任务,容器号" + containerCode + ",起始站台号" + fromPortCode + ",目标站台号" + toPortCode); 401 log.info("完成创建跨站任务,容器号" + containerCode + ",起始站台号" + fromPortCode + ",目标站台号" + toPortCode);
432 - if (!success) {  
433 - return Result.error("创建跨站任务时, 更新容器状态失败");  
434 - }  
435 return Result.ok("创建跨站任务成功"); 402 return Result.ok("创建跨站任务成功");
436 } 403 }
437 404
@@ -511,35 +478,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -511,35 +478,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
511 } 478 }
512 log.info("开始创建空托盘组入库任务,容器编码" + containerCode + ",库位编码" + toLocationCode); 479 log.info("开始创建空托盘组入库任务,容器编码" + containerCode + ",库位编码" + toLocationCode);
513 String zoneCode = null; 480 String zoneCode = null;
514 - Container container = containerService.getContainerByCode(containerCode, warehouseCode);  
515 - if (container == null) {  
516 - return Result.error("创建空托盘组入库任务时,没有找到容器");  
517 - }  
518 - if (StringUtils.isNotEmpty(container.getLocationCode())) {  
519 - return Result.error("创建空托盘组入库任务时, 容器已在库位" + container.getLocationCode() + "上");  
520 - }  
521 - if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {  
522 - return Result.error("创建空托盘组入库任务时,容器状态不为空闲状态");  
523 - }  
524 - if (!container.getFillStatus().equals(QuantityConstant.STATUS_CONTAINER_FILL_EMPTY)) {  
525 - return Result.error("创建空托盘组入库任务时,容器状态不为空托盘");  
526 - }  
527 - boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
528 - if (!success) {  
529 - throw new JeecgBootException("创建空托盘组入库任务时, 更新容器状态失败"); 481 + Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT, containerCode,
  482 + QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
  483 + if (!result.isSuccess()) {
  484 + return result;
530 } 485 }
531 if (StringUtils.isNotEmpty(toLocationCode)) { 486 if (StringUtils.isNotEmpty(toLocationCode)) {
532 Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode); 487 Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);
533 - if (toLocation == null) {  
534 - return Result.error("创建空托盘组入库任务时,没有找到目标库位");  
535 - }  
536 - if (!toLocation.getStatus().equals(QuantityConstant.STATUS_LOCATION_EMPTY)) {  
537 - return Result.error("创建空托盘组入库任务时,目标库位状态不是空闲");  
538 - }  
539 - success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
540 - if (!success) {  
541 - throw new JeecgBootException("创建空托盘组入库任务时, 更新库位状态失败");  
542 - }  
543 zoneCode = toLocation.getZoneCode(); 488 zoneCode = toLocation.getZoneCode();
544 } 489 }
545 TaskHeader taskHeader = new TaskHeader(); 490 TaskHeader taskHeader = new TaskHeader();
@@ -550,7 +495,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -550,7 +495,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
550 taskHeader.setToLocationCode(toLocationCode); 495 taskHeader.setToLocationCode(toLocationCode);
551 taskHeader.setZoneCode(zoneCode); 496 taskHeader.setZoneCode(zoneCode);
552 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); 497 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
553 - success = taskHeaderService.save(taskHeader); 498 + boolean success = taskHeaderService.save(taskHeader);
554 log.info("完成创建空托盘组入库任务,容器编码" + containerCode + ",库位编码" + toLocationCode); 499 log.info("完成创建空托盘组入库任务,容器编码" + containerCode + ",库位编码" + toLocationCode);
555 if (!success) { 500 if (!success) {
556 throw new JeecgBootException("创建空托盘组入库任务时, 创建任务失败"); 501 throw new JeecgBootException("创建空托盘组入库任务时, 创建任务失败");
@@ -571,20 +516,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -571,20 +516,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
571 if (StringUtils.isEmpty(warehouseCode)) { 516 if (StringUtils.isEmpty(warehouseCode)) {
572 return Result.error("创建空托盘组出库任务时,仓库编码为空"); 517 return Result.error("创建空托盘组出库任务时,仓库编码为空");
573 } 518 }
574 - Container container = containerService.getContainerByCode(containerCode, warehouseCode);  
575 - if (container == null) {  
576 - return Result.error("创建空托盘组出库任务时, 没有找到容器:" + containerCode);  
577 - }  
578 - if (!QuantityConstant.STATUS_CONTAINER_EMPTY.equals(container.getStatus())) {  
579 - return Result.error("创建空托盘组出库任务时, 容器状态不为空闲状态");  
580 - }  
581 - if (!QuantityConstant.STATUS_CONTAINER_FILL_MANY.equals(container.getFillStatus())) {  
582 - return Result.error("创建空托盘组出库任务时, 容器填充状态不为空托盘组状态"); 519 + Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT, containerCode,
  520 + QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode);
  521 + if (!result.isSuccess()) {
  522 + return result;
583 } 523 }
  524 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
584 String fromLocationCode = container.getLocationCode(); 525 String fromLocationCode = container.getLocationCode();
585 - if (StringUtils.isEmpty(fromLocationCode)) {  
586 - return Result.error("创建空托盘组出库任务时, 该容器不在库位上");  
587 - }  
588 Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); 526 Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
589 if (fromLocation == null) { 527 if (fromLocation == null) {
590 return Result.error("创建空托盘组出库任务时, 没有找到库位:" + fromLocationCode); 528 return Result.error("创建空托盘组出库任务时, 没有找到库位:" + fromLocationCode);
@@ -593,14 +531,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -593,14 +531,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
593 if (StringUtils.isEmpty(zoneCode)) { 531 if (StringUtils.isEmpty(zoneCode)) {
594 return Result.error("创建空托盘组出库任务时, 库区为空"); 532 return Result.error("创建空托盘组出库任务时, 库区为空");
595 } 533 }
596 - boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
597 - if (!success) {  
598 - throw new JeecgBootException("创建空托盘组出库任务时, 更新容器状态失败");  
599 - }  
600 - success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
601 - if (!success) {  
602 - throw new JeecgBootException("创建空托盘组出库任务时, 更新库位状态失败");  
603 - }  
604 TaskHeader taskHeader = new TaskHeader(); 534 TaskHeader taskHeader = new TaskHeader();
605 taskHeader.setWarehouseCode(warehouseCode); 535 taskHeader.setWarehouseCode(warehouseCode);
606 taskHeader.setZoneCode(zoneCode); 536 taskHeader.setZoneCode(zoneCode);
@@ -610,7 +540,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -610,7 +540,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
610 taskHeader.setFromLocationCode(fromLocationCode); 540 taskHeader.setFromLocationCode(fromLocationCode);
611 taskHeader.setToPortCode(toPortCode); 541 taskHeader.setToPortCode(toPortCode);
612 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); 542 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
613 - success = taskHeaderService.save(taskHeader); 543 + boolean success = taskHeaderService.save(taskHeader);
614 log.info("完成创建空托盘组出库任务,容器编码" + containerCode + ",去向位置编码" + toPortCode); 544 log.info("完成创建空托盘组出库任务,容器编码" + containerCode + ",去向位置编码" + toPortCode);
615 if (!success) { 545 if (!success) {
616 throw new JeecgBootException("创建空托盘组出库任务时,生成任务失败"); 546 throw new JeecgBootException("创建空托盘组出库任务时,生成任务失败");
@@ -982,36 +912,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -982,36 +912,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
982 if (StringUtils.isEmpty(warehouseCode)) { 912 if (StringUtils.isEmpty(warehouseCode)) {
983 return Result.error("创建空托盘入库时, 仓库编码为空"); 913 return Result.error("创建空托盘入库时, 仓库编码为空");
984 } 914 }
985 - Container container = containerService.getContainerByCode(containerCode, warehouseCode);  
986 - if (container == null) {  
987 - return Result.error("创建空托盘入库时, 没有找到托盘" + containerCode);  
988 - }  
989 - if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {  
990 - return Result.error("创建空托盘入库时, 托盘状态并非空托盘状态");  
991 - }  
992 - if (StringUtils.isNotEmpty(container.getLocationCode())) {  
993 - return Result.error("创建空托盘入库时, 容器已在库位" + container.getLocationCode() + "上");  
994 - }  
995 915
996 - if (StringUtils.isNotEmpty(toLocationCode)) {  
997 - Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);  
998 - if (toLocation == null) {  
999 - return Result.error("创建空托盘入库时," + toLocationCode + "目标库位不存在");  
1000 - }  
1001 - if (StringUtils.isNotEmpty(toLocation.getContainerCode())) {  
1002 - return Result.error("创建空托盘入库时," + toLocationCode + "上已存在容器" + toLocation.getContainerCode());  
1003 - }  
1004 - if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(toLocation.getStatus())) {  
1005 - return Result.error("创建空托盘入库时, 目标库位非空闲");  
1006 - }  
1007 - boolean success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
1008 - if (!success) {  
1009 - throw new JeecgBootException("创建空托盘入库时,更新库位状态失败");  
1010 - }  
1011 - }  
1012 - boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
1013 - if (!success) {  
1014 - throw new JeecgBootException("创建空托盘入库时,更新容器状态失败"); 916 + Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYRECEIPT, containerCode, QuantityConstant.EMPTY_STRING,
  917 + toLocationCode, warehouseCode);
  918 + if (!result.isSuccess()) {
  919 + return result;
1015 } 920 }
1016 TaskHeader taskHeader = new TaskHeader(); 921 TaskHeader taskHeader = new TaskHeader();
1017 taskHeader.setWarehouseCode(warehouseCode); 922 taskHeader.setWarehouseCode(warehouseCode);
@@ -1020,7 +925,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1020,7 +925,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1020 taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT); 925 taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
1021 taskHeader.setToLocationCode(toLocationCode); 926 taskHeader.setToLocationCode(toLocationCode);
1022 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); 927 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
1023 - success = taskHeaderService.save(taskHeader); 928 + boolean success = taskHeaderService.save(taskHeader);
1024 log.info("完成创建空托入库任务"); 929 log.info("完成创建空托入库任务");
1025 if (!success) { 930 if (!success) {
1026 throw new JeecgBootException("创建空托盘入库时,保存任务失败"); 931 throw new JeecgBootException("创建空托盘入库时,保存任务失败");
@@ -1049,15 +954,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1049,15 +954,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1049 return Result.error("创建空托盘出库时, 仓库编码为空"); 954 return Result.error("创建空托盘出库时, 仓库编码为空");
1050 } 955 }
1051 Container container = containerService.getContainerByCode(containerCode, warehouseCode); 956 Container container = containerService.getContainerByCode(containerCode, warehouseCode);
1052 - if (container == null) {  
1053 - return Result.error("创建空托盘出库时, 没有找到托盘" + containerCode);  
1054 - }  
1055 - if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {  
1056 - return Result.error("创建空托盘出库时, 托盘状态并非空托盘状态");  
1057 - }  
1058 String fromLocationCode = container.getLocationCode(); 957 String fromLocationCode = container.getLocationCode();
1059 - if (StringUtils.isEmpty(fromLocationCode)) {  
1060 - return Result.error("创建空托盘出库时, 容器不在库位上"); 958 + Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT, containerCode, QuantityConstant.EMPTY_STRING,
  959 + QuantityConstant.EMPTY_STRING, warehouseCode);
  960 + if (!result.isSuccess()) {
  961 + return result;
1061 } 962 }
1062 Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode); 963 Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
1063 if (fromLocation == null) { 964 if (fromLocation == null) {
@@ -1071,14 +972,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1071,14 +972,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1071 if (port == null) { 972 if (port == null) {
1072 return Result.error("创建空托盘出库时, 没有找到出库口" + toPortCode); 973 return Result.error("创建空托盘出库时, 没有找到出库口" + toPortCode);
1073 } 974 }
1074 - boolean success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);  
1075 - if (!success) {  
1076 - throw new JeecgBootException("创建空托盘出库时,更新库位状态失败");  
1077 - }  
1078 - success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);  
1079 - if (!success) {  
1080 - throw new JeecgBootException("创建空托盘出库时,更新容器状态失败");  
1081 - }  
1082 TaskHeader taskHeader = new TaskHeader(); 975 TaskHeader taskHeader = new TaskHeader();
1083 taskHeader.setWarehouseCode(warehouseCode); 976 taskHeader.setWarehouseCode(warehouseCode);
1084 taskHeader.setZoneCode(zoneCode); 977 taskHeader.setZoneCode(zoneCode);
@@ -1088,7 +981,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1088,7 +981,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1088 taskHeader.setFromLocationCode(fromLocationCode); 981 taskHeader.setFromLocationCode(fromLocationCode);
1089 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); 982 taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
1090 taskHeader.setToPortCode(toPortCode); 983 taskHeader.setToPortCode(toPortCode);
1091 - success = taskHeaderService.save(taskHeader); 984 + boolean success = taskHeaderService.save(taskHeader);
1092 log.info("完成创建空托出库任务" + containerCode); 985 log.info("完成创建空托出库任务" + containerCode);
1093 if (!success) { 986 if (!success) {
1094 throw new JeecgBootException("创建空托盘出库时,保存任务失败"); 987 throw new JeecgBootException("创建空托盘出库时,保存任务失败");
@@ -1238,7 +1131,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1238,7 +1131,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1238 if (!success) { 1131 if (!success) {
1239 throw new JeecgBootException("完成入库任务时,更新入库组盘头表状态失败"); 1132 throw new JeecgBootException("完成入库任务时,更新入库组盘头表状态失败");
1240 } 1133 }
1241 -  
1242 success = inventoryDetailService.saveBatch(inventoryDetailList); 1134 success = inventoryDetailService.saveBatch(inventoryDetailList);
1243 if (!success) { 1135 if (!success) {
1244 throw new JeecgBootException("完成入库任务时,保存库存详情失败"); 1136 throw new JeecgBootException("完成入库任务时,保存库存详情失败");
@@ -1578,6 +1470,204 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1578,6 +1470,204 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1578 } 1470 }
1579 1471
1580 /** 1472 /**
  1473 + * 锁定容器和库位分4种情况,入库任务、出库任务、分拣任务、换站任务
  1474 + * @param
  1475 + */
  1476 + @Override
  1477 + @Transactional(rollbackFor = Exception.class)
  1478 + public Result createTaskLockContainerAndLocation(int taskType, String containerCode, String fromLocationCode, String toLocationCode, String warehouseCode) {
  1479 + Result result = null;
  1480 + switch (taskType) {
  1481 + case QuantityConstant.TASK_TYPE_WHOLERECEIPT:
  1482 + case QuantityConstant.TASK_TYPE_EMPTYRECEIPT:
  1483 + case QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT:
  1484 + result = taskHeaderService.createReceiptTaskLockContainerAndLocation(containerCode, toLocationCode, warehouseCode);
  1485 + break;
  1486 + case QuantityConstant.TASK_TYPE_WHOLESHIPMENT:
  1487 + case QuantityConstant.TASK_TYPE_EMPTYSHIPMENT:
  1488 + case QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT:
  1489 + result = taskHeaderService.createShipmentTaskLockContainerAndLocation(containerCode, warehouseCode);
  1490 + break;
  1491 + case QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT:
  1492 + case QuantityConstant.TASK_TYPE_SORTINGSHIPMENT:
  1493 + case QuantityConstant.TASK_TYPE_CYCLECOUNT:
  1494 + case QuantityConstant.TASK_TYPE_TRANSFER:
  1495 + case QuantityConstant.TASK_TYPE_CHECK_OUT:
  1496 + result = taskHeaderService.createSortTaskLockContainerAndLocation(containerCode, fromLocationCode, toLocationCode, warehouseCode);
  1497 + break;
  1498 + case QuantityConstant.TASK_TYPE_OVER_STATION:
  1499 + result = taskHeaderService.createOverStationTaskLockContainer(containerCode, warehouseCode);
  1500 + break;
  1501 + }
  1502 + return result;
  1503 + }
  1504 +
  1505 + @Override
  1506 + @Transactional(rollbackFor = Exception.class)
  1507 + public Result createReceiptTaskLockContainerAndLocation(String containerCode, String toLocationCode, String warehouseCode) {
  1508 + boolean success = false;
  1509 + TaskLockEntity taskLockEntity = new TaskLockEntity();
  1510 + String zoneCode = null;
  1511 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  1512 + if (container == null) {
  1513 + return Result.error("创建入库任务时, 没有找到托盘" + containerCode);
  1514 + }
  1515 + if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {
  1516 + return Result.error("创建入库任务时, 托盘状态并非空闲状态");
  1517 + }
  1518 + if (StringUtils.isNotEmpty(container.getLocationCode())) {
  1519 + return Result.error("创建入库任务时, 容器已在库位" + container.getLocationCode() + "上");
  1520 + }
  1521 + if (StringUtils.isNotEmpty(toLocationCode)) {
  1522 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_ALLOCATION);
  1523 + if (StringUtils.isEmpty(value)) {
  1524 + return Result.error("创建入库任务时, 未绑定定位规则");
  1525 + }
  1526 + int allocationRule = Integer.parseInt(value);
  1527 + if (allocationRule == QuantityConstant.DOUBLE_FORK) {
  1528 + return Result.error("创建入库任务时, 双伸位库位不能手动指定库位");
  1529 + }
  1530 + Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);
  1531 + if (toLocation == null) {
  1532 + return Result.error("创建入库任务时," + toLocationCode + "目标库位不存在");
  1533 + }
  1534 + if (StringUtils.isNotEmpty(toLocation.getContainerCode())) {
  1535 + return Result.error("创建入库任务时," + toLocationCode + "上已存在容器" + toLocation.getContainerCode());
  1536 + }
  1537 + if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(toLocation.getStatus())) {
  1538 + return Result.error("创建入库任务时, 目标库位非空闲");
  1539 + }
  1540 + zoneCode = toLocation.getZoneCode();
  1541 + }
  1542 + taskLockEntity.setZoneCode(zoneCode);
  1543 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
  1544 + if (!success) {
  1545 + throw new JeecgBootException("创建入库任务时,更新容器状态失败");
  1546 + }
  1547 + if (StringUtils.isNotEmpty(toLocationCode)) {
  1548 + success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
  1549 + if (!success) {
  1550 + throw new JeecgBootException("创建入库任务时,更新库位状态失败");
  1551 + }
  1552 + }
  1553 + return Result.OK("创建入库任务成功", taskLockEntity);
  1554 + }
  1555 +
  1556 + @Override
  1557 + @Transactional(rollbackFor = Exception.class)
  1558 + public Result createShipmentTaskLockContainerAndLocation(String containerCode, String warehouseCode) {
  1559 + boolean success = false;
  1560 + TaskLockEntity taskLockEntity = new TaskLockEntity();
  1561 + String zoneCode = null;
  1562 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  1563 + if (container == null) {
  1564 + return Result.error("创建出库任务时, 没有找到托盘" + containerCode);
  1565 + }
  1566 + if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {
  1567 + return Result.error("创建出库任务时, 托盘状态并非空闲状态");
  1568 + }
  1569 + if (StringUtils.isEmpty(container.getLocationCode())) {
  1570 + return Result.error("创建出库任务时, 容器不在库位" + container.getLocationCode() + "上");
  1571 + }
  1572 + String fromLocationCode = container.getLocationCode();
  1573 + Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
  1574 + if (fromLocation == null) {
  1575 + return Result.error("创建出库任务时, 起始库位为空");
  1576 + }
  1577 + if (StringUtils.isEmpty(fromLocation.getContainerCode())) {
  1578 + return Result.error("创建出库任务时," + fromLocationCode + "上已存在容器" + fromLocation.getContainerCode());
  1579 + }
  1580 + if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(fromLocation.getStatus())) {
  1581 + return Result.error("创建出库任务时, 起始库位非空闲");
  1582 + }
  1583 + zoneCode = fromLocation.getZoneCode();
  1584 + taskLockEntity.setZoneCode(zoneCode);
  1585 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
  1586 + if (!success) {
  1587 + throw new JeecgBootException("创建出库任务时,更新容器状态失败");
  1588 + }
  1589 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
  1590 + if (!success) {
  1591 + throw new JeecgBootException("创建出库任务时,更新库位状态失败");
  1592 + }
  1593 + return Result.OK("创建出库任务成功", taskLockEntity);
  1594 + }
  1595 +
  1596 + @Override
  1597 + @Transactional(rollbackFor = Exception.class)
  1598 + public Result createSortTaskLockContainerAndLocation(String containerCode, String fromLocationCode, String toLocationCode, String warehouseCode) {
  1599 + boolean success = false;
  1600 + TaskLockEntity taskLockEntity = new TaskLockEntity();
  1601 + String zoneCode = null;
  1602 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  1603 + if (container == null) {
  1604 + return Result.error("创建分拣任务时, 没有找到托盘" + containerCode);
  1605 + }
  1606 + if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {
  1607 + return Result.error("创建分拣任务时, 托盘状态并非空闲状态");
  1608 + }
  1609 + if (StringUtils.isEmpty(container.getLocationCode())) {
  1610 + return Result.error("创建分拣任务时, 容器不在库位" + container.getLocationCode() + "上");
  1611 + }
  1612 + Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
  1613 + if (fromLocation == null) {
  1614 + return Result.error("创建分拣任务时, 起始库位为空");
  1615 + }
  1616 + if (StringUtils.isEmpty(fromLocation.getContainerCode())) {
  1617 + return Result.error("创建分拣任务时," + fromLocationCode + "上已存在容器" + fromLocation.getContainerCode());
  1618 + }
  1619 + if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(fromLocation.getStatus())) {
  1620 + return Result.error("创建分拣任务时, 起始库位非空闲");
  1621 + }
  1622 + zoneCode = fromLocation.getZoneCode();
  1623 + taskLockEntity.setZoneCode(zoneCode);
  1624 + if (StringUtils.isNotEmpty(toLocationCode)) {
  1625 + Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);
  1626 + if (toLocation == null) {
  1627 + return Result.error("创建分拣任务时," + toLocationCode + "目标库位不存在");
  1628 + }
  1629 + if (StringUtils.isNotEmpty(toLocation.getContainerCode())) {
  1630 + return Result.error("创建分拣任务时," + toLocationCode + "上已存在容器" + toLocation.getContainerCode());
  1631 + }
  1632 + if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(toLocation.getStatus())) {
  1633 + return Result.error("创建分拣任务时, 目标库位非空闲");
  1634 + }
  1635 + }
  1636 + success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
  1637 + if (!success) {
  1638 + throw new JeecgBootException("创建分拣任务时,更新容器状态失败");
  1639 + }
  1640 + success = locationService.updateStatus(fromLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
  1641 + if (!success) {
  1642 + throw new JeecgBootException("创建分拣任务时,更新库位状态失败");
  1643 + }
  1644 + if (StringUtils.isNotEmpty(toLocationCode)) {
  1645 + success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
  1646 + if (!success) {
  1647 + throw new JeecgBootException("创建分拣任务时,更新库位状态失败");
  1648 + }
  1649 + }
  1650 + return Result.OK("创建分拣任务成功", taskLockEntity);
  1651 + }
  1652 +
  1653 + @Override
  1654 + @Transactional(rollbackFor = Exception.class)
  1655 + public Result createOverStationTaskLockContainer(String containerCode, String warehouseCode) {
  1656 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  1657 + if (container == null) {
  1658 + return Result.error("创建跨站任务时,容器为空");
  1659 + }
  1660 + if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)) {
  1661 + return Result.error("创建跨站任务时, 容器状态不为空闲状态");
  1662 + }
  1663 + boolean success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode);
  1664 + if (!success) {
  1665 + throw new JeecgBootException("创建跨站任务时,更新容器状态失败");
  1666 + }
  1667 + return Result.ok("创建跨站任务成功");
  1668 + }
  1669 +
  1670 + /**
1581 * 完成空托盘入库任务 1671 * 完成空托盘入库任务
1582 * @param taskHeader 任务 1672 * @param taskHeader 任务
1583 * @return Result 完成入库任务结果 1673 * @return Result 完成入库任务结果
huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java
@@ -185,8 +185,6 @@ public class QuantityConstant { @@ -185,8 +185,6 @@ public class QuantityConstant {
185 185
186 /** 空托盘组出库 */ 186 /** 空托盘组出库 */
187 public static final int TASK_TYPE_MANY_EMPTYSHIPMENT = 1200; 187 public static final int TASK_TYPE_MANY_EMPTYSHIPMENT = 1200;
188 - /** 空托盘组换站 */  
189 - public static final int TASK_TYPE_MANY_OVER_STATION = 1300;  
190 188
191 // 7、任务状态 189 // 7、任务状态
192 190