ZengTao
2024-10-24 22fb46f2db1714a6b450b353669d26908884653f
Merge branch 'master' of http://bore.pub:10439/r/HangZhouMes

# Conflicts:
# hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
10个文件已修改
554 ■■■■ 已修改文件
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/entity/Engineering.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java 340 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelog.sql 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/entity/Engineering.java
@@ -99,7 +99,7 @@
    /**
     * 上片机线路
     */
    private String stationCell;
    private int stationCell;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: dev
    active: cz
  application:
    name: cacheGlass
  liquibase:
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
@@ -10,7 +10,6 @@
import com.mes.engineering.mapper.EngineeringMapper;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
import com.mes.rawglassstation.service.RawGlassStorageStationService;
import com.mes.rawglasstask.entity.RawGlassStorageTask;
import com.mes.rawglasstask.service.RawGlassStorageTaskService;
import com.mes.uppattenusage.entity.vo.UpPattenUsageVO;
@@ -35,8 +34,6 @@
public class RawGlassTask {
    @Autowired
    private RawGlassStorageStationService rawGlassStorageStationService;
    @Autowired
    private RawGlassStorageDetailsService rawGlassStorageDetailsService;
    @Autowired
@@ -54,25 +51,32 @@
    private static final List<String> LOAD_STATION_01 = Arrays.asList("101", "102");
    private static final List<String> LOAD_STATION_02 = Arrays.asList("103", "104");
    private static final List<Integer> LOAD_STATION_MAX = Arrays.asList(102, 104);
    private static final Integer LEFTING_01 = 98;
    private static final Integer LEFTING_02 = 99;
    private static final Integer LOAD_GLASS_01_01 = 101;
    private static final Integer LOAD_GLASS_01_02 = 102;
    private static final Integer LOAD_GLASS_02_01 = 103;
    private static final Integer LOAD_GLASS_02_02 = 104;
    @Scheduled(fixedDelay = 1000)
    public void rawStorageTask() throws Exception {
        ReadWriteEntity requestWord = miloService.readFromOpcUa("storage-device.dev.Task Request");
        ReadWriteEntity confireWord = miloService.readFromOpcUa("storage-device.dev.Task Confirmation Word");
        ReadWriteEntity taskWord = miloService.readFromOpcUa("storage-device.dev.Task sending word");
        ReadWriteEntity requestWord = miloService.readFromOpcUa("A01-CC.dev.request");
        ReadWriteEntity confireWord = miloService.readFromOpcUa("A01-CC.dev.confirmationWord");
        ReadWriteEntity reportWord = miloService.readFromOpcUa("A01-CC.dev.reportWord");
        ReadWriteEntity taskWord = miloService.readFromOpcUa("A01-CC.dev.taskWord");
        String requestValue = requestWord.getValue() + "";
        if ("0".equals(requestValue)) {
            if ("1".equals(confireWord.getValue() + "")) {
            if ("1".equals(confireWord.getValue() + "") && "0".equals(reportWord.getValue() + "")) {
                List<ReadWriteEntity> list = new ArrayList<>();
                list.add(generateReadWriteEntity("storage-device.dev.Task Confirmation Word", 0));
                list.add(generateReadWriteEntity("A01-CC.dev.confirmationWord", 0));
                miloService.writeToOpcWord(list);
            }
            if ("1".equals(taskWord.getValue() + "")) {
                List<ReadWriteEntity> list = new ArrayList<>();
                list.add(generateReadWriteEntity("storage-device.dev.Task sending word", 0));
                list.add(generateReadWriteEntity("storage-device.dev.Task distribution", 0));
                list.add(generateReadWriteEntity("storage-device.dev.Starting material rack number", 0));
                list.add(generateReadWriteEntity("storage-device.dev.End shelf number", 0));
                list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 0));
                list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 0));
                list.add(generateReadWriteEntity("A01-CC.dev.startSlot", 0));
                list.add(generateReadWriteEntity("A01-CC.dev.endSlot", 0));
                miloService.writeToOpcWord(list);
            }
            return;
@@ -108,16 +112,17 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageInCar() throws Exception {
        ReadWriteEntity entity = miloService.readFromOpcUa("storage-device.dev.Loading rack");
        ReadWriteEntity entity = miloService.readFromOpcUa("A01-CC.dev.inCar");
        String value = entity.getValue() + "";
        if (!"1".equals(value)) {
            log.info("大车忙碌");
            log.info("大车上没有架子");
            return;
        }
        //查询任务
        RawGlassStorageDetails one = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
        if (one == null) {
            log.info("没有正在执行的任务");
            return;
        }
        rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getId, one.getId())
@@ -127,7 +132,7 @@
    @Scheduled(fixedDelay = 1000)
    public void rawStorageFinish() throws Exception {
        ReadWriteEntity entity = miloService.readFromOpcUa("storage-device.dev.Task report letter");
        ReadWriteEntity entity = miloService.readFromOpcUa("A01-CC.dev.reportWord");
        String value = entity.getValue() + "";
        if ("0".equals(value)) {
            log.info("当前任务未汇报,结束本次任务");
@@ -144,51 +149,52 @@
        RawGlassStorageDetails targetDetails = generateDetails(details, task.getEndSlot());
        Integer taskType = task.getTaskType();
        if ("1".equals(value)) {
            log.info("将详情表的状态改为已出库");
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                    .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
                    .eq(RawGlassStorageDetails::getSlot, task.getStartSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
            log.info("任务状态已更改为:已完成");
            rawGlassStorageTaskService.update(new LambdaUpdateWrapper<RawGlassStorageTask>()
                    .eq(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)
                    .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_SUCCESS));
            switch (taskType) {
                case 1:
                    log.info("进片任务");
                    rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                            .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
                            .eq(RawGlassStorageDetails::getSlot, task.getStartSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
                    //todo:生成入库详情表:其他信息不变,
                    rawGlassStorageDetailsService.save(targetDetails);
                    log.info("1、入库,3、调度任务。{}", taskType);
                    if (targetDetails.getRemainQuantity() > 0) {
                        rawGlassStorageDetailsService.save(targetDetails);
                    }
                    break;
                case 2:
                    log.info("出片任务");
                    rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                            .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
                            .eq(RawGlassStorageDetails::getSlot, task.getStartSlot())
                            .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
                case 4:
                    log.info("2、出片,4、入库请求。{}", taskType);
                    targetDetails = new RawGlassStorageDetails();
                    targetDetails.setSlot(task.getEndSlot());
                    targetDetails.setShelf(task.getStartSlot());
                    targetDetails.setState(Const.RAW_GLASS_STATE_IN);
                    rawGlassStorageDetailsService.save(targetDetails);
                    break;
                case 3:
                    log.info("调度任务");
                    rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                            .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
                            .eq(RawGlassStorageDetails::getSlot, task.getStartSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
                    rawGlassStorageDetailsService.save(targetDetails);
                    break;
                default:
                    break;
            }
            rawGlassStorageTaskService.update(new LambdaUpdateWrapper<RawGlassStorageTask>()
                    .eq(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)
                    .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_SUCCESS));
        } else {
            if (taskType.equals(Const.RAW_GLASS_TASK_TYPE_IN_REQUEST)) {
                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                        .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
                        .eq(RawGlassStorageDetails::getSlot, task.getStartSlot())
                        .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING, Const.RAW_GLASS_STATE_CAR));
            } else {
                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                        .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                        .eq(RawGlassStorageDetails::getSlot, task.getStartSlot())
                        .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING, Const.RAW_GLASS_STATE_CAR));
            }
            rawGlassStorageTaskService.update(new LambdaUpdateWrapper<RawGlassStorageTask>()
                    .eq(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)
                    .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE));
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                    .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                    .eq(RawGlassStorageDetails::getSlot, task.getStartSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR));
        }
        }
        List<ReadWriteEntity> list = new ArrayList<>();
        list.add(generateReadWriteEntity("storage-device.dev.Task Confirmation Word", 1));
        list.add(generateReadWriteEntity("A01-CC.dev.confirmationWord", 1));
        miloService.writeToOpcWord(list);
    }
@@ -225,8 +231,8 @@
     */
    public boolean outboundTask() throws Exception {
        List<RawGlassStorageDetails> rawGlassList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>()
                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_WAIT_OUT));
//                .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1 and device_id = 4"));
                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_WAIT_OUT)
                .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1"));
        if (CollectionUtil.isEmpty(rawGlassList)) {
            log.info("系统没有需要出库的原片信息");
            return Boolean.FALSE;
@@ -234,22 +240,24 @@
        //获取工位上是否有架子,
        List<RawGlassStorageDetails> emptyLeftingList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>()
                .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL)
                .in(RawGlassStorageDetails::getSlot, 98, 99));
        if (CollectionUtil.isNotEmpty(emptyLeftingList) && emptyLeftingList.size() >= 2) {
                .in(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1 and device_id = 4"));
        if (CollectionUtil.isNotEmpty(emptyLeftingList) && emptyLeftingList.size() > 1) {
            log.info("吊装位当前都有架子,结束出片任务");
            return Boolean.FALSE;
        }
        //获取需要落架的
        List<Integer> leftingList = emptyLeftingList.stream().map(RawGlassStorageDetails::getSlot).collect(Collectors.toList());
        int lefting = CollectionUtil.isEmpty(leftingList) ? LEFTING_01 : leftingList.get(0).equals(LEFTING_01) ? LEFTING_02 : LEFTING_01;
        Integer startSlot = rawGlassList.get(0).getSlot();
        //生成出库任务
        rawGlassStorageDetailsService.generateTask(rawGlassList.get(0).getSlot(), 98, rawGlassList.get(0).getSlot(),
                rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT);
        rawGlassStorageDetailsService.generateTask(startSlot, lefting, startSlot, rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT);
        List<ReadWriteEntity> list = new ArrayList<>();
        list.add(generateReadWriteEntity("storage-device.dev.Task sending word", 1));
        list.add(generateReadWriteEntity("storage-device.dev.Task distribution", 1));
        list.add(generateReadWriteEntity("storage-device.dev.Starting material rack number", rawGlassList.get(0).getSlot()));
        list.add(generateReadWriteEntity("storage-device.dev.End shelf number", 98));
        miloService.writeToOpcWord(list);
//        List<ReadWriteEntity> list = new ArrayList<>();
//        list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
//        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
//        list.add(generateReadWriteEntity("A01-CC.dev.startSlot", startSlot));
//        list.add(generateReadWriteEntity("A01-CC.dev.endSlot", lefting));
//        miloService.writeToOpcWord(list);
        //修改出片任务状态
        rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
@@ -274,28 +282,18 @@
            log.info("吊装位被禁用/架子所在工位被禁用/无原片信息");
            return Boolean.FALSE;
        }
        //获取吊装位架子信息
//        List<Integer> shelfList = rawGlassList.stream().map(RawGlassStorageDetails::getShelf).collect(Collectors.toList());
//        List<RawGlassStorageStation> stationList = rawGlassStorageStationService.list(new LambdaQueryWrapper<RawGlassStorageStation>().notInSql(RawGlassStorageStation::getSlot, "select slot from raw_glass_storage_details where " +
//                "state in('100','102','103')")
//                .eq(RawGlassStorageStation::getEnableState, Const.SLOT_ON)
//                .in(RawGlassStorageStation::getDeviceId, Const.RAW_GLASS_DEVICE));
//        if (CollectionUtil.isEmpty(stationList)) {
//            log.info("没有空的工位");
//            return Boolean.FALSE;
//        }
        //生成进笼任务
        RawGlassStorageDetails details = rawGlassList.get(0);
        rawGlassStorageDetailsService.generateTask(details.getSlot(), details.getShelf(), details.getShelf(),
                details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_IN);
        List<ReadWriteEntity> list = new ArrayList<>();
        list.add(generateReadWriteEntity("storage-device.dev.Task sending word", 1));
        list.add(generateReadWriteEntity("storage-device.dev.Task distribution", 1));
        list.add(generateReadWriteEntity("storage-device.dev.Starting material rack number", details.getSlot()));
        list.add(generateReadWriteEntity("storage-device.dev.End shelf number", details.getShelf()));
        miloService.writeToOpcWord(list);
//        List<ReadWriteEntity> list = new ArrayList<>();
//        list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
//        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
//        list.add(generateReadWriteEntity("A01-CC.dev.startSlot", details.getSlot()));
//        list.add(generateReadWriteEntity("A01-CC.dev.endSlot", details.getShelf()));
//        miloService.writeToOpcWord(list);
        //生成工位任务,将吊装位的玻璃状态改位进笼中
//        修改吊装位的原片状态为103 出片中
        //修改吊装位的原片状态为103 出片中
        //修改出片任务状态
        rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                .eq(RawGlassStorageDetails::getSlot, rawGlassList.get(0).getSlot())
@@ -304,13 +302,22 @@
        return Boolean.TRUE;
    }
    private boolean rawGlassDispatchByEngineering(String stationCell, String enginneerId) throws Exception {
    /**
     * @param stationCell 设备信息  5  、 6
     * @param enginneerId 共亨号
     * @return
     * @throws Exception
     */
    private boolean rawGlassDispatchByEngineering(int stationCell, String enginneerId) throws Exception {
        //当前尺寸需要上片的数量
        List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(enginneerId);
        if (CollectionUtils.isEmpty(pattenUsageList)) {
            log.info("正在执行的工程原片无可上片的原片信息");
            return Boolean.FALSE;
        }
        //获取当前上片位1号架子信息
        int endSlot = stationCell == LOAD_GLASS_01_01 ? LOAD_GLASS_01_01 : LOAD_GLASS_02_01;
        int endSlot02 = stationCell == LOAD_GLASS_01_02 ? LOAD_GLASS_01_01 : LOAD_GLASS_02_02;
        Map<String, List<UpPattenUsageVO>> upListMap = pattenUsageList.stream()
                .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber));
        //1、查询2个上片的原片详情
@@ -326,109 +333,124 @@
                            .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth())
                            .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight())
                            .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness())
                            .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1")
                            .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
//                    .gt(RawGlassStorageDetails::getRemainQuantity, upPattenUsage01VOS.size())
                            .orderByAsc(RawGlassStorageDetails::getRemainQuantity)
                            .last("limit 1")
            );
            rawGlassStorageDetailsService.generateTask(details.getSlot(), rawGlassDetailsList.get(0).getSlot(), details.getSlot(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
            rawGlassStorageDetailsService.generateTask(details.getSlot(), endSlot, details.getSlot(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
            List<ReadWriteEntity> list = new ArrayList<>();
            list.add(generateReadWriteEntity("storage-device.dev.Task sending word", 1));
            list.add(generateReadWriteEntity("storage-device.dev.Task distribution", 1));
            list.add(generateReadWriteEntity("storage-device.dev.Starting material rack number", details.getSlot()));
            list.add(generateReadWriteEntity("storage-device.dev.End shelf number", rawGlassDetailsList.get(0).getSlot()));
            miloService.writeToOpcWord(list);
            //结束调度任务 修改工位状态(起始位)状态为103 RAW_GLASS_STATE_RUNNING 任务完成后将状态改为101  目标位新增一条数据,架子号为(起始位)
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                    .eq(RawGlassStorageDetails::getShelf, details.getShelf()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                    .eq(RawGlassStorageDetails::getSlot, details.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                    .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
            return Boolean.TRUE;
        }
        if (rawGlassDetailsList.size() == 2) {
            RawGlassStorageDetails glassStorageDetails = rawGlassDetailsList.get(0);
            if (usageVO.getWidth() == glassStorageDetails.getPatternWidth() && usageVO.getHeight() == glassStorageDetails.getPatternHeight() &&
                    usageVO.getThickness() == glassStorageDetails.getPatternThickness() && usageVO.getFilmsId().equals(glassStorageDetails.getFilmsId())) {
                if (glassStorageDetails.getRemainQuantity() == 0) {
                    //将架子放回原工位上
                    rawGlassStorageDetailsService.generateTask(glassStorageDetails.getSlot(), glassStorageDetails.getShelf(), glassStorageDetails.getShelf(), glassStorageDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
                    List<ReadWriteEntity> list = new ArrayList<>();
                    list.add(generateReadWriteEntity("storage-device.dev.Task sending word", 1));
                    list.add(generateReadWriteEntity("storage-device.dev.Task distribution", 1));
                    list.add(generateReadWriteEntity("storage-device.dev.Starting material rack number", glassStorageDetails.getSlot()));
                    list.add(generateReadWriteEntity("storage-device.dev.End shelf number", glassStorageDetails.getShelf()));
                    miloService.writeToOpcWord(list);
                    rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                            .eq(RawGlassStorageDetails::getSlot, glassStorageDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                            .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
                    return Boolean.TRUE;
                }
            }
            log.info("上片位都有架子,结束本条线{}的调度任务", stationCell);
            return Boolean.FALSE;
        }
        RawGlassStorageDetails glassStorageDetails = rawGlassDetailsList.get(0);
        if (LOAD_STATION_MAX.contains(glassStorageDetails.getSlot())) {
            log.info("上片位2号有架子,结束本条线{}的调度任务", stationCell);
        if (rawGlassDetailsList.size() == 2) {
            if (!((usageVO.getWidth() == glassStorageDetails.getPatternWidth() && usageVO.getHeight() == glassStorageDetails.getPatternHeight() &&
                    usageVO.getThickness() == glassStorageDetails.getPatternThickness() && usageVO.getFilmsId().equals(glassStorageDetails.getFilmsId())))
                    || ((usageVO.getWidth() == glassStorageDetails.getPatternWidth() && usageVO.getHeight() == glassStorageDetails.getPatternHeight() &&
                    usageVO.getThickness() == glassStorageDetails.getPatternThickness() && usageVO.getFilmsId().equals(glassStorageDetails.getFilmsId()))
                    && glassStorageDetails.getRemainQuantity() == 0)) {
                //将架子放回原工位上
                rawGlassStorageDetailsService.generateTask(endSlot, glassStorageDetails.getShelf(), glassStorageDetails.getShelf(), 0, Const.RAW_GLASS_TASK_TYPE_DISPATCH);
//                List<ReadWriteEntity> list = new ArrayList<>();
//                list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.startSlot", endSlot));
//                list.add(generateReadWriteEntity("A01-CC.dev.endSlot", glassStorageDetails.getShelf()));
//                miloService.writeToOpcWord(list);
                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                        .eq(RawGlassStorageDetails::getSlot, glassStorageDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                        .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
                return Boolean.TRUE;
            }
            return Boolean.FALSE;
        }
        //比较当前1号架子上的玻璃剩余数量是否为0或者已用完
        if (usageVO.getWidth() == glassStorageDetails.getPatternWidth() && usageVO.getHeight() == glassStorageDetails.getPatternHeight() &&
                usageVO.getThickness() == glassStorageDetails.getPatternThickness() && usageVO.getFilmsId().equals(glassStorageDetails.getFilmsId())) {
            RawGlassStorageDetails details = null;
            if (upPattenUsage01VOS.size() > glassStorageDetails.getRemainQuantity()) {
                //2号位上片:继续当前尺寸的原片
                details = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
                        .eq(RawGlassStorageDetails::getFilmsId, usageVO.getFilmsId())
                        .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth())
                        .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight())
                        .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness())
                        .gt(RawGlassStorageDetails::getRemainQuantity, upPattenUsage01VOS.size())
                        .orderByAsc(RawGlassStorageDetails::getRemainQuantity)
                        .last("limit 1"));
            } else {
                //2号位上片:获取第二种尺寸的原片
                List<UpPattenUsageVO> upPattenUsage02VOS = upListMap.get("2");
                if (CollectionUtils.isEmpty(upPattenUsage01VOS)) {
                    return Boolean.FALSE;
                }
                usageVO = upPattenUsage02VOS.get(0);
                details = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
                        .eq(RawGlassStorageDetails::getFilmsId, usageVO.getFilmsId())
                        .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth())
                        .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight())
                        .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness())
                        .gt(RawGlassStorageDetails::getRemainQuantity, upPattenUsage01VOS.size())
                        .orderByAsc(RawGlassStorageDetails::getRemainQuantity)
                        .last("limit 1"));
        //todo:1条线且当条线为2号上片为
        if (LOAD_STATION_MAX.contains(glassStorageDetails.getSlot())) {
            log.info("上片位2号有架子,结束本条线{}的调度任务", stationCell);
            if (!((usageVO.getWidth() == glassStorageDetails.getPatternWidth() && usageVO.getHeight() == glassStorageDetails.getPatternHeight() &&
                    usageVO.getThickness() == glassStorageDetails.getPatternThickness() && usageVO.getFilmsId().equals(glassStorageDetails.getFilmsId())))
                    || ((usageVO.getWidth() == glassStorageDetails.getPatternWidth() && usageVO.getHeight() == glassStorageDetails.getPatternHeight() &&
                    usageVO.getThickness() == glassStorageDetails.getPatternThickness() && usageVO.getFilmsId().equals(glassStorageDetails.getFilmsId()))
                    && glassStorageDetails.getRemainQuantity() == 0)) {
                //将架子放回原工位上
                rawGlassStorageDetailsService.generateTask(endSlot02, glassStorageDetails.getShelf(), glassStorageDetails.getShelf(), 0, Const.RAW_GLASS_TASK_TYPE_DISPATCH);
//                List<ReadWriteEntity> list = new ArrayList<>();
//                list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.startSlot", endSlot02));
//                list.add(generateReadWriteEntity("A01-CC.dev.endSlot", glassStorageDetails.getShelf()));
//                miloService.writeToOpcWord(list);
                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                        .eq(RawGlassStorageDetails::getSlot, glassStorageDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                        .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
                return Boolean.TRUE;
            }
            //将工位的架子传送到上片位
            rawGlassStorageDetailsService.generateTask(details.getShelf(), glassStorageDetails.getSlot(), details.getShelf(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                    .eq(RawGlassStorageDetails::getSlot, glassStorageDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                    .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
            List<ReadWriteEntity> list = new ArrayList<>();
            list.add(generateReadWriteEntity("storage-device.dev.Task sending word", 1));
            list.add(generateReadWriteEntity("storage-device.dev.Task distribution", 1));
            list.add(generateReadWriteEntity("storage-device.dev.Starting material rack number", glassStorageDetails.getShelf()));
            list.add(generateReadWriteEntity("storage-device.dev.End shelf number", glassStorageDetails.getSlot()));
            miloService.writeToOpcWord(list);
            return Boolean.TRUE;
            return Boolean.FALSE;
        } else {
            //将架子放回原工位上
            rawGlassStorageDetailsService.generateTask(0, glassStorageDetails.getShelf(), glassStorageDetails.getShelf(), glassStorageDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
            rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                    .eq(RawGlassStorageDetails::getSlot, glassStorageDetails.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                    .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
            //比较当前1号架子上的玻璃剩余数量是否为0或者已用完
            if (usageVO.getWidth() == glassStorageDetails.getPatternWidth() && usageVO.getHeight() == glassStorageDetails.getPatternHeight() &&
                    usageVO.getThickness() == glassStorageDetails.getPatternThickness() && usageVO.getFilmsId().equals(glassStorageDetails.getFilmsId())) {
                RawGlassStorageDetails details = null;
                if (upPattenUsage01VOS.size() > glassStorageDetails.getRemainQuantity()) {
                    //2号位上片:继续当前尺寸的原片
                    details = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
                            .eq(RawGlassStorageDetails::getFilmsId, usageVO.getFilmsId())
                            .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth())
                            .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight())
                            .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness())
                            .gt(RawGlassStorageDetails::getRemainQuantity, upPattenUsage01VOS.size())
                            .orderByAsc(RawGlassStorageDetails::getRemainQuantity)
                            .last("limit 1"));
                } else {
                    //2号位上片:获取第二种尺寸的原片
                    List<UpPattenUsageVO> upPattenUsage02VOS = upListMap.get("2");
                    if (CollectionUtils.isEmpty(upPattenUsage01VOS)) {
                        return Boolean.FALSE;
                    }
                    usageVO = upPattenUsage02VOS.get(0);
                    details = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
                            .eq(RawGlassStorageDetails::getFilmsId, usageVO.getFilmsId())
                            .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth())
                            .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight())
                            .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness())
                            .gt(RawGlassStorageDetails::getRemainQuantity, upPattenUsage01VOS.size())
                            .orderByAsc(RawGlassStorageDetails::getRemainQuantity)
                            .last("limit 1"));
                }
                //将工位的架子传送到上片位
                rawGlassStorageDetailsService.generateTask(details.getSlot(), endSlot02, details.getShelf(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                        .eq(RawGlassStorageDetails::getSlot, details.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                        .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
            List<ReadWriteEntity> list = new ArrayList<>();
            list.add(generateReadWriteEntity("storage-device.dev.Task sending word", 1));
            list.add(generateReadWriteEntity("storage-device.dev.Task distribution", 1));
            list.add(generateReadWriteEntity("storage-device.dev.Starting material rack number", glassStorageDetails.getShelf()));
            list.add(generateReadWriteEntity("storage-device.dev.End shelf number", glassStorageDetails.getSlot()));
            miloService.writeToOpcWord(list);
            return Boolean.TRUE;
//                List<ReadWriteEntity> list = new ArrayList<>();
//                list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.startSlot", glassStorageDetails.getShelf()));
//                list.add(generateReadWriteEntity("A01-CC.dev.endSlot", endSlot02));
//                miloService.writeToOpcWord(list);
                return Boolean.TRUE;
            } else {
                //将架子放回原工位上
                rawGlassStorageDetailsService.generateTask(endSlot, glassStorageDetails.getShelf(), glassStorageDetails.getShelf(), glassStorageDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH);
                rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
                        .eq(RawGlassStorageDetails::getSlot, endSlot).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
                        .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING));
//                List<ReadWriteEntity> list = new ArrayList<>();
//                list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
//                list.add(generateReadWriteEntity("A01-CC.dev.startSlot", endSlot));
//                list.add(generateReadWriteEntity("A01-CC.dev.endSlot", glassStorageDetails.getShelf()));
//                miloService.writeToOpcWord(list);
                return Boolean.TRUE;
            }
        }
    }
@@ -448,11 +470,13 @@
        return targetDetails;
    }
    private ReadWriteEntity generateReadWriteEntity(String identifier, int value) {
        ReadWriteEntity readWriteEntity = new ReadWriteEntity();
        readWriteEntity.setIdentifier(identifier);
        readWriteEntity.setValue(value);
        return readWriteEntity;
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
@@ -41,5 +41,5 @@
    String outWarehousingRequest(int leftingStation);
    boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType);
    boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType) throws Exception;
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kangaroohy.milo.model.ReadWriteEntity;
import com.kangaroohy.milo.service.MiloService;
import com.mes.common.config.Const;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassdetails.entity.request.RawGlassRequest;
@@ -17,6 +19,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -30,6 +33,9 @@
    @Autowired
    RawGlassStorageTaskService rawGlassStorageTaskService;
    @Autowired(required = false)
    MiloService miloService;
    @Override
    public boolean deleteRawGlassStorageDetails(String device_id) {
@@ -63,7 +69,11 @@
        }
        Integer shelf = shelfList.get(0);
        log.info("生成任务");
        generateTask(shelf, leftingStation, shelf, 0, Const.RAW_GLASS_TASK_TYPE_IN_REQUEST);
        try {
            generateTask(shelf, leftingStation, shelf, 0, Const.RAW_GLASS_TASK_TYPE_IN_REQUEST);
        } catch (Exception e) {
            return "fail";
        }
        //生成一条详情数据  仅记录架子状态
        RawGlassStorageDetails details = new RawGlassStorageDetails();
        details.setSlot(shelf);
@@ -81,7 +91,7 @@
        if (null == glassStorageDetails) {
            log.info("当前吊装位没有架子");
        }
        //todo:原片信息存入详情表
        //原片信息存入详情表
        BeanUtils.copyProperties(request, glassStorageDetails);
        log.info("覆盖后得到的工位详情信息为:{}", glassStorageDetails);
        updateById(glassStorageDetails);
@@ -135,7 +145,11 @@
                .eq(RawGlassStorageDetails::getSlot, details.getSlot())
                .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN)
                .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
        generateTask(leftingStation, details.getShelf(), details.getShelf(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT_REQUEST);
        try {
            generateTask(leftingStation, details.getShelf(), details.getShelf(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT_REQUEST);
        } catch (Exception e) {
            return "fail";
        }
        return "success";
    }
@@ -149,7 +163,7 @@
     * @return
     */
    @Override
    public boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType) {
    public boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType) throws Exception {
        RawGlassStorageTask task = RawGlassStorageTask.builder()
                .startSlot(startSlot)
                .endSlot(endSlot)
@@ -158,6 +172,22 @@
                .taskState(Const.RAW_GLASS_TASK_NEW)
                .shelf(shelf)
                .createTime(new Date()).build();
        return rawGlassStorageTaskService.save(task);
        rawGlassStorageTaskService.save(task);
        List<ReadWriteEntity> list = new ArrayList<>();
        list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
        list.add(generateReadWriteEntity("A01-CC.dev.startSlot", startSlot));
        list.add(generateReadWriteEntity("A01-CC.dev.endSlot", endSlot));
        miloService.writeToOpcWord(list);
        return Boolean.TRUE;
    }
    private ReadWriteEntity generateReadWriteEntity(String identifier, int value) {
        ReadWriteEntity readWriteEntity = new ReadWriteEntity();
        readWriteEntity.setIdentifier(identifier);
        readWriteEntity.setValue(value);
        return readWriteEntity;
    }
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
@@ -34,7 +34,7 @@
    /**
     * 启用标记
     */
    private String enableState;
    private Integer enableState;
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java
@@ -56,5 +56,10 @@
     */
    private Date createTime;
    /**
     * 创建时间
     */
    private Date updateTime;
}
hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml
@@ -16,7 +16,7 @@
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
kangaroohy:
  milo:
    enabled: true
    enabled: false
    primary: default
    config:
      default:
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
@@ -9,15 +9,8 @@
    enabled: false
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplkangaroohy:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
kangaroohy:
  milo:
    enabled: false
    primary: default
    config:
      default:
        endpoint: opc.tcp://zidonghua:49320
        security-policy: basic256sha256
        username: zsh
        password: 1qaz2wsx3edc4rfv
    enabled: false
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelog.sql
@@ -158,16 +158,18 @@
-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'raw_glass_storage_details' and table_schema = 'hangzhoumes';
CREATE TABLE raw_glass_storage_details
(
    id                bigint       NOT NULL AUTO_INCREMENT,
    device_id         int          NULL DEFAULT NULL COMMENT '设备id',
    slot              int          NULL DEFAULT NULL COMMENT '格子id',
    pattern_width     double(8, 2) NULL DEFAULT NULL COMMENT '原片宽',
    pattern_height    double(8, 2) NULL DEFAULT NULL COMMENT '原片高',
    pattern_thickness double(8, 2) NULL DEFAULT NULL COMMENT '原片厚度',
    films_id          varchar(64)  NULL DEFAULT NULL COMMENT '膜系',
    create_time       datetime     NOT NULL COMMENT '创建时间',
    remain_quantity   int          NULL DEFAULT NULL COMMENT '剩余数量',
    state             int          NULL DEFAULT NULL COMMENT '状态',
    id                bigint    NOT NULL AUTO_INCREMENT,
    device_id         int                DEFAULT NULL COMMENT '设备id',
    slot              int                DEFAULT NULL COMMENT '格子id',
    pattern_width     double(8, 2)       DEFAULT NULL COMMENT '原片宽',
    pattern_height    double(8, 2)       DEFAULT NULL COMMENT '原片高',
    pattern_thickness double(8, 2)       DEFAULT NULL COMMENT '原片厚度',
    films_id          varchar(64)        DEFAULT NULL COMMENT '膜系',
    create_time       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    remain_quantity   int                DEFAULT NULL COMMENT '剩余数量',
    state             int                DEFAULT NULL COMMENT '状态',
    shelf             int                DEFAULT NULL COMMENT '架子号',
    PRIMARY KEY (id) USING BTREE
);
-- rollback DROP TABLE raw_glass_storage_details;
@@ -177,11 +179,11 @@
-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'raw_glass_storage_station' and table_schema = 'hangzhoumes';
CREATE TABLE raw_glass_storage_station
(
    id           bigint       NOT NULL AUTO_INCREMENT,
    device_id    int          NULL DEFAULT NULL COMMENT '设备id',
    slot         int          NULL DEFAULT NULL COMMENT '栅格号',
    enable_state varchar(255) NULL DEFAULT NULL COMMENT '启用标记',
    PRIMARY KEY (id)
    id           bigint NOT NULL,
    device_id    int DEFAULT NULL COMMENT '设备id',
    slot         int DEFAULT NULL COMMENT '栅格号',
    enable_state int DEFAULT NULL COMMENT '启用标记',
    shelf        int DEFAULT NULL COMMENT '架子号'
);
-- rollback DROP TABLE raw_glass_storage_station;
@@ -191,13 +193,15 @@
-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'raw_glass_storage_task' and table_schema = 'hangzhoumes';
CREATE TABLE raw_glass_storage_task
(
    id               bigint   NOT NULL AUTO_INCREMENT,
    start_slot       int      NULL DEFAULT NULL COMMENT '起始格子',
    end_slot         int      NULL DEFAULT NULL COMMENT '目标格子',
    pattern_quantity int      NULL DEFAULT NULL COMMENT '原片数量',
    task_type        int      NULL DEFAULT NULL COMMENT '任务类型',
    enable_state     int      NULL DEFAULT NULL COMMENT '任务状态',
    create_time      datetime NULL DEFAULT NULL COMMENT '创建时间',
    id               bigint    NOT NULL AUTO_INCREMENT,
    start_slot       int                DEFAULT NULL COMMENT '起始格子',
    end_slot         int                DEFAULT NULL COMMENT '目标格子',
    pattern_quantity int                DEFAULT NULL COMMENT '原片数量',
    task_type        int                DEFAULT NULL COMMENT '任务类型',
    task_state       int                DEFAULT NULL COMMENT '任务状态',
    shelf            int                DEFAULT NULL COMMENT '架子号',
    create_time      TIMESTAMP          DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time      TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (id) USING BTREE
);
-- rollback DROP TABLE raw_glass_storage_task;
@@ -207,73 +211,45 @@
-- preconditions onFail:CONTINUE onError:CONTINUE
-- precondition-sql-check expectedResult:0 SELECT count(0) FROM information_schema.columns WHERE table_schema = 'hangzhoumes' AND table_name = 'engineering' AND column_name = 'station_cell';
ALTER TABLE engineering
    ADD COLUMN station_cell varchar(20);
    ADD COLUMN station_cell int;
-- changeset zsh:20241017001
-- preconditions onFail:CONTINUE onError:CONTINUE
-- precondition-sql-check expectedResult:0 select count(1) from raw_glass_storage_station;
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (1, 1, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (2, 1, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (3, 1, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (4, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (5, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (6, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (7, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (8, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (9, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (10, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (11, 2, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (12, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (13, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (14, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (15, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (16, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (17, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (18, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (19, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (20, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (21, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (22, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (23, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (24, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (25, 3, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (98, 4, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (99, 4, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (101, 5, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (102, 5, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (103, 6, '1');
INSERT INTO raw_glass_storage_station (slot, device_id, enable_state)
VALUES (104, 6, '1');
INSERT INTO raw_glass_storage_station (id, device_id, slot, enable_state, shelf)
VALUES (1, 1, 1, 1, 1),
       (2, 1, 2, 1, 2),
       (3, 1, 3, 1, 3),
       (4, 2, 4, 1, 4),
       (5, 2, 5, 1, 5),
       (6, 2, 6, 1, 6),
       (7, 2, 7, 1, 7),
       (8, 2, 8, 1, 8),
       (9, 2, 9, 1, 9),
       (10, 2, 10, 1, 10),
       (11, 2, 11, 1, 11),
       (12, 3, 12, 1, 12),
       (13, 3, 13, 1, 13),
       (14, 3, 14, 1, 14),
       (15, 3, 15, 1, 15),
       (16, 3, 16, 1, 16),
       (17, 3, 17, 1, 17),
       (18, 3, 18, 1, 18),
       (19, 3, 19, 1, 19),
       (20, 3, 20, 1, 20),
       (21, 3, 21, 1, 21),
       (22, 3, 22, 1, 22),
       (23, 3, 23, 1, 23),
       (24, 3, 24, 1, 24),
       (25, 3, 25, 1, 25),
       (26, 4, 98, 1, NULL),
       (27, 4, 99, 1, NULL),
       (28, 5, 101, 1, NULL),
       (29, 5, 102, 1, NULL),
       (30, 6, 103, 1, NULL),
       (31, 6, 104, 1, NULL);