DayMonthYearReportController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package com.huaxu.controller;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.huaxu.common.EasyExcelUtil;
  6. import com.huaxu.dto.*;
  7. import com.huaxu.enums.SceneEnum;
  8. import com.huaxu.model.AjaxMessage;
  9. import com.huaxu.model.Pagination;
  10. import com.huaxu.model.ResultStatus;
  11. import com.huaxu.service.ReportDimensionSettingService;
  12. import com.huaxu.service.ReportService;
  13. import com.huaxu.util.ExcelUtil;
  14. import com.huaxu.util.ReportExcelUtil;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiOperation;
  17. import io.swagger.annotations.ApiParam;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.web.bind.annotation.*;
  22. import javax.validation.Valid;
  23. import java.util.ArrayList;
  24. import java.util.List;
  25. /**
  26. * 标签信息页面控制器
  27. * @author WYY
  28. * @date 2020-12-03 16:50
  29. */
  30. @RestController
  31. @RequestMapping("/report")
  32. @Api(tags = "日月年统计报表信息")
  33. public class DayMonthYearReportController {
  34. @Value("${SMS.sys_excel_path}")
  35. private String baseDir;
  36. @Autowired
  37. private ReportService reportService;
  38. @Autowired
  39. private ReportDimensionSettingService reportDimensionSettingService;
  40. @ApiOperation(value = "按年月日统计报表")
  41. @RequestMapping(value = "/getReportBySceneIds", method = RequestMethod.POST)
  42. @ResponseBody
  43. public AjaxMessage<Pagination<ReportDto>> getReportBySceneIds(
  44. @RequestParam Integer pageNum,
  45. @RequestParam Integer pageSize,
  46. @ApiParam(value = "场景IDS", required = true) @RequestParam(required = true) Long[] ids,
  47. @ApiParam(value = "查询年", required = false) @RequestParam(required = false) Integer year ,
  48. @ApiParam(value = "查询月", required = false) @RequestParam(required = false) Integer month ,
  49. @ApiParam(value = "查询日", required = false) @RequestParam(required = false) Integer day ,
  50. @ApiParam(value = "报表类型(0日 1月 2年)", required = true) @RequestParam(required = true) Integer reportType
  51. ) {
  52. IPage<ReportDto> iPage = new Page<>(pageNum, pageSize);
  53. iPage = reportService.getReportBySceneIds(iPage,ids,year,month,day,reportType);
  54. Pagination<ReportDto> pages = new Pagination<>(iPage);
  55. return new AjaxMessage<>(ResultStatus.OK,pages);
  56. }
  57. @ApiOperation(value = "按年月日统计报表")
  58. @RequestMapping(value = "/getReportBySceneIdsNews", method = RequestMethod.POST)
  59. @ResponseBody
  60. public AjaxMessage<Pagination<ReportDto>> getReportBySceneIdsNews(@RequestBody ReportQueryDto queryDto) {
  61. IPage<ReportDto> iPage = new Page<>(queryDto.getPageNum(), queryDto.getPageSize());
  62. iPage = reportService.getReportBySceneIdsNew(iPage, queryDto);
  63. Pagination<ReportDto> pages = new Pagination<>(iPage);
  64. return new AjaxMessage<>(ResultStatus.OK,pages);
  65. }
  66. @ApiOperation(value = "按设备统计压力及流量年月日统计报表")
  67. @RequestMapping(value = "/getDevicePressReportByDeviceIdsNew", method = RequestMethod.POST)
  68. @ResponseBody
  69. public AjaxMessage<Pagination<ReportDto>> getDevicePressReportByDeviceIdsNew(@RequestBody ReportQueryDto queryDto) {
  70. IPage<ReportDto> iPage = new Page<>(queryDto.getPageNum(), queryDto.getPageSize());
  71. iPage = reportService.getPipeDevicePressReportByDeviceIds(iPage, queryDto);
  72. Pagination<ReportDto> pages = new Pagination<>(iPage);
  73. return new AjaxMessage<>(ResultStatus.OK,pages);
  74. }
  75. @ApiOperation(value = "按设备统计压力及流量年月日统计报表")
  76. @RequestMapping(value = "/getDevicePressReportByDeviceIds", method = RequestMethod.POST)
  77. @ResponseBody
  78. public AjaxMessage<Pagination<DevicePressReportAttributeDto>> getDevicePressReportByDeviceIds(
  79. @RequestParam Integer pageNum,
  80. @RequestParam Integer pageSize,
  81. @ApiParam(value = "设备IDS", required = true) @RequestParam(required = true) Long[] ids,
  82. @ApiParam(value = "查询年", required = false) @RequestParam(required = false) Integer year ,
  83. @ApiParam(value = "查询月", required = false) @RequestParam(required = false) Integer month ,
  84. @ApiParam(value = "查询日", required = false) @RequestParam(required = false) Integer day ,
  85. @ApiParam(value = "类型(1压力 2流量)", required = false) @RequestParam(required = false) Integer type ,
  86. @ApiParam(value = "报表类型(0日 1月 2年)", required = true) @RequestParam(required = true) Integer reportType
  87. ) {
  88. IPage<DevicePressReportAttributeDto> iPage = new Page<>(pageNum, pageSize);
  89. iPage = reportService.getDevicePressReportByDeviceIds(iPage,ids,year,month,day,reportType,type);
  90. Pagination<DevicePressReportAttributeDto> pages = new Pagination<>(iPage);
  91. for(DevicePressReportAttributeDto item : pages.getList())
  92. {
  93. item.setAvgValue((double)Math.round(item.getAvgValue()==null?0:item.getAvgValue()*1000)/1000);
  94. item.setMinValue((double)Math.round(item.getMinValue()==null?0:item.getMinValue()*1000)/1000);
  95. item.setMaxValue((double)Math.round(item.getMaxValue()==null?0:item.getMaxValue()*1000)/1000);
  96. item.setSumValue((double)Math.round(item.getSumValue()==null?0:item.getSumValue()*1000)/1000);
  97. item.setLatestValue((double)Math.round(item.getLatestValue()==null?0:item.getLatestValue()*1000)/1000);
  98. }
  99. return new AjaxMessage<>(ResultStatus.OK,pages);
  100. }
  101. @ApiOperation(value = "按设备统计水质年月日统计报表")
  102. @RequestMapping(value = "/getDevicWaterReportByDeviceIdsNew", method = RequestMethod.POST)
  103. @ResponseBody
  104. public AjaxMessage<Pagination<ReportDto>> getDevicWaterReportByDeviceIdsNew(@RequestBody ReportQueryDto queryDto) {
  105. queryDto.setType(3);
  106. IPage<ReportDto> iPage = new Page<>(queryDto.getPageNum(), queryDto.getPageSize());
  107. iPage = reportService.getPipeDevicePressReportByDeviceIds(iPage,queryDto);
  108. Pagination<ReportDto> pages = new Pagination<>(iPage);
  109. return new AjaxMessage<>(ResultStatus.OK,pages);
  110. }
  111. @ApiOperation(value = "按设备统计水质年月日统计报表")
  112. @RequestMapping(value = "/getDevicWaterReportByDeviceIds", method = RequestMethod.POST)
  113. @ResponseBody
  114. public AjaxMessage<Pagination<DeviceWaterReportAttributeDto>> getDevicWaterReportByDeviceIds(
  115. @RequestParam Integer pageNum,
  116. @RequestParam Integer pageSize,
  117. @ApiParam(value = "设备IDS", required = true) @RequestParam(required = true) Long[] ids,
  118. @ApiParam(value = "查询年", required = false) @RequestParam(required = false) Integer year ,
  119. @ApiParam(value = "查询月", required = false) @RequestParam(required = false) Integer month ,
  120. @ApiParam(value = "查询日", required = false) @RequestParam(required = false) Integer day ,
  121. @ApiParam(value = "报表类型(0日 1月 2年)", required = true) @RequestParam(required = true) Integer reportType
  122. ) {
  123. IPage<DeviceWaterReportAttributeDto> iPage = new Page<>(pageNum, pageSize);
  124. iPage = reportService.getDevicWaterReportByDeviceIds(iPage,ids,year,month,day,reportType);
  125. Pagination<DeviceWaterReportAttributeDto> pages = new Pagination<>(iPage);
  126. for(DeviceWaterReportAttributeDto item : pages.getList()) {
  127. item.setAvgCLValue((double)Math.round(item.getAvgCLValue()==null?0:item.getAvgCLValue()*1000)/1000);
  128. item.setAvgPHValue((double)Math.round(item.getAvgPHValue()==null?0:item.getAvgPHValue()*1000)/1000);
  129. item.setAvgQuValue((double)Math.round(item.getAvgQuValue()==null?0:item.getAvgQuValue()*1000)/1000);
  130. item.setMinCLValue((double)Math.round(item.getMinCLValue()==null?0:item.getMinCLValue()*1000)/1000);
  131. item.setMinPHValue((double)Math.round(item.getMinPHValue()==null?0:item.getMinPHValue()*1000)/1000);
  132. item.setMinQuValue((double)Math.round(item.getMinQuValue()==null?0:item.getMinQuValue()*1000)/1000);
  133. item.setMaxCLValue((double)Math.round(item.getMaxCLValue()==null?0:item.getMaxCLValue()*1000)/1000);
  134. item.setMaxPHValue((double)Math.round(item.getMaxPHValue()==null?0:item.getMaxPHValue()*1000)/1000);
  135. item.setMaxQuValue((double)Math.round(item.getMaxQuValue()==null?0:item.getMaxQuValue()*1000)/1000);
  136. item.setSumCLValue((double)Math.round(item.getSumCLValue()==null?0:item.getSumCLValue()*1000)/1000);
  137. item.setSumPHValue((double)Math.round(item.getSumPHValue()==null?0:item.getSumPHValue()*1000)/1000);
  138. item.setSumQuValue((double)Math.round(item.getSumQuValue()==null?0:item.getSumQuValue()*1000)/1000);
  139. item.setLatestCLValue((double)Math.round(item.getLatestCLValue()==null?0:item.getLatestCLValue()*1000)/1000);
  140. item.setLatestPHValue((double)Math.round(item.getLatestPHValue()==null?0:item.getLatestPHValue()*1000)/1000);
  141. item.setLatestQuValue((double)Math.round(item.getLatestQuValue()==null?0:item.getLatestQuValue()*1000)/1000);
  142. }
  143. return new AjaxMessage<>(ResultStatus.OK,pages);
  144. }
  145. @ApiOperation(value = "获取自定义报表统计维度")
  146. @RequestMapping(value = "/getCustomDimension", method = RequestMethod.POST)
  147. @ResponseBody
  148. public AjaxMessage<List<ReportAttributeDto>> getCustomDimension(
  149. @ApiParam(value = "场景IDS", required = true) @RequestParam(required = true) Long[] ids
  150. ) {
  151. return new AjaxMessage<>(ResultStatus.OK, reportService.findAttributeNameList(ids, null));
  152. }
  153. @ApiOperation(value = "获取管网自定义报表统计维度")
  154. @RequestMapping(value = "/getPipelineCustomDimension", method = RequestMethod.POST)
  155. @ResponseBody
  156. public AjaxMessage<List<ReportAttributeDto>> getPipelineCustomDimension(
  157. @ApiParam(value = "设备ID", required = true) @RequestParam(required = true) Long deviceId,
  158. @ApiParam(value = "类型:1压力,2流量,3水质", required = true) @RequestParam(required = true) Integer type) {
  159. return new AjaxMessage<>(ResultStatus.OK, reportService.findPipeAttributeNameList(deviceId, type));
  160. }
  161. @ApiOperation(value = "修改自定义报表统计维度")
  162. @RequestMapping(value = "/updateCustomDimension", method = RequestMethod.POST)
  163. @ResponseBody
  164. public AjaxMessage<List<ReportAttributeDto>> updateCustomDimension(@RequestBody @Valid List<ReportStatisticalDimensionDto> dataList) {
  165. reportDimensionSettingService.batchUpdateStatisticalDimension(dataList);
  166. return new AjaxMessage<>(ResultStatus.OK);
  167. }
  168. @RequestMapping(value = "/export/excel", method = RequestMethod.POST)
  169. @ApiOperation(value = "报表导出")
  170. public AjaxMessage<String> exportExcel(@RequestBody ReportQueryDto queryDto) {
  171. IPage<ReportDto> iPage = new Page<>(1, 1000000);
  172. if (queryDto.getType() == null ){
  173. iPage = reportService.getReportBySceneIdsNew(iPage, queryDto);
  174. } else {
  175. iPage = reportService.getPipeDevicePressReportByDeviceIds(iPage, queryDto);
  176. }
  177. List<ReportDto> list = iPage.getRecords();
  178. if (CollectionUtil.isEmpty(list)){
  179. return new AjaxMessage<>(ResultStatus.OK);
  180. }
  181. List<List<String>> reportTitle = ReportExcelUtil.toExcelTitleList(list.get(0).getReportTitle(), queryDto.getSceneType());
  182. String filePath = ExcelUtil.writeSimpleExcelWithHeader(baseDir, SceneEnum.getMsg(queryDto.getSceneType()) +"报表", reportTitle, ReportExcelUtil.toReportExcelDto(list,queryDto.getSceneType()));
  183. return new AjaxMessage<>(ResultStatus.OK, filePath);
  184. }
  185. }