ZengTao
2025-05-22 b4ff04d7dd22f0e48bf386cd422e885aef08fed7
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
@@ -3,6 +3,7 @@
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer;
import com.kangaroohy.milo.model.ReadWriteEntity;
import com.kangaroohy.milo.service.MiloService;
import com.mes.common.config.Const;
@@ -16,11 +17,14 @@
import com.mes.rawglassstation.service.RawGlassStorageStationService;
import com.mes.rawglasstask.entity.RawGlassStorageTask;
import com.mes.rawglasstask.service.RawGlassStorageTaskService;
import com.mes.s7.entity.S7DataCC;
import com.mes.s7.entity.S7DataSP;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.mes.uppattenusage.entity.vo.UpPattenUsageVO;
import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@@ -57,6 +61,18 @@
    @Autowired(required = false)
    private MiloService miloService;
    @Autowired
    @Qualifier("s7SerializerCC")
    S7Serializer s7SerializerCC;
    @Autowired
    @Qualifier("s7SerializerSPOne")
    private S7Serializer s7SerializerSPOne;
    @Autowired
    @Qualifier("s7SerializerSPTwo")
    private S7Serializer s7SerializerSPTwo;
    private static final String LOAD_GLASS_DEVICE_ONE_TASK = "load_glass_device_one_task";
@@ -64,6 +80,7 @@
    private static final List<Integer> LOAD_STATION_01 = Arrays.asList(101, 102);
    private static final List<Integer> LOAD_STATION_02 = Arrays.asList(103, 104);
    private static final List<Integer> LOAD_STATION_ALL = Arrays.asList(101, 102, 103, 104);
    private static final Integer LEFTING_01 = 98;
    private static final Integer LEFTING_02 = 99;
    private static final Integer LOAD_GLASS_ONE_DEVICE = 5;
@@ -71,23 +88,39 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageTask() throws Exception {
        ReadWriteEntity requestWord = miloService.readFromOpcUa("CC.CC.request");
        ReadWriteEntity confireWord = miloService.readFromOpcUa("CC.CC.confirmation");
        ReadWriteEntity reportWord = miloService.readFromOpcUa("CC.CC.reportWord");
        ReadWriteEntity taskWord = miloService.readFromOpcUa("CC.CC.taskWord");
        String requestValue = requestWord.getValue() + "";
        S7DataCC S7DataCCOne = s7SerializerCC.read(S7DataCC.class);
        String requestWord = S7DataCCOne.getRequest().toString();
        String confireWord = S7DataCCOne.getConfirmation().toString();
        String reportWord = S7DataCCOne.getReportWord().toString();
        String taskWord = S7DataCCOne.getTaskWord().toString();
        String requestValue = requestWord;
//        ReadWriteEntity requestWord = miloService.readFromOpcUa("CC.CC.request");
//        ReadWriteEntity confireWord = miloService.readFromOpcUa("CC.CC.confirmation");
//        ReadWriteEntity reportWord = miloService.readFromOpcUa("CC.CC.reportWord");
//        ReadWriteEntity taskWord = miloService.readFromOpcUa("CC.CC.taskWord");
//        String requestValue = requestWord.getValue() + "";
        if ("0".equals(requestValue)) {
            if ("1".equals(confireWord.getValue() + "") && "0".equals(reportWord.getValue() + "")) {
                List<ReadWriteEntity> list = new ArrayList<>();
                list.add(generateReadWriteEntity("CC.CC.confirmation", 0));
                miloService.writeToOpcWord(list);
            if ("1".equals(confireWord) && "0".equals(reportWord)) {
//            if ("1".equals(confireWord.getValue() + "") && "0".equals(reportWord.getValue() + "")) {
                S7DataCC s7Data = new S7DataCC();
                s7Data.setConfirmation((short) 0);
                s7SerializerCC.write(s7Data);
//                List<ReadWriteEntity> list = new ArrayList<>();
//                list.add(generateReadWriteEntity("CC.CC.confirmation", 0));
//                miloService.writeToOpcWord(list);
            }
            if ("1".equals(taskWord.getValue() + "")) {
                List<ReadWriteEntity> list = new ArrayList<>();
                list.add(generateReadWriteEntity("CC.CC.taskWord", 0));
                list.add(generateReadWriteEntity("CC.CC.startSlot", 0));
                list.add(generateReadWriteEntity("CC.CC.endSlot", 0));
                miloService.writeToOpcWord(list);
            if ("1".equals(taskWord)) {
//          if ("1".equals(taskWord.getValue() + "")) {
                S7DataCC s7Data = new S7DataCC();
                s7Data.setTaskWord((short) 0);
                s7Data.setStartSlot((short) 0);
                s7Data.setEndSlot((short) 0);
                s7SerializerCC.write(s7Data);
//                List<ReadWriteEntity> list = new ArrayList<>();
//                list.add(generateReadWriteEntity("CC.CC.taskWord", 0));
//                list.add(generateReadWriteEntity("CC.CC.startSlot", 0));
//                list.add(generateReadWriteEntity("CC.CC.endSlot", 0));
//                miloService.writeToOpcWord(list);
            }
            return;
        }
@@ -127,8 +160,10 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageInCar() throws Exception {
        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.inCar");
        String value = entity.getValue() + "";
        S7DataCC S7DataCCOne = s7SerializerCC.read(S7DataCC.class);
        String value = S7DataCCOne.getInCar().toString();
//        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.inCar");
//        String value = entity.getValue() + "";
        if (!"1".equals(value)) {
            log.info("大车上没有架子");
            return;
@@ -142,13 +177,14 @@
        }
        rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getId, one.getId())
                .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
    }
    @Scheduled(fixedDelay = 1000)
    public void rawStorageFinish() throws Exception {
        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.reportWord");
        String value = entity.getValue() + "";
        S7DataCC S7DataCCOne = s7SerializerCC.read(S7DataCC.class);
        String value = S7DataCCOne.getReportWord().toString();
//        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.reportWord");
//        String value = entity.getValue() + "";
        if ("0".equals(value)) {
            log.info("当前任务未汇报,结束本次任务");
            return;
@@ -161,7 +197,7 @@
        }
        RawGlassStorageTask task = rawGlassStorageTaskService.getOne(new LambdaQueryWrapper<RawGlassStorageTask>()
                .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW));
        RawGlassStorageDetails targetDetails = generateDetails(details, task.getEndSlot());
        RawGlassStorageDetails targetDetails = rawGlassStorageDetailsService.generateDetails(details, task.getEndSlot());
        int deviceId = details.getDeviceId();
        Integer taskType = task.getTaskType();
        if ("1".equals(value)) {
@@ -211,9 +247,12 @@
                    .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE));
        }
        List<ReadWriteEntity> list = new ArrayList<>();
        list.add(generateReadWriteEntity("CC.CC.confirmation", 1));
        miloService.writeToOpcWord(list);
        S7DataCC s7Data = new S7DataCC();
        s7Data.setConfirmation((short) 1);
        s7SerializerCC.write(s7Data);
//        List<ReadWriteEntity> list = new ArrayList<>();
//        list.add(generateReadWriteEntity("CC.CC.confirmation", 1));
//        miloService.writeToOpcWord(list);
    }
    private boolean isHasRunningTask() {
@@ -299,7 +338,7 @@
        }
        //生成复位任务
        rawGlassStorageDetailsService.generateTask(rawGlassList.get(0).getSlot(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
//        rawGlassStorageDetailsService.generatask(rawGlassList.get(0).getSlot(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
//        List<ReadWriteEntity> list = new ArrayList<>();
//        list.add(generateReadWriteEntity("CC.CC.taskWord", 1));
@@ -378,7 +417,6 @@
            return Boolean.FALSE;
        }
        List<RawGlassStorageDetails> loadStationList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>()
                .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1")
                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
@@ -407,6 +445,10 @@
        if (CollectionUtils.isEmpty(loadStationList)) {
            log.info("1号上片位生成调度任务");
            RawGlassStorageDetails rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size());
            if (CollectionUtils.isEmpty(loadStationList)) {
                log.info("仓库内无匹配的玻璃");
                return Boolean.FALSE;
            }
            rawGlassStorageDetailsService.generateTask(rawDetails.getSlot(), loadStation.get(0), rawDetails.getShelf(), rawDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
            //结束调度任务 修改工位状态(起始位)状态为103 RAW_GLASS_STATE_RUNNING 任务完成后将状态改为101  目标位新增一条数据,架子号为(起始位)
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
@@ -426,7 +468,7 @@
                    log.info("2号上片位玻璃尺寸不一致,1号上片位生成调度任务");
                    //按照尺寸及数量获取数量最接近的格子信息
                    RawGlassStorageDetails rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size());
                    if(null == rawDetails){
                    if (null == rawDetails) {
                        log.info("仓库内无需要上架的玻璃");
                        return Boolean.FALSE;
                    }
@@ -457,7 +499,13 @@
                    RawGlassStorageDetails twoLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(1))).findFirst().orElse(null);
                    if (null == twoLoadStation) {
                        //按照尺寸生成二号位上片任务信息
                        LoadGlassDeviceTask loadTask = loadGlassDeviceTaskService.queryTaskMessage(tableName);
//                        LoadGlassDeviceTask loadTask = loadGlassDeviceTaskService.queryTaskMessage(tableName);
                        S7DataSP loadTask=new S7DataSP();
                        if(stationCell == 5){
                            loadTask=s7SerializerSPOne.read(S7DataSP.class);
                        }else{
                            loadTask=s7SerializerSPTwo.read(S7DataSP.class);
                        }
                        RawGlassStorageDetails rawDetails = null;
                        if (oneLoadStation.getRemainQuantity() > (loadTask.getTotalCount() + loadTask.getDamageCount())) {
                            usageVOS = upListMap.get("2");
@@ -483,7 +531,13 @@
                    } else {
                        //todo:当二号为的尺寸大于0时,是否执行调度任务,更换当前原片的尺寸,等待下一次任务的直接执行;还是继续等待,当尺寸不一样,等待一号工位的进出库调度任务。
                        if (twoLoadStation.getRemainQuantity() > 0) {
                            LoadGlassDeviceTask loadTask = loadGlassDeviceTaskService.queryTaskMessage(tableName);
//                            LoadGlassDeviceTask loadTask = loadGlassDeviceTaskService.queryTaskMessage(tableName);
                            S7DataSP loadTask=new S7DataSP();
                            if(stationCell == 5){
                                loadTask=s7SerializerSPOne.read(S7DataSP.class);
                            }else{
                                loadTask=s7SerializerSPTwo.read(S7DataSP.class);
                            }
                            if (oneLoadStation.getRemainQuantity() > (loadTask.getTotalCount() + loadTask.getDamageCount())) {
                                usageVOS = upListMap.get("2");
                                if (CollectionUtils.isEmpty(usageVOS)) {
@@ -535,24 +589,6 @@
        }
    }
    private RawGlassStorageDetails generateDetails(RawGlassStorageDetails details, Integer targetSlot) {
        RawGlassStorageDetails targetDetails = new RawGlassStorageDetails();
        RawGlassStorageStation station = rawGlassStorageStationService.getOne(new LambdaQueryWrapper<RawGlassStorageStation>()
                .eq(RawGlassStorageStation::getSlot, targetSlot));
        targetDetails.setDeviceId(station.getDeviceId());
        targetDetails.setSlot(targetSlot);
        targetDetails.setShelf(details.getShelf());
        targetDetails.setPatternWidth(details.getPatternWidth());
        targetDetails.setPatternHeight(details.getPatternHeight());
        targetDetails.setPatternThickness(details.getPatternThickness());
        targetDetails.setFilmsId(details.getFilmsId());
        targetDetails.setRemainQuantity(details.getRemainQuantity());
        targetDetails.setCreateTime(new Date());
        targetDetails.setState(Const.RAW_GLASS_STATE_IN);
        return targetDetails;
    }
    private ReadWriteEntity generateReadWriteEntity(String identifier, int value) {
        ReadWriteEntity readWriteEntity = new ReadWriteEntity();
        readWriteEntity.setIdentifier(identifier);
@@ -566,6 +602,7 @@
                .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth())
                .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight())
                .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness())
                .notIn(RawGlassStorageDetails::getSlot, LOAD_STATION_ALL)
                .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN)
                .orderByAsc(RawGlassStorageDetails::getRemainQuantity)
                .last("order by abs(t.remain_quantity - " + remainQuantity + ")  asc")