UI-Project/src/views/Slicecage/slicecage.vue
@@ -960,7 +960,7 @@ <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="info" @click="dialogFormVisibles=true;fetchFlows()">{{ $t('searchOrder.searchlayout') }}</el-button> <el-switch style="margin-top: 5px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('searchOrder.temperedswitch')" @change="handleChange" /> <el-button style="margin-top: 10px;margin-left: 10px;margin-bottom: 10px;" id="searchButton" type="primary" @click="dialogFormVisibleaDownGlasss = true">人工下片 @click="dialogFormVisibleaDownGlasss = true">标签打印 </el-button> <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;"> 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/java/com/mes/job/CacheGlassTask.java
@@ -80,6 +80,12 @@ @Value("${mes.max.secondLength}") private String secondLength; @Value("${mes.cache.cacheWidth}") private double cacheWidth; @Value("${mes.cache.cacheHeight}") private double cacheHeight; @Value("${mes.min.one.firstLength}") private String minOneFirstLength; @@ -94,7 +100,7 @@ public static String engineerId = ""; //@Scheduled(fixedDelay = 1000) @Scheduled(fixedDelay = 1000) public void plcHomeEdgTask() { Date startDate = new Date(); log.info("本次任务开始执行时间:{}", startDate); @@ -107,6 +113,13 @@ String out10Glassstate = plcParameterObject.getPlcParameter("A10_glass_status").getValue(); String confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress(); String currentSlot = plcParameterObject.getPlcParameter("Current_slot").getValue(); // taskRequestTypeValue = "3"; // out08Glassstate = "1"; // out10Glassstate = "1"; // currentSlot = "2"; // confirmationWrodValue = "0"; // glassIdeValue = "P24092706|15|5"; log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态分别为:A09:{}、A10:{},当前格子号为:{}", taskRequestTypeValue, glassIdeValue, confirmationWrodValue, out08Glassstate, out10Glassstate, currentSlot); @@ -132,7 +145,7 @@ //09空闲 :1 10空闲 :2 都空闲:3 其他0 log.info("2、出片请求,且确认字为0,执行出片任务"); outTo(Integer.parseInt(out08Glassstate), Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0); Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", Integer.parseInt(currentSlot)); } else if ("3".equals(taskRequestTypeValue)) { log.info("2、进片和出片都空闲,执行出片任务"); //加笼子里面是否有玻璃,有先出,无玻璃先进 @@ -165,9 +178,9 @@ Damage damage = new Damage(); damage.setGlassId(e.getGlassId()); damage.setLine(e.getEndCell()); damage.setWorkingProcedure("冷加工"); damage.setWorkingProcedure("磨边"); damage.setRemark("磨边前卧式理片"); damage.setStatus(0); damage.setStatus(1); damage.setType(e.getTaskStatus()); return damage; }).collect(Collectors.toList()); @@ -187,6 +200,16 @@ */ public void inTo(String glassId, String confirmationWrodAddress, String currentSlot) { log.info("1、按照玻璃id:{}获取玻璃小片信息,当前格子为:{}", glassId, currentSlot); GlassInfo feedGlassInfo = glassInfoService.getOne( new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getGlassId, glassId) ); if (Math.max(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheWidth || Math.min(feedGlassInfo.getWidth(), feedGlassInfo.getHeight()) > cacheHeight) { log.info("1.1、玻璃超过卧式理片最大尺寸:{}", feedGlassInfo); return; } //添加进片任务 查找空格 EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot), Boolean.FALSE); Assert.isTrue(null != nearestEmpty, "格子已满"); @@ -233,11 +256,14 @@ .eq(GlassInfo::getHeight, glassInfo.getHeight()) .eq(GlassInfo::getThickness, glassInfo.getThickness()) .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid()) .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId()) .ne(GlassInfo::getGlassId, glassInfo.getGlassId()) .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer()) .eq(GlassInfo::getLayer, glassInfo.getLayer()) .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId()) .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " + "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()) "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight() + " and state != 100") .orderByAsc(GlassInfo::getTemperingLayoutId) .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence) .last("Limit 1"); @@ -272,17 +298,28 @@ // 获取待出笼的玻璃需要替换的玻璃信息 EdgStorageCageDetails swapGlassDetailInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getGlassId, swapGlassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)); // 玻璃小片表中玻璃已经替换,更新卧理笼内现有的准备出笼的玻璃信息, if (null == swapGlassDetailInfo) { GlassInfo glassInfoBase = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getGlassId, swapGlassId)); //需要替换的玻璃为存进卧理,仅需更新当前需要出笼的玻璃信息即可 edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getGlassId, glassId).set(EdgStorageCageDetails::getGlassId, swapGlassId)); .eq(EdgStorageCageDetails::getGlassId, glassId) .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfoBase.getTemperingLayoutId()) .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfoBase.getTemperingFeedSequence())); } else { //需要替换的玻璃都在卧理内,按照玻璃id对调玻璃信息:对调玻璃id即可 edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getId, glassInfo.getId()).set(EdgStorageCageDetails::getGlassId, swapGlassId)); .eq(EdgStorageCageDetails::getId, glassInfo.getId()) .set(EdgStorageCageDetails::getTemperingLayoutId, swapGlassDetailInfo.getTemperingLayoutId()) .set(EdgStorageCageDetails::getTemperingFeedSequence, swapGlassDetailInfo.getTemperingFeedSequence()) ); edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getId, swapGlassDetailInfo.getId()).set(EdgStorageCageDetails::getGlassId, glassId)); .eq(EdgStorageCageDetails::getId, swapGlassDetailInfo.getId()) .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence()) ); } } @@ -317,6 +354,7 @@ //定义出片玻璃信息 int endcell = 0; EdgStorageCageDetails glassInfo = null; boolean flag = queryMaxMinDiff(threshold); log.info("1、获取钢化版图是否超过阈值:{}", flag); if (flag) { @@ -417,7 +455,7 @@ } } } return saveOutGlassMessage(glassInfo, endcell, confirmationWrodAddress, glassId, currentSlot); return saveOutGlassMessageBySlot(glassInfo, endcell, confirmationWrodAddress, glassId, currentSlot); } /** @@ -659,6 +697,7 @@ log.info("4、添加出片任务,玻璃id:{},任务类型:{},起始位置:{},结束位置:{}", glassInfo.getGlassId(), 2, glassInfo.getSlot(), endcell); if (glassInfo.getGlassId().equals(glassId)) { log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); EdgStorageCageDetails details = new EdgStorageCageDetails(); BeanUtils.copyProperties(glassInfo, details); @@ -718,7 +757,7 @@ BeanUtils.copyProperties(glassInfo, details); } else { GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); BeanUtils.copyProperties(glassInfo, details); BeanUtils.copyProperties(one, details); } EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(currentSlot, Boolean.TRUE); Assert.isTrue(null != nearestEmpty, "格子已满,无法执行直通任务"); @@ -730,7 +769,7 @@ log.info("6、添加出片任务是否完成:{}", taskCacheStatus); } else { log.info("5、非直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); if (endcell != currentSlot) { if (!glassInfo.getSlot().equals(currentSlot)) { EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) .eq(EdgStorageCageDetails::getSlot, currentSlot).eq(EdgStorageCageDetails::getWidth, glassInfo.getWidth()) @@ -738,7 +777,6 @@ ); if (null != currentGlass) { glassInfo = currentGlass; endcell = currentSlot; } } //玻璃信息替换 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -15,7 +15,7 @@ mes: threshold: 3 ratio: 10 cache: # 卧式理片最大尺寸 cache: # 卧式理片最大尺寸 cacheWidth: 4000 cacheHeight: 3000 max: # 第二条线的最大尺寸信息 @@ -30,11 +30,13 @@ secondLength: 400 sequence: order: false 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'); hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -156,7 +156,7 @@ //下片数量-1 for (DownGlassTask downGlassTask : downGlassTaskList ) { if (Const.GLASS_CACHE_TYPE_OUT_ALL.equals(downGlassTask.getTaskType())) { if (Const.GLASS_CACHE_TYPE_OUT_ALL.contains(downGlassTask.getTaskType())) { downWorkstationService.update( new LambdaUpdateWrapper<DownWorkstation>() .setSql("racks_number = racks_number-1") @@ -689,7 +689,6 @@ downGlassInfoService.save(downGlassInfo); //生成任务信息 GlassInfo glassInfo = new GlassInfo(); downStorageCageDetails.setLayer(0); BeanUtils.copyProperties(downStorageCageDetails, glassInfo); //删除理片笼表拿走/破损数据数据 damageService.deleteByGlassId(glassInfo.getGlassId());