chen.lin
昨天 ecd5b6b51b7ddc4efe63c49c3c68adb276a2a2cb
Merge remote-tracking branch 'origin/devlop-phyz' into devlop-phyz
13个文件已修改
158 ■■■■■ 已修改文件
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/MissionTaskIssueParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/MissionTaskIssueParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/OrderOutItemDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocToTaskParams.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/DeviceSiteServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/mapper/manager/AsnOrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>