hangzhoumesParent.zipBinary files differ
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -34,7 +34,7 @@ public static final Integer GLASS_STATE_IN = 100; public static final Integer GLASS_STATE_OUT = 101; public static final Integer GLASS_STATE_TAKE = 200; public static final Integer A10_OUT_TARGET_DAMAGE = 201; public static final Integer GLASS_STATE_DAMAGE = 201; /** * 卧式理片笼详情表玻璃状态 @@ -56,4 +56,78 @@ public static final Integer EDG_GLASS_START = 1; public static final Integer EDG_GLASS_SUCCESS = 2; /** * 磨边任务玻璃状态 * 1单机自动状态 * 2联机自动状态 * 3手动状态 */ public static final Integer BIG_STORAGE_STAND_ALONE = 1; public static final Integer BIG_STORAGE_ONLINE = 2; public static final Integer BIG_STORAGE_MT = 3; /** * 大理片笼请求 * 0 大理片笼无请求 * 1 大理片笼进片请求 */ public static final Integer BIG_STORAGE_REQUEST = 0; public static final Integer BIG_STORAGE_REQUEST_IN = 1; /** * 卧转立进片请求 * 1 任务生成 * 2 卧转立进片完成 * 3 大车进片完成 * 4 大理片笼进片完成 */ public static final Integer BIG_STORAGE_IN_NEW = 1; public static final Integer BIG_STORAGE_IN_UP = 2; public static final Integer BIG_STORAGE_IN_CAR = 3; public static final Integer BIG_STORAGE_IN_SLOT = 4; /** * 卧转立出片请求 * 1 任务生成 * 2 玻璃进大车完成 * 3 大车出片完成 */ public static final Integer BIG_STORAGE_OUT_NEW = 1; public static final Integer BIG_STORAGE_OUT_CAR = 2; public static final Integer BIG_STORAGE_OUT_SUCCESS = 3; /** * 卧转立出片请求 * 1 上车等待 * 2 上车启动 */ public static final Integer BIG_STORAGE_IN_WAIT = 1; public static final Integer BIG_STORAGE_IN_RUN = 2; /** * 大理片笼宽度 及 玻璃间距 */ public static final Integer BIG_STORAGE_WIDTH = 5000; public static final Integer BIG_STORAGE_GAP = 20; /** * 钢化小片表 * -1 生成任务 * 0 出片完成 * 1 摆片完成 * 2 进炉完成 * 3 钢化完成 * 4 出片完成 * 5 破损 * 6 拿走 */ public static final Integer TEMPERING_NEW =-1; public static final Integer TEMPERING_OUT =0; public static final Integer TEMPERING_DROP =1; public static final Integer TEMPERING_START =2; public static final Integer TEMPERING_SUCCESS =3; public static final Integer TEMPERING_END =4; public static final Integer TEMPERING_DAMAGE =5; public static final Integer TEMPERING_TAKE =6; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -490,7 +490,7 @@ public EdgStorageCageDetails queryChangeGlassInfo(int endcell, String glassId) { //获取笼子内数量前二的玻璃数量 MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>(); wrapper.select("count(t.glass_id), t.width, t.height") wrapper.select("count(t.glass_id) as count, t.width, t.height") .eq("t.state", Const.GLASS_STATE_IN) .groupBy("t.width, t.height"); if (endcell == Const.A09_OUT_TARGET_POSITION) { hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-cz.ymlcopy from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-loc.yml copy to hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-cz.yml
File was copied from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-loc.yml @@ -5,12 +5,17 @@ strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: hangzhoumes: url: jdbc:mysql://192.168.56.10:3306/hangzhoumes?serverTimezone=GMT%2b8 url: jdbc:mysql://192.168.1.199:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver pp: url: jdbc:mysql://192.168.1.199:3306/pp?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver @@ -18,6 +23,8 @@ nacos: discovery: server-addr: 127.0.0.1:8848 application: name: cacheGlass redis: database: 0 host: 127.0.0.1 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-dev.yml
@@ -4,33 +4,18 @@ primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: # hangzhoumes: # 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 # pp: # url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8 # username: root # password: beibo.123/ # driver-class-name: com.mysql.cj.jdbc.Driver # salve_hangzhoumes: # url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes # username: sa # password: beibo.123/ # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver hangzhoumes: url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?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 pp: url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8 url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-loc.yml
File was deleted hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@ spring: profiles: active: dev active: cz application: name: cacheGlass mybatis-plus: @@ -17,3 +17,4 @@ secondLength: 2500 sequence: order: false hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
@@ -1,16 +1,15 @@ package com.mes; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.yulichang.query.MPJLambdaQueryWrapper; import com.github.yulichang.query.MPJQueryWrapper; import com.github.yulichang.toolkit.JoinWrappers; import com.mes.common.config.Const; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.edgstoragecage.service.EdgStorageCageService; import com.mes.edgstoragecage.service.impl.EdgStorageCageServiceImpl; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.job.CacheGlassTask; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeLayout; import com.mes.pp.mapper.OptimizeDetailMapper; @@ -24,6 +23,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -35,15 +35,14 @@ */ @Slf4j @RunWith(SpringRunner.class) @SpringBootTest(classes = CacheGlassModuleApplication.class) @SpringBootTest(classes = CacheGlassModuleApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class CacheGlassModuleApplicationTest { @Autowired EdgStorageCageService edgStorageCageService; @Autowired EdgStorageCageDetailsService edgStorageCageDetailsService; @Autowired @Resource TaskCacheMapper taskCacheMapper; @Autowired @@ -52,17 +51,57 @@ OptimizeDetailMapper optimizeDetailMapper; @Autowired GlassInfoService glassInfoService; @Autowired CacheGlassTask cacheGlassTask; @Test public void testFindPath() { String url=getClass().getResource("").getPath(); String url = getClass().getResource("").getPath(); log.info("完整路径:{}", Arrays.asList(url)); } @Test public void queryChangeGlassInfo() { cacheGlassTask.queryChangeGlassInfo(Const.A10_OUT_TARGET_POSITION, ""); } @Test public void testChangeCellSize() { // String url=getClass().getResource("").getPath(); // log.info("完整路径:{}", Arrays.asList(url)); cacheGlassTask.queryChangeGlassInfo(Const.A09_OUT_TARGET_POSITION, ""); } @Test public void testCellSize() { // String url=getClass().getResource("").getPath(); // log.info("完整路径:{}", Arrays.asList(url)); cacheGlassTask.outTo(0, 0, "", "NG24051802A001|1|1|1|1", 0); } @Test public void testinTo() { // String url=getClass().getResource("").getPath(); // log.info("完整路径:{}", Arrays.asList(url)); // NG24051802A001|1|4|1|4 // cacheGlassTask.inTo("NG24051802A001|1|1|1|1", "1", "1"); // cacheGlassTask.inTo("NG24051802A001|1|4|1|4", "1", "1"); cacheGlassTask.inTo("NG24051802A001|1|1|2|1", "1", "1"); } @Test public void testChangeGlassInfo() { // String url=getClass().getResource("").getPath(); // log.info("完整路径:{}", Arrays.asList(url)); // NG24051802A001|1|4|1|4 cacheGlassTask.queryAndChangeGlass("NG24051802A001|1|1|1|1"); // cacheGlassTask.queryAndChangeGlass("NG24051802A001|1|4|1|4"); } @Test public void testSqlServer() { List<TaskCache> list=taskCacheMapper.selectList(null); log.info("数据{}",list); List<TaskCache> list = taskCacheMapper.selectList(null); log.info("数据{}", list); log.info("Sql数据:{}", Arrays.asList(list)); } @@ -75,53 +114,56 @@ @Test public void testglassinfo() { List<GlassInfo> glassInfos=glassInfoService.selectId("7"); List<GlassInfo> glassInfos = glassInfoService.selectId("7"); log.info("玻璃数据数据:{}", Arrays.asList(glassInfos)); } @Test public void testCacheGlass() { List<Map<String, Object>> map= edgStorageCageService.selectEdgStorageCages(); List<Map<String, Object>> map = edgStorageCageService.selectEdgStorageCages(); log.info("笼内信息:{}", Arrays.asList(map)); } @Test public void testSelectCacheEmpty() { List<EdgStorageCage> map= edgStorageCageService.selectCacheEmpty(); List<EdgStorageCage> map = edgStorageCageService.selectCacheEmpty(); log.info("笼内空格:{}", Arrays.asList(map)); } @Test public void testScan() { List<Map<String, Object>> map= edgStorageCageDetailsService.selectCutTerritory(); List<Map<String, Object>> map = edgStorageCageDetailsService.selectCutTerritory(); log.info("切割当前版图信息:{}", Arrays.asList(map)); } @Test public void testPpOptimizeDetail() { List<OptimizeDetail> optimizeDetail=optimizeDetailMapper.selectList(new QueryWrapper<OptimizeDetail>() List<OptimizeDetail> optimizeDetail = optimizeDetailMapper.selectList(new QueryWrapper<OptimizeDetail>() .eq("project_no", "P24032204") .eq("stock_id",5) .eq("stock_id", 5) ); log.info("切割当前版图信息:{}", Arrays.asList(optimizeDetail)); } @Test public void testOptimizeDetail() { List<Map<String, Object>> map2=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class) List<Map<String, Object>> map2 = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class) .selectAll(OptimizeDetail.class) .selectAs(OptimizeLayout::getWidth,"olWidth") .selectAs(OptimizeLayout::getWidth,"olHeight") .select(OptimizeLayout::getWidth,OptimizeLayout::getHeight) .leftJoin(OptimizeLayout.class,on-> on.eq(OptimizeLayout::getProjectNo,OptimizeDetail::getProjectNo) .eq(OptimizeLayout::getStockId,OptimizeDetail::getStockId)) .eq(OptimizeDetail::getProjectNo,"P24032204" ) .eq(OptimizeDetail::getStockId,5) .selectAs(OptimizeLayout::getWidth, "olWidth") .selectAs(OptimizeLayout::getWidth, "olHeight") .select(OptimizeLayout::getWidth, OptimizeLayout::getHeight) .leftJoin(OptimizeLayout.class, on -> on.eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo) .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId)) .eq(OptimizeDetail::getProjectNo, "P24032204") .eq(OptimizeDetail::getStockId, 5) ); log.info("切割当前版图信息1:{}", Arrays.asList(map2)); } @Test public void testOutTask() { EdgStorageCageDetails edgStorageCageDetails=edgStorageCageDetailsService.selectConformGlass("1",3); EdgStorageCageDetails edgStorageCageDetails = edgStorageCageDetailsService.selectConformGlass("1", 3); log.info("出片任务:{}", Arrays.asList(edgStorageCageDetails)); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
New file @@ -0,0 +1,14 @@ package com.mes.bigstorage.entity; import lombok.Data; /** * @Author : zhoush * @Date: 2024/6/11 16:45 * @Description: */ @Data public class BigStorageDTO { private Integer slot; private Integer width; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.BigStorageDTO; import com.mes.glassinfo.entity.GlassInfo; import java.util.List; @@ -30,4 +32,11 @@ void finishBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails); void outBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails); /** * 按照版图信息获取进片笼子信息 * * @param glassInfo */ BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -1,9 +1,8 @@ package com.mes.bigstorage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.github.yulichang.base.MPJBaseService; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.entity.GlassInfo; import java.util.List; @@ -17,7 +16,7 @@ * @author zhoush * @since 2024-03-27 */ public interface BigStorageCageService extends IService<BigStorageCage> { public interface BigStorageCageService extends MPJBaseService<BigStorageCage> { void updateRemainWidth(int slot); hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -1,8 +1,12 @@ package com.mes.bigstorage.service.impl; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.BigStorageDTO; import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; @@ -10,6 +14,7 @@ import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper; import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper; import com.mes.common.config.Const; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; @@ -49,14 +54,14 @@ */ @Override public List<BigStorageCageDetails> selectTask(int taskType) { if(taskType==1){ if (taskType == 1) { //进片任务数据 LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, 1) .or() .eq(BigStorageCageDetails::getState, 2); List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(feedWrapper); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList=bigStorageCageFeedTaskMapper.selectList(null); List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(null); Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); @@ -66,14 +71,14 @@ bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); } return bigStorageCageDetailsList; }else{ } else { //出片任务数据 LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>(); outWrapper.eq(BigStorageCageDetails::getState, 3) .or() .eq(BigStorageCageDetails::getState, 4); List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(outWrapper); List<BigStorageCageOutTask> bigStorageCageOutTaskList=bigStorageCageOutTaskMapper.selectList(null); List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper); List<BigStorageCageOutTask> bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(null); Map<String, BigStorageCageOutTask> listMap = bigStorageCageOutTaskList.stream() .collect(Collectors.toMap(BigStorageCageOutTask::getGlassId, task -> task)); @@ -90,27 +95,27 @@ * 判断当前玻璃是否能上车 */ @Override public double selectGetBoard(String plcFeedReqLine){ double carWidth=5000; public double selectGetBoard(String plcFeedReqLine) { double carWidth = 5000; LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, plcFeedReqLine); List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(feedWrapper); List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper); LambdaQueryWrapper<BigStorageCageFeedTask> bigStorageCageFeedTaskWrapper = new LambdaQueryWrapper<>(); bigStorageCageFeedTaskWrapper .eq(BigStorageCageFeedTask::getTaskState,plcFeedReqLine) .eq(BigStorageCageFeedTask::getLine,plcFeedReqLine); .eq(BigStorageCageFeedTask::getTaskState, plcFeedReqLine) .eq(BigStorageCageFeedTask::getLine, plcFeedReqLine); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList=bigStorageCageFeedTaskMapper.selectList(bigStorageCageFeedTaskWrapper); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(bigStorageCageFeedTaskWrapper); Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) { BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); } for (BigStorageCageDetails bigStorageCageDetails:bigStorageCageDetailsList ) { if(bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState()==0){ for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList ) { if (bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState() == 0) { carWidth -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + bigStorageCageDetails.getGap(); } } @@ -121,25 +126,25 @@ //栓除出片任务.更新格子宽度 @Override public void deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails){ public void deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { baseMapper.deleteById(bigStorageCageDetails.getId()); bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); } //理片笼详情破损 @Override public void damageBigStorageCageDetails(String glassId){ LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper=new LambdaQueryWrapper<>(); temperingGlassInfoWrapper.eq(TemperingGlassInfo::getGlassId,glassId); TemperingGlassInfo temperingGlassInfo=temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper); public void damageBigStorageCageDetails(String glassId) { LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper = new LambdaQueryWrapper<>(); temperingGlassInfoWrapper.eq(TemperingGlassInfo::getGlassId, glassId); TemperingGlassInfo temperingGlassInfo = temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper); LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper=new LambdaQueryWrapper<>(); bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getGlassId,glassId); BigStorageCageDetails bigStorageCageDetails=baseMapper.selectOne(bigStorageCageDetailsWrapper); LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper = new LambdaQueryWrapper<>(); bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getGlassId, glassId); BigStorageCageDetails bigStorageCageDetails = baseMapper.selectOne(bigStorageCageDetailsWrapper); if(temperingGlassInfo.getState()==-2){ if (temperingGlassInfo.getState() == -2) { temperingGlassInfoMapper.deleteById(temperingGlassInfo); }else{ } else { temperingGlassInfo.setState(5); temperingGlassInfoMapper.updateById(temperingGlassInfo); } @@ -151,11 +156,11 @@ //查询玻璃信息 @Override public BigStorageCageDetails selectBigStorageCageDetails(String glassId){ LambdaQueryWrapper<GlassInfo> glassInfoWrapper=new LambdaQueryWrapper<>(); glassInfoWrapper.eq(GlassInfo::getGlassId,glassId); GlassInfo glassInfo=glassInfoMapper.selectOne(glassInfoWrapper); BigStorageCageDetails bigStorageCageDetails=new BigStorageCageDetails(); public BigStorageCageDetails selectBigStorageCageDetails(String glassId) { LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>(); glassInfoWrapper.eq(GlassInfo::getGlassId, glassId); GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper); BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); BeanUtils.copyProperties(glassInfo, bigStorageCageDetails); bigStorageCageDetails.setState(0); bigStorageCageDetails.setGap(20); @@ -164,19 +169,19 @@ //理片笼详情添加 @Override public void insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails){ public void insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { baseMapper.insert(bigStorageCageDetails); bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot()); } //理片笼详情完成 @Override public void finishBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails){ if(bigStorageCageDetails.getState()==1||bigStorageCageDetails.getState()==2){ public void finishBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { if (bigStorageCageDetails.getState() == 1 || bigStorageCageDetails.getState() == 2) { bigStorageCageDetails.setState(0); baseMapper.updateById(bigStorageCageDetails); bigStorageCageFeedTaskMapper.deleteById(bigStorageCageDetails.getBigStorageCageFeedTask().getId()); }else{ } else { baseMapper.deleteById(bigStorageCageDetails.getId()); bigStorageCageOutTaskMapper.deleteById(bigStorageCageDetails.getBigStorageCageOutTask().getId()); } @@ -185,25 +190,67 @@ //手动出片 @Override public void outBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails){ LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper =new LambdaQueryWrapper<>(); public void outBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper = new LambdaQueryWrapper<>(); temperingGlassInfoWrapper .eq(TemperingGlassInfo::getGlassId,bigStorageCageDetails.getGlassId()); TemperingGlassInfo temperingGlassInfo=temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper); if(temperingGlassInfo.getGlassId()==null){ LambdaQueryWrapper<GlassInfo> glassInfoWrapper=new LambdaQueryWrapper<>(); .eq(TemperingGlassInfo::getGlassId, bigStorageCageDetails.getGlassId()); TemperingGlassInfo temperingGlassInfo = temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper); if (temperingGlassInfo.getGlassId() == null) { LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>(); glassInfoWrapper .eq(GlassInfo::getGlassId,bigStorageCageDetails.getGlassId()); GlassInfo glassInfo=glassInfoMapper.selectOne(glassInfoWrapper); TemperingGlassInfo temperingGlassInfo1=new TemperingGlassInfo(); .eq(GlassInfo::getGlassId, bigStorageCageDetails.getGlassId()); GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper); TemperingGlassInfo temperingGlassInfo1 = new TemperingGlassInfo(); BeanUtils.copyProperties(glassInfo, temperingGlassInfo1); if(temperingGlassInfo.getTemperingLayoutId()!=null){ if (temperingGlassInfo.getTemperingLayoutId() != null) { temperingGlassInfo1.setState(-1); }else{ } else { temperingGlassInfo1.setState(-2); } temperingGlassInfoMapper.insert(temperingGlassInfo1); } } @Override public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) { // MPJLambdaWrapper<BigStorageDTO> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class) // .selectAll(BigStorageDTO.class) // .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot) // .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) // .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1) // .last("limit 1"); BigStorageDTO bigStorageDTO = null; MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class) .selectAsClass(BigStorageCage.class, BigStorageDTO.class) .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot) .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1) .last("limit 1"); bigStorageDTO = bigStorageCageService.selectJoinOne(BigStorageDTO.class, wrapper); if (null != bigStorageDTO) { return bigStorageDTO; } BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() .eq(BigStorageCage::getRemainWidth, Const.BIG_STORAGE_WIDTH) .inSql(BigStorageCage::getDeviceId, "select distinct device_id from big_storage_cage_details where tempering_layout_id = " + glassInfo.getTemperingLayoutId()) .last("limit 1")); if (null != bigStorageCage) { bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); return bigStorageDTO; } bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() .eq(BigStorageCage::getRemainWidth, Const.BIG_STORAGE_WIDTH) .last("limit 1")); Assert.isTrue(null != bigStorageCage, "没有空余的笼子存放玻璃"); bigStorageDTO = new BigStorageDTO(); bigStorageDTO.setWidth(bigStorageCage.getRemainWidth()); bigStorageDTO.setSlot(bigStorageCage.getSlot()); return bigStorageDTO; } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
@@ -2,12 +2,13 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; import java.util.Date; /** * <p> @@ -27,8 +28,8 @@ /** * 主键id */ @ApiModelProperty(value = "主键id", position = 2) @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty(value = "主键id", position = 2) @TableId(value = "id", type = IdType.AUTO) private Long id; /** @@ -41,7 +42,7 @@ * 目标位置 */ @ApiModelProperty(value = "目标位置", position = 4) private Integer tragetSlot; private Integer targetSlot; /** * 玻璃类型 @@ -60,6 +61,21 @@ */ @ApiModelProperty(value = "线路", position = 7) private Integer line; /** * 宽度 */ @ApiModelProperty(value = "宽度", position = 8) private Integer width; /** * 高度 */ @ApiModelProperty(value = "高度", position = 8) private Integer height; /** * 创建时间 */ @ApiModelProperty(value = "创建时间", position = 8) private Date createTime; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
@@ -1,8 +1,10 @@ package com.mes.bigstoragetask.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import java.util.List; /** * <p> @@ -15,4 +17,5 @@ @DS("salve_hangzhoumes") public interface BigStorageCageFeedTaskMapper extends BaseMapper<BigStorageCageFeedTask> { List<String> querySitToUpGlass(); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageFeedTaskService.java
@@ -1,9 +1,8 @@ package com.mes.bigstoragetask.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import java.util.List; @@ -20,4 +19,9 @@ void addFeedTask(BigStorageCageDetails slotInfo, Integer plcFeedReqLine, int taskType); List<BigStorageCageFeedTask> querybigStorageCageFeedTask(int taskState); /** * 查询卧转立玻璃是否进片完成 */ List<String> querySitToUpGlass(); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageFeedTaskServiceImpl.java
@@ -1,16 +1,13 @@ package com.mes.bigstoragetask.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper; import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import net.bytebuddy.matcher.FilterableList; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** @@ -30,15 +27,19 @@ bigStorageCageFeedTask.setId(slotInfo.getId()); bigStorageCageFeedTask.setTaskState(0); bigStorageCageFeedTask.setLine(plcFeedReqLine); bigStorageCageFeedTask.setTragetSlot(slotInfo.getSlot()); bigStorageCageFeedTask.setTaskType(taskType); baseMapper.insert(bigStorageCageFeedTask); } @Override public List<BigStorageCageFeedTask> querybigStorageCageFeedTask(int taskState){ LambdaQueryWrapper<BigStorageCageFeedTask> getFeedTaskWrapper=new LambdaQueryWrapper<>(); getFeedTaskWrapper.eq(BigStorageCageFeedTask::getTaskState,taskState); public List<BigStorageCageFeedTask> querybigStorageCageFeedTask(int taskState) { LambdaQueryWrapper<BigStorageCageFeedTask> getFeedTaskWrapper = new LambdaQueryWrapper<>(); getFeedTaskWrapper.eq(BigStorageCageFeedTask::getTaskState, taskState); return baseMapper.selectList(getFeedTaskWrapper); } @Override public List<String> querySitToUpGlass() { return baseMapper.querySitToUpGlass(); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/controller/DamageController.java
New file @@ -0,0 +1,21 @@ package com.mes.damage.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 前端控制器 * </p> * * @author wu * @since 2024-06-13 */ @RestController @RequestMapping("/glassinfo/damage") public class DamageController { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/entity/Damage.java
New file @@ -0,0 +1,44 @@ package com.mes.damage.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * * </p> * * @author wu * @since 2024-06-13 */ @Data @EqualsAndHashCode(callSuper = false) public class Damage implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; private String glassId; private Integer deviceId; private String engineerId; private Integer temperingLayoutId; private LocalDateTime damageTime; private String remark; private Integer type; private Integer status; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/mapper/DamageMapper.java
New file @@ -0,0 +1,16 @@ package com.mes.damage.mapper; import com.mes.damage.entity.Damage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper 接口 * </p> * * @author wu * @since 2024-06-13 */ public interface DamageMapper extends BaseMapper<Damage> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/service/DamageService.java
New file @@ -0,0 +1,16 @@ package com.mes.damage.service; import com.mes.damage.entity.Damage; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 服务类 * </p> * * @author wu * @since 2024-06-13 */ public interface DamageService extends IService<Damage> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
@@ -1,13 +1,12 @@ package com.mes.edgglasstask.entity; import cn.hutool.core.date.DateTime; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import net.sf.jsqlparser.expression.DateTimeLiteralExpression; import java.io.Serializable; import java.util.Date; /** * <p> @@ -73,6 +72,6 @@ * 线路 */ @ApiModelProperty(value = "时间", position = 9) private DateTime time; private Date time; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -1,24 +1,39 @@ package com.mes.job; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.BigStorageDTO; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; import com.mes.bigstoragetask.service.BigStorageCageOutTaskService; import com.mes.common.S7object; import com.mes.common.config.Const; import com.mes.device.PlcParameterObject; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.edgstoragetask.service.TaskCacheService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.temperingglass.service.TemperingGlassInfoService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** * @author SNG-015 @@ -42,109 +57,335 @@ @Resource private TemperingGlassInfoService temperingGlassInfoService; PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; @Value("${mes.sequence.order}") private boolean sequenceOrder; public static boolean bigStorageCageFullAlarm = false; private int line1Time=0; private int line2Time=0; private int line1Time = 0; private int line2Time = 0; /** * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ // @Scheduled(fixedDelay = 5000) // public void plcStorageCageTask() throws InterruptedException { // // PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; // try { // // String plcFeedGlassid = ""; // String plcFeedReqLine = "0"; // if ("1".equals(plcParameterObject.getPlcParameter("D01Request").getValue())) { // plcFeedReqLine = "1"; // plcFeedGlassid = plcParameterObject.getPlcParameter("D01ID1").getValue(); // } // if ("1".equals(plcParameterObject.getPlcParameter("D04Request").getValue())) { // plcFeedReqLine = "2"; // plcFeedGlassid = plcParameterObject.getPlcParameter("D04ID1").getValue(); // } // line1Time += 1; // line2Time += 1; // // if (!("0".equals(plcFeedReqLine))) { // log.info("1、Plc进片请求时"); // BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); // GlassInfo glassInfo = glassInfoService.getById(plcFeedGlassid); // log.info("2、根据玻璃id获取玻璃信息" + glassInfo); // if (bigStorageCageDetailsService.selectGetBoard(plcFeedReqLine) >= 0) { // BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails); // if (slotInfo != null) { // int taskType = edgGlassTaskInfoService.judgeTasktype(plcFeedReqLine); // log.info("3、查询任务表判断当前任务类型为上车等到还是上车启动" + taskType); // bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType); // log.info("4、添加任务到任务表"); // bigStorageCageFullAlarm = false; // } else { // bigStorageCageFullAlarm = true; // } // } else { // log.info("当前玻璃宽度不够上车" + glassInfo); // if (!("1".equals(plcFeedReqLine))) { // S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1); // } else { // S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1); // } // } // } else { // List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskService.querybigStorageCageFeedTask(1); // log.info("5、查询任务表是否有已经完成的进片任务" + bigStorageCageFeedTaskList.size()); // for (BigStorageCageFeedTask bigStorageCageFeedTask : bigStorageCageFeedTaskList // ) { // BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); // bigStorageCageDetails.setId(bigStorageCageFeedTask.getId()); // bigStorageCageDetails.setState(1); // bigStorageCageDetailsService.updateById(bigStorageCageDetails); // log.info("6、修改理片笼详情玻璃状态"); // bigStorageCageFeedTaskService.removeById(bigStorageCageFeedTask); // log.info("7、删除已经完成的进片任务"); // } // //启动阈值 // if (line1Time >= 300) { // if ("0".equals(plcParameterObject.getPlcParameter("D05Go").getValue())) { // S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1); // } // } // if (line2Time >= 300) { // if ("0".equals(plcParameterObject.getPlcParameter("D02Go").getValue())) { // S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1); // } // } // } // // //查询出片表是否有任务未完成的任务 // List<BigStorageCageOutTask> bigStorageCageOutTask = bigStorageCageOutTaskService.querybigStorageCageOutTask(0); // if (bigStorageCageOutTask.size() == 0) { // boolean result = bigStorageCageService.outGlass(); // log.info("8、没有未完成任务时调用出片接口"); // if (result == false) { // temperingGlassInfoService.schedulingTask(); // } // } // bigStorageCageOutTaskService.updateOutTask(); // log.info("9、根据任务表状态修改钢化小片表任务状态"); // // //来不及送时直接走 // String line = Integer.toString(edgGlassTaskInfoService.startTask()); // // if (!(line.equals(plcFeedReqLine))) { // S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1); // } else { // S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1); // } // // // } catch (Exception e) { // e.printStackTrace(); // } // } @Scheduled(fixedDelay = 5000) public void plcStorageCageTask() throws InterruptedException { try { String plcFeedGlassid = ""; String plcFeedReqLine = "0"; if ("1".equals(plcParameterObject.getPlcParameter("D01Request").getValue())) { plcFeedReqLine = "1"; plcFeedGlassid=plcParameterObject.getPlcParameter("D01ID1").getValue(); } if ("1".equals(plcParameterObject.getPlcParameter("D04Request").getValue())) { plcFeedReqLine = "2"; plcFeedGlassid=plcParameterObject.getPlcParameter("D04ID1").getValue(); } line1Time+=1; line2Time+=1; if (!("0".equals(plcFeedReqLine))) { log.info("1、Plc进片请求时"); BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); GlassInfo glassInfo = glassInfoService.getById(plcFeedGlassid); log.info("2、根据玻璃id获取玻璃信息" + glassInfo); if(bigStorageCageDetailsService.selectGetBoard(plcFeedReqLine)>=0){ BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails); if (slotInfo != null) { int taskType = edgGlassTaskInfoService.judgeTasktype(plcFeedReqLine); log.info("3、查询任务表判断当前任务类型为上车等到还是上车启动" + taskType); bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType); log.info("4、添加任务到任务表"); bigStorageCageFullAlarm = false; } else { bigStorageCageFullAlarm = true; } }else{ log.info("当前玻璃宽度不够上车" + glassInfo); if(!("1".equals(plcFeedReqLine))){ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1); }else{ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1); } } } else { List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskService.querybigStorageCageFeedTask(1); log.info("5、查询任务表是否有已经完成的进片任务" + bigStorageCageFeedTaskList.size()); for (BigStorageCageFeedTask bigStorageCageFeedTask : bigStorageCageFeedTaskList ) { BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); bigStorageCageDetails.setId(bigStorageCageFeedTask.getId()); bigStorageCageDetails.setState(1); bigStorageCageDetailsService.updateById(bigStorageCageDetails); log.info("6、修改理片笼详情玻璃状态"); bigStorageCageFeedTaskService.removeById(bigStorageCageFeedTask); log.info("7、删除已经完成的进片任务"); } //启动阈值 if(line1Time>=300){ if("0".equals(plcParameterObject.getPlcParameter("D05Go").getValue())){ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1); } } if(line2Time>=300){ if("0".equals(plcParameterObject.getPlcParameter("D02Go").getValue())){ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1); } } } //查询出片表是否有任务未完成的任务 List<BigStorageCageOutTask> bigStorageCageOutTask=bigStorageCageOutTaskService.querybigStorageCageOutTask(0); if(bigStorageCageOutTask.size()==0){ boolean result=bigStorageCageService.outGlass(); log.info("8、没有未完成任务时调用出片接口"); if (result==false){ temperingGlassInfoService.schedulingTask(); } } bigStorageCageOutTaskService.updateOutTask(); log.info("9、根据任务表状态修改钢化小片表任务状态"); //来不及送时直接走 String line=Integer.toString(edgGlassTaskInfoService.startTask()); if(!(line.equals(plcFeedReqLine))){ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1); }else{ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1); } } catch (Exception e) { e.printStackTrace(); public void plcToHomeEdgScan() { PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); String d01ID1 = plcParameterObject.getPlcParameter("D01ID1").getValue(); String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue(); String d04ID1 = plcParameterObject.getPlcParameter("D04ID1").getValue(); log.info("1、获取到的请求字d01为:{},获取到的扫描ID为:{};获取到的请求字d04为:{},获取到的扫描ID为:{};", d01Request, d01ID1, d04Request, d04ID1); if (!"1".equals(d01Request) && !"1".equals(d04Request)) { log.info("两条线未收到进片任务,结束本次扫描进卧转立任务"); return; } // 0:不干预 ; 1:条件满足情况下立即发车 String d02GoAdress = plcParameterObject.getPlcParameter("D02Go").getAddress(); // 0:不干预 ; 1:条件满足情况下立即发车 String d05GoAdress = plcParameterObject.getPlcParameter("D05Go").getAddress(); Boolean flag01 = Boolean.FALSE; Boolean flag04 = Boolean.FALSE; //按照线路及玻璃id获取相邻两块玻璃 卧转立上的玻璃 if ("1".equals(d01Request)) { flag01 = judgeGlassTypeStatus(d01ID1, Const.A09_OUT_TARGET_POSITION); } if ("1".equals(d04Request)) { flag04 = judgeGlassTypeStatus(d04ID1, Const.A10_OUT_TARGET_POSITION); } if (flag01 && flag04) { //比较最早一片任务的版图id及版序 求出卧转立的线路 Integer startLine = getStartLine(); //计算目标格子,发送启动任务 computeTargetByLine(startLine, d02GoAdress, d05GoAdress); } else if (flag01 || flag04) { Integer startLine = flag01.equals(Boolean.TRUE) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION; //计算目标格子,发送启动任务 computeTargetByLine(startLine, d02GoAdress, d05GoAdress); } else { log.info("两条线未收到进片任务,结束本次扫描进卧转立任务"); } } @Scheduled(fixedDelay = 5000) public void plcToHomeEdgFreeCarTask() { PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; String freeCar = plcParameterObject.getPlcParameter("freeCar").getValue(); if ("1".equals(freeCar)) { log.info("大车非空闲"); return; } String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue(); String d01ID1 = plcParameterObject.getPlcParameter("D01ID1").getValue(); String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue(); String d04ID1 = plcParameterObject.getPlcParameter("D04ID1").getValue(); log.info("1、获取到的请求字d01为:{},获取到的扫描ID为:{};获取到的请求字d04为:{},获取到的扫描ID为:{};", d01Request, d01ID1, d04Request, d04ID1); //两条线都有进卧转立任务,直接结束 if (Const.BIG_STORAGE_REQUEST_IN.equals(d01Request) && Const.BIG_STORAGE_REQUEST_IN.equals(d04Request) && StringUtils.isNotBlank(d01ID1) && StringUtils.isNotBlank(d04ID1)) { log.info("两条线都存在进片任务,结束任务"); return; } //获取两条线卧转立是否有玻璃,且任务状态都为2 List<String> lineList = bigStorageCageFeedTaskService.querySitToUpGlass(); if (CollectionUtils.isEmpty(lineList)) { log.info("两条线卧转立为空或者有进片任务未完成,结束任务"); return; } // 0:不干预 ; 1:条件满足情况下立即发车 String d02GoAdress = plcParameterObject.getPlcParameter("D02Go").getAddress(); // 0:不干预 ; 1:条件满足情况下立即发车 String d05GoAdress = plcParameterObject.getPlcParameter("D05Go").getAddress(); String line1 = lineList.get(0); String flagLine = line1.equals(Const.A09_OUT_TARGET_POSITION) ? d01ID1 : d04ID1; if (lineList.size() == 1) { //发送 if (StringUtils.isNotBlank(flagLine)) { return; } //计算任务表进片格子 发送进片任务 computeTargetByLine(Integer.parseInt(flagLine), d02GoAdress, d05GoAdress); } if (StringUtils.isBlank(d01ID1) && StringUtils.isBlank(d04ID1)) { //比较最早一片任务的版图id及版序 求出卧转立的线路 Integer line = getStartLine(); //计算任务表进片格子 发送进片任务 computeTargetByLine(line, d02GoAdress, d05GoAdress); return; } int outLine = StringUtils.isBlank(d01ID1) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION; //计算任务表进片格子 发送进片任务 computeTargetByLine(outLine, d02GoAdress, d05GoAdress); } @Scheduled(fixedDelay = 5000) public void plcToHomeEdgOutTask() { } /** * 按照玻璃id判断玻璃状态及卧转立是否可直接启动 */ public Boolean judgeGlassTypeStatus(String glassId, Integer line) { //1、获取任务表中相邻玻璃 List<EdgGlassTaskInfo> edgGlassTaskInfoList = edgGlassTaskInfoService.list(new LambdaQueryWrapper<EdgGlassTaskInfo>() .eq(EdgGlassTaskInfo::getLine, line) .apply("time >= (select time from edg_glass_task_info where glass_id = '" + glassId + "')") .orderByAsc(EdgGlassTaskInfo::getTime)); Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "识别玻璃信息未出现在尺寸表中,获取相邻两块玻璃失败"); //2、获取卧转立剩余宽度 Map<String, Object> map = bigStorageCageFeedTaskService.getMap(new QueryWrapper<BigStorageCageFeedTask>() .select("cast(5000 - sum(width + 20) as INT)as remainWidth") .eq("line", line).eq("task_state", Const.BIG_STORAGE_IN_UP)); Integer remainWidth = null == map ? 5000 : Integer.parseInt(map.get("remainWidth") + ""); //2、获取卧转立 Integer widthFirst = edgGlassTaskInfoList.get(0).getWidth(); if (edgGlassTaskInfoList.size() == 1) { if (remainWidth >= widthFirst) { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst); return Boolean.FALSE; } else { //记录无法放下玻璃,后续判断启动 return Boolean.TRUE; } } Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth(); if (remainWidth >= widthFirst) { if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthSecond); } else { addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthSecond); } return Boolean.FALSE; } else { return Boolean.TRUE; } } /** * 添加任务信息 */ private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width) { BigStorageCageFeedTask bigStorageCageFeedTask = new BigStorageCageFeedTask(); bigStorageCageFeedTask.setGlassId(glassId); bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_REQUEST_IN); bigStorageCageFeedTask.setLine(line); bigStorageCageFeedTask.setTaskType(taskType); bigStorageCageFeedTask.setWidth(width); bigStorageCageFeedTask.setCreateTime(new Date()); return bigStorageCageFeedTaskService.save(bigStorageCageFeedTask); } /** * 获取需要启动的线路:两条线都可启动 获取第一片玻璃版图id最小 版序最大的线路 * * @return */ public Integer getStartLine() { List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() .inSql(BigStorageCageFeedTask::getId, "select min(id) from big_storage_cage_feed_task where task_state = 2 group by line")); Assert.isFalse(CollectionUtils.isEmpty(taskList), "卧转立两条线都没有玻璃进片任务"); Map<String, Integer> taskMap = taskList.stream().collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, BigStorageCageFeedTask::getLine)); GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() .in(GlassInfo::getGlassId, taskMap.keySet()) .orderByAsc(GlassInfo::getTemperingLayoutId) .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence) .last("limit 1")); return taskMap.get(glassInfo.getGlassId()); } /** * 计算任务表进片线路的目标格子,并启动任务 */ public boolean computeTargetByLine(Integer line, String d02GoAdress, String d05GoAdress) { //1、获取任务表中的所有玻璃(指定线路且已经进卧转立完成) List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>() .eq(BigStorageCageFeedTask::getLine, line) .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP) .orderByAsc(BigStorageCageFeedTask::getId)); //2、去笼子内查找是否可以继续存放的笼子 List<String> glassIds = taskList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList()); List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIds)); AtomicReference<Integer> temperingLayoutIdTemp = new AtomicReference<>(0); AtomicReference<Integer> temperingFeedSequenceTemp = new AtomicReference<>(0); AtomicReference<BigStorageDTO> bigStorageDTO = new AtomicReference<>(new BigStorageDTO()); Map<String, GlassInfo> glassInfoMap = glassInfos.stream().collect(Collectors.toMap(GlassInfo::getGlassId, p -> p)); List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>(); AtomicBoolean taskFlag = new AtomicBoolean(Boolean.TRUE); taskList.stream().forEach(e -> { BigStorageCageDetails cageDetails = new BigStorageCageDetails(); //按照版图信息获取进片笼子格子号 GlassInfo info = glassInfoMap.get(e.getGlassId()); BeanUtils.copyProperties(info, cageDetails); if (temperingLayoutIdTemp.equals(info.getTemperingLayoutId()) && temperingFeedSequenceTemp.equals(info.getTemperingFeedSequence() + 1) && info.getWidth() <= bigStorageDTO.get().getWidth()) { bigStorageDTO.get().setWidth(bigStorageDTO.get().getWidth() - info.getWidth().intValue() - Const.BIG_STORAGE_GAP); } else { bigStorageDTO.set(bigStorageCageDetailsService.queryTargetSlotByTempering(info)); } e.setTargetSlot(bigStorageDTO.get().getSlot()); cageDetails.setSlot(bigStorageDTO.get().getSlot()); cageDetails.setState(Const.GLASS_STATE_IN); temperingLayoutIdTemp.set(info.getTemperingLayoutId()); temperingFeedSequenceTemp.set(info.getTemperingFeedSequence()); bigStorageCageDetailsList.add(cageDetails); taskFlag.set(bigStorageCageFeedTaskService.updateById(e)); if (!taskFlag.get()) { return; } }); //3、更新进片任务表 遇到问题:无法批量更新,批量更新无法走指定从库 //4、在详情表中加入进片玻璃信息 bigStorageCageDetailsService.saveBatch(bigStorageCageDetailsList); if (taskFlag.get()) { String lineAddress = line.equals(Const.A09_OUT_TARGET_POSITION) ? d02GoAdress : d05GoAdress; // S7object.getinstance().plccontrol.writeWord(lineAddress, (short) 1); } return taskFlag.get(); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.ymlcopy from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-loc.yml copy to hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
File was copied from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-loc.yml @@ -5,12 +5,12 @@ strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: hangzhoumes: url: jdbc:mysql://192.168.56.10:3306/hangzhoumes?serverTimezone=GMT%2b8 url: jdbc:mysql://192.168.1.199:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -3,10 +3,13 @@ spring: profiles: active: prod active: dev application: name: cacheVerticalGlass mybatis-plus: mapper-locations: classpath*:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mes: sequence: order: false hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
New file @@ -0,0 +1,18 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper"> <select id="querySitToUpGlass" resultType="java.lang.String"> select t.line from ( select line, COUNT(glass_id) as total_count, SUM(case task_state when 2 then 1 else 0 end) as real_count from big_storage_cage_feed_task where task_state in (1, 2) group by line ) t where t.total_count = t.real_count </select> </mapper> hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -1,14 +1,16 @@ package com.mes; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.common.config.Const; import com.mes.job.PlcStorageCageTask; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.Arrays; import java.util.List; import java.util.Map; /** * @Author : zhoush @@ -17,12 +19,42 @@ */ @Slf4j @RunWith(SpringRunner.class) @SpringBootTest(classes = CacheVerticalClassModuleApplication.class) @SpringBootTest(classes = CacheVerticalClassModuleApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class CacheVerticalGlassModuleApplicationTest { @Autowired BigStorageCageService bigStorageCageService; @Autowired PlcStorageCageTask plcStorageCageTask; @Test public void testFindPath() { log.info("完整路径:{}", Arrays.asList("123")); } @Test public void computeTargetByLine() { // log.info("获取大理片笼信息:{}",bigStorageCageService.querybigStorageCageDetail()); plcStorageCageTask.computeTargetByLine(2001, "", ""); } @Test public void judgeGlassTypeStatus() { // log.info("获取大理片笼信息:{}",bigStorageCageService.querybigStorageCageDetail()); plcStorageCageTask.judgeGlassTypeStatus("P24060403|6|7", Const.A09_OUT_TARGET_POSITION); } @Test public void getStartLine() { // log.info("获取大理片笼信息:{}",bigStorageCageService.querybigStorageCageDetail()); Integer startLine = plcStorageCageTask.getStartLine(); log.info("---------{}", startLine); } @Test public void selectBigStorageCageUsage() { // bigStorageCageService.querybigStorageCageDetail(1); log.info("获取大理片笼信息:{}", bigStorageCageService.selectBigStorageCageUsage()); } } hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/JsonFile/PlcLoadGlass.json
@@ -25,11 +25,11 @@ "unit":"" }, { "codeId": "InkageStatus", "addressIndex":"22", "addressLenght":"2", "ratio":"1", "unit":"" "codeId": "InkageStatus", "addressIndex":"22", "addressLenght":"2", "ratio":"1", "unit":"" }, { "codeId": "WorkId", hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-cz.yml
File was renamed from hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-loc.yml @@ -5,14 +5,14 @@ strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: hangzhoumes: url: jdbc:mysql://192.168.56.10:3306/hangzhoumes?serverTimezone=GMT%2b8 url: jdbc:mysql://192.168.1.199:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver pp: url: jdbc:mysql://192.168.56.10:3306/pp?serverTimezone=GMT%2b8 url: jdbc:mysql://192.168.1.199:3306/pp?serverTimezone=GMT%2b8 username: root password: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver cloud: nacos: hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
@@ -2,10 +2,10 @@ port: 8083 spring: profiles: active: prod active: cz application: name: loadGlass mybatis-plus: mapper-locations: classpath*:mapper/*.xml # configuration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.ymlcopy from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-loc.yml copy to hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
File was copied from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-loc.yml @@ -5,12 +5,13 @@ strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: hangzhoumes: url: jdbc:mysql://192.168.56.10:3306/hangzhoumes?serverTimezone=GMT%2b8 url: jdbc:mysql://192.168.1.199:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver @@ -18,6 +19,8 @@ nacos: discovery: server-addr: 127.0.0.1:8848 application: name: temperingGlass redis: database: 0 host: 127.0.0.1 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-loc.yml
File was deleted hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -2,7 +2,7 @@ port: 8084 spring: profiles: active: prod active: cz application: name: temperingGlass mybatis-plus: hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
File was renamed from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-loc.yml @@ -5,12 +5,12 @@ strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: hangzhoumes: url: jdbc:mysql://192.168.56.10:3306/hangzhoumes?serverTimezone=GMT%2b8 url: jdbc:mysql://192.168.1.199:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver @@ -22,4 +22,4 @@ database: 0 host: 127.0.0.1 port: 6379 password: 123456 password: 123456 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-loc.yml
File was deleted hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@ spring: profiles: active: prod active: cz application: name: unLoadGlass