hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
@@ -30,8 +30,8 @@ @ApiOperation("查询理片笼信息") @GetMapping("/bigStorageCage") public Result querybigStorageCageDetail() { return Result.build(200,"查询成功",bigStorageCageService.querybigStorageCageDetail()); public Result querybigStorageCageDetail(int deviceId) { return Result.build(200,"查询成功",bigStorageCageService.querybigStorageCageDetail(deviceId)); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -1,6 +1,7 @@ package com.mes.bigstorage.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.utils.Result; @@ -40,7 +41,6 @@ public Result insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { bigStorageCageDetailsService.save(bigStorageCageDetails); return Result.build(200,"添加成功",1); } @ApiOperation("理片笼详情删除") @@ -48,7 +48,15 @@ public Result deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) { bigStorageCageDetailsService.removeById(bigStorageCageDetails.getId()); return Result.build(200,"删除成功",1); } @ApiOperation("理片笼任务查询") @PostMapping("/selectBigStorageCageDetails") public Result selectBigStorageCageDetails(int state) { LambdaQueryWrapper<BigStorageCageDetails> selectWrapper = new LambdaQueryWrapper<>(); selectWrapper.eq(BigStorageCageDetails::getState,state); return Result.build(200,"查询成功",bigStorageCageDetailsService.list(selectWrapper)); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
@@ -1,13 +1,18 @@ package com.mes.bigstorage.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; import java.util.List; /** * <p> @@ -17,6 +22,7 @@ * @author zhoush * @since 2024-03-27 */ @ApiModel(description = "<p> </p>") @Api(description = "大理片笼详情") @Data @EqualsAndHashCode(callSuper = false) @@ -109,5 +115,18 @@ @ApiModelProperty(value = "玻璃间隙", position = 15) private Integer gap; /** * 进片任务 */ @ApiModelProperty(value = "进片任务", position = 16) @TableField(exist = false) private BigStorageCageFeedTask bigStorageCageFeedTask; /** * 出片任务 */ @ApiModelProperty(value = "出片任务", position = 17) @TableField(exist = false) private BigStorageCageOutTask bigStorageCageOutTask; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.glassinfo.entity.GlassInfo; import java.util.List; /** * <p> @@ -13,4 +16,7 @@ */ public interface BigStorageCageDetailsService extends IService<BigStorageCageDetails> { List<BigStorageCageDetails> selectTask(int taskType); boolean selectGetBoard(GlassInfo glassInfo, String plcFeedReqLine); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -7,6 +7,7 @@ import com.mes.glassinfo.entity.GlassInfo; import java.util.List; import java.util.Map; /** * <p> @@ -24,6 +25,9 @@ boolean outGlass(); List<BigStorageCage> querybigStorageCageDetail(); List<BigStorageCage> querybigStorageCageDetail(int deviceId); List<Map<String, Object>> selectBigStorageCageUsage(); boolean selectWidthSufficient(BigStorageCageDetails layoutSlotInfo,double width); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -1,15 +1,24 @@ package com.mes.bigstorage.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstorage.mapper.BigStorageCageMapper; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper; import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper; import com.mes.glassinfo.entity.GlassInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -21,7 +30,82 @@ */ @Service public class BigStorageCageDetailsServiceImpl extends ServiceImpl<BigStorageCageDetailsMapper, BigStorageCageDetails> implements BigStorageCageDetailsService { @Resource private BigStorageCageMapper bigStorageCageMapper; @Resource private BigStorageCageOutTaskMapper bigStorageCageOutTaskMapper; @Resource private BigStorageCageFeedTaskMapper bigStorageCageFeedTaskMapper; /** * 查询进/出片任务 */ @Override public List<BigStorageCageDetails> selectTask(int taskType) { if(taskType==1){ //进片任务数据 LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, 1) .or() .eq(BigStorageCageDetails::getState, 2); List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(feedWrapper); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList=bigStorageCageFeedTaskMapper.selectList(null); Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) { BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); } return bigStorageCageDetailsList; }else{ //出片任务数据 LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>(); outWrapper.eq(BigStorageCageDetails::getState, 3) .or() .eq(BigStorageCageDetails::getState, 4); List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(outWrapper); List<BigStorageCageOutTask> bigStorageCageOutTaskList=bigStorageCageOutTaskMapper.selectList(null); Map<String, BigStorageCageOutTask> listMap = bigStorageCageOutTaskList.stream() .collect(Collectors.toMap(BigStorageCageOutTask::getGlassId, task -> task)); for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) { BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask); } return bigStorageCageDetailsList; } } /** * 判断当前玻璃是否能上车 */ @Override public boolean selectGetBoard(GlassInfo glassInfo, String plcFeedReqLine){ double carWidth=5000; LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, plcFeedReqLine); List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(feedWrapper); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList=bigStorageCageFeedTaskMapper.selectList(null); Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) { BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); } for (BigStorageCageDetails bigStorageCageDetails:bigStorageCageDetailsList ) { if(bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState()==0){ carWidth -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + bigStorageCageDetails.getGap(); } } if(carWidth>=0){ return true; }else{ return false; } } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
@@ -10,6 +10,7 @@ import com.mes.bigstorage.mapper.BigStorageCageMapper; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.service.TemperingGlassInfoService; import lombok.extern.slf4j.Slf4j; @@ -18,6 +19,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -44,29 +46,32 @@ @Resource private TemperingGlassInfoService temperingGlassInfoService; @Resource private GlassInfoService glassInfoService; //进片逻辑 @Override public BigStorageCageDetails feedGlass(GlassInfo glassInfo, BigStorageCageDetails bigStorageCageDetails) { log.info("1、查询理片笼内片序+1等于当前玻璃片序的玻璃"); LambdaQueryWrapper<BigStorageCageDetails> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId()) .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1); .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() - 1); BigStorageCageDetails layoutSlotInfo; layoutSlotInfo= bigStorageCageDetailsMapper.selectOne(wrapper); log.info("1、查询理片笼内片序-1等于当前玻璃片序的玻璃"+layoutSlotInfo); BeanUtils.copyProperties(glassInfo, bigStorageCageDetails); log.info("2、查询理片笼内片序+1等于当前玻璃片序的玻璃的结果不为空时"); if (layoutSlotInfo.getSlot() != null) { log.info("2、查询理片笼内片序-1等于当前玻璃片序的玻璃的结果不为空时"+layoutSlotInfo.getSlot()); if (layoutSlotInfo.getSlot() != null&&selectWidthSufficient(layoutSlotInfo,bigStorageCageDetails.getWidth())) { bigStorageCageDetails.setSlot(layoutSlotInfo.getSlot()); } else { log.info("3、查询理片笼内片序+1等于当前玻璃片序的玻璃的结果为空时获取当前玻璃版图id是否存在理片笼内"); log.info("3、查询理片笼内片序-1等于当前玻璃片序的玻璃的结果为空时获取当前玻璃版图id是否存在理片笼内"); LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailslambdaQueryWrapper = new LambdaQueryWrapper<>(); bigStorageCageDetailslambdaQueryWrapper .select(BigStorageCageDetails::getTemperingLayoutId); layoutSlotInfo = bigStorageCageDetailsMapper.selectOne(bigStorageCageDetailslambdaQueryWrapper); if(layoutSlotInfo != null){ if(layoutSlotInfo != null&&selectWidthSufficient(layoutSlotInfo,bigStorageCageDetails.getWidth())){ log.info("4、获取笼子内适合的格子"); BigStorageCage bigStorageCage=bigStorageCageSlot(layoutSlotInfo.getDeviceId()); bigStorageCageDetails.setSlot(bigStorageCage.getSlot()); @@ -81,13 +86,19 @@ List<Map<String, Object>> bigStorageCageDetailsCount= bigStorageCageDetailsMapper.selectMaps(queryWrapper); log.info("5、查询笼子内是否有合适的格子"); boolean found=false; for (Map<String, Object> map : bigStorageCageDetailsCount) { for (Map.Entry<String, Object> entry : map.entrySet()) { int deviceId = Integer.parseInt(entry.getKey()); BigStorageCage bigStorageCage=bigStorageCageSlot(deviceId); if(bigStorageCage!=null){ bigStorageCageDetails.setSlot(bigStorageCage.getSlot()); found=true; break; } } if(found){ break; } } } @@ -114,13 +125,14 @@ return bigStorageCageMapper.selectOne(bigStorageCageWrapper); } //出片逻辑 @Override public boolean outGlass() { List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(); LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper=new LambdaQueryWrapper<>(); temperingGlassInfoWrapper.eq(TemperingGlassInfo::getState,-1); List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(temperingGlassInfoWrapper); log.info("1、查询钢化小片任务表是否有待出玻璃"+temperingGlassInfoList.size()); if(temperingGlassInfoList!=null){ if(temperingGlassInfoList.size()>0){ temperingGlassInfoService.addOutTask(temperingGlassInfoList); log.info("2、添加任务到任务表"); return true; @@ -136,7 +148,17 @@ String layoutId = entry.getKey().substring(0, entry.getKey().indexOf('-')); String layoutNum = entry.getKey().substring(entry.getKey().indexOf('-') + 1); if (layoutNum.equals(entry.getValue())) { //4、添加此钢化版图id所有小片小片到钢化小片表 log.info("4、添加此钢化版图id所有小片小片到钢化小片表"); LambdaQueryWrapper<GlassInfo> glassInfoWrapper=new LambdaQueryWrapper<>(); glassInfoWrapper.select(GlassInfo::getTemperingLayoutId) .orderByDesc(GlassInfo::getTemperingFeedSequence); List<GlassInfo> glassInfoList= glassInfoService.list(glassInfoWrapper); for (GlassInfo glassInfo:glassInfoList ) { TemperingGlassInfo temperingGlassInfo=new TemperingGlassInfo(); BeanUtils.copyProperties(glassInfo, temperingGlassInfo); temperingGlassInfoService.save(temperingGlassInfo); } return false; } } @@ -163,16 +185,21 @@ bigStorageCageMapper.update(bigStorageCage, bigStorageCageWrapper); } //查询大理片信息,前端展示用 @Override public List<BigStorageCage> querybigStorageCageDetail() { //1、获取大理片笼信息 List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectList(null); public List<BigStorageCage> querybigStorageCageDetail(int deviceId) { LambdaQueryWrapper<BigStorageCage> BigStorageCageWrapper =new LambdaQueryWrapper<>(); BigStorageCageWrapper.eq(BigStorageCage::getSlot,deviceId); LambdaQueryWrapper<BigStorageCageDetails> BigStorageCageDetailsWrapper =new LambdaQueryWrapper<>(); BigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getSlot,deviceId); List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectList(BigStorageCageWrapper); log.info("1、获取大理片笼信息完成,获取到的数据{}", bigStorageCages.size()); //2获取理片笼所有信息 List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsMapper.selectList(null); List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsMapper.selectList(BigStorageCageDetailsWrapper); Map<Integer, List<BigStorageCageDetails>> listMap = bigStorageCageDetailsList.stream().collect(Collectors.groupingBy(BigStorageCageDetails::getSlot)); for (BigStorageCage bigStorageCage : bigStorageCages) { List<BigStorageCageDetails> bigStorageCageDetails = listMap.get(bigStorageCage.getSlot()); @@ -181,4 +208,28 @@ return bigStorageCages; } //笼子使用情况,界面展示用 @Override public List<Map<String, Object>> selectBigStorageCageUsage() { QueryWrapper<BigStorageCage> wrapper = new QueryWrapper<>(); wrapper.select("device_id") .select("ROUND(1 - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) / COUNT(device_id), 2) AS percentage") .select("COUNT(device_id) - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) AS count") .groupBy("device_id"); List<Map<String, Object>> bigStorageCageUsages=baseMapper.selectMaps(wrapper); return bigStorageCageUsages; } //判断笼子剩余宽度是否足够 @Override public boolean selectWidthSufficient(BigStorageCageDetails layoutSlotInfo,double width) { LambdaQueryWrapper<BigStorageCage> BigStorageCageWrapper = new LambdaQueryWrapper<>(); BigStorageCageWrapper.eq(BigStorageCage::getSlot,layoutSlotInfo.getSlot()); BigStorageCage bigStorageCage=baseMapper.selectOne(BigStorageCageWrapper); if(bigStorageCage.getRemainWidth()>width){ return true; }else{ return false; } } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,21 +17,48 @@ * @author zhoush * @since 2024-04-16 */ @ApiModel(description = "<p> </p>") @Data @EqualsAndHashCode(callSuper = false) public class BigStorageCageFeedTask implements Serializable { private static final long serialVersionUID = 1L; /** * 主键id */ @ApiModelProperty(value = "主键id", position = 2) @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 玻璃id */ @ApiModelProperty(value = "玻璃id", position = 3) private String glassId; /** * 目标位置 */ @ApiModelProperty(value = "目标位置", position = 4) private Integer tragetSlot; /** * 玻璃类型 */ @ApiModelProperty(value = "玻璃类型", position = 5) private Integer taskType; /** * 任务类型 */ @ApiModelProperty(value = "任务类型", position = 6) private Integer taskState; /** * 线路 */ @ApiModelProperty(value = "线路", position = 7) private Integer line; hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,23 +17,54 @@ * @author zhoush * @since 2024-04-16 */ @ApiModel(description = "<p> </p>") @Data @EqualsAndHashCode(callSuper = false) public class BigStorageCageOutTask implements Serializable { private static final long serialVersionUID = 1L; /** * 主键id */ @ApiModelProperty(value = "主键id", position = 2) @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 玻璃id */ @ApiModelProperty(value = "玻璃id", position = 3) private String glassId; /** * 开始位置 */ @ApiModelProperty(value = "开始位置", position = 4) private Integer startSlot; /** * 目标位置 */ @ApiModelProperty(value = "目标位置", position = 5) private Integer endSlot; /** * 车次 */ @ApiModelProperty(value = "车次", position = 6) private Integer trainNumber; /** * 序号 */ @ApiModelProperty(value = "序号", position = 7) private Integer serialNumber; /** * 任务状态 */ @ApiModelProperty(value = "任务状态", position = 8) private Integer taskState; hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
@@ -1,5 +1,6 @@ package com.mes.bigstoragetask.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -11,6 +12,7 @@ * @author zhoush * @since 2024-04-16 */ @DS("salve_hangzhoumes") public interface BigStorageCageFeedTaskMapper extends BaseMapper<BigStorageCageFeedTask> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
@@ -1,5 +1,6 @@ package com.mes.bigstoragetask.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -11,6 +12,7 @@ * @author zhoush * @since 2024-04-16 */ @DS("salve_hangzhoumes") public interface BigStorageCageOutTaskMapper extends BaseMapper<BigStorageCageOutTask> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
@@ -19,5 +19,5 @@ void updateOutTask(); void deleteOutTask(Long taskId); void deleteOutTask(String glassId); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
@@ -1,12 +1,14 @@ package com.mes.bigstoragetask.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper; import com.mes.bigstoragetask.service.BigStorageCageOutTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.mapper.TemperingGlassInfoMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -32,6 +34,10 @@ BigStorageCageOutTaskMapper bigStorageCageOutTaskMapper; @Resource BigStorageCageDetailsMapper bigStorageCageDetailsMapper; /** * 查询任务信息 */ @Override public List<BigStorageCageOutTask> querybigStorageCageOutTask(int taskState){ log.info("根据传入的任务状态查询任务信息:"+taskState); @@ -40,21 +46,46 @@ return baseMapper.selectList(getOutTaskWrapper); } /** * 检测PLC是否完成任务 */ @Override public void updateOutTask(){ List<BigStorageCageOutTask> bigStorageCageOutTaskList=querybigStorageCageOutTask(1); log.info("查询任务表是否有已完成的出片任务"+bigStorageCageOutTaskList.size()); for (BigStorageCageOutTask bigStorageCageOutTask:bigStorageCageOutTaskList ) { deleteOutTask(bigStorageCageOutTask.getId()); deleteOutTask(bigStorageCageOutTask.getGlassId()); } } /** * 完成出片任务 */ @Override public void deleteOutTask(Long taskId){ public void deleteOutTask(String glassId){ log.info("根据任务id修改钢化小片表状态,删除已完成的出片任务,删除笼子表玻璃"); temperingGlassInfoMapper.deleteById(taskId); bigStorageCageOutTaskMapper.deleteById(taskId); bigStorageCageDetailsMapper.deleteById(taskId); LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper =new LambdaQueryWrapper<>(); temperingGlassInfoWrapper.eq(TemperingGlassInfo::getGlassId,glassId); TemperingGlassInfo temperingGlassInfo=temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper); //判断是否手动任务,不钢化任务完成后删掉,钢化任务完成后改状态为0 if(temperingGlassInfo.getState()==-2){ temperingGlassInfoMapper.deleteById(temperingGlassInfo.getId()); }else{ temperingGlassInfo.setState(0); temperingGlassInfoMapper.updateById(temperingGlassInfo); } LambdaQueryWrapper<BigStorageCageOutTask> bigStorageCageOutTaskWrapper =new LambdaQueryWrapper<>(); bigStorageCageOutTaskWrapper.eq(BigStorageCageOutTask::getGlassId,glassId); BigStorageCageOutTask bigStorageCageOutTask=bigStorageCageOutTaskMapper.selectOne(bigStorageCageOutTaskWrapper); bigStorageCageOutTaskMapper.deleteById(bigStorageCageOutTask.getId()); LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper =new LambdaQueryWrapper<>(); bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getGlassId,glassId); BigStorageCageDetails bigStorageCageDetails=bigStorageCageDetailsMapper.selectOne(bigStorageCageDetailsWrapper); bigStorageCageDetailsMapper.deleteById(bigStorageCageOutTask.getId()); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
@@ -24,7 +24,9 @@ private S7object() { if (plccontrol == null) { plccontrol = new S7control(plcType, ip, port, 0, 0); String PlcLoadGlass = System.getProperty("user.dir") + "/JsonFile/PlcCacheVerticalGlass.json"; String PlcLoadGlass=S7object.class.getResource("/JsonFile/PlcCacheVerticalGlass.json").getPath(); //log.info(PLCAutoMes.class.getResource("").getPath()); PlcMesObject = InitUtil.initword(PlcLoadGlass); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java
New file @@ -0,0 +1,20 @@ package com.mes.edgglasstask.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 前端控制器 * </p> * * @author wu * @since 2024-05-11 */ @RestController @RequestMapping("/edgGlassTaskInfo") public class EdgGlassTaskInfoController { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
New file @@ -0,0 +1,71 @@ package com.mes.edgglasstask.entity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * * </p> * * @author wu * @since 2024-05-11 */ @ApiModel(description = "<p> </p>") @Data @EqualsAndHashCode(callSuper = false) public class EdgGlassTaskInfo implements Serializable { /** * 磨边任务id */ private static final long serialVersionUID = 1L; /** * 玻璃id */ @ApiModelProperty(value = "玻璃id", position = 2) private String glassId; /** * 宽 */ @ApiModelProperty(value = "宽", position = 3) private Integer width; /** * 高 */ @ApiModelProperty(value = "高", position = 4) private Integer height; /** * 厚度 */ @ApiModelProperty(value = "厚度", position = 5) private Integer thickness; /** * 玻璃类型 */ @ApiModelProperty(value = "玻璃类型", position = 6) private Integer glassType; /** * 状态 */ @ApiModelProperty(value = "状态", position = 7) private Integer status; /** * 线路 */ @ApiModelProperty(value = "线路", position = 8) private Integer line; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java
New file @@ -0,0 +1,18 @@ package com.mes.edgglasstask.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; /** * <p> * Mapper 接口 * </p> * * @author wu * @since 2024-05-11 */ @DS("salve_hangzhoumes") public interface EdgGlassTaskInfoMapper extends BaseMapper<EdgGlassTaskInfo> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
New file @@ -0,0 +1,16 @@ package com.mes.edgglasstask.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; /** * <p> * 服务类 * </p> * * @author wu * @since 2024-05-11 */ public interface EdgGlassTaskInfoService extends IService<EdgGlassTaskInfo> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.mes.edgglasstask.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.mapper.EdgGlassTaskInfoMapper; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author wu * @since 2024-05-11 */ @Service public class EdgGlassTaskInfoServiceImpl extends ServiceImpl<EdgGlassTaskInfoMapper, EdgGlassTaskInfo> implements EdgGlassTaskInfoService { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java
@@ -1,4 +1,4 @@ package com.mes.userinfo.controller; package com.mes.edgstoragetask.controller; import org.springframework.web.bind.annotation.RequestMapping; hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java
@@ -1,5 +1,6 @@ package com.mes.edgstoragetask.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.mes.edgstoragetask.entity.TaskCache; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -11,6 +12,7 @@ * @author zhoush * @since 2024-04-16 */ @DS("salve_hangzhoumes") public interface TaskCacheMapper extends BaseMapper<TaskCache> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
New file @@ -0,0 +1,101 @@ package com.mes.job; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.bigstoragetask.entity.BigStorageCageFeedTask; import com.mes.bigstoragetask.entity.BigStorageCageOutTask; import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService; import com.mes.bigstoragetask.service.BigStorageCageOutTaskService; import com.mes.common.S7object; import com.mes.device.PlcParameterObject; import com.mes.edgstoragetask.service.TaskCacheService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.menu.service.SysMenuService; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.service.TemperingGlassInfoService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; @Component @Slf4j public class PlcSlicecage { @Resource private BigStorageCageService bigStorageCageService; @Resource private BigStorageCageDetailsService bigStorageCageDetailsService; @Resource private TemperingGlassInfoService temperingGlassInfoService; PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; /** * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ @Scheduled(fixedDelay = 5000) public void plcStorageCageTask() throws InterruptedException { JSONObject jsonObject = new JSONObject(); try { //界面展示笼子信息 jsonObject.append("bigStorageCageInfo1", bigStorageCageService.querybigStorageCageDetail(1)); jsonObject.append("bigStorageCageInfo2", bigStorageCageService.querybigStorageCageDetail(2)); jsonObject.append("bigStorageCageInfo3", bigStorageCageService.querybigStorageCageDetail(3)); jsonObject.append("bigStorageCageInfo4", bigStorageCageService.querybigStorageCageDetail(4)); jsonObject.append("bigStorageCageInfo5", bigStorageCageService.querybigStorageCageDetail(5)); jsonObject.append("bigStorageCageInfo6", bigStorageCageService.querybigStorageCageDetail(6)); jsonObject.append("bigStorageCageInfo7", bigStorageCageService.querybigStorageCageDetail(7)); jsonObject.append("bigStorageCageInfo8", bigStorageCageService.querybigStorageCageDetail(8)); //进片任务数据 List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectTask(1); jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask); //出片任务数据 List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectTask(2); jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask); //理片笼使用情况 List<Map<String, Object>> bigStorageCageUsage=bigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("bigStorageCageUsage", bigStorageCageUsage); //出片队列 List<TemperingGlassInfo> temperingGlassInfoList= temperingGlassInfoService.list(); jsonObject.append("temperingGlassInfoList", temperingGlassInfoList); //报警信息 jsonObject.append("bigStorageCageFullAlarm", PlcStorageCageTask.bigStorageCageFullAlarm); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("Home is closed"); } } } } catch (Exception e) { e.printStackTrace(); } } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -1,6 +1,4 @@ package com.mes.job; import cn.hutool.json.JSONObject; import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; @@ -13,14 +11,11 @@ import com.mes.edgstoragetask.service.TaskCacheService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.menu.service.SysMenuService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @Component @@ -40,20 +35,16 @@ @Resource private TaskCacheService taskCacheService; @Resource private SysMenuService sysMenuService; PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; public static boolean bigStorageCageFullAlarm = false; /** * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ @Scheduled(fixedDelay = 300) @Scheduled(fixedDelay = 5000) public void plcStorageCageTask() throws InterruptedException { JSONObject jsonObject = new JSONObject(); try { // 爆笼报警 boolean bigStorageCageFullAlarm = false; String plcFeedGlassid = ""; String plcFeedReqLine = "0"; @@ -71,15 +62,24 @@ BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); GlassInfo glassInfo = glassInfoService.getById(plcFeedGlassid); log.info("2、根据玻璃id获取玻璃信息" + glassInfo); BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails); if (slotInfo != null) { int taskType = taskCacheService.judgeTasktype(); log.info("3、查询任务表判断当前任务类型为上车等到还是上车启动" + taskType); bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType); log.info("4、添加任务到任务表"); bigStorageCageFullAlarm = false; } else { bigStorageCageFullAlarm = true; if(bigStorageCageDetailsService.selectGetBoard(glassInfo,plcFeedReqLine)){ BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails); if (slotInfo != null) { int taskType = taskCacheService.judgeTasktype(); log.info("3、查询任务表判断当前任务类型为上车等到还是上车启动" + taskType); bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType); log.info("4、添加任务到任务表"); bigStorageCageFullAlarm = false; } else { bigStorageCageFullAlarm = true; } }else{ log.info("当前玻璃宽度不够上车" + glassInfo); if(!("1".equals(plcFeedReqLine))){ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1); }else{ S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1); } } } else { List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskService.querybigStorageCageFeedTask(1); @@ -105,24 +105,8 @@ bigStorageCageOutTaskService.updateOutTask(); log.info("9、根据任务表状态修改钢化小片表任务状态"); //报警信息 jsonObject.append("bigStorageCageFullAlarm", bigStorageCageFullAlarm); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("Home is closed"); } } } } catch (Exception e) { e.printStackTrace(); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,6 +17,7 @@ * @author zhoush * @since 2024-03-27 */ @ApiModel(description = "<p> 钢化小片信息表 </p>") @Data @EqualsAndHashCode(callSuper = false) public class TemperingGlassInfo implements Serializable { @@ -23,72 +27,92 @@ /** * 钢化小片信息表id */ @ApiModelProperty(value = "钢化小片信息表id", position = 2) @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 玻璃id */ @ApiModelProperty(value = "玻璃id", position = 3) private String glassId; /** * 流程卡 */ @ApiModelProperty(value = "流程卡", position = 4) private String flowcardId; /** * 流程卡玻璃类型 */ @ApiModelProperty(value = "流程卡玻璃类型", position = 5) private Integer glassType; /** * 宽 */ @ApiModelProperty(value = "宽", position = 6) private Double width; /** * 高 */ @ApiModelProperty(value = "高", position = 7) private Double height; /** * 厚度 */ @ApiModelProperty(value = "厚度", position = 8) private Double thickness; /** * 膜系 */ @ApiModelProperty(value = "膜系", position = 9) private Integer filmsid; /** * 钢化是否接受横放 */ @ApiModelProperty(value = "钢化是否接受横放", position = 10) private Integer ishorizontal; /** * 钢化版图id */ @ApiModelProperty(value = "钢化版图id", position = 11) private Integer temperingLayoutId; /** * 钢化版图片序 */ @ApiModelProperty(value = "钢化版图片序", position = 12) private Integer temperingFeedSequence; /** * x坐标 */ @ApiModelProperty(value = "x坐标", position = 13) private Integer xCoordinate; /** * y坐标 */ @ApiModelProperty(value = "y坐标", position = 14) private Integer yCoordinate; /** * 旋转角度(逆时针) */ @ApiModelProperty(value = "旋转角度(逆时针)", position = 15) private Integer angle; /** * 状态 */ @ApiModelProperty(value = "状态", position = 16) private Integer state; hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -1,5 +1,6 @@ package com.mes.temperingglass.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; @@ -11,6 +12,7 @@ * @author zhoush * @since 2024-03-27 */ @DS("salve_hangzhoumes") public interface TemperingGlassInfoMapper extends BaseMapper<TemperingGlassInfo> { } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -31,11 +31,11 @@ ) { log.info("1、当出片车宽度大于玻璃宽度时"); if((carWidth-temperingGlassInfo.getWidth())>0){ carWidth-=temperingGlassInfo.getWidth()-gap; log.info("2、添加刚小片表信息到任务表"); temperingGlassInfo.setState(1); carWidth-=temperingGlassInfo.getWidth()+gap; log.info("2、添加钢化小片表信息到任务表"); temperingGlassInfo.setState(0); baseMapper.updateById(temperingGlassInfo); log.info("3、添加刚小片表信息到任务表"); log.info("3、修改钢化小片表任务状态"); BigStorageCageOutTask bigStorageCageOutTask =new BigStorageCageOutTask(); bigStorageCageOutTask.setId(temperingGlassInfo.getId()); }else{