1个文件已添加
10个文件已修改
976 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/ApplyInDevpDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 297 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/TaskReportScheduler.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 239 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/wcs和wms接口(2).docx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wms/js/realtimeWatch/pipeline.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -2,15 +2,14 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.AppAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.param.ApplyInDevpDto;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CrnStatusParam;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.service.*;
import com.zy.common.web.BaseController;
@@ -20,11 +19,8 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@@ -55,55 +51,6 @@
    private LocMastService locMastService;
    @Autowired
    private BasCrnErrorService basCrnErrorService;
    public static <T> List<T> convertListMapToListObject(List<HashMap<String, Object>> listMap, Class<T> clazz) throws Exception {
        List<T> list = new ArrayList<>();
        for (Map<String, Object> map : listMap) {
            T obj = clazz.getDeclaredConstructor().newInstance();
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                String key = entry.getKey();
                Object value = entry.getValue();
                try {
                    Field field = clazz.getDeclaredField(key);
                    field.setAccessible(true);
                    setFieldValue(obj, field, value);
                } catch (NoSuchFieldException e) {
                    System.out.println("No such field: " + key + " in class " + clazz.getName());
                }
            }
            list.add(obj);
        }
        return list;
    }
    private static void setFieldValue(Object obj, Field field, Object value) throws IllegalAccessException {
        Class<?> fieldType = field.getType();
        if (fieldType.isAssignableFrom(value.getClass())) {
            field.set(obj, value);
        } else if (fieldType == int.class || fieldType == Integer.class) {
            field.set(obj, ((Number) value).intValue());
        } else if (fieldType == long.class || fieldType == Long.class) {
            field.set(obj, ((Number) value).longValue());
        } else if (fieldType == double.class || fieldType == Double.class) {
            field.set(obj, ((Number) value).doubleValue());
        } else if (fieldType == float.class || fieldType == Float.class) {
            field.set(obj, ((Number) value).floatValue());
        } else if (fieldType == boolean.class || fieldType == Boolean.class) {
            field.set(obj, (Boolean) value);
        } else if (fieldType == String.class) {
            field.set(obj, String.valueOf(value));
        } else {
            System.out.println("Unsupported field type: " + fieldType.getName());
        }
    }
    //创建任务
    @PostMapping("/taskCreate")
@@ -247,45 +194,6 @@
        return R.ok(crnStatusParams);
    }
    //取放货申请
    @PostMapping("/pick/and/place/v1")
    @AppAuth(memo = "agv取放货申请")
    public R getAgvPickAndPlaceV1(@RequestHeader String appkey,
                                  @RequestBody TaskOverParam param,
                                  HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getStartPoint())) {
            return R.error("码头[staNo]不能为空");
        }
        if (Cools.isEmpty(param.getType())) {
            return R.error("类型[type]不能为空");
        }
        return openService.getAgvPickAndPlaceV1(param);
    }
    //取放货完成反馈
    @PostMapping("/pick/and/place/v2")
    @AppAuth(memo = "agv取放货完成反馈")
    public R getAgvPickAndPlaceV2(@RequestHeader String appkey,
                                  @RequestBody TaskOverParam param,
                                  HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)) {
            return R.parse(BaseRes.PARAM);
        }
        if (Cools.isEmpty(param.getStartPoint())) {
            return R.error("码头[staNo]不能为空");
        }
        if (Cools.isEmpty(param.getType())) {
            return R.error("类型[type]不能为空");
        }
        return openService.getAgvPickAndPlaceV2(param);
    }
    private void auth(String appkey, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appkey:{};请求数据:{}", request.getServletPath(), appkey, JSON.toJSONString(obj));
        request.setAttribute("cache", obj);
@@ -314,6 +222,7 @@
    @GetMapping("/queryTaskCommand")
    public R queryTaskCommand(@RequestHeader String appkey,
                              @RequestParam String taskNo,
                              HttpServletRequest request) {
        auth(appkey, taskNo, request);
        TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo);
@@ -325,188 +234,13 @@
        return R.ok().add(commandInfos);
    }
    // å¤–置输送线wms通知输送线流动,上报时候上报站点即可
    @PostMapping("/applyInDevp")
    public R applyInDevp(@RequestHeader String appkey,
                         @RequestBody ApplyInDevpDto param,
                         HttpServletRequest request) {
        auth(appkey, param, request);
        return openService.applyInDevp(param);
    }
    //任务下发接口
//    @PostMapping("/outboundTaskSend")
//    @Transactional
//    public HashMap<String, Object> outboundTaskSend(@RequestBody List<CarryParam> params) {
//        HashMap<String, Object> map = new HashMap<>();
//        for (CarryParam param : params) {
//            if (Cools.isEmpty(param)) {
//                map.put("Code", "0");
//                map.put("Msg", "参数为空!");
//                return map;
//            } else if (Cools.isEmpty(param.getTaskNo())) {
//                map.put("Code", "0");
//                map.put("Msg", "任务号为空!");
//                return map;
//            } else if (Cools.isEmpty(param.getStereoscopicTaskType())) {
//                map.put("Code", "0");
//                map.put("Msg", "任务类型为空!");
//                return map;
//            }
//            String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo());
//            param.setStartPoint(fusion);
//            LocMast locMast = locMastService.selectByLocNo(param.getStartPoint());
//            if (Cools.isEmpty(locMast)) {
//                map.put("Code", "0");
//                map.put("Msg", "初始库位无法找到!");
//                return map;
//            }
//
//            HashMap<String, Object> r = new HashMap<>();
//
//            if (param.getStereoscopicTaskType() == 2) {
//                //出库任务创建
//                StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
//                        .eq("type_no", 2)
//                        .eq("crn_no", locMast.getCrnNo())
//                        .eq("stn_no", param.getTerminalNo()));
//                if (Cools.isEmpty(staDesc)) {
//                    map.put("Code", "0");
//                    map.put("Msg", "出库路径不存在!");
//                    return map;
//                }
//                r = openService.taskCreate(new TaskCreateParam(param, staDesc.getCrnNo()));
//                if (r.get("Code").equals("0")) {
//                    return r;
//                }
//            } else if (param.getStereoscopicTaskType() == 3) {
//                String fusion1 = Utils.Fusion(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo());
//                param.setTerminalNo(fusion1);
//                //移库任务创建
//                r = openService.taskCreate(new TaskCreateParam(param, locMast.getCrnNo()));
//                if (r.get("Code").equals("0")) {
//                    return r;
//                }
//            }
//            apiLogService.save("Wms任务下发接口"
//                    , request.getRemoteAddr() + request.getRequestURI()
//                    , ""
//                    , request.getRemoteAddr()
//                    , JSON.toJSONString(param)
//                    , r.toString()
//                    , true
//            );
//        }
//        map.put("Code", "1");
//        map.put("Msg", "ok");
//        return map;
//    }
    //AGV请求入库码头接口
//    @PostMapping("/targetWharfApply")
//    @AppAuth(memo = "AGV请求入库码头接口")
//    public R targetWharfApply(@RequestHeader String appkey,
//                              @RequestBody WMSAndAGVInterfaceParam param,
//                              HttpServletRequest request) throws IOException {
//        auth(appkey, param, request);
//
//        if (Cools.isEmpty(param)) {
//            return R.error("参数为空!");
//        } else if (Cools.isEmpty(param.getTaskNo())) {
//            return R.error("工作号为空!");
//        } else if (Cools.isEmpty(param.getContainerCode())) {
//            return R.error("托盘编码为空!");
//        } else if (Cools.isEmpty(param.getWharfSource())) {
//            return R.error("源码头为空!");
//        } else if (Cools.isEmpty(param.getFreeWharfs()) || param.getFreeWharfs().size() == 0) {
//            return R.error("空闲的入库码头(AGV)为空!");
//        }
//        R r = openService.AgvToWCSToWms(param);
//        apiLogService.save("AGV请求入库码头接口"
//                , request.getRemoteAddr() + request.getRequestURI()
//                , appkey
//                , request.getRemoteAddr()
//                , JSON.toJSONString(param)
//                , r.toString()
//                , true
//        );
//        return r;
//    }
//
//    //AGV请求动作接口
//    @PostMapping("/agvTaskRequest")
//    @AppAuth(memo = "AGV请求动作接口")
//    public R agvTaskRequest(@RequestHeader String appkey,
//                            @RequestBody WMSAndAGVInterfaceParam param,
//                            HttpServletRequest request) {
//        auth(appkey, param, request);
//        if (Cools.isEmpty(param)) {
//            return R.error("参数为空!");
//        } else if (Cools.isEmpty(param.getRequestType())) {
//            return R.error("请求类型为空!");
//        } else if (Cools.isEmpty(param.getWharfCode())) {
//            return R.error("码头编号为空!");
//        }
//
//        Map<String, Integer> map = new HashMap<>();
//        map.put("J-1102", 102);
//        map.put("J-1101", 101);
//        map.put("J-1103", 105);
//        map.put("J-1104", 106);
//        map.put("J-1105", 109);
//        map.put("J-1106", 110);
//        map.put("J-1107", 113);
//        map.put("J-1108", 114);
//        map.put("J-1109", 117);
//        map.put("J-1110", 118);
//        map.put("J-1111", 121);
//        map.put("J-1112", 122);
//        map.put("H-1102", 300);
//        map.put("H-1101", 305);
//        map.put("G-1102", 400);
//        map.put("G-1101", 405);
////        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
////                .eq("stn_desc", param.getWharfCode()));
////
////        if (Cools.isEmpty(staDesc)){
////            return R.error("程序报错,未查询到站点");
////        }
//        if (Cools.isEmpty(map.get(param.getWharfCode()))) {
//            return R.error("未查询到站点");
//        }
//        BasDevp basDevp = basDevpService.selectById(map.get(param.getWharfCode()));
//        if (basDevp.getAutoing().equals("Y") && (basDevp.getInEnable().equals("Y") || basDevp.getOutEnable().equals("Y"))) {
//            apiLogService.save("AGV请求入库码头接口"
//                    , request.getRemoteAddr() + request.getRequestURI()
//                    , appkey
//                    , request.getRemoteAddr()
//                    , JSON.toJSONString(param)
//                    , R.ok().toString()
//                    , true
//            );
//            return R.ok("可入");
//        } else {
//            apiLogService.save("AGV请求入库码头接口"
//                    , request.getRemoteAddr() + request.getRequestURI()
//                    , appkey
//                    , request.getRemoteAddr()
//                    , JSON.toJSONString(param)
//                    , R.error("站点状态不可入").toString()
//                    , true
//            );
//            return R.error("站点状态不可入");
//        }
//
//
//    }
//    @PostMapping("/toAgvTaskOver")
//    @AppAuth(memo = "agv任务完成接口")
//    public R getAgvTaskOver(@RequestHeader String appkey,
//                            @RequestBody TaskOverParam param,
//                            HttpServletRequest request) {
//        auth(appkey, param, request);
//        if (Cools.isEmpty(param)) {
//            return R.parse(BaseRes.PARAM);
//        }
//        if (Cools.isEmpty(param.getStartPoint())) {
//            return R.error("码头[wharfCode]不能为空");
//        }
//        if (Cools.isEmpty(param.getStatus())) {
//            return R.error("完成标记[status]不能为空");
//        }
//        openService.getAgvTaskOver(param);
//        return R.ok();
//    }
}
src/main/java/com/zy/asrs/domain/param/ApplyInDevpDto.java
New file
@@ -0,0 +1,28 @@
package com.zy.asrs.domain.param;
import lombok.Data;
/**
 * @author pang.jiabao
 * @description é€šçŸ¥è¾“送线流动
 * @createDate 2025/5/15 14:27
 */
@Data
public class ApplyInDevpDto {
    /**
     * æºç«™ç‚¹
     */
    private Integer sourceSite;
    /**
     * ç›®æ ‡ç«™ç‚¹
     */
    private Integer targetSite;
    /**
     * 0:1.6, 1:1.8, 2:2.4
     */
    private Integer flag;
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,11 +1,9 @@
package com.zy.asrs.service;
import com.core.common.R;
import com.zy.asrs.domain.param.ApplyInDevpDto;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import java.io.IOException;
import java.util.HashMap;
public interface OpenService {
@@ -13,11 +11,8 @@
    //创建任务
    HashMap<String, Object> taskCreate(TaskCreateParam param);
    R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException;
    void getAgvTaskOver(TaskOverParam param);
    R getAgvPickAndPlaceV1(TaskOverParam param);
    R getAgvPickAndPlaceV2(TaskOverParam param);
    /**
     * å¤–置输送线wms通知输送线流动
     */
    R applyInDevp(ApplyInDevpDto param);
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -625,6 +625,7 @@
                        //更新库位状态
                        LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
                        locMast.setLocSts("F");//F.在库
                        locMast.setStatus("1");
                        locMast.setBarcode(taskWrk.getBarcode());//托盘码
                        locMast.setModiTime(new Date());
                        locMast.setModiUser(9999L);
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,25 +1,22 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
import com.zy.asrs.entity.*;
import com.zy.asrs.domain.param.ApplyInDevpDto;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.param.TaskOverParam;
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
@@ -27,22 +24,12 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.*;
import java.util.Date;
import java.util.HashMap;
@Service
public class OpenServiceImpl implements OpenService {
    public ArrayList<String> wharfCode1 = new ArrayList<String>() {{
        add("J-1101");
        add("J-1103");
        add("J-1105");
        add("J-1107");
        add("J-1109");
        add("J-1111");
        add("H-1101");
        add("G-1101");
    }};
    @Autowired
    private TaskWrkService taskWrkService;
    @Autowired
@@ -73,7 +60,17 @@
        Date now = new Date();
        taskWrk = new TaskWrk();
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getStartPoint()));
        int workNo1 = commonService.getWorkNo(WorkNoType.PAKOUT.type);//获取入库工作号
        if (locMast == null) {
            map.put("Code", "0");
            map.put("Msg", param.getStartPoint() + "库位号有误");
            return map;
        }
        int workNoType = WorkNoType.PAKOUT.type;
        // 2,3号堆垛机出库,需要通过条码区分大小托盘,16开头小托盘,18开头大托盘,任务号3001-6000为小托盘
        if (param.getIoType() == 2 && (locMast.getCrnNo() == 3 || locMast.getCrnNo() == 2) && locMast.getBarcode().startsWith("16")){
            workNoType = WorkNoType.PICK.type;
        }
        int workNo1 = commonService.getWorkNo(workNoType);//获取入库工作号
        taskWrk.setTaskNo(param.getTaskNo());//任务号
        taskWrk.setWrkNo(workNo1);
        taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
@@ -121,251 +118,27 @@
    }
    @Override
    public R AgvToWCSToWms(WMSAndAGVInterfaceParam param) throws IOException {
        ToWmsDTO toWmsDTO = new ToWmsDTO();
        Map<String, Object> map = new HashMap<>();
        map.put("x-api-key", "7a15b5db-29b6-552c-8cff-0cfec3756da2");
        List<Integer> list = new ArrayList<>();
        if (param.getWharfSource().contains("J")) {
            list = getInEnableRoadway();
    public R applyInDevp(ApplyInDevpDto param) {
        Integer sourceSite = param.getSourceSite();
        BasDevp basDevp = basDevpService.selectById(sourceSite);
        if (basDevp == null) {
            return R.error("源站点不存在:" + param);
        }
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
        StaProtocol staProtocol = devpThread.getStation().get(sourceSite);
        if (staProtocol == null) {
            return R.parse(sourceSite + "线程为空!");
        } else {
            list = getInEnableRoadway2();
            staProtocol = staProtocol.clone();
        }
        //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
        toWmsDTO.setWarehouseId("1688469798893297665");
        toWmsDTO.setContainerCode(param.getContainerCode());
        toWmsDTO.setApplyType("TUNNEL");
        toWmsDTO.setWharfSource(null);
        toWmsDTO.setCanInboundTunnels(list);
        String response = null;
        try {
            response = new HttpHandler.Builder()
                    .setHeaders(map)
                    .setUri(wmsUrl)
                    .setPath("wcsManager/wcsInterface/inboundTaskApply")
                    .setJson(JSON.toJSONString(toWmsDTO))
                    .build()
                    .doPost();
        } catch (Exception e) {
            return R.error("wms连接失败" + e.getMessage());
        }
        JSONObject jsonObject = JSON.parseObject(response);
        apiLogService.save("wms请求入库码头接口"
                , wmsUrl + "wcsManager/wcsInterface/inboundTaskApply"
                , null
                , "127.0.0.1"
                , JSON.toJSONString(toWmsDTO)
                , response
                , true
        );
        if (jsonObject.getInteger("code").equals(200)) {
            //解析
            List<WMSAndAGVInterfaceParam> params = new ArrayList<>();
            params.add(param);
            WMSAndAGVInterfaceParam data = JSONObject.parseObject(jsonObject.get("data").toString(), WMSAndAGVInterfaceParam.class);
            String msg = null;
            try {
                taskCreate(new TaskCreateParam(data));
            } catch (Exception e) {
                msg = e.getMessage();
            }
            if (msg != null) {
                return R.error(msg);
            }
            Map<String, String> map1 = new HashMap<>();
            StaDesc staDesc = new StaDesc();
            if (param.getWharfSource().contains("J")) {
                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("crn_no", data.getTaskTunnel())
                        .eq("type_no", 1)
                        .lt("stn_no", 200));
            } else if (param.getWharfSource().contains("H")) {
                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("crn_no", data.getTaskTunnel())
                        .eq("type_no", 1)
                        .lt("stn_no", 400)
                        .gt("stn_no", 200));
            } else {
                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("crn_no", data.getTaskTunnel())
                        .eq("type_no", 1)
                        .lt("stn_no", 500)
                        .ge("stn_no", 400));
            }
            map1.put("taskTunnel", staDesc.getStnDesc());
            //map1.put("taskTunnel", "J-1104");
            return R.ok(map1);
        }
        return R.error((String) jsonObject.get("msg"));
    }
    @Override
    public void getAgvTaskOver(TaskOverParam param) {
        // æ ¹æ®è¾“送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                    .eq("stn_desc", param.getStartPoint()));
            if (Cools.isEmpty(staDesc)) {
                throw new RuntimeException("未查询到站点信息");
            }
            // èŽ·å–å…¥åº“ç«™ä¿¡æ¯
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
            StaProtocol staProtocol = devpThread.getStation().get(staDesc.getStnNo());
            if (staProtocol == null) {
                continue;
            } else {
                staProtocol = staProtocol.clone();
            }
            Short workNo = staProtocol.getWorkNo();
            if (wharfCode1.contains(param.getStartPoint())) {
                if (!staProtocol.isLoading() && !staProtocol.isCar() && staProtocol.getWorkNo() > 0) {
                    //AGV出库完成以后
                    staProtocol.setWorkNo((short) 0);
                    staProtocol.setStaNo((short) 0);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                    if (result) {
                    } else {
                        throw new RuntimeException("agv返回完成后,命令下发失败");
                    }
                }
            } else {
                for (DevpSlave.Sta inSta : devp.getInSta()) {
                    if (inSta.getBackSta().equals(staDesc.getStnNo())) {
                        if (staProtocol.isLoading() && !staProtocol.isCar() && workNo == 0) {
                            //AGV入库完成以后
                            staProtocol.setWorkNo((short) 9999);
                            staProtocol.setStaNo(inSta.getStaNo().shortValue());
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                            if (result) {
                            } else {
                                throw new RuntimeException("agv返回完成后,命令下发失败");
                            }
                        }
                    }
                }
            }
        }
    }
    @Override
    public R getAgvPickAndPlaceV1(TaskOverParam param) {
        BasDevp basDevp = basDevpService.selectById(param.getStartPoint());
        if (Cools.isEmpty(basDevp)) {
            return R.error("站点号有误" + param.getStartPoint());
        }
        if (Cools.isEmpty(param.getHeight())) {
            return R.error("高度不能为空" + param.getStartPoint());
        }
        if (param.getType() == 0 && basDevp.getAgvStartPick() == 1) {
            basDevp.setInreq2(param.getHeight().toString());
            return R.ok();
        } else if (param.getType() == 1 && basDevp.getAgvStartPlace() == 1) {
            return R.ok();
        staProtocol.setWorkNo((short) commonService.getWorkNo(param.getFlag()));
        staProtocol.setStaNo(param.getTargetSite().shortValue());
        basDevpService.updateById(basDevp);
        boolean result = MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol));
        if (result) {
            return R.ok("成功");
        } else {
            return R.error("不允许");
            return R.error("下发命令失败:" + param);
        }
    }
    @Override
    public R getAgvPickAndPlaceV2(TaskOverParam param) {
        BasDevp basDevp = basDevpService.selectById(param.getStartPoint());
        if (Cools.isEmpty(basDevp)) {
            return R.error("站点号有误" + param.getStartPoint());
        }
        if (param.getType() == 0) {
            basDevp.setAgvTargetPick(1);
            basDevpService.updateById(basDevp);
            return R.ok();
        } else if (param.getType() == 1) {
            basDevp.setAgvTargetPlace(1);
            basDevpService.updateById(basDevp);
            return R.ok();
        } else {
            return R.error("请求类型异常" + param.getType());
        }
    }
    public List<Integer> getInEnableRoadway() {
        int[] roadway = null;
        List<Integer> list = new ArrayList<>();
        Map<Integer, Integer> map = new HashMap<>();
        map.put(103, 1);
        map.put(107, 2);
        map.put(111, 3);
        map.put(115, 4);
        map.put(119, 5);
        map.put(123, 6);
        //put(301,7);
        // æ ¹æ®è¾“送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // éåŽ†å…¥åº“å£
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // èŽ·å–å…¥åº“ç«™ä¿¡æ¯
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                Short workNo = staProtocol.getWorkNo();
                if (workNo == 0 && !staProtocol.isLoading()) {
                    if (Cools.isEmpty(map.get(inSta.getStaNo()))) {
                        continue;
                    }
                    list.add(map.get(inSta.getStaNo()));
                }
            }
        }
        //roadway = list.stream().mapToInt(Integer::intValue).toArray();
        return list;
    }
    public List<Integer> getInEnableRoadway2() {
        int[] roadway = null;
        List<Integer> list = new ArrayList<>();
        Map<Integer, Integer> map = new HashMap<>();
        map.put(205, 1);
        map.put(211, 2);
        map.put(217, 3);
        map.put(223, 4);
        map.put(229, 5);
        map.put(235, 6);
        //put(301,7);
        // æ ¹æ®è¾“送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // éåŽ†å…¥åº“å£
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // èŽ·å–å…¥åº“ç«™ä¿¡æ¯
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                Short workNo = staProtocol.getWorkNo();
                if (workNo == 0 && !staProtocol.isLoading()) {
                    if (Cools.isEmpty(map.get(inSta.getStaNo()))) {
                        continue;
                    }
                    list.add(map.get(inSta.getStaNo()));
                }
            }
        }
        //roadway = list.stream().mapToInt(Integer::intValue).toArray();
        return list;
    }
}
src/main/java/com/zy/asrs/task/TaskReportScheduler.java
@@ -13,15 +13,19 @@
import com.zy.asrs.entity.TaskWrk;
import com.zy.asrs.entity.TaskWrkReport;
import com.zy.asrs.entity.TaskWrkReportLog;
import com.zy.asrs.entity.param.TaskCreateParam;
import com.zy.asrs.entity.wms.WmsFeedback;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.TaskWrkReportLogService;
import com.zy.asrs.service.TaskWrkReportService;
import com.zy.asrs.service.*;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.Synchro;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -30,6 +34,7 @@
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
/**
@@ -55,6 +60,9 @@
    @Value("${wms.taskExecCallback}")
    private String TaskExecCallback;
    @Value("${wms.completeDevpTask}")
    private String completeDevpTask;
    @Resource
    private TaskWrkMapper taskWrkMapper;
@@ -64,6 +72,13 @@
    @Resource
    private CommonService commonService;
    @Resource
    private OpenService openService;
    // ç›‘听外置输送线
    public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
        add(301);add(302);add(303);add(304);add(305);add(306);add(307);add(308);
    }};
    @Scheduled(cron = "0/5 * * * * ? ")
    public synchronized void execute() throws IOException {
@@ -116,6 +131,7 @@
    }
    // ç«‹ä½“库跑库程序,生产勿用
//    @Scheduled(cron = "0/5 * * * * ? ")
    public synchronized void autoMoveLoc() {
        int flag = 1; // 1.跑23号堆垛机前7列,1号堆垛机1,9层 2.跑23号堆垛机后8-12列,1号堆垛机2-8层
@@ -126,15 +142,31 @@
                // èŽ·å–å †åž›æœºå··é“åœ¨åº“åº“ä½
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "F").eq("crn_no", i));
                if (locMast != null) {
                    // 50次出一次库
                    int count1 = locMastService.selectCount(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", 1));
                    if (count1 % 25 == 0) {
                        TaskCreateParam taskCreateParam = new TaskCreateParam();
                        taskCreateParam.setTaskNo(locMast.getLocNo()+"0");
                        taskCreateParam.setStartPoint(locMast.getLocNo());
                        taskCreateParam.setIoType(2);
                        taskCreateParam.setTaskPriority(11);
                        taskCreateParam.setBarcode(locMast.getBarcode());
                        taskCreateParam.setTargetPoint(i == 1 ? "114" : i == 2 ? "111" : "105");
                        openService.taskCreate(taskCreateParam);
                        return;
                    }
                    // èŽ·å–ä¸€ä¸ªç§»åŠ¨çš„ç›®æ ‡åº“ä½
                    LocMast locMast1;
                    if (flag == 1) {
                        if (i == 1) {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").in("lev1",1,9));
                        } else {
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1"));
                        } else if(i==2) {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").le("bay1",7));
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").gt("bay1",7));
                        }else {
                            locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("status", "0")
                                    .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1").gt("bay1",7));
                        }
                    } else {
@@ -156,6 +188,7 @@
                        taskWrk.setWrkNo(commonService.getWorkNo(WorkNoType.PAKIN.type));
                        taskWrk.setStatus(TaskStatusType.RECEIVE.id);//任务状态:接收
                        taskWrk.setCreateTime(now);
                        taskWrk.setAssignTime(now);
                        taskWrk.setIoType(3);//任务类型
                        taskWrk.setIoPri(11);//优先级
                        taskWrk.setBarcode(locMast.getBarcode());//条码
@@ -172,6 +205,62 @@
        }
    }
    // ç›‘听外置输送线,有任务号和可出信号,上报成功清除任务号目标站
    @Scheduled(cron = "0/3 * * * * ? ")
    public synchronized void completeDevpTask() {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
        if (devpThread != null) {
            for(Integer site : staNos) {
                StaProtocol staProtocol = devpThread.getStation().get(site);
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isOutEnable() && staProtocol.getWorkNo() != 0 && staProtocol.isAutoing() && staProtocol.isLoading()) {
                    String response = "";
                    boolean bool = false;
                    JSONObject request = new JSONObject();
                    request.put("site",site);
                    try {
                        log.info("外置输送线流动到位上报wms={}", site);
                        response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath(completeDevpTask)
                                .setJson(request.toJSONString())
                                .build()
                                .doPost();
                        if (!Cools.isEmpty(response)) {
                            JSONObject jsonObject = JSON.parseObject(response);
                            if (Integer.parseInt(String.valueOf(jsonObject.get("code"))) == 200) {
                                bool = true;
                                staProtocol.setWorkNo((short) 0);
                                staProtocol.setStaNo((short) 0);
                                boolean result = MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol));
                                if (result) {
                                    log.info("外置输送线流动到位上报wms,清除输送线站点{}命令下发成功!",site);
                                } else {
                                    log.error("外置输送线流动到位上报wms,清除输送线站点{}命令下发失败!" ,site);
                                }
                            }
                        }
                    } catch (Exception e) {
                        log.error("外置输送线流动到位上报wms异常{},返回值={}", request, response);
                    } finally {
                        apiLogService.save("外置输送线流动到位上报wms"
                                , wmsUrl + completeDevpTask
                                , null
                                , "127.0.0.1"
                                , request.toJSONString()
                                , response
                                , bool
                        );
                    }
                }
            }
        }
    }
    private WmsFeedback getWmsFeedback(TaskWrkReport taskWrk) {
        WmsFeedback feedback = new WmsFeedback();
        feedback.setBarcode(taskWrk.getBarcode());
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -41,13 +41,19 @@
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);add(109);add(110);
        add(111);add(112);add(113);add(114);add(115);add(116);
        add(201);add(202);add(203);add(205);add(206);add(207);add(210);add(211);add(212);
        add(111);add(112);add(113);add(114);add(115);add(116); // ä¾§é¢ä»Ž index 16开始 é•¿åº¦12
        add(201);add(202);add(203);add(204);add(205);add(206);add(207);add(208);add(209);add(210);add(211);add(212);
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(301);add(302);add(303);add(304);add(305);add(306);add(307);add(308);
    }};
    // ä¾§é¢ä¸‰ä¸ªæ¡ç æ‰«æç«™
    public static final ArrayList<Integer> barcodeSite = new ArrayList<Integer>() {{
        add(202);add(206);add(211);
    }};
    /**
     * å…¥å‡ºåº“模式
     * 0:未知
@@ -180,10 +186,10 @@
        ArrayList<Integer> staNos = getStaNo();
        int staNoSize = staNos.size();
        // è¯»è´§ä½ä¿¡æ¯åé¦ˆ
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 8));
        // è¯»æ­£é¢è´§ä½ä¿¡æ¯åé¦ˆ
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (16 * 8));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
            for (int i = 0; i < 16; i++) {
                Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
@@ -211,68 +217,160 @@
            }
        }
        if (slave.getId() == 1) {
            //Thread.sleep(200);
            // è¯»å–条码
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1404", (short) (staNoSize*8));
            if (result2.IsSuccess) {
                for (int i =0; i <staNoSize; i++) {
                    int barcodeId = 0;
                    switch (i){
                        case 1:barcodeId=1;break;
                        case 4:barcodeId=2;break;
                        case 7:barcodeId=3;break;
                        case 10:barcodeId=4;break;
                        case 13:barcodeId=5;break;
                        default:
                    }
                    if (barcodeId != 0) {
                        String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 6, "UTF-8");
                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
                        if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                            barcodeThread.setBarcode(barcode);
                        }
                    }
        // è¯»ä¾§é¢è´§ä½ä¿¡æ¯åé¦ˆ
        OperateResultExOne<byte[]> resultCm = siemensS7Net.Read("DB101.800", (short) (12 * 8));
        if (resultCm.IsSuccess) {
            for (int i = 16; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                StaProtocol staProtocol = station.get(siteId);
                if (null == staProtocol) {
                    staProtocol = new StaProtocol();
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(resultCm.Content, (i-16) * 8));     // å·¥ä½œå·
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(resultCm.Content, (i-16) * 8 + 4));   // ç›®æ ‡ç«™
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultCm.Content, (i-16) * 8 + 6, 2);
                staProtocol.setAutoing(status[0]);  // è‡ªåЍ
                staProtocol.setLoading(status[1]);  // æœ‰ç‰©
                staProtocol.setInEnable(status[2]); // å¯å…¥
                staProtocol.setOutEnable(status[3]);// å¯å‡º
                staProtocol.setEmptyMk(status[4]);  // ç©ºæ¿ä¿¡å·
                staProtocol.setFullPlt(status[5]);  // æ»¡æ‰˜ç›˜
                staProtocol.setHigh(status[6]);     // é«˜åº“位
                staProtocol.setLow(status[7]);      // ä½Žåº“位
                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
                    staProtocol.setPakMk(true);
                }
            }
            // è¯»å–外形检测
            OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.936", (short) (staNoSize * 8));
            if (resultErr1.IsSuccess) {
                for (int i = 0; i < staNoSize; i++) {
                    Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                    StaProtocol staProtocol = station.get(siteId);
                    boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, i * 2, 1);
                    staProtocol.setFrontErr(status1[0]);
                    staProtocol.setBackErr(status1[1]);
                    staProtocol.setHighErr(status1[2]);
                    staProtocol.setLeftErr(status1[3]);
                    staProtocol.setRightErr(status1[4]);
                    staProtocol.setWeightErr(status1[5]);
                    staProtocol.setBarcodeErr(status1[6]);
                }
            }
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (staNoSize * 4));
            if (resultErr.IsSuccess) {
                for (int i = 0; i < staNoSize; i++) {
                    Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1);
                    StaProtocol staProtocol = station.get(siteId);
                    staProtocol.setBreakerErr(status[0]);
                    staProtocol.setInfraredErr(status[1]);
                    staProtocol.setOutTimeErr(status[2]);
                    staProtocol.setSeizeSeatErr(status[3]);
                    staProtocol.setWrkYgoodsN(status[4]);
                    staProtocol.setInverterErr(status[5]);
                    staProtocol.setContactErr(status[6]);
                    staProtocol.setUpcontactErr(status[7]);
                }
            }
        }
        // è¯»å–正面条码
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1404", (short) (16 * 8));
        if (result2.IsSuccess) {
            for (int i = 0; i < 16; i++) {
                int barcodeId = 0;
                switch (i) {
                    case 1:
                        barcodeId = 1;
                        break;
                    case 4:
                        barcodeId = 2;
                        break;
                    case 7:
                        barcodeId = 3;
                        break;
                    case 10:
                        barcodeId = 4;
                        break;
                    case 13:
                        barcodeId = 5;
                        break;
                    default:
                }
                if (barcodeId != 0) {
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 6, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
                    if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                        barcodeThread.setBarcode(barcode);
                    }
                }
            }
        }
        // è¯»å–侧面条码
        OperateResultExOne<byte[]> resultCM2 = siemensS7Net.Read("DB101.2574", (short) (3 * 4 * 6));
        if (resultCM2.IsSuccess) {
            for (int i= 8; i >= 6; i --) {
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i);
                List<String> barcodes = new ArrayList<>();
                for(int j = 0; j < 4; j ++) {
                    String barcode1 = siemensS7Net.getByteTransform().TransString(resultCM2.Content, (8-i) * 24 + j *6, 6, "UTF-8");
                    if (!Cools.isEmpty(barcode1)&&!barcode1.equals("000000")&& !barcode1.equals("NoRead")) {
                        barcodes.add(barcode1);
                    }
                }
                String barcode = String.join("#",barcodes);
                if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                    barcodeThread.setBarcode(barcode);
                }
            }
        }
        // è¯»å–正面外形检测
        OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.936", (short) (16 * 8));
        if (resultErr1.IsSuccess) {
            for (int i = 0; i < 16; i++) {
                Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                StaProtocol staProtocol = station.get(siteId);
                boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, i * 2, 1);
                staProtocol.setFrontErr(status1[0]);
                staProtocol.setBackErr(status1[1]);
                staProtocol.setHighErr(status1[2]);
                staProtocol.setLeftErr(status1[3]);
                staProtocol.setRightErr(status1[4]);
                staProtocol.setWeightErr(status1[5]);
                staProtocol.setBarcodeErr(status1[6]);
            }
        }
        // è¯»å–侧面外形检测
        OperateResultExOne<byte[]> resultErrCM1 = siemensS7Net.Read("DB101.1336", (short) (12 * 8));
        if (resultErrCM1.IsSuccess) {
            for (int i = 16; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                StaProtocol staProtocol = station.get(siteId);
                boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErrCM1.Content, (i-16) * 2, 1);
                staProtocol.setFrontErr(status1[0]);
                staProtocol.setBackErr(status1[1]);
                staProtocol.setHighErr(status1[2]);
                staProtocol.setLeftErr(status1[3]);
                staProtocol.setRightErr(status1[4]);
                staProtocol.setWeightErr(status1[5]);
                staProtocol.setBarcodeErr(status1[6]);
            }
        }
        // è¯»æ­£é¢æ•…障反馈
        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (16 * 4));
        if (resultErr.IsSuccess) {
            for (int i = 0; i < 16; i++) {
                Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1);
                StaProtocol staProtocol = station.get(siteId);
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
                staProtocol.setSeizeSeatErr(status[3]);
                staProtocol.setWrkYgoodsN(status[4]);
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
            }
        }
        // è¯»ä¾§é¢æ•…障反馈
        OperateResultExOne<byte[]> resultErrCM = siemensS7Net.Read("DB101.2540.0", (short) (12 * 4));
        if (resultErrCM.IsSuccess) {
            for (int i = 16; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // ç«™ç‚¹ç¼–号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErrCM.Content, (i-16) * 4, 1);
                StaProtocol staProtocol = station.get(siteId);
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
                staProtocol.setSeizeSeatErr(status[3]);
                staProtocol.setWrkYgoodsN(status[4]);
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
            }
        }
        if (result.IsSuccess) {
@@ -314,6 +412,17 @@
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        // ä»»åŠ¡å·åœ°å€
        String workNoAddress;
        // ç›®æ ‡ç«™åœ°å€
        String staNoAddress;
        if (index < 16) {
            workNoAddress = "DB100." + index * 4;
            staNoAddress = "DB100." + (index * 4 + 2);
        } else {
            workNoAddress = "DB100." + (400 + (index-16) * 4);
            staNoAddress = "DB100." + (400 + (index-16) * 4 + 2);
        }
        OperateResult writeResult;
        //任务下发次数
@@ -321,8 +430,8 @@
        //任务下发成功标识
        boolean writeFlag = false;
        while (writeCount < 5) {
            OperateResult writeResult1 = siemensS7Net.Write("DB100." + index * 4, staProtocol.getWorkNo());    // å·¥ä½œå·
            OperateResult writeResult2 = siemensS7Net.Write("DB100." + (index * 4 + 2), staProtocol.getStaNo());    // ç›®æ ‡ç«™
            OperateResult writeResult1 = siemensS7Net.Write(workNoAddress, staProtocol.getWorkNo());    // å·¥ä½œå·
            OperateResult writeResult2 = siemensS7Net.Write(staNoAddress, staProtocol.getStaNo());    // ç›®æ ‡ç«™
            if (writeResult1.IsSuccess && writeResult2.IsSuccess) {
                Thread.sleep(200);
                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 4, (short) 2);
src/main/resources/application.yml
@@ -62,6 +62,8 @@
  movePath: api/InterFace/get_InterFace_TestStorage
  # ä»»åŠ¡æ‰§è¡ŒçŠ¶æ€ä¸ŠæŠ¥
  executionStatusReport: /executionStatusReport
  # å¤–置输送线流动到位上报wms
  completeDevpTask: /completeDevpTask
  # æµ‹è¯•环境
#  url: http://127.0.0.1:8080/ghlnwms
#  taskStatusFeedbackPath: api/StereoscopicCallBack/TaskExecCallback
@@ -69,6 +71,7 @@
#  taskExecCallback: /open/asrs/taskExecCallback
#  inboundTaskApplyPath: /open/asrs/testInLoc
#  movePath: api/InterFace/get_InterFace_TestStorage
#  completeDevpTask: /completeDevpTask
  code: code
src/main/resources/license.lic
Binary files differ
src/main/resources/wcsºÍwms½Ó¿Ú(2).docx
Binary files differ
src/main/webapp/static/wms/js/realtimeWatch/pipeline.js
@@ -149,10 +149,10 @@
                form.on('submit(editSubmit)', function (data) {
                    var loadIndex = layer.load(2);
                    $.ajax({
                        url: baseUrl+"/site//detl/update",
                        url: baseUrl+"/site/detl/update",
                        headers: {'token': localStorage.getItem('token')},
                        data: {
                            siteId: $('#devNo').val(),
                            devNo: $('#devNo').val(),
                            workNo: $('#workNo').val(),
                            staNo:  $('#staNo').val(),
                            pakMk: $('#pakMk').val()