diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java index 2efe6df..394eb8e 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java @@ -25,6 +25,7 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl; +import com.huaheng.pc.task.taskHeader.service.WorkTaskService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper; @@ -54,6 +55,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe private InventoryDetailService inventoryDetailService; @Resource private MaterialService materialService; + @Resource + private WorkTaskService workTaskService; /** @@ -89,97 +92,17 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe /** * 空托入库 * */ - @Transactional @Override public AjaxResult createEmptyIn(String containerCode, String destinationLocation) { - - return AjaxResult.success(); + return workTaskService.createEmptyIn(containerCode, destinationLocation); } /** *空托出库 * */ - @Transactional @Override public AjaxResult createEmptyOut(String containerCode, String sourceLocation) { - // 检查容器 - Container temp3 = new Container(); - temp3.setCode(containerCode); - temp3.setWarehouseCode(ShiroUtils.getWarehouseCode()); - LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery(temp3); - Container container = containerService.getOne(lambda3); - if(container==null){ - return AjaxResult.error("托盘不存在"); - } - if (StringUtils.isEmpty(container.getLocationCode())|| !(container.getLocationCode().equals(sourceLocation))) { - return AjaxResult.error("容器不在库位[" + sourceLocation + "]上"); - } - //检查库位 - Location temp4 = new Location(); - temp4.setCode(sourceLocation); - temp4.setWarehouseCode(ShiroUtils.getWarehouseCode()); - LambdaQueryWrapper lamda4 = Wrappers.lambdaQuery(temp4); - Location loc = locationService.getOne(lamda4); - if(loc==null){ - return AjaxResult.error("源货位不存在"); - } - if(StringUtils.isEmpty(loc.getContainerCode())){ - return AjaxResult.error("源货位没有托盘"); - } - if(!"empty".equals(loc.getStatus())){ - return AjaxResult.error("源货位非空闲"); - } - //检查库存,有库存不给生成任务。 - LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); - inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getWarehouseCode,loc.getWarehouseCode()) - .eq(InventoryDetail::getLocationCode, loc.getCode()); - List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); - if(inventoryDetailList != null && inventoryDetailList.size() > 0){ - return AjaxResult.error("该容器上有库存,无法空托出库!"); - } - //判断托盘是否已经存在任务 - Integer taskCount = taskHeaderService.UncompleteCount(containerCode); - if (taskCount != null && taskCount.intValue() > 0) { - return AjaxResult.error("容器已存在任务"); - } - //生成任务 - TaskHeader taskHeader = new TaskHeader(); - taskHeader.setWarehouseCode(loc.getWarehouseCode()); - taskHeader.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));//货主 - taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_PICKING); //出库内部类型都给200 - taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT); - taskHeader.setContainerCode(container.getCode()); - taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); - taskHeader.setFromLocation(sourceLocation); - taskHeader.setToLocation(""); - taskHeader.setCreated(new Date()); - taskHeader.setCreatedBy(ShiroUtils.getLoginName()); - taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); - taskHeader.setLastUpdated(new Date()); - if(taskHeaderService.save(taskHeader)){ - //锁定库位状态 - locationService.updateStatus(loc.getCode(),"lock"); - }else{ - throw new ServiceException("空托出库主表生成失败!"); - } - //写入任务细表 - TaskDetail taskDetail = new TaskDetail(); - taskDetail.setTaskId(taskHeader.getId());//主单ID - taskDetail.setTaskType(taskHeader.getTaskType()); - taskDetail.setInternalTaskType(taskHeader.getInternalTaskType()); - taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); - taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0)); - taskDetail.setFromLocation(taskHeader.getFromLocation()); - taskDetail.setToLocation(taskHeader.getToLocation()); - taskDetail.setContainerCode(taskHeader.getContainerCode()); - taskDetail.setCreated(new Date()); - taskDetail.setCreatedBy(ShiroUtils.getLoginName()); - taskDetail.setLastUpdated(new Date()); - taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); - if(taskDetailService.save(taskDetail) == false){ - throw new ServiceException("空托出库任务明细生成失败!"); - } - return AjaxResult.success(taskHeader.getId()); + return workTaskService.createEmptyOut(containerCode, sourceLocation); } /** diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java index f8a3607..ecaf8c5 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java @@ -18,9 +18,14 @@ import com.huaheng.pc.config.location.domain.Location; import com.huaheng.pc.config.location.service.LocationService; import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference; import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService; +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; +import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; +import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; +import org.aspectj.weaver.loadtime.Aj; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -47,6 +52,10 @@ public class WorkTaskService { private ReceiptPreferenceService preferenceService; @Resource private FilterConfigDetailService filterConfigDetailService; + @Resource + private InventoryDetailService inventoryDetailService; + @Resource + private InventoryHeaderService inventoryHeaderService; /** * 创建入库任务 @@ -61,7 +70,7 @@ public class WorkTaskService { return AjaxResult.error("容器不存在"); } if (StringUtils.isNotEmpty(container.getLocationCode())) { - return AjaxResult.error("容器已在库位[" + container.getLocationCode() + "]上"); + return AjaxResult.error("容器已在库位" + container.getLocationCode() + "上"); } if (StringUtils.isNotEmpty(destinationLocation)) { @@ -72,7 +81,7 @@ public class WorkTaskService { if (StringUtils.isNotEmpty(location.getContainerCode())) { return AjaxResult.error(destinationLocation+"上已存在容器"+location.getContainerCode()); } - if ("empty".equals(location.getStatus())) { + if (!"empty".equals(location.getStatus())) { return AjaxResult.error("目标库位非空闲"); } } @@ -109,10 +118,15 @@ public class WorkTaskService { return AjaxResult.error("容器已存在任务"); } + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(InventoryDetail::getContainerCode, containerCode); + if (inventoryDetailService.count(queryWrapper) > 0) { + return AjaxResult.error("该容器上已有库存"); + } LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate(); containerUpdateWrapper.eq(Container::getCode, container.getCode()) .set(Container::getStatus, "lock"); - if (containerService.update(container, containerUpdateWrapper)) { + if (!containerService.update(container, containerUpdateWrapper)) { throw new ServiceException("容器状态更新失败"); } @@ -144,7 +158,7 @@ public class WorkTaskService { taskDetail.setToLocation(taskHeader.getToLocation()); taskDetail.setContainerCode(taskHeader.getContainerCode()); - if(taskDetailService.save(taskDetail)){ + if(!taskDetailService.save(taskDetail)){ throw new ServiceException("空托入库任务明细生成失败!"); } //锁库位 @@ -153,4 +167,99 @@ public class WorkTaskService { } return AjaxResult.success(taskHeader.getId()); } + + /** + * 创建空托出库任务 + * 容器编码与源库位只需要填一个 + * @param containerCode 容器编码 + * @param sourceLocation 源库位 + * @return + */ + @Transactional(rollbackFor = Exception.class) + public AjaxResult createEmptyOut(String containerCode, String sourceLocation) { + /* 容器编码*/ + String conCode = null; + /* 库位编码*/ + String locationCode = null; + //验证容器 + if (StringUtils.isNotEmpty(containerCode)) { + Container container = containerService.findAllByCode(containerCode); + if (StringUtils.isNull(container)) { + return AjaxResult.error(containerCode+"容器不存在"); + } + if (!"empty".equals(container.getStatus())) { + return AjaxResult.error(containerCode+"容器状态不为空,不能执行空托出库"); + } + if (StringUtils.isEmpty(container.getLocationCode())) { + return AjaxResult.error("该容器不在库位上"); + } + if (StringUtils.isNotEmpty(sourceLocation)) { + if (!container.getLocationCode().equals(sourceLocation)) { + return AjaxResult.error("该容器所在库位与源库位不同"); + } + } + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(InventoryDetail::getContainerCode, containerCode); + if (inventoryDetailService.count(queryWrapper) > 0) { + return AjaxResult.error("该容器上有库存,无法空托出库!"); + } + conCode = containerCode; + locationCode = container.getLocationCode(); + } + //验证库位 + if (StringUtils.isNotEmpty(sourceLocation)) { + Location location = locationService.findLocationByCode(sourceLocation); + if (StringUtils.isNull(location)) { + return AjaxResult.error(sourceLocation+"库位不存在"); + } + if (!"empty".equals(location.getStatus())) { + return AjaxResult.error(location.getCode()+"库位状态不为空闲不能执行出库"); + } + if (StringUtils.isEmpty(location.getContainerCode())) { + return AjaxResult.error(location.getCode()+"库位上没有容器"); + } + if (StringUtils.isNotEmpty(containerCode)) { + if (!location.getContainerCode().equals(sourceLocation)) { + return AjaxResult.error("该库位上容器编码与输入容器编码不同"); + } + } + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(InventoryDetail::getLocationCode, sourceLocation); + if (inventoryDetailService.count(queryWrapper) > 0) { + return AjaxResult.error("该库位上有库存,无法空托出库!"); + } + + locationCode = location.getCode(); + conCode = location.getContainerCode(); + } + + TaskHeader taskHeader = new TaskHeader(); + taskHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); + taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_WORK); + taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT); + taskHeader.setContainerCode(conCode); + taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); + taskHeader.setFromLocation(locationCode); + taskHeader.setToLocation(""); + if(taskHeaderService.save(taskHeader)){ + //锁定库位状态 + locationService.updateStatus(locationCode,"lock"); + } else { + throw new ServiceException("空托出库主表生成失败!"); + } + //写入任务细表 + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setTaskId(taskHeader.getId()); + taskDetail.setTaskType(taskHeader.getTaskType()); + taskDetail.setInternalTaskType(taskHeader.getInternalTaskType()); + taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); + taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0)); + taskDetail.setFromLocation(taskHeader.getFromLocation()); + taskDetail.setToLocation(taskHeader.getToLocation()); + taskDetail.setContainerCode(taskHeader.getContainerCode()); + if(taskDetailService.save(taskDetail)){ + throw new ServiceException("空托出库任务明细生成失败!"); + } + return AjaxResult.success(taskHeader.getId()); + } }