hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java
@@ -45,6 +45,12 @@ private double height; /** * 厚度 */ @ApiModelProperty(value = "厚度") private Double thickness; /** * 格子号 */ @ApiModelProperty(value = "玻璃id") hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -84,6 +84,7 @@ public static final Integer GLASS_CACHE_TYPE_FINISH = 5; public static final Integer GLASS_CACHE_TYPE_OTHER = 6; public static final List<Integer> GLASS_CACHE_TYPE_OUT_ALL = Arrays.asList(2, 3); public static final List<Integer> GLASS_CACHE_TYPE_IN_ALL = Arrays.asList(1, 3); /** * 磨边任务玻璃状态 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
@@ -101,6 +101,15 @@ * 原片顺序 */ private Integer patternSequence; /** * x坐标 */ private Integer xAxis; /** * y坐标 */ private Integer yAxis; /** * 钢化版图id hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
@@ -72,9 +72,17 @@ */ private double pHeight; /** * 版图id * 原片版图id */ private Integer stockId; /** * 原片版图版序 */ private Integer xAxis; /** * 原片版图版序 */ private Integer yAxis; /** * 钢化版图编号(架号) */ @@ -86,11 +94,11 @@ /** * x坐标 */ private Integer xAxis; private Integer xAxisHeat; /** * y坐标 */ private Integer yAxis; private Integer yAxisHeat; /** * 工程号 */ hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -40,7 +40,9 @@ List<OptimizeGlassinfo> optimizeGlassinfos = null; if (engineeringId != null) { optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>() .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,c.x_axis,c.y_axis,b.project_no,b.glass_id,c.rotate_angle,d.merge as combine ,b.mark_icon") .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer," + "d.layers_number AS total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort, b.x_axis,b.y_axis," + "c.x_axis as x_axis_heat,c.y_axis as y_axis_heat,b.project_no,b.glass_id,c.rotate_angle,d.merge as combine ,b.mark_icon") .leftJoin("optimize_detail b on t.project_no=b.project_no") .leftJoin("optimize_heat_detail c on c.project_no=t.project_no and b.heat_layout_id=c.layout_id and b.heat_layout_sort=c.sort") .leftJoin("flow_card d on d.process_id=b.process_id and d.technology_number=b.layer and d.order_number=b.order_sort ") @@ -58,19 +60,26 @@ glassInfo.setEngineerId(map.getProjectNo()); glassInfo.setFlowCardId(map.getProcessId()); glassInfo.setFilmsid(map.getGlassType()); glassInfo.setGlassType(map.getOrderSort());//订单序号 glassInfo.setWidth(map.getOWidth());//订单宽 glassInfo.setHeight(map.getOHeight());//订单高 //订单序号 glassInfo.setGlassType(map.getOrderSort()); //订单宽 glassInfo.setWidth(map.getOWidth()); //订单高 glassInfo.setHeight(map.getOHeight()); glassInfo.setEdgWidth(map.getPWidth()); glassInfo.setLayer(map.getLayer()); glassInfo.setTotalLayer(map.getTotalLayer()); glassInfo.setEdgHeight(map.getPHeight()); glassInfo.setThickness(map.getGlassThickness()); glassInfo.setPatternSequence(map.getStockId());// glassInfo.setTemperingLayoutId(map.getHeatLayoutId());//钢化版图id glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort());//钢化版图顺序 glassInfo.setXCoordinate(map.getXAxis()); glassInfo.setYCoordinate(map.getYAxis()); glassInfo.setLayer(map.getLayer()); glassInfo.setTotalLayer(map.getTotalLayer()); glassInfo.setPatternSequence(map.getStockId()); glassInfo.setXAxis(map.getXAxis()); glassInfo.setYAxis(map.getYAxis()); //钢化版图id glassInfo.setTemperingLayoutId(map.getHeatLayoutId()); //钢化版图顺序 glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort()); glassInfo.setXCoordinate(map.getXAxisHeat()); glassInfo.setYCoordinate(map.getYAxisHeat()); glassInfo.setAngle(map.getRotateAngle()); glassInfo.setGlassId(map.getGlassId()); glassInfo.setCombine(map.getCombine()); hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
@@ -34,17 +34,8 @@ @Autowired private EdgStorageCageDetailsService edgStorageCageDetailsService; // @ApiOperation("查询磨边缓存理片笼内详情 参数()") // @PostMapping("/selectEdgStorageCage") // @ResponseBody // public Result selectEdgStorageCage() { // List<Map<String, Object>> list = edgStorageCageService.selectEdgStorageCages(); // return Result.build(200, "成功", list); // } @ApiOperation("修改磨边缓存理片笼信息 功能:对笼内栅格进行【启用/禁用】") @PostMapping("/updateEdgStorageCage") @ResponseBody public Result updateEdgStorageCage(@RequestBody EdgStorageCage edgStorageCage) { String isSucess = edgStorageCageService.updateEdgStorageCage(edgStorageCage) ? "成功" : "失败"; return Result.build(200, "【启用/禁用】" + isSucess, 1); @@ -52,7 +43,6 @@ @ApiOperation("磨边缓存理片笼信息 功能:对笼内栅格玻璃进行【清除/更换/绑定】 EdgStorageCage格子信息,EdgStorageCageDetails 玻璃信息 ") @PostMapping("/edgStorageCageGlass") @ResponseBody public Result edgStorageCageGlass(@RequestBody EdgStorageCageDetails edgStorageCageDetails, int edgStorageCageId) { String isSucess = edgStorageCageService.updateEdgStorageCageDetails(edgStorageCageId, edgStorageCageDetails) ? "成功" : "失败"; @@ -61,7 +51,6 @@ @ApiOperation("磨边模块汇报玻璃状态 功能:对笼内栅格玻璃进行【破损/拿走】 ") @PostMapping("/edgReportStatus") @ResponseBody public Result edgReportStatus(@RequestBody @Validated IdentWornRequest request) { return Result.build(200, "【破损/拿走】" + edgStorageCageDetailsService.edgReportStatus(request), 1); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java
New file @@ -0,0 +1,19 @@ package com.mes.edgstoragecage.entity.vo; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.glassinfo.entity.GlassInfo; import lombok.Data; import java.util.List; /** * @Author : zhoush * @Date: 2024/12/18 20:00 * @Description: */ @Data public class CutDrawingVO extends GlassInfo { private int state; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
@@ -2,6 +2,11 @@ import com.github.yulichang.base.MPJBaseMapper; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.entity.vo.CutDrawingVO; import org.apache.ibatis.annotations.Param; import org.springframework.security.core.parameters.P; import java.util.List; /** * <p> @@ -14,4 +19,6 @@ public interface EdgStorageCageDetailsMapper extends MPJBaseMapper<EdgStorageCageDetails> { EdgStorageCageDetails queryEdgStorageDetailsBySize(int deviceId, int currentSlot, double width, double height); List<CutDrawingVO> queryCutDrawingByEngineerId(@Param("engineerId") String engineerId, @Param("patternSequence") int patternSequence, @Param("isAll") int isAll); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -3,6 +3,7 @@ import com.github.yulichang.base.MPJBaseService; import com.mes.edgglasstask.entity.request.IdentWornRequest; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.entity.vo.CutDrawingVO; import java.util.List; import java.util.Map; @@ -20,19 +21,14 @@ // boolean identWorn(Map<String, Object> arguments); /** * 获取 切割当前版图 * * 按照设备及线路,获取当前线路正在切割的版图信息 * @param deviceId * @param stationCell * @return */ List<Map<String, Object>> selectCutTerritory(); List<CutDrawingVO> queryCurrentCutDrawing(int deviceId, int stationCell); /** * 获取 工程下的当前版图 * * @param current * @return */ List<List<Map<String, Object>>> selectCurrentCutTerritory(String current); Map<String, Object> queryCutDrawingByEngineerId(String engineerId, int patternSequence); /** * 获取 工程下的钢化版图 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -1,5 +1,6 @@ package com.mes.edgstoragecage.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -16,20 +17,20 @@ import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.entity.vo.CutDrawingVO; import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper; import com.mes.edgstoragecage.mapper.EdgStorageCageMapper; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.engineering.entity.Engineering; import com.mes.engineering.mapper.EngineeringMapper; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.pp.entity.*; import com.mes.pp.mapper.OptimizeDetailMapper; import com.mes.glassinfo.service.GlassInfoService; import com.mes.pp.entity.OptimizeHeatDetail; import com.mes.pp.entity.OptimizeHeatLayout; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.mapper.OptimizeHeatDetailMapper; import com.mes.taskcache.entity.TaskCache; import com.mes.taskcache.service.TaskCacheService; import com.mes.uppattenusage.entity.UpPattenUsage; import com.mes.uppattenusage.mapper.UpPattenUsageMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; @@ -56,13 +57,7 @@ public class EdgStorageCageDetailsServiceImpl extends MPJBaseServiceImpl<EdgStorageCageDetailsMapper, EdgStorageCageDetails> implements EdgStorageCageDetailsService { @Resource UpPattenUsageMapper upPattenUsageMapper; @Resource EngineeringMapper engineeringMapper; @Resource OptimizeDetailMapper optimizeDetailMapper; @Resource OptimizeHeatDetailMapper optimizeHeatDetailMapper; @@ -71,7 +66,7 @@ EdgStorageCageMapper edgStorageCageMapper; @Resource GlassInfoMapper glassInfoMapper; GlassInfoService glassInfoService; @Autowired TaskCacheService taskCacheService; @@ -84,226 +79,51 @@ @Autowired EdgGlassTaskInfoService edgGlassTaskInfoService; // // @Override // public boolean identWorn(Map<String, Object> arguments) { // String glassId=arguments.get("glassId").toString(); // int state=arguments.get("state").toString().isEmpty()?0:Integer.parseInt(arguments.get("state").toString()); // int line=arguments.get("line").toString().isEmpty()?0:Integer.parseInt(arguments.get("line").toString()); // String workingProcedure=arguments.get("workingProcedure").toString(); // if(state==0||line==0||workingProcedure==null||glassId==null||glassId.isEmpty()){ // log.info("前端传递数据不全:{}",arguments); // return false; // } // List<GlassInfo> GlassInfos = glassInfoMapper.selectList(new MPJLambdaQueryWrapper<GlassInfo>() // .selectAll(GlassInfo.class) // .eq(GlassInfo::getGlassId, glassId)); // if (GlassInfos.size() == 1) { // Damage damage =new Damage(); // damage.setGlassId(glassId); // damage.setLine(line); // damage.setWorkingProcedure(workingProcedure); // damage.setRemark(""); // damage.setStatus(state);//8破损,9拿走 // damageService.insertDamage(damage); // }else{ // return false; // } // List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>() // .selectAll(EdgStorageCageDetails.class) // .eq(EdgStorageCageDetails::getGlassId, glassId)); // if (edgStorageCageDetails.size() == 1) { // EdgStorageCageDetails item = edgStorageCageDetails.get(0); // item.setState(state); // baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId)); // } // return true; // } /** * 获取 切割当前版图 * * @return */ @Override public List<Map<String, Object>> selectCutTerritory() { //查询EdgStorageCageDetails最后一张玻璃所属版图 List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>() .selectAll(UpPattenUsage.class) .distinct() .innerJoin(Engineering.class, on -> on .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId)) .innerJoin(GlassInfo.class, on -> on .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId) .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence)) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId) .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId)) .leftJoin(Damage.class, on -> on .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId) .eq(Damage::getGlassId, GlassInfo::getGlassId)) .eq(Engineering::getState, 1) .and(wrapper -> wrapper.isNotNull(EdgStorageCageDetails::getId).or().isNotNull(Damage::getId)) .orderByDesc(UpPattenUsage::getLayoutSequence) .orderByDesc(GlassInfo::getId) ); if (!upPattenUsage.isEmpty()) { //当前版 UpPattenUsage upPattenUsage1 = upPattenUsage.get(0); //查看当前版是否存在未进笼子或破损的玻璃 List<UpPattenUsage> upPattenUsage2 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>() .selectAll(UpPattenUsage.class) .distinct() .innerJoin(GlassInfo.class, on -> on .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId) .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence)) .leftJoin(EdgStorageCageDetails.class, on -> on .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId) .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId)) .leftJoin(Damage.class, on -> on .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId) .eq(Damage::getGlassId, GlassInfo::getGlassId)) .eq(UpPattenUsage::getEngineeringId, upPattenUsage.get(0).getEngineeringId()) .eq(UpPattenUsage::getLayoutSequence, upPattenUsage.get(0).getLayoutSequence()) .and(wrapper -> wrapper.isNull(EdgStorageCageDetails::getId).or().isNull(Damage::getId)) .orderByDesc(UpPattenUsage::getLayoutSequence) .orderByDesc(GlassInfo::getId) ); //显示下一版 否则显示当前版图 if (upPattenUsage2.isEmpty()) { //剩余版图 List<UpPattenUsage> upPattenUsage3 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>() .selectAll(UpPattenUsage.class) .distinct() .innerJoin(Engineering.class, on -> on .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId)) .eq(Engineering::getState, 1) .gt(UpPattenUsage::getLayoutSequence, upPattenUsage1.getLayoutSequence()) .orderByAsc(UpPattenUsage::getLayoutSequence) ); if (!upPattenUsage3.isEmpty()) { //切换成下一版图 upPattenUsage1 = upPattenUsage3.get(0); } } List<Map<String, Object>> cutTerritorys = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class) .selectAll(OptimizeDetail.class) .selectAs(OptimizeLayout::getWidth, "olWidth") .selectAs(OptimizeLayout::getHeight, "olHeight") .leftJoin(OptimizeLayout.class, on -> on .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo) .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId)) .eq(OptimizeDetail::getProjectNo, upPattenUsage1.getEngineeringId()) .eq(OptimizeDetail::getStockId, upPattenUsage1.getLayoutSequence()) ); Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>() .selectAll(EdgStorageCageDetails.class) .eq(EdgStorageCageDetails::getEngineerId, upPattenUsage1.getEngineeringId()) ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails)); Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>() .selectAll(Damage.class) .eq(Damage::getEngineerId, upPattenUsage1.getEngineeringId()) .and(wrapper -> wrapper.eq(Damage::getType, 8) .or() .eq(Damage::getType, 9)) ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2)); List<Map<String, Object>> resultCutTerritory = new ArrayList<>(); for (Map<String, Object> cutTerritory : cutTerritorys) { // log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails); if (cutTerritory.get("glass_id") == null || "".equals(cutTerritory.get("glass_id"))) { log.info("优化数据中glassId存在空值-----内容:{}", cutTerritorys); return new ArrayList<>(); } else if (damageMaps.get(cutTerritory.get("glass_id")) != null) { //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id"))); cutTerritory.put("glass_state", damageMaps.get(cutTerritory.get("glass_id")).getType()); } else if (edgMaps.get(cutTerritory.get("glass_id")) != null) { cutTerritory.put("glass_state", edgMaps.get(cutTerritory.get("glass_id")).getState()); } else { cutTerritory.put("glass_state", 0); } resultCutTerritory.add(cutTerritory); } return resultCutTerritory; public List<CutDrawingVO> queryCurrentCutDrawing(int deviceId, int stationCell) { // 获取本条线当前正在执行的工程 Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>() .eq(Engineering::getState, 1).eq(Engineering::getStationCell, stationCell)); if (null == engineering) { log.info("当前线路没有需要执行的工程"); return null; } return null; } /** * 获取 工程下的当前版图 * * @param current * @return */ @Override public List<List<Map<String, Object>>> selectCurrentCutTerritory(String current) { List<Engineering> engineering = engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>() .selectAll(Engineering.class) .eq(Engineering::getEngineerId, current) ); if (engineering.size() == 0) { log.info("当前工程号未领取过:{}", current); return new ArrayList<>(); } //结果 List<Map<String, Object>> resultCutTerritory = new ArrayList<>(); //此工程的所有优化数据 List<Map<String, Object>> cutTerritory = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class) .selectAll(OptimizeDetail.class) .selectAs(OptimizeLayout::getWidth, "olWidth") .selectAs(OptimizeLayout::getHeight, "olHeight") .leftJoin(OptimizeLayout.class, on -> on .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo) .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId)) .eq(OptimizeDetail::getProjectNo, current) ); Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>() .selectAll(EdgStorageCageDetails.class) .eq(EdgStorageCageDetails::getEngineerId, current) ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails, (V1, V2) -> V2)); Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>() .selectAll(Damage.class) .eq(Damage::getEngineerId, current) .and(wrapper -> wrapper.eq(Damage::getType, 8) .or() .eq(Damage::getType, 9)) ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2)); for (Map<String, Object> item : cutTerritory) { // log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails); if (item.get("glass_id") == null || "".equals(item.get("glass_id"))) { log.info("优化数据中glassId存在空值-----内容:{}", cutTerritory); return new ArrayList<>(); } if (damageMaps.get(item.get("glass_id")) != null) { //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id"))); item.put("glass_state", damageMaps.get(item.get("glass_id")).getType()); } else if (edgMaps.get(item.get("glass_id")) != null) { item.put("glass_state", edgMaps.get(item.get("glass_id")).getState()); List<EdgStorageCageDetails> edgStorageCageDetailsList = this.list(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getDeviceId, deviceId) .eq(EdgStorageCageDetails::getEngineerId, engineering.getEngineerId()) .orderByDesc(EdgStorageCageDetails::getId)); //按照当前工程去理片笼搜最后一块玻璃 获取工程号 版图号 没有直接显示第一张版图 int patternSequence = 0; if (CollectionUtil.isEmpty(edgStorageCageDetailsList)) { patternSequence = 1; } else { EdgStorageCageDetails lastGlass = edgStorageCageDetailsList.get(0); log.info("获取最后一块进笼的玻璃为:{}", lastGlass); List<CutDrawingVO> drawingVOList = baseMapper.queryCutDrawingByEngineerId(lastGlass.getEngineerId(), lastGlass.getPatternSequence(), 1); if (CollectionUtil.isEmpty(drawingVOList)) { //无剩余 显示当前版图加1的全量版图 patternSequence = lastGlass.getPatternSequence() + 1; } else { item.put("glass_state", 0); //当前版图是否有剩余,有剩余显示当前版图 patternSequence = lastGlass.getPatternSequence(); } resultCutTerritory.add(item); } Map<String, List<Map<String, Object>>> groupBy = resultCutTerritory.stream().collect(Collectors.groupingBy(item -> item.get("stock_id").toString())); // List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList()); int count = 1; List<List<Map<String, Object>>> result = new ArrayList<>(); for (String item : groupBy.keySet()) { String key = count + ""; if (key != null) { result.add(groupBy.get(key)); } count++; } return result; return baseMapper.queryCutDrawingByEngineerId(engineering.getEngineerId(), patternSequence, 0); } @Override public Map<String, Object> queryCutDrawingByEngineerId(String engineerId, int patternSequence) { HashMap<String, Object> map = new HashMap<>(); map.put("currentCutDrawing", baseMapper.queryCutDrawingByEngineerId(engineerId, patternSequence, 0)); List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getEngineerId, engineerId)); long totalPatternSequence = glassInfoList.stream().map(GlassInfo::getPatternSequence).distinct().count(); map.put("totalPatternSequence", totalPatternSequence); return map; } /** * 获取 工程下的钢化版图 * hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
@@ -535,10 +535,23 @@ .last("Limit 1"); GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper); if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) { int patternSequence = glassInfo.getPatternSequence(); int xAxis = glassInfo.getXAxis(); int yAxis = glassInfo.getYAxis(); String swapGlassId = swapGlassInfo.getGlassId(); log.info("将玻璃{}和玻璃{},信息互换,进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo); int swapPatternSequence = swapGlassInfo.getPatternSequence(); int swapXAxis = swapGlassInfo.getXAxis(); int swapYAxis = swapGlassInfo.getYAxis(); swapGlassInfo.setGlassId(glassId); swapGlassInfo.setPatternSequence(patternSequence); swapGlassInfo.setXAxis(xAxis); swapGlassInfo.setYAxis(yAxis); glassInfo.setGlassId(swapGlassId); glassInfo.setPatternSequence(swapPatternSequence); glassInfo.setXAxis(swapXAxis); glassInfo.setYAxis(swapYAxis); log.info("将玻璃{}和玻璃{},信息互换(原片序号及坐标除外),进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo); glassInfoService.updateById(swapGlassInfo); glassInfoService.updateById(glassInfo); return swapGlassId; hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -1,12 +1,17 @@ package com.mes.job; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mes.common.config.Const; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.edgstoragecage.entity.vo.CutDrawingVO; import com.mes.edgstoragecage.entity.vo.EdgStorageCageVO; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.edgstoragecage.service.EdgStorageCageService; import com.mes.opctask.entity.EdgStorageDeviceTask; import com.mes.opctask.entity.EdgStorageDeviceTaskHistory; import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService; import com.mes.opctask.service.EdgStorageDeviceTaskService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; @@ -35,6 +40,8 @@ EdgGlassTaskInfoService edgGlassTaskInfoService; @Resource EdgStorageDeviceTaskService edgStorageDeviceTaskService; @Resource EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService; private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task"; @@ -53,14 +60,18 @@ private void CacheGlassTasksChild(String tableName, String webSocketName, int deviceId, int stationCell) { JSONObject jsonObject = new JSONObject(); // List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory(); // jsonObject.append("currentCutTerritory", currentCutTerritorys); //卧室缓存笼内信息0 = {EdgStorageCageVO@11649} "EdgStorageCageVO(details=null)" List<CutDrawingVO> currentCutDrawings = edgStorageCageDetailsService.queryCurrentCutDrawing(deviceId, stationCell); jsonObject.append("currentCutTerritory", currentCutDrawings); //卧室缓存笼内信息 List<EdgStorageCageVO> edgStorageCageVOS = edgStorageCageService.selectEdgStorageCagesByDeviceId(deviceId); jsonObject.append("EdgStorageCageinfos", edgStorageCageVOS); EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName); jsonObject.append("taskMessage", task); //获取正在整形中的任务 EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() .eq(EdgStorageDeviceTaskHistory::getDeviceId,deviceId) .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1")); jsonObject.append("taskMessage", taskHistory); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get(webSocketName); if (sendwServer != null) { hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java
@@ -1,16 +1,17 @@ package com.mes.opctask.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mes.opctask.entity.EdgStorageDeviceTaskHistory; import com.mes.opctask.entity.request.TaskHistoryRequest; import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService; import com.mes.utils.Result; import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.Serializable; import java.util.List; /** @@ -29,60 +30,11 @@ @Resource private EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService; /** * 分页查询所有数据 * * @param page 分页对象 * @param edgStorageDeviceTaskHistory 查询实体 * @return 所有数据 */ @ApiOperation(value = "查询本条线执行过的历史任务数据", notes = "查询本条线执行过的历史任务数据") @GetMapping public Result selectAll(Page<EdgStorageDeviceTaskHistory> page, EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) { return Result.success(this.edgStorageDeviceTaskHistoryService.page(page, new QueryWrapper<>(edgStorageDeviceTaskHistory))); public Result<List<EdgStorageDeviceTaskHistory>> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request) { return Result.success(edgStorageDeviceTaskHistoryService.queryEdgStorageDeviceTaskHistory(request)); } /** * 通过主键查询单条数据 * * @param id 主键 * @return 单条数据 */ @GetMapping("{id}") public Result selectOne(@PathVariable Serializable id) { return Result.success(this.edgStorageDeviceTaskHistoryService.getById(id)); } /** * 新增数据 * * @param edgStorageDeviceTaskHistory 实体对象 * @return 新增结果 */ @PostMapping public Result insert(@RequestBody EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) { return Result.success(this.edgStorageDeviceTaskHistoryService.save(edgStorageDeviceTaskHistory)); } /** * 修改数据 * * @param edgStorageDeviceTaskHistory 实体对象 * @return 修改结果 */ @PutMapping public Result update(@RequestBody EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) { return Result.success(this.edgStorageDeviceTaskHistoryService.updateById(edgStorageDeviceTaskHistory)); } /** * 删除数据 * * @param idList 主键结合 * @return 删除结果 */ @DeleteMapping public Result delete(@RequestParam("idList") List<Long> idList) { return Result.success(this.edgStorageDeviceTaskHistoryService.removeByIds(idList)); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/request/TaskHistoryRequest.java
New file @@ -0,0 +1,35 @@ package com.mes.opctask.entity.request; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * @Author : zhoush * @Date: 2024/12/22 16:10 * @Description: */ @Data public class TaskHistoryRequest { @ApiModelProperty(value = "设备id") private Integer deviceId; @ApiModelProperty(value = "玻璃id") private String glassId; @ApiModelProperty(value = "任务状态 0默认空任务 1结束任务") private Integer taskState; @ApiModelProperty(value = "任务类型:1进片任务 2出片任务 3直通任务") private Integer taskType; @ApiModelProperty(value = "开始时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; @ApiModelProperty(value = "结束时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endTime; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java
@@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.mes.opctask.entity.EdgStorageDeviceTaskHistory; import com.mes.opctask.entity.request.TaskHistoryRequest; import java.util.List; /** * (EdgStorageDeviceTaskHistory)表服务接口 @@ -11,5 +14,6 @@ */ public interface EdgStorageDeviceTaskHistoryService extends IService<EdgStorageDeviceTaskHistory> { List<EdgStorageDeviceTaskHistory> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java
@@ -1,10 +1,15 @@ package com.mes.opctask.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.opctask.entity.EdgStorageDeviceTaskHistory; import com.mes.opctask.entity.request.TaskHistoryRequest; import com.mes.opctask.mapper.EdgStorageDeviceTaskHistoryMapper; import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService; import org.springframework.stereotype.Service; import java.util.List; /** * (EdgStorageDeviceTaskHistory)表服务实现类 @@ -15,5 +20,19 @@ @Service("edgStorageDeviceTaskHistoryService") public class EdgStorageDeviceTaskHistoryServiceImpl extends ServiceImpl<EdgStorageDeviceTaskHistoryMapper, EdgStorageDeviceTaskHistory> implements EdgStorageDeviceTaskHistoryService { @Override public List<EdgStorageDeviceTaskHistory> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request) { LambdaQueryWrapper<EdgStorageDeviceTaskHistory> wrapper = new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() .eq(EdgStorageDeviceTaskHistory::getDeviceId, request.getDeviceId()) .eq(StringUtils.checkValNotNull(request.getTaskState()), EdgStorageDeviceTaskHistory::getTaskState, request.getTaskState()) .eq(StringUtils.checkValNotNull(request.getTaskType()), EdgStorageDeviceTaskHistory::getTaskState, request.getTaskType()) .between(StringUtils.checkValNotNull(request.getStartTime()), EdgStorageDeviceTaskHistory::getCreateTime, request.getStartTime(), request.getEndTime()).orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 20"); if (StringUtils.isNotBlank(request.getGlassId())) { wrapper.and(e -> e.like(EdgStorageDeviceTaskHistory::getGlassIdIn, request.getGlassId()) .or().like(EdgStorageDeviceTaskHistory::getGlassIdOut, request.getGlassId())); } return this.list(wrapper); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -1,6 +1,7 @@ package com.mes.taskcache.controller; import com.mes.edgglasstask.entity.request.IdentWornRequest; import com.mes.edgstoragecage.entity.vo.CutDrawingVO; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.taskcache.service.TaskCacheService; import com.mes.utils.Result; @@ -34,39 +35,34 @@ @ApiOperation("查询钢化版图信息-根据 工程号 参数(工程号)") @PostMapping("/temperingTerritory") @ResponseBody public Result temperingTerritory(String current) { List<Map<String, Object>> h = edgStorageCageDetailsService.selectTemperingTerritory(current); return Result.build(200, "成功", h); } @ApiOperation("查询切割版图信息-根据 工程号 参数(工程号)") @PostMapping("/cutTerritory") @ResponseBody public Result cutTerritory(String current) { //engineerId=current; List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current); return Result.build(200, "成功", h); @ApiOperation("查询切割版图信息-根据工程号及版序,版序默认为1") @PostMapping("/queryCutDrawingByEngineerId") public Result queryCutDrawingByEngineerId(String engineerId, int patternSequence) { // List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current); Map<String, Object> map = edgStorageCageDetailsService.queryCutDrawingByEngineerId(engineerId, patternSequence); return Result.build(200, "成功", map); } @ApiOperation("识别显示 当前版图 参数()") @PostMapping("/currentCutTerritory") @ResponseBody public Result currentCutTerritory() { List<Map<String, Object>> h = edgStorageCageDetailsService.selectCutTerritory(); return Result.build(200, "成功", h); @ApiOperation("识别显示:当前版图,需要当前卧式理片设备id、上片线路") @PostMapping("/queryCurrentCutDrawing") public Result queryCurrentCutDrawing(int deviceId, int stationCell) { List<CutDrawingVO> cutDrawingVOS = edgStorageCageDetailsService.queryCurrentCutDrawing(deviceId, stationCell); return Result.build(200, "成功", cutDrawingVOS); } @ApiOperation("识别操作: 破损/拿走 参数(ID,功能[9:拿走,8:破损])") @PostMapping("/identControls") @ResponseBody public Result<String> identControls(@RequestBody @Validated IdentWornRequest request) { return Result.build(200, "成功", edgStorageCageDetailsService.identControls(request)); } @ApiOperation("磨边任务 参数()") @PostMapping("/selectEdgTask") @ResponseBody public Result selectEdgTask(@RequestBody Map<String, String> arguments) { String line = arguments.get("line"); List<Map<String, Object>> EdgTasks = taskCacheService.selectEdgInfo(line); hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -31,8 +31,8 @@ firstLength: 460 secondLength: 390 two: #第二条磨边线的最小尺寸信息 firstLength: 390 secondLength: 390 firstLength: 300 secondLength: 300 glassGap: 2500 cellLength: 2500 sequence: hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
@@ -56,4 +56,21 @@ select * from slot_temp limit 1 </select> <select id="queryCutDrawingByEngineerId" resultType="com.mes.edgstoragecage.entity.vo.CutDrawingVO"> with glass_temp as ( select * from glass_info where engineer_id = #{engineerId} and pattern_sequence = #{patternSequence} ), cut_drawing_temp as ( select t.*, case when t2.glass_id is not null then t2.type when t1.glass_id is not null then t1.state else 0 end as state from glass_temp t left join edg_storage_cage_details t1 on t.glass_id = t1.glass_id left join damage t2 on t.glass_id = t2.glass_id and t2.type in (8,9) )select * from cut_drawing_temp where 1=1 <if test="isAll == 1"> and state = 0 </if> </select> </mapper> hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java
@@ -45,10 +45,6 @@ */ private String filmsId; /** * /*厚度 */ private Double thickness; /** * /*状态 */ private Integer state; hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -105,7 +105,7 @@ } HollowGlassRelationInfo relationInfoBefore = hollowGlassRelationInfoService.getOne(new LambdaQueryWrapper<HollowGlassRelationInfo>() .eq(HollowGlassRelationInfo::getFlowCardId, relationInfoOne.getFlowCardId()) .eq(HollowGlassRelationInfo::getLayer, relationInfoOne.getTotalLayer()) .eq(HollowGlassRelationInfo::getTotalLayer, relationInfoOne.getTotalLayer()) .eq(HollowGlassRelationInfo::getLayer, relationInfoOne.getLayer()) .eq(HollowGlassRelationInfo::getVirtualSlot, relationInfoOne.getVirtualSlot()) .eq(HollowGlassRelationInfo::getSlotSequence, relationInfoOne.getSlotSequence() - 1)); hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java
@@ -49,10 +49,6 @@ */ private String filmsId; /** * /*厚度 */ private Double thickness; /** * /*状态 */ private Integer state; hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
@@ -801,7 +801,11 @@ if (totalLayer != 0) { resultList.add(list.get(0)); HollowBigStorageCage storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>() .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth).last("limit 1")); .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON) .le(HollowBigStorageCage::getMinThickness, list.get(0).getThickness()) .ge(HollowBigStorageCage::getMaxThickness, list.get(0).getThickness()) .eq(HollowBigStorageCage::getRemainWidth, slotWidth) .orderByAsc(HollowBigStorageCage::getMaxThickness).last("limit 1")); targetSlot = storageCage.getSlot(); hollowBigStorageCageService.update(new LambdaUpdateWrapper<HollowBigStorageCage>() .set(HollowBigStorageCage::getRemainWidth, 0).eq(HollowBigStorageCage::getSlot, targetSlot));