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 75  
76 76 //按照时间段统计,公司下线路 (驾驶员)
77 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 79 List<CalcWaybill> scheduleByJsy2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy);
80 80 //按照时间段统计,公司下线路 (售票员) coalesce(c.sGh,'')
81 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 83 List<CalcWaybill> scheduleBySpy2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy);
84 84 //按照时间段统计,公司下线路 (车辆自编号)
85 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 87 List<CalcWaybill> scheduleByZbh2(List<String> line,String date,String date2,List<String> gsdm,List<String> fgsdm, List<Integer> destroy);
88 88 //按照时间段统计,公司下线路 排序不同
89 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 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 +}
... ...