lxw
2022-12-21 108da8c66924e7fc4015a0598f79b606f7436ad5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.whyc.service;
 
import com.whyc.dto.Response;
import com.whyc.dto.paramter.PwrdevReportParam;
import com.whyc.mapper.PwrdevDataHistoryMapper;
import com.whyc.pojo.PwrdevDataHistory;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
 
@Service
public class PwrdevDataHistoryService {
    @Resource
    private PwrdevDataHistoryMapper mapper;
 
    public Response searchByCondition(PwrdevReportParam pwrdevReportParam){
        //获取设备id
        String deviceId = pwrdevReportParam.getPowerDeviceId();
        String sqlend = "%";
        //类型  天day 周week 月month 年year
        String type = pwrdevReportParam.getType();
        //年:2021  月:2021_06
        String val = pwrdevReportParam.getVal();
        //开始时间 week和day判断
        Date startTime = pwrdevReportParam.getStartTime()!=null?pwrdevReportParam.getStartTime():new Date();
        //结束时间
        Date endTime = pwrdevReportParam.getEndTime()!=null?pwrdevReportParam.getEndTime():new Date();
        //需判断月份是否跨月
        Calendar calendar_start = Calendar.getInstance();
        calendar_start.setTime(startTime);
        Calendar calendar_end = Calendar.getInstance();
        calendar_end.setTime(endTime);
        if ("year".equals(type)){
            sqlend = val+"%";
        }else if ("month".equals(type)){
            sqlend = val+"%";
        }else if("week".equals(type)){
            int year = calendar_start.get(Calendar.YEAR);
            sqlend = year+"%";
        }else{
            sqlend = calendar_start.get(Calendar.YEAR)+"%";
        }
        List<String> tableNameList = mapper.getTableNameList(deviceId+"_"+sqlend);
        //如果未查询到表名,则没有数据
        if (tableNameList.size()==0){
            return null;
        }
        //数据结果
        List<PwrdevDataHistory> result = new ArrayList<>();
        //时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //当周跨月份时
        if ("week".equals(type) && calendar_start.get(Calendar.MONTH)!=calendar_end.get(Calendar.MONTH)){
            for (String tableName:tableNameList) {
                //开始时间的月份获取,需+1
                int startMonth = calendar_start.get(Calendar.MONTH)+1;
                int endMonth = calendar_end.get(Calendar.MONTH)+1;
                //当表名和开始时间的月份相同时,获取开始时间后的数据
                if (Integer.valueOf(tableName.substring(tableName.length()-2))==startMonth){
                    List<PwrdevDataHistory> listMonth = mapper.getGtStartTime(tableName,startTime);
                    result.addAll(listMonth);
                }
                //当结束时间与表名的月份相同时,获取结束时间前的数据
                if (Integer.valueOf(tableName.substring(tableName.length()-2))==endMonth){
                    List<PwrdevDataHistory> listMonth = mapper.getLtEndTime(tableName,endTime);
                    result.addAll(listMonth);
                }
            }
            //当是年或者月的时候,直接获取整表数据
        }else if("year".equals(type) || "month".equals(type)){
            for (String tableName: tableNameList ) {
                List<PwrdevDataHistory> listMonth = mapper.getData(tableName);
                result.addAll(listMonth);
            }
            //当是天或者周为同月时,直接在当月表中获取开始时间到结束时间的数据
        }else{
            for (String tableName: tableNameList ) {
                int month = calendar_start.get(Calendar.MONTH)+1;
                if (Integer.valueOf(tableName.substring(tableName.length()-2))==month){
                    List<PwrdevDataHistory> listMonth = mapper.getWeekOrDayData(tableName,startTime,endTime);
                    result.addAll(listMonth);
                }
            }
        }
 
        return new Response().set(1,result,"查询成功");
    }
 
}