package com.zhitan.web.controller.consumptionanalysis; import com.zhitan.basicdata.domain.SysEnergy; import com.zhitan.basicdata.services.ISysEnergyService; import com.zhitan.common.core.controller.BaseController; import com.zhitan.common.core.domain.AjaxResult; import com.zhitan.consumptionanalysis.domain.dto.ConsumptionAnalysisDTO; import com.zhitan.consumptionanalysis.domain.vo.ConsumptionAnalysisVO; import com.zhitan.consumptionanalysis.domain.vo.ProductEnergyAnalysisVO; import com.zhitan.consumptionanalysis.domain.vo.RankingDataVO; import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData; import com.zhitan.consumptionanalysis.service.IConsumptionAnalysisService; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; /** * 统计分析 控制层 * * @Author: Zhujw * @Date: 2023/3/1 */ @RestController @RequestMapping("/consumptionanalysis") public class ConsumptionAnalysisController extends BaseController { @Autowired private IConsumptionAnalysisService consumptionAnalysisService; @Autowired private ISysEnergyService sysEnergyService; @GetMapping("/getByArea") @ApiOperation(value = "科室能耗分析列表", notes = "科室能耗分析列表") public AjaxResult getByArea(@Validated ConsumptionAnalysisDTO dto) { ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getByArea(dto); return AjaxResult.success(consumptionAnalysisVO); } @PostMapping("/energyExport") @ApiOperation(value = "科室能耗分析导出", notes = "科室能耗分析导出") public void energyExport(HttpServletResponse response, ConsumptionAnalysisDTO dto) { ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getByArea(dto); Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("能耗分析"); final SysEnergy sysEnergy = sysEnergyService.selectSameEnergyCodeNum(dto.getEnergyType()); String[] columnNames = new String[] { "本期时间", "本期耗" + sysEnergy.getEnername() + "(" + sysEnergy.getMuid()+ ")", "同期时间","同期耗" + sysEnergy.getEnername() + "(" + sysEnergy.getMuid()+ ")", "YOY".equals( dto.getAnalysisType())?"同比(%)":"环比(%)" }; // 定义数据 List data = new ArrayList<>(); data.add(columnNames); consumptionAnalysisVO.getDataList().forEach(vo->{ final String[] strings = new String[]{vo.getCurrentTime(),vo.getCurrentValue()+"", vo.getCompareTime(),vo.getCompareValue()+"",vo.getRatio()+""}; data.add(strings); }); // 写入数据 int rowNum = 0; for (String[] rowData : data) { Row row = sheet.createRow(rowNum++); int colNum = 0; for (String field : rowData) { Cell cell = row.createCell(colNum++); cell.setCellValue(field); } } try { workbook.write(response.getOutputStream()); } catch (Exception e) { throw new RuntimeException("能耗分析导出异常"); } finally { IOUtils.closeQuietly(workbook); } } @GetMapping("/getByDepartment") @ApiOperation(value = "根据科室获取能耗排名", notes = "根据科室获取能耗排名") public AjaxResult getByDepartment(@Validated ConsumptionAnalysisDTO dto) { List consumptionAnalysisVO = consumptionAnalysisService.getByDepartment(dto); return AjaxResult.success(consumptionAnalysisVO); } @GetMapping("/getComprehensiveEnergy") @ApiOperation(value = "根据节点获取综合能耗列表", notes = "根据节点获取综合能耗列表") public AjaxResult getComprehensiveEnergy(@Validated ConsumptionAnalysisDTO dto) { ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getComprehensiveEnergy(dto); return AjaxResult.success(consumptionAnalysisVO); } @GetMapping("/getYOY") @ApiOperation(value = "根据节点获取综合能耗同比环比", notes = "根据节点获取综合能耗同比环比") public AjaxResult getYOY(@Validated ConsumptionAnalysisDTO dto) { ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getYOY(dto); return AjaxResult.success(consumptionAnalysisVO); } @GetMapping("/getEnergyRanking") @ApiOperation(value = "根据节点获取综合能耗排名", notes = "根据节点获取综合能耗排名") public AjaxResult getEnergyRanking(@Validated ConsumptionAnalysisDTO dto) { List consumptionAnalysisVO = consumptionAnalysisService.getEnergyRanking(dto); return AjaxResult.success(consumptionAnalysisVO); } @PostMapping("/comprehensiveEnergyExport") @ApiOperation(value = "综合能耗分析导出", notes = "综合能耗分析导出") public void comprehensiveEnergyExport(HttpServletResponse response, ConsumptionAnalysisDTO dto) { ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getComprehensiveEnergy(dto); Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("综合能耗分析"); String[] columnNames = new String[] { "日期", "综合能耗量(tce)" }; // 定义数据 List data = new ArrayList<>(); data.add(columnNames); consumptionAnalysisVO.getDataList().forEach(vo->{ final String[] strings = new String[]{vo.getCurrentTime(),vo.getCurrentValue()+""}; data.add(strings); }); // 写入数据 int rowNum = 0; for (String[] rowData : data) { Row row = sheet.createRow(rowNum++); int colNum = 0; for (String field : rowData) { Cell cell = row.createCell(colNum++); cell.setCellValue(field); } } try { workbook.write(response.getOutputStream()); } catch (Exception e) { throw new RuntimeException("综合能耗分析导出异常"); } finally { IOUtils.closeQuietly(workbook); } } @GetMapping("/getPlanAndProdCount") @ApiOperation(value = "根据节点和日期获取平均产量和计划量", notes = "根据节点和日期获取平均产量和计划量") public AjaxResult getPlanAndProdCount(@Validated ConsumptionAnalysisDTO dto) { ConsumptionAnalysisVO consumptionAnalysisVO = consumptionAnalysisService.getPlanAndProdCount(dto); ConsumptionAnalysisVO consumptionAnalysisServiceByArea = consumptionAnalysisService.getByArea(dto); consumptionAnalysisServiceByArea.setProdCount(consumptionAnalysisVO.getProdCount()); consumptionAnalysisServiceByArea.setPlanCount(consumptionAnalysisVO.getPlanCount()); return AjaxResult.success(consumptionAnalysisServiceByArea); } @GetMapping("/getProdEnergy") @ApiOperation(value = "根据节点和日期获取产品单耗", notes = "根据节点和日期获取产品单耗") public AjaxResult getProdEnergy(@Validated ConsumptionAnalysisDTO dto) { ProductEnergyAnalysisVO productEnergyAnalysisVO = consumptionAnalysisService.getProdEnergy(dto); return AjaxResult.success(productEnergyAnalysisVO); } }