hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java
@@ -26,7 +26,7 @@ //获取待选择的工程号 private OrdersService ordersService; @ApiOperation("显示订单详细") @ApiOperation("显示订单详细1") @PostMapping("/selectOrderdetail") //显示工程选择信息 @ResponseBody public Result<List<Orderdetail>> listByState(@RequestBody Orders orders) { hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/Orderdetail.java
@@ -28,6 +28,14 @@ private String project; /** * 流程卡号 */ private String processId; /** * 订单序号 */ private String orderNumber; /** * 产品名称 */ private String productName; @@ -35,30 +43,40 @@ /** * 宽 */ private String width; private double width; /** * 高 */ private String height; private double height; /** * 面积 */ private double area; /** * 包装方式 * 数量 */ private Integer quantity; /** * 状态 * 补片数量 */ private String processingNote; private Integer numberPatches; /** * 送货时间 * 已入数量 */ private String deliveryDate; private Integer receivedQuantity; /** * 生产状态 */ private Integer terminationStatus; /** * 包装方式 */ private String packType; /** * 工程号 */ private String projectNo; hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -4,6 +4,8 @@ import com.github.yulichang.base.MPJBaseMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; @@ -19,5 +21,13 @@ public interface TemperingGlassInfoMapper extends MPJBaseMapper<TemperingGlassInfo> { boolean saveBatch(@Param(value = "list") List<TemperingGlassInfo> list); //绕过全局逻辑进行查询 @Select("SELECT * FROM tempering_glass_info " + "WHERE tempering_layout_id = #{temperingLayoutId} " + "AND engineer_id = #{engineerId} " + "ORDER BY tempering_layout_id DESC, tempering_feed_sequence ASC") List<TemperingGlassInfo> selectByEngineerIdAndLayoutId(String engineerId, Integer temperingLayoutId); //绕过全局逻辑进行修改 @Update("UPDATE tempering_glass_info " + "SET state = #{state}, " + "deleted = CASE WHEN #{state} < 8 THEN 0 ELSE deleted END " + "WHERE glass_id = #{glassId}") Integer updateTemperingGlassInfo(TemperingGlassInfo temperingGlassInfo); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -36,7 +36,8 @@ QueryWrapper<TemperingGlassInfo> glassinfo = new QueryWrapper<>(); glassinfo.eq("engineer_id", glass.getEngineerId()) .eq("tempering_layout_id", glass.getTemperingLayoutId()); return temperingMapper.selectList(glassinfo); //return temperingMapper.selectList(glassinfo); return temperingMapper.selectByEngineerIdAndLayoutId(glass.getEngineerId(),glass.getTemperingLayoutId()); }else { return null; } @@ -45,11 +46,13 @@ @Override public List<TemperingGlassInfo> selectIntoGlass(TemperingGlassInfo temperingGlassInfo) { //获取进炉中的玻璃信息 QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>(); wrapper.eq("tempering_layout_id", temperingGlassInfo.getTemperingLayoutId()) .eq("engineer_id", temperingGlassInfo.getEngineerId()) .orderByAsc("tempering_layout_id","tempering_feed_sequence"); return temperingMapper.selectList(wrapper); // QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>(); // wrapper.eq("tempering_layout_id", temperingGlassInfo.getTemperingLayoutId()) // .eq("engineer_id", temperingGlassInfo.getEngineerId()) // .orderByAsc("tempering_layout_id","tempering_feed_sequence"); // return temperingMapper.selectList(wrapper); return temperingMapper.selectByEngineerIdAndLayoutId(temperingGlassInfo.getEngineerId(),temperingGlassInfo.getTemperingLayoutId()); } @Override @@ -60,11 +63,7 @@ TemperingGlassInfo glass=temperingMapper.selectOne(wrap); //根据工程号和版图获取数据 if(glass != null) { QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>(); wapper.eq("engineer_id", glass.getEngineerId()) .eq("tempering_layout_id", glass.getTemperingLayoutId()) .orderByAsc("tempering_layout_id", "tempering_feed_sequence"); return temperingMapper.selectList(wapper); return temperingMapper.selectByEngineerIdAndLayoutId(glass.getEngineerId(),glass.getTemperingLayoutId()); } return null; } @@ -80,11 +79,8 @@ if (glassinfo == null) { return null; // 直接返回null,表示没有找到符合条件的记录 } QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>(); wrapper.eq("tempering_layout_id",glassinfo.getTemperingLayoutId()) .eq("engineer_id",glassinfo.getEngineerId()); return temperingMapper.selectByEngineerIdAndLayoutId(glassinfo.getEngineerId(),glassinfo.getTemperingLayoutId()); return temperingMapper.selectList(wrapper); } @Override @@ -106,11 +102,7 @@ @Override public Integer updateTemperingState(TemperingGlassInfo temperingGlassInfo) { UpdateWrapper<TemperingGlassInfo> wrapper = new UpdateWrapper<>(); wrapper.eq("glass_id",temperingGlassInfo.getGlassId()) .lt("state",6) .set("state", temperingGlassInfo.getState());; if (temperingMapper.update(null,wrapper) > 0) { if (temperingMapper.updateTemperingGlassInfo(temperingGlassInfo) > 0) { return 200; }else { return 100; hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import java.util.List; /** * <p> * 服务类 @@ -13,4 +15,13 @@ */ public interface EdgGlassTaskInfoService extends IService<EdgGlassTaskInfo> { // List<EdgGlassTaskInfo> selectEdgInfo(); // String setEdgGlassInfoRequest(EdgGlassInfoRequest request); /** * 查询判断磨边线是否有玻璃运行 * @param * @return */ List<EdgGlassTaskInfo> selectTaskCacheIsRun(); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
@@ -1,10 +1,15 @@ package com.mes.edgglasstask.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.common.utils.RedisUtil; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.mapper.EdgGlassTaskInfoMapper; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * <p> @@ -17,4 +22,51 @@ @Service public class EdgGlassTaskInfoServiceImpl extends ServiceImpl<EdgGlassTaskInfoMapper, EdgGlassTaskInfo> implements EdgGlassTaskInfoService { @Autowired RedisUtil redisUtil; //@Override // public List<EdgGlassTaskInfo> selectEdgInfo() { // EdgGlassInfoRequest request = redisUtil.getCacheObject("edgGlassRequest"); // // if (null == request) { // request = new EdgGlassInfoRequest(); // } // if (null == request.getBeginDate()) { // request.setBeginDate(DateUtil.getBeginDate()); // request.setEndDate(DateUtil.getEndDate()); // } // LambdaQueryWrapper<EdgGlassTaskInfo> edgGlassWrapper = new LambdaQueryWrapper<EdgGlassTaskInfo>() // .in(CollectionUtils.isNotEmpty(request.getCellList()), EdgGlassTaskInfo::getLine, request.getCellList()) // .in(CollectionUtils.isNotEmpty(request.getStateList()), EdgGlassTaskInfo::getStatus, request.getStateList()) // .between(null != request.getBeginDate(), EdgGlassTaskInfo::getTime, request.getBeginDate(), request.getEndDate()) // .orderByDesc(EdgGlassTaskInfo::getTime); // return this.list(edgGlassWrapper); // } // // @Override // public String setEdgGlassInfoRequest(EdgGlassInfoRequest request) { // if (request == null) { // redisUtil.deleteObject("edgGlassRequest"); // } else { // redisUtil.setCacheObject("edgGlassRequest", request); // } // return "success"; // } /** * 查询判断磨边线是否有玻璃运行 * * @param * @return */ @Override public List<EdgGlassTaskInfo> selectTaskCacheIsRun() { QueryWrapper<EdgGlassTaskInfo> wrapper = new QueryWrapper<EdgGlassTaskInfo>() .select("line") .eq("status", 1) .groupBy("line"); return this.list(wrapper); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -6,10 +6,13 @@ 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.core.toolkit.CollectionUtils; import com.github.yulichang.query.MPJQueryWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.common.S7object; import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.device.PlcParameterObject; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; @@ -34,6 +37,7 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author : zhoush @@ -58,6 +62,8 @@ @Autowired WebSocketServer webServerService; @Autowired DamageService damageService; @Value("${mes.threshold}") private int threshold; @@ -88,7 +94,7 @@ public static String engineerId = ""; // @Scheduled(fixedDelay = 1000) @Scheduled(fixedDelay = 1000) public void plcHomeEdgTask() { Date startDate = new Date(); log.info("本次任务开始执行时间:{}", startDate); @@ -140,23 +146,36 @@ log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime()); } @Scheduled(fixedDelay = 1000) public void temperingIsRun() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<TaskCache> taskCaches = taskCacheService.selectTaskCacheIsRun(); jsonObject.append("taskCaches", taskCaches); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); } else { log.info("Home is closed"); } } public void dealDamageTask() { Date startDate = new Date(); log.info("卧式理片破损玻璃清除任务开始执行时间:{}", startDate); List<TaskCache> taskCacheList = taskCacheService.list(new LambdaQueryWrapper<TaskCache>().in(TaskCache::getTaskStatus, Const.GLASS_STATE_DAMAGE_TAKE) .in(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT_ALL)); if (CollectionUtils.isNotEmpty(taskCacheList)) { //获取破损/拿走玻璃id List<String> glassList = taskCacheList.stream().map(TaskCache::getGlassId).collect(Collectors.toList()); //将磨边队列的数据删除 edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().in(EdgGlassTaskInfo::getGlassId, glassList)); //将任务表中的数据删除 taskCacheService.remove(new LambdaQueryWrapper<TaskCache>().in(TaskCache::getGlassId, glassList).in(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT_ALL)); List<Damage> damageList = taskCacheList.stream().map(e -> { Damage damage = new Damage(); damage.setGlassId(e.getGlassId()); damage.setLine(e.getEndCell()); damage.setWorkingProcedure("冷加工"); damage.setRemark("磨边前卧式理片"); damage.setStatus(0); damage.setType(e.getTaskStatus()); return damage; }).collect(Collectors.toList()); damageService.batchInsertDamage(damageList); } Date endDate = new Date(); log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime()); } /** * 进片任务 @@ -174,20 +193,23 @@ //查询玻璃并进行交换 GlassInfo glassInfo = queryAndChangeGlass(glassId); log.info("3、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); if (glassInfo == null) { return; } log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); EdgStorageCageDetails details = new EdgStorageCageDetails(); BeanUtils.copyProperties(glassInfo, details); details.setState(Const.GLASS_STATE_IN); details.setSlot(nearestEmpty.getSlot()); details.setDeviceId(nearestEmpty.getDeviceId()); edgStorageCageDetailsService.save(details); log.info("4、玻璃信息已存入理片笼详情表,玻璃信息为{}", details); log.info("5、玻璃信息已存入理片笼详情表,玻璃信息为{}", details); //添加进片任务 boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN); log.info("5、生成进片任务信息存入任务表是否完成:{}", taskCache); log.info("6、生成进片任务信息存入任务表是否完成:{}", taskCache); S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1); log.info("6、发送确认字完成"); log.info("7、发送确认字完成"); } @@ -202,6 +224,10 @@ GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); // .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")); Assert.isFalse(null == glassInfo, "玻璃信息不存在"); if ((glassInfo.getWidth() < Double.parseDouble(minTwoFirstLength) && glassInfo.getHeight() < Double.parseDouble(minTwoSecondLength)) || (glassInfo.getWidth() < Double.parseDouble(minTwoSecondLength) && glassInfo.getHeight() < Double.parseDouble(minTwoFirstLength))) { log.info("3、玻璃信息不符合进入理片笼最小尺寸,玻璃信息为{}", glassInfo); return null; } //按照玻璃尺寸 LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getWidth, glassInfo.getWidth()) @@ -531,7 +557,7 @@ if (endcell == Const.A10_OUT_TARGET_POSITION) { wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " + "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " + "on t.glass_id = t1.glass_id and (t1.first_length >= " + minOneFirstLength + " and t1.second_length >= " + minOneSecondLength); "on t.glass_id = t1.glass_id and (t1.first_length >= " + minOneFirstLength + " and t1.second_length >= " + minOneSecondLength + ")"); } else { wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " + "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " + @@ -654,7 +680,7 @@ } /** * 添加理片笼任务 * 添加磨边队列信息 * * @param glassInfo * @param endcell @@ -700,13 +726,19 @@ public void CacheGlassTasks() { JSONObject jsonObject = new JSONObject(); List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory(); // List<Map<String, Object>> currentCutTerritorys=new ArrayList<>(); // if(engineerId==null||engineerId.isEmpty()){ // //识别摆片 当前版图数据 // currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory(); // }else{ // //识别摆片 此engineerId 工程版图数据 // currentCutTerritorys = edgStorageCageDetailsService.selectCurrentCutTerritory(engineerId); // } jsonObject.append("currentCutTerritory", currentCutTerritorys); //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys); //磨边信息 List<Map<String, Object>> EdgTasks1 = taskCacheService.selectEdgInfo("2001"); List<Map<String, Object>> EdgTasks2 = taskCacheService.selectEdgInfo("2002"); jsonObject.append("EdgTasks1", EdgTasks1); jsonObject.append("EdgTasks2", EdgTasks2); // List<EdgGlassTaskInfo> edgTasks = edgGlassTaskInfoService.selectEdgInfo(); // jsonObject.append("edgTasks", edgTasks); //卧室缓存笼内信息 List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages(); @@ -728,11 +760,12 @@ } } } @Scheduled(fixedDelay = 1000) public void cacheGlassIsRun() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<TaskCache> taskCaches = taskCacheService.selectTaskCacheIsRun(); List<EdgGlassTaskInfo> taskCaches = edgGlassTaskInfoService.selectTaskCacheIsRun(); jsonObject.append("taskCaches", taskCaches); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlassIsRun"); if (sendwServer != null) { @@ -745,6 +778,5 @@ } } } } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
@@ -36,7 +36,7 @@ * fixedDelay : 上一个调用结束后再次调用的延时 */ @Scheduled(fixedDelay = 10000) @Scheduled(fixedDelay = 5000) public void screenHome() { JSONObject jsonObject = new JSONObject(); Reportingdamage reportingdamage = new Reportingdamage(); hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -66,27 +66,7 @@ if (outGlass != null) { jsonObject.append("overGlass", overGlass); } //当前钢化工程的拿走数据 LambdaQueryWrapper<TemperingGlassInfo> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.select(TemperingGlassInfo::getEngineerId) .lt(TemperingGlassInfo::getState, Const.TEMPERING_END) .groupBy(TemperingGlassInfo::getEngineerId); List<String> engineerIds = temperingAgoService.list(queryWrapper) .stream() .map(TemperingGlassInfo::getEngineerId) .distinct() .collect(Collectors.toList()); List<Damage> temperingTakeGlassInfos = damageService.list( new LambdaQueryWrapper<Damage>() .in(Damage::getEngineerId, engineerIds) .eq(Damage::getType, Const.GLASS_STATE_TAKE) .orderByAsc(Damage::getId) ); jsonObject.append("temperingTakeGlassInfos", temperingTakeGlassInfos); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingGlass"); if (sendwServer != null) { @@ -106,8 +86,6 @@ //正在进行的任务 List<TemperingGlassInfo> temperingTaskType = temperingAgoService.selectTaskType(); jsonObject.append("temperingTaskType", temperingTaskType); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingIsRun"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
@@ -48,10 +48,12 @@ return Result.build(200, "", glass); } @ApiOperation("//钢化破损") @ApiOperation("//钢化破损拿走放回") @PostMapping("/updateTemperingState") //钢化后显示出炉的版图信息 public Result <Integer> updateTemperingState(@RequestBody Damage damage) { damageService.insertDamage(damage); if(damage.getStatus()>5) { damageService.insertDamage(damage); } TemperingGlassInfo temperingGlassInfo=new TemperingGlassInfo(); temperingGlassInfo.setState(damage.getStatus()); temperingGlassInfo.setGlassId(damage.getGlassId());