Commit 53d92f735e61358947dc6e4f556ee6043fbd3907

Authored by 娄高锋
1 parent 02d235f0

路单月报年保中电耗量统计值大于实际值的问题

src/main/java/com/bsth/repository/calc/CalcWaybillRepository.java
@@ -75,19 +75,19 @@ public interface CalcWaybillRepository extends BaseRepository<CalcWaybill, Integ @@ -75,19 +75,19 @@ public interface CalcWaybillRepository extends BaseRepository<CalcWaybill, Integ
75 75
76 //按照时间段统计,公司下线路 (驾驶员) 76 //按照时间段统计,公司下线路 (驾驶员)
77 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) " + 77 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) " +
78 - "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.jGh,c.fgsdm,c.xl,c.rq") 78 + "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.jGh,c.fgsdm,c.xl,c.rqStr")
79 List<CalcWaybill> scheduleByJsy2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy); 79 List<CalcWaybill> scheduleByJsy2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy);
80 //按照时间段统计,公司下线路 (售票员) coalesce(c.sGh,'') 80 //按照时间段统计,公司下线路 (售票员) coalesce(c.sGh,'')
81 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) and c.sGh <> null and c.sGh <> '' " + 81 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) and c.sGh <> null and c.sGh <> '' " +
82 - "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.sGh,c.fgsdm,c.xl,c.rq") 82 + "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.sGh,c.fgsdm,c.xl,c.rqStr")
83 List<CalcWaybill> scheduleBySpy2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy); 83 List<CalcWaybill> scheduleBySpy2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy);
84 //按照时间段统计,公司下线路 (车辆自编号) 84 //按照时间段统计,公司下线路 (车辆自编号)
85 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) " + 85 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) " +
86 - "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.cl,c.fgsdm,c.xl,c.rq") 86 + "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.cl,c.fgsdm,c.xl,c.rqStr")
87 List<CalcWaybill> scheduleByZbh2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy); 87 List<CalcWaybill> scheduleByZbh2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy);
88 //按照时间段统计,公司下线路 排序不同 88 //按照时间段统计,公司下线路 排序不同
89 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) " + 89 @Query(value="select DISTINCT c from CalcWaybill c where c.xl in(?1) and c.rqStr between ?2 and ?3 and c.gsdm in(?4) and c.fgsdm in(?5) " +
90 - "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.fgsdm,c.xl,c.rq") 90 + "and c.xl in (select l.lineCode from Line l where l.destroy in (?6)) order by c.fgsdm,c.xl,c.rqStr")
91 List<CalcWaybill> scheduleByDateAndLineTjPx(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy); 91 List<CalcWaybill> scheduleByDateAndLineTjPx(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy);
92 92
93 } 93 }
src/main/java/com/bsth/service/calc/impl/CalcWaybillServiceImpl.java
1 -package com.bsth.service.calc.impl;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.alibaba.fastjson.JSONArray;  
5 -import com.bsth.common.ResponseCode;  
6 -import com.bsth.data.BasicData;  
7 -import com.bsth.entity.Cars;  
8 -import com.bsth.entity.Line;  
9 -import com.bsth.entity.calc.CalcBusMileage;  
10 -import com.bsth.entity.calc.CalcInterval;  
11 -import com.bsth.entity.calc.CalcLineMileage;  
12 -import com.bsth.entity.calc.CalcStatistics;  
13 -import com.bsth.entity.calc.CalcWaybill;  
14 -import com.bsth.entity.calc.CalcWaybillDetail;  
15 -import com.bsth.entity.oil.Dlb;  
16 -import com.bsth.entity.oil.Ylb;  
17 -import com.bsth.entity.realcontrol.ChildTaskPlan;  
18 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
19 -import com.bsth.entity.sys.Interval;  
20 -import com.bsth.repository.CarsRepository;  
21 -import com.bsth.repository.LineRepository;  
22 -import com.bsth.repository.calc.CalcBusMileageRepository;  
23 -import com.bsth.repository.calc.CalcIntervalRepository;  
24 -import com.bsth.repository.calc.CalcLineMileageRepository;  
25 -import com.bsth.repository.calc.CalcStatisticsRepository;  
26 -import com.bsth.repository.calc.CalcWaybillRepository;  
27 -import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;  
28 -import com.bsth.service.LineService;  
29 -import com.bsth.service.calc.CalcToolService;  
30 -import com.bsth.service.calc.CalcWaybillService;  
31 -import com.bsth.service.impl.BaseServiceImpl;  
32 -import com.bsth.service.realcontrol.ScheduleRealInfoService;  
33 -import com.bsth.service.report.CulateMileageService;  
34 -import com.bsth.service.report.ReportService;  
35 -import com.bsth.util.Arith;  
36 -import com.bsth.util.ReportUtils;  
37 -import com.github.stuxuhai.jpinyin.PinyinException;  
38 -import com.github.stuxuhai.jpinyin.PinyinFormat;  
39 -import com.github.stuxuhai.jpinyin.PinyinHelper;  
40 -import org.apache.commons.lang3.StringUtils;  
41 -import org.slf4j.Logger;  
42 -import org.slf4j.LoggerFactory;  
43 -import org.springframework.beans.BeanUtils;  
44 -import org.springframework.beans.factory.annotation.Autowired;  
45 -import org.springframework.jdbc.core.JdbcTemplate;  
46 -import org.springframework.jdbc.core.RowMapper;  
47 -import org.springframework.stereotype.Service;  
48 -  
49 -import javax.transaction.Transactional;  
50 -import java.sql.ResultSet;  
51 -import java.sql.SQLException;  
52 -import java.text.DecimalFormat;  
53 -import java.text.ParseException;  
54 -import java.text.SimpleDateFormat;  
55 -import java.util.*;  
56 -  
57 -/**  
58 - * Created by 17/11/16.  
59 - */  
60 -@Service  
61 -public class CalcWaybillServiceImpl extends BaseServiceImpl<CalcWaybill, Integer> implements CalcWaybillService {  
62 -  
63 - @Autowired  
64 - private CalcWaybillRepository calcRepository;  
65 -  
66 - @Autowired  
67 - private CalcStatisticsRepository calcStatisticsRepository;  
68 -  
69 - @Autowired  
70 - private CalcLineMileageRepository calcLineMileageRepository;  
71 -  
72 - @Autowired  
73 - private CalcBusMileageRepository calcBusMileageRepository;  
74 -  
75 - @Autowired  
76 - private CalcToolService calcToolService;  
77 -  
78 - @Autowired  
79 - private CulateMileageService culateService;  
80 -  
81 - @Autowired  
82 - private ScheduleRealInfoService scheduleRealInfoService;  
83 -  
84 - @Autowired  
85 - private ScheduleRealInfoRepository scheduleRealInfoRepository;  
86 -  
87 - @Autowired  
88 - private CalcIntervalRepository calcIntervalRepository;  
89 -  
90 - @Autowired  
91 - private LineRepository lineRepository;  
92 - @Autowired  
93 - private LineService lineService;  
94 - @Autowired  
95 - private ReportService reportService;  
96 - @Autowired  
97 - CarsRepository carsRepository;  
98 -  
99 - @Autowired  
100 - JdbcTemplate jdbcTemplate;  
101 -  
102 -  
103 - Logger logger = LoggerFactory.getLogger(this.getClass());  
104 -  
105 -  
106 - public Map<String, Object> autoGenerate(String date, String line) throws Exception {  
107 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
108 - List<String> dateList = new ArrayList<String>();  
109 - if(date == null || date.trim().length() == 0){  
110 - Date d = new Date();  
111 - d.setTime(d.getTime() - (4l * 1000 * 60 * 60 * 24));  
112 - dateList.add(sdf.format(d));  
113 - d.setTime(d.getTime() - (1l * 1000 * 60 * 60 * 24));  
114 - dateList.add(sdf.format(d));  
115 - } else {  
116 - date = date.trim();  
117 - dateList.add(date);  
118 - }  
119 - if(line == null || line.trim().length() == 0){  
120 - line = "";  
121 - } else {  
122 - line = line.trim();  
123 - }  
124 -  
125 - Map<String, Object> m = new HashMap<String, Object>();  
126 - for(String d : dateList){  
127 - try {  
128 - Map<String, Object> generateNew = generateNew(d, line);  
129 - m.put("generateNew", generateNew);  
130 - } catch (Exception e) {  
131 - // TODO: handle exception  
132 - logger.info("date="+d+";line="+line+";重新统计保存失败!");  
133 - }  
134 - try {  
135 - Map<String, Object> calcLineMileage = calcLineMileage(d, line);  
136 - m.put("lineMileage", calcLineMileage);  
137 - } catch (Exception e) {  
138 - // TODO: handle exception  
139 - logger.info("date="+d+";line="+line+";线路公里审计保存失败!");  
140 - }  
141 - try {  
142 - Map<String, Object> calcBusMileage = calcBusMileage(d, line);  
143 - m.put("busMileage", calcBusMileage);  
144 - } catch (Exception e) {  
145 - // TODO: handle exception  
146 - logger.info("date="+d+";line="+line+";路单数据审计保存失败!");  
147 - }  
148 - }  
149 -  
150 - return m;  
151 - }  
152 -  
153 - @Transactional  
154 - @Override  
155 - public Map<String, Object> generateNew(String date, String line) throws Exception {  
156 - Map<String, Object> newMap = new HashMap<String, Object>();  
157 - try {  
158 - if(date == null){  
159 - date = "";  
160 - } else {  
161 - date = date.trim();  
162 - }  
163 - if(line == null){  
164 - line = "";  
165 - } else {  
166 - line = line.trim();  
167 - }  
168 - if(date.length() != 0 && line.length() != 0){  
169 - calcRepository.deleteByDateAndLine(date, line);  
170 - } else if(date.length() != 0){  
171 - calcRepository.deleteByDate(date);  
172 - } else {  
173 - newMap.put("status", ResponseCode.ERROR);  
174 - logger.error("save erro.", "日期不能为空");  
175 - return newMap;  
176 - }  
177 -  
178 - if(date.trim().length() == 0){  
179 - newMap.put("status", ResponseCode.ERROR);  
180 - logger.error("save erro.", "日期不能为空");  
181 - return newMap;  
182 - }  
183 -  
184 -// String sql = "select c.id,c.out_config,c.start_opt,t.line_code from bsth_c_line_config c LEFT JOIN bsth_c_line t on c.line=t.id";  
185 - String sql="select xl_bm as line_code from bsth_c_s_sp_info_real where schedule_date_str = '"+date+"'";  
186 - if(line.trim().length() > 0){  
187 - sql += " and xl_bm = '"+line+"'";  
188 -// sql += " where t.line_code = " + line;  
189 - }  
190 - sql += " group by xl_bm";  
191 - List<Map<String, Object>> listLineConfig = jdbcTemplate.query(sql,  
192 - new RowMapper<Map<String, Object>>(){  
193 - @Override  
194 - public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {  
195 - Map<String, Object> m = new HashMap<String, Object>();  
196 -// m.put("id", rs.getLong("id"));  
197 -// m.put("out_config", rs.getString("out_config"));  
198 -// m.put("start_opt", rs.getString("start_opt"));  
199 - m.put("line_code", rs.getString("line_code"));  
200 - return m;  
201 - }});  
202 -  
203 - String xlSql="select line_code,spac_grade from bsth_c_line";  
204 - if(line.length() != 0){  
205 - xlSql += " where line_code ='"+line+"'";  
206 - }  
207 - List<Map<String, Object>> xlList=jdbcTemplate.query(xlSql, new RowMapper<Map<String, Object>>() {  
208 - @Override  
209 - public Map<String, Object> mapRow(ResultSet arg0, int arg1) throws SQLException {  
210 - Map<String, Object> map=new HashMap<String,Object>();  
211 - map.put("line",arg0.getString("line_code"));  
212 - map.put("grade", arg0.getString("spac_grade"));  
213 - return map;  
214 - }});  
215 - Map<String, List<Map<String, Object>>> xlMap = new HashMap<String, List<Map<String, Object>>>();  
216 - for(Map<String, Object> m : xlList){  
217 - if(m.containsKey("line") && m.get("line").toString().trim().length() > 0){  
218 - String key = m.get("line").toString().trim();  
219 - if(!xlMap.containsKey(key))  
220 - xlMap.put(key, new ArrayList<Map<String, Object>>());  
221 - xlMap.get(key).add(m);  
222 - }  
223 - }  
224 - //查询大间隔时间  
225 - String djgSql="select * from bsth_c_interval";  
226 - List<Interval> djgList=jdbcTemplate.query(djgSql, new RowMapper<Interval>() {  
227 - @Override  
228 - public Interval mapRow(ResultSet arg0, int arg1) throws SQLException {  
229 - Interval m=new Interval();  
230 - m.setLevel(arg0.getString("level"));  
231 - m.setPeak(arg0.getInt("peak"));  
232 - m.setTrough(arg0.getInt("trough"));  
233 - return m;  
234 - }});  
235 -  
236 - Map<String, List<ScheduleRealInfo>> scheMap = new HashMap<String, List<ScheduleRealInfo>>();  
237 - List<ScheduleRealInfo> list = calcRepository.findAllScheduleByDate(date);  
238 - for(ScheduleRealInfo s : list){  
239 - String xlBm = s.getXlBm();  
240 - if(!scheMap.containsKey(xlBm)){  
241 - scheMap.put(xlBm, new ArrayList<ScheduleRealInfo>());  
242 - }  
243 - scheMap.get(xlBm).add(s);  
244 - }  
245 -  
246 - Set<String> lineSet = new HashSet<String>();  
247 - List<CalcWaybill> all = new ArrayList<CalcWaybill>();  
248 - for (int i = 0; i < listLineConfig.size(); i++) {  
249 - Map<String, Object> m =listLineConfig.get(i);  
250 - String lineCode=m.get("line_code").toString().trim();  
251 -// String startOpt=m.get("start_opt").toString().trim();  
252 - if(!lineSet.add(lineCode))  
253 - continue;  
254 -  
255 - List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();  
256 - if(xlMap.containsKey(lineCode) && xlMap.get(lineCode) != null){  
257 - tempList = xlMap.get(lineCode);  
258 - }  
259 -  
260 - if(!scheMap.containsKey(lineCode))  
261 - continue;  
262 - List<CalcWaybill> findAll = calcToolService.findAll(date, lineCode, scheMap.get(lineCode), tempList, djgList);  
263 - all.addAll(findAll);  
264 -  
265 - }  
266 -// new BatchSaveUtils<CalcWaybill>().saveList2(all, CalcWaybill.class);  
267 - calcRepository.saveAll(all);  
268 -  
269 - newMap.put("status", ResponseCode.SUCCESS);  
270 - } catch (Exception e) {  
271 - // TODO: handle exception  
272 - newMap.put("status", ResponseCode.ERROR);  
273 - logger.error("save erro.", e);  
274 - throw e;  
275 - }  
276 -  
277 - return newMap;  
278 - }  
279 -  
280 - @Override  
281 - public List<Map<String, Object>> statisticsDailyTj(String gsdm,  
282 - String fgsdm, String line, String date, String date2,  
283 - String xlName, String type) {  
284 -  
285 - List<String> keyList = new ArrayList<String>();  
286 - List<CalcWaybill> list = new ArrayList<CalcWaybill>();  
287 - List<CalcWaybill> lists = new ArrayList<CalcWaybill>();  
288 - List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();  
289 - Map<String, List<CalcWaybill>> keyMap = new HashMap<String, List<CalcWaybill>>();  
290 -  
291 - if(line.equals("")){  
292 - //查询所有线路  
293 - list = calcRepository.scheduleByDateAndLineTj(line,date,date2,gsdm,fgsdm);  
294 - }else{  
295 - //查询单条线路  
296 - list = calcRepository.scheduleByDateAndLineTj2(line,date,date2);  
297 - }  
298 -  
299 - for(CalcWaybill c : list){  
300 - String key = c.getXlName();  
301 - if(!keyMap.containsKey(key)){  
302 - keyMap.put(key, new ArrayList<CalcWaybill>());  
303 - keyList.add(key);  
304 - }  
305 - keyMap.get(key).add(c);  
306 - }  
307 - Collections.sort(keyList, new AccountXlbmStr());  
308 - for(String key : keyList){  
309 - CalcWaybill calc = keyMap.get(key).get(0);  
310 - for(int i = 1; i < keyMap.get(key).size(); i++){  
311 - CalcWaybill c= keyMap.get(key).get(i);  
312 - calc.setJhyylc(Arith.add(calc.getJhyylc(), c.getJhyylc()));  
313 - calc.setJhfyylc(Arith.add(calc.getJhfyylc(), c.getJhfyylc()));  
314 - calc.setSjyylc(Arith.add(calc.getSjyylc(), c.getSjyylc()));  
315 - calc.setSjfyylc(Arith.add(calc.getSjfyylc(), c.getSjfyylc()));  
316 - calc.setLblc(Arith.add(calc.getLblc(), c.getLblc()));  
317 - calc.setLbbc(calc.getLbbc() + c.getLbbc());  
318 - calc.setLblcLz(Arith.add(calc.getLblcLz(), c.getLblcLz()));  
319 - calc.setLblcDm(Arith.add(calc.getLblcDm(), c.getLblcDm()));  
320 - calc.setLblcGz(Arith.add(calc.getLblcGz(), c.getLblcGz()));  
321 - calc.setLblcJf(Arith.add(calc.getLblcJf(), c.getLblcJf()));  
322 - calc.setLblcZs(Arith.add(calc.getLblcZs(), c.getLblcZs()));  
323 - calc.setLblcQr(Arith.add(calc.getLblcQr(), c.getLblcQr()));  
324 - calc.setLblcQc(Arith.add(calc.getLblcQc(), c.getLblcQc()));  
325 - calc.setLblcKx(Arith.add(calc.getLblcKx(), c.getLblcKx()));  
326 - calc.setLblcQh(Arith.add(calc.getLblcQh(), c.getLblcQh()));  
327 - calc.setLblcYw(Arith.add(calc.getLblcYw(), c.getLblcYw()));  
328 - calc.setLblcQt(Arith.add(calc.getLblcQt(), c.getLblcQt()));  
329 - calc.setLjyylc(Arith.add(calc.getLjyylc(), c.getLjyylc()));  
330 - calc.setLjfyylc(Arith.add(calc.getLjfyylc(), c.getLjfyylc()));  
331 - calc.setJhyybc(calc.getJhyybc() + c.getJhyybc());  
332 - calc.setJhyybczgf(calc.getJhyybczgf() + c.getJhyybczgf());  
333 - calc.setJhyybcwgf(calc.getJhyybcwgf() + c.getJhyybcwgf());  
334 - calc.setSjyybc(calc.getSjyybc() + c.getSjyybc());  
335 - calc.setSjyybczgf(calc.getSjyybczgf() + c.getSjyybczgf());  
336 - calc.setSjyybcwgf(calc.getSjyybcwgf() + c.getSjyybcwgf());  
337 - calc.setLjbc(calc.getLjbc() + c.getLjbc());  
338 - calc.setLjbczgf(calc.getLjbczgf() + c.getLjbczgf());  
339 - calc.setLjbcwgf(calc.getLjbcwgf() + c.getLjbcwgf());  
340 - calc.setFzbc(calc.getFzbc() + c.getFzbc());  
341 - calc.setFzbczgf(calc.getFzbczgf() + c.getFzbczgf());  
342 - calc.setFzbcwgf(calc.getFzbcwgf() + c.getFzbcwgf());  
343 - calc.setDtbc(calc.getDtbc() + c.getDtbc());  
344 - calc.setDtbczgf(calc.getDtbczgf() + c.getDtbczgf());  
345 - calc.setDtbcwgf(calc.getDtbcwgf() + c.getDtbcwgf());  
346 - }  
347 - calc.setSjyylc(Arith.add(calc.getSjyylc(), calc.getLjyylc()));  
348 - calc.setSjfyylc(Arith.add(calc.getSjfyylc(), calc.getLjfyylc()));  
349 - lists.add(calc);  
350 - }  
351 - CalcWaybill sum = new CalcWaybill();  
352 - sum.setXlName("合计");  
353 - for(CalcWaybill c : lists){  
354 - sum.setJhyylc(Arith.add(sum.getJhyylc()!=null?sum.getJhyylc():0, c.getJhyylc()));  
355 - sum.setJhfyylc(Arith.add(sum.getJhfyylc()!=null?sum.getJhfyylc():0, c.getJhfyylc()));  
356 - sum.setSjyylc(Arith.add(sum.getSjyylc()!=null?sum.getSjyylc():0, c.getSjyylc()));  
357 - sum.setLjyylc(Arith.add(sum.getLjyylc()!=null?sum.getLjyylc():0, c.getLjyylc()));  
358 - sum.setSjfyylc(Arith.add(sum.getSjfyylc()!=null?sum.getSjfyylc():0, c.getSjfyylc()));  
359 - sum.setLjfyylc(Arith.add(sum.getLjfyylc()!=null?sum.getLjfyylc():0, c.getLjfyylc()));  
360 - sum.setLblc(Arith.add(sum.getLblc()!=null?sum.getLblc():0, c.getLblc()));  
361 - sum.setLbbc(sum.getLbbc() + c.getLbbc());  
362 - sum.setLblcLz(Arith.add(sum.getLblcLz()!=null?sum.getLblcLz():0, c.getLblcLz()));  
363 - sum.setLblcDm(Arith.add(sum.getLblcDm()!=null?sum.getLblcDm():0, c.getLblcDm()));  
364 - sum.setLblcGz(Arith.add(sum.getLblcGz()!=null?sum.getLblcGz():0, c.getLblcGz()));  
365 - sum.setLblcJf(Arith.add(sum.getLblcJf()!=null?sum.getLblcJf():0, c.getLblcJf()));  
366 - sum.setLblcZs(Arith.add(sum.getLblcZs()!=null?sum.getLblcZs():0, c.getLblcZs()));  
367 - sum.setLblcQr(Arith.add(sum.getLblcQr()!=null?sum.getLblcQr():0, c.getLblcQr()));  
368 - sum.setLblcQc(Arith.add(sum.getLblcQc()!=null?sum.getLblcQc():0, c.getLblcQc()));  
369 - sum.setLblcKx(Arith.add(sum.getLblcKx()!=null?sum.getLblcKx():0, c.getLblcKx()));  
370 - sum.setLblcQh(Arith.add(sum.getLblcQh()!=null?sum.getLblcQh():0, c.getLblcQh()));  
371 - sum.setLblcYw(Arith.add(sum.getLblcYw()!=null?sum.getLblcYw():0, c.getLblcYw()));  
372 - sum.setLblcQt(Arith.add(sum.getLblcQt()!=null?sum.getLblcQt():0, c.getLblcQt()));  
373 - sum.setJhyybc(sum.getJhyybc() + c.getJhyybc());  
374 - sum.setJhyybczgf(sum.getJhyybczgf() + c.getJhyybczgf());  
375 - sum.setJhyybcwgf(sum.getJhyybcwgf() + c.getJhyybcwgf());  
376 - sum.setSjyybc(sum.getSjyybc() + c.getSjyybc());  
377 - sum.setSjyybczgf(sum.getSjyybczgf() + c.getSjyybczgf());  
378 - sum.setSjyybcwgf(sum.getSjyybcwgf() + c.getSjyybcwgf());  
379 - sum.setLjbc(sum.getLjbc() + c.getLjbc());  
380 - sum.setLjbczgf(sum.getLjbczgf() + c.getLjbczgf());  
381 - sum.setLjbcwgf(sum.getLjbcwgf() + c.getLjbcwgf());  
382 - sum.setFzbc(sum.getFzbc() + c.getFzbc());  
383 - sum.setFzbczgf(sum.getFzbczgf() + c.getFzbczgf());  
384 - sum.setFzbcwgf(sum.getFzbcwgf() + c.getFzbcwgf());  
385 - sum.setDtbc(sum.getDtbc() + c.getDtbc());  
386 - sum.setDtbczgf(sum.getDtbczgf() + c.getDtbczgf());  
387 - sum.setDtbcwgf(sum.getDtbcwgf() + c.getDtbcwgf());  
388 - }  
389 - if(lists.size() > 0){  
390 - lists.add(sum);  
391 - }  
392 -  
393 - for(CalcWaybill c : lists){  
394 - Map<String, Object> m = new HashMap<String, Object>();  
395 - m.put("xlName", c.getXlName());  
396 - m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));  
397 - m.put("jhlc", c.getJhyylc());  
398 - m.put("jcclc", c.getJhfyylc());  
399 -// m.put("sjzgl", Arith.add(Arith.add(c.getSjyylc(), c.getLjyylc()), Arith.add(c.getSjfyylc(), c.getLjfyylc())));  
400 -// m.put("sjgl", Arith.add(c.getSjyylc(), c.getLjyylc()));  
401 -// m.put("sjksgl", Arith.add(c.getSjfyylc(), c.getLjfyylc()));  
402 - m.put("sjzgl", Arith.add(c.getSjyylc(), c.getSjfyylc()));  
403 - m.put("sjgl", c.getSjyylc());  
404 - m.put("sjksgl", c.getSjfyylc());  
405 - m.put("ssgl", c.getLblc());  
406 - m.put("ssbc", c.getLbbc());  
407 - m.put("ssgl_lz", c.getLblcLz());  
408 - m.put("ssgl_dm", c.getLblcDm());  
409 - m.put("ssgl_gz", c.getLblcGz());  
410 - m.put("ssgl_jf", c.getLblcJf());  
411 - m.put("ssgl_zs", c.getLblcZs());  
412 - m.put("ssgl_qr", c.getLblcQr());  
413 - m.put("ssgl_qc", c.getLblcQc());  
414 - m.put("ssgl_kx", c.getLblcKx());  
415 - m.put("ssgl_qh", c.getLblcQh());  
416 - m.put("ssgl_yw", c.getLblcYw());  
417 - m.put("ssgl_other", c.getLblcQt());  
418 - m.put("ljgl", c.getLjyylc());  
419 - m.put("jhbc", c.getJhyybc());  
420 - m.put("jhbc_m", c.getJhyybczgf());  
421 - m.put("jhbc_a", c.getJhyybcwgf());  
422 - m.put("sjbc", c.getSjyybc());  
423 - m.put("sjbc_m", c.getSjyybczgf());  
424 - m.put("sjbc_a", c.getSjyybcwgf());  
425 - m.put("ljbc", c.getLjbc());  
426 - m.put("ljbc_m", c.getLjbczgf());  
427 - m.put("ljbc_a", c.getLjbcwgf());  
428 - m.put("fzbc", c.getFzbc());  
429 - m.put("fzbc_m", c.getFzbczgf());  
430 - m.put("fzbc_a", c.getFzbcwgf());  
431 - m.put("dtbc", c.getDtbc());  
432 - m.put("dtbc_m", c.getDtbczgf());  
433 - m.put("dtbc_a", c.getDtbcwgf());  
434 - resList.add(m);  
435 - }  
436 -  
437 - if (type != null && type.length() != 0 && type.equals("export")) {  
438 - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),  
439 - sdfSimple = new SimpleDateFormat("yyyyMMdd");  
440 - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();  
441 - Map<String, Object> m = new HashMap<String, Object>();  
442 - m.put("date", date+"至"+date2);  
443 - ReportUtils ee = new ReportUtils();  
444 - try {  
445 - String dateTime = "";  
446 - if(date.equals(date2)){  
447 - dateTime = sdfSimple.format(sdfMonth.parse(date));  
448 - } else {  
449 - dateTime = sdfSimple.format(sdfMonth.parse(date))  
450 - +"-"+sdfSimple.format(sdfMonth.parse(date2));  
451 - }  
452 - listI.add(resList.iterator());  
453 - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";  
454 - ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_.xls",  
455 - path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");  
456 - } catch (Exception e) {  
457 - // TODO: handle exception  
458 - //e.printStackTrace();  
459 - logger.info("" , e);  
460 - }  
461 - }  
462 -  
463 - return resList;  
464 - }  
465 -  
466 - /**  
467 - * @param rq 格式如:2018-03-22(留空""默认当前日期前四天)  
468 - * @param line (留空""默认全部线路)  
469 - */  
470 - @Transactional  
471 - @Override  
472 - public String calcDaily(String rq, String line) throws Exception{  
473 - String result = "";  
474 - try {  
475 - List<String> dateList = new ArrayList<String>();  
476 - if(rq == null || rq.trim().length() == 0){  
477 - SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
478 - Date dNow = new Date(); //当前时间  
479 - Date dBefore = new Date();  
480 - Calendar calendar = Calendar.getInstance(); //得到日历  
481 - calendar.setTime(dNow);//把当前时间赋给日历  
482 - calendar.add(Calendar.DAY_OF_MONTH, -4); //设置为前一天  
483 - dBefore = calendar.getTime(); //得到前一天的时间  
484 -// rq = sdf.format(dBefore);  
485 - dateList.add(sdf.format(dBefore));  
486 - Date date = new Date();  
487 - date.setTime(dBefore.getTime() - 1l*1000*60*60*24);  
488 - dateList.add(sdf.format(date));  
489 - } else {  
490 -// rq = rq.trim();  
491 - dateList.add(rq.trim());  
492 - }  
493 - if(line == null || line.trim().length() == 0){  
494 - line = "";  
495 - } else {  
496 - line = line.trim();  
497 - }  
498 -  
499 - for(int j = 0; j < dateList.size(); j++){  
500 - rq = dateList.get(j);  
501 -  
502 - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();  
503 - List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();  
504 - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();  
505 -  
506 - String gsSql="select gs_bm, fgs_bm from bsth_c_s_sp_info_real where schedule_date_str = '"+rq+"'";  
507 - if(line.trim().length() > 0)  
508 - gsSql += " and xl_bm = '"+line+"'";  
509 - gsSql += " group by gs_bm, fgs_bm";  
510 - List<Map<String, String>> gsList=jdbcTemplate.query(gsSql, new RowMapper<Map<String, String>>() {  
511 - @Override  
512 - public Map<String, String> mapRow(ResultSet arg0, int arg1) throws SQLException {  
513 - Map<String, String> m = new HashMap<String, String>();  
514 - m.put("gsdm", arg0.getString("gs_bm"));  
515 - m.put("fgsdm", arg0.getString("fgs_bm"));  
516 - return m;  
517 - }});  
518 -  
519 - //查询所有线路  
520 - for(Map<String, String> m : gsList){  
521 - list.addAll(calcStatisticsRepository.scheduleByDateAndLine(line, rq, rq, m.get("gsdm"), m.get("fgsdm")));  
522 - }  
523 -  
524 - List<CalcInterval> listInterval=calcIntervalRepository.selectByDateAndCompany(rq, "", "","");  
525 - Map<String,CalcInterval> mapInterval=new HashMap<String,CalcInterval>();  
526 - for (int i = 0; i < listInterval.size(); i++) {  
527 - CalcInterval c=listInterval.get(i);  
528 - mapInterval.put(c.getXlBm(), c);  
529 - }  
530 -  
531 -  
532 - for (int i = 0; i < list.size(); i++) {  
533 - ScheduleRealInfo s=list.get(i);  
534 - Set<ChildTaskPlan> cts = s.getcTasks();  
535 - if(cts != null && cts.size() > 0){  
536 - list_s.add(s);  
537 - }else{  
538 - if(s.getZdsjActual()!=null && s.getFcsjActual()!=null){  
539 - list_s.add(s);  
540 - }  
541 - }  
542 - }  
543 - List<CalcStatistics> lMap = new ArrayList<CalcStatistics>();  
544 - for (int i = 0; i < list.size(); i++) {  
545 - if(i<list.size()-1){  
546 - if(list.get(i+1).getXlBm().equals(list.get(i).getXlBm())){  
547 - lists.add(list.get(i));  
548 - }else{  
549 - lists.add(list.get(i));  
550 - CalcInterval t=null;  
551 - if(mapInterval.get(lists.get(0).getXlBm())!=null){  
552 - t=mapInterval.get(lists.get(0).getXlBm());  
553 - }  
554 -  
555 - CalcStatistics s=staticTj(lists,t);  
556 - lMap.add(s);  
557 - lists=new ArrayList<ScheduleRealInfo>();  
558 - }  
559 - }else{  
560 - if(list.get(i).getXlBm().equals(list.get(i-1).getXlBm())){  
561 - lists.add(list.get(i));  
562 - CalcInterval t=null;  
563 - if(mapInterval.get(lists.get(0).getXlBm())!=null){  
564 - t=mapInterval.get(lists.get(0).getXlBm());  
565 - }  
566 - CalcStatistics s=staticTj(lists,t);  
567 - lMap.add(s);  
568 - }else{  
569 - lists=new ArrayList<ScheduleRealInfo>();  
570 - lists.add(list.get(i));  
571 - CalcInterval t=null;  
572 - if(mapInterval.get(lists.get(0).getXlBm())!=null){  
573 - t=mapInterval.get(lists.get(0).getXlBm());  
574 - }  
575 - CalcStatistics s=staticTj(lists,t);  
576 - lMap.add(s);  
577 - }  
578 - }  
579 - }  
580 - // Collections.sort(lMap,new AccountXlbm());  
581 -  
582 - if(line.trim().length() > 0){  
583 - calcStatisticsRepository.deleteByDateAndLine(rq, line);  
584 - } else {  
585 - calcStatisticsRepository.deleteByDate(rq);  
586 - }  
587 - calcStatisticsRepository.saveAll(lMap);  
588 -  
589 - System.out.println(rq);  
590 - System.out.println(dateList.size());  
591 - }  
592 -  
593 - result = "success";  
594 - } catch (Exception e) {  
595 - // TODO: handle exception  
596 - throw e;  
597 - }finally{  
598 - logger.info("result:"+result);  
599 - }  
600 - return result;  
601 - }  
602 -  
603 - public final CalcStatistics staticTj(List<ScheduleRealInfo> list,CalcInterval t){  
604 -  
605 - List<ScheduleRealInfo> lists=new ArrayList<ScheduleRealInfo>();  
606 - for(int i=0;i<list.size();i++){  
607 - ScheduleRealInfo s=list.get(i);  
608 - Set<ChildTaskPlan> cts = s.getcTasks();  
609 - if(cts != null && cts.size() > 0){  
610 - lists.add(s);  
611 - }else{  
612 - if(s.getZdsjActual()!=null&& s.getFcsjActual()!=null){  
613 - lists.add(s);  
614 - }  
615 - }  
616 - }  
617 -// Map<String, Object> map = new HashMap<String, Object>();  
618 - CalcStatistics s = new CalcStatistics();  
619 - if(list.size() > 0){  
620 - ScheduleRealInfo sche = list.get(0);  
621 - s.setXl(sche.getXlBm());  
622 - s.setXlName(sche.getXlName());  
623 - s.setDate(sche.getScheduleDate());  
624 - s.setDateStr(sche.getScheduleDateStr());  
625 - s.setGsdm(sche.getGsBm());  
626 - s.setFgsdm(sche.getFgsBm());  
627 -  
628 - double jhyygl=culateService.culateJhgl(list);//计划营运公里  
629 - double jhjcclc= culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)  
630 - s.setJhyylc(jhyygl);  
631 - s.setJhkslc(jhjcclc);  
632 - s.setJhzlc(Arith.add(jhyygl, jhjcclc));  
633 -  
634 - double ljgl= culateService.culateLjgl(lists);  
635 - double sjyygl= culateService.culateSjgl(lists);  
636 - double zyygl= Arith.add(sjyygl,ljgl);  
637 -  
638 - double ljksgl= culateService.culateLjksgl(lists);  
639 - double sjjccgl=culateService.culateJccgl(lists);  
640 - double sjksgl=culateService.culateKsgl(lists);  
641 - double zksgl=Arith.add(sjjccgl, sjksgl);  
642 - s.setSjyylc(zyygl);  
643 - s.setSjkslc(zksgl);  
644 - s.setSjzlc(Arith.add(zyygl, zksgl));  
645 -  
646 - s.setLjkslc(ljksgl);  
647 -  
648 - s.setSslc(culateService.culateLbgl(list));  
649 - s.setSsbc(culateService.culateLbbc(list));  
650 -  
651 - //计划+临加-少驶=实驶  
652 -// double jl=Arith.sub(Arith.add(jhyygl, ljgl),ssgl);  
653 -// if(jl==zyygl){  
654 -// map.put("zt", 0);  
655 -// }else{  
656 -// map.put("zt", 1);  
657 -// }  
658 -  
659 - s.setLzlc(culateService.culateCJLC(list, "路阻"));  
660 - s.setDmlc(culateService.culateCJLC(list, "吊慢"));  
661 - s.setGzlc(culateService.culateCJLC(list, "故障"));  
662 - s.setJflc(culateService.culateCJLC(list, "纠纷"));  
663 - s.setZslc(culateService.culateCJLC(list, "肇事"));  
664 - s.setQrlc(culateService.culateCJLC(list, "缺人"));  
665 - s.setQclc(culateService.culateCJLC(list, "缺车"));  
666 - s.setKxlc(culateService.culateCJLC(list, "客稀"));  
667 - s.setQhlc(culateService.culateCJLC(list, "气候"));  
668 - s.setYwlc(culateService.culateCJLC(list, "援外"));  
669 - double ssgl_pc=culateService.culateCJLC(list, "配车");  
670 - double ssgl_by=culateService.culateCJLC(list, "保养");  
671 - double ssgl_cj=culateService.culateCJLC(list, "抽减");  
672 - double ssgl_qt=culateService.culateCJLC(list, "其他");  
673 - s.setQtlc(Arith.add(Arith.add(ssgl_pc, ssgl_by),Arith.add(ssgl_cj, ssgl_qt)));  
674 - s.setLjlc(ljgl);  
675 -  
676 - s.setJhbcq(culateService.culateJhbc(list,""));  
677 - s.setJhbcz(culateService.culateJhbc(list, "zgf"));  
678 - s.setJhbcw(culateService.culateJhbc(list, "wgf"));  
679 - s.setSjbcq(culateService.culateSjbc(lists,""));  
680 - s.setSjbcz(culateService.culateSjbc(lists,"zgf"));  
681 - s.setSjbcw(culateService.culateSjbc(lists,"wgf"));  
682 - s.setLjbcq(culateService.culateLjbc(lists,""));  
683 - s.setLjbcz(culateService.culateLjbc(lists,"zgf"));  
684 - s.setLjbcw(culateService.culateLjbc(lists,"wgf"));  
685 - s.setFzbcq(culateService.culateFzbc(lists, ""));  
686 - s.setFzbcz(culateService.culateFzbc(lists, "zgf"));  
687 - s.setFzbcw(culateService.culateFzbc(lists, "wgf"));  
688 - s.setDtbcq(0);  
689 - s.setDtbcz(0);  
690 - s.setDtbcw(0);  
691 - if(t==null){  
692 - Map<String, Object> m_=culateService.culateDjg(lists, list.get(0).getXlBm());  
693 - if(m_.containsKey("djgcsq") && m_.get("djgcsq")!=null)  
694 - s.setDjgq(Integer.valueOf(m_.get("djgcsq").toString()));  
695 - else  
696 - s.setDjgq(0);  
697 - if(m_.containsKey("djgcsz") && m_.get("djgcsz")!=null)  
698 - s.setDjgz(Integer.valueOf(m_.get("djgcsz").toString()));  
699 - else  
700 - s.setDjgz(0);  
701 - if(m_.containsKey("djgcsw") && m_.get("djgcsw")!=null)  
702 - s.setDjgw(Integer.valueOf(m_.get("djgcsw").toString()));  
703 - else  
704 - s.setDjgw(0);  
705 - if(m_.containsKey("djgsj") && m_.get("djgsj")!=null)  
706 - s.setDjgsj(Integer.valueOf(m_.get("djgsj").toString()));  
707 - else  
708 - s.setDjgsj(0);  
709 - }else{  
710 - s.setDjgq(t.getDjgAll());  
711 - s.setDjgz(t.getDjgZgf());  
712 - s.setDjgw(t.getDjgWgf());  
713 - s.setDjgsj(t.getDjgTime());  
714 - }  
715 - }  
716 - return s;  
717 - }  
718 -  
719 - class AccountXlbm implements Comparator<Map<String, Object>>{  
720 - @Override  
721 - public int compare(Map<String, Object> o1, Map<String, Object> o2) {  
722 - // TODO Auto-generated method stub  
723 -// PinyinHelper.convertToPinyinString(ppy.getName(),  
724 -// "" , PinyinFormat.WITHOUT_TONE)  
725 - return o1.get("xlNamePy").toString().compareTo(  
726 - o2.get("xlNamePy").toString());  
727 - }  
728 - }  
729 -  
730 - class AccountXlbmStr implements Comparator<String>{  
731 - @Override  
732 - public int compare(String o1, String o2) {  
733 - // TODO Auto-generated method stub  
734 - return o1.compareTo(o2);  
735 - }  
736 - }  
737 -  
738 - @Override  
739 - public List<CalcStatistics> calcStatisticsDaily(String gsdm, String fgsdm,  
740 - String line, String date, String date2, String xlName, String type,String nature) {  
741 - // TODO Auto-generated method stub  
742 - List<CalcStatistics> listAll = new ArrayList<CalcStatistics>();  
743 - if(line.length() > 0){  
744 - listAll = calcStatisticsRepository.selectByDateAndLineTj2(line, date, date2);  
745 - } else {  
746 - listAll = calcStatisticsRepository.selectByDateAndLineTj(line, date, date2, gsdm, fgsdm);  
747 - }  
748 - Map<String, Boolean> lineMap=lineService.lineNature();  
749 - List<CalcStatistics> list = new ArrayList<CalcStatistics>();  
750 - if(nature.equals("0")){  
751 - list=listAll;  
752 - }else{  
753 - for (int i = 0; i < listAll.size(); i++) {  
754 - CalcStatistics c=listAll.get(i);  
755 - if(nature.equals("1")){  
756 - if(lineMap.get(c.getXl())){  
757 - list.add(c);  
758 - }  
759 - }else{  
760 - if(!lineMap.get(c.getXl())){  
761 - list.add(c);  
762 - }  
763 - }  
764 - }  
765 - }  
766 - List<CalcStatistics> resList = new ArrayList<CalcStatistics>();  
767 - Map<String, List<CalcStatistics>> keyMap = new HashMap<String, List<CalcStatistics>>();  
768 - List<String> keyList = new ArrayList<String>();  
769 -  
770 - for(CalcStatistics s : list){  
771 - try {  
772 -// String key = PinyinHelper.convertToPinyinString(s.getXl(), "" , PinyinFormat.WITHOUT_TONE);  
773 - String key =s.getFgsdm()+s.getXl();  
774 -// if(line.equals("")){  
775 -// key =s.getFgsdm()+s.getXl();  
776 -// }else{  
777 -// key =s.getXl();  
778 -// }  
779 - if(!keyMap.containsKey(key)){  
780 - keyMap.put(key, new ArrayList<CalcStatistics>());  
781 - keyList.add(key);  
782 - }  
783 - keyMap.get(key).add(s);  
784 - } catch (Exception e) {  
785 - // TODO Auto-generated catch block  
786 - e.printStackTrace();  
787 - }  
788 - }  
789 - Collections.sort(keyList, new AccountXlbmStr());  
790 -  
791 - for(String key : keyList){  
792 - if(keyMap.get(key).size() > 0){  
793 - CalcStatistics s = keyMap.get(key).get(0);  
794 - if(keyMap.get(key).size() > 1)  
795 - for(int i = 1; i < keyMap.get(key).size(); i++){  
796 - CalcStatistics s_ = keyMap.get(key).get(i);  
797 - s = addStatistics(s, s_);  
798 - }  
799 -// if(line.equals("")){  
800 - s.setFgsName(BasicData.businessFgsCodeNameMap.get(s.getFgsdm()+"_"+s.getGsdm()));  
801 - /*}else{  
802 - List<Line> l=lineRepository.findLineByCode(line);  
803 - if(l.size()>0)  
804 - s.setFgsName(BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));  
805 - }*/  
806 - resList.add(s);  
807 - }  
808 - }  
809 -  
810 - if(resList.size() > 0){  
811 - CalcStatistics temp = new CalcStatistics();  
812 - temp.setXlName("合计");  
813 - temp.setFgsName("");  
814 - for(CalcStatistics s : resList){  
815 - temp = addStatistics(temp, s);  
816 - }  
817 - resList.add(temp);  
818 - }  
819 -  
820 - List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();  
821 - for(CalcStatistics c : resList){  
822 - Map<String, Object> m = new HashMap<String, Object>();  
823 - m.put("fgsName", c.getFgsName());  
824 - m.put("xlName", c.getXlName());  
825 - m.put("jhzlc", c.getJhzlc());  
826 - m.put("jhlc", c.getJhyylc());  
827 - m.put("jcclc", c.getJhkslc());  
828 - m.put("sjzgl", c.getSjzlc());  
829 - m.put("sjgl", c.getSjyylc());  
830 - m.put("sjksgl", c.getSjkslc());  
831 - m.put("ssgl", c.getSslc());  
832 - m.put("ssbc", c.getSsbc());  
833 - m.put("ssgl_lz", c.getLzlc());  
834 - m.put("ssgl_dm", c.getDmlc());  
835 - m.put("ssgl_gz", c.getGzlc());  
836 - m.put("ssgl_jf", c.getJflc());  
837 - m.put("ssgl_zs", c.getZslc());  
838 - m.put("ssgl_qr", c.getQrlc());  
839 - m.put("ssgl_qc", c.getQclc());  
840 - m.put("ssgl_kx", c.getKxlc());  
841 - m.put("ssgl_qh", c.getQhlc());  
842 - m.put("ssgl_yw", c.getYwlc());  
843 - m.put("ssgl_other", c.getQtlc());  
844 - m.put("ljgl", c.getLjlc());  
845 - m.put("ljks", c.getLjkslc());  
846 - m.put("jhbc", c.getJhbcq());  
847 - m.put("jhbc_m", c.getJhbcz());  
848 - m.put("jhbc_a", c.getJhbcw());  
849 - m.put("sjbc", c.getSjbcq());  
850 - m.put("sjbc_m", c.getSjbcz());  
851 - m.put("sjbc_a", c.getSjbcw());  
852 - m.put("ljbc", c.getLjbcq());  
853 - m.put("ljbc_m", c.getLjbcz());  
854 - m.put("ljbc_a", c.getLjbcw());  
855 - m.put("fzbc", c.getFzbcq());  
856 - m.put("fzbc_m", c.getFzbcz());  
857 - m.put("fzbc_a", c.getFzbcw());  
858 - m.put("dtbc", c.getDtbcq());  
859 - m.put("dtbc_m", c.getDtbcz());  
860 - m.put("dtbc_a", c.getDtbcw());  
861 - m.put("djg", c.getDjgq());  
862 - m.put("djg_m", c.getDjgz());  
863 - m.put("djg_a", c.getDjgw());  
864 - m.put("djg_time", c.getDjgsj());  
865 - mapList.add(m);  
866 - }  
867 -  
868 - if (type != null && type.length() != 0 && type.equals("export")) {  
869 - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),  
870 - sdfSimple = new SimpleDateFormat("yyyyMMdd");  
871 - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();  
872 - Map<String, Object> m = new HashMap<String, Object>();  
873 - m.put("date", date+"至"+date2);  
874 - ReportUtils ee = new ReportUtils();  
875 - try {  
876 - String dateTime = "";  
877 - if(date.equals(date2)){  
878 - dateTime = sdfSimple.format(sdfMonth.parse(date));  
879 - } else {  
880 - dateTime = sdfSimple.format(sdfMonth.parse(date))  
881 - +"-"+sdfSimple.format(sdfMonth.parse(date2));  
882 - }  
883 - listI.add(mapList.iterator());  
884 - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";  
885 - ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_.xls",  
886 - path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");  
887 - } catch (Exception e) {  
888 - // TODO: handle exception  
889 - //e.printStackTrace();  
890 - logger.info("" , e);  
891 - }  
892 - }  
893 -  
894 - return resList;  
895 - }  
896 -  
897 - @Override  
898 - public List<Map<String, Object>> calcStatisticsDaily2(String gsdm, String fgsdm,  
899 - String line, String date, String date2, String xlName, String type,String nature) {  
900 - // TODO Auto-generated method stub  
901 - SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");  
902 - Date beginDate = new Date();  
903 - Calendar calendar = Calendar.getInstance();  
904 - calendar.setTime(beginDate);  
905 - calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 4);  
906 - String d2 = dft.format(calendar.getTime()); //当前日期前4天  
907 - calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) +1);  
908 - String d3= dft.format(calendar.getTime()); //当前日期前3天  
909 -  
910 - String d1="";  
911 - String d4="";  
912 - try {  
913 - long t3 = dft.parse(d2).getTime();  
914 - long t1=dft.parse(date).getTime();  
915 - long t2=dft.parse(date2).getTime();  
916 -  
917 - if(t1<=t3 && t2>t3){  
918 - //所选日期区间区间既有实时数据也有历史数据  
919 - d1=date;  
920 - d4=date2;  
921 - } else if (t1>t3&&t2>t3){  
922 - d1=date;  
923 - d2=date2;  
924 - d3=date;  
925 - d4=date2;  
926 - }else{  
927 - d1=date;  
928 - d2=date2;  
929 - //实时数据无需  
930 - d3="";  
931 - d4="";  
932 - }  
933 - } catch (ParseException e1) {  
934 - // TODO Auto-generated catch block  
935 - e1.printStackTrace();  
936 - }  
937 -  
938 -  
939 - List<CalcStatistics> listAll = new ArrayList<CalcStatistics>();  
940 - if(line.length() > 0){  
941 - listAll = calcStatisticsRepository.selectByDateAndLineTj2(line, d1, d2);  
942 - } else {  
943 - listAll = calcStatisticsRepository.selectByDateAndLineTj(line, d1, d2, gsdm, fgsdm);  
944 - }  
945 - Map<String, Boolean> lineMap=lineService.lineNature();  
946 - List<CalcStatistics> list=new ArrayList<CalcStatistics>();  
947 -  
948 - for (int i = 0; i < listAll.size(); i++) {  
949 - CalcStatistics s=listAll.get(i);  
950 - if(nature.equals("0")){  
951 - list.add(s);  
952 - }else if(nature.equals("1")){  
953 - if(lineMap.containsKey(s.getXl()) && lineMap.get(s.getXl())){  
954 - list.add(s);  
955 - }  
956 - }else{  
957 - if(lineMap.containsKey(s.getXl()) && !lineMap.get(s.getXl())){  
958 - list.add(s);  
959 - }  
960 - }  
961 - }  
962 - List<CalcStatistics> resList = new ArrayList<CalcStatistics>();  
963 - Map<String, List<CalcStatistics>> keyMap = new HashMap<String, List<CalcStatistics>>();  
964 - List<String> keyList = new ArrayList<String>();  
965 -  
966 - for(CalcStatistics s : list){  
967 - try {  
968 -// String key = PinyinHelper.convertToPinyinString(s.getXlName(), "" , PinyinFormat.WITHOUT_TONE);  
969 - String key =s.getFgsdm()+s.getXl();  
970 -// if(line.equals("")){  
971 -// key =s.getFgsdm()+s.getXl();  
972 -// }else{  
973 -// key =s.getXl();  
974 -// }  
975 - if(!keyMap.containsKey(key)){  
976 - keyMap.put(key, new ArrayList<CalcStatistics>());  
977 - keyList.add(key);  
978 - }  
979 - keyMap.get(key).add(s);  
980 - } catch (Exception e) {  
981 - // TODO Auto-generated catch block  
982 - e.printStackTrace();  
983 - }  
984 - }  
985 - Collections.sort(keyList, new AccountXlbmStr());  
986 -  
987 - for(String key : keyList){  
988 - if(keyMap.get(key).size() > 0){  
989 - CalcStatistics s = keyMap.get(key).get(0);  
990 - if(keyMap.get(key).size() > 1)  
991 - for(int i = 1; i < keyMap.get(key).size(); i++){  
992 - CalcStatistics s_ = keyMap.get(key).get(i);  
993 - s = addStatistics(s, s_);  
994 - }  
995 - resList.add(s);  
996 - }  
997 - }  
998 -  
999 - if(resList.size() > 0){  
1000 - CalcStatistics temp = new CalcStatistics();  
1001 - temp.setXlName("合计");  
1002 - temp.setXl("hj");  
1003 - for(CalcStatistics s : resList){  
1004 - temp = addStatistics(temp, s);  
1005 - }  
1006 - resList.add(temp);  
1007 - }  
1008 - //统计数据  
1009 - List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();  
1010 - for(CalcStatistics c : resList){  
1011 - Map<String, Object> m = new HashMap<String, Object>();  
1012 - if(c.getXl().equals("hj")){  
1013 - m.put("fgsName", "");  
1014 - m.put("fgsBm", "");  
1015 - }else{  
1016 - m.put("fgsName", BasicData.businessFgsCodeNameMap.get(c.getFgsdm()+"_"+c.getGsdm()));  
1017 - m.put("fgsBm", c.getFgsdm());  
1018 - }  
1019 - m.put("xlBm", c.getXl());  
1020 - m.put("xlName", c.getXlName());  
1021 - m.put("jhzlc", c.getJhzlc());  
1022 - m.put("jhlc", c.getJhyylc());  
1023 - m.put("jcclc", c.getJhkslc());  
1024 - m.put("sjzgl", c.getSjzlc());  
1025 - m.put("sjgl", c.getSjyylc());  
1026 - m.put("sjksgl", c.getSjkslc());  
1027 - m.put("ssgl", c.getSslc());  
1028 - m.put("ssbc", c.getSsbc());  
1029 - m.put("ssgl_lz", c.getLzlc());  
1030 - m.put("ssgl_dm", c.getDmlc());  
1031 - m.put("ssgl_gz", c.getGzlc());  
1032 - m.put("ssgl_jf", c.getJflc());  
1033 - m.put("ssgl_zs", c.getZslc());  
1034 - m.put("ssgl_qr", c.getQrlc());  
1035 - m.put("ssgl_qc", c.getQclc());  
1036 - m.put("ssgl_kx", c.getKxlc());  
1037 - m.put("ssgl_qh", c.getQhlc());  
1038 - m.put("ssgl_yw", c.getYwlc());  
1039 - m.put("ssgl_other", c.getQtlc());  
1040 - m.put("ljgl", c.getLjlc());  
1041 - m.put("ljks", c.getLjkslc());  
1042 - m.put("jhbc", c.getJhbcq());  
1043 - m.put("jhbc_m", c.getJhbcz());  
1044 - m.put("jhbc_a", c.getJhbcw());  
1045 - m.put("sjbc", c.getSjbcq());  
1046 - m.put("sjbc_m", c.getSjbcz());  
1047 - m.put("sjbc_a", c.getSjbcw());  
1048 - m.put("ljbc", c.getLjbcq());  
1049 - m.put("ljbc_m", c.getLjbcz());  
1050 - m.put("ljbc_a", c.getLjbcw());  
1051 - m.put("fzbc", c.getFzbcq());  
1052 - m.put("fzbc_m", c.getFzbcz());  
1053 - m.put("fzbc_a", c.getFzbcw());  
1054 - m.put("dtbc", c.getDtbcq());  
1055 - m.put("dtbc_m", c.getDtbcz());  
1056 - m.put("dtbc_a", c.getDtbcw());  
1057 - m.put("djg", c.getDjgq());  
1058 - m.put("djg_m", c.getDjgz());  
1059 - m.put("djg_a", c.getDjgw());  
1060 - m.put("djg_time", c.getDjgsj());  
1061 - double jl = Arith.sub(Arith.add(m.get("jhlc"), m.get("ljgl")), m.get("ssgl"));  
1062 - if (jl == Double.parseDouble(m.get("sjgl").toString())) {  
1063 - m.put("zt", 0);  
1064 - } else {  
1065 - m.put("zt", 1);  
1066 - }  
1067 - mapList.add(m);  
1068 - }  
1069 -  
1070 - //实时数据  
1071 - List<Map<String, Object>> tjlist=new ArrayList<Map<String, Object>>();  
1072 - if(!d4.equals("")){  
1073 - tjlist= scheduleRealInfoService.statisticsDailyTjHb(gsdm, fgsdm, line, d3, d4, xlName, type,nature);  
1074 - }  
1075 - List<Map<String, Object>> mapListHj = new ArrayList<Map<String, Object>>();  
1076 -// List<String> lineList=new ArrayList<String>();  
1077 - Map<String, Object> kMap=new HashMap<String,Object>();  
1078 - mapList.addAll(tjlist);  
1079 - for (int i = 0; i < mapList.size(); i++) {  
1080 - Map<String, Object> m =mapList.get(i);  
1081 -// if(line.equals("")){  
1082 - if(kMap.get(m.get("fgsBm")+"_"+m.get("xlBm").toString())==null){  
1083 - kMap.put(m.get("fgsBm")+"_"+m.get("xlBm").toString(), m.get("fgsBm")+"_"+m.get("xlBm").toString());  
1084 - }  
1085 -// }else{  
1086 -// if(kMap.get(m.get("xlBm").toString())==null){  
1087 -// kMap.put(m.get("xlBm").toString(), m.get("xlBm").toString());  
1088 -// }  
1089 -// }  
1090 -  
1091 - }  
1092 - for (Object xlbm : kMap.keySet()) {  
1093 - Map<String, Object> hjMap = new HashMap<String, Object>();  
1094 - for (int i = 0; i < mapList.size(); i++) {  
1095 - Map<String, Object> lsMap=mapList.get(i);  
1096 - String xlbm_="";  
1097 -// if(line.equals("")){  
1098 - xlbm_=lsMap.get("fgsBm").toString()+"_"+lsMap.get("xlBm").toString();  
1099 -// }else{  
1100 -// xlbm_=lsMap.get("xlBm").toString();  
1101 -// }  
1102 - if (xlbm_.equals(xlbm)) {  
1103 - if(hjMap.get("xlBm")==null){  
1104 - hjMap.put("xlBm", lsMap.get("xlBm"));  
1105 - hjMap.put("xlName", lsMap.get("xlName"));  
1106 - hjMap.put("fgsName", lsMap.get("fgsName"));  
1107 - try {  
1108 - if(lsMap.get("xlBm").toString().equals("hj")){  
1109 - hjMap.put("xlNamePy", "zzzzz");  
1110 - }else{  
1111 - hjMap.put("xlNamePy", PinyinHelper.convertToPinyinString(lsMap.get("fgsBm").toString()+lsMap.get("xlName").toString(), "", PinyinFormat.WITHOUT_TONE));  
1112 - }  
1113 - } catch (PinyinException e) {  
1114 - // TODO Auto-generated catch block  
1115 - e.printStackTrace();  
1116 - }  
1117 - }  
1118 - hjMap.put("jhzlc", Arith.add(lsMap.get("jhzlc"), hjMap.get("jhzlc")==null?"0":hjMap.get("jhzlc")));  
1119 - hjMap.put("jhlc", Arith.add(lsMap.get("jhlc"), hjMap.get("jhlc")==null?"0":hjMap.get("jhlc")));  
1120 - hjMap.put("jcclc",Arith.add(lsMap.get("jcclc"), hjMap.get("jcclc")==null?"0":hjMap.get("jcclc")));  
1121 - hjMap.put("sjzgl",Arith.add(lsMap.get("sjzgl"), hjMap.get("sjzgl")==null?"0": hjMap.get("sjzgl")));  
1122 - hjMap.put("sjgl", Arith.add(lsMap.get("sjgl"), hjMap.get("sjgl")==null?"0":hjMap.get("sjgl")));  
1123 - hjMap.put("sjksgl", Arith.add(lsMap.get("sjksgl"), hjMap.get("sjksgl")==null?"0":hjMap.get("sjksgl")));  
1124 - hjMap.put("ssgl", Arith.add(lsMap.get("ssgl"), hjMap.get("ssgl")==null?"0":hjMap.get("ssgl")));  
1125 - hjMap.put("ssbc", Integer.parseInt(lsMap.get("ssbc").toString())+Integer.parseInt(hjMap.get("ssbc")==null?"0":hjMap.get("ssbc").toString()));  
1126 - hjMap.put("ssgl_lz", Arith.add(lsMap.get("ssgl_lz"), hjMap.get("ssgl_lz")==null?"0":hjMap.get("ssgl_lz")));  
1127 - hjMap.put("ssgl_dm", Arith.add(lsMap.get("ssgl_dm"), hjMap.get("ssgl_dm")==null?"0":hjMap.get("ssgl_dm")));  
1128 - hjMap.put("ssgl_gz", Arith.add(lsMap.get("ssgl_gz"), hjMap.get("ssgl_gz")==null?"0":hjMap.get("ssgl_gz")));  
1129 - hjMap.put("ssgl_jf", Arith.add(lsMap.get("ssgl_jf"), hjMap.get("ssgl_jf")==null?"0":hjMap.get("ssgl_jf")));  
1130 - hjMap.put("ssgl_zs", Arith.add(lsMap.get("ssgl_zs"), hjMap.get("ssgl_zs")==null?"0":hjMap.get("ssgl_zs")));  
1131 - hjMap.put("ssgl_qr", Arith.add(lsMap.get("ssgl_qr"), hjMap.get("ssgl_qr")==null?"0":hjMap.get("ssgl_qr")));  
1132 - hjMap.put("ssgl_qc", Arith.add(lsMap.get("ssgl_qc"), hjMap.get("ssgl_qc")==null?"0":hjMap.get("ssgl_qc")));  
1133 - hjMap.put("ssgl_kx", Arith.add(lsMap.get("ssgl_kx"), hjMap.get("ssgl_kx")==null?"0":hjMap.get("ssgl_kx")));  
1134 - hjMap.put("ssgl_qh", Arith.add(lsMap.get("ssgl_qh"), hjMap.get("ssgl_qh")==null?"0":hjMap.get("ssgl_qh")));  
1135 - hjMap.put("ssgl_yw", Arith.add(lsMap.get("ssgl_yw"), hjMap.get("ssgl_yw")==null?"0":hjMap.get("ssgl_yw")));  
1136 - hjMap.put("ssgl_other", Arith.add(lsMap.get("ssgl_other"), hjMap.get("ssgl_other")==null?"0":hjMap.get("ssgl_other")));  
1137 - hjMap.put("ljgl", Arith.add(lsMap.get("ljgl"), hjMap.get("ljgl")==null?"0":hjMap.get("ljgl")));  
1138 - hjMap.put("ljks", Arith.add(lsMap.get("ljks"), hjMap.get("ljks")==null?"0":hjMap.get("ljks")));  
1139 - hjMap.put("jhbc", Integer.parseInt(lsMap.get("jhbc").toString())+ Integer.parseInt(hjMap.get("jhbc")==null?"0":hjMap.get("jhbc").toString()));  
1140 - hjMap.put("jhbc_m", Integer.parseInt(lsMap.get("jhbc_m").toString())+Integer.parseInt(hjMap.get("jhbc_m")==null?"0":hjMap.get("jhbc_m").toString()));  
1141 - hjMap.put("jhbc_a", Integer.parseInt(lsMap.get("jhbc_a").toString())+ Integer.parseInt(hjMap.get("jhbc_a")==null?"0":hjMap.get("jhbc_a").toString()));  
1142 - hjMap.put("sjbc", Integer.parseInt(lsMap.get("sjbc").toString())+ Integer.parseInt(hjMap.get("sjbc")==null?"0":hjMap.get("sjbc").toString()));  
1143 - hjMap.put("sjbc_m",Integer.parseInt(lsMap.get("sjbc_m").toString())+ Integer.parseInt(hjMap.get("sjbc_m")==null?"0":hjMap.get("sjbc_m").toString()));  
1144 - hjMap.put("sjbc_a", Integer.parseInt(lsMap.get("sjbc_a").toString())+ Integer.parseInt(hjMap.get("sjbc_a")==null?"0":hjMap.get("sjbc_a").toString()));  
1145 - hjMap.put("ljbc", Integer.parseInt(lsMap.get("ljbc").toString())+ Integer.parseInt(hjMap.get("ljbc")==null?"0":hjMap.get("ljbc").toString()));  
1146 - hjMap.put("ljbc_m", Integer.parseInt(lsMap.get("ljbc_m").toString())+ Integer.parseInt(hjMap.get("ljbc_m")==null?"0":hjMap.get("ljbc_m").toString()));  
1147 - hjMap.put("ljbc_a", Integer.parseInt(lsMap.get("ljbc_a").toString())+Integer.parseInt(hjMap.get("ljbc_a")==null?"0":hjMap.get("ljbc_a").toString()));  
1148 - hjMap.put("fzbc", Integer.parseInt(lsMap.get("fzbc").toString())+ Integer.parseInt(hjMap.get("fzbc")==null?"0":hjMap.get("fzbc").toString()));  
1149 - hjMap.put("fzbc_m",Integer.parseInt(lsMap.get("fzbc_m").toString())+ Integer.parseInt(hjMap.get("fzbc_m")==null?"0":hjMap.get("fzbc_m").toString()));  
1150 - hjMap.put("fzbc_a",Integer.parseInt(lsMap.get("fzbc_a").toString())+ Integer.parseInt(hjMap.get("fzbc_a")==null?"0":hjMap.get("fzbc_a").toString()));  
1151 - hjMap.put("dtbc", Integer.parseInt(lsMap.get("dtbc").toString())+ Integer.parseInt(hjMap.get("dtbc")==null?"0":hjMap.get("dtbc").toString()));  
1152 - hjMap.put("dtbc_m", Integer.parseInt(lsMap.get("dtbc_m").toString())+ Integer.parseInt(hjMap.get("dtbc_m")==null?"0":hjMap.get("dtbc_m").toString()));  
1153 - hjMap.put("dtbc_a", Integer.parseInt(lsMap.get("dtbc_a").toString())+ Integer.parseInt(hjMap.get("dtbc_a")==null?"0":hjMap.get("dtbc_a").toString()));  
1154 - hjMap.put("djg", Integer.parseInt(lsMap.get("djg").toString())+ Integer.parseInt(hjMap.get("djg")==null?"0":hjMap.get("djg").toString()));  
1155 - hjMap.put("djg_m", Integer.parseInt(lsMap.get("djg_m").toString())+ Integer.parseInt(hjMap.get("djg_m")==null?"0":hjMap.get("djg_m").toString()));  
1156 - hjMap.put("djg_a", Integer.parseInt(lsMap.get("djg_a").toString())+ Integer.parseInt(hjMap.get("djg_a")==null?"0":hjMap.get("djg_a").toString()));  
1157 - if(hjMap.get("djg_time")==null){  
1158 - hjMap.put("djg_time", lsMap.get("djg_time"));  
1159 - }else{  
1160 - if(Arith.add(lsMap.get("djg_time"),0)>Arith.add(hjMap.get("djg_time"), 0)){  
1161 - hjMap.put("djg_time", lsMap.get("djg_time"));  
1162 - }else{  
1163 - hjMap.put("djg_time",hjMap.get("djg_time"));  
1164 - }  
1165 - }  
1166 - double jl = Arith.sub(Arith.add(hjMap.get("jhlc"), hjMap.get("ljgl")), hjMap.get("ssgl"));  
1167 - if (jl == Double.parseDouble(hjMap.get("sjgl").toString())) {  
1168 - hjMap.put("zt", 0);  
1169 - } else {  
1170 - hjMap.put("zt", 1);  
1171 - }  
1172 - }  
1173 - }  
1174 - mapListHj.add(hjMap);  
1175 - }  
1176 -  
1177 - Collections.sort(mapListHj, new AccountXlbmByping());  
1178 -  
1179 - /*if(!line.equals("")){  
1180 - for (int i = 0; i < mapListHj.size(); i++) {  
1181 - if(mapListHj.get(i).get("xlBm").equals(line)){  
1182 - List<Line> l=lineRepository.findLineByCode(line);  
1183 - if(l.size()>0)  
1184 - mapListHj.get(i).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));  
1185 - }  
1186 - }  
1187 - }*/  
1188 - if (type != null && type.length() != 0 && type.equals("export")) {  
1189 - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),  
1190 - sdfSimple = new SimpleDateFormat("yyyyMMdd");  
1191 - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();  
1192 - Map<String, Object> m = new HashMap<String, Object>();  
1193 - m.put("date", date+"至"+date2);  
1194 - ReportUtils ee = new ReportUtils();  
1195 - try {  
1196 - String dateTime = "";  
1197 - if(date.equals(date2)){  
1198 - dateTime = sdfSimple.format(sdfMonth.parse(date));  
1199 - } else {  
1200 - dateTime = sdfSimple.format(sdfMonth.parse(date))  
1201 - +"-"+sdfSimple.format(sdfMonth.parse(date2));  
1202 - }  
1203 - listI.add(mapListHj.iterator());  
1204 - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";  
1205 - ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",  
1206 - path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");  
1207 - } catch (Exception e) {  
1208 - // TODO: handle exception  
1209 - //e.printStackTrace();  
1210 - logger.info("" , e);  
1211 - }  
1212 - }  
1213 -  
1214 - return mapListHj;  
1215 - }  
1216 -  
1217 - public CalcStatistics addStatistics(CalcStatistics s, CalcStatistics s_){  
1218 - s.setJhzlc(Arith.add(s.getJhzlc()!=null?s.getJhzlc():0, s_.getJhzlc()));  
1219 - s.setJhyylc(Arith.add(s.getJhyylc()!=null?s.getJhyylc():0, s_.getJhyylc()));  
1220 - s.setJhkslc(Arith.add(s.getJhkslc()!=null?s.getJhkslc():0, s_.getJhkslc()));  
1221 - s.setSjzlc(Arith.add(s.getSjzlc()!=null?s.getSjzlc():0, s_.getSjzlc()));  
1222 - s.setSjyylc(Arith.add(s.getSjyylc()!=null?s.getSjyylc():0, s_.getSjyylc()));  
1223 - s.setSjkslc(Arith.add(s.getSjkslc()!=null?s.getSjkslc():0, s_.getSjkslc()));  
1224 - s.setSslc(Arith.add(s.getSslc()!=null?s.getSslc():0, s_.getSslc()));  
1225 - s.setSsbc(s.getSsbc() + s_.getSsbc());  
1226 - s.setLzlc(Arith.add(s.getLzlc()!=null?s.getLzlc():0, s_.getLzlc()));  
1227 - s.setDmlc(Arith.add(s.getDmlc()!=null?s.getDmlc():0, s_.getDmlc()));  
1228 - s.setGzlc(Arith.add(s.getGzlc()!=null?s.getGzlc():0, s_.getGzlc()));  
1229 - s.setJflc(Arith.add(s.getJflc()!=null?s.getJflc():0, s_.getJflc()));  
1230 - s.setZslc(Arith.add(s.getZslc()!=null?s.getZslc():0, s_.getZslc()));  
1231 - s.setQrlc(Arith.add(s.getQrlc()!=null?s.getQrlc():0, s_.getQrlc()));  
1232 - s.setQclc(Arith.add(s.getQclc()!=null?s.getQclc():0, s_.getQclc()));  
1233 - s.setKxlc(Arith.add(s.getKxlc()!=null?s.getKxlc():0, s_.getKxlc()));  
1234 - s.setQhlc(Arith.add(s.getQhlc()!=null?s.getQhlc():0, s_.getQhlc()));  
1235 - s.setYwlc(Arith.add(s.getYwlc()!=null?s.getYwlc():0, s_.getYwlc()));  
1236 - s.setQtlc(Arith.add(s.getQtlc()!=null?s.getQtlc():0, s_.getQtlc()));  
1237 - s.setLjlc(Arith.add(s.getLjlc()!=null?s.getLjlc():0, s_.getLjlc()));  
1238 - if(s_.getLjkslc() == null){  
1239 - s_.setLjkslc(0d);  
1240 - }  
1241 - s.setLjkslc(Arith.add(s.getLjkslc()!=null?s.getLjkslc():0, s_.getLjkslc()));  
1242 - s.setJhbcq(s.getJhbcq() + s_.getJhbcq());  
1243 - s.setJhbcz(s.getJhbcz() + s_.getJhbcz());  
1244 - s.setJhbcw(s.getJhbcw() + s_.getJhbcw());  
1245 - s.setSjbcq(s.getSjbcq() + s_.getSjbcq());  
1246 - s.setSjbcz(s.getSjbcz() + s_.getSjbcz());  
1247 - s.setSjbcw(s.getSjbcw() + s_.getSjbcw());  
1248 - s.setLjbcq(s.getLjbcq() + s_.getLjbcq());  
1249 - s.setLjbcz(s.getLjbcz() + s_.getLjbcz());  
1250 - s.setLjbcw(s.getLjbcw() + s_.getLjbcw());  
1251 - s.setFzbcq(s.getFzbcq() + s_.getFzbcq());  
1252 - s.setFzbcz(s.getFzbcz() + s_.getFzbcz());  
1253 - s.setFzbcw(s.getFzbcw() + s_.getFzbcw());  
1254 - s.setDtbcq(s.getDtbcq() + s_.getDtbcq());  
1255 - s.setDtbcz(s.getDtbcz() + s_.getDtbcz());  
1256 - s.setDtbcw(s.getDtbcw() + s_.getDtbcw());  
1257 - s.setDjgq(s.getDjgq() + s_.getDjgq());  
1258 - s.setDjgz(s.getDjgz() + s_.getDjgz());  
1259 - s.setDjgw(s.getDjgw() + s_.getDjgw());  
1260 - s.setDjgsj(s.getDjgsj()>s_.getDjgsj()?s.getDjgsj():s_.getDjgsj());  
1261 - return s;  
1262 - }  
1263 -  
1264 - @Transactional  
1265 - @Override  
1266 - public Map<String, Object> calcLineMileage(String date, String line) {  
1267 - Map<String, Object> resMap = new HashMap<String, Object>();  
1268 -  
1269 - if(date.length() == 0){  
1270 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
1271 - Date d = new Date();  
1272 - d.setTime(d.getTime() - 4 * 1000 * 60 * 60 * 24);  
1273 - date = sdf.format(d);  
1274 - }  
1275 -  
1276 - resMap.put("date", date);  
1277 - resMap.put("line", line);  
1278 - if(date == null || date.trim().length() == 0){  
1279 - resMap.put("status", ResponseCode.ERROR);  
1280 - resMap.put("remark", "日期不正确或为空");  
1281 - return resMap;  
1282 - } else {  
1283 - date = date.trim();  
1284 - }  
1285 - if(line == null){  
1286 - line = "";  
1287 - } else {  
1288 - line = line.trim();  
1289 - }  
1290 -  
1291 - Map<String, Object> map = new HashMap<String, Object>();  
1292 - List<CalcLineMileage> list = new ArrayList<CalcLineMileage>();  
1293 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
1294 - Date dateTime = new Date();  
1295 -  
1296 - try {  
1297 -  
1298 - String gsSql="select gs_bm, fgs_bm from bsth_c_s_sp_info_real where schedule_date_str = '"+date+"'";  
1299 - if(line.trim().length() > 0)  
1300 - gsSql += " and xl_bm = '"+line+"'";  
1301 - gsSql += " group by gs_bm, fgs_bm";  
1302 - List<Map<String, String>> gsList=jdbcTemplate.query(gsSql, new RowMapper<Map<String, String>>() {  
1303 - @Override  
1304 - public Map<String, String> mapRow(ResultSet arg0, int arg1) throws SQLException {  
1305 - Map<String, String> m = new HashMap<String, String>();  
1306 - m.put("gsdm", arg0.getString("gs_bm"));  
1307 - m.put("fgsdm", arg0.getString("fgs_bm"));  
1308 - return m;  
1309 - }});  
1310 -  
1311 - map.put("date", date);  
1312 - map.put("date2", date);  
1313 - for(Map<String, String> tempMap : gsList){  
1314 - map.put("gsdm", tempMap.get("gsdm").toString());  
1315 - map.put("fgsdm", tempMap.get("fgsdm").toString());  
1316 - List<Map<String, Object>> countByList = reportService.countByList(map);  
1317 - for(Map<String, Object> m : countByList){  
1318 - if(!m.containsKey("xlName") || m.get("xlName")==null  
1319 - || m.get("xlName").toString().equals("合计"))  
1320 - continue;  
1321 - CalcLineMileage c = new CalcLineMileage();  
1322 - c.setDate(sdf.parse(date));  
1323 - c.setDateStr(date);  
1324 - c.setGsdm(map.get("gsdm").toString());  
1325 - c.setGsName(m.get("gs").toString());  
1326 - c.setFgsdm(map.get("fgsdm").toString());  
1327 - c.setFgsName(m.get("fgs").toString());  
1328 - c.setXl(m.get("line").toString());  
1329 - c.setXlName(m.get("xlName").toString());  
1330 - c.setJhzlc(Double.valueOf(m.get("jhzlc").toString()));  
1331 - c.setJhlc(Double.valueOf(m.get("jhlc").toString()));  
1332 - c.setJcclc(Double.valueOf(m.get("jcclc").toString()));  
1333 - c.setSjzgl(Double.valueOf(m.get("sjzgl").toString()));  
1334 - c.setJhnlc(Double.valueOf(m.get("jhnlc").toString()));  
1335 - c.setJhwlc(Double.valueOf(m.get("jhwlc").toString()));  
1336 - c.setJhnjcclc(Double.valueOf(m.get("jhnjcclc").toString()));  
1337 - c.setJhwjcclc(Double.valueOf(m.get("jhwjcclc").toString()));  
1338 - c.setJhwjcclcz(Double.valueOf(m.get("jhwjcclc_z").toString()));  
1339 - c.setZrwjcclc(Double.valueOf(m.get("zrwjcclc").toString()));  
1340 - c.setZrwjcclc1(Double.valueOf(m.get("zrwjcclc1").toString()));  
1341 - c.setZrwjcclc2(Double.valueOf(m.get("zrwjcclc2").toString()));  
1342 - c.setZrwjcclcqt(Double.valueOf(m.get("zrwjcclcqt").toString()));  
1343 - c.setKfks(Double.valueOf(m.get("kfks").toString()));  
1344 - c.setLbss(Double.valueOf(m.get("lbss").toString()));  
1345 - c.setSsglLz(Double.valueOf(m.get("ssgl_lz").toString()));  
1346 - c.setSsglDm(Double.valueOf(m.get("ssgl_dm").toString()));  
1347 - c.setSsglGz(Double.valueOf(m.get("ssgl_gz").toString()));  
1348 - c.setSsglJf(Double.valueOf(m.get("ssgl_jf").toString()));  
1349 - c.setSsglZs(Double.valueOf(m.get("ssgl_zs").toString()));  
1350 - c.setSsglQr(Double.valueOf(m.get("ssgl_qr").toString()));  
1351 - c.setSsglQc(Double.valueOf(m.get("ssgl_qc").toString()));  
1352 - c.setSsglKx(Double.valueOf(m.get("ssgl_kx").toString()));  
1353 - c.setSsglQh(Double.valueOf(m.get("ssgl_qh").toString()));  
1354 - c.setSsglYw(Double.valueOf(m.get("ssgl_yw").toString()));  
1355 - c.setSsglOther(Double.valueOf(m.get("ssgl_other").toString()));  
1356 - c.setLjyy(Double.valueOf(m.get("ljyy").toString()));  
1357 - c.setLjjcc(Double.valueOf(m.get("ljjcc").toString()));  
1358 - c.setLjkfks(Double.valueOf(m.get("ljkfks").toString()));  
1359 - c.setCreateDate(dateTime);  
1360 - list.add(c);  
1361 - }  
1362 - }  
1363 -  
1364 - if(line.length() > 0){  
1365 - calcLineMileageRepository.deleteByDateAndLine(date, line);  
1366 - } else {  
1367 - calcLineMileageRepository.deleteByDate(date);  
1368 - }  
1369 - calcLineMileageRepository.saveAll(list);  
1370 -  
1371 - resMap.put("status", ResponseCode.SUCCESS);  
1372 - } catch (Exception e) {  
1373 - // TODO: handle exception  
1374 - resMap.put("status", ResponseCode.ERROR);  
1375 - logger.error("save erro.", e);  
1376 - e.printStackTrace();  
1377 - }  
1378 - return resMap;  
1379 - }  
1380 -  
1381 - @Transactional  
1382 - @Override  
1383 - public Map<String, Object> calcBusMileage(String date, String line) {  
1384 - Map<String, Object> resMap = new HashMap<String, Object>();  
1385 -  
1386 - if(date.length() == 0){  
1387 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
1388 - Date d = new Date();  
1389 - d.setTime(d.getTime() - 4 * 1000 * 60 * 60 * 24);  
1390 - date = sdf.format(d);  
1391 - }  
1392 -  
1393 - resMap.put("date", date);  
1394 - resMap.put("line", line);  
1395 - if(date == null || date.trim().length() == 0){  
1396 - resMap.put("status", ResponseCode.ERROR);  
1397 - resMap.put("remark", "日期不正确或为空");  
1398 - return resMap;  
1399 - } else {  
1400 - date = date.trim();  
1401 - }  
1402 - if(line == null){  
1403 - line = "";  
1404 - } else {  
1405 - line = line.trim();  
1406 - }  
1407 -  
1408 - Map<String, Object> map = new HashMap<String, Object>();  
1409 - Map<String, Object> xlmap = new HashMap<String, Object>();  
1410 - List<CalcBusMileage> list = new ArrayList<CalcBusMileage>();  
1411 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
1412 - Date dateTime = new Date();  
1413 -  
1414 - try {  
1415 -  
1416 - String gsSql="select gs_bm, max(gs_name) gs_name, fgs_bm from bsth_c_s_sp_info_real"  
1417 - + " where schedule_date_str = '"+date+"'";  
1418 - if(line.trim().length() > 0)  
1419 - gsSql += " and xl_bm = '"+line+"'";  
1420 - gsSql += " group by gs_bm, fgs_bm";  
1421 - List<Map<String, String>> gsList=jdbcTemplate.query(gsSql, new RowMapper<Map<String, String>>() {  
1422 - @Override  
1423 - public Map<String, String> mapRow(ResultSet arg0, int arg1) throws SQLException {  
1424 - Map<String, String> m = new HashMap<String, String>();  
1425 - m.put("gsdm", arg0.getString("gs_bm"));  
1426 - m.put("gsName", arg0.getString("gs_name"));  
1427 - m.put("fgsdm", arg0.getString("fgs_bm"));  
1428 - return m;  
1429 - }});  
1430 -  
1431 - List<Line> xlList = lineRepository.findAllService();  
1432 - for(Line l : xlList){  
1433 - xlmap.put(l.getName(), l.getLineCode());  
1434 - }  
1435 -  
1436 - map.put("date", date);  
1437 - map.put("date2", date);  
1438 - map.put("zs", "js");  
1439 - for(Map<String, String> tempMap : gsList){  
1440 - map.put("gsdm", tempMap.get("gsdm").toString());  
1441 - map.put("fgsdm", tempMap.get("fgsdm").toString());  
1442 - List<Map<String, Object>> countByList = reportService.countByBusList(map);  
1443 - for(Map<String, Object> m : countByList){  
1444 - if(!m.containsKey("xlName") || m.get("xlName")==null  
1445 - || m.get("xlName").toString().equals("合计"))  
1446 - continue;  
1447 - CalcBusMileage c = new CalcBusMileage();  
1448 - c.setDate(sdf.parse(date));  
1449 - c.setDateStr(date);  
1450 - c.setGsdm(map.get("gsdm").toString());  
1451 - c.setGsName(tempMap.get("gsName").toString());  
1452 - c.setFgsdm(map.get("fgsdm").toString());  
1453 - c.setFgsName(m.get("fgs").toString());  
1454 - c.setXl(xlmap.get(m.get("xlName").toString()).toString());  
1455 - c.setXlName(m.get("xlName").toString());  
1456 - c.setNbbm(m.get("nbbm").toString());  
1457 - c.setjGh(m.get("jGh").toString());  
1458 - c.setjName(m.get("jName").toString());  
1459 - c.setsGh(m.get("sGh").toString());  
1460 - c.setsName(m.get("sName").toString());  
1461 - c.setZlc(Double.valueOf(m.get("zlc").toString()));  
1462 - c.setJhnlc(Double.valueOf(m.get("jhnlc").toString()));  
1463 - c.setJhwlc(Double.valueOf(m.get("jhwlc").toString()));  
1464 - c.setJhnjcclc(Double.valueOf(m.get("jhnjcclc").toString()));  
1465 - c.setJhwjcclc(Double.valueOf(m.get("jhwjcclc").toString()));  
1466 - c.setJhwjcclcz(Double.valueOf(m.get("jhwjcclc_z").toString()));  
1467 - c.setKfks(Double.valueOf(m.get("kfks").toString()));  
1468 - c.setZrwjcclc(Double.valueOf(m.get("zrwjcclc").toString()));  
1469 - c.setZrwjcclc1(Double.valueOf(m.get("zrwjcclc1").toString()));  
1470 - c.setZrwjcclc2(Double.valueOf(m.get("zrwjcclc2").toString()));  
1471 - c.setZrwjcclcqt(Double.valueOf(m.get("zrwjcclcqt").toString()));  
1472 - c.setLjyy(Double.valueOf(m.get("ljyy").toString()));  
1473 - c.setLjjcc(Double.valueOf(m.get("ljjcc").toString()));  
1474 - if(m.containsKey("ljkfks") && m.get("ljkfks") != null){  
1475 - c.setLjkfks(Double.valueOf(m.get("ljkfks").toString()));  
1476 - } else {  
1477 - c.setLjkfks(0d);  
1478 - }  
1479 - c.setDhl(Double.valueOf(m.get("dhl").toString()));  
1480 - c.setCdl(Double.valueOf(m.get("cdl").toString()));  
1481 - c.setYhl(Double.valueOf(m.get("yhl").toString()));  
1482 - c.setJzl(Double.valueOf(m.get("jzl").toString()));  
1483 - c.setHyl(Double.valueOf(m.get("hyl").toString()));  
1484 - c.setJhzlc(Double.valueOf(m.get("jhzlc").toString()));  
1485 - c.setCreateDate(dateTime);  
1486 - list.add(c);  
1487 - }  
1488 - }  
1489 -  
1490 - if(line.length() > 0){  
1491 - calcBusMileageRepository.deleteByDateAndLine(date, line);  
1492 - } else {  
1493 - calcBusMileageRepository.deleteByDate(date);  
1494 - }  
1495 - calcBusMileageRepository.saveAll(list);  
1496 -  
1497 - resMap.put("status", ResponseCode.SUCCESS);  
1498 - } catch (Exception e) {  
1499 - // TODO: handle exception  
1500 - resMap.put("status", ResponseCode.ERROR);  
1501 - logger.error("save erro.", e);  
1502 - e.printStackTrace();  
1503 - }  
1504 - return resMap;  
1505 - }  
1506 -  
1507 - @Override  
1508 - public List<Map<String, Object>> getLineMileage(String gsdm, String fgsdm, String line,  
1509 - String date, String date2, String xlName, String zt, String by, String type) {  
1510 - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();  
1511 - List<CalcLineMileage> resList = new ArrayList<CalcLineMileage>();  
1512 - List<CalcLineMileage> list = new ArrayList<CalcLineMileage>();  
1513 - List<CalcLineMileage> calcs = new ArrayList<CalcLineMileage>();  
1514 - List<String> keyList = new ArrayList<String>();  
1515 - Map<String, List<CalcLineMileage>> keyMap = new HashMap<String, List<CalcLineMileage>>();  
1516 -  
1517 - if(line == null || line.trim().length() == 0){  
1518 - list = calcLineMileageRepository.selectByDateAndLineTj(line, date, date2, gsdm, fgsdm);  
1519 - } else {  
1520 - list = calcLineMileageRepository.selectByDateAndLineTj2(line, date, date2);  
1521 - }  
1522 -  
1523 - for(CalcLineMileage c : list){  
1524 - String key = c.getXlName();  
1525 - if(!keyMap.containsKey(key)){  
1526 - keyMap.put(key, new ArrayList<CalcLineMileage>());  
1527 - keyList.add(key);  
1528 - }  
1529 - keyMap.get(key).add(c);  
1530 - }  
1531 -  
1532 - for(String key : keyList){  
1533 - CalcLineMileage c1 = keyMap.get(key).get(0);  
1534 - for(int i = 1; i < keyMap.get(key).size(); i++){  
1535 - CalcLineMileage c2 = keyMap.get(key).get(i);  
1536 - c1 = addLineMileage(c1, c2);  
1537 - }  
1538 - calcs.add(c1);  
1539 - }  
1540 -  
1541 - CalcLineMileage temp = new CalcLineMileage();  
1542 - temp.setXlName("合计");  
1543 - for(CalcLineMileage c : calcs){  
1544 - temp = addLineMileage(temp, c);  
1545 - resList.add(c);  
1546 - }  
1547 - if(resList.size() > 0)  
1548 - resList.add(temp);  
1549 -  
1550 - for(CalcLineMileage c : resList){  
1551 - Map<String, Object> m = new HashMap<String, Object>();  
1552 - if(c.getXlName().equals("合计")){  
1553 - m.put("gsdm", "");  
1554 - m.put("gs", "");  
1555 - m.put("fgsdm", "");  
1556 - m.put("fgs", "");  
1557 - } else {  
1558 - m.put("gsdm", c.getGsdm());  
1559 - m.put("gs", c.getGsName());  
1560 - m.put("fgsdm", c.getFgsdm());  
1561 - m.put("fgs", c.getFgsName());  
1562 - }  
1563 - m.put("xlName", c.getXlName());  
1564 - m.put("jhzlc", c.getJhzlc());  
1565 - m.put("jhlc", c.getJhlc());  
1566 - m.put("jcclc", c.getJcclc());  
1567 - m.put("sjzgl", c.getSjzgl());  
1568 - m.put("jhnlc", c.getJhnlc());  
1569 - m.put("jhwlc", c.getJhwlc());  
1570 - m.put("jhnjcclc", c.getJhnjcclc());  
1571 - m.put("jhwjcclc", c.getJhwjcclc());  
1572 - m.put("jhwjcclc_z", c.getJhwjcclcz());  
1573 - m.put("zrwjcclc", c.getZrwjcclc());  
1574 - m.put("zrwjcclc1", c.getZrwjcclc1());  
1575 - m.put("zrwjcclc2", c.getZrwjcclc2());  
1576 - m.put("zrwjcclcqt", c.getZrwjcclcqt());  
1577 - m.put("kfks", c.getKfks());  
1578 - m.put("lbss", c.getLbss());  
1579 - m.put("ssgl_lz", c.getSsglLz());  
1580 - m.put("ssgl_dm", c.getSsglDm());  
1581 - m.put("ssgl_gz", c.getSsglGz());  
1582 - m.put("ssgl_jf", c.getSsglJf());  
1583 - m.put("ssgl_zs", c.getSsglZs());  
1584 - m.put("ssgl_qr", c.getSsglQr());  
1585 - m.put("ssgl_qc", c.getSsglQc());  
1586 - m.put("ssgl_kx", c.getSsglKx());  
1587 - m.put("ssgl_qh", c.getSsglQh());  
1588 - m.put("ssgl_yw", c.getSsglYw());  
1589 - m.put("ssgl_other", c.getSsglOther());  
1590 - m.put("ljyy", c.getLjyy());  
1591 - m.put("ljjcc", c.getLjjcc());  
1592 - m.put("ljkfks", c.getLjkfks());  
1593 - lMap.add(m);  
1594 - }  
1595 -  
1596 - if(type.equals("export")){  
1597 - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),  
1598 - sdfSimple = new SimpleDateFormat("yyyyMMdd");  
1599 - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();  
1600 - Map<String, Object> m = new HashMap<String, Object>();  
1601 - m.put("date", date);  
1602 - m.put("date1", date2);  
1603 -// String by=map.get("by").toString();  
1604 - String xls="";  
1605 - if(by.equals("sj")){  
1606 - xls="countByLine.xls";  
1607 - }else{  
1608 - xls="countByLines.xls";  
1609 - }  
1610 - ReportUtils ee = new ReportUtils();  
1611 - try {  
1612 - String dateTime = "";  
1613 - if(date.equals(date2)){  
1614 - dateTime = sdfSimple.format(sdfMonth.parse(date));  
1615 - } else {  
1616 - dateTime = sdfSimple.format(sdfMonth.parse(date))  
1617 - +"-"+sdfSimple.format(sdfMonth.parse(date2));  
1618 - }  
1619 - listI.add(lMap.iterator());  
1620 - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";  
1621 - ee.excelReplace(listI, new Object[]{m}, path + "mould/"+xls,  
1622 - path + "export/"+dateTime+"-"+xlName+"-线路公里统计表.xls");  
1623 - } catch (Exception e) {  
1624 - // TODO: handle exception  
1625 - e.printStackTrace();  
1626 - }  
1627 - }  
1628 -  
1629 - return lMap;  
1630 - }  
1631 -  
1632 - @Override  
1633 - public List<Map<String, Object>> getBusMileage(String line, String date,  
1634 - String date2, String xlName, String zt, String by, String type) {  
1635 - List<CalcBusMileage> resList = new ArrayList<CalcBusMileage>();  
1636 - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();  
1637 - List<CalcBusMileage> list = calcBusMileageRepository.selectByDateAndLineTj2(line, date, date2);  
1638 -  
1639 - if(zt.equals("zbh")){  
1640 - List<String> keyList = new ArrayList<String>();  
1641 - Map<String, List<CalcBusMileage>> keyMap = new HashMap<>();  
1642 - for(CalcBusMileage c : list){  
1643 - String nbbm = c.getNbbm();  
1644 - if(!keyMap.containsKey(nbbm)){  
1645 - keyMap.put(nbbm, new ArrayList<CalcBusMileage>());  
1646 - keyList.add(nbbm);  
1647 - }  
1648 - keyMap.get(nbbm).add(c);  
1649 - }  
1650 - for(String key : keyList){  
1651 - CalcBusMileage c1 = keyMap.get(key).get(0);  
1652 - for(int i = 1; i < keyMap.get(key).size(); i++){  
1653 - CalcBusMileage c2 = keyMap.get(key).get(i);  
1654 - c1.setZlc(Arith.add(c1.getZlc(), c2.getZlc()));  
1655 - c1.setJhnlc(Arith.add(c1.getJhnlc(), c2.getJhnlc()));  
1656 - c1.setJhwlc(Arith.add(c1.getJhwlc(), c2.getJhwlc()));  
1657 - c1.setJhnjcclc(Arith.add(c1.getJhnjcclc(), c2.getJhnjcclc()));  
1658 - c1.setJhwjcclc(Arith.add(c1.getJhwjcclc(), c2.getJhwjcclc()));  
1659 - c1.setKfks(Arith.add(c1.getKfks(), c2.getKfks()));  
1660 - c1.setZrwjcclc(Arith.add(c1.getZrwjcclc(), c2.getZrwjcclc()));  
1661 - c1.setZrwjcclc1(Arith.add(c1.getZrwjcclc1(), c2.getZrwjcclc1()));  
1662 - c1.setZrwjcclc2(Arith.add(c1.getZrwjcclc2(), c2.getZrwjcclc2()));  
1663 - c1.setZrwjcclcqt(Arith.add(c1.getZrwjcclcqt(), c2.getZrwjcclcqt()));  
1664 - c1.setLjyy(Arith.add(c1.getLjyy(), c2.getLjyy()));  
1665 - c1.setLjjcc(Arith.add(c1.getLjjcc(), c2.getLjjcc()));  
1666 - c1.setLjkfks(Arith.add(c1.getLjkfks(), c2.getLjkfks()));  
1667 - c1.setDhl(Arith.add(c1.getDhl(), c2.getDhl()));  
1668 - c1.setCdl(Arith.add(c1.getCdl(), c2.getCdl()));  
1669 - c1.setYhl(Arith.add(c1.getYhl(), c2.getYhl()));  
1670 - c1.setJzl(Arith.add(c1.getJzl(), c2.getJzl()));  
1671 - c1.setHyl(Arith.add(c1.getHyl(), c2.getHyl()));  
1672 - c1.setJhzlc(Arith.add(c1.getJhzlc(), c2.getJhzlc()));  
1673 - }  
1674 - resList.add(c1);  
1675 - }  
1676 - } else {  
1677 - List<String> keyList = new ArrayList<String>();  
1678 - Map<String, List<CalcBusMileage>> keyMap = new HashMap<>();  
1679 - for(CalcBusMileage c : list){  
1680 - String key = c.getNbbm() + c.getjGh() + c.getjName() + c.getsGh() + c.getsName();  
1681 - if(!keyMap.containsKey(key)){  
1682 - keyMap.put(key, new ArrayList<CalcBusMileage>());  
1683 - keyList.add(key);  
1684 - }  
1685 - keyMap.get(key).add(c);  
1686 - }  
1687 - for(String key : keyList){  
1688 - CalcBusMileage c1 = keyMap.get(key).get(0);  
1689 - for(int i = 1; i < keyMap.get(key).size(); i++){  
1690 - CalcBusMileage c2 = keyMap.get(key).get(i);  
1691 - c1.setZlc(Arith.add(c1.getZlc(), c2.getZlc()));  
1692 - c1.setJhnlc(Arith.add(c1.getJhnlc(), c2.getJhnlc()));  
1693 - c1.setJhwlc(Arith.add(c1.getJhwlc(), c2.getJhwlc()));  
1694 - c1.setJhnjcclc(Arith.add(c1.getJhnjcclc(), c2.getJhnjcclc()));  
1695 - c1.setJhwjcclc(Arith.add(c1.getJhwjcclc(), c2.getJhwjcclc()));  
1696 - c1.setKfks(Arith.add(c1.getKfks(), c2.getKfks()));  
1697 - c1.setZrwjcclc(Arith.add(c1.getZrwjcclc(), c2.getZrwjcclc()));  
1698 - c1.setZrwjcclc1(Arith.add(c1.getZrwjcclc1(), c2.getZrwjcclc1()));  
1699 - c1.setZrwjcclc2(Arith.add(c1.getZrwjcclc2(), c2.getZrwjcclc2()));  
1700 - c1.setZrwjcclcqt(Arith.add(c1.getZrwjcclcqt(), c2.getZrwjcclcqt()));  
1701 - c1.setLjyy(Arith.add(c1.getLjyy(), c2.getLjyy()));  
1702 - c1.setLjjcc(Arith.add(c1.getLjjcc(), c2.getLjjcc()));  
1703 - c1.setLjkfks(Arith.add(c1.getLjkfks(), c2.getLjkfks()));  
1704 - c1.setDhl(Arith.add(c1.getDhl(), c2.getDhl()));  
1705 - c1.setCdl(Arith.add(c1.getCdl(), c2.getCdl()));  
1706 - c1.setYhl(Arith.add(c1.getYhl(), c2.getYhl()));  
1707 - c1.setJzl(Arith.add(c1.getJzl(), c2.getJzl()));  
1708 - c1.setHyl(Arith.add(c1.getHyl(), c2.getHyl()));  
1709 - c1.setJhzlc(Arith.add(c1.getJhzlc(), c2.getJhzlc()));  
1710 - }  
1711 - resList.add(c1);  
1712 - }  
1713 - }  
1714 -  
1715 - for(CalcBusMileage c : resList){  
1716 - Map<String, Object> m = new HashMap<String, Object>();  
1717 - if(date.equals(date2)){  
1718 - m.put("rq", date);  
1719 - } else {  
1720 - m.put("rq", date + "至" + date2);  
1721 - }  
1722 - m.put("fgs", c.getFgsName());  
1723 - m.put("xlName", c.getXlName());  
1724 - m.put("nbbm", c.getNbbm());  
1725 - m.put("jGh", c.getjGh());  
1726 - m.put("jName", c.getjName());  
1727 - m.put("sGh", c.getsGh());  
1728 - m.put("sName", c.getsName());  
1729 - m.put("zlc", c.getZlc());  
1730 - m.put("jhnlc", c.getJhnlc());  
1731 - m.put("jhwlc", c.getJhwlc());  
1732 - m.put("jhnjcclc", c.getJhnjcclc());  
1733 - m.put("jhwjcclc", c.getJhwjcclc());  
1734 - m.put("jhwjcclc_z", c.getJhwjcclcz());  
1735 - m.put("kfks", c.getKfks());  
1736 - m.put("zrwjcclc", c.getZrwjcclc());  
1737 - m.put("zrwjcclc1", c.getZrwjcclc1());  
1738 - m.put("zrwjcclc2", c.getZrwjcclc2());  
1739 - m.put("zrwjcclcqt", c.getZrwjcclcqt());  
1740 - m.put("ljyy", c.getLjyy());  
1741 - m.put("ljjcc", c.getLjjcc());  
1742 - m.put("ljkfks", c.getLjkfks());  
1743 - m.put("dhl", c.getDhl());  
1744 - m.put("cdl", c.getCdl());  
1745 - m.put("yhl", c.getYhl());  
1746 - m.put("jzl", c.getJzl());  
1747 - m.put("hyl", c.getYhl());  
1748 - m.put("jhzlc", c.getJhzlc());  
1749 - lMap.add(m);  
1750 - }  
1751 -  
1752 - if(type.equals("export")){  
1753 - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),  
1754 - sdfSimple = new SimpleDateFormat("yyyyMMdd");  
1755 - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();  
1756 - Map<String, Object> m = new HashMap<String, Object>();  
1757 - m.put("date", date);  
1758 - m.put("date1", date2);  
1759 - String xls="";  
1760 -// String by=map.get("by").toString();  
1761 -  
1762 - if(zt.equals("zbh")){  
1763 - if(by.equals("sj")){  
1764 - xls="countByBus1.xls";  
1765 - }else{  
1766 - xls="countByBus1s.xls";  
1767 - }  
1768 - }else{  
1769 -  
1770 - if(by.equals("sj")){  
1771 - xls="countByBus2.xls";  
1772 - }else{  
1773 - xls="countByBus2s.xls";  
1774 - }  
1775 - }  
1776 - ReportUtils ee = new ReportUtils();  
1777 - try {  
1778 - String dateTime = "";  
1779 - if(date.equals(date2)){  
1780 - dateTime = sdfSimple.format(sdfMonth.parse(date));  
1781 - } else {  
1782 - dateTime = sdfSimple.format(sdfMonth.parse(date))  
1783 - +"-"+sdfSimple.format(sdfMonth.parse(date2));  
1784 - }  
1785 - listI.add(lMap.iterator());  
1786 - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";  
1787 - ee.excelReplace(listI, new Object[]{m}, path + "mould/"+xls,  
1788 - path + "export/"+dateTime+"-"+xlName+"-路单数据统计表.xls");  
1789 - } catch (Exception e) {  
1790 - // TODO: handle exception  
1791 - e.printStackTrace();  
1792 - }  
1793 - }  
1794 -  
1795 - return lMap;  
1796 - }  
1797 -  
1798 - public CalcLineMileage addLineMileage(CalcLineMileage temp, CalcLineMileage c){  
1799 - temp.setJhzlc(Arith.add(temp.getJhzlc()!=null?temp.getJhzlc():0, c.getJhzlc()));  
1800 - temp.setJhlc(Arith.add(temp.getJhlc()!=null?temp.getJhlc():0, c.getJhlc()));  
1801 - temp.setJcclc(Arith.add(temp.getJcclc()!=null?temp.getJcclc():0, c.getJcclc()));  
1802 - temp.setSjzgl(Arith.add(temp.getSjzgl()!=null?temp.getSjzgl():0, c.getSjzgl()));  
1803 - temp.setJhnlc(Arith.add(temp.getJhnlc()!=null?temp.getJhnlc():0, c.getJhnlc()));  
1804 - temp.setJhwlc(Arith.add(temp.getJhwlc()!=null?temp.getJhwlc():0, c.getJhwlc()));  
1805 - temp.setJhnjcclc(Arith.add(temp.getJhnjcclc()!=null?temp.getJhnjcclc():0, c.getJhnjcclc()));  
1806 - temp.setJhwjcclc(Arith.add(temp.getJhwjcclc()!=null?temp.getJhwjcclc():0, c.getJhwjcclc()));  
1807 - temp.setJhwjcclcz(Arith.add(temp.getJhwjcclcz()!=null?temp.getJhwjcclcz():0, c.getJhwjcclcz()));  
1808 - temp.setZrwjcclc(Arith.add(temp.getZrwjcclc()!=null?temp.getZrwjcclc():0, c.getZrwjcclc()));  
1809 - temp.setZrwjcclc1(Arith.add(temp.getZrwjcclc1()!=null?temp.getZrwjcclc1():0, c.getZrwjcclc1()));  
1810 - temp.setZrwjcclc2(Arith.add(temp.getZrwjcclc2()!=null?temp.getZrwjcclc2():0, c.getZrwjcclc2()));  
1811 - temp.setZrwjcclcqt(Arith.add(temp.getZrwjcclcqt()!=null?temp.getZrwjcclcqt():0, c.getZrwjcclcqt()));  
1812 - temp.setKfks(Arith.add(temp.getKfks()!=null?temp.getKfks():0, c.getKfks()));  
1813 - temp.setLbss(Arith.add(temp.getLbss()!=null?temp.getLbss():0, c.getLbss()));  
1814 - temp.setSsglLz(Arith.add(temp.getSsglLz()!=null?temp.getSsglLz():0, c.getSsglLz()));  
1815 - temp.setSsglDm(Arith.add(temp.getSsglDm()!=null?temp.getSsglDm():0, c.getSsglDm()));  
1816 - temp.setSsglGz(Arith.add(temp.getSsglGz()!=null?temp.getSsglGz():0, c.getSsglGz()));  
1817 - temp.setSsglJf(Arith.add(temp.getSsglJf()!=null?temp.getSsglJf():0, c.getSsglJf()));  
1818 - temp.setSsglZs(Arith.add(temp.getSsglZs()!=null?temp.getSsglZs():0, c.getSsglZs()));  
1819 - temp.setSsglQr(Arith.add(temp.getSsglQr()!=null?temp.getSsglQr():0, c.getSsglQr()));  
1820 - temp.setSsglQc(Arith.add(temp.getSsglQc()!=null?temp.getSsglQc():0, c.getSsglQc()));  
1821 - temp.setSsglKx(Arith.add(temp.getSsglKx()!=null?temp.getSsglKx():0, c.getSsglKx()));  
1822 - temp.setSsglQh(Arith.add(temp.getSsglQh()!=null?temp.getSsglQh():0, c.getSsglQh()));  
1823 - temp.setSsglYw(Arith.add(temp.getSsglYw()!=null?temp.getSsglYw():0, c.getSsglYw()));  
1824 - temp.setSsglOther(Arith.add(temp.getSsglOther()!=null?temp.getSsglOther():0, c.getSsglOther()));  
1825 - temp.setLjyy(Arith.add(temp.getLjyy()!=null?temp.getLjyy():0, c.getLjyy()));  
1826 - temp.setLjjcc(Arith.add(temp.getLjjcc()!=null?temp.getLjjcc():0, c.getLjjcc()));  
1827 - temp.setLjkfks(Arith.add(temp.getLjkfks()!=null?temp.getLjkfks():0, c.getLjkfks()));  
1828 - return temp;  
1829 - }  
1830 -  
1831 - @Override  
1832 - public List<List<String>> calcDetailMonthly(Map<String, Object> map) {  
1833 - List<Integer> destroy= new ArrayList<>();  
1834 - String destroyStr = "";  
1835 - if(map.get("destroy")!=null){  
1836 - destroyStr = map.get("destroy").toString().trim();  
1837 - String[] destroys = destroyStr.split(",");  
1838 - for (int i = 0; i < destroys.length; i++){  
1839 - destroy.add(Integer.parseInt(destroys[i]));  
1840 - }  
1841 - }  
1842 - List<String> gsdm= new ArrayList<>();  
1843 - String gsdmStr = "";  
1844 - if(map.get("gsdm")!=null){  
1845 - gsdmStr = map.get("gsdm").toString().trim();  
1846 - String[] gsdms = gsdmStr.split(",");  
1847 - for (int i = 0; i < gsdms.length; i++){  
1848 - gsdm.add(gsdms[i]);  
1849 - }  
1850 - }  
1851 - List<String> fgsdm= new ArrayList<>();  
1852 - String fgsdmStr = "";  
1853 - if(map.get("fgsdm")!=null){  
1854 - fgsdmStr = map.get("fgsdm").toString().trim();  
1855 - String[] fgsdms = fgsdmStr.split(",");  
1856 - for (int i = 0; i < fgsdms.length; i++){  
1857 - fgsdm.add(fgsdms[i]);  
1858 - }  
1859 - }  
1860 -// String line= null;  
1861 - List<String> line= new ArrayList<>();  
1862 - String lineStr = "";  
1863 - if(map.get("lineCode")!=null){  
1864 - lineStr = map.get("lineCode").toString().trim();  
1865 - String[] lines = lineStr.split(",");  
1866 - for (int i = 0; i < lines.length; i++){  
1867 - line.add(lines[i]);  
1868 - }  
1869 - }  
1870 - String startDate="";  
1871 - if(map.get("startDate")!=null){  
1872 - startDate=map.get("startDate").toString().trim();  
1873 - }  
1874 - String endDate="";  
1875 - if(map.get("endDate")!=null){  
1876 - endDate=map.get("endDate").toString().trim();  
1877 - }  
1878 - String type="";  
1879 - if(map.get("type")!=null){  
1880 - type=map.get("type").toString().trim();  
1881 - }  
1882 - String statisticalObj="";  
1883 - if(map.get("statisticalObj")!=null){  
1884 - statisticalObj=map.get("statisticalObj").toString().trim();  
1885 - }  
1886 - String itemDetails="";  
1887 - if(map.get("itemDetails")!=null){  
1888 - itemDetails=map.get("itemDetails").toString().trim();  
1889 - }  
1890 -// Boolean item=false;  
1891 - /*String item="";  
1892 - if(map.get("item")!=null){  
1893 - if("dh".equals(map.get("item").toString().trim()))  
1894 - item=" where c.sfdc = 1";  
1895 -// item=false;  
1896 - else if ("dh".equals(map.get("item").toString().trim()))  
1897 - item=" where c.sfdc = 0";  
1898 -// item=true;  
1899 - else  
1900 - item="";  
1901 - }*/  
1902 - String timeType=map.get("timeType").toString().trim();  
1903 -  
1904 - List<List<String>> resList = new ArrayList<>();  
1905 - List<CalcWaybill> list = new ArrayList<CalcWaybill>();  
1906 -// List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();  
1907 - // 右边可变天数  
1908 - TreeMap<String, List<CalcWaybillDetail>> keyMapList = new TreeMap<String, List<CalcWaybillDetail>>();  
1909 - // 左边固定列  
1910 - TreeMap<String, CalcWaybillDetail> keyMap = new TreeMap<String, CalcWaybillDetail>();  
1911 -  
1912 - List<Map<String, CalcWaybillDetail>> dayList = new ArrayList<>();  
1913 - int day = 0, day2 = 0;  
1914 - if("m".equals(timeType)){  
1915 - day = Integer.parseInt(startDate.substring(8,10));  
1916 - day2 = Integer.parseInt(endDate.substring(8,10));  
1917 - for(int i=day; i<=day2; i++){  
1918 - Map<String, CalcWaybillDetail> daym = new HashMap<>();  
1919 - daym.put(startDate.substring(0,7)+"-"+(i<10?"0"+i:i),this.initCalcWaybillDetail());  
1920 - dayList.add(daym);  
1921 - }  
1922 - } else if("y".equals(timeType)){  
1923 - day = Integer.parseInt(startDate.substring(5,7));  
1924 - day2 = Integer.parseInt(endDate.substring(5,7));  
1925 - for(int i=day; i<=day2; i++){  
1926 - Map<String, CalcWaybillDetail> daym = new HashMap<>();  
1927 - daym.put(startDate.substring(0,5)+(i<10?"0"+i:i),this.initCalcWaybillDetail());  
1928 - dayList.add(daym);  
1929 - }  
1930 - startDate += "-01";  
1931 - endDate += "-31";  
1932 - }  
1933 -  
1934 - int flag = 0;  
1935 - if("jsy".equals(statisticalObj)){  
1936 - flag = 1;  
1937 - list = calcRepository.scheduleByJsy2(line, startDate, endDate, gsdm, fgsdm, destroy);  
1938 - } else if("cwy".equals(statisticalObj)){  
1939 - flag = 2;  
1940 - list = calcRepository.scheduleBySpy2(line, startDate, endDate, gsdm, fgsdm, destroy);  
1941 - } else if("cl".equals(statisticalObj)){  
1942 - flag = 3;  
1943 - list = calcRepository.scheduleByZbh2(line, startDate, endDate, gsdm, fgsdm, destroy);  
1944 - } else if("xl".equals(statisticalObj)){  
1945 - flag = 4;  
1946 - list = calcRepository.scheduleByDateAndLineTjPx(line,startDate,endDate,gsdm,fgsdm, destroy);  
1947 - /*if(line.equals("")){  
1948 - //查询所有线路  
1949 - }else{  
1950 - //查询单条线路  
1951 - list = calcRepository.scheduleByDateAndLineTjPx2(line,startDate,endDate);  
1952 - }*/  
1953 - }  
1954 -  
1955 -  
1956 - // List类转换  
1957 - final List<CalcWaybillDetail> listNew = JSONArray.parseArray(JSON.toJSONString(list), CalcWaybillDetail.class);  
1958 -  
1959 - if(listNew.size() <= 0){  
1960 - return resList;  
1961 - }  
1962 - Map<String,Ylb> ylbMap = new HashMap<>();  
1963 - Map<String,Ylb> ylbCLMap = new HashMap<>();  
1964 - Map<String,Dlb> dlbMap = new HashMap<>();  
1965 - Map<String,Dlb> dlbCLMap = new HashMap<>();  
1966 -  
1967 - final SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");  
1968 -  
1969 - // 只有在选择 车辆,驾驶员查询时才有  
1970 - // 把油量和电量数据查出来,封装成Map,计算时直接取  
1971 - if(flag != 2 ){  
1972 - String linesql="";  
1973 - if(!lineStr.equals("")){  
1974 - linesql +=" and xlbm in("+lineStr+") ";  
1975 - }  
1976 - if(!gsdmStr.equals("")){  
1977 - linesql +=" and ssgsdm in("+gsdmStr+") ";  
1978 - }  
1979 - if(!fgsdmStr.equals("")){  
1980 - linesql +=" and fgsdm in("+fgsdmStr+") ";  
1981 - }  
1982 - String ylsql="SELECT * FROM bsth_c_ylb"  
1983 -// String ylsql="SELECT id,xlbm,nbbm,jsy,jzl,czyl,jzyl,yh,sh,fgsdm FROM bsth_c_ylb"  
1984 - + " WHERE rq >= '"+startDate+"' and rq <= '"+endDate+"' "  
1985 - + linesql;  
1986 - String dlSal= " SELECT * FROM bsth_c_dlb"  
1987 -// String dlSal= " SELECT id,xlbm,nbbm,jsy,cdl,czcd,jzcd,hd,sh,fgsdm FROM bsth_c_dlb"  
1988 - + " WHERE rq >= '"+startDate+"' and rq <= '"+endDate+"' "  
1989 - + linesql;  
1990 - List<Ylb> ylbList = jdbcTemplate.query(ylsql, new RowMapper<Ylb>() {  
1991 - @Override  
1992 - public Ylb mapRow(ResultSet arg0, int arg1) throws SQLException{  
1993 - Ylb ylb = new Ylb();  
1994 - Date rq = null;  
1995 - try{  
1996 - rq = ft.parse(arg0.getString("rq"));  
1997 - } catch (ParseException e){  
1998 - logger.error(e.toString(),e);  
1999 - }  
2000 -// Date rq = ft.parse(arg0.getString("rq"));  
2001 - ylb.setXlbm(arg0.getString("xlbm"));  
2002 - ylb.setJsy(arg0.getString("jsy"));  
2003 - ylb.setJname(arg0.getString("jname"));  
2004 - ylb.setNbbm(arg0.getString("nbbm"));  
2005 - ylb.setZlc(Double.parseDouble(arg0.getString("zlc")));  
2006 - ylb.setJzl(Double.parseDouble(arg0.getString("jzl")));  
2007 - ylb.setJzyl(Double.parseDouble(arg0.getString("jzyl")));  
2008 - ylb.setCzyl(Double.parseDouble(arg0.getString("czyl")));  
2009 - ylb.setYh(Double.parseDouble(arg0.getString("yh")));  
2010 - ylb.setSh(Double.parseDouble(arg0.getString("sh")));  
2011 - ylb.setRylx(arg0.getString("rylx"));  
2012 - ylb.setFgsdm(arg0.getString("fgsdm"));  
2013 - ylb.setRq(rq);  
2014 - return ylb;  
2015 - }  
2016 - });  
2017 - List<Dlb> dlbList = jdbcTemplate.query(dlSal, new RowMapper<Dlb>() {  
2018 - @Override  
2019 - public Dlb mapRow(ResultSet arg0, int arg1) throws SQLException {  
2020 - Dlb dlb = new Dlb();Date rq = null;  
2021 - try{  
2022 - rq = ft.parse(arg0.getString("rq"));  
2023 - } catch (ParseException e){  
2024 - logger.error(e.toString(),e);  
2025 - }  
2026 - dlb.setXlbm(arg0.getString("xlbm"));  
2027 - dlb.setJsy(arg0.getString("jsy"));  
2028 - dlb.setJname(arg0.getString("jname"));  
2029 - dlb.setNbbm(arg0.getString("nbbm"));  
2030 - dlb.setZlc(Double.parseDouble(arg0.getString("zlc")));  
2031 - dlb.setCdl(Double.parseDouble(arg0.getString("cdl")));  
2032 - dlb.setJzcd(Double.parseDouble(arg0.getString("jzcd")));  
2033 - dlb.setCzcd(Double.parseDouble(arg0.getString("czcd")));  
2034 - dlb.setHd(Double.parseDouble(arg0.getString("hd")));  
2035 - dlb.setSh(Double.parseDouble(arg0.getString("sh")));  
2036 - dlb.setFgsdm(arg0.getString("fgsdm"));  
2037 - dlb.setRq(rq);  
2038 - return dlb;  
2039 - }  
2040 - });  
2041 -  
2042 - for (Ylb y:ylbList) {  
2043 - if(ylbMap.containsKey(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getNbbm())){  
2044 - Ylb yo = ylbMap.get(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getNbbm());  
2045 - yo.setZlc(Arith.add(yo.getZlc(),y.getZlc()));  
2046 - yo.setCzyl(Arith.add(yo.getCzyl(),y.getCzyl()));  
2047 - yo.setJzyl(Arith.add(yo.getJzyl(),y.getJzyl()));  
2048 - yo.setJzl(Arith.add(yo.getJzl(),y.getJzl()));  
2049 - yo.setYh(Arith.add(yo.getYh(),y.getYh()));  
2050 - } else  
2051 - ylbMap.put(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getNbbm(),y);  
2052 -  
2053 -// ylbMap.put(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getJname()+"_"+y.getNbbm(),y);  
2054 -// ylbCLMap.put(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getNbbm(),y);  
2055 - }  
2056 - for (Dlb d:dlbList) {  
2057 - if(dlbMap.containsKey(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getNbbm())){  
2058 - Dlb dold = dlbMap.get(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getNbbm());  
2059 - dold.setZlc(Arith.add(dold.getZlc(),d.getZlc()));  
2060 - dold.setHd(Arith.add(dold.getHd(),d.getHd()));  
2061 - dold.setCzcd(Arith.add(dold.getCzcd(),d.getCzcd()));  
2062 - dold.setJzcd(Arith.add(dold.getJzcd(),d.getJzcd()));  
2063 - dold.setCdl(Arith.add(dold.getCdl(),d.getCdl()));  
2064 - dold.setHd(Arith.add(dold.getHd(),d.getHd()));  
2065 - } else  
2066 - dlbMap.put(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getNbbm(),d);  
2067 -// dlbMap.put(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getJname()+"_"+d.getNbbm(),d);  
2068 -// dlbCLMap.put(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getNbbm(),d);  
2069 - }  
2070 - }  
2071 -  
2072 - CalcWaybillDetail zjCalc = this.initCalcWaybillDetail();  
2073 - zjCalc.setjName("合计");  
2074 - // 横向数据的第几天下标  
2075 - int dayIndex = 0;  
2076 - int dayIndexPrev = -1;  
2077 - // 报表纵向列数据生成  
2078 - for (int i = 0; listNew.size() > i; i++) {  
2079 - CalcWaybillDetail cw = listNew.get(i);  
2080 -  
2081 - CalcWaybillDetail cwNext = new CalcWaybillDetail();  
2082 - if(i<listNew.size()-1){  
2083 - cwNext = listNew.get(i+1);  
2084 - }  
2085 - String xl = cw.getXl();  
2086 - String jsy = cw.getjGh();  
2087 - String cwy = cw.getsGh();  
2088 - String cl = cw.getCl();  
2089 -  
2090 - Ylb y = new Ylb();  
2091 - Dlb d = new Dlb();  
2092 - // 统计类型不同统计的左边列不同  
2093 - // 赋值油、电量  
2094 - if(flag != 2){  
2095 - // 取了之后删除,防止重复取,应为添加的时候已经合并了  
2096 - y = ylbMap.get(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());  
2097 - ylbMap.remove(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());  
2098 - d = dlbMap.get(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());  
2099 - dlbMap.remove(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());  
2100 - if(y != null){  
2101 - cw.setZlc(y.getZlc());  
2102 - cw.setYh(y.getYh());  
2103 - cw.setJzl(y.getJzl());  
2104 - if("0".equals(y.getRylx())){  
2105 - cw.setJzl0(y.getJzl());  
2106 - }else if("1".equals(y.getRylx())){  
2107 - cw.setJzl10(y.getJzl());  
2108 - }  
2109 - cw.setJzyl(y.getJzyl());  
2110 - cw.setCzyl(y.getCzyl());  
2111 - cw.setRylx(y.getRylx());  
2112 - cw.setBglyh((y.getZlc()==0? 0:100*y.getYh()/y.getZlc()));  
2113 - }  
2114 - if(d != null) {  
2115 - cw.setZlc(d.getZlc());  
2116 - cw.setHd(d.getHd());  
2117 - cw.setJzcd(d.getJzcd());  
2118 - cw.setCzcd(d.getCzcd());  
2119 - cw.setCdl(d.getCdl());  
2120 - cw.setBglyh((d.getZlc()==0? 0:100*d.getHd()/d.getZlc()));  
2121 - }  
2122 - }  
2123 -  
2124 - String key = "",keyNext = "";  
2125 - if(flag == 1){  
2126 - if(cw.getjGh() != null && cw.getjName() != null)  
2127 - key += cw.getjGh() + "/" + cw.getjName();  
2128 - if(cwNext.getjGh() != null && cwNext.getjName() != null)  
2129 - keyNext += cwNext.getjGh() + "/" + cwNext.getjName();  
2130 - } else if(flag == 2){  
2131 - if(cw.getsGh() != null && cw.getsName() != null)  
2132 - key += cw.getsGh() + "/" + cw.getsName();  
2133 - if(cwNext.getsGh() != null && cwNext.getsName() != null)  
2134 - keyNext += cwNext.getsGh() + "/" + cwNext.getsName();  
2135 - } else if(flag == 3){  
2136 - if(cw.getCl() != null)  
2137 - key += cw.getCl();  
2138 - if(cwNext.getCl() != null)  
2139 - keyNext += cwNext.getCl();  
2140 - }  
2141 - key = cw.getFgsdm()+"/"+cw.getXl() + "/" + key;  
2142 - keyNext = cw.getFgsdm()+"/"+cwNext.getXl() + "/" + keyNext;  
2143 - CalcWaybillDetail calc = new CalcWaybillDetail();  
2144 - List<CalcWaybillDetail> calcList = new ArrayList<>();  
2145 - // 是否一行数据的第一个、生成key,calc为刚添加,不去和cw相加  
2146 - boolean ifFirst = false;  
2147 - if(keyMapList.containsKey(key)){  
2148 - calc = keyMap.get(key);  
2149 - calcList = keyMapList.get(key);  
2150 - } else {  
2151 - // 深度拷贝对象  
2152 - BeanUtils.copyProperties(cw,calc);  
2153 - keyMap.put(key, calc);  
2154 - dayIndex = 0;  
2155 - ifFirst = true;  
2156 - }  
2157 -  
2158 - CalcWaybillDetail dayc = null;  
2159 - if("m".equals(timeType)){  
2160 - while (!dayList.get(dayIndex).containsKey(cw.getRqStr())){  
2161 - calcList.add(new CalcWaybillDetail());  
2162 - dayIndex++;  
2163 - }  
2164 - dayc = dayList.get(dayIndex).get(cw.getRqStr());  
2165 - } else if("y".equals(timeType)){  
2166 - while (!dayList.get(dayIndex).containsKey(cw.getRqStr().substring(0,7))){  
2167 - calcList.add(new CalcWaybillDetail());  
2168 - dayIndex++;  
2169 - }  
2170 - dayc = dayList.get(dayIndex).get(cw.getRqStr().substring(0,7));  
2171 - }  
2172 -  
2173 -  
2174 - // 天数相加  
2175 - this.summation(dayc, cw);  
2176 - // 左边固定列数据相加  
2177 - if(!ifFirst)  
2178 - this.summation(calc, cw);  
2179 - // 左边合计相加  
2180 - this.summation(zjCalc, cw);  
2181 -  
2182 -  
2183 - if(dayIndexPrev == dayIndex){  
2184 - CalcWaybillDetail cwPrev = calcList.get(dayIndex);  
2185 - this.summation(cwPrev, cw);  
2186 - } else {  
2187 - CalcWaybillDetail cwd = new CalcWaybillDetail();  
2188 - // 深度拷贝对象  
2189 - BeanUtils.copyProperties(cw,cwd);  
2190 - calcList.add(cwd);  
2191 - calc.setTs(calc.getTs()+1);  
2192 - zjCalc.setTs(zjCalc.getTs()+1);  
2193 - }  
2194 -  
2195 - // 把下标  
2196 - dayIndexPrev = dayIndex;  
2197 - // timeType 为m 月报表时,日期不一样就换列,为y 年报表是,月份不一样换列  
2198 - if("m".equals(timeType) && cwNext != null && key.equals(keyNext) && !cw.getRqStr().equals(cwNext.getRqStr())){  
2199 - dayIndex++;  
2200 - } else if("y".equals(timeType) && cwNext != null && key.equals(keyNext) && !cw.getRqStr().substring(0,7).equals(cwNext.getRqStr().substring(0,7))){  
2201 - dayIndex++;  
2202 - } else if(!key.equals(keyNext)){  
2203 - // 满数据的不用补空格  
2204 - while (dayList.size() > dayIndex+1){  
2205 - calcList.add(new CalcWaybillDetail());  
2206 - dayIndex++;  
2207 - }  
2208 - // 换列了从头开始,上一个下标赋值为初始  
2209 - dayIndexPrev = -1;  
2210 - }  
2211 - // 右边可变列添加数据  
2212 - keyMapList.put(key,calcList);  
2213 - }  
2214 -  
2215 - // 表头和数据  
2216 - Iterator iter = keyMap.entrySet().iterator();  
2217 -  
2218 - List<String> list1 = new ArrayList<>();  
2219 - list1.add("序号");  
2220 - list1.add("所属公司");  
2221 - list1.add("线路");  
2222 - if(flag==1 ||flag==2 ){  
2223 - list1.add("工号");  
2224 - list1.add("姓名");  
2225 - } else if(flag==3){  
2226 - list1.add("自编号");  
2227 - list1.add("车牌号");  
2228 - list1.add("燃油类型");  
2229 - }  
2230 - list1.add("计划公里");  
2231 - list1.add("总公里");  
2232 - list1.add("空驶公里");  
2233 - list1.add("临加公里");  
2234 - list1.add("烂班公里");  
2235 - list1.add("m".equals(timeType)?"天数":"月数");  
2236 - for(int i=day; i<=day2; i++){  
2237 - list1.add((i<10?"0"+i:i)+("m".equals(timeType)?"日":"月"));  
2238 - }  
2239 - if("bgldh".equals(itemDetails) || "bglyh".equals(itemDetails)){  
2240 - list1.add("平均");  
2241 - } else  
2242 - list1.add("合计");  
2243 - resList.add(list1);  
2244 -  
2245 - Map<String, String> carsMap = new HashMap<>();  
2246 - List<Cars> carsList = carsRepository.findCars();  
2247 - for (Cars c:carsList) {  
2248 - String sfdc = c.getSfdc()+"";  
2249 - carsMap.put(c.getInsideCode(), sfdc.equals("true")?"纯电动":"柴油");  
2250 - }  
2251 -  
2252 - int i=1;  
2253 - DecimalFormat df = new DecimalFormat("0.00");//格式化小数  
2254 - double allNum = 0.0;  
2255 - while (iter.hasNext()) {  
2256 - Map.Entry entry = (Map.Entry) iter.next();  
2257 - // 获取key  
2258 - String key = (String) entry.getKey();  
2259 - // 获取value  
2260 - CalcWaybillDetail c = (CalcWaybillDetail) entry.getValue();  
2261 -  
2262 - List<CalcWaybillDetail> cList = keyMapList.get(key);  
2263 -  
2264 - List<String> listStr = new ArrayList<>();  
2265 - listStr.add(i+"");  
2266 - i++;  
2267 - listStr.add(c.getFgsname());  
2268 - listStr.add(c.getXlName());  
2269 - if("jsy".equals(statisticalObj)){  
2270 - listStr.add(c.getjGh());  
2271 - listStr.add(c.getjName());  
2272 - } else if("cwy".equals(statisticalObj)){  
2273 - listStr.add(c.getsGh());  
2274 - listStr.add(c.getsName());  
2275 - } else if("cl".equals(statisticalObj)){  
2276 - listStr.add(c.getCl());  
2277 - listStr.add(BasicData.nbbmCompanyPlateMap.get(c.getCl())+"");  
2278 - listStr.add(carsMap.get(c.getCl()));  
2279 - } else if("xl".equals(statisticalObj)){  
2280 -  
2281 - }  
2282 - listStr.add(df.format(c.getJhyylc()+c.getJhfyylc()));  
2283 - listStr.add(df.format(c.getSjyylc()+c.getSjfyylc()+c.getLjyylc()+c.getLjfyylc()));  
2284 -// listStr.add(df.format(c.getSjyylc()+c.getLjyylc()));  
2285 - listStr.add(df.format(c.getSjfyylc()+c.getLjfyylc()));  
2286 - listStr.add(df.format(c.getLjyylc()+c.getLjfyylc()));  
2287 - listStr.add(df.format(c.getLblc()));  
2288 - listStr.add(c.getTs()+"");  
2289 - c.setBglhd(c.getBglhd()/c.getTs());  
2290 - c.setBglyh(c.getBglyh()/c.getTs());  
2291 - // 把列合计的数添加到最后一个  
2292 - cList.add(c);  
2293 - // DecimalFormat df = new DecimalFormat("0.00");//格式化小数  
2294 - for (CalcWaybillDetail c1:cList) {  
2295 - if(StringUtils.isEmpty(c1.getXl())) {  
2296 - listStr.add("");  
2297 - } else{  
2298 - if("jzlAll".equals(itemDetails)){  
2299 - listStr.add(df.format(c1.getJzl()));  
2300 - }else if("jzl0".equals(itemDetails)){  
2301 - listStr.add(df.format(c1.getJzl0()));  
2302 - } else if("jzl-10".equals(itemDetails)){  
2303 - listStr.add(df.format(c1.getJzl10()));  
2304 - } else if("yhl".equals(itemDetails)){  
2305 - listStr.add(df.format(c1.getYh()));  
2306 - } else if("jccy".equals(itemDetails)){  
2307 - listStr.add(df.format(c1.getJzyl()));  
2308 - } else if("cccy".equals(itemDetails)){  
2309 - listStr.add(df.format(c1.getCzyl()));  
2310 - } else if("bglyh".equals(itemDetails)){  
2311 -// listStr.add(df.format(c1.getBglyh()));  
2312 - listStr.add(df.format(c1.getZlc()==0? 0:100*c1.getYh()/c1.getZlc()));  
2313 - } else if("dh".equals(itemDetails)){  
2314 - listStr.add(df.format(c1.getHd()));  
2315 - } else if("cdl".equals(itemDetails)){  
2316 - listStr.add(df.format(c1.getCdl()));  
2317 - } else if("cccd".equals(itemDetails)){  
2318 - listStr.add(df.format(c1.getCzcd()));  
2319 - } else if("jccd".equals(itemDetails)){  
2320 - listStr.add(df.format(c1.getJzcd()));  
2321 - } else if("bgldh".equals(itemDetails)){  
2322 - listStr.add(df.format(c1.getZlc()==0? 0:100*c1.getHd()/c1.getZlc()));  
2323 -// listStr.add(df.format(c1.getBglhd()));  
2324 - } else if("zgl".equals(itemDetails)){  
2325 - listStr.add(df.format((c1.getSjyylc()+c1.getSjfyylc()+c1.getLjfyylc()+c1.getLjyylc())));  
2326 - } else if("jhgl".equals(itemDetails)){  
2327 - listStr.add(df.format(c1.getJhyylc()+c1.getJhfyylc()));  
2328 - } else if("sjbc".equals(itemDetails)){  
2329 - listStr.add(c1.getSjyybc()+c1.getSjfyybc()+"");  
2330 - } else if("jhbc".equals(itemDetails)){  
2331 - listStr.add(c1.getJhyybc()+c1.getJhfyybc()+"");  
2332 - }  
2333 - }  
2334 - }  
2335 - allNum = allNum + Double.parseDouble(listStr.get(listStr.size()-1));  
2336 - resList.add(listStr);  
2337 - }  
2338 -  
2339 - // 合计列  
2340 - List<String> listEnd = new ArrayList<>();  
2341 - listEnd.add("合计");  
2342 - listEnd.add(df.format(zjCalc.getJhyylc()+zjCalc.getJhfyylc()));  
2343 - listEnd.add(df.format(zjCalc.getSjfyylc()+zjCalc.getSjyylc()+zjCalc.getLjyylc()+zjCalc.getLjfyylc()));//总公里  
2344 -// listEnd.add(df.format(zjCalc.getSjyylc()+zjCalc.getLjyylc()));//营运  
2345 - listEnd.add(df.format(zjCalc.getSjfyylc()+zjCalc.getLjfyylc()));  
2346 - listEnd.add(df.format(zjCalc.getLjfyylc()+zjCalc.getLjyylc()));  
2347 - listEnd.add(df.format(zjCalc.getLblc()));  
2348 - listEnd.add(zjCalc.getTs()+"");  
2349 - double all = 0.0;  
2350 - for (Map<String, CalcWaybillDetail> cmap:dayList) {  
2351 - for (Map.Entry<String, CalcWaybillDetail> cw : cmap.entrySet()) {  
2352 -// System.out.println("key = " + cw.getKey() + ", value = " + cw.getValue());  
2353 - CalcWaybillDetail c1 = cw.getValue();  
2354 - if("jzlAll".equals(itemDetails)){  
2355 - listEnd.add(df.format(c1.getJzl()));  
2356 - } else if("jzl0".equals(itemDetails)){  
2357 - listEnd.add(df.format(c1.getJzl0()));  
2358 - } else if("jzl-10".equals(itemDetails)){  
2359 - listEnd.add(df.format(c1.getJzl10()));  
2360 - } else if("yhl".equals(itemDetails)){  
2361 - listEnd.add(df.format(c1.getYh()));  
2362 - } else if("jccy".equals(itemDetails)){  
2363 - listEnd.add(df.format(c1.getJzyl()));  
2364 - } else if("cccy".equals(itemDetails)){  
2365 - listEnd.add(df.format(c1.getCzyl()));  
2366 - } else if("bglyh".equals(itemDetails)){  
2367 -// listEnd.add(df.format(c1.getBglyh()));  
2368 - listEnd.add(df.format(c1.getZlc()==0? 0:100*c1.getYh()/c1.getZlc()));  
2369 - } else if("dh".equals(itemDetails)){  
2370 - listEnd.add(df.format(c1.getHd()));  
2371 - } else if("cdl".equals(itemDetails)){  
2372 - listEnd.add(df.format(c1.getCdl()));  
2373 - } else if("cccd".equals(itemDetails)){  
2374 - listEnd.add(df.format(c1.getCzcd()));  
2375 - } else if("jccd".equals(itemDetails)){  
2376 - listEnd.add(df.format(c1.getJzcd()));  
2377 - } else if("bgldh".equals(itemDetails)){  
2378 -// listEnd.add(df.format(c1.getBglhd()));  
2379 - listEnd.add(df.format(c1.getZlc()==0? 0:100*c1.getHd()/c1.getZlc()));  
2380 - } else if("zgl".equals(itemDetails)){  
2381 - listEnd.add((df.format(c1.getSjyylc()+c1.getSjfyylc()+c1.getLjfyylc()+c1.getLjyylc())));  
2382 - } else if("jhgl".equals(itemDetails)){  
2383 - listEnd.add((df.format(c1.getJhyylc()+c1.getJhfyylc())));  
2384 - } else if("sjbc".equals(itemDetails)){  
2385 - listEnd.add(c1.getSjyybc()+c1.getSjfyybc()+"");  
2386 - } else if("jhbc".equals(itemDetails)){  
2387 - listEnd.add((c1.getJhyybc()+c1.getJhfyybc())+"");  
2388 - }  
2389 - }  
2390 - all = all + Double.parseDouble(listEnd.get(listEnd.size()-1));  
2391 - }  
2392 -  
2393 - // 百公里电油耗时为平均数  
2394 - if("bgldh".equals(itemDetails) || "bglyh".equals(itemDetails)){  
2395 - allNum = allNum/keyMap.size();  
2396 - all = all/dayList.size();  
2397 - }  
2398 -// listEnd.add(df.format(allNum)+"/"+df.format(all));  
2399 - listEnd.add(df.format(all));  
2400 - resList.add(listEnd);  
2401 -  
2402 - return resList;  
2403 - }  
2404 -  
2405 - public CalcWaybillDetail initCalcWaybillDetail(){  
2406 - CalcWaybillDetail calc = new CalcWaybillDetail();  
2407 - calc.setJhyybc(0);  
2408 - calc.setJhyylc(0d);  
2409 - calc.setJhfyybc(0);  
2410 - calc.setJhfyylc(0d);  
2411 - calc.setSjyybc(0);  
2412 - calc.setSjyylc(0d);  
2413 - calc.setSjfyybc(0);  
2414 - calc.setSjfyylc(0d);  
2415 - calc.setLbbc(0);  
2416 - calc.setLblc(0d);  
2417 - calc.setLjbc(0);  
2418 - calc.setLjyylc(0d);  
2419 - calc.setZlc(0d);  
2420 - calc.setCzyl(0d);  
2421 - calc.setJzyl(0d);  
2422 - calc.setJzl(0d);  
2423 - calc.setJzl0(0d);  
2424 - calc.setJzl10(0d);  
2425 - calc.setYh(0d);  
2426 - calc.setCzcd(0d);  
2427 - calc.setJzcd(0d);  
2428 - calc.setCdl(0d);  
2429 - calc.setHd(0d);  
2430 - calc.setTs(0);  
2431 - return calc;  
2432 - }  
2433 -  
2434 - public CalcWaybillDetail summation(CalcWaybillDetail c1, CalcWaybillDetail c2){  
2435 - c1.setJhyybc(c1.getJhyybc() + c2.getJhyybc());  
2436 - c1.setJhyylc(Arith.add(c1.getJhyylc(), c2.getJhyylc()));  
2437 - c1.setJhfyybc(c1.getJhfyybc() + c2.getJhfyybc());  
2438 - c1.setJhfyylc(Arith.add(c1.getJhfyylc(), c2.getJhfyylc()));  
2439 - c1.setSjyybc(c1.getSjyybc() + c2.getSjyybc());  
2440 - c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getSjyylc()));  
2441 -// c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getLjyylc()));// 把临加的也算上了,后面不用加了  
2442 - c1.setSjfyybc(c1.getSjfyybc() + c2.getSjfyybc());  
2443 - c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getSjfyylc()));  
2444 -// c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getLjfyylc()));// 把临加的也算上了,后面不用加了  
2445 - c1.setLbbc(c1.getLbbc() + c2.getLbbc());  
2446 - c1.setLblc(Arith.add(c1.getLblc(), c2.getLblc()));  
2447 - c1.setLjbc(c1.getLjbc() + c2.getLjbc());  
2448 - c1.setLjyylc(Arith.add(c1.getLjyylc(), c2.getLjyylc()));  
2449 - c1.setLjfyylc(Arith.add(c1.getLjfyylc(), c2.getLjfyylc()));  
2450 - c1.setZlc(Arith.add(c1.getZlc(),c2.getZlc()));  
2451 - c1.setCzyl(Arith.add(c1.getCzyl(),c2.getCzyl()));  
2452 - c1.setJzyl(Arith.add(c1.getJzyl(),c2.getJzyl()));  
2453 - c1.setJzl(Arith.add(c1.getJzl(),c2.getJzl()));  
2454 - c1.setJzl0(Arith.add(c1.getJzl0(),c2.getJzl0()));  
2455 - c1.setJzl10(Arith.add(c1.getJzl10(),c2.getJzl10()));  
2456 - c1.setYh(Arith.add(c1.getYh(),c2.getYh()));  
2457 - c1.setHd(Arith.add(c1.getHd(),c2.getHd()));  
2458 - c1.setCzcd(Arith.add(c1.getCzcd(),c2.getCzcd()));  
2459 - c1.setJzcd(Arith.add(c1.getJzcd(),c2.getJzcd()));  
2460 - c1.setCdl(Arith.add(c1.getCdl(),c2.getCdl()));  
2461 - c1.setHd(Arith.add(c1.getHd(),c2.getHd()));  
2462 - c1.setTs(c1.getTs()+c2.getTs());  
2463 -// c1.setDtbc(c1.getDtbc() + c2.getDtbc());  
2464 - return c1;  
2465 - }  
2466 -}  
2467 -  
2468 -class AccountXlbmByping implements Comparator<Map<String, Object>> {  
2469 - @Override  
2470 - public int compare(Map<String, Object> o1, Map<String, Object> o2) {  
2471 - // TODO Auto-generated method stub  
2472 -// PinyinHelper.convertToPinyinString(ppy.getName(),  
2473 -// "" , PinyinFormat.WITHOUT_TONE)  
2474 - return o1.get("xlNamePy").toString().compareTo(  
2475 - o2.get("xlNamePy").toString());  
2476 - }  
2477 -} 1 +package com.bsth.service.calc.impl;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONArray;
  5 +import com.bsth.common.ResponseCode;
  6 +import com.bsth.data.BasicData;
  7 +import com.bsth.entity.Cars;
  8 +import com.bsth.entity.Line;
  9 +import com.bsth.entity.calc.CalcBusMileage;
  10 +import com.bsth.entity.calc.CalcInterval;
  11 +import com.bsth.entity.calc.CalcLineMileage;
  12 +import com.bsth.entity.calc.CalcStatistics;
  13 +import com.bsth.entity.calc.CalcWaybill;
  14 +import com.bsth.entity.calc.CalcWaybillDetail;
  15 +import com.bsth.entity.oil.Dlb;
  16 +import com.bsth.entity.oil.Ylb;
  17 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  18 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  19 +import com.bsth.entity.sys.Interval;
  20 +import com.bsth.repository.CarsRepository;
  21 +import com.bsth.repository.LineRepository;
  22 +import com.bsth.repository.calc.CalcBusMileageRepository;
  23 +import com.bsth.repository.calc.CalcIntervalRepository;
  24 +import com.bsth.repository.calc.CalcLineMileageRepository;
  25 +import com.bsth.repository.calc.CalcStatisticsRepository;
  26 +import com.bsth.repository.calc.CalcWaybillRepository;
  27 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  28 +import com.bsth.service.LineService;
  29 +import com.bsth.service.calc.CalcToolService;
  30 +import com.bsth.service.calc.CalcWaybillService;
  31 +import com.bsth.service.impl.BaseServiceImpl;
  32 +import com.bsth.service.realcontrol.ScheduleRealInfoService;
  33 +import com.bsth.service.report.CulateMileageService;
  34 +import com.bsth.service.report.ReportService;
  35 +import com.bsth.util.Arith;
  36 +import com.bsth.util.ReportUtils;
  37 +import com.github.stuxuhai.jpinyin.PinyinException;
  38 +import com.github.stuxuhai.jpinyin.PinyinFormat;
  39 +import com.github.stuxuhai.jpinyin.PinyinHelper;
  40 +import org.apache.commons.lang3.StringUtils;
  41 +import org.slf4j.Logger;
  42 +import org.slf4j.LoggerFactory;
  43 +import org.springframework.beans.BeanUtils;
  44 +import org.springframework.beans.factory.annotation.Autowired;
  45 +import org.springframework.jdbc.core.JdbcTemplate;
  46 +import org.springframework.jdbc.core.RowMapper;
  47 +import org.springframework.stereotype.Service;
  48 +
  49 +import javax.transaction.Transactional;
  50 +import java.sql.ResultSet;
  51 +import java.sql.SQLException;
  52 +import java.text.DecimalFormat;
  53 +import java.text.ParseException;
  54 +import java.text.SimpleDateFormat;
  55 +import java.util.*;
  56 +
  57 +/**
  58 + * Created by 17/11/16.
  59 + */
  60 +@Service
  61 +public class CalcWaybillServiceImpl extends BaseServiceImpl<CalcWaybill, Integer> implements CalcWaybillService {
  62 +
  63 + @Autowired
  64 + private CalcWaybillRepository calcRepository;
  65 +
  66 + @Autowired
  67 + private CalcStatisticsRepository calcStatisticsRepository;
  68 +
  69 + @Autowired
  70 + private CalcLineMileageRepository calcLineMileageRepository;
  71 +
  72 + @Autowired
  73 + private CalcBusMileageRepository calcBusMileageRepository;
  74 +
  75 + @Autowired
  76 + private CalcToolService calcToolService;
  77 +
  78 + @Autowired
  79 + private CulateMileageService culateService;
  80 +
  81 + @Autowired
  82 + private ScheduleRealInfoService scheduleRealInfoService;
  83 +
  84 + @Autowired
  85 + private ScheduleRealInfoRepository scheduleRealInfoRepository;
  86 +
  87 + @Autowired
  88 + private CalcIntervalRepository calcIntervalRepository;
  89 +
  90 + @Autowired
  91 + private LineRepository lineRepository;
  92 + @Autowired
  93 + private LineService lineService;
  94 + @Autowired
  95 + private ReportService reportService;
  96 + @Autowired
  97 + CarsRepository carsRepository;
  98 +
  99 + @Autowired
  100 + JdbcTemplate jdbcTemplate;
  101 +
  102 +
  103 + Logger logger = LoggerFactory.getLogger(this.getClass());
  104 +
  105 +
  106 + public Map<String, Object> autoGenerate(String date, String line) throws Exception {
  107 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  108 + List<String> dateList = new ArrayList<String>();
  109 + if(date == null || date.trim().length() == 0){
  110 + Date d = new Date();
  111 + d.setTime(d.getTime() - (4l * 1000 * 60 * 60 * 24));
  112 + dateList.add(sdf.format(d));
  113 + d.setTime(d.getTime() - (1l * 1000 * 60 * 60 * 24));
  114 + dateList.add(sdf.format(d));
  115 + } else {
  116 + date = date.trim();
  117 + dateList.add(date);
  118 + }
  119 + if(line == null || line.trim().length() == 0){
  120 + line = "";
  121 + } else {
  122 + line = line.trim();
  123 + }
  124 +
  125 + Map<String, Object> m = new HashMap<String, Object>();
  126 + for(String d : dateList){
  127 + try {
  128 + Map<String, Object> generateNew = generateNew(d, line);
  129 + m.put("generateNew", generateNew);
  130 + } catch (Exception e) {
  131 + // TODO: handle exception
  132 + logger.info("date="+d+";line="+line+";重新统计保存失败!");
  133 + }
  134 + try {
  135 + Map<String, Object> calcLineMileage = calcLineMileage(d, line);
  136 + m.put("lineMileage", calcLineMileage);
  137 + } catch (Exception e) {
  138 + // TODO: handle exception
  139 + logger.info("date="+d+";line="+line+";线路公里审计保存失败!");
  140 + }
  141 + try {
  142 + Map<String, Object> calcBusMileage = calcBusMileage(d, line);
  143 + m.put("busMileage", calcBusMileage);
  144 + } catch (Exception e) {
  145 + // TODO: handle exception
  146 + logger.info("date="+d+";line="+line+";路单数据审计保存失败!");
  147 + }
  148 + }
  149 +
  150 + return m;
  151 + }
  152 +
  153 + @Transactional
  154 + @Override
  155 + public Map<String, Object> generateNew(String date, String line) throws Exception {
  156 + Map<String, Object> newMap = new HashMap<String, Object>();
  157 + try {
  158 + if(date == null){
  159 + date = "";
  160 + } else {
  161 + date = date.trim();
  162 + }
  163 + if(line == null){
  164 + line = "";
  165 + } else {
  166 + line = line.trim();
  167 + }
  168 + if(date.length() != 0 && line.length() != 0){
  169 + calcRepository.deleteByDateAndLine(date, line);
  170 + } else if(date.length() != 0){
  171 + calcRepository.deleteByDate(date);
  172 + } else {
  173 + newMap.put("status", ResponseCode.ERROR);
  174 + logger.error("save erro.", "日期不能为空");
  175 + return newMap;
  176 + }
  177 +
  178 + if(date.trim().length() == 0){
  179 + newMap.put("status", ResponseCode.ERROR);
  180 + logger.error("save erro.", "日期不能为空");
  181 + return newMap;
  182 + }
  183 +
  184 +// String sql = "select c.id,c.out_config,c.start_opt,t.line_code from bsth_c_line_config c LEFT JOIN bsth_c_line t on c.line=t.id";
  185 + String sql="select xl_bm as line_code from bsth_c_s_sp_info_real where schedule_date_str = '"+date+"'";
  186 + if(line.trim().length() > 0){
  187 + sql += " and xl_bm = '"+line+"'";
  188 +// sql += " where t.line_code = " + line;
  189 + }
  190 + sql += " group by xl_bm";
  191 + List<Map<String, Object>> listLineConfig = jdbcTemplate.query(sql,
  192 + new RowMapper<Map<String, Object>>(){
  193 + @Override
  194 + public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
  195 + Map<String, Object> m = new HashMap<String, Object>();
  196 +// m.put("id", rs.getLong("id"));
  197 +// m.put("out_config", rs.getString("out_config"));
  198 +// m.put("start_opt", rs.getString("start_opt"));
  199 + m.put("line_code", rs.getString("line_code"));
  200 + return m;
  201 + }});
  202 +
  203 + String xlSql="select line_code,spac_grade from bsth_c_line";
  204 + if(line.length() != 0){
  205 + xlSql += " where line_code ='"+line+"'";
  206 + }
  207 + List<Map<String, Object>> xlList=jdbcTemplate.query(xlSql, new RowMapper<Map<String, Object>>() {
  208 + @Override
  209 + public Map<String, Object> mapRow(ResultSet arg0, int arg1) throws SQLException {
  210 + Map<String, Object> map=new HashMap<String,Object>();
  211 + map.put("line",arg0.getString("line_code"));
  212 + map.put("grade", arg0.getString("spac_grade"));
  213 + return map;
  214 + }});
  215 + Map<String, List<Map<String, Object>>> xlMap = new HashMap<String, List<Map<String, Object>>>();
  216 + for(Map<String, Object> m : xlList){
  217 + if(m.containsKey("line") && m.get("line").toString().trim().length() > 0){
  218 + String key = m.get("line").toString().trim();
  219 + if(!xlMap.containsKey(key))
  220 + xlMap.put(key, new ArrayList<Map<String, Object>>());
  221 + xlMap.get(key).add(m);
  222 + }
  223 + }
  224 + //查询大间隔时间
  225 + String djgSql="select * from bsth_c_interval";
  226 + List<Interval> djgList=jdbcTemplate.query(djgSql, new RowMapper<Interval>() {
  227 + @Override
  228 + public Interval mapRow(ResultSet arg0, int arg1) throws SQLException {
  229 + Interval m=new Interval();
  230 + m.setLevel(arg0.getString("level"));
  231 + m.setPeak(arg0.getInt("peak"));
  232 + m.setTrough(arg0.getInt("trough"));
  233 + return m;
  234 + }});
  235 +
  236 + Map<String, List<ScheduleRealInfo>> scheMap = new HashMap<String, List<ScheduleRealInfo>>();
  237 + List<ScheduleRealInfo> list = calcRepository.findAllScheduleByDate(date);
  238 + for(ScheduleRealInfo s : list){
  239 + String xlBm = s.getXlBm();
  240 + if(!scheMap.containsKey(xlBm)){
  241 + scheMap.put(xlBm, new ArrayList<ScheduleRealInfo>());
  242 + }
  243 + scheMap.get(xlBm).add(s);
  244 + }
  245 +
  246 + Set<String> lineSet = new HashSet<String>();
  247 + List<CalcWaybill> all = new ArrayList<CalcWaybill>();
  248 + for (int i = 0; i < listLineConfig.size(); i++) {
  249 + Map<String, Object> m =listLineConfig.get(i);
  250 + String lineCode=m.get("line_code").toString().trim();
  251 +// String startOpt=m.get("start_opt").toString().trim();
  252 + if(!lineSet.add(lineCode))
  253 + continue;
  254 +
  255 + List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
  256 + if(xlMap.containsKey(lineCode) && xlMap.get(lineCode) != null){
  257 + tempList = xlMap.get(lineCode);
  258 + }
  259 +
  260 + if(!scheMap.containsKey(lineCode))
  261 + continue;
  262 + List<CalcWaybill> findAll = calcToolService.findAll(date, lineCode, scheMap.get(lineCode), tempList, djgList);
  263 + all.addAll(findAll);
  264 +
  265 + }
  266 +// new BatchSaveUtils<CalcWaybill>().saveList2(all, CalcWaybill.class);
  267 + calcRepository.saveAll(all);
  268 +
  269 + newMap.put("status", ResponseCode.SUCCESS);
  270 + } catch (Exception e) {
  271 + // TODO: handle exception
  272 + newMap.put("status", ResponseCode.ERROR);
  273 + logger.error("save erro.", e);
  274 + throw e;
  275 + }
  276 +
  277 + return newMap;
  278 + }
  279 +
  280 + @Override
  281 + public List<Map<String, Object>> statisticsDailyTj(String gsdm,
  282 + String fgsdm, String line, String date, String date2,
  283 + String xlName, String type) {
  284 +
  285 + List<String> keyList = new ArrayList<String>();
  286 + List<CalcWaybill> list = new ArrayList<CalcWaybill>();
  287 + List<CalcWaybill> lists = new ArrayList<CalcWaybill>();
  288 + List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  289 + Map<String, List<CalcWaybill>> keyMap = new HashMap<String, List<CalcWaybill>>();
  290 +
  291 + if(line.equals("")){
  292 + //查询所有线路
  293 + list = calcRepository.scheduleByDateAndLineTj(line,date,date2,gsdm,fgsdm);
  294 + }else{
  295 + //查询单条线路
  296 + list = calcRepository.scheduleByDateAndLineTj2(line,date,date2);
  297 + }
  298 +
  299 + for(CalcWaybill c : list){
  300 + String key = c.getXlName();
  301 + if(!keyMap.containsKey(key)){
  302 + keyMap.put(key, new ArrayList<CalcWaybill>());
  303 + keyList.add(key);
  304 + }
  305 + keyMap.get(key).add(c);
  306 + }
  307 + Collections.sort(keyList, new AccountXlbmStr());
  308 + for(String key : keyList){
  309 + CalcWaybill calc = keyMap.get(key).get(0);
  310 + for(int i = 1; i < keyMap.get(key).size(); i++){
  311 + CalcWaybill c= keyMap.get(key).get(i);
  312 + calc.setJhyylc(Arith.add(calc.getJhyylc(), c.getJhyylc()));
  313 + calc.setJhfyylc(Arith.add(calc.getJhfyylc(), c.getJhfyylc()));
  314 + calc.setSjyylc(Arith.add(calc.getSjyylc(), c.getSjyylc()));
  315 + calc.setSjfyylc(Arith.add(calc.getSjfyylc(), c.getSjfyylc()));
  316 + calc.setLblc(Arith.add(calc.getLblc(), c.getLblc()));
  317 + calc.setLbbc(calc.getLbbc() + c.getLbbc());
  318 + calc.setLblcLz(Arith.add(calc.getLblcLz(), c.getLblcLz()));
  319 + calc.setLblcDm(Arith.add(calc.getLblcDm(), c.getLblcDm()));
  320 + calc.setLblcGz(Arith.add(calc.getLblcGz(), c.getLblcGz()));
  321 + calc.setLblcJf(Arith.add(calc.getLblcJf(), c.getLblcJf()));
  322 + calc.setLblcZs(Arith.add(calc.getLblcZs(), c.getLblcZs()));
  323 + calc.setLblcQr(Arith.add(calc.getLblcQr(), c.getLblcQr()));
  324 + calc.setLblcQc(Arith.add(calc.getLblcQc(), c.getLblcQc()));
  325 + calc.setLblcKx(Arith.add(calc.getLblcKx(), c.getLblcKx()));
  326 + calc.setLblcQh(Arith.add(calc.getLblcQh(), c.getLblcQh()));
  327 + calc.setLblcYw(Arith.add(calc.getLblcYw(), c.getLblcYw()));
  328 + calc.setLblcQt(Arith.add(calc.getLblcQt(), c.getLblcQt()));
  329 + calc.setLjyylc(Arith.add(calc.getLjyylc(), c.getLjyylc()));
  330 + calc.setLjfyylc(Arith.add(calc.getLjfyylc(), c.getLjfyylc()));
  331 + calc.setJhyybc(calc.getJhyybc() + c.getJhyybc());
  332 + calc.setJhyybczgf(calc.getJhyybczgf() + c.getJhyybczgf());
  333 + calc.setJhyybcwgf(calc.getJhyybcwgf() + c.getJhyybcwgf());
  334 + calc.setSjyybc(calc.getSjyybc() + c.getSjyybc());
  335 + calc.setSjyybczgf(calc.getSjyybczgf() + c.getSjyybczgf());
  336 + calc.setSjyybcwgf(calc.getSjyybcwgf() + c.getSjyybcwgf());
  337 + calc.setLjbc(calc.getLjbc() + c.getLjbc());
  338 + calc.setLjbczgf(calc.getLjbczgf() + c.getLjbczgf());
  339 + calc.setLjbcwgf(calc.getLjbcwgf() + c.getLjbcwgf());
  340 + calc.setFzbc(calc.getFzbc() + c.getFzbc());
  341 + calc.setFzbczgf(calc.getFzbczgf() + c.getFzbczgf());
  342 + calc.setFzbcwgf(calc.getFzbcwgf() + c.getFzbcwgf());
  343 + calc.setDtbc(calc.getDtbc() + c.getDtbc());
  344 + calc.setDtbczgf(calc.getDtbczgf() + c.getDtbczgf());
  345 + calc.setDtbcwgf(calc.getDtbcwgf() + c.getDtbcwgf());
  346 + }
  347 + calc.setSjyylc(Arith.add(calc.getSjyylc(), calc.getLjyylc()));
  348 + calc.setSjfyylc(Arith.add(calc.getSjfyylc(), calc.getLjfyylc()));
  349 + lists.add(calc);
  350 + }
  351 + CalcWaybill sum = new CalcWaybill();
  352 + sum.setXlName("合计");
  353 + for(CalcWaybill c : lists){
  354 + sum.setJhyylc(Arith.add(sum.getJhyylc()!=null?sum.getJhyylc():0, c.getJhyylc()));
  355 + sum.setJhfyylc(Arith.add(sum.getJhfyylc()!=null?sum.getJhfyylc():0, c.getJhfyylc()));
  356 + sum.setSjyylc(Arith.add(sum.getSjyylc()!=null?sum.getSjyylc():0, c.getSjyylc()));
  357 + sum.setLjyylc(Arith.add(sum.getLjyylc()!=null?sum.getLjyylc():0, c.getLjyylc()));
  358 + sum.setSjfyylc(Arith.add(sum.getSjfyylc()!=null?sum.getSjfyylc():0, c.getSjfyylc()));
  359 + sum.setLjfyylc(Arith.add(sum.getLjfyylc()!=null?sum.getLjfyylc():0, c.getLjfyylc()));
  360 + sum.setLblc(Arith.add(sum.getLblc()!=null?sum.getLblc():0, c.getLblc()));
  361 + sum.setLbbc(sum.getLbbc() + c.getLbbc());
  362 + sum.setLblcLz(Arith.add(sum.getLblcLz()!=null?sum.getLblcLz():0, c.getLblcLz()));
  363 + sum.setLblcDm(Arith.add(sum.getLblcDm()!=null?sum.getLblcDm():0, c.getLblcDm()));
  364 + sum.setLblcGz(Arith.add(sum.getLblcGz()!=null?sum.getLblcGz():0, c.getLblcGz()));
  365 + sum.setLblcJf(Arith.add(sum.getLblcJf()!=null?sum.getLblcJf():0, c.getLblcJf()));
  366 + sum.setLblcZs(Arith.add(sum.getLblcZs()!=null?sum.getLblcZs():0, c.getLblcZs()));
  367 + sum.setLblcQr(Arith.add(sum.getLblcQr()!=null?sum.getLblcQr():0, c.getLblcQr()));
  368 + sum.setLblcQc(Arith.add(sum.getLblcQc()!=null?sum.getLblcQc():0, c.getLblcQc()));
  369 + sum.setLblcKx(Arith.add(sum.getLblcKx()!=null?sum.getLblcKx():0, c.getLblcKx()));
  370 + sum.setLblcQh(Arith.add(sum.getLblcQh()!=null?sum.getLblcQh():0, c.getLblcQh()));
  371 + sum.setLblcYw(Arith.add(sum.getLblcYw()!=null?sum.getLblcYw():0, c.getLblcYw()));
  372 + sum.setLblcQt(Arith.add(sum.getLblcQt()!=null?sum.getLblcQt():0, c.getLblcQt()));
  373 + sum.setJhyybc(sum.getJhyybc() + c.getJhyybc());
  374 + sum.setJhyybczgf(sum.getJhyybczgf() + c.getJhyybczgf());
  375 + sum.setJhyybcwgf(sum.getJhyybcwgf() + c.getJhyybcwgf());
  376 + sum.setSjyybc(sum.getSjyybc() + c.getSjyybc());
  377 + sum.setSjyybczgf(sum.getSjyybczgf() + c.getSjyybczgf());
  378 + sum.setSjyybcwgf(sum.getSjyybcwgf() + c.getSjyybcwgf());
  379 + sum.setLjbc(sum.getLjbc() + c.getLjbc());
  380 + sum.setLjbczgf(sum.getLjbczgf() + c.getLjbczgf());
  381 + sum.setLjbcwgf(sum.getLjbcwgf() + c.getLjbcwgf());
  382 + sum.setFzbc(sum.getFzbc() + c.getFzbc());
  383 + sum.setFzbczgf(sum.getFzbczgf() + c.getFzbczgf());
  384 + sum.setFzbcwgf(sum.getFzbcwgf() + c.getFzbcwgf());
  385 + sum.setDtbc(sum.getDtbc() + c.getDtbc());
  386 + sum.setDtbczgf(sum.getDtbczgf() + c.getDtbczgf());
  387 + sum.setDtbcwgf(sum.getDtbcwgf() + c.getDtbcwgf());
  388 + }
  389 + if(lists.size() > 0){
  390 + lists.add(sum);
  391 + }
  392 +
  393 + for(CalcWaybill c : lists){
  394 + Map<String, Object> m = new HashMap<String, Object>();
  395 + m.put("xlName", c.getXlName());
  396 + m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));
  397 + m.put("jhlc", c.getJhyylc());
  398 + m.put("jcclc", c.getJhfyylc());
  399 +// m.put("sjzgl", Arith.add(Arith.add(c.getSjyylc(), c.getLjyylc()), Arith.add(c.getSjfyylc(), c.getLjfyylc())));
  400 +// m.put("sjgl", Arith.add(c.getSjyylc(), c.getLjyylc()));
  401 +// m.put("sjksgl", Arith.add(c.getSjfyylc(), c.getLjfyylc()));
  402 + m.put("sjzgl", Arith.add(c.getSjyylc(), c.getSjfyylc()));
  403 + m.put("sjgl", c.getSjyylc());
  404 + m.put("sjksgl", c.getSjfyylc());
  405 + m.put("ssgl", c.getLblc());
  406 + m.put("ssbc", c.getLbbc());
  407 + m.put("ssgl_lz", c.getLblcLz());
  408 + m.put("ssgl_dm", c.getLblcDm());
  409 + m.put("ssgl_gz", c.getLblcGz());
  410 + m.put("ssgl_jf", c.getLblcJf());
  411 + m.put("ssgl_zs", c.getLblcZs());
  412 + m.put("ssgl_qr", c.getLblcQr());
  413 + m.put("ssgl_qc", c.getLblcQc());
  414 + m.put("ssgl_kx", c.getLblcKx());
  415 + m.put("ssgl_qh", c.getLblcQh());
  416 + m.put("ssgl_yw", c.getLblcYw());
  417 + m.put("ssgl_other", c.getLblcQt());
  418 + m.put("ljgl", c.getLjyylc());
  419 + m.put("jhbc", c.getJhyybc());
  420 + m.put("jhbc_m", c.getJhyybczgf());
  421 + m.put("jhbc_a", c.getJhyybcwgf());
  422 + m.put("sjbc", c.getSjyybc());
  423 + m.put("sjbc_m", c.getSjyybczgf());
  424 + m.put("sjbc_a", c.getSjyybcwgf());
  425 + m.put("ljbc", c.getLjbc());
  426 + m.put("ljbc_m", c.getLjbczgf());
  427 + m.put("ljbc_a", c.getLjbcwgf());
  428 + m.put("fzbc", c.getFzbc());
  429 + m.put("fzbc_m", c.getFzbczgf());
  430 + m.put("fzbc_a", c.getFzbcwgf());
  431 + m.put("dtbc", c.getDtbc());
  432 + m.put("dtbc_m", c.getDtbczgf());
  433 + m.put("dtbc_a", c.getDtbcwgf());
  434 + resList.add(m);
  435 + }
  436 +
  437 + if (type != null && type.length() != 0 && type.equals("export")) {
  438 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  439 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  440 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  441 + Map<String, Object> m = new HashMap<String, Object>();
  442 + m.put("date", date+"至"+date2);
  443 + ReportUtils ee = new ReportUtils();
  444 + try {
  445 + String dateTime = "";
  446 + if(date.equals(date2)){
  447 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  448 + } else {
  449 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  450 + +"-"+sdfSimple.format(sdfMonth.parse(date2));
  451 + }
  452 + listI.add(resList.iterator());
  453 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  454 + ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_.xls",
  455 + path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
  456 + } catch (Exception e) {
  457 + // TODO: handle exception
  458 + //e.printStackTrace();
  459 + logger.info("" , e);
  460 + }
  461 + }
  462 +
  463 + return resList;
  464 + }
  465 +
  466 + /**
  467 + * @param rq 格式如:2018-03-22(留空""默认当前日期前四天)
  468 + * @param line (留空""默认全部线路)
  469 + */
  470 + @Transactional
  471 + @Override
  472 + public String calcDaily(String rq, String line) throws Exception{
  473 + String result = "";
  474 + try {
  475 + List<String> dateList = new ArrayList<String>();
  476 + if(rq == null || rq.trim().length() == 0){
  477 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
  478 + Date dNow = new Date(); //当前时间
  479 + Date dBefore = new Date();
  480 + Calendar calendar = Calendar.getInstance(); //得到日历
  481 + calendar.setTime(dNow);//把当前时间赋给日历
  482 + calendar.add(Calendar.DAY_OF_MONTH, -4); //设置为前一天
  483 + dBefore = calendar.getTime(); //得到前一天的时间
  484 +// rq = sdf.format(dBefore);
  485 + dateList.add(sdf.format(dBefore));
  486 + Date date = new Date();
  487 + date.setTime(dBefore.getTime() - 1l*1000*60*60*24);
  488 + dateList.add(sdf.format(date));
  489 + } else {
  490 +// rq = rq.trim();
  491 + dateList.add(rq.trim());
  492 + }
  493 + if(line == null || line.trim().length() == 0){
  494 + line = "";
  495 + } else {
  496 + line = line.trim();
  497 + }
  498 +
  499 + for(int j = 0; j < dateList.size(); j++){
  500 + rq = dateList.get(j);
  501 +
  502 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  503 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
  504 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  505 +
  506 + String gsSql="select gs_bm, fgs_bm from bsth_c_s_sp_info_real where schedule_date_str = '"+rq+"'";
  507 + if(line.trim().length() > 0)
  508 + gsSql += " and xl_bm = '"+line+"'";
  509 + gsSql += " group by gs_bm, fgs_bm";
  510 + List<Map<String, String>> gsList=jdbcTemplate.query(gsSql, new RowMapper<Map<String, String>>() {
  511 + @Override
  512 + public Map<String, String> mapRow(ResultSet arg0, int arg1) throws SQLException {
  513 + Map<String, String> m = new HashMap<String, String>();
  514 + m.put("gsdm", arg0.getString("gs_bm"));
  515 + m.put("fgsdm", arg0.getString("fgs_bm"));
  516 + return m;
  517 + }});
  518 +
  519 + //查询所有线路
  520 + for(Map<String, String> m : gsList){
  521 + list.addAll(calcStatisticsRepository.scheduleByDateAndLine(line, rq, rq, m.get("gsdm"), m.get("fgsdm")));
  522 + }
  523 +
  524 + List<CalcInterval> listInterval=calcIntervalRepository.selectByDateAndCompany(rq, "", "","");
  525 + Map<String,CalcInterval> mapInterval=new HashMap<String,CalcInterval>();
  526 + for (int i = 0; i < listInterval.size(); i++) {
  527 + CalcInterval c=listInterval.get(i);
  528 + mapInterval.put(c.getXlBm(), c);
  529 + }
  530 +
  531 +
  532 + for (int i = 0; i < list.size(); i++) {
  533 + ScheduleRealInfo s=list.get(i);
  534 + Set<ChildTaskPlan> cts = s.getcTasks();
  535 + if(cts != null && cts.size() > 0){
  536 + list_s.add(s);
  537 + }else{
  538 + if(s.getZdsjActual()!=null && s.getFcsjActual()!=null){
  539 + list_s.add(s);
  540 + }
  541 + }
  542 + }
  543 + List<CalcStatistics> lMap = new ArrayList<CalcStatistics>();
  544 + for (int i = 0; i < list.size(); i++) {
  545 + if(i<list.size()-1){
  546 + if(list.get(i+1).getXlBm().equals(list.get(i).getXlBm())){
  547 + lists.add(list.get(i));
  548 + }else{
  549 + lists.add(list.get(i));
  550 + CalcInterval t=null;
  551 + if(mapInterval.get(lists.get(0).getXlBm())!=null){
  552 + t=mapInterval.get(lists.get(0).getXlBm());
  553 + }
  554 +
  555 + CalcStatistics s=staticTj(lists,t);
  556 + lMap.add(s);
  557 + lists=new ArrayList<ScheduleRealInfo>();
  558 + }
  559 + }else{
  560 + if(list.get(i).getXlBm().equals(list.get(i-1).getXlBm())){
  561 + lists.add(list.get(i));
  562 + CalcInterval t=null;
  563 + if(mapInterval.get(lists.get(0).getXlBm())!=null){
  564 + t=mapInterval.get(lists.get(0).getXlBm());
  565 + }
  566 + CalcStatistics s=staticTj(lists,t);
  567 + lMap.add(s);
  568 + }else{
  569 + lists=new ArrayList<ScheduleRealInfo>();
  570 + lists.add(list.get(i));
  571 + CalcInterval t=null;
  572 + if(mapInterval.get(lists.get(0).getXlBm())!=null){
  573 + t=mapInterval.get(lists.get(0).getXlBm());
  574 + }
  575 + CalcStatistics s=staticTj(lists,t);
  576 + lMap.add(s);
  577 + }
  578 + }
  579 + }
  580 + // Collections.sort(lMap,new AccountXlbm());
  581 +
  582 + if(line.trim().length() > 0){
  583 + calcStatisticsRepository.deleteByDateAndLine(rq, line);
  584 + } else {
  585 + calcStatisticsRepository.deleteByDate(rq);
  586 + }
  587 + calcStatisticsRepository.saveAll(lMap);
  588 +
  589 + }
  590 +
  591 + result = "success";
  592 + } catch (Exception e) {
  593 + // TODO: handle exception
  594 + throw e;
  595 + }finally{
  596 + logger.info("result:"+result);
  597 + }
  598 + return result;
  599 + }
  600 +
  601 + public final CalcStatistics staticTj(List<ScheduleRealInfo> list,CalcInterval t){
  602 +
  603 + List<ScheduleRealInfo> lists=new ArrayList<ScheduleRealInfo>();
  604 + for(int i=0;i<list.size();i++){
  605 + ScheduleRealInfo s=list.get(i);
  606 + Set<ChildTaskPlan> cts = s.getcTasks();
  607 + if(cts != null && cts.size() > 0){
  608 + lists.add(s);
  609 + }else{
  610 + if(s.getZdsjActual()!=null&& s.getFcsjActual()!=null){
  611 + lists.add(s);
  612 + }
  613 + }
  614 + }
  615 +// Map<String, Object> map = new HashMap<String, Object>();
  616 + CalcStatistics s = new CalcStatistics();
  617 + if(list.size() > 0){
  618 + ScheduleRealInfo sche = list.get(0);
  619 + s.setXl(sche.getXlBm());
  620 + s.setXlName(sche.getXlName());
  621 + s.setDate(sche.getScheduleDate());
  622 + s.setDateStr(sche.getScheduleDateStr());
  623 + s.setGsdm(sche.getGsBm());
  624 + s.setFgsdm(sche.getFgsBm());
  625 +
  626 + double jhyygl=culateService.culateJhgl(list);//计划营运公里
  627 + double jhjcclc= culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  628 + s.setJhyylc(jhyygl);
  629 + s.setJhkslc(jhjcclc);
  630 + s.setJhzlc(Arith.add(jhyygl, jhjcclc));
  631 +
  632 + double ljgl= culateService.culateLjgl(lists);
  633 + double sjyygl= culateService.culateSjgl(lists);
  634 + double zyygl= Arith.add(sjyygl,ljgl);
  635 +
  636 + double ljksgl= culateService.culateLjksgl(lists);
  637 + double sjjccgl=culateService.culateJccgl(lists);
  638 + double sjksgl=culateService.culateKsgl(lists);
  639 + double zksgl=Arith.add(sjjccgl, sjksgl);
  640 + s.setSjyylc(zyygl);
  641 + s.setSjkslc(zksgl);
  642 + s.setSjzlc(Arith.add(zyygl, zksgl));
  643 +
  644 + s.setLjkslc(ljksgl);
  645 +
  646 + s.setSslc(culateService.culateLbgl(list));
  647 + s.setSsbc(culateService.culateLbbc(list));
  648 +
  649 + //计划+临加-少驶=实驶
  650 +// double jl=Arith.sub(Arith.add(jhyygl, ljgl),ssgl);
  651 +// if(jl==zyygl){
  652 +// map.put("zt", 0);
  653 +// }else{
  654 +// map.put("zt", 1);
  655 +// }
  656 +
  657 + s.setLzlc(culateService.culateCJLC(list, "路阻"));
  658 + s.setDmlc(culateService.culateCJLC(list, "吊慢"));
  659 + s.setGzlc(culateService.culateCJLC(list, "故障"));
  660 + s.setJflc(culateService.culateCJLC(list, "纠纷"));
  661 + s.setZslc(culateService.culateCJLC(list, "肇事"));
  662 + s.setQrlc(culateService.culateCJLC(list, "缺人"));
  663 + s.setQclc(culateService.culateCJLC(list, "缺车"));
  664 + s.setKxlc(culateService.culateCJLC(list, "客稀"));
  665 + s.setQhlc(culateService.culateCJLC(list, "气候"));
  666 + s.setYwlc(culateService.culateCJLC(list, "援外"));
  667 + double ssgl_pc=culateService.culateCJLC(list, "配车");
  668 + double ssgl_by=culateService.culateCJLC(list, "保养");
  669 + double ssgl_cj=culateService.culateCJLC(list, "抽减");
  670 + double ssgl_qt=culateService.culateCJLC(list, "其他");
  671 + s.setQtlc(Arith.add(Arith.add(ssgl_pc, ssgl_by),Arith.add(ssgl_cj, ssgl_qt)));
  672 + s.setLjlc(ljgl);
  673 +
  674 + s.setJhbcq(culateService.culateJhbc(list,""));
  675 + s.setJhbcz(culateService.culateJhbc(list, "zgf"));
  676 + s.setJhbcw(culateService.culateJhbc(list, "wgf"));
  677 + s.setSjbcq(culateService.culateSjbc(lists,""));
  678 + s.setSjbcz(culateService.culateSjbc(lists,"zgf"));
  679 + s.setSjbcw(culateService.culateSjbc(lists,"wgf"));
  680 + s.setLjbcq(culateService.culateLjbc(lists,""));
  681 + s.setLjbcz(culateService.culateLjbc(lists,"zgf"));
  682 + s.setLjbcw(culateService.culateLjbc(lists,"wgf"));
  683 + s.setFzbcq(culateService.culateFzbc(lists, ""));
  684 + s.setFzbcz(culateService.culateFzbc(lists, "zgf"));
  685 + s.setFzbcw(culateService.culateFzbc(lists, "wgf"));
  686 + s.setDtbcq(0);
  687 + s.setDtbcz(0);
  688 + s.setDtbcw(0);
  689 + if(t==null){
  690 + Map<String, Object> m_=culateService.culateDjg(lists, list.get(0).getXlBm());
  691 + if(m_.containsKey("djgcsq") && m_.get("djgcsq")!=null)
  692 + s.setDjgq(Integer.valueOf(m_.get("djgcsq").toString()));
  693 + else
  694 + s.setDjgq(0);
  695 + if(m_.containsKey("djgcsz") && m_.get("djgcsz")!=null)
  696 + s.setDjgz(Integer.valueOf(m_.get("djgcsz").toString()));
  697 + else
  698 + s.setDjgz(0);
  699 + if(m_.containsKey("djgcsw") && m_.get("djgcsw")!=null)
  700 + s.setDjgw(Integer.valueOf(m_.get("djgcsw").toString()));
  701 + else
  702 + s.setDjgw(0);
  703 + if(m_.containsKey("djgsj") && m_.get("djgsj")!=null)
  704 + s.setDjgsj(Integer.valueOf(m_.get("djgsj").toString()));
  705 + else
  706 + s.setDjgsj(0);
  707 + }else{
  708 + s.setDjgq(t.getDjgAll());
  709 + s.setDjgz(t.getDjgZgf());
  710 + s.setDjgw(t.getDjgWgf());
  711 + s.setDjgsj(t.getDjgTime());
  712 + }
  713 + }
  714 + return s;
  715 + }
  716 +
  717 + class AccountXlbm implements Comparator<Map<String, Object>>{
  718 + @Override
  719 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  720 + // TODO Auto-generated method stub
  721 +// PinyinHelper.convertToPinyinString(ppy.getName(),
  722 +// "" , PinyinFormat.WITHOUT_TONE)
  723 + return o1.get("xlNamePy").toString().compareTo(
  724 + o2.get("xlNamePy").toString());
  725 + }
  726 + }
  727 +
  728 + class AccountXlbmStr implements Comparator<String>{
  729 + @Override
  730 + public int compare(String o1, String o2) {
  731 + // TODO Auto-generated method stub
  732 + return o1.compareTo(o2);
  733 + }
  734 + }
  735 +
  736 + @Override
  737 + public List<CalcStatistics> calcStatisticsDaily(String gsdm, String fgsdm,
  738 + String line, String date, String date2, String xlName, String type,String nature) {
  739 + // TODO Auto-generated method stub
  740 + List<CalcStatistics> listAll = new ArrayList<CalcStatistics>();
  741 + if(line.length() > 0){
  742 + listAll = calcStatisticsRepository.selectByDateAndLineTj2(line, date, date2);
  743 + } else {
  744 + listAll = calcStatisticsRepository.selectByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  745 + }
  746 + Map<String, Boolean> lineMap=lineService.lineNature();
  747 + List<CalcStatistics> list = new ArrayList<CalcStatistics>();
  748 + if(nature.equals("0")){
  749 + list=listAll;
  750 + }else{
  751 + for (int i = 0; i < listAll.size(); i++) {
  752 + CalcStatistics c=listAll.get(i);
  753 + if(nature.equals("1")){
  754 + if(lineMap.get(c.getXl())){
  755 + list.add(c);
  756 + }
  757 + }else{
  758 + if(!lineMap.get(c.getXl())){
  759 + list.add(c);
  760 + }
  761 + }
  762 + }
  763 + }
  764 + List<CalcStatistics> resList = new ArrayList<CalcStatistics>();
  765 + Map<String, List<CalcStatistics>> keyMap = new HashMap<String, List<CalcStatistics>>();
  766 + List<String> keyList = new ArrayList<String>();
  767 +
  768 + for(CalcStatistics s : list){
  769 + try {
  770 +// String key = PinyinHelper.convertToPinyinString(s.getXl(), "" , PinyinFormat.WITHOUT_TONE);
  771 + String key =s.getFgsdm()+s.getXl();
  772 +// if(line.equals("")){
  773 +// key =s.getFgsdm()+s.getXl();
  774 +// }else{
  775 +// key =s.getXl();
  776 +// }
  777 + if(!keyMap.containsKey(key)){
  778 + keyMap.put(key, new ArrayList<CalcStatistics>());
  779 + keyList.add(key);
  780 + }
  781 + keyMap.get(key).add(s);
  782 + } catch (Exception e) {
  783 + // TODO Auto-generated catch block
  784 + e.printStackTrace();
  785 + }
  786 + }
  787 + Collections.sort(keyList, new AccountXlbmStr());
  788 +
  789 + for(String key : keyList){
  790 + if(keyMap.get(key).size() > 0){
  791 + CalcStatistics s = keyMap.get(key).get(0);
  792 + if(keyMap.get(key).size() > 1)
  793 + for(int i = 1; i < keyMap.get(key).size(); i++){
  794 + CalcStatistics s_ = keyMap.get(key).get(i);
  795 + s = addStatistics(s, s_);
  796 + }
  797 +// if(line.equals("")){
  798 + s.setFgsName(BasicData.businessFgsCodeNameMap.get(s.getFgsdm()+"_"+s.getGsdm()));
  799 + /*}else{
  800 + List<Line> l=lineRepository.findLineByCode(line);
  801 + if(l.size()>0)
  802 + s.setFgsName(BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
  803 + }*/
  804 + resList.add(s);
  805 + }
  806 + }
  807 +
  808 + if(resList.size() > 0){
  809 + CalcStatistics temp = new CalcStatistics();
  810 + temp.setXlName("合计");
  811 + temp.setFgsName("");
  812 + for(CalcStatistics s : resList){
  813 + temp = addStatistics(temp, s);
  814 + }
  815 + resList.add(temp);
  816 + }
  817 +
  818 + List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
  819 + for(CalcStatistics c : resList){
  820 + Map<String, Object> m = new HashMap<String, Object>();
  821 + m.put("fgsName", c.getFgsName());
  822 + m.put("xlName", c.getXlName());
  823 + m.put("jhzlc", c.getJhzlc());
  824 + m.put("jhlc", c.getJhyylc());
  825 + m.put("jcclc", c.getJhkslc());
  826 + m.put("sjzgl", c.getSjzlc());
  827 + m.put("sjgl", c.getSjyylc());
  828 + m.put("sjksgl", c.getSjkslc());
  829 + m.put("ssgl", c.getSslc());
  830 + m.put("ssbc", c.getSsbc());
  831 + m.put("ssgl_lz", c.getLzlc());
  832 + m.put("ssgl_dm", c.getDmlc());
  833 + m.put("ssgl_gz", c.getGzlc());
  834 + m.put("ssgl_jf", c.getJflc());
  835 + m.put("ssgl_zs", c.getZslc());
  836 + m.put("ssgl_qr", c.getQrlc());
  837 + m.put("ssgl_qc", c.getQclc());
  838 + m.put("ssgl_kx", c.getKxlc());
  839 + m.put("ssgl_qh", c.getQhlc());
  840 + m.put("ssgl_yw", c.getYwlc());
  841 + m.put("ssgl_other", c.getQtlc());
  842 + m.put("ljgl", c.getLjlc());
  843 + m.put("ljks", c.getLjkslc());
  844 + m.put("jhbc", c.getJhbcq());
  845 + m.put("jhbc_m", c.getJhbcz());
  846 + m.put("jhbc_a", c.getJhbcw());
  847 + m.put("sjbc", c.getSjbcq());
  848 + m.put("sjbc_m", c.getSjbcz());
  849 + m.put("sjbc_a", c.getSjbcw());
  850 + m.put("ljbc", c.getLjbcq());
  851 + m.put("ljbc_m", c.getLjbcz());
  852 + m.put("ljbc_a", c.getLjbcw());
  853 + m.put("fzbc", c.getFzbcq());
  854 + m.put("fzbc_m", c.getFzbcz());
  855 + m.put("fzbc_a", c.getFzbcw());
  856 + m.put("dtbc", c.getDtbcq());
  857 + m.put("dtbc_m", c.getDtbcz());
  858 + m.put("dtbc_a", c.getDtbcw());
  859 + m.put("djg", c.getDjgq());
  860 + m.put("djg_m", c.getDjgz());
  861 + m.put("djg_a", c.getDjgw());
  862 + m.put("djg_time", c.getDjgsj());
  863 + mapList.add(m);
  864 + }
  865 +
  866 + if (type != null && type.length() != 0 && type.equals("export")) {
  867 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  868 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  869 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  870 + Map<String, Object> m = new HashMap<String, Object>();
  871 + m.put("date", date+"至"+date2);
  872 + ReportUtils ee = new ReportUtils();
  873 + try {
  874 + String dateTime = "";
  875 + if(date.equals(date2)){
  876 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  877 + } else {
  878 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  879 + +"-"+sdfSimple.format(sdfMonth.parse(date2));
  880 + }
  881 + listI.add(mapList.iterator());
  882 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  883 + ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_.xls",
  884 + path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
  885 + } catch (Exception e) {
  886 + // TODO: handle exception
  887 + //e.printStackTrace();
  888 + logger.info("" , e);
  889 + }
  890 + }
  891 +
  892 + return resList;
  893 + }
  894 +
  895 + @Override
  896 + public List<Map<String, Object>> calcStatisticsDaily2(String gsdm, String fgsdm,
  897 + String line, String date, String date2, String xlName, String type,String nature) {
  898 + // TODO Auto-generated method stub
  899 + SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
  900 + Date beginDate = new Date();
  901 + Calendar calendar = Calendar.getInstance();
  902 + calendar.setTime(beginDate);
  903 + calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 4);
  904 + String d2 = dft.format(calendar.getTime()); //当前日期前4天
  905 + calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) +1);
  906 + String d3= dft.format(calendar.getTime()); //当前日期前3天
  907 +
  908 + String d1="";
  909 + String d4="";
  910 + try {
  911 + long t3 = dft.parse(d2).getTime();
  912 + long t1=dft.parse(date).getTime();
  913 + long t2=dft.parse(date2).getTime();
  914 +
  915 + if(t1<=t3 && t2>t3){
  916 + //所选日期区间区间既有实时数据也有历史数据
  917 + d1=date;
  918 + d4=date2;
  919 + } else if (t1>t3&&t2>t3){
  920 + d1=date;
  921 + d2=date2;
  922 + d3=date;
  923 + d4=date2;
  924 + }else{
  925 + d1=date;
  926 + d2=date2;
  927 + //实时数据无需
  928 + d3="";
  929 + d4="";
  930 + }
  931 + } catch (ParseException e1) {
  932 + // TODO Auto-generated catch block
  933 + e1.printStackTrace();
  934 + }
  935 +
  936 +
  937 + List<CalcStatistics> listAll = new ArrayList<CalcStatistics>();
  938 + if(line.length() > 0){
  939 + listAll = calcStatisticsRepository.selectByDateAndLineTj2(line, d1, d2);
  940 + } else {
  941 + listAll = calcStatisticsRepository.selectByDateAndLineTj(line, d1, d2, gsdm, fgsdm);
  942 + }
  943 + Map<String, Boolean> lineMap=lineService.lineNature();
  944 + List<CalcStatistics> list=new ArrayList<CalcStatistics>();
  945 +
  946 + for (int i = 0; i < listAll.size(); i++) {
  947 + CalcStatistics s=listAll.get(i);
  948 + if(nature.equals("0")){
  949 + list.add(s);
  950 + }else if(nature.equals("1")){
  951 + if(lineMap.containsKey(s.getXl()) && lineMap.get(s.getXl())){
  952 + list.add(s);
  953 + }
  954 + }else{
  955 + if(lineMap.containsKey(s.getXl()) && !lineMap.get(s.getXl())){
  956 + list.add(s);
  957 + }
  958 + }
  959 + }
  960 + List<CalcStatistics> resList = new ArrayList<CalcStatistics>();
  961 + Map<String, List<CalcStatistics>> keyMap = new HashMap<String, List<CalcStatistics>>();
  962 + List<String> keyList = new ArrayList<String>();
  963 +
  964 + for(CalcStatistics s : list){
  965 + try {
  966 +// String key = PinyinHelper.convertToPinyinString(s.getXlName(), "" , PinyinFormat.WITHOUT_TONE);
  967 + String key =s.getFgsdm()+s.getXl();
  968 +// if(line.equals("")){
  969 +// key =s.getFgsdm()+s.getXl();
  970 +// }else{
  971 +// key =s.getXl();
  972 +// }
  973 + if(!keyMap.containsKey(key)){
  974 + keyMap.put(key, new ArrayList<CalcStatistics>());
  975 + keyList.add(key);
  976 + }
  977 + keyMap.get(key).add(s);
  978 + } catch (Exception e) {
  979 + // TODO Auto-generated catch block
  980 + e.printStackTrace();
  981 + }
  982 + }
  983 + Collections.sort(keyList, new AccountXlbmStr());
  984 +
  985 + for(String key : keyList){
  986 + if(keyMap.get(key).size() > 0){
  987 + CalcStatistics s = keyMap.get(key).get(0);
  988 + if(keyMap.get(key).size() > 1)
  989 + for(int i = 1; i < keyMap.get(key).size(); i++){
  990 + CalcStatistics s_ = keyMap.get(key).get(i);
  991 + s = addStatistics(s, s_);
  992 + }
  993 + resList.add(s);
  994 + }
  995 + }
  996 +
  997 + if(resList.size() > 0){
  998 + CalcStatistics temp = new CalcStatistics();
  999 + temp.setXlName("合计");
  1000 + temp.setXl("hj");
  1001 + for(CalcStatistics s : resList){
  1002 + temp = addStatistics(temp, s);
  1003 + }
  1004 + resList.add(temp);
  1005 + }
  1006 + //统计数据
  1007 + List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
  1008 + for(CalcStatistics c : resList){
  1009 + Map<String, Object> m = new HashMap<String, Object>();
  1010 + if(c.getXl().equals("hj")){
  1011 + m.put("fgsName", "");
  1012 + m.put("fgsBm", "");
  1013 + }else{
  1014 + m.put("fgsName", BasicData.businessFgsCodeNameMap.get(c.getFgsdm()+"_"+c.getGsdm()));
  1015 + m.put("fgsBm", c.getFgsdm());
  1016 + }
  1017 + m.put("xlBm", c.getXl());
  1018 + m.put("xlName", c.getXlName());
  1019 + m.put("jhzlc", c.getJhzlc());
  1020 + m.put("jhlc", c.getJhyylc());
  1021 + m.put("jcclc", c.getJhkslc());
  1022 + m.put("sjzgl", c.getSjzlc());
  1023 + m.put("sjgl", c.getSjyylc());
  1024 + m.put("sjksgl", c.getSjkslc());
  1025 + m.put("ssgl", c.getSslc());
  1026 + m.put("ssbc", c.getSsbc());
  1027 + m.put("ssgl_lz", c.getLzlc());
  1028 + m.put("ssgl_dm", c.getDmlc());
  1029 + m.put("ssgl_gz", c.getGzlc());
  1030 + m.put("ssgl_jf", c.getJflc());
  1031 + m.put("ssgl_zs", c.getZslc());
  1032 + m.put("ssgl_qr", c.getQrlc());
  1033 + m.put("ssgl_qc", c.getQclc());
  1034 + m.put("ssgl_kx", c.getKxlc());
  1035 + m.put("ssgl_qh", c.getQhlc());
  1036 + m.put("ssgl_yw", c.getYwlc());
  1037 + m.put("ssgl_other", c.getQtlc());
  1038 + m.put("ljgl", c.getLjlc());
  1039 + m.put("ljks", c.getLjkslc());
  1040 + m.put("jhbc", c.getJhbcq());
  1041 + m.put("jhbc_m", c.getJhbcz());
  1042 + m.put("jhbc_a", c.getJhbcw());
  1043 + m.put("sjbc", c.getSjbcq());
  1044 + m.put("sjbc_m", c.getSjbcz());
  1045 + m.put("sjbc_a", c.getSjbcw());
  1046 + m.put("ljbc", c.getLjbcq());
  1047 + m.put("ljbc_m", c.getLjbcz());
  1048 + m.put("ljbc_a", c.getLjbcw());
  1049 + m.put("fzbc", c.getFzbcq());
  1050 + m.put("fzbc_m", c.getFzbcz());
  1051 + m.put("fzbc_a", c.getFzbcw());
  1052 + m.put("dtbc", c.getDtbcq());
  1053 + m.put("dtbc_m", c.getDtbcz());
  1054 + m.put("dtbc_a", c.getDtbcw());
  1055 + m.put("djg", c.getDjgq());
  1056 + m.put("djg_m", c.getDjgz());
  1057 + m.put("djg_a", c.getDjgw());
  1058 + m.put("djg_time", c.getDjgsj());
  1059 + double jl = Arith.sub(Arith.add(m.get("jhlc"), m.get("ljgl")), m.get("ssgl"));
  1060 + if (jl == Double.parseDouble(m.get("sjgl").toString())) {
  1061 + m.put("zt", 0);
  1062 + } else {
  1063 + m.put("zt", 1);
  1064 + }
  1065 + mapList.add(m);
  1066 + }
  1067 +
  1068 + //实时数据
  1069 + List<Map<String, Object>> tjlist=new ArrayList<Map<String, Object>>();
  1070 + if(!d4.equals("")){
  1071 + tjlist= scheduleRealInfoService.statisticsDailyTjHb(gsdm, fgsdm, line, d3, d4, xlName, type,nature);
  1072 + }
  1073 + List<Map<String, Object>> mapListHj = new ArrayList<Map<String, Object>>();
  1074 +// List<String> lineList=new ArrayList<String>();
  1075 + Map<String, Object> kMap=new HashMap<String,Object>();
  1076 + mapList.addAll(tjlist);
  1077 + for (int i = 0; i < mapList.size(); i++) {
  1078 + Map<String, Object> m =mapList.get(i);
  1079 +// if(line.equals("")){
  1080 + if(kMap.get(m.get("fgsBm")+"_"+m.get("xlBm").toString())==null){
  1081 + kMap.put(m.get("fgsBm")+"_"+m.get("xlBm").toString(), m.get("fgsBm")+"_"+m.get("xlBm").toString());
  1082 + }
  1083 +// }else{
  1084 +// if(kMap.get(m.get("xlBm").toString())==null){
  1085 +// kMap.put(m.get("xlBm").toString(), m.get("xlBm").toString());
  1086 +// }
  1087 +// }
  1088 +
  1089 + }
  1090 + for (Object xlbm : kMap.keySet()) {
  1091 + Map<String, Object> hjMap = new HashMap<String, Object>();
  1092 + for (int i = 0; i < mapList.size(); i++) {
  1093 + Map<String, Object> lsMap=mapList.get(i);
  1094 + String xlbm_="";
  1095 +// if(line.equals("")){
  1096 + xlbm_=lsMap.get("fgsBm").toString()+"_"+lsMap.get("xlBm").toString();
  1097 +// }else{
  1098 +// xlbm_=lsMap.get("xlBm").toString();
  1099 +// }
  1100 + if (xlbm_.equals(xlbm)) {
  1101 + if(hjMap.get("xlBm")==null){
  1102 + hjMap.put("xlBm", lsMap.get("xlBm"));
  1103 + hjMap.put("xlName", lsMap.get("xlName"));
  1104 + hjMap.put("fgsName", lsMap.get("fgsName"));
  1105 + try {
  1106 + if(lsMap.get("xlBm").toString().equals("hj")){
  1107 + hjMap.put("xlNamePy", "zzzzz");
  1108 + }else{
  1109 + hjMap.put("xlNamePy", PinyinHelper.convertToPinyinString(lsMap.get("fgsBm").toString()+lsMap.get("xlName").toString(), "", PinyinFormat.WITHOUT_TONE));
  1110 + }
  1111 + } catch (PinyinException e) {
  1112 + // TODO Auto-generated catch block
  1113 + e.printStackTrace();
  1114 + }
  1115 + }
  1116 + hjMap.put("jhzlc", Arith.add(lsMap.get("jhzlc"), hjMap.get("jhzlc")==null?"0":hjMap.get("jhzlc")));
  1117 + hjMap.put("jhlc", Arith.add(lsMap.get("jhlc"), hjMap.get("jhlc")==null?"0":hjMap.get("jhlc")));
  1118 + hjMap.put("jcclc",Arith.add(lsMap.get("jcclc"), hjMap.get("jcclc")==null?"0":hjMap.get("jcclc")));
  1119 + hjMap.put("sjzgl",Arith.add(lsMap.get("sjzgl"), hjMap.get("sjzgl")==null?"0": hjMap.get("sjzgl")));
  1120 + hjMap.put("sjgl", Arith.add(lsMap.get("sjgl"), hjMap.get("sjgl")==null?"0":hjMap.get("sjgl")));
  1121 + hjMap.put("sjksgl", Arith.add(lsMap.get("sjksgl"), hjMap.get("sjksgl")==null?"0":hjMap.get("sjksgl")));
  1122 + hjMap.put("ssgl", Arith.add(lsMap.get("ssgl"), hjMap.get("ssgl")==null?"0":hjMap.get("ssgl")));
  1123 + hjMap.put("ssbc", Integer.parseInt(lsMap.get("ssbc").toString())+Integer.parseInt(hjMap.get("ssbc")==null?"0":hjMap.get("ssbc").toString()));
  1124 + hjMap.put("ssgl_lz", Arith.add(lsMap.get("ssgl_lz"), hjMap.get("ssgl_lz")==null?"0":hjMap.get("ssgl_lz")));
  1125 + hjMap.put("ssgl_dm", Arith.add(lsMap.get("ssgl_dm"), hjMap.get("ssgl_dm")==null?"0":hjMap.get("ssgl_dm")));
  1126 + hjMap.put("ssgl_gz", Arith.add(lsMap.get("ssgl_gz"), hjMap.get("ssgl_gz")==null?"0":hjMap.get("ssgl_gz")));
  1127 + hjMap.put("ssgl_jf", Arith.add(lsMap.get("ssgl_jf"), hjMap.get("ssgl_jf")==null?"0":hjMap.get("ssgl_jf")));
  1128 + hjMap.put("ssgl_zs", Arith.add(lsMap.get("ssgl_zs"), hjMap.get("ssgl_zs")==null?"0":hjMap.get("ssgl_zs")));
  1129 + hjMap.put("ssgl_qr", Arith.add(lsMap.get("ssgl_qr"), hjMap.get("ssgl_qr")==null?"0":hjMap.get("ssgl_qr")));
  1130 + hjMap.put("ssgl_qc", Arith.add(lsMap.get("ssgl_qc"), hjMap.get("ssgl_qc")==null?"0":hjMap.get("ssgl_qc")));
  1131 + hjMap.put("ssgl_kx", Arith.add(lsMap.get("ssgl_kx"), hjMap.get("ssgl_kx")==null?"0":hjMap.get("ssgl_kx")));
  1132 + hjMap.put("ssgl_qh", Arith.add(lsMap.get("ssgl_qh"), hjMap.get("ssgl_qh")==null?"0":hjMap.get("ssgl_qh")));
  1133 + hjMap.put("ssgl_yw", Arith.add(lsMap.get("ssgl_yw"), hjMap.get("ssgl_yw")==null?"0":hjMap.get("ssgl_yw")));
  1134 + hjMap.put("ssgl_other", Arith.add(lsMap.get("ssgl_other"), hjMap.get("ssgl_other")==null?"0":hjMap.get("ssgl_other")));
  1135 + hjMap.put("ljgl", Arith.add(lsMap.get("ljgl"), hjMap.get("ljgl")==null?"0":hjMap.get("ljgl")));
  1136 + hjMap.put("ljks", Arith.add(lsMap.get("ljks"), hjMap.get("ljks")==null?"0":hjMap.get("ljks")));
  1137 + hjMap.put("jhbc", Integer.parseInt(lsMap.get("jhbc").toString())+ Integer.parseInt(hjMap.get("jhbc")==null?"0":hjMap.get("jhbc").toString()));
  1138 + hjMap.put("jhbc_m", Integer.parseInt(lsMap.get("jhbc_m").toString())+Integer.parseInt(hjMap.get("jhbc_m")==null?"0":hjMap.get("jhbc_m").toString()));
  1139 + hjMap.put("jhbc_a", Integer.parseInt(lsMap.get("jhbc_a").toString())+ Integer.parseInt(hjMap.get("jhbc_a")==null?"0":hjMap.get("jhbc_a").toString()));
  1140 + hjMap.put("sjbc", Integer.parseInt(lsMap.get("sjbc").toString())+ Integer.parseInt(hjMap.get("sjbc")==null?"0":hjMap.get("sjbc").toString()));
  1141 + hjMap.put("sjbc_m",Integer.parseInt(lsMap.get("sjbc_m").toString())+ Integer.parseInt(hjMap.get("sjbc_m")==null?"0":hjMap.get("sjbc_m").toString()));
  1142 + hjMap.put("sjbc_a", Integer.parseInt(lsMap.get("sjbc_a").toString())+ Integer.parseInt(hjMap.get("sjbc_a")==null?"0":hjMap.get("sjbc_a").toString()));
  1143 + hjMap.put("ljbc", Integer.parseInt(lsMap.get("ljbc").toString())+ Integer.parseInt(hjMap.get("ljbc")==null?"0":hjMap.get("ljbc").toString()));
  1144 + hjMap.put("ljbc_m", Integer.parseInt(lsMap.get("ljbc_m").toString())+ Integer.parseInt(hjMap.get("ljbc_m")==null?"0":hjMap.get("ljbc_m").toString()));
  1145 + hjMap.put("ljbc_a", Integer.parseInt(lsMap.get("ljbc_a").toString())+Integer.parseInt(hjMap.get("ljbc_a")==null?"0":hjMap.get("ljbc_a").toString()));
  1146 + hjMap.put("fzbc", Integer.parseInt(lsMap.get("fzbc").toString())+ Integer.parseInt(hjMap.get("fzbc")==null?"0":hjMap.get("fzbc").toString()));
  1147 + hjMap.put("fzbc_m",Integer.parseInt(lsMap.get("fzbc_m").toString())+ Integer.parseInt(hjMap.get("fzbc_m")==null?"0":hjMap.get("fzbc_m").toString()));
  1148 + hjMap.put("fzbc_a",Integer.parseInt(lsMap.get("fzbc_a").toString())+ Integer.parseInt(hjMap.get("fzbc_a")==null?"0":hjMap.get("fzbc_a").toString()));
  1149 + hjMap.put("dtbc", Integer.parseInt(lsMap.get("dtbc").toString())+ Integer.parseInt(hjMap.get("dtbc")==null?"0":hjMap.get("dtbc").toString()));
  1150 + hjMap.put("dtbc_m", Integer.parseInt(lsMap.get("dtbc_m").toString())+ Integer.parseInt(hjMap.get("dtbc_m")==null?"0":hjMap.get("dtbc_m").toString()));
  1151 + hjMap.put("dtbc_a", Integer.parseInt(lsMap.get("dtbc_a").toString())+ Integer.parseInt(hjMap.get("dtbc_a")==null?"0":hjMap.get("dtbc_a").toString()));
  1152 + hjMap.put("djg", Integer.parseInt(lsMap.get("djg").toString())+ Integer.parseInt(hjMap.get("djg")==null?"0":hjMap.get("djg").toString()));
  1153 + hjMap.put("djg_m", Integer.parseInt(lsMap.get("djg_m").toString())+ Integer.parseInt(hjMap.get("djg_m")==null?"0":hjMap.get("djg_m").toString()));
  1154 + hjMap.put("djg_a", Integer.parseInt(lsMap.get("djg_a").toString())+ Integer.parseInt(hjMap.get("djg_a")==null?"0":hjMap.get("djg_a").toString()));
  1155 + if(hjMap.get("djg_time")==null){
  1156 + hjMap.put("djg_time", lsMap.get("djg_time"));
  1157 + }else{
  1158 + if(Arith.add(lsMap.get("djg_time"),0)>Arith.add(hjMap.get("djg_time"), 0)){
  1159 + hjMap.put("djg_time", lsMap.get("djg_time"));
  1160 + }else{
  1161 + hjMap.put("djg_time",hjMap.get("djg_time"));
  1162 + }
  1163 + }
  1164 + double jl = Arith.sub(Arith.add(hjMap.get("jhlc"), hjMap.get("ljgl")), hjMap.get("ssgl"));
  1165 + if (jl == Double.parseDouble(hjMap.get("sjgl").toString())) {
  1166 + hjMap.put("zt", 0);
  1167 + } else {
  1168 + hjMap.put("zt", 1);
  1169 + }
  1170 + }
  1171 + }
  1172 + mapListHj.add(hjMap);
  1173 + }
  1174 +
  1175 + Collections.sort(mapListHj, new AccountXlbmByping());
  1176 +
  1177 + /*if(!line.equals("")){
  1178 + for (int i = 0; i < mapListHj.size(); i++) {
  1179 + if(mapListHj.get(i).get("xlBm").equals(line)){
  1180 + List<Line> l=lineRepository.findLineByCode(line);
  1181 + if(l.size()>0)
  1182 + mapListHj.get(i).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
  1183 + }
  1184 + }
  1185 + }*/
  1186 + if (type != null && type.length() != 0 && type.equals("export")) {
  1187 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1188 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1189 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1190 + Map<String, Object> m = new HashMap<String, Object>();
  1191 + m.put("date", date+"至"+date2);
  1192 + ReportUtils ee = new ReportUtils();
  1193 + try {
  1194 + String dateTime = "";
  1195 + if(date.equals(date2)){
  1196 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  1197 + } else {
  1198 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  1199 + +"-"+sdfSimple.format(sdfMonth.parse(date2));
  1200 + }
  1201 + listI.add(mapListHj.iterator());
  1202 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1203 + ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",
  1204 + path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
  1205 + } catch (Exception e) {
  1206 + // TODO: handle exception
  1207 + //e.printStackTrace();
  1208 + logger.info("" , e);
  1209 + }
  1210 + }
  1211 +
  1212 + return mapListHj;
  1213 + }
  1214 +
  1215 + public CalcStatistics addStatistics(CalcStatistics s, CalcStatistics s_){
  1216 + s.setJhzlc(Arith.add(s.getJhzlc()!=null?s.getJhzlc():0, s_.getJhzlc()));
  1217 + s.setJhyylc(Arith.add(s.getJhyylc()!=null?s.getJhyylc():0, s_.getJhyylc()));
  1218 + s.setJhkslc(Arith.add(s.getJhkslc()!=null?s.getJhkslc():0, s_.getJhkslc()));
  1219 + s.setSjzlc(Arith.add(s.getSjzlc()!=null?s.getSjzlc():0, s_.getSjzlc()));
  1220 + s.setSjyylc(Arith.add(s.getSjyylc()!=null?s.getSjyylc():0, s_.getSjyylc()));
  1221 + s.setSjkslc(Arith.add(s.getSjkslc()!=null?s.getSjkslc():0, s_.getSjkslc()));
  1222 + s.setSslc(Arith.add(s.getSslc()!=null?s.getSslc():0, s_.getSslc()));
  1223 + s.setSsbc(s.getSsbc() + s_.getSsbc());
  1224 + s.setLzlc(Arith.add(s.getLzlc()!=null?s.getLzlc():0, s_.getLzlc()));
  1225 + s.setDmlc(Arith.add(s.getDmlc()!=null?s.getDmlc():0, s_.getDmlc()));
  1226 + s.setGzlc(Arith.add(s.getGzlc()!=null?s.getGzlc():0, s_.getGzlc()));
  1227 + s.setJflc(Arith.add(s.getJflc()!=null?s.getJflc():0, s_.getJflc()));
  1228 + s.setZslc(Arith.add(s.getZslc()!=null?s.getZslc():0, s_.getZslc()));
  1229 + s.setQrlc(Arith.add(s.getQrlc()!=null?s.getQrlc():0, s_.getQrlc()));
  1230 + s.setQclc(Arith.add(s.getQclc()!=null?s.getQclc():0, s_.getQclc()));
  1231 + s.setKxlc(Arith.add(s.getKxlc()!=null?s.getKxlc():0, s_.getKxlc()));
  1232 + s.setQhlc(Arith.add(s.getQhlc()!=null?s.getQhlc():0, s_.getQhlc()));
  1233 + s.setYwlc(Arith.add(s.getYwlc()!=null?s.getYwlc():0, s_.getYwlc()));
  1234 + s.setQtlc(Arith.add(s.getQtlc()!=null?s.getQtlc():0, s_.getQtlc()));
  1235 + s.setLjlc(Arith.add(s.getLjlc()!=null?s.getLjlc():0, s_.getLjlc()));
  1236 + if(s_.getLjkslc() == null){
  1237 + s_.setLjkslc(0d);
  1238 + }
  1239 + s.setLjkslc(Arith.add(s.getLjkslc()!=null?s.getLjkslc():0, s_.getLjkslc()));
  1240 + s.setJhbcq(s.getJhbcq() + s_.getJhbcq());
  1241 + s.setJhbcz(s.getJhbcz() + s_.getJhbcz());
  1242 + s.setJhbcw(s.getJhbcw() + s_.getJhbcw());
  1243 + s.setSjbcq(s.getSjbcq() + s_.getSjbcq());
  1244 + s.setSjbcz(s.getSjbcz() + s_.getSjbcz());
  1245 + s.setSjbcw(s.getSjbcw() + s_.getSjbcw());
  1246 + s.setLjbcq(s.getLjbcq() + s_.getLjbcq());
  1247 + s.setLjbcz(s.getLjbcz() + s_.getLjbcz());
  1248 + s.setLjbcw(s.getLjbcw() + s_.getLjbcw());
  1249 + s.setFzbcq(s.getFzbcq() + s_.getFzbcq());
  1250 + s.setFzbcz(s.getFzbcz() + s_.getFzbcz());
  1251 + s.setFzbcw(s.getFzbcw() + s_.getFzbcw());
  1252 + s.setDtbcq(s.getDtbcq() + s_.getDtbcq());
  1253 + s.setDtbcz(s.getDtbcz() + s_.getDtbcz());
  1254 + s.setDtbcw(s.getDtbcw() + s_.getDtbcw());
  1255 + s.setDjgq(s.getDjgq() + s_.getDjgq());
  1256 + s.setDjgz(s.getDjgz() + s_.getDjgz());
  1257 + s.setDjgw(s.getDjgw() + s_.getDjgw());
  1258 + s.setDjgsj(s.getDjgsj()>s_.getDjgsj()?s.getDjgsj():s_.getDjgsj());
  1259 + return s;
  1260 + }
  1261 +
  1262 + @Transactional
  1263 + @Override
  1264 + public Map<String, Object> calcLineMileage(String date, String line) {
  1265 + Map<String, Object> resMap = new HashMap<String, Object>();
  1266 +
  1267 + if(date.length() == 0){
  1268 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1269 + Date d = new Date();
  1270 + d.setTime(d.getTime() - 4 * 1000 * 60 * 60 * 24);
  1271 + date = sdf.format(d);
  1272 + }
  1273 +
  1274 + resMap.put("date", date);
  1275 + resMap.put("line", line);
  1276 + if(date == null || date.trim().length() == 0){
  1277 + resMap.put("status", ResponseCode.ERROR);
  1278 + resMap.put("remark", "日期不正确或为空");
  1279 + return resMap;
  1280 + } else {
  1281 + date = date.trim();
  1282 + }
  1283 + if(line == null){
  1284 + line = "";
  1285 + } else {
  1286 + line = line.trim();
  1287 + }
  1288 +
  1289 + Map<String, Object> map = new HashMap<String, Object>();
  1290 + List<CalcLineMileage> list = new ArrayList<CalcLineMileage>();
  1291 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1292 + Date dateTime = new Date();
  1293 +
  1294 + try {
  1295 +
  1296 + String gsSql="select gs_bm, fgs_bm from bsth_c_s_sp_info_real where schedule_date_str = '"+date+"'";
  1297 + if(line.trim().length() > 0)
  1298 + gsSql += " and xl_bm = '"+line+"'";
  1299 + gsSql += " group by gs_bm, fgs_bm";
  1300 + List<Map<String, String>> gsList=jdbcTemplate.query(gsSql, new RowMapper<Map<String, String>>() {
  1301 + @Override
  1302 + public Map<String, String> mapRow(ResultSet arg0, int arg1) throws SQLException {
  1303 + Map<String, String> m = new HashMap<String, String>();
  1304 + m.put("gsdm", arg0.getString("gs_bm"));
  1305 + m.put("fgsdm", arg0.getString("fgs_bm"));
  1306 + return m;
  1307 + }});
  1308 +
  1309 + map.put("date", date);
  1310 + map.put("date2", date);
  1311 + for(Map<String, String> tempMap : gsList){
  1312 + map.put("gsdm", tempMap.get("gsdm").toString());
  1313 + map.put("fgsdm", tempMap.get("fgsdm").toString());
  1314 + List<Map<String, Object>> countByList = reportService.countByList(map);
  1315 + for(Map<String, Object> m : countByList){
  1316 + if(!m.containsKey("xlName") || m.get("xlName")==null
  1317 + || m.get("xlName").toString().equals("合计"))
  1318 + continue;
  1319 + CalcLineMileage c = new CalcLineMileage();
  1320 + c.setDate(sdf.parse(date));
  1321 + c.setDateStr(date);
  1322 + c.setGsdm(map.get("gsdm").toString());
  1323 + c.setGsName(m.get("gs").toString());
  1324 + c.setFgsdm(map.get("fgsdm").toString());
  1325 + c.setFgsName(m.get("fgs").toString());
  1326 + c.setXl(m.get("line").toString());
  1327 + c.setXlName(m.get("xlName").toString());
  1328 + c.setJhzlc(Double.valueOf(m.get("jhzlc").toString()));
  1329 + c.setJhlc(Double.valueOf(m.get("jhlc").toString()));
  1330 + c.setJcclc(Double.valueOf(m.get("jcclc").toString()));
  1331 + c.setSjzgl(Double.valueOf(m.get("sjzgl").toString()));
  1332 + c.setJhnlc(Double.valueOf(m.get("jhnlc").toString()));
  1333 + c.setJhwlc(Double.valueOf(m.get("jhwlc").toString()));
  1334 + c.setJhnjcclc(Double.valueOf(m.get("jhnjcclc").toString()));
  1335 + c.setJhwjcclc(Double.valueOf(m.get("jhwjcclc").toString()));
  1336 + c.setJhwjcclcz(Double.valueOf(m.get("jhwjcclc_z").toString()));
  1337 + c.setZrwjcclc(Double.valueOf(m.get("zrwjcclc").toString()));
  1338 + c.setZrwjcclc1(Double.valueOf(m.get("zrwjcclc1").toString()));
  1339 + c.setZrwjcclc2(Double.valueOf(m.get("zrwjcclc2").toString()));
  1340 + c.setZrwjcclcqt(Double.valueOf(m.get("zrwjcclcqt").toString()));
  1341 + c.setKfks(Double.valueOf(m.get("kfks").toString()));
  1342 + c.setLbss(Double.valueOf(m.get("lbss").toString()));
  1343 + c.setSsglLz(Double.valueOf(m.get("ssgl_lz").toString()));
  1344 + c.setSsglDm(Double.valueOf(m.get("ssgl_dm").toString()));
  1345 + c.setSsglGz(Double.valueOf(m.get("ssgl_gz").toString()));
  1346 + c.setSsglJf(Double.valueOf(m.get("ssgl_jf").toString()));
  1347 + c.setSsglZs(Double.valueOf(m.get("ssgl_zs").toString()));
  1348 + c.setSsglQr(Double.valueOf(m.get("ssgl_qr").toString()));
  1349 + c.setSsglQc(Double.valueOf(m.get("ssgl_qc").toString()));
  1350 + c.setSsglKx(Double.valueOf(m.get("ssgl_kx").toString()));
  1351 + c.setSsglQh(Double.valueOf(m.get("ssgl_qh").toString()));
  1352 + c.setSsglYw(Double.valueOf(m.get("ssgl_yw").toString()));
  1353 + c.setSsglOther(Double.valueOf(m.get("ssgl_other").toString()));
  1354 + c.setLjyy(Double.valueOf(m.get("ljyy").toString()));
  1355 + c.setLjjcc(Double.valueOf(m.get("ljjcc").toString()));
  1356 + c.setLjkfks(Double.valueOf(m.get("ljkfks").toString()));
  1357 + c.setCreateDate(dateTime);
  1358 + list.add(c);
  1359 + }
  1360 + }
  1361 +
  1362 + if(line.length() > 0){
  1363 + calcLineMileageRepository.deleteByDateAndLine(date, line);
  1364 + } else {
  1365 + calcLineMileageRepository.deleteByDate(date);
  1366 + }
  1367 + calcLineMileageRepository.saveAll(list);
  1368 +
  1369 + resMap.put("status", ResponseCode.SUCCESS);
  1370 + } catch (Exception e) {
  1371 + // TODO: handle exception
  1372 + resMap.put("status", ResponseCode.ERROR);
  1373 + logger.error("save erro.", e);
  1374 + e.printStackTrace();
  1375 + }
  1376 + return resMap;
  1377 + }
  1378 +
  1379 + @Transactional
  1380 + @Override
  1381 + public Map<String, Object> calcBusMileage(String date, String line) {
  1382 + Map<String, Object> resMap = new HashMap<String, Object>();
  1383 +
  1384 + if(date.length() == 0){
  1385 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1386 + Date d = new Date();
  1387 + d.setTime(d.getTime() - 4 * 1000 * 60 * 60 * 24);
  1388 + date = sdf.format(d);
  1389 + }
  1390 +
  1391 + resMap.put("date", date);
  1392 + resMap.put("line", line);
  1393 + if(date == null || date.trim().length() == 0){
  1394 + resMap.put("status", ResponseCode.ERROR);
  1395 + resMap.put("remark", "日期不正确或为空");
  1396 + return resMap;
  1397 + } else {
  1398 + date = date.trim();
  1399 + }
  1400 + if(line == null){
  1401 + line = "";
  1402 + } else {
  1403 + line = line.trim();
  1404 + }
  1405 +
  1406 + Map<String, Object> map = new HashMap<String, Object>();
  1407 + Map<String, Object> xlmap = new HashMap<String, Object>();
  1408 + List<CalcBusMileage> list = new ArrayList<CalcBusMileage>();
  1409 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1410 + Date dateTime = new Date();
  1411 +
  1412 + try {
  1413 +
  1414 + String gsSql="select gs_bm, max(gs_name) gs_name, fgs_bm from bsth_c_s_sp_info_real"
  1415 + + " where schedule_date_str = '"+date+"'";
  1416 + if(line.trim().length() > 0)
  1417 + gsSql += " and xl_bm = '"+line+"'";
  1418 + gsSql += " group by gs_bm, fgs_bm";
  1419 + List<Map<String, String>> gsList=jdbcTemplate.query(gsSql, new RowMapper<Map<String, String>>() {
  1420 + @Override
  1421 + public Map<String, String> mapRow(ResultSet arg0, int arg1) throws SQLException {
  1422 + Map<String, String> m = new HashMap<String, String>();
  1423 + m.put("gsdm", arg0.getString("gs_bm"));
  1424 + m.put("gsName", arg0.getString("gs_name"));
  1425 + m.put("fgsdm", arg0.getString("fgs_bm"));
  1426 + return m;
  1427 + }});
  1428 +
  1429 + List<Line> xlList = lineRepository.findAllService();
  1430 + for(Line l : xlList){
  1431 + xlmap.put(l.getName(), l.getLineCode());
  1432 + }
  1433 +
  1434 + map.put("date", date);
  1435 + map.put("date2", date);
  1436 + map.put("zs", "js");
  1437 + for(Map<String, String> tempMap : gsList){
  1438 + map.put("gsdm", tempMap.get("gsdm").toString());
  1439 + map.put("fgsdm", tempMap.get("fgsdm").toString());
  1440 + List<Map<String, Object>> countByList = reportService.countByBusList(map);
  1441 + for(Map<String, Object> m : countByList){
  1442 + if(!m.containsKey("xlName") || m.get("xlName")==null
  1443 + || m.get("xlName").toString().equals("合计"))
  1444 + continue;
  1445 + CalcBusMileage c = new CalcBusMileage();
  1446 + c.setDate(sdf.parse(date));
  1447 + c.setDateStr(date);
  1448 + c.setGsdm(map.get("gsdm").toString());
  1449 + c.setGsName(tempMap.get("gsName").toString());
  1450 + c.setFgsdm(map.get("fgsdm").toString());
  1451 + c.setFgsName(m.get("fgs").toString());
  1452 + c.setXl(xlmap.get(m.get("xlName").toString()).toString());
  1453 + c.setXlName(m.get("xlName").toString());
  1454 + c.setNbbm(m.get("nbbm").toString());
  1455 + c.setjGh(m.get("jGh").toString());
  1456 + c.setjName(m.get("jName").toString());
  1457 + c.setsGh(m.get("sGh").toString());
  1458 + c.setsName(m.get("sName").toString());
  1459 + c.setZlc(Double.valueOf(m.get("zlc").toString()));
  1460 + c.setJhnlc(Double.valueOf(m.get("jhnlc").toString()));
  1461 + c.setJhwlc(Double.valueOf(m.get("jhwlc").toString()));
  1462 + c.setJhnjcclc(Double.valueOf(m.get("jhnjcclc").toString()));
  1463 + c.setJhwjcclc(Double.valueOf(m.get("jhwjcclc").toString()));
  1464 + c.setJhwjcclcz(Double.valueOf(m.get("jhwjcclc_z").toString()));
  1465 + c.setKfks(Double.valueOf(m.get("kfks").toString()));
  1466 + c.setZrwjcclc(Double.valueOf(m.get("zrwjcclc").toString()));
  1467 + c.setZrwjcclc1(Double.valueOf(m.get("zrwjcclc1").toString()));
  1468 + c.setZrwjcclc2(Double.valueOf(m.get("zrwjcclc2").toString()));
  1469 + c.setZrwjcclcqt(Double.valueOf(m.get("zrwjcclcqt").toString()));
  1470 + c.setLjyy(Double.valueOf(m.get("ljyy").toString()));
  1471 + c.setLjjcc(Double.valueOf(m.get("ljjcc").toString()));
  1472 + if(m.containsKey("ljkfks") && m.get("ljkfks") != null){
  1473 + c.setLjkfks(Double.valueOf(m.get("ljkfks").toString()));
  1474 + } else {
  1475 + c.setLjkfks(0d);
  1476 + }
  1477 + c.setDhl(Double.valueOf(m.get("dhl").toString()));
  1478 + c.setCdl(Double.valueOf(m.get("cdl").toString()));
  1479 + c.setYhl(Double.valueOf(m.get("yhl").toString()));
  1480 + c.setJzl(Double.valueOf(m.get("jzl").toString()));
  1481 + c.setHyl(Double.valueOf(m.get("hyl").toString()));
  1482 + c.setJhzlc(Double.valueOf(m.get("jhzlc").toString()));
  1483 + c.setCreateDate(dateTime);
  1484 + list.add(c);
  1485 + }
  1486 + }
  1487 +
  1488 + if(line.length() > 0){
  1489 + calcBusMileageRepository.deleteByDateAndLine(date, line);
  1490 + } else {
  1491 + calcBusMileageRepository.deleteByDate(date);
  1492 + }
  1493 + calcBusMileageRepository.saveAll(list);
  1494 +
  1495 + resMap.put("status", ResponseCode.SUCCESS);
  1496 + } catch (Exception e) {
  1497 + // TODO: handle exception
  1498 + resMap.put("status", ResponseCode.ERROR);
  1499 + logger.error("save erro.", e);
  1500 + e.printStackTrace();
  1501 + }
  1502 + return resMap;
  1503 + }
  1504 +
  1505 + @Override
  1506 + public List<Map<String, Object>> getLineMileage(String gsdm, String fgsdm, String line,
  1507 + String date, String date2, String xlName, String zt, String by, String type) {
  1508 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  1509 + List<CalcLineMileage> resList = new ArrayList<CalcLineMileage>();
  1510 + List<CalcLineMileage> list = new ArrayList<CalcLineMileage>();
  1511 + List<CalcLineMileage> calcs = new ArrayList<CalcLineMileage>();
  1512 + List<String> keyList = new ArrayList<String>();
  1513 + Map<String, List<CalcLineMileage>> keyMap = new HashMap<String, List<CalcLineMileage>>();
  1514 +
  1515 + if(line == null || line.trim().length() == 0){
  1516 + list = calcLineMileageRepository.selectByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  1517 + } else {
  1518 + list = calcLineMileageRepository.selectByDateAndLineTj2(line, date, date2);
  1519 + }
  1520 +
  1521 + for(CalcLineMileage c : list){
  1522 + String key = c.getXlName();
  1523 + if(!keyMap.containsKey(key)){
  1524 + keyMap.put(key, new ArrayList<CalcLineMileage>());
  1525 + keyList.add(key);
  1526 + }
  1527 + keyMap.get(key).add(c);
  1528 + }
  1529 +
  1530 + for(String key : keyList){
  1531 + CalcLineMileage c1 = keyMap.get(key).get(0);
  1532 + for(int i = 1; i < keyMap.get(key).size(); i++){
  1533 + CalcLineMileage c2 = keyMap.get(key).get(i);
  1534 + c1 = addLineMileage(c1, c2);
  1535 + }
  1536 + calcs.add(c1);
  1537 + }
  1538 +
  1539 + CalcLineMileage temp = new CalcLineMileage();
  1540 + temp.setXlName("合计");
  1541 + for(CalcLineMileage c : calcs){
  1542 + temp = addLineMileage(temp, c);
  1543 + resList.add(c);
  1544 + }
  1545 + if(resList.size() > 0)
  1546 + resList.add(temp);
  1547 +
  1548 + for(CalcLineMileage c : resList){
  1549 + Map<String, Object> m = new HashMap<String, Object>();
  1550 + if(c.getXlName().equals("合计")){
  1551 + m.put("gsdm", "");
  1552 + m.put("gs", "");
  1553 + m.put("fgsdm", "");
  1554 + m.put("fgs", "");
  1555 + } else {
  1556 + m.put("gsdm", c.getGsdm());
  1557 + m.put("gs", c.getGsName());
  1558 + m.put("fgsdm", c.getFgsdm());
  1559 + m.put("fgs", c.getFgsName());
  1560 + }
  1561 + m.put("xlName", c.getXlName());
  1562 + m.put("jhzlc", c.getJhzlc());
  1563 + m.put("jhlc", c.getJhlc());
  1564 + m.put("jcclc", c.getJcclc());
  1565 + m.put("sjzgl", c.getSjzgl());
  1566 + m.put("jhnlc", c.getJhnlc());
  1567 + m.put("jhwlc", c.getJhwlc());
  1568 + m.put("jhnjcclc", c.getJhnjcclc());
  1569 + m.put("jhwjcclc", c.getJhwjcclc());
  1570 + m.put("jhwjcclc_z", c.getJhwjcclcz());
  1571 + m.put("zrwjcclc", c.getZrwjcclc());
  1572 + m.put("zrwjcclc1", c.getZrwjcclc1());
  1573 + m.put("zrwjcclc2", c.getZrwjcclc2());
  1574 + m.put("zrwjcclcqt", c.getZrwjcclcqt());
  1575 + m.put("kfks", c.getKfks());
  1576 + m.put("lbss", c.getLbss());
  1577 + m.put("ssgl_lz", c.getSsglLz());
  1578 + m.put("ssgl_dm", c.getSsglDm());
  1579 + m.put("ssgl_gz", c.getSsglGz());
  1580 + m.put("ssgl_jf", c.getSsglJf());
  1581 + m.put("ssgl_zs", c.getSsglZs());
  1582 + m.put("ssgl_qr", c.getSsglQr());
  1583 + m.put("ssgl_qc", c.getSsglQc());
  1584 + m.put("ssgl_kx", c.getSsglKx());
  1585 + m.put("ssgl_qh", c.getSsglQh());
  1586 + m.put("ssgl_yw", c.getSsglYw());
  1587 + m.put("ssgl_other", c.getSsglOther());
  1588 + m.put("ljyy", c.getLjyy());
  1589 + m.put("ljjcc", c.getLjjcc());
  1590 + m.put("ljkfks", c.getLjkfks());
  1591 + lMap.add(m);
  1592 + }
  1593 +
  1594 + if(type.equals("export")){
  1595 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1596 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1597 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1598 + Map<String, Object> m = new HashMap<String, Object>();
  1599 + m.put("date", date);
  1600 + m.put("date1", date2);
  1601 +// String by=map.get("by").toString();
  1602 + String xls="";
  1603 + if(by.equals("sj")){
  1604 + xls="countByLine.xls";
  1605 + }else{
  1606 + xls="countByLines.xls";
  1607 + }
  1608 + ReportUtils ee = new ReportUtils();
  1609 + try {
  1610 + String dateTime = "";
  1611 + if(date.equals(date2)){
  1612 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  1613 + } else {
  1614 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  1615 + +"-"+sdfSimple.format(sdfMonth.parse(date2));
  1616 + }
  1617 + listI.add(lMap.iterator());
  1618 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1619 + ee.excelReplace(listI, new Object[]{m}, path + "mould/"+xls,
  1620 + path + "export/"+dateTime+"-"+xlName+"-线路公里统计表.xls");
  1621 + } catch (Exception e) {
  1622 + // TODO: handle exception
  1623 + e.printStackTrace();
  1624 + }
  1625 + }
  1626 +
  1627 + return lMap;
  1628 + }
  1629 +
  1630 + @Override
  1631 + public List<Map<String, Object>> getBusMileage(String line, String date,
  1632 + String date2, String xlName, String zt, String by, String type) {
  1633 + List<CalcBusMileage> resList = new ArrayList<CalcBusMileage>();
  1634 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  1635 + List<CalcBusMileage> list = calcBusMileageRepository.selectByDateAndLineTj2(line, date, date2);
  1636 +
  1637 + if(zt.equals("zbh")){
  1638 + List<String> keyList = new ArrayList<String>();
  1639 + Map<String, List<CalcBusMileage>> keyMap = new HashMap<>();
  1640 + for(CalcBusMileage c : list){
  1641 + String nbbm = c.getNbbm();
  1642 + if(!keyMap.containsKey(nbbm)){
  1643 + keyMap.put(nbbm, new ArrayList<CalcBusMileage>());
  1644 + keyList.add(nbbm);
  1645 + }
  1646 + keyMap.get(nbbm).add(c);
  1647 + }
  1648 + for(String key : keyList){
  1649 + CalcBusMileage c1 = keyMap.get(key).get(0);
  1650 + for(int i = 1; i < keyMap.get(key).size(); i++){
  1651 + CalcBusMileage c2 = keyMap.get(key).get(i);
  1652 + c1.setZlc(Arith.add(c1.getZlc(), c2.getZlc()));
  1653 + c1.setJhnlc(Arith.add(c1.getJhnlc(), c2.getJhnlc()));
  1654 + c1.setJhwlc(Arith.add(c1.getJhwlc(), c2.getJhwlc()));
  1655 + c1.setJhnjcclc(Arith.add(c1.getJhnjcclc(), c2.getJhnjcclc()));
  1656 + c1.setJhwjcclc(Arith.add(c1.getJhwjcclc(), c2.getJhwjcclc()));
  1657 + c1.setKfks(Arith.add(c1.getKfks(), c2.getKfks()));
  1658 + c1.setZrwjcclc(Arith.add(c1.getZrwjcclc(), c2.getZrwjcclc()));
  1659 + c1.setZrwjcclc1(Arith.add(c1.getZrwjcclc1(), c2.getZrwjcclc1()));
  1660 + c1.setZrwjcclc2(Arith.add(c1.getZrwjcclc2(), c2.getZrwjcclc2()));
  1661 + c1.setZrwjcclcqt(Arith.add(c1.getZrwjcclcqt(), c2.getZrwjcclcqt()));
  1662 + c1.setLjyy(Arith.add(c1.getLjyy(), c2.getLjyy()));
  1663 + c1.setLjjcc(Arith.add(c1.getLjjcc(), c2.getLjjcc()));
  1664 + c1.setLjkfks(Arith.add(c1.getLjkfks(), c2.getLjkfks()));
  1665 + c1.setDhl(Arith.add(c1.getDhl(), c2.getDhl()));
  1666 + c1.setCdl(Arith.add(c1.getCdl(), c2.getCdl()));
  1667 + c1.setYhl(Arith.add(c1.getYhl(), c2.getYhl()));
  1668 + c1.setJzl(Arith.add(c1.getJzl(), c2.getJzl()));
  1669 + c1.setHyl(Arith.add(c1.getHyl(), c2.getHyl()));
  1670 + c1.setJhzlc(Arith.add(c1.getJhzlc(), c2.getJhzlc()));
  1671 + }
  1672 + resList.add(c1);
  1673 + }
  1674 + } else {
  1675 + List<String> keyList = new ArrayList<String>();
  1676 + Map<String, List<CalcBusMileage>> keyMap = new HashMap<>();
  1677 + for(CalcBusMileage c : list){
  1678 + String key = c.getNbbm() + c.getjGh() + c.getjName() + c.getsGh() + c.getsName();
  1679 + if(!keyMap.containsKey(key)){
  1680 + keyMap.put(key, new ArrayList<CalcBusMileage>());
  1681 + keyList.add(key);
  1682 + }
  1683 + keyMap.get(key).add(c);
  1684 + }
  1685 + for(String key : keyList){
  1686 + CalcBusMileage c1 = keyMap.get(key).get(0);
  1687 + for(int i = 1; i < keyMap.get(key).size(); i++){
  1688 + CalcBusMileage c2 = keyMap.get(key).get(i);
  1689 + c1.setZlc(Arith.add(c1.getZlc(), c2.getZlc()));
  1690 + c1.setJhnlc(Arith.add(c1.getJhnlc(), c2.getJhnlc()));
  1691 + c1.setJhwlc(Arith.add(c1.getJhwlc(), c2.getJhwlc()));
  1692 + c1.setJhnjcclc(Arith.add(c1.getJhnjcclc(), c2.getJhnjcclc()));
  1693 + c1.setJhwjcclc(Arith.add(c1.getJhwjcclc(), c2.getJhwjcclc()));
  1694 + c1.setKfks(Arith.add(c1.getKfks(), c2.getKfks()));
  1695 + c1.setZrwjcclc(Arith.add(c1.getZrwjcclc(), c2.getZrwjcclc()));
  1696 + c1.setZrwjcclc1(Arith.add(c1.getZrwjcclc1(), c2.getZrwjcclc1()));
  1697 + c1.setZrwjcclc2(Arith.add(c1.getZrwjcclc2(), c2.getZrwjcclc2()));
  1698 + c1.setZrwjcclcqt(Arith.add(c1.getZrwjcclcqt(), c2.getZrwjcclcqt()));
  1699 + c1.setLjyy(Arith.add(c1.getLjyy(), c2.getLjyy()));
  1700 + c1.setLjjcc(Arith.add(c1.getLjjcc(), c2.getLjjcc()));
  1701 + c1.setLjkfks(Arith.add(c1.getLjkfks(), c2.getLjkfks()));
  1702 + c1.setDhl(Arith.add(c1.getDhl(), c2.getDhl()));
  1703 + c1.setCdl(Arith.add(c1.getCdl(), c2.getCdl()));
  1704 + c1.setYhl(Arith.add(c1.getYhl(), c2.getYhl()));
  1705 + c1.setJzl(Arith.add(c1.getJzl(), c2.getJzl()));
  1706 + c1.setHyl(Arith.add(c1.getHyl(), c2.getHyl()));
  1707 + c1.setJhzlc(Arith.add(c1.getJhzlc(), c2.getJhzlc()));
  1708 + }
  1709 + resList.add(c1);
  1710 + }
  1711 + }
  1712 +
  1713 + for(CalcBusMileage c : resList){
  1714 + Map<String, Object> m = new HashMap<String, Object>();
  1715 + if(date.equals(date2)){
  1716 + m.put("rq", date);
  1717 + } else {
  1718 + m.put("rq", date + "至" + date2);
  1719 + }
  1720 + m.put("fgs", c.getFgsName());
  1721 + m.put("xlName", c.getXlName());
  1722 + m.put("nbbm", c.getNbbm());
  1723 + m.put("jGh", c.getjGh());
  1724 + m.put("jName", c.getjName());
  1725 + m.put("sGh", c.getsGh());
  1726 + m.put("sName", c.getsName());
  1727 + m.put("zlc", c.getZlc());
  1728 + m.put("jhnlc", c.getJhnlc());
  1729 + m.put("jhwlc", c.getJhwlc());
  1730 + m.put("jhnjcclc", c.getJhnjcclc());
  1731 + m.put("jhwjcclc", c.getJhwjcclc());
  1732 + m.put("jhwjcclc_z", c.getJhwjcclcz());
  1733 + m.put("kfks", c.getKfks());
  1734 + m.put("zrwjcclc", c.getZrwjcclc());
  1735 + m.put("zrwjcclc1", c.getZrwjcclc1());
  1736 + m.put("zrwjcclc2", c.getZrwjcclc2());
  1737 + m.put("zrwjcclcqt", c.getZrwjcclcqt());
  1738 + m.put("ljyy", c.getLjyy());
  1739 + m.put("ljjcc", c.getLjjcc());
  1740 + m.put("ljkfks", c.getLjkfks());
  1741 + m.put("dhl", c.getDhl());
  1742 + m.put("cdl", c.getCdl());
  1743 + m.put("yhl", c.getYhl());
  1744 + m.put("jzl", c.getJzl());
  1745 + m.put("hyl", c.getYhl());
  1746 + m.put("jhzlc", c.getJhzlc());
  1747 + lMap.add(m);
  1748 + }
  1749 +
  1750 + if(type.equals("export")){
  1751 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1752 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1753 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1754 + Map<String, Object> m = new HashMap<String, Object>();
  1755 + m.put("date", date);
  1756 + m.put("date1", date2);
  1757 + String xls="";
  1758 +// String by=map.get("by").toString();
  1759 +
  1760 + if(zt.equals("zbh")){
  1761 + if(by.equals("sj")){
  1762 + xls="countByBus1.xls";
  1763 + }else{
  1764 + xls="countByBus1s.xls";
  1765 + }
  1766 + }else{
  1767 +
  1768 + if(by.equals("sj")){
  1769 + xls="countByBus2.xls";
  1770 + }else{
  1771 + xls="countByBus2s.xls";
  1772 + }
  1773 + }
  1774 + ReportUtils ee = new ReportUtils();
  1775 + try {
  1776 + String dateTime = "";
  1777 + if(date.equals(date2)){
  1778 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  1779 + } else {
  1780 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  1781 + +"-"+sdfSimple.format(sdfMonth.parse(date2));
  1782 + }
  1783 + listI.add(lMap.iterator());
  1784 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1785 + ee.excelReplace(listI, new Object[]{m}, path + "mould/"+xls,
  1786 + path + "export/"+dateTime+"-"+xlName+"-路单数据统计表.xls");
  1787 + } catch (Exception e) {
  1788 + // TODO: handle exception
  1789 + e.printStackTrace();
  1790 + }
  1791 + }
  1792 +
  1793 + return lMap;
  1794 + }
  1795 +
  1796 + public CalcLineMileage addLineMileage(CalcLineMileage temp, CalcLineMileage c){
  1797 + temp.setJhzlc(Arith.add(temp.getJhzlc()!=null?temp.getJhzlc():0, c.getJhzlc()));
  1798 + temp.setJhlc(Arith.add(temp.getJhlc()!=null?temp.getJhlc():0, c.getJhlc()));
  1799 + temp.setJcclc(Arith.add(temp.getJcclc()!=null?temp.getJcclc():0, c.getJcclc()));
  1800 + temp.setSjzgl(Arith.add(temp.getSjzgl()!=null?temp.getSjzgl():0, c.getSjzgl()));
  1801 + temp.setJhnlc(Arith.add(temp.getJhnlc()!=null?temp.getJhnlc():0, c.getJhnlc()));
  1802 + temp.setJhwlc(Arith.add(temp.getJhwlc()!=null?temp.getJhwlc():0, c.getJhwlc()));
  1803 + temp.setJhnjcclc(Arith.add(temp.getJhnjcclc()!=null?temp.getJhnjcclc():0, c.getJhnjcclc()));
  1804 + temp.setJhwjcclc(Arith.add(temp.getJhwjcclc()!=null?temp.getJhwjcclc():0, c.getJhwjcclc()));
  1805 + temp.setJhwjcclcz(Arith.add(temp.getJhwjcclcz()!=null?temp.getJhwjcclcz():0, c.getJhwjcclcz()));
  1806 + temp.setZrwjcclc(Arith.add(temp.getZrwjcclc()!=null?temp.getZrwjcclc():0, c.getZrwjcclc()));
  1807 + temp.setZrwjcclc1(Arith.add(temp.getZrwjcclc1()!=null?temp.getZrwjcclc1():0, c.getZrwjcclc1()));
  1808 + temp.setZrwjcclc2(Arith.add(temp.getZrwjcclc2()!=null?temp.getZrwjcclc2():0, c.getZrwjcclc2()));
  1809 + temp.setZrwjcclcqt(Arith.add(temp.getZrwjcclcqt()!=null?temp.getZrwjcclcqt():0, c.getZrwjcclcqt()));
  1810 + temp.setKfks(Arith.add(temp.getKfks()!=null?temp.getKfks():0, c.getKfks()));
  1811 + temp.setLbss(Arith.add(temp.getLbss()!=null?temp.getLbss():0, c.getLbss()));
  1812 + temp.setSsglLz(Arith.add(temp.getSsglLz()!=null?temp.getSsglLz():0, c.getSsglLz()));
  1813 + temp.setSsglDm(Arith.add(temp.getSsglDm()!=null?temp.getSsglDm():0, c.getSsglDm()));
  1814 + temp.setSsglGz(Arith.add(temp.getSsglGz()!=null?temp.getSsglGz():0, c.getSsglGz()));
  1815 + temp.setSsglJf(Arith.add(temp.getSsglJf()!=null?temp.getSsglJf():0, c.getSsglJf()));
  1816 + temp.setSsglZs(Arith.add(temp.getSsglZs()!=null?temp.getSsglZs():0, c.getSsglZs()));
  1817 + temp.setSsglQr(Arith.add(temp.getSsglQr()!=null?temp.getSsglQr():0, c.getSsglQr()));
  1818 + temp.setSsglQc(Arith.add(temp.getSsglQc()!=null?temp.getSsglQc():0, c.getSsglQc()));
  1819 + temp.setSsglKx(Arith.add(temp.getSsglKx()!=null?temp.getSsglKx():0, c.getSsglKx()));
  1820 + temp.setSsglQh(Arith.add(temp.getSsglQh()!=null?temp.getSsglQh():0, c.getSsglQh()));
  1821 + temp.setSsglYw(Arith.add(temp.getSsglYw()!=null?temp.getSsglYw():0, c.getSsglYw()));
  1822 + temp.setSsglOther(Arith.add(temp.getSsglOther()!=null?temp.getSsglOther():0, c.getSsglOther()));
  1823 + temp.setLjyy(Arith.add(temp.getLjyy()!=null?temp.getLjyy():0, c.getLjyy()));
  1824 + temp.setLjjcc(Arith.add(temp.getLjjcc()!=null?temp.getLjjcc():0, c.getLjjcc()));
  1825 + temp.setLjkfks(Arith.add(temp.getLjkfks()!=null?temp.getLjkfks():0, c.getLjkfks()));
  1826 + return temp;
  1827 + }
  1828 +
  1829 + @Override
  1830 + public List<List<String>> calcDetailMonthly(Map<String, Object> map) {
  1831 + List<Integer> destroy= new ArrayList<>();
  1832 + String destroyStr = "";
  1833 + if(map.get("destroy")!=null){
  1834 + destroyStr = map.get("destroy").toString().trim();
  1835 + String[] destroys = destroyStr.split(",");
  1836 + for (int i = 0; i < destroys.length; i++){
  1837 + destroy.add(Integer.parseInt(destroys[i]));
  1838 + }
  1839 + }
  1840 + List<String> gsdm= new ArrayList<>();
  1841 + String gsdmStr = "";
  1842 + if(map.get("gsdm")!=null){
  1843 + gsdmStr = map.get("gsdm").toString().trim();
  1844 + String[] gsdms = gsdmStr.split(",");
  1845 + for (int i = 0; i < gsdms.length; i++){
  1846 + gsdm.add(gsdms[i]);
  1847 + }
  1848 + }
  1849 + List<String> fgsdm= new ArrayList<>();
  1850 + String fgsdmStr = "";
  1851 + if(map.get("fgsdm")!=null){
  1852 + fgsdmStr = map.get("fgsdm").toString().trim();
  1853 + String[] fgsdms = fgsdmStr.split(",");
  1854 + for (int i = 0; i < fgsdms.length; i++){
  1855 + fgsdm.add(fgsdms[i]);
  1856 + }
  1857 + }
  1858 +// String line= null;
  1859 + List<String> line= new ArrayList<>();
  1860 + String lineStr = "";
  1861 + if(map.get("lineCode")!=null){
  1862 + lineStr = map.get("lineCode").toString().trim();
  1863 + String[] lines = lineStr.split(",");
  1864 + for (int i = 0; i < lines.length; i++){
  1865 + line.add(lines[i]);
  1866 + }
  1867 + }
  1868 + String startDate="";
  1869 + if(map.get("startDate")!=null){
  1870 + startDate=map.get("startDate").toString().trim();
  1871 + }
  1872 + String endDate="";
  1873 + if(map.get("endDate")!=null){
  1874 + endDate=map.get("endDate").toString().trim();
  1875 + }
  1876 + String type="";
  1877 + if(map.get("type")!=null){
  1878 + type=map.get("type").toString().trim();
  1879 + }
  1880 + String statisticalObj="";
  1881 + if(map.get("statisticalObj")!=null){
  1882 + statisticalObj=map.get("statisticalObj").toString().trim();
  1883 + }
  1884 + String itemDetails="";
  1885 + if(map.get("itemDetails")!=null){
  1886 + itemDetails=map.get("itemDetails").toString().trim();
  1887 + }
  1888 +// Boolean item=false;
  1889 + /*String item="";
  1890 + if(map.get("item")!=null){
  1891 + if("dh".equals(map.get("item").toString().trim()))
  1892 + item=" where c.sfdc = 1";
  1893 +// item=false;
  1894 + else if ("dh".equals(map.get("item").toString().trim()))
  1895 + item=" where c.sfdc = 0";
  1896 +// item=true;
  1897 + else
  1898 + item="";
  1899 + }*/
  1900 + String timeType=map.get("timeType").toString().trim();
  1901 +
  1902 + List<List<String>> resList = new ArrayList<>();
  1903 + List<CalcWaybill> list = new ArrayList<CalcWaybill>();
  1904 +// List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  1905 + // 右边可变天数
  1906 + TreeMap<String, List<CalcWaybillDetail>> keyMapList = new TreeMap<String, List<CalcWaybillDetail>>();
  1907 + // 左边固定列
  1908 + TreeMap<String, CalcWaybillDetail> keyMap = new TreeMap<String, CalcWaybillDetail>();
  1909 +
  1910 + List<Map<String, CalcWaybillDetail>> dayList = new ArrayList<>();
  1911 + int day = 0, day2 = 0;
  1912 + if("m".equals(timeType)){
  1913 + day = Integer.parseInt(startDate.substring(8,10));
  1914 + day2 = Integer.parseInt(endDate.substring(8,10));
  1915 + for(int i=day; i<=day2; i++){
  1916 + Map<String, CalcWaybillDetail> daym = new HashMap<>();
  1917 + daym.put(startDate.substring(0,7)+"-"+(i<10?"0"+i:i),this.initCalcWaybillDetail());
  1918 + dayList.add(daym);
  1919 + }
  1920 + } else if("y".equals(timeType)){
  1921 + day = Integer.parseInt(startDate.substring(5,7));
  1922 + day2 = Integer.parseInt(endDate.substring(5,7));
  1923 + for(int i=day; i<=day2; i++){
  1924 + Map<String, CalcWaybillDetail> daym = new HashMap<>();
  1925 + daym.put(startDate.substring(0,5)+(i<10?"0"+i:i),this.initCalcWaybillDetail());
  1926 + dayList.add(daym);
  1927 + }
  1928 + startDate += "-01";
  1929 + endDate += "-31";
  1930 + }
  1931 +
  1932 + int flag = 0;
  1933 + if("jsy".equals(statisticalObj)){
  1934 + flag = 1;
  1935 + list = calcRepository.scheduleByJsy2(line, startDate, endDate, gsdm, fgsdm, destroy);
  1936 + } else if("cwy".equals(statisticalObj)){
  1937 + flag = 2;
  1938 + list = calcRepository.scheduleBySpy2(line, startDate, endDate, gsdm, fgsdm, destroy);
  1939 + } else if("cl".equals(statisticalObj)){
  1940 + flag = 3;
  1941 + list = calcRepository.scheduleByZbh2(line, startDate, endDate, gsdm, fgsdm, destroy);
  1942 + } else if("xl".equals(statisticalObj)){
  1943 + flag = 4;
  1944 + list = calcRepository.scheduleByDateAndLineTjPx(line,startDate,endDate,gsdm,fgsdm, destroy);
  1945 + /*if(line.equals("")){
  1946 + //查询所有线路
  1947 + }else{
  1948 + //查询单条线路
  1949 + list = calcRepository.scheduleByDateAndLineTjPx2(line,startDate,endDate);
  1950 + }*/
  1951 + }
  1952 +
  1953 +
  1954 + // List类转换
  1955 + final List<CalcWaybillDetail> listNew = JSONArray.parseArray(JSON.toJSONString(list), CalcWaybillDetail.class);
  1956 +
  1957 + if(listNew.size() <= 0){
  1958 + return resList;
  1959 + }
  1960 + Map<String,Ylb> ylbMap = new HashMap<>();
  1961 + Map<String,Ylb> ylbCLMap = new HashMap<>();
  1962 + Map<String,Dlb> dlbMap = new HashMap<>();
  1963 + Map<String,Dlb> dlbCLMap = new HashMap<>();
  1964 +
  1965 + final SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
  1966 +
  1967 + // 只有在选择 车辆,驾驶员查询时才有
  1968 + // 把油量和电量数据查出来,封装成Map,计算时直接取
  1969 + if(flag != 2 ){
  1970 + String linesql="";
  1971 + if(!lineStr.equals("")){
  1972 + linesql +=" and xlbm in("+lineStr+") ";
  1973 + }
  1974 + if(!gsdmStr.equals("")){
  1975 + linesql +=" and ssgsdm in("+gsdmStr+") ";
  1976 + }
  1977 + if(!fgsdmStr.equals("")){
  1978 + linesql +=" and fgsdm in("+fgsdmStr+") ";
  1979 + }
  1980 + String ylsql="SELECT * FROM bsth_c_ylb"
  1981 +// String ylsql="SELECT id,xlbm,nbbm,jsy,jzl,czyl,jzyl,yh,sh,fgsdm FROM bsth_c_ylb"
  1982 + + " WHERE rq >= '"+startDate+"' and rq <= '"+endDate+"' "
  1983 + + linesql;
  1984 + String dlSal= " SELECT * FROM bsth_c_dlb"
  1985 +// String dlSal= " SELECT id,xlbm,nbbm,jsy,cdl,czcd,jzcd,hd,sh,fgsdm FROM bsth_c_dlb"
  1986 + + " WHERE rq >= '"+startDate+"' and rq <= '"+endDate+"' "
  1987 + + linesql;
  1988 + List<Ylb> ylbList = jdbcTemplate.query(ylsql, new RowMapper<Ylb>() {
  1989 + @Override
  1990 + public Ylb mapRow(ResultSet arg0, int arg1) throws SQLException{
  1991 + Ylb ylb = new Ylb();
  1992 + Date rq = null;
  1993 + try{
  1994 + rq = ft.parse(arg0.getString("rq"));
  1995 + } catch (ParseException e){
  1996 + logger.error(e.toString(),e);
  1997 + }
  1998 +// Date rq = ft.parse(arg0.getString("rq"));
  1999 + ylb.setXlbm(arg0.getString("xlbm"));
  2000 + ylb.setJsy(arg0.getString("jsy"));
  2001 + ylb.setJname(arg0.getString("jname"));
  2002 + ylb.setNbbm(arg0.getString("nbbm"));
  2003 + ylb.setZlc(Double.parseDouble(arg0.getString("zlc")));
  2004 + ylb.setJzl(Double.parseDouble(arg0.getString("jzl")));
  2005 + ylb.setJzyl(Double.parseDouble(arg0.getString("jzyl")));
  2006 + ylb.setCzyl(Double.parseDouble(arg0.getString("czyl")));
  2007 + ylb.setYh(Double.parseDouble(arg0.getString("yh")));
  2008 + ylb.setSh(Double.parseDouble(arg0.getString("sh")));
  2009 + ylb.setRylx(arg0.getString("rylx"));
  2010 + ylb.setFgsdm(arg0.getString("fgsdm"));
  2011 + ylb.setRq(rq);
  2012 + return ylb;
  2013 + }
  2014 + });
  2015 + List<Dlb> dlbList = jdbcTemplate.query(dlSal, new RowMapper<Dlb>() {
  2016 + @Override
  2017 + public Dlb mapRow(ResultSet arg0, int arg1) throws SQLException {
  2018 + Dlb dlb = new Dlb();Date rq = null;
  2019 + try{
  2020 + rq = ft.parse(arg0.getString("rq"));
  2021 + } catch (ParseException e){
  2022 + logger.error(e.toString(),e);
  2023 + }
  2024 + dlb.setXlbm(arg0.getString("xlbm"));
  2025 + dlb.setJsy(arg0.getString("jsy"));
  2026 + dlb.setJname(arg0.getString("jname"));
  2027 + dlb.setNbbm(arg0.getString("nbbm"));
  2028 + dlb.setZlc(Double.parseDouble(arg0.getString("zlc")));
  2029 + dlb.setCdl(Double.parseDouble(arg0.getString("cdl")));
  2030 + dlb.setJzcd(Double.parseDouble(arg0.getString("jzcd")));
  2031 + dlb.setCzcd(Double.parseDouble(arg0.getString("czcd")));
  2032 + dlb.setHd(Double.parseDouble(arg0.getString("hd")));
  2033 + dlb.setSh(Double.parseDouble(arg0.getString("sh")));
  2034 + dlb.setFgsdm(arg0.getString("fgsdm"));
  2035 + dlb.setRq(rq);
  2036 + return dlb;
  2037 + }
  2038 + });
  2039 +
  2040 + for (Ylb y:ylbList) {
  2041 + if(ylbMap.containsKey(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getNbbm())){
  2042 + Ylb yo = ylbMap.get(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getNbbm());
  2043 + yo.setZlc(Arith.add(yo.getZlc(),y.getZlc()));
  2044 + yo.setCzyl(Arith.add(yo.getCzyl(),y.getCzyl()));
  2045 + yo.setJzyl(Arith.add(yo.getJzyl(),y.getJzyl()));
  2046 + yo.setJzl(Arith.add(yo.getJzl(),y.getJzl()));
  2047 + yo.setYh(Arith.add(yo.getYh(),y.getYh()));
  2048 + } else
  2049 + ylbMap.put(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getNbbm(),y);
  2050 +
  2051 +// ylbMap.put(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getJsy()+"_"+y.getJname()+"_"+y.getNbbm(),y);
  2052 +// ylbCLMap.put(y.getRq().getTime()+"_"+y.getXlbm()+"_"+y.getNbbm(),y);
  2053 + }
  2054 + for (Dlb d:dlbList) {
  2055 + if(dlbMap.containsKey(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getNbbm())){
  2056 + Dlb dold = dlbMap.get(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getNbbm());
  2057 + dold.setZlc(Arith.add(dold.getZlc(),d.getZlc()));
  2058 + dold.setHd(Arith.add(dold.getHd(),d.getHd()));
  2059 + dold.setCzcd(Arith.add(dold.getCzcd(),d.getCzcd()));
  2060 + dold.setJzcd(Arith.add(dold.getJzcd(),d.getJzcd()));
  2061 + dold.setCdl(Arith.add(dold.getCdl(),d.getCdl()));
  2062 + dold.setHd(Arith.add(dold.getHd(),d.getHd()));
  2063 + } else
  2064 + dlbMap.put(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getNbbm(),d);
  2065 +// dlbMap.put(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getJsy()+"_"+d.getJname()+"_"+d.getNbbm(),d);
  2066 +// dlbCLMap.put(d.getRq().getTime()+"_"+d.getXlbm()+"_"+d.getNbbm(),d);
  2067 + }
  2068 + }
  2069 +
  2070 + CalcWaybillDetail zjCalc = this.initCalcWaybillDetail();
  2071 + zjCalc.setjName("合计");
  2072 + // 横向数据的第几天下标
  2073 + int dayIndex = 0;
  2074 + int dayIndexPrev = -1;
  2075 + // 报表纵向列数据生成
  2076 + for (int i = 0; listNew.size() > i; i++) {
  2077 + CalcWaybillDetail cw = listNew.get(i);
  2078 +
  2079 + CalcWaybillDetail cwNext = new CalcWaybillDetail();
  2080 + if(i<listNew.size()-1){
  2081 + cwNext = listNew.get(i+1);
  2082 + }
  2083 + String xl = cw.getXl();
  2084 + String jsy = cw.getjGh();
  2085 + String cwy = cw.getsGh();
  2086 + String cl = cw.getCl();
  2087 +
  2088 + Ylb y = new Ylb();
  2089 + Dlb d = new Dlb();
  2090 + // 统计类型不同统计的左边列不同
  2091 + // 赋值油、电量
  2092 + if(flag != 2){
  2093 + // 取了之后删除,防止重复取,应为添加的时候已经合并了
  2094 + y = ylbMap.get(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());
  2095 + ylbMap.remove(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());
  2096 + d = dlbMap.get(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());
  2097 + dlbMap.remove(cw.getRq().getTime()+"_"+cw.getXl()+"_"+cw.getjGh()+"_"+cw.getCl());
  2098 + if(y != null){
  2099 + cw.setZlc(y.getZlc());
  2100 + cw.setYh(y.getYh());
  2101 + cw.setJzl(y.getJzl());
  2102 + if("0".equals(y.getRylx())){
  2103 + cw.setJzl0(y.getJzl());
  2104 + }else if("1".equals(y.getRylx())){
  2105 + cw.setJzl10(y.getJzl());
  2106 + }
  2107 + cw.setJzyl(y.getJzyl());
  2108 + cw.setCzyl(y.getCzyl());
  2109 + cw.setRylx(y.getRylx());
  2110 + cw.setBglyh((y.getZlc()==0? 0:100*y.getYh()/y.getZlc()));
  2111 + }
  2112 + if(d != null) {
  2113 + cw.setZlc(d.getZlc());
  2114 + cw.setHd(d.getHd());
  2115 + cw.setJzcd(d.getJzcd());
  2116 + cw.setCzcd(d.getCzcd());
  2117 + cw.setCdl(d.getCdl());
  2118 + cw.setBglyh((d.getZlc()==0? 0:100*d.getHd()/d.getZlc()));
  2119 + }
  2120 + }
  2121 +
  2122 + String key = "",keyNext = "";
  2123 + if(flag == 1){
  2124 + if(cw.getjGh() != null && cw.getjName() != null)
  2125 + key += cw.getjGh() + "/" + cw.getjName();
  2126 + if(cwNext.getjGh() != null && cwNext.getjName() != null)
  2127 + keyNext += cwNext.getjGh() + "/" + cwNext.getjName();
  2128 + } else if(flag == 2){
  2129 + if(cw.getsGh() != null && cw.getsName() != null)
  2130 + key += cw.getsGh() + "/" + cw.getsName();
  2131 + if(cwNext.getsGh() != null && cwNext.getsName() != null)
  2132 + keyNext += cwNext.getsGh() + "/" + cwNext.getsName();
  2133 + } else if(flag == 3){
  2134 + if(cw.getCl() != null)
  2135 + key += cw.getCl();
  2136 + if(cwNext.getCl() != null)
  2137 + keyNext += cwNext.getCl();
  2138 + }
  2139 + key = cw.getFgsdm()+"/"+cw.getXl() + "/" + key;
  2140 + keyNext = cw.getFgsdm()+"/"+cwNext.getXl() + "/" + keyNext;
  2141 + CalcWaybillDetail calc = new CalcWaybillDetail();
  2142 + List<CalcWaybillDetail> calcList = new ArrayList<>();
  2143 + // 是否一行数据的第一个、生成key,calc为刚添加,不去和cw相加
  2144 + boolean ifFirst = false;
  2145 + if(keyMapList.containsKey(key)){
  2146 + calc = keyMap.get(key);
  2147 + calcList = keyMapList.get(key);
  2148 + } else {
  2149 + // 深度拷贝对象
  2150 + BeanUtils.copyProperties(cw,calc);
  2151 + keyMap.put(key, calc);
  2152 + dayIndex = 0;
  2153 + ifFirst = true;
  2154 + }
  2155 +
  2156 + CalcWaybillDetail dayc = null;
  2157 + if("m".equals(timeType)){
  2158 + while (!dayList.get(dayIndex).containsKey(cw.getRqStr())){
  2159 + calcList.add(new CalcWaybillDetail());
  2160 + dayIndex++;
  2161 + }
  2162 + dayc = dayList.get(dayIndex).get(cw.getRqStr());
  2163 + } else if("y".equals(timeType)){
  2164 + while (!dayList.get(dayIndex).containsKey(cw.getRqStr().substring(0,7))){
  2165 + calcList.add(new CalcWaybillDetail());
  2166 + dayIndex++;
  2167 + }
  2168 + dayc = dayList.get(dayIndex).get(cw.getRqStr().substring(0,7));
  2169 + }
  2170 +
  2171 +
  2172 + // 天数相加
  2173 + this.summation(dayc, cw);
  2174 + // 左边固定列数据相加
  2175 + if(!ifFirst)
  2176 + this.summation(calc, cw);
  2177 + // 左边合计相加
  2178 + this.summation(zjCalc, cw);
  2179 +
  2180 +
  2181 + if(dayIndexPrev == dayIndex){
  2182 + CalcWaybillDetail cwPrev = calcList.get(dayIndex);
  2183 + this.summation(cwPrev, cw);
  2184 + } else {
  2185 + CalcWaybillDetail cwd = new CalcWaybillDetail();
  2186 + // 深度拷贝对象
  2187 + BeanUtils.copyProperties(cw,cwd);
  2188 + calcList.add(cwd);
  2189 + calc.setTs(calc.getTs()+1);
  2190 + zjCalc.setTs(zjCalc.getTs()+1);
  2191 + }
  2192 +
  2193 + // 把下标
  2194 + dayIndexPrev = dayIndex;
  2195 + // timeType 为m 月报表时,日期不一样就换列,为y 年报表是,月份不一样换列
  2196 + if("m".equals(timeType) && cwNext != null && key.equals(keyNext) && !cw.getRqStr().equals(cwNext.getRqStr())){
  2197 + dayIndex++;
  2198 + } else if("y".equals(timeType) && cwNext != null && key.equals(keyNext) && !cw.getRqStr().substring(0,7).equals(cwNext.getRqStr().substring(0,7))){
  2199 + dayIndex++;
  2200 + } else if(!key.equals(keyNext)){
  2201 + // 满数据的不用补空格
  2202 + while (dayList.size() > dayIndex+1){
  2203 + calcList.add(new CalcWaybillDetail());
  2204 + dayIndex++;
  2205 + }
  2206 + // 换列了从头开始,上一个下标赋值为初始
  2207 + dayIndexPrev = -1;
  2208 + }
  2209 + // 右边可变列添加数据
  2210 + keyMapList.put(key,calcList);
  2211 + }
  2212 +
  2213 + // 表头和数据
  2214 + Iterator iter = keyMap.entrySet().iterator();
  2215 +
  2216 + List<String> list1 = new ArrayList<>();
  2217 + list1.add("序号");
  2218 + list1.add("所属公司");
  2219 + list1.add("线路");
  2220 + if(flag==1 ||flag==2 ){
  2221 + list1.add("工号");
  2222 + list1.add("姓名");
  2223 + } else if(flag==3){
  2224 + list1.add("自编号");
  2225 + list1.add("车牌号");
  2226 + list1.add("燃油类型");
  2227 + }
  2228 + list1.add("计划公里");
  2229 + list1.add("总公里");
  2230 + list1.add("空驶公里");
  2231 + list1.add("临加公里");
  2232 + list1.add("烂班公里");
  2233 + list1.add("m".equals(timeType)?"天数":"月数");
  2234 + for(int i=day; i<=day2; i++){
  2235 + list1.add((i<10?"0"+i:i)+("m".equals(timeType)?"日":"月"));
  2236 + }
  2237 + if("bgldh".equals(itemDetails) || "bglyh".equals(itemDetails)){
  2238 + list1.add("平均");
  2239 + } else
  2240 + list1.add("合计");
  2241 + resList.add(list1);
  2242 +
  2243 + Map<String, String> carsMap = new HashMap<>();
  2244 + List<Cars> carsList = carsRepository.findCars();
  2245 + for (Cars c:carsList) {
  2246 + String sfdc = c.getSfdc()+"";
  2247 + carsMap.put(c.getInsideCode(), sfdc.equals("true")?"纯电动":"柴油");
  2248 + }
  2249 +
  2250 + int i=1;
  2251 + DecimalFormat df = new DecimalFormat("0.00");//格式化小数
  2252 + double allNum = 0.0;
  2253 + while (iter.hasNext()) {
  2254 + Map.Entry entry = (Map.Entry) iter.next();
  2255 + // 获取key
  2256 + String key = (String) entry.getKey();
  2257 + // 获取value
  2258 + CalcWaybillDetail c = (CalcWaybillDetail) entry.getValue();
  2259 +
  2260 + List<CalcWaybillDetail> cList = keyMapList.get(key);
  2261 +
  2262 + List<String> listStr = new ArrayList<>();
  2263 + listStr.add(i+"");
  2264 + i++;
  2265 + listStr.add(c.getFgsname());
  2266 + listStr.add(c.getXlName());
  2267 + if("jsy".equals(statisticalObj)){
  2268 + listStr.add(c.getjGh());
  2269 + listStr.add(c.getjName());
  2270 + } else if("cwy".equals(statisticalObj)){
  2271 + listStr.add(c.getsGh());
  2272 + listStr.add(c.getsName());
  2273 + } else if("cl".equals(statisticalObj)){
  2274 + listStr.add(c.getCl());
  2275 + listStr.add(BasicData.nbbmCompanyPlateMap.get(c.getCl())+"");
  2276 + listStr.add(carsMap.get(c.getCl()));
  2277 + } else if("xl".equals(statisticalObj)){
  2278 +
  2279 + }
  2280 + listStr.add(df.format(c.getJhyylc()+c.getJhfyylc()));
  2281 + listStr.add(df.format(c.getSjyylc()+c.getSjfyylc()+c.getLjyylc()+c.getLjfyylc()));
  2282 +// listStr.add(df.format(c.getSjyylc()+c.getLjyylc()));
  2283 + listStr.add(df.format(c.getSjfyylc()+c.getLjfyylc()));
  2284 + listStr.add(df.format(c.getLjyylc()+c.getLjfyylc()));
  2285 + listStr.add(df.format(c.getLblc()));
  2286 + listStr.add(c.getTs()+"");
  2287 + c.setBglhd(c.getBglhd()/c.getTs());
  2288 + c.setBglyh(c.getBglyh()/c.getTs());
  2289 + // 把列合计的数添加到最后一个
  2290 + cList.add(c);
  2291 + // DecimalFormat df = new DecimalFormat("0.00");//格式化小数
  2292 + for (CalcWaybillDetail c1:cList) {
  2293 + if(StringUtils.isEmpty(c1.getXl())) {
  2294 + listStr.add("");
  2295 + } else{
  2296 + if("jzlAll".equals(itemDetails)){
  2297 + listStr.add(df.format(c1.getJzl()));
  2298 + }else if("jzl0".equals(itemDetails)){
  2299 + listStr.add(df.format(c1.getJzl0()));
  2300 + } else if("jzl-10".equals(itemDetails)){
  2301 + listStr.add(df.format(c1.getJzl10()));
  2302 + } else if("yhl".equals(itemDetails)){
  2303 + listStr.add(df.format(c1.getYh()));
  2304 + } else if("jccy".equals(itemDetails)){
  2305 + listStr.add(df.format(c1.getJzyl()));
  2306 + } else if("cccy".equals(itemDetails)){
  2307 + listStr.add(df.format(c1.getCzyl()));
  2308 + } else if("bglyh".equals(itemDetails)){
  2309 + listStr.add(df.format(c1.getZlc()==0? 0:100*c1.getYh()/c1.getZlc()));
  2310 + } else if("dh".equals(itemDetails)){
  2311 + listStr.add(df.format(c1.getHd()));
  2312 + } else if("cdl".equals(itemDetails)){
  2313 + listStr.add(df.format(c1.getCdl()));
  2314 + } else if("cccd".equals(itemDetails)){
  2315 + listStr.add(df.format(c1.getCzcd()));
  2316 + } else if("jccd".equals(itemDetails)){
  2317 + listStr.add(df.format(c1.getJzcd()));
  2318 + } else if("bgldh".equals(itemDetails)){
  2319 + listStr.add(df.format(c1.getZlc()==0? 0:100*c1.getHd()/c1.getZlc()));
  2320 +// listStr.add(df.format(c1.getBglhd()));
  2321 + } else if("zgl".equals(itemDetails)){
  2322 + listStr.add(df.format((c1.getSjyylc()+c1.getSjfyylc()+c1.getLjfyylc()+c1.getLjyylc())));
  2323 + } else if("jhgl".equals(itemDetails)){
  2324 + listStr.add(df.format(c1.getJhyylc()+c1.getJhfyylc()));
  2325 + } else if("sjbc".equals(itemDetails)){
  2326 + listStr.add(c1.getSjyybc()+c1.getSjfyybc()+"");
  2327 + } else if("jhbc".equals(itemDetails)){
  2328 + listStr.add(c1.getJhyybc()+c1.getJhfyybc()+"");
  2329 + }
  2330 + }
  2331 + }
  2332 + allNum = allNum + Double.parseDouble(listStr.get(listStr.size()-1));
  2333 + resList.add(listStr);
  2334 + }
  2335 +
  2336 + // 合计列
  2337 + List<String> listEnd = new ArrayList<>();
  2338 + listEnd.add("合计");
  2339 + listEnd.add(df.format(zjCalc.getJhyylc()+zjCalc.getJhfyylc()));
  2340 + listEnd.add(df.format(zjCalc.getSjfyylc()+zjCalc.getSjyylc()+zjCalc.getLjyylc()+zjCalc.getLjfyylc()));//总公里
  2341 +// listEnd.add(df.format(zjCalc.getSjyylc()+zjCalc.getLjyylc()));//营运
  2342 + listEnd.add(df.format(zjCalc.getSjfyylc()+zjCalc.getLjfyylc()));
  2343 + listEnd.add(df.format(zjCalc.getLjfyylc()+zjCalc.getLjyylc()));
  2344 + listEnd.add(df.format(zjCalc.getLblc()));
  2345 + listEnd.add(zjCalc.getTs()+"");
  2346 + double all = 0.0;
  2347 + for (Map<String, CalcWaybillDetail> cmap:dayList) {
  2348 + for (Map.Entry<String, CalcWaybillDetail> cw : cmap.entrySet()) {
  2349 +// System.out.println("key = " + cw.getKey() + ", value = " + cw.getValue());
  2350 + CalcWaybillDetail c1 = cw.getValue();
  2351 + if("jzlAll".equals(itemDetails)){
  2352 + listEnd.add(df.format(c1.getJzl()));
  2353 + } else if("jzl0".equals(itemDetails)){
  2354 + listEnd.add(df.format(c1.getJzl0()));
  2355 + } else if("jzl-10".equals(itemDetails)){
  2356 + listEnd.add(df.format(c1.getJzl10()));
  2357 + } else if("yhl".equals(itemDetails)){
  2358 + listEnd.add(df.format(c1.getYh()));
  2359 + } else if("jccy".equals(itemDetails)){
  2360 + listEnd.add(df.format(c1.getJzyl()));
  2361 + } else if("cccy".equals(itemDetails)){
  2362 + listEnd.add(df.format(c1.getCzyl()));
  2363 + } else if("bglyh".equals(itemDetails)){
  2364 + listEnd.add(df.format(c1.getZlc()==0? 0:100*c1.getYh()/c1.getZlc()));
  2365 + } else if("dh".equals(itemDetails)){
  2366 + listEnd.add(df.format(c1.getHd()));
  2367 + } else if("cdl".equals(itemDetails)){
  2368 + listEnd.add(df.format(c1.getCdl()));
  2369 + } else if("cccd".equals(itemDetails)){
  2370 + listEnd.add(df.format(c1.getCzcd()));
  2371 + } else if("jccd".equals(itemDetails)){
  2372 + listEnd.add(df.format(c1.getJzcd()));
  2373 + } else if("bgldh".equals(itemDetails)){
  2374 +// listEnd.add(df.format(c1.getBglhd()));
  2375 + listEnd.add(df.format(c1.getZlc()==0? 0:100*c1.getHd()/c1.getZlc()));
  2376 + } else if("zgl".equals(itemDetails)){
  2377 + listEnd.add((df.format(c1.getSjyylc()+c1.getSjfyylc()+c1.getLjfyylc()+c1.getLjyylc())));
  2378 + } else if("jhgl".equals(itemDetails)){
  2379 + listEnd.add((df.format(c1.getJhyylc()+c1.getJhfyylc())));
  2380 + } else if("sjbc".equals(itemDetails)){
  2381 + listEnd.add(c1.getSjyybc()+c1.getSjfyybc()+"");
  2382 + } else if("jhbc".equals(itemDetails)){
  2383 + listEnd.add((c1.getJhyybc()+c1.getJhfyybc())+"");
  2384 + }
  2385 + }
  2386 + all = all + Double.parseDouble(listEnd.get(listEnd.size()-1));
  2387 + }
  2388 +
  2389 + // 百公里电油耗时为平均数
  2390 + if("bgldh".equals(itemDetails) || "bglyh".equals(itemDetails)){
  2391 + allNum = allNum/keyMap.size();
  2392 + all = all/dayList.size();
  2393 + }
  2394 +// listEnd.add(df.format(allNum)+"/"+df.format(all));
  2395 + listEnd.add(df.format(all));
  2396 + resList.add(listEnd);
  2397 +
  2398 + return resList;
  2399 + }
  2400 +
  2401 + public CalcWaybillDetail initCalcWaybillDetail(){
  2402 + CalcWaybillDetail calc = new CalcWaybillDetail();
  2403 + calc.setJhyybc(0);
  2404 + calc.setJhyylc(0d);
  2405 + calc.setJhfyybc(0);
  2406 + calc.setJhfyylc(0d);
  2407 + calc.setSjyybc(0);
  2408 + calc.setSjyylc(0d);
  2409 + calc.setSjfyybc(0);
  2410 + calc.setSjfyylc(0d);
  2411 + calc.setLbbc(0);
  2412 + calc.setLblc(0d);
  2413 + calc.setLjbc(0);
  2414 + calc.setLjyylc(0d);
  2415 + calc.setZlc(0d);
  2416 + calc.setCzyl(0d);
  2417 + calc.setJzyl(0d);
  2418 + calc.setJzl(0d);
  2419 + calc.setJzl0(0d);
  2420 + calc.setJzl10(0d);
  2421 + calc.setYh(0d);
  2422 + calc.setCzcd(0d);
  2423 + calc.setJzcd(0d);
  2424 + calc.setCdl(0d);
  2425 + calc.setHd(0d);
  2426 + calc.setTs(0);
  2427 + return calc;
  2428 + }
  2429 +
  2430 + public CalcWaybillDetail summation(CalcWaybillDetail c1, CalcWaybillDetail c2){
  2431 + c1.setJhyybc(c1.getJhyybc() + c2.getJhyybc());
  2432 + c1.setJhyylc(Arith.add(c1.getJhyylc(), c2.getJhyylc()));
  2433 + c1.setJhfyybc(c1.getJhfyybc() + c2.getJhfyybc());
  2434 + c1.setJhfyylc(Arith.add(c1.getJhfyylc(), c2.getJhfyylc()));
  2435 + c1.setSjyybc(c1.getSjyybc() + c2.getSjyybc());
  2436 + c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getSjyylc()));
  2437 +// c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getLjyylc()));// 把临加的也算上了,后面不用加了
  2438 + c1.setSjfyybc(c1.getSjfyybc() + c2.getSjfyybc());
  2439 + c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getSjfyylc()));
  2440 +// c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getLjfyylc()));// 把临加的也算上了,后面不用加了
  2441 + c1.setLbbc(c1.getLbbc() + c2.getLbbc());
  2442 + c1.setLblc(Arith.add(c1.getLblc(), c2.getLblc()));
  2443 + c1.setLjbc(c1.getLjbc() + c2.getLjbc());
  2444 + c1.setLjyylc(Arith.add(c1.getLjyylc(), c2.getLjyylc()));
  2445 + c1.setLjfyylc(Arith.add(c1.getLjfyylc(), c2.getLjfyylc()));
  2446 + c1.setZlc(Arith.add(c1.getZlc(),c2.getZlc()));
  2447 + c1.setCzyl(Arith.add(c1.getCzyl(),c2.getCzyl()));
  2448 + c1.setJzyl(Arith.add(c1.getJzyl(),c2.getJzyl()));
  2449 + c1.setJzl(Arith.add(c1.getJzl(),c2.getJzl()));
  2450 + c1.setJzl0(Arith.add(c1.getJzl0(),c2.getJzl0()));
  2451 + c1.setJzl10(Arith.add(c1.getJzl10(),c2.getJzl10()));
  2452 + c1.setYh(Arith.add(c1.getYh(),c2.getYh()));
  2453 + c1.setHd(Arith.add(c1.getHd(),c2.getHd()));
  2454 + c1.setCzcd(Arith.add(c1.getCzcd(),c2.getCzcd()));
  2455 + c1.setJzcd(Arith.add(c1.getJzcd(),c2.getJzcd()));
  2456 + c1.setCdl(Arith.add(c1.getCdl(),c2.getCdl()));
  2457 + c1.setTs(c1.getTs()+c2.getTs());
  2458 +// c1.setDtbc(c1.getDtbc() + c2.getDtbc());
  2459 + return c1;
  2460 + }
  2461 +}
  2462 +
  2463 +class AccountXlbmByping implements Comparator<Map<String, Object>> {
  2464 + @Override
  2465 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  2466 + // TODO Auto-generated method stub
  2467 +// PinyinHelper.convertToPinyinString(ppy.getName(),
  2468 +// "" , PinyinFormat.WITHOUT_TONE)
  2469 + return o1.get("xlNamePy").toString().compareTo(
  2470 + o2.get("xlNamePy").toString());
  2471 + }
  2472 +}