rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
@@ -101,6 +101,10 @@ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); sou = loc.getAreaId().toString(); end = task.getTargSite(); } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)){ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); sou = loc.getAreaId().toString(); end = loc.getAreaId().toString(); } List<TaskPathTemplateMerge> taskPathTemplateMergeList = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getSourceType, sou).eq(TaskPathTemplateMerge::getTargetType, end)); if (Objects.isNull(taskPathTemplateMergeList) || taskPathTemplateMergeList.isEmpty()) { @@ -156,7 +160,7 @@ } List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list( new LambdaQueryWrapper<TaskPathTemplateNode>() .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId())); .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder)); for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) { List<SubsystemFlowTemplate> subsystemFlowTemplateList = subsystemFlowTemplateService.list( @@ -167,7 +171,7 @@ for (SubsystemFlowTemplate subsystemFlowTemplate : subsystemFlowTemplateList) { List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list( new LambdaQueryWrapper<FlowStepTemplate>() .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId())); .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder)); allFlowStepTemplates.addAll(flowStepTemplateList); } @@ -190,7 +194,7 @@ } List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list( new LambdaQueryWrapper<TaskPathTemplateNode>() .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId())); .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder)); for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) { TaskInstanceNode taskInstanceNode = new TaskInstanceNode(taskPathTemplateNode); @@ -217,7 +221,7 @@ List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list( new LambdaQueryWrapper<FlowStepTemplate>() .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId())); .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder)); for (FlowStepTemplate flowStepTemplate : flowStepTemplateList) { j++; rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -217,14 +217,25 @@ } task.setTaskType(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type).setWarehType(deviceSite.getDevice()); } else { //全板出库 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()) .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_OUT.type)); if (Objects.isNull(deviceSite)) { throw new CoolException("站点不支持全板出库!!"); if (resouce.equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)){ //全板出库 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)); // .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()) if (Objects.isNull(deviceSite)) { throw new CoolException("站点不支持越库!!"); } task.setTaskType(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type).setWarehType(deviceSite.getDevice());//越库 } else { //全板出库 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_OUT.type)); // .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()) if (Objects.isNull(deviceSite)) { throw new CoolException("站点不支持全板出库!!"); } task.setTaskType(TaskType.TASK_TYPE_OUT.type).setWarehType(deviceSite.getDevice()); } task.setTaskType(TaskType.TASK_TYPE_OUT.type).setWarehType(deviceSite.getDevice()); } } else if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK)) { rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -518,8 +518,8 @@ WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>() .eq(WkOrderItem::getOrderId, outId) .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch()) .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex()) .eq(WkOrderItem::getMatnrId, locItem.getMatnrId())); // .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex()) if (Objects.isNull(orderItem)) { throw new CoolException("单据明细不存在!!"); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -761,6 +761,9 @@ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_IN.type)) { //移库 complateInstockE(task, loginUserId); } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)) { //越库 complateInstockDocking(task, loginUserId); } } } @@ -984,6 +987,9 @@ if (task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) { //110.空板出库 complateOutStockEmpty(task, loginUserId); } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)) { //110.空板出库 complateOutStockDocking(task, loginUserId); } else { complateOutStock(task, loginUserId); } @@ -1046,6 +1052,50 @@ if (!locItemService.saveBatch(items)) { throw new CoolException("作业库存回写失败!!"); } TaskItem taskItem = taskItems.stream().findFirst().get(); //保存入出库流水 saveStockItems(taskItems, task, null, null, taskItem.getWkType(), OrderType.ORDER_IN.type, loginUserId); locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId())); task.setTaskStatus(TaskStsType.UPDATED_IN.id).setUpdateTime(new Date()).setUpdateBy(loginUserId); if (!taskService.updateById(task)) { throw new CoolException("任务状态修改失败!!"); } } /** * 越库回库 * * @param task * @param loginUserId */ @Transactional(rollbackFor = Exception.class) public void complateInstockDocking(Task task, Long loginUserId) { if (Objects.isNull(task)) { return; } Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc())); if (Objects.isNull(loc)) { throw new CoolException("库存不存在!!"); } // if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_S.type)) { // throw new CoolException("当前库位状态不处于S.入库预约,不可执行入库操作!"); // } loc.setUseStatus(LocStsType.LOC_STS_TYPE_F.type) .setBarcode(task.getBarcode()) .setUpdateBy(loginUserId).setUpdateTime(new Date()); if (!locService.updateById(loc)) { throw new CoolException("库位信息更新失败!!"); } List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); if (taskItems.isEmpty()) { throw new CoolException("任务明细不存在!!"); } TaskItem taskItem = taskItems.stream().findFirst().get(); @@ -1572,6 +1622,100 @@ */ @Synchronized @Transactional(rollbackFor = Exception.class) public void complateOutStockDocking(Task task, Long loginUserId) throws Exception { if (Objects.isNull(task)) { throw new CoolException("参数不能为空!!"); } Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); if (Objects.isNull(loc)) { throw new CoolException("库位不存在!!"); } if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_R.type)) { throw new CoolException("库位状态不处理于R.出库预约!!"); } List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); if (taskItems.isEmpty()) { throw new CoolException("任务明细不存在!!"); } List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); if (locItems.isEmpty()) { throw new CoolException("库位明细不存在!!"); } List<LocItemWorking> workings = new ArrayList<>(); for (LocItem item : locItems) { LocItemWorking working = new LocItemWorking(); BeanUtils.copyProperties(item, working); working.setId(null) .setTaskId(task.getId()) .setLocItemId(item.getId()) .setUpdateBy(loginUserId) .setUpdateTime(new Date()); workings.add(working); } //添加出入库记录信息 Map<Short, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getWkType)); /***获取库存出库值,如果为空表示正常单据出库,非空表明是库存出库 * 1. 库存出库没有单据信息,单据信息默认为空 * 2. 单据库存需通过波次查询原始单据信息,将单据信息填入stock中 * */ List<TaskItem> list = listMap.get(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type)); if (Objects.isNull(list) || list.isEmpty()) { Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource)); maps.keySet().forEach(key -> { if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)) { WkOrderItem orderItem = asnOrderItemService.getById(key); if (Objects.isNull(orderItem)) { throw new CoolException("单据明细不存在!!"); } try { saveOutStockItem(maps.get(key), orderItem, loginUserId); } catch (Exception e) { throw new CoolException(e.getMessage()); } } }); } else { try { saveOutStockItem(taskItems, null, null, null, loginUserId); } catch (Exception e) { throw new CoolException(e.getMessage()); } } /**修改为库位状态为O.空库*/ if (!locService.update(new LambdaUpdateWrapper<Loc>() .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type) .set(Loc::getBarcode, loc.getBarcode()) .set(Loc::getUpdateBy, loginUserId) .set(Loc::getUpdateTime, new Date()) .eq(Loc::getId, loc.getId()))) { throw new CoolException("库位状态修改失败!!"); } if (!this.update(new LambdaUpdateWrapper<Task>() .eq(Task::getId, task.getId()) .set(Task::getUpdateBy, loginUserId) .set(Task::getUpdateTime, new Date()) .set(Task::getTargLoc, task.getOrgLoc()) .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) { throw new CoolException("库存状态更新失败!!"); } } /** * @author Ryan * @date 2025/5/20 * @description: 完成出库任务,更新出库库存信息 * @version 1.0 */ @Synchronized @Transactional(rollbackFor = Exception.class) public void complateOutStockEmpty(Task task, Long loginUserId) throws Exception { if (Objects.isNull(task)) { throw new CoolException("参数不能为空!!");