hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.pp.entity.BasicDataProduce; import com.mes.pp.entity.ReportingWork; import com.mes.work_assignment.entity.WorkAssignment; import com.mes.work_assignment.mapper.WorkAssignmentMapper; import org.springframework.beans.BeanUtils; @@ -18,6 +20,8 @@ import java.sql.Timestamp; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -58,21 +62,134 @@ * 提交报工 */ @Override public void submitDamage(String startTime, String endTime, int type, int status, String workingProcedure){ public void submitDamage(String startTime, String endTime, int type, int status, String workingProcedures){ LambdaUpdateWrapper<Damage> damageUpdateWrapper=new LambdaUpdateWrapper<>(); damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime); LambdaQueryWrapper<Damage> damageLambdaQueryWrapper=new LambdaQueryWrapper<>() ; damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime); damageLambdaQueryWrapper.between(Damage::getDamageTime,startTime,endTime); if (type!=0){ damageUpdateWrapper.eq(Damage::getType,type); damageLambdaQueryWrapper.eq(Damage::getType,type); } if (status!=0){ damageUpdateWrapper.eq(Damage::getStatus,status); damageLambdaQueryWrapper.eq(Damage::getStatus,status); } if(!"0".equals(workingProcedure)){ damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedure); if(!"0".equals(workingProcedures)){ damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedures); damageLambdaQueryWrapper.eq(Damage::getWorkingProcedure,workingProcedures); } Damage damage=new Damage(); damage.setStatus(2); baseMapper.update(damage,damageUpdateWrapper); // Damage damage=new Damage(); // damage.setStatus(2); // baseMapper.update(damage,damageUpdateWrapper); List<Damage> damageList = baseMapper.selectList(damageLambdaQueryWrapper); Map<String, Map<String, Map<String, Map<String, List<Damage>>>>> resultMap = damageList.stream() .collect(Collectors.groupingBy( Damage::getProcessId, Collectors.groupingBy( Damage::getWorkingProcedure, Collectors.groupingBy( Damage::getDeviceName, Collectors.groupingBy(Damage::getTeamsGroupsName) ) ) )); // 遍历 resultMap for (Map.Entry<String, Map<String, Map<String, Map<String, List<Damage>>>>> processEntry : resultMap.entrySet()) { String processId = processEntry.getKey(); System.out.println("ProcessId: " + processId); // 获取第二层的 Map,按 workingProcedure 分组的结果 Map<String, Map<String, Map<String, List<Damage>>>> workingProcedureMap = processEntry.getValue(); // 遍历 workingProcedureMap for (Map.Entry<String, Map<String, Map<String, List<Damage>>>> workingProcedureEntry : workingProcedureMap.entrySet()) { String workingProcedure = workingProcedureEntry.getKey(); System.out.println(" WorkingProcedure: " + workingProcedure); // 获取第三层的 Map,按 deviceName 分组的结果 Map<String, Map<String, List<Damage>>> deviceNameMap = workingProcedureEntry.getValue(); // 遍历 deviceNameMap for (Map.Entry<String, Map<String, List<Damage>>> deviceNameEntry : deviceNameMap.entrySet()) { String deviceName = deviceNameEntry.getKey(); System.out.println(" DeviceName: " + deviceName); // 获取第四层的 Map,按 teamsGroupsName 分组的结果 Map<String, List<Damage>> teamsGroupsNameMap = deviceNameEntry.getValue(); // 遍历 teamsGroupsNameMap for (Map.Entry<String, List<Damage>> teamsGroupsNameEntry : teamsGroupsNameMap.entrySet()) { String teamsGroupsName = teamsGroupsNameEntry.getKey(); System.out.println(" TeamsGroupsName: " + teamsGroupsName); // 获取 Damage 列表 List<Damage> damageListForTeamsGroupsName = teamsGroupsNameEntry.getValue(); // 使用 stream 对 damageListForTeamsGroupsName 进行再次分组 Map<Integer, Map<Integer, Map<String, List<Damage>>>> groupedByOrderTechBreakage = damageListForTeamsGroupsName.stream() .collect(Collectors.groupingBy( Damage::getOrderNumber, Collectors.groupingBy( Damage::getTechnologyNumber, Collectors.groupingBy( Damage::getBreakageType, Collectors.toList() ) ) )); // 遍历 groupedByOrderTechBreakage for (Map.Entry<Integer, Map<Integer, Map<String, List<Damage>>>> orderEntry : groupedByOrderTechBreakage.entrySet()) { Integer orderNumber = orderEntry.getKey(); System.out.println(" OrderNumber: " + orderNumber); // 获取第二层的 Map,按 technologyNumber 分组的结果 Map<Integer, Map<String, List<Damage>>> technologyNumberMap = orderEntry.getValue(); // 遍历 technologyNumberMap for (Map.Entry<Integer, Map<String, List<Damage>>> technologyEntry : technologyNumberMap.entrySet()) { Integer technologyNumber = technologyEntry.getKey(); System.out.println(" TechnologyNumber: " + technologyNumber); // 获取第三层的 Map,按 breakageType 分组的结果 Map<String, List<Damage>> breakageTypeMap = technologyEntry.getValue(); // 遍历 breakageTypeMap for (Map.Entry<String, List<Damage>> breakageTypeEntry : breakageTypeMap.entrySet()) { String breakageType = breakageTypeEntry.getKey(); System.out.println(" BreakageType: " + breakageType); ReportingWork reportingWork=new ReportingWork(); reportingWork.setProcessId(processId); reportingWork.setThisProcess(workingProcedure); reportingWork.setDeviceName(deviceName); reportingWork.setTeamsGroupsName(teamsGroupsName); // 获取 Damage 列表 List<Damage> damageListForBreakageType = breakageTypeEntry.getValue(); int completedQuantity=0; int breakageQuantity=0; // 遍历 Damage 列表 for (Damage damage : damageListForBreakageType) { // 打印或处理每个 Damage 对象 System.out.println(" Damage: " + damage.toString()); if(damage.getType()==1){ completedQuantity+=1; }else if(damage.getType()==2){ breakageQuantity+=1; } } } } } } } } } } /** hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -3,6 +3,7 @@ import com.mes.bigstorage.entity.BigStorageCageDetails; import com.mes.bigstorage.service.BigStorageCageDetailsService; import com.mes.bigstorage.service.BigStorageCageService; import com.mes.common.utils.RedisUtil; import com.mes.utils.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; import java.util.Map; @@ -32,6 +34,8 @@ private BigStorageCageDetailsService bigStorageCageDetailsService; @Autowired private BigStorageCageService bigStorageCageService; @Resource private RedisUtil redisUtil; @ApiOperation("玻璃详情查询") @@ -100,7 +104,8 @@ @ApiOperation("是否钢化开关") @PostMapping("/temperingSwitch") public Result temperingSwitch(Boolean flag) { return Result.build(200, "修改成功", bigStorageCageDetailsService.temperingSwitch(flag)); bigStorageCageDetailsService.temperingSwitch(flag); return Result.build(200, "修改成功", redisUtil.getCacheObject("temperingSwitch")); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -21,7 +21,9 @@ */ public interface BigStorageCageDetailsService extends IService<BigStorageCageDetails> { List<BigStorageCageDetails> selectTask(int taskType); List<BigStorageCageDetails> selectFeedTask(); List<BigStorageCageDetails> selectOutTask(); double selectGetBoard(String plcFeedReqLine); hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -87,52 +87,31 @@ private boolean sequenceOrder; /** * 查询进/出片任务 */ @Override public List<BigStorageCageDetails> selectTask(int taskType) { if (taskType == 1) { //进片任务数据 LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN); List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper); public List<BigStorageCageDetails> selectFeedTask(){ //进片任务数据 LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>(); feedWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN); List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper); LambdaQueryWrapper<BigStorageCageFeedTask> feedTaskWrapper = new LambdaQueryWrapper<>(); feedTaskWrapper .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) .isNotNull(BigStorageCageFeedTask::getTargetSlot); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper); Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); LambdaQueryWrapper<BigStorageCageFeedTask> feedTaskWrapper = new LambdaQueryWrapper<>(); feedTaskWrapper .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) .isNotNull(BigStorageCageFeedTask::getTargetSlot); List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper); Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream() .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task)); Iterator<BigStorageCageDetails> iterator = bigStorageCageDetailsList.iterator(); while (iterator.hasNext()) { BigStorageCageDetails bigStorageCageDetails = iterator.next(); BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); if (bigStorageCageDetails.getBigStorageCageFeedTask() == null) { iterator.remove(); } } LambdaQueryWrapper<BigStorageCageFeedTask> feedTaskNoTargetWrapper = new LambdaQueryWrapper<>(); feedTaskNoTargetWrapper .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT) .isNull(BigStorageCageFeedTask::getTargetSlot); List<BigStorageCageFeedTask> bigStorageCageFeedTaskNoTargetList = bigStorageCageFeedTaskMapper.selectList(feedTaskNoTargetWrapper); for (BigStorageCageFeedTask bigStorageCageFeedTask : bigStorageCageFeedTaskNoTargetList ) { BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails(); LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>(); glassInfoWrapper.eq(GlassInfo::getGlassId, bigStorageCageFeedTask.getGlassId()); GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper); BeanUtils.copyProperties(glassInfo, bigStorageCageDetails); bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask); bigStorageCageDetailsList.add(bigStorageCageDetails); } return bigStorageCageDetailsList; } else { //出片任务数据 } @Override public List<BigStorageCageDetails> selectOutTask(){ LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>(); outWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN); List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper); @@ -152,9 +131,6 @@ BigStorageCageDetails bigStorageCageDetails = iterator.next(); BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId()); bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask); if (bigStorageCageDetails.getBigStorageCageOutTask() == null) { iterator.remove(); } } return bigStorageCageDetailsList; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -45,11 +45,11 @@ jsonObject.append("bigStorageCageInfos", bigStorageCageService.querybigStorageCageDetail()); //进片任务数据 List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectTask(1); List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectFeedTask(); jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask); //出片任务数据 List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectTask(2); List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectOutTask(); jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask); //理片笼使用情况