DayMonthYearReportController.java 12 KB

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