自动化立体仓库 - WMS系统
zyx
2023-11-15 d73aea22606a34be4d704c130f1a8444af58f5a8
agv任务生成逻辑更改
9个文件已修改
112 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OutController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvBasDevpService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvWrkMastService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java
@@ -276,21 +276,21 @@
            agvTaskDtos.add(taskDto);
        }
        //寻找空站点位置
        AgvBasDevp agvBasDevp = agvBasDevpService.selectEmptyDevpByStation(locDto.getAgvStaNo());
        if(Cools.isEmpty(agvBasDevp)){
            //如果没有找到空站点,则生成准备任务
            //TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getAgvStaNo(), locDto);
            //agvTaskDtos.add(taskDto);
            //如果库位存在混载
            return;
        }
//        agvBasDevp.setLocSts("S");
//        agvBasDevpService.updateById(agvBasDevp);
        agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"S",null);
        //TaskDto taskDto = new TaskDto(locDto.getLocNo(), agvBasDevp.getDevNo(), locDto);
        taskDto.setAgvStaNo(agvBasDevp.getDevNo());
//        //寻找空站点位置
//        AgvBasDevp agvBasDevp = agvBasDevpService.selectEmptyDevpByStation(locDto.getAgvStaNo());
//        if(Cools.isEmpty(agvBasDevp)){
//            //如果没有找到空站点,则生成准备任务
//            //TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getAgvStaNo(), locDto);
//            //agvTaskDtos.add(taskDto);
//            //如果库位存在混载
//
//            return;
//        }
////        agvBasDevp.setLocSts("S");
////        agvBasDevpService.updateById(agvBasDevp);
//        agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"S",null);
//        //TaskDto taskDto = new TaskDto(locDto.getLocNo(), agvBasDevp.getDevNo(), locDto);
//        taskDto.setAgvStaNo(agvBasDevp.getDevNo());
        //agvTaskDtos.add(taskDto);
src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java
@@ -9,6 +9,7 @@
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Mapper
@Repository
@@ -22,4 +23,21 @@
    @Select("select station_code from agv_bas_devp where floor = #{floor} and cache_shelves = 'Y' group by station_code")
    List<String> selectCacheShelvesStationCodeByFloor(@Param("floor") int floor);
    @Select("SELECT\n" +
            "\tbas.dev_no,\n" +
            "\tCOUNT ( mast.loc_no ) AS num \n" +
            "FROM\n" +
            "\tagv_bas_devp bas\n" +
            "\tLEFT JOIN agv_wrk_mast mast ON bas.dev_no = mast.loc_no \n" +
            "WHERE\n" +
            "\tbas.station_code = #{stationCode} AND bas.loc_sts != 'X' \n" +
            "GROUP BY\n" +
            "\tbas.dev_no \n" +
            "ORDER BY\n" +
            "\tnum")
    List<Map<String,Object>> selectDevNoAndNumBystationCode(@Param("stationCode") String stationCode);
    @Select("select station_code from agv_bas_devp group by station_code ")
    List<String> selectAllStationCode();
}
src/main/java/com/zy/asrs/service/AgvBasDevpService.java
@@ -26,4 +26,8 @@
    List<String> selectCacheShelvesStationCodeByFloor(int floor);
    public List<Map<String,Object>> selectDevNoAndNumBystationCode(String stationCode);
    List<String> selectAllStationCode();
}
src/main/java/com/zy/asrs/service/AgvWrkMastService.java
@@ -21,4 +21,7 @@
    public boolean deleteByWrkNo(int wrkNo);
    public int containerArrived(AgvWrkMast agvWrkMast);
    public List<AgvWrkMast> selectReadyAgvWrkMast();
}
src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
@@ -213,4 +213,13 @@
        return this.baseMapper.selectCacheShelvesStationCodeByFloor(floor);
    }
    public List<Map<String,Object>> selectDevNoAndNumBystationCode(String stationCode){
        return this.baseMapper.selectDevNoAndNumBystationCode(stationCode);
    }
    @Override
    public List<String> selectAllStationCode() {
        return this.baseMapper.selectAllStationCode();
    }
}
src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.core.exception.CoolException;
@@ -11,10 +12,7 @@
import com.zy.asrs.entity.param.AgvTaskParam;
import com.zy.asrs.entity.param.AgvTaskkDescribeParam;
import com.zy.asrs.mapper.AgvWrkMastMapper;
import com.zy.asrs.service.AgvLocMastService;
import com.zy.asrs.service.AgvWrkDetlService;
import com.zy.asrs.service.AgvWrkMastService;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.*;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -55,6 +53,8 @@
    AgvLocMastService agvLocMastService;
    @Autowired
    ApiLogService apiLogService;
    @Autowired
    AgvBasDevpService agvBasDevpService;
    public void updateWrkStsByWrkNo(int wrkNo, long wrkSts) {
        AgvWrkMast agvWrkMast = this.selectById(wrkNo);
@@ -134,6 +134,15 @@
        return doHttpRequest(containerArrivedParam,"容器达到通知",url, containerArrivedPath,null,"127.0.0.1");
    }
    @Override
    public List<AgvWrkMast> selectReadyAgvWrkMast() {
        List<String> stationCodes = agvBasDevpService.selectAllStationCode();
        Wrapper<AgvWrkMast> wrapper = new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 21L).like(false, "loc_no", "@");
        wrapper.in("loc_no",stationCodes);
        return this.selectList(wrapper);
        //return this.baseMapper.selectReadyAgvWrkMast();
    }
    private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){
        //往容器入场参数中放入源站点位置
        for(AgvWrkMast agvWrkMast : agvWrkMastList){
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.Cools;
import com.zy.asrs.entity.AgvWrkMast;
import com.zy.asrs.service.AgvBasDevpService;
import com.zy.asrs.service.AgvWrkMastService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.AgvWrkMastHandler;
@@ -31,6 +32,8 @@
    AgvWrkMastHandler agvWrkMastHandler;
    @Autowired
    AgvWrkMastService agvWrkMastService;
    @Autowired
    AgvBasDevpService agvBasDevpService;
    /*
@@ -121,7 +124,7 @@
     */
    @Scheduled(cron = "0/5 * * * * ? ")
    public void dealWatiWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 21).like(false, "loc_no", "@"));
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectReadyAgvWrkMast();
        if(!Cools.isEmpty(agvWrkMastList)){
            try {
                ReturnT<String> returnT = agvWrkMastHandler.dealWatiWrk(agvWrkMastList);
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -10,6 +10,7 @@
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,6 +21,9 @@
@Slf4j
@Service
public class AgvWrkMastHandler extends AbstractHandler<String> {
    @Value("${agvBasDev.maxWorkNum}")
    private int maxWrokNum;
    @Autowired
    private AgvWrkMastService agvWrkMastService;
@@ -194,11 +198,20 @@
    public ReturnT<String> dealWatiWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
        agvWrkMastList.forEach(agvWrkMast -> {
            //寻找空站点位置
            AgvBasDevp agvBasDevp = agvBasDevpService.selectEmptyDevpByStation(agvWrkMast.getLocNo());
            if(!Cools.isEmpty(agvBasDevp)){
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"S",null);
                agvWrkMast.setLocNo(agvBasDevp.getDevNo());
//            //寻找空站点位置
//            AgvBasDevp agvBasDevp = agvBasDevpService.selectEmptyDevpByStation(agvWrkMast.getLocNo());
//            if(!Cools.isEmpty(agvBasDevp)){
//                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"S",null);
//                agvWrkMast.setLocNo(agvBasDevp.getDevNo());
//                agvWrkMastService.updateById(agvWrkMast);
//            }
            //查询该站点所有暂存位在工作档中出现的次数
            List<Map<String, Object>> devNoMaps = agvBasDevpService.selectDevNoAndNumBystationCode(agvWrkMast.getLocNo());
            //取第一个暂存位,并查询其次数与配置的次数做比较
            Map<String, Object> devNoMap = devNoMaps.get(0);
            if((int)devNoMap.get("num") < maxWrokNum){
                agvWrkMast.setLocNo(devNoMap.get("dev_no").toString());
                agvWrkMastService.updateById(agvWrkMast);
            }
src/main/resources/application.yml
@@ -88,3 +88,6 @@
  url: http://192.168.1.55:8010
  orderReportPath: /api/RdAudit
agvBasDev:
  maxWorkNum: 2