#
Junjie
4 天以前 5d1aa071ca6f385a8ec9bb2b5135d259f0f225eb
#
11个文件已修改
333 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WrkMastScheduler.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/StartupDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RedisKeyType.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/WrkIoType.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/WrkStsType.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/plugin/FakeProcess.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/docs/WCS外部HTTP API接口V1.0.docx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -5,15 +5,23 @@
import com.core.common.R;
import com.zy.asrs.domain.param.*;
import com.zy.asrs.entity.ApiLog;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DeviceConfigService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.utils.NotifyUtils;
import com.zy.common.annotations.OpenApiLog;
import com.zy.common.service.CommonService;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.enums.WrkIoType;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.thread.CrnThread;
import com.zy.core.thread.RgvThread;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
@@ -46,6 +54,8 @@
    private WrkMastService wrkMastService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private DeviceConfigService deviceConfigService;
    //移库任务
    @PostMapping("/createLocMoveTask")
@@ -199,61 +209,42 @@
//    @OpenApiLog(memo = "获取设备状态")
    public R getDeviceStatus() {
        HashMap<String, Object> map = new HashMap<>();
//        //获取小车数据
//        ArrayList<ShuttleProtocol> shuttleProtocols = new ArrayList<>();
//        List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
//                .eq("device_type", String.valueOf(SlaveType.Shuttle)));
//        for (DeviceConfig device : shuttleList) {
//            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getDeviceNo());
//            if (shuttleThread == null) {
//                continue;
//            }
//
//            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
//            if (shuttleProtocol == null) {
//                continue;
//            }
//            shuttleProtocols.add(shuttleProtocol);
//        }
//
//        //获取货叉提升机数据
//        ArrayList<ForkLiftProtocol> forkLiftProtocols = new ArrayList<>();
//        List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
//                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
//        for (DeviceConfig device : forkLiftList) {
//            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
//            if (forkLiftThread == null) {
//                continue;
//            }
//
//            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
//            if (forkLiftProtocol == null) {
//                continue;
//            }
//            forkLiftProtocols.add(forkLiftProtocol);
//        }
//
//        //获取提升机数据
//        ArrayList<LiftProtocol> liftProtocols = new ArrayList<>();
//        List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
//                .eq("device_type", String.valueOf(SlaveType.Lift)));
//        for (DeviceConfig device : liftList) {
//            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
//            if (liftThread == null) {
//                continue;
//            }
//
//            LiftProtocol liftProtocol = liftThread.getStatus();
//            if (liftProtocol == null) {
//                continue;
//            }
//            liftProtocols.add(liftProtocol);
//        }
//
//        map.put("shuttle", shuttleProtocols);
//        map.put("forkLift", forkLiftProtocols);
//        map.put("lift", liftProtocols);
        //获取堆垛机数据
        ArrayList<CrnProtocol> crnProtocols = new ArrayList<>();
        List<DeviceConfig> crnList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
                .eq("device_type", String.valueOf(SlaveType.Crn)));
        for (DeviceConfig device : crnList) {
            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, device.getDeviceNo());
            if (crnThread == null) {
                continue;
            }
            CrnProtocol crnProtocol = crnThread.getStatus();
            if (crnProtocol == null) {
                continue;
            }
            crnProtocols.add(crnProtocol);
        }
        //获取RGV数据
        ArrayList<RgvProtocol> rgvProtocols = new ArrayList<>();
        List<DeviceConfig> rgvList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
                .eq("device_type", String.valueOf(SlaveType.Rgv)));
        for (DeviceConfig device : rgvList) {
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, device.getDeviceNo());
            if (rgvThread == null) {
                continue;
            }
            RgvProtocol rgvProtocol = rgvThread.getStatus();
            if (rgvProtocol == null) {
                continue;
            }
            rgvProtocols.add(rgvProtocol);
        }
        map.put("crn", crnList);
        map.put("rgv", rgvList);
        return R.ok().add(map);
    }
src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java
@@ -8,17 +8,11 @@
    //wms任务号
    private String taskNo;
    //源站
    private Integer sourceStaNo;
    //目标站
    private Integer staNo;
    //源库位
    private String sourceLocNo;
    //条码
    private String barcode;
    //出库库位
    private String locNo;
    //任务优先级
    private Integer taskPri;
src/main/java/com/zy/asrs/task/WrkMastScheduler.java
@@ -1,7 +1,6 @@
package com.zy.asrs.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.entity.LocMast;
@@ -10,13 +9,9 @@
import com.zy.asrs.service.WrkMastLogService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.utils.NotifyUtils;
import com.zy.common.utils.HttpHandler;
import com.zy.core.enums.LocStsType;
import com.zy.core.enums.SlaveType;
import com.zy.core.enums.WrkIoType;
import com.zy.core.enums.WrkStsType;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -188,49 +183,6 @@
            //上报
            notifyUtils.notify("task", 1, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.TASK_COMPLETE, JSON.toJSONString(wrkMast));
        }
    }
    @Scheduled(cron = "0/1 * * * * ? ")
    @Transactional
    public void executeMove(){
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.COMPLETE_MOVE.sts));
        if (wrkMasts.isEmpty()) {
            return;
        }
        for (WrkMast wrkMast : wrkMasts) {
            // ä¿å­˜å·¥ä½œä¸»æ¡£åŽ†å²æ¡£
            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
                log.info("保存工作历史档[workNo={}]失败", wrkMast.getWrkNo());
            }
            // åˆ é™¤å·¥ä½œä¸»æ¡£
            if (!wrkMastService.deleteById(wrkMast)) {
                log.info("删除工作主档[workNo={}]失败", wrkMast.getWrkNo());
            }
        }
    }
    @Scheduled(cron = "0/1 * * * * ? ")
    @Transactional
    public void executeCharge(){
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.COMPLETE_CHARGE.sts));
        if (wrkMasts.isEmpty()) {
            return;
        }
        for (WrkMast wrkMast : wrkMasts) {
            // ä¿å­˜å·¥ä½œä¸»æ¡£åŽ†å²æ¡£
            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
                log.info("保存工作历史档[workNo={}]失败", wrkMast.getWrkNo());
            }
            // åˆ é™¤å·¥ä½œä¸»æ¡£
            if (!wrkMastService.deleteById(wrkMast)) {
                log.info("删除工作主档[workNo={}]失败", wrkMast.getWrkNo());
            }
            //上报
            notifyUtils.notify("task", 1, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.TASK_CHARGE_COMPLETE, JSON.toJSONString(wrkMast));
        }
    }
src/main/java/com/zy/asrs/utils/Utils.java
@@ -2,14 +2,31 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.Arith;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.utils.RedisUtil;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.CrnModeType;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.thread.CrnThread;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
public class Utils {
@@ -112,4 +129,76 @@
        }
        return defaultTime;
    }
    //获取入库任务可用排
    public static List<Integer> getInTaskEnableRow() {
        List<Integer> list = new ArrayList<>();
        try {
            RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
            WrkMastService wrkMastService = SpringUtils.getBean(WrkMastService.class);
            BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
            Integer currentCircleTaskCrnNo = null;
            Object object = redisUtil.get(RedisKeyType.CURRENT_CIRCLE_TASK_CRN_NO.key);
            if (object != null) {
                currentCircleTaskCrnNo = Integer.parseInt(String.valueOf(object));
            }
            Wrapper<BasCrnp> wrapper = new EntityWrapper<BasCrnp>()
                    .eq("in_enable", "Y")
                    .eq("status", 1);
            if (currentCircleTaskCrnNo != null) {
                currentCircleTaskCrnNo = currentCircleTaskCrnNo + 1;
                BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", currentCircleTaskCrnNo));
                List<WrkMast> currentCrnTask = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", currentCircleTaskCrnNo));
                if (currentCrnTask.size() <= 1) {
                    if (basCrnp != null) {
                        String controlRowsStr = basCrnp.getControlRows();
                        if(!Cools.isEmpty(controlRowsStr)){
                            List<Integer> rows = JSON.parseArray(controlRowsStr, Integer.class);
                            list.addAll(rows);
                            wrapper.ne("crn_no", currentCircleTaskCrnNo);
                        }
                    }
                }
            }
            HashMap<Integer, Integer> map = new HashMap<>();
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<>());
            List<BasCrnp> basCrnps = basCrnpService.selectList(wrapper);
            for (WrkMast wrkMast : wrkMasts) {
                Integer crnNo = wrkMast.getCrnNo();
                map.put(crnNo, map.getOrDefault(crnNo, 0) + 1);
            }
            List<BasCrnp> enabledCrnps = new ArrayList<>();
            for (BasCrnp basCrnp : basCrnps) {
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
                if (crnThread == null) {
                    continue;
                }
                CrnProtocol crnProtocol = crnThread.getStatus();
                if (crnProtocol.getMode() != CrnModeType.AUTO.id) {
                    continue;
                }
                enabledCrnps.add(basCrnp);
            }
            enabledCrnps.sort(Comparator.comparingInt(o -> map.getOrDefault(o.getCrnNo(), 0)));
            for (BasCrnp basCrnp : enabledCrnps) {
                String controlRowsStr = basCrnp.getControlRows();
                if (Cools.isEmpty(controlRowsStr)) {
                    continue;
                }
                List<Integer> rows = JSON.parseArray(controlRowsStr, Integer.class);
                list.addAll(rows);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return list;
    }
}
src/main/java/com/zy/common/model/StartupDto.java
@@ -7,7 +7,7 @@
    private String locNo;
    private Integer workNo;
    private Integer taskNo;
    private Integer taskPri;
src/main/java/com/zy/common/service/CommonService.java
@@ -10,7 +10,9 @@
import com.zy.asrs.utils.Utils;
import com.zy.common.model.NavigateNode;
import com.zy.common.utils.NavigateUtils;
import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.enums.WrkIoType;
import com.zy.core.enums.WrkStsType;
import com.zy.core.model.StationObjModel;
@@ -37,6 +39,8 @@
    private NavigateUtils navigateUtils;
    @Autowired
    private CommonService commonService;
    @Autowired
    private RedisUtil redisUtil;
    /**
     * ç”Ÿæˆå·¥ä½œå·
@@ -87,10 +91,6 @@
            wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
        }else if (wrkMast.getIoType() == WrkIoType.OUT.id) {
            wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
        } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_MOVE.id) {
            wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
        } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_CHARGE.id) {
            wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts);
        } else if (wrkMast.getIoType() == WrkIoType.LOC_MOVE.id) {
            wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
        }
@@ -139,6 +139,20 @@
            ioPri = param.getTaskPri().doubleValue();
        }
        Integer sourceCrnNo = commonService.findCrnNoByLocNo(sourceLocMast.getLocNo());
        if (sourceCrnNo == null) {
            throw new CoolException("未找到对应堆垛机");
        }
        Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
        if (crnNo == null) {
            throw new CoolException("未找到对应堆垛机");
        }
        if (!sourceCrnNo.equals(crnNo)) {
            throw new CoolException("源库位和目标库位不在同一巷道");
        }
        // èŽ·å–å·¥ä½œå·
        int workNo = getWorkNo(WrkIoType.LOC_MOVE.id);
        // ä¿å­˜å·¥ä½œæ¡£
@@ -150,6 +164,7 @@
        wrkMast.setIoPri(ioPri);
        wrkMast.setSourceLocNo(param.getSourceLocNo());
        wrkMast.setLocNo(param.getLocNo()); // ç›®æ ‡åº“位
        wrkMast.setCrnNo(crnNo);
        wrkMast.setWmsWrkNo(param.getTaskNo());
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
@@ -219,13 +234,15 @@
        locMast.setModiTime(new Date());
        locMastService.updateById(locMast);
        //缓存记录当前命令堆垛机编号
        redisUtil.set(RedisKeyType.CURRENT_CIRCLE_TASK_CRN_NO.key, crnNo, 60 * 60 * 24);
        return true;
    }
    //出库任务
    public boolean createOutTask(CreateOutTaskParam param) {
        Date now = new Date();
        LocMast locMast = locMastService.queryByLoc(param.getSourceLocNo());
        LocMast locMast = locMastService.queryByLoc(param.getLocNo());
        if (null == locMast) {
            throw new CoolException("源库位不存在");
        }
@@ -244,6 +261,11 @@
            throw new CoolException("未找到对应堆垛机");
        }
        Integer sourceStationId = commonService.findOutStationId(crnNo, param.getStaNo());
        if (sourceStationId == null) {
            throw new CoolException("未找到输送目标站点可走行路径");
        }
        // èŽ·å–å·¥ä½œå·
        int workNo = getWorkNo(WrkIoType.OUT.id);
        // ä¿å­˜å·¥ä½œæ¡£
@@ -253,11 +275,11 @@
        wrkMast.setWrkSts(WrkStsType.NEW_OUTBOUND.sts); // å·¥ä½œçŠ¶æ€ï¼š101.生成出库任务
        wrkMast.setIoType(WrkIoType.OUT.id); // å…¥å‡ºåº“状态: 101.出库
        wrkMast.setIoPri(ioPri);
        wrkMast.setSourceLocNo(param.getSourceLocNo()); // æºåº“位
        wrkMast.setSourceStaNo(param.getSourceStaNo());//源站
        wrkMast.setSourceLocNo(locMast.getLocNo()); // æºåº“位
        wrkMast.setSourceStaNo(sourceStationId);//源站
        wrkMast.setStaNo(param.getStaNo());//目标站
        wrkMast.setWmsWrkNo(param.getTaskNo());
        wrkMast.setBarcode(param.getBarcode());
        wrkMast.setBarcode(locMast.getBarcode());
        wrkMast.setCrnNo(crnNo);
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -27,6 +27,8 @@
    GENERATE_FAKE_IN_STATION_DATA_LIMIT("generate_fake_in_station_data_limit_"),
    CHECK_OUT_STATION_STAY_TIME_OUT_LIMIT("check_out_station_stay_time_out_limit_"),
    CHECK_IN_STATION_STAY_TIME_OUT_LIMIT("check_in_station_stay_time_out_limit_"),
    CURRENT_CIRCLE_TASK_CRN_NO("current_circle_task_crn_no_")
    ;
    public String key;
src/main/java/com/zy/core/enums/WrkIoType.java
@@ -6,9 +6,7 @@
    IN(1, "入库"),
    OUT(101, "出库"),
    SHUTTLE_MOVE(200, "小车移动"),
    LOC_MOVE(201, "移库任务"),
    SHUTTLE_CHARGE(300, "小车充电"),
    PREVIEW_LIFT_MOVE(98, "提升机预调度移动任务"),
    MANUAL(99, "手动任务"),
    ;
src/main/java/com/zy/core/enums/WrkStsType.java
@@ -18,33 +18,9 @@
    COMPLETE_OUTBOUND(109, "出库完成"),
    SETTLE_OUTBOUND(110, "出库库存更新"),
    NEW_CHARGE(201, "生成充电任务"),
    CHARGE_SHUTTLE_RUN(202, "小车前往充电桩"),
    CHARGE_SHUTTLE_RUN_COMPLETE(203, "小车到达充电桩"),
    CHARGE_SHUTTLE_START_CHARGING(204, "小车开启充电中"),
    CHARGE_SHUTTLE_CHARGING(205, "小车充电中"),
    CHARGE_SHUTTLE_CHARGING_COMPLETE(206, "小车充电完成"),
    COMPLETE_CHARGE(210, "充电任务完成"),
    NEW_MOVE(301, "生成迁移任务"),
    MOVE_NEARBY(302, "小车移动至近点中"),
    MOVE_NEARBY_COMPLETE(303, "小车移动至近点完成"),
    MOVE_IN_LIFT(304, "小车迁入提升机中"),
    MOVE_IN_LIFT_COMPLETE(305, "小车迁入提升机完成"),
    MOVE_LIFT_RUN(306, "提升机搬运中"),
    MOVE_LIFT_RUN_COMPLETE(307, "提升机搬运完成"),
    MOVE_OUT_LIFT(308, "小车迁出提升机中"),
    MOVE_OUT_LIFT_COMPLETE(309, "小车迁出提升机完成"),
    MOVE_SHUTTLE(310, "小车移动中"),
    COMPLETE_MOVE(311, "小车移动完成"),
    NEW_MANUAL(401, "生成手动任务"),
    ANALYZE_MANUAL(402, "手动任务解析"),
    EXECUTE_MANUAL(403, "执行手动任务"),
    COMPLETE_MANUAL(410, "手动任务完成"),
    NEW_LOC_MOVE(501, "生成移库任务"),
    LOC_MOVE_SHUTTLE_RUN(502, "小车搬运中"),
    LOC_MOVE_RUN(502, "设备搬运中"),
    LOC_MOVE_RUN_COMPLETE(503, "设备搬运完成"),
    COMPLETE_LOC_MOVE(509, "移库完成"),
    ;
src/main/java/com/zy/core/plugin/FakeProcess.java
@@ -3,7 +3,6 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.domain.param.CreateInTaskParam;
import com.zy.asrs.domain.param.CreateOutTaskParam;
import com.zy.asrs.entity.BasCrnp;
@@ -14,6 +13,7 @@
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
@@ -269,17 +269,10 @@
                        continue;
                    }
                    Integer sourceStationId = commonService.findOutStationId(crnNo, stationId);
                    if (sourceStationId == null) {
                        continue;
                    }
                    CreateOutTaskParam taskParam = new CreateOutTaskParam();
                    taskParam.setTaskNo(String.valueOf(commonService.getWorkNo(WrkIoType.OUT.id)));
                    taskParam.setSourceStaNo(sourceStationId);
                    taskParam.setStaNo(stationId);
                    taskParam.setSourceLocNo(locMast.getLocNo());
                    taskParam.setBarcode(locMast.getBarcode());
                    taskParam.setLocNo(locMast.getLocNo());
                    boolean result = commonService.createOutTask(taskParam);
                    redisUtil.set(RedisKeyType.GENERATE_FAKE_OUT_TASK_LIMIT.key + stationId, "lock", 15);
                }
@@ -349,9 +342,9 @@
                    try {
                        HashMap<String, Object> param = new HashMap<>();
                        param.put("barcode", stationProtocol.getBarcode());
                        param.put("ioType", 1);
                        param.put("sourceStaNo", stationProtocol.getStationId());
                        param.put("locType1", stationProtocol.getPalletHeight());
                        param.put("row", Utils.getInTaskEnableRow());
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
@@ -364,7 +357,7 @@
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            CreateInTaskParam taskParam = new CreateInTaskParam();
                            taskParam.setTaskNo(String.valueOf(dto.getWorkNo()));
                            taskParam.setTaskNo(String.valueOf(dto.getTaskNo()));
                            taskParam.setLocNo(dto.getLocNo());
                            taskParam.setTaskPri(dto.getTaskPri());
                            boolean result = commonService.createInTask(taskParam);
src/main/resources/docs/WCSÍⲿHTTP API½Ó¿ÚV1.0.docx
Binary files differ