Browse Source
			
			
			
			
				
		a) 机房能源查询; b) 系统能耗分析:能耗分析,环比分析,同比分析,同比环比分析; c) 设备能耗分析; 2、研华网关通过mqtt上传数据,然后存入rabbitmq,程序再从队列中获取数据处理入库,兼容新珠江项目; 3、spring-boot3.X和mqtt兼容问题解决;dev
				 47 changed files with 4083 additions and 59 deletions
			
			
		@ -0,0 +1,83 @@ | 
				
			|||||||
 | 
					package com.mh.web.controller.energy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.controller.BaseController; | 
				
			||||||
 | 
					import com.mh.common.core.domain.AjaxResult; | 
				
			||||||
 | 
					import com.mh.common.core.domain.vo.EnergyConsumptionVO; | 
				
			||||||
 | 
					import com.mh.common.utils.DateUtils; | 
				
			||||||
 | 
					import com.mh.system.service.energy.IEnergyService; | 
				
			||||||
 | 
					import jakarta.annotation.Resource; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.PostMapping; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestBody; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RestController; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 系统能耗分析 | 
				
			||||||
 | 
					 * @date 2023/7/18 14:00:09 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@RestController | 
				
			||||||
 | 
					@RequestMapping("/energy") | 
				
			||||||
 | 
					public class SysEnergyConsumptionController extends BaseController { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource | 
				
			||||||
 | 
					    private IEnergyService energyService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 获取系统能耗分析 | 
				
			||||||
 | 
					     * @param vo | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/sys") | 
				
			||||||
 | 
					    public AjaxResult sys(@RequestBody EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        DateUtils.energyDateChange(vo); | 
				
			||||||
 | 
					        return energyService.sys(vo); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 获取能耗同比分析 | 
				
			||||||
 | 
					     * @param vo | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/yoy") | 
				
			||||||
 | 
					    public AjaxResult yoy(@RequestBody EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        DateUtils.energyDateChange(vo); | 
				
			||||||
 | 
					        return energyService.yoy(vo); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 获取能耗环比分析 | 
				
			||||||
 | 
					     * @param vo | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/mom") | 
				
			||||||
 | 
					    public AjaxResult mom(@RequestBody EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        DateUtils.energyDateChange(vo); | 
				
			||||||
 | 
					        return energyService.mom(vo); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 获取能耗同比环比分析 | 
				
			||||||
 | 
					     * @param vo | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/yoyMom") | 
				
			||||||
 | 
					    public AjaxResult yoyMom(@RequestBody EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        DateUtils.energyDateChange(vo); | 
				
			||||||
 | 
					        return energyService.yoyMom(vo); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 获取机房各个设备能耗 | 
				
			||||||
 | 
					     * @param vo | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/device") | 
				
			||||||
 | 
					    public AjaxResult device(@RequestBody EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        DateUtils.energyDateChange(vo); | 
				
			||||||
 | 
					        return energyService.device(vo); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,128 @@ | 
				
			|||||||
 | 
					package com.mh.web.controller.energy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.excel.EasyExcel; | 
				
			||||||
 | 
					import com.alibaba.excel.util.ListUtils; | 
				
			||||||
 | 
					import com.mh.common.core.domain.AjaxResult; | 
				
			||||||
 | 
					import com.mh.common.core.domain.vo.EnergyQueryVO; | 
				
			||||||
 | 
					import com.mh.system.service.energy.IEnergyQueryService; | 
				
			||||||
 | 
					import jakarta.annotation.Resource; | 
				
			||||||
 | 
					import jakarta.servlet.http.HttpServletResponse; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.PostMapping; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestBody; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RestController; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.net.URLEncoder; | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.Arrays; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 系统能源查询(中港项目) | 
				
			||||||
 | 
					 * @date 2023-12-13 09:39:02 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@RestController | 
				
			||||||
 | 
					@RequestMapping("/energy") | 
				
			||||||
 | 
					public class SysEnergyQueryController { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource | 
				
			||||||
 | 
					    private IEnergyQueryService energyQueryService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 整体机房图形,表格数据查询(公用一个接口) | 
				
			||||||
 | 
					     * @param page | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/sys/query") | 
				
			||||||
 | 
					    public AjaxResult sysQuery(@RequestBody EnergyQueryVO page) { | 
				
			||||||
 | 
					        return energyQueryService.sysQuery(page); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 整体机房表格数据查询 | 
				
			||||||
 | 
					     * @param vo | 
				
			||||||
 | 
					     * @param response | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/sys/query/export") | 
				
			||||||
 | 
					    public void exportSysTable(@RequestBody EnergyQueryVO vo, HttpServletResponse response) { | 
				
			||||||
 | 
					        // 文件名
 | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            String fileName =  "机房整体能耗表.xlsx"; | 
				
			||||||
 | 
					            // 从数据库获取数据
 | 
				
			||||||
 | 
					            List<Map<String, Object>> dataList = (List<Map<String, Object>>) energyQueryService.sysQuery(vo).get("data"); | 
				
			||||||
 | 
					            if (dataList != null) { | 
				
			||||||
 | 
					                // 设置响应格式
 | 
				
			||||||
 | 
					                response.setContentType("application/vdn.ms-excel;charset=utf-8"); | 
				
			||||||
 | 
					                response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\""); | 
				
			||||||
 | 
					                response.setCharacterEncoding("UTF-8"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                List<List<String>> head = ListUtils.newArrayList(); | 
				
			||||||
 | 
					                List<String> titleArr = new ArrayList<>(); | 
				
			||||||
 | 
					                List<String> timeStrArr = new ArrayList<>(); | 
				
			||||||
 | 
					                List<String> cold = new ArrayList<>(); | 
				
			||||||
 | 
					                List<String> meter = new ArrayList<>(); | 
				
			||||||
 | 
					                List<String> cop = new ArrayList<>(); | 
				
			||||||
 | 
					                for (Map<String, Object> map : dataList) { | 
				
			||||||
 | 
					                    if (map.containsKey("titleArr")) { | 
				
			||||||
 | 
					                        titleArr = Arrays.asList((String[]) map.get("titleArr")); | 
				
			||||||
 | 
					                        List<String> head0 = ListUtils.newArrayList(); | 
				
			||||||
 | 
					                        head0.add("日期"); | 
				
			||||||
 | 
					                        List<String> head1 = ListUtils.newArrayList(); | 
				
			||||||
 | 
					                        head1.add("制冷量"); | 
				
			||||||
 | 
					                        List<String> head2 = ListUtils.newArrayList(); | 
				
			||||||
 | 
					                        head2.add("耗电量"); | 
				
			||||||
 | 
					                        List<String> head3= ListUtils.newArrayList(); | 
				
			||||||
 | 
					                        head3.add("COP"); | 
				
			||||||
 | 
					                        head.add(head0); | 
				
			||||||
 | 
					                        head.add(head1); | 
				
			||||||
 | 
					                        head.add(head2); | 
				
			||||||
 | 
					                        head.add(head3); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                    if (map.containsKey("timeStrArr")) { | 
				
			||||||
 | 
					                        timeStrArr = Arrays.asList((String[])map.get("timeStrArr")); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                    if (map.containsKey("cold")) { | 
				
			||||||
 | 
					                        cold = Arrays.asList((String[])map.get("cold")); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                    if (map.containsKey("meter")) { | 
				
			||||||
 | 
					                        meter = Arrays.asList((String[])map.get("meter")); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                    if (map.containsKey("cop")) { | 
				
			||||||
 | 
					                        cop = Arrays.asList((String[])map.get("cop")); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                List<List<Object>> excelDataList = ListUtils.newArrayList(); | 
				
			||||||
 | 
					                for (int i = 0; i < timeStrArr.size(); i++) { | 
				
			||||||
 | 
					                    List<Object> list1 = ListUtils.newArrayList(); | 
				
			||||||
 | 
					                    list1.add(timeStrArr.get(i)); | 
				
			||||||
 | 
					                    list1.add(cold.get(i)); | 
				
			||||||
 | 
					                    list1.add(meter.get(i)); | 
				
			||||||
 | 
					                    list1.add(cop.get(i)); | 
				
			||||||
 | 
					                    excelDataList.add(list1); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                // 内容格式
 | 
				
			||||||
 | 
					                EasyExcel.write(response.getOutputStream()).head(head).sheet("机房整体能耗表").doWrite(excelDataList); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } catch (Exception e) { | 
				
			||||||
 | 
					            log.error("下载报表异常", e); | 
				
			||||||
 | 
					            throw new RuntimeException("下载报表异常"); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 各个设备类型图形,表格数据查询(公用一个接口) | 
				
			||||||
 | 
					     * @param page | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @PostMapping("/sys/deviceType/query") | 
				
			||||||
 | 
					    public AjaxResult deviceTypeQuery(@RequestBody EnergyQueryVO page) { | 
				
			||||||
 | 
					        return energyQueryService.deviceTypeQuery(page); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,42 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Arrays; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 各个设备的数据 | 
				
			||||||
 | 
					 * @date 2023-12-18 09:33:30 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class ColumnData { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String name; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String[] value; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getName() { | 
				
			||||||
 | 
					        return name; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setName(String name) { | 
				
			||||||
 | 
					        this.name = name; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String[] getValue() { | 
				
			||||||
 | 
					        return value; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setValue(String[] value) { | 
				
			||||||
 | 
					        this.value = value; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String toString() { | 
				
			||||||
 | 
					        return "ColumnData{" + | 
				
			||||||
 | 
					                "name='" + name + '\'' + | 
				
			||||||
 | 
					                ", value=" + Arrays.toString(value) + | 
				
			||||||
 | 
					                '}'; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,68 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.dto; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serializable; | 
				
			||||||
 | 
					import java.util.Arrays; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 返回能耗分析的前端值 | 
				
			||||||
 | 
					 * @date 2023/7/18 15:07:55 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class EnergyConsumptionDTO implements Serializable { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final long serialVersionUID = 10L; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String[] titles; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String[] times; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String[] lineTimes; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private List<Map<String,Object>> data; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String[] getTitles() { | 
				
			||||||
 | 
					        return titles; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setTitles(String[] titles) { | 
				
			||||||
 | 
					        this.titles = titles; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String[] getTimes() { | 
				
			||||||
 | 
					        return times; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setTimes(String[] times) { | 
				
			||||||
 | 
					        this.times = times; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String[] getLineTimes() { | 
				
			||||||
 | 
					        return lineTimes; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setLineTimes(String[] lineTimes) { | 
				
			||||||
 | 
					        this.lineTimes = lineTimes; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<Map<String, Object>> getData() { | 
				
			||||||
 | 
					        return data; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setData(List<Map<String, Object>> data) { | 
				
			||||||
 | 
					        this.data = data; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String toString() { | 
				
			||||||
 | 
					        return "EnergyConsumptionDTO{" + | 
				
			||||||
 | 
					                "titles=" + Arrays.toString(titles) + | 
				
			||||||
 | 
					                ", times=" + Arrays.toString(times) + | 
				
			||||||
 | 
					                ", data=" + data + | 
				
			||||||
 | 
					                '}'; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,55 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.entity; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Data; | 
				
			||||||
 | 
					import org.springframework.format.annotation.DateTimeFormat; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serializable; | 
				
			||||||
 | 
					import java.util.Date; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @title : | 
				
			||||||
 | 
					 * @description :冷水机组设备实体类 | 
				
			||||||
 | 
					 * @updateTime 2020-05-20 | 
				
			||||||
 | 
					 * @throws : | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					public class ChillersEntity implements Serializable { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static final long serialVersionUID = 42L; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Long id; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date createTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date updateTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private int register_id; | 
				
			||||||
 | 
					    private String deviceCode;              // 设备代码
 | 
				
			||||||
 | 
					    private String deviceNum;               // 设备码
 | 
				
			||||||
 | 
					    private String collectionNum;           // 冷水机组采集地址
 | 
				
			||||||
 | 
					    private String registerAddress;         // 寄存器地址
 | 
				
			||||||
 | 
					    private String registerName;            // 寄存器名称
 | 
				
			||||||
 | 
					    private String funCode;                 // 功能码
 | 
				
			||||||
 | 
					    private int digit;                      // 保留位数
 | 
				
			||||||
 | 
					    private String otherName;               // 别名
 | 
				
			||||||
 | 
					    private int grade;                      // 标志 1:冷水机组设备 2:ddc设备采集参数 3:控制指令类型 4:故障类型
 | 
				
			||||||
 | 
					    private String lastValue;               // 最新采集数据
 | 
				
			||||||
 | 
					//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
				
			||||||
 | 
					    private String lastTime;                  // 最新采集时间
 | 
				
			||||||
 | 
					//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
				
			||||||
 | 
					//    private Date localTime;                 // 本地采集时间
 | 
				
			||||||
 | 
					    private String dataCom;                 // 采集端口号
 | 
				
			||||||
 | 
					    private String ddcAddr;                 // DDC地址
 | 
				
			||||||
 | 
					    private String deviceType; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // update by ljf on 2020-05-26 添加网络管理器的IP和采集的端口号
 | 
				
			||||||
 | 
					    private String IP;                      // IP地址
 | 
				
			||||||
 | 
					    private int port;                       // 端口号
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Integer paramType;              // 参数类型
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,106 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.entity; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serializable; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 能耗分析 | 
				
			||||||
 | 
					 * @date 2023/7/18 17:16:51 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class ConsumptionAnalyzeEntity implements Serializable { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final long serialVersionUID = 10L; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 当前值 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String curValue; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 上一个值 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String lastValue; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 设备对象 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String deviceType; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 时间 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String timeStr; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 同比 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String yoy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 环比 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private String mom; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getCurValue() { | 
				
			||||||
 | 
					        return curValue; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setCurValue(String curValue) { | 
				
			||||||
 | 
					        this.curValue = curValue; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getLastValue() { | 
				
			||||||
 | 
					        return lastValue; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setLastValue(String lastValue) { | 
				
			||||||
 | 
					        this.lastValue = lastValue; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getDeviceType() { | 
				
			||||||
 | 
					        return deviceType; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setDeviceType(String deviceType) { | 
				
			||||||
 | 
					        this.deviceType = deviceType; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getTimeStr() { | 
				
			||||||
 | 
					        return timeStr; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setTimeStr(String timeStr) { | 
				
			||||||
 | 
					        this.timeStr = timeStr; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getYoy() { | 
				
			||||||
 | 
					        return yoy; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setYoy(String yoy) { | 
				
			||||||
 | 
					        this.yoy = yoy; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getMom() { | 
				
			||||||
 | 
					        return mom; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setMom(String mom) { | 
				
			||||||
 | 
					        this.mom = mom; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String toString() { | 
				
			||||||
 | 
					        return "ConsumptionAnalyzeEntity{" + | 
				
			||||||
 | 
					                "curValue='" + curValue + '\'' + | 
				
			||||||
 | 
					                ", lastValue='" + lastValue + '\'' + | 
				
			||||||
 | 
					                ", deviceType='" + deviceType + '\'' + | 
				
			||||||
 | 
					                ", timeStr='" + timeStr + '\'' + | 
				
			||||||
 | 
					                ", yoy='" + yoy + '\'' + | 
				
			||||||
 | 
					                ", mom='" + mom + '\'' + | 
				
			||||||
 | 
					                '}'; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,43 @@ | 
				
			|||||||
 | 
					package com.mh.common.core.domain.entity; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Data; | 
				
			||||||
 | 
					import org.springframework.format.annotation.DateTimeFormat; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serializable; | 
				
			||||||
 | 
					import java.time.LocalDateTime; | 
				
			||||||
 | 
					import java.util.Date; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author : Rainbow | 
				
			||||||
 | 
					 * @date : 2023/6/16 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					public class DeviceReportEntity implements Serializable { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static final long serialVersionUID = 42L; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Long id; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date createTime; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date updateTime; | 
				
			||||||
 | 
					    private String deviceNum; | 
				
			||||||
 | 
					    private String deviceCode; | 
				
			||||||
 | 
					    private String deviceType; | 
				
			||||||
 | 
					    private String lastValue; | 
				
			||||||
 | 
					    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date lastTime; | 
				
			||||||
 | 
					    private String curValue; | 
				
			||||||
 | 
					    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | 
				
			||||||
 | 
					    private Date curTime; | 
				
			||||||
 | 
					    private LocalDateTime localDateTime; | 
				
			||||||
 | 
					    private String usedValue; | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 倍率 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private int ratio; | 
				
			||||||
 | 
					    private String calcValue; | 
				
			||||||
 | 
					    private int grade; | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,48 @@ | 
				
			|||||||
 | 
					package com.mh.common.utils; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.concurrent.LinkedBlockingQueue; | 
				
			||||||
 | 
					import java.util.concurrent.ThreadPoolExecutor; | 
				
			||||||
 | 
					import java.util.concurrent.TimeUnit; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @title : 单例的线程池 | 
				
			||||||
 | 
					 * @description 使用静态内部类进行创建,专门解析接收到的报文数据 | 
				
			||||||
 | 
					 * @updateTime 2020-12-09 | 
				
			||||||
 | 
					 * @throws : | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class EnergyThreadPoolService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 线程池保持ALIVE状态线程数 */ | 
				
			||||||
 | 
					  public static final int                 CORE_POOL_SIZE      = 10; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 线程池最大线程数 */ | 
				
			||||||
 | 
					  public static final int                 MAX_POOL_SIZE       = 50; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 空闲线程回收时间 */ | 
				
			||||||
 | 
					  public static final int                 KEEP_ALIVE_TIME     = 30000; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 线程池等待队列 */ | 
				
			||||||
 | 
					  public static final int                 BLOCKING_QUEUE_SIZE = 1000; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 私有化构造器
 | 
				
			||||||
 | 
					  private EnergyThreadPoolService(){} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 对外访问的公共方法
 | 
				
			||||||
 | 
					  public static ThreadPoolExecutor getInstance() { | 
				
			||||||
 | 
					    return ThreadPoolServiceHolder.instance; | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //写一个静态内部类,里面实例化外部类
 | 
				
			||||||
 | 
					  private static class ThreadPoolServiceHolder { | 
				
			||||||
 | 
					    private static final ThreadPoolExecutor instance = new ThreadPoolExecutor( | 
				
			||||||
 | 
					      CORE_POOL_SIZE,         // 线程池保持存活的线程数
 | 
				
			||||||
 | 
					      MAX_POOL_SIZE,          // 最大线程数
 | 
				
			||||||
 | 
					      KEEP_ALIVE_TIME,        // 空闲线程回收时间
 | 
				
			||||||
 | 
					      TimeUnit.MICROSECONDS,  // 单位
 | 
				
			||||||
 | 
					      new LinkedBlockingQueue<>(BLOCKING_QUEUE_SIZE),             // 线程队列
 | 
				
			||||||
 | 
					      new ThreadPoolExecutor.AbortPolicy()                        // 线程池对拒绝任务的处理策略
 | 
				
			||||||
 | 
					    ); | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,109 @@ | 
				
			|||||||
 | 
					package com.mh.framework.dealdata; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ChillersEntity; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.DeviceReportEntity; | 
				
			||||||
 | 
					import com.mh.common.model.request.AdvantechReceiver; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 数据解析,处理,入库操作 | 
				
			||||||
 | 
					 * @Author : Rainbow | 
				
			||||||
 | 
					 * @date : 2023/5/26 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface DataProcessService { | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 主机数据解析入库 | 
				
			||||||
 | 
					     * @param data 未解析数据 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void insertChillerData(AdvantechReceiver data); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 其他数据解析入库 | 
				
			||||||
 | 
					     * @param data 未解析数据 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void insertOtherData(AdvantechReceiver data); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 电表等其他设备数据入库 | 
				
			||||||
 | 
					     * @param data | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void insertDeviceData(AdvantechReceiver data); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询初始值 | 
				
			||||||
 | 
					     * @param deviceNum | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    String queryInitValue(String deviceNum); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询上一次采集数据、时间等参数 | 
				
			||||||
 | 
					     * @param deviceNum | 
				
			||||||
 | 
					     * @param type min hour day month year | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    DeviceReportEntity queryLastValue(String deviceNum,String type); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 批量插入data_min表中 | 
				
			||||||
 | 
					     * @param dataMinList | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void insertDatabase(List<DeviceReportEntity> dataMinList); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询data_ + type + year 表中未处理的数据 | 
				
			||||||
 | 
					     * @param type min hour day month year | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    Map<String, Object> queryUntreatedData(String type); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 批量插入报表中 | 
				
			||||||
 | 
					     * @param hourList 报表数据 | 
				
			||||||
 | 
					     * @param type 报表类型 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void batchInsertTable(List<DeviceReportEntity> hourList, String type); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 根据Id批量修改grade = 1 | 
				
			||||||
 | 
					     * 需要根据IdMap来判断修改哪个表的id | 
				
			||||||
 | 
					     * @param idMap 主键ID集合 | 
				
			||||||
 | 
					     * @param type 报表类型 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void batchUpdateGrade(Map<String, List<Long>> idMap, String type); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 批量插入或者更新 | 
				
			||||||
 | 
					     * @param dataList 数据集 | 
				
			||||||
 | 
					     * @param tableType | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void batchInsertOrUpdate(List<DeviceReportEntity> dataList, String tableType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询倍率 | 
				
			||||||
 | 
					     * @param deviceNum | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    Integer queryRatio(String deviceNum); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 插入主机历史流水表 | 
				
			||||||
 | 
					     * @param cacheList | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void insertChillerReport(List<ChillersEntity> cacheList); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 批量更新运行时长 | 
				
			||||||
 | 
					     * @param runTimeList | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void batchUpdateRunTime(List<Map<String, String>> runTimeList); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 计算COP | 
				
			||||||
 | 
					     * @param time | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    void calculateCopByTime(String time); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,206 @@ | 
				
			|||||||
 | 
					package com.mh.framework.dealdata.impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.fastjson2.JSON; | 
				
			||||||
 | 
					import com.alibaba.fastjson2.TypeReference; | 
				
			||||||
 | 
					import com.mh.common.constant.Constants; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ChillersEntity; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.CollectionParamsManage; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.DeviceReportEntity; | 
				
			||||||
 | 
					import com.mh.common.core.redis.RedisCache; | 
				
			||||||
 | 
					import com.mh.common.model.request.AdvantechDatas; | 
				
			||||||
 | 
					import com.mh.common.model.request.AdvantechReceiver; | 
				
			||||||
 | 
					import com.mh.common.utils.DateUtils; | 
				
			||||||
 | 
					import com.mh.common.utils.EnergyThreadPoolService; | 
				
			||||||
 | 
					import com.mh.common.utils.StringUtils; | 
				
			||||||
 | 
					import com.mh.framework.dealdata.DataProcessService; | 
				
			||||||
 | 
					import com.mh.system.mapper.device.DatabaseMapper; | 
				
			||||||
 | 
					import com.mh.system.service.device.ICollectionParamsManageService; | 
				
			||||||
 | 
					import jakarta.annotation.Resource; | 
				
			||||||
 | 
					import lombok.Synchronized; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.math.BigDecimal; | 
				
			||||||
 | 
					import java.math.RoundingMode; | 
				
			||||||
 | 
					import java.time.LocalDateTime; | 
				
			||||||
 | 
					import java.time.LocalTime; | 
				
			||||||
 | 
					import java.time.OffsetDateTime; | 
				
			||||||
 | 
					import java.time.ZoneId; | 
				
			||||||
 | 
					import java.time.format.DateTimeFormatter; | 
				
			||||||
 | 
					import java.time.format.DateTimeParseException; | 
				
			||||||
 | 
					import java.util.*; | 
				
			||||||
 | 
					import java.util.concurrent.ThreadPoolExecutor; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 数据解析处理入库操作 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @Author : Rainbow | 
				
			||||||
 | 
					 * @date : 2023/5/26 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					public class DataProcessServiceImpl implements DataProcessService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 主机 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private static final String CHILLERS = "CHILLERS"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 计量设备 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private static final String DEVICES = "DEVICES"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired | 
				
			||||||
 | 
					    DatabaseMapper databaseMapper; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired | 
				
			||||||
 | 
					    RedisCache redisCache; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired | 
				
			||||||
 | 
					    private ICollectionParamsManageService collectionParamsManageService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ThreadPoolExecutor threadPoolService = EnergyThreadPoolService.getInstance(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void insertChillerData(AdvantechReceiver data) { | 
				
			||||||
 | 
					        insertData(data, "CHILLERS_REGISTER", CHILLERS); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void insertDeviceData(AdvantechReceiver data) { | 
				
			||||||
 | 
					        insertData(data, "DEVICES_REGISTER", DEVICES); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void insertData(AdvantechReceiver data, String registerKey, String cacheKey) { | 
				
			||||||
 | 
					        log.info("{}数据解析入库:{}", registerKey.equals("CHILLERS_REGISTER") ? "冷水机组" : "计量设备", data); | 
				
			||||||
 | 
					        if (registerKey.equals("CHILLERS_REGISTER")) { | 
				
			||||||
 | 
					            databaseMapper.createChillerTable(); | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            databaseMapper.createDataTable(); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        ArrayList<CollectionParamsManage> entities = new ArrayList<>(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        List<CollectionParamsManage> registers = redisCache.getCacheList(registerKey, CollectionParamsManage.class); | 
				
			||||||
 | 
					        if (null == registers || registers.isEmpty()) { | 
				
			||||||
 | 
					            if (registerKey.equals("CHILLERS_REGISTER")) { | 
				
			||||||
 | 
					                registers = collectionParamsManageService.queryCollectionParamsByMtType(Constants.CHILLERS_TYPE); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                registers = collectionParamsManageService.queryCollectionParamsByMtType(Constants.OTHER_TYPE); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            redisCache.setCacheList(registerKey, registers); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String timeString = data.getTs(); | 
				
			||||||
 | 
					        OffsetDateTime offsetDateTime; | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            offsetDateTime = OffsetDateTime.parse(timeString, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")); | 
				
			||||||
 | 
					        } catch (DateTimeParseException e) { | 
				
			||||||
 | 
					            log.error("时间格式解析异常", e); | 
				
			||||||
 | 
					            return; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        LocalDateTime localDateTime = offsetDateTime.toLocalDateTime(); | 
				
			||||||
 | 
					        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | 
				
			||||||
 | 
					        String formattedTime = localDateTime.format(formatter); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 假设 data 是一个包含 JSON 数据的对象
 | 
				
			||||||
 | 
					        List<AdvantechDatas> list = JSON.parseObject(data.getD().toString(), new TypeReference<List<AdvantechDatas>>() {}); | 
				
			||||||
 | 
					        for (AdvantechDatas advantechDatas : list) { | 
				
			||||||
 | 
					            String tag = advantechDatas.getTag(); | 
				
			||||||
 | 
					            String value = advantechDatas.getValue(); | 
				
			||||||
 | 
					            log.info("时间: {},tag标签: {},value值: {}", formattedTime, tag, value); | 
				
			||||||
 | 
					            try { | 
				
			||||||
 | 
					                if (StringUtils.isBlank(tag)) { | 
				
			||||||
 | 
					                    continue; | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                CollectionParamsManage collectionParamsManage = new CollectionParamsManage(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (CollectionParamsManage entity : registers) { | 
				
			||||||
 | 
					                    if (tag.equals(String.valueOf(entity.getOtherName()))) { | 
				
			||||||
 | 
					                        collectionParamsManage = entity; | 
				
			||||||
 | 
					                        try { | 
				
			||||||
 | 
					                            collectionParamsManage.setCurValue(new BigDecimal(value)); | 
				
			||||||
 | 
					                        } catch (NumberFormatException e) { | 
				
			||||||
 | 
					                            log.error("数值格式解析异常", e); | 
				
			||||||
 | 
					                            continue; | 
				
			||||||
 | 
					                        } | 
				
			||||||
 | 
					                        Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); | 
				
			||||||
 | 
					                        collectionParamsManage.setCurTime(date); | 
				
			||||||
 | 
					                        break; | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                entities.add(collectionParamsManage); | 
				
			||||||
 | 
					            } catch (Exception e) { | 
				
			||||||
 | 
					                log.error("解析异常", e); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        redisCache.setCacheList(cacheKey, entities); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        threadPoolService.execute(() -> { | 
				
			||||||
 | 
					            collectionParamsManageService.updateCollectionParamsManages(entities); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void insertOtherData(AdvantechReceiver data) { | 
				
			||||||
 | 
					        log.info("其他设备数据解析入库:{}", data); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String queryInitValue(String deviceNum) { | 
				
			||||||
 | 
					        return ""; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public DeviceReportEntity queryLastValue(String deviceNum, String type) { | 
				
			||||||
 | 
					        return null; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void insertDatabase(List<DeviceReportEntity> dataMinList) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public Map<String, Object> queryUntreatedData(String type) { | 
				
			||||||
 | 
					        return Map.of(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void batchInsertTable(List<DeviceReportEntity> hourList, String type) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void batchUpdateGrade(Map<String, List<Long>> idMap, String type) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void batchInsertOrUpdate(List<DeviceReportEntity> dataList, String tableType) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public Integer queryRatio(String deviceNum) { | 
				
			||||||
 | 
					        return 0; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void insertChillerReport(List<ChillersEntity> cacheList) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void batchUpdateRunTime(List<Map<String, String>> runTimeList) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void calculateCopByTime(String time) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,54 @@ | 
				
			|||||||
 | 
					package com.mh.framework.mqtt.service.impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.framework.mqtt.service.IMqttGatewayService; | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Qualifier; | 
				
			||||||
 | 
					import org.springframework.integration.mqtt.support.MqttHeaders; | 
				
			||||||
 | 
					import org.springframework.integration.support.MessageBuilder; | 
				
			||||||
 | 
					import org.springframework.messaging.MessageChannel; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project EEMCS | 
				
			||||||
 | 
					 * @description 网关实现类 | 
				
			||||||
 | 
					 * @date 2025-02-07 08:44:55 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					public class MqttGatewayServiceImpl implements IMqttGatewayService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final MessageChannel outboundChannel; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public MqttGatewayServiceImpl(@Qualifier("outbound") MessageChannel outboundChannel) { | 
				
			||||||
 | 
					        this.outboundChannel = outboundChannel; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void publish(String topic, String payload, int qos) { | 
				
			||||||
 | 
					        outboundChannel.send( | 
				
			||||||
 | 
					                MessageBuilder | 
				
			||||||
 | 
					                        .withPayload(payload) | 
				
			||||||
 | 
					                        .setHeader(MqttHeaders.TOPIC, topic) | 
				
			||||||
 | 
					                        .setPriority(qos) | 
				
			||||||
 | 
					                        .build()); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void publish(String topic, byte[] payload) { | 
				
			||||||
 | 
					        outboundChannel.send( | 
				
			||||||
 | 
					                MessageBuilder | 
				
			||||||
 | 
					                        .withPayload(payload) | 
				
			||||||
 | 
					                        .setHeader(MqttHeaders.TOPIC, topic) | 
				
			||||||
 | 
					                        .build()); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void publish(String topic, byte[] payload, int qos) { | 
				
			||||||
 | 
					        outboundChannel.send( | 
				
			||||||
 | 
					                MessageBuilder | 
				
			||||||
 | 
					                        .withPayload(payload) | 
				
			||||||
 | 
					                        .setHeader(MqttHeaders.TOPIC, topic) | 
				
			||||||
 | 
					                        .setPriority(qos) | 
				
			||||||
 | 
					                        .build()); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,104 @@ | 
				
			|||||||
 | 
					package com.mh.framework.rabbitmq; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.amqp.core.*; | 
				
			||||||
 | 
					import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; | 
				
			||||||
 | 
					import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Qualifier; | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | 
				
			||||||
 | 
					import org.springframework.context.annotation.Bean; | 
				
			||||||
 | 
					import org.springframework.context.annotation.Configuration; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author : Rainbow | 
				
			||||||
 | 
					 * @date : 2023/5/26 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Configuration | 
				
			||||||
 | 
					public class RabbitMqConfig { | 
				
			||||||
 | 
					    /**交换机*/ | 
				
			||||||
 | 
					    public static final String EXCHANGE_NAME = "exchange_eemcs"; | 
				
			||||||
 | 
					    /**主机队列*/ | 
				
			||||||
 | 
					    public static final String QUEUE_CHILLER = "queue_chiller"; | 
				
			||||||
 | 
					    /**主机routing-key*/ | 
				
			||||||
 | 
					    public static final String ROUTING_KEY_CHILLER = "topic.chillers.eemcs.#"; | 
				
			||||||
 | 
					    /**电表、冷量计等设备队列*/ | 
				
			||||||
 | 
					    public static final String QUEUE_DEVICES = "queue_devices"; | 
				
			||||||
 | 
					    /**电表冷量计routing-key*/ | 
				
			||||||
 | 
					    public static final String ROUTING_KEY_DEVICES = "topic.devices.eemcs.#"; | 
				
			||||||
 | 
					    /**其他设备队列*/ | 
				
			||||||
 | 
					    public static final String QUEUE_OTHER = "queue_other"; | 
				
			||||||
 | 
					    /**DDC routing-key*/ | 
				
			||||||
 | 
					    public static final String ROUTING_KEY_OTHER = "topic.other.eemcs.#"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**durable参数表示交换机是否持久化,值为true表示持久化,值为false表示不持久化。 | 
				
			||||||
 | 
					     * 在RabbitMQ中,持久化交换机会被存储在磁盘上以便在服务器重启后恢复, | 
				
			||||||
 | 
					     * 而非持久化交换机则只存在于内存中,服务器重启后会丢失*/ | 
				
			||||||
 | 
					    /**声明交换机*/ | 
				
			||||||
 | 
					    @Bean(EXCHANGE_NAME) | 
				
			||||||
 | 
					    public Exchange exchange(){ | 
				
			||||||
 | 
					        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**主机队列*/ | 
				
			||||||
 | 
					    @Bean(QUEUE_CHILLER) | 
				
			||||||
 | 
					    public Queue chillerQueue(){ | 
				
			||||||
 | 
					        return new Queue(QUEUE_CHILLER); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**主机队列绑定交换机*/ | 
				
			||||||
 | 
					    @Bean(ROUTING_KEY_CHILLER) | 
				
			||||||
 | 
					    public Binding chillerBinding(@Qualifier(QUEUE_CHILLER) Queue queue, | 
				
			||||||
 | 
					                                  @Qualifier(EXCHANGE_NAME) Exchange exchange){ | 
				
			||||||
 | 
					        return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY_CHILLER).noargs(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**计量设备队列*/ | 
				
			||||||
 | 
					    @Bean(QUEUE_DEVICES) | 
				
			||||||
 | 
					    public Queue devicesQueue(){ | 
				
			||||||
 | 
					        return new Queue(QUEUE_DEVICES); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**计量设备绑定交换机*/ | 
				
			||||||
 | 
					    @Bean(ROUTING_KEY_DEVICES) | 
				
			||||||
 | 
					    public Binding deviceBinding(@Qualifier(QUEUE_DEVICES) Queue queue, | 
				
			||||||
 | 
					                                 @Qualifier(EXCHANGE_NAME) Exchange exchange){ | 
				
			||||||
 | 
					        return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY_DEVICES).noargs(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**其他设备队列*/ | 
				
			||||||
 | 
					    @Bean(QUEUE_OTHER) | 
				
			||||||
 | 
					    public Queue otherQueue(){ | 
				
			||||||
 | 
					        return new Queue(QUEUE_OTHER); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**其他队列绑定交换机*/ | 
				
			||||||
 | 
					    @Bean(ROUTING_KEY_OTHER) | 
				
			||||||
 | 
					    public Binding otherBinding(@Qualifier(QUEUE_OTHER) Queue queue, | 
				
			||||||
 | 
					                                  @Qualifier(EXCHANGE_NAME) Exchange exchange){ | 
				
			||||||
 | 
					        return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY_OTHER).noargs(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 默认消费者数量1 | 
				
			||||||
 | 
					     * setConcurrentConsumers(10); | 
				
			||||||
 | 
					     * 最大消费者数量,默认1 | 
				
			||||||
 | 
					     * maxConcurrentConsumers | 
				
			||||||
 | 
					     * prefetchCount 每个消费者可以拉取的消息,默认250 | 
				
			||||||
 | 
					     * defaultRequeueRejected 未处理消息是否回归队列,true不重新加入,直接丢弃。false重新加入,默认false | 
				
			||||||
 | 
					     * acknowledgeMode 确认模式 默认为自动确认 | 
				
			||||||
 | 
					     * @param connectionFactory | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Bean | 
				
			||||||
 | 
					    @ConditionalOnClass | 
				
			||||||
 | 
					    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(CachingConnectionFactory connectionFactory) { | 
				
			||||||
 | 
					        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); | 
				
			||||||
 | 
					        factory.setConnectionFactory(connectionFactory); | 
				
			||||||
 | 
					        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL); | 
				
			||||||
 | 
					        factory.setPrefetchCount(5); | 
				
			||||||
 | 
					        factory.setConcurrentConsumers(5); | 
				
			||||||
 | 
					        factory.setMaxConcurrentConsumers(10); | 
				
			||||||
 | 
					        factory.setDefaultRequeueRejected(true); | 
				
			||||||
 | 
					        return factory; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,136 @@ | 
				
			|||||||
 | 
					package com.mh.framework.rabbitmq.consumer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.fastjson2.JSON; | 
				
			||||||
 | 
					import com.alibaba.fastjson2.JSONObject; | 
				
			||||||
 | 
					import com.mh.common.model.request.AdvantechReceiver; | 
				
			||||||
 | 
					import com.mh.framework.dealdata.DataProcessService; | 
				
			||||||
 | 
					import com.mh.framework.rabbitmq.RabbitMqConfig; | 
				
			||||||
 | 
					import com.rabbitmq.client.Channel; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.apache.poi.ss.formula.functions.T; | 
				
			||||||
 | 
					import org.springframework.amqp.core.ExchangeTypes; | 
				
			||||||
 | 
					import org.springframework.amqp.rabbit.annotation.Exchange; | 
				
			||||||
 | 
					import org.springframework.amqp.rabbit.annotation.Queue; | 
				
			||||||
 | 
					import org.springframework.amqp.rabbit.annotation.QueueBinding; | 
				
			||||||
 | 
					import org.springframework.amqp.rabbit.annotation.RabbitListener; | 
				
			||||||
 | 
					import org.springframework.amqp.support.AmqpHeaders; | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||||
 | 
					import org.springframework.messaging.handler.annotation.Header; | 
				
			||||||
 | 
					import org.springframework.messaging.handler.annotation.Payload; | 
				
			||||||
 | 
					import org.springframework.stereotype.Component; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author : ljf | 
				
			||||||
 | 
					 * @date : 2025-02-07 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Component | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					public class ReceiveHandler { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired | 
				
			||||||
 | 
					    DataProcessService dataProcessService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 监听主机参数 | 
				
			||||||
 | 
					     * queues:指定监听的队列名,可以接收单个队列,也可以接收多个队列的数组或列表。 | 
				
			||||||
 | 
					     * containerFactory:指定使用的监听器容器工厂,通常为SimpleRabbitListenerContainerFactory或其子类的实例,也可以使用自定义的工厂类。 | 
				
			||||||
 | 
					     * concurrency:并发处理消息的数量,即开启几个线程来处理消息,默认为1个线程。 与配置SimpleRabbitListenerContainerFactory的setConcurrentConsumers一致 | 
				
			||||||
 | 
					     * priority:消息的消费者优先级,默认为0,可以在MQ的 x-max-priority 参数打开的情况下使用,来指定消息的优先级。 | 
				
			||||||
 | 
					     * exclusive:是否为独占消费,即限制该队列只能由一个消费者进行消费,设置为true时表示是独占消费,默认为false。 | 
				
			||||||
 | 
					     * bindings:指定队列的绑定关系,即交换机和路由键,可以传入多个Binding对象,也可以使用@QueueBinding注解并传入多个@QueueBinding注解实例。 | 
				
			||||||
 | 
					     * id:指定这个监听器容器的唯一标识,必须显式地设置它以启用有状态的 RabbitListenerContainerFactory 实现,以进行更高效的重启尝试,默认为空。 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @RabbitListener(bindings = @QueueBinding( | 
				
			||||||
 | 
					            value = @Queue(value = RabbitMqConfig.QUEUE_CHILLER, durable = "true"), | 
				
			||||||
 | 
					            exchange = @Exchange( | 
				
			||||||
 | 
					                    value = RabbitMqConfig.EXCHANGE_NAME, | 
				
			||||||
 | 
					                    ignoreDeclarationExceptions = "true", | 
				
			||||||
 | 
					                    type = ExchangeTypes.TOPIC | 
				
			||||||
 | 
					            ), | 
				
			||||||
 | 
					            key = {RabbitMqConfig.ROUTING_KEY_CHILLER})) | 
				
			||||||
 | 
					    public void receiveChillerData(@Payload String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException, InterruptedException { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            //TODO 开启多线程处理主机数据,如果不通过线程池开启线程来处理,
 | 
				
			||||||
 | 
					            // 设置SimpleRabbitListenerContainerFactory中的setConcurrentConsumers(10)数量也可以实现多线程处理
 | 
				
			||||||
 | 
					            log.info("MQ消费者:主机数据采集:{}", msg); | 
				
			||||||
 | 
					            //TODO 数据解析入库操作 msg转成实体类,入库
 | 
				
			||||||
 | 
					            AdvantechReceiver chillerData = JSONObject.parseObject(msg, AdvantechReceiver.class); | 
				
			||||||
 | 
					            dataProcessService.insertChillerData(chillerData); | 
				
			||||||
 | 
					            channel.basicAck(tag, false); | 
				
			||||||
 | 
					        } catch (Exception e) { | 
				
			||||||
 | 
					            //false不进入队列,丢弃,true则回到队列
 | 
				
			||||||
 | 
					            log.error("data:{},chillersException:{}", msg, e); | 
				
			||||||
 | 
					            Thread.sleep(100); | 
				
			||||||
 | 
					            channel.basicReject(tag, false); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 处理电表冷量计等数据 | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @param msg | 
				
			||||||
 | 
					     * @param channel | 
				
			||||||
 | 
					     * @param tag | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @RabbitListener(bindings = @QueueBinding( | 
				
			||||||
 | 
					            value = @Queue(value = RabbitMqConfig.QUEUE_DEVICES, durable = "true"), | 
				
			||||||
 | 
					            exchange = @Exchange( | 
				
			||||||
 | 
					                    value = RabbitMqConfig.EXCHANGE_NAME, | 
				
			||||||
 | 
					                    ignoreDeclarationExceptions = "true", | 
				
			||||||
 | 
					                    type = ExchangeTypes.TOPIC | 
				
			||||||
 | 
					            ), | 
				
			||||||
 | 
					            key = {RabbitMqConfig.ROUTING_KEY_DEVICES} | 
				
			||||||
 | 
					    )) | 
				
			||||||
 | 
					    public void receiveDeviceData(@Payload String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws InterruptedException, IOException { | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            //TODO 处理电表等数据
 | 
				
			||||||
 | 
					            log.info("MQ消费者:计量设备数据采集:{}", msg); | 
				
			||||||
 | 
					            //TODO 数据解析入库操作 msg转成实体类,入库
 | 
				
			||||||
 | 
					            AdvantechReceiver deviceData = JSONObject.parseObject(msg, AdvantechReceiver.class); | 
				
			||||||
 | 
					            dataProcessService.insertDeviceData(deviceData); | 
				
			||||||
 | 
					            // 正常执行,手动确认ack
 | 
				
			||||||
 | 
					            channel.basicAck(tag, false); | 
				
			||||||
 | 
					        } catch (Exception e) { | 
				
			||||||
 | 
					            log.error("data:{},deviceException:{}", msg, e); | 
				
			||||||
 | 
					            Thread.sleep(100); | 
				
			||||||
 | 
					            channel.basicAck(tag, false); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 处理其他设备数据 | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @param msg | 
				
			||||||
 | 
					     * @param channel | 
				
			||||||
 | 
					     * @param tag | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @RabbitListener(bindings = @QueueBinding( | 
				
			||||||
 | 
					            value = @Queue(value = RabbitMqConfig.QUEUE_OTHER, durable = "true"), | 
				
			||||||
 | 
					            exchange = @Exchange( | 
				
			||||||
 | 
					                    value = RabbitMqConfig.EXCHANGE_NAME, | 
				
			||||||
 | 
					                    ignoreDeclarationExceptions = "true", | 
				
			||||||
 | 
					                    type = ExchangeTypes.TOPIC | 
				
			||||||
 | 
					            ), | 
				
			||||||
 | 
					            key = {RabbitMqConfig.ROUTING_KEY_OTHER} | 
				
			||||||
 | 
					    )) | 
				
			||||||
 | 
					    public void receiveOtherData(@Payload String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws InterruptedException, IOException { | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            log.info("MQ消费者:其他设备采集:{}", msg); | 
				
			||||||
 | 
					            //TODO 数据解析入库操作 msg转成实体类,入库
 | 
				
			||||||
 | 
					            AdvantechReceiver OtherData = JSONObject.parseObject(msg, AdvantechReceiver.class); | 
				
			||||||
 | 
					            dataProcessService.insertOtherData(OtherData); | 
				
			||||||
 | 
					            // 正常执行,手动确认ack
 | 
				
			||||||
 | 
					            channel.basicAck(tag, false); | 
				
			||||||
 | 
					        } catch (Exception e) { | 
				
			||||||
 | 
					            log.error("data:{},ddcException:{}", msg, e); | 
				
			||||||
 | 
					            Thread.sleep(100); | 
				
			||||||
 | 
					            channel.basicAck(tag, false); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,37 @@ | 
				
			|||||||
 | 
					package com.mh.framework.rabbitmq.producer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.model.request.AdvantechReceiver; | 
				
			||||||
 | 
					import com.mh.framework.rabbitmq.RabbitMqConfig; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.amqp.rabbit.core.RabbitTemplate; | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired; | 
				
			||||||
 | 
					import org.springframework.stereotype.Component; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author : ljf | 
				
			||||||
 | 
					 * @date : 2025-02-07 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Component | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					public class SendMsgByTopic { | 
				
			||||||
 | 
					    @Autowired | 
				
			||||||
 | 
					    RabbitTemplate rabbitTemplate; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**主机数据报文注入rabbitmq*/ | 
				
			||||||
 | 
					    public String sendToChillerMQ(String data){ | 
				
			||||||
 | 
					        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME,"topic.chillers.eemcs.data",data); | 
				
			||||||
 | 
					        return "success"; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**电表等数据注入rabbitmq*/ | 
				
			||||||
 | 
					    public String sendToDeviceMQ(String data){ | 
				
			||||||
 | 
					        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME,"topic.devices.eemcs.data",data); | 
				
			||||||
 | 
					        return "success"; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**ddc等数据注入rabbitmq*/ | 
				
			||||||
 | 
					    public String sendToOtherMQ(String data) { | 
				
			||||||
 | 
					        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME,"topic.other.eemcs.data",data); | 
				
			||||||
 | 
					        return "success"; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,29 @@ | 
				
			|||||||
 | 
					package com.mh.system.mapper.device; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Mapper; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Options; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Select; | 
				
			||||||
 | 
					import org.apache.ibatis.mapping.StatementType; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * 数据库操作相关API | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @Author : Rainbow | 
				
			||||||
 | 
					 * @date : 2023/6/14 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Mapper | 
				
			||||||
 | 
					public interface DatabaseMapper { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询是否存在设备日月年表,不存在则创建表 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Select("call public.pro_create_table();") | 
				
			||||||
 | 
					    void createDataTable(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 判断是否存在主机日月年表,不存在则创建表 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Select("call public.pro_create_chillers_table();") | 
				
			||||||
 | 
					    void createChillerTable(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,292 @@ | 
				
			|||||||
 | 
					package com.mh.system.mapper.energy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Mapper; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Param; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Select; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 系统能耗分析 | 
				
			||||||
 | 
					 * @date 2023/7/18 16:54:37 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Mapper | 
				
			||||||
 | 
					public interface EnergyMapper { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 跨表查询操作 | 
				
			||||||
 | 
					     * @param startTime 开始时间 | 
				
			||||||
 | 
					     * @param endTime 结束时间 | 
				
			||||||
 | 
					     * @param lastTableName 上一个表名 | 
				
			||||||
 | 
					     * @param curTableName 当前表名 | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Select("<script>" + | 
				
			||||||
 | 
					            "select sum(calc_value) as curValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr from ${lastTableName} dt " + | 
				
			||||||
 | 
					            " where cur_time >= concat(#{startTime},' 00:00:00') and cur_time  <= concat(#{endTime},' 23:59:59') " + | 
				
			||||||
 | 
					            "<if test='paramType != null and paramType != \"\"'>" + | 
				
			||||||
 | 
					            "   and device_type = #{paramType}" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dt.device_num and grade < 50 and grade >=40 " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            " group by device_type,convert(varchar(${len}), cur_time, 120) " + | 
				
			||||||
 | 
					            "union all " + | 
				
			||||||
 | 
					            "select sum(calc_value) as curValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr from ${curTableName} dy " + | 
				
			||||||
 | 
					            " where cur_time >= concat(#{startTime},' 00:00:00') and cur_time  <= concat(#{endTime},' 23:59:59') " + | 
				
			||||||
 | 
					            "<if test='paramType != null and paramType != \"\"'>" + | 
				
			||||||
 | 
					            "   and device_type = #{paramType}" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            " group by device_type,convert(varchar(${len}), cur_time, 120)" + | 
				
			||||||
 | 
					            "</script>") | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryManyTable(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                  @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                  @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                  @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                  @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                  @Param("paramType") String paramType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 单表查询操作 | 
				
			||||||
 | 
					     * @param startTime 开始时间 | 
				
			||||||
 | 
					     * @param endTime 结束时间 | 
				
			||||||
 | 
					     * @param lastTableName 上一个表名 | 
				
			||||||
 | 
					     * @param curTableName 当前表名 | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Select("<script>" + | 
				
			||||||
 | 
					            "select sum(calc_value) as curValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr from ${lastTableName} dy " + | 
				
			||||||
 | 
					            " where cur_time >= #{startTime} and cur_time  <= #{endTime} " + | 
				
			||||||
 | 
					            "<if test='paramType != null and paramType != \"\"'>" + | 
				
			||||||
 | 
					            "   and device_type = #{paramType}" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            " group by device_type,convert(varchar(${len}), cur_time, 120)" + | 
				
			||||||
 | 
					            "</script>") | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryOneTable(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                 @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                 @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                 @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                 @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                 @Param("paramType") String paramType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询能耗分析同比 | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param lastTableName | 
				
			||||||
 | 
					     * @param curTableName | 
				
			||||||
 | 
					     * @param dateLen | 
				
			||||||
 | 
					     * @param paramType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryManyTableYoy(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                     @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                     @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                     @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                     @Param("yoyStartTime") String yoyStartTime, | 
				
			||||||
 | 
					                                                     @Param("yoyEndTime") String yoyEndTime, | 
				
			||||||
 | 
					                                                     @Param("yoyLastTableName") String yoyLastTableName, | 
				
			||||||
 | 
					                                                     @Param("yoyCurTableName") String yoyCurTableName, | 
				
			||||||
 | 
					                                                     @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                     @Param("paramType") String paramType, | 
				
			||||||
 | 
					                                                     @Param("timeType") String timeType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询能耗分析同比 | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param lastTableName | 
				
			||||||
 | 
					     * @param curTableName | 
				
			||||||
 | 
					     * @param yoyStartTime | 
				
			||||||
 | 
					     * @param yoyEndTime | 
				
			||||||
 | 
					     * @param dateLen | 
				
			||||||
 | 
					     * @param paramType | 
				
			||||||
 | 
					     * @param timeType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryOneTableYoy(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                     @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                     @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                     @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                     @Param("yoyStartTime") String yoyStartTime, | 
				
			||||||
 | 
					                                                     @Param("yoyEndTime") String yoyEndTime, | 
				
			||||||
 | 
					                                                     @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                     @Param("paramType") String paramType, | 
				
			||||||
 | 
					                                                     @Param("timeType") String timeType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询能耗分析环比(查询类型是month,year) | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param yoyStartTime | 
				
			||||||
 | 
					     * @param yoyEndTime | 
				
			||||||
 | 
					     * @param tableName | 
				
			||||||
 | 
					     * @param dateLen | 
				
			||||||
 | 
					     * @param paramType | 
				
			||||||
 | 
					     * @param timeType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryMonthAndYearMom(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                        @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                        @Param("momStartTime") String yoyStartTime, | 
				
			||||||
 | 
					                                                        @Param("momEndTime") String yoyEndTime, | 
				
			||||||
 | 
					                                                        @Param("tableName") String tableName, | 
				
			||||||
 | 
					                                                        @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                        @Param("paramType") String paramType, | 
				
			||||||
 | 
					                                                        @Param("timeType") String timeType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 单表查询能耗分析环比(查询类型是hour,day) | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param yoyStartTime | 
				
			||||||
 | 
					     * @param yoyEndTime | 
				
			||||||
 | 
					     * @param tableName | 
				
			||||||
 | 
					     * @param dateLen | 
				
			||||||
 | 
					     * @param paramType | 
				
			||||||
 | 
					     * @param timeType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryOneTableMom(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                    @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                    @Param("momStartTime") String yoyStartTime, | 
				
			||||||
 | 
					                                                    @Param("momEndTime") String yoyEndTime, | 
				
			||||||
 | 
					                                                    @Param("tableName") String tableName, | 
				
			||||||
 | 
					                                                    @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                    @Param("paramType") String paramType, | 
				
			||||||
 | 
					                                                    @Param("timeType") String timeType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 多表查询能耗分析环比(查询类型是hour,day) | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param yoyStartTime | 
				
			||||||
 | 
					     * @param yoyEndTime | 
				
			||||||
 | 
					     * @param tableName1 上一年的表 | 
				
			||||||
 | 
					     * @param tableName2 今年的表 | 
				
			||||||
 | 
					     * @param dateLen | 
				
			||||||
 | 
					     * @param paramType | 
				
			||||||
 | 
					     * @param timeType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryManyTableMom(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                     @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                     @Param("momStartTime") String yoyStartTime, | 
				
			||||||
 | 
					                                                     @Param("momEndTime") String yoyEndTime, | 
				
			||||||
 | 
					                                                     @Param("tableName1") String tableName1, | 
				
			||||||
 | 
					                                                     @Param("tableName2") String tableName2, | 
				
			||||||
 | 
					                                                     @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                     @Param("paramType") String paramType, | 
				
			||||||
 | 
					                                                     @Param("timeType") String timeType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询各个机房设备的用电量(查询月,年) | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param lastTableName | 
				
			||||||
 | 
					     * @param curTableName | 
				
			||||||
 | 
					     * @param dateLen | 
				
			||||||
 | 
					     * @param deviceType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryDeviceOneTable(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                       @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                       @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                       @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                       @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                       @Param("deviceType") String deviceType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询各个机房设备的用电量(查询小时,天) | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param lastTableName | 
				
			||||||
 | 
					     * @param curTableName | 
				
			||||||
 | 
					     * @param dateLen | 
				
			||||||
 | 
					     * @param deviceType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryDeviceManyTable(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                        @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                        @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                        @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                        @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                        @Param("deviceType") String deviceType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询系统分析折线图 | 
				
			||||||
 | 
					     * @param curTable | 
				
			||||||
 | 
					     * @param curCopTable | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryLineDataSysByOne(@Param("curTable") String curTable, | 
				
			||||||
 | 
					                                                         @Param("curCopTable") String curCopTable, | 
				
			||||||
 | 
					                                                         @Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                         @Param("endTime") String endTime); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询系统分析折线图 | 
				
			||||||
 | 
					     * @param lastTable | 
				
			||||||
 | 
					     * @param curTable | 
				
			||||||
 | 
					     * @param lastCopTable | 
				
			||||||
 | 
					     * @param curCopTable | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryLineDataSysByMany(@Param("lastTable") String lastTable, | 
				
			||||||
 | 
					                                                          @Param("curTable") String curTable, | 
				
			||||||
 | 
					                                                          @Param("lastCopTable") String lastCopTable, | 
				
			||||||
 | 
					                                                          @Param("curCopTable") String curCopTable, | 
				
			||||||
 | 
					                                                          @Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                          @Param("endTime") String endTime); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 查询各个设备的折线图数据 | 
				
			||||||
 | 
					     * @param startTime | 
				
			||||||
 | 
					     * @param endTime | 
				
			||||||
 | 
					     * @param lastTableName | 
				
			||||||
 | 
					     * @param curTableName | 
				
			||||||
 | 
					     * @param deviceType | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryDeviceLineManyTable(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                            @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                            @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                            @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                            @Param("deviceType") String deviceType); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Select("select isnull(sum(calc_value),0) from ${tableName} " + | 
				
			||||||
 | 
					            " where device_type = 'cloud' " + | 
				
			||||||
 | 
					            " and device_code in (select device_code from device_manage where grade >=0 and grade < 10) " + | 
				
			||||||
 | 
					            " and cur_time >= concat(#{timeStr},':00:00') and cur_time <= concat(#{timeStr},':59:59') ") | 
				
			||||||
 | 
					    String queryCoolingData(@Param("tableName") String tableName, @Param("timeStr") String timeString); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,167 @@ | 
				
			|||||||
 | 
					package com.mh.system.mapper.energy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Mapper; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Param; | 
				
			||||||
 | 
					import org.apache.ibatis.annotations.Select; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 能耗查询 | 
				
			||||||
 | 
					 * @date 2023-12-13 16:00:01 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Mapper | 
				
			||||||
 | 
					public interface EnergyQueryMapper { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 跨表查询操作 | 
				
			||||||
 | 
					     * @param startTime 开始时间 | 
				
			||||||
 | 
					     * @param endTime 结束时间 | 
				
			||||||
 | 
					     * @param lastTableName 上一个表名 | 
				
			||||||
 | 
					     * @param curTableName 当前表名 | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Select("<script>" + | 
				
			||||||
 | 
					            "select sum(calc_value) as curValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr from ${lastTableName} dt " + | 
				
			||||||
 | 
					            " where cur_time >= #{startTime} and cur_time  <= #{endTime} " + | 
				
			||||||
 | 
					            "<if test='paramType != null and paramType != \"\"'>" + | 
				
			||||||
 | 
					            "   and device_type = #{paramType}" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveMeter==true and haveCloud == true'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dt.device_num and grade < 50 and grade >=40 and (device_type like '%meter%' or device_type like '%cloud%') " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveCloud==true and haveMeter==false'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and device_type like '%cloud%' " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveCloud==false and haveMeter==true'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and device_type like '%meter%' " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            " group by device_type,convert(varchar(${len}), cur_time, 120) " + | 
				
			||||||
 | 
					            "union all " + | 
				
			||||||
 | 
					            "select sum(calc_value) as curValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr from ${curTableName} dy " + | 
				
			||||||
 | 
					            " where cur_time >= #{startTime} and cur_time  <= #{endTime} " + | 
				
			||||||
 | 
					            "<if test='paramType != null and paramType != \"\"'>" + | 
				
			||||||
 | 
					            "   and device_type = #{paramType}" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveMeter==true and haveCloud == true'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and (device_type like '%meter%' or device_type like '%cloud%') " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveCloud==true and haveMeter==false'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and device_type like '%cloud%' " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveCloud==false and haveMeter==true'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and device_type like '%meter%' " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            " group by device_type,convert(varchar(${len}), cur_time, 120)" + | 
				
			||||||
 | 
					            "</script>") | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryManyTable(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                  @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                  @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                  @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                  @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                  @Param("paramType") String paramType, | 
				
			||||||
 | 
					                                                  @Param("haveMeter") boolean haveMeter, | 
				
			||||||
 | 
					                                                  @Param("haveCloud") boolean haveCloud); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 单表查询操作 | 
				
			||||||
 | 
					     * @param startTime 开始时间 | 
				
			||||||
 | 
					     * @param endTime 结束时间 | 
				
			||||||
 | 
					     * @param lastTableName 上一个表名 | 
				
			||||||
 | 
					     * @param curTableName 当前表名 | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Select("<script>" + | 
				
			||||||
 | 
					            "select sum(calc_value) as curValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr from ${lastTableName} dy " + | 
				
			||||||
 | 
					            " where cur_time >= #{startTime} and cur_time  <= #{endTime} " + | 
				
			||||||
 | 
					            "<if test='paramType != null and paramType != \"\"'>" + | 
				
			||||||
 | 
					            "   and device_type = #{paramType}" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveMeter==true and haveCloud == true'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and (device_type like '%meter%' or device_type like '%cloud%') " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveCloud==true and haveMeter==false'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and device_type like '%cloud%' " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            "<if test='haveCloud==false and haveMeter==true'>" + | 
				
			||||||
 | 
					            " and exists ( " + | 
				
			||||||
 | 
					            " select " + | 
				
			||||||
 | 
					            "   1 " + | 
				
			||||||
 | 
					            " from " + | 
				
			||||||
 | 
					            "   device_manage " + | 
				
			||||||
 | 
					            " where " + | 
				
			||||||
 | 
					            "   device_num = dy.device_num and grade < 50 and grade >=40 and device_type like '%meter%' " + | 
				
			||||||
 | 
					            " )" + | 
				
			||||||
 | 
					            "</if>" + | 
				
			||||||
 | 
					            " group by device_type,convert(varchar(${len}), cur_time, 120)" + | 
				
			||||||
 | 
					            "</script>") | 
				
			||||||
 | 
					    List<ConsumptionAnalyzeEntity> queryOneTable(@Param("startTime") String startTime, | 
				
			||||||
 | 
					                                                 @Param("endTime") String endTime, | 
				
			||||||
 | 
					                                                 @Param("lastTableName") String lastTableName, | 
				
			||||||
 | 
					                                                 @Param("curTableName") String curTableName, | 
				
			||||||
 | 
					                                                 @Param("len") String dateLen, | 
				
			||||||
 | 
					                                                 @Param("paramType") String paramType, | 
				
			||||||
 | 
					                                                 @Param("haveMeter") boolean haveMeter, | 
				
			||||||
 | 
					                                                 @Param("haveCloud") boolean haveCloud); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,23 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.energy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.AjaxResult; | 
				
			||||||
 | 
					import com.mh.common.core.domain.vo.EnergyQueryVO; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 能源查询服务 | 
				
			||||||
 | 
					 * @date 2023-12-13 15:50:36 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface IEnergyQueryService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 能源查询,整个机房耗电量,制冷量,COP值 | 
				
			||||||
 | 
					     * @param page | 
				
			||||||
 | 
					     * @return | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    AjaxResult sysQuery(EnergyQueryVO page); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AjaxResult deviceTypeQuery(EnergyQueryVO page); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,26 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.energy; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.AjaxResult; | 
				
			||||||
 | 
					import com.mh.common.core.domain.vo.EnergyConsumptionVO; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 系统能耗分析 | 
				
			||||||
 | 
					 * @date 2023/7/18 14:05:40 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface IEnergyService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AjaxResult yoy(EnergyConsumptionVO vo); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AjaxResult mom(EnergyConsumptionVO vo); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AjaxResult device(EnergyConsumptionVO vo); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String queryCoolingData(String tableName, String timeString); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AjaxResult yoyMom(EnergyConsumptionVO vo); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AjaxResult sys(EnergyConsumptionVO vo); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,162 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.energy.impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.AjaxResult; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity; | 
				
			||||||
 | 
					import com.mh.common.core.domain.vo.EnergyQueryVO; | 
				
			||||||
 | 
					import com.mh.common.utils.DateUtils; | 
				
			||||||
 | 
					import com.mh.system.mapper.device.CollectionParamsManageMapper; | 
				
			||||||
 | 
					import com.mh.system.mapper.energy.EnergyQueryMapper; | 
				
			||||||
 | 
					import com.mh.system.service.energy.IEnergyQueryService; | 
				
			||||||
 | 
					import jakarta.annotation.Resource; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.*; | 
				
			||||||
 | 
					import java.util.concurrent.atomic.AtomicReference; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 能源查询服务实现类 | 
				
			||||||
 | 
					 * @date 2023-12-13 15:54:39 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					public class EnergyQueryServiceImpl implements IEnergyQueryService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource | 
				
			||||||
 | 
					    private EnergyQueryMapper energyQueryMapper; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource | 
				
			||||||
 | 
					    private CollectionParamsManageMapper collectionParamsManageMapper; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public AjaxResult sysQuery(EnergyQueryVO vo) { | 
				
			||||||
 | 
					        DateUtils.sysEnergyDateChange(vo); | 
				
			||||||
 | 
					        // 获取参数
 | 
				
			||||||
 | 
					        AtomicReference<String> lastTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||||
 | 
					        AtomicReference<String> curTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||||
 | 
					        String timeType = vo.getTimeType(); | 
				
			||||||
 | 
					        // 判断是否有总表
 | 
				
			||||||
 | 
					        boolean haveMeter = collectionParamsManageMapper.selectSummary(40, "meter") != 0; | 
				
			||||||
 | 
					        boolean haveCloud = collectionParamsManageMapper.selectSummary(40, "cloud") != 0; | 
				
			||||||
 | 
					        List<ConsumptionAnalyzeEntity> consumptionAnalyzeEntities = null; | 
				
			||||||
 | 
					        // 表格数据
 | 
				
			||||||
 | 
					        if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { | 
				
			||||||
 | 
					            // 单表
 | 
				
			||||||
 | 
					            consumptionAnalyzeEntities = energyQueryMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud); | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); | 
				
			||||||
 | 
					            curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); | 
				
			||||||
 | 
					            if (lastTableName.get().equalsIgnoreCase(curTableName.get())) { | 
				
			||||||
 | 
					                // 单表
 | 
				
			||||||
 | 
					                consumptionAnalyzeEntities = energyQueryMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                // 多表
 | 
				
			||||||
 | 
					                consumptionAnalyzeEntities = energyQueryMapper.queryManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { | 
				
			||||||
 | 
					            return AjaxResult.success(); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        // 分组并按时间排序操作,拿到冷量记和电表数据
 | 
				
			||||||
 | 
					        Map<String, List<ConsumptionAnalyzeEntity>> collect = consumptionAnalyzeEntities.stream() | 
				
			||||||
 | 
					                .parallel() | 
				
			||||||
 | 
					                .collect(Collectors.groupingBy(ConsumptionAnalyzeEntity::getDeviceType, HashMap::new, Collectors | 
				
			||||||
 | 
					                        .collectingAndThen(Collectors.toList(), | 
				
			||||||
 | 
					                                list -> list.stream().sorted(Comparator.comparing(ConsumptionAnalyzeEntity::getTimeStr)).collect(Collectors.toList())))); | 
				
			||||||
 | 
					        List<ConsumptionAnalyzeEntity> meterData = new ArrayList<>(); | 
				
			||||||
 | 
					        List<ConsumptionAnalyzeEntity> coldData = new ArrayList<>(); | 
				
			||||||
 | 
					        for (Map.Entry<String, List<ConsumptionAnalyzeEntity>> nmap : collect.entrySet()) { | 
				
			||||||
 | 
					            // 获取电表的值
 | 
				
			||||||
 | 
					            if (nmap.getKey().equalsIgnoreCase("meter")) { | 
				
			||||||
 | 
					                meterData = nmap.getValue(); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 获取冷量计的值
 | 
				
			||||||
 | 
					            if (nmap.getKey().equalsIgnoreCase("cloud")) { | 
				
			||||||
 | 
					                coldData = nmap.getValue(); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        String[] copArr = new String[meterData.size()]; | 
				
			||||||
 | 
					        String[] timeStrArr = meterData.stream() | 
				
			||||||
 | 
					                .map(ConsumptionAnalyzeEntity::getTimeStr) | 
				
			||||||
 | 
					                .toArray(String[]::new); | 
				
			||||||
 | 
					        String[] meterArr = meterData.stream() | 
				
			||||||
 | 
					                .map(ConsumptionAnalyzeEntity::getCurValue) | 
				
			||||||
 | 
					                .toArray(String[]::new); | 
				
			||||||
 | 
					        String[] coldArr = getArr(coldData, timeStrArr); | 
				
			||||||
 | 
					        // 计算COP=制冷量/耗电量
 | 
				
			||||||
 | 
					        for (int i = 0; i < meterData.size(); i++) { | 
				
			||||||
 | 
					            try { | 
				
			||||||
 | 
					                double cold = Math.round(Double.parseDouble(coldArr[i]) * 100) / 100.0; | 
				
			||||||
 | 
					                double meter = Math.round(Double.parseDouble(meterArr[i]) * 100) / 100.0; | 
				
			||||||
 | 
					                double cop = Math.round((meter==0 ? 0.00 : cold/ meter) * 100) / 100.0; | 
				
			||||||
 | 
					                copArr[i] = String.valueOf(cop); | 
				
			||||||
 | 
					            } catch (NumberFormatException e) { | 
				
			||||||
 | 
					                log.error("处理累计能耗异常==>",e); | 
				
			||||||
 | 
					                throw new RuntimeException(e); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        // 表格数据
 | 
				
			||||||
 | 
					        Map<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					        int pageNum = Integer.parseInt(String.valueOf(vo.getParams().get("pageNum"))); | 
				
			||||||
 | 
					        int pageSize = Integer.parseInt(String.valueOf(vo.getParams().get("pageSize"))); | 
				
			||||||
 | 
					        if (pageNum == 0) { | 
				
			||||||
 | 
					            map.put("coldArr", coldArr); | 
				
			||||||
 | 
					            map.put("meterArr", meterArr); | 
				
			||||||
 | 
					            map.put("copArr", copArr); | 
				
			||||||
 | 
					            map.put("timeStrArr", timeStrArr); | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            int startIndex = (pageNum-1)*pageSize; | 
				
			||||||
 | 
					            int endIndex = Math.min(pageNum * pageSize, coldArr.length); | 
				
			||||||
 | 
					            if (startIndex > endIndex) { | 
				
			||||||
 | 
					                return AjaxResult.success(); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            map.put("coldArr", Arrays.copyOfRange(coldArr, startIndex , endIndex)); | 
				
			||||||
 | 
					            map.put("meterArr", Arrays.copyOfRange(meterArr, startIndex , endIndex)); | 
				
			||||||
 | 
					            map.put("copArr", Arrays.copyOfRange(copArr, startIndex , endIndex)); | 
				
			||||||
 | 
					            map.put("timeStrArr", Arrays.copyOfRange(timeStrArr, startIndex , endIndex)); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 组装赋值
 | 
				
			||||||
 | 
					        List<Map<String, Object>> listData = new ArrayList<>(); | 
				
			||||||
 | 
					        Map<String, Object> cold = new HashMap<>(); | 
				
			||||||
 | 
					        cold.put("cold", map.get("coldArr")); | 
				
			||||||
 | 
					        listData.add(cold); | 
				
			||||||
 | 
					        Map<String, Object> meter = new HashMap<>(); | 
				
			||||||
 | 
					        meter.put("meter", map.get("meterArr")); | 
				
			||||||
 | 
					        listData.add(meter); | 
				
			||||||
 | 
					        Map<String, Object> cop = new HashMap<>(); | 
				
			||||||
 | 
					        cop.put("cop", map.get("copArr")); | 
				
			||||||
 | 
					        listData.add(cop); | 
				
			||||||
 | 
					        String[] titleArr = new String[]{"cold", "meter", "cop"}; | 
				
			||||||
 | 
					        Map<String, Object> titles = new HashMap<>(); | 
				
			||||||
 | 
					        titles.put("titleArr", titleArr); | 
				
			||||||
 | 
					        listData.add(titles); | 
				
			||||||
 | 
					        Map<String, Object> timeStr = new HashMap<>(); | 
				
			||||||
 | 
					        timeStr.put("timeStrArr", map.get("timeStrArr")); | 
				
			||||||
 | 
					        listData.add(timeStr); | 
				
			||||||
 | 
					        return AjaxResult.success(listData); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static String[] getArr(List<ConsumptionAnalyzeEntity> copLineData, String[] lineTimeStrArr) { | 
				
			||||||
 | 
					        String[] lineCopArr = new String[lineTimeStrArr.length]; | 
				
			||||||
 | 
					        for (int i = 0; i < lineTimeStrArr.length; i++) { | 
				
			||||||
 | 
					            int j = i; | 
				
			||||||
 | 
					            Optional<ConsumptionAnalyzeEntity> first = copLineData.stream().filter(s -> lineTimeStrArr[j].equalsIgnoreCase(s.getTimeStr())).findFirst(); | 
				
			||||||
 | 
					            if (first.isPresent()) { | 
				
			||||||
 | 
					                lineCopArr[i] = first.get().getCurValue(); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                lineCopArr[i] = "0.00"; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return lineCopArr; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public AjaxResult deviceTypeQuery(EnergyQueryVO page) { | 
				
			||||||
 | 
					        return null; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,590 @@ | 
				
			|||||||
 | 
					package com.mh.system.service.energy.impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.mh.common.core.domain.AjaxResult; | 
				
			||||||
 | 
					import com.mh.common.core.domain.dto.EnergyConsumptionDTO; | 
				
			||||||
 | 
					import com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity; | 
				
			||||||
 | 
					import com.mh.common.core.domain.vo.EnergyConsumptionVO; | 
				
			||||||
 | 
					import com.mh.common.utils.DateUtils; | 
				
			||||||
 | 
					import com.mh.common.utils.EnergyThreadPoolService; | 
				
			||||||
 | 
					import com.mh.common.utils.StringUtils; | 
				
			||||||
 | 
					import com.mh.system.mapper.energy.EnergyMapper; | 
				
			||||||
 | 
					import com.mh.system.service.energy.IEnergyService; | 
				
			||||||
 | 
					import jakarta.annotation.Resource; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.*; | 
				
			||||||
 | 
					import java.util.concurrent.CountDownLatch; | 
				
			||||||
 | 
					import java.util.concurrent.ExecutionException; | 
				
			||||||
 | 
					import java.util.concurrent.Future; | 
				
			||||||
 | 
					import java.util.concurrent.ThreadPoolExecutor; | 
				
			||||||
 | 
					import java.util.concurrent.atomic.AtomicReference; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @author LJF | 
				
			||||||
 | 
					 * @version 1.0 | 
				
			||||||
 | 
					 * @project NewZhujiang_Server | 
				
			||||||
 | 
					 * @description 系统能耗分析 | 
				
			||||||
 | 
					 * @date 2023/7/18 14:08:10 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					public class EnergyServiceImpl implements IEnergyService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource | 
				
			||||||
 | 
					    private EnergyMapper energyMapper; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public AjaxResult device(EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        AtomicReference<String> lastTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||||
 | 
					        AtomicReference<String> curTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||||
 | 
					        String timeType = vo.getTimeType(); | 
				
			||||||
 | 
					        ThreadPoolExecutor executor = EnergyThreadPoolService.getInstance(); | 
				
			||||||
 | 
					        CountDownLatch latch = new CountDownLatch(2); | 
				
			||||||
 | 
					        List<Future<Map<String, Object>>> futures = new ArrayList<>(); | 
				
			||||||
 | 
					        futures.add(executor.submit(() -> { | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> consumptionAnalyzeEntities; | 
				
			||||||
 | 
					            if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { | 
				
			||||||
 | 
					                // 单表
 | 
				
			||||||
 | 
					                consumptionAnalyzeEntities = energyMapper.queryDeviceOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), vo.getDeviceType()); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                // 多表
 | 
				
			||||||
 | 
					                lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); | 
				
			||||||
 | 
					                curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); | 
				
			||||||
 | 
					                consumptionAnalyzeEntities = energyMapper.queryDeviceManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), vo.getDeviceType()); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { | 
				
			||||||
 | 
					                latch.countDown(); | 
				
			||||||
 | 
					                return null; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 组装赋值
 | 
				
			||||||
 | 
					            String[] timeStrArr = consumptionAnalyzeEntities.stream() | 
				
			||||||
 | 
					                    .map(ConsumptionAnalyzeEntity::getTimeStr) | 
				
			||||||
 | 
					                    .toArray(String[]::new); | 
				
			||||||
 | 
					            String[] meterArr = consumptionAnalyzeEntities.stream() | 
				
			||||||
 | 
					                    .map(ConsumptionAnalyzeEntity::getCurValue) | 
				
			||||||
 | 
					                    .toArray(String[]::new); | 
				
			||||||
 | 
					            Map<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					            map.put("timeStrArr", timeStrArr); | 
				
			||||||
 | 
					            map.put("meterArr", meterArr); | 
				
			||||||
 | 
					            latch.countDown(); | 
				
			||||||
 | 
					            return map; | 
				
			||||||
 | 
					        })); | 
				
			||||||
 | 
					        futures.add(executor.submit(() -> { | 
				
			||||||
 | 
					            // 折线图,都查询min表
 | 
				
			||||||
 | 
					            // 多表
 | 
				
			||||||
 | 
					            String lastTable = "data_min" + vo.getStartTime().substring(0,4); | 
				
			||||||
 | 
					            String curTable = "data_min" + vo.getEndTime().substring(0,4); | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> consumptionAnalyzeEntities = energyMapper.queryDeviceLineManyTable(vo.getStartTime(), vo.getEndTime(), lastTable, curTable, vo.getDeviceType()); | 
				
			||||||
 | 
					            if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { | 
				
			||||||
 | 
					                latch.countDown(); | 
				
			||||||
 | 
					                return null; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 组装赋值
 | 
				
			||||||
 | 
					            String[] timeStrArr = consumptionAnalyzeEntities.stream() | 
				
			||||||
 | 
					                    .map(ConsumptionAnalyzeEntity::getTimeStr) | 
				
			||||||
 | 
					                    .toArray(String[]::new); | 
				
			||||||
 | 
					            String[] meterArr = consumptionAnalyzeEntities.stream() | 
				
			||||||
 | 
					                    .map(ConsumptionAnalyzeEntity::getCurValue) | 
				
			||||||
 | 
					                    .toArray(String[]::new); | 
				
			||||||
 | 
					            Map<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					            map.put("timeStrLineArr", timeStrArr); | 
				
			||||||
 | 
					            map.put("meterLineArr", meterArr); | 
				
			||||||
 | 
					            latch.countDown(); | 
				
			||||||
 | 
					            return map; | 
				
			||||||
 | 
					        })); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            latch.await(); | 
				
			||||||
 | 
					        } catch (InterruptedException e) { | 
				
			||||||
 | 
					            throw new RuntimeException(e); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Map<String, Object> allData = new HashMap<>(); | 
				
			||||||
 | 
					        // 获取数据
 | 
				
			||||||
 | 
					        for (Future<Map<String, Object>> future : futures) { | 
				
			||||||
 | 
					            try { | 
				
			||||||
 | 
					                Map<String, Object> map = future.get(); | 
				
			||||||
 | 
					                if (null != map) { | 
				
			||||||
 | 
					                    allData.putAll(map); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } catch (InterruptedException | ExecutionException e) { | 
				
			||||||
 | 
					                throw new RuntimeException(e); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        EnergyConsumptionDTO energyConsumptionDTO = new EnergyConsumptionDTO(); | 
				
			||||||
 | 
					        String[] titleArr = new String[]{"meter", "lineMeter"}; | 
				
			||||||
 | 
					        energyConsumptionDTO.setTitles(titleArr); | 
				
			||||||
 | 
					        energyConsumptionDTO.setTimes((String[]) allData.get("timeStrArr")); | 
				
			||||||
 | 
					        energyConsumptionDTO.setLineTimes((String[]) allData.get("timeStrLineArr")); | 
				
			||||||
 | 
					        List<Map<String, Object>> listData = new ArrayList<>(); | 
				
			||||||
 | 
					        Map<String, Object> meter = new HashMap<>(); | 
				
			||||||
 | 
					        meter.put("meter",allData.get("meterArr")); | 
				
			||||||
 | 
					        listData.add(meter); | 
				
			||||||
 | 
					        Map<String, Object> lineMeter = new HashMap<>(); | 
				
			||||||
 | 
					        lineMeter.put("lineMeter",allData.get("meterLineArr")); | 
				
			||||||
 | 
					        listData.add(lineMeter); | 
				
			||||||
 | 
					        energyConsumptionDTO.setData(listData); | 
				
			||||||
 | 
					        return AjaxResult.success(energyConsumptionDTO); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public AjaxResult sys(EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        AtomicReference<String> lastTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||||
 | 
					        AtomicReference<String> curTableName = new AtomicReference<>("data_" + vo.getTimeType()); | 
				
			||||||
 | 
					        String timeType = vo.getTimeType(); | 
				
			||||||
 | 
					        EnergyConsumptionDTO energyConsumptionDTO = new EnergyConsumptionDTO(); | 
				
			||||||
 | 
					        String[] titleArr = new String[]{"cold", "meter", "cop", "lineCop", "lineInstantaneousCold", "lineInstantaneousMeter"}; | 
				
			||||||
 | 
					        ThreadPoolExecutor executor = EnergyThreadPoolService.getInstance(); | 
				
			||||||
 | 
					        CountDownLatch latch = new CountDownLatch(2); | 
				
			||||||
 | 
					        List<Future<Map<String, Object>>> futures = new ArrayList<>(); | 
				
			||||||
 | 
					        futures.add(executor.submit(() -> { | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> consumptionAnalyzeEntities = null; | 
				
			||||||
 | 
					            // 表格数据
 | 
				
			||||||
 | 
					            if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { | 
				
			||||||
 | 
					                // 单表
 | 
				
			||||||
 | 
					                consumptionAnalyzeEntities = energyMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); | 
				
			||||||
 | 
					                curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); | 
				
			||||||
 | 
					                if (lastTableName.get().equalsIgnoreCase(curTableName.get())) { | 
				
			||||||
 | 
					                    // 单表
 | 
				
			||||||
 | 
					                    consumptionAnalyzeEntities = energyMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null); | 
				
			||||||
 | 
					                } else { | 
				
			||||||
 | 
					                    // 多表
 | 
				
			||||||
 | 
					                    consumptionAnalyzeEntities = energyMapper.queryManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { | 
				
			||||||
 | 
					                latch.countDown(); | 
				
			||||||
 | 
					                return null; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 分组并按时间排序操作,拿到冷量记和电表数据
 | 
				
			||||||
 | 
					            Map<String, List<ConsumptionAnalyzeEntity>> collect = consumptionAnalyzeEntities.stream() | 
				
			||||||
 | 
					                    .parallel() | 
				
			||||||
 | 
					                    .collect(Collectors.groupingBy(ConsumptionAnalyzeEntity::getDeviceType, HashMap::new, Collectors | 
				
			||||||
 | 
					                            .collectingAndThen(Collectors.toList(), | 
				
			||||||
 | 
					                                    list -> list.stream().sorted(Comparator.comparing(ConsumptionAnalyzeEntity::getTimeStr)).collect(Collectors.toList())))); | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> meterData = new ArrayList<>(); | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> coldData = new ArrayList<>(); | 
				
			||||||
 | 
					            for (Map.Entry<String, List<ConsumptionAnalyzeEntity>> nmap : collect.entrySet()) { | 
				
			||||||
 | 
					                // 获取电表的值
 | 
				
			||||||
 | 
					                if (nmap.getKey().equalsIgnoreCase("meter")) { | 
				
			||||||
 | 
					                    meterData = nmap.getValue(); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                // 获取冷量计的值
 | 
				
			||||||
 | 
					                if (nmap.getKey().equalsIgnoreCase("cloud")) { | 
				
			||||||
 | 
					                    coldData = nmap.getValue(); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            String[] copArr = new String[meterData.size()]; | 
				
			||||||
 | 
					            String[] timeStrArr = meterData.stream() | 
				
			||||||
 | 
					                    .map(ConsumptionAnalyzeEntity::getTimeStr) | 
				
			||||||
 | 
					                    .toArray(String[]::new); | 
				
			||||||
 | 
					            String[] meterArr = meterData.stream() | 
				
			||||||
 | 
					                    .map(ConsumptionAnalyzeEntity::getCurValue) | 
				
			||||||
 | 
					                    .toArray(String[]::new); | 
				
			||||||
 | 
					            String[] coldArr = getArr(coldData, timeStrArr); | 
				
			||||||
 | 
					            // 计算COP=制冷量/耗电量
 | 
				
			||||||
 | 
					            for (int i = 0; i < meterData.size(); i++) { | 
				
			||||||
 | 
					                try { | 
				
			||||||
 | 
					                    double cold = Math.round(Double.parseDouble(coldArr[i]) * 100) / 100.0; | 
				
			||||||
 | 
					                    double meter = Math.round(Double.parseDouble(meterArr[i]) * 100) / 100.0; | 
				
			||||||
 | 
					                    double cop = Math.round((meter==0 ? 0.00 : cold/ meter) * 100) / 100.0; | 
				
			||||||
 | 
					                    copArr[i] = String.valueOf(cop); | 
				
			||||||
 | 
					                } catch (NumberFormatException e) { | 
				
			||||||
 | 
					                    log.error("处理累计能耗异常==>",e); | 
				
			||||||
 | 
					                    throw new RuntimeException(e); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 表格数据
 | 
				
			||||||
 | 
					            Map<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					            map.put("coldArr", coldArr); | 
				
			||||||
 | 
					            map.put("meterArr", meterArr); | 
				
			||||||
 | 
					            map.put("copArr", copArr); | 
				
			||||||
 | 
					            map.put("timeStrArr", timeStrArr); | 
				
			||||||
 | 
					            latch.countDown(); | 
				
			||||||
 | 
					            return map; | 
				
			||||||
 | 
					        })); | 
				
			||||||
 | 
					        futures.add(executor.submit(() -> { | 
				
			||||||
 | 
					            // 折线图数据,都是查询的分钟表,最低颗粒度
 | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> lineData; | 
				
			||||||
 | 
					            String lastTable = "data_min" + vo.getStartTime().substring(0, 4); | 
				
			||||||
 | 
					            String curTable = "data_min" + vo.getEndTime().substring(0, 4); | 
				
			||||||
 | 
					            String lastCopTable = "data_min_cop"; | 
				
			||||||
 | 
					            String curCopTable = "data_min_cop"; | 
				
			||||||
 | 
					            if (lastTable.equalsIgnoreCase(curTable)) { | 
				
			||||||
 | 
					                // 查询单表
 | 
				
			||||||
 | 
					                lineData = energyMapper.queryLineDataSysByOne(curTable, curCopTable, vo.getStartTime(), vo.getEndTime()); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                // 查询多表
 | 
				
			||||||
 | 
					                lineData = energyMapper.queryLineDataSysByMany(lastTable, curTable, lastCopTable, curCopTable, vo.getStartTime(), vo.getEndTime()); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            if (null == lineData) { | 
				
			||||||
 | 
					                latch.countDown(); | 
				
			||||||
 | 
					                return null; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 分组并按时间排序操作,拿到冷量记,电表,cop数据
 | 
				
			||||||
 | 
					            Map<String, List<ConsumptionAnalyzeEntity>> collectLine = lineData.stream() | 
				
			||||||
 | 
					                    .parallel() | 
				
			||||||
 | 
					                    .collect(Collectors.groupingBy(ConsumptionAnalyzeEntity::getDeviceType, HashMap::new, Collectors | 
				
			||||||
 | 
					                            .collectingAndThen(Collectors.toList(), | 
				
			||||||
 | 
					                                    list -> list.stream().sorted(Comparator.comparing(ConsumptionAnalyzeEntity::getTimeStr)).collect(Collectors.toList())))); | 
				
			||||||
 | 
					//            List<ConsumptionAnalyzeEntity> meterLineData = new ArrayList<>();
 | 
				
			||||||
 | 
					//            List<ConsumptionAnalyzeEntity> coldLineData = new ArrayList<>();
 | 
				
			||||||
 | 
					//            List<ConsumptionAnalyzeEntity> copLineData = new ArrayList<>();
 | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> efrColdLineData = new ArrayList<>(); | 
				
			||||||
 | 
					            List<ConsumptionAnalyzeEntity> efrMeterLineData = new ArrayList<>(); | 
				
			||||||
 | 
					            for (Map.Entry<String, List<ConsumptionAnalyzeEntity>> nmap : collectLine.entrySet()) { | 
				
			||||||
 | 
					//                // 获取电表的值
 | 
				
			||||||
 | 
					//                if (nmap.getKey().equalsIgnoreCase("meter")) {
 | 
				
			||||||
 | 
					//                    meterLineData = nmap.getValue();
 | 
				
			||||||
 | 
					//                }
 | 
				
			||||||
 | 
					//                // 获取冷量计的值
 | 
				
			||||||
 | 
					//                if (nmap.getKey().equalsIgnoreCase("cloud")) {
 | 
				
			||||||
 | 
					//                    coldLineData = nmap.getValue();
 | 
				
			||||||
 | 
					//                }
 | 
				
			||||||
 | 
					//                // 获取cop的值
 | 
				
			||||||
 | 
					//                if (nmap.getKey().equalsIgnoreCase("cop")) {
 | 
				
			||||||
 | 
					//                    copLineData = nmap.getValue();
 | 
				
			||||||
 | 
					//                }
 | 
				
			||||||
 | 
					                // 获取瞬时冷量计的值
 | 
				
			||||||
 | 
					                if (nmap.getKey().equalsIgnoreCase("efrCloud")) { | 
				
			||||||
 | 
					                    efrColdLineData = nmap.getValue(); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                // 获取瞬时功率的值
 | 
				
			||||||
 | 
					                if (nmap.getKey().equalsIgnoreCase("efrMeter")) { | 
				
			||||||
 | 
					                    efrMeterLineData = nmap.getValue(); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            String[] lineTimeStrArr = efrMeterLineData.stream() | 
				
			||||||
 | 
					                    .map(ConsumptionAnalyzeEntity::getTimeStr) | 
				
			||||||
 | 
					                    .toArray(String[]::new); | 
				
			||||||
 | 
					//            String[] lineMeterArr = meterLineData.stream()
 | 
				
			||||||
 | 
					//                    .map(ConsumptionAnalyzeEntity::getCurValue)
 | 
				
			||||||
 | 
					//                    .toArray(String[]::new);
 | 
				
			||||||
 | 
					            String[] lineInstantaneousMeterArr = getArr(efrMeterLineData, lineTimeStrArr); | 
				
			||||||
 | 
					//            String[] lineColdArr = getArr(coldLineData, lineTimeStrArr);
 | 
				
			||||||
 | 
					//            String[] lineCopArr = getArr(copLineData, lineTimeStrArr);
 | 
				
			||||||
 | 
					            String[] lineEfrColdArr = getArr(efrColdLineData, lineTimeStrArr); | 
				
			||||||
 | 
					            String[] lineCopArr = new String[efrMeterLineData.size()]; | 
				
			||||||
 | 
					            // 计算瞬时COP=制冷量/耗电量
 | 
				
			||||||
 | 
					            for (int i = 0; i < efrMeterLineData.size(); i++) { | 
				
			||||||
 | 
					                try { | 
				
			||||||
 | 
					                    double cold = Math.round(Double.parseDouble(lineEfrColdArr[i]) * 100) / 100.0; | 
				
			||||||
 | 
					                    double meter = Math.round(Double.parseDouble(lineInstantaneousMeterArr[i]) * 100) / 100.0; | 
				
			||||||
 | 
					                    double cop = Math.round((meter==0 ? 0.00 : cold/ meter) * 100) / 100.0; | 
				
			||||||
 | 
					                    lineCopArr[i] = String.valueOf(cop); | 
				
			||||||
 | 
					                } catch (NumberFormatException e) { | 
				
			||||||
 | 
					                    log.error("处理累计能耗异常==>",e); | 
				
			||||||
 | 
					                    throw new RuntimeException(e); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 折现图数据
 | 
				
			||||||
 | 
					            Map<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					            map.put("lineTimeStrArr", lineTimeStrArr); | 
				
			||||||
 | 
					//            map.put("lineMeterArr", lineMeterArr);
 | 
				
			||||||
 | 
					//            map.put("lineColdArr", lineColdArr);
 | 
				
			||||||
 | 
					            map.put("lineCopArr", lineCopArr); | 
				
			||||||
 | 
					            map.put("lineInstantaneousColdArr", lineEfrColdArr); | 
				
			||||||
 | 
					            map.put("lineInstantaneousMeterArr", lineInstantaneousMeterArr); | 
				
			||||||
 | 
					            latch.countDown(); | 
				
			||||||
 | 
					            return map; | 
				
			||||||
 | 
					        })); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            latch.await(); | 
				
			||||||
 | 
					        } catch (InterruptedException e) { | 
				
			||||||
 | 
					            throw new RuntimeException(e); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Map<String, Object> allData = new HashMap<>(); | 
				
			||||||
 | 
					        // 获取数据
 | 
				
			||||||
 | 
					        for (Future<Map<String, Object>> future : futures) { | 
				
			||||||
 | 
					            try { | 
				
			||||||
 | 
					                Map<String, Object> map = future.get(); | 
				
			||||||
 | 
					                if (null != map) { | 
				
			||||||
 | 
					                    allData.putAll(map); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } catch (InterruptedException | ExecutionException e) { | 
				
			||||||
 | 
					                throw new RuntimeException(e); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 组装赋值
 | 
				
			||||||
 | 
					        energyConsumptionDTO.setTitles(titleArr); | 
				
			||||||
 | 
					        energyConsumptionDTO.setTimes((String[]) allData.get("timeStrArr")); | 
				
			||||||
 | 
					        energyConsumptionDTO.setLineTimes((String[]) allData.get("lineTimeStrArr")); | 
				
			||||||
 | 
					        List<Map<String, Object>> listData = new ArrayList<>(); | 
				
			||||||
 | 
					        Map<String, Object> cold = new HashMap<>(); | 
				
			||||||
 | 
					        cold.put("cold", allData.get("coldArr")); | 
				
			||||||
 | 
					        listData.add(cold); | 
				
			||||||
 | 
					        Map<String, Object> meter = new HashMap<>(); | 
				
			||||||
 | 
					        meter.put("meter", allData.get("meterArr")); | 
				
			||||||
 | 
					        listData.add(meter); | 
				
			||||||
 | 
					        Map<String, Object> cop = new HashMap<>(); | 
				
			||||||
 | 
					        cop.put("cop", allData.get("copArr")); | 
				
			||||||
 | 
					        listData.add(cop); | 
				
			||||||
 | 
					        Map<String, Object> coldLine = new HashMap<>(); | 
				
			||||||
 | 
					        coldLine.put("lineCold", allData.get("lineColdArr")); | 
				
			||||||
 | 
					        listData.add(coldLine); | 
				
			||||||
 | 
					        Map<String, Object> meterLine = new HashMap<>(); | 
				
			||||||
 | 
					        meterLine.put("lineMeter", allData.get("lineMeterArr")); | 
				
			||||||
 | 
					        listData.add(meterLine); | 
				
			||||||
 | 
					        Map<String, Object> copLine = new HashMap<>(); | 
				
			||||||
 | 
					        copLine.put("lineCop",allData.get("lineCopArr")); | 
				
			||||||
 | 
					        listData.add(copLine); | 
				
			||||||
 | 
					        Map<String, Object> instantaneousColdLine = new HashMap<>(); | 
				
			||||||
 | 
					        instantaneousColdLine.put("lineInstantaneousCold",allData.get("lineInstantaneousColdArr")); | 
				
			||||||
 | 
					        listData.add(instantaneousColdLine); | 
				
			||||||
 | 
					        Map<String, Object> instantaneousMeterLine = new HashMap<>(); | 
				
			||||||
 | 
					        instantaneousMeterLine.put("lineInstantaneousMeter",allData.get("lineInstantaneousMeterArr")); | 
				
			||||||
 | 
					        listData.add(instantaneousMeterLine); | 
				
			||||||
 | 
					        energyConsumptionDTO.setData(listData); | 
				
			||||||
 | 
					        return AjaxResult.success(energyConsumptionDTO); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static String[] getArr(List<ConsumptionAnalyzeEntity> copLineData, String[] lineTimeStrArr) { | 
				
			||||||
 | 
					        String[] lineCopArr = new String[lineTimeStrArr.length]; | 
				
			||||||
 | 
					        for (int i = 0; i < lineTimeStrArr.length; i++) { | 
				
			||||||
 | 
					            int j = i; | 
				
			||||||
 | 
					            Optional<ConsumptionAnalyzeEntity> first = copLineData.stream().filter(s -> lineTimeStrArr[j].equalsIgnoreCase(s.getTimeStr())).findFirst(); | 
				
			||||||
 | 
					            if (first.isPresent()) { | 
				
			||||||
 | 
					                lineCopArr[i] = first.get().getCurValue(); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                lineCopArr[i] = "0.00"; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return lineCopArr; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public AjaxResult yoy(EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        // 获取今年的值
 | 
				
			||||||
 | 
					        List<ConsumptionAnalyzeEntity> consumptionAnalyzeEntities; | 
				
			||||||
 | 
					        String lastTableName = "data_"+vo.getTimeType(); | 
				
			||||||
 | 
					        String curTableName = "data_"+vo.getTimeType(); | 
				
			||||||
 | 
					        String startTime = vo.getStartTime(); | 
				
			||||||
 | 
					        String endTime = vo.getEndTime(); | 
				
			||||||
 | 
					        String deviceType = vo.getParamType(); | 
				
			||||||
 | 
					        if ("cop".equalsIgnoreCase(vo.getParamType())) { | 
				
			||||||
 | 
					            lastTableName = "data_min_cop"; | 
				
			||||||
 | 
					            curTableName = "data_min_cop"; | 
				
			||||||
 | 
					            deviceType = "system"; | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            lastTableName = lastTableName+startTime.substring(0,4); | 
				
			||||||
 | 
					            curTableName = curTableName+endTime.substring(0,4); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        String timeType = vo.getTimeType(); | 
				
			||||||
 | 
					        if (!(lastTableName.equalsIgnoreCase(curTableName)) && ("hour".equalsIgnoreCase(timeType) || "day".equalsIgnoreCase(timeType))) { | 
				
			||||||
 | 
					            // 多表
 | 
				
			||||||
 | 
					            // 获取上一期的时间
 | 
				
			||||||
 | 
					            startTime = DateUtils.yoyDate(startTime); | 
				
			||||||
 | 
					            endTime = DateUtils.yoyDate(endTime); | 
				
			||||||
 | 
					            String yoyLastTableName = lastTableName.substring(0, lastTableName.length() - 4) + startTime.substring(0,4); | 
				
			||||||
 | 
					            String yoyCurTableName = curTableName.substring(0, lastTableName.length() - 4) + endTime.substring(0,4); | 
				
			||||||
 | 
					            consumptionAnalyzeEntities = energyMapper.queryManyTableYoy(vo.getStartTime(), vo.getEndTime(), lastTableName, curTableName, | 
				
			||||||
 | 
					                    startTime, endTime, yoyLastTableName, yoyCurTableName, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); | 
				
			||||||
 | 
					        } else  { | 
				
			||||||
 | 
					            // 单表
 | 
				
			||||||
 | 
					            startTime = DateUtils.yoyDate(startTime); | 
				
			||||||
 | 
					            endTime = DateUtils.yoyDate(endTime); | 
				
			||||||
 | 
					            if (!"cop".equalsIgnoreCase(vo.getParamType())) { | 
				
			||||||
 | 
					                String lastTable = lastTableName.substring(0, lastTableName.length() - 4); | 
				
			||||||
 | 
					                if (("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType))) { | 
				
			||||||
 | 
					                    lastTableName = lastTable; | 
				
			||||||
 | 
					                    curTableName = curTableName.substring(0, curTableName.length() - 4); | 
				
			||||||
 | 
					                } else { | 
				
			||||||
 | 
					                    lastTableName = lastTable + startTime.substring(0, 4); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                deviceType = "system"; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            consumptionAnalyzeEntities = energyMapper.queryOneTableYoy(vo.getStartTime(), vo.getEndTime(), lastTableName, curTableName, | 
				
			||||||
 | 
					                    startTime, endTime, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return getConsumptionDTOHttpResult(consumptionAnalyzeEntities, "yoy"); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public AjaxResult mom(EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        List<ConsumptionAnalyzeEntity> consumptionAnalyzeEntities = null; | 
				
			||||||
 | 
					        // 开始时间和结束时间都往前-1月或者年
 | 
				
			||||||
 | 
					        String startTime = DateUtils.momDate(vo.getStartTime(), vo.getTimeType(), "start"); | 
				
			||||||
 | 
					        String endTime = DateUtils.momDate(vo.getEndTime(), vo.getTimeType(), "end"); | 
				
			||||||
 | 
					        String deviceType = vo.getParamType(); | 
				
			||||||
 | 
					        // 判断查询时间类型是month,year
 | 
				
			||||||
 | 
					        if ("month".equalsIgnoreCase(vo.getTimeType()) || "year".equalsIgnoreCase(vo.getTimeType())) { | 
				
			||||||
 | 
					            String tableName = "data_"+vo.getTimeType(); | 
				
			||||||
 | 
					            // 计算COP值(后期有一个表存储)
 | 
				
			||||||
 | 
					            if (!StringUtils.isBlank(vo.getParamType()) && vo.getParamType().equalsIgnoreCase("cop")) { | 
				
			||||||
 | 
					                tableName = "data_min_cop"; | 
				
			||||||
 | 
					                deviceType = "system"; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            consumptionAnalyzeEntities = energyMapper.queryMonthAndYearMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); | 
				
			||||||
 | 
					        } else { | 
				
			||||||
 | 
					            // 判斷是否需要進行連表查詢
 | 
				
			||||||
 | 
					            String tableName1 = "data_"+vo.getTimeType()+startTime.substring(0, 4); | 
				
			||||||
 | 
					            String tableName2 = "data_"+vo.getTimeType()+vo.getEndTime().substring(0, 4); | 
				
			||||||
 | 
					            // 计算COP值(后期有一个表存储)
 | 
				
			||||||
 | 
					            if (!StringUtils.isBlank(vo.getParamType()) && vo.getParamType().equalsIgnoreCase("cop")) { | 
				
			||||||
 | 
					                tableName1 = "data_min_cop"; | 
				
			||||||
 | 
					                tableName2 = "data_min_cop"; | 
				
			||||||
 | 
					                deviceType = "system"; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            if (tableName1.equalsIgnoreCase(tableName2)) { | 
				
			||||||
 | 
					                // 单表查询
 | 
				
			||||||
 | 
					                consumptionAnalyzeEntities = energyMapper.queryOneTableMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName1, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                // 多表查询
 | 
				
			||||||
 | 
					                consumptionAnalyzeEntities = energyMapper.queryManyTableMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName1, tableName2, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return getConsumptionDTOHttpResult(consumptionAnalyzeEntities, "mom"); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public AjaxResult yoyMom(EnergyConsumptionVO vo) { | 
				
			||||||
 | 
					        // 多线程分别求出yoy和mom
 | 
				
			||||||
 | 
					        ThreadPoolExecutor executor = EnergyThreadPoolService.getInstance(); | 
				
			||||||
 | 
					        CountDownLatch latch = new CountDownLatch(2); | 
				
			||||||
 | 
					        List<Future<Map<String, Object>>> futures = new ArrayList<>(); | 
				
			||||||
 | 
					        futures.add(executor.submit(() -> { | 
				
			||||||
 | 
					            Map<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					            map.put("yoy", yoy(vo)); | 
				
			||||||
 | 
					            latch.countDown(); | 
				
			||||||
 | 
					            return map; | 
				
			||||||
 | 
					        })); | 
				
			||||||
 | 
					        futures.add(executor.submit(() -> { | 
				
			||||||
 | 
					            Map<String, Object> map = new HashMap<>(); | 
				
			||||||
 | 
					            map.put("mom", mom(vo)); | 
				
			||||||
 | 
					            latch.countDown(); | 
				
			||||||
 | 
					            return map; | 
				
			||||||
 | 
					        })); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            latch.await(); | 
				
			||||||
 | 
					        } catch (InterruptedException e) { | 
				
			||||||
 | 
					            throw new RuntimeException(e); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        Map<String, Object> allData = new HashMap<>(); | 
				
			||||||
 | 
					        // 获取数据
 | 
				
			||||||
 | 
					        for (Future<Map<String, Object>> future : futures) { | 
				
			||||||
 | 
					            try { | 
				
			||||||
 | 
					                Map<String, Object> map = future.get(); | 
				
			||||||
 | 
					                if (null != map) { | 
				
			||||||
 | 
					                    allData.putAll(map); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } catch (InterruptedException | ExecutionException e) { | 
				
			||||||
 | 
					                throw new RuntimeException(e); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        // 封装数据
 | 
				
			||||||
 | 
					        if (allData.containsKey("yoy") && allData.containsKey("mom")) { | 
				
			||||||
 | 
					            AjaxResult yoy = (AjaxResult) allData.get("yoy"); | 
				
			||||||
 | 
					            AjaxResult mom = (AjaxResult) allData.get("mom"); | 
				
			||||||
 | 
					            if (yoy.isSuccess() && mom.isSuccess()) { | 
				
			||||||
 | 
					                EnergyConsumptionDTO yoyData = (EnergyConsumptionDTO) yoy.get("data"); | 
				
			||||||
 | 
					                EnergyConsumptionDTO momData = (EnergyConsumptionDTO) mom.get("data"); | 
				
			||||||
 | 
					                EnergyConsumptionDTO result = new EnergyConsumptionDTO(); | 
				
			||||||
 | 
					                result.setTitles(new String[]{"curValue", "lastValue", "yoy", "mom"}); | 
				
			||||||
 | 
					                result.setTimes(yoyData.getTimes()); | 
				
			||||||
 | 
					                result.setLineTimes(yoyData.getLineTimes()); | 
				
			||||||
 | 
					                List<Map<String, Object>> data = new ArrayList<>(); | 
				
			||||||
 | 
					                // 同比数据
 | 
				
			||||||
 | 
					                Map<String, Object> lastValueMap = new HashMap<>(); | 
				
			||||||
 | 
					                Map<String, Object> yoyMap = new HashMap<>(); | 
				
			||||||
 | 
					                for (int i = 0; i < yoyData.getData().size(); i++) { | 
				
			||||||
 | 
					                    if (yoyData.getData().get(i).containsKey("lastValue")) { | 
				
			||||||
 | 
					                        lastValueMap.put("lastValue", yoyData.getData().get(i).get("lastValue")); | 
				
			||||||
 | 
					                        data.add(lastValueMap); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                    if (yoyData.getData().get(i).containsKey("yoy")) { | 
				
			||||||
 | 
					                        yoyMap.put("yoy", yoyData.getData().get(i).get("yoy")); | 
				
			||||||
 | 
					                        data.add(yoyMap); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                // 环比数据
 | 
				
			||||||
 | 
					                Map<String, Object> curValMap = new HashMap<>(); | 
				
			||||||
 | 
					                Map<String, Object> momMap = new HashMap<>(); | 
				
			||||||
 | 
					                for (int i = 0; i < momData.getData().size(); i++) { | 
				
			||||||
 | 
					                    if (momData.getData().get(i).containsKey("curValue")) { | 
				
			||||||
 | 
					                        curValMap.put("curValue", momData.getData().get(i).get("curValue")); | 
				
			||||||
 | 
					                        data.add(curValMap); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                    if (momData.getData().get(i).containsKey("mom")) { | 
				
			||||||
 | 
					                        momMap.put("mom", momData.getData().get(i).get("mom")); | 
				
			||||||
 | 
					                        data.add(momMap); | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                result.setData(data); | 
				
			||||||
 | 
					                return AjaxResult.success(result); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return AjaxResult.success(null); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static AjaxResult getConsumptionDTOHttpResult(List<ConsumptionAnalyzeEntity> consumptionAnalyzeEntities, String compareType) { | 
				
			||||||
 | 
					        EnergyConsumptionDTO energyConsumptionDTO = new EnergyConsumptionDTO(); | 
				
			||||||
 | 
					        if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { | 
				
			||||||
 | 
					            return AjaxResult.success(); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        String[] lastValue = new String[consumptionAnalyzeEntities.size()]; | 
				
			||||||
 | 
					        String[] curValue = new String[consumptionAnalyzeEntities.size()]; | 
				
			||||||
 | 
					        String[] yoyValue = new String[consumptionAnalyzeEntities.size()]; | 
				
			||||||
 | 
					        String[] timeStrArr = new String[consumptionAnalyzeEntities.size()]; | 
				
			||||||
 | 
					        String[] titleArr = new String[]{"curValue", "lastValue", compareType}; | 
				
			||||||
 | 
					        for (int i = 0; i < consumptionAnalyzeEntities.size(); i++) { | 
				
			||||||
 | 
					            ConsumptionAnalyzeEntity entity = consumptionAnalyzeEntities.get(i); | 
				
			||||||
 | 
					            lastValue[i] = entity.getLastValue(); | 
				
			||||||
 | 
					            curValue[i] = entity.getCurValue(); | 
				
			||||||
 | 
					            if ("yoy".equalsIgnoreCase(compareType)) { | 
				
			||||||
 | 
					                yoyValue[i] = entity.getYoy(); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            if ("mom".equalsIgnoreCase(compareType)) { | 
				
			||||||
 | 
					                yoyValue[i] = entity.getMom(); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            timeStrArr[i] = entity.getTimeStr(); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        energyConsumptionDTO.setTitles(titleArr); | 
				
			||||||
 | 
					        energyConsumptionDTO.setTimes(timeStrArr); | 
				
			||||||
 | 
					        List<Map<String, Object>> listData = new ArrayList<>(); | 
				
			||||||
 | 
					        Map<String, Object> cur = new HashMap<>(); | 
				
			||||||
 | 
					        cur.put("curValue",curValue); | 
				
			||||||
 | 
					        listData.add(cur); | 
				
			||||||
 | 
					        Map<String, Object> last = new HashMap<>(); | 
				
			||||||
 | 
					        last.put("lastValue",lastValue); | 
				
			||||||
 | 
					        listData.add(last); | 
				
			||||||
 | 
					        Map<String, Object> yoy = new HashMap<>(); | 
				
			||||||
 | 
					        yoy.put(compareType,yoyValue); | 
				
			||||||
 | 
					        listData.add(yoy); | 
				
			||||||
 | 
					        energyConsumptionDTO.setData(listData); | 
				
			||||||
 | 
					        return AjaxResult.success(energyConsumptionDTO); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static String getTimeLen(String timeType) { | 
				
			||||||
 | 
					        String timeLen = ""; | 
				
			||||||
 | 
					        switch (timeType) { | 
				
			||||||
 | 
					            case "hour": | 
				
			||||||
 | 
					                timeLen = "13"; | 
				
			||||||
 | 
					                break; | 
				
			||||||
 | 
					            case "day": | 
				
			||||||
 | 
					                timeLen = "10"; | 
				
			||||||
 | 
					                break; | 
				
			||||||
 | 
					            case "month": | 
				
			||||||
 | 
					                timeLen = "7"; | 
				
			||||||
 | 
					                break; | 
				
			||||||
 | 
					            case "year": | 
				
			||||||
 | 
					                timeLen = "4"; | 
				
			||||||
 | 
					                break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return timeLen; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String queryCoolingData(String tableName, String timeString) { | 
				
			||||||
 | 
					        return energyMapper.queryCoolingData(tableName, timeString); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,803 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
				
			||||||
 | 
					<mapper namespace="com.mh.system.mapper.energy.EnergyMapper"> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <sql id="commonGroupSql"> | 
				
			||||||
 | 
					    <if test="timeType != null and timeType != '' and timeType == 'month'" > | 
				
			||||||
 | 
					        ,month(cur_time) | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    <if test="timeType != null and timeType != '' and timeType == 'day'" > | 
				
			||||||
 | 
					        ,month(cur_time),day(cur_time) | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    <if test="timeType != null and timeType != '' and timeType == 'hour'" > | 
				
			||||||
 | 
					        ,month(cur_time),day(cur_time),datepart(hour, cur_time) | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					  </sql> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <sql id="commonSelectSql"> | 
				
			||||||
 | 
					    <if test="timeType != null and timeType != '' and timeType == 'month'" > | 
				
			||||||
 | 
					        ,month(cur_time) as monthStr | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    <if test="timeType != null and timeType != '' and timeType == 'day'" > | 
				
			||||||
 | 
					        ,month(cur_time) as monthStr,day(cur_time) as dayStr | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    <if test="timeType != null and timeType != '' and timeType == 'hour'" > | 
				
			||||||
 | 
					        ,month(cur_time) as monthStr,day(cur_time) as dayStr,datepart(hour, cur_time) as hourStr | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					  </sql> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <sql id="commonLastGroupSql"> | 
				
			||||||
 | 
					        <if test="timeType != null and timeType != '' and timeType == 'month'" > | 
				
			||||||
 | 
					            ,month(cur_time) | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        <if test="timeType != null and timeType != '' and timeType == 'day'" > | 
				
			||||||
 | 
					            ,month(dateadd(day,1,cur_time)),day(dateadd(day,1,cur_time)) | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        <if test="timeType != null and timeType != '' and timeType == 'hour'" > | 
				
			||||||
 | 
					            ,month(dateadd(hour,1,cur_time)),day(dateadd(hour,1,cur_time)),datepart(hour, dateadd(hour,1,cur_time)) | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					    </sql> | 
				
			||||||
 | 
					    <sql id="commonLastSelectSql"> | 
				
			||||||
 | 
					        <if test="timeType != null and timeType != '' and timeType == 'month'" > | 
				
			||||||
 | 
					            ,month(cur_time) as monthStr | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        <if test="timeType != null and timeType != '' and timeType == 'day'" > | 
				
			||||||
 | 
					            ,month(dateadd(day,1,cur_time)) as monthStr,day(dateadd(day,1,cur_time)) as dayStr | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        <if test="timeType != null and timeType != '' and timeType == 'hour'" > | 
				
			||||||
 | 
					            ,month(dateadd(hour,1,cur_time)) as monthStr,day(dateadd(hour,1,cur_time)) as dayStr,datepart(hour, dateadd(hour,1,cur_time)) as hourStr | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					    </sql> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <sql id="commonYOYWhereSql"> | 
				
			||||||
 | 
					      <if test='timeType != null and timeType != "" and timeType == "month"'> | 
				
			||||||
 | 
					          and a.monthStr = b.monthStr | 
				
			||||||
 | 
					      </if> | 
				
			||||||
 | 
					      <if test='timeType != null and timeType != "" and timeType == "day"'> | 
				
			||||||
 | 
					          and a.monthStr = b.monthStr and a.dayStr = b.dayStr | 
				
			||||||
 | 
					      </if> | 
				
			||||||
 | 
					      <if test='timeType != null and timeType != "" and timeType == "hour"'> | 
				
			||||||
 | 
					          and a.monthStr = b.monthStr and a.dayStr = b.dayStr and a.hourStr = b.hourStr | 
				
			||||||
 | 
					      </if> | 
				
			||||||
 | 
					      order by timeStr | 
				
			||||||
 | 
					  </sql> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <select id="queryOneTableYoy" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					    select b.timeStr,b.deviceType,b.sumValue as curValue, a.sumValue as lastValue, | 
				
			||||||
 | 
					    case when a.sumValue > 0 then concat(convert(decimal(18,2),(b.sumValue - a.sumValue)/a.sumValue*100),'%') else '同期无数据' end yoy from (  | 
				
			||||||
 | 
					    select | 
				
			||||||
 | 
					      <choose> | 
				
			||||||
 | 
					          <when test="paramType != null and paramType != '' and paramType == 'system' "> | 
				
			||||||
 | 
					              convert(decimal(15,2),isnull(avg(case when calc_value != 0 then calc_value else null end),0)*1.0) as sumValue, | 
				
			||||||
 | 
					          </when> | 
				
			||||||
 | 
					          <otherwise> | 
				
			||||||
 | 
					              sum(calc_value) as sumValue, | 
				
			||||||
 | 
					          </otherwise> | 
				
			||||||
 | 
					      </choose> | 
				
			||||||
 | 
					        device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr, | 
				
			||||||
 | 
					    year(cur_time) as yearStr | 
				
			||||||
 | 
					    <include refid="commonSelectSql" /> | 
				
			||||||
 | 
					    from ${lastTableName} dh  | 
				
			||||||
 | 
					    where cur_time >= #{yoyStartTime} and cur_time <= #{yoyEndTime} | 
				
			||||||
 | 
					        and calc_value is not null | 
				
			||||||
 | 
					      <if test='paramType != null and paramType != "" and paramType != "system" '> | 
				
			||||||
 | 
					          and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					      </if> | 
				
			||||||
 | 
					    <if test='paramType != null and paramType != "" '> | 
				
			||||||
 | 
					       and device_type = #{paramType} | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    group by device_type,convert(varchar(${len}), cur_time, 120),year(cur_time) | 
				
			||||||
 | 
					    <include refid="commonGroupSql" /> | 
				
			||||||
 | 
					    ) a right join (  | 
				
			||||||
 | 
					    select | 
				
			||||||
 | 
					      <choose> | 
				
			||||||
 | 
					          <when test="paramType != null and paramType != '' and paramType == 'system' "> | 
				
			||||||
 | 
					              convert(decimal(15,2),isnull(avg(case when calc_value != 0 then calc_value else null end),0)*1.0) as sumValue, | 
				
			||||||
 | 
					          </when> | 
				
			||||||
 | 
					          <otherwise> | 
				
			||||||
 | 
					              sum(calc_value) as sumValue, | 
				
			||||||
 | 
					          </otherwise> | 
				
			||||||
 | 
					      </choose> | 
				
			||||||
 | 
					        device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr, | 
				
			||||||
 | 
					    year(cur_time) as yearStr | 
				
			||||||
 | 
					    <include refid="commonSelectSql" /> | 
				
			||||||
 | 
					    from ${curTableName} dh  | 
				
			||||||
 | 
					    where cur_time >= #{startTime} and cur_time <= #{endTime} | 
				
			||||||
 | 
					      and calc_value is not null | 
				
			||||||
 | 
					      <if test='paramType != null and paramType != "" and paramType != "system" '> | 
				
			||||||
 | 
					          and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					      </if> | 
				
			||||||
 | 
					    <if test='paramType != null and paramType != "" '> | 
				
			||||||
 | 
					       and device_type = #{paramType} | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    group by device_type,convert(varchar(${len}), cur_time, 120),year(cur_time) | 
				
			||||||
 | 
					    <include refid="commonGroupSql" /> | 
				
			||||||
 | 
					    ) b on a.yearStr+1 = b.yearStr | 
				
			||||||
 | 
					    <include refid="commonYOYWhereSql"/> | 
				
			||||||
 | 
					  </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <select id="queryManyTableYoy" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					    select b.timeStr,b.deviceType,b.sumValue as curValue, a.sumValue as lastValue, | 
				
			||||||
 | 
					    case when a.sumValue > 0 then concat(convert(decimal(18,2),(b.sumValue - a.sumValue)/a.sumValue*100),'%') else '同期无数据' end yoy from ( | 
				
			||||||
 | 
					    select sum(calc_value) as sumValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr, | 
				
			||||||
 | 
					    year(cur_time) as yearStr | 
				
			||||||
 | 
					    <include refid="commonSelectSql" /> | 
				
			||||||
 | 
					    from ${yoyLastTableName} dh | 
				
			||||||
 | 
					    where cur_time >= #{yoyStartTime} and cur_time <= #{yoyEndTime} | 
				
			||||||
 | 
					      and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					    <if test="paramType != null and paramType != '' "> | 
				
			||||||
 | 
					       and device_type = #{paramType} | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    group by device_type,convert(varchar(${len}), cur_time, 120),year(cur_time) | 
				
			||||||
 | 
					    <include refid="commonGroupSql" /> | 
				
			||||||
 | 
					    union all | 
				
			||||||
 | 
					    select sum(calc_value) as sumValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr, | 
				
			||||||
 | 
					    year(cur_time) as yearStr | 
				
			||||||
 | 
					    <include refid="commonSelectSql" /> | 
				
			||||||
 | 
					    from ${yoyCurTableName} dh | 
				
			||||||
 | 
					    where cur_time >= #{yoyStartTime} and cur_time <= #{yoyEndTime} | 
				
			||||||
 | 
					      and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					    <if test="paramType != null and paramType != '' "> | 
				
			||||||
 | 
					    and device_type = #{paramType} | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    group by device_type,convert(varchar(${len}), cur_time, 120),year(cur_time) | 
				
			||||||
 | 
					    <include refid="commonGroupSql" /> | 
				
			||||||
 | 
					    ) a right join ( | 
				
			||||||
 | 
					    select sum(calc_value) as sumValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr, | 
				
			||||||
 | 
					    year(cur_time) as yearStr | 
				
			||||||
 | 
					    <include refid="commonSelectSql" /> | 
				
			||||||
 | 
					    from ${lastTableName} dh | 
				
			||||||
 | 
					    where cur_time >= #{startTime} and cur_time <= #{endTime} | 
				
			||||||
 | 
					      and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					    <if test="paramType != null and paramType != '' "> | 
				
			||||||
 | 
					    and device_type = #{paramType} | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    group by device_type,convert(varchar(${len}), cur_time, 120),year(cur_time) | 
				
			||||||
 | 
					    <include refid="commonGroupSql" /> | 
				
			||||||
 | 
					    union all | 
				
			||||||
 | 
					    select sum(calc_value) as sumValue,device_type as deviceType,convert(varchar(${len}), cur_time, 120) as timeStr, | 
				
			||||||
 | 
					    year(cur_time) as yearStr | 
				
			||||||
 | 
					    <include refid="commonSelectSql" /> | 
				
			||||||
 | 
					    from ${curTableName} dh | 
				
			||||||
 | 
					    where cur_time >= #{startTime} and cur_time <= #{endTime} | 
				
			||||||
 | 
					      and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					    <if test="paramType != null and paramType != '' "> | 
				
			||||||
 | 
					        and device_type = #{paramType} | 
				
			||||||
 | 
					    </if> | 
				
			||||||
 | 
					    group by device_type,convert(varchar(${len}), cur_time, 120),year(cur_time) | 
				
			||||||
 | 
					    <include refid="commonGroupSql" /> | 
				
			||||||
 | 
					    ) b on a.yearStr+1 = b.yearStr | 
				
			||||||
 | 
					    <include refid="commonYOYWhereSql"/> | 
				
			||||||
 | 
					  </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <select id="queryMonthAndYearMom" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					    select | 
				
			||||||
 | 
					      t1.timeStr, | 
				
			||||||
 | 
					      t1.sumValue as curValue, | 
				
			||||||
 | 
					      t2.sumValue as lastValue, | 
				
			||||||
 | 
					      case when t2.sumValue > 0 then concat(convert(decimal(18,2),(t1.sumValue - t2.sumValue)/t2.sumValue*100),'%') else '上期无数据' end mom | 
				
			||||||
 | 
					    from | 
				
			||||||
 | 
					        ( | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					            convert(varchar(${len}), | 
				
			||||||
 | 
					            cur_time, | 
				
			||||||
 | 
					            120) as timeStr, | 
				
			||||||
 | 
					          <choose> | 
				
			||||||
 | 
					              <when test="paramType != null and paramType != '' and paramType == 'system' "> | 
				
			||||||
 | 
					                  convert(decimal(15,2),isnull(avg(case when calc_value != 0 then calc_value else null end),0)*1.0) as sumValue, | 
				
			||||||
 | 
					              </when> | 
				
			||||||
 | 
					              <otherwise> | 
				
			||||||
 | 
					                  sum(calc_value) as sumValue, | 
				
			||||||
 | 
					              </otherwise> | 
				
			||||||
 | 
					          </choose> | 
				
			||||||
 | 
					            year(cur_time) as yearStr | 
				
			||||||
 | 
					            <if test="timeType != null and timeType != '' and timeType == 'month'"> | 
				
			||||||
 | 
					                ,month(cur_time) as monthStr | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					            ${tableName} dh | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					            cur_time >= #{startTime} | 
				
			||||||
 | 
					            and cur_time <= #{endTime} | 
				
			||||||
 | 
					            and device_type = #{paramType} | 
				
			||||||
 | 
					            and calc_value is not null | 
				
			||||||
 | 
					        <if test='paramType != null and paramType != "" and paramType != "system" '> | 
				
			||||||
 | 
					            and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					            convert(varchar(${len}), | 
				
			||||||
 | 
					            cur_time, | 
				
			||||||
 | 
					            120), | 
				
			||||||
 | 
					            year(cur_time) | 
				
			||||||
 | 
					            <if test="timeType != null and timeType != '' and timeType == 'month'"> | 
				
			||||||
 | 
					                ,month(cur_time) | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					        ) t1 | 
				
			||||||
 | 
					    left join | 
				
			||||||
 | 
					        ( | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					            <choose> | 
				
			||||||
 | 
					                <when test="paramType != null and paramType != '' and paramType == 'system' "> | 
				
			||||||
 | 
					                    convert(decimal(15,2),isnull(avg(case when calc_value != 0 then calc_value else null end),0)*1.0) as sumValue, | 
				
			||||||
 | 
					                </when> | 
				
			||||||
 | 
					                <otherwise> | 
				
			||||||
 | 
					                    sum(calc_value) as sumValue, | 
				
			||||||
 | 
					                </otherwise> | 
				
			||||||
 | 
					            </choose> | 
				
			||||||
 | 
					            year(cur_time) as yearStr | 
				
			||||||
 | 
					            <if test="timeType != null and timeType != '' and timeType == 'month'"> | 
				
			||||||
 | 
					                ,month(cur_time) as monthStr | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					            ${tableName} dh | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					            cur_time >= #{momStartTime} | 
				
			||||||
 | 
					            and cur_time <= #{momEndTime} | 
				
			||||||
 | 
					            and device_type = #{paramType} | 
				
			||||||
 | 
					            and calc_value is not null | 
				
			||||||
 | 
					          <if test='paramType != null and paramType != "" and paramType != "system" '> | 
				
			||||||
 | 
					              and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					          </if> | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					            year(cur_time) | 
				
			||||||
 | 
					            <if test="timeType != null and timeType != '' and timeType == 'month'"> | 
				
			||||||
 | 
					                ,month(cur_time) | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					        ) t2 on | 
				
			||||||
 | 
					        <choose> | 
				
			||||||
 | 
					            <when test="timeType != null and timeType != '' and timeType == 'month'"> | 
				
			||||||
 | 
					                t1.monthStr = t2.monthStr + 1 | 
				
			||||||
 | 
					            </when> | 
				
			||||||
 | 
					            <otherwise> | 
				
			||||||
 | 
					                t1.yearStr = t2.yearStr + 1 | 
				
			||||||
 | 
					            </otherwise> | 
				
			||||||
 | 
					        </choose> | 
				
			||||||
 | 
					    order by timeStr | 
				
			||||||
 | 
					  </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!--    <select id="queryMonthAndYearMom" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity">--> | 
				
			||||||
 | 
					<!--        select--> | 
				
			||||||
 | 
					<!--        t1.timeStr,--> | 
				
			||||||
 | 
					<!--        t1.sumValue as curValue,--> | 
				
			||||||
 | 
					<!--        t2.sumValue as lastValue,--> | 
				
			||||||
 | 
					<!--        case when t2.sumValue > 0 then concat(convert(decimal(18,2),(t1.sumValue - t2.sumValue)/t2.sumValue*100),'%') else '上期无数据' end mom--> | 
				
			||||||
 | 
					<!--        from--> | 
				
			||||||
 | 
					<!--        (--> | 
				
			||||||
 | 
					<!--        select--> | 
				
			||||||
 | 
					<!--        convert(varchar(${len}),--> | 
				
			||||||
 | 
					<!--        cur_time,--> | 
				
			||||||
 | 
					<!--        120) as timeStr,--> | 
				
			||||||
 | 
					<!--        sum(calc_value) as sumValue,--> | 
				
			||||||
 | 
					<!--        year(cur_time) as yearStr--> | 
				
			||||||
 | 
					<!--        <if test="timeType != null and timeType != '' and timeType == 'month'">--> | 
				
			||||||
 | 
					<!--            ,month(cur_time) as monthStr--> | 
				
			||||||
 | 
					<!--        </if>--> | 
				
			||||||
 | 
					<!--        from--> | 
				
			||||||
 | 
					<!--        ${tableName}--> | 
				
			||||||
 | 
					<!--        where--> | 
				
			||||||
 | 
					<!--        cur_time >= #{startTime}--> | 
				
			||||||
 | 
					<!--        and cur_time <= #{endTime}--> | 
				
			||||||
 | 
					<!--        and device_type = #{paramType}--> | 
				
			||||||
 | 
					<!--        group by--> | 
				
			||||||
 | 
					<!--        convert(varchar(${len}),--> | 
				
			||||||
 | 
					<!--        cur_time,--> | 
				
			||||||
 | 
					<!--        120),--> | 
				
			||||||
 | 
					<!--        year(cur_time)--> | 
				
			||||||
 | 
					<!--        <if test="timeType != null and timeType != '' and timeType == 'month'">--> | 
				
			||||||
 | 
					<!--            ,month(cur_time)--> | 
				
			||||||
 | 
					<!--        </if>--> | 
				
			||||||
 | 
					<!--        ) t1--> | 
				
			||||||
 | 
					<!--        left join--> | 
				
			||||||
 | 
					<!--        (--> | 
				
			||||||
 | 
					<!--        select--> | 
				
			||||||
 | 
					<!--        sum(calc_value) as sumValue,--> | 
				
			||||||
 | 
					<!--        year(cur_time) as yearStr--> | 
				
			||||||
 | 
					<!--        <if test="timeType != null and timeType != '' and timeType == 'month'">--> | 
				
			||||||
 | 
					<!--            ,month(cur_time) as monthStr--> | 
				
			||||||
 | 
					<!--        </if>--> | 
				
			||||||
 | 
					<!--        from--> | 
				
			||||||
 | 
					<!--        ${tableName}--> | 
				
			||||||
 | 
					<!--        where--> | 
				
			||||||
 | 
					<!--        cur_time >= #{momStartTime}--> | 
				
			||||||
 | 
					<!--        and cur_time <= #{momEndTime}--> | 
				
			||||||
 | 
					<!--        and device_type = #{paramType}--> | 
				
			||||||
 | 
					<!--        group by--> | 
				
			||||||
 | 
					<!--        year(cur_time)--> | 
				
			||||||
 | 
					<!--        <if test="timeType != null and timeType != '' and timeType == 'month'">--> | 
				
			||||||
 | 
					<!--            ,month(cur_time)--> | 
				
			||||||
 | 
					<!--        </if>--> | 
				
			||||||
 | 
					<!--        ) t2 on--> | 
				
			||||||
 | 
					<!--        <choose>--> | 
				
			||||||
 | 
					<!--            <when test="timeType != null and timeType != '' and timeType == 'month'">--> | 
				
			||||||
 | 
					<!--                t1.monthStr = t2.monthStr + 1--> | 
				
			||||||
 | 
					<!--            </when>--> | 
				
			||||||
 | 
					<!--            <otherwise>--> | 
				
			||||||
 | 
					<!--                t1.yearStr = t2.yearStr + 1--> | 
				
			||||||
 | 
					<!--            </otherwise>--> | 
				
			||||||
 | 
					<!--        </choose>--> | 
				
			||||||
 | 
					<!--        order by timeStr--> | 
				
			||||||
 | 
					<!--    </select>--> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="queryOneTableMom" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        t1.timeStr, | 
				
			||||||
 | 
					        t1.sumValue as curValue, | 
				
			||||||
 | 
					        t2.sumValue as lastValue, | 
				
			||||||
 | 
					        case when t2.sumValue > 0 then concat(convert(decimal(18,2),(t1.sumValue - t2.sumValue)/t2.sumValue*100),'%') else '上期无数据' end mom | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ( | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        convert(varchar(${len}), | 
				
			||||||
 | 
					        cur_time, | 
				
			||||||
 | 
					        120) as timeStr, | 
				
			||||||
 | 
					        <choose> | 
				
			||||||
 | 
					            <when test="paramType != null and paramType != '' and paramType == 'system' "> | 
				
			||||||
 | 
					                convert(decimal(15,2),isnull(avg(case when calc_value != 0 then calc_value else null end),0)*1.0) as sumValue, | 
				
			||||||
 | 
					            </when> | 
				
			||||||
 | 
					            <otherwise> | 
				
			||||||
 | 
					                sum(calc_value) as sumValue, | 
				
			||||||
 | 
					            </otherwise> | 
				
			||||||
 | 
					        </choose> | 
				
			||||||
 | 
					        year(cur_time) as yearStr | 
				
			||||||
 | 
					        <include refid="commonSelectSql"/> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ${tableName} dh | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        cur_time >= #{startTime} | 
				
			||||||
 | 
					        and cur_time <= #{endTime} | 
				
			||||||
 | 
					        and device_type = #{paramType} | 
				
			||||||
 | 
					        and calc_value is not null | 
				
			||||||
 | 
					        <if test="paramType != null and paramType != '' and paramType != 'system'"> | 
				
			||||||
 | 
					            and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					        convert(varchar(${len}), | 
				
			||||||
 | 
					        cur_time, | 
				
			||||||
 | 
					        120), | 
				
			||||||
 | 
					        year(cur_time) | 
				
			||||||
 | 
					        <include refid="commonGroupSql"/> | 
				
			||||||
 | 
					        ) t1 | 
				
			||||||
 | 
					        left join | 
				
			||||||
 | 
					        ( | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        <choose> | 
				
			||||||
 | 
					            <when test="paramType != null and paramType != '' and paramType == 'system' "> | 
				
			||||||
 | 
					                convert(decimal(15,2),isnull(avg(case when calc_value != 0 then calc_value else null end),0)*1.0) as sumValue, | 
				
			||||||
 | 
					            </when> | 
				
			||||||
 | 
					            <otherwise> | 
				
			||||||
 | 
					                sum(calc_value) as sumValue, | 
				
			||||||
 | 
					            </otherwise> | 
				
			||||||
 | 
					        </choose> | 
				
			||||||
 | 
					        year(cur_time) as yearStr | 
				
			||||||
 | 
					        <include refid="commonLastSelectSql"/> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ${tableName} dh | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        cur_time >= #{momStartTime} | 
				
			||||||
 | 
					        and cur_time <= #{momEndTime} | 
				
			||||||
 | 
					        and device_type = #{paramType} | 
				
			||||||
 | 
					        and calc_value is not null | 
				
			||||||
 | 
					        <if test="paramType != null and paramType != '' and paramType != 'system'"> | 
				
			||||||
 | 
					            and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					        year(cur_time) | 
				
			||||||
 | 
					        <include refid="commonLastGroupSql"/> | 
				
			||||||
 | 
					        ) t2 on | 
				
			||||||
 | 
					        <choose> | 
				
			||||||
 | 
					            <when test="timeType != null and timeType != '' and timeType == 'day'"> | 
				
			||||||
 | 
					                t1.yearStr = t2.yearStr and t1.monthStr = t2.monthStr and t1.dayStr = t2.dayStr | 
				
			||||||
 | 
					            </when> | 
				
			||||||
 | 
					            <otherwise> | 
				
			||||||
 | 
					                t1.yearStr = t2.yearStr and t1.monthStr = t2.monthStr and t1.dayStr = t2.dayStr and t1.hourStr = t2.hourStr | 
				
			||||||
 | 
					            </otherwise> | 
				
			||||||
 | 
					        </choose> | 
				
			||||||
 | 
					        order by timeStr | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="queryManyTableMom" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        t1.timeStr, | 
				
			||||||
 | 
					        t1.sumValue as curValue, | 
				
			||||||
 | 
					        t2.sumValue as lastValue, | 
				
			||||||
 | 
					        case when t2.sumValue > 0 then concat(convert(decimal(18,2),(t1.sumValue - t2.sumValue)/t2.sumValue*100),'%') else '上期无数据' end mom | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ( | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        convert(varchar(${len}), | 
				
			||||||
 | 
					        cur_time, | 
				
			||||||
 | 
					        120) as timeStr, | 
				
			||||||
 | 
					        sum(calc_value) as sumValue, | 
				
			||||||
 | 
					        year(cur_time) as yearStr | 
				
			||||||
 | 
					        <include refid="commonSelectSql"/> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ${tableName1} | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        cur_time >= #{startTime} | 
				
			||||||
 | 
					        and cur_time <= #{endTime} | 
				
			||||||
 | 
					        and device_type = #{paramType} | 
				
			||||||
 | 
					        and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = device_num) | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					        convert(varchar(${len}), | 
				
			||||||
 | 
					        cur_time, | 
				
			||||||
 | 
					        120), | 
				
			||||||
 | 
					        year(cur_time) | 
				
			||||||
 | 
					        <include refid="commonGroupSql"/> | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        convert(varchar(${len}), | 
				
			||||||
 | 
					        cur_time, | 
				
			||||||
 | 
					        120) as timeStr, | 
				
			||||||
 | 
					        sum(calc_value) as sumValue, | 
				
			||||||
 | 
					        year(cur_time) as yearStr | 
				
			||||||
 | 
					        <include refid="commonSelectSql"/> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ${tableName2} dh | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        cur_time >= #{startTime} | 
				
			||||||
 | 
					        and cur_time <= #{endTime} | 
				
			||||||
 | 
					        and device_type = #{paramType} | 
				
			||||||
 | 
					        and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					        convert(varchar(${len}), | 
				
			||||||
 | 
					        cur_time, | 
				
			||||||
 | 
					        120), | 
				
			||||||
 | 
					        year(cur_time) | 
				
			||||||
 | 
					        <include refid="commonGroupSql"/> | 
				
			||||||
 | 
					        ) t1 | 
				
			||||||
 | 
					        left join | 
				
			||||||
 | 
					        ( | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        sum(calc_value) as sumValue, | 
				
			||||||
 | 
					        year(cur_time) as yearStr | 
				
			||||||
 | 
					        <include refid="commonLastSelectSql"/> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ${tableName1} | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        cur_time >= #{momStartTime} | 
				
			||||||
 | 
					        and cur_time <= #{momEndTime} | 
				
			||||||
 | 
					        and device_type = #{paramType} | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					        year(cur_time) | 
				
			||||||
 | 
					        <include refid="commonLastGroupSql"/> | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        sum(calc_value) as sumValue, | 
				
			||||||
 | 
					        year(cur_time) as yearStr | 
				
			||||||
 | 
					        <include refid="commonLastSelectSql"/> | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ${tableName2} dh | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        cur_time >= #{momStartTime} | 
				
			||||||
 | 
					        and cur_time <= #{momEndTime} | 
				
			||||||
 | 
					        and device_type = #{paramType} | 
				
			||||||
 | 
					        and exists(select 1 from device_manage dm where dm.grade between 40 and 50 and dm.device_num = dh.device_num) | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					        year(cur_time) | 
				
			||||||
 | 
					        <include refid="commonLastGroupSql"/> | 
				
			||||||
 | 
					        ) t2 on | 
				
			||||||
 | 
					        <choose> | 
				
			||||||
 | 
					            <when test="timeType != null and timeType != '' and timeType == 'day'"> | 
				
			||||||
 | 
					                t1.yearStr = t2.yearStr and t1.monthStr = t2.monthStr and t1.dayStr = t2.dayStr | 
				
			||||||
 | 
					            </when> | 
				
			||||||
 | 
					            <otherwise> | 
				
			||||||
 | 
					                t1.yearStr = t2.yearStr and t1.monthStr = t2.monthStr and t1.dayStr = t2.dayStr and t1.hourStr = t2.hourStr | 
				
			||||||
 | 
					            </otherwise> | 
				
			||||||
 | 
					        </choose> | 
				
			||||||
 | 
					        order by timeStr | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="queryDeviceOneTable" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					          sum(calc_value) as curValue, | 
				
			||||||
 | 
					          device_type as deviceType, | 
				
			||||||
 | 
					          convert(varchar(${len}), | 
				
			||||||
 | 
					          cur_time, | 
				
			||||||
 | 
					          120) as timeStr | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					          ${curTableName} dy | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					          cur_time >= #{startTime} | 
				
			||||||
 | 
					          and cur_time <= #{endTime} | 
				
			||||||
 | 
					          and device_type = 'meter' | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					          select | 
				
			||||||
 | 
					            1 | 
				
			||||||
 | 
					          from | 
				
			||||||
 | 
					            device_manage | 
				
			||||||
 | 
					          where | 
				
			||||||
 | 
					            device_num = dy.device_num | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'chiller'"> | 
				
			||||||
 | 
					                and grade < 10 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'chilledWaterPump'"> | 
				
			||||||
 | 
					                and grade < 20 and grade >=10 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'coolingPump'"> | 
				
			||||||
 | 
					                and grade < 30 and grade >=20 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'coolingTower'"> | 
				
			||||||
 | 
					                and grade < 40 and grade >=30 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					          ) | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					          device_type, | 
				
			||||||
 | 
					          convert(varchar(${len}), | 
				
			||||||
 | 
					          cur_time, | 
				
			||||||
 | 
					          120) | 
				
			||||||
 | 
					        order by timeStr | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="queryDeviceManyTable" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					        <if test="lastTableName != curTableName"> | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					              sum(calc_value) as curValue, | 
				
			||||||
 | 
					              convert(varchar(${len}), | 
				
			||||||
 | 
					              cur_time, | 
				
			||||||
 | 
					              120) as timeStr | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					              ${lastTableName} dy | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					              cur_time >= #{startTime} | 
				
			||||||
 | 
					              and cur_time <= #{endTime} | 
				
			||||||
 | 
					              and device_type = 'meter' | 
				
			||||||
 | 
					              and exists ( | 
				
			||||||
 | 
					              select | 
				
			||||||
 | 
					                1 | 
				
			||||||
 | 
					              from | 
				
			||||||
 | 
					                device_manage | 
				
			||||||
 | 
					              where | 
				
			||||||
 | 
					                device_num = dy.device_num | 
				
			||||||
 | 
					                <if test="deviceType != null and deviceType != '' and deviceType == 'chiller'"> | 
				
			||||||
 | 
					                    and grade < 10 | 
				
			||||||
 | 
					                </if> | 
				
			||||||
 | 
					                <if test="deviceType != null and deviceType != '' and deviceType == 'chilledWaterPump'"> | 
				
			||||||
 | 
					                    and grade < 20 and grade >=10 | 
				
			||||||
 | 
					                </if> | 
				
			||||||
 | 
					                <if test="deviceType != null and deviceType != '' and deviceType == 'coolingPump'"> | 
				
			||||||
 | 
					                    and grade < 30 and grade >=20 | 
				
			||||||
 | 
					                </if> | 
				
			||||||
 | 
					                <if test="deviceType != null and deviceType != '' and deviceType == 'coolingTower'"> | 
				
			||||||
 | 
					                    and grade < 40 and grade >=30 | 
				
			||||||
 | 
					                </if> | 
				
			||||||
 | 
					              ) | 
				
			||||||
 | 
					            group by | 
				
			||||||
 | 
					              convert(varchar(${len}), | 
				
			||||||
 | 
					              cur_time, | 
				
			||||||
 | 
					              120) | 
				
			||||||
 | 
					            union all | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					          sum(calc_value) as curValue, | 
				
			||||||
 | 
					          convert(varchar(${len}), | 
				
			||||||
 | 
					          cur_time, | 
				
			||||||
 | 
					          120) as timeStr | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					          ${curTableName} dy | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					          cur_time >= #{startTime} | 
				
			||||||
 | 
					          and cur_time <= #{endTime} | 
				
			||||||
 | 
					          and device_type = 'meter' | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					          select | 
				
			||||||
 | 
					            1 | 
				
			||||||
 | 
					          from | 
				
			||||||
 | 
					            device_manage | 
				
			||||||
 | 
					          where | 
				
			||||||
 | 
					            device_num = dy.device_num | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'chiller'"> | 
				
			||||||
 | 
					                and grade < 10 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'chilledWaterPump'"> | 
				
			||||||
 | 
					                and grade < 20 and grade >=10 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'coolingPump'"> | 
				
			||||||
 | 
					                and grade < 30 and grade >=20 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'coolingTower'"> | 
				
			||||||
 | 
					                and grade < 40 and grade >=30 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					          ) | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					          convert(varchar(${len}), | 
				
			||||||
 | 
					          cur_time, | 
				
			||||||
 | 
					          120) | 
				
			||||||
 | 
					        order by timeStr | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="queryLineDataSysByOne" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					        select sum(isnull(calc_value,0.00)) as curValue, 'efrMeter' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${curTable} dy | 
				
			||||||
 | 
					        where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					                1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					                device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					                device_num = dy.device_num and grade < 150 and grade >=140 | 
				
			||||||
 | 
					        ) | 
				
			||||||
 | 
					        and dy.device_type = 'meter' | 
				
			||||||
 | 
					        group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select avg(isnull(calc_value,0.00)) as curValue, 'efrCloud' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${curTable} dy | 
				
			||||||
 | 
					        where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					                1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					                device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					                device_num = dy.device_num and grade < 150 and grade >=140 | 
				
			||||||
 | 
					        ) | 
				
			||||||
 | 
					        and dy.device_type = 'cloud' | 
				
			||||||
 | 
					        group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select sum(calc_value) as curValue,device_type as deviceType, convert(varchar(16),cur_time,20) as timeStr from ${curTable} dy | 
				
			||||||
 | 
					         where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					            and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					            1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					            device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					            device_num = dy.device_num and grade < 50 and grade >=40 | 
				
			||||||
 | 
					            ) | 
				
			||||||
 | 
					         group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select avg(isnull(calc_value,0.00)) as curValue, 'cop' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${curCopTable} | 
				
			||||||
 | 
					         where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					         and device_type = 'system' | 
				
			||||||
 | 
					         group by device_type, cur_time | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="queryLineDataSysByMany" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					        select sum(isnull(calc_value,0.00)) as curValue, 'efrMeter' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${lastTable} dy | 
				
			||||||
 | 
					        where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					                1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					                device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					                device_num = dy.device_num and grade < 150 and grade >=140 | 
				
			||||||
 | 
					        ) | 
				
			||||||
 | 
					        and dy.device_type = 'meter' | 
				
			||||||
 | 
					        group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select sum(isnull(calc_value,0.00)) as curValue, 'efrMeter' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${curTable} dt | 
				
			||||||
 | 
					        where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					                1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					                device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					                device_num = dt.device_num and grade < 150 and grade >=140 | 
				
			||||||
 | 
					        ) | 
				
			||||||
 | 
					        and dy.device_type = 'meter' | 
				
			||||||
 | 
					        group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select sum(isnull(calc_value,0.00)) as curValue, 'efrCloud' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${lastTable} dy | 
				
			||||||
 | 
					        where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					                1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					                device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					                device_num = dy.device_num and grade < 150 and grade >=140 | 
				
			||||||
 | 
					        ) | 
				
			||||||
 | 
					        and dy.device_type = 'cloud' | 
				
			||||||
 | 
					        group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select sum(isnull(calc_value,0.00)) as curValue, 'efrCloud' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${curTable} dt | 
				
			||||||
 | 
					        where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					          and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					                1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					                device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					                device_num = dt.device_num and grade < 150 and grade >=140 | 
				
			||||||
 | 
					        ) | 
				
			||||||
 | 
					        and dy.device_type = 'cloud' | 
				
			||||||
 | 
					        group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select sum(calc_value) as curValue,device_type as deviceType, convert(varchar(16),cur_time,20) as timeStr from ${lastTable} dy | 
				
			||||||
 | 
					         where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					           and exists ( | 
				
			||||||
 | 
					             select | 
				
			||||||
 | 
					                 1 | 
				
			||||||
 | 
					             from | 
				
			||||||
 | 
					                 device_manage | 
				
			||||||
 | 
					             where | 
				
			||||||
 | 
					                 device_num = dy.device_num and grade < 50 and grade >=40 | 
				
			||||||
 | 
					         ) | 
				
			||||||
 | 
					         group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select sum(calc_value) as curValue,device_type as deviceType, convert(varchar(16),cur_time,20) as timeStr from ${curTable} dt | 
				
			||||||
 | 
					         where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					           and exists ( | 
				
			||||||
 | 
					             select | 
				
			||||||
 | 
					                 1 | 
				
			||||||
 | 
					             from | 
				
			||||||
 | 
					                 device_manage | 
				
			||||||
 | 
					             where | 
				
			||||||
 | 
					                 device_num = dt.device_num and grade < 50 and grade >=40 | 
				
			||||||
 | 
					         ) | 
				
			||||||
 | 
					         group by device_type, cur_time | 
				
			||||||
 | 
					        union all | 
				
			||||||
 | 
					        select avg(isnull(calc_value,0.00)) as curValue, 'cop' as device_type, convert(varchar(16),cur_time,20) as timeStr from ${lastCopTable} | 
				
			||||||
 | 
					         where cur_time >= #{startTime} and cur_time  <= #{endTime} | 
				
			||||||
 | 
					         and device_type = 'system' | 
				
			||||||
 | 
					         group by device_type, cur_time | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <select id="queryDeviceLineManyTable" resultType="com.mh.common.core.domain.entity.ConsumptionAnalyzeEntity"> | 
				
			||||||
 | 
					        <if test="lastTableName != curTableName"> | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					            sum(calc_value) as curValue, | 
				
			||||||
 | 
					            cur_time as timeStr | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					            ${lastTableName} dy | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					            cur_time >= #{startTime} | 
				
			||||||
 | 
					            and cur_time <= #{endTime} | 
				
			||||||
 | 
					            and device_type = 'meter' | 
				
			||||||
 | 
					            and exists ( | 
				
			||||||
 | 
					            select | 
				
			||||||
 | 
					            1 | 
				
			||||||
 | 
					            from | 
				
			||||||
 | 
					            device_manage | 
				
			||||||
 | 
					            where | 
				
			||||||
 | 
					            device_num = dy.device_num | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'chiller'"> | 
				
			||||||
 | 
					                and grade < 10 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'chilledWaterPump'"> | 
				
			||||||
 | 
					                and grade < 20 and grade >=10 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'coolingPump'"> | 
				
			||||||
 | 
					                and grade < 30 and grade >=20 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            <if test="deviceType != null and deviceType != '' and deviceType == 'coolingTower'"> | 
				
			||||||
 | 
					                and grade < 40 and grade >=30 | 
				
			||||||
 | 
					            </if> | 
				
			||||||
 | 
					            ) | 
				
			||||||
 | 
					            group by cur_time | 
				
			||||||
 | 
					            union all | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        sum(calc_value) as curValue, | 
				
			||||||
 | 
					        cur_time as timeStr | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        ${curTableName} dy | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        cur_time >= #{startTime} | 
				
			||||||
 | 
					        and cur_time <= #{endTime} | 
				
			||||||
 | 
					        and device_type = 'meter' | 
				
			||||||
 | 
					        and exists ( | 
				
			||||||
 | 
					        select | 
				
			||||||
 | 
					        1 | 
				
			||||||
 | 
					        from | 
				
			||||||
 | 
					        device_manage | 
				
			||||||
 | 
					        where | 
				
			||||||
 | 
					        device_num = dy.device_num | 
				
			||||||
 | 
					        <if test="deviceType != null and deviceType != '' and deviceType == 'chiller'"> | 
				
			||||||
 | 
					            and grade < 10 | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        <if test="deviceType != null and deviceType != '' and deviceType == 'chilledWaterPump'"> | 
				
			||||||
 | 
					            and grade < 20 and grade >=10 | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        <if test="deviceType != null and deviceType != '' and deviceType == 'coolingPump'"> | 
				
			||||||
 | 
					            and grade < 30 and grade >=20 | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        <if test="deviceType != null and deviceType != '' and deviceType == 'coolingTower'"> | 
				
			||||||
 | 
					            and grade < 40 and grade >=30 | 
				
			||||||
 | 
					        </if> | 
				
			||||||
 | 
					        ) | 
				
			||||||
 | 
					        group by | 
				
			||||||
 | 
					        cur_time | 
				
			||||||
 | 
					        order by timeStr | 
				
			||||||
 | 
					    </select> | 
				
			||||||
 | 
					</mapper> | 
				
			||||||
@ -0,0 +1,153 @@ | 
				
			|||||||
 | 
					CREATE OR REPLACE FUNCTION pro_create_chillers_table() | 
				
			||||||
 | 
					RETURNS VOID AS $$ | 
				
			||||||
 | 
					DECLARE | 
				
			||||||
 | 
					year VARCHAR(4); | 
				
			||||||
 | 
					    sqlStr TEXT; | 
				
			||||||
 | 
					    table_name VARCHAR(100); | 
				
			||||||
 | 
					    is_exists INTEGER; | 
				
			||||||
 | 
					BEGIN | 
				
			||||||
 | 
					    -- 获取当前年份 | 
				
			||||||
 | 
					year := TO_CHAR(CURRENT_DATE, 'YYYY'); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在表 chillers_data_min + year | 
				
			||||||
 | 
					    table_name := 'chillers_data_min' || year; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            collection_num VARCHAR(20), | 
				
			||||||
 | 
					            register_address VARCHAR(50), | 
				
			||||||
 | 
					            register_name VARCHAR(50), | 
				
			||||||
 | 
					            fun_code VARCHAR(10), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time TIMESTAMP, | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time TIMESTAMP, | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            local_time TIMESTAMP, | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            ddc_addr VARCHAR(50), | 
				
			||||||
 | 
					            register_id INTEGER | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在表 chillers_data_hour + year | 
				
			||||||
 | 
					    table_name := 'chillers_data_hour' || year; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            collection_num VARCHAR(20), | 
				
			||||||
 | 
					            register_address VARCHAR(50), | 
				
			||||||
 | 
					            register_name VARCHAR(50), | 
				
			||||||
 | 
					            fun_code VARCHAR(10), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time VARCHAR(13), | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time VARCHAR(13), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            local_time TIMESTAMP, | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            ddc_addr VARCHAR(50), | 
				
			||||||
 | 
					            register_id INTEGER | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在表 chillers_data_day + year | 
				
			||||||
 | 
					    table_name := 'chillers_data_day' || year; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            collection_num VARCHAR(20), | 
				
			||||||
 | 
					            register_address VARCHAR(50), | 
				
			||||||
 | 
					            register_name VARCHAR(50), | 
				
			||||||
 | 
					            fun_code VARCHAR(10), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time VARCHAR(10), | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time VARCHAR(10), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            local_time TIMESTAMP, | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            ddc_addr VARCHAR(50), | 
				
			||||||
 | 
					            register_id INTEGER | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- 判断是否存在表 chillers_data_month | 
				
			||||||
 | 
					    table_name := 'chillers_data_month'; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            collection_num VARCHAR(20), | 
				
			||||||
 | 
					            register_address VARCHAR(50), | 
				
			||||||
 | 
					            register_name VARCHAR(50), | 
				
			||||||
 | 
					            fun_code VARCHAR(10), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time VARCHAR(10), | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time VARCHAR(10), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            local_time TIMESTAMP, | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            ddc_addr VARCHAR(50), | 
				
			||||||
 | 
					            register_id INTEGER | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- 判断是否存在表 chillers_data_year | 
				
			||||||
 | 
					    table_name := 'chillers_data_year'; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            collection_num VARCHAR(20), | 
				
			||||||
 | 
					            register_address VARCHAR(50), | 
				
			||||||
 | 
					            register_name VARCHAR(50), | 
				
			||||||
 | 
					            fun_code VARCHAR(10), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time VARCHAR(10), | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time VARCHAR(10), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            local_time TIMESTAMP, | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            ddc_addr VARCHAR(50), | 
				
			||||||
 | 
					            register_id INTEGER | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END; | 
				
			||||||
 | 
					$$ LANGUAGE plpgsql; | 
				
			||||||
@ -0,0 +1,133 @@ | 
				
			|||||||
 | 
					CREATE OR REPLACE FUNCTION pro_create_table() | 
				
			||||||
 | 
					RETURNS VOID AS $$ | 
				
			||||||
 | 
					DECLARE | 
				
			||||||
 | 
					year VARCHAR(4); | 
				
			||||||
 | 
					    sqlStr TEXT; | 
				
			||||||
 | 
					    table_name VARCHAR(100); | 
				
			||||||
 | 
					    is_exists INTEGER; | 
				
			||||||
 | 
					BEGIN | 
				
			||||||
 | 
					    -- 获取当前年份 | 
				
			||||||
 | 
					year := TO_CHAR(CURRENT_DATE, 'YYYY'); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在 data_min + 当前年份 的表 | 
				
			||||||
 | 
					    table_name := 'data_min' || year; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_type VARCHAR(100), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time TIMESTAMP, | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time TIMESTAMP, | 
				
			||||||
 | 
					            used_value NUMERIC(24,2), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            UNIQUE (device_num, cur_time) | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在 data_hour + 当前年份 的表 | 
				
			||||||
 | 
					    table_name := 'data_hour' || year; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_type VARCHAR(100), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time TIMESTAMP, | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time TIMESTAMP, | 
				
			||||||
 | 
					            used_value NUMERIC(24,2), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            UNIQUE (device_num, cur_time) | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在 data_day + 当前年份 的表 | 
				
			||||||
 | 
					    table_name := 'data_day' || year; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_type VARCHAR(100), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time TIMESTAMP, | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time TIMESTAMP, | 
				
			||||||
 | 
					            used_value NUMERIC(24,2), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            UNIQUE (device_num, cur_time) | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在 data_month 的表 | 
				
			||||||
 | 
					    table_name := 'data_month'; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_type VARCHAR(100), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time TIMESTAMP, | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time TIMESTAMP, | 
				
			||||||
 | 
					            used_value NUMERIC(24,2), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            UNIQUE (device_num, cur_time) | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- 判断是否存在 data_year 的表 | 
				
			||||||
 | 
					    table_name := 'data_year'; | 
				
			||||||
 | 
					SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name; | 
				
			||||||
 | 
					IF is_exists = 0 THEN | 
				
			||||||
 | 
					        sqlStr := 'CREATE TABLE ' || table_name || ' ( | 
				
			||||||
 | 
					            id BIGSERIAL PRIMARY KEY, | 
				
			||||||
 | 
					            device_num VARCHAR(20), | 
				
			||||||
 | 
					            device_code VARCHAR(20), | 
				
			||||||
 | 
					            device_type VARCHAR(100), | 
				
			||||||
 | 
					            last_value NUMERIC(24,2), | 
				
			||||||
 | 
					            last_time TIMESTAMP, | 
				
			||||||
 | 
					            cur_value NUMERIC(24,2), | 
				
			||||||
 | 
					            cur_time TIMESTAMP, | 
				
			||||||
 | 
					            used_value NUMERIC(24,2), | 
				
			||||||
 | 
					            ratio INTEGER, | 
				
			||||||
 | 
					            calc_value NUMERIC(24,2), | 
				
			||||||
 | 
					            grade INTEGER, | 
				
			||||||
 | 
					            UNIQUE (device_num, cur_time) | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
				
			||||||
 | 
					        RAISE NOTICE '%', sqlStr; | 
				
			||||||
 | 
					EXECUTE sqlStr; | 
				
			||||||
 | 
					END IF; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					END; | 
				
			||||||
 | 
					$$ LANGUAGE plpgsql; | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue