diff --git a/lzbi-admin/src/main/resources/application.yml b/lzbi-admin/src/main/resources/application.yml index 3466c76..9af1cf0 100644 --- a/lzbi-admin/src/main/resources/application.yml +++ b/lzbi-admin/src/main/resources/application.yml @@ -60,7 +60,7 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: dev + active: test # 文件上传 servlet: multipart: diff --git a/lzbi-module/src/main/java/com/lzbi/bi/controller/DcBusiHisReportController.java b/lzbi-module/src/main/java/com/lzbi/bi/controller/DcBusiHisReportController.java index 4b13173..2938f6c 100644 --- a/lzbi-module/src/main/java/com/lzbi/bi/controller/DcBusiHisReportController.java +++ b/lzbi-module/src/main/java/com/lzbi/bi/controller/DcBusiHisReportController.java @@ -7,16 +7,16 @@ import cn.hutool.poi.excel.BigExcelWriter; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.alibaba.fastjson2.JSONObject; -import com.lzbi.bi.domain.DcDymicHeaderQueryVo; -import com.lzbi.bi.domain.DcDymicReportHeaderVo; -import com.lzbi.bi.domain.LogTimeThreeQueryParamVo; -import com.lzbi.bi.domain.LogTimescaleHistoryThreeVo; +import com.lzbi.asset.domain.DcBaseAssetInfo; +import com.lzbi.bi.domain.*; +import com.lzbi.code.domain.WeatherReportVO; import com.lzbi.code.service.LogTimesacleHistoryThreeService; import com.lzbi.common.core.controller.BaseController; import com.lzbi.common.core.domain.AjaxResult; import com.lzbi.common.utils.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -33,12 +33,14 @@ import java.util.stream.Collectors; * @author : zhousq * @date : 2024-02-5 */ +@Slf4j @Api(tags = "生产设备参数统计明细表功能接口") @RestController @RequestMapping("/dc/hisDetailReport") public class DcBusiHisReportController extends BaseController { @Resource private LogTimesacleHistoryThreeService logTimesacleHistoryThreeService; + /** * 分页列表查询 * @@ -70,7 +72,7 @@ public class DcBusiHisReportController extends BaseController { .sorted(Comparator.comparing(DcDymicReportHeaderVo::getDeviceUUID).thenComparing(DcDymicReportHeaderVo::getParamCode)) .forEach(dcDymicReportHeaderVo -> { JSONObject ct = new JSONObject(); - ct.put("field", "C"+dcDymicReportHeaderVo.getColCode()); + ct.put("field", "C" + dcDymicReportHeaderVo.getColCode()); ct.put("title", dcDymicReportHeaderVo.getColName1() + "[" + dcDymicReportHeaderVo.getColName2() + "]"); ct.put("width", 200); columnMap.put(dcDymicReportHeaderVo.getColCode(), dcDymicReportHeaderVo.getParamCode()); @@ -87,7 +89,7 @@ public class DcBusiHisReportController extends BaseController { .forEach(tVo -> { String ck = tVo.getDeviceUuid() + "_" + tVo.getParamCode(); if (StringUtils.isNotNull(columnMap.get(ck))) { - jdata.put("C"+ck, tVo.getParamValueNum()); + jdata.put("C" + ck, tVo.getParamValueNum()); } }); @@ -132,7 +134,7 @@ public class DcBusiHisReportController extends BaseController { .sorted(Comparator.comparing(DcDymicReportHeaderVo::getDeviceUUID).thenComparing(DcDymicReportHeaderVo::getParamCode)) .forEach(dcDymicReportHeaderVo -> { JSONObject ct = new JSONObject(); - ct.put("deviceName", "C"+dcDymicReportHeaderVo.getColCode()); + ct.put("deviceName", "C" + dcDymicReportHeaderVo.getColCode()); ct.put("paramName", dcDymicReportHeaderVo.getColName1() + "[" + dcDymicReportHeaderVo.getColName2() + "]"); columnMap.put(dcDymicReportHeaderVo.getColCode(), ct); @@ -149,7 +151,7 @@ public class DcBusiHisReportController extends BaseController { data2.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> { entry.getValue().stream().sorted(Comparator.comparing(LogTimescaleHistoryThreeVo::getParamCode)).forEach(vo -> { JSONObject jsonObject = columnMap.get(vo.getDeviceUuid() + "_" + vo.getParamCode()); - if(StringUtils.isNotNull(jsonObject)){ + if (StringUtils.isNotNull(jsonObject)) { jsonObject.put(vo.getTimestampKey().toString(), vo.getParamValueNum()); } tableDatas.add(jsonObject); @@ -161,41 +163,44 @@ public class DcBusiHisReportController extends BaseController { return AjaxResult.success(dataInfo); } } + private String validatorator(LogTimeThreeQueryParamVo queryVo) { - if (StringUtils.isNull(queryVo.getBeginTime())||StringUtils.isEmpty(queryVo.getBeginTime())) { + if (StringUtils.isNull(queryVo.getBeginTime()) || StringUtils.isEmpty(queryVo.getBeginTime())) { return "查询失败,开始时间不能为空!"; } - if (StringUtils.isNull(queryVo.getEndTime())||StringUtils.isEmpty(queryVo.getEndTime())) { + if (StringUtils.isNull(queryVo.getEndTime()) || StringUtils.isEmpty(queryVo.getEndTime())) { return "查询失败,结束时间不能为空!"; } - if (StringUtils.isNull(queryVo.getQueryParamClass())||StringUtils.isEmpty(queryVo.getQueryParamClass())) { + if (StringUtils.isNull(queryVo.getQueryParamClass()) || StringUtils.isEmpty(queryVo.getQueryParamClass())) { return "查询失败,参数类型不能为空!"; } return null; } + ///按时间 设备+参数 形成数据--时间分组 private List> getMapList(List list, List dcDymicReportHeaderVos) { Map> collect = list.stream().collect(Collectors.groupingBy(LogTimescaleHistoryThreeVo::getTimeStampString)); return collect.entrySet().stream().sorted(Map.Entry.comparingByKey()).map(entry -> { Map map = new LinkedHashMap<>(); - map.put("统计时间",entry.getKey()); + map.put("统计时间", entry.getKey()); entry.getValue().stream().sorted(Comparator.comparing(LogTimescaleHistoryThreeVo::getDeviceUuid).thenComparing(LogTimescaleHistoryThreeVo::getParamCode)).forEach(vo -> { - String key=vo.getDeviceUuid() + "_" + vo.getParamCode(); + String key = vo.getDeviceUuid() + "_" + vo.getParamCode(); Optional first = dcDymicReportHeaderVos.stream().filter(vos -> vos.getColCode().equals(key)).findFirst(); - if(first.isPresent()){ + if (first.isPresent()) { //map.put(first.get().getColName1(), first.get().getColName2()); - map.put(first.get().getColName1()+'.'+first.get().getColName2(), vo.getParamValueNum()); + map.put(first.get().getColName1() + '.' + first.get().getColName2(), vo.getParamValueNum()); } }); return map; }).collect(Collectors.toList()); } + /// 设备+参数 形成数据--设备-参数分组 - private List> getMapListDevice(List list,List dcDymicReportHeaderVos) { - Map> collect = list.stream().collect(Collectors.groupingBy(item->item.getDeviceUuid()+"_"+item.getParamCode())); + private List> getMapListDevice(List list, List dcDymicReportHeaderVos) { + Map> collect = list.stream().collect(Collectors.groupingBy(item -> item.getDeviceUuid() + "_" + item.getParamCode())); List> collect1 = collect.entrySet().stream().map(entry -> { Map map = new LinkedHashMap<>(); - entry.getValue().stream().sorted(Comparator.comparing(LogTimescaleHistoryThreeVo::getTimestampKey).thenComparing(LogTimescaleHistoryThreeVo::getParamCode)).forEach(vo -> { + entry.getValue().stream().sorted(Comparator.comparing(LogTimescaleHistoryThreeVo::getTimeStampString).thenComparing(LogTimescaleHistoryThreeVo::getParamCode)).forEach(vo -> { String key = vo.getDeviceUuid() + "_" + vo.getParamCode(); Optional first = dcDymicReportHeaderVos.stream().filter(vos -> vos.getColCode().equals(key)).findFirst(); if (first.isPresent()) { @@ -213,22 +218,24 @@ public class DcBusiHisReportController extends BaseController { * "生产设备参数统计明细表导出功能 */ @ApiOperation("生产设备参数统计明细表导出功能--时间纵向") - @PostMapping ("/export") + @PostMapping("/export") public void export(HttpServletResponse response, LogTimeThreeQueryParamVo queryVo) throws IOException { - List> mapList=getExcellData(queryVo,2); - toExcel(response,mapList); + List> mapList = getExcellData(queryVo, 2); + toExcel(response, mapList); } + @ApiOperation("生产设备参数统计明细表导出功能-时间横向") @PostMapping("/export2") - public void export2(HttpServletResponse response, LogTimeThreeQueryParamVo queryVo) throws IOException { - List> mapList=getExcellData(queryVo,1); + public void export2(HttpServletResponse response, LogTimeThreeQueryParamVo queryVo) throws IOException { + List> mapList = getExcellData(queryVo, 1); // 通过工具类创建writer,默认创建xls格式 - toExcel(response,mapList); + toExcel(response, mapList); } + //获取excel数据 1 excel设备参数为列模式 2 excel时间为列模式 3 浏览器设备参数为列模式 //注意 excel有最大列数显示255 ,超出列数会报错 - private List> getExcellData(LogTimeThreeQueryParamVo queryVo,int type){ + private List> getExcellData(LogTimeThreeQueryParamVo queryVo, int type) { // 设置头部数据, DcDymicHeaderQueryVo dcDymicHeaderQueryVo = new DcDymicHeaderQueryVo(); dcDymicHeaderQueryVo.setParamModels(queryVo.getQueryParamClass()); @@ -237,19 +244,19 @@ public class DcBusiHisReportController extends BaseController { List collect = dcDymicReportHeaderVos.stream().map(DcDymicReportHeaderVo::getParamCode).collect(Collectors.toList()); queryVo.setQueryParamCodes(collect); List list = logTimesacleHistoryThreeService.selectDetailByQuery(queryVo); - if(type==1){ - return getMapListDevice(list,dcDymicReportHeaderVos); - }else { - return getMapList(list,dcDymicReportHeaderVos); + if (type == 1) { + return getMapListDevice(list, dcDymicReportHeaderVos); + } else { + return getMapList(list, dcDymicReportHeaderVos); } } - private void toExcel(HttpServletResponse response,List> mapList) throws IOException { - String fileName ="report"+DateUtil.now() + ".xlsx"; + private void toExcel(HttpServletResponse response, List> mapList) throws IOException { + String fileName = "report" + DateUtil.now() + ".xlsx"; response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); //ExcelWriter writer = ExcelUtil.getWriter(true); - BigExcelWriter writer= ExcelUtil.getBigWriter(); + BigExcelWriter writer = ExcelUtil.getBigWriter(); writer.write(mapList, true); //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 //response.setHeader("Content-Disposition", "attachment;filename="+fileName); @@ -260,17 +267,33 @@ public class DcBusiHisReportController extends BaseController { //此处记得关闭输出Servlet流 IoUtil.close(out); } + @ApiOperation("获取生产IOT系统参数模版列表") @GetMapping("/getParamClass") - public AjaxResult getParamClass(){ - return AjaxResult.success(logTimesacleHistoryThreeService.selectParamModels()) ; + public AjaxResult getParamClass() { + return AjaxResult.success(logTimesacleHistoryThreeService.selectParamModels()); } + @ApiOperation("获取生产IOT系统设备列表") @GetMapping("/getDevicie/{orgCode}") - public AjaxResult selectDevices(@PathVariable Long orgCode) { - if(orgCode==0){ - return AjaxResult.success(logTimesacleHistoryThreeService.selectDevices(null)) ; + public AjaxResult selectDevices(@PathVariable Long orgCode) { + if (orgCode == 0) { + return AjaxResult.success(logTimesacleHistoryThreeService.selectDevices(null)); } - return AjaxResult.success(logTimesacleHistoryThreeService.selectDevices(orgCode)) ; + return AjaxResult.success(logTimesacleHistoryThreeService.selectDevices(orgCode)); + } + + @ApiOperation("根据父id获取下级地区--级联数据") + @GetMapping("/selectAreaElementCascaderByParentId") + public AjaxResult selectAreaElementCascaderByParentId(@RequestParam("parentId") Integer parentId) { + return AjaxResult.success(logTimesacleHistoryThreeService.selectAreaElementCascaderByParentId(parentId)); + } + + @ApiOperation("天气报表") + @PostMapping("/exportWeather") + public void exportWeather(HttpServletResponse response, ExportWeatherReq exportWeatherReq) throws IOException { + List weatherReport = logTimesacleHistoryThreeService.getWeatherReport(exportWeatherReq); + com.lzbi.common.utils.poi.ExcelUtil util = new com.lzbi.common.utils.poi.ExcelUtil(WeatherReportVO.class); + util.exportExcel(response, weatherReport, "天气报表"); } } \ No newline at end of file diff --git a/lzbi-module/src/main/java/com/lzbi/bi/domain/ElementCascaderVO.java b/lzbi-module/src/main/java/com/lzbi/bi/domain/ElementCascaderVO.java new file mode 100644 index 0000000..2178303 --- /dev/null +++ b/lzbi-module/src/main/java/com/lzbi/bi/domain/ElementCascaderVO.java @@ -0,0 +1,35 @@ +package com.lzbi.bi.domain; + +import lombok.Data; + +import java.util.List; + +/** + * @ClassName ElementCascaderVO + * @Description 饿了么级联组件vo + * @Version 1.0 + */ +@Data +public class ElementCascaderVO { + + /** + * 值 + */ + private String value; + /** + * 标签 + */ + private String label; + /** + * 是否禁用 + */ + private boolean disabled; + /** + * 是否是叶子节点 + */ + private boolean leaf; + /** + * 子节点 + */ + private List children; +} diff --git a/lzbi-module/src/main/java/com/lzbi/bi/domain/ExportWeatherReq.java b/lzbi-module/src/main/java/com/lzbi/bi/domain/ExportWeatherReq.java new file mode 100644 index 0000000..9cf9139 --- /dev/null +++ b/lzbi-module/src/main/java/com/lzbi/bi/domain/ExportWeatherReq.java @@ -0,0 +1,25 @@ +package com.lzbi.bi.domain; + +import lombok.Data; + +/** + * @ClassName ExportWeatherReq + * @Description 导出天气报表请求参数 + * @Version 1.0 + */ +@Data +public class ExportWeatherReq { + + /** + * 省市区 + */ + private String adcode; + /** + * 开始时间 + */ + private String beginTime; + /** + * 结束时间 + */ + private String endTime; +} diff --git a/lzbi-module/src/main/java/com/lzbi/bi/mapper/LogTimeScaleThreeMapper.java b/lzbi-module/src/main/java/com/lzbi/bi/mapper/LogTimeScaleThreeMapper.java index c983379..ab5c6b9 100644 --- a/lzbi-module/src/main/java/com/lzbi/bi/mapper/LogTimeScaleThreeMapper.java +++ b/lzbi-module/src/main/java/com/lzbi/bi/mapper/LogTimeScaleThreeMapper.java @@ -1,12 +1,11 @@ package com.lzbi.bi.mapper; + import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.lzbi.bi.domain.DcDymicHeaderQueryVo; -import com.lzbi.bi.domain.DcDymicReportHeaderVo; -import com.lzbi.bi.domain.LogTimeThreeQueryParamVo; -import com.lzbi.bi.domain.LogTimescaleHistoryThreeVo; +import com.lzbi.bi.domain.*; +import com.lzbi.code.domain.WeatherReportVO; import org.apache.ibatis.annotations.MapKey; - +import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @@ -16,15 +15,32 @@ import java.util.Map; public interface LogTimeScaleThreeMapper extends BaseMapper { - //List selectVo(DeviceHistoryQueryVo queryVo); List selectDetailByQuery(LogTimeThreeQueryParamVo queryVo); + List selectHeaderInfo(DcDymicHeaderQueryVo queryVo); + @MapKey("code") - List> selectParamModels(); - @MapKey("code") - List> selectDevices(Long orgCode); + List> selectParamModels(); + @MapKey("code") + List> selectDevices(Long orgCode); + + /** + * 根据父级id查询下级地区--级联数据 + * + * @param parentId + * @return + */ + List selectAreaElementCascaderByParentId(@Param("parentId") Integer parentId); + + /** + * 获取天气信息 + * + * @param adcode + * @return + */ + List getWeatherReport(ExportWeatherReq exportWeatherReq); } diff --git a/lzbi-module/src/main/java/com/lzbi/bi/service/DcBusiDataScreenNewService.java b/lzbi-module/src/main/java/com/lzbi/bi/service/DcBusiDataScreenNewService.java index a566ad0..9797c37 100644 --- a/lzbi-module/src/main/java/com/lzbi/bi/service/DcBusiDataScreenNewService.java +++ b/lzbi-module/src/main/java/com/lzbi/bi/service/DcBusiDataScreenNewService.java @@ -92,19 +92,19 @@ public class DcBusiDataScreenNewService { public List getBoilerStatistics(TargetDraftDaynewReqVo vo) { List list = new ArrayList<>(); - List reportNames = Stream.of(ReportNameEnum.WATER_SUPPLY_TEMPERATURE.getName(), ReportNameEnum.RETURN_WATER_TEMPERATURE.getName()).collect(Collectors.toList()); + List reportNames = Stream.of(ReportNameEnum.NUMBER_OF_STEAM_FURNACES_IN_OPERATION.getName(), ReportNameEnum.NUMBER_OF_WATER_FURNACES_IN_OPERATION.getName()).collect(Collectors.toList()); vo.setAssetType("0").setAssetLevel("10").setReportNames(reportNames).setOrgIds(Stream.of(vo.getOrgId()).collect(Collectors.toList())); List targetDraftDaynewResVos = dcBusiTargetDraftDaynewService.selectTargetDraftDaynewList(vo); if (CollUtil.isEmpty(targetDraftDaynewResVos)) { return list; } list.add(BoilerStatisticsVO.builder() - .label(ReportNameEnum.WATER_SUPPLY_TEMPERATURE.getName()) - .value(targetDraftDaynewResVos.stream().filter(x -> x.getReportName().equals(ReportNameEnum.WATER_SUPPLY_TEMPERATURE.getName())).findFirst().orElse(new TargetDraftDaynewResVo()).getValueResult()) + .label(ReportNameEnum.NUMBER_OF_STEAM_FURNACES_IN_OPERATION.getName()) + .value(targetDraftDaynewResVos.stream().filter(x -> x.getReportName().equals(ReportNameEnum.NUMBER_OF_STEAM_FURNACES_IN_OPERATION.getName())).findFirst().orElse(new TargetDraftDaynewResVo()).getValueResult()) .build()); list.add(BoilerStatisticsVO.builder() - .label(ReportNameEnum.RETURN_WATER_TEMPERATURE.getName()) - .value(targetDraftDaynewResVos.stream().filter(x -> x.getReportName().equals(ReportNameEnum.RETURN_WATER_TEMPERATURE.getName())).findFirst().orElse(new TargetDraftDaynewResVo()).getValueResult()) + .label(ReportNameEnum.NUMBER_OF_WATER_FURNACES_IN_OPERATION.getName()) + .value(targetDraftDaynewResVos.stream().filter(x -> x.getReportName().equals(ReportNameEnum.NUMBER_OF_WATER_FURNACES_IN_OPERATION.getName())).findFirst().orElse(new TargetDraftDaynewResVo()).getValueResult()) .build()); return list; } diff --git a/lzbi-module/src/main/java/com/lzbi/code/domain/WeatherReportVO.java b/lzbi-module/src/main/java/com/lzbi/code/domain/WeatherReportVO.java new file mode 100644 index 0000000..ba6e75b --- /dev/null +++ b/lzbi-module/src/main/java/com/lzbi/code/domain/WeatherReportVO.java @@ -0,0 +1,29 @@ +package com.lzbi.code.domain; + +import com.lzbi.common.annotation.Excel; +import lombok.Data; + +@Data +public class WeatherReportVO { + + /** + * 时间 + */ + @Excel(name = "时间") + private String timestampString; + /** + * 地区 + */ + @Excel(name = "地区") + private String city; + /** + * 天气 + */ + @Excel(name = "天气") + private String weather; + /** + * 温度 + */ + @Excel(name = "温度") + private String temperature; +} diff --git a/lzbi-module/src/main/java/com/lzbi/code/service/LogTimesacleHistoryThreeService.java b/lzbi-module/src/main/java/com/lzbi/code/service/LogTimesacleHistoryThreeService.java index e66ca0a..79333cd 100644 --- a/lzbi-module/src/main/java/com/lzbi/code/service/LogTimesacleHistoryThreeService.java +++ b/lzbi-module/src/main/java/com/lzbi/code/service/LogTimesacleHistoryThreeService.java @@ -4,11 +4,9 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.lzbi.bi.domain.DcDymicHeaderQueryVo; -import com.lzbi.bi.domain.DcDymicReportHeaderVo; -import com.lzbi.bi.domain.LogTimeThreeQueryParamVo; -import com.lzbi.bi.domain.LogTimescaleHistoryThreeVo; +import com.lzbi.bi.domain.*; import com.lzbi.bi.mapper.LogTimeScaleThreeMapper; +import com.lzbi.code.domain.WeatherReportVO; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.MapKey; import org.springframework.stereotype.Service; @@ -40,4 +38,12 @@ public class LogTimesacleHistoryThreeService extends ServiceImpl> selectDevices(Long orgCode){ return baseMapper.selectDevices(orgCode); } + + public List selectAreaElementCascaderByParentId(Integer parentId){ + return baseMapper.selectAreaElementCascaderByParentId(parentId); + } + + public List getWeatherReport(ExportWeatherReq exportWeatherReq){ + return baseMapper.getWeatherReport(exportWeatherReq); + } } diff --git a/lzbi-module/src/main/resources/mapper/LogTimeScaleThreeMapper.xml b/lzbi-module/src/main/resources/mapper/LogTimeScaleThreeMapper.xml index 39cfcc2..d0a26ad 100644 --- a/lzbi-module/src/main/resources/mapper/LogTimeScaleThreeMapper.xml +++ b/lzbi-module/src/main/resources/mapper/LogTimeScaleThreeMapper.xml @@ -102,4 +102,34 @@ ORDER BY center_device_code asc + + + + \ No newline at end of file