#
zjj
13 小时以前 15b5002fd412a5d33be5d5c6deb63b3d02c77c41
src/main/java/com/zy/core/thread/impl/NyLiftThread.java
@@ -3,13 +3,10 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasLift;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.asrs.entity.DeviceDataLog;
import com.zy.asrs.service.BasLiftService;
import com.zy.asrs.service.DeviceDataLogService;
import com.zy.asrs.utils.Utils;
import com.zy.common.ExecuteSupport;
@@ -45,10 +42,11 @@
    private DeviceConfig device;
    private LiftProtocol liftProtocol;
    private RedisUtil redisUtil;
    LiftPointModel liftPointModel;
    private LiftPointModel liftPointModel;
    private List<LiftStaProtocol> liftStaProtocols = new ArrayList<>();
    private List<DeviceMsgModel> readResultList = new ArrayList<>();
    private List<DeviceMsgModel> resultList = new ArrayList<>();
    private String realtimeOriginData = "";
    public NyLiftThread(DeviceConfig device, LiftPointModel liftPointModel, List<LiftStation> stationList, RedisUtil redisUtil) {
        this.device = device;
@@ -57,7 +55,7 @@
        //初始化站点
        for (LiftStation station : stationList) {
            LiftStaProtocol liftStaProtocol = new LiftStaProtocol();
            liftStaProtocol.setStaNo(station.getStaNo());//站点号
            liftStaProtocol.setSiteId(station.getSiteId());//站点号
            liftStaProtocol.setLev(station.getLev());//站点楼层
            String locNo = Utils.getLocNo(station.getRow(), station.getBay(), station.getLev());
            liftStaProtocol.setLocNo(locNo);//站点库位号
@@ -193,26 +191,47 @@
            //************补充扩展字段*************
            InnerLiftExtend liftExtend = (InnerLiftExtend) liftProtocol.getExtend();
            liftProtocol.setExtend(liftExtend);
            liftExtend.setFrontOverrun(data.getBoolean("frontOverrun"));
            liftExtend.setBackOverrun(data.getBoolean("backOverrun"));
            liftExtend.setLeftOverrun(data.getBoolean("leftOverrun"));
            liftExtend.setRightOverrun(data.getBoolean("rightOverrun"));
            liftExtend.setOverHeight(data.getBoolean("overHeight"));
            liftExtend.setOverWeight(data.getBoolean("overWeight"));
            JSONObject extend = data.getJSONObject("extend");
            liftExtend.setFrontOverrun(extend.getInteger("frontOverrun") == 1);
            liftExtend.setBackOverrun(extend.getInteger("backOverrun") == 1);
            liftExtend.setLeftOverrun(extend.getInteger("leftOverrun") == 1);
            liftExtend.setRightOverrun(extend.getInteger("rightOverrun") == 1);
            liftExtend.setOverHeight(extend.getInteger("overHeight") == 1);
            liftExtend.setOverWeight(extend.getInteger("overWeight") == 1);
            liftExtend.setPlcTaskNoComplete(extend.getInteger("plcTaskNoComplete"));
            JSONArray trayList = data.getJSONArray("trayList");
            for (int i = 0; i < trayList.size(); i++) {
                int hasTray = (int) trayList.get(i);
                LiftStaProtocol liftStaProtocol = liftStaProtocols.get(i);
                liftStaProtocol.setHasTray(hasTray == 1);
            if (!liftExtend.getPlcTaskNoComplete().equals(liftProtocol.getPlcTaskNo())) {
                //设备状态
                liftProtocol.setDeviceStatus(LiftDeviceStatusType.BUSY.id);
            }
            JSONArray carList = data.getJSONArray("carList");
            for (int i = 0; i < carList.size(); i++) {
                int hasCar = (int) carList.get(i);
                LiftStaProtocol liftStaProtocol = liftStaProtocols.get(i);
                liftStaProtocol.setHasCar(hasCar == 1);
            //读取站点
            JSONArray stationList = data.getJSONArray("stationList");
            if (stationList != null) {
                for (int i = 0; i < stationList.size(); i++) {
                    JSONObject staObj = stationList.getJSONObject(i);
                    LiftStaProtocol liftStaProtocol = null;
                    for (LiftStaProtocol staProtocol : liftStaProtocols) {
                        if(staProtocol.getSiteId().equals(staObj.getInteger("siteId"))){
                            liftStaProtocol = staProtocol;
                            break;
                        }
                    }
                    if(liftStaProtocol == null){
                        continue;
                    }
                    liftStaProtocol.setModel(staObj.getInteger("model") == 1);
                    liftStaProtocol.setBusy(staObj.getInteger("busy") == 1);
                    liftStaProtocol.setHasTray(staObj.getInteger("hasTray") == 1);
                    liftStaProtocol.setDeviceError(staObj.getInteger("deviceError") == 1);
                    liftStaProtocol.setTaskNo(staObj.getInteger("taskNo"));
                    liftStaProtocol.setBarcode(staObj.getString("barcode"));
                }
            }
            this.realtimeOriginData = JSON.toJSONString(data);
            if (System.currentTimeMillis() - liftProtocol.getDeviceDataLog() > 1000 * 5) {
                //采集时间超过5s,保存一次数据记录
@@ -230,27 +249,7 @@
                liftProtocol.setDeviceDataLog(System.currentTimeMillis());
            }
            //将提升机状态保存至数据库
            BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
            BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>()
                    .eq("lift_no", device.getDeviceNo()));
            if (basLift == null) {
                basLift = new BasLift();
                //提升机号
                basLift.setLiftNo(liftProtocol.getLiftNo());
                basLift.setStatus(1);
                basLiftService.insert(basLift);
            }
            //任务号
            basLift.setWrkNo(liftProtocol.getTaskNo());
            //修改时间
            basLift.setUpdateTime(new Date());
            //设备状态
            basLift.setDeviceStatus(JSON.toJSONString(liftProtocol));
            if (basLiftService.updateById(basLift)) {
                OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), liftProtocol.getLiftNo()));
            }
            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), liftProtocol.getLiftNo()));
        } catch (Exception e) {
            e.printStackTrace();
            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getDeviceNo(), device.getIp(), device.getPort()));
@@ -381,32 +380,10 @@
    @Override
    public CommandResponse reset() {
        CommandResponse response = new CommandResponse(false);
        try {
            LiftCommand resetCommand = getResetCommand(9999);
            //发出请求
            String resultKey = requestCommand(resetCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(resultKey);
            if (result == null) {
                return response;//请求失败
            }
            if(!result.getString("result").equals("success")) {
                return response;//请求失败
            }
            this.liftProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
            this.setSyncTaskNo(0);
            this.setProtocolStatus(LiftProtocolStatusType.IDLE);
            response.setMessage(JSON.toJSONString(result));
            response.setResult(true);
            return response;
        } catch (Exception e) {
            e.printStackTrace();
            response.setMessage(e.getMessage());
            return response;
        }
        CommandResponse response = new CommandResponse(true);
        this.setSyncTaskNo(0);
        this.setProtocolStatus(LiftProtocolStatusType.IDLE);
        return response;
    }
    @Override
@@ -415,6 +392,7 @@
                || this.liftProtocol.getPlcTaskNo() == null
                || this.liftProtocol.getProtocolStatus() == null
                || this.liftProtocol.getModel() == null
                || this.liftProtocol.getDeviceStatus() == null
                || this.liftProtocol.getErrorCode() == null
                || this.liftProtocol.getExtend() == null
        ) {
@@ -427,6 +405,7 @@
//                && this.liftProtocol.getPlcTaskNo() == 0
                && this.liftProtocol.getTaskNo() == 0
                && this.liftProtocol.getModel() == 2
                && this.liftProtocol.getDeviceStatus() == LiftDeviceStatusType.IDLE.id
                && this.liftProtocol.getErrorCode() == 0
                && !extend.getFrontOverrun()
                && !extend.getBackOverrun()
@@ -454,6 +433,7 @@
        if (this.liftProtocol.getProtocolStatus() == null
                || this.liftProtocol.getModel() == null
                || this.liftProtocol.getDeviceStatus() == null
                || this.liftProtocol.getErrorCode() == null
                || this.liftProtocol.getExtend() == null
        ) {
@@ -464,6 +444,7 @@
        boolean res = this.liftProtocol.getProtocolStatus() == LiftProtocolStatusType.IDLE.id
                && this.liftProtocol.getModel() == 2
                && this.liftProtocol.getDeviceStatus() == LiftDeviceStatusType.IDLE.id
                && this.liftProtocol.getErrorCode() == 0
                && !extend.getFrontOverrun()
                && !extend.getBackOverrun()
@@ -483,7 +464,8 @@
    @Override
    public boolean setSyncTaskNo(Integer taskNo) {
        this.liftProtocol.setSyncTaskNo(taskNo);
        redisUtil.setSync(RedisKeyType.LIFT_FLAG.key + liftProtocol.getLiftNo(), taskNo);
        this.liftProtocol.setTaskNo(taskNo);
        return true;
    }
@@ -501,6 +483,11 @@
    }
    @Override
    public String getRealtimeOriginData() {
        return this.realtimeOriginData;
    }
    @Override
    public LiftCommand getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) {
        LiftCommand command = new LiftCommand();
        command.setLiftNo(device.getDeviceNo());
@@ -509,6 +496,10 @@
        command.setPick(pick);
        command.setPut(put);
        LiftStaProtocol pickSta = findSta(pick);
        LiftStaProtocol putSta = findSta(put);
        command.setPickLev(pickSta.getLev());
        command.setPutLev(putSta.getLev());
        return command;
    }
@@ -521,6 +512,10 @@
        command.setPick(pick);
        command.setPut(put);
        LiftStaProtocol pickSta = findSta(pick);
        LiftStaProtocol putSta = findSta(put);
        command.setPickLev(pickSta.getLev());
        command.setPutLev(putSta.getLev());
        return command;
    }
@@ -533,6 +528,10 @@
        command.setPick(pick);
        command.setPut(put);
        LiftStaProtocol pickSta = findSta(pick);
        LiftStaProtocol putSta = findSta(put);
        command.setPickLev(pickSta.getLev());
        command.setPutLev(putSta.getLev());
        return command;
    }
@@ -657,6 +656,15 @@
        }
    }
    private LiftStaProtocol findSta(Integer staNo) {
        for (LiftStaProtocol liftStaProtocol : this.liftStaProtocols) {
            if (liftStaProtocol.getSiteId().equals(staNo)) {
                return liftStaProtocol;
            }
        }
        return null;
    }
    /**
     * 扩展字段
     */
@@ -693,5 +701,8 @@
         */
        private Boolean overWeight;
        //PLC已完成任务号
        private Integer plcTaskNoComplete;
    }
}