rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/MissionTaskIssueParam.java
@@ -17,6 +17,7 @@ private String locNo;//目标库位 private String sourcelocNo;//源库位 private String staNo;//目标站点 private String staNoArea;//目标站点区域 private String sourcestaNo;//源站点 /* rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.cfg.CoercionAction; import com.fasterxml.jackson.databind.cfg.CoercionInputShape; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.openApi.config.PlatformProperties; import com.vincent.rsf.openApi.entity.Loc; @@ -109,8 +110,8 @@ String souLoc = split[2]+"-"+split[3]+"-"+split[4]; missionWcsTaskIssueParam.setLocNo(souLoc); missionWcsTaskIssueParam.setTaskPri(param.getTaskPri()); missionWcsTaskIssueParam.setStaNo(Integer.parseInt(param.getStaNo()));//目标站 missionWcsTaskIssueParam.setOutArea("");//目标区域 missionWcsTaskIssueParam.setStaNo(Cools.isEmpty(param.getStaNoArea())? Integer.parseInt(param.getStaNo()):null);//目标站 missionWcsTaskIssueParam.setOutArea(param.getStaNoArea());//目标区域 missionWcsTaskIssueParam.setBatch("");//出库批次号 missionWcsTaskIssueParam.setBatchSeq(1);//出库顺序号 } else if (param.getType().equals(TaskTypeEnum.TASK_TYPE_ENUM_TRANSFER.code)){ rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/MissionTaskIssueParam.java
@@ -24,6 +24,7 @@ private String locNo;//目标库位 private String sourcelocNo;//源库位 private String staNo;//目标站点 private String staNoArea;//目标站点区域 private String sourcestaNo;//源站点 /* rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/OrderOutItemDto.java
@@ -26,6 +26,8 @@ private List<staListDto> staNos; private List<String> targSiteAreaList; private String targSiteAreaNow; private String siteNo; private String sourceId; rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocToTaskParams.java
@@ -35,6 +35,9 @@ @ApiModelProperty("备注") private String memo; @ApiModelProperty("目标区域集合") @ApiModelProperty("目标区域ID集合") private List<String> targSiteAreaList; @ApiModelProperty("当前目标区域") private String targSiteAreaNow; } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -216,6 +216,8 @@ private String targLocArea; private String targSiteAreaNow; public Task() {} public Task(String taskCode,Integer taskStatus,Integer taskType,String orgLoc,String targLoc,String barcode,String robotCode,Short exceStatus,String expDesc,Integer sort,String expCode,Date startTime,Date endTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
@@ -3,12 +3,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.SnowflakeIdWorker; import com.vincent.rsf.server.manager.entity.Loc; import com.vincent.rsf.server.manager.entity.Task; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.LocStsType; import com.vincent.rsf.server.manager.enums.TaskStsType; import com.vincent.rsf.server.manager.enums.TaskType; import com.vincent.rsf.server.manager.service.LocService; import com.vincent.rsf.server.manager.service.TaskService; import com.vincent.rsf.server.manager.service.impl.BasStationAreaServiceImpl; import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl; import com.vincent.rsf.server.manager.service.impl.DeviceSiteServiceImpl; import com.vincent.rsf.server.system.constant.GlobalConfigCode; import com.vincent.rsf.server.system.entity.*; import com.vincent.rsf.server.system.service.ConfigService; @@ -25,6 +29,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; /** * @author Munch D. Luffy @@ -63,6 +68,12 @@ private FlowInstanceServiceImpl flowInstanceService; @Autowired private FlowStepInstanceServiceImpl flowStepInstanceService; @Autowired private BasStationAreaServiceImpl basStationAreaService; @Autowired private DeviceSiteServiceImpl deviceSiteService; @Autowired private BasStationServiceImpl basStationService; /** * @author Munch D. Luffy @@ -82,6 +93,8 @@ return; } taskList.forEach(task -> { boolean endSign = true; boolean endSignUp = false; String sou = null; String end = null; if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) @@ -97,9 +110,18 @@ || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) { endSignUp = true; Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); sou = loc.getAreaId().toString(); end = task.getTargSite(); BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>() .eq(BasStation::getStationName, end) .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) ); if (Cools.isEmpty(basStation)) { endSign = false; } } 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(); @@ -111,7 +133,7 @@ sou = loc2.getAreaId().toString(); } List<TaskPathTemplateMerge> taskPathTemplateMergeList = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getSourceType, sou).eq(TaskPathTemplateMerge::getTargetType, end)); if (Objects.isNull(taskPathTemplateMergeList) || taskPathTemplateMergeList.isEmpty()) { if (Objects.isNull(taskPathTemplateMergeList) || taskPathTemplateMergeList.isEmpty() || !endSign) { List<TaskPathTemplateMerge> list = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getStepSize,1)); if (!Cools.isEmpty(list)) { List<String[]> stationList = new ArrayList<>(); @@ -119,7 +141,7 @@ stationList.add(taskPathTemplate.route()); }); List<Long> longs = RouteWmsStepFlow.routeGet(stationList, sou, end); if (longs != null && !longs.isEmpty()) { if (endSign && longs != null && !longs.isEmpty()) { TaskPathTemplateMerge taskPathTemplateMerge = new TaskPathTemplateMerge(); taskPathTemplateMerge.setTemplateCode(sou+"===>"+end); taskPathTemplateMerge.setTemplateName(sou+"===>"+end); @@ -133,12 +155,76 @@ taskPathTemplateMerge.setConditionExpression(longList); taskPathTemplateMerge.setStepSize(longList.size()); taskPathTemplateMergeService.save(taskPathTemplateMerge); } else { if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {//出库 //没有路径 进入库区筛选站点 List<String> targSiteArea = task.getTargSiteArea(); //提取出所有站点 // List<String> siteList = new ArrayList<>(); ConcurrentHashMap<String,List<String>> siteList = new ConcurrentHashMap<>(); //筛选出存在路径的站点 List<String[]> siteListRoute = new ArrayList<>(); //筛选可替换选项 List<String> siteListUp = new ArrayList<>(); if (targSiteArea != null && !targSiteArea.isEmpty()) { for (String areaId : targSiteArea) { BasStationArea basStationArea = basStationAreaService.getById(Long.parseLong(areaId)); if (basStationArea == null || basStationArea.getStationAlias() == null || basStationArea.getStationAlias().isEmpty()) { continue; } siteList.put(basStationArea.getStationAreaId(), basStationArea.getStationAlias()); // siteList.addAll(basStationArea.getStationAlias()); } if (!siteList.isEmpty()) { //查询站点路径 for (ConcurrentHashMap.Entry<String, List<String>> entry : siteList.entrySet()) { String stationAreaId = entry.getKey(); // 获取String键 List<String> valueList = entry.getValue(); // 获取对应的List<String> for (String value : valueList) { List<Long> routeGet = RouteWmsStepFlow.routeGet(stationList, sou, value); if (routeGet!=null && !routeGet.isEmpty()){ siteListRoute.add(new String[]{stationAreaId, value}); } } } Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); //查询站点配置 if (!siteListRoute.isEmpty()) { for (String[] siteArray : siteListRoute) { //出库路径排查 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() .eq(DeviceSite::getSite, siteArray[1]) .eq(!Objects.isNull(loc.getChannel()),DeviceSite::getChannel, loc.getChannel()) .eq(DeviceSite::getType, task.getTaskType()).last("limit 1"),false); if (!Objects.isNull(deviceSite)) { BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>() .eq(BasStation::getStationName, siteArray[1]) .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) ); if (Cools.isEmpty(basStation) || !basStation.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { continue; } task.setTargSiteAreaNow(siteArray[0]); task.setTargSite(siteArray[1]); taskService.updateById(task); break; } } } } } } } // System.out.println("任务:"+task.getTaskCode()+"查询步序为:"+longs); } } else { //生成实际路径 boolean actualPath = generateActualPath(task, taskPathTemplateMergeList.get(0)); boolean actualPath = generateActualPath(task, taskPathTemplateMergeList.get(0),endSignUp); if (!actualPath) { log.error("生成实际路径失败"); } @@ -147,7 +233,7 @@ } public boolean generateActualPath(Task task,TaskPathTemplateMerge taskPathTemplateMerge) { public boolean generateActualPath(Task task,TaskPathTemplateMerge taskPathTemplateMerge,boolean endSignUp) { boolean actualPath = false; List<Integer> conditionExpression = taskPathTemplateMerge.getConditionExpression(); Integer i = 0;//it顺序 @@ -257,6 +343,20 @@ } } task.setDeviceSiteId(taskInstance.getId()); if (endSignUp){ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTargSite())); if (basStation == null){ return false; } if (!basStation.getType().equals(0)){ basStation.setUseStatus(LocStsType.LOC_STS_TYPE_S.type); basStationService.updateById(basStation); } } taskService.updateById(task); return actualPath; } rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -286,6 +286,7 @@ missionTaskIssueParam.setTaskPri(task.getSort()); missionTaskIssueParam.setBarcode(task.getBarcode()); missionTaskIssueParam.setTaskNo(task.getTaskCode()); missionTaskIssueParam.setStaNoArea(task.getTargSiteAreaNow()); if (missionTaskIssueParam.getType().equals(RcsTaskType.RCS_TASK_TYPE_ENUM_IN.type) && endSign){ missionTaskIssueParam.setLocNo(task.getTargLoc()); missionTaskIssueParam.setSourcestaNo(missionTaskIssueParam.getSourcestaNo()); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeviceSiteServiceImpl.java
@@ -12,6 +12,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; @@ -31,6 +32,7 @@ * @return */ @Override @Transactional(rollbackFor = Exception.class) public boolean initSites(DeviceSiteParame param) { if (param.getFlagInit() == 1) { List<DeviceSite> list = this.list(new LambdaQueryWrapper<DeviceSite>().select(DeviceSite::getId).last("limit 1")); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -195,6 +195,7 @@ .setTaskStatus(taskStatus) .setBarcode(loc.getBarcode()) .setTargSiteArea(map.getTargSiteAreaList()) .setTargSiteAreaNow(map.getTargSiteAreaNow()) .setMemo(map.getMemo()); List<LocItem> locItems = this.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, key)); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -304,6 +304,7 @@ taskParams.setItems(itemDto.getLocItemList()) .setSiteNo(itemDto.getSiteNo()) .setTargSiteAreaList(itemDto.getTargSiteAreaList()) .setTargSiteAreaNow(itemDto.getTargSiteAreaNow()) .setType(Constants.TASK_TYPE_WAVE_OUT_STOCK) .setSourceId(wave.getId()) .setTarLoc(loc.getCode()); rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
@@ -201,7 +201,6 @@ locItems = LocManageUtil.getFirstInFirstOutItemList(item.getMatnrCode(), item.getBatch(), item.getAnfme()); } } for (LocItem locItem : locItems) { Loc loc = locService.getById(locItem.getLocId()); List<LocItem> itemList = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); @@ -244,9 +243,18 @@ .apply("JSON_CONTAINS(container_type, {0}) = 1", containerType.getContainerType().toString())//容器类型 .eq(BasStationArea::getDeleted, 0)); // .apply("JSON_CONTAINS(station_alias, '\"{0}\"') = 1", null)//区域包含站点集 if (basStationAreas.isEmpty()){ throw new CoolException("未找到符合条件站点!!!请检查库区配置!!!"); } List<String> targSiteAreaList = new ArrayList<>(); for (BasStationArea basStationArea : basStationAreas) { targSiteAreaList.add(basStationArea.getStationAreaId()); if (basStationArea.getStationAlias().isEmpty()){ continue; } targSiteAreaList.add(basStationArea.getId().toString()); } if (targSiteAreaList.isEmpty()){ throw new CoolException("未找到符合条件站点!!!请检查库区配置!!!"); } int count = 0; for (BasStationArea basStationArea : basStationAreas) { @@ -266,6 +274,10 @@ // Set<String> stationSet = deviceSites.stream().map(DeviceSite::getSite).collect(Collectors.toSet()); //已使用站点 Set<String> stas = stations.stream().map(BasStation::getStationName).collect(Collectors.toSet()); if (stas.size() == maps.size()) { stations = new ArrayList<>(); stas = stations.stream().map(BasStation::getStationName).collect(Collectors.toSet()); } BasStationService basStationService = SpringUtils.getBean(BasStationService.class); BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>() .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) @@ -278,14 +290,21 @@ if (count == basStationAreas.size()) { if (!Objects.isNull(basStation)) { orderOutItemDto.setTargSiteAreaNow(basStationArea.getStationAreaId()); orderOutItemDto.setSiteNo(basStation.getStationName()); // throw new CoolException("站點不存在!!"); } else if (!stas.isEmpty()) { orderOutItemDto.setTargSiteAreaNow(basStationArea.getStationAreaId()); orderOutItemDto.setSiteNo(basStationArea.getStationAlias().get(0)); } else { throw new CoolException("未找到符合条件站点!!!请检查库区或者路径配置!!!"); } } else { if (Objects.isNull(basStation)) { continue; // throw new CoolException("站點不存在!!"); } orderOutItemDto.setTargSiteAreaNow(basStationArea.getStationAreaId()); orderOutItemDto.setSiteNo(basStation.getStationName()); } rsf-server/src/main/resources/mapper/manager/AsnOrderMapper.xml
@@ -29,7 +29,7 @@ `day_time` BETWEEN ( CURDATE() - INTERVAL 1 MONTH ) AND CURDATE() GROUP BY `day_time`, task_type `day_time`, task_type,id ) t ${ew.customSqlSegment} </select>