| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import com.alibaba.fastjson2.JSONArray; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.system.mapper.ProjectInfoMapper; |
| | | import com.ruoyi.system.model.Project; |
| | | import com.ruoyi.system.model.ProjectInfo; |
| | | import com.ruoyi.system.model.Record; |
| | | import com.ruoyi.system.model.Task; |
| | | import com.ruoyi.system.query.ProjectDangerousTrendQuery; |
| | | import com.ruoyi.system.query.ProjectHiddenDangerTrendListQuery; |
| | | import com.ruoyi.system.service.ProjectCategoryCalculator; |
| | | import com.ruoyi.system.service.ProjectInfoService; |
| | | import com.ruoyi.system.service.ProjectService; |
| | | import com.ruoyi.system.service.*; |
| | | import com.ruoyi.system.vo.ProjectDangerousTrendVo; |
| | | import com.ruoyi.system.vo.ProjectHiddenDangerList; |
| | | import com.ruoyi.system.vo.ProjectHiddenDangerNextList; |
| | |
| | | import java.time.YearMonth; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.time.temporal.TemporalAdjusters; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | import static java.util.stream.Collectors.groupingBy; |
| | | |
| | |
| | | @Autowired |
| | | private ProjectService projectService; |
| | | |
| | | @Autowired |
| | | private TaskService taskService; |
| | | |
| | | @Autowired |
| | | private RecordService recordService; |
| | | |
| | | @Override |
| | | public List<ProjectHiddenDangerTrendVo> getProjectHiddenDangerTrend(Integer projectId) { |
| | | // 获取上月第一天的时间 |
| | | LocalDate lastMonth = LocalDate.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()); |
| | | List<Record> list = this.baseMapper.getProjectHiddenDangerTrend(projectId,lastMonth+" 00:00:00",LocalDate.now()+" 23:59:59"); |
| | | for (Record record : list) { |
| | | |
| | | |
| | | List<ProjectHiddenDangerTrendVo> resultList = new ArrayList<>(); |
| | | // 找出最近的的2个计划任务 |
| | | List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getProjectId, projectId).in(Task::getState, Arrays.asList(3,7)).orderByDesc(Task::getCreateTime).last("limit 2")); |
| | | if(tasks.size()==1){ |
| | | Task task = tasks.get(0); |
| | | List<Record> list0 = recordService.list(new LambdaQueryWrapper<Record>().eq(Record::getCheckTaskId, task.getId())); |
| | | for (Record record : list0) { |
| | | String hierarchyNames = record.getHierarchyNames(); |
| | | JSONArray jsonArray = JSONArray.parseArray(hierarchyNames); |
| | | if(record.getDeviceId()!=null){ |
| | |
| | | String name = jsonArray.getString(jsonArray.size()-4); |
| | | |
| | | record.setHierarchyName( name); |
| | | record.setCategory(1); |
| | | } |
| | | |
| | | |
| | | } |
| | | LocalDate thisMonth = LocalDate.now().minusMonths(0).with(TemporalAdjusters.firstDayOfMonth()); |
| | | Map<String, List<Record>> map = list.stream().collect(groupingBy(Record::getHierarchyName)); |
| | | List<ProjectHiddenDangerTrendVo> resultList = new ArrayList<>(); |
| | | |
| | | |
| | | Map<String, List<Record>> map = list0.stream().collect(groupingBy(Record::getHierarchyName)); |
| | | for (Map.Entry<String, List<Record>> entry : map.entrySet()) { |
| | | ProjectHiddenDangerTrendVo vo = new ProjectHiddenDangerTrendVo(); |
| | | vo.setName(entry.getKey()); |
| | | List<Record> value = entry.getValue(); |
| | | long count = value.stream().filter(record -> record.getCreateTime().isAfter(thisMonth.atStartOfDay())).count(); |
| | | long count = value.stream().filter(record -> record.getCategory()==1).count(); |
| | | // 根据value集合中的createTime 选出本月的数据 |
| | | vo.setThisMonth((int) count); |
| | | vo.setLastMonth(0); |
| | | |
| | | int num = vo.getThisMonth() - vo.getLastMonth(); |
| | | if (num != 0) { |
| | | if(vo.getLastMonth()>0){ |
| | | Double rate = BigDecimal.valueOf(num).divide(BigDecimal.valueOf(vo.getLastMonth()), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | vo.setRate(rate); |
| | | }else { |
| | | vo.setRate(100.00d); |
| | | } |
| | | }else { |
| | | vo.setRate(0.00d); |
| | | } |
| | | resultList.add(vo) ; |
| | | } |
| | | |
| | | } |
| | | if(tasks.size()==2){ |
| | | Task task0 = tasks.get(0); |
| | | List<Record> list0 = recordService.list(new LambdaQueryWrapper<Record>().eq(Record::getCheckTaskId, task0.getId())); |
| | | for (Record record : list0) { |
| | | String hierarchyNames = record.getHierarchyNames(); |
| | | JSONArray jsonArray = JSONArray.parseArray(hierarchyNames); |
| | | if(record.getDeviceId()!=null){ |
| | | // 取出倒数第3个 |
| | | String name = jsonArray.getString(jsonArray.size()-3); |
| | | |
| | | record.setHierarchyName( name); |
| | | }else { |
| | | // 取出倒数第4个 |
| | | String name = jsonArray.getString(jsonArray.size()-4); |
| | | |
| | | record.setHierarchyName( name); |
| | | record.setCategory(1); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | Task task1 = tasks.get(1); |
| | | List<Record> list1 = recordService.list(new LambdaQueryWrapper<Record>().eq(Record::getCheckTaskId, task1.getId())); |
| | | for (Record record : list1) { |
| | | String hierarchyNames = record.getHierarchyNames(); |
| | | JSONArray jsonArray = JSONArray.parseArray(hierarchyNames); |
| | | if(record.getDeviceId()!=null){ |
| | | // 取出倒数第3个 |
| | | String name = jsonArray.getString(jsonArray.size()-3); |
| | | |
| | | record.setHierarchyName( name); |
| | | }else { |
| | | // 取出倒数第4个 |
| | | String name = jsonArray.getString(jsonArray.size()-4); |
| | | |
| | | record.setHierarchyName( name); |
| | | record.setCategory(2); |
| | | } |
| | | } |
| | | list0.addAll(list1); |
| | | |
| | | |
| | | Map<String, List<Record>> map = list0.stream().collect(groupingBy(Record::getHierarchyName)); |
| | | for (Map.Entry<String, List<Record>> entry : map.entrySet()) { |
| | | ProjectHiddenDangerTrendVo vo = new ProjectHiddenDangerTrendVo(); |
| | | vo.setName(entry.getKey()); |
| | | List<Record> value = entry.getValue(); |
| | | long count = value.stream().filter(record -> record.getCategory()==1).count(); |
| | | // 根据value集合中的createTime 选出本月的数据 |
| | | vo.setThisMonth((int) count); |
| | | vo.setLastMonth(value.size()-(int) count); |
| | |
| | | resultList.add(vo) ; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | return resultList; |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | Map<Integer, String> integerStringMap = projectCategoryCalculator.calculateFixedAssetCategories(projects, Long.valueOf(project.getClientId()), startDate, endDate); |
| | | String s = integerStringMap.get(query.getProjectId()); |
| | | vo.setLevel(s); |
| | | if(integerStringMap.isEmpty()){ |
| | | vo.setStatus(2); |
| | | } |
| | | }else { |
| | | Map<Integer, String> integerStringMap = projectCategoryCalculator.calculateOngoingProjectCategories(projects, Long.valueOf(project.getClientId()), startDate, endDate); |
| | | String s = integerStringMap.get(query.getProjectId()); |
| | | vo.setLevel(s); |
| | | if(integerStringMap.isEmpty()){ |
| | | vo.setStatus(2); |
| | | } |
| | | } |
| | | // 如果没有则沿用上次的 |
| | | if(vo.getLevel()!=null){ |
| | | temp=vo.getLevel(); |
| | | vo.setStatus(2); |
| | | }else { |
| | | vo.setLevel(temp); |
| | | } |