hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatDetail.java
New file @@ -0,0 +1,116 @@ package com.mes.pp.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * * </p> * * @author zhoush * @since 2024-04-16 */ @Data @EqualsAndHashCode(callSuper = false) public class OptimizeHeatDetail implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 工程号 */ private String projectNo; /** * 流程卡号 */ private String processId; /** * 补片状态:补片1,0非补片;2024.0409新增 */ private Integer patchState; /** * 层 */ private Integer layer; /** * 订单内排序 */ private Integer orderSort; /** * 版图编号 */ private Integer layoutId; /** * 版图内排序 */ private Integer sort; /** * 小片编号 */ private Integer glassId; /** * 小片宽 */ private double width; /** * 小片高 */ private double height; /** * 配片宽 */ private double pairWidth; /** * 配片高 */ private double pairHeight; /** * x坐标 */ private double xAxis; /** * y坐标 */ private double yAxis; /** * 旋转角度(逆时针) */ private double rotateAngle; /** * 创建人 */ private String creater; /** * 创建时间 */ private Data createTime; /** * 修改时间 */ private Data updateTime; @TableField("intRemark") private Integer intRemark; @TableField("strRemark") private String strRemark; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatLayout.java
New file @@ -0,0 +1,70 @@ package com.mes.pp.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; import java.util.Date; /** * <p> * * </p> * * @author zhoush * @since 2024-04-16 */ @Data @EqualsAndHashCode(callSuper = false) public class OptimizeHeatLayout implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 工程号 */ private String projectNo; /** * 版图Id */ private Integer layoutId; /** * 玻璃数量 */ private Integer glassQty; /** * 版图玻璃面积 */ private double glassArea; /** * 装载率 */ private double layoutRate; /** * 创建人 */ private Integer creater; /** * 创建时间 */ private Date createTime; @TableField("intRemark") private Integer intRemark; @TableField("strRemark") private String strRemark; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeHeatDetailMapper.java
New file @@ -0,0 +1,19 @@ package com.mes.pp.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.github.yulichang.base.MPJBaseMapper; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeHeatDetail; /** * <p> * Mapper 接口 * </p> * * @author zhoush * @since 2024-04-16 */ @DS("pp") public interface OptimizeHeatDetailMapper extends MPJBaseMapper<OptimizeHeatDetail> { } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeHeatLayoutMapper.java
New file @@ -0,0 +1,19 @@ package com.mes.pp.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.github.yulichang.base.MPJBaseMapper; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeHeatLayout; /** * <p> * Mapper 接口 * </p> * * @author zhoush * @since 2024-04-16 */ @DS("pp") public interface OptimizeHeatLayoutMapper extends MPJBaseMapper<OptimizeHeatLayout> { } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatDetailService.java
New file @@ -0,0 +1,17 @@ package com.mes.pp.service; import com.github.yulichang.base.MPJBaseService; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeHeatDetail; /** * <p> * 服务类 * </p> * * @author zhoush * @since 2024-04-16 */ public interface OptimizeHeatDetailService extends MPJBaseService<OptimizeHeatDetail> { } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatLayoutService.java
New file @@ -0,0 +1,17 @@ package com.mes.pp.service; import com.github.yulichang.base.MPJBaseService; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeHeatLayout; /** * <p> * 服务类 * </p> * * @author zhoush * @since 2024-04-16 */ public interface OptimizeHeatLayoutService extends MPJBaseService<OptimizeHeatLayout> { } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatDetailServiceImpl.java
New file @@ -0,0 +1,25 @@ package com.mes.pp.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.github.yulichang.base.MPJBaseServiceImpl; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeHeatDetail; import com.mes.pp.mapper.OptimizeDetailMapper; import com.mes.pp.mapper.OptimizeHeatDetailMapper; import com.mes.pp.service.OptimizeDetailService; import com.mes.pp.service.OptimizeHeatDetailService; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author zhoush * @since 2024-04-16 */ @Service @DS("pp") public class OptimizeHeatDetailServiceImpl extends MPJBaseServiceImpl<OptimizeHeatDetailMapper, OptimizeHeatDetail> implements OptimizeHeatDetailService { } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatLayoutServiceImpl.java
New file @@ -0,0 +1,25 @@ package com.mes.pp.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.github.yulichang.base.MPJBaseServiceImpl; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeHeatLayout; import com.mes.pp.mapper.OptimizeDetailMapper; import com.mes.pp.mapper.OptimizeHeatLayoutMapper; import com.mes.pp.service.OptimizeDetailService; import com.mes.pp.service.OptimizeHeatLayoutService; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author zhoush * @since 2024-04-16 */ @Service @DS("pp") public class OptimizeHeatLayoutServiceImpl extends MPJBaseServiceImpl<OptimizeHeatLayoutMapper, OptimizeHeatLayout> implements OptimizeHeatLayoutService { } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -31,6 +31,12 @@ * @return */ List<List<Map<String, Object>>> selectCurrentCutTerritory(String current); /** * 获取 工程下的钢化版图 * @param current * @return */ List<List<Map<String, Object>>> selectTemperingTerritory(String current); /** * 查询笼内版图差值范围内的 此尺寸玻璃 如无则按照 钢化版图序号 以及玻璃序号 @@ -64,4 +70,12 @@ * @return */ String edgReportStatus(IdentWornRequest request); /** * 进片 扫码ID验证重复 * * @param glassId * @return */ boolean inToVerify(String glassId); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -8,7 +8,6 @@ import com.github.yulichang.query.MPJLambdaQueryWrapper; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.mapper.DamageMapper; import com.mes.damage.service.DamageService; @@ -24,9 +23,9 @@ import com.mes.engineering.mapper.EngineeringMapper; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeLayout; import com.mes.pp.entity.*; import com.mes.pp.mapper.OptimizeDetailMapper; import com.mes.pp.mapper.OptimizeHeatDetailMapper; import com.mes.taskcache.entity.TaskCache; import com.mes.taskcache.service.TaskCacheService; import com.mes.uppattenusage.entity.UpPattenUsage; @@ -62,6 +61,9 @@ @Autowired OptimizeDetailMapper optimizeDetailMapper; @Autowired OptimizeHeatDetailMapper optimizeHeatDetailMapper; @Autowired EdgStorageCageMapper edgStorageCageMapper; @@ -299,6 +301,39 @@ } /** * 获取 工程下的钢化版图 * * @param current * @return */ @Override public List<List<Map<String, Object>>> selectTemperingTerritory(String current) { //此工程的所有优化数据 List<Map<String, Object>> resultCutTerritory=optimizeHeatDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeHeatDetail.class) .selectAll(OptimizeHeatDetail.class) .selectAs(OptimizeProject::getLoadWidth, "olWidth") .selectAs(OptimizeProject::getLoadLength, "olHeight") .leftJoin(OptimizeHeatLayout.class, on -> on .eq(OptimizeHeatLayout::getProjectNo, OptimizeHeatDetail::getProjectNo) .eq(OptimizeHeatLayout::getLayoutId, OptimizeHeatDetail::getLayoutId)) .leftJoin(OptimizeProject.class, on -> on .eq(OptimizeProject::getProjectNo, OptimizeHeatLayout::getProjectNo)) .eq(OptimizeHeatDetail::getProjectNo, current) ); Map<String, List<Map<String, Object>>> groupBy=resultCutTerritory.stream().collect(Collectors.groupingBy(item->item.get("layout_id").toString())); // List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList()); List<List<Map<String, Object>>> result=new ArrayList<>(); for (int i=1;i<=groupBy.keySet().size();i++) { String key=i+""; if(key!=null){ result.add(groupBy.get(key)); } } return result; } /** * 查询笼内版图差值范围内的 此尺寸玻璃 如无则按照 钢化版图序号 以及玻璃序号 * * @param glassId @@ -431,4 +466,30 @@ .set(EdgGlassTaskInfo::getStatus, request.getState()).eq(EdgGlassTaskInfo::getGlassId, request.getGlassId())); return "success"; } /** * 进片 扫码ID验证重复 * * @param glassId * @return */ @Override public boolean inToVerify(String glassId){ List<EdgStorageCageDetails> listEdgStorageCageDetails = baseMapper.selectList(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getGlassId, glassId) ); if (listEdgStorageCageDetails.isEmpty()) { //说明此玻璃没有进过理片 return true; }else{ List<Damage> damage=damageMapper.selectList(new LambdaQueryWrapper<Damage>() .eq(Damage::getGlassId, glassId) .and(wrapper->wrapper.eq(Damage::getType, 8).or().eq(Damage::getType, 9)) ); if(!damage.isEmpty()){ return true; } } return false; } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -94,7 +94,7 @@ public static String engineerId = ""; @Scheduled(fixedDelay = 1000) //@Scheduled(fixedDelay = 1000) public void plcHomeEdgTask() { Date startDate = new Date(); log.info("本次任务开始执行时间:{}", startDate); @@ -124,8 +124,9 @@ log.info("2、获取到的请求字不为0,将确认字不为0,直接结束"); return; } if ("1".equals(taskRequestTypeValue)) { log.info("2、进片请求,且确认字为0,执行进片任务"); boolean result = edgStorageCageDetailsService.inToVerify(glassIdeValue); if ("1".equals(taskRequestTypeValue)&&result) { log.info("2、进片请求,且确认字为0,执行进片任务,扫码重复ID验证【有重复=false,无重复=true】:{}",result); inTo(glassIdeValue, confirmationWrodAddress, currentSlot); } else if ("2".equals(taskRequestTypeValue)) { //09空闲 :1 10空闲 :2 都空闲:3 其他0 @@ -137,8 +138,8 @@ //加笼子里面是否有玻璃,有先出,无玻璃先进 boolean outFlase = outTo(Integer.parseInt(out08Glassstate), Integer.parseInt(out10Glassstate), confirmationWrodAddress, glassIdeValue, Integer.parseInt(currentSlot)); log.info("出片任务是否完成:{},且玻璃id:{}不为空则执行进片任务", outFlase, glassIdeValue); if (!outFlase && StringUtils.isNotBlank(glassIdeValue)) { log.info("出片任务是否完成:{},且玻璃id:{}不为空则执行进片任务,扫码重复ID验证【有重复=false,无重复=true】:{}", outFlase, glassIdeValue,result); if (!outFlase && StringUtils.isNotBlank(glassIdeValue)&&result) { inTo(glassIdeValue, confirmationWrodAddress, currentSlot); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
@@ -1,7 +1,5 @@ package com.mes.job; import com.mes.milo.runner.subscription.SubscriptionCallback; import com.mes.milo.service.MiloService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -18,14 +16,14 @@ @Slf4j public class OpcCacheGlassTask { @Autowired MiloService miloService; @Autowired SubscriptionCallback cacheGlassSubscriptionCallback; @Scheduled(fixedDelay = Long.MAX_VALUE) public void startOpcTask() throws Exception { miloService.subscriptionFromOpcUa(Arrays.asList("my.device.x1", "my.device.x2"), cacheGlassSubscriptionCallback); } // @Autowired // MiloService miloService; // // @Autowired // SubscriptionCallback cacheGlassSubscriptionCallback; // // @Scheduled(fixedDelay = Long.MAX_VALUE) // public void startOpcTask() throws Exception { // miloService.subscriptionFromOpcUa(Arrays.asList("my.device.x1", "my.device.x2"), cacheGlassSubscriptionCallback); // } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opccallback/CacheGlassSubscriptionCallback.java
@@ -1,8 +1,5 @@ package com.mes.opccallback; import com.mes.milo.model.ReadWriteEntity; import com.mes.milo.runner.subscription.SubscriptionCallback; import com.mes.milo.service.MiloService; import lombok.extern.slf4j.Slf4j; import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedDataItem; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; @@ -16,20 +13,20 @@ */ @Service @Slf4j public class CacheGlassSubscriptionCallback implements SubscriptionCallback { public class CacheGlassSubscriptionCallback { @Autowired MiloService miloService; @Override public void onSubscribe(ManagedDataItem dataItem, DataValue value) { try { log.info("{}___________{}" + dataItem, value); ReadWriteEntity readWriteEntity = miloService.readFromOpcUa("my.device.x1"); log.info("{}___________{}" + readWriteEntity); } catch (Exception e) { } } // @Autowired // MiloService miloService; // // @Override // public void onSubscribe(ManagedDataItem dataItem, DataValue value) { // try { // log.info("{}___________{}" + dataItem, value); // ReadWriteEntity readWriteEntity = miloService.readFromOpcUa("my.device.x1"); // log.info("{}___________{}" + readWriteEntity); // } catch (Exception e) { // // } // // } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -32,6 +32,14 @@ @Autowired private TaskCacheService taskCacheService; @ApiOperation("查询钢化版图信息-根据 工程号 参数(工程号)") @PostMapping("/temperingTerritory") @ResponseBody public Result temperingTerritory(String current) { List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectTemperingTerritory(current); return Result.build(200, "成功", h); } @ApiOperation("查询切割版图信息-根据 工程号 参数(工程号)") @PostMapping("/cutTerritory") @ResponseBody hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
@@ -143,6 +143,12 @@ } @Test public void testEngineerTerritory() { List<List<Map<String, Object>>> map = edgStorageCageDetailsService.selectTemperingTerritory("P24052203"); log.info("钢化工程版图信息:{}", Arrays.asList(map)); } @Test public void testidentWorn() { Map<String, Object> arguments=new HashMap<>(); arguments.put("glassId","NG24051802A002-1-4-2-4");//玻璃ID @@ -152,6 +158,11 @@ // edgStorageCageDetailsService.identWorn(arguments); log.info("识别台【破损/拿走】:{}", 1); } @Test public void testInToVerify() { boolean result=edgStorageCageDetailsService.inToVerify("P24060405|30|1"); log.info("是否存在重复ID 》允许进片:{}", result); } @Test public void testPpOptimizeDetail() { hangzhoumesParent/moduleService/pom.xml
@@ -55,11 +55,11 @@ <groupId>com.mes</groupId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <artifactId>opcuaClient</artifactId> <groupId>com.mes</groupId> <version>1.0-SNAPSHOT</version> </dependency> <!-- <dependency>--> <!-- <artifactId>opcuaClient</artifactId>--> <!-- <groupId>com.mes</groupId>--> <!-- <version>1.0-SNAPSHOT</version>--> <!-- </dependency>--> <!--开发者工具--> <!-- <dependency>-->