Commit 01bfa1212f0f83f89d0cb2426cb9361b2997b929
Merge remote-tracking branch 'origin/develop' into develop
Showing
15 changed files
with
1017 additions
and
97 deletions
src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java
@@ -101,6 +101,7 @@ public class TaskAssignServiceImpl implements TaskAssignService { | @@ -101,6 +101,7 @@ public class TaskAssignServiceImpl implements TaskAssignService { | ||
101 | wcsTask.setPreTaskNo("0"); | 101 | wcsTask.setPreTaskNo("0"); |
102 | wcsTask.setTaskType(taskHeader.getTaskType().toString()); | 102 | wcsTask.setTaskType(taskHeader.getTaskType().toString()); |
103 | wcsTask.setFromPort("1000"); | 103 | wcsTask.setFromPort("1000"); |
104 | + wcsTask.setToPort(taskHeader.getStationCode()); | ||
104 | 105 | ||
105 | wcsTask.setContainerCode(taskHeader.getContainerCode()); | 106 | wcsTask.setContainerCode(taskHeader.getContainerCode()); |
106 | Location location; | 107 | Location location; |
@@ -112,7 +113,6 @@ public class TaskAssignServiceImpl implements TaskAssignService { | @@ -112,7 +113,6 @@ public class TaskAssignServiceImpl implements TaskAssignService { | ||
112 | 113 | ||
113 | wcsTask.setStation(location.getRoadway()); | 114 | wcsTask.setStation(location.getRoadway()); |
114 | wcsTask.setDestination(location.getRoadway()); | 115 | wcsTask.setDestination(location.getRoadway()); |
115 | - wcsTask.setToPort(location.getRoadway()); | ||
116 | if(StringUtils.isEmpty(taskHeader.getFromLocation())){ | 116 | if(StringUtils.isEmpty(taskHeader.getFromLocation())){ |
117 | wcsTask.setFromLocationCode("0"); | 117 | wcsTask.setFromLocationCode("0"); |
118 | }else { | 118 | }else { |
src/main/java/com/huaheng/pc/config/station/controller/stationController.java
@@ -14,6 +14,7 @@ import com.huaheng.framework.web.domain.AjaxResult; | @@ -14,6 +14,7 @@ import com.huaheng.framework.web.domain.AjaxResult; | ||
14 | import com.huaheng.framework.web.page.PageDomain; | 14 | import com.huaheng.framework.web.page.PageDomain; |
15 | import com.huaheng.framework.web.page.TableDataInfo; | 15 | import com.huaheng.framework.web.page.TableDataInfo; |
16 | import com.huaheng.framework.web.page.TableSupport; | 16 | import com.huaheng.framework.web.page.TableSupport; |
17 | +import com.huaheng.pc.config.material.domain.Material; | ||
17 | import com.huaheng.pc.config.station.domain.Station; | 18 | import com.huaheng.pc.config.station.domain.Station; |
18 | import com.huaheng.pc.config.station.service.StationService; | 19 | import com.huaheng.pc.config.station.service.StationService; |
19 | import io.swagger.annotations.ApiParam; | 20 | import io.swagger.annotations.ApiParam; |
@@ -23,9 +24,7 @@ import org.springframework.ui.ModelMap; | @@ -23,9 +24,7 @@ import org.springframework.ui.ModelMap; | ||
23 | import org.springframework.web.bind.annotation.*; | 24 | import org.springframework.web.bind.annotation.*; |
24 | 25 | ||
25 | import javax.annotation.Resource; | 26 | import javax.annotation.Resource; |
26 | -import java.util.ArrayList; | ||
27 | -import java.util.Arrays; | ||
28 | -import java.util.List; | 27 | +import java.util.*; |
29 | 28 | ||
30 | /** | 29 | /** |
31 | * Created by Enzo Cotter on 2019/10/14. | 30 | * Created by Enzo Cotter on 2019/10/14. |
@@ -134,4 +133,21 @@ public class stationController extends BaseController { | @@ -134,4 +133,21 @@ public class stationController extends BaseController { | ||
134 | return toAjax(stationService.removeByIds(list)); | 133 | return toAjax(stationService.removeByIds(list)); |
135 | } | 134 | } |
136 | 135 | ||
136 | + @PostMapping("/getData") | ||
137 | + @ResponseBody | ||
138 | + public Map<String, Object> getData() { | ||
139 | + LambdaQueryWrapper<Station> queryWrapper = Wrappers.lambdaQuery(); | ||
140 | + List<Station> stationList = stationService.list(queryWrapper); | ||
141 | + | ||
142 | + List<Map<String, Object>> list = new ArrayList<>(); | ||
143 | + for (Station station : stationList) { | ||
144 | + Map<String, Object> resultMap = new HashMap<>(); | ||
145 | + resultMap.put("id", station.getCode()); | ||
146 | + resultMap.put("text", station.getName()); | ||
147 | + list.add(resultMap); | ||
148 | + } | ||
149 | + Map<String, Object> map = new HashMap<>(); | ||
150 | + map.put("results", list); | ||
151 | + return map; | ||
152 | + } | ||
137 | } | 153 | } |
src/main/java/com/huaheng/pc/receipt/receiving/controller/ReceivingController.java
@@ -116,6 +116,9 @@ public class ReceivingController extends BaseController { | @@ -116,6 +116,9 @@ public class ReceivingController extends BaseController { | ||
116 | @ApiParam(name="locationCode",value="库位编码", required = false)String locationCode, | 116 | @ApiParam(name="locationCode",value="库位编码", required = false)String locationCode, |
117 | @ApiParam(name="qty",value="收货数量") BigDecimal qty, | 117 | @ApiParam(name="qty",value="收货数量") BigDecimal qty, |
118 | @ApiParam(name="localtionRule",value="定位规则", required = false)String locatingRule){ | 118 | @ApiParam(name="localtionRule",value="定位规则", required = false)String locatingRule){ |
119 | + if(qty.intValue() <= 0) { | ||
120 | + return AjaxResult.error("配盘数量必须大于0"); | ||
121 | + } | ||
119 | AjaxResult result = receiptContainerHeaderService.saveContainer(receiptCode, containerCode, receiptDetailId, | 122 | AjaxResult result = receiptContainerHeaderService.saveContainer(receiptCode, containerCode, receiptDetailId, |
120 | locationCode, qty, locatingRule); | 123 | locationCode, qty, locatingRule); |
121 | return result; | 124 | return result; |
src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java
@@ -57,6 +57,13 @@ public class ShipmentContainerHeader implements Serializable { | @@ -57,6 +57,13 @@ public class ShipmentContainerHeader implements Serializable { | ||
57 | private Integer status; | 57 | private Integer status; |
58 | 58 | ||
59 | /** | 59 | /** |
60 | + * 出库站台 | ||
61 | + */ | ||
62 | + @TableField(value = "stationCode") | ||
63 | + @ApiModelProperty(value="出库站台") | ||
64 | + private String stationCode; | ||
65 | + | ||
66 | + /** | ||
60 | * 父 | 67 | * 父 |
61 | */ | 68 | */ |
62 | @TableField(value = "parent") | 69 | @TableField(value = "parent") |
@@ -443,6 +450,14 @@ public class ShipmentContainerHeader implements Serializable { | @@ -443,6 +450,14 @@ public class ShipmentContainerHeader implements Serializable { | ||
443 | this.status = status; | 450 | this.status = status; |
444 | } | 451 | } |
445 | 452 | ||
453 | + public String getStationCode() { | ||
454 | + return stationCode; | ||
455 | + } | ||
456 | + | ||
457 | + public void setStationCode(String stationCode) { | ||
458 | + this.stationCode = stationCode; | ||
459 | + } | ||
460 | + | ||
446 | /** | 461 | /** |
447 | * 获取父 | 462 | * 获取父 |
448 | * | 463 | * |
src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
@@ -211,6 +211,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont | @@ -211,6 +211,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont | ||
211 | shipmentContainerHeader.setLocationCode(location.getCode()); | 211 | shipmentContainerHeader.setLocationCode(location.getCode()); |
212 | shipmentContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); | 212 | shipmentContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); |
213 | shipmentContainerHeader.setCompanyCode(shipmentDetail.getCompanyCode()); | 213 | shipmentContainerHeader.setCompanyCode(shipmentDetail.getCompanyCode()); |
214 | + shipmentContainerHeader.setStationCode(shipmentDetail.getStationCode()); | ||
214 | shipmentContainerHeader.setContainerType(container.getContainerType()); | 215 | shipmentContainerHeader.setContainerType(container.getContainerType()); |
215 | shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_BUILD); | 216 | shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_BUILD); |
216 | shipmentContainerHeader.setTaskCreated(0); | 217 | shipmentContainerHeader.setTaskCreated(0); |
src/main/java/com/huaheng/pc/shipment/shipmentDetail/domain/ShipmentDetail.java
@@ -188,6 +188,13 @@ public class ShipmentDetail implements Serializable { | @@ -188,6 +188,13 @@ public class ShipmentDetail implements Serializable { | ||
188 | private String projectNo; | 188 | private String projectNo; |
189 | 189 | ||
190 | /** | 190 | /** |
191 | + * 出库站台 | ||
192 | + */ | ||
193 | + @TableField(value = "stationCode") | ||
194 | + @ApiModelProperty(value="出库站台") | ||
195 | + private String stationCode; | ||
196 | + | ||
197 | + /** | ||
191 | * 生产日期 | 198 | * 生产日期 |
192 | */ | 199 | */ |
193 | @TableField(value = "manufactureDate") | 200 | @TableField(value = "manufactureDate") |
@@ -1009,6 +1016,14 @@ public class ShipmentDetail implements Serializable { | @@ -1009,6 +1016,14 @@ public class ShipmentDetail implements Serializable { | ||
1009 | return processStamp; | 1016 | return processStamp; |
1010 | } | 1017 | } |
1011 | 1018 | ||
1019 | + public String getStationCode() { | ||
1020 | + return stationCode; | ||
1021 | + } | ||
1022 | + | ||
1023 | + public void setStationCode(String stationCode) { | ||
1024 | + this.stationCode = stationCode; | ||
1025 | + } | ||
1026 | + | ||
1012 | /** | 1027 | /** |
1013 | * 设置处理标记 | 1028 | * 设置处理标记 |
1014 | * | 1029 | * |
src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||
5 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 5 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
6 | import com.huaheng.common.constant.QuantityConstant; | 6 | import com.huaheng.common.constant.QuantityConstant; |
7 | import com.huaheng.common.exception.service.ServiceException; | 7 | import com.huaheng.common.exception.service.ServiceException; |
8 | +import com.huaheng.common.utils.DataUtils; | ||
8 | import com.huaheng.common.utils.StringUtils; | 9 | import com.huaheng.common.utils.StringUtils; |
9 | import com.huaheng.common.utils.security.ShiroUtils; | 10 | import com.huaheng.common.utils.security.ShiroUtils; |
10 | import com.huaheng.framework.web.domain.AjaxResult; | 11 | import com.huaheng.framework.web.domain.AjaxResult; |
@@ -37,12 +38,15 @@ import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; | @@ -37,12 +38,15 @@ import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; | ||
37 | import com.huaheng.pc.task.taskDetail.domain.TaskDetail; | 38 | import com.huaheng.pc.task.taskDetail.domain.TaskDetail; |
38 | import com.huaheng.pc.task.taskDetail.service.TaskDetailService; | 39 | import com.huaheng.pc.task.taskDetail.service.TaskDetailService; |
39 | import com.huaheng.pc.task.taskHeader.domain.TaskHeader; | 40 | import com.huaheng.pc.task.taskHeader.domain.TaskHeader; |
41 | +import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper; | ||
40 | import org.springframework.stereotype.Service; | 42 | import org.springframework.stereotype.Service; |
41 | import org.springframework.transaction.annotation.Transactional; | 43 | import org.springframework.transaction.annotation.Transactional; |
42 | 44 | ||
43 | import javax.annotation.Resource; | 45 | import javax.annotation.Resource; |
44 | import java.math.BigDecimal; | 46 | import java.math.BigDecimal; |
47 | +import java.util.Date; | ||
45 | import java.util.List; | 48 | import java.util.List; |
49 | +import java.util.Map; | ||
46 | 50 | ||
47 | /** | 51 | /** |
48 | * 入库任务创建和完成 | 52 | * 入库任务创建和完成 |
@@ -71,6 +75,8 @@ public class ReceiptTaskService { | @@ -71,6 +75,8 @@ public class ReceiptTaskService { | ||
71 | @Resource | 75 | @Resource |
72 | private ReceiptContainerHeaderService receiptContainerHeaderService; | 76 | private ReceiptContainerHeaderService receiptContainerHeaderService; |
73 | @Resource | 77 | @Resource |
78 | + private TaskHeaderMapper taskHeaderMapper; | ||
79 | + @Resource | ||
74 | private ContainerService containerService; | 80 | private ContainerService containerService; |
75 | @Resource | 81 | @Resource |
76 | private LocationService locationService; | 82 | private LocationService locationService; |
@@ -186,90 +192,137 @@ public class ReceiptTaskService { | @@ -186,90 +192,137 @@ public class ReceiptTaskService { | ||
186 | 192 | ||
187 | /** | 193 | /** |
188 | * 完成入库任务 | 194 | * 完成入库任务 |
189 | - * | ||
190 | - * @param task | ||
191 | - * @return | ||
192 | */ | 195 | */ |
193 | @Transactional(rollbackFor = Exception.class) | 196 | @Transactional(rollbackFor = Exception.class) |
194 | public AjaxResult completeReceiptTask(TaskHeader task) { | 197 | public AjaxResult completeReceiptTask(TaskHeader task) { |
195 | - /* 判断任务状态*/ | ||
196 | - if (task.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { | ||
197 | - return AjaxResult.error("任务已完成"); | 198 | + List<Map<String, Object>> taskReceiptContainerDetail = taskHeaderMapper.getReceiptTask(task.getId()); |
199 | + if (taskReceiptContainerDetail.size() < 1) { | ||
200 | + return AjaxResult.success("未找到对应任务的入库单号!!!"); | ||
198 | } | 201 | } |
199 | - BigDecimal totalQty = BigDecimal.ZERO; | ||
200 | - List<TaskDetail> taskDetailList = taskDetailService.findByTaskId(task.getId()); | ||
201 | - if (taskDetailList.isEmpty()) { | ||
202 | - throw new ServiceException("任务明细为空"); | 202 | + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); |
203 | + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
204 | + .eq(InventoryHeader::getLocationCode, task.getToLocation()) | ||
205 | + .eq(InventoryHeader::getContainerCode, task.getContainerCode()); | ||
206 | + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); | ||
207 | + | ||
208 | + if(header == null) { | ||
209 | + //添加库存单 | ||
210 | + header = new InventoryHeader(); | ||
211 | + header.setWarehouseCode(task.getWarehouseCode()); | ||
212 | + header.setCompanyCode(task.getCompanyCode());//货主 | ||
213 | + header.setContainerCode(task.getContainerCode()); | ||
214 | + header.setContainerStatus("some"); | ||
215 | + header.setLocationCode(task.getToLocation()); | ||
216 | + header.setLocking(1); | ||
217 | + header.setEnable(1); | ||
218 | + header.setTotalQty(new BigDecimal(0)); | ||
219 | + header.setTotalWeight(task.getWeight()); | ||
220 | + header.setCreatedBy(ShiroUtils.getLoginName()); | ||
221 | + header.setCreated(new Date()); | ||
222 | + header.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
223 | + header.setLastUpdated(new Date()); | ||
224 | + if (!inventoryHeaderService.save(header)) { | ||
225 | + throw new ServiceException("添加库存单失败"); | ||
226 | + } | ||
203 | } | 227 | } |
204 | - /* 遍历任务明细,修改关联的入库组盘、入库单状态、添加库存*/ | ||
205 | - for (TaskDetail taskDetail : taskDetailList) { | ||
206 | - if (taskDetail.getStatus() < QuantityConstant.TASK_STATUS_COMPLETED) { | ||
207 | - totalQty = totalQty.add(taskDetail.getQty()); | ||
208 | - /*查询入库单明细*/ | ||
209 | - ReceiptDetail receiptDetail = receiptDetailService.getById(taskDetail.getBillDetailId()); | ||
210 | - if (StringUtils.isNotNull(receiptDetail)) { | ||
211 | - LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
212 | - inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
213 | - .eq(InventoryHeader::getLocationCode, task.getToLocation()) | ||
214 | - .eq(InventoryHeader::getContainerCode, task.getContainerCode()); | ||
215 | - InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); | ||
216 | - /* 如果库存 头明细不存在则新增库存头表记录*/ | ||
217 | - if (StringUtils.isNull(inventoryHeader)) { | ||
218 | - inventoryHeader = new InventoryHeader(); | ||
219 | - inventoryHeader.setWarehouseCode(receiptDetail.getWarehouseCode()); | ||
220 | - inventoryHeader.setLocationCode(task.getToLocation()); | ||
221 | - inventoryHeader.setContainerCode(task.getContainerCode()); | ||
222 | - inventoryHeader.setContainerStatus("some"); | ||
223 | - inventoryHeader.setCompanyCode(receiptDetail.getCompanyCode()); | ||
224 | - inventoryHeader.setTotalWeight(task.getWeight()); | ||
225 | - inventoryHeader.setTotalQty(new BigDecimal(0)); | ||
226 | - inventoryHeader.setTotalLines(0); | ||
227 | - inventoryHeader.setLocking(1); | ||
228 | - inventoryHeader.setEnable(1); | ||
229 | - if (!inventoryHeaderService.save(inventoryHeader)) { | ||
230 | - throw new ServiceException("添加库存单失败"); | ||
231 | - } | ||
232 | - inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); | 228 | + for (Map<String, Object> map : taskReceiptContainerDetail) { |
229 | + //将未完成的任务数量更新到库存表 | ||
230 | + if (DataUtils.getInteger(map.get("status")) < QuantityConstant.TASK_STATUS_COMPLETED) { | ||
231 | + | ||
232 | + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); | ||
233 | + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
234 | + .eq(InventoryDetail::getLocationCode, task.getToLocation()) | ||
235 | + .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode"))) | ||
236 | + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode"))) | ||
237 | + .eq(InventoryDetail::getBatch, DataUtils.getString(map.get("batch"))) | ||
238 | + .eq(InventoryDetail::getLot, DataUtils.getString(map.get("lot"))) | ||
239 | + .eq(InventoryDetail::getProjectNo, DataUtils.getString(map.get("projectNo"))) | ||
240 | + .eq(InventoryDetail::getCompanyCode, DataUtils.getString(map.get("companyCode"))); | ||
241 | + InventoryDetail detail = inventoryDetailService.getOne(inventory); | ||
242 | + if (detail == null) { | ||
243 | + //库存明细添加 | ||
244 | + detail = new InventoryDetail(); | ||
245 | + detail.setInventoryHeaderId(header.getId());//库存头ID | ||
246 | + detail.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库 | ||
247 | + detail.setCompanyCode(task.getCompanyCode());//货主 | ||
248 | + detail.setLocationCode(task.getToLocation());//库位号 | ||
249 | + detail.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号 | ||
250 | + detail.setMaterialCode(DataUtils.getString(map.get("materialCode")));//物料号 | ||
251 | + detail.setMaterialName(DataUtils.getString(map.get("materialName")));//物料名称 | ||
252 | + detail.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 | ||
253 | + detail.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 | ||
254 | + detail.setReceiptCode(DataUtils.getString(map.get("receiptCode")));//入库单编码 | ||
255 | + detail.setReceiptDetailId(DataUtils.getInteger(map.get("receiptDetailId")));//入库单明细ID | ||
256 | + detail.setBatch(DataUtils.getString(map.get("batch")));//批次 | ||
257 | + detail.setLot(DataUtils.getString(map.get("lot")));//批号 | ||
258 | + detail.setProjectNo(DataUtils.getString(map.get("projectNo")));//项目号 | ||
259 | + detail.setInventorySts(DataUtils.getString(map.get("inventorySts")));//库存状态 | ||
260 | +// detail.setManufactureDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("manufactureDate").toString()));//生产日期 | ||
261 | +// detail.setExpirationDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("expirationDate").toString()));//失效日期 | ||
262 | + detail.setQty(DataUtils.getBigDecimal(map.get("qty")));//数量 | ||
263 | + detail.setLockedQty(DataUtils.getBigDecimal(0)); | ||
264 | + detail.setTaskQty(DataUtils.getBigDecimal(0)); | ||
265 | + detail.setCreatedBy(ShiroUtils.getLoginName());//创建人 | ||
266 | + detail.setLastUpdatedBy(ShiroUtils.getLoginName());//创建时间 | ||
267 | + if (!inventoryDetailService.save(detail)) { | ||
268 | + throw new ServiceException("添加库存明细失败"); | ||
233 | } | 269 | } |
234 | - totalQty = this.addInventoryDetail(taskDetail, receiptDetail, inventoryHeader); | ||
235 | - //修改组盘表状态为完成 | ||
236 | - ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); | ||
237 | - receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED); | ||
238 | - LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
239 | - receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getId, taskDetail.getAllocationId()); | ||
240 | - if (!receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)){ | ||
241 | - throw new ServiceException("更新组盘状态失败"); | 270 | + } else { |
271 | + detail.setQty(detail.getQty().add(DataUtils.getBigDecimal(map.get("qty")))); | ||
272 | + detail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
273 | + LambdaUpdateWrapper<InventoryDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
274 | + lambdaUpdateWrapper.eq(InventoryDetail::getId, detail.getId()); | ||
275 | + if (!inventoryDetailService.update(detail, lambdaUpdateWrapper)){ | ||
276 | + throw new ServiceException("更新库存明细失败"); | ||
242 | } | 277 | } |
278 | + } | ||
279 | + //记录库存交易记录 | ||
280 | + InventoryTransaction inventoryTransaction = new InventoryTransaction(); | ||
281 | + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT); | ||
282 | + inventoryTransaction.setWarehouseCode(DataUtils.getString(map.get("warehouseCode"))); | ||
283 | + inventoryTransaction.setCompanyCode(task.getCompanyCode()); | ||
284 | + inventoryTransaction.setLocationCode(task.getToLocation()); | ||
285 | + inventoryTransaction.setContainerCode(DataUtils.getString(map.get("containerCode"))); | ||
286 | + inventoryTransaction.setMaterialCode(DataUtils.getString(map.get("materialCode"))); | ||
287 | + inventoryTransaction.setMaterialName(DataUtils.getString(map.get("materialName"))); | ||
288 | + inventoryTransaction.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 | ||
289 | + inventoryTransaction.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 | ||
290 | + inventoryTransaction.setBillCode(DataUtils.getString(map.get("receiptCode"))); | ||
291 | + inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId"))); | ||
292 | + inventoryTransaction.setBatch(DataUtils.getString(map.get("batch"))); | ||
293 | + inventoryTransaction.setLot(DataUtils.getString(map.get("lot"))); | ||
294 | + inventoryTransaction.setInventorySts(DataUtils.getString((map.get("inventorySts")))); | ||
295 | + inventoryTransaction.setTaskQty(DataUtils.getBigDecimal(map.get("qty"))); | ||
296 | + inventoryTransaction.setCreated(new Date()); | ||
297 | + inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName()); | ||
298 | + if (!inventoryTransactionService.save(inventoryTransaction)) { | ||
299 | + throw new ServiceException("新增库存记录失败"); | ||
300 | + } | ||
243 | 301 | ||
244 | - } else { | ||
245 | - throw new ServiceException("未找到id:" + taskDetail.getBillDetailId() + "入库单明细"); | 302 | + //修改任务明细的状态为完成 |
303 | + TaskDetail taskDetail = new TaskDetail(); | ||
304 | + taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | ||
305 | + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
306 | + taskDetail.setAgingDate(new Date()); //入库时间 | ||
307 | + LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
308 | + lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId()); | ||
309 | + taskDetailService.update(taskDetail, lambdaUpdateWrapper); | ||
310 | + if (!taskDetailService.update(taskDetail, lambdaUpdateWrapper)) { | ||
311 | + throw new ServiceException("修改入库单明细失败"); | ||
246 | } | 312 | } |
247 | - receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_POSTING)); | ||
248 | - receiptDetailService.updateById(receiptDetail); | ||
249 | - receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); | ||
250 | - materialWarningService.materialWarning(taskDetail.getMaterialCode(), taskDetail.getCompanyCode()); | 313 | + |
251 | } | 314 | } |
252 | - } | ||
253 | - LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
254 | - inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
255 | - .eq(InventoryHeader::getLocationCode, task.getToLocation()) | ||
256 | - .eq(InventoryHeader::getContainerCode, task.getContainerCode()); | ||
257 | - InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); | ||
258 | - if (StringUtils.isNull(inventoryHeader)) { | ||
259 | - throw new ServiceException("库存添加失败"); | ||
260 | - } else { | ||
261 | - inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().add(totalQty)); | ||
262 | - inventoryHeader.setTotalLines(inventoryHeader.getTotalLines()+taskDetailList.size()); | ||
263 | - inventoryHeaderService.updateById(inventoryHeader); | 315 | + |
264 | } | 316 | } |
265 | //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成 | 317 | //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成 |
266 | task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | 318 | task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); |
319 | + task.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
320 | + task.setLastUpdated(new Date()); | ||
267 | LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | 321 | LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); |
268 | taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId()); | 322 | taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId()); |
269 | if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper)){ | 323 | if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper)){ |
270 | throw new ServiceException("更新任务主表失败"); | 324 | throw new ServiceException("更新任务主表失败"); |
271 | } | 325 | } |
272 | - | ||
273 | //修改库位状态和对应的容器 | 326 | //修改库位状态和对应的容器 |
274 | Location location = new Location(); | 327 | Location location = new Location(); |
275 | location.setContainerCode(task.getContainerCode()); | 328 | location.setContainerCode(task.getContainerCode()); |
@@ -288,15 +341,41 @@ public class ReceiptTaskService { | @@ -288,15 +341,41 @@ public class ReceiptTaskService { | ||
288 | if (!containerService.update(container, containerLambdaUpdateWrapper)) { | 341 | if (!containerService.update(container, containerLambdaUpdateWrapper)) { |
289 | throw new ServiceException("更新容器失败"); | 342 | throw new ServiceException("更新容器失败"); |
290 | } | 343 | } |
344 | + //修改组盘表状态为20 | ||
345 | + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); | ||
346 | + receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_REVIEWSUCCESS); | ||
347 | + receiptContainerDetail.setProcessStamp("0"); | ||
348 | + receiptContainerDetail.setLastUpdated(new Date()); | ||
349 | + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
350 | + LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
351 | + receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); | ||
352 | + if (!receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)){ | ||
353 | + throw new ServiceException("更新组盘状态失败"); | ||
354 | + } | ||
291 | 355 | ||
292 | //修改入库组盘头表状态 | 356 | //修改入库组盘头表状态 |
357 | + | ||
293 | ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); | 358 | ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); |
294 | receiptContainerHeader.setId(task.getAllocationHeadId()); | 359 | receiptContainerHeader.setId(task.getAllocationHeadId()); |
295 | - receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED); | 360 | + receiptContainerHeader.setLastUpdated(new Date()); |
361 | + receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
362 | + receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED.intValue()); | ||
296 | if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { | 363 | if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { |
297 | throw new ServiceException("更新入库组盘头表状态失败"); | 364 | throw new ServiceException("更新入库组盘头表状态失败"); |
298 | } | 365 | } |
299 | - return AjaxResult.success(); | 366 | + |
367 | + //修改入库单状态 | ||
368 | + ReceiptHeader receiptHeader = new ReceiptHeader(); | ||
369 | + receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POSTING); | ||
370 | + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING); | ||
371 | + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
372 | + receiptHeader.setLastUpdated(new Date()); | ||
373 | + LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
374 | + receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); | ||
375 | + if (!receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper)) { | ||
376 | + throw new ServiceException("更新入库头表状态失败"); | ||
377 | + } | ||
378 | + return AjaxResult.success("完成入库任务"); | ||
300 | } | 379 | } |
301 | 380 | ||
302 | /** | 381 | /** |
src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
@@ -139,6 +139,7 @@ public class ShipmentTaskService { | @@ -139,6 +139,7 @@ public class ShipmentTaskService { | ||
139 | task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode()); | 139 | task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode()); |
140 | task.setAssignedUser(ShiroUtils.getLoginName()); | 140 | task.setAssignedUser(ShiroUtils.getLoginName()); |
141 | task.setConfirmedBy(ShiroUtils.getLoginName()); | 141 | task.setConfirmedBy(ShiroUtils.getLoginName()); |
142 | + task.setStationCode(shipmentContainerHeader.getStationCode()); | ||
142 | task.setStatus(QuantityConstant.TASK_STATUS_BUILD); | 143 | task.setStatus(QuantityConstant.TASK_STATUS_BUILD); |
143 | task.setContainerCode(shipmentContainerHeader.getContainerCode()); | 144 | task.setContainerCode(shipmentContainerHeader.getContainerCode()); |
144 | if (!taskHeaderService.save(task)){ | 145 | if (!taskHeaderService.save(task)){ |
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java
@@ -56,4 +56,10 @@ public interface TaskHeaderService extends IService<TaskHeader>{ | @@ -56,4 +56,10 @@ public interface TaskHeaderService extends IService<TaskHeader>{ | ||
56 | 56 | ||
57 | AjaxResult setLocationCode(Integer taskId, Integer high); | 57 | AjaxResult setLocationCode(Integer taskId, Integer high); |
58 | 58 | ||
59 | + AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel); | ||
60 | + | ||
61 | + AjaxResult completeReceiptTask(TaskHeader task); | ||
62 | + | ||
63 | + AjaxResult createReceiptTask(List<Integer> ids); | ||
64 | + | ||
59 | } | 65 | } |
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
@@ -73,6 +73,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -73,6 +73,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
73 | @Resource | 73 | @Resource |
74 | private ShipmentContainerHeaderService shipmentContainerHeaderService; | 74 | private ShipmentContainerHeaderService shipmentContainerHeaderService; |
75 | @Resource | 75 | @Resource |
76 | + private ShipmentContainerDetailService shipmentContainerDetailService; | ||
77 | + @Resource | ||
76 | private LocationService locationService; | 78 | private LocationService locationService; |
77 | @Resource | 79 | @Resource |
78 | private ContainerService containerService; | 80 | private ContainerService containerService; |
@@ -84,12 +86,19 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -84,12 +86,19 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
84 | private InventoryHeaderService inventoryHeaderService; | 86 | private InventoryHeaderService inventoryHeaderService; |
85 | @Resource | 87 | @Resource |
86 | private InventoryDetailService inventoryDetailService; | 88 | private InventoryDetailService inventoryDetailService; |
87 | - | ||
88 | @Resource | 89 | @Resource |
89 | - private TransferTaskService transferTaskService; | 90 | + private InventoryTransactionService inventoryTransactionService; |
91 | + @Resource | ||
92 | + private ReceiptHeaderService receiptHeaderService; | ||
93 | + @Resource | ||
94 | + private ReceiptDetailService receiptDetailService; | ||
90 | @Resource | 95 | @Resource |
91 | private ReceiptContainerDetailService receiptContainerDetailService; | 96 | private ReceiptContainerDetailService receiptContainerDetailService; |
92 | @Resource | 97 | @Resource |
98 | + private ShipmentHeaderService shipmentHeaderService; | ||
99 | + @Resource | ||
100 | + private ShipmentDetailService shipmentDetailService; | ||
101 | + @Resource | ||
93 | private CycleCountDetailService cycleCountDetailService; | 102 | private CycleCountDetailService cycleCountDetailService; |
94 | @Resource | 103 | @Resource |
95 | private CycleCountHeaderService cycleCountHeaderService; | 104 | private CycleCountHeaderService cycleCountHeaderService; |
@@ -97,9 +106,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -97,9 +106,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
97 | private ReceiptContainerHeaderService receiptContainerHeaderService; | 106 | private ReceiptContainerHeaderService receiptContainerHeaderService; |
98 | @Resource | 107 | @Resource |
99 | private TaskHeaderMapper taskHeaderMapper; | 108 | private TaskHeaderMapper taskHeaderMapper; |
100 | - @Resource | 109 | + @Autowired |
101 | private TaskAssignService taskAssignService; | 110 | private TaskAssignService taskAssignService; |
102 | @Resource | 111 | @Resource |
112 | + private ContainerCapacityService containerCapacityService; | ||
113 | + @Resource | ||
114 | + private ConfigWarningService configWarningService; | ||
115 | + @Resource | ||
116 | + private ReceivingService receivingService; | ||
117 | + @Resource | ||
103 | private CreateTaskMessage createTaskMessage; | 118 | private CreateTaskMessage createTaskMessage; |
104 | @Resource | 119 | @Resource |
105 | private ReceiptTaskService receiptTaskService; | 120 | private ReceiptTaskService receiptTaskService; |
@@ -107,6 +122,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -107,6 +122,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
107 | private ShipmentTaskService shipmentTaskService; | 122 | private ShipmentTaskService shipmentTaskService; |
108 | @Resource | 123 | @Resource |
109 | private WorkTaskService workTaskService; | 124 | private WorkTaskService workTaskService; |
125 | + @Resource | ||
126 | + private TransferTaskService transferTaskService; | ||
110 | 127 | ||
111 | /** | 128 | /** |
112 | * 盘点任务首选项 | 129 | * 盘点任务首选项 |
@@ -153,7 +170,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -153,7 +170,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
153 | } | 170 | } |
154 | if(list.get(0).getTaskType()==100 || list.get(0).getTaskType()==200){ | 171 | if(list.get(0).getTaskType()==100 || list.get(0).getTaskType()==200){ |
155 | //入库任务 | 172 | //入库任务 |
156 | - return receiptTaskService.completeReceiptTask((list.get(0))); | 173 | + return completeReceiptTask((list.get(0))); |
157 | } else { | 174 | } else { |
158 | throw new ServiceException("库位(" + locationCode + ")的任务不是上架,不能完成!"); | 175 | throw new ServiceException("库位(" + locationCode + ")的任务不是上架,不能完成!"); |
159 | } | 176 | } |
@@ -191,7 +208,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -191,7 +208,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
191 | } | 208 | } |
192 | List<Integer> ids = new ArrayList<>(); | 209 | List<Integer> ids = new ArrayList<>(); |
193 | ids.add(containerHeader.getId()); | 210 | ids.add(containerHeader.getId()); |
194 | - receiptTaskService.createReceiptTask(ids); | 211 | + this.createReceiptTask(ids); |
195 | return AjaxResult.success("成功!"); | 212 | return AjaxResult.success("成功!"); |
196 | } | 213 | } |
197 | 214 | ||
@@ -321,6 +338,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -321,6 +338,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
321 | return AjaxResult.success("取消任务成功!"); | 338 | return AjaxResult.success("取消任务成功!"); |
322 | } | 339 | } |
323 | 340 | ||
341 | + | ||
324 | /** | 342 | /** |
325 | * 容器收货上架 | 343 | * 容器收货上架 |
326 | * | 344 | * |
@@ -356,19 +374,145 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -356,19 +374,145 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
356 | if (StringUtils.isEmpty(ids)){ | 374 | if (StringUtils.isEmpty(ids)){ |
357 | return AjaxResult.error("id不能为空"); | 375 | return AjaxResult.error("id不能为空"); |
358 | } | 376 | } |
359 | - | ||
360 | Integer maxId = idList.stream().max(Comparator.comparing(Integer::intValue)).orElse(null); | 377 | Integer maxId = idList.stream().max(Comparator.comparing(Integer::intValue)).orElse(null); |
361 | 378 | ||
362 | LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery(); | 379 | LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery(); |
363 | lambda.select(ReceiptContainerHeader::getId) | 380 | lambda.select(ReceiptContainerHeader::getId) |
364 | .lt(ReceiptContainerHeader::getStatus, 10) | 381 | .lt(ReceiptContainerHeader::getStatus, 10) |
365 | .le(ReceiptContainerHeader::getId, maxId); | 382 | .le(ReceiptContainerHeader::getId, maxId); |
366 | - return receiptTaskService.createReceiptTask(idList); | 383 | + return createReceiptTask(idList); |
367 | } | 384 | } |
368 | return AjaxResult.error("生成入库任务失败"); | 385 | return AjaxResult.error("生成入库任务失败"); |
369 | } | 386 | } |
370 | 387 | ||
371 | /** | 388 | /** |
389 | + * 生成出库任务 | ||
390 | + * | ||
391 | + * @param shipmentTaskCreateModel | ||
392 | + * @return | ||
393 | + */ | ||
394 | + @Override | ||
395 | + @Transactional(rollbackFor = Exception.class) | ||
396 | + public AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel) { | ||
397 | + Boolean flag = true; | ||
398 | + Integer shipmentContainerHeaderId = shipmentTaskCreateModel.getShipmentContainerHeaderIds(); | ||
399 | + //获取表头 | ||
400 | + ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeaderId); | ||
401 | + if (shipmentContainerHeader == null) { | ||
402 | + return AjaxResult.error("出库货箱" + shipmentContainerHeaderId + "未找到,操作中止"); | ||
403 | + } | ||
404 | + if (shipmentContainerHeader.getStatus() >= QuantityConstant.SHIPMENT_CONTAINER_TASK) { | ||
405 | + return AjaxResult.error("出库货箱" + shipmentContainerHeader.getContainerCode() + "已经生成任务,请不要重复生成,操作中止"); | ||
406 | + } | ||
407 | + //获取所有子货箱 | ||
408 | + LambdaQueryWrapper<ShipmentContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
409 | + lambdaQueryWrapper.eq(ShipmentContainerDetail::getShippingContainerId, shipmentContainerHeader.getId()); | ||
410 | + List<ShipmentContainerDetail> shipmentContainerDetails = shipmentContainerDetailService.list(lambdaQueryWrapper); | ||
411 | + if (shipmentContainerDetails == null || shipmentContainerDetails.size() == 0) { | ||
412 | + return AjaxResult.error("货箱" + shipmentContainerHeader.getContainerCode() + "没有子任务,操作中止"); | ||
413 | + } | ||
414 | + //检测库位 | ||
415 | + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
416 | + locationLambdaQueryWrapper.eq(Location::getCode, shipmentContainerHeader.getLocationCode()) | ||
417 | + .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
418 | + .eq(Location::getDeleted, false); | ||
419 | + Location location = locationService.getOne(locationLambdaQueryWrapper); | ||
420 | + if (location == null) { | ||
421 | + return AjaxResult.error("库位禁用或不存在!"); | ||
422 | + } | ||
423 | + //创建任务头 | ||
424 | + TaskHeader task = new TaskHeader(); | ||
425 | + //分拣出库 | ||
426 | + task.setTaskType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT); | ||
427 | + task.setFromLocation(shipmentContainerHeader.getLocationCode()); | ||
428 | + task.setToLocation(shipmentContainerHeader.getLocationCode()); | ||
429 | + //判断是否整出任务,钱柜和AGV不能整出 | ||
430 | + | ||
431 | + //表示整出优先 | ||
432 | + //判断当前子货箱所有数量是否等于该托盘对应的所有库存的数量, | ||
433 | + //这里必须与库存的在库数量对比,后期可能存在一个配盘在执行任务,后一个配盘又在配这个的情况(这个时候不能整出) | ||
434 | + // 如果相等,则说明这个货箱包含了所有的数量,则可以整出,否则,创建拣选任务; | ||
435 | + //查询所有库存 | ||
436 | + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
437 | + inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode, shipmentContainerHeader.getLocationCode()) | ||
438 | + .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); | ||
439 | + List<InventoryDetail> inventories = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); | ||
440 | + BigDecimal inventoryTotal = new BigDecimal("0"); | ||
441 | + for (InventoryDetail item : inventories) { | ||
442 | + inventoryTotal = inventoryTotal.add(item.getQty()); | ||
443 | + } | ||
444 | + BigDecimal containerTotal = new BigDecimal("0"); | ||
445 | + for (ShipmentContainerDetail item : shipmentContainerDetails) { | ||
446 | + containerTotal = containerTotal.add(item.getQty()); | ||
447 | + } | ||
448 | + if (inventoryTotal.compareTo(containerTotal) == 0) { | ||
449 | + task.setTaskType(QuantityConstant.TASK_TYPE_WHOLESHIPMENT);//整盘出库 | ||
450 | + task.setToLocation(""); | ||
451 | + } | ||
452 | + | ||
453 | + task.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_PICKING); | ||
454 | + task.setAllocationHeadId(shipmentContainerHeader.getId()); | ||
455 | + task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode()); | ||
456 | + task.setCompanyCode(shipmentContainerHeader.getCompanyCode()); | ||
457 | + task.setAssignedUser(ShiroUtils.getLoginName()); | ||
458 | + task.setConfirmedBy(ShiroUtils.getLoginName()); | ||
459 | + task.setStatus(QuantityConstant.TASK_STATUS_BUILD); | ||
460 | + task.setContainerCode(shipmentContainerHeader.getContainerCode()); | ||
461 | + task.setCreatedBy(ShiroUtils.getLoginName()); | ||
462 | + task.setCreated(new Date()); | ||
463 | + task.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
464 | + task.setLastUpdated(null); | ||
465 | + this.save(task); | ||
466 | + //遍历子货箱创建子任务 | ||
467 | + for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetails) { | ||
468 | + TaskDetail taskDetail = new TaskDetail(); | ||
469 | + taskDetail.setTaskId(task.getId()); | ||
470 | + taskDetail.setInternalTaskType(task.getInternalTaskType()); | ||
471 | + taskDetail.setWarehouseCode(task.getWarehouseCode()); | ||
472 | + taskDetail.setCompanyCode(task.getCompanyCode()); | ||
473 | + taskDetail.setTaskType(task.getTaskType()); | ||
474 | + taskDetail.setToInventoryId(shipmentContainerDetail.getInventoryId()); | ||
475 | + taskDetail.setAllocationId(shipmentContainerDetail.getId()); | ||
476 | + taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode()); | ||
477 | + taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId()); | ||
478 | + taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode()); | ||
479 | + taskDetail.setMaterialName(shipmentContainerDetail.getMaterialName()); | ||
480 | + taskDetail.setMaterialSpec(shipmentContainerDetail.getMaterialSpec()); | ||
481 | + taskDetail.setMaterialUnit(shipmentContainerDetail.getMaterialUnit()); | ||
482 | + taskDetail.setFromInventoryId(shipmentContainerDetail.getInventoryId()); | ||
483 | + taskDetail.setQty(shipmentContainerDetail.getQty()); | ||
484 | + taskDetail.setContainerCode(task.getContainerCode()); | ||
485 | + taskDetail.setFromLocation(task.getFromLocation()); | ||
486 | + taskDetail.setToLocation(task.getToLocation()); | ||
487 | + taskDetail.setLot(shipmentContainerDetail.getLot()); | ||
488 | + taskDetail.setBatch(shipmentContainerDetail.getBatch()); | ||
489 | + taskDetail.setProjectNo(shipmentContainerDetail.getProjectNo()); | ||
490 | + taskDetail.setStatus(QuantityConstant.TASK_STATUS_BUILD); | ||
491 | + taskDetail.setWaveId(shipmentContainerDetail.getWaveId()); | ||
492 | + taskDetail.setInventorySts(shipmentContainerDetail.getInventorySts()); | ||
493 | + taskDetail.setCreatedBy(ShiroUtils.getLoginName()); | ||
494 | + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
495 | + flag = taskDetailService.save(taskDetail); | ||
496 | + if (flag == false) { | ||
497 | + throw new ServiceException("新建任务明细失败,sql报错"); | ||
498 | + } | ||
499 | + shipmentContainerDetail.setStatus(QuantityConstant.SHIPMENT_CONTAINER_TASK); | ||
500 | + } | ||
501 | + //更新货位状态 | ||
502 | + shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_TASK); | ||
503 | + flag = shipmentContainerHeaderService.updateById(shipmentContainerHeader); | ||
504 | + if (flag == false) { | ||
505 | + throw new ServiceException("修改组盘头状态失败,sql报错"); | ||
506 | + } | ||
507 | + | ||
508 | + flag = shipmentContainerDetailService.updateBatchById(shipmentContainerDetails); | ||
509 | + if (flag == false) { | ||
510 | + throw new ServiceException("修改组盘明细状态明细失败,sql报错"); | ||
511 | + } | ||
512 | + return AjaxResult.success(task.getId()); | ||
513 | + } | ||
514 | + | ||
515 | + /** | ||
372 | * 下发WCS执行任务 | 516 | * 下发WCS执行任务 |
373 | * 执行任务 | 517 | * 执行任务 |
374 | */ | 518 | */ |
@@ -382,9 +526,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -382,9 +526,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
382 | if (task.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) { | 526 | if (task.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) { |
383 | return AjaxResult.error("任务" + taskId + "已经下发,请不要重复下发,操作中止"); | 527 | return AjaxResult.error("任务" + taskId + "已经下发,请不要重复下发,操作中止"); |
384 | } | 528 | } |
385 | - | ||
386 | // 给wcs传递任务 | 529 | // 给wcs传递任务 |
387 | - taskAssignService.wcsTaskAssign(task); | 530 | + try { |
531 | + createTaskMessage.createTask(task); | ||
532 | + } catch (Exception e) { | ||
533 | + e.printStackTrace(); | ||
534 | + } | ||
388 | 535 | ||
389 | //修改任务头表 | 536 | //修改任务头表 |
390 | task.setId(taskId); | 537 | task.setId(taskId); |
@@ -415,12 +562,50 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -415,12 +562,50 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
415 | } | 562 | } |
416 | } | 563 | } |
417 | 564 | ||
565 | +// //修改入库明细 | ||
566 | +// if (task.getInternalTaskType()==100){ | ||
567 | +// ReceiptDetail receiptDetail = receiptDetailService.queryflow(receiptDetailService.getById(record.getId())); | ||
568 | +// if (!receiptDetailService.updateById(receiptDetail)){ | ||
569 | +// throw new ServiceException("更新状态失败"); | ||
570 | +// } | ||
571 | +// receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); | ||
572 | +// | ||
573 | +// //修改组盘表状态为20 | ||
574 | +// ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); | ||
575 | +// receiptContainerDetail.setStatus(20); | ||
576 | +// receiptContainerDetail.setLastUpdated(new Date()); | ||
577 | +// receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
578 | +// LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
579 | +// receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId,receiptDetail.getReceiptId()); | ||
580 | +// if (! receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)) | ||
581 | +// throw new ServiceException("更新组盘状态失败"); | ||
582 | +// } | ||
583 | +// | ||
584 | +// //修改出库单状态 | ||
585 | +// if (task.getInternalTaskType()==200){ | ||
586 | +// LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
587 | +// taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskId,task.getId()); | ||
588 | +// List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambdaQueryWrapper); | ||
589 | +// | ||
590 | +// for (TaskDetail taskDeatails: taskDetailList) { | ||
591 | +// LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
592 | +// shipmentDetailLambdaQueryWrapper.eq(ShipmentDetail::getId,taskDeatails.getBillDetailId()); | ||
593 | +// | ||
594 | +// ShipmentHeader shipmentHeader =new ShipmentHeader(); | ||
595 | +// shipmentHeader.setId(shipmentDetailService.getOne(shipmentDetailLambdaQueryWrapper).getShipmentId()); | ||
596 | +// shipmentHeader.setFirstStatus(100); | ||
597 | +// shipmentHeader.setLastStatus(100); | ||
598 | +// shipmentHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
599 | +// shipmentHeader.setLastUpdated(new Date()); | ||
600 | +// shipmentHeaderService.updateById(shipmentHeader); | ||
601 | +// } | ||
602 | +// } | ||
603 | + | ||
418 | } | 604 | } |
419 | return AjaxResult.success("执行下发任务成功", task); | 605 | return AjaxResult.success("执行下发任务成功", task); |
420 | } | 606 | } |
421 | 607 | ||
422 | @Override | 608 | @Override |
423 | - @Transactional(rollbackFor = Exception.class) | ||
424 | public AjaxResult completeTaskByWMS(Integer[] taskIds, String[] weightConvert) { | 609 | public AjaxResult completeTaskByWMS(Integer[] taskIds, String[] weightConvert) { |
425 | for (int i = 0;i<taskIds.length;i++) { | 610 | for (int i = 0;i<taskIds.length;i++) { |
426 | TaskHeader task = taskHeaderService.getById(taskIds[i]); | 611 | TaskHeader task = taskHeaderService.getById(taskIds[i]); |
@@ -444,8 +629,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -444,8 +629,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
444 | if(task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_EMPTYRECEIPT)){ | 629 | if(task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_EMPTYRECEIPT)){ |
445 | if(StringUtils.isEmpty(task.getToLocation())){ | 630 | if(StringUtils.isEmpty(task.getToLocation())){ |
446 | //自动分配库位 | 631 | //自动分配库位 |
447 | - // AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); | ||
448 | - // task.setToLocation((String)ajaxResult.getData()); | 632 | +// AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); |
633 | +// task.setToLocation((String)ajaxResult.getData()); | ||
449 | } | 634 | } |
450 | } | 635 | } |
451 | //如果没有库位不能完成 | 636 | //如果没有库位不能完成 |
@@ -468,6 +653,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -468,6 +653,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
468 | if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_SHELF) ) { | 653 | if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_SHELF) ) { |
469 | //入库任务 | 654 | //入库任务 |
470 | receiptTaskService.completeReceiptTask(task); | 655 | receiptTaskService.completeReceiptTask(task); |
656 | + combineInventory(task); | ||
471 | } | 657 | } |
472 | if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_PICKING) && | 658 | if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_PICKING) && |
473 | (task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT))) { | 659 | (task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT))) { |
@@ -476,7 +662,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -476,7 +662,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
476 | } | 662 | } |
477 | // 900 出库查看,空托出库查看 | 663 | // 900 出库查看,空托出库查看 |
478 | if (task.getTaskType().equals( QuantityConstant.TASK_TYPE_VIEW)) { | 664 | if (task.getTaskType().equals( QuantityConstant.TASK_TYPE_VIEW)) { |
479 | - workTaskService.completeCheckOutTask(task); | 665 | + workTaskService.completeCheckOutTask(task); |
480 | } | 666 | } |
481 | // 700 盘点 | 667 | // 700 盘点 |
482 | if (task.getTaskType().equals(QuantityConstant.TASK_TYPE_CYCLECOUNT)) { | 668 | if (task.getTaskType().equals(QuantityConstant.TASK_TYPE_CYCLECOUNT)) { |
@@ -496,6 +682,244 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -496,6 +682,244 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
496 | } | 682 | } |
497 | } | 683 | } |
498 | 684 | ||
685 | + | ||
686 | + /** | ||
687 | + * 完成入库任务 | ||
688 | + */ | ||
689 | + @Override | ||
690 | + @Transactional(rollbackFor = Exception.class) | ||
691 | + public AjaxResult completeReceiptTask(TaskHeader task) { | ||
692 | + List<Map<String, Object>> taskReceiptContainerDetail = taskHeaderMapper.getReceiptTask(task.getId()); | ||
693 | + if (taskReceiptContainerDetail.size() < 1) { | ||
694 | + return AjaxResult.success("未找到对应任务的入库单号!!!"); | ||
695 | + } | ||
696 | + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); | ||
697 | + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
698 | + .eq(InventoryHeader::getLocationCode, task.getToLocation()) | ||
699 | + .eq(InventoryHeader::getContainerCode, task.getContainerCode()); | ||
700 | + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); | ||
701 | + | ||
702 | + if(header == null) { | ||
703 | + //添加库存单 | ||
704 | + header = new InventoryHeader(); | ||
705 | + header.setWarehouseCode(task.getWarehouseCode()); | ||
706 | + header.setCompanyCode(task.getCompanyCode());//货主 | ||
707 | + header.setContainerCode(task.getContainerCode()); | ||
708 | + header.setContainerStatus("some"); | ||
709 | + header.setLocationCode(task.getToLocation()); | ||
710 | + header.setLocking(1); | ||
711 | + header.setEnable(1); | ||
712 | + header.setTotalQty(new BigDecimal(0)); | ||
713 | + header.setTotalWeight(task.getWeight()); | ||
714 | + header.setCreatedBy(ShiroUtils.getLoginName()); | ||
715 | + header.setCreated(new Date()); | ||
716 | + header.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
717 | + header.setLastUpdated(new Date()); | ||
718 | + if (!inventoryHeaderService.save(header)) { | ||
719 | + throw new ServiceException("添加库存单失败"); | ||
720 | + } | ||
721 | + } | ||
722 | + for (Map<String, Object> map : taskReceiptContainerDetail) { | ||
723 | + //将未完成的任务数量更新到库存表 | ||
724 | + if (DataUtils.getInteger(map.get("status")) < QuantityConstant.TASK_STATUS_COMPLETED) { | ||
725 | + | ||
726 | + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); | ||
727 | + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
728 | + .eq(InventoryDetail::getLocationCode, task.getToLocation()) | ||
729 | + .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode"))) | ||
730 | + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode"))) | ||
731 | + .eq(InventoryDetail::getBatch, DataUtils.getString(map.get("batch"))) | ||
732 | + .eq(InventoryDetail::getLot, DataUtils.getString(map.get("lot"))) | ||
733 | + .eq(InventoryDetail::getProjectNo, DataUtils.getString(map.get("projectNo"))) | ||
734 | + .eq(InventoryDetail::getCompanyCode, DataUtils.getString(map.get("companyCode"))); | ||
735 | + InventoryDetail detail = inventoryDetailService.getOne(inventory); | ||
736 | + if (detail == null) { | ||
737 | + //库存明细添加 | ||
738 | + detail = new InventoryDetail(); | ||
739 | + detail.setInventoryHeaderId(header.getId());//库存头ID | ||
740 | + detail.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库 | ||
741 | + detail.setCompanyCode(task.getCompanyCode());//货主 | ||
742 | + detail.setLocationCode(task.getToLocation());//库位号 | ||
743 | + detail.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号 | ||
744 | + detail.setMaterialCode(DataUtils.getString(map.get("materialCode")));//物料号 | ||
745 | + detail.setMaterialName(DataUtils.getString(map.get("materialName")));//物料名称 | ||
746 | + detail.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 | ||
747 | + detail.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 | ||
748 | + detail.setReceiptCode(DataUtils.getString(map.get("receiptCode")));//入库单编码 | ||
749 | + detail.setReceiptDetailId(DataUtils.getInteger(map.get("receiptDetailId")));//入库单明细ID | ||
750 | + detail.setBatch(DataUtils.getString(map.get("batch")));//批次 | ||
751 | + detail.setLot(DataUtils.getString(map.get("lot")));//批号 | ||
752 | + detail.setProjectNo(DataUtils.getString(map.get("projectNo")));//项目号 | ||
753 | + detail.setInventorySts(DataUtils.getString(map.get("inventorySts")));//库存状态 | ||
754 | +// detail.setManufactureDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("manufactureDate").toString()));//生产日期 | ||
755 | +// detail.setExpirationDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("expirationDate").toString()));//失效日期 | ||
756 | + detail.setQty(DataUtils.getBigDecimal(map.get("qty")));//数量 | ||
757 | + detail.setLockedQty(DataUtils.getBigDecimal(0)); | ||
758 | + detail.setTaskQty(DataUtils.getBigDecimal(0)); | ||
759 | + detail.setCreatedBy(ShiroUtils.getLoginName());//创建人 | ||
760 | + detail.setLastUpdatedBy(ShiroUtils.getLoginName());//创建时间 | ||
761 | + if (!inventoryDetailService.save(detail)) { | ||
762 | + throw new ServiceException("添加库存明细失败"); | ||
763 | + } | ||
764 | + } else { | ||
765 | + detail.setQty(detail.getQty().add(DataUtils.getBigDecimal(map.get("qty")))); | ||
766 | + detail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
767 | + LambdaUpdateWrapper<InventoryDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
768 | + lambdaUpdateWrapper.eq(InventoryDetail::getId, detail.getId()); | ||
769 | + if (!inventoryDetailService.update(detail, lambdaUpdateWrapper)){ | ||
770 | + throw new ServiceException("更新库存明细失败"); | ||
771 | + } | ||
772 | + } | ||
773 | + //记录库存交易记录 | ||
774 | + InventoryTransaction inventoryTransaction = new InventoryTransaction(); | ||
775 | + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT); | ||
776 | + inventoryTransaction.setWarehouseCode(DataUtils.getString(map.get("warehouseCode"))); | ||
777 | + inventoryTransaction.setCompanyCode(task.getCompanyCode()); | ||
778 | + inventoryTransaction.setLocationCode(task.getToLocation()); | ||
779 | + inventoryTransaction.setContainerCode(DataUtils.getString(map.get("containerCode"))); | ||
780 | + inventoryTransaction.setMaterialCode(DataUtils.getString(map.get("materialCode"))); | ||
781 | + inventoryTransaction.setMaterialName(DataUtils.getString(map.get("materialName"))); | ||
782 | + inventoryTransaction.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格 | ||
783 | + inventoryTransaction.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位 | ||
784 | + inventoryTransaction.setBillCode(DataUtils.getString(map.get("receiptCode"))); | ||
785 | + inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId"))); | ||
786 | + inventoryTransaction.setBatch(DataUtils.getString(map.get("batch"))); | ||
787 | + inventoryTransaction.setLot(DataUtils.getString(map.get("lot"))); | ||
788 | + inventoryTransaction.setInventorySts(DataUtils.getString((map.get("inventorySts")))); | ||
789 | + inventoryTransaction.setTaskQty(DataUtils.getBigDecimal(map.get("qty"))); | ||
790 | + inventoryTransaction.setCreated(new Date()); | ||
791 | + inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName()); | ||
792 | + if (!inventoryTransactionService.save(inventoryTransaction)) { | ||
793 | + throw new ServiceException("新增库存记录失败"); | ||
794 | + } | ||
795 | + | ||
796 | + //修改任务明细的状态为完成 | ||
797 | + TaskDetail taskDetail = new TaskDetail(); | ||
798 | + taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | ||
799 | + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
800 | + taskDetail.setAgingDate(new Date()); //入库时间 | ||
801 | + LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
802 | + lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId()); | ||
803 | + taskDetailService.update(taskDetail, lambdaUpdateWrapper); | ||
804 | + if (!taskDetailService.update(taskDetail, lambdaUpdateWrapper)) { | ||
805 | + throw new ServiceException("修改入库单明细失败"); | ||
806 | + } | ||
807 | + | ||
808 | + } | ||
809 | + | ||
810 | + } | ||
811 | + //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成 | ||
812 | + task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | ||
813 | + task.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
814 | + task.setLastUpdated(new Date()); | ||
815 | + LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
816 | + taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId()); | ||
817 | + if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper)){ | ||
818 | + throw new ServiceException("更新任务主表失败"); | ||
819 | + } | ||
820 | + //修改库位状态和对应的容器 | ||
821 | + Location location = new Location(); | ||
822 | + location.setContainerCode(task.getContainerCode()); | ||
823 | + location.setStatus("empty"); | ||
824 | + LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
825 | + locationLambdaUpdateWrapper.eq(Location::getCode, task.getToLocation()); | ||
826 | + if (!locationService.update(location, locationLambdaUpdateWrapper)){ | ||
827 | + throw new ServiceException("更新库位失败"); | ||
828 | + } | ||
829 | + //修改容器状态和对应的库位 | ||
830 | + Container container = new Container(); | ||
831 | + container.setLocationCode(task.getToLocation()); | ||
832 | + container.setStatus("some"); | ||
833 | + LambdaUpdateWrapper<Container> containerLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
834 | + containerLambdaUpdateWrapper.eq(Container::getCode, task.getContainerCode()); | ||
835 | + if (!containerService.update(container, containerLambdaUpdateWrapper)) { | ||
836 | + throw new ServiceException("更新容器失败"); | ||
837 | + } | ||
838 | + //修改组盘表状态为20 | ||
839 | + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); | ||
840 | + receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_REVIEWSUCCESS); | ||
841 | + receiptContainerDetail.setProcessStamp("0"); | ||
842 | + receiptContainerDetail.setLastUpdated(new Date()); | ||
843 | + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
844 | + LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
845 | + receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); | ||
846 | + if (!receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper)){ | ||
847 | + throw new ServiceException("更新组盘状态失败"); | ||
848 | + } | ||
849 | + | ||
850 | + //修改入库组盘头表状态 | ||
851 | + | ||
852 | + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); | ||
853 | + receiptContainerHeader.setId(task.getAllocationHeadId()); | ||
854 | + receiptContainerHeader.setLastUpdated(new Date()); | ||
855 | + receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
856 | + receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED.intValue()); | ||
857 | + if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { | ||
858 | + throw new ServiceException("更新入库组盘头表状态失败"); | ||
859 | + } | ||
860 | + | ||
861 | + //修改入库单状态 | ||
862 | + ReceiptHeader receiptHeader = new ReceiptHeader(); | ||
863 | + receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POSTING); | ||
864 | + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING); | ||
865 | + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
866 | + receiptHeader.setLastUpdated(new Date()); | ||
867 | + LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); | ||
868 | + receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(taskReceiptContainerDetail.get(0).get("receiptId"))); | ||
869 | + if (!receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper)) { | ||
870 | + throw new ServiceException("更新入库头表状态失败"); | ||
871 | + } | ||
872 | + return AjaxResult.success("完成入库任务"); | ||
873 | + } | ||
874 | + | ||
875 | + @Transactional(rollbackFor = Exception.class) | ||
876 | + public void combineInventory(TaskHeader task) { | ||
877 | + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); | ||
878 | + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
879 | + .eq(InventoryHeader::getLocationCode, task.getToLocation()) | ||
880 | + .eq(InventoryHeader::getContainerCode, task.getContainerCode()); | ||
881 | + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); | ||
882 | + if(header != null) { | ||
883 | + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); | ||
884 | + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
885 | + .eq(InventoryDetail::getLocationCode, task.getFromLocation()) | ||
886 | + .eq(InventoryDetail::getContainerCode, task.getContainerCode()); | ||
887 | + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventory); | ||
888 | + for(int i=0; i < inventoryDetailList.size() -1; i++) { | ||
889 | + for(int j = inventoryDetailList.size() - 1; j > i; j--) { | ||
890 | + InventoryDetail inventoryDetail = inventoryDetailList.get(i); | ||
891 | + InventoryDetail inventoryDetail2 = inventoryDetailList.get(j); | ||
892 | + if(inventoryDetail.getMaterialCode().equals(inventoryDetail2.getMaterialCode()) | ||
893 | + && inventoryDetail.getBatch().equals(inventoryDetail2.getBatch()) | ||
894 | + && inventoryDetail.getLot().equals(inventoryDetail2.getLot()) | ||
895 | + && inventoryDetail.getProjectNo().equals(inventoryDetail2.getProjectNo())) { | ||
896 | + BigDecimal totalQty = inventoryDetailList.get(i).getQty().add(inventoryDetailList.get(j).getQty()); | ||
897 | + inventoryDetailList.get(i).setQty(totalQty); | ||
898 | + LambdaQueryWrapper<InventoryDetail> wrapper = Wrappers.lambdaQuery(); | ||
899 | + wrapper.eq(InventoryDetail::getId, inventoryDetailList.get(i).getId()); | ||
900 | + inventoryDetailService.update(inventoryDetailList.get(i), wrapper); | ||
901 | + LambdaQueryWrapper<InventoryDetail> wrapper2 = Wrappers.lambdaQuery(); | ||
902 | + wrapper2.eq(InventoryDetail::getId, inventoryDetailList.get(j).getId()); | ||
903 | + inventoryDetailService.remove(wrapper2); | ||
904 | + inventoryDetailList.remove(j); | ||
905 | + } | ||
906 | + } | ||
907 | + } | ||
908 | + BigDecimal totalQty = new BigDecimal(0); | ||
909 | + int totalLines = 0; | ||
910 | + for(InventoryDetail inventoryDetail : inventoryDetailList) { | ||
911 | + totalQty = totalQty.add(inventoryDetail.getQty()); | ||
912 | + totalLines++; | ||
913 | + } | ||
914 | + header.setTotalQty(totalQty); | ||
915 | + header.setTotalLines(totalLines); | ||
916 | + header.setContainerStatus("some"); | ||
917 | + LambdaQueryWrapper<InventoryHeader> wrapper = Wrappers.lambdaQuery(); | ||
918 | + wrapper.eq(InventoryHeader::getId, header.getId()); | ||
919 | + inventoryHeaderService.update(header, wrapper); | ||
920 | + } | ||
921 | + } | ||
922 | + | ||
499 | /** | 923 | /** |
500 | * 移动端创建入库任务 | 924 | * 移动端创建入库任务 |
501 | * | 925 | * |
@@ -518,11 +942,138 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -518,11 +942,138 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
518 | } | 942 | } |
519 | List<Integer> idList = new ArrayList<>(); | 943 | List<Integer> idList = new ArrayList<>(); |
520 | idList.add(receiptContainerHeader.getId()); | 944 | idList.add(receiptContainerHeader.getId()); |
521 | - receiptTaskService.createReceiptTask(idList); | 945 | + createReceiptTask(idList); |
522 | 946 | ||
523 | return AjaxResult.success(receiptContainerHeader); | 947 | return AjaxResult.success(receiptContainerHeader); |
524 | } | 948 | } |
525 | 949 | ||
950 | + | ||
951 | + /** | ||
952 | + * 完成移库任务 | ||
953 | + * | ||
954 | + * @param task | ||
955 | + */ | ||
956 | + @Transactional(rollbackFor = Exception.class) | ||
957 | + public void completeTransferTask(TaskHeader task) { | ||
958 | + //找到任务明细 | ||
959 | + TaskDetail taskDetail = new TaskDetail(); | ||
960 | + taskDetail.setTaskId(task.getId()); | ||
961 | + taskDetail.setWarehouseCode(task.getWarehouseCode()); | ||
962 | + taskDetail.setCompanyCode(task.getCompanyCode()); | ||
963 | + taskDetail.setContainerCode(task.getContainerCode()); | ||
964 | + LambdaQueryWrapper<TaskDetail> taskDetailLW = Wrappers.lambdaQuery(taskDetail); | ||
965 | + taskDetail = taskDetailService.getOne(taskDetailLW); | ||
966 | + //更新库存主表和明细的库位,更改更新用户和时间 | ||
967 | + InventoryHeader inventoryHeader = new InventoryHeader(); | ||
968 | + //主表 | ||
969 | + inventoryHeader.setWarehouseCode(taskDetail.getWarehouseCode()); | ||
970 | + inventoryHeader.setCompanyCode(taskDetail.getCompanyCode()); | ||
971 | + inventoryHeader.setContainerCode(taskDetail.getContainerCode()); | ||
972 | + inventoryHeader.setLocationCode(taskDetail.getFromLocation());//通过源库位查找库存 | ||
973 | + LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(inventoryHeader); | ||
974 | + inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper); | ||
975 | + if (StringUtils.isNotNull(inventoryHeader)){ | ||
976 | + inventoryHeader.setLocationCode(taskDetail.getToLocation());//把目的库位写入库存 | ||
977 | + inventoryHeader.setLastUpdated(new Date()); | ||
978 | + inventoryHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
979 | + inventoryHeaderService.saveOrUpdate(inventoryHeader);//修改主表库位 | ||
980 | + | ||
981 | + //明细表 | ||
982 | + List<InventoryDetail> inventoryDetails = new ArrayList<>(); | ||
983 | + InventoryDetail inventoryDetail = new InventoryDetail(); | ||
984 | + inventoryDetail.setWarehouseCode(inventoryHeader.getWarehouseCode()); | ||
985 | + inventoryDetail.setCompanyCode(inventoryHeader.getCompanyCode()); | ||
986 | + inventoryDetail.setInventoryHeaderId(inventoryHeader.getId()); | ||
987 | + LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(inventoryDetail); | ||
988 | + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); | ||
989 | + /*同时写入库存交易表*/ | ||
990 | + List<InventoryTransaction> inventoryTransactionList = new ArrayList<>(); | ||
991 | + for (InventoryDetail item : inventoryDetailList) { | ||
992 | + item.setLocationCode(inventoryHeader.getLocationCode());//修改明细表库位 | ||
993 | + item.setLastUpdated(new Date()); | ||
994 | + item.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
995 | + inventoryDetails.add(item); | ||
996 | + /*----------*/ | ||
997 | + InventoryTransaction inventoryTransaction = new InventoryTransaction(); | ||
998 | + inventoryTransaction.setWarehouseCode(task.getWarehouseCode()); | ||
999 | + inventoryTransaction.setLocationCode(taskDetail.getToLocation()); | ||
1000 | + inventoryTransaction.setContainerCode(taskDetail.getContainerCode()); | ||
1001 | + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTPROPERTIES); | ||
1002 | + inventoryTransaction.setMaterialCode(item.getMaterialCode()); | ||
1003 | + inventoryTransaction.setManufactureDate(item.getManufactureDate()); | ||
1004 | + inventoryTransaction.setMaterialName(item.getMaterialName()); | ||
1005 | + inventoryTransaction.setMaterialSpec(item.getMaterialSpec()); | ||
1006 | + inventoryTransaction.setMaterialUnit(item.getMaterialUnit()); | ||
1007 | + inventoryTransaction.setTaskQty(BigDecimal.ZERO); | ||
1008 | + inventoryTransaction.setInventorySts(item.getInventorySts()); | ||
1009 | + inventoryTransaction.setCompanyCode(item.getCompanyCode()); | ||
1010 | + inventoryTransaction.setReferDetailId(item.getId().toString()); | ||
1011 | + inventoryTransaction.setBatch(item.getBatch()); | ||
1012 | + inventoryTransaction.setLot(item.getLot()); | ||
1013 | + inventoryTransaction.setProjectNo(item.getProjectNo()); | ||
1014 | + inventoryTransaction.setWeight(item.getWeight()); | ||
1015 | + inventoryTransaction.setManufactureDate(item.getManufactureDate()); | ||
1016 | + inventoryTransaction.setExpirationDate(item.getExpirationDate()); | ||
1017 | + inventoryTransaction.setAgingDate(item.getCreated()); | ||
1018 | + inventoryTransaction.setAttributeId(item.getAttributeId()); | ||
1019 | + inventoryTransaction.setAttribute1(item.getAttribute1()); | ||
1020 | + inventoryTransaction.setAttribute2(item.getAttribute2()); | ||
1021 | + inventoryTransaction.setAttribute3(item.getAttribute3()); | ||
1022 | + inventoryTransaction.setCreated(new Date()); | ||
1023 | + inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName()); | ||
1024 | + //inventoryTransaction.setLockCode(); | ||
1025 | + inventoryTransaction.setBillCode(item.getInventoryHeaderId().toString()); | ||
1026 | + inventoryTransaction.setBillDetailId(item.getId()); | ||
1027 | + inventoryTransaction.setSupplierCode(item.getSupplierCode()); | ||
1028 | + inventoryTransactionList.add(inventoryTransaction); | ||
1029 | + } | ||
1030 | + if(inventoryDetails != null && inventoryDetails.size() > 0) { | ||
1031 | + if (inventoryDetailService.saveOrUpdateBatch(inventoryDetails)) { | ||
1032 | + //更新库存明细成功后,写入库存交易 | ||
1033 | + inventoryTransactionService.saveBatch(inventoryTransactionList); | ||
1034 | + } else { | ||
1035 | + throw new ServiceException("库存明细更新错误!"); | ||
1036 | + } | ||
1037 | + } | ||
1038 | + | ||
1039 | + } | ||
1040 | + //更新托盘、库位状态 | ||
1041 | + Location temp1 = new Location(); //源库位 | ||
1042 | + temp1.setCode(taskDetail.getFromLocation()); | ||
1043 | + temp1.setWarehouseCode(ShiroUtils.getWarehouseCode()); | ||
1044 | + LambdaQueryWrapper<Location> lambdaQueryWrapper1 = Wrappers.lambdaQuery(temp1); | ||
1045 | + Location loc1 = locationService.getOne(lambdaQueryWrapper1); | ||
1046 | + | ||
1047 | + Location temp2 = new Location();//目的库位 | ||
1048 | + temp2.setCode(taskDetail.getToLocation()); | ||
1049 | + temp2.setWarehouseCode(ShiroUtils.getWarehouseCode()); | ||
1050 | + LambdaQueryWrapper<Location> lambdaQueryWrapper2 = Wrappers.lambdaQuery(temp2); | ||
1051 | + Location loc2 = locationService.getOne(lambdaQueryWrapper2); | ||
1052 | + loc2.setContainerCode(loc1.getContainerCode()); | ||
1053 | + loc2.setStatus("empty"); | ||
1054 | + loc1.setContainerCode(""); | ||
1055 | + loc1.setStatus("empty"); | ||
1056 | + locationService.saveOrUpdate(loc1); | ||
1057 | + locationService.saveOrUpdate(loc2); | ||
1058 | + | ||
1059 | + Container container = containerService.findAllByCode(task.getContainerCode()); | ||
1060 | + container.setLocationCode(task.getToLocation()); | ||
1061 | + if (!containerService.updateById(container)){ | ||
1062 | + throw new ServiceException("更新容器失败"); | ||
1063 | + } | ||
1064 | + | ||
1065 | + //更新taskHeader状态 | ||
1066 | + task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | ||
1067 | + task.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
1068 | + task.setLastUpdated(new Date()); | ||
1069 | + taskHeaderService.saveOrUpdate(task); | ||
1070 | + //更新taskDetail状态 | ||
1071 | + taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | ||
1072 | + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
1073 | + taskDetail.setLastUpdated(new Date()); | ||
1074 | + taskDetailService.saveOrUpdate(taskDetail); | ||
1075 | + } | ||
1076 | + | ||
526 | /** | 1077 | /** |
527 | * 盘点完成 | 1078 | * 盘点完成 |
528 | * | 1079 | * |
@@ -578,6 +1129,191 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -578,6 +1129,191 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
578 | } | 1129 | } |
579 | 1130 | ||
580 | /** | 1131 | /** |
1132 | + * 完成空托盘入库任务 | ||
1133 | + * | ||
1134 | + * @param taskHeader | ||
1135 | + */ | ||
1136 | + @Transactional(rollbackFor = Exception.class) | ||
1137 | + public void completeEmptyIn(TaskHeader taskHeader) { | ||
1138 | + | ||
1139 | + //完成任务,修改主单和明细状态 | ||
1140 | + taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | ||
1141 | + taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
1142 | + taskHeader.setLastUpdated(new Date()); | ||
1143 | + //taskHeaderService.saveOrUpdate(taskHeader); | ||
1144 | + //taskDetail更新明细单总的状态 | ||
1145 | + TaskDetail taskDetail = new TaskDetail(); | ||
1146 | + taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); | ||
1147 | + taskDetail.setTaskType(taskHeader.getTaskType()); | ||
1148 | + taskDetail.setTaskId(taskHeader.getId()); | ||
1149 | + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(taskDetail); | ||
1150 | + List<TaskDetail> taskDetailList = taskDetailService.list(lambdaQueryWrapper);//查询子单 | ||
1151 | + for (TaskDetail item : taskDetailList) { | ||
1152 | + item.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); | ||
1153 | + item.setLastUpdatedBy(ShiroUtils.getLoginName()); //更新用户 | ||
1154 | + item.setLastUpdated(new Date()); //更新时间 | ||
1155 | + } | ||
1156 | + if (taskDetailService.saveOrUpdateBatch(taskDetailList) == false || | ||
1157 | + taskHeaderService.saveOrUpdate(taskHeader) == false) { | ||
1158 | + throw new ServiceException("任务单据状态更新失败!"); | ||
1159 | + } | ||
1160 | + //解锁容器,更新库位 | ||
1161 | + containerService.updateLocationCodeAndStatus(taskHeader.getContainerCode(), taskHeader.getToLocation(), "empty"); | ||
1162 | + //解锁库位,更新容器 | ||
1163 | + locationService.updateContainerCodeAndStatus(taskHeader.getToLocation(), taskHeader.getContainerCode(), "empty"); | ||
1164 | + | ||
1165 | + //写入库存头表 | ||
1166 | + InventoryHeader inventoryHeader = new InventoryHeader(); | ||
1167 | + inventoryHeader.setWarehouseCode(taskHeader.getWarehouseCode()); | ||
1168 | + inventoryHeader.setLocationCode(taskHeader.getToLocation()); | ||
1169 | + inventoryHeader.setContainerCode(taskHeader.getContainerCode()); | ||
1170 | + inventoryHeader.setContainerStatus("empty"); | ||
1171 | + inventoryHeader.setCompanyCode(taskHeader.getCompanyCode()); | ||
1172 | + inventoryHeader.setMaterialSkuQty("0"); | ||
1173 | + inventoryHeader.setTotalWeight("0"); | ||
1174 | + inventoryHeader.setTotalQty(new BigDecimal(0)); | ||
1175 | + inventoryHeader.setTotalLines(0); | ||
1176 | + inventoryHeader.setProjectNos(""); | ||
1177 | + inventoryHeader.setBatchs(""); | ||
1178 | + inventoryHeader.setLots(""); | ||
1179 | + inventoryHeader.setLockRemark(""); | ||
1180 | + inventoryHeader.setCreated(new Date()); | ||
1181 | + inventoryHeader.setCreatedBy(ShiroUtils.getLoginName()); | ||
1182 | + inventoryHeader.setLastUpdated(new Date()); | ||
1183 | + inventoryHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
1184 | + Boolean j = inventoryHeaderService.save(inventoryHeader); | ||
1185 | + if(!j){ | ||
1186 | + throw new ServiceException("新增空托库存头失败!"); | ||
1187 | + | ||
1188 | + } | ||
1189 | + } | ||
1190 | + | ||
1191 | + /** | ||
1192 | + * 创建上架任务 | ||
1193 | + * | ||
1194 | + * @param ids | ||
1195 | + * @return | ||
1196 | + */ | ||
1197 | + @Override | ||
1198 | + @Transactional(rollbackFor = Exception.class) | ||
1199 | + public AjaxResult createReceiptTask(List<Integer> ids) { | ||
1200 | + for (Integer id : ids) { | ||
1201 | + ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(id); | ||
1202 | + if (receiptContainerHeader == null) { | ||
1203 | + throw new ServiceException("任务不存在!"); | ||
1204 | + } | ||
1205 | + | ||
1206 | + if (!receiptContainerHeader.getWarehouseCode().equals(ShiroUtils.getWarehouseCode())) { | ||
1207 | + throw new ServiceException("任务不在当前仓库!"); | ||
1208 | + } | ||
1209 | + | ||
1210 | + //锁定容器 | ||
1211 | + Container container = new Container(); | ||
1212 | + container.setStatus("lock"); | ||
1213 | + LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate(); | ||
1214 | + containerUpdateWrapper.eq(Container::getCode, receiptContainerHeader.getContainerCode()); | ||
1215 | + containerService.update(container, containerUpdateWrapper); | ||
1216 | + | ||
1217 | + //查询入库组盘明细 | ||
1218 | + LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery(); | ||
1219 | + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, id); | ||
1220 | + List<ReceiptContainerDetail> list = receiptContainerDetailService.list(containerDetailLambda); | ||
1221 | + | ||
1222 | + if (list.size() < 1) { | ||
1223 | + throw new ServiceException("没有组盘明细,请先组盘!"); | ||
1224 | + } | ||
1225 | + if (receiptContainerHeader.getStatus() == QuantityConstant.RECEIPT_CONTAINER_BUILD.intValue()) { | ||
1226 | + if (receiptContainerHeader.getStatus().intValue() < QuantityConstant.RECEIPT_CONTAINER_TASK) { | ||
1227 | + receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK.intValue()); | ||
1228 | + receiptContainerHeaderService.updateById(receiptContainerHeader); | ||
1229 | + } | ||
1230 | + //添加任务主表 | ||
1231 | + TaskHeader task = new TaskHeader(); | ||
1232 | + task.setAllocationHeadId(receiptContainerHeader.getId()); | ||
1233 | + task.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHELF); | ||
1234 | + task.setWarehouseCode(receiptContainerHeader.getWarehouseCode()); | ||
1235 | + task.setCompanyCode(receiptContainerHeader.getCompanyCode()); | ||
1236 | + task.setTaskType(Integer.valueOf(receiptContainerHeader.getTaskType())); | ||
1237 | + task.setFromLocation(receiptContainerHeader.getFromLocation()); | ||
1238 | + task.setToLocation(receiptContainerHeader.getToLocation()); | ||
1239 | + task.setContainerCode(receiptContainerHeader.getContainerCode()); | ||
1240 | + task.setRecvDock(receiptContainerHeader.getRecvDock()); | ||
1241 | + task.setCreated(new Date()); | ||
1242 | + task.setCreatedBy(ShiroUtils.getLoginName()); | ||
1243 | + if (this.save(task)) { | ||
1244 | + //添加任务明细表 | ||
1245 | + int conatinQty = 0; | ||
1246 | + for (ReceiptContainerDetail item : list) { | ||
1247 | + LambdaQueryWrapper<ContainerCapacity> lambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
1248 | + String[] containCodeSplit = task.getContainerCode().split("\\D"); | ||
1249 | + String containType = containCodeSplit[0]; | ||
1250 | + lambdaQueryWrapper.eq(ContainerCapacity::getContainerType, task.getContainerCode()) | ||
1251 | + .eq(ContainerCapacity::getMaterialCode, item.getMaterialCode()) | ||
1252 | + .eq(ContainerCapacity::getWarehouseCode, ShiroUtils.getWarehouseCode()) | ||
1253 | + .eq(ContainerCapacity::getEnable, 0); | ||
1254 | + ContainerCapacity containerCapacity = containerCapacityService.getOne(lambdaQueryWrapper); | ||
1255 | + | ||
1256 | + TaskDetail taskDetail = new TaskDetail(); | ||
1257 | + taskDetail.setTaskId(task.getId()); | ||
1258 | + taskDetail.setTaskType(Integer.valueOf(receiptContainerHeaderService.getById(item.getReceiptContainerId()).getTaskType())); | ||
1259 | + taskDetail.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHELF); | ||
1260 | + taskDetail.setWarehouseCode(task.getWarehouseCode()); | ||
1261 | + taskDetail.setAllocationId(item.getId()); | ||
1262 | + taskDetail.setCompanyCode(task.getCompanyCode()); | ||
1263 | + taskDetail.setCompanyCode(task.getCompanyCode()); | ||
1264 | + taskDetail.setMaterialCode(item.getMaterialCode()); | ||
1265 | + taskDetail.setMaterialName(item.getMaterialName()); | ||
1266 | + taskDetail.setMaterialSpec(item.getMaterialSpec()); | ||
1267 | + taskDetail.setMaterialUnit(item.getMaterialUnit()); | ||
1268 | + taskDetail.setBillCode(item.getReceiptCode()); | ||
1269 | + taskDetail.setBillDetailId(item.getReceiptDetailId()); | ||
1270 | + taskDetail.setBillCode(item.getReceiptCode()); | ||
1271 | + taskDetail.setQty(item.getQty()); | ||
1272 | + taskDetail.setContainerCode(task.getContainerCode()); | ||
1273 | + taskDetail.setFromLocation(task.getFromLocation()); | ||
1274 | + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | ||
1275 | + taskDetail.setBatch(item.getBatch()); | ||
1276 | + taskDetail.setProjectNo(item.getProjectNo()); | ||
1277 | + if (containerCapacity != null) { | ||
1278 | + conatinQty += (int) Math.floor(item.getQty().intValue() / containerCapacity.getQty().intValue()); | ||
1279 | + taskDetail.setContainQty((int) Math.floor(item.getQty().intValue() / containerCapacity.getQty().intValue())); | ||
1280 | + } | ||
1281 | + if (!taskDetailService.save(taskDetail)) { | ||
1282 | + throw new ServiceException("生成任务明细失败"); | ||
1283 | + } | ||
1284 | + | ||
1285 | + //更新入库组盘明细状态 | ||
1286 | + item.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK); | ||
1287 | + if (!receiptContainerDetailService.updateById(item)) { | ||
1288 | + throw new ServiceException("更新入库组盘明细状态出错"); | ||
1289 | + } | ||
1290 | + | ||
1291 | + /** | ||
1292 | + * 修改明细状态为上架 | ||
1293 | + */ | ||
1294 | + ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId()); | ||
1295 | + receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_SHELF)); | ||
1296 | + if (!receiptDetailService.updateById(receiptDetail)) { | ||
1297 | + throw new ServiceException("更新入库单详情失败"); | ||
1298 | + } | ||
1299 | + //更新头表状态 | ||
1300 | + receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); | ||
1301 | + | ||
1302 | + } | ||
1303 | + | ||
1304 | + task.setContainQty(conatinQty); | ||
1305 | + if (!taskHeaderService.updateById(task)) { | ||
1306 | + throw new ServiceException("更新任务头表容器数量失败"); | ||
1307 | + } | ||
1308 | + } else { | ||
1309 | + throw new ServiceException("生成任务头表失败"); | ||
1310 | + } | ||
1311 | + } | ||
1312 | + } | ||
1313 | + return AjaxResult.success("生成上架任务成功"); | ||
1314 | + } | ||
1315 | + | ||
1316 | + /** | ||
581 | * 自动空托出库 | 1317 | * 自动空托出库 |
582 | * */ | 1318 | * */ |
583 | @Override | 1319 | @Override |
@@ -604,7 +1340,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -604,7 +1340,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
604 | inventoryHeaderService.createEmptyOut(container.getCode(), location.getCode()); | 1340 | inventoryHeaderService.createEmptyOut(container.getCode(), location.getCode()); |
605 | return AjaxResult.success("空容器出库任务已下发!",container.getCode()); | 1341 | return AjaxResult.success("空容器出库任务已下发!",container.getCode()); |
606 | } | 1342 | } |
607 | - | 1343 | + |
608 | /** | 1344 | /** |
609 | * 自动分配库位 | 1345 | * 自动分配库位 |
610 | * @param taskId 任务号 | 1346 | * @param taskId 任务号 |
@@ -621,11 +1357,26 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -621,11 +1357,26 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
621 | if (StringUtils.isNotEmpty(taskHeader.getToLocation())) { | 1357 | if (StringUtils.isNotEmpty(taskHeader.getToLocation())) { |
622 | return AjaxResult.success("任务已经有目的库位,不需要再分配"); | 1358 | return AjaxResult.success("任务已经有目的库位,不需要再分配"); |
623 | } | 1359 | } |
1360 | +// Location location = new Location(); | ||
1361 | +// location.setWarehouseCode(ShiroUtils.getWarehouseCode()); | ||
1362 | +// | ||
1363 | +// location.setContainerCode(""); | ||
1364 | +// location.setStatus("empty"); | ||
1365 | +// location.setDeleted(false); | ||
1366 | +// if("M".equals(taskHeader.getContainerCode().substring(0,1))){ | ||
1367 | +// if (high.intValue() == 1) { | ||
1368 | +// location.setILayer(5); | ||
1369 | +// } | ||
1370 | +// } | ||
624 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | 1371 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); |
625 | locationLambdaQueryWrapper.eq(Location::getWarehouseCode,ShiroUtils.getWarehouseCode()) | 1372 | locationLambdaQueryWrapper.eq(Location::getWarehouseCode,ShiroUtils.getWarehouseCode()) |
626 | .eq(Location::getContainerCode,"") | 1373 | .eq(Location::getContainerCode,"") |
627 | .eq(Location::getStatus,"empty") | 1374 | .eq(Location::getStatus,"empty") |
628 | .eq(Location::getDeleted,false); | 1375 | .eq(Location::getDeleted,false); |
1376 | +// location = locationService.getOne(locationLambdaQueryWrapper); | ||
1377 | +// if (location == null) { | ||
1378 | +// throw new ServiceException("没有对应库位可以分配给容器了!"); | ||
1379 | +// } | ||
629 | List<Location> locations = locationService.list(locationLambdaQueryWrapper); | 1380 | List<Location> locations = locationService.list(locationLambdaQueryWrapper); |
630 | if (locations.size() == 0) { | 1381 | if (locations.size() == 0) { |
631 | throw new ServiceException("没有空闲库位!"); | 1382 | throw new ServiceException("没有空闲库位!"); |
@@ -639,6 +1390,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -639,6 +1390,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
639 | //锁定库位 | 1390 | //锁定库位 |
640 | locationService.updateStatus(location.getCode(),"lock"); | 1391 | locationService.updateStatus(location.getCode(),"lock"); |
641 | //给组盘分配库位 | 1392 | //给组盘分配库位 |
1393 | + | ||
642 | int internalTaskType = taskHeader.getInternalTaskType(); | 1394 | int internalTaskType = taskHeader.getInternalTaskType(); |
643 | if(internalTaskType == QuantityConstant.TASK_TYPE_WHOLERECEIPT.intValue() || internalTaskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT.intValue() ) { | 1395 | if(internalTaskType == QuantityConstant.TASK_TYPE_WHOLERECEIPT.intValue() || internalTaskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT.intValue() ) { |
644 | ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); | 1396 | ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); |
@@ -651,14 +1403,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -651,14 +1403,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
651 | condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); | 1403 | condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); |
652 | condition.setTaskId(taskHeader.getId()); | 1404 | condition.setTaskId(taskHeader.getId()); |
653 | LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(condition); | 1405 | LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery(condition); |
654 | - List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambdaQueryWrapper); | ||
655 | - if(taskDetailList != null && taskDetailList.size() > 0) { | ||
656 | - for(TaskDetail taskDetail : taskDetailList) { | ||
657 | - if (taskDetail != null) { | ||
658 | - taskDetail.setToLocation(location.getCode()); | ||
659 | - taskDetailService.update(taskDetail, taskDetailLambdaQueryWrapper); | ||
660 | - } | ||
661 | - } | 1406 | + TaskDetail taskDetail = taskDetailService.getOne(taskDetailLambdaQueryWrapper); |
1407 | + if (taskDetail != null) { | ||
1408 | + taskDetail.setToLocation(location.getCode()); | ||
1409 | + taskDetailService.update(taskDetail, taskDetailLambdaQueryWrapper); | ||
662 | } | 1410 | } |
663 | } | 1411 | } |
664 | //给任务分配库位 | 1412 | //给任务分配库位 |
@@ -669,4 +1417,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | @@ -669,4 +1417,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea | ||
669 | 1417 | ||
670 | } | 1418 | } |
671 | 1419 | ||
1420 | + | ||
1421 | + | ||
1422 | + | ||
1423 | + | ||
1424 | + | ||
672 | } | 1425 | } |
673 | \ No newline at end of file | 1426 | \ No newline at end of file |
src/main/resources/application-druid.properties
@@ -4,12 +4,12 @@ spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver | @@ -4,12 +4,12 @@ spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver | ||
4 | # Ö÷¿â | 4 | # Ö÷¿â |
5 | spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2b8 | 5 | spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2b8 |
6 | #spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/huahengExample?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false | 6 | #spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/huahengExample?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false |
7 | -#spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/wms_v2?characterEncoding=utf8&serverTimezone=GMT%2b8 | 7 | +#spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/wms2?characterEncoding=utf8&serverTimezone=GMT%2b8 |
8 | 8 | ||
9 | spring.datasource.druid.master.username=softhuaheng | 9 | spring.datasource.druid.master.username=softhuaheng |
10 | spring.datasource.druid.master.password=HHrobot123. | 10 | spring.datasource.druid.master.password=HHrobot123. |
11 | #spring.datasource.druid.master.username=root | 11 | #spring.datasource.druid.master.username=root |
12 | -#spring.datasource.druid.master.password=123456 | 12 | +#spring.datasource.druid.master.password=hhsoftware |
13 | # ´Ó¿â | 13 | # ´Ó¿â |
14 | spring.datasource.druid.slave.open = false | 14 | spring.datasource.druid.slave.open = false |
15 | spring.datasource.druid.slave.url=jdbc:mysql://199.19.109.117:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false | 15 | spring.datasource.druid.slave.url=jdbc:mysql://199.19.109.117:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false |
src/main/resources/templates/shipment/shipmentContainerHeader/shipmentContainerHeader.html
@@ -147,6 +147,10 @@ | @@ -147,6 +147,10 @@ | ||
147 | // },sortable:true | 147 | // },sortable:true |
148 | // }, | 148 | // }, |
149 | { | 149 | { |
150 | + field : 'stationCode', | ||
151 | + title : '出库站台' | ||
152 | + }, | ||
153 | + { | ||
150 | field : 'status', | 154 | field : 'status', |
151 | title : '容器任务状态' , | 155 | title : '容器任务状态' , |
152 | formatter: function(value, row, index) { | 156 | formatter: function(value, row, index) { |
src/main/resources/templates/shipment/shipmentDetail/add.html
@@ -46,6 +46,12 @@ | @@ -46,6 +46,12 @@ | ||
46 | </div> | 46 | </div> |
47 | </div> | 47 | </div> |
48 | <div class="form-group"> | 48 | <div class="form-group"> |
49 | + <label class="col-sm-3 control-label">出库站台:</label> | ||
50 | + <div class="col-sm-8"> | ||
51 | + <select id="stationCode" name="stationCode" class="form-control"></select> | ||
52 | + </div> | ||
53 | + </div> | ||
54 | + <div class="form-group"> | ||
49 | <label class="col-sm-3 control-label">批次:</label> | 55 | <label class="col-sm-3 control-label">批次:</label> |
50 | <div class="col-sm-8"> | 56 | <div class="col-sm-8"> |
51 | <input id="batch" name="batch" class="form-control" type="text"> | 57 | <input id="batch" name="batch" class="form-control" type="text"> |
@@ -198,6 +204,19 @@ | @@ -198,6 +204,19 @@ | ||
198 | } | 204 | } |
199 | } | 205 | } |
200 | }); | 206 | }); |
207 | + $('#stationCode').select2({ | ||
208 | + ajax: { | ||
209 | + url: ctx+'config/station/getData', | ||
210 | + dataType: 'json', | ||
211 | + type: 'post', | ||
212 | + data: function (params) { | ||
213 | + let query = { | ||
214 | + code: params.term, | ||
215 | + } | ||
216 | + return query; | ||
217 | + } | ||
218 | + } | ||
219 | + }); | ||
201 | }) | 220 | }) |
202 | </script> | 221 | </script> |
203 | </body> | 222 | </body> |
src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
src/main/resources/templates/task/taskHeader/taskHeader.html
@@ -214,6 +214,10 @@ | @@ -214,6 +214,10 @@ | ||
214 | field : 'weight', | 214 | field : 'weight', |
215 | title : '重量' | 215 | title : '重量' |
216 | }, | 216 | }, |
217 | + { | ||
218 | + field : 'stationCode', | ||
219 | + title : '站台' | ||
220 | + }, | ||
217 | { | 221 | { |
218 | field : 'exceptionCode', | 222 | field : 'exceptionCode', |
219 | title : '异常原因', | 223 | title : '异常原因', |