hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
@@ -1,56 +1,56 @@ package com.mes.uppattenusage.controller; import com.mes.glassinfo.service.GlassInfoService; import com.mes.uppattenusage.entity.OptimizeUpPattenUsage; import com.mes.uppattenusage.entity.UpPattenUsage; import com.mes.glassinfo.entity.GlassInfo; import com.mes.uppattenusage.service.UpPattenUsageService; import com.mes.utils.Result; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author zhoush * @since 2024-04-18 */ @RestController @RequestMapping("/up-patten-usage") @Slf4j public class UpPattenUsageController { @Autowired private UpPattenUsageService upPattenUsageService; @Autowired private GlassInfoService glassInfoService; @ApiOperation("显示正在出片的工程信息") @GetMapping("/prioritylist") //查询现在上片机的玻璃信息 public Result<List<UpPattenUsage>> prioritylist() { List<UpPattenUsage> glass = upPattenUsageService.prioritylist(1); log.info("显示工位上的玻璃信息:{}", glass); return Result.build(200, "", glass); } @ApiOperation("点击选择工程保存后进行调用,传入工程号") @GetMapping("/saveUpPattenUsage") //查询现在上片机的玻璃信息 public Result<Integer> saveUpPattenUsage(String engineeringId) { List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineeringId); log.info("将查询出的UpPattenUsage数据保存到数据库表里"); upPattenUsageService.saveUpPattenUsage(upPattenUsages); log.info("从PP表查询glassinfo的数据并保存到表里"); List<GlassInfo> glassinfo=glassInfoService.selectGlassInfo(engineeringId); return Result.build(200, "", 200); } } // //import com.mes.uppattenusage.service.GlassInfoService; //import com.mes.uppattenusage.entity.OptimizeUpPattenUsage; //import com.mes.uppattenusage.entity.UpPattenUsage; //import com.mes.glassinfo.entity.GlassInfo; //import com.mes.uppattenusage.service.UpPattenUsageService; //import com.mes.utils.Result; //import io.swagger.annotations.ApiOperation; //import lombok.extern.slf4j.Slf4j; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.web.bind.annotation.GetMapping; //import org.springframework.web.bind.annotation.RequestBody; //import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RestController; // //import java.util.List; // ///** // * <p> // * 前端控制器 // * </p> // * // * @author zhoush // * @since 2024-04-18 // */ //@RestController //@RequestMapping("/up-patten-usage") //@Slf4j //public class UpPattenUsageController { // // @Autowired // private UpPattenUsageService upPattenUsageService; // @Autowired // private GlassInfoService glassInfoService; // @ApiOperation("显示正在出片的工程信息") // @GetMapping("/prioritylist") //查询现在上片机的玻璃信息 // public Result<List<UpPattenUsage>> prioritylist() { // List<UpPattenUsage> glass = upPattenUsageService.prioritylist(1); // log.info("显示工位上的玻璃信息:{}", glass); // return Result.build(200, "", glass); // } // // @ApiOperation("点击选择工程保存后进行调用,传入工程号") // @GetMapping("/saveUpPattenUsage") //查询现在上片机的玻璃信息 // public Result<Integer> saveUpPattenUsage(String engineeringId) { // List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineeringId); // log.info("将查询出的UpPattenUsage数据保存到数据库表里"); // upPattenUsageService.saveUpPattenUsage(upPattenUsages); // log.info("从PP表查询glassinfo的数据并保存到表里"); // List<GlassInfo> glassinfo=glassInfoService.selectGlassInfo(engineeringId); // return Result.build(200, "", 200); // } //} hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/UnLoadGlassApplication.java
@@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.scheduling.annotation.EnableScheduling; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** @@ -19,6 +20,7 @@ @EnableSwagger2 @EnableDiscoveryClient @MapperScan(basePackages = "com.mes.*.mapper") @EnableScheduling public class UnLoadGlassApplication { hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/common/Plcdownglass.java
@@ -2,24 +2,21 @@ import cn.hutool.json.JSONObject; import com.mes.device.PlcParameterObject; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.mapper.DownStorageCageDetailsMapper; import com.mes.downstorage.service.DownStorageCageService; import com.mes.downworkstation.service.DownWorkstationService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; import java.util.function.Supplier; @Component @Slf4j public class Plcdownglass extends Thread { public class Plcdownglass { public static final String RESULT_IN = "1"; public static final String RESULT_OUT = "2"; @@ -28,54 +25,41 @@ @Autowired private DownStorageCageService downStorageCageService; @Autowired private DownWorkstationService downWorkstationService; // private final Supplier<DownWorkstationService> plcServiceSupplier; // // public Plcdownglass() { // this.plcServiceSupplier = () -> WebSocketServer.applicationContext.getBean(DownWorkstationService.class); // } private DownWorkstationService downWorkstationService; @Scheduled(fixedDelay = 300) public void PlcdownglassTask() throws InterruptedException { JSONObject jsonObject = new JSONObject(); try { Thread.sleep(300); @Override public void run() { while (this != null) { JSONObject jsonObject = new JSONObject(); try { Thread.sleep(100); downWorkstationService = WebSocketServer.applicationContext.getBean(DownWorkstationService.class); downStorageCageService = WebSocketServer.applicationContext.getBean(DownStorageCageService.class); // String result = S7control.getinstance().ReadWord("DB14.0", 1).get(0) + ""; // String result = S7control.getinstance().ReadWord("DB14.0", 1).get(0) + ""; // String number = S7control.getinstance().ReadWord("DB14.2", 1).get(0) + ""; String result ="1"; String number ="1"; // 进片请求 if (RESULT_IN.equals(result)) { String result = "2"; String number = "1"; // 进片请求 if (RESULT_IN.equals(result)) { downStorageCageService.processInto(number); } // 出片请求 else if (RESULT_OUT.equals(result)) { downStorageCageService.processOut(); } // 进出片请求 else if (RESULT_IN_OUT.equals(result)) { // 先出后进 if (!downStorageCageService.processOut()) { downStorageCageService.processInto(number); } // 出片请求 else if (RESULT_OUT.equals(result)) { downStorageCageService.processOut(); } // 进出片请求 else if (RESULT_IN_OUT.equals(result)) { // 先出后进 if (!downStorageCageService.processOut()) { downStorageCageService.processInto(number); } } downWorkstationService.insertdownglassinfo(); } catch (Exception e) { e.printStackTrace(); } } //下片更新 downWorkstationService.insertdownglassinfo(); } catch (Exception e) { e.printStackTrace(); } } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
@@ -71,5 +71,8 @@ */ private Integer taskStauts; /** * 玻璃id */ private String glassId; } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
@@ -6,8 +6,15 @@ public interface DownGlassInfoService extends IService<DownGlassInfo> { /** * @param flowCardId * @return // 根据流程卡号查询最大序号 */ Integer getMaxSequenceByFlowCardId(String flowCardId); /** * @param downGlassInfo 插入下片信息 */ void insertDownGlassInfo(DownGlassInfo downGlassInfo); hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassTaskService.java
@@ -14,21 +14,51 @@ * @since 2024-04-07 */ public interface DownGlassTaskService extends IService<DownGlassTask> { /** * 查询任务状态为1的信息 * * @return */ List<DownGlassTask> getUnloadingTaskState(); /** * 更新任务状态 * * @return */ void updateTaskStateToZero(long id); /** * 删除任务 * * @return */ void deleteTask(String id); DownGlassTask selectLastOutCacheInfo(String endCell); Integer insertCacheTask(DownGlassTask downGlassTask); List<DownGlassTask> selectInputTaskCache(); /** * 查询出片任务 * * @return */ DownGlassTask selectLastOutCacheInfo(String endCell); /** * 插入任务 * * @return */ Integer insertCacheTask(DownGlassTask downGlassTask); /** * 查询进片任务 * * @return */ List<DownGlassTask> selectInputTaskCache(); /** * 查询出片任务 备用 * * @return */ List<DownGlassTask> selectOutTaskCache(); hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -1,6 +1,8 @@ package com.mes.downglassinfo.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.downglassinfo.entity.DownGlassInfo; import com.mes.downglassinfo.entity.DownGlassTask; @@ -22,25 +24,21 @@ // 根据流程卡号查询最大序号 @Override public Integer getMaxSequenceByFlowCardId(String flowCardId) { QueryWrapper<DownGlassInfo> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("flow_card_id", flowCardId); queryWrapper.orderByDesc("sequence"); // 按照序号倒序排序 queryWrapper.select("sequence").last("LIMIT 1"); // 选择最大序号并限制结果为1条记录 DownGlassInfo downGlassInfo = baseMapper.selectOne(queryWrapper); if (downGlassInfo != null) { return downGlassInfo.getSequence(); } return 0; LambdaQueryWrapper<DownGlassInfo> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(DownGlassInfo::getFlowCardId, flowCardId) .select(DownGlassInfo::getSequence) .orderByDesc(DownGlassInfo::getSequence) .last("LIMIT 1"); DownGlassInfo downGlassInfo = baseMapper.selectOne(lambdaQueryWrapper); return downGlassInfo != null ? downGlassInfo.getSequence() : 0; } @Override public void insertDownGlassInfo(DownGlassInfo downGlassInfo) { baseMapper.insert(downGlassInfo); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassTaskServiceImpl.java
@@ -8,6 +8,7 @@ import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.mapper.DownGlassTaskMapper; import com.mes.downglassinfo.service.DownGlassTaskService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.List; @@ -35,7 +36,7 @@ public void updateTaskStateToZero(long id) { UpdateWrapper<DownGlassTask> updateWrapper = new UpdateWrapper<>(); updateWrapper.set("task_stauts", 0).eq("id", id); baseMapper.update(null, updateWrapper); baseMapper.update(new DownGlassTask(), updateWrapper); } @Override @@ -59,39 +60,39 @@ @Override public Integer insertCacheTask(DownGlassTask downGlassTask) { DownGlassTask glassInfo = new DownGlassTask(); glassInfo.setId(downGlassTask.getId()); glassInfo.setStartCell(downGlassTask.getStartCell()); glassInfo.setEndCell(downGlassTask.getEndCell()); glassInfo.setTaskType(downGlassTask.getTaskType()); glassInfo.setWidth(downGlassTask.getWidth()); glassInfo.setHeight(downGlassTask.getHeight()); glassInfo.setFilmsid(downGlassTask.getFilmsid()); glassInfo.setThickness(downGlassTask.getThickness()); glassInfo.setFlowCardId(downGlassTask.getFlowCardId()); glassInfo.setTaskStauts(0); // 默认任务状态为0 // 查询数据库,检查主键值是否已经存在 DownGlassTask existingTask = baseMapper.selectById(downGlassTask.getId()); if (existingTask != null) { // 如果已存在相同主键值的任务,则不进行插入操作,返回 null 或者抛出异常 // 这里简单起见,直接返回 null return null; } int rows = baseMapper.insert(glassInfo); // 如果主键值不存在,则进行插入操作 DownGlassTask newDownGlassTask = new DownGlassTask(); BeanUtils.copyProperties(downGlassTask, newDownGlassTask); newDownGlassTask.setTaskStauts(0); // 默认任务状态为0 int rows = baseMapper.insert(newDownGlassTask); return rows > 0 ? rows : null; } @Override public List<DownGlassTask> selectInputTaskCache(){ return baseMapper.selectList(new QueryWrapper<DownGlassTask>().eq("task_status",0).eq("task_type",1)); public List<DownGlassTask> selectInputTaskCache() { return baseMapper.selectList(new QueryWrapper<DownGlassTask>().eq("task_status", 0).eq("task_type", 1)); } /** * 查询待出片任务 * * @return */ @Override public List<DownGlassTask> selectOutTaskCache(){ return baseMapper.selectList(new QueryWrapper<DownGlassTask>().eq("task_status",0).eq("task_type",2)); public List<DownGlassTask> selectOutTaskCache() { return baseMapper.selectList(new QueryWrapper<DownGlassTask>().eq("task_status", 0).eq("task_type", 2)); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
@@ -34,7 +34,7 @@ @GetMapping("/selectStorageCage") @ResponseBody public Result selectEdgStorageCage () { List<Map> list=downStorageCageService.getCacheInfo(); List<Map> list=downStorageCageDetailsService.getCacheInfo(); return Result.build(200,"成功",list); } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCage.java
@@ -1,6 +1,7 @@ package com.mes.downstorage.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -48,6 +49,7 @@ * 启用状态 */ @ApiModelProperty(value = "启用状态", position = 5) @TableField("enable_state") private String enableState; /** hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/entity/DownStorageCageDetails.java
@@ -86,7 +86,7 @@ /** * 膜系id */ private int filmsid; private String filmsid; /** * 状态 */ hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -7,11 +7,49 @@ import java.util.Map; public interface DownStorageCageDetailsService { /** * @return //添加理片笼内信息 */ void addDownStorageCageDetails(DownStorageCageDetails details); //修改理片笼内信息 /** * @return //修改理片笼内信息 */ boolean updatedownStorageCageDetails(DownStorageCageDetails details); List<DownStorageCageDetails> getCacheLeisure(); /** * @param start * @param end * @return 根据传入的工位查询符合按照顺序和大小出片的小片 */ List<DownStorageCageDetails> getCacheOut(int start, int end); /** * @return 查询笼子内信息 */ List<Map> getCacheInfo(); /** * @param flowcardid * @param width * @return 查询可进此片玻璃的栅格号 找到空格 */ List<DownStorageCageDetails> getIsExistIntoCacheByflowcardid(String flowcardid, double width); /** * @param start * @param end * @return log.info(" 单片情况根据传入的工位查询符合按照大小出片, 并且优先出满架的小片 "); */ List<DownStorageCageDetails> CacheOut(int start, int end); /** * @return 查询空格子 */ List<DownStorageCageDetails> selectCacheEmpty2(); } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
@@ -17,19 +17,26 @@ * @since 2024-03-27 */ public interface DownStorageCageService extends MPJBaseService<DownStorageCage> { public List<Map> gettask(); // List<Map<String, Object>> selectCacheLeisure(); List<DownStorageCageDetails> getCacheLeisure(); List<DownStorageCageDetails> getCacheOut(int start, int end); List<Map> getCacheInfo(); List<DownStorageCageDetails> getIsExistIntoCacheByLayoutAndSequence(Integer tempering_layout_id, Integer tempering_feed_sequence, double width); List<DownStorageCageDetails> getIsExistIntoCacheByLayout(Integer tempering_layout_id, double width); List<DownStorageCageDetails> getIsExistIntoCacheByflowcardid(String flowcardid, double width); List<DownStorageCageDetails> IsExistIntoCacheByflowcardid(String flowcardid, double width); List<Map> selectCacheEmpty(); boolean processInto(String Number); boolean processOut(); /** * @param Number * @return 进片 */ boolean processInto(String Number); /** * @return 空格 */ /** * @return 出片 */ boolean processOut(); List<DownStorageCageDetails> selectCacheEmpty() ; } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
@@ -6,9 +6,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.toolkit.JoinWrappers; import com.mes.downstorage.entity.DownStorageCage; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.mapper.DownStorageCageDetailsMapper; import com.mes.downstorage.mapper.DownStorageCageMapper; import com.mes.downstorage.service.DownStorageCageDetailsService; import com.mes.glassinfo.entity.GlassInfo; import lombok.extern.slf4j.Slf4j; @@ -22,7 +25,8 @@ @Service public class DownStorageCageDetailsServiceImpl extends ServiceImpl<DownStorageCageDetailsMapper, DownStorageCageDetails> implements DownStorageCageDetailsService { @Autowired private DownStorageCageMapper downStorageCageMapper; @Autowired private DownStorageCageDetailsMapper downStorageCageDetailsMapper; @Override @@ -41,22 +45,122 @@ @Override public List<DownStorageCageDetails> CacheOut(int start, int end) { log.info("单片情况根据传入的工位查询符合按照大小出片的小片"); log.info("单片情况根据传入的工位查询符合按照大小出片,并且优先出满架的小片"); return downStorageCageDetailsMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() .select("t.*") .leftJoin("(SELECT t1.* FROM down_storage_cage_details t1 " + "JOIN (SELECT flow_card_id, MAX(width) AS max_width FROM glass_info GROUP BY flow_card_id) t " + "ON t1.flow_card_id = t.flow_card_id WHERE t1.width = t.max_width) t3" + "JOIN (SELECT flow_card_id, MAX(width*height) AS max_width FROM glass_info GROUP BY flow_card_id) t " + "ON t1.flow_card_id = t.flow_card_id WHERE t1.width*t1.height = t.max_width) t3" + " ON t.glass_id = t3.glass_id") .leftJoin("down_workstation t4 ON t3.flow_card_id = t4.flow_card_id") .isNull(Boolean.parseBoolean("t.glass_id"), "SELECT glass_id FROM down_glass_info") .between("t4.workstation_id", start, end) // 根据 racks_number 排序 .orderByDesc("t4.racks_number") ); } // Other business methods can be implemented here @Override public List<DownStorageCageDetails> getCacheOut(int start, int end) { log.info("根据传入的工位查询符合按照顺序和大小出片的小片"); return downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .leftJoin("down_workstation dw on escd.flow_card_id = dw.flow_card_id") .leftJoin("glass_info gi on dw.flow_card_id = gi.flowcard_id and gi.flowcard_id=escd.flow_card_id ") .isNotNull("escd.slot") .between("dw.workstation_id", start, end) .orderByDesc("escd.width") .orderByDesc("escd.height") ); } @Override public List<DownStorageCageDetails> selectCacheEmpty2(){ return downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>() .select("escd.glass_id","escd.flow_card_id","escd.width","escd.height") .leftJoin("down_storage_cage_details escd on t.device_id=escd.device_id and t.slot=escd.slot") .isNull("escd.slot") ); } @Override public List<Map> getCacheInfo() { log.info(" 查询笼子内信息"); return downStorageCageMapper.selectJoinList( Map.class, new MPJQueryWrapper<DownStorageCage>() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .orderByAsc("t.slot") ); } @Override public List<DownStorageCageDetails> getCacheLeisure() { log.info(" 查询笼子内空闲"); List<DownStorageCageDetails> list = downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .isNull("escd.slot") .orderByAsc("escd.slot") ); return list; } @Override public List<DownStorageCageDetails> getIsExistIntoCacheByflowcardid(String flowcardid, double width) { log.info(" 查询可进此片玻璃的栅格号 找到空格"); return downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCage>() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .isNull("escd.slot") .apply("t.remain_width - " + width + " > 0") .orderByAsc("escd.sequence") ); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -1,13 +1,13 @@ package com.mes.downstorage.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.query.MPJQueryWrapper; import com.github.yulichang.toolkit.JoinWrappers; import com.mes.common.PLCAutoMes; import com.mes.common.S7control; import com.mes.device.PlcParameterObject; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.mapper.DownStorageCageMapper; import com.mes.downstorage.service.DownStorageCageDetailsService; @@ -15,6 +15,7 @@ import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -42,163 +43,6 @@ private DownGlassTaskService downGlassTaskService; @Autowired private DownStorageCageDetailsService downStorageCageDetailsService; @Override public List<Map> gettask(){ downStorageCageMapper.selectList(null); // downStorageCageMapper.selectJoin(); return null; }; @Override public List<DownStorageCageDetails> getCacheLeisure() { log.info(" 查询笼子内空闲"); // List<DownStorageCageDetails> list = downStorageCageMapper.selectJoinList( // DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("escd.*") // .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") // .isNull("escd.slot") // .orderByAsc("escd.slot") // ); // return list; return null; } @Override public List<Map> selectCacheEmpty(){ return baseMapper.selectJoinList( Map.class,new MPJQueryWrapper<DownStorageCage>().selectAll(DownStorageCage.class) .select("escd.glass_id","escd.flow_card_id","escd.width","escd.height") .leftJoin("down_storage_cage_details escd on t.device_id=escd.device_id and t.slot=escd.slot") .isNull("escd.slot") ); } @Override public List<DownStorageCageDetails> getCacheOut(int start, int end) { log.info("根据传入的工位查询符合按照顺序和大小出片的小片"); // return downStorageCageMapper.selectJoinList( // DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("escd.*") // .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") // .leftJoin("down_workstation dw on escd.flow_card_id = dw.flow_card_id") // .leftJoin("glass_info gi on dw.flow_card_id = gi.flowcard_id and gi.flowcard_id=escd.flow_card_id ") // .isNotNull("escd.slot") // .between("dw.workstation_id", start, end) // .orderByDesc("escd.width") // .orderByDesc("escd.height") // ); return null; } @Override public List<Map> getCacheInfo() { log.info(" 查询笼子内信息"); // return downStorageCageMapper.selectJoinList( // Map.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("escd.*") // .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") // .orderByAsc("t.slot") // ); return null; } @Override public List<DownStorageCageDetails> getIsExistIntoCacheByLayoutAndSequence(Integer tempering_layout_id, Integer tempering_feed_sequence, double width) { log.info(" 查询可进此片玻璃的栅格号 找到相同版图id并且大于前面的顺序的空格"); // List<DownStorageCageDetails> list = downStorageCageMapper.selectJoinList( // DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("escd.*") // .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") // .isNotNull("escd.slot") // .eq("escd.tempering_layout_id", tempering_layout_id) // .lt("escd.tempering_feed_sequence", tempering_feed_sequence) // .gt("t.remain_width", width) // .orderByAsc("escd.tempering_feed_sequence") // ); // return list; return null; } @Override public List<DownStorageCageDetails> IsExistIntoCacheByflowcardid(String flowcardid, double width) { log.info(" 查询可进此片玻璃的栅格号"); // return downStorageCageMapper.selectJoinList( // DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("escd.*") // .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") // .isNotNull("escd.slot") // .lt("escd.flow_card_id", flowcardid) // // 条件 t.remain_width - width > 0 // .apply("t.remain_width - " + width + " > 0") // .orderByDesc("escd.tempering_layout_id, escd.tempering_feed_sequence") // ); return null; } @Override public List<DownStorageCageDetails> getIsExistIntoCacheByLayout(Integer tempering_layout_id, double width) { log.info(" 查询可进此片玻璃的栅格号"); // return downStorageCageMapper.selectJoinList( // DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("escd.*") // .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") // .isNotNull("escd.slot") // .lt("escd.tempering_layout_id", tempering_layout_id) // // 条件 t.remain_width - width > 0 // .apply("t.remain_width - " + width + " > 0") // .orderByDesc("escd.tempering_layout_id, escd.tempering_feed_sequence") // ); return null; } @Override public List<DownStorageCageDetails> getIsExistIntoCacheByflowcardid(String flowcardid, double width) { log.info(" 单片情况 查询可进此片玻璃的栅格号 找到相同流程卡号的空格"); // return downStorageCageMapper.selectJoinList( // DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("escd.*") // .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") // .isNotNull("escd.slot") // .eq("escd.flow_card_id", flowcardid) // .gt("t.remain_width", width) // .orderByAsc("escd.sequence") // ); return null; } @@ -225,32 +69,23 @@ public DownGlassTask createDownGlassTask(GlassInfo glassInfo, String startCell, String endCell,String taskType ) { DownGlassTask downGlassTask = new DownGlassTask(); downGlassTask.setId(glassInfo.getId()); downGlassTask.setStartCell(startCell); downGlassTask.setTaskType(taskType); downGlassTask.setEndCell(endCell); downGlassTask.setWidth(glassInfo.getWidth()); downGlassTask.setHeight(glassInfo.getHeight()); downGlassTask.setFilmsid(String.valueOf(glassInfo.getFilmsid())); downGlassTask.setThickness(glassInfo.getThickness()); downGlassTask.setFlowCardId(glassInfo.getFlowcardId()); BeanUtils.copyProperties(glassInfo,downGlassTask); downGlassTask.setStartCell(startCell); downGlassTask.setTaskType(taskType); downGlassTask.setEndCell(endCell); return downGlassTask; } public DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, String startCell, String endCell,String taskType ) { DownGlassTask downGlassTask = new DownGlassTask(); downGlassTask.setId(glassInfo.getId()); BeanUtils.copyProperties(glassInfo,downGlassTask); downGlassTask.setStartCell(startCell); downGlassTask.setTaskType(taskType); downGlassTask.setEndCell(endCell); downGlassTask.setWidth(glassInfo.getWidth()); downGlassTask.setHeight(glassInfo.getHeight()); downGlassTask.setFilmsid(String.valueOf(glassInfo.getFilmsid())); downGlassTask.setThickness(glassInfo.getThickness()); downGlassTask.setFlowCardId(glassInfo.getFlowCardId()); return downGlassTask; } @@ -264,13 +99,13 @@ //存在此玻璃编号 if (GlassInfo != null) { //同找到同流程卡附近空格 List<DownStorageCageDetails> list = getIsExistIntoCacheByflowcardid(GlassInfo.getFlowcardId(), GlassInfo.getWidth()); List<DownStorageCageDetails> list = selectCacheEmpty(); List<Map> selectCacheEmpty=selectCacheEmpty(); // list<Map> list=selectCacheEmpty(); // list<Map> = downStorageCageService.selectCacheEmpty(); if (selectCacheEmpty.size() > 0) { if (list.size() > 0) { //存在空格 //1.生成任务: 起始位置0 结束位置this.slot 任务类型 1 (进片任务) //2.回复 1进片 @@ -282,7 +117,7 @@ downGlassTaskService.insertCacheTask(downGlassTask); S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1); //S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1); //完成后插入小片数据到缓存表 @@ -326,25 +161,25 @@ String endcell = "13"; String SendEndcell = "1"; // selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item3,"0",endcell,"2"); downGlassTaskService.insertCacheTask(downGlassTask); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); // S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell); // S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } } //如果同时前后端都空闲 优先后端出片并且优先满架 else if (!list2.isEmpty()) { else if (!list2.isEmpty()&&!list3.isEmpty()) { DownStorageCageDetails item3 = list2.get(0); String endcell = "11"; String SendEndcell = "1"; // selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item3,"0",endcell,"2"); downGlassTaskService.insertCacheTask(downGlassTask); @@ -358,9 +193,10 @@ DownStorageCageDetails item = list.get(0); // 出到 G06 //selectInfo.insertCacheTask(item.getGlassId() + "", "0", "06", "2", item.getWidth(), item.getHeight(), item.getFilmsid(), item.getThickness(), item.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item,"0","06","2"); downGlassTaskService.insertCacheTask(downGlassTask); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "1"); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; @@ -370,7 +206,7 @@ DownStorageCageDetails item2 = list2.get(0); // 出到 G11 // selectInfo.insertCacheTask(item2.getGlassId() + "", "0", "11", "2", item2.getWidth(), item2.getHeight(), item2.getFilmsid(), item2.getThickness(), item2.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item2,"0","11","2"); downGlassTaskService.insertCacheTask(downGlassTask); @@ -388,8 +224,17 @@ } @Override public List<DownStorageCageDetails> selectCacheEmpty() { return baseMapper.selectJoinList(DownStorageCageDetails.class, JoinWrappers.lambda(DownStorageCage.class) .selectAll(DownStorageCage.class) .select(DownStorageCageDetails::getWidth, DownStorageCageDetails::getHeight, DownStorageCageDetails::getGlassId) .leftJoin(DownStorageCageDetails.class, on -> on .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId) .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)) .isNull(DownStorageCageDetails::getSlot) ); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/entity/DownWorkstationTask.java
@@ -55,6 +55,8 @@ * 任务状态 */ private Integer state; /** * 玻璃 */ private String glassId; } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
@@ -16,18 +16,50 @@ */ public interface DownWorkstationService extends IService<DownWorkstation> { /** * @param startId * @param endId * @return 获取工位信息 */ List<DownWorkstation> getoneDownWorkstations(int startId, int endId); /** * @param workstationId * @return 获取总数量 */ int getTotalQuantity(int workstationId); /** * @param workstationId * @return 获取落架数量 */ int getRacksNumber(int workstationId); /** * @param workstationId 清空架子信息 */ void clearFlowCardId(int workstationId); /** * @param flowCardId * @param racksnumber 更新落架数量 */ void updateracksnumber(String flowCardId, int racksnumber); /** * @param flowCardId * @param glassInfoCount * @param workstationId * @return 更新架子和数量 */ int updateFlowCardIdAndCount(String flowCardId, int glassInfoCount, int workstationId); void insertdownglassinfo(); List<Map<String, Object>> getTotalGlassDimensionsByWorkstation(); /** * @return // * 工位显示 */ List<Map<String, Object>> getTotalGlassDimensionsByWorkstation(); } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationTaskService.java
@@ -15,9 +15,18 @@ * @since 2024-04-07 */ public interface DownWorkstationTaskService extends IService<DownWorkstationTask> { /** * @param downGlassInfo 插入任务 */ void insertdownWorkstationtask(DownGlassInfo downGlassInfo); /** * @param Id 更新任务状态 */ void updateTaskStateToZero(long Id); /** * @return 获取任务状态为1的信息 */ List<DownWorkstationTask> getTaskState(); } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
@@ -91,17 +91,6 @@ } // @Override // public int getTotalQuantity(int workstationId) { // Integer totalQuantity = downWorkstationMapper.getTotalQuantity(workstationId); // return totalQuantity != null ? totalQuantity : 0; // } // @Override // public int getRacksNumber(int workstationId) { // Integer racksNumber = downWorkstationMapper.getRacksNumber(workstationId); // return racksNumber != null ? racksNumber : 0; // } //根据条件获取落架数量 @Override public int getRacksNumber(int workstationId) { @@ -130,7 +119,7 @@ public void updateracksnumber(String flowCardId, int racksNumber) { UpdateWrapper<DownWorkstation> updateWrapper = new UpdateWrapper<>(); updateWrapper.set("racks_number", racksNumber).eq("flow_card_id", flowCardId); baseMapper.update(null, updateWrapper); baseMapper.update(new DownWorkstation(), updateWrapper); } @@ -141,7 +130,7 @@ .set("flow_card_id", flowCardId) .eq("workstation_id", workstationId); return baseMapper.update(null, updateWrapper); return baseMapper.update(new DownWorkstation(), updateWrapper); } @Override @@ -152,10 +141,13 @@ .set("racks_number", 0) .eq("workstation_id", workstationId); baseMapper.update(null, updateWrapper); baseMapper.update(new DownWorkstation(), updateWrapper); } public DownWorkstation selectByFlowCardId(String flowcardid) { QueryWrapper<DownWorkstation> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("flow_card_id", flowcardid); hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationTaskServiceImpl.java
@@ -8,6 +8,7 @@ import com.mes.downworkstation.entity.DownWorkstationTask; import com.mes.downworkstation.mapper.DownWorkstationTaskMapper; import com.mes.downworkstation.service.DownWorkstationTaskService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.List; @@ -31,14 +32,10 @@ // 如果没有记录,则将 id 设置为 1;否则,将 id 设置为当前最大 id 值加 1 Long newId = (maxId == null) ? 1 : maxId + 1; entity.setId(newId); // 设置手动递增的 id entity.setFlowCardId(downGlassInfo.getFlowCardId()); entity.setWidth(downGlassInfo.getWidth()); entity.setHeight(downGlassInfo.getHeight()); entity.setThickness(downGlassInfo.getThickness()); entity.setFilmsid(downGlassInfo.getFilmsid()); entity.setState(1); BeanUtils.copyProperties(entity,downGlassInfo); entity.setId(newId); // 设置手动递增的 id entity.setState(1); baseMapper.insert(entity); } @@ -70,6 +67,7 @@ UpdateWrapper<DownWorkstationTask> updateWrapper = new UpdateWrapper<>(); updateWrapper.set("state", 0).eq("id", id); baseMapper.update(null, updateWrapper); baseMapper.update(new DownWorkstationTask(), updateWrapper); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
@@ -32,7 +32,7 @@ * 流程卡 */ @TableField("flow_card_Id") private String flowcardId; private String flowCardId; /** * 流程卡玻璃类型 @@ -57,7 +57,7 @@ /** * 膜系 */ private Integer filmsid; private String filmsid; /** * 磨前宽 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -1,4 +1,4 @@ package com.mes.uppattenusage.service.impl; package com.mes.glassinfo.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -53,12 +53,5 @@ } // public void updateFlowCardIdAndCount(String flowCardId, int glassInfoCount, int workstationId) { // int rowsAffected = glassInfoMapper.updateFlowCardIdAndCount(flowCardId, glassInfoCount, workstationId); // if (rowsAffected > 0) { // System.out.println("更新架子上流程卡 ID 和数量成功"); // } else { // System.out.println("更新架子上流程卡 ID 和数量失败"); // } // } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
@@ -1,8 +1,11 @@ package mes; import com.mes.UnLoadGlassApplication; import com.mes.downglassinfo.service.impl.DownGlassInfoServiceImpl; import com.mes.downglassinfo.service.impl.DownGlassTaskServiceImpl; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.service.DownStorageCageDetailsService; import com.mes.downstorage.service.impl.DownStorageCageDetailsServiceImpl; import com.mes.downstorage.service.impl.DownStorageCageServiceImpl; import com.mes.downworkstation.service.DownWorkstationService; @@ -31,6 +34,12 @@ @Autowired DownStorageCageServiceImpl downStorageCageServiceImpl; @Autowired DownGlassTaskServiceImpl downGlassTaskServiceImpl; @Autowired DownGlassInfoServiceImpl downGlassInfoServiceImpl; @Autowired DownStorageCageDetailsServiceImpl downStorageCageDetailsServiceImpl; @Autowired DownStorageCageDetailsService downStorageCageDetailsService; @Autowired DownWorkstationServiceImpl downWorkstationServiceImpl; @@ -42,20 +51,20 @@ @Test public void testCacheGlass() { List<Map> map = downStorageCageServiceImpl.getCacheInfo(); List<Map> map = downStorageCageDetailsServiceImpl.getCacheInfo(); log.info("笼内信息:{}", Arrays.asList(map)); } @Test public void testselectCacheEmpty() { List<DownStorageCageDetails> map = downStorageCageServiceImpl.getCacheLeisure(); List<DownStorageCageDetails> map = downStorageCageDetailsServiceImpl.getCacheLeisure(); log.info("笼内空格:{}", Arrays.asList(map)); } @Test public void testgetCacheOut() { List<DownStorageCageDetails> map = downStorageCageServiceImpl.getCacheOut(1, 5); List<DownStorageCageDetails> map = downStorageCageDetailsServiceImpl.getCacheOut(1, 5); log.info("根据传入的工位查询符合按照顺序和大小出片的小片:{}", Arrays.asList(map)); } @@ -74,10 +83,12 @@ } @Test public void testin() { public void testin2() { log.info("测试进片"); downStorageCageServiceImpl.getIsExistIntoCacheByflowcardid("NG2023005",500); downStorageCageDetailsServiceImpl.getIsExistIntoCacheByflowcardid("NG2023005",500); } @@ -85,14 +96,14 @@ @Test public void selectCacheEmpty() { log.info("测试进片"); downStorageCageServiceImpl.selectCacheEmpty(); downStorageCageDetailsServiceImpl.getCacheLeisure(); } @Test public void CacheEmpty() { log.info("测试出片"); downStorageCageDetailsService.CacheOut(1,5); downStorageCageDetailsService.CacheOut(1,10); } @@ -105,5 +116,27 @@ } @Test public void getMaxSequenceByFlowCardId() { log.info("最大序号"); downGlassInfoServiceImpl.getMaxSequenceByFlowCardId("NG2023005"); } @Test public void updateTaskStateToZero() { log.info("更新状态0"); downGlassTaskServiceImpl.updateTaskStateToZero(3); } @Test public void selectCacheEmpty2() { downStorageCageServiceImpl.selectCacheEmpty(); } }