diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java index 4e033aa..bb4655a 100644 --- a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java @@ -175,8 +175,9 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap @Override @Transactional public AjaxResult createCycleCoutTaskByDetailId(Integer cycleCoutdetailId) { - /*任务主表中存在库位,在盘点明细中生成任务时,不同的库位生成不同的主任务*/ - + /*任务主表中存在库位,在盘点明细中生成任务时,不同的容器生成不同的主任务*/ + //在盘点单生成任务并执行后,同一容器的物料仍然可以生成任务,否则任务已完成则无法添加任务100 + //检查状态不为100的任务,在有和下发的盘点单容器相同的任务时,把该条明细的任务写入到当前相同容器的任务里 CycleCountDetail cycleCountDetail = this.getById(cycleCoutdetailId); if(cycleCountDetail == null ){ @@ -193,29 +194,67 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap if(StringUtils.isEmpty(loc.getContainerCode())){ return AjaxResult.error(cycleCountDetail.getLocationCode()+"没有托盘,操作失败"); } + + //查询任务头和明细有相同容器,没有就新增任务头和明细 + + LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); + taskHeaderLambdaQueryWrapper + .lt(TaskHeader::getStatus,100) + .eq(TaskHeader::getWarehouseCode,ShiroUtils.getWarehouseCode()) + .eq(TaskHeader::getCompanyCode,cycleCountDetail.getCompanyCode()) + .eq(TaskHeader::getInternalTaskType,700) + .eq(TaskHeader::getTaskType,700) + .eq(TaskHeader::getContainerCode,cycleCountDetail.getContainerCode());//容器 + List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper); + + TaskHeader taskHeader = new TaskHeader(); TaskHeader task = new TaskHeader(); - task.setWarehouseCode(ShiroUtils.getWarehouseCode()); - task.setCompanyCode(cycleCountDetail.getCompanyCode()); - task.setInternalTaskType(700); - task.setTaskType(700); - task.setContainerCode(cycleCountDetail.getContainerCode()); - task.setStatus(0); - task.setFromLocation(cycleCountDetail.getLocationCode()); - task.setToLocation(cycleCountDetail.getLocationCode()); - task.setCreated(new Date()); - task.setCreatedBy(ShiroUtils.getLoginName()); - task.setLastUpdatedBy(ShiroUtils.getLoginName()); - task.setLastUpdated(new Date()); - if(taskHeaderService.save(task)){ - //锁定库位状态 - locationService.updateStatus(loc.getContainerCode(),"lock"); + TaskDetail taskDetail = new TaskDetail(); + + if(taskHeaderList == null){ + + //存在相同容器的主任务直接加入该条主任务的明细 + task.setWarehouseCode(ShiroUtils.getWarehouseCode()); + task.setCompanyCode(cycleCountDetail.getCompanyCode()); + task.setInternalTaskType(700); + task.setTaskType(700); + task.setContainerCode(cycleCountDetail.getContainerCode()); + task.setStatus(0); + task.setFromLocation(cycleCountDetail.getLocationCode()); + task.setToLocation(cycleCountDetail.getLocationCode()); + task.setCreated(new Date()); + task.setCreatedBy(ShiroUtils.getLoginName()); + task.setLastUpdatedBy(ShiroUtils.getLoginName()); + task.setLastUpdated(new Date()); + if(taskHeaderService.save(task)){ + //锁定库位状态 + locationService.updateStatus(loc.getContainerCode(),"lock"); + }else{ + throw new ServiceException("盘点任务主表生成失败!"); + } + //写入任务细表 + taskDetail.setTaskId(task.getId());//主单ID + taskDetail.setTaskType(task.getTaskType()); + taskDetail.setFromLocation(task.getFromLocation()); + taskDetail.setToLocation(task.getToLocation()); + taskDetail.setContainerCode(task.getContainerCode()); + taskDetail.setInternalTaskType(task.getTaskType()); + taskDetail.setWarehouseCode(task.getWarehouseCode()); + cycleCountDetail.setTaskHeaderId(task.getId()); //盘点明细修改状态task数据源 }else{ - throw new ServiceException("盘点任务主表生成失败!"); + + //取其中一条主单即可 + taskHeader = taskHeaderList.get(0); + taskDetail.setTaskId(taskHeader.getId());//主单ID + taskDetail.setTaskType(taskHeader.getTaskType()); + taskDetail.setFromLocation(taskHeader.getFromLocation()); + taskDetail.setToLocation(taskHeader.getToLocation()); + taskDetail.setContainerCode(taskHeader.getContainerCode()); + taskDetail.setInternalTaskType(taskHeader.getTaskType()); + taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); + cycleCountDetail.setTaskHeaderId(taskHeader.getId());//盘点明细修改状态taskHeader数据源 } - //写入任务细表 - TaskDetail taskDetail = new TaskDetail(); - taskDetail.setTaskId(task.getId());//主单ID - taskDetail.setTaskType(task.getTaskType()); + taskDetail.setBillCode(cycleCountDetail.getCycleCountHeadCode()); taskDetail.setBillDetailId(cycleCountDetail.getId()); taskDetail.setMaterialCode(cycleCountDetail.getMaterialCode()); @@ -226,26 +265,23 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap taskDetail.setFromInventoryId(cycleCountDetail.getInventoryDetailId()); taskDetail.setLot(cycleCountDetail.getLot()); taskDetail.setProjectNo(cycleCountDetail.getProjectNo()); - taskDetail.setInternalTaskType(task.getTaskType()); - taskDetail.setWarehouseCode(task.getWarehouseCode()); taskDetail.setCompanyCode(cycleCountDetail.getCompanyCode()); - taskDetail.setFromLocation(task.getFromLocation()); - taskDetail.setToLocation(task.getToLocation()); - taskDetail.setContainerCode(task.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("盘点任务明细生成失败!"); - } + } + //修改细单状态 cycleCountDetail.setTaskHeaderId(taskDetail.getId()); - cycleCountDetail.setTaskHeaderId(task.getId()); + //cycleCountDetail.setTaskHeaderId(task.getId()); cycleCountDetail.setLastUpdated(new Date()); cycleCountDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); cycleCountDetail.setEnableStatus(5); this.saveOrUpdate(cycleCountDetail); + //修改主单状态 CycleCountHeader cycleCountHeader = new CycleCountHeader(); cycleCountHeader.setCode(cycleCountDetail.getCycleCountHeadCode()); @@ -253,7 +289,7 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap cycleCountHeader.setCompanyCode(cycleCountDetail.getCompanyCode()); LambdaQueryWrapper<CycleCountHeader> lamb = Wrappers.lambdaQuery(cycleCountHeader); cycleCountHeader = cycleCountHeaderService.getOne(lamb); - cycleCountHeader.setStatusCyc(10); + cycleCountHeader.setStatusCyc(5); cycleCountHeaderService.saveOrUpdate(cycleCountHeader); return AjaxResult.success("盘点任务生成成功"); }