pang.jiabao
2024-11-06 6548c75a24d8d0c23c8167980465831128abf579
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,6 +7,7 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.domain.param.ForwardAGVTaskParam;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
@@ -30,17 +31,17 @@
import com.zy.core.enums.DevpType.DevpStateType;
import com.zy.core.enums.DevpType.DevpTrayType;
import com.zy.core.enums.DevpType.DevpWorkType;
import com.zy.core.model.*;
import com.zy.core.model.CrnSlave;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.LedSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.CrnCommand;
import com.zy.core.model.command.LedCommand;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.LedThread;
import com.zy.core.thread.RgvThread;
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -49,8 +50,9 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -114,9 +116,7 @@
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // 获取条码扫描仪信息
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
                BarcodeThread barcodeThreadMat = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcodeMat());
                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
@@ -125,15 +125,6 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (barcodeThread == null) {
                    continue;
                }
                if (barcodeThreadMat == null) {
                    continue;
                }
                // 判断是否满足入库条件
                if (staProtocol.stateType == DevpStateType.AUTO //自动
                        && staProtocol.workType == DevpWorkType.BUSY //忙碌
@@ -155,7 +146,6 @@
                            }
                            continue;
                        }
                        barcodeThread.setBarcode("");
                        staProtocol.setWorkNo(wrkMast.getWrkNo());
                        staProtocol.setStaNo(RouteUtils.SouStaEnd(null,wrkMast.getSourceStaNo()));
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -196,7 +186,6 @@
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            barcodeThread.setBarcode("");
                            staProtocol.setWorkNo(dto.getWorkNo());
                            staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -212,12 +201,6 @@
                                throw new CoolException("更新plc站点信息失败");
                            }
                        }else {
                            staProtocol.setWorkNo(wrkNo);
                            wrkNo++;
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//
//                            if (ledThread != null) {
                                String errorMsg = jsonObject.getString("msg");
                                if (!Cools.isEmpty(errorMsg)) {
@@ -425,7 +408,7 @@
                    // 更新站点信息 且 下发plc命令
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo((short) 161);
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.error("输送线下发5:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
@@ -660,7 +643,7 @@
                        }
                        // 更新工作档状态为14失败
                        wrkMast.setWrkSts(14L);
                        wrkMast.setWrkSts(13L);
                        wrkMast.setCrnEndTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) != 0) {
                            // 复位堆垛机
@@ -2101,9 +2084,115 @@
//        News.infoNoLog(""+mark+" - 0"+" - outOfDevp执行完成");
    }
    public synchronized void forwardAGVInTasks() {
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
            for (DevpSlave.Sta agvSta : devp.getAgvOutSta()) {
                // 获取入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(agvSta.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (!(staProtocol.stateType == DevpStateType.AUTO)){
                    continue;
                }
                if (staProtocol.getWorkNo() == 0){
                    continue;
                }
                WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", staProtocol.getWorkNo()).eq("wrk_sts", 101));
                if(!Cools.isEmpty(wrkMast1)){
                    continue;
                }
                //查询状态为2的任务
                //查询状态为2的任务
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                        .eq("wrk_no", staProtocol.getWorkNo())
                        .in("io_type",101,110,103,104,107)
                        .eq("wrk_sts", 15));
                if (Cools.isEmpty(wrkMast)) {
                    log.error(agvSta.getStaNo()+"站,转发agv任务未找到对应任务,任务号:"+staProtocol.getWorkNo());
                    continue;
                }
                ForwardAGVTaskParam forwardAGVTaskParam = new ForwardAGVTaskParam();
                getAgvTaskParam(forwardAGVTaskParam,wrkMast,staProtocol.getSiteId());
                String request = forwardAGVHttpRequest(forwardAGVTaskParam, "10.0.100.110:8182", "/rcms/services/rest/hikRpcService/genAgvSchedulingTask");
                if ("SUCCESS".equals(request)) {
                    wrkMast.setWrkSts(14L);
                    boolean update = wrkMastService.updateById(wrkMast);
                    if (update){
                        log.info("入库转发AGV任务完成,任务号:"+wrkMast.getWrkNo());
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                    }
                }
            }
        }
    }
    private void getAgvTaskParam(ForwardAGVTaskParam agvTaskCreateParam,WrkMast param,Integer staNo){
        String sourceSite = "";
        if (staNo == 1040 || staNo == 1042) {
            sourceSite = "a";
        } else if (staNo == 2010 || staNo == 2012) {
            sourceSite = "b";
        } else if(staNo == 3010  || staNo ==3012) {
            sourceSite = "c";
        } else if(staNo == 2000 || staNo ==2002) {
            sourceSite = "d";
        }
        List<ForwardAGVTaskParam.PositionCodePaths> agvTaskParamList = Arrays.asList(
                //起始位
                new ForwardAGVTaskParam.PositionCodePaths(staNo.toString(),"05"),
                //目标位
                new ForwardAGVTaskParam.PositionCodePaths(sourceSite,"04")
        );
        Date date = new Date();
        DecimalFormat df = new DecimalFormat("0000");
        String wrkNo = "Crn"+df.format(param.getWrkNo())+date.getTime()/1000;
        agvTaskCreateParam.setReqCode(wrkNo);
        agvTaskCreateParam.setReqTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        agvTaskCreateParam.setTaskTyp("GT4");
        agvTaskCreateParam.setCtnrCode(param.getBarcode());
        agvTaskCreateParam.setPositionCodePath(agvTaskParamList);
        agvTaskCreateParam.setCtnrTyp("2");
        agvTaskCreateParam.setPriority("1");
        agvTaskCreateParam.setTaskCode(wrkNo);
    }
    private String forwardAGVHttpRequest(Object requestParam, String url, String path){
        String response = "";
        String success = "error";
        try {
            response = new HttpHandler.Builder()
                    .setUri(url)
//                    .setHttps(true)
                    .setPath(path)
                    .setJson(JSONObject.toJSONString(requestParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            String message = jsonObject.get("code").toString();
            if(("0").equals(message) || ("请求编号已存在").contains(message)){
                success = "SUCCESS";
            }else {
                success = message;
            }
            log.info("转发agv任务:请求体:"+JSONObject.toJSONString(requestParam)+",返回值:"+jsonObject);
        }catch (Exception e){
        }
        return success;
    }