ScheduleRealInfoServiceImpl.java
6.25 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package com.bsth.service.impl;
import com.bsth.entity.ScheduleRealInfo;
import com.bsth.entity.result.AverageSpeed;
import com.bsth.repository.ScheduleRealInfoRepository;
import com.bsth.service.ScheduleRealInfoService;
import com.bsth.util.DateUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@Service
public class ScheduleRealInfoServiceImpl implements ScheduleRealInfoService {
@Autowired
ScheduleRealInfoRepository scheduleRealInfoRepository;
// 用于计算的数字,只要是一个年月日就行那天不重要
private static final String DATEStr = "2000-01-01";
@Autowired
JdbcTemplate jdbcTemplate;
Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public List<AverageSpeed> averageSpeed(String time){
String sql;
sql = "SELECT * FROM bsth_c_s_sp_info_real WHERE bc_type in('normal','region') AND schedule_date BETWEEN '"+time+"-01' AND '"+time+"-31' ORDER BY fgs_bm, xl_bm, schedule_date";
List<ScheduleRealInfo> list = jdbcTemplate.query(sql,
new RowMapper<ScheduleRealInfo>() {
@Override
public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
scheduleRealInfo.setId(rs.getLong("id"));
scheduleRealInfo.setScheduleDateStr(rs.getString("schedule_date_str"));
scheduleRealInfo.setXlBm(rs.getString("xl_bm"));
scheduleRealInfo.setXlDir(rs.getString("xl_dir"));
scheduleRealInfo.setXlName(rs.getString("xl_name"));
scheduleRealInfo.setGsBm(rs.getString("gs_bm"));
scheduleRealInfo.setGsName(rs.getString("gs_name"));
scheduleRealInfo.setFgsBm(rs.getString("fgs_bm"));
scheduleRealInfo.setFgsName(rs.getString("fgs_name"));
scheduleRealInfo.setFcsj(rs.getString("fcsj"));
scheduleRealInfo.setFcsjActual(rs.getString("fcsj_actual"));
scheduleRealInfo.setZdsj(rs.getString("zdsj"));
scheduleRealInfo.setZdsjActual(rs.getString("zdsj_actual"));
scheduleRealInfo.setJhlc(Double.valueOf(rs.getString("jhlc")));
scheduleRealInfo.setBcType(rs.getString("bc_type"));
return scheduleRealInfo;
}
});
if (list.size()<1){
return null;
}
// 左边固定列
TreeMap<String, ScheduleRealInfo> keyMap = new TreeMap<String, ScheduleRealInfo>();
// 报表纵向列数据生成
for (int i = 0; list.size() > i; i++) {
ScheduleRealInfo sr = list.get(i);
String key = sr.getFgsBm()+"/"+sr.getXlBm();
ScheduleRealInfo realInfo = this.initScheduleRealInfo();
if(keyMap.containsKey(key)){
realInfo = keyMap.get(key);
this.summation(realInfo, sr);
} else {
// 深度拷贝对象
BeanUtils.copyProperties(sr,realInfo);
realInfo.setJhTime(0);
realInfo.setSjTime(0);
realInfo.setJhlc(0d);
this.summation(realInfo, sr);
keyMap.put(key, realInfo);
}
}
List<AverageSpeed> listAS = new ArrayList<>();
// 表头和数据
Iterator iter = keyMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
// 获取value
ScheduleRealInfo c = (ScheduleRealInfo) entry.getValue();
AverageSpeed as = new AverageSpeed();
as.setBrancheCompanyId(c.getFgsBm());
as.setBrancheCompanyName(c.getFgsName());
as.setCompanyId(c.getGsBm());
as.setCompanyName(c.getGsName());
as.setLineCode(c.getXlBm());
as.setLineName(c.getXlName());
as.setPlanSpeed(c.getJhTime()==0 ? 0f : (float)(c.getJhlc()*60/ c.getJhTime()));
as.setRealSpeed(c.getSjTime()==0 ? 0f : (float)(c.getJhlc()*60/ c.getSjTime()));
as.setRq(DateUtils.getDate(time+"-01"));
as.setRqStr(time);
listAS.add(as);
}
return listAS;
}
/*
* 将时间戳转换为时间
*/
public static String stampToDate(String s){
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long lt = new Long(s);
Date date = new Date(lt);
res = simpleDateFormat.format(date);
return res;
}
public ScheduleRealInfo summation(ScheduleRealInfo sr1, ScheduleRealInfo sr2){
try {
if(!StringUtils.isEmpty(sr2.getFcsjActual()) && !StringUtils.isEmpty(sr2.getZdsjActual())){
Long sjfcsj = Long.valueOf(DateUtils.dateToStamp(DATEStr + " " + sr2.getFcsjActual() + ":00"));
Long sjzdsj = Long.valueOf(DateUtils.dateToStamp(DATEStr + " " + sr2.getZdsjActual() + ":00"));
if(sjzdsj<=sjfcsj){
sjzdsj += 24*3600*1000;
}
int sjTime = (int)(sjzdsj-sjfcsj) / (60*1000);
Long jhfcsj = Long.valueOf(DateUtils.dateToStamp(DATEStr + " " + sr2.getFcsj() + ":00"));
Long jhzdsj = Long.valueOf(DateUtils.dateToStamp(DATEStr + " " + sr2.getZdsj() + ":00"));
if(jhzdsj<=jhfcsj){
jhzdsj += 24*3600*1000;
}
int jhTime = (int)(jhzdsj-jhfcsj) / (60*1000);
sr1.setJhlc(sr1.getJhlc()+sr2.getJhlc());
sr1.setJhTime(sr1.getJhTime()+jhTime);
sr1.setSjTime(sr1.getSjTime()+sjTime);
}
}catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.error(e.toString());
}
return sr1;
}
public ScheduleRealInfo initScheduleRealInfo(){
ScheduleRealInfo realInfo = new ScheduleRealInfo();
realInfo.setJhlc(0d);
realInfo.setSjTime(0);
realInfo.setJhTime(0);
return realInfo;
}
}