123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- package com.ruoyi.project.sems.controller;
- import com.alibaba.fastjson.JSON;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.ruoyi.framework.web.controller.BaseController;
- import com.ruoyi.framework.web.domain.AjaxResult;
- import com.ruoyi.project.officeConvert.OfficeConvertController;
- import com.ruoyi.project.sems.domain.TMeasureThickness;
- import com.ruoyi.project.sems.domain.TSpecdevYlgd;
- import com.ruoyi.project.sems.mapper.TMeasureStressMapper;
- import com.ruoyi.project.sems.mapper.TMeasureThicknessMapper;
- import com.ruoyi.project.sems.service.ITMeasureLoopService;
- import com.ruoyi.project.sems.service.ITMeasureRecordService;
- import com.ruoyi.project.sems.service.ITMeasureStressService;
- import com.ruoyi.project.sems.service.ITMeasureThicknessService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import javax.annotation.Resource;
- import java.time.LocalDate;
- import java.time.Year;
- import java.util.*;
- /**
- * 定点测厚Controller
- *
- * @author ruoyi
- * @date 2021-07-07
- */
- @RestController
- @RequestMapping("/sems/cuihome")
- public class TMeasureCuiHomeController extends BaseController {
- @Autowired
- private ITMeasureThicknessService tMeasureThicknessService;
- @Autowired
- private ITMeasureRecordService tMeasureRecordService;
- @Autowired
- private OfficeConvertController officeConvertController;
- @Resource
- private TMeasureStressMapper tMeasureStressMapper;
- @Autowired
- private ITMeasureStressService tMeasureStressService;
- @Autowired
- private ITMeasureLoopService tMeasureLoopService;
- @Resource
- private TMeasureThicknessMapper tMeasureThicknessMapper;
- /**
- * 首页数据
- */
- @RequestMapping(value = "data")
- public AjaxResult homeData(@RequestBody Map<String, Object> params) {
- logger.info(JSON.toJSONString(params));
- LocalDate today = LocalDate.now();
- LocalDate oneMonthLater = today.plusMonths(1);
- Date sqlDate = java.sql.Date.valueOf(oneMonthLater);
- List plantIds = (List) params.get("plantIds");
- if (plantIds == null) {
- plantIds = new ArrayList();
- }
- if (plantIds.size() == 0) {
- plantIds.add("1");
- }
- String plants = String.join(",", plantIds);
- TMeasureThickness paramT = new TMeasureThickness();
- paramT.setPlants(plants);
- paramT.setIsPipe("0");
- List<TMeasureThickness> sbAllList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- sbAllList = this.distinctByPlantAndTag(sbAllList);
- int sbAll = sbAllList.size();
- paramT.setPlants(plants);
- paramT.setIsPipe("1");
- List<TMeasureThickness> gdAllList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- gdAllList = this.distinctByPlantAndTag(gdAllList);
- int gdAll = gdAllList.size();
- paramT.setPlants(plants);
- paramT.setIsPipe("0");
- List<TMeasureThickness> sbWarnList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- sbWarnList = this.distinctByPlantAndTagAndDate(sbWarnList);
- int sbWarn = sbWarnList.size();
- // int sbWarn = tMeasureThicknessService.count(new QueryWrapper<TMeasureThickness>()
- // .in("plant_code",plantIds)
- // .eq("dev_type" , "设备")
- // .eq("del_flag" , 0)
- // .isNotNull("NEXT_WARN_DATE") // 添加非空条件
- // .and(wrapper -> wrapper
- // .le("NEXT_WARN_DATE", sqlDate)
- // )
- // .groupBy("plant_code", "TAGNO") // 按指定字段分组(实现去重)
- // .select("1") // 优化性能,仅查询常量
- //
- // );
- paramT.setPlants(plants);
- paramT.setIsPipe("1");
- List<TMeasureThickness> gdWarnList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- gdWarnList = this.distinctByPlantAndTagAndDate(gdWarnList);
- int gdWarn = gdWarnList.size();
- // int gdWarn = tMeasureThicknessService.count(new QueryWrapper<TMeasureThickness>()
- // .in("plant_code",plantIds)
- // .and(wrapper -> wrapper
- // .ne("dev_type", "设备") // 排除 dev_type = '设备'
- // .or() // 或
- // .isNull("dev_type") // 包含 dev_type 为 null 的记录
- // )
- // .eq("del_flag" , 0)
- // .isNotNull("NEXT_WARN_DATE") // 添加非空条件
- // .and(wrapper -> wrapper
- // .le("NEXT_WARN_DATE", sqlDate)
- // )
- // .groupBy("plant_code", "TAGNO") // 按指定字段分组(实现去重)
- // .select("1") // 优化性能,仅查询常量
- // );
- //
- Map<String, Object> res = new HashMap<String, Object>();
- res.put("sbAll" ,sbAll) ;
- res.put("gdAll" ,gdAll) ;
- res.put("sbWarn" ,sbWarn) ;
- res.put("gdWarn" ,gdWarn) ;
- return AjaxResult.success(res);
- }
- public List<TMeasureThickness> distinctByPlantAndTag(List<TMeasureThickness> thicknesses) {
- Map<String, TMeasureThickness> resultMap = new LinkedHashMap<>();
- for (TMeasureThickness t : thicknesses) {
- // 跳过空值
- if (t.getPlantCode() == null || t.getTagno() == null) continue;
- // 构建复合键
- String key = t.getPlantCode() + "|" + t.getTagno();
- // 仅当键不存在时添加
- resultMap.putIfAbsent(key, t);
- }
- return new ArrayList<>(resultMap.values());
- }
- public List<TMeasureThickness> distinctByPlantAndTagAndDate(List<TMeasureThickness> thicknesses) {
- // 计算一个月后的日期
- LocalDate oneMonthLater = LocalDate.now().plusMonths(1);
- Date sqlDate = java.sql.Date.valueOf(oneMonthLater);
- // 转换为 SQL Date 类型
- // 使用LinkedHashMap保持插入顺序
- Map<String, TMeasureThickness> resultMap = new LinkedHashMap<>();
- for (TMeasureThickness t : thicknesses) {
- // 跳过关键字段为空的记录
- if (t.getPlantCode() == null || t.getTagno() == null) continue;
- // 核心新增:过滤NEXT_WARN_DATE ≥ 一个月后的记录
- if (t.getNextWarnDate() != null && !t.getNextWarnDate().before(sqlDate)) {
- continue;
- }
- // 构建复合键: plantCode + tagNo
- String key = t.getPlantCode() + "|" + t.getTagno();
- // 仅当键不存在时添加(保留第一个符合条件的记录)
- resultMap.putIfAbsent(key, t);
- }
- return new ArrayList<>(resultMap.values());
- }
- public List<TMeasureThickness> distinctByPlantAndTag(List<TMeasureThickness> thicknesses, int min, int max) {
- Map<String, TMeasureThickness> resultMap = new LinkedHashMap<>();
- for (TMeasureThickness t : thicknesses) {
- // 跳过空值
- if (t.getPlantCode() == null || t.getTagno() == null || t.getEstRemain() == null) continue;
- try {
- double estRemain = Double.parseDouble(t.getEstRemain().trim());
- if (estRemain < min || estRemain > max) continue;
- // 构建复合键
- String key = t.getPlantCode() + "|" + t.getTagno();
- resultMap.putIfAbsent(key, t);
- } catch (NumberFormatException e) {
- // 如果转换失败,跳过该条记录
- continue;
- }
- }
- return new ArrayList<>(resultMap.values());
- }
- /**
- * 管道预估寿命数据
- */
- @RequestMapping(value = "gdData")
- public AjaxResult gdData(@RequestBody Map<String, Object> params) {
- List plantIds = (List) params.get("plantIds");
- if (plantIds == null) {
- plantIds = new ArrayList();
- }
- if (plantIds.size() == 0) {
- plantIds.add("1");
- }
- String plants = String.join(",", plantIds);
- // 1. 获取当前年份
- int currentYear = Year.now().getValue();
- // 2. 创建包含当前年份及未来十年的年份列表
- List<Integer> targetYears = new ArrayList<>();
- for (int i = 0; i <= 10; i++) {
- targetYears.add(currentYear + i);
- }
- // 3. 存储查询结果(年份 -> 过期数据)
- Map<Integer, List<String>> expiredDataByYear = new HashMap<>();
- List<Integer> resData = new ArrayList<>();
- // 4. 遍历每个年份并查询数据
- for (int year : targetYears) {
- int estRemainMin = year - currentYear;
- TMeasureThickness paramT = new TMeasureThickness();
- paramT.setPlants(plants);
- paramT.setIsPipe("1");
- List<TMeasureThickness> allList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- allList = this.distinctByPlantAndTag(allList,estRemainMin,estRemainMin + 1);
- int gd = allList.size();
- // int gd = tMeasureThicknessService.count(new QueryWrapper<TMeasureThickness>()
- // .in("plant_code", plantIds)
- // .and(wrapper -> wrapper
- // .ne("dev_type", "设备") // 排除 dev_type = '设备'
- // .or() // 或
- // .isNull("dev_type") // 包含 dev_type 为 null 的记录
- // )
- // .eq("del_flag", 0)
- // .between("EST_REMAIN", estRemainMin, estRemainMin + 1)
- // );
- resData.add(gd);
- }
- Map<String, Object> res = new HashMap<String, Object>();
- res.put("targetYears" ,targetYears) ;
- res.put("resData" ,resData) ;
- return AjaxResult.success(res);
- }
- /**
- * 管道预估寿命数据
- */
- @RequestMapping(value = "sbData")
- public AjaxResult sbData(@RequestBody Map<String, Object> params) {
- List plantIds = (List) params.get("plantIds");
- if (plantIds == null) {
- plantIds = new ArrayList();
- }
- if (plantIds.size() == 0) {
- plantIds.add("1");
- }
- String plants = String.join(",", plantIds);
- // 1. 获取当前年份
- int currentYear = Year.now().getValue();
- // 2. 创建包含当前年份及未来十年的年份列表
- List<Integer> targetYears = new ArrayList<>();
- for (int i = 0; i <= 10; i++) {
- targetYears.add(currentYear + i);
- }
- // 3. 存储查询结果(年份 -> 过期数据)
- Map<Integer, List<String>> expiredDataByYear = new HashMap<>();
- List<Integer> resData = new ArrayList<>();
- // 4. 遍历每个年份并查询数据
- for (int year : targetYears) {
- TMeasureThickness t = new TMeasureThickness();
- int estRemainMin =year - currentYear;
- TMeasureThickness paramT = new TMeasureThickness();
- paramT.setPlants(plants);
- paramT.setIsPipe("0");
- List<TMeasureThickness> allList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- allList = this.distinctByPlantAndTag(allList,estRemainMin,estRemainMin + 1);
- int gd = allList.size();
- // int gd = tMeasureThicknessService.count(new QueryWrapper<TMeasureThickness>()
- // .in("plant_code", plantIds)
- // .eq("dev_type" , "设备")
- // .eq("del_flag", 0)
- // .between("EST_REMAIN", estRemainMin, estRemainMin + 1)
- // );
- resData.add(gd);
- }
- Map<String, Object> res = new HashMap<String, Object>();
- res.put("targetYears" ,targetYears) ;
- res.put("resData" ,resData) ;
- return AjaxResult.success(res);
- }
- /**
- * 管道预估寿命数据
- */
- @RequestMapping(value = "gdDataPie")
- public AjaxResult gdDataPie(@RequestBody Map<String, Object> params) {
- List plantIds = (List) params.get("plantIds");
- if (plantIds == null) {
- plantIds = new ArrayList();
- }
- if (plantIds.size() == 0) {
- plantIds.add("1");
- }
- String plants = String.join(",", plantIds);
- // 3. 存储查询结果(年份 -> 过期数据)
- List<Integer> resData = new ArrayList<>();
- // 4. 遍历每个年份并查询数据
- TMeasureThickness paramT = new TMeasureThickness();
- paramT.setPlants(plants);
- paramT.setIsPipe("1");
- List<TMeasureThickness> allList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- allList = this.distinctByPlantAndTag(allList,0,3);
- resData.add(this.distinctByPlantAndTag(allList,0,3).size());
- resData.add(this.distinctByPlantAndTag(allList,3,6).size());
- resData.add(this.distinctByPlantAndTag(allList,6,10).size());
- resData.add(this.distinctByPlantAndTag(allList,10,999).size());
- Map<String, Object> res = new HashMap<String, Object>();
- res.put("resData" ,resData) ;
- return AjaxResult.success(res);
- }
- /**
- * 管道预估寿命数据
- */
- @RequestMapping(value = "sbDataPie")
- public AjaxResult sbDataPie(@RequestBody Map<String, Object> params) {
- List plantIds = (List) params.get("plantIds");
- if (plantIds == null) {
- plantIds = new ArrayList();
- }
- if (plantIds.size() == 0) {
- plantIds.add("1");
- }
- String plants = String.join(",", plantIds);
- // 3. 存储查询结果(年份 -> 过期数据)
- List<Integer> resData = new ArrayList<>();
- // 4. 遍历每个年份并查询数据
- TMeasureThickness paramT = new TMeasureThickness();
- paramT.setPlants(plants);
- paramT.setIsPipe("0");
- List<TMeasureThickness> allList = tMeasureThicknessMapper.selectTMeasureThicknessList(paramT);
- allList = this.distinctByPlantAndTag(allList,0,3);
- resData.add(this.distinctByPlantAndTag(allList,0,3).size());
- resData.add(this.distinctByPlantAndTag(allList,3,6).size());
- resData.add(this.distinctByPlantAndTag(allList,6,10).size());
- resData.add(this.distinctByPlantAndTag(allList,10,999).size());
- Map<String, Object> res = new HashMap<String, Object>();
- res.put("resData" ,resData);
- return AjaxResult.success(res);
- }
- }
|