UI-Project/config.js
@@ -1,9 +1,9 @@ export default { // serverUrl: "10.153.19.150:88/api", serverUrl: "192.168.1.199:88/api", serverUrl: "10.153.19.150:88/api", // serverUrl: "192.168.1.199:88/api", // serverUrl: "127.0.0.1:88/api", // serverUrl2: "10.153.19.150:88" serverUrl2: "192.168.1.199:88" serverUrl2: "10.153.19.150:88" // serverUrl2: "192.168.1.199:88" // serverUrl2: "127.0.0.1:88" //serverUrl:"res.abeim.cn" UI-Project/src/utils/constants.js
@@ -1,4 +1,4 @@ export const WebSocketHost = "192.168.1.199"; // export const WebSocketHost = "10.153.19.150"; // export const WebSocketHost = "192.168.1.199"; export const WebSocketHost = "10.153.19.150"; // export const WebSocketHost = "127.0.0.1"; export const host = "88"; UI-Project/src/views/NewPage.vue
@@ -5,11 +5,11 @@ <el-input v-model="current" style="margin-left: 20px;margin-top: 15px;width: 240px" placeholder="请输入工程号" @input="updateUrl"/> <el-button style="margin-top: 15px;margin-left: 15px;" type="primary" @click="fetchData">查询</el-button> </div> <el-card style="flex: 1;margin-left: 150px;margin-top: 50px;margin-right: 10px;width: 1558px;" height="900" v-loading="loading"> <el-card style="flex: 1;margin-left: 400px;margin-top: 50px;margin-right: 10px;width: 1000px;" height="900" v-loading="loading"> <div v-for="(row, rowIndex) in divsData" :key="rowIndex" class="row"> <div v-for="(rect, colIndex) in row" :key="colIndex" class="div-container"> <div style="text-align: center;">炉号:{{ getAdjustedRectsForRow(rowIndex)[0].layout_id }}</div> <el-scrollbar height="430px" width="1516px" style="background-color: #e9e9eb;"> <el-scrollbar height="550px" width="958px" style="background-color: #e9e9eb;"> <div style="position: relative;width: 100%;height: 100%;"> <div v-for="(rect, index) in getAdjustedRectsForRow(rowIndex)" @@ -99,20 +99,20 @@ if (rawRowData) { adjustedRectsPerRow.value[rowIndex] = rawRowData.map(rect => { let adjustedWidth, adjustedHeight,newX; if (rect.rotate_angle === 0) { if (rect.rotate_angle === 90) { newX = rect.olHeight -(rect.y_axis + rect.height); adjustedWidth = rect.height * (1516/rect.olHeight); adjustedHeight = rect.width * (430/rect.olWidth); adjustedWidth = rect.height * (958/rect.olHeight); adjustedHeight = rect.width * (550/rect.olWidth); } else { newX = rect.olHeight -(rect.y_axis + rect.width); adjustedWidth = rect.width * (1516/rect.olHeight); adjustedHeight = rect.height * (430/rect.olWidth); adjustedWidth = rect.width * (958/rect.olHeight); adjustedHeight = rect.height * (550/rect.olWidth); } let adjustedRect = { ...rect, y_axis: rect.x_axis * (430/rect.olWidth), x_axis: newX * (1516/rect.olHeight), // y_axis: rect.x_axis * (430/rect.olWidth), y_axis: rect.x_axis * (550/rect.olWidth), x_axis: newX * (958/rect.olHeight), // y_axis: rect.x_axis * (550/rect.olWidth), width: adjustedWidth, height: adjustedHeight, widtha: rect.width, @@ -137,10 +137,10 @@ margin-bottom: 20px; } .div-container { width: 1516px; width: 958px; float: left; background-color: #f4f4f5; height: 430px; height: 550px; box-sizing: border-box; } </style> hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -189,6 +189,8 @@ public static final Integer RAW_GLASS_TASK_TYPE_IN = 1; public static final Integer RAW_GLASS_TASK_TYPE_OUT = 2; public static final Integer RAW_GLASS_TASK_TYPE_DISPATCH = 3; public static final Integer RAW_GLASS_TASK_TYPE_IN_REQUEST = 4; public static final Integer RAW_GLASS_TASK_TYPE_OUT_REQUEST = 5; /** * 原片仓储任务类型 @@ -198,5 +200,29 @@ public static final Integer ENGINEERING_NEW = 0; public static final Integer ENGINEERING_RUNNING = 1; /** * 原片仓储任务类型 * 在笼内100 * 出笼101 * 准备出笼102 * 执行中103 * 在车上104 */ public static final Integer RAW_GLASS_STATE_IN = 100; public static final Integer RAW_GLASS_STATE_OUT = 101; public static final Integer RAW_GLASS_STATE_WAIT_OUT = 102; public static final Integer RAW_GLASS_STATE_RUNNING = 103; public static final Integer RAW_GLASS_STATE_CAR = 104; public static final List<Integer> RAW_GLASS_STATE_IN_ALL = Arrays.asList(100, 102, 103); public static final Integer RAW_GLASS_TASK_NEW = 0; public static final Integer RAW_GLASS_TASK_SUCCESS = 1; public static final Integer RAW_GLASS_TASK_FAILURE = 2; /** * 设备号 */ public static final List<Integer> RAW_GLASS_DEVICE = Arrays.asList(1, 2, 3); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/entity/Engineering.java
@@ -96,6 +96,10 @@ * 备注 */ private String notes; /** * 上片机线路 */ private String stationCell; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -16,6 +16,7 @@ threshold: 3 ratio: 10 cache: # 卧式理片最大尺寸 cache: # 卧式理片最大尺寸 cacheWidth: 3600 cacheHeight: 3000 max: # 第二条线的最大尺寸信息 @@ -33,9 +34,10 @@ kangaroohy: milo: enabled: false primary: default config: default: endpoint: opc.tcp://127.0.0.1:49320 endpoint: opc.tcp://zidonghua:49320 security-policy: basic256sha256 username: zsh password: 1qaz2wsx3edc4rfv hangzhoumesParent/moduleService/GlassStorageModule/pom.xml
@@ -24,6 +24,12 @@ <version>2.8.9</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.mes</groupId> <artifactId>servicebase</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> <properties> hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
@@ -2,14 +2,14 @@ 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.milo.model.ReadWriteEntity; import com.mes.milo.service.MiloService; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.rawglassstation.entity.RawGlassStorageStation; import com.mes.rawglassstation.service.RawGlassStorageStationService; import com.mes.rawglasstask.entity.RawGlassStorageTask; import com.mes.rawglasstask.service.RawGlassStorageTaskService; @@ -22,10 +22,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; /** @@ -50,186 +47,412 @@ @Resource private UpPattenUsageMapper upPattenUsageMapper; @Autowired @Autowired(required = false) private MiloService miloService; private static final List<String> liftingStation = Arrays.asList("1", "2"); private static final List<String> loadGlassStation = Arrays.asList("3", "4", "5", "6"); private static final List<Integer> LIFTING_STATION = Arrays.asList(4); 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); @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"); String requestValue = requestWord.getValue() + ""; if ("0".equals(requestValue)) { if ("1".equals(confireWord.getValue() + "")) { List<ReadWriteEntity> list = new ArrayList<>(); list.add(generateReadWriteEntity("storage-device.dev.Task Confirmation Word", 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)); 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("storage-device.dev.Loading rack"); String value = entity.getValue() + ""; if (!"1".equals(value)) { log.info("大车忙碌"); return; } //查询任务 RawGlassStorageDetails one = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>() .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING)); if (one == null) { return; } 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("storage-device.dev.Task report letter"); String value = entity.getValue() + ""; if ("0".equals(value)) { log.info("当前任务未汇报,结束本次任务"); return; } RawGlassStorageDetails details = rawGlassStorageDetailsService.getOne(new LambdaUpdateWrapper<RawGlassStorageDetails>() .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR)); if (null == details) { log.info("无执行中的任务"); return; } RawGlassStorageTask task = rawGlassStorageTaskService.getOne(new LambdaQueryWrapper<RawGlassStorageTask>() .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)); RawGlassStorageDetails targetDetails = generateDetails(details, task.getEndSlot()); Integer taskType = task.getTaskType(); if ("1".equals(value)) { 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); 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)); 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 { 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)); miloService.writeToOpcWord(list); } private boolean isHasRunningTask() { RawGlassStorageTask task = rawGlassStorageTaskService.getOne(new LambdaQueryWrapper<RawGlassStorageTask>() .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)); return task == null ? Boolean.FALSE : Boolean.TRUE; } /** * 原片调度:1、查询工程原片表,按照顺序将原片放入上片1号位,后续原片放上片2号位,出现尺寸替换,判断原上片位是否有玻璃,有 先出后进,无 直接进片 */ public boolean rawGlassDispatchTask() throws Exception { //查询当前系统正在执行的订单 List<Engineering> engineeringList = engineeringMapper.selectList(new LambdaQueryWrapper<Engineering>() .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<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")); if (CollectionUtil.isEmpty(rawGlassList)) { log.info("系统没有需要出库的原片信息"); return Boolean.FALSE; } //获取工位上是否有架子, 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) { log.info("吊装位当前都有架子,结束出片任务"); return Boolean.FALSE; } //获取需要落架的 //生成出库任务 rawGlassStorageDetailsService.generateTask(rawGlassList.get(0).getSlot(), 98, rawGlassList.get(0).getSlot(), 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); //修改出片任务状态 rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>() .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 */ @Scheduled(fixedDelay = 1000) public void warehouseTask() throws Exception { ReadWriteEntity entity = miloService.readFromOpcUa("rawglass.device.request"); String value = entity.getValueString(); if (!"1".equals(value)) { log.info("大车忙碌"); return; } public boolean warehouseTask() throws Exception { List<RawGlassStorageDetails> rawGlassList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>() .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) .inSql(RawGlassStorageDetails::getSlotId, "select slot from raw_glass_storage_station where enable_state = 1 and slot in (1,2)")); .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; log.info("吊装位被禁用/架子所在工位被禁用/无原片信息"); return Boolean.FALSE; } //查询工位信息是否有 List<RawGlassStorageStation> stationList = rawGlassStorageStationService.list(new LambdaQueryWrapper<RawGlassStorageStation>().notInSql(RawGlassStorageStation::getSlot, "select slot_id from raw_glass_storage_details where state = '100'") .eq(RawGlassStorageStation::getEnableState, Const.SLOT_ON)); if (CollectionUtil.isEmpty(stationList)) { log.info("没有空的工位"); return; } //获取吊装位架子信息 // 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; // } //生成进笼任务 generateTask(rawGlassList.get(0).getSlotId(), stationList.get(0).getSlot(), rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_IN); 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); //生成工位任务,将吊装位的玻璃状态改位进笼中 // 修改吊装位的原片状态为103 出片中 //修改出片任务状态 rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>() .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; } /** * 出库任务:1、点出库,立马生成出片任务 2、点出库修改工位详情内的状态为待出库,定时任务扫描生成出库任务 */ @Scheduled(fixedDelay = 1000) public void outboundTask() throws Exception { ReadWriteEntity entity = miloService.readFromOpcUa("rawglass.device.request"); String value = entity.getValueString(); if (!"2".equals(value)) { log.info("大车忙碌"); return; } List<RawGlassStorageDetails> rawGlassList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>() .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_OUT_ING) .inSql(RawGlassStorageDetails::getSlotId, "select slot from raw_glass_storage_station where enable_state = 1 and slot not in (1,2)")); if (CollectionUtil.isEmpty(rawGlassList)) { log.info("系统没有需要出库的原片信息"); return; } List<Integer> emptyLeftingList = rawGlassStorageDetailsService.listBySlotState(liftingStation, Arrays.asList(Const.GLASS_STATE_IN)); if (CollectionUtil.isEmpty(emptyLeftingList)) { log.info("吊装位当前都有原片,结束出片任务"); } //生成出库任务 generateTask(rawGlassList.get(0).getSlotId(), emptyLeftingList.get(0), rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT); } /** * 原片调度:1、查询工程原片表,按照顺序将原片放入上片1号位,后续原片放上片2号位,出现尺寸替换,判断原上片位是否有玻璃,有 先出后进,无 直接进片 */ @Scheduled(fixedDelay = 1000) public void rawGlassDispatchTask() throws Exception { ReadWriteEntity entity = miloService.readFromOpcUa("rawglass.device.request"); String value = entity.getValueString(); if (!"2".equals(value)) { log.info("大车忙碌"); return; } //查询当前系统正在执行的订单 Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>().eq(Engineering::getState, Const.ENGINEERING_RUNNING).last("order by id limit 1")); if (null == engineering) { log.info("没有正在执行的工程"); return; } private boolean rawGlassDispatchByEngineering(String stationCell, String enginneerId) throws Exception { //当前尺寸需要上片的数量 List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(engineering.getEngineerId()); List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(enginneerId); if (CollectionUtils.isEmpty(pattenUsageList)) { log.info("正在执行的工程原片无可上片的原片信息"); return; return Boolean.FALSE; } Map<String, List<UpPattenUsageVO>> upListMap = pattenUsageList.stream() .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber)); //todo:按照工程号按照工程下未完成的尺寸的顺序,当1号上片位架子上的当前尺寸玻璃少于3片且2号上片位无原片玻璃,则将去调度玻璃去2号上片位, //todo:当一号上片位架子上的玻璃位空或者当前尺寸用完时时,将2号(有玻璃)上片位调度到1号上片位 //1、查询4个上片的原片详情 //1、查询2个上片的原片详情 List<RawGlassStorageDetails> rawGlassDetailsList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>() .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN).in(RawGlassStorageDetails::getSlotId, loadGlassStation)); .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN).in(RawGlassStorageDetails::getDeviceId, stationCell) .orderByAsc(RawGlassStorageDetails::getSlot)); List<UpPattenUsageVO> upPattenUsage01VOS = upListMap.get("1"); UpPattenUsageVO usageVO = upPattenUsage01VOS.get(0); if (CollectionUtils.isEmpty(rawGlassDetailsList)) { //表示1上片位没有原片,直接找原片放入对应的上片位 List<UpPattenUsageVO> upPattenUsage01VOS = upListMap.get("1"); UpPattenUsageVO usageVO = upPattenUsage01VOS.get(0); //表示1上片位没有架子,直接找原片放入对应路线的1号上片位 RawGlassStorageDetails 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") .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") ); generateTask(details.getSlotId(), 1, details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); //结束调度任务 rawGlassStorageDetailsService.generateTask(details.getSlot(), rawGlassDetailsList.get(0).getSlot(), 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) .set(RawGlassStorageDetails::getDeviceId, Const.RAW_GLASS_STATE_RUNNING)); return Boolean.TRUE; } Map<Integer, List<RawGlassStorageDetails>> listMap = rawGlassDetailsList.stream().collect(Collectors.groupingBy(RawGlassStorageDetails::getSlotId)); RawGlassStorageDetails rawGlass03Details = listMap.get(3).get(0); RawGlassStorageDetails rawGlass04Details = listMap.get(4).get(0); // RawGlassStorageDetails rawGlass05Details = listMap.get(5).get(0); // RawGlassStorageDetails rawGlass06Details = listMap.get(6).get(0); //todo:上片1号位2种清空方式:方式一:原片用完 方式二:当前尺寸用完 if (null == rawGlass03Details) { if (null == rawGlass04Details) { //表示1上片位没有原片,直接找原片放入对应的上片位 List<UpPattenUsageVO> upPattenUsage01VOS = upListMap.get("1"); UpPattenUsageVO usageVO = upPattenUsage01VOS.get(0); RawGlassStorageDetails 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") ); generateTask(details.getSlotId(), 1, details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); //结束调度任务 } else { //将2号上片位的原片放入1号上片位 generateTask(2, 1, rawGlass04Details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); //结束调度任务 } } else { if (null == rawGlass04Details) { List<UpPattenUsageVO> upPattenUsage01VOS = upListMap.get("2"); if (CollectionUtils.isEmpty(upPattenUsage01VOS)) { return; 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; } UpPattenUsageVO usageVO = upPattenUsage01VOS.get(0); RawGlassStorageDetails details = rawGlassStorageDetailsService.getOne(new LambdaQueryWrapper<RawGlassStorageDetails>() } log.info("上片位都有架子,结束本条线{}的调度任务", stationCell); return Boolean.FALSE; } RawGlassStorageDetails glassStorageDetails = rawGlassDetailsList.get(0); if (LOAD_STATION_MAX.contains(glassStorageDetails.getSlot())) { log.info("上片位2号有架子,结束本条线{}的调度任务", stationCell); 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") ); generateTask(details.getSlotId(), 2, details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); .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.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; } 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)); 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; } } private RawGlassStorageDetails generateDetails(RawGlassStorageDetails details, Integer targetSlot) { /** * 生成原片仓储任务 * * @param startSlot * @param endSlot * @param patternQuantity * @param taskType * @return */ private boolean generateTask(int startSlot, int endSlot, Integer patternQuantity, int taskType) { RawGlassStorageTask task = RawGlassStorageTask.builder() .originateSlot(startSlot) .endSlot(endSlot) .patternQuantity(patternQuantity) .taskType(taskType) .createTime(new Date()).build(); return rawGlassStorageTaskService.save(task); 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; } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/controller/LoadPositionController.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/mapper/LoadPositionMapper.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/mapper/LoadPositionMapper.xml
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/service/LoadPositionService.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/service/impl/LoadPositionServiceImpl.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/controller/RawGlassStorageDetailsController.java
@@ -1,16 +1,15 @@ package com.mes.rawglassdetails.controller; import com.mes.entity.request.GeneralRequest; import com.mes.rawglassdetails.entity.request.RawGlassRequest; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.userinfo.entity.vo.SysUserVO; import com.mes.utils.Result; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 前端控制器 @@ -22,14 +21,23 @@ @RequestMapping("/rawGlassStorageDetails") public class RawGlassStorageDetailsController { @Autowired private RawGlassStorageDetailsService rawGlassStorageDetailsService; @Autowired private RawGlassStorageDetailsService rawGlassStorageDetailsService; @ApiOperation("入库请求") @PostMapping("/warehousingRequest") public Result<String> warehousingRequest(int leftingStation) { return Result.build( 200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.warehousingRequest(leftingStation)); } @ApiOperation("原片入库") @PostMapping("/patternWarehousing") public Result<String> patternWarehousing(@Validated @RequestBody RawGlassRequest request) { return Result.build( 200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.patternWarehousing(request)); 200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.patternWarehousing(request)); } @ApiOperation("更新剩余数量") @PostMapping("/updateQuantity") public Result<Object> updateQuantity(@Validated @RequestBody RawGlassRequest request) { @@ -46,4 +54,12 @@ public Result<Object> outWarehousing(@RequestBody Long slotId) { return Result.success(rawGlassStorageDetailsService.outWarehousing(slotId)); } @ApiOperation("出库请求") @PostMapping("/outWarehousingRequest") public Result<String> outWarehousingRequest(int leftingStation) { return Result.build( 200, "入库已完成,等待任务执行", rawGlassStorageDetailsService.outWarehousingRequest(leftingStation)); } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/RawGlassStorageDetails.java
@@ -10,7 +10,7 @@ /** * <p> * * * </p> * * @author wf @@ -22,54 +22,48 @@ private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 设备id */ private Integer deviceId; /** * 格子id */ private Integer slotId; private Integer slot; /** * 架子信息 */ private Integer shelf; /** * 原片宽 */ private Double patternWidth; /** * 原片高 */ private Double patternHeight; /** * 原片厚度 */ private Double patternThickness; /** * 膜系 */ private String filmsId; /** * 创建时间 */ private Date createTime; /** * 剩余数量 */ private Integer remainQuantity; /** * 状态 */ private int state; private Integer state; } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java
@@ -1,6 +1,5 @@ package com.mes.rawglassdetails.entity.request; import com.mes.userinfo.entity.vo.SysUserVO; import lombok.Data; /** @@ -9,7 +8,7 @@ * @Description: */ @Data public class RawGlassRequest extends SysUserVO { public class RawGlassRequest { /** * 原片宽 @@ -34,10 +33,10 @@ /** * 剩余数量 */ private String remainQuantity; private Integer remainQuantity; /** * 栅格号 */ private String slotId; private String slot; } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
@@ -23,5 +23,5 @@ * @param state * @return */ List<Integer> listBySlotState(@Param("leftingStation") List<String> liftingStation, @Param("state") List<Integer> state); List<Integer> listBySlotState(@Param("leftingStation") List<Integer> liftingStation, @Param("state") List<Integer> state); } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/mapper/xml/RawGlassStorageStationMapper.xml
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/mapper/xml/RawGlassStorageTaskMapper.xml
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
@@ -14,15 +14,12 @@ List<RawGlassStorageDetails> selectDetails(); /** * 删除表 先在这里创 然后点那个相关问题 * * @return boolean */ boolean deleteRawGlassStorageDetails(String device_id); /** * 原片入库 @@ -38,5 +35,11 @@ String outWarehousing(Long slotId); List<Integer> listBySlotState(List<String> liftingStation, List<Integer> state); List<Integer> listBySlotState(List<Integer> liftingStation, List<Integer> state); String warehousingRequest(int leftingStation); String outWarehousingRequest(int leftingStation); boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType); } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -1,5 +1,6 @@ package com.mes.rawglassdetails.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,9 +9,13 @@ import com.mes.rawglassdetails.entity.request.RawGlassRequest; import com.mes.rawglassdetails.mapper.RawGlassStorageDetailsMapper; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.rawglasstask.entity.RawGlassStorageTask; import com.mes.rawglasstask.service.RawGlassStorageTaskService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; @@ -22,6 +27,10 @@ @Service @Slf4j public class RawGlassStorageDetailsServiceImpl extends ServiceImpl<RawGlassStorageDetailsMapper, RawGlassStorageDetails> implements RawGlassStorageDetailsService { @Autowired RawGlassStorageTaskService rawGlassStorageTaskService; @Override public boolean deleteRawGlassStorageDetails(String device_id) { QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>(); @@ -40,13 +49,42 @@ @Override public String patternWarehousing(RawGlassRequest request) { //todo:原片信息存入详情表 public String warehousingRequest(int leftingStation) { RawGlassStorageDetails storageDetails = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>() .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL)); if (null != storageDetails) { log.info("当前吊装位有架子,结束本地入库请求"); return "fail"; } List<Integer> shelfList = listBySlotState(Const.RAW_GLASS_DEVICE, Const.RAW_GLASS_STATE_IN_ALL); if (CollectionUtils.isEmpty(shelfList)) { log.info("当前工位不存在可用的空架子"); return "fail"; } Integer shelf = shelfList.get(0); log.info("生成任务"); generateTask(shelf, leftingStation, shelf, 0, Const.RAW_GLASS_TASK_TYPE_IN_REQUEST); //生成一条详情数据 仅记录架子状态 RawGlassStorageDetails details = new RawGlassStorageDetails(); BeanUtils.copyProperties(request, details); details.setState(Const.GLASS_STATE_IN); details.setCreateTime(new Date()); details.setSlot(shelf); details.setShelf(shelf); details.setState(Const.RAW_GLASS_STATE_RUNNING); save(details); return "success"; } @Override public String patternWarehousing(RawGlassRequest request) { RawGlassStorageDetails glassStorageDetails = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>() .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .eq(RawGlassStorageDetails::getSlot, request.getSlot())); if (null == glassStorageDetails) { log.info("当前吊装位没有架子"); } //todo:原片信息存入详情表 BeanUtils.copyProperties(request, glassStorageDetails); log.info("覆盖后得到的工位详情信息为:{}", glassStorageDetails); updateById(glassStorageDetails); return "success"; } @@ -55,27 +93,71 @@ update( new LambdaUpdateWrapper<RawGlassStorageDetails>() .set(RawGlassStorageDetails::getRemainQuantity, request.getRemainQuantity()) .eq(RawGlassStorageDetails::getSlotId, request.getSlotId())); .eq(RawGlassStorageDetails::getSlot, request.getSlot()) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)); return "success"; } @Override public String deleteWarehousing(Long slotId) { update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlotId, slotId) .set(RawGlassStorageDetails::getState, Const.GLASS_STATE_OUT)); update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlot, slotId) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT) .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)); return "success"; } @Override public String outWarehousing(Long slotId) { update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlotId, slotId) .set(RawGlassStorageDetails::getState, Const.GLASS_STATE_OUT_ING)); update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlot, slotId) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_WAIT_OUT)); //生成一条详情数据 仅记录架子状态 return "success"; } @Override public List<Integer> listBySlotState(List<String> liftingStation, List<Integer> state) { public List<Integer> listBySlotState(List<Integer> liftingStation, List<Integer> state) { return baseMapper.listBySlotState(liftingStation, state); } @Override public String outWarehousingRequest(int leftingStation) { //对应工位是否有空架子 RawGlassStorageDetails details = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) .eq(RawGlassStorageDetails::getSlot, leftingStation)); if (null == details) { log.info("无空架子,结束本地出片请求"); return "fail"; } //生成一条详情数据 仅记录架子状态 update(new LambdaUpdateWrapper<RawGlassStorageDetails>() .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); return "success"; } /** * 生成原片仓储任务 * * @param startSlot * @param endSlot * @param patternQuantity * @param taskType * @return */ @Override public boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType) { RawGlassStorageTask task = RawGlassStorageTask.builder() .startSlot(startSlot) .endSlot(endSlot) .patternQuantity(patternQuantity) .taskType(taskType) .taskState(Const.RAW_GLASS_TASK_NEW) .shelf(shelf) .createTime(new Date()).build(); return rawGlassStorageTaskService.save(task); } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/controller/RawGlassStorageStationController.java
@@ -29,9 +29,6 @@ } else { return Result.build(200, "禁用", result); } } } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
@@ -17,33 +17,24 @@ private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 设备id */ private Integer deviceId; /** * 栅格号 */ private Integer slot; /** * 栅格号 */ private Integer shelf; /** * 启用标记 */ private String enableState; /** * 开始工位 */ private Integer startSlot; /** * 目标工位 */ private Integer endSlot; } hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java
@@ -27,32 +27,30 @@ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 起始格子 */ private Integer originateSlot; private Integer startSlot; /** * 目标格子 */ private Integer endSlot; /** * 架子号 */ private Integer shelf; /** * 原片数量 */ private Integer patternQuantity; /** * 任务类型 */ private Integer taskType; /** * 任务状态 */ private Integer taskState; /** * 创建时间 */ hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/mapper/RawUsageMapper.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/mapper/RawUsageMapper.xml
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/request/RawUsageAndShelfRack.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/request/StorageTaskRequest.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
@@ -5,7 +5,7 @@ strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: hangzhoumes: url: jdbc:mysql://127.0.0.1:3306/yiwumes?serverTimezone=GMT%2b8 url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@ spring: profiles: active: prod active: dev application: name: glassStorage liquibase: @@ -16,5 +16,12 @@ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl kangaroohy: milo: enabled: false enabled: true primary: default config: default: endpoint: opc.tcp://192.168.10.241:49320 security-policy: basic256sha256 username: liu password: 1qaz2wsx3edc4rfv hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
File was renamed from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/mapper/xml/RawGlassStorageDetailsMapper.xml @@ -3,17 +3,22 @@ <mapper namespace="com.mes.rawglassdetails.mapper.RawGlassStorageDetailsMapper"> <select id="listBySlotState" resultType="java.lang.Integer"> select t.slot from raw_glass_storage_station t inner JOIN raw_glass_storage_details t1 on t.slot = t1.slot_id and t.enable_state = 1 and t.slot in <foreach collection="leftingStation" item="item" open='(' close=')' separator=','> #{item} </foreach> and t1.state not in SELECT T.SLOT FROM RAW_GLASS_STORAGE_STATION T LEFT JOIN RAW_GLASS_STORAGE_DETAILS AS T1 ON T.DEVICE_ID = T1.DEVICE_ID AND T.SLOT = T1.SLOT AND T1.STATE IN <foreach collection="state" item="item" open='(' close=')' separator=','> #{item} </foreach> WHERE T.ENABLE_STATE = 1 AND T.DEVICE_ID IN <foreach collection="leftingStation" item="item" open='(' close=')' separator=','> #{item} </foreach> AND T1.SLOT IS NULL </select> </mapper> hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageStationMapper.xml
@@ -4,7 +4,7 @@ <resultMap id="baseMap" type="com.mes.rawglassdetails.entity.RawGlassStorageDetails"> <result column="device_id" property="deviceId"/> <result column="slot" property="slotId"/> <result column="slot" property="slot"/> <result column="pattern_width" property="patternWidth"/> <result column="pattern_height" property="patternHeight"/> <result column="pattern_thickness" property="patternThickness"/> @@ -27,7 +27,7 @@ T.ENABLE_STATE FROM RAW_GLASS_STORAGE_STATION T LEFT JOIN RAW_GLASS_STORAGE_DETAILS T1 ON T.DEVICE_ID = T1.DEVICE_ID AND T.SLOT = T1.SLOT_ID AND T.SLOT = T1.SLOT AND T1.STATE = 100 </select> </mapper> hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml
File was deleted hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml
File was deleted hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -6,7 +6,7 @@ application: name: temperingGlass liquibase: enabled: true enabled: false mybatis-plus: mapper-locations: classpath*:mapper/*.xml configuration: hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelog.sql
@@ -195,7 +195,7 @@ start_slot int NULL DEFAULT NULL COMMENT '起始格子', end_slot int NULL DEFAULT NULL COMMENT '目标格子', pattern_quantity int NULL DEFAULT NULL COMMENT '原片数量', enable_type 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 '创建时间', PRIMARY KEY (id) USING BTREE @@ -209,5 +209,71 @@ ALTER TABLE engineering ADD COLUMN station_cell varchar(20); -- 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');