package com.mes.job; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import com.mes.common.config.Const; import com.mes.engineering.entity.Engineering; import com.mes.engineering.mapper.EngineeringMapper; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.rawglasstask.entity.RawGlassStorageTask; import com.mes.rawglasstask.service.RawGlassStorageTaskService; 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.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * @Author : zhoush * @Date: 2024/10/11 16:13 * @Description: */ @Slf4j @Component public class RawGlassTask { @Autowired private RawGlassStorageDetailsService rawGlassStorageDetailsService; @Autowired private RawGlassStorageTaskService rawGlassStorageTaskService; @Resource private EngineeringMapper engineeringMapper; @Resource private UpPattenUsageMapper upPattenUsageMapper; @Autowired(required = false) private MiloService miloService; private static final List LIFTING_STATION = Arrays.asList(4); private static final List LOAD_STATION_01 = Arrays.asList("101", "102"); private static final List LOAD_STATION_02 = Arrays.asList("103", "104"); private static final List 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("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() + "") && "0".equals(reportWord.getValue() + "")) { List list = new ArrayList<>(); list.add(generateReadWriteEntity("A01-CC.dev.confirmationWord", 0)); miloService.writeToOpcWord(list); } if ("1".equals(taskWord.getValue() + "")) { List list = new ArrayList<>(); 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; } if (!"1".equals(requestValue)) { log.info("无请求"); return; } //是否有正在执行的任务 boolean flag = isHasRunningTask(); if (flag) { log.info("有未完成的任务,结束"); return; } //todo:优先进上片机位 flag = rawGlassDispatchTask(); if (flag) { log.info("执行调度任务,结束"); return; } flag = outboundTask(); if (flag) { log.info("执行出库任务,结束"); return; } flag = warehouseTask(); if (flag) { log.info("执行入库任务"); return; } log.info("无任务执行,结束"); } @Scheduled(fixedDelay = 1000) public void rawStorageInCar() throws Exception { ReadWriteEntity entity = miloService.readFromOpcUa("A01-CC.dev.inCar"); String value = entity.getValue() + ""; if (!"1".equals(value)) { log.info("大车上没有架子"); return; } //查询任务 RawGlassStorageDetails one = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper() .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING)); if (one == null) { log.info("没有正在执行的任务"); return; } rawGlassStorageDetailsService.update(new LambdaUpdateWrapper().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("A01-CC.dev.reportWord"); String value = entity.getValue() + ""; if ("0".equals(value)) { log.info("当前任务未汇报,结束本次任务"); return; } RawGlassStorageDetails details = rawGlassStorageDetailsService.getOne(new LambdaUpdateWrapper() .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR)); if (null == details) { log.info("无执行中的任务"); return; } RawGlassStorageTask task = rawGlassStorageTaskService.getOne(new LambdaQueryWrapper() .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)); RawGlassStorageDetails targetDetails = generateDetails(details, task.getEndSlot()); Integer taskType = task.getTaskType(); if ("1".equals(value)) { log.info("将详情表的状态改为已出库"); rawGlassStorageDetailsService.update(new LambdaUpdateWrapper() .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() .eq(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW) .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)); switch (taskType) { case 1: log.info("1、入库,3、调度任务。{}", taskType); if (targetDetails.getRemainQuantity() > 0) { rawGlassStorageDetailsService.save(targetDetails); } break; case 2: 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; default: break; } } else { if (taskType.equals(Const.RAW_GLASS_TASK_TYPE_IN_REQUEST)) { rawGlassStorageDetailsService.update(new LambdaUpdateWrapper() .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() .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() .eq(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW) .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE)); } List list = new ArrayList<>(); list.add(generateReadWriteEntity("A01-CC.dev.confirmationWord", 1)); miloService.writeToOpcWord(list); } private boolean isHasRunningTask() { RawGlassStorageTask task = rawGlassStorageTaskService.getOne(new LambdaQueryWrapper() .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)); return task == null ? Boolean.FALSE : Boolean.TRUE; } /** * 原片调度:1、查询工程原片表,按照顺序将原片放入上片1号位,后续原片放上片2号位,出现尺寸替换,判断原上片位是否有玻璃,有 先出后进,无 直接进片 */ public boolean rawGlassDispatchTask() throws Exception { //查询当前系统正在执行的订单 List engineeringList = engineeringMapper.selectList(new LambdaQueryWrapper() .eq(Engineering::getState, Const.ENGINEERING_RUNNING).last("order by id")); if (CollectionUtils.isEmpty(engineeringList)) { log.info("没有正在执行的工程"); return false; } for (Engineering engineering : engineeringList) { boolean flag = rawGlassDispatchByEngineering(engineering.getStationCell(), engineering.getEngineerId()); if (flag) { return flag; } } return Boolean.FALSE; } /** * 出库任务:1、点出库,立马生成出片任务 2、点出库修改工位详情内的状态为待出库,定时任务扫描生成出库任务 */ public boolean outboundTask() throws Exception { List rawGlassList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper() .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; } //获取工位上是否有架子, List emptyLeftingList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper() .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL) .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 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(startSlot, lefting, startSlot, rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT); // List 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() .eq(RawGlassStorageDetails::getSlot, rawGlassList.get(0).getSlot()) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_WAIT_OUT) .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING)); return Boolean.TRUE; } /** * 入库任务:吊装位有玻璃,先去工位表查询空格子,生成入库任务从吊装位到目标格子 * * @throws Exception */ public boolean warehouseTask() throws Exception { List rawGlassList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper() .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) .gt(RawGlassStorageDetails::getRemainQuantity, 0) .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1 and device_id = 4") .inSql(RawGlassStorageDetails::getShelf, "select slot from raw_glass_storage_station where enable_state = 1 ")); if (CollectionUtil.isEmpty(rawGlassList)) { 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 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 出片中 //修改出片任务状态 rawGlassStorageDetailsService.update(new LambdaUpdateWrapper() .eq(RawGlassStorageDetails::getSlot, rawGlassList.get(0).getSlot()) .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING)); return Boolean.TRUE; } /** * @param stationCell 设备信息 5 、 6 * @param enginneerId 共亨号 * @return * @throws Exception */ private boolean rawGlassDispatchByEngineering(int stationCell, String enginneerId) throws Exception { //当前尺寸需要上片的数量 List 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> upListMap = pattenUsageList.stream() .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber)); //1、查询2个上片的原片详情 List rawGlassDetailsList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper() .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN).in(RawGlassStorageDetails::getDeviceId, stationCell) .orderByAsc(RawGlassStorageDetails::getSlot)); List upPattenUsage01VOS = upListMap.get("1"); UpPattenUsageVO usageVO = upPattenUsage01VOS.get(0); if (CollectionUtils.isEmpty(rawGlassDetailsList)) { //表示1上片位没有架子,直接找原片放入对应路线的1号上片位 RawGlassStorageDetails details = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper() .eq(RawGlassStorageDetails::getFilmsId, usageVO.getFilmsId()) .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(), endSlot, details.getSlot(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); //结束调度任务 修改工位状态(起始位)状态为103 RAW_GLASS_STATE_RUNNING 任务完成后将状态改为101 目标位新增一条数据,架子号为(起始位) rawGlassStorageDetailsService.update(new LambdaUpdateWrapper() .eq(RawGlassStorageDetails::getSlot, details.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING)); return Boolean.TRUE; } RawGlassStorageDetails glassStorageDetails = rawGlassDetailsList.get(0); 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 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() .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; } //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 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() .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; } else { //比较当前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() .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 upPattenUsage02VOS = upListMap.get("2"); if (CollectionUtils.isEmpty(upPattenUsage01VOS)) { return Boolean.FALSE; } usageVO = upPattenUsage02VOS.get(0); details = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper() .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() .eq(RawGlassStorageDetails::getSlot, details.getSlot()).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING)); // List 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() .eq(RawGlassStorageDetails::getSlot, endSlot).eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING)); // List 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; } } } private RawGlassStorageDetails generateDetails(RawGlassStorageDetails details, Integer targetSlot) { RawGlassStorageDetails targetDetails = new RawGlassStorageDetails(); // details.setDeviceId(); 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); readWriteEntity.setValue(value); return readWriteEntity; } }