wangfei
2025-05-23 0b28598dabd95862411a75a3cd2152f896671261
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;
@@ -57,6 +58,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 +68,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,18 +76,34 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageTask() throws Exception {
//        S7Data S7DataWL1 = s7Serializer.read(S7Data.class);
//        String requestWord = S7DataWL1.getRequest().toString();
//        String confireWord = S7DataWL1.getConfirmation().toString();
//        String reportWord = S7DataWL1.getReportWord().toString();
//        String taskWord = S7DataWL1.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() + "")) {
            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() + "")) {
//            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));
@@ -127,6 +148,8 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageInCar() throws Exception {
//        S7Data S7DataWL1 = s7Serializer.read(S7Data.class);
//        String value = S7DataWL1.getInCar().toString();
        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.inCar");
        String value = entity.getValue() + "";
        if (!"1".equals(value)) {
@@ -146,6 +169,8 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageFinish() throws Exception {
//        S7Data S7DataWL1 = s7Serializer.read(S7Data.class);
//        String value = S7DataWL1.getReportWord().toString();
        ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.reportWord");
        String value = entity.getValue() + "";
        if ("0".equals(value)) {
@@ -210,6 +235,9 @@
                    .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE));
        }
//        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);
@@ -405,6 +433,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 +456,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 +578,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")