自动化立体仓库 - WMS系统
zwl
2025-12-31 b187814d7cfa5ace1ed9c203372524c69fe56553
src/main/java/com/zy/common/web/WcsController.java
@@ -12,6 +12,7 @@
import com.zy.common.CodeRes;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.StartupDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.web.param.SearchLocParam;
import lombok.extern.slf4j.Slf4j;
@@ -50,6 +51,10 @@
    private RowLastnoService rowLastnoService;
    @Autowired
    private WorkService workService;
    @Autowired
    private TaskService taskService;
    // TODO:称重、拍照上报存储,CTU料箱运转
    @PostMapping("/pakin/loc/v1")
    @ResponseBody
@@ -84,10 +89,17 @@
            return R.error("高低检测信号不能为空");
        }
        //入库时对空板出库任务进行完成
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", param.getBarcode()).eq("wrk_sts",110));
        if (!Cools.isEmpty(wrkMast)) {
            wrkMast.setWrkSts(15L);//空板出库任务转历史档
            wrkMastService.updateById(wrkMast);
        }
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
        sourceStaNo.setLocType1(param.getLocType1());
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo,param.getBarcode());
        StartupDto dto = null;
        switch (param.getIoType()) {
@@ -124,8 +136,8 @@
        wrkMast.setIoPri(13D);
        wrkMast.setIoType(10);
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setFullPlt("N"); // 满板:N
        wrkMast.setPicking("N"); // 拣料
@@ -151,7 +163,7 @@
        EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam();
        emptyPlateOutParam.setOutSite(12);
        emptyPlateOutParam.setLocNos(new ArrayList<String>(){{add(locMast.getLocNo()+"");}});
        WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam);
        WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam,50,"");
        return R.ok(!Cools.isEmpty(wrkMast)? R.ok("自动空托出库成功,工作号:" + wrkMast.getWrkNo()) : R.error("生成自动空托出库失败"));
    }
@@ -161,12 +173,14 @@
    @Transactional
    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
//        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
        List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
        StartupDto dto = commonService.getLocNo( 1, devpNo,findLocNoAttributeVo, locTypeDto);
//        List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
//        List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
//        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
//        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins.get(0));
//        StartupDto dto = commonService.getLocNo( 1, devpNo,findLocNoAttributeVo, locTypeDto);
        StartupDto dto = commonService.getLocNoNew(1,devpNo,locTypeDto);
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
@@ -177,8 +191,8 @@
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(barcode); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
@@ -186,7 +200,7 @@
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        wrkMast.setCtnType(1); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
@@ -217,11 +231,11 @@
            throw new CoolException("更新通知档失败");
        }
        // 更新源站点信息
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiTime(now);
        if (!basDevpService.updateById(sourceStaNo)){
            throw new CoolException("更新源站失败");
        }
//        sourceStaNo.setWrkNo(workNo);
//        sourceStaNo.setModiTime(now);
//        if (!basDevpService.updateById(sourceStaNo)){
//            throw new CoolException("更新源站失败");
//        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")){
@@ -253,8 +267,8 @@
        wrkMast.setIoType(10); // 入出库状态:10.空板入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setFullPlt("N"); // 满板
        wrkMast.setPicking("N"); // 拣料
@@ -290,4 +304,56 @@
        return dto;
    }
    @PostMapping("/createAGVMoveTask")
    @ResponseBody
    public synchronized R createAGVMoveTask(@RequestBody WrkMast wrkMast){
        if (Cools.isEmpty(wrkMast)){
            return R.error("出库时创建AGV搬运空料架任务不能为空");
        }
        //查看是否有相关的AGV搬运任务存在
        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>()
                .in("sta_no", wrkMast.getStaNo(),wrkMast.getMemo())
                .or()
                .in("source_sta_no", wrkMast.getStaNo(),wrkMast.getMemo()));
        if (!tasks.isEmpty()){
            return R.error("有对堆垛机接驳站点的AGV搬运任务,暂时无法生成AGV搬运任务");
        }
        String sourceStaNo = "Q-";
        if(wrkMast.getStaNo().equals("401")){
            sourceStaNo = sourceStaNo + "E3";
        }else if(wrkMast.getStaNo().equals("402")){
            sourceStaNo = sourceStaNo + "E2";
        }else if(wrkMast.getStaNo().equals("307")){
            sourceStaNo = sourceStaNo + "E1";
        }
        //生成AGV搬运空料架任务
        // 保存工作档
        Task task = new Task();
        Date date = new Date();
        String TaskNo = wrkMast.getWrkNo()+"aa"+date.getTime();
        task.setWrkNo(wrkMast.getWrkNo())
                .setTaskNo(TaskNo)
                .setIoTime(date)
                .setWrkSts(301L) // 工作状态:301.任务下发
                .setIoType(5) // 入出库状态: 5.区域到站
                .setTaskType("AGV补空料架")
                .setIoPri(10D)
                .setFullPlt("N") // 满板:Y
                .setPicking("N") // 拣料
                .setExitMk("N")// 退出
                .setStaNo(wrkMast.getStaNo())
                .setSourceStaNo(sourceStaNo)//空料架缓存区
                .setEmptyMk("Y")// 空板
                .setBarcode("")// 托盘码
                .setLinkMis("N")
                .setAppeUser(9945L)
                .setAppeTime(date)
                .setModiUser(9945L)
                .setModiTime(date);
        if (!taskService.insert(task)) {
            throw new CoolException("保存工作档失败");
        }
        return R.ok();
    }
}