hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageSummaryDTO.java
New file @@ -0,0 +1,47 @@ package com.mes.bigstorage.entity.dto; import lombok.Data; /** * @Author : zhoush * @Date: 2024/6/11 16:45 * @Description: */ @Data public class BigStorageSummaryDTO { /** * 工程号 */ private String engineerId; /** * 笼内总炉数 */ private Integer countTemp; /** * 笼内玻璃数量 */ private Integer countGlass; /** * 面积 */ private Double area; /** * 满炉数 */ private Integer fullTemp; /** * 占用格子数 */ private Integer countSlot; /** * 进度 */ private Double percent; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java
@@ -2,6 +2,7 @@ import com.github.yulichang.base.MPJBaseMapper; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -17,6 +18,8 @@ public interface BigStorageCageMapper extends MPJBaseMapper<BigStorageCage> { List<Integer> queryFreeDeviceByUsed(@Param(value = "thickness") double thickness); List<BigStorageSummaryDTO> selectBigStorageSummary(); // // List<Integer> queryFreeDeviceByNotUsed(@Param(value = "thickness") double thickness); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -4,6 +4,7 @@ import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.dto.BigStorageAndDetailsDTO; import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO; import com.mes.bigstorage.entity.vo.BigStorageDetailsQueryVO; import com.mes.glassinfo.entity.GlassInfo; @@ -41,5 +42,7 @@ List<Integer> queryFreeDeviceByUsed(double thickness); List<BigStorageSummaryDTO> selectBigStorageSummary(); // List<Integer> queryFreeDeviceByNotUsed(double thickness); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
@@ -10,6 +10,7 @@ import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.dto.BigStorageAndDetailsDTO; import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO; import com.mes.bigstorage.entity.vo.BigStorageDetailsQueryVO; import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstorage.mapper.BigStorageCageMapper; @@ -305,6 +306,11 @@ return baseMapper.queryFreeDeviceByUsed(thickness); } @Override public List<BigStorageSummaryDTO> selectBigStorageSummary() { return baseMapper.selectBigStorageSummary(); } // @Override // public List<Integer> queryFreeDeviceByNotUsed(double thickness) { // return baseMapper.queryFreeDeviceByNotUsed(thickness); hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
@@ -5,6 +5,7 @@ import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstoragecagetask.entity.BigStorageCageTask; @@ -135,6 +136,9 @@ List<Map<String, Object>> bigStorageCageUsage = bigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("bigStorageCageUsage", bigStorageCageUsage); //大理片汇总信息 List<BigStorageSummaryDTO> bigStorageSummary = bigStorageCageService.selectBigStorageSummary(); jsonObject.append("bigStorageSummary", bigStorageSummary); //打印开关 boolean autoPrint = false; hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
@@ -1,6 +1,15 @@ <?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.bigstorage.mapper.BigStorageCageMapper"> <resultMap id="downStorageCageDetails" type="com.mes.bigstorage.entity.dto.BigStorageSummaryDTO"> <result column="engineer_id" property="engineerId"/> <result column="countTemp" property="countTemp"/> <result column="countGlass" property="countGlass"/> <result column="area" property="area"/> <result column="fullTemp" property="fullTemp"/> <result column="countSlot" property="countSlot"/> <result column="percent" property="percent"/> </resultMap> <select id="queryFreeDeviceByUsed" resultType="java.lang.Integer"> @@ -16,6 +25,48 @@ COUNT(DISTINCT T1.SLOT) </select> <select id="selectBigStorageSummary" resultType="com.mes.bigstorage.entity.dto.BigStorageSummaryDTO"> SELECT engineer_id as engineerId, count( tempering_layout_id ) AS countTemp, sum( countGlass ) AS countGlass, round( sum( area ), 2 ) as area, sum( fullTemp ) AS fullTemp, sum( countSlot ) AS countSlot, sum( countGlass )/ sum( countGlass1 )* 100 AS percent, thickness FROM ( SELECT bscd.engineer_id, bscd.tempering_layout_id, count(*) AS countGlass, sum( bscd.width * bscd.height / 1000000 ) AS area, IF ( gi.countGlass1 = count(*), 1, 0 ) AS fullTemp, count( DISTINCT bscd.slot ) AS countSlot, countGlass1, gi.thickness FROM big_storage_cage_details bscd INNER JOIN ( SELECT engineer_id, tempering_layout_id, count(*) AS countGlass1, thickness FROM glass_info GROUP BY engineer_id, tempering_layout_id ) gi ON bscd.engineer_id = gi.engineer_id AND bscd.tempering_layout_id = gi.tempering_layout_id WHERE bscd.state = 100 GROUP BY bscd.engineer_id, bscd.tempering_layout_id ) AS cageSummary GROUP BY engineer_id ORDER BY percent DESC, thickness DESC, countSlot DESC </select> <!-- <select id="queryFreeDeviceByNotUsed" resultType="java.lang.Integer">--> <!-- SELECT T.DEVICE_ID--> <!-- FROM BIG_STORAGE_CAGE T--> hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -5,7 +5,10 @@ import com.mes.device.PlcParameterObject; import com.mes.engineering.entity.Engineering; import com.mes.engineering.service.EngineeringService; import com.mes.opctask.entity.LoadGlassDeviceTask; import com.mes.opctask.service.LoadGlassDeviceTaskService; import com.mes.pp.service.OptimizeProjectService; import com.mes.tools.DateUtil; import com.mes.tools.WebSocketServer; import com.mes.uppattenusage.entity.UpPattenUsage; import com.mes.uppattenusage.service.UpPattenUsageService; @@ -17,6 +20,8 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @@ -37,15 +42,21 @@ private OptimizeProjectService optimizeProjectService; @Autowired RedisUtil redisUtil; @Resource private LoadGlassDeviceTaskService loadGlassDeviceTaskService; PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; private static final String LOAD_GLASS_DEVICE_ONE_TASK = "load_glass_device_one_task"; private static final String LOAD_GLASS_DEVICE_TWO_TASK = "load_glass_device_two_task"; /** * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ @Scheduled(fixedDelay = 300) // @Scheduled(fixedDelay = 300) public void plcLoadGlassTask() throws InterruptedException { try { //获取联机状态 @@ -89,7 +100,7 @@ } } @Scheduled(fixedDelay = 300) // @Scheduled(fixedDelay = 300) public void plcLoadGlassReport() { //获取是否有汇报 String loadStatus = plcParameterObject.getPlcParameter("PlcStatus").getValue(); @@ -119,53 +130,77 @@ @Scheduled(fixedDelay = 1000) public void loadGlassHome() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<UpPattenUsage> upPattenUsages = upPattenUsageService.prioritylist(); if(upPattenUsages!=null){ jsonObject.append("prioritylist", upPattenUsages); } //查询1号线的任务 Engineering request = redisUtil.getCacheObject("loadGlassRequest"); if (request == null) { request = new Engineering(); request.setStationCell(5); } List<UpPattenUsage> upPattenUsages1 = upPattenUsageService.selectLoadTask(request); jsonObject.append("loadTask1", upPattenUsages1); //查询2号线的任务 Engineering request2 = redisUtil.getCacheObject("loadGlassRequest2"); if (request2 == null) { request2 = new Engineering(); request2.setStationCell(6); } List<UpPattenUsage> upPattenUsages2 = upPattenUsageService.selectLoadTask(request2); jsonObject.append("loadTask2", upPattenUsages2); //查询工位任务 try { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<UpPattenUsage> upPattenUsages = upPattenUsageService.prioritylist(); if(upPattenUsages!=null){ jsonObject.append("prioritylist", upPattenUsages); } //查询1号线的任务 Engineering request = redisUtil.getCacheObject("loadGlassRequest"); if (request == null) { request = new Engineering(); request.setStationCell(5); } List<UpPattenUsage> upPattenUsages1 = upPattenUsageService.selectLoadTask(request); jsonObject.append("loadTask1", upPattenUsages1); //查询2号线的任务 Engineering request2 = redisUtil.getCacheObject("loadGlassRequest2"); if (request2 == null) { request2 = new Engineering(); request2.setStationCell(6); } List<UpPattenUsage> upPattenUsages2 = upPattenUsageService.selectLoadTask(request2); jsonObject.append("loadTask2", upPattenUsages2); // 查询工位任务 //联机状态 LoadGlassDeviceTask LoadOneState = loadGlassDeviceTaskService.queryTaskMessage(LOAD_GLASS_DEVICE_ONE_TASK); LoadGlassDeviceTask LoadTwoState = loadGlassDeviceTaskService.queryTaskMessage(LOAD_GLASS_DEVICE_TWO_TASK); jsonObject.append("LoadOneState", LoadOneState.getInkageState()); jsonObject.append("LoadTwoervice", LoadTwoState.getInkageState()); //工位信息 List<UpWorkstation> upWorkstations = upWorkstationService.list(); jsonObject.append("list", upWorkstations); //工位信息 List<UpWorkstation> upWorkstations = upWorkstationService.list(); jsonObject.append("list", upWorkstations); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass"); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); // } } else { log.info("loadGlass is closed"); } } } } catch (Exception e) { e.printStackTrace(); } } @Scheduled(fixedDelay = 1000) public void send() { ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("mainMes"); if (sendwServer != null) { //推送服务器当前时间 JSONObject jsonObject = new JSONObject(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); jsonObject.append("globalDate", sdf.format(DateUtil.getEndDate())); for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); // List<String> messages = webserver.getMessages(); // if (!messages.isEmpty()) { // // // 将最后一个消息转换为整数类型的列表 // webserver.clearMessages(); // } } else { log.info("Home is closed"); log.info("mainMes is closed"); } } } } @Scheduled(fixedDelay = 5000) // @Scheduled(fixedDelay = 5000) public void loadGlassStatus() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 @@ -178,7 +213,7 @@ if (webserver != null) { webserver.sendMessage(jsonObject.toString()); } else { log.info("Home is closed"); log.info("loadGlass is closed"); } } } @@ -198,7 +233,7 @@ if (webserver != null) { webserver.sendMessage(jsonObject.toString()); } else { log.info("Home is closed"); log.info("loadGlassIsRun is closed"); } } } hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java
@@ -50,4 +50,8 @@ * 缺少数量 */ private int lackCount; /** * 占用格子 */ private int slotCount; } hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
@@ -31,6 +31,8 @@ Map<String, List<FlowCardGlassInfoDTO>> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query); Map<String, FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(HollowBigStorageDetailsQueryVO query); Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId); int queryLayerByFlowCardId(String flowCardId); hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -280,10 +280,70 @@ HollowBigStorageCageDetails cageDetails = v.get(0); dtos.addAll(hollowBigStorageCageDetailsService.hollowIsAll(e, cageDetails.getTotalLayer(), Boolean.FALSE)); }); Map<String, FlowCardGlassInfoDTO> result = dtos.stream() .collect(Collectors.toMap( FlowCardGlassInfoDTO::getFlowCardId, dto -> { FlowCardGlassInfoDTO newDto = new FlowCardGlassInfoDTO(); newDto.setFlowCardId(dto.getFlowCardId()); newDto.setSumCount(dto.getSumCount()); newDto.setPairCount(dto.getPairCount()); newDto.setRealCount(dto.getRealCount()); newDto.setLayer(dto.getLayer()); return newDto; }, (dto1, dto2) -> { dto1.setRealCount(dto1.getRealCount() + dto2.getRealCount()); // 累加 realCount dto1.setLayer(Math.max(dto1.getLayer(),dto2.getLayer())); // 累加 最大层数 return dto1; // 返回合并后的对象 } )); return dtos.stream().collect(Collectors.groupingBy(FlowCardGlassInfoDTO::getFlowCardId)); } @Override public Map<String, FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(HollowBigStorageDetailsQueryVO query) { List<HollowBigStorageCageDetails> detailsList = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>() .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) .like(StringUtils.isNotBlank(query.getFilmsId()), HollowBigStorageCageDetails::getFilmsId, query.getFilmsId()) .like(StringUtils.isNotBlank(query.getFlowCardId()), HollowBigStorageCageDetails::getFlowCardId, query.getFlowCardId()) .eq(query.getThickness() != 0, HollowBigStorageCageDetails::getThickness, query.getThickness()) .orderByAsc(HollowBigStorageCageDetails::getFlowCardId) ); if (CollectionUtil.isEmpty(detailsList)) { log.info("笼内无玻璃"); return new HashMap<>(); } Map<String, List<HollowBigStorageCageDetails>> listMap = detailsList.stream().collect(Collectors.groupingBy(HollowBigStorageCageDetails::getFlowCardId)); List<FlowCardGlassInfoDTO> dtos = new ArrayList<>(); listMap.forEach((e, v) -> { HollowBigStorageCageDetails cageDetails = v.get(0); dtos.addAll(hollowBigStorageCageDetailsService.hollowIsAll(e, cageDetails.getTotalLayer(), Boolean.FALSE)); }); Map<String, FlowCardGlassInfoDTO> result = dtos.stream() .collect(Collectors.toMap( FlowCardGlassInfoDTO::getFlowCardId, dto -> { FlowCardGlassInfoDTO newDto = new FlowCardGlassInfoDTO(); newDto.setFlowCardId(dto.getFlowCardId()); newDto.setSumCount(dto.getSumCount()); newDto.setPairCount(dto.getPairCount()); newDto.setRealCount(dto.getRealCount()); newDto.setLayer(dto.getLayer()); newDto.setSlotCount(dto.getSlotCount()); return newDto; }, (dto1, dto2) -> { dto1.setRealCount(dto1.getRealCount() + dto2.getRealCount()); // 累加 realCount dto1.setLayer(Math.max(dto1.getLayer(),dto2.getLayer())); // 累加 最大层数 dto1.setSlotCount(dto1.getSlotCount() + dto2.getSlotCount()); return dto1; // 返回合并后的对象 } )); return result; } @Override public Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId) { List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryLackByFlowCard(flowCardId); Map<Integer, List<LackDetailsDTO>> listMap = lackDetailsList.stream().collect(Collectors.groupingBy(LackDetailsDTO::getLayer)); hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -11,9 +11,12 @@ import com.mes.common.config.Const; import com.mes.hollow.entity.HollowBigStorageCageDetails; import com.mes.hollow.entity.HollowGlassOutRelationInfo; import com.mes.hollow.entity.dto.FlowCardGlassInfoDTO; import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO; import com.mes.hollow.service.HollowBigStorageCageDetailsService; import com.mes.hollow.service.HollowBigStorageCageService; import com.mes.hollow.service.HollowGlassOutRelationInfoService; import com.mes.hollow.service.HollowGlassRelationInfoService; import com.mes.hollowqueue.entity.HollowGlassQueueInfo; import com.mes.hollowqueue.service.HollowGlassQueueInfoService; import com.mes.tools.WebSocketServer; @@ -48,6 +51,8 @@ HollowBigStorageCageDetailsService hollowBigStorageCageDetailsService; @Resource BigStorageCageTaskService bigStorageCageTaskService; @Resource HollowGlassRelationInfoService hollowGlassRelationInfoService; @Autowired(required = false) MiloService miloService; @@ -197,6 +202,11 @@ //理片笼使用情况 List<Map<String, Object>> bigStorageCageUsage = hollowBigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("bigStorageCageUsage", bigStorageCageUsage); //理片笼使用情况汇总 HollowBigStorageDetailsQueryVO hollowBigStorageDetailsQueryVO=new HollowBigStorageDetailsQueryVO(); Map<String, FlowCardGlassInfoDTO> bigStorageCageUsageSummary= hollowGlassRelationInfoService.queryHollowAllFlowCardSummary(hollowBigStorageDetailsQueryVO); jsonObject.append("bigStorageCageUsageSummary", bigStorageCageUsageSummary); } } hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
@@ -52,7 +52,7 @@ <select id="hollowIsAll" resultMap="baseMap"> WITH sum_flow_layer_count AS ( SELECT flow_card_id, layer, min( films_id ) AS films_id, min(thickness) as thickness,count(*) AS sum_count FROM hollow_glass_relation_info GROUP BY flow_card_id, layer ), real_flow_layer_count AS ( SELECT flow_card_id, layer, count(*) AS real_count FROM real_flow_layer_count AS ( SELECT flow_card_id, layer, count(*) AS real_count, count(distinct slot) as slot_count FROM hollow_big_storage_cage_details t WHERE state = 100 GROUP BY flow_card_id, layer ), damage_flow_layer_count AS ( SELECT process_id AS flow_card_id, technology_number AS layer, count(*) as damage_count FROM damage where type in(8,9) GROUP BY process_id, technology_number ), @@ -99,7 +99,8 @@ IFNULL( t3.pair_count, 0 ) AS pair_count, IFNULL( real_count, 0 ) AS real_count, IFNULL( damage_count, 0 ) AS damage_count, IFNULL( lack_count, 0 ) AS lack_count IFNULL( lack_count, 0 ) AS lack_count, IFNULL(slot_count,0) AS slot_count FROM sum_flow_layer_count t LEFT JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id