Commit ecc829a3f0b9d55bc64c761a0614f8ae0df04eac
1 parent
2617d92b
修改 空容器入库与空容器出库任务创建,空容器入库支持定位规则
Showing
2 changed files
with
118 additions
and
86 deletions
src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java
@@ -25,6 +25,7 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl; | @@ -25,6 +25,7 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl; | ||
25 | import com.huaheng.pc.task.taskHeader.domain.TaskHeader; | 25 | import com.huaheng.pc.task.taskHeader.domain.TaskHeader; |
26 | import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; | 26 | import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; |
27 | import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl; | 27 | import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl; |
28 | +import com.huaheng.pc.task.taskHeader.service.WorkTaskService; | ||
28 | import org.springframework.stereotype.Service; | 29 | import org.springframework.stereotype.Service; |
29 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 30 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
30 | import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper; | 31 | import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper; |
@@ -54,6 +55,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe | @@ -54,6 +55,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe | ||
54 | private InventoryDetailService inventoryDetailService; | 55 | private InventoryDetailService inventoryDetailService; |
55 | @Resource | 56 | @Resource |
56 | private MaterialService materialService; | 57 | private MaterialService materialService; |
58 | + @Resource | ||
59 | + private WorkTaskService workTaskService; | ||
57 | 60 | ||
58 | 61 | ||
59 | /** | 62 | /** |
@@ -89,97 +92,17 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe | @@ -89,97 +92,17 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe | ||
89 | /** | 92 | /** |
90 | * 空托入库 | 93 | * 空托入库 |
91 | * */ | 94 | * */ |
92 | - @Transactional | ||
93 | @Override | 95 | @Override |
94 | public AjaxResult createEmptyIn(String containerCode, String destinationLocation) { | 96 | public AjaxResult createEmptyIn(String containerCode, String destinationLocation) { |
95 | - | ||
96 | - return AjaxResult.success(); | 97 | + return workTaskService.createEmptyIn(containerCode, destinationLocation); |
97 | } | 98 | } |
98 | 99 | ||
99 | /** | 100 | /** |
100 | *空托出库 | 101 | *空托出库 |
101 | * */ | 102 | * */ |
102 | - @Transactional | ||
103 | @Override | 103 | @Override |
104 | public AjaxResult createEmptyOut(String containerCode, String sourceLocation) { | 104 | public AjaxResult createEmptyOut(String containerCode, String sourceLocation) { |
105 | - // 检查容器 | ||
106 | - Container temp3 = new Container(); | ||
107 | - temp3.setCode(containerCode); | ||
108 | - temp3.setWarehouseCode(ShiroUtils.getWarehouseCode()); | ||
109 | - LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery(temp3); | ||
110 | - Container container = containerService.getOne(lambda3); | ||
111 | - if(container==null){ | ||
112 | - return AjaxResult.error("托盘不存在"); | ||
113 | - } | ||
114 | - if (StringUtils.isEmpty(container.getLocationCode())|| !(container.getLocationCode().equals(sourceLocation))) { | ||
115 | - return AjaxResult.error("容器不在库位[" + sourceLocation + "]上"); | ||
116 | - } | ||
117 | - //检查库位 | ||
118 | - Location temp4 = new Location(); | ||
119 | - temp4.setCode(sourceLocation); | ||
120 | - temp4.setWarehouseCode(ShiroUtils.getWarehouseCode()); | ||
121 | - LambdaQueryWrapper lamda4 = Wrappers.lambdaQuery(temp4); | ||
122 | - Location loc = locationService.getOne(lamda4); | ||
123 | - if(loc==null){ | ||
124 | - return AjaxResult.error("源货位不存在"); | ||
125 | - } | ||
126 | - if(StringUtils.isEmpty(loc.getContainerCode())){ | ||
127 | - return AjaxResult.error("源货位没有托盘"); | ||
128 | - } | ||
129 | - if(!"empty".equals(loc.getStatus())){ | ||
130 | - return AjaxResult.error("源货位非空闲"); | ||
131 | - } | ||
132 | - //检查库存,有库存不给生成任务。 | ||
133 | - LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
134 | - inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getWarehouseCode,loc.getWarehouseCode()) | ||
135 | - .eq(InventoryDetail::getLocationCode, loc.getCode()); | ||
136 | - List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); | ||
137 | - if(inventoryDetailList != null && inventoryDetailList.size() > 0){ | ||
138 | - return AjaxResult.error("该容器上有库存,无法空托出库!"); | ||
139 | - } | ||
140 | - //判断托盘是否已经存在任务 | ||
141 | - Integer taskCount = taskHeaderService.UncompleteCount(containerCode); | ||
142 | - if (taskCount != null && taskCount.intValue() > 0) { | ||
143 | - return AjaxResult.error("容器已存在任务"); | ||
144 | - } | ||
145 | - //生成任务 | ||
146 | - TaskHeader taskHeader = new TaskHeader(); | ||
147 | - taskHeader.setWarehouseCode(loc.getWarehouseCode()); | ||
148 | - taskHeader.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));//货主 | ||
149 | - taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_PICKING); //出库内部类型都给200 | ||
150 | - taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT); | ||
151 | - taskHeader.setContainerCode(container.getCode()); | ||
152 | - taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); | ||
153 | - taskHeader.setFromLocation(sourceLocation); | ||
154 | - taskHeader.setToLocation(""); | ||
155 | - taskHeader.setCreated(new Date()); | ||
156 | - taskHeader.setCreatedBy(ShiroUtils.getLoginName()); | ||
157 | - taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
158 | - taskHeader.setLastUpdated(new Date()); | ||
159 | - if(taskHeaderService.save(taskHeader)){ | ||
160 | - //锁定库位状态 | ||
161 | - locationService.updateStatus(loc.getCode(),"lock"); | ||
162 | - }else{ | ||
163 | - throw new ServiceException("空托出库主表生成失败!"); | ||
164 | - } | ||
165 | - //写入任务细表 | ||
166 | - TaskDetail taskDetail = new TaskDetail(); | ||
167 | - taskDetail.setTaskId(taskHeader.getId());//主单ID | ||
168 | - taskDetail.setTaskType(taskHeader.getTaskType()); | ||
169 | - taskDetail.setInternalTaskType(taskHeader.getInternalTaskType()); | ||
170 | - taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); | ||
171 | - taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0)); | ||
172 | - taskDetail.setFromLocation(taskHeader.getFromLocation()); | ||
173 | - taskDetail.setToLocation(taskHeader.getToLocation()); | ||
174 | - taskDetail.setContainerCode(taskHeader.getContainerCode()); | ||
175 | - taskDetail.setCreated(new Date()); | ||
176 | - taskDetail.setCreatedBy(ShiroUtils.getLoginName()); | ||
177 | - taskDetail.setLastUpdated(new Date()); | ||
178 | - taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
179 | - if(taskDetailService.save(taskDetail) == false){ | ||
180 | - throw new ServiceException("空托出库任务明细生成失败!"); | ||
181 | - } | ||
182 | - return AjaxResult.success(taskHeader.getId()); | 105 | + return workTaskService.createEmptyOut(containerCode, sourceLocation); |
183 | } | 106 | } |
184 | 107 | ||
185 | /** | 108 | /** |
src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java
@@ -18,9 +18,14 @@ import com.huaheng.pc.config.location.domain.Location; | @@ -18,9 +18,14 @@ import com.huaheng.pc.config.location.domain.Location; | ||
18 | import com.huaheng.pc.config.location.service.LocationService; | 18 | import com.huaheng.pc.config.location.service.LocationService; |
19 | import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference; | 19 | import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference; |
20 | import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService; | 20 | import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService; |
21 | +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; | ||
22 | +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; | ||
23 | +import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; | ||
24 | +import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; | ||
21 | import com.huaheng.pc.task.taskDetail.domain.TaskDetail; | 25 | import com.huaheng.pc.task.taskDetail.domain.TaskDetail; |
22 | import com.huaheng.pc.task.taskDetail.service.TaskDetailService; | 26 | import com.huaheng.pc.task.taskDetail.service.TaskDetailService; |
23 | import com.huaheng.pc.task.taskHeader.domain.TaskHeader; | 27 | import com.huaheng.pc.task.taskHeader.domain.TaskHeader; |
28 | +import org.aspectj.weaver.loadtime.Aj; | ||
24 | import org.springframework.stereotype.Service; | 29 | import org.springframework.stereotype.Service; |
25 | import org.springframework.transaction.annotation.Transactional; | 30 | import org.springframework.transaction.annotation.Transactional; |
26 | 31 | ||
@@ -47,6 +52,10 @@ public class WorkTaskService { | @@ -47,6 +52,10 @@ public class WorkTaskService { | ||
47 | private ReceiptPreferenceService preferenceService; | 52 | private ReceiptPreferenceService preferenceService; |
48 | @Resource | 53 | @Resource |
49 | private FilterConfigDetailService filterConfigDetailService; | 54 | private FilterConfigDetailService filterConfigDetailService; |
55 | + @Resource | ||
56 | + private InventoryDetailService inventoryDetailService; | ||
57 | + @Resource | ||
58 | + private InventoryHeaderService inventoryHeaderService; | ||
50 | 59 | ||
51 | /** | 60 | /** |
52 | * 创建入库任务 | 61 | * 创建入库任务 |
@@ -61,7 +70,7 @@ public class WorkTaskService { | @@ -61,7 +70,7 @@ public class WorkTaskService { | ||
61 | return AjaxResult.error("容器不存在"); | 70 | return AjaxResult.error("容器不存在"); |
62 | } | 71 | } |
63 | if (StringUtils.isNotEmpty(container.getLocationCode())) { | 72 | if (StringUtils.isNotEmpty(container.getLocationCode())) { |
64 | - return AjaxResult.error("容器已在库位[" + container.getLocationCode() + "]上"); | 73 | + return AjaxResult.error("容器已在库位" + container.getLocationCode() + "上"); |
65 | } | 74 | } |
66 | 75 | ||
67 | if (StringUtils.isNotEmpty(destinationLocation)) { | 76 | if (StringUtils.isNotEmpty(destinationLocation)) { |
@@ -72,7 +81,7 @@ public class WorkTaskService { | @@ -72,7 +81,7 @@ public class WorkTaskService { | ||
72 | if (StringUtils.isNotEmpty(location.getContainerCode())) { | 81 | if (StringUtils.isNotEmpty(location.getContainerCode())) { |
73 | return AjaxResult.error(destinationLocation+"上已存在容器"+location.getContainerCode()); | 82 | return AjaxResult.error(destinationLocation+"上已存在容器"+location.getContainerCode()); |
74 | } | 83 | } |
75 | - if ("empty".equals(location.getStatus())) { | 84 | + if (!"empty".equals(location.getStatus())) { |
76 | return AjaxResult.error("目标库位非空闲"); | 85 | return AjaxResult.error("目标库位非空闲"); |
77 | } | 86 | } |
78 | } | 87 | } |
@@ -109,10 +118,15 @@ public class WorkTaskService { | @@ -109,10 +118,15 @@ public class WorkTaskService { | ||
109 | return AjaxResult.error("容器已存在任务"); | 118 | return AjaxResult.error("容器已存在任务"); |
110 | } | 119 | } |
111 | 120 | ||
121 | + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery(); | ||
122 | + queryWrapper.eq(InventoryDetail::getContainerCode, containerCode); | ||
123 | + if (inventoryDetailService.count(queryWrapper) > 0) { | ||
124 | + return AjaxResult.error("该容器上已有库存"); | ||
125 | + } | ||
112 | LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate(); | 126 | LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate(); |
113 | containerUpdateWrapper.eq(Container::getCode, container.getCode()) | 127 | containerUpdateWrapper.eq(Container::getCode, container.getCode()) |
114 | .set(Container::getStatus, "lock"); | 128 | .set(Container::getStatus, "lock"); |
115 | - if (containerService.update(container, containerUpdateWrapper)) { | 129 | + if (!containerService.update(container, containerUpdateWrapper)) { |
116 | throw new ServiceException("容器状态更新失败"); | 130 | throw new ServiceException("容器状态更新失败"); |
117 | } | 131 | } |
118 | 132 | ||
@@ -144,7 +158,7 @@ public class WorkTaskService { | @@ -144,7 +158,7 @@ public class WorkTaskService { | ||
144 | taskDetail.setToLocation(taskHeader.getToLocation()); | 158 | taskDetail.setToLocation(taskHeader.getToLocation()); |
145 | taskDetail.setContainerCode(taskHeader.getContainerCode()); | 159 | taskDetail.setContainerCode(taskHeader.getContainerCode()); |
146 | 160 | ||
147 | - if(taskDetailService.save(taskDetail)){ | 161 | + if(!taskDetailService.save(taskDetail)){ |
148 | throw new ServiceException("空托入库任务明细生成失败!"); | 162 | throw new ServiceException("空托入库任务明细生成失败!"); |
149 | } | 163 | } |
150 | //锁库位 | 164 | //锁库位 |
@@ -153,4 +167,99 @@ public class WorkTaskService { | @@ -153,4 +167,99 @@ public class WorkTaskService { | ||
153 | } | 167 | } |
154 | return AjaxResult.success(taskHeader.getId()); | 168 | return AjaxResult.success(taskHeader.getId()); |
155 | } | 169 | } |
170 | + | ||
171 | + /** | ||
172 | + * 创建空托出库任务 | ||
173 | + * 容器编码与源库位只需要填一个 | ||
174 | + * @param containerCode 容器编码 | ||
175 | + * @param sourceLocation 源库位 | ||
176 | + * @return | ||
177 | + */ | ||
178 | + @Transactional(rollbackFor = Exception.class) | ||
179 | + public AjaxResult createEmptyOut(String containerCode, String sourceLocation) { | ||
180 | + /* 容器编码*/ | ||
181 | + String conCode = null; | ||
182 | + /* 库位编码*/ | ||
183 | + String locationCode = null; | ||
184 | + //验证容器 | ||
185 | + if (StringUtils.isNotEmpty(containerCode)) { | ||
186 | + Container container = containerService.findAllByCode(containerCode); | ||
187 | + if (StringUtils.isNull(container)) { | ||
188 | + return AjaxResult.error(containerCode+"容器不存在"); | ||
189 | + } | ||
190 | + if (!"empty".equals(container.getStatus())) { | ||
191 | + return AjaxResult.error(containerCode+"容器状态不为空,不能执行空托出库"); | ||
192 | + } | ||
193 | + if (StringUtils.isEmpty(container.getLocationCode())) { | ||
194 | + return AjaxResult.error("该容器不在库位上"); | ||
195 | + } | ||
196 | + if (StringUtils.isNotEmpty(sourceLocation)) { | ||
197 | + if (!container.getLocationCode().equals(sourceLocation)) { | ||
198 | + return AjaxResult.error("该容器所在库位与源库位不同"); | ||
199 | + } | ||
200 | + } | ||
201 | + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery(); | ||
202 | + queryWrapper.eq(InventoryDetail::getContainerCode, containerCode); | ||
203 | + if (inventoryDetailService.count(queryWrapper) > 0) { | ||
204 | + return AjaxResult.error("该容器上有库存,无法空托出库!"); | ||
205 | + } | ||
206 | + conCode = containerCode; | ||
207 | + locationCode = container.getLocationCode(); | ||
208 | + } | ||
209 | + //验证库位 | ||
210 | + if (StringUtils.isNotEmpty(sourceLocation)) { | ||
211 | + Location location = locationService.findLocationByCode(sourceLocation); | ||
212 | + if (StringUtils.isNull(location)) { | ||
213 | + return AjaxResult.error(sourceLocation+"库位不存在"); | ||
214 | + } | ||
215 | + if (!"empty".equals(location.getStatus())) { | ||
216 | + return AjaxResult.error(location.getCode()+"库位状态不为空闲不能执行出库"); | ||
217 | + } | ||
218 | + if (StringUtils.isEmpty(location.getContainerCode())) { | ||
219 | + return AjaxResult.error(location.getCode()+"库位上没有容器"); | ||
220 | + } | ||
221 | + if (StringUtils.isNotEmpty(containerCode)) { | ||
222 | + if (!location.getContainerCode().equals(sourceLocation)) { | ||
223 | + return AjaxResult.error("该库位上容器编码与输入容器编码不同"); | ||
224 | + } | ||
225 | + } | ||
226 | + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery(); | ||
227 | + queryWrapper.eq(InventoryDetail::getLocationCode, sourceLocation); | ||
228 | + if (inventoryDetailService.count(queryWrapper) > 0) { | ||
229 | + return AjaxResult.error("该库位上有库存,无法空托出库!"); | ||
230 | + } | ||
231 | + | ||
232 | + locationCode = location.getCode(); | ||
233 | + conCode = location.getContainerCode(); | ||
234 | + } | ||
235 | + | ||
236 | + TaskHeader taskHeader = new TaskHeader(); | ||
237 | + taskHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); | ||
238 | + taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_WORK); | ||
239 | + taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT); | ||
240 | + taskHeader.setContainerCode(conCode); | ||
241 | + taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); | ||
242 | + taskHeader.setFromLocation(locationCode); | ||
243 | + taskHeader.setToLocation(""); | ||
244 | + if(taskHeaderService.save(taskHeader)){ | ||
245 | + //锁定库位状态 | ||
246 | + locationService.updateStatus(locationCode,"lock"); | ||
247 | + } else { | ||
248 | + throw new ServiceException("空托出库主表生成失败!"); | ||
249 | + } | ||
250 | + //写入任务细表 | ||
251 | + TaskDetail taskDetail = new TaskDetail(); | ||
252 | + taskDetail.setTaskId(taskHeader.getId()); | ||
253 | + taskDetail.setTaskType(taskHeader.getTaskType()); | ||
254 | + taskDetail.setInternalTaskType(taskHeader.getInternalTaskType()); | ||
255 | + taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); | ||
256 | + taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0)); | ||
257 | + taskDetail.setFromLocation(taskHeader.getFromLocation()); | ||
258 | + taskDetail.setToLocation(taskHeader.getToLocation()); | ||
259 | + taskDetail.setContainerCode(taskHeader.getContainerCode()); | ||
260 | + if(taskDetailService.save(taskDetail)){ | ||
261 | + throw new ServiceException("空托出库任务明细生成失败!"); | ||
262 | + } | ||
263 | + return AjaxResult.success(taskHeader.getId()); | ||
264 | + } | ||
156 | } | 265 | } |