diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/controller/ErpController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/controller/ErpController.java index 2fb2d0f..8eb7832 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/controller/ErpController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/controller/ErpController.java @@ -4,19 +4,11 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.jeecg.common.api.vo.Result; -import org.jeecg.modules.wms.api.erp.entity.ErpCancel; -import org.jeecg.modules.wms.api.erp.entity.ErpMaterial; -import org.jeecg.modules.wms.api.erp.entity.ErpReceipt; -import org.jeecg.modules.wms.api.erp.entity.ErpShipment; -import org.jeecg.modules.wms.api.erp.entity.InventoryQueryParam; +import org.jeecg.modules.wms.api.erp.entity.*; import org.jeecg.modules.wms.api.erp.service.IErpService; import org.jeecg.modules.wms.framework.controller.HuahengBaseController; import org.jeecg.utils.support.ApiLogger; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -32,6 +24,14 @@ public class ErpController extends HuahengBaseController { @Resource private IErpService erpService; + @PostMapping("/addMaterial") + @ResponseBody + @ApiOperation("增加物料") + @ApiLogger(apiName = "增加物料", from = "ERP") + public Result addMaterial(@RequestBody ErpMaterial erpMaterial) { + return erpService.addMaterial(erpMaterial); + } + @PostMapping("/receipt") @ResponseBody @ApiOperation("入库单下发") @@ -77,12 +77,4 @@ public class ErpController extends HuahengBaseController { return result; } - @PostMapping("/addMaterial") - @ResponseBody - @ApiOperation("增加物料") - @ApiLogger(apiName = "增加物料", from = "ERP") - public Result addMaterial(@RequestBody ErpMaterial erpMaterial) { - return erpService.addMaterial(erpMaterial); - } - } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/entity/CallBoxBean.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/entity/CallBoxBean.java index 007a945..dea50ff 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/entity/CallBoxBean.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/entity/CallBoxBean.java @@ -3,6 +3,9 @@ package org.jeecg.modules.wms.api.mobile.entity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +/** + * @author 游杰 + */ @Data public class CallBoxBean { @ApiModelProperty(value = "托盘号", required = true) diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/controller/WcsController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/controller/WcsController.java index d8e886e..bdc8737 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/controller/WcsController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/controller/WcsController.java @@ -171,7 +171,13 @@ public class WcsController extends HuahengBaseController { @ApiOperation("设置物料信息") @ApiLogger(apiName = "WCS设置物料信息", from = "WCS") public Result setMaterialInfo(@RequestBody MaterialInfoEntity materialInfoEntity) { - Result result = wcsService.setMaterialInfo(materialInfoEntity); + Result result = handleMultiProcess("setMaterialInfo", new MultiProcessListener() { + @Override + public Result<?> doProcess() { + Result result = wcsService.setMaterialInfo(materialInfoEntity); + return result; + } + }); return result; } @@ -184,7 +190,13 @@ public class WcsController extends HuahengBaseController { public Result arrivedNotice(@RequestBody ArriveEntity arriveEntity) { String taskNo = arriveEntity.getTaskNo(); String port = arriveEntity.getPort(); - Result result = wcsService.arrivedNotice(taskNo, port); + Result result = handleMultiProcess("arrivedNotice", new MultiProcessListener() { + @Override + public Result<?> doProcess() { + Result result = wcsService.arrivedNotice(taskNo, port); + return result; + } + }); return result; } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java index 5b36c0f..44ccd7b 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java @@ -2,6 +2,7 @@ package org.jeecg.modules.wms.api.wcs.service; import java.net.SocketException; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -257,6 +258,7 @@ public class WcsServiceImpl implements WcsService { taskHeader.setZoneCode(location.getZoneCode()); taskHeader.setRoadWay(location.getRoadWay()); taskHeader.setPreTaskNo(preTaskNo); + taskHeader.setAllocationTime(new Date()); taskHeader.setWeight(Integer.parseInt(warecellDomain.getWeight())); taskHeader.setToLocationCode(locationCode); if (!taskHeaderService.updateById(taskHeader)) { @@ -703,6 +705,10 @@ public class WcsServiceImpl implements WcsService { if (status == QuantityConstant.TASK_STATUS_COMPLETED) { return Result.error("任务已经完成taskNo:" + taskNo); } + int taskId = taskHeader.getId(); + taskHeader = new TaskHeader(); + taskHeader.setId(taskId); + taskHeader.setArrivalTime(new Date()); taskHeader.setStatus(QuantityConstant.TASK_STATUS_ARRIVED_STATION); taskHeader.setToPortCode(port); boolean result = taskHeaderService.updateById(taskHeader); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java index 3dfb3ef..2eb6867 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java @@ -50,4 +50,5 @@ public interface IInventoryDetailService extends IService<InventoryDetail> { boolean updateQtyAndTaskQtyAndLocationCode(BigDecimal qty, BigDecimal taskQty, String locationCode, int id); + boolean updateBatchLocationCodeById(List<InventoryDetail> inventoryDetailList); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java index ae53e93..36216db 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java @@ -2,6 +2,7 @@ package org.jeecg.modules.wms.inventory.inventoryHeader.service.impl; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -131,6 +132,19 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe return success; } + @Override + public boolean updateBatchLocationCodeById(List<InventoryDetail> inventoryDetailList) { + List<InventoryDetail> inventoryDetailList1 = new ArrayList<>(); + for (InventoryDetail inventoryDetail : inventoryDetailList) { + InventoryDetail inventoryDetail1 = new InventoryDetail(); + inventoryDetail1.setId(inventoryDetail.getId()); + inventoryDetail1.setLocationCode(inventoryDetail.getLocationCode()); + inventoryDetailList1.add(inventoryDetail1); + } + boolean success = this.updateBatchById(inventoryDetailList1); + return success; + } + /** * 计算库存明细托盘填充度 * @author TanYibin diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java index 29a5aec..61a4622 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java @@ -168,4 +168,16 @@ public class TaskHeader implements Serializable { /** 更新日期 */ @ApiModelProperty(value = "更新日期") private Date updateTime; + /** 执行时间(下发任务时间) */ + @ApiModelProperty(value = "执行时间") + private Date executeTime; + /** 分配时间 */ + @ApiModelProperty(value = "分配时间") + private Date allocationTime; + /** 到达时间(到达拣选台时间) */ + @ApiModelProperty(value = "到达时间") + private Date arrivalTime; + /** 完成时间(完成任务时间) */ + @ApiModelProperty(value = "完成时间") + private Date completeTime; } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index e9efdb0..1c9704b 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java @@ -62,6 +62,7 @@ import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; @@ -867,7 +868,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } @Override - @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) public Result sendTaskToWcs(Integer taskId) { TaskHeader taskHeader = taskHeaderService.getById(taskId); if (taskHeader == null) { @@ -1010,9 +1011,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (taskHeader.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { return Result.ok("入库任务(" + taskHeader.getId() + ")已经是完成的!"); } - if (taskDetailList.isEmpty()) { - throw new JeecgBootException("完成入库任务时, 入库任务明细为空"); - } +// if (taskDetailList.isEmpty()) { +// throw new JeecgBootException("完成入库任务时, 入库任务明细为空"); +// } Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode); if (toLocation == null) { throw new JeecgBootException("完成入库任务时,没有找到目的库位"); @@ -1117,17 +1118,33 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea inventoryTransaction.setQty(receiptQty); inventoryTransactionList.add(inventoryTransaction); } - success = receiptContainerHeaderService.updateStatusById(QuantityConstant.RECEIPT_CONTAINER_FINISHED, taskHeader.getReceiptContainerHeaderId()); - if (!success) { - throw new JeecgBootException("完成入库任务时,更新入库组盘头表状态失败"); - } - success = inventoryDetailService.saveBatch(inventoryDetailList); - if (!success) { - throw new JeecgBootException("完成入库任务时,保存库存详情失败"); - } - success = inventoryTransactionService.saveBatch(inventoryTransactionList); - if (!success) { - throw new JeecgBootException("完成入库任务时,保存库存交易失败"); + + if (!taskDetailList.isEmpty()) { + success = receiptContainerHeaderService.updateStatusById(QuantityConstant.RECEIPT_CONTAINER_FINISHED, taskHeader.getReceiptContainerHeaderId()); + if (!success) { + throw new JeecgBootException("完成入库任务时,更新入库组盘头表状态失败"); + } + success = inventoryDetailService.saveBatch(inventoryDetailList); + if (!success) { + throw new JeecgBootException("完成入库任务时,保存库存详情失败"); + } + success = inventoryTransactionService.saveBatch(inventoryTransactionList); + if (!success) { + throw new JeecgBootException("完成入库任务时,保存库存交易失败"); + } + if (!taskHeaderService.combineInventoryDetail(taskHeader)) { + throw new JeecgBootException("合并入库库存失败"); + } + if (!receiptDetailService.updateBatchById(receiptDetaiList)) { + throw new JeecgBootException("完成入库任务时,更新入库单详情失败"); + } + List<Integer> receiptIdList = receiptDetaiList.stream().map(ReceiptDetail::getReceiptId).distinct().collect(Collectors.toList()); + for (Integer receiptId : receiptIdList) { + success = receiptHeaderService.updateReceiptHeaderStatus(receiptId); + if (!success) { + throw new JeecgBootException("完成入库任务时,更新入库单头失败"); + } + } } Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode, fromLocationCode, @@ -1135,25 +1152,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!result.isSuccess()) { throw new JeecgBootException(result.getMessage()); } - if (!taskHeaderService.combineInventoryDetail(taskHeader)) { - throw new JeecgBootException("合并入库库存失败"); - } - if (!receiptDetailService.updateBatchById(receiptDetaiList)) { - throw new JeecgBootException("完成入库任务时,更新入库单详情失败"); - } - List<Integer> receiptIdList = receiptDetaiList.stream().map(ReceiptDetail::getReceiptId).distinct().collect(Collectors.toList()); - for (Integer receiptId : receiptIdList) { - success = receiptHeaderService.updateReceiptHeaderStatus(receiptId); - if (!success) { - throw new JeecgBootException("完成入库任务时,更新入库单头失败"); - } - } if (!inventoryHeaderService.updateInventoryContainerStatusByContainerCode(containerCode, warehouseCode)) { throw new JeecgBootException("完成入库任务时,更新托盘状态失败"); } success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId()); if (!success) { - throw new JeecgBootException("完成出库任务,保存任务头失败"); + throw new JeecgBootException("完成入库任务时,保存任务头失败"); } receiptDetaiList = receiptDetaiList.stream().filter(t -> t.getStatus().equals(QuantityConstant.RECEIPT_HEADER_COMPLETED)).collect(Collectors.toList()); LogRecordContext.putVariable("taskHeader", taskHeader); @@ -1194,9 +1198,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (taskHeader.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { return Result.ok("完成出库任务,(" + taskHeader.getId() + ")任务已经是完成的!"); } - if (taskDetailList.isEmpty()) { - return Result.error("完成出库任务,任务明细为空"); - } +// if (taskDetailList.isEmpty()) { +// return Result.error("完成出库任务,任务明细为空"); +// } if (StringUtils.isEmpty(fromLocationCode)) { return Result.error("完成出库任务" + taskHeader.getId() + "没有起始库位,执行中止"); } @@ -2143,14 +2147,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea .eq(InventoryHeader::getLocationCode, fromLocationCode); InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaUpdateWrapper); if (inventoryHeader != null) { - inventoryHeader.setLocationCode(toLocationCode); - success = inventoryHeaderService.updateById(inventoryHeader); + success = inventoryHeaderService.updateLocationCodeById(toLocationCode, inventoryHeader.getId()); if (!success) { throw new JeecgBootException("完成移库任务时, 更新库存头失败"); } } if (inventoryDetailList.size() != 0) { - success = inventoryDetailService.updateBatchById(inventoryDetailList); + success = inventoryDetailService.updateBatchLocationCodeById(inventoryDetailList); if (!success) { throw new JeecgBootException("完成移库任务时, 更新库存详情失败"); } @@ -2431,6 +2434,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea TaskHeader taskHeader = new TaskHeader(); taskHeader.setId(id); taskHeader.setStatus(status); + if (status == QuantityConstant.TASK_STATUS_COMPLETED) { + taskHeader.setCompleteTime(new Date()); + } else if (status == QuantityConstant.TASK_STATUS_RELEASE) { + taskHeader.setExecuteTime(new Date()); + } boolean success = taskHeaderService.updateById(taskHeader); return success; }