zhoushihao
2025-05-12 fbd31387721424c65b173cbb23b03202f3e7dce6
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,6 +17,8 @@
import com.mes.rawglassstation.service.RawGlassStorageStationService;
import com.mes.rawglasstask.entity.RawGlassStorageTask;
import com.mes.rawglasstask.service.RawGlassStorageTaskService;
import com.mes.s7.entity.S7Data;
import com.mes.s7.job.S7Job;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.mes.uppattenusage.entity.vo.UpPattenUsageVO;
import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
@@ -57,6 +60,9 @@
    @Autowired(required = false)
    private MiloService miloService;
    @Autowired(required = false)
    S7Serializer s7Serializer;
    private static final String LOAD_GLASS_DEVICE_ONE_TASK = "load_glass_device_one_task";
@@ -64,6 +70,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 +78,40 @@
    @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() + "";
        String requestWord = S7Job.S7DataWL1.getRequest().toString();
        String confireWord = S7Job.S7DataWL1.getConfirmation().toString();
        String reportWord = S7Job.S7DataWL1.getReportWord().toString();
        String taskWord = S7Job.S7DataWL1.getTaskWord().toString();
//        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;
//        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() + "")) {
                S7Data s7Data=new S7Data();
                s7Data.setConfirmation((short)0);
                s7Serializer.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() + "")) {
                S7Data s7Data=new S7Data();
                s7Data.setTaskWord((short)0);
                s7Data.setStartSlot((short)0);
                s7Data.setEndSlot((short)0);
                s7Serializer.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 +151,9 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageInCar() throws Exception {
        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.inCar");
        String value = entity.getValue() + "";
        String value = S7Job.S7DataWL1.getInCar().toString();
//        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.inCar");
//        String value = entity.getValue() + "";
        if (!"1".equals(value)) {
            log.info("大车上没有架子");
            return;
@@ -146,8 +171,9 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageFinish() throws Exception {
        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.reportWord");
        String value = entity.getValue() + "";
        String value = S7Job.S7DataWL1.getReportWord().toString();
//        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.reportWord");
//        String value = entity.getValue() + "";
        if ("0".equals(value)) {
            log.info("当前任务未汇报,结束本次任务");
            return;
@@ -210,9 +236,12 @@
                    .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE));
        }
        List<ReadWriteEntity> list = new ArrayList<>();
        list.add(generateReadWriteEntity("CC.CC.confirmation", 1));
        miloService.writeToOpcWord(list);
        S7Data s7Data=new S7Data();
        s7Data.setConfirmation((short)1);
        s7Serializer.write(s7Data);
//        List<ReadWriteEntity> list = new ArrayList<>();
//        list.add(generateReadWriteEntity("CC.CC.confirmation", 1));
//        miloService.writeToOpcWord(list);
    }
    private boolean isHasRunningTask() {
@@ -405,6 +434,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>()
@@ -424,7 +457,7 @@
                    log.info("2号上片位玻璃尺寸不一致,1号上片位生成调度任务");
                    //按照尺寸及数量获取数量最接近的格子信息
                    RawGlassStorageDetails rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size());
                    if(null == rawDetails){
                    if (null == rawDetails) {
                        log.info("仓库内无需要上架的玻璃");
                        return Boolean.FALSE;
                    }
@@ -546,6 +579,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")