Commit e9790798ddd35cb44ee0792c70ff92e9ea037078

Authored by 王通
1 parent baeb678c

1.不要定义莫名的变量

src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
1   -package com.bsth.service.realcontrol.impl;
2   -
3   -import java.io.*;
4   -import java.net.HttpURLConnection;
5   -import java.net.MalformedURLException;
6   -import java.net.URL;
7   -import java.net.URLEncoder;
8   -import java.sql.ResultSet;
9   -import java.sql.SQLException;
10   -import java.text.DecimalFormat;
11   -import java.text.ParseException;
12   -import java.text.SimpleDateFormat;
13   -import java.util.ArrayList;
14   -import java.util.Calendar;
15   -import java.util.Collection;
16   -import java.util.Collections;
17   -import java.util.Comparator;
18   -import java.util.Date;
19   -import java.util.GregorianCalendar;
20   -import java.util.HashMap;
21   -import java.util.HashSet;
22   -import java.util.Iterator;
23   -import java.util.List;
24   -import java.util.Map;
25   -import java.util.Queue;
26   -import java.util.Set;
27   -import java.util.concurrent.ConcurrentLinkedQueue;
28   -import java.util.concurrent.Executors;
29   -import java.util.concurrent.ScheduledExecutorService;
30   -import java.util.concurrent.ThreadFactory;
31   -import java.util.concurrent.TimeUnit;
32   -import java.util.regex.Pattern;
33   -
34   -import org.apache.commons.io.IOUtils;
35   -import org.apache.commons.lang3.StringEscapeUtils;
36   -import org.apache.commons.lang3.StringUtils;
37   -import org.joda.time.format.DateTimeFormat;
38   -import org.joda.time.format.DateTimeFormatter;
39   -import org.slf4j.Logger;
40   -import org.slf4j.LoggerFactory;
41   -import org.springframework.beans.factory.DisposableBean;
42   -import org.springframework.beans.factory.InitializingBean;
43   -import org.springframework.beans.factory.annotation.Autowired;
44   -import org.springframework.jdbc.core.BeanPropertyRowMapper;
45   -import org.springframework.jdbc.core.JdbcTemplate;
46   -import org.springframework.jdbc.core.RowMapper;
47   -import org.springframework.stereotype.Service;
48   -import org.springframework.transaction.annotation.Transactional;
49   -
50   -import com.alibaba.fastjson.JSON;
51   -import com.alibaba.fastjson.JSONArray;
52   -import com.alibaba.fastjson.JSONObject;
53   -import com.bsth.common.Constants;
54   -import com.bsth.common.ResponseCode;
55   -import com.bsth.controller.realcontrol.dto.ChangePersonCar;
56   -import com.bsth.controller.realcontrol.dto.DfsjChange;
57   -import com.bsth.controller.realcontrol.dto.LpData;
58   -import com.bsth.data.BasicData;
59   -import com.bsth.data.LineConfigData;
60   -import com.bsth.data.Station2ParkBuffer;
61   -import com.bsth.data.schedule.DayOfSchedule;
62   -import com.bsth.data.schedule.SchAttrCalculator;
63   -import com.bsth.data.schedule.ScheduleComparator;
64   -import com.bsth.data.schedule.edit_logs.FormLogger;
65   -import com.bsth.data.schedule.edit_logs.ScheduleModifyLogger;
66   -import com.bsth.data.schedule.edit_logs.loggers.AfterwardsLogger;
67   -import com.bsth.data.schedule.edit_logs.loggers.FcxxwtLogger;
68   -import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
69   -import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
70   -import com.bsth.data.utils.CustomStringUtils;
71   -import com.bsth.entity.CarDevice;
72   -import com.bsth.entity.Cars;
73   -import com.bsth.entity.Line;
74   -import com.bsth.entity.Personnel;
75   -import com.bsth.entity.calc.CalcInterval;
76   -import com.bsth.entity.oil.Dlb;
77   -import com.bsth.entity.oil.Ylb;
78   -import com.bsth.entity.oil.Ylxxb;
79   -import com.bsth.entity.realcontrol.ChildTaskPlan;
80   -import com.bsth.entity.realcontrol.LineConfig;
81   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
82   -import com.bsth.entity.realcontrol.SvgAttribute;
83   -import com.bsth.entity.report.MileageReport;
84   -import com.bsth.entity.report.RepairReport;
85   -import com.bsth.entity.report.ScheduleCorrectionReport;
86   -import com.bsth.entity.schedule.CarConfigInfo;
87   -import com.bsth.entity.schedule.EmployeeConfigInfo;
88   -import com.bsth.entity.schedule.GuideboardInfo;
89   -import com.bsth.entity.schedule.SchedulePlanInfo;
90   -import com.bsth.entity.sys.Dictionary;
91   -import com.bsth.entity.sys.DutyEmployee;
92   -import com.bsth.entity.sys.SysUser;
93   -import com.bsth.repository.CarDeviceRepository;
94   -import com.bsth.repository.CarsRepository;
95   -import com.bsth.repository.LineRepository;
96   -import com.bsth.repository.RepairReportRepository;
97   -import com.bsth.repository.calc.CalcIntervalRepository;
98   -import com.bsth.repository.oil.DlbRepository;
99   -import com.bsth.repository.oil.YlbRepository;
100   -import com.bsth.repository.oil.YlxxbRepository;
101   -import com.bsth.repository.realcontrol.ChildTaskPlanRepository;
102   -import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
103   -import com.bsth.repository.realcontrol.SvgAttributeRepository;
104   -import com.bsth.repository.schedule.CarConfigInfoRepository;
105   -import com.bsth.repository.schedule.EmployeeConfigInfoRepository;
106   -import com.bsth.repository.schedule.GuideboardInfoRepository;
107   -import com.bsth.security.util.SecurityUtils;
108   -import com.bsth.service.LineService;
109   -import com.bsth.service.SectionRouteService;
110   -import com.bsth.service.directive.DirectiveService;
111   -import com.bsth.service.impl.BaseServiceImpl;
112   -import com.bsth.service.realcontrol.ScheduleRealInfoService;
113   -import com.bsth.service.report.CulateMileageService;
114   -import com.bsth.service.report.ReportService;
115   -import com.bsth.service.schedule.SchedulePlanInfoService;
116   -import com.bsth.service.sys.DictionaryService;
117   -import com.bsth.service.sys.DutyEmployeeService;
118   -import com.bsth.util.Arith;
119   -import com.bsth.util.ComparableChild;
120   -import com.bsth.util.ComparableLp;
121   -import com.bsth.util.ComparableReal;
122   -import com.bsth.util.ConfigUtil;
123   -import com.bsth.util.DateUtils;
124   -import com.bsth.util.ReportRelatedUtils;
125   -import com.bsth.util.ReportUtils;
126   -import com.bsth.util.TimeUtils;
127   -import com.bsth.util.TransGPS;
128   -import com.bsth.websocket.handler.SendUtils;
129   -import com.fasterxml.jackson.databind.ObjectMapper;
130   -import com.github.stuxuhai.jpinyin.PinyinException;
131   -import com.github.stuxuhai.jpinyin.PinyinFormat;
132   -import com.github.stuxuhai.jpinyin.PinyinHelper;
133   -import com.google.common.base.Splitter;
134   -import com.google.common.collect.Lists;
135   -
136   -import javax.ws.rs.HEAD;
137   -
138   -@Service
139   -public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long>
140   - implements ScheduleRealInfoService, InitializingBean, DisposableBean {
141   - @Autowired
142   - JdbcTemplate jdbcTemplate;
143   - @Autowired
144   - ScheduleRealInfoRepository scheduleRealInfoRepository;
145   -
146   - @Autowired
147   - EmployeeConfigInfoRepository employeeConfigInfoRepository;
148   -
149   - @Autowired
150   - CarConfigInfoRepository carConfigInfoRepository;
151   -
152   - @Autowired
153   - SectionRouteService sectionRouteService;
154   -
155   - @Autowired
156   - CulateMileageService culateMieageService;
157   -
158   - @Autowired
159   - DictionaryService dictionaryService;
160   -
161   - @Autowired
162   - CalcIntervalRepository calcIntervalRepository;
163   - /*@Autowired
164   - BorrowCenter borrowCenter;*/
165   -
166   - @Autowired
167   - LineRepository lineRepository;
168   - @Autowired
169   - LineService lineService;
170   - @Autowired
171   - GuideboardInfoRepository guideboardInfoRepository;
172   -
173   - @Autowired
174   - ChildTaskPlanRepository cTaskPlanRepository;
175   -
176   - @Autowired
177   - SendUtils sendUtils;
178   -
179   - @Autowired
180   - DayOfSchedule dayOfSchedule;
181   -
182   - @Autowired
183   - SchAttrCalculator schAttrCalculator;
184   -
185   - @Autowired
186   - LineConfigData lineConfigData;
187   -
188   - @Autowired
189   - DutyEmployeeService dutyEmployeeService;
190   -
191   - @Autowired
192   - YlxxbRepository ylxxbRepository;
193   -
194   - @Autowired
195   - YlbRepository ylbRepository;
196   -
197   - @Autowired
198   - DlbRepository dlbRepository;
199   -
200   - @Autowired
201   - ReportService reposrService;
202   -
203   - @Autowired
204   - CulateMileageService culateService;
205   -
206   - @Autowired
207   - FormLogger schModifyLog;
208   -
209   - @Autowired
210   - DirectiveService directiveService;
211   -
212   - @Autowired
213   - CarDeviceRepository carDeviceRepository;
214   -
215   - @Autowired
216   - CarsRepository carsRepository;
217   -
218   - @Autowired
219   - RepairReportRepository repairReportRepository;
220   - Logger logger = LoggerFactory.getLogger(this.getClass());
221   -
222   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
223   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
224   -
225   - public static Map<String,String> DIRMAP ; // dvr电话
226   - private Queue<RepairReport> queue = new ConcurrentLinkedQueue<>();
227   -
228   - private ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
229   -
230   - @Override
231   - public Thread newThread(Runnable r) {
232   - // TODO Auto-generated method stub
233   - Thread t = new Thread(r);
234   - t.setName("RepairReportReissuer");
235   -
236   - return t;
237   - }
238   - });
239   -
240   -
241   -
242   - private static Map<String, String> report2repair = new HashMap<String, String>();
243   -
244   - static {
245   - report2repair.put("9101", "9109");
246   - report2repair.put("9102", "9102");
247   - report2repair.put("9103", "9103");
248   - report2repair.put("9104", "9104");
249   - report2repair.put("9109", "9109");
250   - report2repair.put("9201", "9201");
251   - report2repair.put("9202", "9202");
252   - report2repair.put("9203", "9203");
253   - report2repair.put("9204", "9204");
254   - report2repair.put("9209", "9209");
255   - report2repair.put("9301", "9301");
256   - report2repair.put("9302", "9302");
257   - report2repair.put("9303", "9303");
258   - report2repair.put("9304", "9304");
259   - report2repair.put("9305", "9305");
260   - report2repair.put("9306", "9306");
261   - report2repair.put("9309", "9309");
262   - }
263   -
264   -
265   - /**
266   - * 校验人车 和 班次的公司和分公司归属
267   - *
268   - * @param schId
269   - * @param jGh
270   - * @param sGh
271   - * @param nbbm
272   - * @return -2 跨营运公司,校验不过
273   - * -1 跨分公司,二次确认
274   - * 1 校验通过
275   - */
276   - @Override
277   - public Map<String, Object> checkPCFgsAscription(Long schId, String jGh, String sGh, String nbbm) {
278   - Map<String, Object> rs = new HashMap<>();
279   - try {
280   - rs.put("status", ResponseCode.SUCCESS);
281   - rs.put("checkStatus", -2);
282   -
283   - String msg = null;
284   - ScheduleRealInfo sch = dayOfSchedule.get(schId);
285   - String gsbm = sch.getGsBm(), fgsbm = sch.getFgsBm();
286   -
287   - if (nbbm != null && !carExist(gsbm, nbbm)) {
288   - msg = sch.getGsName() + "没有自编号为" + "[" + nbbm + "]的车辆";
289   - rs.put("msg", msg);
290   - return rs;
291   - }
292   -
293   - if (nbbm != null && !sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(nbbm))) {
294   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + nbbm + "】的车辆");
295   - return rs;
296   - }
297   -
298   - if (nbbm != null && !(fgsbm + "_" + gsbm).equals(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm))) {
299   -
300   - String clFgsName = BasicData.businessFgsCodeNameMap.get(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm));
301   -
302   - msg = ("【" + nbbm + "】" + "是" + clFgsName + "的车辆!");
303   - rs.put("msg", msg);
304   - rs.put("checkStatus", -1);
305   - return rs;
306   - }
307   -
308   - if(null != jGh && !"/".equals(StringUtils.trim(jGh))){
309   - Personnel jsy = BasicData.perMap.get(gsbm + "-" + jGh);
310   -
311   - if (null == jsy) {
312   - msg = "【驾驶员】:" + sch.getGsName() + "暂无工号为" + "【" + jGh + "】的人员";
313   - rs.put("msg", msg);
314   - return rs;
315   - }
316   - else if (!fgsbm.equals(jsy.getBrancheCompanyCode())) {
317   - //校验分公司
318   - msg = ("【驾驶员】:" + jGh + "/" + jsy.getPersonnelName() + "是" + jsy.getBrancheCompany() + "的人员");
319   - rs.put("msg", msg);
320   - rs.put("checkStatus", -1);
321   - return rs;
322   - }
323   - }
324   -
325   - if (null != sGh && !"/".equals(StringUtils.trim(sGh))) {
326   - Personnel spy = BasicData.perMap.get(gsbm + "-" + sGh);
327   - if (null == spy) {
328   - msg = "【售票员】: " + sch.getGsName() + "暂无工号为" + "【" + sGh + "】的人员";
329   - rs.put("msg", msg);
330   - return rs;
331   - }
332   - else if (!fgsbm.equals(spy.getBrancheCompanyCode())) {
333   - msg = ("【售票员】: " + sGh + "/" + spy.getPersonnelName() + "是" + spy.getBrancheCompany() + "的人员");
334   - rs.put("msg", msg);
335   - rs.put("checkStatus", -1);
336   - return rs;
337   - }
338   - }
339   -
340   - rs.put("checkStatus", 1);
341   - } catch (Exception e) {
342   - logger.error("", e);
343   - rs.put("status", ResponseCode.ERROR);
344   - }
345   - return rs;
346   - }
347   -
348   -
349   - /**
350   - * 车辆是否存在
351   - *
352   - * @param gsbm 公司编码
353   - * @param nbbm 车辆自编号
354   - * @return
355   - */
356   - private boolean carExist(String gsbm, String nbbm) {
357   - return BasicData.nbbm2CompanyCodeMap.containsKey(nbbm);
358   - }
359   -
360   - /**
361   - * 获取人员姓名
362   - *
363   - * @param gsbm 公司编码
364   - * @param gh 人员工号
365   - * @return
366   - */
367   - private String getPersonName(String gsbm, String gh) {
368   - return BasicData.allPerson.get(gsbm + '-' + gh);
369   - }
370   -
371   - @Override
372   - public Iterable<ScheduleRealInfo> list(Map<String, Object> map) {
373   - Iterator<ScheduleRealInfo> iterator = super.list(map).iterator();
374   - Set<ScheduleRealInfo> set = new HashSet<>(100);
375   -
376   - DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
377   - //计算时间戳
378   - ScheduleRealInfo sch;
379   - while (iterator.hasNext()) {
380   - sch = iterator.next();
381   - //待发时间戳
382   - sch.setDfsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getDfsj()));
383   - //实发时间戳
384   - if (StringUtils.isNotEmpty(sch.getFcsjActual())) {
385   - sch.setFcsjActualTime(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsjActual()));
386   - }
387   - set.add(sch);
388   - }
389   - return set;
390   - }
391   -
392   - @Override
393   - public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
394   - List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
395   -
396   - /*Multimap<String, ScheduleRealInfo> mMap = ArrayListMultimap.create();
397   -
398   - for (String lineCode : lineList) {
399   - mMap.putAll(lineCode, dayOfSchedule.findByLineCode(lineCode));
400   - }*/
401   - return dayOfSchedule.findByLineCodes(lineList);
402   - }
403   -
404   - private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
405   -
406   - private static int BUF_SIZE = 1024;
407   -
408   - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
409   - private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
410   -
411   - @Override
412   - public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType, String userId) {
413   - Map<String, Object> map = new HashMap<>();
414   - try {
415   -
416   - ScheduleRealInfo schedule = dayOfSchedule.get(id);
417   -
418   - if (schedule.getStatus() > 0) {
419   - map.put("status", ResponseCode.SUCCESS);
420   - map.put("flag", "4008");
421   - map.put("t", schedule);
422   - return map;
423   - }
424   -
425   - LineConfig config = lineConfigData.get(schedule.getXlBm());
426   - //小于线路开始运营时间,则默认跨过24点
427   - if (dfsj.compareTo(config.getStartOpt()) < 0) {
428   - schedule.setRealExecDate(fmtyyyyMMdd.print(schedule.getScheduleDate().getTime() + DAY_TIME));
429   - } else {
430   - schedule.setRealExecDate(schedule.getScheduleDateStr());
431   - }
432   -
433   - //记录日志
434   - ScheduleModifyLogger.dftz(schedule, opType, schedule.getDfsj(), dfsj, remarks, userId);
435   -
436   - schedule.setDfsjAll(dfsj);
437   - schedule.setDfAuto(false);
438   - if ("1".equals(opType))
439   - schedule.setRemarks(remarks);
440   -
441   - List<ScheduleRealInfo> ts = new ArrayList<>();
442   - ts.add(schedule);
443   - //调整终点时间和下一个班次的应到时间
444   - //schedule.calcEndTime();
445   - /*ScheduleRealInfo nextSch = dayOfSchedule.nextByLp2(schedule);
446   - if (null != nextSch) {
447   - nextSch.setQdzArrDatejh(schedule.getZdsj());
448   - ts.add(nextSch);
449   - }*/
450   -
451   - //调整班次类型
452   - if (StringUtils.isNotEmpty(bcType) && !bcType.equals(schedule.getBcType())) {
453   - if ((schedule.getBcType().equals("major")
454   - || schedule.getBcType().equals("venting"))
455   - && bcType.equals("normal")) {
456   - //清空备注
457   - schedule.setRemarks("");
458   - }
459   - schedule.setBcType(bcType);
460   - }
461   -
462   - //如果正在执行该班次
463   - //ScheduleRealInfo exec = dayOfSchedule.executeCurr(schedule.getClZbh());
464   - //if(exec != null && exec == schedule){
465   - //重新计算正在执行班次
466   - dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
467   - //}
468   -
469   - //重新计算是否误点
470   - schedule.reCalcLate();
471   - //取消应发未到标记,不再自动调整待发
472   - //if(schedule.isLate2()){
473   - // schedule.setLate2(false);
474   - //LateAdjustHandle.remove(schedule);
475   - //}
476   -
477   - try {
478   - if (!schedule.getDirectiveState().equals(-1) && schedule.getStatus() == 0) {
479   - //重新下发调度指令
480   - directiveService.send60Dispatch(schedule.getId(), "待发@系统");
481   - }
482   - } catch (Exception e) {
483   - logger.error("", e);
484   - }
485   -
486   - // 持久化到数据库
487   - dayOfSchedule.save(schedule);
488   -
489   - map.put("status", ResponseCode.SUCCESS);
490   - map.put("ts", ts);
491   - } catch (Exception e) {
492   - logger.error("", e);
493   - map.put("status", ResponseCode.ERROR);
494   - }
495   - return map;
496   - }
497   -
498   - @Override
499   - public Map<String, Object> destroy(String idsStr, String remarks, String reason, String userId) {
500   -
501   - Map<String, Object> map = new HashMap<>();
502   - List<ScheduleRealInfo> rsList = new ArrayList<>();
503   - map.put("ts", rsList);
504   - try {
505   - List<String> idList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(idsStr));
506   -
507   - ScheduleRealInfo schedule = null;
508   - for (String id : idList) {
509   - schedule = dayOfSchedule.get(Long.parseLong(id));
510   - if (schedule.isDestroy()) {
511   - map.put("status", ResponseCode.ERROR);
512   - map.put("msg", "不必要的重复烂班!");
513   - return map;
514   - }
515   - //记录日志
516   - ScheduleModifyLogger.jhlb(schedule, remarks, userId);
517   -
518   - schedule.setAdjustExps(reason);
519   - schedule.destroy();
520   - schedule.addRemarks(remarks);
521   -
522   - dayOfSchedule.save(schedule);
523   - rsList.add(schedule);
524   - }
525   -
526   - //重新计算当前执行班次
527   - dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
528   -
529   - map.put("status", ResponseCode.SUCCESS);
530   - } catch (Exception e) {
531   - logger.error("", e);
532   - map.put("status", ResponseCode.ERROR);
533   - }
534   - return map;
535   - }
536   -
537   - // 线路id获取驾驶员
538   - @Override
539   - public List<Map<String, String>> findDriverByLine(String lineCode) {
540   - List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
541   -
542   - List<Map<String, String>> rsList = new ArrayList<>();
543   - Map<String, String> map = null;
544   - Personnel driver = null;
545   - String code = null;
546   -
547   - for (EmployeeConfigInfo employee : list) {
548   - driver = employee.getJsy();
549   - if (driver != null) {
550   - map = new HashMap<>();
551   - code = driver.getJobCode();
552   - map.put("id", code + "/" + driver.getPersonnelName());
553   - map.put("text", code + "/" + driver.getPersonnelName());
554   - rsList.add(map);
555   - }
556   - }
557   - return rsList;
558   - }
559   -
560   - // 线路id获取售票员
561   - @Override
562   - public List<Map<String, String>> findConductorByLine(String lineCode) {
563   - List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
564   -
565   - List<Map<String, String>> rsList = new ArrayList<>();
566   - Map<String, String> map = null;
567   - Personnel conductor = null;
568   - String code = null;
569   -
570   - for (EmployeeConfigInfo employee : list) {
571   - conductor = employee.getSpy();
572   - if (conductor != null) {
573   - code = conductor.getJobCode();
574   - map = new HashMap<>();
575   - map.put("id", code + "/" + conductor.getPersonnelName());
576   - map.put("text", code + "/" + conductor.getPersonnelName());
577   - rsList.add(map);
578   - }
579   - }
580   - return rsList;
581   - }
582   -
583   - @Override
584   - public List<Map<String, String>> findCarByLine(String lineCode) {
585   -
586   - List<CarConfigInfo> list = carConfigInfoRepository.findBylineCode(lineCode);
587   -
588   - List<Map<String, String>> rsList = new ArrayList<>();
589   - Map<String, String> map = null;
590   - Cars car = null;
591   - String code = null;
592   -
593   - for (CarConfigInfo cci : list) {
594   - car = cci.getCl();
595   - if (car != null) {
596   - code = car.getInsideCode();
597   - map = new HashMap<>();
598   - map.put("id", code);
599   - map.put("text", code);
600   - rsList.add(map);
601   - }
602   - }
603   - return rsList;
604   - }
605   -
606   - /**
607   - * 添加到历史库
608   - *
609   - * @param t
610   - * @return
611   - */
612   - @Override
613   - public Map<String, Object> addToHistory(ScheduleRealInfo t) {
614   - Map<String, Object> rs = new HashMap<>();
615   - try {
616   - if (!carExist(t.getGsBm(), t.getClZbh())) {
617   - rs.put("msg", "车辆 " + t.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
618   - rs.put("status", ResponseCode.ERROR);
619   - return rs;
620   - }
621   -
622   - SysUser user = SecurityUtils.getCurrentUser();
623   - //String schDate = DayOfSchedule.currSchDateMap.get(t.getXlBm());
624   -
625   - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
626   -
627   - if (StringUtils.isEmpty(t.getjGh())) {
628   - rs.put("status", ResponseCode.ERROR);
629   - rs.put("msg", "驾驶员工号不能为空!");
630   - return rs;
631   - }
632   - //截取驾驶员工号
633   - if (t.getjGh().indexOf("-") != -1) {
634   - t.setjGh(t.getjGh().split("-")[1]);
635   - }
636   - //检查驾驶员工号
637   - String jName = getPersonName(t.getGsBm(), t.getjGh());
638   - if (StringUtils.isEmpty(jName)) {
639   - rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的驾驶员");
640   - rs.put("status", ResponseCode.ERROR);
641   - return rs;
642   - } else if (StringUtils.isEmpty(t.getjName())) {
643   - t.setjName(jName);//补上驾驶员名称
644   - }
645   -
646   - //有售票员
647   - if (StringUtils.isNotEmpty(t.getsGh())) {
648   - String sName = getPersonName(t.getGsBm(), t.getsGh());
649   - if (StringUtils.isEmpty(sName)) {
650   - rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的售票员");
651   - rs.put("status", ResponseCode.ERROR);
652   - return rs;
653   - } else if (StringUtils.isEmpty(t.getsName())) {
654   - t.setsName(sName);//补上售票员名称
655   - }
656   - } else {
657   - t.setsGh("");
658   - t.setsName("");
659   - }
660   -
661   - //公司 和 分公司名称
662   - t.setGsName(BasicData.businessCodeNameMap.get(t.getGsBm()));
663   - t.setFgsName(BasicData.businessFgsCodeNameMap.get(t.getFgsBm()+ "_" + t.getGsBm() ));
664   -
665   - //t.setScheduleDateStr(schDate);
666   - t.setScheduleDate(sdfyyyyMMdd.parse(t.getScheduleDateStr()));
667   - t.setRealExecDate(t.getScheduleDateStr());
668   - t.setCreateBy(user);
669   - t.setSflj(true);
670   - t.setLate(false);
671   - t.setDfsj(t.getFcsj());
672   - t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime());
673   - t.setJhlcOrig(t.getJhlc());
674   -
675   - //班次历时
676   - t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
677   -
678   - //起终点名称
679   - String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
680   - t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
681   - t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
682   -
683   - //计算班次实际执行时间
684   - schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
685   - //处理计达跨24点
686   - LineConfig conf = lineConfigData.get(t.getXlBm());
687   - if (t.getZdsj().compareTo(conf.getStartOpt()) < 0) {
688   - t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
689   - }
690   - if (t.getZdsjT() < t.getFcsjT()) {
691   - rs.put("status", ResponseCode.ERROR);
692   - rs.put("msg", "起终点时间异常!");
693   - return rs;
694   - }
695   -
696   - t.setId(dayOfSchedule.getId());
697   - //实时入库
698   - rs = super.save(t);
699   - } catch (Exception e) {
700   - logger.error("", e);
701   - rs.put("status", ResponseCode.ERROR);
702   - }
703   - return rs;
704   - }
705   -
706   -
707   - /**
708   - * 临加班次
709   - */
710   - @Override
711   - public Map<String, Object> save(ScheduleRealInfo sch) {
712   - Map<String, Object> rs = new HashMap<>();
713   - try {
714   - String clZbh = sch.getClZbh();
715   - if (StringUtils.isNotEmpty(clZbh)) {
716   - //检测
717   - if (!carExist(sch.getGsBm(), clZbh)) {
718   - rs.put("status", ResponseCode.ERROR);
719   - rs.put("msg", "车辆 " + clZbh + " 不存在!");
720   - return rs;
721   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
722   - rs.put("status", ResponseCode.ERROR);
723   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
724   - return rs;
725   - }
726   - }
727   -
728   - SysUser user = SecurityUtils.getCurrentUser();
729   - String schDate = DayOfSchedule.currSchDateMap.get(sch.getXlBm());
730   -
731   - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
732   -
733   - if (StringUtils.isEmpty(sch.getjGh())) {
734   - rs.put("status", ResponseCode.ERROR);
735   - rs.put("msg", "驾驶员工号不能为空!");
736   - return rs;
737   - }
738   - //截取驾驶员工号
739   - if (sch.getjGh().indexOf("-") != -1) {
740   - sch.setjGh(sch.getjGh().split("-")[1]);
741   - }
742   - //检查驾驶员工号
743   - String jName = getPersonName(sch.getGsBm(), sch.getjGh());
744   - if (StringUtils.isEmpty(jName)) {
745   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
746   - rs.put("status", ResponseCode.ERROR);
747   - return rs;
748   - } else if (StringUtils.isEmpty(sch.getjName())) {
749   - sch.setjName(jName);//补上驾驶员名称
750   - }
751   -
752   - //有售票员
753   - if (StringUtils.isNotEmpty(sch.getsGh())) {
754   - String sName = getPersonName(sch.getGsBm(), sch.getsGh());
755   - if (StringUtils.isEmpty(sName)) {
756   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的售票员");
757   - rs.put("status", ResponseCode.ERROR);
758   - return rs;
759   - } else if (StringUtils.isEmpty(sch.getsName())) {
760   - sch.setsName(sName);//补上售票员名称
761   - }
762   - } else {
763   - sch.setsGh("");
764   - sch.setsName("");
765   - }
766   -
767   - //公司 和 分公司名称
768   - sch.setGsName(BasicData.businessCodeNameMap.get(sch.getGsBm()));
769   - sch.setFgsName(BasicData.businessFgsCodeNameMap.get(sch.getFgsBm() + "_" + sch.getGsBm()));
770   - sch.setCreateDate(new Date());
771   - sch.setScheduleDateStr(schDate);
772   - sch.setScheduleDate(sdfyyyyMMdd.parse(schDate));
773   - sch.setRealExecDate(schDate);
774   -
775   - sch.setCreateBy(user);
776   - sch.setSflj(true);
777   - sch.setLate(false);
778   - sch.setDfsj(sch.getFcsj());
779   - sch.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + sch.getZdsj()).getTime());
780   - sch.setJhlcOrig(sch.getJhlc());
781   - sch.setCreateDate(new Date());
782   - sch.setUpdateDate(new Date());
783   - sch.setSpId(-1L);
784   - //起终点名称
785   - String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
786   - sch.setQdzName(BasicData.getStationNameByCode(sch.getQdzCode(), prefix));
787   - sch.setZdzName(BasicData.getStationNameByCode(sch.getZdzCode(), prefix));
788   -
789   - //计算班次实际执行时间
790   - schAttrCalculator.calcRealDate(sch).calcAllTimeByFcsj(sch);
791   -
792   - //处理计达跨24点
793   - LineConfig conf = lineConfigData.get(sch.getXlBm());
794   - if (sch.getZdsj().compareTo(conf.getStartOpt()) < 0) {
795   - sch.setZdsjT(sdfyyyyMMddHHmm.parse(sch.getScheduleDateStr() + sch.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
796   - }
797   -
798   - //班次历时
799   - sch.setBcsj((int) ((sch.getZdsjT() - sch.getDfsjT()) / 1000 / 60));
800   - if (sch.getZdsjT() < sch.getFcsjT()) {
801   - rs.put("status", ResponseCode.ERROR);
802   - rs.put("msg", "起终点时间异常!");
803   - return rs;
804   - }
805   -
806   - sch.setId(dayOfSchedule.getId());
807   - //实时入库
808   - super.save(sch);
809   -
810   - // 加入缓存
811   - dayOfSchedule.put(sch);
812   -
813   - //更新起点应到时间
814   - List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
815   -
816   - //重新计算车辆当前执行班次
817   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
818   -
819   - //记录站到场历时数据
820   - Station2ParkBuffer.put(sch);
821   -
822   - rs.put("ts", ts);
823   - rs.put("t", sch);
824   - } catch (Exception e) {
825   - logger.error("", e);
826   - rs.put("status", ResponseCode.ERROR);
827   - }
828   - return rs;
829   - }
830   -
831   - /**
832   - * 删除历史表临加班次
833   - *
834   - * @param id
835   - * @return
836   - */
837   - @Override
838   - public Map<String, Object> deleteToHistory(Long id) {
839   - Map<String, Object> rs = new HashMap<>();
840   - rs.put("status", ResponseCode.ERROR);
841   -
842   - try {
843   - ScheduleRealInfo sch = super.findById(id);
844   - if (sch == null) {
845   - rs.put("msg", "无效的id号");
846   - return rs;
847   - }
848   -
849   - if (!sch.isSflj()) {
850   - rs.put("msg", "你只能删除临加班次");
851   - return rs;
852   - }
853   -
854   - //解除和调度指令的外键约束
855   - jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
856   -
857   - //数据库删除
858   - rs = super.delete(id);
859   - } catch (Exception e) {
860   - logger.error("", e);
861   - rs.put("msg", e.getMessage());
862   - }
863   -
864   - return rs;
865   - }
866   -
867   - @Override
868   - public Map<String, Object> delete(Long id) {
869   - Map<String, Object> rs = new HashMap<>();
870   - rs.put("status", ResponseCode.ERROR);
871   -
872   - ScheduleRealInfo sch = null;
873   - try {
874   - sch = dayOfSchedule.get(id);
875   - if (sch == null) {
876   - rs.put("msg", "无效的id号");
877   - return rs;
878   - }
879   -
880   - if (!sch.isSflj()) {
881   - rs.put("msg", "你只能删除临加班次");
882   - return rs;
883   - }
884   -
885   - sch.setDeleted(true);
886   - //解除和调度指令的外键约束
887   - jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
888   -
889   - //数据库删除
890   - rs = super.delete(id);
891   - if (rs.get("status").equals(ResponseCode.SUCCESS)) {
892   - dayOfSchedule.delete(sch);
893   - //更新起点应到时间
894   - List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
895   - rs.put("ts", ts);
896   - rs.put("delete", sch);
897   - } else
898   - sch.setDeleted(false);
899   - } catch (Exception e) {
900   - logger.error("", e);
901   - rs.put("msg", e.getMessage());
902   - sch.setDeleted(false);
903   - }
904   -
905   - return rs;
906   - }
907   -
908   - @Override
909   - public List<Map<String, String>> sreachVehic(String nbbm) {
910   - // 转大写
911   - nbbm = nbbm.toUpperCase();
912   -
913   - List<Map<String, String>> list = new ArrayList<>();
914   - Map<String, String> map;
915   - Set<String> allSet = BasicData.nbbm2CompanyCodeMap.keySet();
916   -
917   - Line line;
918   - for (String k : allSet) {
919   - if (k.indexOf(nbbm) != -1) {
920   - // 所属线路
921   - map = new HashMap<>();
922   - line = BasicData.nbbm2LineMap.get(k);
923   - map.put("id", k);
924   - map.put("text", k);
925   - if (null != line) {
926   - map.put("lineName", line.getName());
927   - map.put("lineCode", line.getLineCode());
928   - }
929   -
930   - list.add(map);
931   - }
932   -
933   - if (list.size() > 20)
934   - break;
935   - }
936   - return list;
937   - }
938   -
939   - @Override
940   - public void adjustCar(ScheduleRealInfo schedule, String car) {
941   - schedule.setClZbh(car);
942   - }
943   -
944   - @Override
945   - public void adjustDriver(ScheduleRealInfo schedule, String driver, String driverName) {
946   - if (driver.indexOf("-") != -1)
947   - driver = driver.split("-")[1];
948   - schedule.setjGh(driver);
949   - schedule.setjName(driverName);
950   - }
951   -
952   - @Override
953   - public void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName) {
954   - if (conductor.indexOf("-") != -1)
955   - conductor = conductor.split("-")[1];
956   - schedule.setsGh(conductor);
957   - schedule.setsName(conductorName);
958   - }
959   -
960   - @Override
961   - public List<ScheduleRealInfo> queryUserInfo(String line, String date, String state) {
962   - List<ScheduleRealInfo> scheduleRealInfos = new ArrayList<>();
963   - List<Object[]> objects = null;
964   - if (state.equals("2")) {
965   - objects = scheduleRealInfoRepository.queryUserInfo2(line, date);
966   - for (Object[] objs : objects) {
967   - ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
968   - scheduleRealInfo.setId((Long)objs[0]);
969   - scheduleRealInfo.setjGh((String)objs[1]);
970   - scheduleRealInfo.setClZbh((String)objs[2]);
971   - scheduleRealInfo.setLpName((String)objs[3]);
972   - scheduleRealInfo.setjName((String)objs[4]);
973   -
974   - scheduleRealInfos.add(scheduleRealInfo);
975   - }
976   - } else {
977   - objects = scheduleRealInfoRepository.queryUserInfo3(line, date);
978   - for (Object[] objs : objects) {
979   - ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
980   - scheduleRealInfo.setId((Long)objs[0]);
981   - scheduleRealInfo.setClZbh((String)objs[1]);
982   -
983   - scheduleRealInfos.add(scheduleRealInfo);
984   - }
985   - }
986   -
987   - return scheduleRealInfos;
988   - }
989   -
990   - @Override
991   - public List<ScheduleRealInfo> queryUserInfoPx(String line, String date, String state, String type) {
992   -// List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
993   - state = state + "";
994   - String lpname = state;
995   - String px = type;
996   - if (state.equals("lpName")) {
997   - state = state + "+1";
998   - type = "ASC";
999   - }
1000   - String minfcsj = "02:00";
1001   - List<Line> lineList = lineRepository.findLineByCode(line);
1002   - if (lineList.size() > 0) {
1003   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
1004   - + " id = ("
1005   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
1006   - + ")";
1007   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
1008   - }
1009   - String sqlPlan = "select * from (select * from ("
1010   - + " select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
1011   - + " s.lp_Name as lpName,min(s.j_Name) as jName,max(s.schedule_date_str) as dateStr ,"
1012   - + " min(s.fcsj) as fcsj,1 as px from bsth_c_s_sp_info_real s where "
1013   - + " s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
1014   - + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name) x where x.fcsj >'" + minfcsj + "'"
1015   - + " UNION "
1016   - + " select * from ( select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
1017   - + " s.lp_Name as lpName,min(s.j_Name) as jName, max(s.schedule_date_str) as dateStr,"
1018   - + " min(s.fcsj) as fcsj,2 as px from bsth_c_s_sp_info_real s "
1019   - + " where s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
1020   - + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name"
1021   - + " ) y where y.fcsj <='" + minfcsj + "') z order by (" + state + "),dateStr,px,fcsj " + type;
1022   - List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan,
1023   - new RowMapper<ScheduleRealInfo>() {
1024   - @Override
1025   - public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
1026   - ScheduleRealInfo t = new ScheduleRealInfo();
1027   - t.setId(rs.getLong("id"));
1028   - t.setjGh(rs.getString("jGh"));
1029   - t.setClZbh(rs.getString("clZbh"));
1030   - t.setLpName(rs.getString("lpName"));
1031   - t.setjName(rs.getString("jName"));
1032   - t.setFcsj(rs.getString("fcsj"));
1033   - return t;
1034   - }
1035   - });
1036   - if (lpname.equals("lpName")) {
1037   -
1038   - List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>();
1039   - Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
1040   -// if (px.equals("desc")) {
1041   - int zt = 0;
1042   - for (int l = 0; l < 2; l++) {
1043   - for (int i = 0; i < list.size(); i++) {
1044   - ScheduleRealInfo t = list.get(i);
1045   - if (t.getLpName().indexOf("+") != -1) {
1046   - if (zt == 0) {
1047   - listNew.add(t);
1048   - }
1049   - } else if (pattern.matcher(t.getLpName()).matches()) {
1050   - if (zt == 1) {
1051   - listNew.add(t);
1052   - }
1053   - } else {
1054   - continue;
1055   - }
1056   - }
1057   - zt++;
1058   - }
1059   -
1060   - Collections.sort(list, new ComparableLp());
1061   - for (int i = 0; i < list.size(); i++) {
1062   - ScheduleRealInfo t = list.get(i);
1063   - if (t.getLpName().indexOf("+") != -1) {
1064   - continue;
1065   - } else if (pattern.matcher(t.getLpName()).matches()) {
1066   - continue;
1067   - } else {
1068   - listNew.add(t);
1069   - }
1070   - }
1071   - return listNew;
1072   - } else {
1073   - return list;
1074   - }
1075   -
1076   - }
1077   -
1078   - /**
1079   - *
1080   - */
1081   - @Override
1082   - public List<ScheduleRealInfo> exportWaybill(String jName,String jGh, String clZbh, String lpName, String date, String line) {
1083   - ReportUtils ee = new ReportUtils();
1084   - ReportRelatedUtils rru = new ReportRelatedUtils();
1085   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
1086   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
1087   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
1088   -// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
1089   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
1090   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1091   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1092   - Set<ChildTaskPlan> cts = s.getcTasks();
1093   - if (cts != null && cts.size() > 0) {
1094   - lists.add(s);
1095   - } else {
1096   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
1097   - lists.add(s);
1098   - }
1099   - }
1100   - }
1101   - DecimalFormat format = new DecimalFormat("0.00");
1102   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
1103   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
1104   - //计算里程和班次数,并放入Map里
1105   - Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
1106   -
1107   - map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
1108   - map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
1109   - map.put("addMileage", culateMieageService.culateLjgl(lists));
1110   - double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
1111   - map.put("yygl", yygl);
1112   - double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
1113   - map.put("ksgl", ksgl);
1114   - map.put("realMileage", Arith.add(yygl, ksgl));
1115   - map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
1116   - map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
1117   - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
1118   - int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
1119   - map.put("sjbc", sjbc);
1120   -// map=new HashMap<String,Object>();
1121   -
1122   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
1123   - String minfcsj = "02:00";
1124   - List<Line> lineList = lineRepository.findLineByCode(line);
1125   - if (lineList.size() > 0) {
1126   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
1127   - + " id = ("
1128   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
1129   - + ")";
1130   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
1131   - }
1132   - String[] minSjs = minfcsj.split(":");
1133   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
1134   -
1135   -
1136   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1137   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1138   - String[] fcsj = s.getFcsj().split(":");
1139   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
1140   -
1141   - Long fscjT = 0L;
1142   - if (fcsjL < minSj) {
1143   - Calendar calendar = new GregorianCalendar();
1144   - calendar.setTime(s.getScheduleDate());
1145   - calendar.add(calendar.DATE, 1);
1146   - s.setScheduleDate(calendar.getTime());
1147   - try {
1148   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
1149   - } catch (ParseException e) {
1150   - // TODO Auto-generated catch block
1151   - e.printStackTrace();
1152   - }
1153   -
1154   - } else {
1155   - try {
1156   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
1157   - } catch (ParseException e) {
1158   - // TODO Auto-generated catch block
1159   - e.printStackTrace();
1160   - }
1161   - ;
1162   - }
1163   - s.setFcsjT(fscjT);
1164   - }
1165   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
1166   - Collections.sort(scheduleRealInfos, new ComparableReal());
1167   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1168   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1169   - s.setAdjustExps(i + 1 + "");
1170   - String remarks = "";
1171   - if (s.getRemarks() != null) {
1172   - remarks += s.getRemarks();
1173   - }
1174   -
1175   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
1176   - if (!childTaskPlans.isEmpty()) {
1177   - s.setFcsjActual("");
1178   - s.setZdsjActual("");
1179   - s.setJhlc(0.0);
1180   - }
1181   -
1182   - if (s.isDestroy()) {
1183   - s.setFcsjActual("");
1184   - s.setZdsjActual("");
1185   - s.setJhlc(0.0);
1186   - remarks += "(烂班)";
1187   - s.setRemarks(remarks);
1188   - }
1189   -
1190   - listSchedule.add(s);
1191   - //计算营运里程,空驶里程
1192   - if (!childTaskPlans.isEmpty()) {
1193   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
1194   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
1195   - Collections.sort(listit, new ComparableChild());
1196   - for (int j = 0; j < listit.size(); j++) {
1197   - ScheduleRealInfo t = new ScheduleRealInfo();
1198   - ChildTaskPlan childTaskPlan = listit.get(j);
1199   - if (childTaskPlan.isDestroy()) {
1200   - t.setFcsjActual("");
1201   - t.setZdsjActual("");
1202   - t.setJhlc(0.0);
1203   - } else {
1204   - t.setFcsjActual(childTaskPlan.getStartDate());
1205   - t.setZdsjActual(childTaskPlan.getEndDate());
1206   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
1207   - }
1208   - t.setQdzName(childTaskPlan.getStartStationName());
1209   - t.setZdzName(childTaskPlan.getEndStationName());
1210   - t.setRemarks(childTaskPlan.getRemarks());
1211   - t.setAdjustExps("子");
1212   - t.setjGh("");
1213   - t.setjName("");
1214   - t.setsGh("");
1215   - t.setsName("");
1216   - listSchedule.add(t);
1217   - }
1218   - }
1219   - }
1220   - Map<String, Object> maps;
1221   - for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
1222   - maps = new HashMap<String, Object>();
1223   - try {
1224   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
1225   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
1226   - maps = rru.getMapValue(scheduleRealInfo);
1227   - maps.put("bcs", scheduleRealInfo.getAdjustExps());
1228   - String zdsj = scheduleRealInfo.getZdsj();
1229   - String zdsjActual = scheduleRealInfo.getZdsjActual();
1230   - if (zdsj != null && zdsjActual != null &&
1231   - !zdsj.equals(zdsjActual) &&
1232   - !zdsj.equals("") &&
1233   - !zdsjActual.equals("")) {
1234   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
1235   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
1236   - if (zdsj.compareTo(zdsjActual) > 0) {
1237   - if (zdsjT - zdsjAT > 1000) {
1238   - maps.put("fast", "");
1239   - maps.put("slow", zdsjAT - zdsjT + 1440);
1240   - } else {
1241   - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
1242   - maps.put("slow", "");
1243   - }
1244   - } else {
1245   - if (zdsjAT - zdsjT > 1000) {
1246   - maps.put("fast", zdsjT - zdsjAT + 1440);
1247   - maps.put("slow", "");
1248   - } else {
1249   - maps.put("fast", "");
1250   - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
1251   - }
1252   - }
1253   - } else {
1254   - maps.put("fast", "");
1255   - maps.put("slow", "");
1256   - }
1257   - listMap.add(maps);
1258   - } catch (Exception e) {
1259   - e.printStackTrace();
1260   - }
1261   - }
1262   -
1263   - String xls = "";
1264   - if (map.get("type").toString().equals("0")) {
1265   - xls = "waybill_minhang.xls";
1266   - } else {
1267   - xls = "waybill_minhang_dl.xls";
1268   - }
1269   -
1270   -
1271   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1272   -
1273   - list.add(listMap.iterator());
1274   - ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/" + xls,
1275   - path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
1276   - return scheduleRealInfos;
1277   - }
1278   -
1279   - @Override
1280   - public List<Map<String, Object>> dailyInfo(String line, String date, String type) {
1281   - DecimalFormat format = new DecimalFormat("0.00");
1282   - ReportUtils ee = new ReportUtils();
1283   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1284   - List<Map<String, Object>> list = scheduleRealInfoRepository.dailyInfo(line, date);
1285   -
1286   - double totalZGL = 0, totalKSGL = 0, totalYH = 0;
1287   - int totalBCS = 0;
1288   - for (int i = 0; i < list.size(); i++) {
1289   - String zgl = format.format(Double.parseDouble(list.get(i).get("zgl") == null ? "0" : list.get(i).get("zgl").toString()));
1290   - String ksgl = format.format(Double.parseDouble(list.get(i).get("ksgl") == null ? "0" : list.get(i).get("ksgl").toString()));
1291   - if (type.equals("export")) {
1292   - totalZGL += Double.parseDouble(zgl);
1293   - totalKSGL += Double.parseDouble(ksgl);
1294   - totalBCS += Integer.parseInt(list.get(i).get("bcs").toString());
1295   - }
1296   - list.get(i).put("zgl", zgl);
1297   - list.get(i).put("ksgl", ksgl);
1298   - }
1299   - if (type.equals("export")) {
1300   - Map<String, Object> map = new HashMap<String, Object>();
1301   - map.put("line", line);
1302   - map.put("date", date);
1303   - map.put("totalZGL", totalZGL);
1304   - map.put("totalKSGL", totalKSGL);
1305   - map.put("totalYH", totalYH);
1306   - map.put("totalBCS", totalBCS);
1307   -
1308   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1309   -
1310   - listI.add(list.iterator());
1311   - try {
1312   - ee.excelReplace(listI, new Object[]{map}, path + "mould/daily.xls",
1313   - path + "export/班次日报" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
1314   - } catch (ParseException e) {
1315   - e.printStackTrace();
1316   - }
1317   - }
1318   - return list;
1319   - }
1320   -
1321   - @Override
1322   - public List<Object[]> historyMessage(String line, String date, String code, String type) {
1323   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
1324   -
1325   - long d = 0;
1326   - long t = 0;
1327   - if (date.length() > 0) {
1328   - try {
1329   - d = sdf.parse(date + " 00:00:00").getTime();
1330   - t = sdf.parse(date + " 23:59:59").getTime();
1331   - } catch (ParseException e) {
1332   - // TODO Auto-generated catch block
1333   - e.printStackTrace();
1334   - }
1335   -
1336   - }
1337   - String device = "";
1338   - String device2 ="";
1339   - long qyrqTime=0l;
1340   - if (!code.equals("")) {
1341   - try {
1342   - List<CarDevice> deviceList=carDeviceRepository.findCarCode(code, sdf.parse(date+ " 00:00:00"));
1343   - if(deviceList.size()>0){
1344   - device=deviceList.get(0).getOldDeviceNo();
1345   - Date qyrq=deviceList.get(0).getQyrq();
1346   - qyrqTime=qyrq.getTime();
1347   - if(qyrqTime<t){
1348   - device2=deviceList.get(0).getNewDeviceNo();
1349   - }
1350   - }else{
1351   - device = BasicData.deviceId2NbbmMap.inverse().get(code);
1352   - }
1353   - } catch (ParseException e) {
1354   - // TODO Auto-generated catch block
1355   - e.printStackTrace();
1356   - }
1357   - }
1358   - List<Object[]> list=new ArrayList<Object[]>();
1359   -
1360   - List<Object[]> list0 =scheduleRealInfoRepository.historyMessage(line, d, t, device);
1361   - for (Object[] obj : list0) {
1362   - if (obj != null) {
1363   - if(code.equals("")){
1364   - if (BasicData.deviceId2NbbmMap.get(obj[0].toString()) == null) {
1365   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
1366   - try {
1367   - carDeviceList = carDeviceRepository.findCarDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
1368   - //启用日期大于营运日期 还是根据旧设备号查询
1369   - if(carDeviceList.size()==0){
1370   - carDeviceList = carDeviceRepository.findCarOldDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
1371   - }
1372   - } catch (Exception e) {
1373   - // TODO Auto-generated catch block
1374   - e.printStackTrace();
1375   - }
1376   - if (carDeviceList.size() > 0) {
1377   - obj[0] = carDeviceList.get(0).getClZbh();
1378   - } else {
1379   - obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
1380   - }
1381   - } else {
1382   - obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
1383   - }
1384   - }else{
1385   - obj[0]=code;
1386   - }
1387   -
1388   - obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
1389   - obj[4] = BasicData.lineCode2NameMap.get(line);
1390   - }
1391   - }
1392   - list.addAll(list0);
1393   - if(!device2.equals("")){
1394   - List<Object[]> list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2);
1395   - for (Object[] obj : list1) {
1396   - if (obj != null) {
1397   - obj[0] =code;
1398   - obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
1399   - obj[4] = BasicData.lineCode2NameMap.get(line);
1400   - }
1401   - }
1402   - list.addAll(list1);
1403   - }
1404   -
1405   - if (type != null && type.length() != 0 && type.equals("export")) {
1406   - String lineName = BasicData.lineCode2NameMap.get(line);
1407   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
1408   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
1409   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1410   - Map<String, Object> m = new HashMap<String, Object>();
1411   - ReportUtils ee = new ReportUtils();
1412   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
1413   - for (int i = 0; i < list.size(); i++) {
1414   - Map<String, Object> map = new HashMap<String, Object>();
1415   - Object[] obj = list.get(i);
1416   - map.put("num", i + 1);
1417   - map.put("line", obj[4]);
1418   - map.put("clZbh", obj[0]);
1419   - map.put("sender", obj[1]);
1420   - map.put("date", obj[3]);
1421   - map.put("text", obj[2]);
1422   - newList.add(map);
1423   - }
1424   - try {
1425   - listI.add(newList.iterator());
1426   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1427   - ee.excelReplace(listI, new Object[]{m}, path + "mould/historyMessage.xls",
1428   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
1429   - + "-" + lineName + "-调度历史消息.xls");
1430   - } catch (Exception e) {
1431   - // TODO: handle exception
1432   - e.printStackTrace();
1433   - }
1434   - }
1435   -
1436   - if (type != null && type.length() != 0 && type.equals("export_msg")) {
1437   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
1438   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
1439   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1440   - Map<String, Object> m = new HashMap<String, Object>();
1441   - ReportUtils ee = new ReportUtils();
1442   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
1443   - for (int i = 0; i < list.size(); i++) {
1444   - Map<String, Object> map = new HashMap<String, Object>();
1445   - Object[] obj = list.get(i);
1446   - map.put("num", i + 1);
1447   - map.put("line", obj[4]);
1448   - map.put("clZbh", obj[0]);
1449   - map.put("sender", obj[1]);
1450   - map.put("date", obj[3]);
1451   - map.put("text", obj[2]);
1452   - newList.add(map);
1453   - }
1454   - try {
1455   - listI.add(newList.iterator());
1456   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1457   - ee.excelReplace(listI, new Object[]{m}, path + "mould/message.xls",
1458   - path + "export/调度消息分析" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
1459   - } catch (Exception e) {
1460   - // TODO: handle exception
1461   - e.printStackTrace();
1462   - }
1463   - }
1464   - return list;
1465   - }
1466   -
1467   - @Override
1468   - public Map<Integer, Integer> trustStatus(String lineStr) {
1469   - List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lineStr));
1470   -
1471   - Map<Integer, Integer> map = new HashMap<>();
1472   - return map;
1473   - }
1474   -
1475   - @Override
1476   - public Map<String, Object> realOutAdjust(Map<String, String> map) {
1477   - Map<String, Object> rs = new HashMap<>();
1478   - List<ScheduleRealInfo> ts = new ArrayList<>();
1479   - try {
1480   - // 维修上报
1481   - if (StringUtils.isNotBlank(map.get("reportTypes"))) {
1482   - Map<String, Object> param = new HashMap<String, Object>();
1483   - param.putAll(map);
1484   - rs = repairReport(param, false);
1485   - }
1486   -
1487   - Long id = Long.parseLong(map.get("id"));
1488   - String remarks = map.get("remarks"), fcsjActual = map.get("fcsjActual");
1489   -
1490   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1491   -
1492   - LineConfig config = lineConfigData.get(sch.getXlBm());
1493   - //小于线路开始运营时间,则默认跨过24点
1494   - if (fcsjActual.compareTo(config.getStartOpt()) < 0) {
1495   - sch.setRealExecDate(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME));
1496   - } else {
1497   - sch.setRealExecDate(sch.getScheduleDateStr());
1498   - }
1499   -
1500   - //日志记录
1501   - ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
1502   -
1503   - sch.setFcsjActualAll(fcsjActual);
1504   - sch.setRemarks(remarks);
1505   - sch.calcStatus();
1506   - //if(sch.isLate2()){
1507   - //取消应发未到标记
1508   - // sch.setLate2(false);
1509   - LateAdjustHandle.remove(sch);
1510   - //}
1511   -
1512   - dayOfSchedule.save(sch);
1513   -
1514   - ts.add(sch);
1515   -
1516   - rs.put("status", ResponseCode.SUCCESS);
1517   - rs.put("ts", ts);
1518   -
1519   - //通知页面刷新
1520   - sendUtils.refreshSch(ts);
1521   - } catch (Exception e) {
1522   - logger.error("", e);
1523   - rs.put("status", ResponseCode.ERROR);
1524   - }
1525   -
1526   - return rs;
1527   - }
1528   -
1529   - @Override
1530   - public Map<String, Object> revokeDestroy(Long id) {
1531   - Map<String, Object> rs = new HashMap<>();
1532   - try {
1533   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1534   - if (sch.getStatus() != -1) {
1535   - rs.put("status", ResponseCode.ERROR);
1536   - rs.put("msg", "未烂班,无法撤销!");
1537   - } else {
1538   - //日志记录
1539   - ScheduleModifyLogger.cxlb(sch);
1540   -
1541   - sch.setStatus(0);
1542   - sch.setRemarks("");//清空备注
1543   - sch.setJhlc(sch.getJhlcOrig());
1544   -
1545   - //入库
1546   - dayOfSchedule.save(sch);
1547   - //重新计算当前执行班次
1548   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1549   - rs.put("status", ResponseCode.SUCCESS);
1550   - rs.put("t", sch);
1551   -
1552   - }
1553   - } catch (Exception e) {
1554   - logger.error("", e);
1555   - rs.put("status", ResponseCode.ERROR);
1556   - }
1557   - return rs;
1558   - }
1559   -
1560   - @Override
1561   - public Map<String, Object> revokeRealOutgo(Long id) {
1562   - Map<String, Object> rs = new HashMap<>();
1563   - List<ScheduleRealInfo> ts = new ArrayList<>();
1564   -
1565   - try {
1566   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1567   - if (sch.getFcsjActual() == null) {
1568   - rs.put("status", ResponseCode.ERROR);
1569   - rs.put("msg", "无实发时间,无法撤销!");
1570   - } else {
1571   - //日志记录
1572   - ScheduleModifyLogger.cxsf(sch);
1573   -
1574   - sch.clearFcsjActual();
1575   - rs.put("status", ResponseCode.SUCCESS);
1576   -
1577   - ts.add(sch);
1578   - rs.put("ts", ts);
1579   -
1580   - dayOfSchedule.save(sch);
1581   -
1582   - }
1583   - } catch (Exception e) {
1584   - logger.error("", e);
1585   - rs.put("status", ResponseCode.ERROR);
1586   - }
1587   - return rs;
1588   - }
1589   -
1590   - @Override
1591   - public Map<String, Object> spaceAdjust(Long[] ids, Integer space) {
1592   -
1593   - List<ScheduleRealInfo> list = new ArrayList<>(), ts = new ArrayList<>(), tempTs = null;
1594   - Map<String, Object> rs = new HashMap<>(), tempRs = new HashMap<>();
1595   - try {
1596   - ScheduleRealInfo sch, next;
1597   - for (Long id : ids) {
1598   - sch = dayOfSchedule.get(id);
1599   - if (null != sch)
1600   - list.add(sch);
1601   - }
1602   -
1603   - int size = list.size();
1604   - if (size == 0) {
1605   - rs.put("status", ResponseCode.ERROR);
1606   - } else {
1607   - // 按发车时间排序
1608   - Collections.sort(list, new ScheduleComparator.FCSJ());
1609   -
1610   - // 以第一个实际发车/待发时间为起点,调整间隔
1611   - sch = list.get(0);
1612   - Long st = sch.getFcsjActualTime() == null ? sch.getDfsjT() : sch.getFcsjActualTime(), plus = space * 60 * 1000L;
1613   -
1614   - for (int i = 1; i < size; i++) {
1615   - st += plus;
1616   - sch = list.get(i);
1617   -
1618   - //调整待发
1619   - tempRs = outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "3", null);
1620   -
1621   - if (null != tempRs && tempRs.get("ts") != null)
1622   - tempTs = (List<ScheduleRealInfo>) tempRs.get("ts");
1623   -
1624   - ts.addAll(tempTs);
1625   - }
1626   -
1627   - rs.put("status", ResponseCode.SUCCESS);
1628   - //返回最后一个班次,页面会全量刷新
1629   - rs.put("ts", ts);
1630   - }
1631   -
1632   - } catch (Exception e) {
1633   - logger.error("", e);
1634   - rs.put("status", ResponseCode.ERROR);
1635   - }
1636   - return rs;
1637   - }
1638   -
1639   - private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
1640   -
1641   - @Transactional
1642   - @Override
1643   - public Map<String, Object> schInfoFineTune(Map<String, String> map) {
1644   - Map<String, Object> rs = new HashMap<>();
1645   - List<ScheduleRealInfo> ts = new ArrayList<>();
1646   - try {
1647   - // 维修上报
1648   - if (StringUtils.isNotBlank(map.get("reportTypes"))) {
1649   - Map<String, Object> param = new HashMap<String, Object>();
1650   - param.putAll(map);
1651   - rs = repairReport(param, false);
1652   - }
1653   -
1654   - Long id = Long.parseLong(map.get("id"));
1655   - String remarks = map.get("remarks");
1656   -
1657   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1658   -
1659   - if (null == sch) {
1660   - rs.put("status", ResponseCode.ERROR);
1661   - rs.put("msg", "不存在的班次!");
1662   - return rs;
1663   - }
1664   -
1665   - //日志记录器
1666   - FcxxwtLogger fLog = FcxxwtLogger.start(sch, remarks);
1667   -
1668   - String clZbh = map.get("clZbh");
1669   - String jsy = map.get("jsy");
1670   - if (!clZbh.equals(sch.getClZbh())
1671   - || !jsy.equals(sch.getjGh() + "/" + sch.getjName()))
1672   - schModifyLog.saveChangetochange(sch, clZbh, jsy);//为换人换车情况表写入数据
1673   - /**
1674   - * 换车
1675   - */
1676   - if (StringUtils.isNotEmpty(clZbh) && !clZbh.equals(sch.getClZbh())) {
1677   - //换车
1678   - if (!carExist(sch.getGsBm(), clZbh)) {
1679   - rs.put("status", ResponseCode.ERROR);
1680   - rs.put("msg", "车辆 " + clZbh + " 不存在!");
1681   - return rs;
1682   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
1683   - rs.put("status", ResponseCode.ERROR);
1684   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
1685   - return rs;
1686   - } else {
1687   - fLog.log("换车", sch.getClZbh(), clZbh);
1688   - dayOfSchedule.changeCar(sch, clZbh);
1689   - }
1690   - }
1691   -
1692   - if(StringUtils.isBlank(jsy) || "/".equals(StringUtils.trim(jsy))){
1693   - rs.put("status", ResponseCode.ERROR);
1694   - rs.put("msg", "无效的参数【驾驶员】");
1695   - return rs;
1696   - }
1697   -
1698   - /**
1699   - * 换驾驶员
1700   - */
1701   - if (StringUtils.isNotEmpty(jsy)) {
1702   - String jGh = jsy.split("/")[0];
1703   - String jName = getPersonName(sch.getGsBm(), jGh);
1704   - if (StringUtils.isEmpty(jName)) {
1705   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
1706   - rs.put("status", ResponseCode.ERROR);
1707   - return rs;
1708   - } else if (!jGh.equals(sch.getjGh())) {
1709   - fLog.log("换驾驶员", sch.getjGh() + "/" + sch.getjName(), jsy);
1710   - persoChange(sch, jGh);
1711   - }
1712   - }
1713   -
1714   - /**
1715   - * 换售票员
1716   - */
1717   - String spy = map.get("spy");
1718   - if (StringUtils.isNotEmpty(spy) && !StringUtils.trim(spy).equals("/")) {
1719   - String sGh = spy.split("/")[0];
1720   -
1721   - String sName = getPersonName(sch.getGsBm(), sGh);
1722   - if (StringUtils.isEmpty(sName)) {
1723   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
1724   - rs.put("status", ResponseCode.ERROR);
1725   - return rs;
1726   - } else if (!sGh.equals(sch.getsGh())) {
1727   - fLog.log("换售票员", sch.getsGh() + "/" + sch.getsName(), spy);
1728   - persoChangeSPY(sch, sGh);
1729   - }
1730   - } else if (StringUtils.isNotEmpty(sch.getsGh())) {
1731   - fLog.log("撤销售票员");
1732   - sch.setsGh("");
1733   - sch.setsName("");
1734   - }
1735   -
1736   - LineConfig config = lineConfigData.get(sch.getXlBm());
1737   - /**
1738   - * 调整实发
1739   - */
1740   - String fcsjActual = map.get("fcsjActual");
1741   - if (StringUtils.isNotBlank(fcsjActual)
1742   - && !fcsjActual.equals(sch.getFcsjActual())) {
1743   -
1744   - //long t = 0L;
1745   - //小于线路开始运营时间,则默认跨过24点
1746   - long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), fcsjActual, config);
1747   - /* if (fcsjActual.compareTo(config.getStartOpt()) < 0)
1748   - t = fmtyyyyMMddHHmm.parseMillis(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME) + fcsjActual);
1749   - else
1750   - t = fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + fcsjActual);*/
1751   -
1752   - fLog.log("调整实发时间", sch.getFcsjActual(), fcsjActual);
1753   - sch.setFcsjActualAll(t);
1754   - //取消应发未到标记
1755   - //if(sch.isLate2()){
1756   - // sch.setLate2(false);
1757   - LateAdjustHandle.remove(sch);
1758   - //}
1759   - } else if (StringUtils.isNotEmpty(sch.getFcsjActual()) && StringUtils.isEmpty(fcsjActual)) {
1760   - fLog.log("撤销实发时间", sch.getFcsjActual(), "");
1761   - //撤销实发
1762   - revokeRealOutgo(sch.getId());
1763   - }
1764   -
1765   - /**
1766   - * 调整实达
1767   - */
1768   - String zdsjActual = map.get("zdsjActual");
1769   - if (StringUtils.isNotBlank(zdsjActual)
1770   - && !zdsjActual.equals(sch.getZdsjActual())) {
1771   -
1772   - //调整实达
1773   - fLog.log("调整实达时间", sch.getZdsjActual(), zdsjActual);
1774   -
1775   - long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), zdsjActual, config);
1776   - sch.setZdsjActualAll(t);
1777   - //路牌下一班起点到达时间
1778   - ScheduleRealInfo next = dayOfSchedule.nextByLp2(sch);
1779   - if (null != next) {
1780   - next.setQdzArrDatesj(zdsjActual);
1781   - next.setLate2(false);
1782   - ts.add(next);
1783   - }
1784   -
1785   - //重新计算车辆执行班次
1786   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1787   - //取消应发未到标记
1788   - LateAdjustHandle.remove(sch);
1789   - } else if (StringUtils.isNotEmpty(sch.getZdsjActual()) && StringUtils.isEmpty(zdsjActual)) {
1790   - //清除实达时间
1791   - fLog.log("撤销实达时间", sch.getZdsjActual(), "");
1792   - sch.clearZdsjActual();
1793   - //清除路牌下一班起点到达时间
1794   - ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
1795   - if (null != next) {
1796   - next.setQdzArrDatesj(null);
1797   - ts.add(next);
1798   - }
1799   - //重新计算车辆执行班次
1800   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1801   - }
1802   -
1803   - /**
1804   - * 备注
1805   - */
1806   - sch.setRemarks(remarks);
1807   -
1808   - /**
1809   - * 烂班
1810   - */
1811   - if (map.get("status") != null
1812   - && Integer.parseInt(map.get("status").toString()) == -1) {
1813   - destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
1814   - fLog.log("烂班");
1815   - }
1816   -
1817   - /**
1818   - * 修改班次里程
1819   - */
1820   - String jhlc = map.get("jhlc");
1821   - if (StringUtils.isNotEmpty(jhlc)) {
1822   - double jhlcNum = Double.parseDouble(jhlc);
1823   - //烂班
1824   - if (jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout() && !sch.isDestroy()) {
1825   - destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
1826   - fLog.log("里程设置为0,自动烂班");
1827   - } else if (jhlcNum != sch.getJhlc()) {
1828   - fLog.log("设置里程", sch.getJhlc(), jhlcNum);
1829   - sch.setJhlc(jhlcNum);
1830   - //临加班次,实际计划一起改
1831   - if (sch.isSflj())
1832   - sch.setJhlcOrig(jhlcNum);
1833   - }
1834   - }
1835   -
1836   - /**
1837   - * 修改班次类型
1838   - */
1839   - String bcType = map.get("bcType");
1840   - if (StringUtils.isNotEmpty(bcType) && !bcType.equals(sch.getBcType())) {
1841   - fLog.log("修改班次类型", sch.getBcType(), bcType);
1842   - sch.setBcType(bcType);
1843   - }
1844   -
1845   - //重新计算班次状态
1846   - sch.calcStatus();
1847   - dayOfSchedule.save(sch);
1848   - //页面需要更新的班次信息
1849   - ts.add(sch);
1850   -
1851   - rs.put("status", ResponseCode.SUCCESS);
1852   - rs.put("ts", ts);
1853   -
1854   - //日志记录结束
1855   - fLog.end();
1856   - } catch (Exception e) {
1857   - logger.error("", e);
1858   - rs.put("status", ResponseCode.ERROR);
1859   - }
1860   - return rs;
1861   - }
1862   -
1863   - @Override
1864   - public Map<String, Object> outgoAdjustAll(String params) {
1865   - Map<String, Object> rs = new HashMap<>();
1866   - try {
1867   - JSONArray jsonArray = JSONArray.parseArray(params);
1868   -
1869   - ScheduleRealInfo schedule = null;
1870   - JSONObject jsonObj;
1871   - String dfsj;
1872   - long id;
1873   - for (int i = 0; i < jsonArray.size(); i++) {
1874   - jsonObj = jsonArray.getJSONObject(i);
1875   - dfsj = jsonObj.getString("t");
1876   - id = jsonObj.getLong("id");
1877   - schedule = dayOfSchedule.get(id);
1878   -
1879   - if (schedule != null)
1880   - outgoAdjust(id, null, dfsj, null, "2", null);
1881   - }
1882   -
1883   - rs.put("status", ResponseCode.SUCCESS);
1884   - //将更新的最后一个班次返回,页面会做全量刷新
1885   - rs.put("t", schedule);
1886   - } catch (Exception e) {
1887   - logger.error("", e);
1888   - rs.put("status", ResponseCode.ERROR);
1889   - }
1890   - return rs;
1891   - }
1892   -
1893   - @Override
1894   - public Map<String, Object> findRouteByLine(String lineCode) {
1895   - Map<String, Object> map = new HashMap<>();
1896   - //上行
1897   - Integer lineId = BasicData.lineId2CodeMap.inverse().get(lineCode);
1898   - map.put("line.id_eq", lineId);
1899   - map.put("directions_eq", 0);
1900   - List<Map<String, Object>> upList = sectionRouteService.getSectionRoute(map);
1901   -
1902   - //下行
1903   - map.put("directions_eq", 1);
1904   - List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map);
1905   -
1906   - Map<String, Object> rs = new HashMap<>();
1907   -
1908   - String upVectors = "", vec;
1909   - //拼接上行路段
1910   - for (Map<String, Object> temp : upList) {
1911   - vec = temp.get("sectionBsectionVector").toString();
1912   - upVectors += vec.subSequence(11, vec.length() - 2) + " ";
1913   - }
1914   -
1915   - //拼接下行路段
1916   - String downVectors = "";
1917   - for (Map<String, Object> temp : downList) {//LINESTRING(
1918   - vec = temp.get("sectionBsectionVector").toString();
1919   - downVectors += vec.subSequence(11, vec.length() - 2) + " ";
1920   - }
1921   -
1922   -
1923   - rs.put("up", upVectors);
1924   - //上行gcj
1925   - rs.put("up_gcj", BdToGcjString(upVectors));
1926   - rs.put("down", downVectors);
1927   - //下行gcj
1928   - rs.put("down_gcj", BdToGcjString(downVectors));
1929   - rs.put("lineId", lineId);
1930   -
1931   - return rs;
1932   - }
1933   -
1934   - /**
1935   - * @param @param bdStr
1936   - * @throws
1937   - * @Title: BdToGcjString
1938   - * @Description: TODO(将百度路由字符串 转 成GCJ 字符串)
1939   - */
1940   - public String BdToGcjString(String bdStr) {
1941   - String[] array = bdStr.split(","), subArray;
1942   - if (array.length == 0 || bdStr.length() < 2)
1943   - return "";
1944   -
1945   - String gcjStr = "";
1946   - TransGPS.Location location;
1947   - for (String crd : array) {
1948   - subArray = crd.split(" ");
1949   - if (subArray.length != 2)
1950   - continue;
1951   - location = TransGPS.bd_decrypt(TransGPS.LocationMake(Double.parseDouble(subArray[0]), Double.parseDouble(subArray[1])));
1952   -
1953   - gcjStr += location.getLng() + " " + location.getLat() + ",";
1954   - }
1955   -
1956   - return gcjStr.substring(0, gcjStr.length() - 1);
1957   - }
1958   -
1959   - public List<Map<String, String>> findLine(String line) {
1960   - List<Line> listLine = lineRepository.findLine("%" + line + "%");
1961   - List<Map<String, String>> list = new ArrayList<Map<String, String>>();
1962   - Map<String, String> map;
1963   - for (Line temp : listLine) {
1964   - if (temp != null) {
1965   - String xlName = temp.getName();
1966   - if (xlName.indexOf(line) != -1) {
1967   - map = new HashMap<String, String>();
1968   - map.put("id", temp.getLineCode());
1969   - map.put("text", xlName);
1970   - list.add(map);
1971   - }
1972   - }
1973   - }
1974   - return list;
1975   - }
1976   -
1977   - public List<Map<String, String>> findLpName(String lpName) {
1978   - List<GuideboardInfo> listLpName = guideboardInfoRepository.findLpName("%" + lpName + "%");
1979   - List<Map<String, String>> list = new ArrayList<Map<String, String>>();
1980   - Map<String, String> map;
1981   - for (GuideboardInfo temp : listLpName) {
1982   - if (temp != null) {
1983   - String lp = temp.getLpName();
1984   - if (lp.indexOf(lpName) != -1) {
1985   - map = new HashMap<String, String>();
1986   - map.put("id", lp);
1987   - map.put("text", lp);
1988   - list.add(map);
1989   - }
1990   - }
1991   - }
1992   - return list;
1993   - }
1994   -
1995   - @Override
1996   - public Map<String, Object> findKMBC2(String jName, String clZbh, String date) {
1997   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill3(jName, clZbh, date, "", "");
1998   -
1999   - DecimalFormat format = new DecimalFormat("0.00");
2000   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
2001   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
2002   - int jhbc = 0, cjbc = 0, ljbc = 0;
2003   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
2004   - float addMileage = 0l, remMileage = 0l;
2005   - String j_Name = "";
2006   - Map<String, Object> map = new HashMap<String, Object>();
2007   - for (ScheduleRealInfo scheduleRealInfo : list) {
2008   - if (scheduleRealInfo != null) {
2009   - j_Name = scheduleRealInfo.getjName();
2010   - //计划里程(主任务过滤掉临加班次),
2011   - //烂班里程(主任务烂班),
2012   - //临加里程(主任务临加),
2013   - //计划班次,烂班班次,增加班次
2014   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
2015   - if (scheduleRealInfo.isSflj()) {
2016   - addMileage += tempJhlc;
2017   - ljbc++;
2018   - } else {
2019   - jhlc += tempJhlc;
2020   - jhbc++;
2021   - if (scheduleRealInfo.getStatus() == -1) {
2022   - remMileage += tempJhlc;
2023   - cjbc++;
2024   - }
2025   - }
2026   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
2027   - //计算营运里程,空驶里程
2028   - if (childTaskPlans.isEmpty()) {
2029   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
2030   - || scheduleRealInfo.getBcType().equals("venting")) {
2031   - ksgl += tempJhlc;
2032   - } else {
2033   - yygl += tempJhlc;
2034   - }
2035   - } else {
2036   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2037   - while (it.hasNext()) {
2038   - ChildTaskPlan childTaskPlan = it.next();
2039   - if (childTaskPlan.getMileageType().equals("empty")) {
2040   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
2041   - } else {
2042   - yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
2043   - }
2044   - }
2045   - }
2046   - }
2047   - }
2048   - map.put("j_name", j_Name);
2049   - map.put("jhlc", format.format(jhlc));
2050   - map.put("remMileage", format.format(remMileage));
2051   - map.put("addMileage", format.format(addMileage));
2052   - map.put("yygl", format.format(yygl));
2053   - map.put("ksgl", format.format(ksgl));
2054   - map.put("realMileage", format.format(yygl + ksgl));
2055   - map.put("jhbc", jhbc);
2056   - map.put("cjbc", cjbc);
2057   - map.put("ljbc", ljbc);
2058   - map.put("sjbc", jhbc - cjbc + ljbc);
2059   - return map;
2060   - }
2061   -
2062   -
2063   - public Map<String, Object> findKMBC(String jGh, String clZbh,
2064   - String lpName, String date, String line) {
2065   - Map<String, Object> map = new HashMap<String, Object>();
2066   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2067   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2068   - for (int i = 0; i < list.size(); i++) {
2069   - ScheduleRealInfo s = list.get(i);
2070   - Set<ChildTaskPlan> cts = s.getcTasks();
2071   - if (cts != null && cts.size() > 0) {
2072   - lists.add(s);
2073   - } else {
2074   - if (s.getFcsjActual() != null && s.getZdsjActual() != null) {
2075   - lists.add(s);
2076   - }
2077   - }
2078   - }
2079   - map.put("jhbc", culateService.culateJhbc(list, ""));//计划班次
2080   - map.put("jhlc", Arith.add(culateService.culateJhgl(list),
2081   - culateService.culateJhJccgl(list))); //计划总里程
2082   - map.put("cjbc", culateService.culateLbbc(list));//烂班班次
2083   - map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
2084   - map.put("ljbc", culateService.culateLjbc(lists, ""));//临加班次
2085   - double ljgl = culateService.culateLjgl(lists);
2086   - map.put("addMileage", ljgl); //临加公里
2087   - map.put("sjbc", culateService.culateSjbc(lists, "") + culateService.culateLjbc(lists, ""));
2088   - double ksgl = culateService.culateKsgl(list);//子任务空驶公里
2089   - double jccgl = culateService.culateJccgl(lists);//空驶班次公里
2090   - map.put("ksgl", ksgl);//空驶公里
2091   - double sjgl = culateService.culateSjgl(lists);//实际营运公里
2092   - map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));//总公里
2093   - map.put("zkslc", Arith.add(ksgl, jccgl));
2094   - map.put("jcclc", jccgl);
2095   - map.put("yygl", Arith.add(sjgl, ljgl)); //总营运公里
2096   - return map;
2097   - }
2098   -
2099   - public Map<String, Object> findKMBC_mh_2(String jGh, String clZbh,
2100   - String lpName, String date, String line) {
2101   - Map<String, Object> map = new HashMap<String, Object>();
2102   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2103   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2104   - for (int i = 0; i < list.size(); i++) {
2105   - ScheduleRealInfo s = list.get(i);
2106   - if (s.isDestroy() && s.isReissue()) {
2107   - s.setRemark("");
2108   - s.setFcsjActual(s.getDfsj());
2109   - s.setZdsjActual(s.getZdsj());
2110   - s.setStatus(2);
2111   - s.setJhlc(s.getJhlcOrig());
2112   - }
2113   -
2114   - Set<ChildTaskPlan> cts = s.getcTasks();
2115   - if (cts != null && cts.size() > 0) {
2116   - lists.add(s);
2117   - } else {
2118   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2119   - lists.add(s);
2120   - }
2121   - }
2122   - }
2123   - double ksgl = culateService.culateKsgl(list);
2124   - double sjgl = culateService.culateSjgl(lists);
2125   - double jccgl = culateService.culateJccgl(lists);
2126   - double ljgl = culateService.culateLjgl(lists);
2127   -
2128   - map.put("jhlc", Arith.add(culateService.culateJhgl(list), culateService.culateJhJccgl(list))); //计划里程
2129   - map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
2130   - map.put("addMileage", ljgl); //临加公里
2131   - map.put("yygl", Arith.add(sjgl, ljgl)); //实际公里
2132   - map.put("ksgl", ksgl);//空驶公里
2133   - map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));
2134   -// map.put("realMileage", format.format(yygl + ksgl + jcclc+addMileage));
2135   - map.put("jhbc", culateService.culateJhbc(list, ""));
2136   - map.put("cjbc", culateService.culateLbbc(list));
2137   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2138   - map.put("sjbc", culateService.culateJhbc(lists, "") - culateService.culateLbbc(lists) + culateService.culateLjbc(lists, ""));
2139   - map.put("jcclc", jccgl);
2140   - map.put("zkslc", Arith.add(ksgl, jccgl));
2141   -// map.put("zkslc", format.format(ksgl + jcclc+addMileageJc));
2142   - return map;
2143   - }
2144   -
2145   -
2146   - @Override
2147   - public List<Map<String, Object>> accountPx(String line, String date,
2148   - String code, String xlName, String px) {
2149   -// List<Object[]> lsitObj = scheduleRealInfoRepository.accountPx(line, date, code,px);
2150   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2151   - if (!code.trim().equals("")) {
2152   - code = BasicData.deviceId2NbbmMap.inverse().get(code);
2153   - }
2154   - String fgs = "";
2155   - List<Line> lineList = lineRepository.findLineByCode(line);
2156   - if (lineList.size() > 0) {
2157   - Line l = lineList.get(0);
2158   - fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
2159   - }
2160   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
2161   - String sql = "SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,"
2162   - + " device_id FROM bsth_v_report_80 WHERE "
2163   - + " FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = '" + date + "' AND"
2164   - + " line_id = '" + line + "' and device_id like '%" + code + "%'";
2165   - Map<String, Object> map;
2166   - List<Object[]> lsitObj = jdbcTemplate.query(sql,
2167   - new RowMapper<Object[]>() {
2168   - @Override
2169   - public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException {
2170   - Object[] t = new Object[3];
2171   - t[0] = rs.getString("request_code");
2172   - t[1] = rs.getString("TIMESTAMP");
2173   - t[2] = rs.getString("device_id");
2174   - return t;
2175   - }
2176   - });
2177   - int i = 1;
2178   - for (Object[] obj : lsitObj) {
2179   - if (obj != null) {
2180   - map = new HashMap<String, Object>();
2181   - map.put("num", i++);
2182   - map.put("xlName", xlName);
2183   - if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
2184   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
2185   - try {
2186   - carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
2187   - } catch (Exception e) {
2188   - // TODO Auto-generated catch block
2189   - e.printStackTrace();
2190   - }
2191   - if (carDeviceList.size() > 0) {
2192   - map.put("clZbh", carDeviceList.get(0).getClZbh());
2193   -
2194   - } else {
2195   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2196   - }
2197   - } else {
2198   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2199   -
2200   - }
2201   - map.put("company", fgs);
2202   - map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
2203   - map.put("requestTime", obj[1]);
2204   - listMap.add(map);
2205   - }
2206   - }
2207   - if (listMap.size() > 1) {
2208   - if (px.equals("asc")) {
2209   - Collections.sort(listMap, new AccountMap());
2210   - } else {
2211   - Collections.sort(listMap, new AccountMap2());
2212   - }
2213   - }
2214   - return listMap;
2215   - }
2216   -
2217   - @Override
2218   - public List<Map<String, Object>> account(String line, String date,
2219   - String code, String xlName, String type) {
2220   - if (!code.trim().equals("")) {
2221   - code = BasicData.deviceId2NbbmMap.inverse().get(code);
2222   - }
2223   - String fgs = "";
2224   - List<Line> lineList = lineRepository.findLineByCode(line);
2225   - if (lineList.size() > 0) {
2226   - Line l = lineList.get(0);
2227   - fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
2228   - }
2229   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2230   - List<Object[]> lsitObj = scheduleRealInfoRepository.account(line, date, code);
2231   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
2232   - Map<String, Object> map;
2233   - int i = 1;
2234   - for (Object[] obj : lsitObj) {
2235   - if (obj != null) {
2236   - map = new HashMap<String, Object>();
2237   - map.put("num", i++);
2238   - map.put("xlName", xlName);
2239   - if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
2240   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
2241   - try {
2242   - carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
2243   - } catch (Exception e) {
2244   - // TODO Auto-generated catch block
2245   - e.printStackTrace();
2246   - }
2247   - if (carDeviceList.size() > 0) {
2248   - map.put("clZbh", carDeviceList.get(0).getClZbh());
2249   -
2250   - } else {
2251   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2252   - }
2253   - } else {
2254   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2255   -
2256   - }
2257   - map.put("company", fgs);
2258   - map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
2259   - map.put("requestTime", obj[1]);
2260   - listMap.add(map);
2261   - }
2262   - }
2263   -
2264   - if (type != null && type.length() != 0 && type.equals("export")) {
2265   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
2266   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
2267   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
2268   - Map<String, Object> m = new HashMap<String, Object>();
2269   - ReportUtils ee = new ReportUtils();
2270   - Map<String, Object> typeMap = new HashMap<String, Object>();
2271   - typeMap.put("0xA1", "请求恢复运营");
2272   - typeMap.put("0xA2", "申请调档");
2273   - typeMap.put("0xA3", "出场请求");
2274   - typeMap.put("0xA5", "进场请求");
2275   - typeMap.put("0xA7", "加油请求");
2276   - typeMap.put("0x50", "车辆故障");
2277   - typeMap.put("0x70", "路阻报告");
2278   - typeMap.put("0x60", "事故报告");
2279   - typeMap.put("0x11", "扣证纠纷");
2280   - typeMap.put("0x12", "报警");
2281   - for (Map<String, Object> map1 : listMap) {
2282   - map1.put("requestText", typeMap.get(map1.get("requestType")));
2283   - }
2284   - try {
2285   - listI.add(listMap.iterator());
2286   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
2287   - ee.excelReplace(listI, new Object[]{m}, path + "mould/account.xls",
2288   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
2289   - + "-" + xlName + "-驾驶员请求台账.xls");
2290   - } catch (Exception e) {
2291   - // TODO: handle exception
2292   - e.printStackTrace();
2293   - }
2294   - }
2295   -
2296   - return listMap;
2297   - }
2298   -
2299   - @Override
2300   - public List<SchEditInfoDto> correctForm(String line, String date, String endDate,
2301   - String lpName, String code, String type, String changType) {
2302   -
2303   -// var types = {'DFTZ': '待发调整', 'FCXXWT':'发车信息微调', 'JHLB': '计划烂班', 'CXLB': '撤销烂班',
2304   -// 'CXZX': '撤销执行', 'CXSF': '撤销实发', 'SFTZ': '实发调整', 'TZRC': '调整人车'};
2305   - Map<String, Object> map = new HashMap<String, Object>();
2306   - map.put("DFTZ", "待发调整");
2307   - map.put("FCXXWT", "发车信息微调");
2308   - map.put("JHLB", "计划烂班");
2309   - map.put("CXLB", "撤销烂班");
2310   - map.put("CXZX", "撤销执行");
2311   - map.put("CXSF", "撤销实发");
2312   - map.put("SFTZ", "实发调整");
2313   - map.put("TZRC", "调整人车");
2314   -
2315   - SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm");
2316   - SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2317   - String cont = "";
2318   - cont = " and xl_bm ='" + line + "'";
2319   - if (!lpName.equals("")) {
2320   - cont += " and lp_name = '" + lpName + "'";
2321   - }
2322   - if (!code.equals("")) {
2323   - cont += " and cl_zbh ='" + code + "'";
2324   - }
2325   - String sql = "select t1.*, t2.real_exec_date,"
2326   - + "t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,"
2327   - + "t2.xl_dir,t2.real_exec_date from (select * from "
2328   - + "logger_sch_modify where rq BETWEEN ? and ? and line_code=? )"
2329   - + " t1 INNER JOIN bsth_c_s_sp_info_real t2 on "
2330   - + "t1.sch_id=t2.id where 1=1 " + cont;
2331   -
2332   - List<SchEditInfoDto> list = jdbcTemplate.query(sql,
2333   - new BeanPropertyRowMapper(SchEditInfoDto.class), date, endDate, line);
2334   - List<SchEditInfoDto> lists = new ArrayList<SchEditInfoDto>();
2335   - for (int i = 0; i < list.size(); i++) {
2336   - Long fcsjs = 0l;
2337   - Long updsj = 0l;
2338   - SchEditInfoDto t = list.get(i);
2339   - if (map.get(t.getType()) != null) {
2340   -
2341   - if (changType.equals("")) {
2342   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2343   - } else {
2344   - String fcsj = "";
2345   - String updtime = "";
2346   - try {
2347   - fcsj = sdf1.format(sdf1.parse(t.getFcsj()));
2348   - updtime = sdf1.format(sdf1.parse(t.getTimeStr()));
2349   - fcsjs = sdf2.parse(t.getRealExecDate() + " " + fcsj).getTime();
2350   - updsj = sdf2.parse(t.getRq() + " " + updtime).getTime();
2351   - } catch (ParseException e) {
2352   - // TODO Auto-generated catch block
2353   - e.printStackTrace();
2354   - }
2355   - if (changType.equals("1")) {
2356   - if (fcsjs > updsj) {
2357   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2358   - } else {
2359   - t.setType2("");
2360   - }
2361   - } else if (changType.equals("2")) {
2362   - if (fcsjs < updsj) {
2363   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2364   - } else {
2365   - t.setType2("");
2366   - }
2367   - }
2368   - }
2369   - } else {
2370   - t.setType2("");
2371   - }
2372   - boolean fage = true;
2373   - for (int j = 0; j < lists.size(); j++) {
2374   - SchEditInfoDto s = lists.get(j);
2375   - if (s.getSchId() == t.getSchId()) {
2376   - s.setType2(s.getType2() + " " + t.getType2());
2377   - fage = false;
2378   - }
2379   - }
2380   -
2381   - if (fage) {
2382   - if (changType.equals("")) {
2383   - lists.add(t);
2384   - } else {
2385   - if (changType.equals("1")) {
2386   - if (fcsjs > updsj) {
2387   - lists.add(t);
2388   - }
2389   - } else if (changType.equals("2")) {
2390   - if (fcsjs < updsj) {
2391   - lists.add(t);
2392   - }
2393   - }
2394   - }
2395   - }
2396   - }
2397   -
2398   - if (type != null && type.length() != 0 && type.equals("export")) {
2399   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
2400   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
2401   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
2402   - Map<String, Object> m = new HashMap<String, Object>();
2403   - m.put("dates", date);
2404   - ReportUtils ee = new ReportUtils();
2405   - List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
2406   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2407   - for (SchEditInfoDto d : lists) {
2408   - Map<String, Object> tempMap = new HashMap<String, Object>();
2409   - tempMap.put("lpName", d.getLpName());
2410   - tempMap.put("rq", d.getRq());
2411   - tempMap.put("clZbh", d.getClZbh());
2412   - tempMap.put("jName", d.getjName() + "/" + d.getjGh());
2413   - tempMap.put("fcsj", d.getFcsj());
2414   - tempMap.put("type", d.getType2());
2415   - tempList.add(tempMap);
2416   - }
2417   - try {
2418   - String dateTime = sdfSimple.format(sdfMonth.parse(date));
2419   - if(!endDate.equals(date)){
2420   - dateTime += "-" + sdfSimple.format(sdfMonth.parse(endDate));
2421   - }
2422   - String lineName = BasicData.lineCode2NameMap.get(line);
2423   - listI.add(tempList.iterator());
2424   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
2425   - ee.excelReplace(listI, new Object[]{m}, path + "mould/correctForm.xls",
2426   - path + "export/" + dateTime + "-" + lineName + "-修正报表.xls");
2427   - } catch (Exception e) {
2428   - // TODO: handle exception
2429   - e.printStackTrace();
2430   - }
2431   -// Map<String, Object> maps = tempList.get(tempList.size() - 1);
2432   - }
2433   - return lists;
2434   - }
2435   -
2436   - @Override
2437   - public List<ScheduleRealInfo> queryListWaybill(String jGh, String clZbh,
2438   - String lpName, String date, String line) {
2439   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
2440   - List<ScheduleRealInfo> list = null;
2441   - list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2442   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2443   - String minfcsj = "02:00";
2444   - List<Line> lineList = lineRepository.findLineByCode(line);
2445   - if (lineList.size() > 0) {
2446   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
2447   - + " id = ("
2448   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
2449   - + ")";
2450   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
2451   - }
2452   - String[] minSjs = minfcsj.split(":");
2453   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
2454   -
2455   - for (int i = 0; i < list.size(); i++) {
2456   - ScheduleRealInfo s = list.get(i);
2457   - if (s.getBcType().equals("out")) {
2458   - s.setRemark("1");
2459   - } else if (s.getBcType().equals("in")) {
2460   - s.setRemark("3");
2461   - } else {
2462   - s.setRemark("2");
2463   - }
2464   - String[] fcsj = s.getFcsj().split(":");
2465   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
2466   -
2467   - Long fscjT = 0L;
2468   - if (fcsjL < minSj) {
2469   - Calendar calendar = new GregorianCalendar();
2470   - calendar.setTime(s.getScheduleDate());
2471   - calendar.add(calendar.DATE, 1);
2472   - s.setScheduleDate(calendar.getTime());
2473   - try {
2474   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
2475   - } catch (ParseException e) {
2476   - // TODO Auto-generated catch block
2477   - e.printStackTrace();
2478   - }
2479   -
2480   - } else {
2481   - try {
2482   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
2483   - } catch (ParseException e) {
2484   - // TODO Auto-generated catch block
2485   - e.printStackTrace();
2486   - }
2487   - ;
2488   - }
2489   - s.setFcsjT(fscjT);
2490   - }
2491   - Collections.sort(list, new compareFcsjType());
2492   - for (int i = 0; i < list.size(); i++) {
2493   - ScheduleRealInfo s = list.get(i);
2494   - s.setAdjustExps(i + 1 + "");
2495   - String remarks = "";
2496   - if (s.getRemarks() != null) {
2497   - remarks += s.getRemarks();
2498   - }
2499   -
2500   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
2501   - if (!childTaskPlans.isEmpty()) {
2502   - s.setFcsjActual("");
2503   - s.setZdsjActual("");
2504   - s.setJhlc(0.0);
2505   - }
2506   -
2507   - if (s.isDestroy()) {
2508   - s.setFcsjActual("");
2509   - s.setZdsjActual("");
2510   - s.setJhlc(0.0);
2511   - remarks += "(烂班)";
2512   - s.setRemarks(remarks);
2513   - }
2514   -
2515   - listSchedule.add(s);
2516   - //计算营运里程,空驶里程
2517   - if (!childTaskPlans.isEmpty()) {
2518   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2519   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
2520   - Collections.sort(listit, new ComparableChild());
2521   - for (int j = 0; j < listit.size(); j++) {
2522   - ScheduleRealInfo t = new ScheduleRealInfo();
2523   - ChildTaskPlan childTaskPlan = listit.get(j);
2524   - if (childTaskPlan.getCcId() == null) {
2525   - if (childTaskPlan.isDestroy()) {
2526   - t.setFcsjActual("");
2527   - t.setZdsjActual("");
2528   - t.setJhlc(0.0);
2529   - } else {
2530   - t.setFcsjActual(childTaskPlan.getStartDate());
2531   - t.setZdsjActual(childTaskPlan.getEndDate());
2532   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
2533   - }
2534   - t.setFcsj(childTaskPlan.getStartDate());
2535   - t.setZdsj(childTaskPlan.getEndDate());
2536   - t.setQdzName(childTaskPlan.getStartStationName());
2537   - t.setZdzName(childTaskPlan.getEndStationName());
2538   - t.setRemarks(childTaskPlan.getRemarks());
2539   - t.setAdjustExps("子");
2540   - listSchedule.add(t);
2541   - }
2542   - }
2543   - }
2544   - }
2545   -
2546   - return listSchedule;
2547   - }
2548   -
2549   - @Override
2550   - public List<ScheduleRealInfo> queryListWaybill2(String jName, String clZbh,
2551   - String lpName, String date, String line) {
2552   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
2553   - List<ScheduleRealInfo> list = null;
2554   - list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
2555   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2556   - String minfcsj = "02:00";
2557   - List<Line> lineList = lineRepository.findLineByCode(line);
2558   - if (lineList.size() > 0) {
2559   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
2560   - + " id = ("
2561   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
2562   - + ")";
2563   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
2564   - }
2565   - String[] minSjs = minfcsj.split(":");
2566   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
2567   -
2568   - for (int i = 0; i < list.size(); i++) {
2569   - ScheduleRealInfo s = list.get(i);
2570   - String[] fcsj = s.getFcsj().split(":");
2571   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
2572   -
2573   - Long fscjT = 0L;
2574   - if (fcsjL < minSj) {
2575   - Calendar calendar = new GregorianCalendar();
2576   - calendar.setTime(s.getScheduleDate());
2577   - calendar.add(calendar.DATE, 1);
2578   - s.setScheduleDate(calendar.getTime());
2579   - try {
2580   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
2581   - } catch (ParseException e) {
2582   - // TODO Auto-generated catch block
2583   - e.printStackTrace();
2584   - }
2585   -
2586   - } else {
2587   - try {
2588   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
2589   - } catch (ParseException e) {
2590   - // TODO Auto-generated catch block
2591   - e.printStackTrace();
2592   - }
2593   - ;
2594   - }
2595   - s.setFcsjT(fscjT);
2596   - }
2597   - Collections.sort(list, new ComparableReal());
2598   - for (int i = 0; i < list.size(); i++) {
2599   - ScheduleRealInfo s = list.get(i);
2600   - s.setAdjustExps(i + 1 + "");
2601   - String remarks = "";
2602   - if (s.getRemarks() != null) {
2603   - remarks += s.getRemarks();
2604   - }
2605   -
2606   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
2607   - if (!childTaskPlans.isEmpty()) {
2608   - s.setFcsjActual("");
2609   - s.setZdsjActual("");
2610   - s.setJhlc(0.0);
2611   - }
2612   -
2613   - if (s.isDestroy()) {
2614   - if (s.isReissue()) {
2615   - s.setFcsjActual(s.getDfsj());
2616   - s.setZdsjActual(s.getZdsj());
2617   - s.setRemarks("");
2618   - s.setStatus(2);
2619   - s.setJhlc(s.getJhlcOrig());
2620   - } else {
2621   - s.setFcsjActual("");
2622   - s.setZdsjActual("");
2623   - s.setJhlc(0.0);
2624   - remarks += "(烂班)";
2625   - s.setRemarks(remarks);
2626   - }
2627   - }
2628   -
2629   - listSchedule.add(s);
2630   - //计算营运里程,空驶里程
2631   - if (!childTaskPlans.isEmpty()) {
2632   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2633   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
2634   - Collections.sort(listit, new ComparableChild());
2635   - for (int j = 0; j < listit.size(); j++) {
2636   - ScheduleRealInfo t = new ScheduleRealInfo();
2637   - ChildTaskPlan childTaskPlan = listit.get(j);
2638   - if (childTaskPlan.isDestroy()) {
2639   - t.setFcsjActual("");
2640   - t.setZdsjActual("");
2641   - t.setJhlc(0.0);
2642   - } else {
2643   - t.setFcsjActual(childTaskPlan.getStartDate());
2644   - t.setZdsjActual(childTaskPlan.getEndDate());
2645   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
2646   - }
2647   - t.setQdzName(childTaskPlan.getStartStationName());
2648   - t.setZdzName(childTaskPlan.getEndStationName());
2649   - t.setRemarks(childTaskPlan.getRemarks());
2650   - t.setAdjustExps("子");
2651   - listSchedule.add(t);
2652   - }
2653   - }
2654   - }
2655   -
2656   - return listSchedule;
2657   - }
2658   -
2659   - @Override
2660   - public Map<String, Object> removeChildTask(Long taskId) {
2661   - Map<String, Object> rs = new HashMap<>();
2662   - ChildTaskPlan chTask = cTaskPlanRepository.findById(taskId).get();
2663   -
2664   - ScheduleRealInfo sch = dayOfSchedule.get(chTask.getSchedule().getId());
2665   - try {
2666   -
2667   - sch.getcTasks().remove(chTask);
2668   - scheduleRealInfoRepository.save(sch);
2669   - rs.put("status", ResponseCode.SUCCESS);
2670   - } catch (Exception e) {
2671   - logger.error("", e);
2672   - rs.put("status", ResponseCode.ERROR);
2673   - }
2674   - return rs;
2675   - }
2676   -
2677   - @Override
2678   - public List<Map<String, Object>> statisticsDaily(String line, String date,
2679   - String xlName, String type) {
2680   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2681   - List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
2682   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2683   - for (int i = 0; i < list_s.size(); i++) {
2684   - ScheduleRealInfo s = list_s.get(i);
2685   - Set<ChildTaskPlan> cts = s.getcTasks();
2686   - if (cts != null && cts.size() > 0) {
2687   - lists.add(s);
2688   - } else {
2689   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2690   - lists.add(s);
2691   - }
2692   - }
2693   - }
2694   - Map<String, Object> map = new HashMap<String, Object>();
2695   - map.put("xlName", xlName);
2696   - double jhlc = culateService.culateJhgl(list_s);
2697   - map.put("jhlc", jhlc);
2698   - map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
2699   - double lbgl = culateService.culateLbgl(list_s);
2700   - map.put("ssgl", lbgl);
2701   - map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2702   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
2703   - map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2704   - map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2705   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
2706   - map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2707   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2708   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2709   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2710   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2711   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2712   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2713   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2714   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2715   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2716   - map.put("ssbc", culateService.culateLbbc(list_s));
2717   - double ljgl = culateService.culateLjgl(lists);
2718   - map.put("ljgl", ljgl);
2719   - map.put("jhbc", culateService.culateJhbc(list_s, ""));
2720   - map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
2721   - map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
2722   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2723   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2724   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2725   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2726   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2727   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2728   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2729   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2730   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2731   - map.put("dtbc", 0);
2732   - map.put("dtbc_m", 0);
2733   - map.put("dtbc_a", 0);
2734   - List<CalcInterval> intervalList=calcIntervalRepository.selectByDateAndLine(line, date,"");
2735   - if(intervalList.size()>0){
2736   - CalcInterval c=intervalList.get(0);
2737   - map.put("djg",c.getDjgAll());
2738   - map.put("djg_m", c.getDjgZgf());
2739   - map.put("djg_a", c.getDjgWgf());
2740   - map.put("djg_time", c.getDjgTime());
2741   - }else{
2742   - Map<String, Object> m = culateService.culateDjg(list_s, line);
2743   - map.put("djg", m.get("djgcsq"));
2744   - map.put("djg_m", m.get("djgcsz"));
2745   - map.put("djg_a", m.get("djgcsw"));
2746   - map.put("djg_time", m.get("djgsj"));
2747   - }
2748   -
2749   - map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
2750   - lMap.add(map);
2751   -
2752   - if (date.length() == 10) {
2753   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
2754   - String dbdp = "";
2755   - try {
2756   - for (int i = 0; i < list.size(); i++) {
2757   - DutyEmployee t = list.get(i);
2758   - if (dbdp.indexOf(t.getuName()) == -1) {
2759   - if (!(dbdp.length() > 0)) {
2760   - dbdp = t.getuName();
2761   - } else {
2762   - dbdp += "," + t.getuName();
2763   - }
2764   - }
2765   - }
2766   - } catch (Exception e) {
2767   - // TODO: handle exception
2768   - e.printStackTrace();
2769   - }
2770   - map.put("dbdp", dbdp);
2771   - }
2772   -
2773   - return lMap;
2774   - }
2775   -
2776   - @Override
2777   - public List<Map<String, Object>> statisticsDaily_mh_2(String line, String date,
2778   - String xlName, String type) {
2779   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2780   - List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
2781   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2782   - for (int i = 0; i < list_s.size(); i++) {
2783   - ScheduleRealInfo s = list_s.get(i);
2784   - if (s.isDestroy() && s.isReissue()) {
2785   - s.setRemark("");
2786   - s.setFcsjActual(s.getDfsj());
2787   - s.setZdsjActual(s.getZdsj());
2788   - s.setStatus(2);
2789   - s.setJhlc(s.getJhlcOrig());
2790   - }
2791   -
2792   - Set<ChildTaskPlan> cts = s.getcTasks();
2793   - if (cts != null && cts.size() > 0) {
2794   - lists.add(s);
2795   - } else {
2796   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2797   - lists.add(s);
2798   - }
2799   - }
2800   - }
2801   - Map<String, Object> map = new HashMap<String, Object>();
2802   - map.put("xlName", xlName);
2803   - double jhlc = culateService.culateJhgl(list_s);
2804   - map.put("jhlc", jhlc);
2805   - map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
2806   - double lbgl = culateService.culateLbgl(list_s);
2807   - map.put("ssgl", lbgl);
2808   - map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2809   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
2810   - map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2811   - map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2812   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
2813   - map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2814   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2815   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2816   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2817   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2818   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2819   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2820   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2821   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2822   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2823   - map.put("ssbc", culateService.culateLbbc(list_s));
2824   - double ljgl = culateService.culateLjgl(lists);
2825   - map.put("ljgl", ljgl);
2826   - map.put("jhbc", culateService.culateJhbc(list_s, ""));
2827   - map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
2828   - map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
2829   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2830   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2831   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2832   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2833   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2834   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2835   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2836   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2837   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2838   - map.put("dtbc", 0);
2839   - map.put("dtbc_m", 0);
2840   - map.put("dtbc_a", 0);
2841   - map.put("djg", 0);
2842   - map.put("djg_m", 0);
2843   - map.put("djg_a", 0);
2844   - map.put("djg_time", 0);
2845   - map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
2846   - lMap.add(map);
2847   - return lMap;
2848   - }
2849   -
2850   - public final Map<String, Object> staticTj(List<ScheduleRealInfo> list,Map<String, Object> m) {
2851   -
2852   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2853   - for (int i = 0; i < list.size(); i++) {
2854   - ScheduleRealInfo s = list.get(i);
2855   - Set<ChildTaskPlan> cts = s.getcTasks();
2856   - if (cts != null && cts.size() > 0) {
2857   - lists.add(s);
2858   - } else {
2859   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2860   - lists.add(s);
2861   - }
2862   - }
2863   - }
2864   - Map<String, Object> map = new HashMap<String, Object>();
2865   - if (list.size() > 0) {
2866   - map.put("fgsBm", list.get(0).getFgsBm());
2867   - map.put("xlBm", list.get(0).getXlBm());
2868   - map.put("xlName", list.get(0).getXlName());
2869   - map.put("fgsName", list.get(0).getFgsName());
2870   - try {
2871   - map.put("xlNamePy", PinyinHelper.convertToPinyinString(list.get(0).getFgsBm()+list.get(0).getXlName(), "", PinyinFormat.WITHOUT_TONE));
2872   - } catch (PinyinException e) {
2873   - // TODO Auto-generated catch block
2874   - e.printStackTrace();
2875   - }
2876   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
2877   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
2878   - map.put("jhlc", jhyygl);
2879   - map.put("jcclc", jhjcclc);
2880   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
2881   - double ljks=culateService.culateLjksgl(lists);
2882   - map.put("ljks", ljks);
2883   - double ljgl = culateService.culateLjgl(lists);
2884   - double sjyygl = culateService.culateSjgl(lists);
2885   - double zyygl = Arith.add(sjyygl, ljgl);
2886   -
2887   - double sjjccgl = culateService.culateJccgl(lists);
2888   - double sjksgl = culateService.culateKsgl(lists);
2889   - double zksgl = Arith.add(sjjccgl, sjksgl);
2890   - map.put("sjzgl", Arith.add(zyygl, zksgl));
2891   - map.put("sjgl", zyygl);
2892   - map.put("sjksgl", zksgl);
2893   - double ssgl = culateService.culateLbgl(list);
2894   - map.put("ssgl", ssgl);
2895   -
2896   - //计划+临加-少驶=实驶
2897   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
2898   - if (jl == zyygl) {
2899   - map.put("zt", 0);
2900   - } else {
2901   - map.put("zt", 1);
2902   - }
2903   -
2904   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
2905   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
2906   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
2907   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
2908   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
2909   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
2910   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
2911   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
2912   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
2913   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
2914   - double ssgl_pc = culateService.culateCJLC(list, "配车");
2915   - double ssgl_by = culateService.culateCJLC(list, "保养");
2916   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
2917   - double ssgl_qt = culateService.culateCJLC(list, "其他");
2918   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2919   - map.put("ssbc", culateService.culateLbbc(list));
2920   - map.put("ljgl", ljgl);
2921   - map.put("jhbc", culateService.culateJhbc(list, ""));
2922   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
2923   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
2924   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2925   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2926   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2927   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2928   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2929   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2930   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2931   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2932   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2933   - map.put("dtbc", 0);
2934   - map.put("dtbc_m", 0);
2935   - map.put("dtbc_a", 0);
2936   - if(m.get("xl")==null){
2937   - Map<String, Object> m_ = culateService.culateDjg(lists, list.get(0).getXlBm());
2938   - map.put("djg", m_.get("djgcsq"));
2939   - map.put("djg_m", m_.get("djgcsz"));
2940   - map.put("djg_a", m_.get("djgcsw"));
2941   - map.put("djg_time", m_.get("djgsj"));
2942   - }else{
2943   - map.put("djg", m.get("djgAll")==null?"0":m.get("djgAll"));
2944   - map.put("djg_m", m.get("djgZgf")==null?"0":m.get("djgZgf"));
2945   - map.put("djg_a", m.get("djgWgf")==null?"0":m.get("djgWgf"));
2946   - map.put("djg_time", m.get("djgTime")==null?"0":m.get("djgTime"));
2947   - }
2948   - }
2949   - return map;
2950   - }
2951   -
2952   - @Override
2953   - public List<Map<String, Object>> statisticsDailyTj(String gsdm, String fgsdm, String line, String date, String date2,
2954   - String xlName, String type,String nature) {
2955   - List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
2956   - List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
2957   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2958   - List<Object[]> listInterval=new ArrayList<Object[]>();
2959   - line = line.trim();
2960   - if (line.equals("")) {
2961   - //查询所有线路
2962   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
2963   - listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
2964   - } else {
2965   - //查询单条线路
2966   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
2967   - listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
2968   - }
2969   - Map<String, Map<String,Object>> mapInterval=new HashMap<String, Map<String,Object>>();
2970   - for (int i = 0; i < listInterval.size(); i++) {
2971   - Object[] interval=listInterval.get(i);
2972   - String gs=interval[0].toString();
2973   - String fgs=interval[1].toString();
2974   - String xl=interval[2].toString();
2975   - Map<String, Object> m=new HashMap<String,Object>();
2976   - m.put("gs", gs);
2977   - m.put("fgs", fgs);
2978   - m.put("xl", xl);
2979   - m.put("djgAll", interval[3]);
2980   - m.put("djgZgf", interval[6]);
2981   - m.put("djgWgf", interval[7]);
2982   - m.put("djgTime", interval[8]);
2983   - mapInterval.put(gs+"-"+fgs+"-"+xl, m);
2984   - }
2985   - Map<String, Boolean> lineMap=lineService.lineNature();
2986   - List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
2987   - for (int i = 0; i < listAll.size(); i++) {
2988   - ScheduleRealInfo s=listAll.get(i);
2989   - if (nature.equals("0")) {
2990   - list.add(s);
2991   - }else if(nature.equals("1")){
2992   - if(lineMap.get(s.getXlBm())){
2993   - list.add(s);
2994   - }
2995   - }else{
2996   - if(!lineMap.get(s.getXlBm())){
2997   - list.add(s);
2998   - }
2999   - }
3000   - }
3001   - for (int i = 0; i < list.size(); i++) {
3002   - ScheduleRealInfo s = list.get(i);
3003   - Set<ChildTaskPlan> cts = s.getcTasks();
3004   - if (cts != null && cts.size() > 0) {
3005   - list_s.add(s);
3006   - } else {
3007   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
3008   - list_s.add(s);
3009   - }
3010   - }
3011   - }
3012   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
3013   - for (int i = 0; i < list.size(); i++) {
3014   - if (i < list.size() - 1) {
3015   - if ((list.get(i+1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
3016   - lists.add(list.get(i));
3017   - } else {
3018   - lists.add(list.get(i));
3019   - Map<String, Object> mm=new HashMap<String,Object>();
3020   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3021   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3022   - }
3023   - Map<String, Object> map = staticTj(lists,mm);
3024   - lMap.add(map);
3025   - lists = new ArrayList<ScheduleRealInfo>();
3026   - }
3027   - } else {
3028   - if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
3029   - lists.add(list.get(i));
3030   - Map<String, Object> mm=new HashMap<String,Object>();
3031   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3032   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3033   - }
3034   - Map<String, Object> map = staticTj(lists,mm);
3035   - lMap.add(map);
3036   - } else {
3037   - lists = new ArrayList<ScheduleRealInfo>();
3038   - lists.add(list.get(i));
3039   - Map<String, Object> mm=new HashMap<String,Object>();
3040   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3041   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3042   - }
3043   - Map<String, Object> map = staticTj(lists,mm);
3044   - lMap.add(map);
3045   - }
3046   - }
3047   - }
3048   - /*if(!line.equals("")){
3049   - List<Line> l=lineRepository.findLineByCode(line);
3050   - if(l.size()>0)
3051   - lMap.get(0).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
3052   - }*/
3053   - Collections.sort(lMap, new AccountXlbm());
3054   - Map<String, Object> map = new HashMap<String, Object>();
3055   - map.put("xlName", "合计");
3056   - map.put("fgsName", "");
3057   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
3058   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
3059   - map.put("jhlc", jhyygl);
3060   - map.put("jcclc", jhjcclc);
3061   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
3062   -
3063   - double ljgl = culateService.culateLjgl(list_s);
3064   - double sjyygl = culateService.culateSjgl(list_s);
3065   - double zyygl = Arith.add(sjyygl, ljgl);
3066   - double ljks=culateService.culateLjksgl(list_s);
3067   - map.put("ljks", ljks);
3068   - double sjjccgl = culateService.culateJccgl(list_s);
3069   - double sjksgl = culateService.culateKsgl(list_s);
3070   - double zksgl = Arith.add(sjjccgl, sjksgl);
3071   - map.put("sjzgl", Arith.add(zyygl, zksgl));
3072   - map.put("sjgl", zyygl);
3073   - map.put("sjksgl", zksgl);
3074   -
3075   - double ssgl = culateService.culateLbgl(list);
3076   - map.put("ssgl", ssgl);
3077   - //计划+临加-少驶=实驶
3078   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
3079   - if (jl == zyygl) {
3080   - map.put("zt", 0);
3081   - } else {
3082   - map.put("zt", 1);
3083   - }
3084   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
3085   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
3086   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
3087   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
3088   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
3089   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
3090   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
3091   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
3092   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
3093   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
3094   - double ssgl_pc = culateService.culateCJLC(list, "配车");
3095   - double ssgl_by = culateService.culateCJLC(list, "保养");
3096   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
3097   - double ssgl_qt = culateService.culateCJLC(list, "其他");
3098   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
3099   -
3100   - map.put("ssbc", culateService.culateLbbc(list));
3101   - map.put("ljgl", ljgl);
3102   - map.put("jhbc", culateService.culateJhbc(list, ""));
3103   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
3104   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
3105   - map.put("sjbc", culateService.culateSjbc(list_s, ""));
3106   - map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
3107   - map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
3108   - map.put("ljbc", culateService.culateLjbc(list_s, ""));
3109   - map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
3110   - map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
3111   - map.put("fzbc", culateService.culateFzbc(list_s, ""));
3112   - map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
3113   - map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
3114   - map.put("dtbc", 0);
3115   - map.put("dtbc_m", 0);
3116   - map.put("dtbc_a", 0);
3117   - if (list.size() > 0) {
3118   - int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
3119   - for (Map<String, Object> m : lMap) {
3120   - if (m.containsKey("djg") && m.get("djg") != null)
3121   - djg += Integer.valueOf(m.get("djg").toString());
3122   - if (m.containsKey("djg_m") && m.get("djg_m") != null)
3123   - djg_m += Integer.valueOf(m.get("djg_m").toString());
3124   - if (m.containsKey("djg_a") && m.get("djg_a") != null)
3125   - djg_a += Integer.valueOf(m.get("djg_a").toString());
3126   - if (m.containsKey("djg_time") && m.get("djg_time") != null) {
3127   - int t = Integer.valueOf(m.get("djg_time").toString());
3128   - if (t > djg_time)
3129   - djg_time = t;
3130   - }
3131   - }
3132   - map.put("djg", djg);
3133   - map.put("djg_m", djg_m);
3134   - map.put("djg_a", djg_a);
3135   - map.put("djg_time", djg_time);
3136   -// Map<String, Object> m_=culateService.culateDjg(list_s, list.get(0).getXlBm());
3137   -// map.put("djg", m_.get("djgcsq"));
3138   -// map.put("djg_m", m_.get("djgcsz"));
3139   -// map.put("djg_a", m_.get("djgcsw"));
3140   -// map.put("djg_time", m_.get("djgsj"));
3141   - } else {
3142   - map.put("djg", "0");
3143   - map.put("djg_m", "0");
3144   - map.put("djg_a", "0");
3145   - map.put("djg_time", "0");
3146   - }
3147   - lMap.add(map);
3148   - if (type != null && type.length() != 0 && type.equals("export")) {
3149   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
3150   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
3151   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
3152   - Map<String, Object> m = new HashMap<String, Object>();
3153   - m.put("date", date + "至" + date2);
3154   - ReportUtils ee = new ReportUtils();
3155   - try {
3156   - String dateTime = "";
3157   - if (date.equals(date2)) {
3158   - dateTime = sdfSimple.format(sdfMonth.parse(date));
3159   - } else {
3160   - dateTime = sdfSimple.format(sdfMonth.parse(date))
3161   - + "-" + sdfSimple.format(sdfMonth.parse(date2));
3162   - }
3163   - listI.add(lMap.iterator());
3164   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
3165   - ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",
3166   - path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
3167   - } catch (Exception e) {
3168   - // TODO: handle exception
3169   - //e.printStackTrace();
3170   - logger.info("", e);
3171   - }
3172   - }
3173   -
3174   - return lMap;
3175   - }
3176   -
3177   - @Override
3178   - public List<Map<String, Object>> statisticsDailyTjHb(String gsdm, String fgsdm, String line, String date, String date2,
3179   - String xlName, String type,String nature) {
3180   - List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
3181   - List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
3182   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
3183   - List<Object[]> listInterval=new ArrayList<Object[]>();
3184   -
3185   - line = line.trim();
3186   - if (line.equals("")) {
3187   - //查询所有线路
3188   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
3189   - listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
3190   - } else {
3191   - //查询单条线路
3192   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
3193   - listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
3194   - }
3195   - Map<String, Map<String,Object>> mapInterval=new HashMap<>();
3196   - for (int i = 0; i < listInterval.size(); i++) {
3197   - Object[] interval=listInterval.get(i);
3198   - String gs=interval[0].toString();
3199   - String fgs=interval[1].toString();
3200   - String xl=interval[2].toString();
3201   - Map<String, Object> m=new HashMap<String,Object>();
3202   - m.put("gs", gs);
3203   - m.put("fgs", fgs);
3204   - m.put("xl", xl);
3205   - m.put("djgAll", interval[3]);
3206   - m.put("djgZgf", interval[6]);
3207   - m.put("djgWgf", interval[7]);
3208   - m.put("djgTime", interval[8]);
3209   - mapInterval.put(gs+"-"+fgs+"-"+xl, m);
3210   - }
3211   -
3212   - Map<String, Boolean> lineMap=lineService.lineNature();
3213   - List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
3214   - for (int i = 0; i < listAll.size(); i++) {
3215   - ScheduleRealInfo s=listAll.get(i);
3216   - if (nature.equals("0")) {
3217   - list.add(s);
3218   - }else if(nature.equals("1")){
3219   - if(lineMap.get(s.getXlBm())){
3220   - list.add(s);
3221   - }
3222   - }else{
3223   - if(!lineMap.get(s.getXlBm())){
3224   - list.add(s);
3225   - }
3226   - }
3227   - }
3228   - for (int i = 0; i < list.size(); i++) {
3229   - ScheduleRealInfo s = list.get(i);
3230   - Set<ChildTaskPlan> cts = s.getcTasks();
3231   - if (cts != null && cts.size() > 0) {
3232   - list_s.add(s);
3233   - } else {
3234   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
3235   - list_s.add(s);
3236   - }
3237   - }
3238   - }
3239   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
3240   - for (int i = 0; i < list.size(); i++) {
3241   - if (i < list.size() - 1) {
3242   - if ((list.get(i + 1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
3243   - lists.add(list.get(i));
3244   - } else {
3245   - lists.add(list.get(i));
3246   - Map<String, Object> mm=new HashMap<String,Object>();
3247   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3248   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3249   - }
3250   - Map<String, Object> map = staticTj(lists,mm);
3251   - lMap.add(map);
3252   - lists = new ArrayList<ScheduleRealInfo>();
3253   - }
3254   - } else {
3255   - if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
3256   - lists.add(list.get(i));
3257   - Map<String, Object> mm=new HashMap<String,Object>();
3258   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3259   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3260   - }
3261   - Map<String, Object> map = staticTj(lists,mm);
3262   - lMap.add(map);
3263   - } else {
3264   - lists = new ArrayList<ScheduleRealInfo>();
3265   - lists.add(list.get(i));
3266   - Map<String, Object> mm=new HashMap<String,Object>();
3267   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3268   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3269   - }
3270   - Map<String, Object> map = staticTj(lists,mm);
3271   - lMap.add(map);
3272   - }
3273   - }
3274   - }
3275   -
3276   - Collections.sort(lMap, new AccountXlbm());
3277   - Map<String, Object> map = new HashMap<String, Object>();
3278   - map.put("xlBm", "hj");
3279   - map.put("xlName", "合计");
3280   - map.put("fgsBm", "");
3281   - map.put("fgsName", "");
3282   - map.put("gsBm", "");
3283   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
3284   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
3285   - map.put("jhlc", jhyygl);
3286   - map.put("jcclc", jhjcclc);
3287   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
3288   -
3289   - double ljgl = culateService.culateLjgl(list_s);
3290   - double sjyygl = culateService.culateSjgl(list_s);
3291   - double zyygl = Arith.add(sjyygl, ljgl);
3292   - double ljks=culateService.culateLjksgl(list_s);
3293   - map.put("ljks", ljks);
3294   - double sjjccgl = culateService.culateJccgl(list_s);
3295   - double sjksgl = culateService.culateKsgl(list_s);
3296   - double zksgl = Arith.add(sjjccgl, sjksgl);
3297   - map.put("sjzgl", Arith.add(zyygl, zksgl));
3298   - map.put("sjgl", zyygl);
3299   - map.put("sjksgl", zksgl);
3300   -
3301   - double ssgl = culateService.culateLbgl(list);
3302   - map.put("ssgl", ssgl);
3303   - //计划+临加-少驶=实驶
3304   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
3305   - if (jl == zyygl) {
3306   - map.put("zt", 0);
3307   - } else {
3308   - map.put("zt", 1);
3309   - }
3310   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
3311   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
3312   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
3313   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
3314   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
3315   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
3316   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
3317   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
3318   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
3319   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
3320   - double ssgl_pc = culateService.culateCJLC(list, "配车");
3321   - double ssgl_by = culateService.culateCJLC(list, "保养");
3322   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
3323   - double ssgl_qt = culateService.culateCJLC(list, "其他");
3324   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
3325   -
3326   - map.put("ssbc", culateService.culateLbbc(list));
3327   - map.put("ljgl", ljgl);
3328   - map.put("jhbc", culateService.culateJhbc(list, ""));
3329   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
3330   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
3331   - map.put("sjbc", culateService.culateSjbc(list_s, ""));
3332   - map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
3333   - map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
3334   - map.put("ljbc", culateService.culateLjbc(list_s, ""));
3335   - map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
3336   - map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
3337   - map.put("fzbc", culateService.culateFzbc(list_s, ""));
3338   - map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
3339   - map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
3340   - map.put("dtbc", 0);
3341   - map.put("dtbc_m", 0);
3342   - map.put("dtbc_a", 0);
3343   - if (list.size() > 0) {
3344   - int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
3345   - for (Map<String, Object> m : lMap) {
3346   - if (m.containsKey("djg") && m.get("djg") != null)
3347   - djg += Integer.valueOf(m.get("djg").toString());
3348   - if (m.containsKey("djg_m") && m.get("djg_m") != null)
3349   - djg_m += Integer.valueOf(m.get("djg_m").toString());
3350   - if (m.containsKey("djg_a") && m.get("djg_a") != null)
3351   - djg_a += Integer.valueOf(m.get("djg_a").toString());
3352   - if (m.containsKey("djg_time") && m.get("djg_time") != null) {
3353   - int t = Integer.valueOf(m.get("djg_time").toString());
3354   - if (t > djg_time)
3355   - djg_time = t;
3356   - }
3357   - }
3358   - map.put("djg", djg);
3359   - map.put("djg_m", djg_m);
3360   - map.put("djg_a", djg_a);
3361   - map.put("djg_time", djg_time);
3362   - } else {
3363   - map.put("djg", "0");
3364   - map.put("djg_m", "0");
3365   - map.put("djg_a", "0");
3366   - map.put("djg_time", "0");
3367   - }
3368   - lMap.add(map);
3369   - return lMap;
3370   - }
3371   -
3372   - @Override
3373   - public Map<String, Object> scheduleDaily(String line, String date) {
3374   - Map<String, String> tempMap = null;
3375   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
3376   - Map<String, Object> map = new HashMap<String, Object>();
3377   - Double jhlc = 0.00;
3378   - Float sjgl = 0f, ssgl = 0f, ssgl_lz = 0f, ssgl_dm = 0f, ssgl_gz = 0f, ssgl_jf = 0f, ssgl_zs = 0f, ssgl_qr = 0f, ssgl_qc = 0f, ssgl_kx = 0f, ssgl_qh = 0f, ssgl_yw = 0f, ssgl_other = 0f, ljgl = 0f;
3379   - int jhbc = 0;
3380   - for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
3381   - if (scheduleRealInfo != null) {
3382   - //计算里程(包括子任务)
3383   - jhlc += scheduleRealInfo.getJhlc();
3384   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
3385   - if (!childTaskPlans.isEmpty()) {
3386   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
3387   - while (it.hasNext()) {
3388   - ChildTaskPlan childTaskPlan = it.next();
3389   - //是否烂班,烂班就是少驶
3390   - if (!childTaskPlan.isDestroy()) {
3391   - sjgl += childTaskPlan.getMileage();
3392   - } else {
3393   - ssgl += childTaskPlan.getMileage();
3394   - if (childTaskPlan.getDestroyReason().equals("路阻")) {
3395   - ssgl_lz += childTaskPlan.getMileage();
3396   - } else if (childTaskPlan.getDestroyReason().equals("吊慢")) {
3397   - ssgl_dm += childTaskPlan.getMileage();
3398   - } else if (childTaskPlan.getDestroyReason().equals("故障")) {
3399   - ssgl_gz += childTaskPlan.getMileage();
3400   - } else if (childTaskPlan.getDestroyReason().equals("纠纷")) {
3401   - ssgl_jf += childTaskPlan.getMileage();
3402   - } else if (childTaskPlan.getDestroyReason().equals("肇事")) {
3403   - ssgl_zs += childTaskPlan.getMileage();
3404   - } else if (childTaskPlan.getDestroyReason().equals("缺人")) {
3405   - ssgl_qr += childTaskPlan.getMileage();
3406   - } else if (childTaskPlan.getDestroyReason().equals("缺车")) {
3407   - ssgl_qc += childTaskPlan.getMileage();
3408   - } else if (childTaskPlan.getDestroyReason().equals("客稀")) {
3409   - ssgl_kx += childTaskPlan.getMileage();
3410   - } else if (childTaskPlan.getDestroyReason().equals("气候")) {
3411   - ssgl_qh += childTaskPlan.getMileage();
3412   - } else if (childTaskPlan.getDestroyReason().equals("援外")) {
3413   - ssgl_yw += childTaskPlan.getMileage();
3414   - } else {
3415   - ssgl_other += childTaskPlan.getMileage();
3416   - }
3417   - }
3418   - //临加公里
3419   - if (childTaskPlan.getType1().equals("临加")) {
3420   - ljgl += childTaskPlan.getMileage();
3421   - }
3422   - }
3423   - }
3424   - //班次
3425   - scheduleRealInfo.getFcsjT();
3426   - scheduleRealInfo.getFcsjActualTime();
3427   - }
3428   - }
3429   - map.put("jhlc", jhlc);
3430   - map.put("sjgl", sjgl);
3431   - map.put("ssgl", ssgl);
3432   - map.put("ssgl_lz", ssgl_lz);
3433   - map.put("ssgl_dm", ssgl_dm);
3434   - map.put("ssgl_gz", ssgl_gz);
3435   - map.put("ssgl_jf", ssgl_jf);
3436   - map.put("ssgl_zs", ssgl_zs);
3437   - map.put("ssgl_qr", ssgl_qr);
3438   - map.put("ssgl_qc", ssgl_qc);
3439   - map.put("ssgl_kx", ssgl_kx);
3440   - map.put("ssgl_qh", ssgl_qh);
3441   - map.put("ssgl_yw", ssgl_yw);
3442   - map.put("ssgl_other", ssgl_other);
3443   - map.put("ljgl", ljgl);
3444   -
3445   - map.put("jhbc", scheduleRealInfos.size());
3446   - return null;
3447   - }
3448   -
3449   - @Override
3450   - public int countByLineCodeAndDate(String xlBm, String schDate) {
3451   - return scheduleRealInfoRepository.countByLineCodeAndDate(xlBm + "", schDate);
3452   - }
3453   -
3454   - @Override
3455   - public List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate) {
3456   - return scheduleRealInfoRepository.findByLineCodeAndDate(xlBm + "", schDate);
3457   - }
3458   -
3459   - @Override
3460   - public void deleteByLineCodeAndDate(String xlBm, String schDate) {
3461   - scheduleRealInfoRepository.deleteByLineCodeAndDate(xlBm + "", schDate);
3462   - }
3463   -
3464   - @Override
3465   - public Long getMaxId() {
3466   - return scheduleRealInfoRepository.getMaxId();
3467   - }
3468   -
3469   - @Override
3470   - public List<ScheduleRealInfo> realScheduleList(String line, String date) {
3471   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3472   - String lpName = "lpName";
3473   - String zdsj = "";
3474   - String zdsjActual = "";
3475   - String zdsj1 = "";
3476   - String zdsjActual1 = "";
3477   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
3478   -
3479   - /*
3480   - * 对计划发车时间相同的班次进行排序 out最前 in最后
3481   - */
3482   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3483   - SimpleDateFormat sdfnyr =new SimpleDateFormat("yyyy-MM-dd");
3484   - String minfcsj = "02:00";
3485   - List<Line> lineList = lineRepository.findLineByCode(line);
3486   - if (lineList.size() > 0) {
3487   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
3488   - + " id = ("
3489   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
3490   - + ")";
3491   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
3492   - }
3493   - String[] minSjs = minfcsj.split(":");
3494   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
3495   - for (int i = 0; i < listInfo.size(); i++) {
3496   - ScheduleRealInfo s = listInfo.get(i);
3497   - if (s.getBcType().equals("out")) {
3498   - s.setRemark("1");
3499   - } else if (s.getBcType().equals("in")) {
3500   - s.setRemark("3");
3501   - } else {
3502   - s.setRemark("2");
3503   - }
3504   - String[] fcsj = s.getFcsj().split(":");
3505   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3506   -
3507   - Long fscjT = 0L;
3508   - if (fcsjL < minSj) {
3509   - Calendar calendar = new GregorianCalendar();
3510   - calendar.setTime(s.getScheduleDate());
3511   - calendar.add(calendar.DATE, 1);
3512   - Date date_sch= calendar.getTime();
3513   - try {
3514   - fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
3515   - } catch (ParseException e) {
3516   - // TODO Auto-generated catch block
3517   - e.printStackTrace();
3518   - }
3519   -
3520   - } else {
3521   - try {
3522   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3523   - } catch (ParseException e) {
3524   - // TODO Auto-generated catch block
3525   - e.printStackTrace();
3526   - };
3527   - }
3528   - s.setFcsjT(fscjT);
3529   - }
3530   - List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
3531   - listInfo2.addAll(listInfo);
3532   - Collections.sort(listInfo, new compareLpFcsjType());
3533   - Collections.sort(listInfo2,new compareDirLpFcsjType());
3534   - for (int i = 0; i < listInfo.size(); i++) {
3535   - ScheduleRealInfo t = listInfo.get(i);
3536   - if (!lpName.equals(t.getLpName())) {
3537   - zdsjActual = t.getZdsjActual();
3538   - zdsj = t.getZdsj();
3539   - t.setZdsjActual("");
3540   - t.setZdsj("");
3541   - } else {
3542   - zdsj1 = t.getZdsj();
3543   - zdsjActual1 = t.getZdsjActual();
3544   - t.setZdsjActual(zdsjActual);
3545   - t.setZdsj(zdsj);
3546   - zdsj = zdsj1;
3547   - zdsjActual = zdsjActual1;
3548   - }
3549   - lpName = t.getLpName();
3550   - list.add(t);
3551   - }
3552   -/*
3553   - List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleDdrb2(line, date);
3554   - for (int i = 0; i < listInfo2.size(); i++) {
3555   - ScheduleRealInfo s = listInfo2.get(i);
3556   - if (s.getBcType().equals("out")) {
3557   - s.setRemark("1");
3558   - } else if (s.getBcType().equals("in")) {
3559   - s.setRemark("3");
3560   - } else {
3561   - s.setRemark("2");
3562   - }
3563   - String[] fcsj = s.getFcsj().split(":");
3564   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3565   -
3566   - Long fscjT = 0L;
3567   - if (fcsjL < minSj) {
3568   - Calendar calendar = new GregorianCalendar();
3569   - calendar.setTime(s.getScheduleDate());
3570   - calendar.add(calendar.DATE, 1);
3571   - s.setScheduleDate(calendar.getTime());
3572   - try {
3573   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
3574   - } catch (ParseException e) {
3575   - // TODO Auto-generated catch block
3576   - e.printStackTrace();
3577   - }
3578   -
3579   - } else {
3580   - try {
3581   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3582   - } catch (ParseException e) {
3583   - // TODO Auto-generated catch block
3584   - e.printStackTrace();
3585   - }
3586   - ;
3587   - }
3588   - s.setFcsjT(fscjT);
3589   - }*/
3590   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3591   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3592   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3593   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3594   - if (listInfo2.size() > 0) {
3595   - int a = listInfo2.size() % 3;
3596   - int b = listInfo2.size() / 3;
3597   - int x = 0, y = 0;
3598   - if (a == 2) {
3599   - x = b + 1;
3600   - y = x * 2;
3601   - } else if (a == 1) {
3602   - x = b + 1;
3603   - y = x * 2 - 1;
3604   - } else {
3605   - x = b;
3606   - y = 2 * x;
3607   -
3608   - }
3609   - for (int i = 0; i < listInfo2.size(); i++) {
3610   - ScheduleRealInfo s = listInfo2.get(i);
3611   - if (i + 1 <= x) {
3612   - xList.add(s);
3613   - } else if ((i + 1) > x && (i + 1) <= y) {
3614   - yList.add(s);
3615   - } else {
3616   - zList.add(s);
3617   - }
3618   - }
3619   - for (int i = 0; i < x; i++) {
3620   - newList.add(xList.get(i));
3621   - if (yList.size() > i) {
3622   - newList.add(yList.get(i));
3623   - } else {
3624   - newList.add(new ScheduleRealInfo());
3625   - }
3626   - if (zList.size() > i) {
3627   - newList.add(zList.get(i));
3628   - } else {
3629   - newList.add(new ScheduleRealInfo());
3630   - }
3631   -
3632   - }
3633   - }
3634   - for (int i = 0; i < newList.size(); i++) {
3635   - ScheduleRealInfo t1 = newList.get(i);
3636   - for (int j = 0; j < list.size(); j++) {
3637   - ScheduleRealInfo t2 = list.get(j);
3638   - if (t1.getId() == t2.getId()) {
3639   - t1 = t2;
3640   - }
3641   - }
3642   - }
3643   -
3644   - for (int i = 0; i < newList.size(); i++) {
3645   - ScheduleRealInfo t1 = newList.get(i);
3646   - String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
3647   - if (reamrks1.length() > 4) {
3648   - t1.setRemarks(reamrks1.substring(0, 4));
3649   - t1.setRemark(reamrks1);
3650   - } else {
3651   - t1.setRemark(reamrks1);
3652   - }
3653   - }
3654   - return newList;
3655   - }
3656   -
3657   - @Override
3658   - public List<ScheduleRealInfo> realScheduleList_zrw(String line, String date) {
3659   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3660   - String lpName = "lpName";
3661   - String zdsj = "";
3662   - String zdsjActual = "";
3663   - String zdsj1 = "";
3664   - String zdsjActual1 = "";
3665   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
3666   -
3667   - /*
3668   - * 对计划发车时间相同的班次进行排序 out最前 in最后
3669   - */
3670   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3671   - SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
3672   -
3673   - String minfcsj = "02:00";
3674   - List<Line> lineList = lineRepository.findLineByCode(line);
3675   - if (lineList.size() > 0) {
3676   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
3677   - + " id = ("
3678   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
3679   - + ")";
3680   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
3681   - }
3682   - String[] minSjs = minfcsj.split(":");
3683   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
3684   - for (int i = 0; i < listInfo.size(); i++) {
3685   - ScheduleRealInfo s = listInfo.get(i);
3686   - if (s.getBcType().equals("out")) {
3687   - s.setRemark("1");
3688   - } else if (s.getBcType().equals("in")) {
3689   - s.setRemark("3");
3690   - } else {
3691   - s.setRemark("2");
3692   - }
3693   - String[] fcsj = s.getFcsj().split(":");
3694   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3695   -
3696   - Long fscjT = 0L;
3697   - if (fcsjL < minSj) {
3698   - Calendar calendar = new GregorianCalendar();
3699   - calendar.setTime(s.getScheduleDate());
3700   - calendar.add(calendar.DATE, 1);
3701   - Date date_sch=calendar.getTime();
3702   - try {
3703   - fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
3704   - } catch (ParseException e) {
3705   - // TODO Auto-generated catch block
3706   - e.printStackTrace();
3707   - }
3708   -
3709   - } else {
3710   - try {
3711   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3712   - } catch (ParseException e) {
3713   - // TODO Auto-generated catch block
3714   - e.printStackTrace();
3715   - }
3716   - ;
3717   - }
3718   - s.setFcsjT(fscjT);
3719   - }
3720   -
3721   -// Collections.sort(listInfo, new compareLpFcsjType());
3722   - List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
3723   -
3724   - Collections.sort(listInfo, new compareLpFcsjType());
3725   - for (int i = 0; i < listInfo.size(); i++) {
3726   - ScheduleRealInfo t = listInfo.get(i);
3727   - if (!lpName.equals(t.getLpName())) {
3728   - zdsjActual = t.getZdsjActual();
3729   - zdsj = t.getZdsj();
3730   - t.setZdsjActual("");
3731   - t.setZdsj("");
3732   - } else {
3733   - zdsj1 = t.getZdsj();
3734   - zdsjActual1 = t.getZdsjActual();
3735   - t.setZdsjActual(zdsjActual);
3736   - t.setZdsj(zdsj);
3737   - zdsj = zdsj1;
3738   - zdsjActual = zdsjActual1;
3739   - }
3740   -
3741   -
3742   -
3743   - lpName = t.getLpName();
3744   - listInfo2.add(t);
3745   -
3746   - }
3747   -
3748   - Collections.sort(listInfo2,new compareDirLpFcsjType());
3749   - for (int i = 0; i < listInfo2.size(); i++) {
3750   - ScheduleRealInfo t=listInfo2.get(i);
3751   - list.add(t);
3752   - Set<ChildTaskPlan> childTaskPlans = t.getcTasks();
3753   - //计算营运里程,空驶里程
3754   - if (!childTaskPlans.isEmpty()) {
3755   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
3756   - Collections.sort(listit, new ComparableChild());
3757   - for (int j = 0; j < listit.size(); j++) {
3758   - ScheduleRealInfo s = new ScheduleRealInfo();
3759   - ChildTaskPlan childTaskPlan = listit.get(j);
3760   - if (childTaskPlan.getCcId() == null) {
3761   - if (childTaskPlan.isDestroy()) {
3762   - s.setFcsjActual("");
3763   - s.setZdsjActual("");
3764   - } else {
3765   - s.setFcsjActual(childTaskPlan.getStartDate());
3766   - s.setZdsjActual("");
3767   - s.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
3768   - }
3769   - s.setFcsj(childTaskPlan.getStartDate());
3770   - s.setZdsj("");
3771   - s.setQdzName(childTaskPlan.getStartStationName());
3772   - s.setZdzName(childTaskPlan.getEndStationName());
3773   - s.setRemarks(childTaskPlan.getRemarks());
3774   - s.setAdjustExps("子");
3775   - s.setLpName("");
3776   - list.add(s);
3777   - }
3778   - }
3779   - }
3780   - }
3781   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3782   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3783   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3784   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3785   - if (list.size() > 0) {
3786   - int a = list.size() % 3;
3787   - int b = list.size() / 3;
3788   - int x = 0, y = 0;
3789   - if (a == 2) {
3790   - x = b + 1;
3791   - y = x * 2;
3792   - } else if (a == 1) {
3793   - x = b + 1;
3794   - y = x * 2 - 1;
3795   - } else {
3796   - x = b;
3797   - y = 2 * x;
3798   -
3799   - }
3800   - for (int i = 0; i < list.size(); i++) {
3801   - ScheduleRealInfo s = list.get(i);
3802   - if (i + 1 <= x) {
3803   - xList.add(s);
3804   - } else if ((i + 1) > x && (i + 1) <= y) {
3805   - yList.add(s);
3806   - } else {
3807   - zList.add(s);
3808   - }
3809   - }
3810   - for (int i = 0; i < x; i++) {
3811   - newList.add(xList.get(i));
3812   - if (yList.size() > i) {
3813   - newList.add(yList.get(i));
3814   - } else {
3815   - newList.add(new ScheduleRealInfo());
3816   - }
3817   - if (zList.size() > i) {
3818   - newList.add(zList.get(i));
3819   - } else {
3820   - newList.add(new ScheduleRealInfo());
3821   - }
3822   -
3823   - }
3824   - }
3825   - /* for (int i = 0; i < newList.size(); i++) {
3826   - ScheduleRealInfo t1 = newList.get(i);
3827   - for (int j = 0; j < list.size(); j++) {
3828   - ScheduleRealInfo t2 = list.get(j);
3829   - if (t1.getId() == t2.getId()) {
3830   - t1 = t2;
3831   - }
3832   - }
3833   - }*/
3834   -
3835   - for (int i = 0; i < newList.size(); i++) {
3836   - ScheduleRealInfo t1 = newList.get(i);
3837   - String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
3838   - if (reamrks1.length() > 4) {
3839   - t1.setRemarks(reamrks1.substring(0, 4));
3840   - t1.setRemark(reamrks1);
3841   - } else {
3842   - t1.setRemark(reamrks1);
3843   - }
3844   - }
3845   - return newList;
3846   - }
3847   -
3848   - @Override
3849   - public List<ScheduleRealInfo> realScheduleList_mh_2(String line, String date) {
3850   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3851   - String lpName = "lpName";
3852   - String zdsj = "";
3853   - String zdsjActual = "";
3854   - String zdsj1 = "";
3855   - String zdsjActual1 = "";
3856   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
3857   -
3858   - for (ScheduleRealInfo s : listInfo) {
3859   - if (s.isDestroy() && s.isReissue()) {
3860   - s.setRemark("");
3861   - s.setFcsjActual(s.getDfsj());
3862   - s.setZdsjActual(s.getZdsj());
3863   - s.setStatus(2);
3864   - s.setJhlc(s.getJhlcOrig());
3865   - }
3866   - }
3867   -
3868   - for (int i = 0; i < listInfo.size(); i++) {
3869   - ScheduleRealInfo t = listInfo.get(i);
3870   - if (!lpName.equals(t.getLpName())) {
3871   - zdsjActual = t.getZdsjActual();
3872   - zdsj = t.getZdsj();
3873   - t.setZdsjActual("");
3874   - t.setZdsj("");
3875   - } else {
3876   - zdsj1 = t.getZdsj();
3877   - zdsjActual1 = t.getZdsjActual();
3878   - t.setZdsjActual(zdsjActual);
3879   - t.setZdsj(zdsj);
3880   - zdsj = zdsj1;
3881   - zdsjActual = zdsjActual1;
3882   - }
3883   - lpName = t.getLpName();
3884   - list.add(t);
3885   - }
3886   -
3887   - List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLineQp2(line, date);
3888   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3889   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3890   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3891   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3892   - if (listInfo2.size() > 0) {
3893   - int a = listInfo2.size() % 3;
3894   - int b = listInfo2.size() / 3;
3895   - int x = 0, y = 0;
3896   - if (a == 2) {
3897   - x = b + 1;
3898   - y = x * 2;
3899   - } else if (b == 1) {
3900   - x = b + 1;
3901   - y = x * 2 - 1;
3902   - } else {
3903   - x = b;
3904   - y = 2 * x;
3905   -
3906   - }
3907   - for (int i = 0; i < listInfo2.size(); i++) {
3908   - ScheduleRealInfo s = listInfo2.get(i);
3909   - if (i + 1 <= x) {
3910   - xList.add(s);
3911   - } else if ((i + 1) > x && (i + 1) <= y) {
3912   - yList.add(s);
3913   - } else {
3914   - zList.add(s);
3915   - }
3916   - }
3917   - for (int i = 0; i < x; i++) {
3918   - newList.add(xList.get(i));
3919   - if (yList.size() > i) {
3920   - newList.add(yList.get(i));
3921   - } else {
3922   - newList.add(new ScheduleRealInfo());
3923   - }
3924   - if (zList.size() > i) {
3925   - newList.add(zList.get(i));
3926   - } else {
3927   - newList.add(new ScheduleRealInfo());
3928   - }
3929   -
3930   - }
3931   - }
3932   - for (int i = 0; i < newList.size(); i++) {
3933   - ScheduleRealInfo t1 = newList.get(i);
3934   - for (int j = 0; j < list.size(); j++) {
3935   - ScheduleRealInfo t2 = list.get(j);
3936   - if (t1.getId() == t2.getId()) {
3937   - t1 = t2;
3938   - }
3939   - }
3940   - }
3941   - return newList;
3942   - }
3943   -
3944   - @Override
3945   - public List<ScheduleRealInfo> realScheduleListQp(String line, String date) {
3946   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3947   - String lpName = "lpName";
3948   - String zdsj = "";
3949   - String zdsjActual = "";
3950   - String zdsj1 = "";
3951   - String zdsjActual1 = "";
3952   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
3953   - for (int i = 0; i < listInfo.size(); i++) {
3954   - ScheduleRealInfo t = listInfo.get(i);
3955   - if (!lpName.equals(t.getLpName())) {
3956   - zdsjActual = t.getZdsjActual();
3957   - zdsj = t.getZdsj();
3958   - t.setZdsjActual("");
3959   - t.setZdsj("");
3960   - } else {
3961   - zdsj1 = t.getZdsj();
3962   - zdsjActual1 = t.getZdsjActual();
3963   - t.setZdsjActual(zdsjActual);
3964   - t.setZdsj(zdsj);
3965   - zdsj = zdsj1;
3966   - zdsjActual = zdsjActual1;
3967   - }
3968   -
3969   - lpName = t.getLpName();
3970   - list.add(t);
3971   - }
3972   - return list;
3973   - }
3974   -
3975   - public List<Map<String, Object>> yesterdayDataList(String line, String date, String gsbm, String fgsbm, String jGh, String nbbm) {
3976   - List<Map<String, Object>> yesterdayDataList = new ArrayList<Map<String, Object>>();
3977   - if (line.equals("")) {
3978   - yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList(line, date, gsbm, fgsbm, nbbm);
3979   - } else {
3980   - yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList_eq(line, date, gsbm, fgsbm, nbbm);
3981   - }
3982   - List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill3(jGh, nbbm, date, gsbm, fgsbm);
3983   - for (int x = 0; x < yesterdayDataList.size(); x++) {
3984   - String jsy = yesterdayDataList.get(x).get("jGh").toString();
3985   - String clZbh = yesterdayDataList.get(x).get("clZbh").toString();
3986   - String xlbm = yesterdayDataList.get(x).get("xlBm").toString();
3987   - String lp = yesterdayDataList.get(x).get("lpName").toString();
3988   - String realExecDate=yesterdayDataList.get(x).get("realExecDate").toString();
3989   - String fcsj[] =realExecDate.split(" ");
3990   - //取出最小计划发车时间
3991   - yesterdayDataList.get(x).put("fcsj", fcsj[1]);
3992   - Map<String, Object> map = new HashMap<String, Object>();
3993   - boolean fage = true;
3994   - String company = "";
3995   - String bCompany = "";
3996   - String lineName="";
3997   - String jName="";
3998   - List<ScheduleRealInfo> listS = new ArrayList<ScheduleRealInfo>();
3999   - for (ScheduleRealInfo scheduleRealInfo : lists) {
4000   - if (scheduleRealInfo.getjGh().equals(jsy)
4001   - && scheduleRealInfo.getClZbh().equals(clZbh)
4002   - && scheduleRealInfo.getXlBm().equals(xlbm)
4003   - && scheduleRealInfo.getLpName().equals(lp)) {
4004   - if (fage) {
4005   - //根据线路代码获取公司
4006   - company = scheduleRealInfo.getGsBm();
4007   - bCompany = scheduleRealInfo.getFgsBm();
4008   - lineName = scheduleRealInfo.getXlName();
4009   - jName= scheduleRealInfo.getjName();
4010   - fage = false;
4011   - }
4012   - Set<ChildTaskPlan> cts = scheduleRealInfo.getcTasks();
4013   - if (cts != null && cts.size() > 0) {
4014   - listS.add(scheduleRealInfo);
4015   - } else {
4016   - if (scheduleRealInfo.getZdsjActual() != null && scheduleRealInfo.getFcsjActual() != null) {
4017   - listS.add(scheduleRealInfo);
4018   - }
4019   - }
4020   - }
4021   - }
4022   - yesterdayDataList.get(x).put("company", company);
4023   - yesterdayDataList.get(x).put("bCompany", bCompany);
4024   - yesterdayDataList.get(x).put("lineName", lineName);
4025   - yesterdayDataList.get(x).put("jName", jName);
4026   - Double ljgl = culateMieageService.culateLjgl(listS);
4027   - Double sjgl = culateMieageService.culateSjgl(listS);
4028   - Double ksgl = culateMieageService.culateKsgl(listS);
4029   - Double jccgl = culateMieageService.culateJccgl(listS);
4030   - Double zyygl = Arith.add(sjgl, ljgl);
4031   - Double zksgl = Arith.add(ksgl, jccgl);
4032   - Double zlc = Arith.add(zyygl, zksgl);
4033   - yesterdayDataList.get(x).put("totalKilometers", zlc);
4034   -
4035   - }
4036   - //增加顺序号
4037   - for (int i = 0; i < yesterdayDataList.size(); i++) {
4038   - if (i == 0) {
4039   - yesterdayDataList.get(i).put("seqNumber", 1);
4040   - } else {
4041   - if (yesterdayDataList.get(i - 1).get("clZbh").equals(yesterdayDataList.get(i).get("clZbh"))) {
4042   - yesterdayDataList.get(i).put("seqNumber", 1 + (int) yesterdayDataList.get(i - 1).get("seqNumber"));
4043   - } else {
4044   - yesterdayDataList.get(i).put("seqNumber", 1);
4045   - }
4046   - }
4047   - }
4048   -
4049   - return yesterdayDataList;
4050   - }
4051   -
4052   - /**
4053   - * 批量调整人车
4054   - */
4055   - @Override
4056   - public Map<String, Object> multi_tzrc(List<ChangePersonCar> cpcs, String userId) {
4057   - Map<String, Object> rs = new HashMap<>();
4058   - Set<ScheduleRealInfo> set = new HashSet<>();
4059   -
4060   - ScheduleRealInfo sch;
4061   -
4062   - String jGh = null, jName, sGh, sName;
4063   - for (ChangePersonCar cpc : cpcs) {
4064   -
4065   - sch = dayOfSchedule.get(cpc.getSchId());
4066   - if (sch == null)
4067   - continue;
4068   -
4069   - if (cpc.getClZbh() != null) {
4070   - if (!carExist(sch.getGsBm(), cpc.getClZbh())) {
4071   - rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
4072   - rs.put("status", ResponseCode.ERROR);
4073   - return rs;
4074   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(cpc.getClZbh()))) {
4075   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + cpc.getClZbh() + "】的车辆");
4076   - rs.put("status", ResponseCode.ERROR);
4077   - return rs;
4078   - }
4079   - }
4080   -
4081   - if (StringUtils.isNotEmpty(cpc.getJsy())) {
4082   - try{
4083   - jGh = cpc.getJsy().split("/")[0];
4084   - }catch (Exception e){
4085   - logger.error("", e);
4086   - rs.put("msg", "驾驶员参数异常!!");
4087   - rs.put("status", ResponseCode.ERROR);
4088   - return rs;
4089   - }
4090   -
4091   - jName = getPersonName(sch.getGsBm(), jGh);
4092   - if (StringUtils.isEmpty(jName)) {
4093   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
4094   - rs.put("status", ResponseCode.ERROR);
4095   - return rs;
4096   - }
4097   - }
4098   -
4099   -
4100   - //为换人换车情况表写入数据
4101   - schModifyLog.saveChangetochange(sch, cpc, userId);
4102   - //日志记录
4103   - ScheduleModifyLogger.tzrc(sch, cpc, userId);
4104   -
4105   - //换驾驶员
4106   - if (StringUtils.isNotEmpty(cpc.getJsy())) {
4107   - //换驾驶员
4108   - if (persoChange(sch, jGh))
4109   - set.add(sch);
4110   - }
4111   -
4112   - //换售票员
4113   - if (StringUtils.isNotEmpty(cpc.getSpy())
4114   - && !"/".equals(StringUtils.trim(cpc.getSpy()))) {
4115   -
4116   - sGh = cpc.getSpy().split("/")[0];
4117   - sName = getPersonName(sch.getGsBm(), sGh);
4118   - if (StringUtils.isEmpty(sName)) {
4119   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
4120   - rs.put("status", ResponseCode.ERROR);
4121   - return rs;
4122   - }
4123   -
4124   - /*if(!sGh.equals(sch.getsGh()))
4125   - sb.append(sch.getsGh() + " 换 " + sGh + ";");*/
4126   - if (persoChangeSPY(sch, sGh))
4127   - set.add(sch);
4128   - } else if (StringUtils.isNotEmpty(sch.getsGh())) {
4129   - sch.setsGh("");
4130   - sch.setsName("");
4131   - }
4132   -
4133   - //换车
4134   - if (StringUtils.isNotEmpty(cpc.getClZbh()) && !cpc.getClZbh().equals(sch.getClZbh())) {
4135   - //sb.append(sch.getClZbh() + " 换 " + cpc.getClZbh() + ";");
4136   - set.add(sch);
4137   - set.addAll(dayOfSchedule.changeCar(sch, cpc.getClZbh()));
4138   - }
4139   -
4140   - /*if(sb.length() > 0)
4141   - sch.setRemarks(sb.toString());*/
4142   -
4143   - dayOfSchedule.save(sch);
4144   - set.add(sch);
4145   -
4146   - }
4147   - rs.put("ts", set);
4148   - rs.put("status", ResponseCode.SUCCESS);
4149   - return rs;
4150   - }
4151   -
4152   - /**
4153   - * @Title: persoChange
4154   - * @Description: TODO(班次换驾驶员)
4155   - */
4156   - public boolean persoChange(ScheduleRealInfo sch, String jGh) {
4157   - if (sch.getjGh().equals(jGh))
4158   - return false;
4159   - String jName = getPersonName(sch.getGsBm(), jGh);
4160   - if (StringUtils.isNotEmpty(jName)) {
4161   -
4162   - if (jGh.indexOf("-") != -1)
4163   - sch.setjGh(jGh.substring(jGh.indexOf("-") + 1));
4164   - else
4165   - sch.setjGh(jGh);
4166   -
4167   - sch.setjName(jName);
4168   - return true;
4169   - }
4170   - return false;
4171   - }
4172   -
4173   - /**
4174   - * @Title: persoChange
4175   - * @Description: TODO(班次换售票员)
4176   - */
4177   - public boolean persoChangeSPY(ScheduleRealInfo sch, String sGh) {
4178   - if (sch.getsGh().equals(sGh))
4179   - return false;
4180   - String sName = getPersonName(sch.getGsBm(), sGh);
4181   - if (StringUtils.isNotEmpty(sName)) {
4182   - if (sGh.indexOf("-") != -1)
4183   - sch.setsGh(sGh.substring(sGh.indexOf("-") + 1));
4184   - else
4185   - sch.setsGh(sGh);
4186   - sch.setsName(sName);
4187   - return true;
4188   - }
4189   - return false;
4190   - }
4191   -
4192   - /**
4193   - * 批量待发调整
4194   - */
4195   - @Override
4196   - public Map<String, Object> multi_dftz(List<DfsjChange> dfsjcs) {
4197   - Map<String, Object> rs = new HashMap<>(), tempMap = new HashMap<>();
4198   - List<ScheduleRealInfo> list = new ArrayList<>();
4199   -
4200   - for (DfsjChange dc : dfsjcs) {
4201   - if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
4202   - continue;
4203   -
4204   - tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "2", null);
4205   -
4206   - if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
4207   - list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
4208   - }
4209   - }
4210   -
4211   - rs.put("status", ResponseCode.SUCCESS);
4212   - rs.put("ts", list);
4213   - return rs;
4214   - }
4215   -
4216   -
4217   - @Override
4218   - public Map<String, Object> findKMBC1(String jName, String clZbh,
4219   - String date, String enddate) {
4220   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill4(jName, clZbh, date, enddate);
4221   - DecimalFormat format = new DecimalFormat("0.00");
4222   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4223   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4224   - int jhbc = 0, cjbc = 0, ljbc = 0;
4225   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
4226   - float addMileage = 0l, remMileage = 0l;
4227   - Map<String, Object> map = new HashMap<String, Object>();
4228   - for (ScheduleRealInfo scheduleRealInfo : list) {
4229   - if (scheduleRealInfo != null) {
4230   - //计划里程(主任务过滤掉临加班次),
4231   - //烂班里程(主任务烂班),
4232   - //临加里程(主任务临加),
4233   - //计划班次,烂班班次,增加班次
4234   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
4235   - if (scheduleRealInfo.isSflj()) {
4236   - addMileage += tempJhlc;
4237   - ljbc++;
4238   - } else {
4239   - jhlc += tempJhlc;
4240   - jhbc++;
4241   - if (scheduleRealInfo.getStatus() == -1) {
4242   - remMileage += tempJhlc;
4243   - cjbc++;
4244   - }
4245   - }
4246   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
4247   - //计算营运里程,空驶里程
4248   - if (childTaskPlans.isEmpty()) {
4249   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
4250   - || scheduleRealInfo.getBcType().equals("venting")) {
4251   - ksgl += tempJhlc;
4252   - } else {
4253   - yygl += tempJhlc;
4254   - }
4255   - } else {
4256   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4257   - while (it.hasNext()) {
4258   - ChildTaskPlan childTaskPlan = it.next();
4259   - if (childTaskPlan.getMileageType().equals("empty")) {
4260   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4261   - } else {
4262   - yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4263   - }
4264   - }
4265   - }
4266   - }
4267   - }
4268   - map.put("jhlc", format.format(jhlc));
4269   - map.put("remMileage", format.format(remMileage));
4270   - map.put("addMileage", format.format(addMileage));
4271   - map.put("yygl", format.format(yygl));
4272   - map.put("ksgl", format.format(ksgl));
4273   - map.put("realMileage", format.format(yygl + ksgl));
4274   - map.put("jhbc", jhbc);
4275   - map.put("cjbc", cjbc);
4276   - map.put("ljbc", ljbc);
4277   - map.put("sjbc", jhbc - cjbc + ljbc);
4278   - return map;
4279   - }
4280   -
4281   - /**
4282   - * 调整班次类型
4283   - *
4284   - * @param id
4285   - * @param bcType
4286   - * @param remarks
4287   - * @return
4288   - */
4289   - @Override
4290   - public Map<String, Object> changeBcType(Long id, String bcType, String remarks, String majorStationName) {
4291   - Map<String, Object> rs = new HashMap<>();
4292   -
4293   - try {
4294   - ScheduleRealInfo sch = dayOfSchedule.get(id);
4295   - if (sch != null) {
4296   - sch.setBcType(bcType);
4297   - sch.setRemarks(remarks);
4298   - rs.put("status", ResponseCode.SUCCESS);
4299   - rs.put("t", sch);
4300   -
4301   - if ("major".equals(bcType)) {
4302   - sch.setMajorStationName(majorStationName);
4303   - }
4304   -
4305   - dayOfSchedule.save(sch);
4306   - }
4307   - } catch (Exception e) {
4308   - logger.error("", e);
4309   - rs.put("status", ResponseCode.ERROR);
4310   - }
4311   -
4312   - return rs;
4313   - }
4314   -
4315   - @Override
4316   - public Map<String, Object> historySave(ScheduleRealInfo sch) {
4317   - Map<String, Object> rs = new HashMap<>();
4318   - rs.put("status", ResponseCode.ERROR);
4319   -
4320   - ScheduleRealInfo oldSch = super.findById(sch.getId());
4321   - //事后日志记录
4322   - AfterwardsLogger aflog = AfterwardsLogger.start(oldSch, "事后调整");
4323   -
4324   - //换车
4325   - if (StringUtils.isNotEmpty(sch.getClZbh()) && !oldSch.getClZbh().equals(sch.getClZbh())) {
4326   - if (!carExist(oldSch.getGsBm(), sch.getClZbh())) {
4327   - rs.put("msg", "车辆 " + sch.getClZbh() + " 不存在!");
4328   - return rs;
4329   - } else {
4330   - aflog.log("换车", oldSch.getClZbh(), sch.getClZbh());
4331   - oldSch.setClZbh(sch.getClZbh());
4332   - }
4333   - }
4334   -
4335   - //换驾驶员
4336   - if (StringUtils.isNotEmpty(sch.getjGh()) && !oldSch.getjGh().equals(sch.getjGh())) {
4337   - String jName = getPersonName(oldSch.getGsBm(), sch.getjGh());
4338   - if (StringUtils.isEmpty(jName)) {
4339   - rs.put("msg", oldSch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
4340   - return rs;
4341   - }
4342   - aflog.log("换驾驶员", oldSch.getjGh() + "/" + oldSch.getjName(), sch.getjGh() + "/" + sch.getjName());
4343   - persoChange(oldSch, sch.getjGh());
4344   - }
4345   -
4346   - //换售票员
4347   - if (StringUtils.isNotEmpty(sch.getsGh()) && !oldSch.getsGh().equals(sch.getsGh())) {
4348   - String sName = getPersonName(oldSch.getGsBm(), sch.getsGh());
4349   - if (StringUtils.isEmpty(sName)) {
4350   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getsGh() + "】的售票员");
4351   - return rs;
4352   - }
4353   - aflog.log("换售票员", oldSch.getsGh() + "/" + oldSch.getsName(), sch.getsGh() + "/" + sch.getsName());
4354   - persoChangeSPY(oldSch, sch.getsGh());
4355   - }
4356   -
4357   - //烂班
4358   - boolean dest1 = oldSch.getStatus() == -1;
4359   - boolean dest2 = sch.getStatus() == -1;
4360   - if (!dest1 && dest2) {
4361   - oldSch.destroy();
4362   - aflog.log("烂班");
4363   - } else if (dest1 && !dest2) {
4364   - //撤销烂班
4365   - oldSch.setJhlc(oldSch.getJhlcOrig());
4366   - oldSch.setStatus(0);
4367   - oldSch.calcStatus();
4368   - oldSch.setAdjustExps(null);
4369   - aflog.log("撤销烂班");
4370   - }
4371   -
4372   - oldSch.setAdjustExps(sch.getAdjustExps());
4373   -
4374   - /**
4375   - * 修改班次里程
4376   - */
4377   - if (!oldSch.getJhlc().equals(sch.getJhlc())) {
4378   - double jhlcNum = sch.getJhlc();
4379   - aflog.log("修改班次里程", oldSch.getJhlc(), jhlcNum);
4380   - //烂班
4381   - if (jhlcNum == 0 && oldSch.getJhlcOrig() != 0)
4382   - oldSch.destroy();
4383   - else {
4384   - oldSch.setJhlc(jhlcNum);
4385   - //临加班次,实际计划一起改
4386   - if (oldSch.isSflj())
4387   - oldSch.setJhlcOrig(jhlcNum);
4388   - }
4389   - }
4390   -
4391   - //待发时间
4392   - if (!CustomStringUtils.equals(oldSch.getDfsj(), sch.getDfsj())) {
4393   - aflog.log("修改待发时间", oldSch.getDfsj(), sch.getDfsj());
4394   - oldSch.setDfsj(sch.getDfsj());
4395   - }
4396   - //实发时间
4397   - if (!CustomStringUtils.equals(oldSch.getFcsjActual(), sch.getFcsjActual())) {
4398   - aflog.log("修改实发时间", oldSch.getFcsjActual(), sch.getFcsjActual());
4399   - oldSch.setFcsjActual(sch.getFcsjActual());
4400   - }
4401   - //实际终点
4402   - if (!CustomStringUtils.equals(oldSch.getZdsjActual(), sch.getZdsjActual())) {
4403   - aflog.log("修改实达时间", oldSch.getZdsjActual(), sch.getZdsjActual());
4404   - oldSch.setZdsjActual(sch.getZdsjActual());
4405   - }
4406   -
4407   - //备注
4408   - if (!CustomStringUtils.equals(oldSch.getRemarks(), sch.getRemarks())) {
4409   - aflog.log("修改备注", oldSch.getRemarks(), sch.getRemarks());
4410   - oldSch.setRemarks(sch.getRemarks());
4411   - }
4412   -
4413   - scheduleRealInfoRepository.save(oldSch);
4414   -
4415   - aflog.end();
4416   - rs.put("status", ResponseCode.SUCCESS);
4417   - return rs;
4418   - }
4419   -
4420   - @Autowired
4421   - SvgAttributeRepository svgAttributeRepository;
4422   -
4423   - @Override
4424   - public Map<String, Object> svgAttr(String jsonStr) {
4425   - Map<String, Object> rs = new HashMap<>();
4426   -
4427   - try {
4428   - JSONObject jObj = JSONObject.parseObject(StringEscapeUtils.unescapeHtml4(jsonStr));
4429   -
4430   - SvgAttribute svgAttribute = new SvgAttribute();
4431   - svgAttribute.setLineCode(jObj.getString("lineCode"));
4432   - svgAttribute.setHideStations(jObj.getString("hideStations"));
4433   - svgAttribute.setNicknames(jObj.getString("nicknames"));
4434   - svgAttributeRepository.save(svgAttribute);
4435   -
4436   - rs.put("t", svgAttribute);
4437   - rs.put("status", ResponseCode.SUCCESS);
4438   - } catch (Exception e) {
4439   - logger.error("", e);
4440   - rs.put("status", ResponseCode.ERROR);
4441   - }
4442   - return rs;
4443   - }
4444   -
4445   - @Override
4446   - public Map<String, Object> findSvgAttr(String idx) {
4447   - Map<String, Object> rs = new HashMap<>();
4448   - try {
4449   - List<String> lineCodes = Splitter.on(",").splitToList(idx);
4450   - List<SvgAttribute> list = svgAttributeRepository.findSvgAttr(lineCodes);
4451   -
4452   - rs.put("status", ResponseCode.SUCCESS);
4453   - rs.put("list", list);
4454   - } catch (Exception e) {
4455   - logger.error("", e);
4456   - rs.put("status", ResponseCode.ERROR);
4457   - }
4458   - return rs;
4459   - }
4460   -
4461   - @Override
4462   - public Map<String, Object> addRemarks(Long id, String remarks) {
4463   - Map<String, Object> rs = new HashMap<>();
4464   - try {
4465   - ScheduleRealInfo sch = dayOfSchedule.get(id);
4466   - sch.addRemarks(remarks);
4467   -
4468   - rs.put("status", ResponseCode.SUCCESS);
4469   - rs.put("t", sch);
4470   - } catch (Exception e) {
4471   - logger.error("", e);
4472   - rs.put("status", ResponseCode.ERROR);
4473   - }
4474   - return rs;
4475   - }
4476   -
4477   - @Override
4478   - public List<Map<String, Object>> yesterdayDataList(String line) {
4479   - // TODO Auto-generated method stub
4480   - return null;
4481   - }
4482   -
4483   - @Override
4484   - public List<ScheduleRealInfo> exportWaybillQp(String clZbh, String date, String line) {
4485   - // TODO Auto-generated method stub
4486   - ReportUtils ee = new ReportUtils();
4487   - ReportRelatedUtils rru = new ReportRelatedUtils();
4488   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
4489   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4490   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
4491   -
4492   - DecimalFormat format = new DecimalFormat("0.00");
4493   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4494   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4495   - int jhbc = 0, cjbc = 0, ljbc = 0;
4496   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0;
4497   - float addMileage = 0l, remMileage = 0l, addgl = 0, remgl = 0;
4498   - int xyz = 1;
4499   - Map<String, Object> map;
4500   - for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
4501   - if (scheduleRealInfo != null) {
4502   - //计算计划里程(主任务过滤掉临加班次),烂班里程,临加里程,计划班次,烂班班次,增加班次
4503   - //计划里程(主任务过滤掉临加班次),
4504   - //烂班里程(主任务烂班),
4505   - //临加里程(主任务临加),
4506   - //计划班次,烂班班次,增加班次
4507   - double jh = 0, sj = 0;
4508   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
4509   - if (scheduleRealInfo.isSflj()) {
4510   - ljbc++;
4511   - } else {
4512   - if (!(scheduleRealInfo.getBcType().equals("in")
4513   - || scheduleRealInfo.getBcType().equals("out"))) {
4514   - jhbc++;
4515   - jh += tempJhlc;
4516   - }
4517   - if (scheduleRealInfo.getStatus() == -1) {
4518   - remMileage += tempJhlc;
4519   - cjbc++;
4520   - }
4521   - }
4522   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
4523   - //计算营运里程,空驶里程
4524   - if (childTaskPlans.isEmpty()) {
4525   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
4526   - ) {
4527   - jcclc += tempJhlc;
4528   - } else {
4529   - if (scheduleRealInfo.getStatus() != -1) {
4530   - if (scheduleRealInfo.isSflj()) {
4531   - addMileage += tempJhlc;
4532   - }
4533   - sj += tempJhlc;
4534   - }
4535   - }
4536   - } else {
4537   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4538   - while (it.hasNext()) {
4539   - ChildTaskPlan childTaskPlan = it.next();
4540   - if (childTaskPlan.getMileageType().equals("empty")) {
4541   - if (childTaskPlan.isDestroy()) {
4542   - remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4543   - } else {
4544   - if (scheduleRealInfo.isSflj()) {
4545   - addMileage += tempJhlc;
4546   - }
4547   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4548   - }
4549   - } else {
4550   - if (childTaskPlan.isDestroy()) {
4551   - remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4552   -// cjbc++;
4553   - } else {
4554   - if (scheduleRealInfo.isSflj()) {
4555   - addMileage += tempJhlc;
4556   - }
4557   - sj += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4558   - }
4559   - }
4560   - }
4561   - }
4562   -
4563   - if (!(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out"))) {
4564   - map = new HashMap<String, Object>();
4565   - try {
4566   - scheduleRealInfo.setBcs(xyz);
4567   - xyz++;
4568   - Set<ChildTaskPlan> cs = scheduleRealInfo.getcTasks();
4569   - Double sjlc = 0.0;
4570   - if (!cs.isEmpty()) {
4571   - Iterator<ChildTaskPlan> it = cs.iterator();
4572   - while (it.hasNext()) {
4573   - ChildTaskPlan c = it.next();
4574   - if (!c.isDestroy()) {
4575   - sjlc += c.getMileage() == null ? 0 : c.getMileage();
4576   - }
4577   -
4578   - }
4579   - } else {
4580   - if (scheduleRealInfo.getStatus() != -1) {
4581   - sjlc = scheduleRealInfo.getJhlc();
4582   - }
4583   - }
4584   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
4585   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
4586   - scheduleRealInfo.setSjlc(format.format(sjlc));
4587   - map = rru.getMapValue(scheduleRealInfo);
4588   - String zdsj = scheduleRealInfo.getZdsj();
4589   - String zdsjActual = scheduleRealInfo.getZdsjActual();
4590   - if (zdsj != null && zdsjActual != null &&
4591   - !zdsj.equals(zdsjActual)) {
4592   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
4593   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
4594   - if (zdsj.compareTo(zdsjActual) > 0) {
4595   - if (zdsjT - zdsjAT > 1000) {
4596   - map.put("fast", "");
4597   - map.put("slow", zdsjAT - zdsjT + 1440);
4598   - } else {
4599   - map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
4600   - map.put("slow", "");
4601   - }
4602   - } else {
4603   - if (zdsjAT - zdsjT > 1000) {
4604   - map.put("fast", zdsjT - zdsjAT + 1440);
4605   - map.put("slow", "");
4606   - } else {
4607   - map.put("fast", "");
4608   - map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
4609   - }
4610   - }
4611   - } else {
4612   - map.put("fast", "");
4613   - map.put("slow", "");
4614   - }
4615   - listMap.add(map);
4616   - } catch (Exception e) {
4617   - e.printStackTrace();
4618   - }
4619   - }
4620   - jhlc += jh;
4621   - yygl += sj;
4622   - if (jh > sj) {
4623   - remgl += jh - sj;
4624   - } else {
4625   - addgl += sj - jh;
4626   - }
4627   - }
4628   - }
4629   -
4630   -
4631   - List<Ylxxb> listYlxxb = ylxxbRepository.queryListYlxxb(clZbh, date);
4632   - Double jzl = 0.0;
4633   - for (int t = 0; t < listYlxxb.size(); t++) {
4634   - Ylxxb y = listYlxxb.get(t);
4635   - jzl += y.getJzl();
4636   - }
4637   -
4638   - //计算里程和班次数,并放入Map里
4639   - map = findKMBCQp(clZbh, date, line);
4640   - map.put("jzl", jzl);
4641   -// map.put("jhlc", format.format(jhlc + jcclc));
4642   -// map.put("yygljh", format.format(jhlc));
4643   -// map.put("ssgl", format.format(remMileage));
4644   -// map.put("ksgl", format.format(ksgl));
4645   -// map.put("yyglsj", format.format(yygl));
4646   -// map.put("jhbc", jhbc);
4647   -// map.put("jcclc", jcclc);
4648   -//
4649   -// map.put("ljgl", format.format(addMileage));
4650   -// map.put("ssbc", cjbc);
4651   -// map.put("ysgl", format.format(yygl));
4652   -// map.put("sjbc", jhbc - cjbc + ljbc);
4653   -// map.put("zgl", format.format(yygl + ksgl + jcclc));
4654   -// map.put("ljbc", ljbc);
4655   -
4656   - String zdp = "", zwdp = "", wdp = "";
4657   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4658   - List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59");
4659   - try {
4660   - Long fcsj1 = sdf.parse(date + " 03:00").getTime();
4661   - Long fcsj2 = sdf.parse(date + " 11:00").getTime();
4662   - Long fcsj3 = sdf.parse(date + " 22:00").getTime();
4663   - for (int i = 0; i < listDtuy.size(); i++) {
4664   - DutyEmployee t = listDtuy.get(i);
4665   - Long ts = t.getTs();
4666   - if (ts > fcsj1 && ts < fcsj2) {
4667   - if (zdp.indexOf(t.getuName()) == -1) {
4668   - zdp += t.getuName() + ",";
4669   -
4670   - }
4671   - } else if (ts > fcsj2 && ts < fcsj3) {
4672   - if (zwdp.indexOf(t.getuName()) == -1) {
4673   - zwdp += t.getuName() + ",";
4674   - }
4675   - } else {
4676   - if (wdp.indexOf(t.getuName()) == -1) {
4677   - wdp += t.getuName() + ",";
4678   - }
4679   - }
4680   - }
4681   - } catch (ParseException e) {
4682   - // TODO Auto-generated catch block
4683   - e.printStackTrace();
4684   - }
4685   - map.put("zdp", zdp);
4686   - map.put("zwdp", zwdp);
4687   - map.put("wdp", wdp);
4688   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
4689   - list.add(listMap.iterator());
4690   - ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/waybill_qingpu.xls",
4691   - path + "export/" + date + "-" + clZbh + "-行车路单.xls");
4692   -
4693   - return scheduleRealInfos;
4694   - }
4695   -
4696   - @Override
4697   - public Map<String, Object> findKMBCQp(String clZbh, String date, String line) {
4698   - // TODO Auto-generated method stub
4699   - List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4700   - DecimalFormat format = new DecimalFormat("0.00");
4701   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4702   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4703   - int jhbc = 0, cjbc = 0, ljbc = 0, sjbc = 0;
4704   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0, ljjcclc = 0, jhjcclc = 0;
4705   - double addMileage = 0, remMileage = 0, addgl = 0, remgl = 0;
4706   - Map<String, Object> map = new HashMap<String, Object>();
4707   - jhlc = culateMieageService.culateJhgl(lists);
4708   - jcclc = culateMieageService.culateJccgl(lists);
4709   - jhjcclc = culateMieageService.culateJhJccgl(lists);
4710   - remMileage = culateMieageService.culateLbgl(lists);
4711   - ksgl = culateMieageService.culateKsgl(lists);
4712   - yygl = culateMieageService.culateSjgl(lists);
4713   - jhbc = culateMieageService.culateJhbc(lists, "");
4714   - addMileage = culateMieageService.culateLjgl(lists);
4715   - cjbc = culateMieageService.culateLbbc(lists);
4716   - sjbc = culateMieageService.culateSjbc(lists, "");
4717   - ljbc = culateMieageService.culateLjbc(lists, "");
4718   - double zyygl = Arith.add(yygl, addMileage);
4719   - double zksgl = Arith.add(ksgl, jcclc);
4720   - map.put("jhlc", Arith.add(jhlc, jhjcclc));
4721   - map.put("yygljh", jhlc);
4722   - map.put("ssgl", remMileage);
4723   - map.put("ksgl", ksgl);
4724   - map.put("yyglsj", Arith.add(yygl, addMileage));
4725   - map.put("jcclc", jcclc);
4726   - map.put("jhbc", jhbc);
4727   - map.put("ljgl", addMileage);
4728   - map.put("ssbc", cjbc);
4729   - map.put("ysgl", Arith.add(yygl, addMileage));
4730   - map.put("sjbc", sjbc);
4731   - map.put("zgl", Arith.add(zyygl, zksgl));
4732   - map.put("ljbc", ljbc);
4733   -
4734   - return map;
4735   - }
4736   -
4737   - @Override
4738   - public List<ScheduleRealInfo> queryListWaybillQp(String clZbh, String date, String line) {
4739   - // TODO Auto-generated method stub
4740   - DecimalFormat format = new DecimalFormat("0.00");
4741   - List<ScheduleRealInfo> list = null;
4742   - list = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4743   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
4744   - for (int i = 0; i < list.size(); i++) {
4745   - ScheduleRealInfo s = list.get(i);
4746   - if (!(s.getBcType().equals("in") || s.getBcType().equals("out"))) {
4747   - String remarks = "";
4748   - Double sjlc = 0.0;
4749   - if (s.getRemarks() != null) {
4750   - remarks += s.getRemarks();
4751   - }
4752   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
4753   - if (!childTaskPlans.isEmpty()) {
4754   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4755   - while (it.hasNext()) {
4756   - ChildTaskPlan c = it.next();
4757   - if (c.getRemarks() != null && c.getRemarks().length() > 0) {
4758   - if (remarks.indexOf(c.getRemarks()) == -1) {
4759   - remarks += c.getRemarks();
4760   - }
4761   - }
4762   -
4763   - if (!c.isDestroy()) {
4764   - if (c.getMileageType().equals("service")) {
4765   - sjlc += c.getMileage() == null ? 0 : c.getMileage();
4766   - }
4767   - }
4768   -
4769   - }
4770   - } else {
4771   - if (s.getStatus() != -1) {
4772   - sjlc = s.getJhlc();
4773   - }
4774   - }
4775   - s.setSjlc(format.format(sjlc));
4776   - s.setRemarks(remarks);
4777   - newList.add(s);
4778   - }
4779   -
4780   - }
4781   -
4782   - return newList;
4783   - }
4784   -
4785   - @Override
4786   - public Map<String, Object> MapById(Long id) {
4787   - // TODO Auto-generated method stub
4788   - Map<String, Object> dMap=new HashMap<>();
4789   - dMap.put("dGroup_eq", "oilType");
4790   - Iterator<Dictionary> it= dictionaryService.list(dMap).iterator();
4791   - while (it.hasNext()) {
4792   - Dictionary d=it.next();
4793   - dMap.put(d.getdCode(), d.getdName());
4794   - }
4795   - Map<String, Object> map = new HashMap<String, Object>();
4796   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4797   - ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
4798   - String xlbm = s.getXlBm();
4799   - String fcrq = s.getScheduleDateStr();
4800   -
4801   - int type = 2;
4802   - Double ccyl = 0.0;
4803   - Double jcyl = 0.0;
4804   - Double yh = 0.0;
4805   - Double jzl = 0.0;
4806   - Double zlc = 0.0;
4807   - String rylx="";
4808   - List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
4809   - if (listCars.size() > 0) {
4810   - if (listCars.get(0).getSfdc() != null) {
4811   - if (listCars.get(0).getSfdc()) {
4812   - List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
4813   - type = 1;
4814   - for (int i = 0; i < listDlb.size(); i++) {
4815   - Dlb d = listDlb.get(i);
4816   - if (d.getLp() == null) {
4817   - ccyl = Arith.add(ccyl, d.getCzcd());
4818   - jcyl = Arith.add(jcyl, d.getJzcd());
4819   - yh = Arith.add(yh, d.getHd());
4820   - jzl = Arith.add(jzl, d.getCdl());
4821   - zlc = Arith.add(zlc, d.getZlc());
4822   - } else {
4823   - if (d.getLp().equals(s.getLpName())) {
4824   - ccyl = Arith.add(ccyl, d.getCzcd());
4825   - jcyl = Arith.add(jcyl, d.getJzcd());
4826   - yh = Arith.add(yh, d.getHd());
4827   - jzl = Arith.add(jzl, d.getCdl());
4828   - zlc = Arith.add(zlc, d.getZlc());
4829   - }
4830   - }
4831   -
4832   - }
4833   - } else {
4834   - List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
4835   - type = 0;
4836   - for (int i = 0; i < listYlb.size(); i++) {
4837   - Ylb y = listYlb.get(i);
4838   - if (y.getLp() == null) {
4839   - ccyl = Arith.add(ccyl, y.getCzyl());
4840   - jcyl = Arith.add(jcyl, y.getJzyl());
4841   - yh = Arith.add(yh, y.getYh());
4842   - jzl = Arith.add(jzl, y.getJzl());
4843   - zlc = Arith.add(zlc, y.getZlc());
4844   - if(dMap.get(y.getRylx())!=null)
4845   - rylx =dMap.get(y.getRylx()).toString();
4846   - } else {
4847   - if (y.getLp().equals(s.getLpName())) {
4848   - ccyl = Arith.add(ccyl, y.getCzyl());
4849   - jcyl = Arith.add(jcyl, y.getJzyl());
4850   - yh = Arith.add(yh, y.getYh());
4851   - jzl = Arith.add(jzl, y.getJzl());
4852   - zlc = Arith.add(zlc, y.getZlc());
4853   - if(dMap.get(y.getRylx())!=null)
4854   - rylx =dMap.get(y.getRylx()).toString();
4855   - }
4856   - }
4857   - }
4858   - }
4859   - }
4860   - }
4861   -
4862   - map.put("rylx", "加注类别:"+rylx);
4863   - map.put("jzl", jzl);
4864   - map.put("yh", yh);
4865   - map.put("ccyl", ccyl);
4866   - map.put("jcyl", jcyl);
4867   - map.put("type", type);
4868   - map.put("zlc", zlc);
4869   - map.put("xlName", s.getXlName());
4870   - map.put("clZbh", s.getClZbh());
4871   - map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
4872   - map.put("fcsjActual", s.getFcsjActual());
4873   - map.put("zdzName", s.getZdzName());
4874   - map.put("scheduleDate", s.getScheduleDateStr());
4875   - map.put("lpName", s.getLpName());
4876   - String zdp = "", zwdp = "", wdp = "";
4877   - String zdpT = "", zwdpT = "", wdpT = "";
4878   - String dbdp = "";
4879   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
4880   - try {
4881   - Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
4882   - Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
4883   - Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
4884   - for (int i = 0; i < list.size(); i++) {
4885   - DutyEmployee t = list.get(i);
4886   - if (dbdp.indexOf(t.getuName()) == -1) {
4887   - if (!(dbdp.length() > 0)) {
4888   - dbdp = t.getuName();
4889   - } else {
4890   - dbdp += "," + t.getuName();
4891   - }
4892   - }
4893   - Long ts = t.getTs();
4894   - if (ts > fcsj1 && ts < fcsj2) {
4895   - if (zdp.indexOf(t.getuName()) == -1) {
4896   - if (!(zdp.length() > 0)) {
4897   - zdpT = t.getuName() + "...";
4898   - }
4899   - zdp += t.getuName() + ",";
4900   -
4901   - }
4902   - } else if (ts > fcsj2 && ts < fcsj3) {
4903   - if (zwdp.indexOf(t.getuName()) == -1) {
4904   - if (!(zwdp.length() > 0)) {
4905   - zwdpT = t.getuName() + "...";
4906   - }
4907   - zwdp += t.getuName() + ",";
4908   - }
4909   - } else {
4910   - if (wdp.indexOf(t.getuName()) == -1) {
4911   - if (!(wdp.length() > 0)) {
4912   - wdpT = t.getuName() + "...";
4913   - }
4914   - wdp += t.getuName() + ",";
4915   - }
4916   - }
4917   - }
4918   - } catch (ParseException e) {
4919   - // TODO Auto-generated catch block
4920   - e.printStackTrace();
4921   - }
4922   - map.put("zdp", zdp);
4923   - map.put("zwdp", zwdp);
4924   - map.put("wdp", wdp);
4925   - map.put("zdpT", zdpT);
4926   - map.put("zwdpT", zwdpT);
4927   - map.put("wdpT", wdpT);
4928   - map.put("dbdp", dbdp);
4929   - return map;
4930   - }
4931   -
4932   - @Override
4933   - public Map<String, Object> MapByIdQp(Long id) {
4934   - // TODO Auto-generated method stub
4935   - Map<String, Object> map = new HashMap<String, Object>();
4936   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4937   - ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
4938   - String xlbm = s.getXlBm();
4939   - String fcrq = s.getScheduleDateStr();
4940   -
4941   - int type = 0;
4942   - Double ccyl = 0.0;
4943   - Double jcyl = 0.0;
4944   - Double yh = 0.0;
4945   - Double jzl = 0.0;
4946   - Double zlc = 0.0;
4947   -// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
4948   -// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
4949   -// if(listYlb.size()>0){
4950   -// type=0;
4951   -// for (int i = 0; i < listYlb.size(); i++) {
4952   -// Ylb y = listYlb.get(i);
4953   -// if(y.getLp()==null){
4954   -// ccyl=Arith.add(ccyl, y.getCzyl());
4955   -// jcyl=Arith.add(jcyl, y.getJzyl());
4956   -// yh =Arith.add(yh ,y.getYh());
4957   -// jzl =Arith.add(jzl, y.getJzl());
4958   -// zlc =Arith.add(zlc, y.getZlc());
4959   -// }else{
4960   -// if(y.getLp().equals(s.getLpName())){
4961   -// ccyl=Arith.add(ccyl, y.getCzyl());
4962   -// jcyl=Arith.add(jcyl, y.getJzyl());
4963   -// yh =Arith.add(yh ,y.getYh());
4964   -// jzl =Arith.add(jzl, y.getJzl());
4965   -// zlc =Arith.add(zlc, y.getZlc());
4966   -// }
4967   -// }
4968   -//
4969   -// }
4970   -// }else{
4971   -// type=1;
4972   -// for (int i = 0; i < listDlb.size(); i++) {
4973   -// Dlb d=listDlb.get(i);
4974   -// if(d.getLp()==null){
4975   -// ccyl=Arith.add(ccyl, d.getCzcd());
4976   -// jcyl=Arith.add(jcyl, d.getJzcd());
4977   -// yh =Arith.add(yh ,d.getHd());
4978   -// jzl =Arith.add(jzl, d.getCdl());
4979   -// zlc =Arith.add(zlc, d.getZlc());
4980   -// }else{
4981   -// if(d.getLp().equals(s.getLpName())){
4982   -// ccyl=Arith.add(ccyl, d.getCzcd());
4983   -// jcyl=Arith.add(jcyl, d.getJzcd());
4984   -// yh =Arith.add(yh ,d.getHd());
4985   -// jzl =Arith.add(jzl, d.getCdl());
4986   -// zlc =Arith.add(zlc, d.getZlc());
4987   -// }
4988   -// }
4989   -//
4990   -// }
4991   -// }
4992   -
4993   - List<Ylxxb> listylxxb = ylxxbRepository.queryListYlxxb(s.getClZbh(), fcrq);
4994   - for (int i = 0; i < listylxxb.size(); i++) {
4995   - Ylxxb t = listylxxb.get(i);
4996   - jzl = Arith.add(jzl, t.getJzl());
4997   - }
4998   - map.put("jzl", jzl);
4999   - map.put("yh", yh);
5000   - map.put("ccyl", ccyl);
5001   - map.put("jcyl", jcyl);
5002   - map.put("type", type);
5003   - map.put("zlc", zlc);
5004   - map.put("xlName", s.getXlName());
5005   - map.put("clZbh", s.getClZbh());
5006   - map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
5007   - map.put("fcsjActual", s.getFcsjActual());
5008   - map.put("zdzName", s.getZdzName());
5009   - map.put("scheduleDate", s.getScheduleDateStr());
5010   - map.put("lpName", s.getLpName());
5011   - String zdp = "", zwdp = "", wdp = "";
5012   - String zdpT = "", zwdpT = "", wdpT = "";
5013   - String dbdp = "";
5014   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
5015   - try {
5016   - Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
5017   - Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
5018   - Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
5019   - for (int i = 0; i < list.size(); i++) {
5020   - DutyEmployee t = list.get(i);
5021   - if (dbdp.indexOf(t.getuName()) == -1) {
5022   - if (!(dbdp.length() > 0)) {
5023   - dbdp = t.getuName();
5024   - } else {
5025   - dbdp += "," + t.getuName();
5026   - }
5027   - }
5028   - Long ts = t.getTs();
5029   - if (ts > fcsj1 && ts < fcsj2) {
5030   - if (zdp.indexOf(t.getuName()) == -1) {
5031   - if (!(zdp.length() > 0)) {
5032   - zdpT = t.getuName() + "...";
5033   - }
5034   - zdp += t.getuName() + ",";
5035   -
5036   - }
5037   - } else if (ts > fcsj2 && ts < fcsj3) {
5038   - if (zwdp.indexOf(t.getuName()) == -1) {
5039   - if (!(zwdp.length() > 0)) {
5040   - zwdpT = t.getuName() + "...";
5041   - }
5042   - zwdp += t.getuName() + ",";
5043   - }
5044   - } else {
5045   - if (wdp.indexOf(t.getuName()) == -1) {
5046   - if (!(wdp.length() > 0)) {
5047   - wdpT = t.getuName() + "...";
5048   - }
5049   - wdp += t.getuName() + ",";
5050   - }
5051   - }
5052   - }
5053   - } catch (ParseException e) {
5054   - // TODO Auto-generated catch block
5055   - e.printStackTrace();
5056   - }
5057   - map.put("zdp", zdp);
5058   - map.put("zwdp", zwdp);
5059   - map.put("wdp", wdp);
5060   - map.put("zdpT", zdpT);
5061   - map.put("zwdpT", zwdpT);
5062   - map.put("wdpT", wdpT);
5063   - map.put("dbdp", dbdp);
5064   - return map;
5065   - }
5066   -
5067   - @Override
5068   - public List<Map<String, Object>> scheduleDailyQp(String line, String date) {
5069   - // TODO Auto-generated method stub
5070   - List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
5071   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleDailyQp(line, date);
5072   - Map<String, Object> map = null;
5073   - String lp = "lp";
5074   - String jgh = "jgh";
5075   - String clzbh = "clzbh";
5076   - int bcs = 0;
5077   - String thclzbh = "";
5078   - String sgh = "sgh";
5079   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5080   - ScheduleRealInfo scheduleRealInfo = scheduleRealInfos.get(i);
5081   - if (scheduleRealInfo.getLpName().equals(lp)) {
5082   - bcs++;
5083   - String fcsj = scheduleRealInfo.getFcsj();
5084   -
5085   - if (!clzbh.equals(scheduleRealInfo.getClZbh())) {
5086   - clzbh = scheduleRealInfo.getClZbh();
5087   - if (thclzbh == "") {
5088   - thclzbh += scheduleRealInfo.getClZbh() + ",";
5089   - } else {
5090   - thclzbh += scheduleRealInfo.getClZbh();
5091   - }
5092   - map.put("thclzbh", thclzbh);
5093   - }
5094   -
5095   - if (!jgh.equals(scheduleRealInfo.getjGh())) {
5096   - jgh = scheduleRealInfo.getjGh();
5097   - if (map.get("jjb2") != null) {
5098   - map.put("jjb3", scheduleRealInfo.getjGh() + "/" +
5099   - scheduleRealInfo.getFcsjActual());
5100   -
5101   - } else {
5102   - map.put("jjb2", scheduleRealInfo.getjGh() + "/" +
5103   - scheduleRealInfo.getFcsjActual());
5104   - }
5105   -
5106   - }
5107   -
5108   - if (scheduleRealInfo.getsGh() != null) {
5109   - if (!scheduleRealInfo.getsGh().equals(sgh)) {
5110   - sgh = scheduleRealInfo.getsGh() == null ? "" : scheduleRealInfo.getsGh();
5111   - if (!sgh.equals("")) {
5112   - if (map.get("sjb1") != null) {
5113   - if (map.get("sjb2") != null) {
5114   - map.put("sjb3", scheduleRealInfo.getsGh() + "/" +
5115   - scheduleRealInfo.getFcsjActual());
5116   - } else {
5117   - map.put("sjb2", scheduleRealInfo.getsGh() + "/" +
5118   - scheduleRealInfo.getFcsjActual());
5119   - }
5120   - } else {
5121   - map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
5122   - scheduleRealInfo.getFcsjActual());
5123   - }
5124   - }
5125   - }
5126   - }
5127   - if (scheduleRealInfo.getFcsjActual() != null) {
5128   - String fcsjs[] = fcsj.split(":");
5129   - String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
5130   - int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
5131   - int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
5132   - map.put("cz" + bcs, b - a);
5133   - } else {
5134   - map.put("cz" + bcs, "无");
5135   - }
5136   - map.put("lp", scheduleRealInfo.getLpName());
5137   - map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
5138   - map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
5139   -
5140   - if (i < scheduleRealInfos.size() - 1) {
5141   - if (!scheduleRealInfos.get(i + 1).getLpName().equals
5142   - (scheduleRealInfos.get(i).getLpName())) {
5143   - list.add(map);
5144   - lp = "lp";
5145   - jgh = "jgh";
5146   - clzbh = "clzbh";
5147   - bcs = 0;
5148   - thclzbh = "";
5149   - sgh = "sgh";
5150   - }
5151   - } else {
5152   - list.add(map);
5153   - }
5154   - } else {
5155   - bcs = 1;
5156   - map = new HashMap<String, Object>();
5157   - lp = scheduleRealInfo.getLpName();
5158   - jgh = scheduleRealInfo.getjGh();
5159   - clzbh = scheduleRealInfo.getClZbh();
5160   - if (scheduleRealInfo.getsGh() != null) {
5161   - sgh = scheduleRealInfo.getsGh();
5162   - map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
5163   - scheduleRealInfo.getFcsjActual());
5164   - }
5165   - String fcsj = scheduleRealInfo.getFcsj();
5166   - scheduleRealInfo.getFcsjActual();
5167   - map.put("jjb1", jgh + "/" + scheduleRealInfo.getFcsjActual());
5168   - map.put("cccl", clzbh);
5169   -
5170   - if (scheduleRealInfo.getFcsjActual() != null) {
5171   - String fcsjs[] = fcsj.split(":");
5172   - String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
5173   - int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
5174   - int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
5175   - map.put("cz" + bcs, b - a);
5176   - } else {
5177   - map.put("cz" + bcs, "无");
5178   - }
5179   -
5180   -
5181   - map.put("lp", scheduleRealInfo.getLpName());
5182   - map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
5183   - map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
5184   -
5185   - if (i < scheduleRealInfos.size() - 1) {
5186   - if (!scheduleRealInfos.get(i + 1).getLpName().equals
5187   - (scheduleRealInfos.get(i).getLpName())) {
5188   - list.add(map);
5189   - lp = "lp";
5190   - jgh = "jgh";
5191   - clzbh = "clzbh";
5192   - bcs = 0;
5193   - thclzbh = "";
5194   - sgh = "sgh";
5195   - }
5196   - } else {
5197   - list.add(map);
5198   - }
5199   - }
5200   -
5201   - }
5202   - return list;
5203   - }
5204   -
5205   -
5206   - @Override
5207   - public List<Map<String, Object>> scheduleDailyExport(Map<String, Object> map) {
5208   - String line = map.get("line").toString();
5209   - String date = map.get("date").toString();
5210   - String xlName = map.get("xlName").toString();
5211   - String state = map.get("state").toString();
5212   - String type = map.get("type").toString();
5213   - String genre =map.get("genre").toString();
5214   - String df="";
5215   - if(map.get("df")!=null){
5216   - df=map.get("df").toString();
5217   - }
5218   -
5219   - List<Map<String, Object>> dataList2 = new ArrayList<Map<String, Object>>();
5220   - List<Map<String, Object>> dataList3 = new ArrayList<Map<String, Object>>();
5221   - List<Map<String, Object>> list1 = this.statisticsDaily(line, date, xlName, null);
5222   - List<ScheduleRealInfo> list2 = this.queryUserInfo(line, date, state);
5223   - List<ScheduleRealInfo> list3 = new ArrayList<ScheduleRealInfo>();
5224   - if(genre.equals("qp"))
5225   - list3=this.realScheduleListQp(line, date);
5226   - else if(genre.equals("zrw"))
5227   - list3=this.realScheduleList_zrw(line, date);
5228   - else
5229   - list3=this.realScheduleList(line, date);
5230   - Map<String, Object> nMap = new HashMap<String, Object>();
5231   - nMap.put("date", xlName + date);
5232   - nMap.put("jls", list1.get(0).get("jls"));
5233   - nMap.put("sjgl", list1.get(0).get("sjgl"));
5234   - for (Map<String, Object> m : list1) {
5235   -// m.put("ssgl", m.get("ssgl"));
5236   -// m.put("ssbc", m.get("ssbc"));
5237   -// m.put("ssgl_lz", m.get("ssgl_lz") + " / " + m.get("ssbc_lz"));
5238   -// m.put("ssgl_dm", m.get("ssgl_dm") + " / " + m.get("ssbc_dm"));
5239   -// m.put("ssgl_gz", m.get("ssgl_gz") + " / " + m.get("ssbc_gz"));
5240   -// m.put("ssgl_jf", m.get("ssgl_jf") + " / " + m.get("ssbc_jf"));
5241   -// m.put("ssgl_zs", m.get("ssgl_zs") + " / " + m.get("ssbc_zs"));
5242   -// m.put("ssgl_qr", m.get("ssgl_qr") + " / " + m.get("ssbc_qr"));
5243   -// m.put("ssgl_qc", m.get("ssgl_qc") + " / " + m.get("ssbc_qc"));
5244   -// m.put("ssgl_kx", m.get("ssgl_kx") + " / " + m.get("ssbc_kx"));
5245   -// m.put("ssgl_qh", m.get("ssgl_qh") + " / " + m.get("ssbc_qh"));
5246   -// m.put("ssgl_yw", m.get("ssgl_yw") + " / " + m.get("ssbc_yw"));
5247   -// m.put("ssgl_other", m.get("ssgl_other") + " / " + m.get("ssbc_other"));
5248   - }
5249   -
5250   - int size = 0;
5251   - Map<String, Object> tempMap = new HashMap<String, Object>();
5252   - for (int i = 0; i < list2.size(); i++) {
5253   - ScheduleRealInfo s = list2.get(i);
5254   - if (size == 5) {
5255   - size = 0;
5256   - dataList2.add(tempMap);
5257   - tempMap = new HashMap<String, Object>();
5258   - }
5259   - tempMap.put("lp" + size, s.getLpName());
5260   - tempMap.put("ch" + size, s.getClZbh());
5261   - tempMap.put("jz" + size, s.getjGh() + "/" + s.getjName());
5262   - tempMap.put("sz" + size, "");
5263   - tempMap.put("jw" + size, "");
5264   - tempMap.put("sw" + size, "");
5265   -
5266   - size++;
5267   - }
5268   - if (size < 5) {
5269   - for (; size < 5; size++) {
5270   - tempMap.put("lp" + size, "");
5271   - tempMap.put("ch" + size, "");
5272   - tempMap.put("jz" + size, "");
5273   - tempMap.put("sz" + size, "");
5274   - tempMap.put("jw" + size, "");
5275   - tempMap.put("sw" + size, "");
5276   - }
5277   - }
5278   -
5279   - dataList2.add(tempMap);
5280   -/*
5281   - size = 0;
5282   - tempMap = new HashMap<String, Object>();
5283   - for (ScheduleRealInfo schedule : list3) {
5284   - if (size == 3) {
5285   - size = 0;
5286   - dataList3.add(tempMap);
5287   - tempMap = new HashMap<String, Object>();
5288   - }
5289   - tempMap.put("lpName" + size, schedule.getLpName());
5290   - tempMap.put("qdzName" + size, schedule.getQdzName());
5291   - tempMap.put("zdsj" + size, schedule.getZdsj());
5292   - tempMap.put("zdsjActual" + size, schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "");
5293   - tempMap.put("zdsjk" + size, "");
5294   - tempMap.put("zdsjm" + size, "");
5295   - tempMap.put("fcsj" + size, schedule.getFcsj());
5296   - String fcsjActural=schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
5297   - String bcType=schedule.getBcType()!=null?schedule.getBcType():"";
5298   - if(bcType.equals("in")){
5299   - fcsjActural=fcsjActural+"(进)";
5300   - }
5301   - if(bcType.equals("out")){
5302   - fcsjActural=fcsjActural+"(出)";
5303   - }
5304   - tempMap.put("fcsjActual" + size, fcsjActural);
5305   - tempMap.put("fcsjk" + size, "");
5306   - tempMap.put("fcsjm" + size, "");
5307   - tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : "");
5308   -
5309   - size++;
5310   - }
5311   - if (size < 3) {
5312   - for (; size < 3; size++) {
5313   - tempMap.put("lpName" + size, "");
5314   - tempMap.put("qdzName" + size, "");
5315   - tempMap.put("zdsj" + size, "");
5316   - tempMap.put("zdsjActual" + size, "");
5317   - tempMap.put("zdsjk" + size, "");
5318   - tempMap.put("zdsjm" + size, "");
5319   - tempMap.put("fcsj" + size, "");
5320   - tempMap.put("fcsjActual" + size, "");
5321   - tempMap.put("fcsjk" + size, "");
5322   - tempMap.put("fcsjm" + size, "");
5323   - tempMap.put("remarks" + size, "");
5324   - }
5325   - }
5326   -*/
5327   -
5328   - size = 0;
5329   - tempMap = new HashMap<String, Object>();
5330   - for (ScheduleRealInfo schedule : list3) {
5331   - int x = size % 3;
5332   - if (x == 0 && size > 0) {
5333   - dataList3.add(tempMap);
5334   - tempMap = new HashMap<String, Object>();
5335   - }
5336   - tempMap.put("lpName" + x, schedule.getLpName());
5337   - tempMap.put("qdzName" + x, schedule.getQdzName());
5338   - tempMap.put("zdsj" + x, schedule.getZdsj());
5339   - String zdsjActual = schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "";
5340   - tempMap.put("zdsjActual" + x, zdsjActual);
5341   -
5342   - String zdsjk = "";
5343   - String zdsjm = "";
5344   - if (!zdsjActual.equals("")) {
5345   - String[] zdsj_s = schedule.getZdsj().split(":");
5346   - String[] zdsjActual_s = zdsjActual.split(":");
5347   - Long zdsj_ = Long.parseLong(zdsj_s[0]) * 60 + Long.parseLong(zdsj_s[1]);
5348   - Long zdsjActual_ = Long.parseLong(zdsjActual_s[0]) * 60 + Long.parseLong(zdsjActual_s[1]);
5349   - if ((zdsj_ - zdsjActual_) > 0) {
5350   - if(zdsj_ - zdsjActual_>1200){
5351   - zdsjm=String.valueOf(1440-(zdsj_-zdsjActual_));
5352   - }else{
5353   - zdsjk = String.valueOf(zdsj_ - zdsjActual_);
5354   - }
5355   - } else {
5356   - if(zdsjActual_ - zdsj_>1200){
5357   - zdsjk =String.valueOf(1440-(zdsjActual_ - zdsj_));
5358   - }else{
5359   - zdsjm = String.valueOf(zdsjActual_ - zdsj_);
5360   - }
5361   - }
5362   - }
5363   - tempMap.put("zdsjk" + x, zdsjk);
5364   - tempMap.put("zdsjm" + x, zdsjm.equals("0")?"":zdsjm);
5365   - tempMap.put("fcsj" + x, schedule.getFcsj());
5366   - String fcsjActural = schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
5367   - String bcType = schedule.getBcType() != null ? schedule.getBcType() : "";
5368   - String fcsjActuralstr = "";
5369   - if (bcType.equals("in")) {
5370   - fcsjActuralstr = fcsjActural + "(进)";
5371   - } else if (bcType.equals("out")) {
5372   - fcsjActuralstr = fcsjActural + "(出)";
5373   - } else {
5374   - fcsjActuralstr = fcsjActural;
5375   - }
5376   - tempMap.put("fcsjActual" + x, fcsjActuralstr);
5377   - String fcsjk = "";
5378   - String fcsjm = "";
5379   - String dfsjk ="";
5380   - String dfsjm="";
5381   - if (!fcsjActural.equals("")) {
5382   - String[] fcsj_s = schedule.getFcsj().split(":");
5383   - String[] fcsjActural_s = fcsjActural.split(":");
5384   - Long fcsj_ = Long.parseLong(fcsj_s[0]) * 60 + Long.parseLong(fcsj_s[1]);
5385   - Long fcsjActural_ = Long.parseLong(fcsjActural_s[0]) * 60 + Long.parseLong(fcsjActural_s[1]);
5386   - if ((fcsj_ - fcsjActural_) > 0) {
5387   - if(fcsj_ - fcsjActural_>1200){
5388   - fcsjm=String.valueOf(1440-(fcsj_ - fcsjActural_));
5389   - }else{
5390   - fcsjk = String.valueOf(fcsj_ - fcsjActural_);
5391   - }
5392   - } else {
5393   - if(fcsjActural_ - fcsj_>1200){
5394   - fcsjk =String.valueOf(1440-(fcsjActural_ - fcsj_));
5395   - }
5396   - else{
5397   - fcsjm = String.valueOf(fcsjActural_ - fcsj_);
5398   - }
5399   - }
5400   - if(df.equals("df")){
5401   - String[] dfsj_s =schedule.getDfsj().split(":");
5402   - Long dfsj_ = Long.parseLong(dfsj_s[0]) * 60 + Long.parseLong(dfsj_s[1]);
5403   - if ((dfsj_ - fcsjActural_) > 0) {
5404   - if(dfsj_ - fcsjActural_>1200){
5405   - dfsjm=String.valueOf(1440-(dfsj_ - fcsjActural_));
5406   - }else{
5407   - dfsjk = String.valueOf(dfsj_ - fcsjActural_);
5408   - }
5409   - } else {
5410   - if(fcsjActural_ - dfsj_>1200){
5411   - dfsjk= String.valueOf(1440-(fcsjActural_ - dfsj_));
5412   - }else{
5413   - dfsjm = String.valueOf(fcsjActural_ - dfsj_);
5414   - }
5415   - }
5416   - }
5417   - }
5418   - if(df.equals("df")){
5419   - tempMap.put("dfsj"+x,schedule.getDfsj());
5420   - tempMap.put("dfsjk" + x, dfsjk);
5421   - tempMap.put("dfsjm" + x, dfsjm.equals("0")?"":dfsjm);
5422   - }
5423   - tempMap.put("fcsjk" + x, fcsjk);
5424   - tempMap.put("fcsjm" + x, fcsjm.equals("0")?"":fcsjm);
5425   - tempMap.put("remarks" + x, schedule.getRemark() != null ? schedule.getRemark() : "");
5426   -
5427   - size++;
5428   - }
5429   - if (tempMap.get("lpName0") != null) {
5430   - if (tempMap.get("lpName1") == null) {
5431   - tempMap.put("lpName1", "");
5432   - tempMap.put("qdzName1", "");
5433   - tempMap.put("zdsj1", "");
5434   - tempMap.put("zdsjActual1", "");
5435   - tempMap.put("zdsjk1", "");
5436   - tempMap.put("zdsjm1", "");
5437   - tempMap.put("fcsj1", "");
5438   - tempMap.put("fcsjActual1", "");
5439   - tempMap.put("fcsjk1", "");
5440   - tempMap.put("fcsjm1", "");
5441   - if(df.equals("df")){
5442   - tempMap.put("dfsj1","");
5443   - tempMap.put("dfsjk1" , "");
5444   - tempMap.put("dfsjm1" , "");
5445   - }
5446   - tempMap.put("remarks1", "");
5447   - }
5448   - if (tempMap.get("lpName2") == null) {
5449   - tempMap.put("lpName2", "");
5450   - tempMap.put("qdzName2", "");
5451   - tempMap.put("zdsj2", "");
5452   - tempMap.put("zdsjActual2", "");
5453   - tempMap.put("zdsjk2", "");
5454   - tempMap.put("zdsjm2", "");
5455   - tempMap.put("fcsj2", "");
5456   - tempMap.put("fcsjActual2", "");
5457   - tempMap.put("fcsjk2", "");
5458   - tempMap.put("fcsjm2", "");
5459   - if(df.equals("df")){
5460   - tempMap.put("dfsj2","");
5461   - tempMap.put("dfsjk2" , "");
5462   - tempMap.put("dfsjm2" , "");
5463   - }
5464   - tempMap.put("remarks2", "");
5465   - }
5466   - dataList3.add(tempMap);
5467   - }
5468   -
5469   - if (date.length() == 10) {
5470   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
5471   - String dbdp = "";
5472   - try {
5473   - for (int i = 0; i < list.size(); i++) {
5474   - DutyEmployee t = list.get(i);
5475   - if (dbdp.indexOf(t.getuName()) == -1) {
5476   - if (!(dbdp.length() > 0)) {
5477   - dbdp = t.getuName();
5478   - } else {
5479   - dbdp += "," + t.getuName();
5480   - }
5481   - }
5482   - }
5483   - } catch (Exception e) {
5484   - // TODO: handle exception
5485   - e.printStackTrace();
5486   - }
5487   - nMap.put("dbdp", dbdp);
5488   - }
5489   -
5490   - if (type.equals("export")) {
5491   - String lineName = "";
5492   - if (map.containsKey("lineName"))
5493   - lineName = "-" + map.get("lineName").toString() + "-";
5494   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
5495   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
5496   - Map<String, Object> m = new HashMap<String, Object>();
5497   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
5498   - ReportUtils ee = new ReportUtils();
5499   - try {
5500   - listI.add(list1.iterator());
5501   - listI.add(dataList2.iterator());
5502   - listI.add(dataList3.iterator());
5503   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
5504   - String sourcePath = path + "mould/scheduleDaily.xls";
5505   - if (date.length() == 7) {
5506   - sdfMonth = new SimpleDateFormat("yyyy-MM");
5507   - sdfSimple = new SimpleDateFormat("yyyyMM");
5508   - sourcePath = path + "mould/scheduleDaily_m.xls";
5509   - }
5510   - if(df.equals("df")){
5511   - sourcePath =path + "mould/scheduleDaily_df.xls";
5512   - }
5513   - ee.excelReplace(listI, new Object[]{nMap}, sourcePath,
5514   - path + "export/" + sdfSimple.format(sdfMonth.parse(date)) + lineName + "调度日报.xls");
5515   - } catch (Exception e) {
5516   - // TODO: handle exception
5517   - e.printStackTrace();
5518   - }
5519   - }
5520   -
5521   - return new ArrayList<Map<String, Object>>();
5522   - }
5523   -
5524   - public void exportWaybill_pl(List<ScheduleRealInfo> listpl,
5525   - String date, String jName, String clZbh, String lpName) {
5526   - ReportUtils ee = new ReportUtils();
5527   - ReportRelatedUtils rru = new ReportRelatedUtils();
5528   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
5529   - List<ScheduleRealInfo> scheduleRealInfos = listpl;
5530   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
5531   -// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
5532   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
5533   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5534   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5535   - Set<ChildTaskPlan> cts = s.getcTasks();
5536   - if (cts != null && cts.size() > 0) {
5537   - lists.add(s);
5538   - } else {
5539   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
5540   - lists.add(s);
5541   - }
5542   - }
5543   - }
5544   - DecimalFormat format = new DecimalFormat("0.00");
5545   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
5546   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
5547   - //计算里程和班次数,并放入Map里
5548   - Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
5549   -
5550   - map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
5551   - map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
5552   - map.put("addMileage", culateMieageService.culateLjgl(lists));
5553   - double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
5554   - map.put("yygl", yygl);
5555   - double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
5556   - map.put("ksgl", ksgl);
5557   - map.put("realMileage", Arith.add(yygl, ksgl));
5558   - map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
5559   - map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
5560   - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
5561   - int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
5562   - map.put("sjbc", sjbc);
5563   -// map=new HashMap<String,Object>();
5564   -
5565   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
5566   - String minfcsj = "02:00";
5567   - List<Line> lineList = lineRepository.findLineByCode(listpl.get(0).getXlBm());
5568   - if (lineList.size() > 0) {
5569   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
5570   - + " id = ("
5571   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
5572   - + ")";
5573   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
5574   - }
5575   - String[] minSjs = minfcsj.split(":");
5576   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
5577   -
5578   -
5579   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5580   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5581   - String[] fcsj = s.getFcsj().split(":");
5582   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
5583   -
5584   - Long fscjT = 0L;
5585   - if (fcsjL < minSj) {
5586   - Calendar calendar = new GregorianCalendar();
5587   - calendar.setTime(s.getScheduleDate());
5588   - calendar.add(calendar.DATE, 1);
5589   - s.setScheduleDate(calendar.getTime());
5590   - try {
5591   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
5592   - } catch (ParseException e) {
5593   - // TODO Auto-generated catch block
5594   - e.printStackTrace();
5595   - }
5596   -
5597   - } else {
5598   - try {
5599   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
5600   - } catch (ParseException e) {
5601   - // TODO Auto-generated catch block
5602   - e.printStackTrace();
5603   - }
5604   - ;
5605   - }
5606   - s.setFcsjT(fscjT);
5607   - }
5608   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
5609   - Collections.sort(scheduleRealInfos, new ComparableReal());
5610   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5611   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5612   - s.setAdjustExps(i + 1 + "");
5613   - String remarks = "";
5614   - if (s.getRemarks() != null) {
5615   - remarks += s.getRemarks();
5616   - }
5617   -
5618   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
5619   - if (!childTaskPlans.isEmpty()) {
5620   - s.setFcsjActual("");
5621   - s.setZdsjActual("");
5622   - s.setJhlc(0.0);
5623   - }
5624   -
5625   - if (s.isDestroy()) {
5626   - s.setFcsjActual("");
5627   - s.setZdsjActual("");
5628   - s.setJhlc(0.0);
5629   - remarks += "(烂班)";
5630   - s.setRemarks(remarks);
5631   - }
5632   -
5633   - listSchedule.add(s);
5634   - //计算营运里程,空驶里程
5635   - if (!childTaskPlans.isEmpty()) {
5636   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
5637   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
5638   - Collections.sort(listit, new ComparableChild());
5639   - for (int j = 0; j < listit.size(); j++) {
5640   - ScheduleRealInfo t = new ScheduleRealInfo();
5641   - ChildTaskPlan childTaskPlan = listit.get(j);
5642   - if (childTaskPlan.isDestroy()) {
5643   - t.setFcsjActual("");
5644   - t.setZdsjActual("");
5645   - t.setJhlc(0.0);
5646   - } else {
5647   - t.setFcsjActual(childTaskPlan.getStartDate());
5648   - t.setZdsjActual(childTaskPlan.getEndDate());
5649   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
5650   - }
5651   - t.setQdzName(childTaskPlan.getStartStationName());
5652   - t.setZdzName(childTaskPlan.getEndStationName());
5653   - t.setRemarks(childTaskPlan.getRemarks());
5654   - t.setAdjustExps("子");
5655   - t.setjGh("");
5656   - t.setjName("");
5657   - t.setsGh("");
5658   - t.setsName("");
5659   - listSchedule.add(t);
5660   - }
5661   - }
5662   - }
5663   - Map<String, Object> maps;
5664   - for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
5665   - maps = new HashMap<String, Object>();
5666   - try {
5667   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
5668   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
5669   - maps = rru.getMapValue(scheduleRealInfo);
5670   - maps.put("bcs", scheduleRealInfo.getAdjustExps());
5671   - String zdsj = scheduleRealInfo.getZdsj();
5672   - String zdsjActual = scheduleRealInfo.getZdsjActual();
5673   - if (zdsj != null && zdsjActual != null &&
5674   - !zdsj.equals(zdsjActual) &&
5675   - !zdsj.equals("") &&
5676   - !zdsjActual.equals("")) {
5677   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
5678   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
5679   - if (zdsj.compareTo(zdsjActual) > 0) {
5680   - if (zdsjT - zdsjAT > 1000) {
5681   - maps.put("fast", "");
5682   - maps.put("slow", zdsjAT - zdsjT + 1440);
5683   - } else {
5684   - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
5685   - maps.put("slow", "");
5686   - }
5687   - } else {
5688   - if (zdsjAT - zdsjT > 1000) {
5689   - maps.put("fast", zdsjT - zdsjAT + 1440);
5690   - maps.put("slow", "");
5691   - } else {
5692   - maps.put("fast", "");
5693   - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
5694   - }
5695   - }
5696   - } else {
5697   - maps.put("fast", "");
5698   - maps.put("slow", "");
5699   - }
5700   - listMap.add(maps);
5701   - } catch (Exception e) {
5702   - e.printStackTrace();
5703   - }
5704   - }
5705   -
5706   -
5707   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
5708   - list.add(listMap.iterator());
5709   - String xls = "";
5710   - if (map.get("type").toString().equals("0")) {
5711   - xls = "waybill_minhang.xls";
5712   - } else {
5713   - xls = "waybill_minhang_dl.xls";
5714   - }
5715   - map.put("sheetName", jName + "-" + clZbh + "-" + lpName);
5716   - ee.excelReplace(list, new Object[]{map}, path + "mould/" + xls,
5717   - path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
5718   - }
5719   -
5720   - @Override
5721   - public Map<String, Object> exportWaybillMore(Map<String, Object> map) {
5722   - String date = map.get("date").toString();
5723   - String line = map.get("line").toString();
5724   - ReportUtils ee = new ReportUtils();
5725   - List<List> lists = JSON.parseArray(map.get("strs").toString(), List.class);
5726   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
5727   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
5728   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
5729   - int num = 0;
5730   - File file = null;
5731   - try {
5732   - while (true) {
5733   - String fileUrl = path + "行车路单" + sdfSimple.format(sdfMonth.parse(date));
5734   -// file = new File(fileUrl + (num == 0 ? "/" : "(" + num + ")/")); //新建文件夹
5735   - file = new File(fileUrl + (num == 0 ? ".xls" : "(" + num + ").xls")); //新建excel文件
5736   - if (file.exists()) { //判断是否已存在重名
5737   - num++;
5738   - } else {
5739   - break;
5740   - }
5741   - }
5742   -// file.mkdirs(); //创建
5743   - List<ScheduleRealInfo> lists_line = scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
5744   - List<File> files = new ArrayList<File>();
5745   - for (List<String> list : lists) {
5746   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
5747   - String jName = list.get(0);
5748   - String clZbh = list.get(1);
5749   - String lpName = list.get(2);
5750   - String jGh = list.get(3);
5751   - for (int i = 0; i < lists_line.size(); i++) {
5752   - ScheduleRealInfo s = lists_line.get(i);
5753   - if (s.getjGh().equals(jGh) && s.getClZbh().equals(clZbh) && s.getLpName().equals(lpName)) {
5754   - newList.add(s);
5755   - }
5756   - }
5757   - this.exportWaybill_pl(newList, date, jName, clZbh, lpName);
5758   - File temp = new File(path + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
5759   - String fileName = file.getName();
5760   - files.add(temp);
5761   - }
5762   - for (int i = 1; i < files.size(); i++) {
5763   - File file1 = files.get(0);
5764   - File file2 = files.get(i);
5765   - ee.copySheetByFile(file2, file1, 0, 145);
5766   - }
5767   - File newFile = files.get(0);
5768   - newFile.renameTo(file);
5769   -// temp.renameTo(new File(path + fileName + "/" + temp.getName()));
5770   -// File[] listFiles = file.listFiles();
5771   -// ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(path + file.getName() + ".zip")));
5772   -//// zos.setEncoding("gbk");
5773   -//// zos.putNextEntry(new ZipEntry(fileName + "/"));
5774   -// for (int i = 0; i < listFiles.length; i++) {
5775   -// zos.putNextEntry(new ZipEntry(fileName + "/" + listFiles[i].getName()));
5776   -// BufferedInputStream bis = new BufferedInputStream(new FileInputStream(listFiles[i]));
5777   -// BufferedOutputStream bos = new BufferedOutputStream(zos);
5778   -// int bytesRead = 0;
5779   -// for (byte[] buffer = new byte[BUF_SIZE]; ((bytesRead = bis.read(buffer, 0, BUF_SIZE)) != -1); ) {
5780   -//// zos.write(buffer, 0, bytesRead);
5781   -//// zos.flush();
5782   -// bos.write(buffer, 0, bytesRead);
5783   -// bos.flush();
5784   -// }
5785   -//// bos.close();
5786   -// bis.close();
5787   -// }
5788   -// zos.close();
5789   -// }
5790   -
5791   - } catch (Exception e) {
5792   - // TODO: handle exception
5793   - e.printStackTrace();
5794   - }
5795   -
5796   - map.put("fileName", file.getName());
5797   - return map;
5798   - }
5799   -
5800   - @Autowired
5801   - SchedulePlanInfoService schPlanService;
5802   -
5803   - @Override
5804   - public List<SchedulePlanInfo> currentSchedulePlan(String lineCode) {
5805   - List<SchedulePlanInfo> rs = dayOfSchedule.schedulePlanMap.get(lineCode);
5806   -
5807   - if (rs == null || rs.size() == 0) {
5808   - //尝试刷新内存
5809   - Map<String, Object> data = new HashMap<>();
5810   - data.put("scheduleDate_eq", dayOfSchedule.currSchDateMap.get(lineCode));
5811   - data.put("xlBm_eq", lineCode);
5812   - List<SchedulePlanInfo> planItr = dayOfSchedule.cleanSchPlanItr(schPlanService.list(data).iterator());
5813   -
5814   - if (planItr.size() > 0) {
5815   - dayOfSchedule.schedulePlanMap.put(lineCode, planItr);
5816   - return planItr;
5817   - }
5818   - }
5819   - return rs;
5820   - }
5821   -
5822   -
5823   - @Override
5824   - public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx, int type) {
5825   - Map<String, Object> rs = new HashMap<>();
5826   - Set<ScheduleRealInfo> ts = new HashSet<>();
5827   - try {
5828   - List<String> leftList = Splitter.on(",").splitToList(leftIdx);
5829   - List<String> rightList = Splitter.on(",").splitToList(rightIdx);
5830   - Set<String> lpSet = new HashSet<>();
5831   - Set<String> carSet = new HashSet<>();
5832   -
5833   - List<ScheduleRealInfo> largeList, smallList;
5834   - if (leftList.size() > rightList.size()) {
5835   - largeList = getByIdx(leftList);
5836   - smallList = getByIdx(rightList);
5837   - } else {
5838   - largeList = getByIdx(rightList);
5839   - smallList = getByIdx(leftList);
5840   - }
5841   -
5842   - ScheduleRealInfo leftSch, rightSch = null;
5843   - for (int i = 0; i < largeList.size(); i++) {
5844   - leftSch = largeList.get(i);
5845   - leftSch.setLpChange(1);
5846   - if (i < smallList.size()) {
5847   - rightSch = smallList.get(i);
5848   - rightSch.setLpChange(1);
5849   - ts.add(rightSch);
5850   - } else {
5851   - //不对称时多出来的
5852   - lpChangeByLeft(leftSch, largeList.get(i - 1), type);
5853   - ts.add(leftSch);
5854   - lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
5855   - continue;
5856   - }
5857   -
5858   - //调换路牌
5859   - lpChange(leftSch, rightSch, type);
5860   - ts.add(leftSch);
5861   -
5862   - lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
5863   - lpSet.add(rightSch.getXlBm() + "_" + rightSch.getLpName());
5864   -
5865   - carSet.add(leftSch.getClZbh());
5866   - carSet.add(rightSch.getClZbh());
5867   - scheduleRealInfoRepository.updateLpChange(leftSch.getId());
5868   - scheduleRealInfoRepository.updateLpChange(rightSch.getId());
5869   - }
5870   -
5871   - //重新计算路牌的起点应到时间
5872   - for (String lpName : lpSet) {
5873   - ts.addAll(dayOfSchedule.updateQdzTimePlan(lpName));
5874   - }
5875   -
5876   - //重新就算车辆当前执行班次
5877   - for(String nbbm : carSet){
5878   - dayOfSchedule.reCalcExecPlan(nbbm);
5879   - }
5880   -
5881   -
5882   - for (ScheduleRealInfo sch : ts) {
5883   - dayOfSchedule.save(sch);
5884   - }
5885   -
5886   - rs.put("status", ResponseCode.SUCCESS);
5887   - rs.put("ts", ts);
5888   - } catch (Exception e) {
5889   - logger.error("", e);
5890   - rs.put("status", ResponseCode.ERROR);
5891   - rs.put("msg", e.getMessage());
5892   - }
5893   -
5894   - return rs;
5895   - }
5896   -
5897   - private List<ScheduleRealInfo> getByIdx(List<String> idList) {
5898   - List<ScheduleRealInfo> list = new ArrayList<>();
5899   - for (String id : idList) {
5900   - list.add(dayOfSchedule.get(Long.parseLong(id)));
5901   - }
5902   - return list;
5903   - }
5904   -
5905   - @Override
5906   - public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
5907   - //释放班次映射
5908   - if (type > 0) {
5909   - dayOfSchedule.removeNbbm2SchMapp(leftSch);
5910   - dayOfSchedule.removeNbbm2SchMapp(rightSch);
5911   - }
5912   -
5913   - //对调数据
5914   - LpData leftData = new LpData(leftSch);
5915   - LpData rightData = new LpData(rightSch);
5916   -
5917   - leftData.appendTo(rightSch, type);
5918   - rightData.appendTo(leftSch, type);
5919   -
5920   - if (type > 0) {
5921   - //重新映射
5922   - dayOfSchedule.addNbbm2SchMapp(leftSch);
5923   - dayOfSchedule.addNbbm2SchMapp(rightSch);
5924   - }
5925   - }
5926   -
5927   - /**
5928   - * 更换左边班次的路牌,右边不变
5929   - *
5930   - * @param leftSch
5931   - * @param rightSch
5932   - * @param type
5933   - */
5934   - public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
5935   - //释放班次映射
5936   - if (type > 0)
5937   - dayOfSchedule.removeNbbm2SchMapp(leftSch);
5938   -
5939   - LpData rightData = new LpData(rightSch);
5940   - rightData.appendTo(leftSch, type);
5941   -
5942   - //重新映射
5943   - if (type > 0)
5944   - dayOfSchedule.addNbbm2SchMapp(leftSch);
5945   -
5946   - }
5947   -
5948   - @Override
5949   - public Map<String, Object> revokeRealArrive(Long id) {
5950   - Map<String, Object> rs = new HashMap<>();
5951   - List<ScheduleRealInfo> ts = new ArrayList<>();
5952   -
5953   - try {
5954   - ScheduleRealInfo sch = dayOfSchedule.get(id);
5955   - if (sch.getZdsjActual() == null && sch.getFcsjActual() == null) {
5956   - rs.put("status", ResponseCode.ERROR);
5957   - rs.put("msg", "班次未执行,无法撤销!");
5958   - } else {
5959   - //日志记录
5960   - ScheduleModifyLogger.cxzx(sch);
5961   -
5962   - sch.clearFcsjActual();
5963   - sch.clearZdsjActual();
5964   - //清除路牌下一个班的起点到达时间
5965   - ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
5966   - if (null != next) {
5967   - next.setQdzArrDatesj(null);
5968   - ts.add(next);
5969   - }
5970   -
5971   - rs.put("status", ResponseCode.SUCCESS);
5972   -
5973   - ts.add(sch);
5974   - rs.put("ts", ts);
5975   -
5976   - dayOfSchedule.save(sch);
5977   - //重新计算当前执行班次
5978   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
5979   -
5980   - }
5981   - } catch (Exception e) {
5982   - logger.error("", e);
5983   - rs.put("status", ResponseCode.ERROR);
5984   - }
5985   - return rs;
5986   - }
5987   -
5988   - @Override
5989   - public Map<String, Object> lateAdjust(String idx, float minute) {
5990   - Map<String, Object> rs = new HashMap<>();
5991   - try {
5992   - int count = 0;
5993   - List<ScheduleRealInfo> list = new ArrayList<>();
5994   - List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
5995   -
5996   - ScheduleRealInfo sch;
5997   - for (String id : ids) {
5998   - sch = dayOfSchedule.get(Long.parseLong(id));
5999   - if (sch != null && sch.getStatus() == 0) {
6000   - if (minute > 0) {
6001   - sch.setLateMinute(minute);
6002   - } else if (minute == 0) {
6003   - LateAdjustHandle.remove(sch);
6004   - }
6005   - count++;
6006   - list.add(sch);
6007   - }
6008   - }
6009   -
6010   - rs.put("status", ResponseCode.SUCCESS);
6011   - rs.put("count", count);
6012   - rs.put("ts", list);
6013   - } catch (Exception e) {
6014   - logger.error("", e);
6015   - rs.put("status", ResponseCode.ERROR);
6016   - rs.put("msg", e.getMessage());
6017   - }
6018   -
6019   - return rs;
6020   - }
6021   -
6022   - @Override
6023   - public List<ScheduleRealInfo> allLate2(String idx) {
6024   - List<ScheduleRealInfo> rs = new ArrayList<>();
6025   - List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
6026   -
6027   - Collection<ScheduleRealInfo> all = LateAdjustHandle.allLateSch();
6028   - for (ScheduleRealInfo sch : all) {
6029   - if (ids.indexOf(sch.getXlBm()) != -1) {
6030   - rs.add(sch);
6031   - }
6032   - }
6033   - return rs;
6034   - }
6035   -
6036   -
6037   - @Override
6038   - public List<Map<String, Object>> mileageReport(String gsdm,
6039   - String fgsdm, String line, String date, String date2) {
6040   -
6041   - String sql = "select * from calc_mileage where 1=1 ";
6042   - if (!line.equals(" ")) {
6043   - sql = sql + " and line_code='" + line + "' ";
6044   - }
6045   - sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
6046   - if (!gsdm.equals(" ")) {
6047   - sql = sql + " and company_id=" + gsdm;
6048   - }
6049   - if (!gsdm.equals(" ")) {
6050   - sql = sql + " and sub_company_id=" + fgsdm;
6051   - }
6052   - sql = sql + " order by line_code";
6053   - List<MileageReport> list = jdbcTemplate.query(sql,
6054   - new RowMapper<MileageReport>() {
6055   - @Override
6056   - public MileageReport mapRow(ResultSet rs, int rowNum) throws SQLException {
6057   - MileageReport mr = new MileageReport();
6058   - mr.setCompanyName(rs.getString("company_name"));
6059   - mr.setSubCompanyName(rs.getString("sub_company_name"));
6060   - mr.setLineName(rs.getString("line_name"));
6061   - mr.setSjyygl(rs.getDouble("sjyygl"));
6062   - mr.setSjksgl(rs.getDouble("sjksgl"));
6063   - mr.setZgl(rs.getDouble("zyygl"));
6064   - mr.setZddfgl(rs.getDouble("zddfgl"));
6065   - mr.setSddfgl(rs.getDouble("sddfgl"));
6066   - mr.setWqwxhgl(rs.getDouble("wqwxhgl"));
6067   - mr.setBfwxhgl(rs.getDouble("bfwxhgl"));
6068   - mr.setPygl(rs.getDouble("pygl"));
6069   - mr.setLjgl(rs.getDouble("ljgl"));
6070   - mr.setZrwgl(rs.getDouble("zrwgl"));
6071   - mr.setOther(rs.getString("other"));
6072   - return mr;
6073   - }
6074   - });
6075   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
6076   - double sjyygl = 0.0;
6077   - double sjksgl = 0.0;
6078   - double zgl = 0.0;
6079   - double sddfgl = 0.0;
6080   - double zddfgl = 0.0;
6081   - double wqwxhgl = 0.0;
6082   - double bfwxhgl = 0.0;
6083   - double pygl = 0.0;
6084   - double ljgl = 0.0;
6085   - double zrwgl = 0.0;
6086   - for (MileageReport mr : list) {
6087   - Map<String, Object> resMap = new HashMap<String, Object>();
6088   - resMap.put("gsName", mr.getCompanyName());
6089   - resMap.put("fgsName", mr.getSubCompanyName());
6090   - resMap.put("xlName", mr.getLineName());
6091   - resMap.put("sjyygl", mr.getSjyygl());
6092   - resMap.put("sjksgl", mr.getSjksgl());
6093   - resMap.put("zgl", mr.getZgl());
6094   - resMap.put("sddfgl", mr.getSddfgl());
6095   - resMap.put("zddfgl", mr.getZddfgl());
6096   - resMap.put("wqwxhgl", mr.getWqwxhgl());
6097   - resMap.put("bfwxhgl", mr.getBfwxhgl());
6098   - resMap.put("pygl", mr.getPygl());
6099   - resMap.put("ljgl", mr.getLjgl());
6100   - resMap.put("zrwgl", mr.getZrwgl());
6101   - resMap.put("other", mr.getOther());
6102   - lMap.add(resMap);
6103   - sjyygl = Arith.add(sjyygl, mr.getSjyygl());
6104   - sjksgl = Arith.add(sjksgl, mr.getSjksgl());
6105   - zgl = Arith.add(zgl, mr.getZgl());
6106   - sddfgl = Arith.add(sddfgl, mr.getSddfgl());
6107   - zddfgl = Arith.add(zddfgl, mr.getZddfgl());
6108   - wqwxhgl = Arith.add(wqwxhgl, mr.getWqwxhgl());
6109   - bfwxhgl = Arith.add(bfwxhgl, mr.getBfwxhgl());
6110   - pygl = Arith.add(pygl, mr.getPygl());
6111   - ljgl = Arith.add(ljgl, mr.getLjgl());
6112   - zrwgl = Arith.add(zrwgl, mr.getZrwgl());
6113   - }
6114   - Map<String, Object> resMap = new HashMap<String, Object>();
6115   - resMap.put("xlName", "合计");
6116   - resMap.put("sjyygl", sjyygl);
6117   - resMap.put("sjksgl", sjksgl);
6118   - resMap.put("zgl", zgl);
6119   - resMap.put("sddfgl", sddfgl);
6120   - resMap.put("zddfgl", zddfgl);
6121   - resMap.put("wqwxhgl", wqwxhgl);
6122   - resMap.put("bfwxhgl", bfwxhgl);
6123   - resMap.put("pygl", pygl);
6124   - resMap.put("ljgl", ljgl);
6125   - resMap.put("zrwgl", zrwgl);
6126   - resMap.put("other", null);
6127   - lMap.add(resMap);
6128   - return lMap;
6129   - }
6130   -
6131   - @Override
6132   - public List<Map<String, Object>> scheduleCorrectionReport(String gsdm,
6133   - String fgsdm, String line, String date, String date2) {
6134   -
6135   - String sql = "select * from calc_schedule where 1=1 ";
6136   - if (!line.equals(" ")) {
6137   - sql = sql + " and line_code='" + line + "' ";
6138   - }
6139   - sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
6140   - if (!gsdm.equals(" ")) {
6141   - sql = sql + " and company_id=" + gsdm;
6142   - }
6143   - if (!gsdm.equals(" ")) {
6144   - sql = sql + " and sub_company_id=" + fgsdm;
6145   - }
6146   - sql = sql + " order by line_code";
6147   - List<ScheduleCorrectionReport> list = jdbcTemplate.query(sql,
6148   - new RowMapper<ScheduleCorrectionReport>() {
6149   - @Override
6150   - public ScheduleCorrectionReport mapRow(ResultSet rs, int rowNum) throws SQLException {
6151   - ScheduleCorrectionReport sReport = new ScheduleCorrectionReport();
6152   - sReport.setCompanyName(rs.getString("company_name"));
6153   - sReport.setSubCompanyName(rs.getString("sub_company_name"));
6154   - sReport.setLineName(rs.getString("line_name"));
6155   - sReport.setSjyybc(rs.getInt("sjyybc"));
6156   - sReport.setSjksbc(rs.getInt("sjksbc"));
6157   - sReport.setZbc(rs.getInt("zyybc"));
6158   - sReport.setZddfbc(rs.getInt("zddfbc"));
6159   - sReport.setSddfbc(rs.getInt("sddfbc"));
6160   - sReport.setWqwxhbc(rs.getInt("wqwxhbc"));
6161   - sReport.setBfwxhbc(rs.getInt("bfwxhbc"));
6162   - sReport.setPybc(rs.getInt("pybc"));
6163   - sReport.setLjbc(rs.getInt("ljbc"));
6164   - sReport.setZrwbc(rs.getInt("zrwbc"));
6165   - sReport.setOther(rs.getString("other"));
6166   - return sReport;
6167   - }
6168   - });
6169   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
6170   - int sjyybc = 0;
6171   - int sjksbc = 0;
6172   - int zbc = 0;
6173   - int sddfbc = 0;
6174   - int zddfbc = 0;
6175   - int wqwxhbc = 0;
6176   - int bfwxhbc = 0;
6177   - int pybc = 0;
6178   - int ljbc = 0;
6179   - int zrwbc = 0;
6180   - for (ScheduleCorrectionReport sReport : list) {
6181   - Map<String, Object> resMap = new HashMap<String, Object>();
6182   - resMap.put("gsName", sReport.getCompanyName());
6183   - resMap.put("fgsName", sReport.getSubCompanyName());
6184   - resMap.put("xlName", sReport.getLineName());
6185   - resMap.put("sjyybc", sReport.getSjyybc());
6186   - resMap.put("sjksbc", sReport.getSjksbc());
6187   - resMap.put("zbc", sReport.getZbc());
6188   - resMap.put("sddfbc", sReport.getSddfbc());
6189   - resMap.put("zddfbc", sReport.getZddfbc());
6190   - resMap.put("wqwxhbc", sReport.getWqwxhbc());
6191   - resMap.put("bfwxhbc", sReport.getBfwxhbc());
6192   - resMap.put("pybc", sReport.getPybc());
6193   - resMap.put("ljbc", sReport.getLjbc());
6194   - resMap.put("zrwbc", sReport.getZrwbc());
6195   - resMap.put("other", sReport.getOther());
6196   - lMap.add(resMap);
6197   - sjyybc = sjyybc + sReport.getSjyybc();
6198   - sjksbc = sjksbc + sReport.getSjksbc();
6199   - zbc = zbc + sReport.getZbc();
6200   - sddfbc = sddfbc + sReport.getSddfbc();
6201   - zddfbc = zddfbc + sReport.getZddfbc();
6202   - wqwxhbc = wqwxhbc + sReport.getWqwxhbc();
6203   - bfwxhbc = bfwxhbc + sReport.getBfwxhbc();
6204   - pybc = pybc + sReport.getPybc();
6205   - ljbc = ljbc + sReport.getLjbc();
6206   - zrwbc = zrwbc + sReport.getZrwbc();
6207   - }
6208   - Map<String, Object> resMap = new HashMap<String, Object>();
6209   - resMap.put("xlName", "合计");
6210   - resMap.put("sjyybc", sjyybc);
6211   - resMap.put("sjksbc", sjksbc);
6212   - resMap.put("zbc", zbc);
6213   - resMap.put("sddfbc", sddfbc);
6214   - resMap.put("zddfbc", zddfbc);
6215   - resMap.put("wqwxhbc", wqwxhbc);
6216   - resMap.put("bfwxhbc", bfwxhbc);
6217   - resMap.put("pybc", pybc);
6218   - resMap.put("ljbc", ljbc);
6219   - resMap.put("zrwbc", zrwbc);
6220   - resMap.put("other", null);
6221   - lMap.add(resMap);
6222   - return lMap;
6223   - }
6224   -
6225   - @Override
6226   - public Integer isCircleQdz(String clzbh, String sdr, String xlbm, String qdzCode) {
6227   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
6228   - String time =sdf.format(Long.parseLong(sdr));
6229   -
6230   - Long num=scheduleRealInfoRepository.isCircleQdz(clzbh, time, xlbm, qdzCode);
6231   - Integer num2=num==0L?0:1;
6232   - return num2;
6233   - }
6234   -
6235   - @SuppressWarnings("unchecked")
6236   - private static Map<String, Object> request(String url) {
6237   - Map<String, Object> res = new HashMap<String, Object>();
6238   - res.put("status", ResponseCode.SUCCESS);
6239   - InputStream in = null;
6240   - HttpURLConnection con = null;
6241   - try {
6242   - con = (HttpURLConnection)new URL(url).openConnection();
6243   - con.setRequestMethod("POST");
6244   - con.setRequestProperty("keep-alive", "true");
6245   - con.setRequestProperty("accept", "application/json");
6246   - con.setRequestProperty("content-type", "application/json");
6247   - con.setDoInput(true);
6248   - con.setReadTimeout(2500);
6249   - con.setConnectTimeout(2500);
6250   -
6251   - con.connect();
6252   - if (con.getResponseCode() == 200) {
6253   - in = con.getInputStream();
6254   - ByteArrayOutputStream bout = new ByteArrayOutputStream();
6255   - IOUtils.copy(in, bout); bout.close();
6256   - Map<String, Object> response = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
6257   - if (!"报修成功".equals(response.get("msg"))) {
6258   - res.put("status", ResponseCode.ERROR);
6259   - res.putAll(response);
6260   - }
6261   - } else {
6262   - res.put("status", ResponseCode.ERROR);
6263   - res.put("msg", "调用上报接口异常");
6264   - }
6265   - } catch (IOException e) {
6266   - // TODO Auto-generated catch block
6267   - res.put("status", ResponseCode.ERROR);
6268   - res.put("msg", "调用上报接口异常");
6269   - } finally {
6270   - try {
6271   - if (in != null) in.close();
6272   - if (con != null) con.disconnect();
6273   - } catch (IOException e) {
6274   - // TODO Auto-generated catch block
6275   - e.printStackTrace();
6276   - }
6277   - }
6278   -
6279   - return res;
6280   - }
6281   -
6282   - /**
6283   - ** 维修记录上报
6284   - * @param param 参数信息
6285   - * @param isActive 主/被动上报
6286   - */
6287   - @Override
6288   - @Transactional
6289   - public Map<String, Object> repairReport(Map<String, Object> param, boolean isActive) {
6290   - Map<String, Object> res = new HashMap<String, Object>();
6291   - res.put("status", ResponseCode.SUCCESS);
6292   - // 获取实际排班信息
6293   - Long id = Long.parseLong((String)param.get("id"));
6294   - ScheduleRealInfo sch = dayOfSchedule.get(id);
6295   -
6296   - if (null == sch) {
6297   - res.put("status", ResponseCode.ERROR);
6298   - res.put("msg", "不存在的班次!");
6299   -
6300   - return res;
6301   - }
6302   -
6303   - int reportState = -1;
6304   - SysUser user = SecurityUtils.getCurrentUser();
6305   - String reportUser = user.getUserName(), reportName = user.getName(), incode = (String)param.get("clZbh"), reportTypes = (String)param.get("reportTypes"), repairTypes = reportType2RepairType(reportTypes);
6306   - // 分公司保存格式 分公司编码_公司编码
6307   - String val = BasicData.nbbm2FgsCompanyCodeMap.get(incode);
6308   - String[] arr = val.split("_");
6309   - StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
6310   - url.append("?nbbm=").append(incode).append("&bxy=").append(reportUser).append("&bxbm=").append(repairTypes).append("&fgs=").append(arr[0]);
6311   -
6312   - int count = repairReportRepository.repairReportBySch(id, isActive ? 1 : 0);
6313   - if (count > 0) return res;
6314   - RepairReport lrr = dayOfSchedule.getLastestRepairReport(incode);
6315   - // 非主动上报并且无上报记录或上次已上报 则不用上报
6316   - if (!isActive && (lrr == null || lrr.getReportState() != 0)) {
6317   - reportState = 0;
6318   - } else {
6319   - res = request(url.toString());
6320   - if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
6321   - }
6322   - // 持久化此次上报记录
6323   - RepairReport rr = new RepairReport();
6324   - rr.setLineId(sch.getXlBm());
6325   - rr.setLineName(sch.getXlName());
6326   - rr.setReportUser(reportUser);
6327   - rr.setReportName(reportName);
6328   - rr.setSchId(id);
6329   - rr.setIncode(incode);
6330   - rr.setDepartureTime(sch.getFcsj());
6331   - rr.setRepairType(repairTypes);
6332   - rr.setReportType(reportTypes);
6333   - rr.setReportDate(new Date());
6334   - rr.setReportState(reportState);
6335   - rr.setReportMode(isActive ? 1 : 0);
6336   - rr = repairReportRepository.save(rr);
6337   - dayOfSchedule.setLastestRepairReport(rr);
6338   - // 如果上报失败,放到重传队列
6339   - if (rr.getReportState() == -1) queue.add(rr);
6340   -
6341   - return res;
6342   - }
6343   -
6344   - private void repairReport(RepairReport rr) {
6345   - int reportState = -1;
6346   - // 分公司保存格式 分公司编码_公司编码
6347   - String val = BasicData.nbbm2FgsCompanyCodeMap.get(rr.getIncode());
6348   - String[] arr = val.split("_");
6349   - StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
6350   - url.append("?nbbm=").append(rr.getIncode()).append("&bxy=").append(rr.getReportUser()).append("&bxbm=").append(rr.getRepairType()).append("&fgs=").append(arr[0]);
6351   -
6352   - Map<String, Object> res = request(url.toString());
6353   - if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
6354   - if (reportState == 1) {
6355   - rr.setReportState(1);
6356   - repairReportRepository.save(rr);
6357   - }
6358   - }
6359   -
6360   - /**
6361   - ** 业务类型转报修类型
6362   - */
6363   - private String reportType2RepairType(String reportType) {
6364   - String[] reportTypes = reportType.split(";");
6365   - List<String> repairTypes = new ArrayList<>();
6366   - for (String rt : reportTypes) {
6367   - repairTypes.add(report2repair.get(rt));
6368   - }
6369   -
6370   - return StringUtils.join(repairTypes, ";");
6371   - }
6372   -
6373   - @Override
6374   - public List<RepairReport> repairReportList(String lineId, String date, String incode, String type) {
6375   - List<RepairReport> result = new ArrayList<RepairReport>();
6376   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
6377   -
6378   - Date start = null, end = null;
6379   - if (date.length() > 0) {
6380   - try {
6381   - start = sdf.parse(date + " 00:00:00");
6382   - end = sdf.parse(date + " 23:59:59");
6383   - } catch (ParseException e) {
6384   - // TODO Auto-generated catch block
6385   - e.printStackTrace();
6386   - }
6387   -
6388   - }
6389   -
6390   - result = repairReportRepository.repairReportList(lineId, start, end, incode);
6391   - Map<String, Object> dMap=new HashMap<>();
6392   - dMap.put("dGroup_eq", "repairtype");
6393   - Map<String, String> code2name = new HashMap<String, String>();
6394   - for (Dictionary dic : dictionaryService.list(dMap)) {
6395   - code2name.put(dic.getdCode(), dic.getdName());
6396   - }
6397   - for (RepairReport rr : result) {
6398   - String reportType = rr.getReportType();
6399   - String[] types = reportType.split(";");
6400   - StringBuilder sb = new StringBuilder();
6401   -
6402   - for (String t : types) {
6403   - sb.append(code2name.get(t)).append(";");
6404   - }
6405   -
6406   - rr.setRepairType(sb.toString());
6407   - rr.setReportDateStr(sdf.format(rr.getReportDate()));
6408   - switch (rr.getReportState()) {
6409   - case 0:
6410   - rr.setReportStateStr("不报");
6411   - break;
6412   - case 1:
6413   - rr.setReportStateStr("上报成功");
6414   - break;
6415   - case -1:
6416   - rr.setReportStateStr("上报失败");
6417   - break;
6418   - default:
6419   - break;
6420   - }
6421   - }
6422   -
6423   - if ("export".equals(type)) {
6424   - String lineName = BasicData.lineCode2NameMap.get(lineId);
6425   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
6426   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
6427   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
6428   - Map<String, Object> m = new HashMap<String, Object>();
6429   - ReportUtils ee = new ReportUtils();
6430   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
6431   - for (int i = 0; i < result.size(); i++) {
6432   - Map<String, Object> map = new HashMap<String, Object>();
6433   - RepairReport rr = result.get(i);
6434   - map.put("row", i + 1);
6435   - map.put("lineId", rr.getLineName());
6436   - map.put("incode", rr.getIncode());
6437   - map.put("departureTime", rr.getDepartureTime());
6438   - map.put("reportUser", rr.getReportUser());
6439   - map.put("reportDateStr", rr.getReportDate());
6440   - map.put("repairType", rr.getRepairType());
6441   - map.put("reportStateStr", rr.getReportStateStr());
6442   - newList.add(map);
6443   - }
6444   - try {
6445   - listI.add(newList.iterator());
6446   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
6447   - ee.excelReplace(listI, new Object[]{m}, path + "mould/repairReport.xls",
6448   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
6449   - + "-" + lineName + "-维修上报记录.xls");
6450   - } catch (Exception e) {
6451   - // TODO: handle exception
6452   - e.printStackTrace();
6453   - }
6454   - }
6455   -
6456   - return result;
6457   - }
6458   -
6459   - @Override
6460   - public Map<String, String> getLevelsByLines(List<String> lines) {
6461   - Map<String, String> result = new HashMap<String, String>(), currSchDate = dayOfSchedule.getCurrSchDate();
6462   - for (String line : lines) {
6463   - String level = BasicData.lineDate2Level.get(line + "_" + currSchDate.get(line));
6464   - result.put(line, level == null ? "" : level);
6465   - }
6466   -
6467   - return result;
6468   - }
6469   -
6470   -
6471   - @Override
6472   - public void destroy() throws Exception {
6473   - // TODO Auto-generated method stub
6474   - exec.shutdown();
6475   - }
6476   -
6477   -
6478   - @Override
6479   - public void afterPropertiesSet() throws Exception {
6480   - // TODO Auto-generated method stub
6481   - // 维修上报重发调度
6482   - exec.scheduleAtFixedRate(new Runnable() {
6483   -
6484   - @Override
6485   - public void run() {
6486   - // TODO Auto-generated method stub
6487   - try {
6488   - Iterator<RepairReport> it = queue.iterator();
6489   - while (it.hasNext()) {
6490   - RepairReport rr = it.next();
6491   - repairReport(rr);
6492   - if (rr.getReportState() == 1 || System.currentTimeMillis() - rr.getReportDate().getTime() > 86400000) queue.remove(rr);
6493   - }
6494   - } catch (Exception e) {
6495   - logger.error("维修上报重发错误", e);
6496   - }
6497   - }
6498   - }, 30, 30, TimeUnit.MINUTES);
6499   -
6500   - //// ---
6501   - exec.scheduleWithFixedDelay(new Runnable() {
6502   - @Override
6503   - public void run() {
6504   - Map<String, Object> res = new HashMap<>();
6505   - InputStream in = null;
6506   - OutputStream out = null;
6507   - SysUser user = SecurityUtils.getCurrentUser();
6508   - DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
6509   - String url ="http://211.95.61.66:9008/modules/tSafedrivingCs/DSMBHforCLBH";
6510   -
6511   - try {
6512   - HttpURLConnection con = (HttpURLConnection)new URL(url.toString()).openConnection();
6513   - con.setDoInput(true);
6514   - con.setRequestMethod("POST");
6515   - con.setConnectTimeout(5000);
6516   - con.setReadTimeout(5000);
6517   - con.setRequestProperty("keep-alive", "true");
6518   - con.setRequestProperty("accept", "*/*");
6519   - con.setRequestProperty("content-type", "application/x-www-form-urlencoded");
6520   - con.connect();
6521   -
6522   - if (con.getResponseCode() == 200) {
6523   - in = con.getInputStream();
6524   - ByteArrayOutputStream bout = new ByteArrayOutputStream();
6525   - IOUtils.copy(in, bout);
6526   - DIRMAP = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
6527   - }
6528   - } catch (MalformedURLException e) {
6529   - // TODO Auto-generated catch block
6530   - e.printStackTrace();
6531   - } catch (IOException e) {
6532   - // TODO Auto-generated catch block
6533   - e.printStackTrace();
6534   - }
6535   -
6536   - }
6537   - }, 0, 60 * 60 * 24, TimeUnit.MINUTES);
6538   - }
6539   -}
6540   -
6541   -class AccountMap implements Comparator<Map<String, Object>> {
6542   - @Override
6543   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6544   - // TODO Auto-generated method stub
6545   - return o1.get("clZbh").toString().compareTo(o2.get("clZbh").toString());
6546   - }
6547   -}
6548   -
6549   -class AccountMap2 implements Comparator<Map<String, Object>> {
6550   - @Override
6551   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6552   - // TODO Auto-generated method stub
6553   - return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString());
6554   - }
6555   -}
6556   -
6557   -class AccountXlbm implements Comparator<Map<String, Object>> {
6558   - @Override
6559   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6560   - // TODO Auto-generated method stub
6561   -// PinyinHelper.convertToPinyinString(ppy.getName(),
6562   -// "" , PinyinFormat.WITHOUT_TONE)
6563   - return o1.get("xlNamePy").toString().compareTo(
6564   - o2.get("xlNamePy").toString());
6565   - }
6566   -}
6567   -
6568   -class compareLpFcsjType implements Comparator<ScheduleRealInfo> {
6569   - @Override
6570   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6571   - // TODO Auto-generated method stub
6572   - return (o1.getLpName()+o1.getFcsjT() + o1.getRemark()).compareTo(o2.getLpName()+o2.getFcsjT() + o2.getRemark());
6573   - }
6574   -
6575   -}
6576   -
6577   -class compareDirLpFcsjType implements Comparator<ScheduleRealInfo> {
6578   - @Override
6579   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6580   - // TODO Auto-generated method stub
6581   - return (o1.getXlDir()+o1.getFcsjT() + o1.getRemark()+o1.getLpName()).compareTo(o2.getXlDir()+o2.getFcsjT() + o2.getRemark()+o2.getLpName());
6582   - }
6583   -
6584   -}
6585   -class compareFcsjType implements Comparator<ScheduleRealInfo> {
6586   - @Override
6587   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6588   - // TODO Auto-generated method stub
6589   - return (o1.getFcsjT() + o1.getRemark()).compareTo(o2.getFcsjT() + o2.getRemark());
6590   - }
6591   -
6592   -}
  1 +package com.bsth.service.realcontrol.impl;
  2 +
  3 +import java.io.*;
  4 +import java.net.HttpURLConnection;
  5 +import java.net.MalformedURLException;
  6 +import java.net.URL;
  7 +import java.net.URLEncoder;
  8 +import java.sql.ResultSet;
  9 +import java.sql.SQLException;
  10 +import java.text.DecimalFormat;
  11 +import java.text.ParseException;
  12 +import java.text.SimpleDateFormat;
  13 +import java.util.ArrayList;
  14 +import java.util.Calendar;
  15 +import java.util.Collection;
  16 +import java.util.Collections;
  17 +import java.util.Comparator;
  18 +import java.util.Date;
  19 +import java.util.GregorianCalendar;
  20 +import java.util.HashMap;
  21 +import java.util.HashSet;
  22 +import java.util.Iterator;
  23 +import java.util.List;
  24 +import java.util.Map;
  25 +import java.util.Queue;
  26 +import java.util.Set;
  27 +import java.util.concurrent.ConcurrentLinkedQueue;
  28 +import java.util.concurrent.Executors;
  29 +import java.util.concurrent.ScheduledExecutorService;
  30 +import java.util.concurrent.ThreadFactory;
  31 +import java.util.concurrent.TimeUnit;
  32 +import java.util.regex.Pattern;
  33 +
  34 +import org.apache.commons.io.IOUtils;
  35 +import org.apache.commons.lang3.StringEscapeUtils;
  36 +import org.apache.commons.lang3.StringUtils;
  37 +import org.joda.time.format.DateTimeFormat;
  38 +import org.joda.time.format.DateTimeFormatter;
  39 +import org.slf4j.Logger;
  40 +import org.slf4j.LoggerFactory;
  41 +import org.springframework.beans.factory.DisposableBean;
  42 +import org.springframework.beans.factory.InitializingBean;
  43 +import org.springframework.beans.factory.annotation.Autowired;
  44 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
  45 +import org.springframework.jdbc.core.JdbcTemplate;
  46 +import org.springframework.jdbc.core.RowMapper;
  47 +import org.springframework.stereotype.Service;
  48 +import org.springframework.transaction.annotation.Transactional;
  49 +
  50 +import com.alibaba.fastjson.JSON;
  51 +import com.alibaba.fastjson.JSONArray;
  52 +import com.alibaba.fastjson.JSONObject;
  53 +import com.bsth.common.Constants;
  54 +import com.bsth.common.ResponseCode;
  55 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  56 +import com.bsth.controller.realcontrol.dto.DfsjChange;
  57 +import com.bsth.controller.realcontrol.dto.LpData;
  58 +import com.bsth.data.BasicData;
  59 +import com.bsth.data.LineConfigData;
  60 +import com.bsth.data.Station2ParkBuffer;
  61 +import com.bsth.data.schedule.DayOfSchedule;
  62 +import com.bsth.data.schedule.SchAttrCalculator;
  63 +import com.bsth.data.schedule.ScheduleComparator;
  64 +import com.bsth.data.schedule.edit_logs.FormLogger;
  65 +import com.bsth.data.schedule.edit_logs.ScheduleModifyLogger;
  66 +import com.bsth.data.schedule.edit_logs.loggers.AfterwardsLogger;
  67 +import com.bsth.data.schedule.edit_logs.loggers.FcxxwtLogger;
  68 +import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
  69 +import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
  70 +import com.bsth.data.utils.CustomStringUtils;
  71 +import com.bsth.entity.CarDevice;
  72 +import com.bsth.entity.Cars;
  73 +import com.bsth.entity.Line;
  74 +import com.bsth.entity.Personnel;
  75 +import com.bsth.entity.calc.CalcInterval;
  76 +import com.bsth.entity.oil.Dlb;
  77 +import com.bsth.entity.oil.Ylb;
  78 +import com.bsth.entity.oil.Ylxxb;
  79 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  80 +import com.bsth.entity.realcontrol.LineConfig;
  81 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  82 +import com.bsth.entity.realcontrol.SvgAttribute;
  83 +import com.bsth.entity.report.MileageReport;
  84 +import com.bsth.entity.report.RepairReport;
  85 +import com.bsth.entity.report.ScheduleCorrectionReport;
  86 +import com.bsth.entity.schedule.CarConfigInfo;
  87 +import com.bsth.entity.schedule.EmployeeConfigInfo;
  88 +import com.bsth.entity.schedule.GuideboardInfo;
  89 +import com.bsth.entity.schedule.SchedulePlanInfo;
  90 +import com.bsth.entity.sys.Dictionary;
  91 +import com.bsth.entity.sys.DutyEmployee;
  92 +import com.bsth.entity.sys.SysUser;
  93 +import com.bsth.repository.CarDeviceRepository;
  94 +import com.bsth.repository.CarsRepository;
  95 +import com.bsth.repository.LineRepository;
  96 +import com.bsth.repository.RepairReportRepository;
  97 +import com.bsth.repository.calc.CalcIntervalRepository;
  98 +import com.bsth.repository.oil.DlbRepository;
  99 +import com.bsth.repository.oil.YlbRepository;
  100 +import com.bsth.repository.oil.YlxxbRepository;
  101 +import com.bsth.repository.realcontrol.ChildTaskPlanRepository;
  102 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  103 +import com.bsth.repository.realcontrol.SvgAttributeRepository;
  104 +import com.bsth.repository.schedule.CarConfigInfoRepository;
  105 +import com.bsth.repository.schedule.EmployeeConfigInfoRepository;
  106 +import com.bsth.repository.schedule.GuideboardInfoRepository;
  107 +import com.bsth.security.util.SecurityUtils;
  108 +import com.bsth.service.LineService;
  109 +import com.bsth.service.SectionRouteService;
  110 +import com.bsth.service.directive.DirectiveService;
  111 +import com.bsth.service.impl.BaseServiceImpl;
  112 +import com.bsth.service.realcontrol.ScheduleRealInfoService;
  113 +import com.bsth.service.report.CulateMileageService;
  114 +import com.bsth.service.report.ReportService;
  115 +import com.bsth.service.schedule.SchedulePlanInfoService;
  116 +import com.bsth.service.sys.DictionaryService;
  117 +import com.bsth.service.sys.DutyEmployeeService;
  118 +import com.bsth.util.Arith;
  119 +import com.bsth.util.ComparableChild;
  120 +import com.bsth.util.ComparableLp;
  121 +import com.bsth.util.ComparableReal;
  122 +import com.bsth.util.ConfigUtil;
  123 +import com.bsth.util.DateUtils;
  124 +import com.bsth.util.ReportRelatedUtils;
  125 +import com.bsth.util.ReportUtils;
  126 +import com.bsth.util.TimeUtils;
  127 +import com.bsth.util.TransGPS;
  128 +import com.bsth.websocket.handler.SendUtils;
  129 +import com.fasterxml.jackson.databind.ObjectMapper;
  130 +import com.github.stuxuhai.jpinyin.PinyinException;
  131 +import com.github.stuxuhai.jpinyin.PinyinFormat;
  132 +import com.github.stuxuhai.jpinyin.PinyinHelper;
  133 +import com.google.common.base.Splitter;
  134 +import com.google.common.collect.Lists;
  135 +
  136 +import javax.ws.rs.HEAD;
  137 +
  138 +@Service
  139 +public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long>
  140 + implements ScheduleRealInfoService, InitializingBean, DisposableBean {
  141 + @Autowired
  142 + JdbcTemplate jdbcTemplate;
  143 + @Autowired
  144 + ScheduleRealInfoRepository scheduleRealInfoRepository;
  145 +
  146 + @Autowired
  147 + EmployeeConfigInfoRepository employeeConfigInfoRepository;
  148 +
  149 + @Autowired
  150 + CarConfigInfoRepository carConfigInfoRepository;
  151 +
  152 + @Autowired
  153 + SectionRouteService sectionRouteService;
  154 +
  155 + @Autowired
  156 + CulateMileageService culateMieageService;
  157 +
  158 + @Autowired
  159 + DictionaryService dictionaryService;
  160 +
  161 + @Autowired
  162 + CalcIntervalRepository calcIntervalRepository;
  163 + /*@Autowired
  164 + BorrowCenter borrowCenter;*/
  165 +
  166 + @Autowired
  167 + LineRepository lineRepository;
  168 + @Autowired
  169 + LineService lineService;
  170 + @Autowired
  171 + GuideboardInfoRepository guideboardInfoRepository;
  172 +
  173 + @Autowired
  174 + ChildTaskPlanRepository cTaskPlanRepository;
  175 +
  176 + @Autowired
  177 + SendUtils sendUtils;
  178 +
  179 + @Autowired
  180 + DayOfSchedule dayOfSchedule;
  181 +
  182 + @Autowired
  183 + SchAttrCalculator schAttrCalculator;
  184 +
  185 + @Autowired
  186 + LineConfigData lineConfigData;
  187 +
  188 + @Autowired
  189 + DutyEmployeeService dutyEmployeeService;
  190 +
  191 + @Autowired
  192 + YlxxbRepository ylxxbRepository;
  193 +
  194 + @Autowired
  195 + YlbRepository ylbRepository;
  196 +
  197 + @Autowired
  198 + DlbRepository dlbRepository;
  199 +
  200 + @Autowired
  201 + ReportService reposrService;
  202 +
  203 + @Autowired
  204 + CulateMileageService culateService;
  205 +
  206 + @Autowired
  207 + FormLogger schModifyLog;
  208 +
  209 + @Autowired
  210 + DirectiveService directiveService;
  211 +
  212 + @Autowired
  213 + CarDeviceRepository carDeviceRepository;
  214 +
  215 + @Autowired
  216 + CarsRepository carsRepository;
  217 +
  218 + @Autowired
  219 + RepairReportRepository repairReportRepository;
  220 + Logger logger = LoggerFactory.getLogger(this.getClass());
  221 +
  222 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  223 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  224 +
  225 + public static Map<String,String> DIRMAP ; // dvr电话
  226 + private Queue<RepairReport> queue = new ConcurrentLinkedQueue<>();
  227 +
  228 + private ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
  229 +
  230 + @Override
  231 + public Thread newThread(Runnable r) {
  232 + // TODO Auto-generated method stub
  233 + Thread t = new Thread(r);
  234 + t.setName("RepairReportReissuer");
  235 +
  236 + return t;
  237 + }
  238 + });
  239 +
  240 +
  241 +
  242 + private static Map<String, String> report2repair = new HashMap<String, String>();
  243 +
  244 + static {
  245 + report2repair.put("9101", "9109");
  246 + report2repair.put("9102", "9102");
  247 + report2repair.put("9103", "9103");
  248 + report2repair.put("9104", "9104");
  249 + report2repair.put("9109", "9109");
  250 + report2repair.put("9201", "9201");
  251 + report2repair.put("9202", "9202");
  252 + report2repair.put("9203", "9203");
  253 + report2repair.put("9204", "9204");
  254 + report2repair.put("9209", "9209");
  255 + report2repair.put("9301", "9301");
  256 + report2repair.put("9302", "9302");
  257 + report2repair.put("9303", "9303");
  258 + report2repair.put("9304", "9304");
  259 + report2repair.put("9305", "9305");
  260 + report2repair.put("9306", "9306");
  261 + report2repair.put("9309", "9309");
  262 + }
  263 +
  264 +
  265 + /**
  266 + * 校验人车 和 班次的公司和分公司归属
  267 + *
  268 + * @param schId
  269 + * @param jGh
  270 + * @param sGh
  271 + * @param nbbm
  272 + * @return -2 跨营运公司,校验不过
  273 + * -1 跨分公司,二次确认
  274 + * 1 校验通过
  275 + */
  276 + @Override
  277 + public Map<String, Object> checkPCFgsAscription(Long schId, String jGh, String sGh, String nbbm) {
  278 + Map<String, Object> rs = new HashMap<>();
  279 + try {
  280 + rs.put("status", ResponseCode.SUCCESS);
  281 + rs.put("checkStatus", -2);
  282 +
  283 + String msg = null;
  284 + ScheduleRealInfo sch = dayOfSchedule.get(schId);
  285 + String gsbm = sch.getGsBm(), fgsbm = sch.getFgsBm();
  286 +
  287 + if (nbbm != null && !carExist(gsbm, nbbm)) {
  288 + msg = sch.getGsName() + "没有自编号为" + "[" + nbbm + "]的车辆";
  289 + rs.put("msg", msg);
  290 + return rs;
  291 + }
  292 +
  293 + if (nbbm != null && !sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(nbbm))) {
  294 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + nbbm + "】的车辆");
  295 + return rs;
  296 + }
  297 +
  298 + if (nbbm != null && !(fgsbm + "_" + gsbm).equals(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm))) {
  299 +
  300 + String clFgsName = BasicData.businessFgsCodeNameMap.get(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm));
  301 +
  302 + msg = ("【" + nbbm + "】" + "是" + clFgsName + "的车辆!");
  303 + rs.put("msg", msg);
  304 + rs.put("checkStatus", -1);
  305 + return rs;
  306 + }
  307 +
  308 + if(null != jGh && !"/".equals(StringUtils.trim(jGh))){
  309 + Personnel jsy = BasicData.perMap.get(gsbm + "-" + jGh);
  310 +
  311 + if (null == jsy) {
  312 + msg = "【驾驶员】:" + sch.getGsName() + "暂无工号为" + "【" + jGh + "】的人员";
  313 + rs.put("msg", msg);
  314 + return rs;
  315 + }
  316 + else if (!fgsbm.equals(jsy.getBrancheCompanyCode())) {
  317 + //校验分公司
  318 + msg = ("【驾驶员】:" + jGh + "/" + jsy.getPersonnelName() + "是" + jsy.getBrancheCompany() + "的人员");
  319 + rs.put("msg", msg);
  320 + rs.put("checkStatus", -1);
  321 + return rs;
  322 + }
  323 + }
  324 +
  325 + if (null != sGh && !"/".equals(StringUtils.trim(sGh))) {
  326 + Personnel spy = BasicData.perMap.get(gsbm + "-" + sGh);
  327 + if (null == spy) {
  328 + msg = "【售票员】: " + sch.getGsName() + "暂无工号为" + "【" + sGh + "】的人员";
  329 + rs.put("msg", msg);
  330 + return rs;
  331 + }
  332 + else if (!fgsbm.equals(spy.getBrancheCompanyCode())) {
  333 + msg = ("【售票员】: " + sGh + "/" + spy.getPersonnelName() + "是" + spy.getBrancheCompany() + "的人员");
  334 + rs.put("msg", msg);
  335 + rs.put("checkStatus", -1);
  336 + return rs;
  337 + }
  338 + }
  339 +
  340 + rs.put("checkStatus", 1);
  341 + } catch (Exception e) {
  342 + logger.error("", e);
  343 + rs.put("status", ResponseCode.ERROR);
  344 + }
  345 + return rs;
  346 + }
  347 +
  348 +
  349 + /**
  350 + * 车辆是否存在
  351 + *
  352 + * @param gsbm 公司编码
  353 + * @param nbbm 车辆自编号
  354 + * @return
  355 + */
  356 + private boolean carExist(String gsbm, String nbbm) {
  357 + return BasicData.nbbm2CompanyCodeMap.containsKey(nbbm);
  358 + }
  359 +
  360 + /**
  361 + * 获取人员姓名
  362 + *
  363 + * @param gsbm 公司编码
  364 + * @param gh 人员工号
  365 + * @return
  366 + */
  367 + private String getPersonName(String gsbm, String gh) {
  368 + return BasicData.allPerson.get(gsbm + '-' + gh);
  369 + }
  370 +
  371 + @Override
  372 + public Iterable<ScheduleRealInfo> list(Map<String, Object> map) {
  373 + Iterator<ScheduleRealInfo> iterator = super.list(map).iterator();
  374 + Set<ScheduleRealInfo> set = new HashSet<>(100);
  375 +
  376 + DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  377 + //计算时间戳
  378 + ScheduleRealInfo sch;
  379 + while (iterator.hasNext()) {
  380 + sch = iterator.next();
  381 + //待发时间戳
  382 + sch.setDfsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getDfsj()));
  383 + //实发时间戳
  384 + if (StringUtils.isNotEmpty(sch.getFcsjActual())) {
  385 + sch.setFcsjActualTime(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsjActual()));
  386 + }
  387 + set.add(sch);
  388 + }
  389 + return set;
  390 + }
  391 +
  392 + @Override
  393 + public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
  394 + List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
  395 +
  396 + /*Multimap<String, ScheduleRealInfo> mMap = ArrayListMultimap.create();
  397 +
  398 + for (String lineCode : lineList) {
  399 + mMap.putAll(lineCode, dayOfSchedule.findByLineCode(lineCode));
  400 + }*/
  401 + return dayOfSchedule.findByLineCodes(lineList);
  402 + }
  403 +
  404 + private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
  405 +
  406 + private static int BUF_SIZE = 1024;
  407 +
  408 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  409 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  410 +
  411 + @Override
  412 + public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType, String userId) {
  413 + Map<String, Object> map = new HashMap<>();
  414 + try {
  415 +
  416 + ScheduleRealInfo schedule = dayOfSchedule.get(id);
  417 +
  418 + if (schedule.getStatus() > 0) {
  419 + map.put("status", ResponseCode.SUCCESS);
  420 + map.put("flag", "4008");
  421 + map.put("t", schedule);
  422 + return map;
  423 + }
  424 +
  425 + LineConfig config = lineConfigData.get(schedule.getXlBm());
  426 + //小于线路开始运营时间,则默认跨过24点
  427 + if (dfsj.compareTo(config.getStartOpt()) < 0) {
  428 + schedule.setRealExecDate(fmtyyyyMMdd.print(schedule.getScheduleDate().getTime() + DAY_TIME));
  429 + } else {
  430 + schedule.setRealExecDate(schedule.getScheduleDateStr());
  431 + }
  432 +
  433 + //记录日志
  434 + ScheduleModifyLogger.dftz(schedule, opType, schedule.getDfsj(), dfsj, remarks, userId);
  435 +
  436 + schedule.setDfsjAll(dfsj);
  437 + schedule.setDfAuto(false);
  438 + if ("1".equals(opType))
  439 + schedule.setRemarks(remarks);
  440 +
  441 + List<ScheduleRealInfo> ts = new ArrayList<>();
  442 + ts.add(schedule);
  443 + //调整终点时间和下一个班次的应到时间
  444 + //schedule.calcEndTime();
  445 + /*ScheduleRealInfo nextSch = dayOfSchedule.nextByLp2(schedule);
  446 + if (null != nextSch) {
  447 + nextSch.setQdzArrDatejh(schedule.getZdsj());
  448 + ts.add(nextSch);
  449 + }*/
  450 +
  451 + //调整班次类型
  452 + if (StringUtils.isNotEmpty(bcType) && !bcType.equals(schedule.getBcType())) {
  453 + if ((schedule.getBcType().equals("major")
  454 + || schedule.getBcType().equals("venting"))
  455 + && bcType.equals("normal")) {
  456 + //清空备注
  457 + schedule.setRemarks("");
  458 + }
  459 + schedule.setBcType(bcType);
  460 + }
  461 +
  462 + //如果正在执行该班次
  463 + //ScheduleRealInfo exec = dayOfSchedule.executeCurr(schedule.getClZbh());
  464 + //if(exec != null && exec == schedule){
  465 + //重新计算正在执行班次
  466 + dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
  467 + //}
  468 +
  469 + //重新计算是否误点
  470 + schedule.reCalcLate();
  471 + //取消应发未到标记,不再自动调整待发
  472 + //if(schedule.isLate2()){
  473 + // schedule.setLate2(false);
  474 + //LateAdjustHandle.remove(schedule);
  475 + //}
  476 +
  477 + try {
  478 + if (!schedule.getDirectiveState().equals(-1) && schedule.getStatus() == 0) {
  479 + //重新下发调度指令
  480 + directiveService.send60Dispatch(schedule.getId(), "待发@系统");
  481 + }
  482 + } catch (Exception e) {
  483 + logger.error("", e);
  484 + }
  485 +
  486 + // 持久化到数据库
  487 + dayOfSchedule.save(schedule);
  488 +
  489 + map.put("status", ResponseCode.SUCCESS);
  490 + map.put("ts", ts);
  491 + } catch (Exception e) {
  492 + logger.error("", e);
  493 + map.put("status", ResponseCode.ERROR);
  494 + }
  495 + return map;
  496 + }
  497 +
  498 + @Override
  499 + public Map<String, Object> destroy(String idsStr, String remarks, String reason, String userId) {
  500 +
  501 + Map<String, Object> map = new HashMap<>();
  502 + List<ScheduleRealInfo> rsList = new ArrayList<>();
  503 + map.put("ts", rsList);
  504 + try {
  505 + List<String> idList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(idsStr));
  506 +
  507 + ScheduleRealInfo schedule = null;
  508 + for (String id : idList) {
  509 + schedule = dayOfSchedule.get(Long.parseLong(id));
  510 + if (schedule.isDestroy()) {
  511 + map.put("status", ResponseCode.ERROR);
  512 + map.put("msg", "不必要的重复烂班!");
  513 + return map;
  514 + }
  515 + //记录日志
  516 + ScheduleModifyLogger.jhlb(schedule, remarks, userId);
  517 +
  518 + schedule.setAdjustExps(reason);
  519 + schedule.destroy();
  520 + schedule.addRemarks(remarks);
  521 +
  522 + dayOfSchedule.save(schedule);
  523 + rsList.add(schedule);
  524 + }
  525 +
  526 + //重新计算当前执行班次
  527 + dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
  528 +
  529 + map.put("status", ResponseCode.SUCCESS);
  530 + } catch (Exception e) {
  531 + logger.error("", e);
  532 + map.put("status", ResponseCode.ERROR);
  533 + }
  534 + return map;
  535 + }
  536 +
  537 + // 线路id获取驾驶员
  538 + @Override
  539 + public List<Map<String, String>> findDriverByLine(String lineCode) {
  540 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  541 +
  542 + List<Map<String, String>> rsList = new ArrayList<>();
  543 + Map<String, String> map = null;
  544 + Personnel driver = null;
  545 + String code = null;
  546 +
  547 + for (EmployeeConfigInfo employee : list) {
  548 + driver = employee.getJsy();
  549 + if (driver != null) {
  550 + map = new HashMap<>();
  551 + code = driver.getJobCode();
  552 + map.put("id", code + "/" + driver.getPersonnelName());
  553 + map.put("text", code + "/" + driver.getPersonnelName());
  554 + rsList.add(map);
  555 + }
  556 + }
  557 + return rsList;
  558 + }
  559 +
  560 + // 线路id获取售票员
  561 + @Override
  562 + public List<Map<String, String>> findConductorByLine(String lineCode) {
  563 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  564 +
  565 + List<Map<String, String>> rsList = new ArrayList<>();
  566 + Map<String, String> map = null;
  567 + Personnel conductor = null;
  568 + String code = null;
  569 +
  570 + for (EmployeeConfigInfo employee : list) {
  571 + conductor = employee.getSpy();
  572 + if (conductor != null) {
  573 + code = conductor.getJobCode();
  574 + map = new HashMap<>();
  575 + map.put("id", code + "/" + conductor.getPersonnelName());
  576 + map.put("text", code + "/" + conductor.getPersonnelName());
  577 + rsList.add(map);
  578 + }
  579 + }
  580 + return rsList;
  581 + }
  582 +
  583 + @Override
  584 + public List<Map<String, String>> findCarByLine(String lineCode) {
  585 +
  586 + List<CarConfigInfo> list = carConfigInfoRepository.findBylineCode(lineCode);
  587 +
  588 + List<Map<String, String>> rsList = new ArrayList<>();
  589 + Map<String, String> map = null;
  590 + Cars car = null;
  591 + String code = null;
  592 +
  593 + for (CarConfigInfo cci : list) {
  594 + car = cci.getCl();
  595 + if (car != null) {
  596 + code = car.getInsideCode();
  597 + map = new HashMap<>();
  598 + map.put("id", code);
  599 + map.put("text", code);
  600 + rsList.add(map);
  601 + }
  602 + }
  603 + return rsList;
  604 + }
  605 +
  606 + /**
  607 + * 添加到历史库
  608 + *
  609 + * @param t
  610 + * @return
  611 + */
  612 + @Override
  613 + public Map<String, Object> addToHistory(ScheduleRealInfo t) {
  614 + Map<String, Object> rs = new HashMap<>();
  615 + try {
  616 + if (!carExist(t.getGsBm(), t.getClZbh())) {
  617 + rs.put("msg", "车辆 " + t.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
  618 + rs.put("status", ResponseCode.ERROR);
  619 + return rs;
  620 + }
  621 +
  622 + SysUser user = SecurityUtils.getCurrentUser();
  623 + //String schDate = DayOfSchedule.currSchDateMap.get(t.getXlBm());
  624 +
  625 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
  626 +
  627 + if (StringUtils.isEmpty(t.getjGh())) {
  628 + rs.put("status", ResponseCode.ERROR);
  629 + rs.put("msg", "驾驶员工号不能为空!");
  630 + return rs;
  631 + }
  632 + //截取驾驶员工号
  633 + if (t.getjGh().indexOf("-") != -1) {
  634 + t.setjGh(t.getjGh().split("-")[1]);
  635 + }
  636 + //检查驾驶员工号
  637 + String jName = getPersonName(t.getGsBm(), t.getjGh());
  638 + if (StringUtils.isEmpty(jName)) {
  639 + rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的驾驶员");
  640 + rs.put("status", ResponseCode.ERROR);
  641 + return rs;
  642 + } else if (StringUtils.isEmpty(t.getjName())) {
  643 + t.setjName(jName);//补上驾驶员名称
  644 + }
  645 +
  646 + //有售票员
  647 + if (StringUtils.isNotEmpty(t.getsGh())) {
  648 + String sName = getPersonName(t.getGsBm(), t.getsGh());
  649 + if (StringUtils.isEmpty(sName)) {
  650 + rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的售票员");
  651 + rs.put("status", ResponseCode.ERROR);
  652 + return rs;
  653 + } else if (StringUtils.isEmpty(t.getsName())) {
  654 + t.setsName(sName);//补上售票员名称
  655 + }
  656 + } else {
  657 + t.setsGh("");
  658 + t.setsName("");
  659 + }
  660 +
  661 + //公司 和 分公司名称
  662 + t.setGsName(BasicData.businessCodeNameMap.get(t.getGsBm()));
  663 + t.setFgsName(BasicData.businessFgsCodeNameMap.get(t.getFgsBm()+ "_" + t.getGsBm() ));
  664 +
  665 + //t.setScheduleDateStr(schDate);
  666 + t.setScheduleDate(sdfyyyyMMdd.parse(t.getScheduleDateStr()));
  667 + t.setRealExecDate(t.getScheduleDateStr());
  668 + t.setCreateBy(user);
  669 + t.setSflj(true);
  670 + t.setLate(false);
  671 + t.setDfsj(t.getFcsj());
  672 + t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime());
  673 + t.setJhlcOrig(t.getJhlc());
  674 +
  675 + //班次历时
  676 + t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
  677 +
  678 + //起终点名称
  679 + String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
  680 + t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
  681 + t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
  682 +
  683 + //计算班次实际执行时间
  684 + schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
  685 + //处理计达跨24点
  686 + LineConfig conf = lineConfigData.get(t.getXlBm());
  687 + if (t.getZdsj().compareTo(conf.getStartOpt()) < 0) {
  688 + t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
  689 + }
  690 + if (t.getZdsjT() < t.getFcsjT()) {
  691 + rs.put("status", ResponseCode.ERROR);
  692 + rs.put("msg", "起终点时间异常!");
  693 + return rs;
  694 + }
  695 +
  696 + t.setId(dayOfSchedule.getId());
  697 + //实时入库
  698 + rs = super.save(t);
  699 + } catch (Exception e) {
  700 + logger.error("", e);
  701 + rs.put("status", ResponseCode.ERROR);
  702 + }
  703 + return rs;
  704 + }
  705 +
  706 +
  707 + /**
  708 + * 临加班次
  709 + */
  710 + @Override
  711 + public Map<String, Object> save(ScheduleRealInfo sch) {
  712 + Map<String, Object> rs = new HashMap<>();
  713 + try {
  714 + String clZbh = sch.getClZbh();
  715 + if (StringUtils.isNotEmpty(clZbh)) {
  716 + //检测
  717 + if (!carExist(sch.getGsBm(), clZbh)) {
  718 + rs.put("status", ResponseCode.ERROR);
  719 + rs.put("msg", "车辆 " + clZbh + " 不存在!");
  720 + return rs;
  721 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
  722 + rs.put("status", ResponseCode.ERROR);
  723 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
  724 + return rs;
  725 + }
  726 + }
  727 +
  728 + SysUser user = SecurityUtils.getCurrentUser();
  729 + String schDate = DayOfSchedule.currSchDateMap.get(sch.getXlBm());
  730 +
  731 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
  732 +
  733 + if (StringUtils.isEmpty(sch.getjGh())) {
  734 + rs.put("status", ResponseCode.ERROR);
  735 + rs.put("msg", "驾驶员工号不能为空!");
  736 + return rs;
  737 + }
  738 + //截取驾驶员工号
  739 + if (sch.getjGh().indexOf("-") != -1) {
  740 + sch.setjGh(sch.getjGh().split("-")[1]);
  741 + }
  742 + //检查驾驶员工号
  743 + String jName = getPersonName(sch.getGsBm(), sch.getjGh());
  744 + if (StringUtils.isEmpty(jName)) {
  745 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
  746 + rs.put("status", ResponseCode.ERROR);
  747 + return rs;
  748 + } else if (StringUtils.isEmpty(sch.getjName())) {
  749 + sch.setjName(jName);//补上驾驶员名称
  750 + }
  751 +
  752 + //有售票员
  753 + if (StringUtils.isNotEmpty(sch.getsGh())) {
  754 + String sName = getPersonName(sch.getGsBm(), sch.getsGh());
  755 + if (StringUtils.isEmpty(sName)) {
  756 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的售票员");
  757 + rs.put("status", ResponseCode.ERROR);
  758 + return rs;
  759 + } else if (StringUtils.isEmpty(sch.getsName())) {
  760 + sch.setsName(sName);//补上售票员名称
  761 + }
  762 + } else {
  763 + sch.setsGh("");
  764 + sch.setsName("");
  765 + }
  766 +
  767 + //公司 和 分公司名称
  768 + sch.setGsName(BasicData.businessCodeNameMap.get(sch.getGsBm()));
  769 + sch.setFgsName(BasicData.businessFgsCodeNameMap.get(sch.getFgsBm() + "_" + sch.getGsBm()));
  770 + sch.setCreateDate(new Date());
  771 + sch.setScheduleDateStr(schDate);
  772 + sch.setScheduleDate(sdfyyyyMMdd.parse(schDate));
  773 + sch.setRealExecDate(schDate);
  774 +
  775 + sch.setCreateBy(user);
  776 + sch.setSflj(true);
  777 + sch.setLate(false);
  778 + sch.setDfsj(sch.getFcsj());
  779 + sch.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + sch.getZdsj()).getTime());
  780 + sch.setJhlcOrig(sch.getJhlc());
  781 + sch.setCreateDate(new Date());
  782 + sch.setUpdateDate(new Date());
  783 + sch.setSpId(-1L);
  784 + //起终点名称
  785 + String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
  786 + sch.setQdzName(BasicData.getStationNameByCode(sch.getQdzCode(), prefix));
  787 + sch.setZdzName(BasicData.getStationNameByCode(sch.getZdzCode(), prefix));
  788 +
  789 + //计算班次实际执行时间
  790 + schAttrCalculator.calcRealDate(sch).calcAllTimeByFcsj(sch);
  791 +
  792 + //处理计达跨24点
  793 + LineConfig conf = lineConfigData.get(sch.getXlBm());
  794 + if (sch.getZdsj().compareTo(conf.getStartOpt()) < 0) {
  795 + sch.setZdsjT(sdfyyyyMMddHHmm.parse(sch.getScheduleDateStr() + sch.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
  796 + }
  797 +
  798 + //班次历时
  799 + sch.setBcsj((int) ((sch.getZdsjT() - sch.getDfsjT()) / 1000 / 60));
  800 + if (sch.getZdsjT() < sch.getFcsjT()) {
  801 + rs.put("status", ResponseCode.ERROR);
  802 + rs.put("msg", "起终点时间异常!");
  803 + return rs;
  804 + }
  805 +
  806 + sch.setId(dayOfSchedule.getId());
  807 + //实时入库
  808 + super.save(sch);
  809 +
  810 + // 加入缓存
  811 + dayOfSchedule.put(sch);
  812 +
  813 + //更新起点应到时间
  814 + List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
  815 +
  816 + //重新计算车辆当前执行班次
  817 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  818 +
  819 + //记录站到场历时数据
  820 + Station2ParkBuffer.put(sch);
  821 +
  822 + rs.put("ts", ts);
  823 + rs.put("t", sch);
  824 + } catch (Exception e) {
  825 + logger.error("", e);
  826 + rs.put("status", ResponseCode.ERROR);
  827 + }
  828 + return rs;
  829 + }
  830 +
  831 + /**
  832 + * 删除历史表临加班次
  833 + *
  834 + * @param id
  835 + * @return
  836 + */
  837 + @Override
  838 + public Map<String, Object> deleteToHistory(Long id) {
  839 + Map<String, Object> rs = new HashMap<>();
  840 + rs.put("status", ResponseCode.ERROR);
  841 +
  842 + try {
  843 + ScheduleRealInfo sch = super.findById(id);
  844 + if (sch == null) {
  845 + rs.put("msg", "无效的id号");
  846 + return rs;
  847 + }
  848 +
  849 + if (!sch.isSflj()) {
  850 + rs.put("msg", "你只能删除临加班次");
  851 + return rs;
  852 + }
  853 +
  854 + //解除和调度指令的外键约束
  855 + jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
  856 +
  857 + //数据库删除
  858 + rs = super.delete(id);
  859 + } catch (Exception e) {
  860 + logger.error("", e);
  861 + rs.put("msg", e.getMessage());
  862 + }
  863 +
  864 + return rs;
  865 + }
  866 +
  867 + @Override
  868 + public Map<String, Object> delete(Long id) {
  869 + Map<String, Object> rs = new HashMap<>();
  870 + rs.put("status", ResponseCode.ERROR);
  871 +
  872 + ScheduleRealInfo sch = null;
  873 + try {
  874 + sch = dayOfSchedule.get(id);
  875 + if (sch == null) {
  876 + rs.put("msg", "无效的id号");
  877 + return rs;
  878 + }
  879 +
  880 + if (!sch.isSflj()) {
  881 + rs.put("msg", "你只能删除临加班次");
  882 + return rs;
  883 + }
  884 +
  885 + sch.setDeleted(true);
  886 + //解除和调度指令的外键约束
  887 + jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
  888 +
  889 + //数据库删除
  890 + rs = super.delete(id);
  891 + if (rs.get("status").equals(ResponseCode.SUCCESS)) {
  892 + dayOfSchedule.delete(sch);
  893 + //更新起点应到时间
  894 + List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
  895 + rs.put("ts", ts);
  896 + rs.put("delete", sch);
  897 + } else
  898 + sch.setDeleted(false);
  899 + } catch (Exception e) {
  900 + logger.error("", e);
  901 + rs.put("msg", e.getMessage());
  902 + sch.setDeleted(false);
  903 + }
  904 +
  905 + return rs;
  906 + }
  907 +
  908 + @Override
  909 + public List<Map<String, String>> sreachVehic(String nbbm) {
  910 + // 转大写
  911 + nbbm = nbbm.toUpperCase();
  912 +
  913 + List<Map<String, String>> list = new ArrayList<>();
  914 + Map<String, String> map;
  915 + Set<String> allSet = BasicData.nbbm2CompanyCodeMap.keySet();
  916 +
  917 + Line line;
  918 + for (String k : allSet) {
  919 + if (k.indexOf(nbbm) != -1) {
  920 + // 所属线路
  921 + map = new HashMap<>();
  922 + line = BasicData.nbbm2LineMap.get(k);
  923 + map.put("id", k);
  924 + map.put("text", k);
  925 + if (null != line) {
  926 + map.put("lineName", line.getName());
  927 + map.put("lineCode", line.getLineCode());
  928 + }
  929 +
  930 + list.add(map);
  931 + }
  932 +
  933 + if (list.size() > 20)
  934 + break;
  935 + }
  936 + return list;
  937 + }
  938 +
  939 + @Override
  940 + public void adjustCar(ScheduleRealInfo schedule, String car) {
  941 + schedule.setClZbh(car);
  942 + }
  943 +
  944 + @Override
  945 + public void adjustDriver(ScheduleRealInfo schedule, String driver, String driverName) {
  946 + if (driver.indexOf("-") != -1)
  947 + driver = driver.split("-")[1];
  948 + schedule.setjGh(driver);
  949 + schedule.setjName(driverName);
  950 + }
  951 +
  952 + @Override
  953 + public void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName) {
  954 + if (conductor.indexOf("-") != -1)
  955 + conductor = conductor.split("-")[1];
  956 + schedule.setsGh(conductor);
  957 + schedule.setsName(conductorName);
  958 + }
  959 +
  960 + @Override
  961 + public List<ScheduleRealInfo> queryUserInfo(String line, String date, String state) {
  962 + List<ScheduleRealInfo> scheduleRealInfos = new ArrayList<>();
  963 + List<Object[]> objects = null;
  964 + if (state.equals("2")) {
  965 + objects = scheduleRealInfoRepository.queryUserInfo2(line, date);
  966 + for (Object[] objs : objects) {
  967 + ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
  968 + scheduleRealInfo.setId((Long)objs[0]);
  969 + scheduleRealInfo.setjGh((String)objs[1]);
  970 + scheduleRealInfo.setClZbh((String)objs[2]);
  971 + scheduleRealInfo.setLpName((String)objs[3]);
  972 + scheduleRealInfo.setjName((String)objs[4]);
  973 +
  974 + scheduleRealInfos.add(scheduleRealInfo);
  975 + }
  976 + } else {
  977 + objects = scheduleRealInfoRepository.queryUserInfo3(line, date);
  978 + for (Object[] objs : objects) {
  979 + ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
  980 + scheduleRealInfo.setId((Long)objs[0]);
  981 + scheduleRealInfo.setClZbh((String)objs[1]);
  982 +
  983 + scheduleRealInfos.add(scheduleRealInfo);
  984 + }
  985 + }
  986 +
  987 + return scheduleRealInfos;
  988 + }
  989 +
  990 + @Override
  991 + public List<ScheduleRealInfo> queryUserInfoPx(String line, String date, String state, String type) {
  992 +// List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  993 + state = state + "";
  994 + String lpname = state;
  995 + String px = type;
  996 + if (state.equals("lpName")) {
  997 + state = state + "+1";
  998 + type = "ASC";
  999 + }
  1000 + String minfcsj = "02:00";
  1001 + List<Line> lineList = lineRepository.findLineByCode(line);
  1002 + if (lineList.size() > 0) {
  1003 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  1004 + + " id = ("
  1005 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  1006 + + ")";
  1007 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  1008 + }
  1009 + String sqlPlan = "select * from (select * from ("
  1010 + + " select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
  1011 + + " s.lp_Name as lpName,min(s.j_Name) as jName,max(s.schedule_date_str) as dateStr ,"
  1012 + + " min(s.fcsj) as fcsj,1 as px from bsth_c_s_sp_info_real s where "
  1013 + + " s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
  1014 + + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name) x where x.fcsj >'" + minfcsj + "'"
  1015 + + " UNION "
  1016 + + " select * from ( select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
  1017 + + " s.lp_Name as lpName,min(s.j_Name) as jName, max(s.schedule_date_str) as dateStr,"
  1018 + + " min(s.fcsj) as fcsj,2 as px from bsth_c_s_sp_info_real s "
  1019 + + " where s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
  1020 + + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name"
  1021 + + " ) y where y.fcsj <='" + minfcsj + "') z order by (" + state + "),dateStr,px,fcsj " + type;
  1022 + List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan,
  1023 + new RowMapper<ScheduleRealInfo>() {
  1024 + @Override
  1025 + public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  1026 + ScheduleRealInfo t = new ScheduleRealInfo();
  1027 + t.setId(rs.getLong("id"));
  1028 + t.setjGh(rs.getString("jGh"));
  1029 + t.setClZbh(rs.getString("clZbh"));
  1030 + t.setLpName(rs.getString("lpName"));
  1031 + t.setjName(rs.getString("jName"));
  1032 + t.setFcsj(rs.getString("fcsj"));
  1033 + return t;
  1034 + }
  1035 + });
  1036 + if (lpname.equals("lpName")) {
  1037 +
  1038 + List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>();
  1039 + Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
  1040 +// if (px.equals("desc")) {
  1041 + int zt = 0;
  1042 + for (int l = 0; l < 2; l++) {
  1043 + for (int i = 0; i < list.size(); i++) {
  1044 + ScheduleRealInfo t = list.get(i);
  1045 + if (t.getLpName().indexOf("+") != -1) {
  1046 + if (zt == 0) {
  1047 + listNew.add(t);
  1048 + }
  1049 + } else if (pattern.matcher(t.getLpName()).matches()) {
  1050 + if (zt == 1) {
  1051 + listNew.add(t);
  1052 + }
  1053 + } else {
  1054 + continue;
  1055 + }
  1056 + }
  1057 + zt++;
  1058 + }
  1059 +
  1060 + Collections.sort(list, new ComparableLp());
  1061 + for (int i = 0; i < list.size(); i++) {
  1062 + ScheduleRealInfo t = list.get(i);
  1063 + if (t.getLpName().indexOf("+") != -1) {
  1064 + continue;
  1065 + } else if (pattern.matcher(t.getLpName()).matches()) {
  1066 + continue;
  1067 + } else {
  1068 + listNew.add(t);
  1069 + }
  1070 + }
  1071 + return listNew;
  1072 + } else {
  1073 + return list;
  1074 + }
  1075 +
  1076 + }
  1077 +
  1078 + /**
  1079 + *
  1080 + */
  1081 + @Override
  1082 + public List<ScheduleRealInfo> exportWaybill(String jName,String jGh, String clZbh, String lpName, String date, String line) {
  1083 + ReportUtils ee = new ReportUtils();
  1084 + ReportRelatedUtils rru = new ReportRelatedUtils();
  1085 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  1086 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  1087 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  1088 +// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
  1089 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  1090 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1091 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1092 + Set<ChildTaskPlan> cts = s.getcTasks();
  1093 + if (cts != null && cts.size() > 0) {
  1094 + lists.add(s);
  1095 + } else {
  1096 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  1097 + lists.add(s);
  1098 + }
  1099 + }
  1100 + }
  1101 + DecimalFormat format = new DecimalFormat("0.00");
  1102 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  1103 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  1104 + //计算里程和班次数,并放入Map里
  1105 + Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  1106 +
  1107 + map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
  1108 + map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
  1109 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  1110 + double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
  1111 + map.put("yygl", yygl);
  1112 + double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
  1113 + map.put("ksgl", ksgl);
  1114 + map.put("realMileage", Arith.add(yygl, ksgl));
  1115 + map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
  1116 + map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
  1117 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  1118 + int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
  1119 + map.put("sjbc", sjbc);
  1120 +// map=new HashMap<String,Object>();
  1121 +
  1122 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  1123 + String minfcsj = "02:00";
  1124 + List<Line> lineList = lineRepository.findLineByCode(line);
  1125 + if (lineList.size() > 0) {
  1126 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  1127 + + " id = ("
  1128 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  1129 + + ")";
  1130 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  1131 + }
  1132 + String[] minSjs = minfcsj.split(":");
  1133 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  1134 +
  1135 +
  1136 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1137 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1138 + String[] fcsj = s.getFcsj().split(":");
  1139 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  1140 +
  1141 + Long fscjT = 0L;
  1142 + if (fcsjL < minSj) {
  1143 + Calendar calendar = new GregorianCalendar();
  1144 + calendar.setTime(s.getScheduleDate());
  1145 + calendar.add(calendar.DATE, 1);
  1146 + s.setScheduleDate(calendar.getTime());
  1147 + try {
  1148 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  1149 + } catch (ParseException e) {
  1150 + // TODO Auto-generated catch block
  1151 + e.printStackTrace();
  1152 + }
  1153 +
  1154 + } else {
  1155 + try {
  1156 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  1157 + } catch (ParseException e) {
  1158 + // TODO Auto-generated catch block
  1159 + e.printStackTrace();
  1160 + }
  1161 + ;
  1162 + }
  1163 + s.setFcsjT(fscjT);
  1164 + }
  1165 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  1166 + Collections.sort(scheduleRealInfos, new ComparableReal());
  1167 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1168 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1169 + s.setAdjustExps(i + 1 + "");
  1170 + String remarks = "";
  1171 + if (s.getRemarks() != null) {
  1172 + remarks += s.getRemarks();
  1173 + }
  1174 +
  1175 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  1176 + if (!childTaskPlans.isEmpty()) {
  1177 + s.setFcsjActual("");
  1178 + s.setZdsjActual("");
  1179 + s.setJhlc(0.0);
  1180 + }
  1181 +
  1182 + if (s.isDestroy()) {
  1183 + s.setFcsjActual("");
  1184 + s.setZdsjActual("");
  1185 + s.setJhlc(0.0);
  1186 + remarks += "(烂班)";
  1187 + s.setRemarks(remarks);
  1188 + }
  1189 +
  1190 + listSchedule.add(s);
  1191 + //计算营运里程,空驶里程
  1192 + if (!childTaskPlans.isEmpty()) {
  1193 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  1194 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  1195 + Collections.sort(listit, new ComparableChild());
  1196 + for (int j = 0; j < listit.size(); j++) {
  1197 + ScheduleRealInfo t = new ScheduleRealInfo();
  1198 + ChildTaskPlan childTaskPlan = listit.get(j);
  1199 + if (childTaskPlan.isDestroy()) {
  1200 + t.setFcsjActual("");
  1201 + t.setZdsjActual("");
  1202 + t.setJhlc(0.0);
  1203 + } else {
  1204 + t.setFcsjActual(childTaskPlan.getStartDate());
  1205 + t.setZdsjActual(childTaskPlan.getEndDate());
  1206 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  1207 + }
  1208 + t.setQdzName(childTaskPlan.getStartStationName());
  1209 + t.setZdzName(childTaskPlan.getEndStationName());
  1210 + t.setRemarks(childTaskPlan.getRemarks());
  1211 + t.setAdjustExps("子");
  1212 + t.setjGh("");
  1213 + t.setjName("");
  1214 + t.setsGh("");
  1215 + t.setsName("");
  1216 + listSchedule.add(t);
  1217 + }
  1218 + }
  1219 + }
  1220 + Map<String, Object> maps;
  1221 + for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
  1222 + maps = new HashMap<String, Object>();
  1223 + try {
  1224 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  1225 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  1226 + maps = rru.getMapValue(scheduleRealInfo);
  1227 + maps.put("bcs", scheduleRealInfo.getAdjustExps());
  1228 + String zdsj = scheduleRealInfo.getZdsj();
  1229 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  1230 + if (zdsj != null && zdsjActual != null &&
  1231 + !zdsj.equals(zdsjActual) &&
  1232 + !zdsj.equals("") &&
  1233 + !zdsjActual.equals("")) {
  1234 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  1235 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  1236 + if (zdsj.compareTo(zdsjActual) > 0) {
  1237 + if (zdsjT - zdsjAT > 1000) {
  1238 + maps.put("fast", "");
  1239 + maps.put("slow", zdsjAT - zdsjT + 1440);
  1240 + } else {
  1241 + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  1242 + maps.put("slow", "");
  1243 + }
  1244 + } else {
  1245 + if (zdsjAT - zdsjT > 1000) {
  1246 + maps.put("fast", zdsjT - zdsjAT + 1440);
  1247 + maps.put("slow", "");
  1248 + } else {
  1249 + maps.put("fast", "");
  1250 + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  1251 + }
  1252 + }
  1253 + } else {
  1254 + maps.put("fast", "");
  1255 + maps.put("slow", "");
  1256 + }
  1257 + listMap.add(maps);
  1258 + } catch (Exception e) {
  1259 + e.printStackTrace();
  1260 + }
  1261 + }
  1262 +
  1263 + String xls = "";
  1264 + if (map.get("type").toString().equals("0")) {
  1265 + xls = "waybill_minhang.xls";
  1266 + } else {
  1267 + xls = "waybill_minhang_dl.xls";
  1268 + }
  1269 +
  1270 +
  1271 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1272 +
  1273 + list.add(listMap.iterator());
  1274 + ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/" + xls,
  1275 + path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  1276 + return scheduleRealInfos;
  1277 + }
  1278 +
  1279 + @Override
  1280 + public List<Map<String, Object>> dailyInfo(String line, String date, String type) {
  1281 + DecimalFormat format = new DecimalFormat("0.00");
  1282 + ReportUtils ee = new ReportUtils();
  1283 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1284 + List<Map<String, Object>> list = scheduleRealInfoRepository.dailyInfo(line, date);
  1285 +
  1286 + double totalZGL = 0, totalKSGL = 0, totalYH = 0;
  1287 + int totalBCS = 0;
  1288 + for (int i = 0; i < list.size(); i++) {
  1289 + String zgl = format.format(Double.parseDouble(list.get(i).get("zgl") == null ? "0" : list.get(i).get("zgl").toString()));
  1290 + String ksgl = format.format(Double.parseDouble(list.get(i).get("ksgl") == null ? "0" : list.get(i).get("ksgl").toString()));
  1291 + if (type.equals("export")) {
  1292 + totalZGL += Double.parseDouble(zgl);
  1293 + totalKSGL += Double.parseDouble(ksgl);
  1294 + totalBCS += Integer.parseInt(list.get(i).get("bcs").toString());
  1295 + }
  1296 + list.get(i).put("zgl", zgl);
  1297 + list.get(i).put("ksgl", ksgl);
  1298 + }
  1299 + if (type.equals("export")) {
  1300 + Map<String, Object> map = new HashMap<String, Object>();
  1301 + map.put("line", line);
  1302 + map.put("date", date);
  1303 + map.put("totalZGL", totalZGL);
  1304 + map.put("totalKSGL", totalKSGL);
  1305 + map.put("totalYH", totalYH);
  1306 + map.put("totalBCS", totalBCS);
  1307 +
  1308 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1309 +
  1310 + listI.add(list.iterator());
  1311 + try {
  1312 + ee.excelReplace(listI, new Object[]{map}, path + "mould/daily.xls",
  1313 + path + "export/班次日报" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  1314 + } catch (ParseException e) {
  1315 + e.printStackTrace();
  1316 + }
  1317 + }
  1318 + return list;
  1319 + }
  1320 +
  1321 + @Override
  1322 + public List<Object[]> historyMessage(String line, String date, String code, String type) {
  1323 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1324 +
  1325 + long d = 0;
  1326 + long t = 0;
  1327 + if (date.length() > 0) {
  1328 + try {
  1329 + d = sdf.parse(date + " 00:00:00").getTime();
  1330 + t = sdf.parse(date + " 23:59:59").getTime();
  1331 + } catch (ParseException e) {
  1332 + // TODO Auto-generated catch block
  1333 + e.printStackTrace();
  1334 + }
  1335 +
  1336 + }
  1337 + String device = "";
  1338 + String device2 ="";
  1339 + long qyrqTime=0l;
  1340 + if (!code.equals("")) {
  1341 + try {
  1342 + List<CarDevice> deviceList=carDeviceRepository.findCarCode(code, sdf.parse(date+ " 00:00:00"));
  1343 + if(deviceList.size()>0){
  1344 + device=deviceList.get(0).getOldDeviceNo();
  1345 + Date qyrq=deviceList.get(0).getQyrq();
  1346 + qyrqTime=qyrq.getTime();
  1347 + if(qyrqTime<t){
  1348 + device2=deviceList.get(0).getNewDeviceNo();
  1349 + }
  1350 + }else{
  1351 + device = BasicData.deviceId2NbbmMap.inverse().get(code);
  1352 + }
  1353 + } catch (ParseException e) {
  1354 + // TODO Auto-generated catch block
  1355 + e.printStackTrace();
  1356 + }
  1357 + }
  1358 + List<Object[]> list=new ArrayList<Object[]>();
  1359 +
  1360 + List<Object[]> list0 =scheduleRealInfoRepository.historyMessage(line, d, t, device);
  1361 + for (Object[] obj : list0) {
  1362 + if (obj != null) {
  1363 + if(code.equals("")){
  1364 + if (BasicData.deviceId2NbbmMap.get(obj[0].toString()) == null) {
  1365 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  1366 + try {
  1367 + carDeviceList = carDeviceRepository.findCarDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
  1368 + //启用日期大于营运日期 还是根据旧设备号查询
  1369 + if(carDeviceList.size()==0){
  1370 + carDeviceList = carDeviceRepository.findCarOldDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
  1371 + }
  1372 + } catch (Exception e) {
  1373 + // TODO Auto-generated catch block
  1374 + e.printStackTrace();
  1375 + }
  1376 + if (carDeviceList.size() > 0) {
  1377 + obj[0] = carDeviceList.get(0).getClZbh();
  1378 + } else {
  1379 + obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
  1380 + }
  1381 + } else {
  1382 + obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
  1383 + }
  1384 + }else{
  1385 + obj[0]=code;
  1386 + }
  1387 +
  1388 + obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
  1389 + obj[4] = BasicData.lineCode2NameMap.get(line);
  1390 + }
  1391 + }
  1392 + list.addAll(list0);
  1393 + if(!device2.equals("")){
  1394 + List<Object[]> list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2);
  1395 + for (Object[] obj : list1) {
  1396 + if (obj != null) {
  1397 + obj[0] =code;
  1398 + obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
  1399 + obj[4] = BasicData.lineCode2NameMap.get(line);
  1400 + }
  1401 + }
  1402 + list.addAll(list1);
  1403 + }
  1404 +
  1405 + if (type != null && type.length() != 0 && type.equals("export")) {
  1406 + String lineName = BasicData.lineCode2NameMap.get(line);
  1407 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1408 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1409 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1410 + Map<String, Object> m = new HashMap<String, Object>();
  1411 + ReportUtils ee = new ReportUtils();
  1412 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  1413 + for (int i = 0; i < list.size(); i++) {
  1414 + Map<String, Object> map = new HashMap<String, Object>();
  1415 + Object[] obj = list.get(i);
  1416 + map.put("num", i + 1);
  1417 + map.put("line", obj[4]);
  1418 + map.put("clZbh", obj[0]);
  1419 + map.put("sender", obj[1]);
  1420 + map.put("date", obj[3]);
  1421 + map.put("text", obj[2]);
  1422 + newList.add(map);
  1423 + }
  1424 + try {
  1425 + listI.add(newList.iterator());
  1426 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1427 + ee.excelReplace(listI, new Object[]{m}, path + "mould/historyMessage.xls",
  1428 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  1429 + + "-" + lineName + "-调度历史消息.xls");
  1430 + } catch (Exception e) {
  1431 + // TODO: handle exception
  1432 + e.printStackTrace();
  1433 + }
  1434 + }
  1435 +
  1436 + if (type != null && type.length() != 0 && type.equals("export_msg")) {
  1437 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1438 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1439 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1440 + Map<String, Object> m = new HashMap<String, Object>();
  1441 + ReportUtils ee = new ReportUtils();
  1442 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  1443 + for (int i = 0; i < list.size(); i++) {
  1444 + Map<String, Object> map = new HashMap<String, Object>();
  1445 + Object[] obj = list.get(i);
  1446 + map.put("num", i + 1);
  1447 + map.put("line", obj[4]);
  1448 + map.put("clZbh", obj[0]);
  1449 + map.put("sender", obj[1]);
  1450 + map.put("date", obj[3]);
  1451 + map.put("text", obj[2]);
  1452 + newList.add(map);
  1453 + }
  1454 + try {
  1455 + listI.add(newList.iterator());
  1456 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1457 + ee.excelReplace(listI, new Object[]{m}, path + "mould/message.xls",
  1458 + path + "export/调度消息分析" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  1459 + } catch (Exception e) {
  1460 + // TODO: handle exception
  1461 + e.printStackTrace();
  1462 + }
  1463 + }
  1464 + return list;
  1465 + }
  1466 +
  1467 + @Override
  1468 + public Map<Integer, Integer> trustStatus(String lineStr) {
  1469 + List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lineStr));
  1470 +
  1471 + Map<Integer, Integer> map = new HashMap<>();
  1472 + return map;
  1473 + }
  1474 +
  1475 + @Override
  1476 + public Map<String, Object> realOutAdjust(Map<String, String> map) {
  1477 + Map<String, Object> rs = new HashMap<>();
  1478 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1479 + try {
  1480 + // 维修上报
  1481 + if (StringUtils.isNotBlank(map.get("reportTypes"))) {
  1482 + Map<String, Object> param = new HashMap<String, Object>();
  1483 + param.putAll(map);
  1484 + rs = repairReport(param, false);
  1485 + }
  1486 +
  1487 + Long id = Long.parseLong(map.get("id"));
  1488 + String remarks = map.get("remarks"), fcsjActual = map.get("fcsjActual");
  1489 +
  1490 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1491 +
  1492 + LineConfig config = lineConfigData.get(sch.getXlBm());
  1493 + //小于线路开始运营时间,则默认跨过24点
  1494 + if (fcsjActual.compareTo(config.getStartOpt()) < 0) {
  1495 + sch.setRealExecDate(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME));
  1496 + } else {
  1497 + sch.setRealExecDate(sch.getScheduleDateStr());
  1498 + }
  1499 +
  1500 + //日志记录
  1501 + ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
  1502 +
  1503 + sch.setFcsjActualAll(fcsjActual);
  1504 + sch.setRemarks(remarks);
  1505 + sch.calcStatus();
  1506 + //if(sch.isLate2()){
  1507 + //取消应发未到标记
  1508 + // sch.setLate2(false);
  1509 + LateAdjustHandle.remove(sch);
  1510 + //}
  1511 +
  1512 + dayOfSchedule.save(sch);
  1513 +
  1514 + ts.add(sch);
  1515 +
  1516 + rs.put("status", ResponseCode.SUCCESS);
  1517 + rs.put("ts", ts);
  1518 +
  1519 + //通知页面刷新
  1520 + sendUtils.refreshSch(ts);
  1521 + } catch (Exception e) {
  1522 + logger.error("", e);
  1523 + rs.put("status", ResponseCode.ERROR);
  1524 + }
  1525 +
  1526 + return rs;
  1527 + }
  1528 +
  1529 + @Override
  1530 + public Map<String, Object> revokeDestroy(Long id) {
  1531 + Map<String, Object> rs = new HashMap<>();
  1532 + try {
  1533 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1534 + if (sch.getStatus() != -1) {
  1535 + rs.put("status", ResponseCode.ERROR);
  1536 + rs.put("msg", "未烂班,无法撤销!");
  1537 + } else {
  1538 + //日志记录
  1539 + ScheduleModifyLogger.cxlb(sch);
  1540 +
  1541 + sch.setStatus(0);
  1542 + sch.setRemarks("");//清空备注
  1543 + sch.setJhlc(sch.getJhlcOrig());
  1544 +
  1545 + //入库
  1546 + dayOfSchedule.save(sch);
  1547 + //重新计算当前执行班次
  1548 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1549 + rs.put("status", ResponseCode.SUCCESS);
  1550 + rs.put("t", sch);
  1551 +
  1552 + }
  1553 + } catch (Exception e) {
  1554 + logger.error("", e);
  1555 + rs.put("status", ResponseCode.ERROR);
  1556 + }
  1557 + return rs;
  1558 + }
  1559 +
  1560 + @Override
  1561 + public Map<String, Object> revokeRealOutgo(Long id) {
  1562 + Map<String, Object> rs = new HashMap<>();
  1563 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1564 +
  1565 + try {
  1566 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1567 + if (sch.getFcsjActual() == null) {
  1568 + rs.put("status", ResponseCode.ERROR);
  1569 + rs.put("msg", "无实发时间,无法撤销!");
  1570 + } else {
  1571 + //日志记录
  1572 + ScheduleModifyLogger.cxsf(sch);
  1573 +
  1574 + sch.clearFcsjActual();
  1575 + rs.put("status", ResponseCode.SUCCESS);
  1576 +
  1577 + ts.add(sch);
  1578 + rs.put("ts", ts);
  1579 +
  1580 + dayOfSchedule.save(sch);
  1581 +
  1582 + }
  1583 + } catch (Exception e) {
  1584 + logger.error("", e);
  1585 + rs.put("status", ResponseCode.ERROR);
  1586 + }
  1587 + return rs;
  1588 + }
  1589 +
  1590 + @Override
  1591 + public Map<String, Object> spaceAdjust(Long[] ids, Integer space) {
  1592 +
  1593 + List<ScheduleRealInfo> list = new ArrayList<>(), ts = new ArrayList<>(), tempTs = null;
  1594 + Map<String, Object> rs = new HashMap<>(), tempRs = new HashMap<>();
  1595 + try {
  1596 + ScheduleRealInfo sch, next;
  1597 + for (Long id : ids) {
  1598 + sch = dayOfSchedule.get(id);
  1599 + if (null != sch)
  1600 + list.add(sch);
  1601 + }
  1602 +
  1603 + int size = list.size();
  1604 + if (size == 0) {
  1605 + rs.put("status", ResponseCode.ERROR);
  1606 + } else {
  1607 + // 按发车时间排序
  1608 + Collections.sort(list, new ScheduleComparator.FCSJ());
  1609 +
  1610 + // 以第一个实际发车/待发时间为起点,调整间隔
  1611 + sch = list.get(0);
  1612 + Long st = sch.getFcsjActualTime() == null ? sch.getDfsjT() : sch.getFcsjActualTime(), plus = space * 60 * 1000L;
  1613 +
  1614 + for (int i = 1; i < size; i++) {
  1615 + st += plus;
  1616 + sch = list.get(i);
  1617 +
  1618 + //调整待发
  1619 + tempRs = outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "3", null);
  1620 +
  1621 + if (null != tempRs && tempRs.get("ts") != null)
  1622 + tempTs = (List<ScheduleRealInfo>) tempRs.get("ts");
  1623 +
  1624 + ts.addAll(tempTs);
  1625 + }
  1626 +
  1627 + rs.put("status", ResponseCode.SUCCESS);
  1628 + //返回最后一个班次,页面会全量刷新
  1629 + rs.put("ts", ts);
  1630 + }
  1631 +
  1632 + } catch (Exception e) {
  1633 + logger.error("", e);
  1634 + rs.put("status", ResponseCode.ERROR);
  1635 + }
  1636 + return rs;
  1637 + }
  1638 +
  1639 + private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  1640 +
  1641 + @Transactional
  1642 + @Override
  1643 + public Map<String, Object> schInfoFineTune(Map<String, String> map) {
  1644 + Map<String, Object> rs = new HashMap<>();
  1645 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1646 + try {
  1647 + // 维修上报
  1648 + if (StringUtils.isNotBlank(map.get("reportTypes"))) {
  1649 + Map<String, Object> param = new HashMap<String, Object>();
  1650 + param.putAll(map);
  1651 + rs = repairReport(param, false);
  1652 + }
  1653 +
  1654 + Long id = Long.parseLong(map.get("id"));
  1655 + String remarks = map.get("remarks");
  1656 +
  1657 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1658 +
  1659 + if (null == sch) {
  1660 + rs.put("status", ResponseCode.ERROR);
  1661 + rs.put("msg", "不存在的班次!");
  1662 + return rs;
  1663 + }
  1664 +
  1665 + //日志记录器
  1666 + FcxxwtLogger fLog = FcxxwtLogger.start(sch, remarks);
  1667 +
  1668 + String clZbh = map.get("clZbh");
  1669 + String jsy = map.get("jsy");
  1670 + if (!clZbh.equals(sch.getClZbh())
  1671 + || !jsy.equals(sch.getjGh() + "/" + sch.getjName()))
  1672 + schModifyLog.saveChangetochange(sch, clZbh, jsy);//为换人换车情况表写入数据
  1673 + /**
  1674 + * 换车
  1675 + */
  1676 + if (StringUtils.isNotEmpty(clZbh) && !clZbh.equals(sch.getClZbh())) {
  1677 + //换车
  1678 + if (!carExist(sch.getGsBm(), clZbh)) {
  1679 + rs.put("status", ResponseCode.ERROR);
  1680 + rs.put("msg", "车辆 " + clZbh + " 不存在!");
  1681 + return rs;
  1682 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
  1683 + rs.put("status", ResponseCode.ERROR);
  1684 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
  1685 + return rs;
  1686 + } else {
  1687 + fLog.log("换车", sch.getClZbh(), clZbh);
  1688 + dayOfSchedule.changeCar(sch, clZbh);
  1689 + }
  1690 + }
  1691 +
  1692 + if(StringUtils.isBlank(jsy) || "/".equals(StringUtils.trim(jsy))){
  1693 + rs.put("status", ResponseCode.ERROR);
  1694 + rs.put("msg", "无效的参数【驾驶员】");
  1695 + return rs;
  1696 + }
  1697 +
  1698 + /**
  1699 + * 换驾驶员
  1700 + */
  1701 + if (StringUtils.isNotEmpty(jsy)) {
  1702 + String jGh = jsy.split("/")[0];
  1703 + String jName = getPersonName(sch.getGsBm(), jGh);
  1704 + if (StringUtils.isEmpty(jName)) {
  1705 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
  1706 + rs.put("status", ResponseCode.ERROR);
  1707 + return rs;
  1708 + } else if (!jGh.equals(sch.getjGh())) {
  1709 + fLog.log("换驾驶员", sch.getjGh() + "/" + sch.getjName(), jsy);
  1710 + persoChange(sch, jGh);
  1711 + }
  1712 + }
  1713 +
  1714 + /**
  1715 + * 换售票员
  1716 + */
  1717 + String spy = map.get("spy");
  1718 + if (StringUtils.isNotEmpty(spy) && !StringUtils.trim(spy).equals("/")) {
  1719 + String sGh = spy.split("/")[0];
  1720 +
  1721 + String sName = getPersonName(sch.getGsBm(), sGh);
  1722 + if (StringUtils.isEmpty(sName)) {
  1723 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
  1724 + rs.put("status", ResponseCode.ERROR);
  1725 + return rs;
  1726 + } else if (!sGh.equals(sch.getsGh())) {
  1727 + fLog.log("换售票员", sch.getsGh() + "/" + sch.getsName(), spy);
  1728 + persoChangeSPY(sch, sGh);
  1729 + }
  1730 + } else if (StringUtils.isNotEmpty(sch.getsGh())) {
  1731 + fLog.log("撤销售票员");
  1732 + sch.setsGh("");
  1733 + sch.setsName("");
  1734 + }
  1735 +
  1736 + LineConfig config = lineConfigData.get(sch.getXlBm());
  1737 + /**
  1738 + * 调整实发
  1739 + */
  1740 + String fcsjActual = map.get("fcsjActual");
  1741 + if (StringUtils.isNotBlank(fcsjActual)
  1742 + && !fcsjActual.equals(sch.getFcsjActual())) {
  1743 +
  1744 + //long t = 0L;
  1745 + //小于线路开始运营时间,则默认跨过24点
  1746 + long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), fcsjActual, config);
  1747 + /* if (fcsjActual.compareTo(config.getStartOpt()) < 0)
  1748 + t = fmtyyyyMMddHHmm.parseMillis(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME) + fcsjActual);
  1749 + else
  1750 + t = fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + fcsjActual);*/
  1751 +
  1752 + fLog.log("调整实发时间", sch.getFcsjActual(), fcsjActual);
  1753 + sch.setFcsjActualAll(t);
  1754 + //取消应发未到标记
  1755 + //if(sch.isLate2()){
  1756 + // sch.setLate2(false);
  1757 + LateAdjustHandle.remove(sch);
  1758 + //}
  1759 + } else if (StringUtils.isNotEmpty(sch.getFcsjActual()) && StringUtils.isEmpty(fcsjActual)) {
  1760 + fLog.log("撤销实发时间", sch.getFcsjActual(), "");
  1761 + //撤销实发
  1762 + revokeRealOutgo(sch.getId());
  1763 + }
  1764 +
  1765 + /**
  1766 + * 调整实达
  1767 + */
  1768 + String zdsjActual = map.get("zdsjActual");
  1769 + if (StringUtils.isNotBlank(zdsjActual)
  1770 + && !zdsjActual.equals(sch.getZdsjActual())) {
  1771 +
  1772 + //调整实达
  1773 + fLog.log("调整实达时间", sch.getZdsjActual(), zdsjActual);
  1774 +
  1775 + long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), zdsjActual, config);
  1776 + sch.setZdsjActualAll(t);
  1777 + //路牌下一班起点到达时间
  1778 + ScheduleRealInfo next = dayOfSchedule.nextByLp2(sch);
  1779 + if (null != next) {
  1780 + next.setQdzArrDatesj(zdsjActual);
  1781 + next.setLate2(false);
  1782 + ts.add(next);
  1783 + }
  1784 +
  1785 + //重新计算车辆执行班次
  1786 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1787 + //取消应发未到标记
  1788 + LateAdjustHandle.remove(sch);
  1789 + } else if (StringUtils.isNotEmpty(sch.getZdsjActual()) && StringUtils.isEmpty(zdsjActual)) {
  1790 + //清除实达时间
  1791 + fLog.log("撤销实达时间", sch.getZdsjActual(), "");
  1792 + sch.clearZdsjActual();
  1793 + //清除路牌下一班起点到达时间
  1794 + ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
  1795 + if (null != next) {
  1796 + next.setQdzArrDatesj(null);
  1797 + ts.add(next);
  1798 + }
  1799 + //重新计算车辆执行班次
  1800 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1801 + }
  1802 +
  1803 + /**
  1804 + * 备注
  1805 + */
  1806 + sch.setRemarks(remarks);
  1807 +
  1808 + /**
  1809 + * 烂班
  1810 + */
  1811 + if (map.get("status") != null
  1812 + && Integer.parseInt(map.get("status").toString()) == -1) {
  1813 + destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
  1814 + fLog.log("烂班");
  1815 + }
  1816 +
  1817 + /**
  1818 + * 修改班次里程
  1819 + */
  1820 + String jhlc = map.get("jhlc");
  1821 + if (StringUtils.isNotEmpty(jhlc)) {
  1822 + double jhlcNum = Double.parseDouble(jhlc);
  1823 + //烂班
  1824 + if (jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout() && !sch.isDestroy()) {
  1825 + destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
  1826 + fLog.log("里程设置为0,自动烂班");
  1827 + } else if (jhlcNum != sch.getJhlc()) {
  1828 + fLog.log("设置里程", sch.getJhlc(), jhlcNum);
  1829 + sch.setJhlc(jhlcNum);
  1830 + //临加班次,实际计划一起改
  1831 + if (sch.isSflj())
  1832 + sch.setJhlcOrig(jhlcNum);
  1833 + }
  1834 + }
  1835 +
  1836 + /**
  1837 + * 修改班次类型
  1838 + */
  1839 + String bcType = map.get("bcType");
  1840 + if (StringUtils.isNotEmpty(bcType) && !bcType.equals(sch.getBcType())) {
  1841 + fLog.log("修改班次类型", sch.getBcType(), bcType);
  1842 + sch.setBcType(bcType);
  1843 + }
  1844 +
  1845 + //重新计算班次状态
  1846 + sch.calcStatus();
  1847 + dayOfSchedule.save(sch);
  1848 + //页面需要更新的班次信息
  1849 + ts.add(sch);
  1850 +
  1851 + rs.put("status", ResponseCode.SUCCESS);
  1852 + rs.put("ts", ts);
  1853 +
  1854 + //日志记录结束
  1855 + fLog.end();
  1856 + } catch (Exception e) {
  1857 + logger.error("", e);
  1858 + rs.put("status", ResponseCode.ERROR);
  1859 + }
  1860 + return rs;
  1861 + }
  1862 +
  1863 + @Override
  1864 + public Map<String, Object> outgoAdjustAll(String params) {
  1865 + Map<String, Object> rs = new HashMap<>();
  1866 + try {
  1867 + JSONArray jsonArray = JSONArray.parseArray(params);
  1868 +
  1869 + ScheduleRealInfo schedule = null;
  1870 + JSONObject jsonObj;
  1871 + String dfsj;
  1872 + long id;
  1873 + for (int i = 0; i < jsonArray.size(); i++) {
  1874 + jsonObj = jsonArray.getJSONObject(i);
  1875 + dfsj = jsonObj.getString("t");
  1876 + id = jsonObj.getLong("id");
  1877 + schedule = dayOfSchedule.get(id);
  1878 +
  1879 + if (schedule != null)
  1880 + outgoAdjust(id, null, dfsj, null, "2", null);
  1881 + }
  1882 +
  1883 + rs.put("status", ResponseCode.SUCCESS);
  1884 + //将更新的最后一个班次返回,页面会做全量刷新
  1885 + rs.put("t", schedule);
  1886 + } catch (Exception e) {
  1887 + logger.error("", e);
  1888 + rs.put("status", ResponseCode.ERROR);
  1889 + }
  1890 + return rs;
  1891 + }
  1892 +
  1893 + @Override
  1894 + public Map<String, Object> findRouteByLine(String lineCode) {
  1895 + Map<String, Object> map = new HashMap<>();
  1896 + //上行
  1897 + Integer lineId = BasicData.lineId2CodeMap.inverse().get(lineCode);
  1898 + map.put("line.id_eq", lineId);
  1899 + map.put("directions_eq", 0);
  1900 + List<Map<String, Object>> upList = sectionRouteService.getSectionRoute(map);
  1901 +
  1902 + //下行
  1903 + map.put("directions_eq", 1);
  1904 + List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map);
  1905 +
  1906 + Map<String, Object> rs = new HashMap<>();
  1907 +
  1908 + String upVectors = "", vec;
  1909 + //拼接上行路段
  1910 + for (Map<String, Object> temp : upList) {
  1911 + vec = temp.get("sectionBsectionVector").toString();
  1912 + upVectors += vec.subSequence(11, vec.length() - 2) + " ";
  1913 + }
  1914 +
  1915 + //拼接下行路段
  1916 + String downVectors = "";
  1917 + for (Map<String, Object> temp : downList) {//LINESTRING(
  1918 + vec = temp.get("sectionBsectionVector").toString();
  1919 + downVectors += vec.subSequence(11, vec.length() - 2) + " ";
  1920 + }
  1921 +
  1922 +
  1923 + rs.put("up", upVectors);
  1924 + //上行gcj
  1925 + rs.put("up_gcj", BdToGcjString(upVectors));
  1926 + rs.put("down", downVectors);
  1927 + //下行gcj
  1928 + rs.put("down_gcj", BdToGcjString(downVectors));
  1929 + rs.put("lineId", lineId);
  1930 +
  1931 + return rs;
  1932 + }
  1933 +
  1934 + /**
  1935 + * @param @param bdStr
  1936 + * @throws
  1937 + * @Title: BdToGcjString
  1938 + * @Description: TODO(将百度路由字符串 转 成GCJ 字符串)
  1939 + */
  1940 + public String BdToGcjString(String bdStr) {
  1941 + String[] array = bdStr.split(","), subArray;
  1942 + if (array.length == 0 || bdStr.length() < 2)
  1943 + return "";
  1944 +
  1945 + String gcjStr = "";
  1946 + TransGPS.Location location;
  1947 + for (String crd : array) {
  1948 + subArray = crd.split(" ");
  1949 + if (subArray.length != 2)
  1950 + continue;
  1951 + location = TransGPS.bd_decrypt(TransGPS.LocationMake(Double.parseDouble(subArray[0]), Double.parseDouble(subArray[1])));
  1952 +
  1953 + gcjStr += location.getLng() + " " + location.getLat() + ",";
  1954 + }
  1955 +
  1956 + return gcjStr.substring(0, gcjStr.length() - 1);
  1957 + }
  1958 +
  1959 + public List<Map<String, String>> findLine(String line) {
  1960 + List<Line> listLine = lineRepository.findLine("%" + line + "%");
  1961 + List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  1962 + Map<String, String> map;
  1963 + for (Line temp : listLine) {
  1964 + if (temp != null) {
  1965 + String xlName = temp.getName();
  1966 + if (xlName.indexOf(line) != -1) {
  1967 + map = new HashMap<String, String>();
  1968 + map.put("id", temp.getLineCode());
  1969 + map.put("text", xlName);
  1970 + list.add(map);
  1971 + }
  1972 + }
  1973 + }
  1974 + return list;
  1975 + }
  1976 +
  1977 + public List<Map<String, String>> findLpName(String lpName) {
  1978 + List<GuideboardInfo> listLpName = guideboardInfoRepository.findLpName("%" + lpName + "%");
  1979 + List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  1980 + Map<String, String> map;
  1981 + for (GuideboardInfo temp : listLpName) {
  1982 + if (temp != null) {
  1983 + String lp = temp.getLpName();
  1984 + if (lp.indexOf(lpName) != -1) {
  1985 + map = new HashMap<String, String>();
  1986 + map.put("id", lp);
  1987 + map.put("text", lp);
  1988 + list.add(map);
  1989 + }
  1990 + }
  1991 + }
  1992 + return list;
  1993 + }
  1994 +
  1995 + @Override
  1996 + public Map<String, Object> findKMBC2(String jName, String clZbh, String date) {
  1997 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill3(jName, clZbh, date, "", "");
  1998 +
  1999 + DecimalFormat format = new DecimalFormat("0.00");
  2000 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  2001 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  2002 + int jhbc = 0, cjbc = 0, ljbc = 0;
  2003 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
  2004 + float addMileage = 0l, remMileage = 0l;
  2005 + String j_Name = "";
  2006 + Map<String, Object> map = new HashMap<String, Object>();
  2007 + for (ScheduleRealInfo scheduleRealInfo : list) {
  2008 + if (scheduleRealInfo != null) {
  2009 + j_Name = scheduleRealInfo.getjName();
  2010 + //计划里程(主任务过滤掉临加班次),
  2011 + //烂班里程(主任务烂班),
  2012 + //临加里程(主任务临加),
  2013 + //计划班次,烂班班次,增加班次
  2014 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  2015 + if (scheduleRealInfo.isSflj()) {
  2016 + addMileage += tempJhlc;
  2017 + ljbc++;
  2018 + } else {
  2019 + jhlc += tempJhlc;
  2020 + jhbc++;
  2021 + if (scheduleRealInfo.getStatus() == -1) {
  2022 + remMileage += tempJhlc;
  2023 + cjbc++;
  2024 + }
  2025 + }
  2026 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  2027 + //计算营运里程,空驶里程
  2028 + if (childTaskPlans.isEmpty()) {
  2029 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  2030 + || scheduleRealInfo.getBcType().equals("venting")) {
  2031 + ksgl += tempJhlc;
  2032 + } else {
  2033 + yygl += tempJhlc;
  2034 + }
  2035 + } else {
  2036 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2037 + while (it.hasNext()) {
  2038 + ChildTaskPlan childTaskPlan = it.next();
  2039 + if (childTaskPlan.getMileageType().equals("empty")) {
  2040 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  2041 + } else {
  2042 + yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  2043 + }
  2044 + }
  2045 + }
  2046 + }
  2047 + }
  2048 + map.put("j_name", j_Name);
  2049 + map.put("jhlc", format.format(jhlc));
  2050 + map.put("remMileage", format.format(remMileage));
  2051 + map.put("addMileage", format.format(addMileage));
  2052 + map.put("yygl", format.format(yygl));
  2053 + map.put("ksgl", format.format(ksgl));
  2054 + map.put("realMileage", format.format(yygl + ksgl));
  2055 + map.put("jhbc", jhbc);
  2056 + map.put("cjbc", cjbc);
  2057 + map.put("ljbc", ljbc);
  2058 + map.put("sjbc", jhbc - cjbc + ljbc);
  2059 + return map;
  2060 + }
  2061 +
  2062 +
  2063 + public Map<String, Object> findKMBC(String jGh, String clZbh,
  2064 + String lpName, String date, String line) {
  2065 + Map<String, Object> map = new HashMap<String, Object>();
  2066 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2067 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2068 + for (int i = 0; i < list.size(); i++) {
  2069 + ScheduleRealInfo s = list.get(i);
  2070 + Set<ChildTaskPlan> cts = s.getcTasks();
  2071 + if (cts != null && cts.size() > 0) {
  2072 + lists.add(s);
  2073 + } else {
  2074 + if (s.getFcsjActual() != null && s.getZdsjActual() != null) {
  2075 + lists.add(s);
  2076 + }
  2077 + }
  2078 + }
  2079 + map.put("jhbc", culateService.culateJhbc(list, ""));//计划班次
  2080 + map.put("jhlc", Arith.add(culateService.culateJhgl(list),
  2081 + culateService.culateJhJccgl(list))); //计划总里程
  2082 + map.put("cjbc", culateService.culateLbbc(list));//烂班班次
  2083 + map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
  2084 + map.put("ljbc", culateService.culateLjbc(lists, ""));//临加班次
  2085 + double ljgl = culateService.culateLjgl(lists);
  2086 + map.put("addMileage", ljgl); //临加公里
  2087 + map.put("sjbc", culateService.culateSjbc(lists, "") + culateService.culateLjbc(lists, ""));
  2088 + double ksgl = culateService.culateKsgl(list);//子任务空驶公里
  2089 + double jccgl = culateService.culateJccgl(lists);//空驶班次公里
  2090 + map.put("ksgl", ksgl);//空驶公里
  2091 + double sjgl = culateService.culateSjgl(lists);//实际营运公里
  2092 + map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));//总公里
  2093 + map.put("zkslc", Arith.add(ksgl, jccgl));
  2094 + map.put("jcclc", jccgl);
  2095 + map.put("yygl", Arith.add(sjgl, ljgl)); //总营运公里
  2096 + return map;
  2097 + }
  2098 +
  2099 + public Map<String, Object> findKMBC_mh_2(String jGh, String clZbh,
  2100 + String lpName, String date, String line) {
  2101 + Map<String, Object> map = new HashMap<String, Object>();
  2102 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2103 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2104 + for (int i = 0; i < list.size(); i++) {
  2105 + ScheduleRealInfo s = list.get(i);
  2106 + if (s.isDestroy() && s.isReissue()) {
  2107 + s.setRemark("");
  2108 + s.setFcsjActual(s.getDfsj());
  2109 + s.setZdsjActual(s.getZdsj());
  2110 + s.setStatus(2);
  2111 + s.setJhlc(s.getJhlcOrig());
  2112 + }
  2113 +
  2114 + Set<ChildTaskPlan> cts = s.getcTasks();
  2115 + if (cts != null && cts.size() > 0) {
  2116 + lists.add(s);
  2117 + } else {
  2118 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2119 + lists.add(s);
  2120 + }
  2121 + }
  2122 + }
  2123 + double ksgl = culateService.culateKsgl(list);
  2124 + double sjgl = culateService.culateSjgl(lists);
  2125 + double jccgl = culateService.culateJccgl(lists);
  2126 + double ljgl = culateService.culateLjgl(lists);
  2127 +
  2128 + map.put("jhlc", Arith.add(culateService.culateJhgl(list), culateService.culateJhJccgl(list))); //计划里程
  2129 + map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
  2130 + map.put("addMileage", ljgl); //临加公里
  2131 + map.put("yygl", Arith.add(sjgl, ljgl)); //实际公里
  2132 + map.put("ksgl", ksgl);//空驶公里
  2133 + map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));
  2134 +// map.put("realMileage", format.format(yygl + ksgl + jcclc+addMileage));
  2135 + map.put("jhbc", culateService.culateJhbc(list, ""));
  2136 + map.put("cjbc", culateService.culateLbbc(list));
  2137 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2138 + map.put("sjbc", culateService.culateJhbc(lists, "") - culateService.culateLbbc(lists) + culateService.culateLjbc(lists, ""));
  2139 + map.put("jcclc", jccgl);
  2140 + map.put("zkslc", Arith.add(ksgl, jccgl));
  2141 +// map.put("zkslc", format.format(ksgl + jcclc+addMileageJc));
  2142 + return map;
  2143 + }
  2144 +
  2145 +
  2146 + @Override
  2147 + public List<Map<String, Object>> accountPx(String line, String date,
  2148 + String code, String xlName, String px) {
  2149 +// List<Object[]> lsitObj = scheduleRealInfoRepository.accountPx(line, date, code,px);
  2150 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2151 + if (!code.trim().equals("")) {
  2152 + code = BasicData.deviceId2NbbmMap.inverse().get(code);
  2153 + }
  2154 + String fgs = "";
  2155 + List<Line> lineList = lineRepository.findLineByCode(line);
  2156 + if (lineList.size() > 0) {
  2157 + Line l = lineList.get(0);
  2158 + fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
  2159 + }
  2160 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  2161 + String sql = "SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,"
  2162 + + " device_id FROM bsth_v_report_80 WHERE "
  2163 + + " FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = '" + date + "' AND"
  2164 + + " line_id = '" + line + "' and device_id like '%" + code + "%'";
  2165 + Map<String, Object> map;
  2166 + List<Object[]> lsitObj = jdbcTemplate.query(sql,
  2167 + new RowMapper<Object[]>() {
  2168 + @Override
  2169 + public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException {
  2170 + Object[] t = new Object[3];
  2171 + t[0] = rs.getString("request_code");
  2172 + t[1] = rs.getString("TIMESTAMP");
  2173 + t[2] = rs.getString("device_id");
  2174 + return t;
  2175 + }
  2176 + });
  2177 + int i = 1;
  2178 + for (Object[] obj : lsitObj) {
  2179 + if (obj != null) {
  2180 + map = new HashMap<String, Object>();
  2181 + map.put("num", i++);
  2182 + map.put("xlName", xlName);
  2183 + if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
  2184 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  2185 + try {
  2186 + carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
  2187 + } catch (Exception e) {
  2188 + // TODO Auto-generated catch block
  2189 + e.printStackTrace();
  2190 + }
  2191 + if (carDeviceList.size() > 0) {
  2192 + map.put("clZbh", carDeviceList.get(0).getClZbh());
  2193 +
  2194 + } else {
  2195 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2196 + }
  2197 + } else {
  2198 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2199 +
  2200 + }
  2201 + map.put("company", fgs);
  2202 + map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
  2203 + map.put("requestTime", obj[1]);
  2204 + listMap.add(map);
  2205 + }
  2206 + }
  2207 + if (listMap.size() > 1) {
  2208 + if (px.equals("asc")) {
  2209 + Collections.sort(listMap, new AccountMap());
  2210 + } else {
  2211 + Collections.sort(listMap, new AccountMap2());
  2212 + }
  2213 + }
  2214 + return listMap;
  2215 + }
  2216 +
  2217 + @Override
  2218 + public List<Map<String, Object>> account(String line, String date,
  2219 + String code, String xlName, String type) {
  2220 + if (!code.trim().equals("")) {
  2221 + code = BasicData.deviceId2NbbmMap.inverse().get(code);
  2222 + }
  2223 + String fgs = "";
  2224 + List<Line> lineList = lineRepository.findLineByCode(line);
  2225 + if (lineList.size() > 0) {
  2226 + Line l = lineList.get(0);
  2227 + fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
  2228 + }
  2229 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2230 + List<Object[]> lsitObj = scheduleRealInfoRepository.account(line, date, code);
  2231 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  2232 + Map<String, Object> map;
  2233 + int i = 1;
  2234 + for (Object[] obj : lsitObj) {
  2235 + if (obj != null) {
  2236 + map = new HashMap<String, Object>();
  2237 + map.put("num", i++);
  2238 + map.put("xlName", xlName);
  2239 + if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
  2240 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  2241 + try {
  2242 + carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
  2243 + } catch (Exception e) {
  2244 + // TODO Auto-generated catch block
  2245 + e.printStackTrace();
  2246 + }
  2247 + if (carDeviceList.size() > 0) {
  2248 + map.put("clZbh", carDeviceList.get(0).getClZbh());
  2249 +
  2250 + } else {
  2251 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2252 + }
  2253 + } else {
  2254 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2255 +
  2256 + }
  2257 + map.put("company", fgs);
  2258 + map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
  2259 + map.put("requestTime", obj[1]);
  2260 + listMap.add(map);
  2261 + }
  2262 + }
  2263 +
  2264 + if (type != null && type.length() != 0 && type.equals("export")) {
  2265 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  2266 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  2267 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  2268 + Map<String, Object> m = new HashMap<String, Object>();
  2269 + ReportUtils ee = new ReportUtils();
  2270 + Map<String, Object> typeMap = new HashMap<String, Object>();
  2271 + typeMap.put("0xA1", "请求恢复运营");
  2272 + typeMap.put("0xA2", "申请调档");
  2273 + typeMap.put("0xA3", "出场请求");
  2274 + typeMap.put("0xA5", "进场请求");
  2275 + typeMap.put("0xA7", "加油请求");
  2276 + typeMap.put("0x50", "车辆故障");
  2277 + typeMap.put("0x70", "路阻报告");
  2278 + typeMap.put("0x60", "事故报告");
  2279 + typeMap.put("0x11", "扣证纠纷");
  2280 + typeMap.put("0x12", "报警");
  2281 + for (Map<String, Object> map1 : listMap) {
  2282 + map1.put("requestText", typeMap.get(map1.get("requestType")));
  2283 + }
  2284 + try {
  2285 + listI.add(listMap.iterator());
  2286 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  2287 + ee.excelReplace(listI, new Object[]{m}, path + "mould/account.xls",
  2288 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  2289 + + "-" + xlName + "-驾驶员请求台账.xls");
  2290 + } catch (Exception e) {
  2291 + // TODO: handle exception
  2292 + e.printStackTrace();
  2293 + }
  2294 + }
  2295 +
  2296 + return listMap;
  2297 + }
  2298 +
  2299 + @Override
  2300 + public List<SchEditInfoDto> correctForm(String line, String date, String endDate,
  2301 + String lpName, String code, String type, String changType) {
  2302 +
  2303 +// var types = {'DFTZ': '待发调整', 'FCXXWT':'发车信息微调', 'JHLB': '计划烂班', 'CXLB': '撤销烂班',
  2304 +// 'CXZX': '撤销执行', 'CXSF': '撤销实发', 'SFTZ': '实发调整', 'TZRC': '调整人车'};
  2305 + Map<String, Object> map = new HashMap<String, Object>();
  2306 + map.put("DFTZ", "待发调整");
  2307 + map.put("FCXXWT", "发车信息微调");
  2308 + map.put("JHLB", "计划烂班");
  2309 + map.put("CXLB", "撤销烂班");
  2310 + map.put("CXZX", "撤销执行");
  2311 + map.put("CXSF", "撤销实发");
  2312 + map.put("SFTZ", "实发调整");
  2313 + map.put("TZRC", "调整人车");
  2314 +
  2315 + SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm");
  2316 + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2317 + String cont = "";
  2318 + cont = " and xl_bm ='" + line + "'";
  2319 + if (!lpName.equals("")) {
  2320 + cont += " and lp_name = '" + lpName + "'";
  2321 + }
  2322 + if (!code.equals("")) {
  2323 + cont += " and cl_zbh ='" + code + "'";
  2324 + }
  2325 + String sql = "select t1.*, t2.real_exec_date,"
  2326 + + "t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,"
  2327 + + "t2.xl_dir,t2.real_exec_date from (select * from "
  2328 + + "logger_sch_modify where rq BETWEEN ? and ? and line_code=? )"
  2329 + + " t1 INNER JOIN bsth_c_s_sp_info_real t2 on "
  2330 + + "t1.sch_id=t2.id where 1=1 " + cont;
  2331 +
  2332 + List<SchEditInfoDto> list = jdbcTemplate.query(sql,
  2333 + new BeanPropertyRowMapper(SchEditInfoDto.class), date, endDate, line);
  2334 + List<SchEditInfoDto> lists = new ArrayList<SchEditInfoDto>();
  2335 + for (int i = 0; i < list.size(); i++) {
  2336 + Long fcsjs = 0l;
  2337 + Long updsj = 0l;
  2338 + SchEditInfoDto t = list.get(i);
  2339 + if (map.get(t.getType()) != null) {
  2340 +
  2341 + if (changType.equals("")) {
  2342 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2343 + } else {
  2344 + String fcsj = "";
  2345 + String updtime = "";
  2346 + try {
  2347 + fcsj = sdf1.format(sdf1.parse(t.getFcsj()));
  2348 + updtime = sdf1.format(sdf1.parse(t.getTimeStr()));
  2349 + fcsjs = sdf2.parse(t.getRealExecDate() + " " + fcsj).getTime();
  2350 + updsj = sdf2.parse(t.getRq() + " " + updtime).getTime();
  2351 + } catch (ParseException e) {
  2352 + // TODO Auto-generated catch block
  2353 + e.printStackTrace();
  2354 + }
  2355 + if (changType.equals("1")) {
  2356 + if (fcsjs > updsj) {
  2357 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2358 + } else {
  2359 + t.setType2("");
  2360 + }
  2361 + } else if (changType.equals("2")) {
  2362 + if (fcsjs < updsj) {
  2363 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2364 + } else {
  2365 + t.setType2("");
  2366 + }
  2367 + }
  2368 + }
  2369 + } else {
  2370 + t.setType2("");
  2371 + }
  2372 + boolean fage = true;
  2373 + for (int j = 0; j < lists.size(); j++) {
  2374 + SchEditInfoDto s = lists.get(j);
  2375 + if (s.getSchId() == t.getSchId()) {
  2376 + s.setType2(s.getType2() + " " + t.getType2());
  2377 + fage = false;
  2378 + }
  2379 + }
  2380 +
  2381 + if (fage) {
  2382 + if (changType.equals("")) {
  2383 + lists.add(t);
  2384 + } else {
  2385 + if (changType.equals("1")) {
  2386 + if (fcsjs > updsj) {
  2387 + lists.add(t);
  2388 + }
  2389 + } else if (changType.equals("2")) {
  2390 + if (fcsjs < updsj) {
  2391 + lists.add(t);
  2392 + }
  2393 + }
  2394 + }
  2395 + }
  2396 + }
  2397 +
  2398 + if (type != null && type.length() != 0 && type.equals("export")) {
  2399 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  2400 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  2401 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  2402 + Map<String, Object> m = new HashMap<String, Object>();
  2403 + m.put("dates", date);
  2404 + ReportUtils ee = new ReportUtils();
  2405 + List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
  2406 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2407 + for (SchEditInfoDto d : lists) {
  2408 + Map<String, Object> tempMap = new HashMap<String, Object>();
  2409 + tempMap.put("lpName", d.getLpName());
  2410 + tempMap.put("rq", d.getRq());
  2411 + tempMap.put("clZbh", d.getClZbh());
  2412 + tempMap.put("jName", d.getjName() + "/" + d.getjGh());
  2413 + tempMap.put("fcsj", d.getFcsj());
  2414 + tempMap.put("type", d.getType2());
  2415 + tempList.add(tempMap);
  2416 + }
  2417 + try {
  2418 + String dateTime = sdfSimple.format(sdfMonth.parse(date));
  2419 + if(!endDate.equals(date)){
  2420 + dateTime += "-" + sdfSimple.format(sdfMonth.parse(endDate));
  2421 + }
  2422 + String lineName = BasicData.lineCode2NameMap.get(line);
  2423 + listI.add(tempList.iterator());
  2424 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  2425 + ee.excelReplace(listI, new Object[]{m}, path + "mould/correctForm.xls",
  2426 + path + "export/" + dateTime + "-" + lineName + "-修正报表.xls");
  2427 + } catch (Exception e) {
  2428 + // TODO: handle exception
  2429 + e.printStackTrace();
  2430 + }
  2431 +// Map<String, Object> maps = tempList.get(tempList.size() - 1);
  2432 + }
  2433 + return lists;
  2434 + }
  2435 +
  2436 + @Override
  2437 + public List<ScheduleRealInfo> queryListWaybill(String jGh, String clZbh,
  2438 + String lpName, String date, String line) {
  2439 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  2440 + List<ScheduleRealInfo> list = null;
  2441 + list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2442 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2443 + String minfcsj = "02:00";
  2444 + List<Line> lineList = lineRepository.findLineByCode(line);
  2445 + if (lineList.size() > 0) {
  2446 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  2447 + + " id = ("
  2448 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  2449 + + ")";
  2450 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2451 + }
  2452 + String[] minSjs = minfcsj.split(":");
  2453 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  2454 +
  2455 + for (int i = 0; i < list.size(); i++) {
  2456 + ScheduleRealInfo s = list.get(i);
  2457 + if (s.getBcType().equals("out")) {
  2458 + s.setRemark("1");
  2459 + } else if (s.getBcType().equals("in")) {
  2460 + s.setRemark("3");
  2461 + } else {
  2462 + s.setRemark("2");
  2463 + }
  2464 + String[] fcsj = s.getFcsj().split(":");
  2465 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  2466 +
  2467 + Long fscjT = 0L;
  2468 + if (fcsjL < minSj) {
  2469 + Calendar calendar = new GregorianCalendar();
  2470 + calendar.setTime(s.getScheduleDate());
  2471 + calendar.add(calendar.DATE, 1);
  2472 + s.setScheduleDate(calendar.getTime());
  2473 + try {
  2474 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  2475 + } catch (ParseException e) {
  2476 + // TODO Auto-generated catch block
  2477 + e.printStackTrace();
  2478 + }
  2479 +
  2480 + } else {
  2481 + try {
  2482 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  2483 + } catch (ParseException e) {
  2484 + // TODO Auto-generated catch block
  2485 + e.printStackTrace();
  2486 + }
  2487 + ;
  2488 + }
  2489 + s.setFcsjT(fscjT);
  2490 + }
  2491 + Collections.sort(list, new compareFcsjType());
  2492 + for (int i = 0; i < list.size(); i++) {
  2493 + ScheduleRealInfo s = list.get(i);
  2494 + s.setAdjustExps(i + 1 + "");
  2495 + String remarks = "";
  2496 + if (s.getRemarks() != null) {
  2497 + remarks += s.getRemarks();
  2498 + }
  2499 +
  2500 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  2501 + if (!childTaskPlans.isEmpty()) {
  2502 + s.setFcsjActual("");
  2503 + s.setZdsjActual("");
  2504 + s.setJhlc(0.0);
  2505 + }
  2506 +
  2507 + if (s.isDestroy()) {
  2508 + s.setFcsjActual("");
  2509 + s.setZdsjActual("");
  2510 + s.setJhlc(0.0);
  2511 + remarks += "(烂班)";
  2512 + s.setRemarks(remarks);
  2513 + }
  2514 +
  2515 + listSchedule.add(s);
  2516 + //计算营运里程,空驶里程
  2517 + if (!childTaskPlans.isEmpty()) {
  2518 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2519 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  2520 + Collections.sort(listit, new ComparableChild());
  2521 + for (int j = 0; j < listit.size(); j++) {
  2522 + ScheduleRealInfo t = new ScheduleRealInfo();
  2523 + ChildTaskPlan childTaskPlan = listit.get(j);
  2524 + if (childTaskPlan.getCcId() == null) {
  2525 + if (childTaskPlan.isDestroy()) {
  2526 + t.setFcsjActual("");
  2527 + t.setZdsjActual("");
  2528 + t.setJhlc(0.0);
  2529 + } else {
  2530 + t.setFcsjActual(childTaskPlan.getStartDate());
  2531 + t.setZdsjActual(childTaskPlan.getEndDate());
  2532 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  2533 + }
  2534 + t.setFcsj(childTaskPlan.getStartDate());
  2535 + t.setZdsj(childTaskPlan.getEndDate());
  2536 + t.setQdzName(childTaskPlan.getStartStationName());
  2537 + t.setZdzName(childTaskPlan.getEndStationName());
  2538 + t.setRemarks(childTaskPlan.getRemarks());
  2539 + t.setAdjustExps("子");
  2540 + listSchedule.add(t);
  2541 + }
  2542 + }
  2543 + }
  2544 + }
  2545 +
  2546 + return listSchedule;
  2547 + }
  2548 +
  2549 + @Override
  2550 + public List<ScheduleRealInfo> queryListWaybill2(String jName, String clZbh,
  2551 + String lpName, String date, String line) {
  2552 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  2553 + List<ScheduleRealInfo> list = null;
  2554 + list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
  2555 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2556 + String minfcsj = "02:00";
  2557 + List<Line> lineList = lineRepository.findLineByCode(line);
  2558 + if (lineList.size() > 0) {
  2559 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  2560 + + " id = ("
  2561 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  2562 + + ")";
  2563 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2564 + }
  2565 + String[] minSjs = minfcsj.split(":");
  2566 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  2567 +
  2568 + for (int i = 0; i < list.size(); i++) {
  2569 + ScheduleRealInfo s = list.get(i);
  2570 + String[] fcsj = s.getFcsj().split(":");
  2571 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  2572 +
  2573 + Long fscjT = 0L;
  2574 + if (fcsjL < minSj) {
  2575 + Calendar calendar = new GregorianCalendar();
  2576 + calendar.setTime(s.getScheduleDate());
  2577 + calendar.add(calendar.DATE, 1);
  2578 + s.setScheduleDate(calendar.getTime());
  2579 + try {
  2580 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  2581 + } catch (ParseException e) {
  2582 + // TODO Auto-generated catch block
  2583 + e.printStackTrace();
  2584 + }
  2585 +
  2586 + } else {
  2587 + try {
  2588 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  2589 + } catch (ParseException e) {
  2590 + // TODO Auto-generated catch block
  2591 + e.printStackTrace();
  2592 + }
  2593 + ;
  2594 + }
  2595 + s.setFcsjT(fscjT);
  2596 + }
  2597 + Collections.sort(list, new ComparableReal());
  2598 + for (int i = 0; i < list.size(); i++) {
  2599 + ScheduleRealInfo s = list.get(i);
  2600 + s.setAdjustExps(i + 1 + "");
  2601 + String remarks = "";
  2602 + if (s.getRemarks() != null) {
  2603 + remarks += s.getRemarks();
  2604 + }
  2605 +
  2606 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  2607 + if (!childTaskPlans.isEmpty()) {
  2608 + s.setFcsjActual("");
  2609 + s.setZdsjActual("");
  2610 + s.setJhlc(0.0);
  2611 + }
  2612 +
  2613 + if (s.isDestroy()) {
  2614 + if (s.isReissue()) {
  2615 + s.setFcsjActual(s.getDfsj());
  2616 + s.setZdsjActual(s.getZdsj());
  2617 + s.setRemarks("");
  2618 + s.setStatus(2);
  2619 + s.setJhlc(s.getJhlcOrig());
  2620 + } else {
  2621 + s.setFcsjActual("");
  2622 + s.setZdsjActual("");
  2623 + s.setJhlc(0.0);
  2624 + remarks += "(烂班)";
  2625 + s.setRemarks(remarks);
  2626 + }
  2627 + }
  2628 +
  2629 + listSchedule.add(s);
  2630 + //计算营运里程,空驶里程
  2631 + if (!childTaskPlans.isEmpty()) {
  2632 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2633 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  2634 + Collections.sort(listit, new ComparableChild());
  2635 + for (int j = 0; j < listit.size(); j++) {
  2636 + ScheduleRealInfo t = new ScheduleRealInfo();
  2637 + ChildTaskPlan childTaskPlan = listit.get(j);
  2638 + if (childTaskPlan.isDestroy()) {
  2639 + t.setFcsjActual("");
  2640 + t.setZdsjActual("");
  2641 + t.setJhlc(0.0);
  2642 + } else {
  2643 + t.setFcsjActual(childTaskPlan.getStartDate());
  2644 + t.setZdsjActual(childTaskPlan.getEndDate());
  2645 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  2646 + }
  2647 + t.setQdzName(childTaskPlan.getStartStationName());
  2648 + t.setZdzName(childTaskPlan.getEndStationName());
  2649 + t.setRemarks(childTaskPlan.getRemarks());
  2650 + t.setAdjustExps("子");
  2651 + listSchedule.add(t);
  2652 + }
  2653 + }
  2654 + }
  2655 +
  2656 + return listSchedule;
  2657 + }
  2658 +
  2659 + @Override
  2660 + public Map<String, Object> removeChildTask(Long taskId) {
  2661 + Map<String, Object> rs = new HashMap<>();
  2662 + ChildTaskPlan chTask = cTaskPlanRepository.findById(taskId).get();
  2663 +
  2664 + ScheduleRealInfo sch = dayOfSchedule.get(chTask.getSchedule().getId());
  2665 + try {
  2666 +
  2667 + sch.getcTasks().remove(chTask);
  2668 + scheduleRealInfoRepository.save(sch);
  2669 + rs.put("status", ResponseCode.SUCCESS);
  2670 + } catch (Exception e) {
  2671 + logger.error("", e);
  2672 + rs.put("status", ResponseCode.ERROR);
  2673 + }
  2674 + return rs;
  2675 + }
  2676 +
  2677 + @Override
  2678 + public List<Map<String, Object>> statisticsDaily(String line, String date,
  2679 + String xlName, String type) {
  2680 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  2681 + List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  2682 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2683 + for (int i = 0; i < list_s.size(); i++) {
  2684 + ScheduleRealInfo s = list_s.get(i);
  2685 + Set<ChildTaskPlan> cts = s.getcTasks();
  2686 + if (cts != null && cts.size() > 0) {
  2687 + lists.add(s);
  2688 + } else {
  2689 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2690 + lists.add(s);
  2691 + }
  2692 + }
  2693 + }
  2694 + Map<String, Object> map = new HashMap<String, Object>();
  2695 + map.put("xlName", xlName);
  2696 + double jhlc = culateService.culateJhgl(list_s);
  2697 + map.put("jhlc", jhlc);
  2698 + map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
  2699 + double lbgl = culateService.culateLbgl(list_s);
  2700 + map.put("ssgl", lbgl);
  2701 + map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
  2702 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2703 + map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
  2704 + map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
  2705 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2706 + map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
  2707 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
  2708 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
  2709 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
  2710 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
  2711 + double ssgl_pc = culateService.culateCJLC(list_s, "配车");
  2712 + double ssgl_by = culateService.culateCJLC(list_s, "保养");
  2713 + double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
  2714 + double ssgl_qt = culateService.culateCJLC(list_s, "其他");
  2715 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2716 + map.put("ssbc", culateService.culateLbbc(list_s));
  2717 + double ljgl = culateService.culateLjgl(lists);
  2718 + map.put("ljgl", ljgl);
  2719 + map.put("jhbc", culateService.culateJhbc(list_s, ""));
  2720 + map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
  2721 + map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
  2722 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2723 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2724 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2725 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2726 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2727 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2728 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2729 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2730 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2731 + map.put("dtbc", 0);
  2732 + map.put("dtbc_m", 0);
  2733 + map.put("dtbc_a", 0);
  2734 + List<CalcInterval> intervalList=calcIntervalRepository.selectByDateAndLine(line, date,"");
  2735 + if(intervalList.size()>0){
  2736 + CalcInterval c=intervalList.get(0);
  2737 + map.put("djg",c.getDjgAll());
  2738 + map.put("djg_m", c.getDjgZgf());
  2739 + map.put("djg_a", c.getDjgWgf());
  2740 + map.put("djg_time", c.getDjgTime());
  2741 + }else{
  2742 + Map<String, Object> m = culateService.culateDjg(list_s, line);
  2743 + map.put("djg", m.get("djgcsq"));
  2744 + map.put("djg_m", m.get("djgcsz"));
  2745 + map.put("djg_a", m.get("djgcsw"));
  2746 + map.put("djg_time", m.get("djgsj"));
  2747 + }
  2748 +
  2749 + map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
  2750 + lMap.add(map);
  2751 +
  2752 + if (date.length() == 10) {
  2753 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
  2754 + String dbdp = "";
  2755 + try {
  2756 + for (int i = 0; i < list.size(); i++) {
  2757 + DutyEmployee t = list.get(i);
  2758 + if (dbdp.indexOf(t.getuName()) == -1) {
  2759 + if (!(dbdp.length() > 0)) {
  2760 + dbdp = t.getuName();
  2761 + } else {
  2762 + dbdp += "," + t.getuName();
  2763 + }
  2764 + }
  2765 + }
  2766 + } catch (Exception e) {
  2767 + // TODO: handle exception
  2768 + e.printStackTrace();
  2769 + }
  2770 + map.put("dbdp", dbdp);
  2771 + }
  2772 +
  2773 + return lMap;
  2774 + }
  2775 +
  2776 + @Override
  2777 + public List<Map<String, Object>> statisticsDaily_mh_2(String line, String date,
  2778 + String xlName, String type) {
  2779 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  2780 + List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  2781 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2782 + for (int i = 0; i < list_s.size(); i++) {
  2783 + ScheduleRealInfo s = list_s.get(i);
  2784 + if (s.isDestroy() && s.isReissue()) {
  2785 + s.setRemark("");
  2786 + s.setFcsjActual(s.getDfsj());
  2787 + s.setZdsjActual(s.getZdsj());
  2788 + s.setStatus(2);
  2789 + s.setJhlc(s.getJhlcOrig());
  2790 + }
  2791 +
  2792 + Set<ChildTaskPlan> cts = s.getcTasks();
  2793 + if (cts != null && cts.size() > 0) {
  2794 + lists.add(s);
  2795 + } else {
  2796 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2797 + lists.add(s);
  2798 + }
  2799 + }
  2800 + }
  2801 + Map<String, Object> map = new HashMap<String, Object>();
  2802 + map.put("xlName", xlName);
  2803 + double jhlc = culateService.culateJhgl(list_s);
  2804 + map.put("jhlc", jhlc);
  2805 + map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
  2806 + double lbgl = culateService.culateLbgl(list_s);
  2807 + map.put("ssgl", lbgl);
  2808 + map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
  2809 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2810 + map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
  2811 + map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
  2812 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2813 + map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
  2814 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
  2815 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
  2816 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
  2817 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
  2818 + double ssgl_pc = culateService.culateCJLC(list_s, "配车");
  2819 + double ssgl_by = culateService.culateCJLC(list_s, "保养");
  2820 + double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
  2821 + double ssgl_qt = culateService.culateCJLC(list_s, "其他");
  2822 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2823 + map.put("ssbc", culateService.culateLbbc(list_s));
  2824 + double ljgl = culateService.culateLjgl(lists);
  2825 + map.put("ljgl", ljgl);
  2826 + map.put("jhbc", culateService.culateJhbc(list_s, ""));
  2827 + map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
  2828 + map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
  2829 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2830 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2831 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2832 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2833 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2834 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2835 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2836 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2837 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2838 + map.put("dtbc", 0);
  2839 + map.put("dtbc_m", 0);
  2840 + map.put("dtbc_a", 0);
  2841 + map.put("djg", 0);
  2842 + map.put("djg_m", 0);
  2843 + map.put("djg_a", 0);
  2844 + map.put("djg_time", 0);
  2845 + map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
  2846 + lMap.add(map);
  2847 + return lMap;
  2848 + }
  2849 +
  2850 + public final Map<String, Object> staticTj(List<ScheduleRealInfo> list,Map<String, Object> m) {
  2851 +
  2852 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2853 + for (int i = 0; i < list.size(); i++) {
  2854 + ScheduleRealInfo s = list.get(i);
  2855 + Set<ChildTaskPlan> cts = s.getcTasks();
  2856 + if (cts != null && cts.size() > 0) {
  2857 + lists.add(s);
  2858 + } else {
  2859 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2860 + lists.add(s);
  2861 + }
  2862 + }
  2863 + }
  2864 + Map<String, Object> map = new HashMap<String, Object>();
  2865 + if (list.size() > 0) {
  2866 + map.put("fgsBm", list.get(0).getFgsBm());
  2867 + map.put("xlBm", list.get(0).getXlBm());
  2868 + map.put("xlName", list.get(0).getXlName());
  2869 + map.put("fgsName", list.get(0).getFgsName());
  2870 + try {
  2871 + map.put("xlNamePy", PinyinHelper.convertToPinyinString(list.get(0).getFgsBm()+list.get(0).getXlName(), "", PinyinFormat.WITHOUT_TONE));
  2872 + } catch (PinyinException e) {
  2873 + // TODO Auto-generated catch block
  2874 + e.printStackTrace();
  2875 + }
  2876 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  2877 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  2878 + map.put("jhlc", jhyygl);
  2879 + map.put("jcclc", jhjcclc);
  2880 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  2881 + double ljks=culateService.culateLjksgl(lists);
  2882 + map.put("ljks", ljks);
  2883 + double ljgl = culateService.culateLjgl(lists);
  2884 + double sjyygl = culateService.culateSjgl(lists);
  2885 + double zyygl = Arith.add(sjyygl, ljgl);
  2886 +
  2887 + double sjjccgl = culateService.culateJccgl(lists);
  2888 + double sjksgl = culateService.culateKsgl(lists);
  2889 + double zksgl = Arith.add(sjjccgl, sjksgl);
  2890 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  2891 + map.put("sjgl", zyygl);
  2892 + map.put("sjksgl", zksgl);
  2893 + double ssgl = culateService.culateLbgl(list);
  2894 + map.put("ssgl", ssgl);
  2895 +
  2896 + //计划+临加-少驶=实驶
  2897 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  2898 + if (jl == zyygl) {
  2899 + map.put("zt", 0);
  2900 + } else {
  2901 + map.put("zt", 1);
  2902 + }
  2903 +
  2904 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  2905 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  2906 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  2907 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  2908 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  2909 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  2910 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  2911 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  2912 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  2913 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  2914 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  2915 + double ssgl_by = culateService.culateCJLC(list, "保养");
  2916 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  2917 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  2918 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2919 + map.put("ssbc", culateService.culateLbbc(list));
  2920 + map.put("ljgl", ljgl);
  2921 + map.put("jhbc", culateService.culateJhbc(list, ""));
  2922 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  2923 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  2924 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2925 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2926 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2927 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2928 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2929 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2930 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2931 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2932 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2933 + map.put("dtbc", 0);
  2934 + map.put("dtbc_m", 0);
  2935 + map.put("dtbc_a", 0);
  2936 + if(m.get("xl")==null){
  2937 + Map<String, Object> m_ = culateService.culateDjg(lists, list.get(0).getXlBm());
  2938 + map.put("djg", m_.get("djgcsq"));
  2939 + map.put("djg_m", m_.get("djgcsz"));
  2940 + map.put("djg_a", m_.get("djgcsw"));
  2941 + map.put("djg_time", m_.get("djgsj"));
  2942 + }else{
  2943 + map.put("djg", m.get("djgAll")==null?"0":m.get("djgAll"));
  2944 + map.put("djg_m", m.get("djgZgf")==null?"0":m.get("djgZgf"));
  2945 + map.put("djg_a", m.get("djgWgf")==null?"0":m.get("djgWgf"));
  2946 + map.put("djg_time", m.get("djgTime")==null?"0":m.get("djgTime"));
  2947 + }
  2948 + }
  2949 + return map;
  2950 + }
  2951 +
  2952 + @Override
  2953 + public List<Map<String, Object>> statisticsDailyTj(String gsdm, String fgsdm, String line, String date, String date2,
  2954 + String xlName, String type,String nature) {
  2955 + List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
  2956 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
  2957 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2958 + List<Object[]> listInterval=new ArrayList<Object[]>();
  2959 + line = line.trim();
  2960 + if (line.equals("")) {
  2961 + //查询所有线路
  2962 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  2963 + listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
  2964 + } else {
  2965 + //查询单条线路
  2966 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
  2967 + listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
  2968 + }
  2969 + Map<String, Map<String,Object>> mapInterval=new HashMap<String, Map<String,Object>>();
  2970 + for (int i = 0; i < listInterval.size(); i++) {
  2971 + Object[] interval=listInterval.get(i);
  2972 + String gs=interval[0].toString();
  2973 + String fgs=interval[1].toString();
  2974 + String xl=interval[2].toString();
  2975 + Map<String, Object> m=new HashMap<String,Object>();
  2976 + m.put("gs", gs);
  2977 + m.put("fgs", fgs);
  2978 + m.put("xl", xl);
  2979 + m.put("djgAll", interval[3]);
  2980 + m.put("djgZgf", interval[6]);
  2981 + m.put("djgWgf", interval[7]);
  2982 + m.put("djgTime", interval[8]);
  2983 + mapInterval.put(gs+"-"+fgs+"-"+xl, m);
  2984 + }
  2985 + Map<String, Boolean> lineMap=lineService.lineNature();
  2986 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  2987 + for (int i = 0; i < listAll.size(); i++) {
  2988 + ScheduleRealInfo s=listAll.get(i);
  2989 + if (nature.equals("0")) {
  2990 + list.add(s);
  2991 + }else if(nature.equals("1")){
  2992 + if(lineMap.get(s.getXlBm())){
  2993 + list.add(s);
  2994 + }
  2995 + }else{
  2996 + if(!lineMap.get(s.getXlBm())){
  2997 + list.add(s);
  2998 + }
  2999 + }
  3000 + }
  3001 + for (int i = 0; i < list.size(); i++) {
  3002 + ScheduleRealInfo s = list.get(i);
  3003 + Set<ChildTaskPlan> cts = s.getcTasks();
  3004 + if (cts != null && cts.size() > 0) {
  3005 + list_s.add(s);
  3006 + } else {
  3007 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  3008 + list_s.add(s);
  3009 + }
  3010 + }
  3011 + }
  3012 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  3013 + for (int i = 0; i < list.size(); i++) {
  3014 + if (i < list.size() - 1) {
  3015 + if ((list.get(i+1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
  3016 + lists.add(list.get(i));
  3017 + } else {
  3018 + lists.add(list.get(i));
  3019 + Map<String, Object> mm=new HashMap<String,Object>();
  3020 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3021 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3022 + }
  3023 + Map<String, Object> map = staticTj(lists,mm);
  3024 + lMap.add(map);
  3025 + lists = new ArrayList<ScheduleRealInfo>();
  3026 + }
  3027 + } else {
  3028 + if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
  3029 + lists.add(list.get(i));
  3030 + Map<String, Object> mm=new HashMap<String,Object>();
  3031 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3032 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3033 + }
  3034 + Map<String, Object> map = staticTj(lists,mm);
  3035 + lMap.add(map);
  3036 + } else {
  3037 + lists = new ArrayList<ScheduleRealInfo>();
  3038 + lists.add(list.get(i));
  3039 + Map<String, Object> mm=new HashMap<String,Object>();
  3040 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3041 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3042 + }
  3043 + Map<String, Object> map = staticTj(lists,mm);
  3044 + lMap.add(map);
  3045 + }
  3046 + }
  3047 + }
  3048 + /*if(!line.equals("")){
  3049 + List<Line> l=lineRepository.findLineByCode(line);
  3050 + if(l.size()>0)
  3051 + lMap.get(0).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
  3052 + }*/
  3053 + Collections.sort(lMap, new AccountXlbm());
  3054 + Map<String, Object> map = new HashMap<String, Object>();
  3055 + map.put("xlName", "合计");
  3056 + map.put("fgsName", "");
  3057 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  3058 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  3059 + map.put("jhlc", jhyygl);
  3060 + map.put("jcclc", jhjcclc);
  3061 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  3062 +
  3063 + double ljgl = culateService.culateLjgl(list_s);
  3064 + double sjyygl = culateService.culateSjgl(list_s);
  3065 + double zyygl = Arith.add(sjyygl, ljgl);
  3066 + double ljks=culateService.culateLjksgl(list_s);
  3067 + map.put("ljks", ljks);
  3068 + double sjjccgl = culateService.culateJccgl(list_s);
  3069 + double sjksgl = culateService.culateKsgl(list_s);
  3070 + double zksgl = Arith.add(sjjccgl, sjksgl);
  3071 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  3072 + map.put("sjgl", zyygl);
  3073 + map.put("sjksgl", zksgl);
  3074 +
  3075 + double ssgl = culateService.culateLbgl(list);
  3076 + map.put("ssgl", ssgl);
  3077 + //计划+临加-少驶=实驶
  3078 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  3079 + if (jl == zyygl) {
  3080 + map.put("zt", 0);
  3081 + } else {
  3082 + map.put("zt", 1);
  3083 + }
  3084 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  3085 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  3086 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  3087 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  3088 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  3089 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  3090 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  3091 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  3092 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  3093 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  3094 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  3095 + double ssgl_by = culateService.culateCJLC(list, "保养");
  3096 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  3097 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  3098 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  3099 +
  3100 + map.put("ssbc", culateService.culateLbbc(list));
  3101 + map.put("ljgl", ljgl);
  3102 + map.put("jhbc", culateService.culateJhbc(list, ""));
  3103 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  3104 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  3105 + map.put("sjbc", culateService.culateSjbc(list_s, ""));
  3106 + map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
  3107 + map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
  3108 + map.put("ljbc", culateService.culateLjbc(list_s, ""));
  3109 + map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
  3110 + map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
  3111 + map.put("fzbc", culateService.culateFzbc(list_s, ""));
  3112 + map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
  3113 + map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
  3114 + map.put("dtbc", 0);
  3115 + map.put("dtbc_m", 0);
  3116 + map.put("dtbc_a", 0);
  3117 + if (list.size() > 0) {
  3118 + int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
  3119 + for (Map<String, Object> m : lMap) {
  3120 + if (m.containsKey("djg") && m.get("djg") != null)
  3121 + djg += Integer.valueOf(m.get("djg").toString());
  3122 + if (m.containsKey("djg_m") && m.get("djg_m") != null)
  3123 + djg_m += Integer.valueOf(m.get("djg_m").toString());
  3124 + if (m.containsKey("djg_a") && m.get("djg_a") != null)
  3125 + djg_a += Integer.valueOf(m.get("djg_a").toString());
  3126 + if (m.containsKey("djg_time") && m.get("djg_time") != null) {
  3127 + int t = Integer.valueOf(m.get("djg_time").toString());
  3128 + if (t > djg_time)
  3129 + djg_time = t;
  3130 + }
  3131 + }
  3132 + map.put("djg", djg);
  3133 + map.put("djg_m", djg_m);
  3134 + map.put("djg_a", djg_a);
  3135 + map.put("djg_time", djg_time);
  3136 +// Map<String, Object> m_=culateService.culateDjg(list_s, list.get(0).getXlBm());
  3137 +// map.put("djg", m_.get("djgcsq"));
  3138 +// map.put("djg_m", m_.get("djgcsz"));
  3139 +// map.put("djg_a", m_.get("djgcsw"));
  3140 +// map.put("djg_time", m_.get("djgsj"));
  3141 + } else {
  3142 + map.put("djg", "0");
  3143 + map.put("djg_m", "0");
  3144 + map.put("djg_a", "0");
  3145 + map.put("djg_time", "0");
  3146 + }
  3147 + lMap.add(map);
  3148 + if (type != null && type.length() != 0 && type.equals("export")) {
  3149 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  3150 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  3151 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  3152 + Map<String, Object> m = new HashMap<String, Object>();
  3153 + m.put("date", date + "至" + date2);
  3154 + ReportUtils ee = new ReportUtils();
  3155 + try {
  3156 + String dateTime = "";
  3157 + if (date.equals(date2)) {
  3158 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  3159 + } else {
  3160 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  3161 + + "-" + sdfSimple.format(sdfMonth.parse(date2));
  3162 + }
  3163 + listI.add(lMap.iterator());
  3164 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  3165 + ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",
  3166 + path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
  3167 + } catch (Exception e) {
  3168 + // TODO: handle exception
  3169 + //e.printStackTrace();
  3170 + logger.info("", e);
  3171 + }
  3172 + }
  3173 +
  3174 + return lMap;
  3175 + }
  3176 +
  3177 + @Override
  3178 + public List<Map<String, Object>> statisticsDailyTjHb(String gsdm, String fgsdm, String line, String date, String date2,
  3179 + String xlName, String type,String nature) {
  3180 + List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
  3181 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
  3182 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  3183 + List<Object[]> listInterval=new ArrayList<Object[]>();
  3184 +
  3185 + line = line.trim();
  3186 + if (line.equals("")) {
  3187 + //查询所有线路
  3188 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  3189 + listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
  3190 + } else {
  3191 + //查询单条线路
  3192 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
  3193 + listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
  3194 + }
  3195 + Map<String, Map<String,Object>> mapInterval=new HashMap<>();
  3196 + for (int i = 0; i < listInterval.size(); i++) {
  3197 + Object[] interval=listInterval.get(i);
  3198 + String gs=interval[0].toString();
  3199 + String fgs=interval[1].toString();
  3200 + String xl=interval[2].toString();
  3201 + Map<String, Object> m=new HashMap<String,Object>();
  3202 + m.put("gs", gs);
  3203 + m.put("fgs", fgs);
  3204 + m.put("xl", xl);
  3205 + m.put("djgAll", interval[3]);
  3206 + m.put("djgZgf", interval[6]);
  3207 + m.put("djgWgf", interval[7]);
  3208 + m.put("djgTime", interval[8]);
  3209 + mapInterval.put(gs+"-"+fgs+"-"+xl, m);
  3210 + }
  3211 +
  3212 + Map<String, Boolean> lineMap=lineService.lineNature();
  3213 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  3214 + for (int i = 0; i < listAll.size(); i++) {
  3215 + ScheduleRealInfo s=listAll.get(i);
  3216 + if (nature.equals("0")) {
  3217 + list.add(s);
  3218 + }else if(nature.equals("1")){
  3219 + if(lineMap.get(s.getXlBm())){
  3220 + list.add(s);
  3221 + }
  3222 + }else{
  3223 + if(!lineMap.get(s.getXlBm())){
  3224 + list.add(s);
  3225 + }
  3226 + }
  3227 + }
  3228 + for (int i = 0; i < list.size(); i++) {
  3229 + ScheduleRealInfo s = list.get(i);
  3230 + Set<ChildTaskPlan> cts = s.getcTasks();
  3231 + if (cts != null && cts.size() > 0) {
  3232 + list_s.add(s);
  3233 + } else {
  3234 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  3235 + list_s.add(s);
  3236 + }
  3237 + }
  3238 + }
  3239 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  3240 + for (int i = 0; i < list.size(); i++) {
  3241 + if (i < list.size() - 1) {
  3242 + if ((list.get(i + 1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
  3243 + lists.add(list.get(i));
  3244 + } else {
  3245 + lists.add(list.get(i));
  3246 + Map<String, Object> mm=new HashMap<String,Object>();
  3247 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3248 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3249 + }
  3250 + Map<String, Object> map = staticTj(lists,mm);
  3251 + lMap.add(map);
  3252 + lists = new ArrayList<ScheduleRealInfo>();
  3253 + }
  3254 + } else {
  3255 + if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
  3256 + lists.add(list.get(i));
  3257 + Map<String, Object> mm=new HashMap<String,Object>();
  3258 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3259 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3260 + }
  3261 + Map<String, Object> map = staticTj(lists,mm);
  3262 + lMap.add(map);
  3263 + } else {
  3264 + lists = new ArrayList<ScheduleRealInfo>();
  3265 + lists.add(list.get(i));
  3266 + Map<String, Object> mm=new HashMap<String,Object>();
  3267 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3268 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3269 + }
  3270 + Map<String, Object> map = staticTj(lists,mm);
  3271 + lMap.add(map);
  3272 + }
  3273 + }
  3274 + }
  3275 +
  3276 + Collections.sort(lMap, new AccountXlbm());
  3277 + Map<String, Object> map = new HashMap<String, Object>();
  3278 + map.put("xlBm", "hj");
  3279 + map.put("xlName", "合计");
  3280 + map.put("fgsBm", "");
  3281 + map.put("fgsName", "");
  3282 + map.put("gsBm", "");
  3283 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  3284 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  3285 + map.put("jhlc", jhyygl);
  3286 + map.put("jcclc", jhjcclc);
  3287 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  3288 +
  3289 + double ljgl = culateService.culateLjgl(list_s);
  3290 + double sjyygl = culateService.culateSjgl(list_s);
  3291 + double zyygl = Arith.add(sjyygl, ljgl);
  3292 + double ljks=culateService.culateLjksgl(list_s);
  3293 + map.put("ljks", ljks);
  3294 + double sjjccgl = culateService.culateJccgl(list_s);
  3295 + double sjksgl = culateService.culateKsgl(list_s);
  3296 + double zksgl = Arith.add(sjjccgl, sjksgl);
  3297 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  3298 + map.put("sjgl", zyygl);
  3299 + map.put("sjksgl", zksgl);
  3300 +
  3301 + double ssgl = culateService.culateLbgl(list);
  3302 + map.put("ssgl", ssgl);
  3303 + //计划+临加-少驶=实驶
  3304 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  3305 + if (jl == zyygl) {
  3306 + map.put("zt", 0);
  3307 + } else {
  3308 + map.put("zt", 1);
  3309 + }
  3310 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  3311 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  3312 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  3313 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  3314 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  3315 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  3316 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  3317 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  3318 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  3319 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  3320 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  3321 + double ssgl_by = culateService.culateCJLC(list, "保养");
  3322 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  3323 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  3324 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  3325 +
  3326 + map.put("ssbc", culateService.culateLbbc(list));
  3327 + map.put("ljgl", ljgl);
  3328 + map.put("jhbc", culateService.culateJhbc(list, ""));
  3329 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  3330 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  3331 + map.put("sjbc", culateService.culateSjbc(list_s, ""));
  3332 + map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
  3333 + map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
  3334 + map.put("ljbc", culateService.culateLjbc(list_s, ""));
  3335 + map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
  3336 + map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
  3337 + map.put("fzbc", culateService.culateFzbc(list_s, ""));
  3338 + map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
  3339 + map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
  3340 + map.put("dtbc", 0);
  3341 + map.put("dtbc_m", 0);
  3342 + map.put("dtbc_a", 0);
  3343 + if (list.size() > 0) {
  3344 + int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
  3345 + for (Map<String, Object> m : lMap) {
  3346 + if (m.containsKey("djg") && m.get("djg") != null)
  3347 + djg += Integer.valueOf(m.get("djg").toString());
  3348 + if (m.containsKey("djg_m") && m.get("djg_m") != null)
  3349 + djg_m += Integer.valueOf(m.get("djg_m").toString());
  3350 + if (m.containsKey("djg_a") && m.get("djg_a") != null)
  3351 + djg_a += Integer.valueOf(m.get("djg_a").toString());
  3352 + if (m.containsKey("djg_time") && m.get("djg_time") != null) {
  3353 + int t = Integer.valueOf(m.get("djg_time").toString());
  3354 + if (t > djg_time)
  3355 + djg_time = t;
  3356 + }
  3357 + }
  3358 + map.put("djg", djg);
  3359 + map.put("djg_m", djg_m);
  3360 + map.put("djg_a", djg_a);
  3361 + map.put("djg_time", djg_time);
  3362 + } else {
  3363 + map.put("djg", "0");
  3364 + map.put("djg_m", "0");
  3365 + map.put("djg_a", "0");
  3366 + map.put("djg_time", "0");
  3367 + }
  3368 + lMap.add(map);
  3369 + return lMap;
  3370 + }
  3371 +
  3372 + @Override
  3373 + public Map<String, Object> scheduleDaily(String line, String date) {
  3374 + Map<String, String> tempMap = null;
  3375 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
  3376 + Map<String, Object> map = new HashMap<String, Object>();
  3377 + Double jhlc = 0.00;
  3378 + Float sjgl = 0f, ssgl = 0f, ssgl_lz = 0f, ssgl_dm = 0f, ssgl_gz = 0f, ssgl_jf = 0f, ssgl_zs = 0f, ssgl_qr = 0f, ssgl_qc = 0f, ssgl_kx = 0f, ssgl_qh = 0f, ssgl_yw = 0f, ssgl_other = 0f, ljgl = 0f;
  3379 + int jhbc = 0;
  3380 + for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
  3381 + if (scheduleRealInfo != null) {
  3382 + //计算里程(包括子任务)
  3383 + jhlc += scheduleRealInfo.getJhlc();
  3384 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  3385 + if (!childTaskPlans.isEmpty()) {
  3386 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  3387 + while (it.hasNext()) {
  3388 + ChildTaskPlan childTaskPlan = it.next();
  3389 + //是否烂班,烂班就是少驶
  3390 + if (!childTaskPlan.isDestroy()) {
  3391 + sjgl += childTaskPlan.getMileage();
  3392 + } else {
  3393 + ssgl += childTaskPlan.getMileage();
  3394 + if (childTaskPlan.getDestroyReason().equals("路阻")) {
  3395 + ssgl_lz += childTaskPlan.getMileage();
  3396 + } else if (childTaskPlan.getDestroyReason().equals("吊慢")) {
  3397 + ssgl_dm += childTaskPlan.getMileage();
  3398 + } else if (childTaskPlan.getDestroyReason().equals("故障")) {
  3399 + ssgl_gz += childTaskPlan.getMileage();
  3400 + } else if (childTaskPlan.getDestroyReason().equals("纠纷")) {
  3401 + ssgl_jf += childTaskPlan.getMileage();
  3402 + } else if (childTaskPlan.getDestroyReason().equals("肇事")) {
  3403 + ssgl_zs += childTaskPlan.getMileage();
  3404 + } else if (childTaskPlan.getDestroyReason().equals("缺人")) {
  3405 + ssgl_qr += childTaskPlan.getMileage();
  3406 + } else if (childTaskPlan.getDestroyReason().equals("缺车")) {
  3407 + ssgl_qc += childTaskPlan.getMileage();
  3408 + } else if (childTaskPlan.getDestroyReason().equals("客稀")) {
  3409 + ssgl_kx += childTaskPlan.getMileage();
  3410 + } else if (childTaskPlan.getDestroyReason().equals("气候")) {
  3411 + ssgl_qh += childTaskPlan.getMileage();
  3412 + } else if (childTaskPlan.getDestroyReason().equals("援外")) {
  3413 + ssgl_yw += childTaskPlan.getMileage();
  3414 + } else {
  3415 + ssgl_other += childTaskPlan.getMileage();
  3416 + }
  3417 + }
  3418 + //临加公里
  3419 + if (childTaskPlan.getType1().equals("临加")) {
  3420 + ljgl += childTaskPlan.getMileage();
  3421 + }
  3422 + }
  3423 + }
  3424 + //班次
  3425 + scheduleRealInfo.getFcsjT();
  3426 + scheduleRealInfo.getFcsjActualTime();
  3427 + }
  3428 + }
  3429 + map.put("jhlc", jhlc);
  3430 + map.put("sjgl", sjgl);
  3431 + map.put("ssgl", ssgl);
  3432 + map.put("ssgl_lz", ssgl_lz);
  3433 + map.put("ssgl_dm", ssgl_dm);
  3434 + map.put("ssgl_gz", ssgl_gz);
  3435 + map.put("ssgl_jf", ssgl_jf);
  3436 + map.put("ssgl_zs", ssgl_zs);
  3437 + map.put("ssgl_qr", ssgl_qr);
  3438 + map.put("ssgl_qc", ssgl_qc);
  3439 + map.put("ssgl_kx", ssgl_kx);
  3440 + map.put("ssgl_qh", ssgl_qh);
  3441 + map.put("ssgl_yw", ssgl_yw);
  3442 + map.put("ssgl_other", ssgl_other);
  3443 + map.put("ljgl", ljgl);
  3444 +
  3445 + map.put("jhbc", scheduleRealInfos.size());
  3446 + return null;
  3447 + }
  3448 +
  3449 + @Override
  3450 + public int countByLineCodeAndDate(String xlBm, String schDate) {
  3451 + return scheduleRealInfoRepository.countByLineCodeAndDate(xlBm + "", schDate);
  3452 + }
  3453 +
  3454 + @Override
  3455 + public List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate) {
  3456 + return scheduleRealInfoRepository.findByLineCodeAndDate(xlBm + "", schDate);
  3457 + }
  3458 +
  3459 + @Override
  3460 + public void deleteByLineCodeAndDate(String xlBm, String schDate) {
  3461 + scheduleRealInfoRepository.deleteByLineCodeAndDate(xlBm + "", schDate);
  3462 + }
  3463 +
  3464 + @Override
  3465 + public Long getMaxId() {
  3466 + return scheduleRealInfoRepository.getMaxId();
  3467 + }
  3468 +
  3469 + @Override
  3470 + public List<ScheduleRealInfo> realScheduleList(String line, String date) {
  3471 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3472 + String lpName = "lpName";
  3473 + String zdsj = "";
  3474 + String zdsjActual = "";
  3475 + String zdsj1 = "";
  3476 + String zdsjActual1 = "";
  3477 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
  3478 +
  3479 + /*
  3480 + * 对计划发车时间相同的班次进行排序 out最前 in最后
  3481 + */
  3482 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  3483 + SimpleDateFormat sdfnyr =new SimpleDateFormat("yyyy-MM-dd");
  3484 + String minfcsj = "02:00";
  3485 + List<Line> lineList = lineRepository.findLineByCode(line);
  3486 + if (lineList.size() > 0) {
  3487 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  3488 + + " id = ("
  3489 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  3490 + + ")";
  3491 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  3492 + }
  3493 + String[] minSjs = minfcsj.split(":");
  3494 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  3495 + for (int i = 0; i < listInfo.size(); i++) {
  3496 + ScheduleRealInfo s = listInfo.get(i);
  3497 + if (s.getBcType().equals("out")) {
  3498 + s.setRemark("1");
  3499 + } else if (s.getBcType().equals("in")) {
  3500 + s.setRemark("3");
  3501 + } else {
  3502 + s.setRemark("2");
  3503 + }
  3504 + String[] fcsj = s.getFcsj().split(":");
  3505 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3506 +
  3507 + Long fscjT = 0L;
  3508 + if (fcsjL < minSj) {
  3509 + Calendar calendar = new GregorianCalendar();
  3510 + calendar.setTime(s.getScheduleDate());
  3511 + calendar.add(calendar.DATE, 1);
  3512 + Date date_sch= calendar.getTime();
  3513 + try {
  3514 + fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
  3515 + } catch (ParseException e) {
  3516 + // TODO Auto-generated catch block
  3517 + e.printStackTrace();
  3518 + }
  3519 +
  3520 + } else {
  3521 + try {
  3522 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3523 + } catch (ParseException e) {
  3524 + // TODO Auto-generated catch block
  3525 + e.printStackTrace();
  3526 + };
  3527 + }
  3528 + s.setFcsjT(fscjT);
  3529 + }
  3530 + List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
  3531 + listInfo2.addAll(listInfo);
  3532 + Collections.sort(listInfo, new compareLpFcsjType());
  3533 + Collections.sort(listInfo2,new compareDirLpFcsjType());
  3534 + for (int i = 0; i < listInfo.size(); i++) {
  3535 + ScheduleRealInfo t = listInfo.get(i);
  3536 + if (!lpName.equals(t.getLpName())) {
  3537 + zdsjActual = t.getZdsjActual();
  3538 + zdsj = t.getZdsj();
  3539 + t.setZdsjActual("");
  3540 + t.setZdsj("");
  3541 + } else {
  3542 + zdsj1 = t.getZdsj();
  3543 + zdsjActual1 = t.getZdsjActual();
  3544 + t.setZdsjActual(zdsjActual);
  3545 + t.setZdsj(zdsj);
  3546 + zdsj = zdsj1;
  3547 + zdsjActual = zdsjActual1;
  3548 + }
  3549 + lpName = t.getLpName();
  3550 + list.add(t);
  3551 + }
  3552 +/*
  3553 + List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleDdrb2(line, date);
  3554 + for (int i = 0; i < listInfo2.size(); i++) {
  3555 + ScheduleRealInfo s = listInfo2.get(i);
  3556 + if (s.getBcType().equals("out")) {
  3557 + s.setRemark("1");
  3558 + } else if (s.getBcType().equals("in")) {
  3559 + s.setRemark("3");
  3560 + } else {
  3561 + s.setRemark("2");
  3562 + }
  3563 + String[] fcsj = s.getFcsj().split(":");
  3564 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3565 +
  3566 + Long fscjT = 0L;
  3567 + if (fcsjL < minSj) {
  3568 + Calendar calendar = new GregorianCalendar();
  3569 + calendar.setTime(s.getScheduleDate());
  3570 + calendar.add(calendar.DATE, 1);
  3571 + s.setScheduleDate(calendar.getTime());
  3572 + try {
  3573 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  3574 + } catch (ParseException e) {
  3575 + // TODO Auto-generated catch block
  3576 + e.printStackTrace();
  3577 + }
  3578 +
  3579 + } else {
  3580 + try {
  3581 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3582 + } catch (ParseException e) {
  3583 + // TODO Auto-generated catch block
  3584 + e.printStackTrace();
  3585 + }
  3586 + ;
  3587 + }
  3588 + s.setFcsjT(fscjT);
  3589 + }*/
  3590 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3591 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3592 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3593 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3594 + if (listInfo2.size() > 0) {
  3595 + int a = listInfo2.size() % 3;
  3596 + int b = listInfo2.size() / 3;
  3597 + int x = 0, y = 0;
  3598 + if (a == 2) {
  3599 + x = b + 1;
  3600 + y = x * 2;
  3601 + } else if (a == 1) {
  3602 + x = b + 1;
  3603 + y = x * 2 - 1;
  3604 + } else {
  3605 + x = b;
  3606 + y = 2 * x;
  3607 +
  3608 + }
  3609 + for (int i = 0; i < listInfo2.size(); i++) {
  3610 + ScheduleRealInfo s = listInfo2.get(i);
  3611 + if (i + 1 <= x) {
  3612 + xList.add(s);
  3613 + } else if ((i + 1) > x && (i + 1) <= y) {
  3614 + yList.add(s);
  3615 + } else {
  3616 + zList.add(s);
  3617 + }
  3618 + }
  3619 + for (int i = 0; i < x; i++) {
  3620 + newList.add(xList.get(i));
  3621 + if (yList.size() > i) {
  3622 + newList.add(yList.get(i));
  3623 + } else {
  3624 + newList.add(new ScheduleRealInfo());
  3625 + }
  3626 + if (zList.size() > i) {
  3627 + newList.add(zList.get(i));
  3628 + } else {
  3629 + newList.add(new ScheduleRealInfo());
  3630 + }
  3631 +
  3632 + }
  3633 + }
  3634 + for (int i = 0; i < newList.size(); i++) {
  3635 + ScheduleRealInfo t1 = newList.get(i);
  3636 + for (int j = 0; j < list.size(); j++) {
  3637 + ScheduleRealInfo t2 = list.get(j);
  3638 + if (t1.getId() == t2.getId()) {
  3639 + t1 = t2;
  3640 + }
  3641 + }
  3642 + }
  3643 +
  3644 + for (int i = 0; i < newList.size(); i++) {
  3645 + ScheduleRealInfo t1 = newList.get(i);
  3646 + String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
  3647 + if (reamrks1.length() > 4) {
  3648 + t1.setRemarks(reamrks1.substring(0, 4));
  3649 + t1.setRemark(reamrks1);
  3650 + } else {
  3651 + t1.setRemark(reamrks1);
  3652 + }
  3653 + }
  3654 + return newList;
  3655 + }
  3656 +
  3657 + @Override
  3658 + public List<ScheduleRealInfo> realScheduleList_zrw(String line, String date) {
  3659 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3660 + String lpName = "lpName";
  3661 + String zdsj = "";
  3662 + String zdsjActual = "";
  3663 + String zdsj1 = "";
  3664 + String zdsjActual1 = "";
  3665 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
  3666 +
  3667 + /*
  3668 + * 对计划发车时间相同的班次进行排序 out最前 in最后
  3669 + */
  3670 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  3671 + SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
  3672 +
  3673 + String minfcsj = "02:00";
  3674 + List<Line> lineList = lineRepository.findLineByCode(line);
  3675 + if (lineList.size() > 0) {
  3676 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  3677 + + " id = ("
  3678 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  3679 + + ")";
  3680 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  3681 + }
  3682 + String[] minSjs = minfcsj.split(":");
  3683 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  3684 + for (int i = 0; i < listInfo.size(); i++) {
  3685 + ScheduleRealInfo s = listInfo.get(i);
  3686 + if (s.getBcType().equals("out")) {
  3687 + s.setRemark("1");
  3688 + } else if (s.getBcType().equals("in")) {
  3689 + s.setRemark("3");
  3690 + } else {
  3691 + s.setRemark("2");
  3692 + }
  3693 + String[] fcsj = s.getFcsj().split(":");
  3694 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3695 +
  3696 + Long fscjT = 0L;
  3697 + if (fcsjL < minSj) {
  3698 + Calendar calendar = new GregorianCalendar();
  3699 + calendar.setTime(s.getScheduleDate());
  3700 + calendar.add(calendar.DATE, 1);
  3701 + Date date_sch=calendar.getTime();
  3702 + try {
  3703 + fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
  3704 + } catch (ParseException e) {
  3705 + // TODO Auto-generated catch block
  3706 + e.printStackTrace();
  3707 + }
  3708 +
  3709 + } else {
  3710 + try {
  3711 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3712 + } catch (ParseException e) {
  3713 + // TODO Auto-generated catch block
  3714 + e.printStackTrace();
  3715 + }
  3716 + ;
  3717 + }
  3718 + s.setFcsjT(fscjT);
  3719 + }
  3720 +
  3721 +// Collections.sort(listInfo, new compareLpFcsjType());
  3722 + List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
  3723 +
  3724 + Collections.sort(listInfo, new compareLpFcsjType());
  3725 + for (int i = 0; i < listInfo.size(); i++) {
  3726 + ScheduleRealInfo t = listInfo.get(i);
  3727 + if (!lpName.equals(t.getLpName())) {
  3728 + zdsjActual = t.getZdsjActual();
  3729 + zdsj = t.getZdsj();
  3730 + t.setZdsjActual("");
  3731 + t.setZdsj("");
  3732 + } else {
  3733 + zdsj1 = t.getZdsj();
  3734 + zdsjActual1 = t.getZdsjActual();
  3735 + t.setZdsjActual(zdsjActual);
  3736 + t.setZdsj(zdsj);
  3737 + zdsj = zdsj1;
  3738 + zdsjActual = zdsjActual1;
  3739 + }
  3740 +
  3741 +
  3742 +
  3743 + lpName = t.getLpName();
  3744 + listInfo2.add(t);
  3745 +
  3746 + }
  3747 +
  3748 + Collections.sort(listInfo2,new compareDirLpFcsjType());
  3749 + for (int i = 0; i < listInfo2.size(); i++) {
  3750 + ScheduleRealInfo t=listInfo2.get(i);
  3751 + list.add(t);
  3752 + Set<ChildTaskPlan> childTaskPlans = t.getcTasks();
  3753 + //计算营运里程,空驶里程
  3754 + if (!childTaskPlans.isEmpty()) {
  3755 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  3756 + Collections.sort(listit, new ComparableChild());
  3757 + for (int j = 0; j < listit.size(); j++) {
  3758 + ScheduleRealInfo s = new ScheduleRealInfo();
  3759 + ChildTaskPlan childTaskPlan = listit.get(j);
  3760 + if (childTaskPlan.getCcId() == null) {
  3761 + if (childTaskPlan.isDestroy()) {
  3762 + s.setFcsjActual("");
  3763 + s.setZdsjActual("");
  3764 + } else {
  3765 + s.setFcsjActual(childTaskPlan.getStartDate());
  3766 + s.setZdsjActual("");
  3767 + s.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  3768 + }
  3769 + s.setFcsj(childTaskPlan.getStartDate());
  3770 + s.setZdsj("");
  3771 + s.setQdzName(childTaskPlan.getStartStationName());
  3772 + s.setZdzName(childTaskPlan.getEndStationName());
  3773 + s.setRemarks(childTaskPlan.getRemarks());
  3774 + s.setAdjustExps("子");
  3775 + s.setLpName("");
  3776 + list.add(s);
  3777 + }
  3778 + }
  3779 + }
  3780 + }
  3781 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3782 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3783 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3784 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3785 + if (list.size() > 0) {
  3786 + int a = list.size() % 3;
  3787 + int b = list.size() / 3;
  3788 + int x = 0, y = 0;
  3789 + if (a == 2) {
  3790 + x = b + 1;
  3791 + y = x * 2;
  3792 + } else if (a == 1) {
  3793 + x = b + 1;
  3794 + y = x * 2 - 1;
  3795 + } else {
  3796 + x = b;
  3797 + y = 2 * x;
  3798 +
  3799 + }
  3800 + for (int i = 0; i < list.size(); i++) {
  3801 + ScheduleRealInfo s = list.get(i);
  3802 + if (i + 1 <= x) {
  3803 + xList.add(s);
  3804 + } else if ((i + 1) > x && (i + 1) <= y) {
  3805 + yList.add(s);
  3806 + } else {
  3807 + zList.add(s);
  3808 + }
  3809 + }
  3810 + for (int i = 0; i < x; i++) {
  3811 + newList.add(xList.get(i));
  3812 + if (yList.size() > i) {
  3813 + newList.add(yList.get(i));
  3814 + } else {
  3815 + newList.add(new ScheduleRealInfo());
  3816 + }
  3817 + if (zList.size() > i) {
  3818 + newList.add(zList.get(i));
  3819 + } else {
  3820 + newList.add(new ScheduleRealInfo());
  3821 + }
  3822 +
  3823 + }
  3824 + }
  3825 + /* for (int i = 0; i < newList.size(); i++) {
  3826 + ScheduleRealInfo t1 = newList.get(i);
  3827 + for (int j = 0; j < list.size(); j++) {
  3828 + ScheduleRealInfo t2 = list.get(j);
  3829 + if (t1.getId() == t2.getId()) {
  3830 + t1 = t2;
  3831 + }
  3832 + }
  3833 + }*/
  3834 +
  3835 + for (int i = 0; i < newList.size(); i++) {
  3836 + ScheduleRealInfo t1 = newList.get(i);
  3837 + String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
  3838 + if (reamrks1.length() > 4) {
  3839 + t1.setRemarks(reamrks1.substring(0, 4));
  3840 + t1.setRemark(reamrks1);
  3841 + } else {
  3842 + t1.setRemark(reamrks1);
  3843 + }
  3844 + }
  3845 + return newList;
  3846 + }
  3847 +
  3848 + @Override
  3849 + public List<ScheduleRealInfo> realScheduleList_mh_2(String line, String date) {
  3850 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3851 + String lpName = "lpName";
  3852 + String zdsj = "";
  3853 + String zdsjActual = "";
  3854 + String zdsj1 = "";
  3855 + String zdsjActual1 = "";
  3856 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
  3857 +
  3858 + for (ScheduleRealInfo s : listInfo) {
  3859 + if (s.isDestroy() && s.isReissue()) {
  3860 + s.setRemark("");
  3861 + s.setFcsjActual(s.getDfsj());
  3862 + s.setZdsjActual(s.getZdsj());
  3863 + s.setStatus(2);
  3864 + s.setJhlc(s.getJhlcOrig());
  3865 + }
  3866 + }
  3867 +
  3868 + for (int i = 0; i < listInfo.size(); i++) {
  3869 + ScheduleRealInfo t = listInfo.get(i);
  3870 + if (!lpName.equals(t.getLpName())) {
  3871 + zdsjActual = t.getZdsjActual();
  3872 + zdsj = t.getZdsj();
  3873 + t.setZdsjActual("");
  3874 + t.setZdsj("");
  3875 + } else {
  3876 + zdsj1 = t.getZdsj();
  3877 + zdsjActual1 = t.getZdsjActual();
  3878 + t.setZdsjActual(zdsjActual);
  3879 + t.setZdsj(zdsj);
  3880 + zdsj = zdsj1;
  3881 + zdsjActual = zdsjActual1;
  3882 + }
  3883 + lpName = t.getLpName();
  3884 + list.add(t);
  3885 + }
  3886 +
  3887 + List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLineQp2(line, date);
  3888 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3889 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3890 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3891 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3892 + if (listInfo2.size() > 0) {
  3893 + int a = listInfo2.size() % 3;
  3894 + int b = listInfo2.size() / 3;
  3895 + int x = 0, y = 0;
  3896 + if (a == 2) {
  3897 + x = b + 1;
  3898 + y = x * 2;
  3899 + } else if (b == 1) {
  3900 + x = b + 1;
  3901 + y = x * 2 - 1;
  3902 + } else {
  3903 + x = b;
  3904 + y = 2 * x;
  3905 +
  3906 + }
  3907 + for (int i = 0; i < listInfo2.size(); i++) {
  3908 + ScheduleRealInfo s = listInfo2.get(i);
  3909 + if (i + 1 <= x) {
  3910 + xList.add(s);
  3911 + } else if ((i + 1) > x && (i + 1) <= y) {
  3912 + yList.add(s);
  3913 + } else {
  3914 + zList.add(s);
  3915 + }
  3916 + }
  3917 + for (int i = 0; i < x; i++) {
  3918 + newList.add(xList.get(i));
  3919 + if (yList.size() > i) {
  3920 + newList.add(yList.get(i));
  3921 + } else {
  3922 + newList.add(new ScheduleRealInfo());
  3923 + }
  3924 + if (zList.size() > i) {
  3925 + newList.add(zList.get(i));
  3926 + } else {
  3927 + newList.add(new ScheduleRealInfo());
  3928 + }
  3929 +
  3930 + }
  3931 + }
  3932 + for (int i = 0; i < newList.size(); i++) {
  3933 + ScheduleRealInfo t1 = newList.get(i);
  3934 + for (int j = 0; j < list.size(); j++) {
  3935 + ScheduleRealInfo t2 = list.get(j);
  3936 + if (t1.getId() == t2.getId()) {
  3937 + t1 = t2;
  3938 + }
  3939 + }
  3940 + }
  3941 + return newList;
  3942 + }
  3943 +
  3944 + @Override
  3945 + public List<ScheduleRealInfo> realScheduleListQp(String line, String date) {
  3946 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3947 + String lpName = "lpName";
  3948 + String zdsj = "";
  3949 + String zdsjActual = "";
  3950 + String zdsj1 = "";
  3951 + String zdsjActual1 = "";
  3952 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
  3953 + for (int i = 0; i < listInfo.size(); i++) {
  3954 + ScheduleRealInfo t = listInfo.get(i);
  3955 + if (!lpName.equals(t.getLpName())) {
  3956 + zdsjActual = t.getZdsjActual();
  3957 + zdsj = t.getZdsj();
  3958 + t.setZdsjActual("");
  3959 + t.setZdsj("");
  3960 + } else {
  3961 + zdsj1 = t.getZdsj();
  3962 + zdsjActual1 = t.getZdsjActual();
  3963 + t.setZdsjActual(zdsjActual);
  3964 + t.setZdsj(zdsj);
  3965 + zdsj = zdsj1;
  3966 + zdsjActual = zdsjActual1;
  3967 + }
  3968 +
  3969 + lpName = t.getLpName();
  3970 + list.add(t);
  3971 + }
  3972 + return list;
  3973 + }
  3974 +
  3975 + public List<Map<String, Object>> yesterdayDataList(String line, String date, String gsbm, String fgsbm, String jGh, String nbbm) {
  3976 + List<Map<String, Object>> yesterdayDataList = new ArrayList<Map<String, Object>>();
  3977 + if (line.equals("")) {
  3978 + yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList(line, date, gsbm, fgsbm, nbbm);
  3979 + } else {
  3980 + yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList_eq(line, date, gsbm, fgsbm, nbbm);
  3981 + }
  3982 + List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill3(jGh, nbbm, date, gsbm, fgsbm);
  3983 + for (int x = 0; x < yesterdayDataList.size(); x++) {
  3984 + String jsy = yesterdayDataList.get(x).get("jGh").toString();
  3985 + String clZbh = yesterdayDataList.get(x).get("clZbh").toString();
  3986 + String xlbm = yesterdayDataList.get(x).get("xlBm").toString();
  3987 + String lp = yesterdayDataList.get(x).get("lpName").toString();
  3988 + String realExecDate=yesterdayDataList.get(x).get("realExecDate").toString();
  3989 + String fcsj[] =realExecDate.split(" ");
  3990 + //取出最小计划发车时间
  3991 + yesterdayDataList.get(x).put("fcsj", fcsj[1]);
  3992 + Map<String, Object> map = new HashMap<String, Object>();
  3993 + boolean fage = true;
  3994 + String company = "";
  3995 + String bCompany = "";
  3996 + String lineName="";
  3997 + String jName="";
  3998 + List<ScheduleRealInfo> listS = new ArrayList<ScheduleRealInfo>();
  3999 + for (ScheduleRealInfo scheduleRealInfo : lists) {
  4000 + if (scheduleRealInfo.getjGh().equals(jsy)
  4001 + && scheduleRealInfo.getClZbh().equals(clZbh)
  4002 + && scheduleRealInfo.getXlBm().equals(xlbm)
  4003 + && scheduleRealInfo.getLpName().equals(lp)) {
  4004 + if (fage) {
  4005 + //根据线路代码获取公司
  4006 + company = scheduleRealInfo.getGsBm();
  4007 + bCompany = scheduleRealInfo.getFgsBm();
  4008 + lineName = scheduleRealInfo.getXlName();
  4009 + jName= scheduleRealInfo.getjName();
  4010 + fage = false;
  4011 + }
  4012 + Set<ChildTaskPlan> cts = scheduleRealInfo.getcTasks();
  4013 + if (cts != null && cts.size() > 0) {
  4014 + listS.add(scheduleRealInfo);
  4015 + } else {
  4016 + if (scheduleRealInfo.getZdsjActual() != null && scheduleRealInfo.getFcsjActual() != null) {
  4017 + listS.add(scheduleRealInfo);
  4018 + }
  4019 + }
  4020 + }
  4021 + }
  4022 + yesterdayDataList.get(x).put("company", company);
  4023 + yesterdayDataList.get(x).put("bCompany", bCompany);
  4024 + yesterdayDataList.get(x).put("lineName", lineName);
  4025 + yesterdayDataList.get(x).put("jName", jName);
  4026 + Double ljgl = culateMieageService.culateLjgl(listS);
  4027 + Double sjgl = culateMieageService.culateSjgl(listS);
  4028 + Double ksgl = culateMieageService.culateKsgl(listS);
  4029 + Double jccgl = culateMieageService.culateJccgl(listS);
  4030 + Double zyygl = Arith.add(sjgl, ljgl);
  4031 + Double zksgl = Arith.add(ksgl, jccgl);
  4032 + Double zlc = Arith.add(zyygl, zksgl);
  4033 + yesterdayDataList.get(x).put("totalKilometers", zlc);
  4034 +
  4035 + }
  4036 + //增加顺序号
  4037 + for (int i = 0; i < yesterdayDataList.size(); i++) {
  4038 + if (i == 0) {
  4039 + yesterdayDataList.get(i).put("seqNumber", 1);
  4040 + } else {
  4041 + if (yesterdayDataList.get(i - 1).get("clZbh").equals(yesterdayDataList.get(i).get("clZbh"))) {
  4042 + yesterdayDataList.get(i).put("seqNumber", 1 + (int) yesterdayDataList.get(i - 1).get("seqNumber"));
  4043 + } else {
  4044 + yesterdayDataList.get(i).put("seqNumber", 1);
  4045 + }
  4046 + }
  4047 + }
  4048 +
  4049 + return yesterdayDataList;
  4050 + }
  4051 +
  4052 + /**
  4053 + * 批量调整人车
  4054 + */
  4055 + @Override
  4056 + public Map<String, Object> multi_tzrc(List<ChangePersonCar> cpcs, String userId) {
  4057 + Map<String, Object> rs = new HashMap<>();
  4058 + Set<ScheduleRealInfo> set = new HashSet<>();
  4059 +
  4060 + ScheduleRealInfo sch;
  4061 +
  4062 + String jGh = null, jName, sGh, sName;
  4063 + for (ChangePersonCar cpc : cpcs) {
  4064 +
  4065 + sch = dayOfSchedule.get(cpc.getSchId());
  4066 + if (sch == null)
  4067 + continue;
  4068 +
  4069 + if (cpc.getClZbh() != null) {
  4070 + if (!carExist(sch.getGsBm(), cpc.getClZbh())) {
  4071 + rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
  4072 + rs.put("status", ResponseCode.ERROR);
  4073 + return rs;
  4074 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(cpc.getClZbh()))) {
  4075 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + cpc.getClZbh() + "】的车辆");
  4076 + rs.put("status", ResponseCode.ERROR);
  4077 + return rs;
  4078 + }
  4079 + }
  4080 +
  4081 + if (StringUtils.isNotEmpty(cpc.getJsy())) {
  4082 + try{
  4083 + jGh = cpc.getJsy().split("/")[0];
  4084 + }catch (Exception e){
  4085 + logger.error("", e);
  4086 + rs.put("msg", "驾驶员参数异常!!");
  4087 + rs.put("status", ResponseCode.ERROR);
  4088 + return rs;
  4089 + }
  4090 +
  4091 + jName = getPersonName(sch.getGsBm(), jGh);
  4092 + if (StringUtils.isEmpty(jName)) {
  4093 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
  4094 + rs.put("status", ResponseCode.ERROR);
  4095 + return rs;
  4096 + }
  4097 + }
  4098 +
  4099 +
  4100 + //为换人换车情况表写入数据
  4101 + schModifyLog.saveChangetochange(sch, cpc, userId);
  4102 + //日志记录
  4103 + ScheduleModifyLogger.tzrc(sch, cpc, userId);
  4104 +
  4105 + //换驾驶员
  4106 + if (StringUtils.isNotEmpty(cpc.getJsy())) {
  4107 + //换驾驶员
  4108 + if (persoChange(sch, jGh))
  4109 + set.add(sch);
  4110 + }
  4111 +
  4112 + //换售票员
  4113 + if (StringUtils.isNotEmpty(cpc.getSpy())
  4114 + && !"/".equals(StringUtils.trim(cpc.getSpy()))) {
  4115 +
  4116 + sGh = cpc.getSpy().split("/")[0];
  4117 + sName = getPersonName(sch.getGsBm(), sGh);
  4118 + if (StringUtils.isEmpty(sName)) {
  4119 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
  4120 + rs.put("status", ResponseCode.ERROR);
  4121 + return rs;
  4122 + }
  4123 +
  4124 + /*if(!sGh.equals(sch.getsGh()))
  4125 + sb.append(sch.getsGh() + " 换 " + sGh + ";");*/
  4126 + if (persoChangeSPY(sch, sGh))
  4127 + set.add(sch);
  4128 + } else if (StringUtils.isNotEmpty(sch.getsGh())) {
  4129 + sch.setsGh("");
  4130 + sch.setsName("");
  4131 + }
  4132 +
  4133 + //换车
  4134 + if (StringUtils.isNotEmpty(cpc.getClZbh()) && !cpc.getClZbh().equals(sch.getClZbh())) {
  4135 + //sb.append(sch.getClZbh() + " 换 " + cpc.getClZbh() + ";");
  4136 + set.add(sch);
  4137 + set.addAll(dayOfSchedule.changeCar(sch, cpc.getClZbh()));
  4138 + }
  4139 +
  4140 + /*if(sb.length() > 0)
  4141 + sch.setRemarks(sb.toString());*/
  4142 +
  4143 + dayOfSchedule.save(sch);
  4144 + set.add(sch);
  4145 +
  4146 + }
  4147 + rs.put("ts", set);
  4148 + rs.put("status", ResponseCode.SUCCESS);
  4149 + return rs;
  4150 + }
  4151 +
  4152 + /**
  4153 + * @Title: persoChange
  4154 + * @Description: TODO(班次换驾驶员)
  4155 + */
  4156 + public boolean persoChange(ScheduleRealInfo sch, String jGh) {
  4157 + if (sch.getjGh().equals(jGh))
  4158 + return false;
  4159 + String jName = getPersonName(sch.getGsBm(), jGh);
  4160 + if (StringUtils.isNotEmpty(jName)) {
  4161 +
  4162 + if (jGh.indexOf("-") != -1)
  4163 + sch.setjGh(jGh.substring(jGh.indexOf("-") + 1));
  4164 + else
  4165 + sch.setjGh(jGh);
  4166 +
  4167 + sch.setjName(jName);
  4168 + return true;
  4169 + }
  4170 + return false;
  4171 + }
  4172 +
  4173 + /**
  4174 + * @Title: persoChange
  4175 + * @Description: TODO(班次换售票员)
  4176 + */
  4177 + public boolean persoChangeSPY(ScheduleRealInfo sch, String sGh) {
  4178 + if (sch.getsGh().equals(sGh))
  4179 + return false;
  4180 + String sName = getPersonName(sch.getGsBm(), sGh);
  4181 + if (StringUtils.isNotEmpty(sName)) {
  4182 + if (sGh.indexOf("-") != -1)
  4183 + sch.setsGh(sGh.substring(sGh.indexOf("-") + 1));
  4184 + else
  4185 + sch.setsGh(sGh);
  4186 + sch.setsName(sName);
  4187 + return true;
  4188 + }
  4189 + return false;
  4190 + }
  4191 +
  4192 + /**
  4193 + * 批量待发调整
  4194 + */
  4195 + @Override
  4196 + public Map<String, Object> multi_dftz(List<DfsjChange> dfsjcs) {
  4197 + Map<String, Object> rs = new HashMap<>(), tempMap = new HashMap<>();
  4198 + List<ScheduleRealInfo> list = new ArrayList<>();
  4199 +
  4200 + for (DfsjChange dc : dfsjcs) {
  4201 + if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
  4202 + continue;
  4203 +
  4204 + tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "2", null);
  4205 +
  4206 + if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
  4207 + list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
  4208 + }
  4209 + }
  4210 +
  4211 + rs.put("status", ResponseCode.SUCCESS);
  4212 + rs.put("ts", list);
  4213 + return rs;
  4214 + }
  4215 +
  4216 +
  4217 + @Override
  4218 + public Map<String, Object> findKMBC1(String jName, String clZbh,
  4219 + String date, String enddate) {
  4220 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill4(jName, clZbh, date, enddate);
  4221 + DecimalFormat format = new DecimalFormat("0.00");
  4222 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4223 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4224 + int jhbc = 0, cjbc = 0, ljbc = 0;
  4225 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
  4226 + float addMileage = 0l, remMileage = 0l;
  4227 + Map<String, Object> map = new HashMap<String, Object>();
  4228 + for (ScheduleRealInfo scheduleRealInfo : list) {
  4229 + if (scheduleRealInfo != null) {
  4230 + //计划里程(主任务过滤掉临加班次),
  4231 + //烂班里程(主任务烂班),
  4232 + //临加里程(主任务临加),
  4233 + //计划班次,烂班班次,增加班次
  4234 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  4235 + if (scheduleRealInfo.isSflj()) {
  4236 + addMileage += tempJhlc;
  4237 + ljbc++;
  4238 + } else {
  4239 + jhlc += tempJhlc;
  4240 + jhbc++;
  4241 + if (scheduleRealInfo.getStatus() == -1) {
  4242 + remMileage += tempJhlc;
  4243 + cjbc++;
  4244 + }
  4245 + }
  4246 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  4247 + //计算营运里程,空驶里程
  4248 + if (childTaskPlans.isEmpty()) {
  4249 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  4250 + || scheduleRealInfo.getBcType().equals("venting")) {
  4251 + ksgl += tempJhlc;
  4252 + } else {
  4253 + yygl += tempJhlc;
  4254 + }
  4255 + } else {
  4256 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4257 + while (it.hasNext()) {
  4258 + ChildTaskPlan childTaskPlan = it.next();
  4259 + if (childTaskPlan.getMileageType().equals("empty")) {
  4260 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4261 + } else {
  4262 + yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4263 + }
  4264 + }
  4265 + }
  4266 + }
  4267 + }
  4268 + map.put("jhlc", format.format(jhlc));
  4269 + map.put("remMileage", format.format(remMileage));
  4270 + map.put("addMileage", format.format(addMileage));
  4271 + map.put("yygl", format.format(yygl));
  4272 + map.put("ksgl", format.format(ksgl));
  4273 + map.put("realMileage", format.format(yygl + ksgl));
  4274 + map.put("jhbc", jhbc);
  4275 + map.put("cjbc", cjbc);
  4276 + map.put("ljbc", ljbc);
  4277 + map.put("sjbc", jhbc - cjbc + ljbc);
  4278 + return map;
  4279 + }
  4280 +
  4281 + /**
  4282 + * 调整班次类型
  4283 + *
  4284 + * @param id
  4285 + * @param bcType
  4286 + * @param remarks
  4287 + * @return
  4288 + */
  4289 + @Override
  4290 + public Map<String, Object> changeBcType(Long id, String bcType, String remarks, String majorStationName) {
  4291 + Map<String, Object> rs = new HashMap<>();
  4292 +
  4293 + try {
  4294 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  4295 + if (sch != null) {
  4296 + sch.setBcType(bcType);
  4297 + sch.setRemarks(remarks);
  4298 + rs.put("status", ResponseCode.SUCCESS);
  4299 + rs.put("t", sch);
  4300 +
  4301 + if ("major".equals(bcType)) {
  4302 + sch.setMajorStationName(majorStationName);
  4303 + }
  4304 +
  4305 + dayOfSchedule.save(sch);
  4306 + }
  4307 + } catch (Exception e) {
  4308 + logger.error("", e);
  4309 + rs.put("status", ResponseCode.ERROR);
  4310 + }
  4311 +
  4312 + return rs;
  4313 + }
  4314 +
  4315 + @Override
  4316 + public Map<String, Object> historySave(ScheduleRealInfo sch) {
  4317 + Map<String, Object> rs = new HashMap<>();
  4318 + rs.put("status", ResponseCode.ERROR);
  4319 +
  4320 + ScheduleRealInfo oldSch = super.findById(sch.getId());
  4321 + //事后日志记录
  4322 + AfterwardsLogger aflog = AfterwardsLogger.start(oldSch, "事后调整");
  4323 +
  4324 + //换车
  4325 + if (StringUtils.isNotEmpty(sch.getClZbh()) && !oldSch.getClZbh().equals(sch.getClZbh())) {
  4326 + if (!carExist(oldSch.getGsBm(), sch.getClZbh())) {
  4327 + rs.put("msg", "车辆 " + sch.getClZbh() + " 不存在!");
  4328 + return rs;
  4329 + } else {
  4330 + aflog.log("换车", oldSch.getClZbh(), sch.getClZbh());
  4331 + oldSch.setClZbh(sch.getClZbh());
  4332 + }
  4333 + }
  4334 +
  4335 + //换驾驶员
  4336 + if (StringUtils.isNotEmpty(sch.getjGh()) && !oldSch.getjGh().equals(sch.getjGh())) {
  4337 + String jName = getPersonName(oldSch.getGsBm(), sch.getjGh());
  4338 + if (StringUtils.isEmpty(jName)) {
  4339 + rs.put("msg", oldSch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
  4340 + return rs;
  4341 + }
  4342 + aflog.log("换驾驶员", oldSch.getjGh() + "/" + oldSch.getjName(), sch.getjGh() + "/" + sch.getjName());
  4343 + persoChange(oldSch, sch.getjGh());
  4344 + }
  4345 +
  4346 + //换售票员
  4347 + if (StringUtils.isNotEmpty(sch.getsGh()) && !oldSch.getsGh().equals(sch.getsGh())) {
  4348 + String sName = getPersonName(oldSch.getGsBm(), sch.getsGh());
  4349 + if (StringUtils.isEmpty(sName)) {
  4350 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getsGh() + "】的售票员");
  4351 + return rs;
  4352 + }
  4353 + aflog.log("换售票员", oldSch.getsGh() + "/" + oldSch.getsName(), sch.getsGh() + "/" + sch.getsName());
  4354 + persoChangeSPY(oldSch, sch.getsGh());
  4355 + }
  4356 +
  4357 + //烂班
  4358 + boolean dest1 = oldSch.getStatus() == -1;
  4359 + boolean dest2 = sch.getStatus() == -1;
  4360 + if (!dest1 && dest2) {
  4361 + oldSch.destroy();
  4362 + aflog.log("烂班");
  4363 + } else if (dest1 && !dest2) {
  4364 + //撤销烂班
  4365 + oldSch.setJhlc(oldSch.getJhlcOrig());
  4366 + oldSch.setStatus(0);
  4367 + oldSch.calcStatus();
  4368 + oldSch.setAdjustExps(null);
  4369 + aflog.log("撤销烂班");
  4370 + }
  4371 +
  4372 + oldSch.setAdjustExps(sch.getAdjustExps());
  4373 +
  4374 + /**
  4375 + * 修改班次里程
  4376 + */
  4377 + if (!oldSch.getJhlc().equals(sch.getJhlc())) {
  4378 + double jhlcNum = sch.getJhlc();
  4379 + aflog.log("修改班次里程", oldSch.getJhlc(), jhlcNum);
  4380 + //烂班
  4381 + if (jhlcNum == 0 && oldSch.getJhlcOrig() != 0)
  4382 + oldSch.destroy();
  4383 + else {
  4384 + oldSch.setJhlc(jhlcNum);
  4385 + //临加班次,实际计划一起改
  4386 + if (oldSch.isSflj())
  4387 + oldSch.setJhlcOrig(jhlcNum);
  4388 + }
  4389 + }
  4390 +
  4391 + //待发时间
  4392 + if (!CustomStringUtils.equals(oldSch.getDfsj(), sch.getDfsj())) {
  4393 + aflog.log("修改待发时间", oldSch.getDfsj(), sch.getDfsj());
  4394 + oldSch.setDfsj(sch.getDfsj());
  4395 + }
  4396 + //实发时间
  4397 + if (!CustomStringUtils.equals(oldSch.getFcsjActual(), sch.getFcsjActual())) {
  4398 + aflog.log("修改实发时间", oldSch.getFcsjActual(), sch.getFcsjActual());
  4399 + oldSch.setFcsjActual(sch.getFcsjActual());
  4400 + }
  4401 + //实际终点
  4402 + if (!CustomStringUtils.equals(oldSch.getZdsjActual(), sch.getZdsjActual())) {
  4403 + aflog.log("修改实达时间", oldSch.getZdsjActual(), sch.getZdsjActual());
  4404 + oldSch.setZdsjActual(sch.getZdsjActual());
  4405 + }
  4406 +
  4407 + //备注
  4408 + if (!CustomStringUtils.equals(oldSch.getRemarks(), sch.getRemarks())) {
  4409 + aflog.log("修改备注", oldSch.getRemarks(), sch.getRemarks());
  4410 + oldSch.setRemarks(sch.getRemarks());
  4411 + }
  4412 +
  4413 + scheduleRealInfoRepository.save(oldSch);
  4414 +
  4415 + aflog.end();
  4416 + rs.put("status", ResponseCode.SUCCESS);
  4417 + return rs;
  4418 + }
  4419 +
  4420 + @Autowired
  4421 + SvgAttributeRepository svgAttributeRepository;
  4422 +
  4423 + @Override
  4424 + public Map<String, Object> svgAttr(String jsonStr) {
  4425 + Map<String, Object> rs = new HashMap<>();
  4426 +
  4427 + try {
  4428 + JSONObject jObj = JSONObject.parseObject(StringEscapeUtils.unescapeHtml4(jsonStr));
  4429 +
  4430 + SvgAttribute svgAttribute = new SvgAttribute();
  4431 + svgAttribute.setLineCode(jObj.getString("lineCode"));
  4432 + svgAttribute.setHideStations(jObj.getString("hideStations"));
  4433 + svgAttribute.setNicknames(jObj.getString("nicknames"));
  4434 + svgAttributeRepository.save(svgAttribute);
  4435 +
  4436 + rs.put("t", svgAttribute);
  4437 + rs.put("status", ResponseCode.SUCCESS);
  4438 + } catch (Exception e) {
  4439 + logger.error("", e);
  4440 + rs.put("status", ResponseCode.ERROR);
  4441 + }
  4442 + return rs;
  4443 + }
  4444 +
  4445 + @Override
  4446 + public Map<String, Object> findSvgAttr(String idx) {
  4447 + Map<String, Object> rs = new HashMap<>();
  4448 + try {
  4449 + List<String> lineCodes = Splitter.on(",").splitToList(idx);
  4450 + List<SvgAttribute> list = svgAttributeRepository.findSvgAttr(lineCodes);
  4451 +
  4452 + rs.put("status", ResponseCode.SUCCESS);
  4453 + rs.put("list", list);
  4454 + } catch (Exception e) {
  4455 + logger.error("", e);
  4456 + rs.put("status", ResponseCode.ERROR);
  4457 + }
  4458 + return rs;
  4459 + }
  4460 +
  4461 + @Override
  4462 + public Map<String, Object> addRemarks(Long id, String remarks) {
  4463 + Map<String, Object> rs = new HashMap<>();
  4464 + try {
  4465 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  4466 + sch.addRemarks(remarks);
  4467 +
  4468 + rs.put("status", ResponseCode.SUCCESS);
  4469 + rs.put("t", sch);
  4470 + } catch (Exception e) {
  4471 + logger.error("", e);
  4472 + rs.put("status", ResponseCode.ERROR);
  4473 + }
  4474 + return rs;
  4475 + }
  4476 +
  4477 + @Override
  4478 + public List<Map<String, Object>> yesterdayDataList(String line) {
  4479 + // TODO Auto-generated method stub
  4480 + return null;
  4481 + }
  4482 +
  4483 + @Override
  4484 + public List<ScheduleRealInfo> exportWaybillQp(String clZbh, String date, String line) {
  4485 + // TODO Auto-generated method stub
  4486 + ReportUtils ee = new ReportUtils();
  4487 + ReportRelatedUtils rru = new ReportRelatedUtils();
  4488 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  4489 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4490 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  4491 +
  4492 + DecimalFormat format = new DecimalFormat("0.00");
  4493 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4494 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4495 + int jhbc = 0, cjbc = 0, ljbc = 0;
  4496 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0;
  4497 + float addMileage = 0l, remMileage = 0l, addgl = 0, remgl = 0;
  4498 + int xyz = 1;
  4499 + Map<String, Object> map;
  4500 + for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
  4501 + if (scheduleRealInfo != null) {
  4502 + //计算计划里程(主任务过滤掉临加班次),烂班里程,临加里程,计划班次,烂班班次,增加班次
  4503 + //计划里程(主任务过滤掉临加班次),
  4504 + //烂班里程(主任务烂班),
  4505 + //临加里程(主任务临加),
  4506 + //计划班次,烂班班次,增加班次
  4507 + double jh = 0, sj = 0;
  4508 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  4509 + if (scheduleRealInfo.isSflj()) {
  4510 + ljbc++;
  4511 + } else {
  4512 + if (!(scheduleRealInfo.getBcType().equals("in")
  4513 + || scheduleRealInfo.getBcType().equals("out"))) {
  4514 + jhbc++;
  4515 + jh += tempJhlc;
  4516 + }
  4517 + if (scheduleRealInfo.getStatus() == -1) {
  4518 + remMileage += tempJhlc;
  4519 + cjbc++;
  4520 + }
  4521 + }
  4522 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  4523 + //计算营运里程,空驶里程
  4524 + if (childTaskPlans.isEmpty()) {
  4525 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  4526 + ) {
  4527 + jcclc += tempJhlc;
  4528 + } else {
  4529 + if (scheduleRealInfo.getStatus() != -1) {
  4530 + if (scheduleRealInfo.isSflj()) {
  4531 + addMileage += tempJhlc;
  4532 + }
  4533 + sj += tempJhlc;
  4534 + }
  4535 + }
  4536 + } else {
  4537 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4538 + while (it.hasNext()) {
  4539 + ChildTaskPlan childTaskPlan = it.next();
  4540 + if (childTaskPlan.getMileageType().equals("empty")) {
  4541 + if (childTaskPlan.isDestroy()) {
  4542 + remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4543 + } else {
  4544 + if (scheduleRealInfo.isSflj()) {
  4545 + addMileage += tempJhlc;
  4546 + }
  4547 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4548 + }
  4549 + } else {
  4550 + if (childTaskPlan.isDestroy()) {
  4551 + remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4552 +// cjbc++;
  4553 + } else {
  4554 + if (scheduleRealInfo.isSflj()) {
  4555 + addMileage += tempJhlc;
  4556 + }
  4557 + sj += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4558 + }
  4559 + }
  4560 + }
  4561 + }
  4562 +
  4563 + if (!(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out"))) {
  4564 + map = new HashMap<String, Object>();
  4565 + try {
  4566 + scheduleRealInfo.setBcs(xyz);
  4567 + xyz++;
  4568 + Set<ChildTaskPlan> cs = scheduleRealInfo.getcTasks();
  4569 + Double sjlc = 0.0;
  4570 + if (!cs.isEmpty()) {
  4571 + Iterator<ChildTaskPlan> it = cs.iterator();
  4572 + while (it.hasNext()) {
  4573 + ChildTaskPlan c = it.next();
  4574 + if (!c.isDestroy()) {
  4575 + sjlc += c.getMileage() == null ? 0 : c.getMileage();
  4576 + }
  4577 +
  4578 + }
  4579 + } else {
  4580 + if (scheduleRealInfo.getStatus() != -1) {
  4581 + sjlc = scheduleRealInfo.getJhlc();
  4582 + }
  4583 + }
  4584 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  4585 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  4586 + scheduleRealInfo.setSjlc(format.format(sjlc));
  4587 + map = rru.getMapValue(scheduleRealInfo);
  4588 + String zdsj = scheduleRealInfo.getZdsj();
  4589 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  4590 + if (zdsj != null && zdsjActual != null &&
  4591 + !zdsj.equals(zdsjActual)) {
  4592 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  4593 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  4594 + if (zdsj.compareTo(zdsjActual) > 0) {
  4595 + if (zdsjT - zdsjAT > 1000) {
  4596 + map.put("fast", "");
  4597 + map.put("slow", zdsjAT - zdsjT + 1440);
  4598 + } else {
  4599 + map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  4600 + map.put("slow", "");
  4601 + }
  4602 + } else {
  4603 + if (zdsjAT - zdsjT > 1000) {
  4604 + map.put("fast", zdsjT - zdsjAT + 1440);
  4605 + map.put("slow", "");
  4606 + } else {
  4607 + map.put("fast", "");
  4608 + map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  4609 + }
  4610 + }
  4611 + } else {
  4612 + map.put("fast", "");
  4613 + map.put("slow", "");
  4614 + }
  4615 + listMap.add(map);
  4616 + } catch (Exception e) {
  4617 + e.printStackTrace();
  4618 + }
  4619 + }
  4620 + jhlc += jh;
  4621 + yygl += sj;
  4622 + if (jh > sj) {
  4623 + remgl += jh - sj;
  4624 + } else {
  4625 + addgl += sj - jh;
  4626 + }
  4627 + }
  4628 + }
  4629 +
  4630 +
  4631 + List<Ylxxb> listYlxxb = ylxxbRepository.queryListYlxxb(clZbh, date);
  4632 + Double jzl = 0.0;
  4633 + for (int t = 0; t < listYlxxb.size(); t++) {
  4634 + Ylxxb y = listYlxxb.get(t);
  4635 + jzl += y.getJzl();
  4636 + }
  4637 +
  4638 + //计算里程和班次数,并放入Map里
  4639 + map = findKMBCQp(clZbh, date, line);
  4640 + map.put("jzl", jzl);
  4641 +// map.put("jhlc", format.format(jhlc + jcclc));
  4642 +// map.put("yygljh", format.format(jhlc));
  4643 +// map.put("ssgl", format.format(remMileage));
  4644 +// map.put("ksgl", format.format(ksgl));
  4645 +// map.put("yyglsj", format.format(yygl));
  4646 +// map.put("jhbc", jhbc);
  4647 +// map.put("jcclc", jcclc);
  4648 +//
  4649 +// map.put("ljgl", format.format(addMileage));
  4650 +// map.put("ssbc", cjbc);
  4651 +// map.put("ysgl", format.format(yygl));
  4652 +// map.put("sjbc", jhbc - cjbc + ljbc);
  4653 +// map.put("zgl", format.format(yygl + ksgl + jcclc));
  4654 +// map.put("ljbc", ljbc);
  4655 +
  4656 + String zdp = "", zwdp = "", wdp = "";
  4657 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4658 + List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59");
  4659 + try {
  4660 + Long fcsj1 = sdf.parse(date + " 03:00").getTime();
  4661 + Long fcsj2 = sdf.parse(date + " 11:00").getTime();
  4662 + Long fcsj3 = sdf.parse(date + " 22:00").getTime();
  4663 + for (int i = 0; i < listDtuy.size(); i++) {
  4664 + DutyEmployee t = listDtuy.get(i);
  4665 + Long ts = t.getTs();
  4666 + if (ts > fcsj1 && ts < fcsj2) {
  4667 + if (zdp.indexOf(t.getuName()) == -1) {
  4668 + zdp += t.getuName() + ",";
  4669 +
  4670 + }
  4671 + } else if (ts > fcsj2 && ts < fcsj3) {
  4672 + if (zwdp.indexOf(t.getuName()) == -1) {
  4673 + zwdp += t.getuName() + ",";
  4674 + }
  4675 + } else {
  4676 + if (wdp.indexOf(t.getuName()) == -1) {
  4677 + wdp += t.getuName() + ",";
  4678 + }
  4679 + }
  4680 + }
  4681 + } catch (ParseException e) {
  4682 + // TODO Auto-generated catch block
  4683 + e.printStackTrace();
  4684 + }
  4685 + map.put("zdp", zdp);
  4686 + map.put("zwdp", zwdp);
  4687 + map.put("wdp", wdp);
  4688 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  4689 + list.add(listMap.iterator());
  4690 + ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/waybill_qingpu.xls",
  4691 + path + "export/" + date + "-" + clZbh + "-行车路单.xls");
  4692 +
  4693 + return scheduleRealInfos;
  4694 + }
  4695 +
  4696 + @Override
  4697 + public Map<String, Object> findKMBCQp(String clZbh, String date, String line) {
  4698 + // TODO Auto-generated method stub
  4699 + List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4700 + DecimalFormat format = new DecimalFormat("0.00");
  4701 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4702 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4703 + int jhbc = 0, cjbc = 0, ljbc = 0, sjbc = 0;
  4704 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0, ljjcclc = 0, jhjcclc = 0;
  4705 + double addMileage = 0, remMileage = 0, addgl = 0, remgl = 0;
  4706 + Map<String, Object> map = new HashMap<String, Object>();
  4707 + jhlc = culateMieageService.culateJhgl(lists);
  4708 + jcclc = culateMieageService.culateJccgl(lists);
  4709 + jhjcclc = culateMieageService.culateJhJccgl(lists);
  4710 + remMileage = culateMieageService.culateLbgl(lists);
  4711 + ksgl = culateMieageService.culateKsgl(lists);
  4712 + yygl = culateMieageService.culateSjgl(lists);
  4713 + jhbc = culateMieageService.culateJhbc(lists, "");
  4714 + addMileage = culateMieageService.culateLjgl(lists);
  4715 + cjbc = culateMieageService.culateLbbc(lists);
  4716 + sjbc = culateMieageService.culateSjbc(lists, "");
  4717 + ljbc = culateMieageService.culateLjbc(lists, "");
  4718 + double zyygl = Arith.add(yygl, addMileage);
  4719 + double zksgl = Arith.add(ksgl, jcclc);
  4720 + map.put("jhlc", Arith.add(jhlc, jhjcclc));
  4721 + map.put("yygljh", jhlc);
  4722 + map.put("ssgl", remMileage);
  4723 + map.put("ksgl", ksgl);
  4724 + map.put("yyglsj", Arith.add(yygl, addMileage));
  4725 + map.put("jcclc", jcclc);
  4726 + map.put("jhbc", jhbc);
  4727 + map.put("ljgl", addMileage);
  4728 + map.put("ssbc", cjbc);
  4729 + map.put("ysgl", Arith.add(yygl, addMileage));
  4730 + map.put("sjbc", sjbc);
  4731 + map.put("zgl", Arith.add(zyygl, zksgl));
  4732 + map.put("ljbc", ljbc);
  4733 +
  4734 + return map;
  4735 + }
  4736 +
  4737 + @Override
  4738 + public List<ScheduleRealInfo> queryListWaybillQp(String clZbh, String date, String line) {
  4739 + // TODO Auto-generated method stub
  4740 + DecimalFormat format = new DecimalFormat("0.00");
  4741 + List<ScheduleRealInfo> list = null;
  4742 + list = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4743 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  4744 + for (int i = 0; i < list.size(); i++) {
  4745 + ScheduleRealInfo s = list.get(i);
  4746 + if (!(s.getBcType().equals("in") || s.getBcType().equals("out"))) {
  4747 + String remarks = "";
  4748 + Double sjlc = 0.0;
  4749 + if (s.getRemarks() != null) {
  4750 + remarks += s.getRemarks();
  4751 + }
  4752 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  4753 + if (!childTaskPlans.isEmpty()) {
  4754 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4755 + while (it.hasNext()) {
  4756 + ChildTaskPlan c = it.next();
  4757 + if (c.getRemarks() != null && c.getRemarks().length() > 0) {
  4758 + if (remarks.indexOf(c.getRemarks()) == -1) {
  4759 + remarks += c.getRemarks();
  4760 + }
  4761 + }
  4762 +
  4763 + if (!c.isDestroy()) {
  4764 + if (c.getMileageType().equals("service")) {
  4765 + sjlc += c.getMileage() == null ? 0 : c.getMileage();
  4766 + }
  4767 + }
  4768 +
  4769 + }
  4770 + } else {
  4771 + if (s.getStatus() != -1) {
  4772 + sjlc = s.getJhlc();
  4773 + }
  4774 + }
  4775 + s.setSjlc(format.format(sjlc));
  4776 + s.setRemarks(remarks);
  4777 + newList.add(s);
  4778 + }
  4779 +
  4780 + }
  4781 +
  4782 + return newList;
  4783 + }
  4784 +
  4785 + @Override
  4786 + public Map<String, Object> MapById(Long id) {
  4787 + // TODO Auto-generated method stub
  4788 + Map<String, Object> dMap=new HashMap<>();
  4789 + dMap.put("dGroup_eq", "oilType");
  4790 + Iterator<Dictionary> it= dictionaryService.list(dMap).iterator();
  4791 + while (it.hasNext()) {
  4792 + Dictionary d=it.next();
  4793 + dMap.put(d.getdCode(), d.getdName());
  4794 + }
  4795 + Map<String, Object> map = new HashMap<String, Object>();
  4796 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4797 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  4798 + String xlbm = s.getXlBm();
  4799 + String fcrq = s.getScheduleDateStr();
  4800 +
  4801 + int type = 2;
  4802 + Double ccyl = 0.0;
  4803 + Double jcyl = 0.0;
  4804 + Double yh = 0.0;
  4805 + Double jzl = 0.0;
  4806 + Double zlc = 0.0;
  4807 + String rylx="";
  4808 + List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
  4809 + if (listCars.size() > 0) {
  4810 + if (listCars.get(0).getSfdc() != null) {
  4811 + if (listCars.get(0).getSfdc()) {
  4812 + List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  4813 + type = 1;
  4814 + for (int i = 0; i < listDlb.size(); i++) {
  4815 + Dlb d = listDlb.get(i);
  4816 + if (d.getLp() == null) {
  4817 + ccyl = Arith.add(ccyl, d.getCzcd());
  4818 + jcyl = Arith.add(jcyl, d.getJzcd());
  4819 + yh = Arith.add(yh, d.getHd());
  4820 + jzl = Arith.add(jzl, d.getCdl());
  4821 + zlc = Arith.add(zlc, d.getZlc());
  4822 + } else {
  4823 + if (d.getLp().equals(s.getLpName())) {
  4824 + ccyl = Arith.add(ccyl, d.getCzcd());
  4825 + jcyl = Arith.add(jcyl, d.getJzcd());
  4826 + yh = Arith.add(yh, d.getHd());
  4827 + jzl = Arith.add(jzl, d.getCdl());
  4828 + zlc = Arith.add(zlc, d.getZlc());
  4829 + }
  4830 + }
  4831 +
  4832 + }
  4833 + } else {
  4834 + List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  4835 + type = 0;
  4836 + for (int i = 0; i < listYlb.size(); i++) {
  4837 + Ylb y = listYlb.get(i);
  4838 + if (y.getLp() == null) {
  4839 + ccyl = Arith.add(ccyl, y.getCzyl());
  4840 + jcyl = Arith.add(jcyl, y.getJzyl());
  4841 + yh = Arith.add(yh, y.getYh());
  4842 + jzl = Arith.add(jzl, y.getJzl());
  4843 + zlc = Arith.add(zlc, y.getZlc());
  4844 + if(dMap.get(y.getRylx())!=null)
  4845 + rylx =dMap.get(y.getRylx()).toString();
  4846 + } else {
  4847 + if (y.getLp().equals(s.getLpName())) {
  4848 + ccyl = Arith.add(ccyl, y.getCzyl());
  4849 + jcyl = Arith.add(jcyl, y.getJzyl());
  4850 + yh = Arith.add(yh, y.getYh());
  4851 + jzl = Arith.add(jzl, y.getJzl());
  4852 + zlc = Arith.add(zlc, y.getZlc());
  4853 + if(dMap.get(y.getRylx())!=null)
  4854 + rylx =dMap.get(y.getRylx()).toString();
  4855 + }
  4856 + }
  4857 + }
  4858 + }
  4859 + }
  4860 + }
  4861 +
  4862 + map.put("rylx", "加注类别:"+rylx);
  4863 + map.put("jzl", jzl);
  4864 + map.put("yh", yh);
  4865 + map.put("ccyl", ccyl);
  4866 + map.put("jcyl", jcyl);
  4867 + map.put("type", type);
  4868 + map.put("zlc", zlc);
  4869 + map.put("xlName", s.getXlName());
  4870 + map.put("clZbh", s.getClZbh());
  4871 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  4872 + map.put("fcsjActual", s.getFcsjActual());
  4873 + map.put("zdzName", s.getZdzName());
  4874 + map.put("scheduleDate", s.getScheduleDateStr());
  4875 + map.put("lpName", s.getLpName());
  4876 + String zdp = "", zwdp = "", wdp = "";
  4877 + String zdpT = "", zwdpT = "", wdpT = "";
  4878 + String dbdp = "";
  4879 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  4880 + try {
  4881 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  4882 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  4883 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  4884 + for (int i = 0; i < list.size(); i++) {
  4885 + DutyEmployee t = list.get(i);
  4886 + if (dbdp.indexOf(t.getuName()) == -1) {
  4887 + if (!(dbdp.length() > 0)) {
  4888 + dbdp = t.getuName();
  4889 + } else {
  4890 + dbdp += "," + t.getuName();
  4891 + }
  4892 + }
  4893 + Long ts = t.getTs();
  4894 + if (ts > fcsj1 && ts < fcsj2) {
  4895 + if (zdp.indexOf(t.getuName()) == -1) {
  4896 + if (!(zdp.length() > 0)) {
  4897 + zdpT = t.getuName() + "...";
  4898 + }
  4899 + zdp += t.getuName() + ",";
  4900 +
  4901 + }
  4902 + } else if (ts > fcsj2 && ts < fcsj3) {
  4903 + if (zwdp.indexOf(t.getuName()) == -1) {
  4904 + if (!(zwdp.length() > 0)) {
  4905 + zwdpT = t.getuName() + "...";
  4906 + }
  4907 + zwdp += t.getuName() + ",";
  4908 + }
  4909 + } else {
  4910 + if (wdp.indexOf(t.getuName()) == -1) {
  4911 + if (!(wdp.length() > 0)) {
  4912 + wdpT = t.getuName() + "...";
  4913 + }
  4914 + wdp += t.getuName() + ",";
  4915 + }
  4916 + }
  4917 + }
  4918 + } catch (ParseException e) {
  4919 + // TODO Auto-generated catch block
  4920 + e.printStackTrace();
  4921 + }
  4922 + map.put("zdp", zdp);
  4923 + map.put("zwdp", zwdp);
  4924 + map.put("wdp", wdp);
  4925 + map.put("zdpT", zdpT);
  4926 + map.put("zwdpT", zwdpT);
  4927 + map.put("wdpT", wdpT);
  4928 + map.put("dbdp", dbdp);
  4929 + return map;
  4930 + }
  4931 +
  4932 + @Override
  4933 + public Map<String, Object> MapByIdQp(Long id) {
  4934 + // TODO Auto-generated method stub
  4935 + Map<String, Object> map = new HashMap<String, Object>();
  4936 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4937 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  4938 + String xlbm = s.getXlBm();
  4939 + String fcrq = s.getScheduleDateStr();
  4940 +
  4941 + int type = 0;
  4942 + Double ccyl = 0.0;
  4943 + Double jcyl = 0.0;
  4944 + Double yh = 0.0;
  4945 + Double jzl = 0.0;
  4946 + Double zlc = 0.0;
  4947 +// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4948 +// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4949 +// if(listYlb.size()>0){
  4950 +// type=0;
  4951 +// for (int i = 0; i < listYlb.size(); i++) {
  4952 +// Ylb y = listYlb.get(i);
  4953 +// if(y.getLp()==null){
  4954 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4955 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4956 +// yh =Arith.add(yh ,y.getYh());
  4957 +// jzl =Arith.add(jzl, y.getJzl());
  4958 +// zlc =Arith.add(zlc, y.getZlc());
  4959 +// }else{
  4960 +// if(y.getLp().equals(s.getLpName())){
  4961 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4962 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4963 +// yh =Arith.add(yh ,y.getYh());
  4964 +// jzl =Arith.add(jzl, y.getJzl());
  4965 +// zlc =Arith.add(zlc, y.getZlc());
  4966 +// }
  4967 +// }
  4968 +//
  4969 +// }
  4970 +// }else{
  4971 +// type=1;
  4972 +// for (int i = 0; i < listDlb.size(); i++) {
  4973 +// Dlb d=listDlb.get(i);
  4974 +// if(d.getLp()==null){
  4975 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4976 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4977 +// yh =Arith.add(yh ,d.getHd());
  4978 +// jzl =Arith.add(jzl, d.getCdl());
  4979 +// zlc =Arith.add(zlc, d.getZlc());
  4980 +// }else{
  4981 +// if(d.getLp().equals(s.getLpName())){
  4982 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4983 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4984 +// yh =Arith.add(yh ,d.getHd());
  4985 +// jzl =Arith.add(jzl, d.getCdl());
  4986 +// zlc =Arith.add(zlc, d.getZlc());
  4987 +// }
  4988 +// }
  4989 +//
  4990 +// }
  4991 +// }
  4992 +
  4993 + List<Ylxxb> listylxxb = ylxxbRepository.queryListYlxxb(s.getClZbh(), fcrq);
  4994 + for (int i = 0; i < listylxxb.size(); i++) {
  4995 + Ylxxb t = listylxxb.get(i);
  4996 + jzl = Arith.add(jzl, t.getJzl());
  4997 + }
  4998 + map.put("jzl", jzl);
  4999 + map.put("yh", yh);
  5000 + map.put("ccyl", ccyl);
  5001 + map.put("jcyl", jcyl);
  5002 + map.put("type", type);
  5003 + map.put("zlc", zlc);
  5004 + map.put("xlName", s.getXlName());
  5005 + map.put("clZbh", s.getClZbh());
  5006 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  5007 + map.put("fcsjActual", s.getFcsjActual());
  5008 + map.put("zdzName", s.getZdzName());
  5009 + map.put("scheduleDate", s.getScheduleDateStr());
  5010 + map.put("lpName", s.getLpName());
  5011 + String zdp = "", zwdp = "", wdp = "";
  5012 + String zdpT = "", zwdpT = "", wdpT = "";
  5013 + String dbdp = "";
  5014 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  5015 + try {
  5016 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  5017 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  5018 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  5019 + for (int i = 0; i < list.size(); i++) {
  5020 + DutyEmployee t = list.get(i);
  5021 + if (dbdp.indexOf(t.getuName()) == -1) {
  5022 + if (!(dbdp.length() > 0)) {
  5023 + dbdp = t.getuName();
  5024 + } else {
  5025 + dbdp += "," + t.getuName();
  5026 + }
  5027 + }
  5028 + Long ts = t.getTs();
  5029 + if (ts > fcsj1 && ts < fcsj2) {
  5030 + if (zdp.indexOf(t.getuName()) == -1) {
  5031 + if (!(zdp.length() > 0)) {
  5032 + zdpT = t.getuName() + "...";
  5033 + }
  5034 + zdp += t.getuName() + ",";
  5035 +
  5036 + }
  5037 + } else if (ts > fcsj2 && ts < fcsj3) {
  5038 + if (zwdp.indexOf(t.getuName()) == -1) {
  5039 + if (!(zwdp.length() > 0)) {
  5040 + zwdpT = t.getuName() + "...";
  5041 + }
  5042 + zwdp += t.getuName() + ",";
  5043 + }
  5044 + } else {
  5045 + if (wdp.indexOf(t.getuName()) == -1) {
  5046 + if (!(wdp.length() > 0)) {
  5047 + wdpT = t.getuName() + "...";
  5048 + }
  5049 + wdp += t.getuName() + ",";
  5050 + }
  5051 + }
  5052 + }
  5053 + } catch (ParseException e) {
  5054 + // TODO Auto-generated catch block
  5055 + e.printStackTrace();
  5056 + }
  5057 + map.put("zdp", zdp);
  5058 + map.put("zwdp", zwdp);
  5059 + map.put("wdp", wdp);
  5060 + map.put("zdpT", zdpT);
  5061 + map.put("zwdpT", zwdpT);
  5062 + map.put("wdpT", wdpT);
  5063 + map.put("dbdp", dbdp);
  5064 + return map;
  5065 + }
  5066 +
  5067 + @Override
  5068 + public List<Map<String, Object>> scheduleDailyQp(String line, String date) {
  5069 + // TODO Auto-generated method stub
  5070 + List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  5071 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleDailyQp(line, date);
  5072 + Map<String, Object> map = null;
  5073 + String lp = "lp";
  5074 + String jgh = "jgh";
  5075 + String clzbh = "clzbh";
  5076 + int bcs = 0;
  5077 + String thclzbh = "";
  5078 + String sgh = "sgh";
  5079 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5080 + ScheduleRealInfo scheduleRealInfo = scheduleRealInfos.get(i);
  5081 + if (scheduleRealInfo.getLpName().equals(lp)) {
  5082 + bcs++;
  5083 + String fcsj = scheduleRealInfo.getFcsj();
  5084 +
  5085 + if (!clzbh.equals(scheduleRealInfo.getClZbh())) {
  5086 + clzbh = scheduleRealInfo.getClZbh();
  5087 + if (thclzbh == "") {
  5088 + thclzbh += scheduleRealInfo.getClZbh() + ",";
  5089 + } else {
  5090 + thclzbh += scheduleRealInfo.getClZbh();
  5091 + }
  5092 + map.put("thclzbh", thclzbh);
  5093 + }
  5094 +
  5095 + if (!jgh.equals(scheduleRealInfo.getjGh())) {
  5096 + jgh = scheduleRealInfo.getjGh();
  5097 + if (map.get("jjb2") != null) {
  5098 + map.put("jjb3", scheduleRealInfo.getjGh() + "/" +
  5099 + scheduleRealInfo.getFcsjActual());
  5100 +
  5101 + } else {
  5102 + map.put("jjb2", scheduleRealInfo.getjGh() + "/" +
  5103 + scheduleRealInfo.getFcsjActual());
  5104 + }
  5105 +
  5106 + }
  5107 +
  5108 + if (scheduleRealInfo.getsGh() != null) {
  5109 + if (!scheduleRealInfo.getsGh().equals(sgh)) {
  5110 + sgh = scheduleRealInfo.getsGh() == null ? "" : scheduleRealInfo.getsGh();
  5111 + if (!sgh.equals("")) {
  5112 + if (map.get("sjb1") != null) {
  5113 + if (map.get("sjb2") != null) {
  5114 + map.put("sjb3", scheduleRealInfo.getsGh() + "/" +
  5115 + scheduleRealInfo.getFcsjActual());
  5116 + } else {
  5117 + map.put("sjb2", scheduleRealInfo.getsGh() + "/" +
  5118 + scheduleRealInfo.getFcsjActual());
  5119 + }
  5120 + } else {
  5121 + map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
  5122 + scheduleRealInfo.getFcsjActual());
  5123 + }
  5124 + }
  5125 + }
  5126 + }
  5127 + if (scheduleRealInfo.getFcsjActual() != null) {
  5128 + String fcsjs[] = fcsj.split(":");
  5129 + String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
  5130 + int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
  5131 + int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
  5132 + map.put("cz" + bcs, b - a);
  5133 + } else {
  5134 + map.put("cz" + bcs, "无");
  5135 + }
  5136 + map.put("lp", scheduleRealInfo.getLpName());
  5137 + map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
  5138 + map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
  5139 +
  5140 + if (i < scheduleRealInfos.size() - 1) {
  5141 + if (!scheduleRealInfos.get(i + 1).getLpName().equals
  5142 + (scheduleRealInfos.get(i).getLpName())) {
  5143 + list.add(map);
  5144 + lp = "lp";
  5145 + jgh = "jgh";
  5146 + clzbh = "clzbh";
  5147 + bcs = 0;
  5148 + thclzbh = "";
  5149 + sgh = "sgh";
  5150 + }
  5151 + } else {
  5152 + list.add(map);
  5153 + }
  5154 + } else {
  5155 + bcs = 1;
  5156 + map = new HashMap<String, Object>();
  5157 + lp = scheduleRealInfo.getLpName();
  5158 + jgh = scheduleRealInfo.getjGh();
  5159 + clzbh = scheduleRealInfo.getClZbh();
  5160 + if (scheduleRealInfo.getsGh() != null) {
  5161 + sgh = scheduleRealInfo.getsGh();
  5162 + map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
  5163 + scheduleRealInfo.getFcsjActual());
  5164 + }
  5165 + String fcsj = scheduleRealInfo.getFcsj();
  5166 + scheduleRealInfo.getFcsjActual();
  5167 + map.put("jjb1", jgh + "/" + scheduleRealInfo.getFcsjActual());
  5168 + map.put("cccl", clzbh);
  5169 +
  5170 + if (scheduleRealInfo.getFcsjActual() != null) {
  5171 + String fcsjs[] = fcsj.split(":");
  5172 + String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
  5173 + int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
  5174 + int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
  5175 + map.put("cz" + bcs, b - a);
  5176 + } else {
  5177 + map.put("cz" + bcs, "无");
  5178 + }
  5179 +
  5180 +
  5181 + map.put("lp", scheduleRealInfo.getLpName());
  5182 + map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
  5183 + map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
  5184 +
  5185 + if (i < scheduleRealInfos.size() - 1) {
  5186 + if (!scheduleRealInfos.get(i + 1).getLpName().equals
  5187 + (scheduleRealInfos.get(i).getLpName())) {
  5188 + list.add(map);
  5189 + lp = "lp";
  5190 + jgh = "jgh";
  5191 + clzbh = "clzbh";
  5192 + bcs = 0;
  5193 + thclzbh = "";
  5194 + sgh = "sgh";
  5195 + }
  5196 + } else {
  5197 + list.add(map);
  5198 + }
  5199 + }
  5200 +
  5201 + }
  5202 + return list;
  5203 + }
  5204 +
  5205 +
  5206 + @Override
  5207 + public List<Map<String, Object>> scheduleDailyExport(Map<String, Object> map) {
  5208 + String line = map.get("line").toString();
  5209 + String date = map.get("date").toString();
  5210 + String xlName = map.get("xlName").toString();
  5211 + String state = map.get("state").toString();
  5212 + String type = map.get("type").toString();
  5213 + String genre =map.get("genre").toString();
  5214 + String df="";
  5215 + if(map.get("df")!=null){
  5216 + df=map.get("df").toString();
  5217 + }
  5218 +
  5219 + List<Map<String, Object>> dataList2 = new ArrayList<Map<String, Object>>();
  5220 + List<Map<String, Object>> dataList3 = new ArrayList<Map<String, Object>>();
  5221 + List<Map<String, Object>> list1 = this.statisticsDaily(line, date, xlName, null);
  5222 + List<ScheduleRealInfo> list2 = this.queryUserInfo(line, date, state);
  5223 + List<ScheduleRealInfo> list3 = new ArrayList<ScheduleRealInfo>();
  5224 + if(genre.equals("qp"))
  5225 + list3=this.realScheduleListQp(line, date);
  5226 + else if(genre.equals("zrw"))
  5227 + list3=this.realScheduleList_zrw(line, date);
  5228 + else
  5229 + list3=this.realScheduleList(line, date);
  5230 + Map<String, Object> nMap = new HashMap<String, Object>();
  5231 + nMap.put("date", xlName + date);
  5232 + nMap.put("jls", list1.get(0).get("jls"));
  5233 + nMap.put("sjgl", list1.get(0).get("sjgl"));
  5234 + for (Map<String, Object> m : list1) {
  5235 +// m.put("ssgl", m.get("ssgl"));
  5236 +// m.put("ssbc", m.get("ssbc"));
  5237 +// m.put("ssgl_lz", m.get("ssgl_lz") + " / " + m.get("ssbc_lz"));
  5238 +// m.put("ssgl_dm", m.get("ssgl_dm") + " / " + m.get("ssbc_dm"));
  5239 +// m.put("ssgl_gz", m.get("ssgl_gz") + " / " + m.get("ssbc_gz"));
  5240 +// m.put("ssgl_jf", m.get("ssgl_jf") + " / " + m.get("ssbc_jf"));
  5241 +// m.put("ssgl_zs", m.get("ssgl_zs") + " / " + m.get("ssbc_zs"));
  5242 +// m.put("ssgl_qr", m.get("ssgl_qr") + " / " + m.get("ssbc_qr"));
  5243 +// m.put("ssgl_qc", m.get("ssgl_qc") + " / " + m.get("ssbc_qc"));
  5244 +// m.put("ssgl_kx", m.get("ssgl_kx") + " / " + m.get("ssbc_kx"));
  5245 +// m.put("ssgl_qh", m.get("ssgl_qh") + " / " + m.get("ssbc_qh"));
  5246 +// m.put("ssgl_yw", m.get("ssgl_yw") + " / " + m.get("ssbc_yw"));
  5247 +// m.put("ssgl_other", m.get("ssgl_other") + " / " + m.get("ssbc_other"));
  5248 + }
  5249 +
  5250 + int size = 0;
  5251 + Map<String, Object> tempMap = new HashMap<String, Object>();
  5252 + for (int i = 0; i < list2.size(); i++) {
  5253 + ScheduleRealInfo s = list2.get(i);
  5254 + if (size == 5) {
  5255 + size = 0;
  5256 + dataList2.add(tempMap);
  5257 + tempMap = new HashMap<String, Object>();
  5258 + }
  5259 + tempMap.put("lp" + size, s.getLpName());
  5260 + tempMap.put("ch" + size, s.getClZbh());
  5261 + tempMap.put("jz" + size, s.getjGh() + "/" + s.getjName());
  5262 + tempMap.put("sz" + size, "");
  5263 + tempMap.put("jw" + size, "");
  5264 + tempMap.put("sw" + size, "");
  5265 +
  5266 + size++;
  5267 + }
  5268 + if (size < 5) {
  5269 + for (; size < 5; size++) {
  5270 + tempMap.put("lp" + size, "");
  5271 + tempMap.put("ch" + size, "");
  5272 + tempMap.put("jz" + size, "");
  5273 + tempMap.put("sz" + size, "");
  5274 + tempMap.put("jw" + size, "");
  5275 + tempMap.put("sw" + size, "");
  5276 + }
  5277 + }
  5278 +
  5279 + dataList2.add(tempMap);
  5280 +/*
  5281 + size = 0;
  5282 + tempMap = new HashMap<String, Object>();
  5283 + for (ScheduleRealInfo schedule : list3) {
  5284 + if (size == 3) {
  5285 + size = 0;
  5286 + dataList3.add(tempMap);
  5287 + tempMap = new HashMap<String, Object>();
  5288 + }
  5289 + tempMap.put("lpName" + size, schedule.getLpName());
  5290 + tempMap.put("qdzName" + size, schedule.getQdzName());
  5291 + tempMap.put("zdsj" + size, schedule.getZdsj());
  5292 + tempMap.put("zdsjActual" + size, schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "");
  5293 + tempMap.put("zdsjk" + size, "");
  5294 + tempMap.put("zdsjm" + size, "");
  5295 + tempMap.put("fcsj" + size, schedule.getFcsj());
  5296 + String fcsjActural=schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
  5297 + String bcType=schedule.getBcType()!=null?schedule.getBcType():"";
  5298 + if(bcType.equals("in")){
  5299 + fcsjActural=fcsjActural+"(进)";
  5300 + }
  5301 + if(bcType.equals("out")){
  5302 + fcsjActural=fcsjActural+"(出)";
  5303 + }
  5304 + tempMap.put("fcsjActual" + size, fcsjActural);
  5305 + tempMap.put("fcsjk" + size, "");
  5306 + tempMap.put("fcsjm" + size, "");
  5307 + tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : "");
  5308 +
  5309 + size++;
  5310 + }
  5311 + if (size < 3) {
  5312 + for (; size < 3; size++) {
  5313 + tempMap.put("lpName" + size, "");
  5314 + tempMap.put("qdzName" + size, "");
  5315 + tempMap.put("zdsj" + size, "");
  5316 + tempMap.put("zdsjActual" + size, "");
  5317 + tempMap.put("zdsjk" + size, "");
  5318 + tempMap.put("zdsjm" + size, "");
  5319 + tempMap.put("fcsj" + size, "");
  5320 + tempMap.put("fcsjActual" + size, "");
  5321 + tempMap.put("fcsjk" + size, "");
  5322 + tempMap.put("fcsjm" + size, "");
  5323 + tempMap.put("remarks" + size, "");
  5324 + }
  5325 + }
  5326 +*/
  5327 +
  5328 + size = 0;
  5329 + tempMap = new HashMap<String, Object>();
  5330 + for (ScheduleRealInfo schedule : list3) {
  5331 + int x = size % 3;
  5332 + if (x == 0 && size > 0) {
  5333 + dataList3.add(tempMap);
  5334 + tempMap = new HashMap<String, Object>();
  5335 + }
  5336 + tempMap.put("lpName" + x, schedule.getLpName());
  5337 + tempMap.put("qdzName" + x, schedule.getQdzName());
  5338 + tempMap.put("zdsj" + x, schedule.getZdsj());
  5339 + String zdsjActual = schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "";
  5340 + tempMap.put("zdsjActual" + x, zdsjActual);
  5341 +
  5342 + String zdsjk = "";
  5343 + String zdsjm = "";
  5344 + if (!zdsjActual.equals("")) {
  5345 + String[] zdsj_s = schedule.getZdsj().split(":");
  5346 + String[] zdsjActual_s = zdsjActual.split(":");
  5347 + Long zdsj_ = Long.parseLong(zdsj_s[0]) * 60 + Long.parseLong(zdsj_s[1]);
  5348 + Long zdsjActual_ = Long.parseLong(zdsjActual_s[0]) * 60 + Long.parseLong(zdsjActual_s[1]);
  5349 + if ((zdsj_ - zdsjActual_) > 0) {
  5350 + if(zdsj_ - zdsjActual_>1200){
  5351 + zdsjm=String.valueOf(1440-(zdsj_-zdsjActual_));
  5352 + }else{
  5353 + zdsjk = String.valueOf(zdsj_ - zdsjActual_);
  5354 + }
  5355 + } else {
  5356 + if(zdsjActual_ - zdsj_>1200){
  5357 + zdsjk =String.valueOf(1440-(zdsjActual_ - zdsj_));
  5358 + }else{
  5359 + zdsjm = String.valueOf(zdsjActual_ - zdsj_);
  5360 + }
  5361 + }
  5362 + }
  5363 + tempMap.put("zdsjk" + x, zdsjk);
  5364 + tempMap.put("zdsjm" + x, zdsjm.equals("0")?"":zdsjm);
  5365 + tempMap.put("fcsj" + x, schedule.getFcsj());
  5366 + String fcsjActural = schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
  5367 + String bcType = schedule.getBcType() != null ? schedule.getBcType() : "";
  5368 + String fcsjActuralstr = "";
  5369 + if (bcType.equals("in")) {
  5370 + fcsjActuralstr = fcsjActural + "(进)";
  5371 + } else if (bcType.equals("out")) {
  5372 + fcsjActuralstr = fcsjActural + "(出)";
  5373 + } else {
  5374 + fcsjActuralstr = fcsjActural;
  5375 + }
  5376 + tempMap.put("fcsjActual" + x, fcsjActuralstr);
  5377 + String fcsjk = "";
  5378 + String fcsjm = "";
  5379 + String dfsjk ="";
  5380 + String dfsjm="";
  5381 + if (!fcsjActural.equals("")) {
  5382 + String[] fcsj_s = schedule.getFcsj().split(":");
  5383 + String[] fcsjActural_s = fcsjActural.split(":");
  5384 + Long fcsj_ = Long.parseLong(fcsj_s[0]) * 60 + Long.parseLong(fcsj_s[1]);
  5385 + Long fcsjActural_ = Long.parseLong(fcsjActural_s[0]) * 60 + Long.parseLong(fcsjActural_s[1]);
  5386 + if ((fcsj_ - fcsjActural_) > 0) {
  5387 + if(fcsj_ - fcsjActural_>1200){
  5388 + fcsjm=String.valueOf(1440-(fcsj_ - fcsjActural_));
  5389 + }else{
  5390 + fcsjk = String.valueOf(fcsj_ - fcsjActural_);
  5391 + }
  5392 + } else {
  5393 + if(fcsjActural_ - fcsj_>1200){
  5394 + fcsjk =String.valueOf(1440-(fcsjActural_ - fcsj_));
  5395 + }
  5396 + else{
  5397 + fcsjm = String.valueOf(fcsjActural_ - fcsj_);
  5398 + }
  5399 + }
  5400 + if(df.equals("df")){
  5401 + String[] dfsj_s =schedule.getDfsj().split(":");
  5402 + Long dfsj_ = Long.parseLong(dfsj_s[0]) * 60 + Long.parseLong(dfsj_s[1]);
  5403 + if ((dfsj_ - fcsjActural_) > 0) {
  5404 + if(dfsj_ - fcsjActural_>1200){
  5405 + dfsjm=String.valueOf(1440-(dfsj_ - fcsjActural_));
  5406 + }else{
  5407 + dfsjk = String.valueOf(dfsj_ - fcsjActural_);
  5408 + }
  5409 + } else {
  5410 + if(fcsjActural_ - dfsj_>1200){
  5411 + dfsjk= String.valueOf(1440-(fcsjActural_ - dfsj_));
  5412 + }else{
  5413 + dfsjm = String.valueOf(fcsjActural_ - dfsj_);
  5414 + }
  5415 + }
  5416 + }
  5417 + }
  5418 + if(df.equals("df")){
  5419 + tempMap.put("dfsj"+x,schedule.getDfsj());
  5420 + tempMap.put("dfsjk" + x, dfsjk);
  5421 + tempMap.put("dfsjm" + x, dfsjm.equals("0")?"":dfsjm);
  5422 + }
  5423 + tempMap.put("fcsjk" + x, fcsjk);
  5424 + tempMap.put("fcsjm" + x, fcsjm.equals("0")?"":fcsjm);
  5425 + tempMap.put("remarks" + x, schedule.getRemark() != null ? schedule.getRemark() : "");
  5426 +
  5427 + size++;
  5428 + }
  5429 + if (tempMap.get("lpName0") != null) {
  5430 + if (tempMap.get("lpName1") == null) {
  5431 + tempMap.put("lpName1", "");
  5432 + tempMap.put("qdzName1", "");
  5433 + tempMap.put("zdsj1", "");
  5434 + tempMap.put("zdsjActual1", "");
  5435 + tempMap.put("zdsjk1", "");
  5436 + tempMap.put("zdsjm1", "");
  5437 + tempMap.put("fcsj1", "");
  5438 + tempMap.put("fcsjActual1", "");
  5439 + tempMap.put("fcsjk1", "");
  5440 + tempMap.put("fcsjm1", "");
  5441 + if(df.equals("df")){
  5442 + tempMap.put("dfsj1","");
  5443 + tempMap.put("dfsjk1" , "");
  5444 + tempMap.put("dfsjm1" , "");
  5445 + }
  5446 + tempMap.put("remarks1", "");
  5447 + }
  5448 + if (tempMap.get("lpName2") == null) {
  5449 + tempMap.put("lpName2", "");
  5450 + tempMap.put("qdzName2", "");
  5451 + tempMap.put("zdsj2", "");
  5452 + tempMap.put("zdsjActual2", "");
  5453 + tempMap.put("zdsjk2", "");
  5454 + tempMap.put("zdsjm2", "");
  5455 + tempMap.put("fcsj2", "");
  5456 + tempMap.put("fcsjActual2", "");
  5457 + tempMap.put("fcsjk2", "");
  5458 + tempMap.put("fcsjm2", "");
  5459 + if(df.equals("df")){
  5460 + tempMap.put("dfsj2","");
  5461 + tempMap.put("dfsjk2" , "");
  5462 + tempMap.put("dfsjm2" , "");
  5463 + }
  5464 + tempMap.put("remarks2", "");
  5465 + }
  5466 + dataList3.add(tempMap);
  5467 + }
  5468 +
  5469 + if (date.length() == 10) {
  5470 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
  5471 + String dbdp = "";
  5472 + try {
  5473 + for (int i = 0; i < list.size(); i++) {
  5474 + DutyEmployee t = list.get(i);
  5475 + if (dbdp.indexOf(t.getuName()) == -1) {
  5476 + if (!(dbdp.length() > 0)) {
  5477 + dbdp = t.getuName();
  5478 + } else {
  5479 + dbdp += "," + t.getuName();
  5480 + }
  5481 + }
  5482 + }
  5483 + } catch (Exception e) {
  5484 + // TODO: handle exception
  5485 + e.printStackTrace();
  5486 + }
  5487 + nMap.put("dbdp", dbdp);
  5488 + }
  5489 +
  5490 + if (type.equals("export")) {
  5491 + String lineName = "";
  5492 + if (map.containsKey("lineName"))
  5493 + lineName = "-" + map.get("lineName").toString() + "-";
  5494 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  5495 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  5496 + Map<String, Object> m = new HashMap<String, Object>();
  5497 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  5498 + ReportUtils ee = new ReportUtils();
  5499 + try {
  5500 + listI.add(list1.iterator());
  5501 + listI.add(dataList2.iterator());
  5502 + listI.add(dataList3.iterator());
  5503 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  5504 + String sourcePath = path + "mould/scheduleDaily.xls";
  5505 + if (date.length() == 7) {
  5506 + sdfMonth = new SimpleDateFormat("yyyy-MM");
  5507 + sdfSimple = new SimpleDateFormat("yyyyMM");
  5508 + sourcePath = path + "mould/scheduleDaily_m.xls";
  5509 + }
  5510 + if(df.equals("df")){
  5511 + sourcePath =path + "mould/scheduleDaily_df.xls";
  5512 + }
  5513 + ee.excelReplace(listI, new Object[]{nMap}, sourcePath,
  5514 + path + "export/" + sdfSimple.format(sdfMonth.parse(date)) + lineName + "调度日报.xls");
  5515 + } catch (Exception e) {
  5516 + // TODO: handle exception
  5517 + e.printStackTrace();
  5518 + }
  5519 + }
  5520 +
  5521 + return new ArrayList<Map<String, Object>>();
  5522 + }
  5523 +
  5524 + public void exportWaybill_pl(List<ScheduleRealInfo> listpl,
  5525 + String date, String jName, String clZbh, String lpName) {
  5526 + ReportUtils ee = new ReportUtils();
  5527 + ReportRelatedUtils rru = new ReportRelatedUtils();
  5528 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  5529 + List<ScheduleRealInfo> scheduleRealInfos = listpl;
  5530 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  5531 +// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
  5532 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  5533 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5534 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5535 + Set<ChildTaskPlan> cts = s.getcTasks();
  5536 + if (cts != null && cts.size() > 0) {
  5537 + lists.add(s);
  5538 + } else {
  5539 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  5540 + lists.add(s);
  5541 + }
  5542 + }
  5543 + }
  5544 + DecimalFormat format = new DecimalFormat("0.00");
  5545 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  5546 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  5547 + //计算里程和班次数,并放入Map里
  5548 + Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  5549 +
  5550 + map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
  5551 + map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
  5552 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  5553 + double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
  5554 + map.put("yygl", yygl);
  5555 + double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
  5556 + map.put("ksgl", ksgl);
  5557 + map.put("realMileage", Arith.add(yygl, ksgl));
  5558 + map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
  5559 + map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
  5560 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  5561 + int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
  5562 + map.put("sjbc", sjbc);
  5563 +// map=new HashMap<String,Object>();
  5564 +
  5565 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  5566 + String minfcsj = "02:00";
  5567 + List<Line> lineList = lineRepository.findLineByCode(listpl.get(0).getXlBm());
  5568 + if (lineList.size() > 0) {
  5569 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  5570 + + " id = ("
  5571 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  5572 + + ")";
  5573 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  5574 + }
  5575 + String[] minSjs = minfcsj.split(":");
  5576 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  5577 +
  5578 +
  5579 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5580 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5581 + String[] fcsj = s.getFcsj().split(":");
  5582 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  5583 +
  5584 + Long fscjT = 0L;
  5585 + if (fcsjL < minSj) {
  5586 + Calendar calendar = new GregorianCalendar();
  5587 + calendar.setTime(s.getScheduleDate());
  5588 + calendar.add(calendar.DATE, 1);
  5589 + s.setScheduleDate(calendar.getTime());
  5590 + try {
  5591 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  5592 + } catch (ParseException e) {
  5593 + // TODO Auto-generated catch block
  5594 + e.printStackTrace();
  5595 + }
  5596 +
  5597 + } else {
  5598 + try {
  5599 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  5600 + } catch (ParseException e) {
  5601 + // TODO Auto-generated catch block
  5602 + e.printStackTrace();
  5603 + }
  5604 + ;
  5605 + }
  5606 + s.setFcsjT(fscjT);
  5607 + }
  5608 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  5609 + Collections.sort(scheduleRealInfos, new ComparableReal());
  5610 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5611 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5612 + s.setAdjustExps(i + 1 + "");
  5613 + String remarks = "";
  5614 + if (s.getRemarks() != null) {
  5615 + remarks += s.getRemarks();
  5616 + }
  5617 +
  5618 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  5619 + if (!childTaskPlans.isEmpty()) {
  5620 + s.setFcsjActual("");
  5621 + s.setZdsjActual("");
  5622 + s.setJhlc(0.0);
  5623 + }
  5624 +
  5625 + if (s.isDestroy()) {
  5626 + s.setFcsjActual("");
  5627 + s.setZdsjActual("");
  5628 + s.setJhlc(0.0);
  5629 + remarks += "(烂班)";
  5630 + s.setRemarks(remarks);
  5631 + }
  5632 +
  5633 + listSchedule.add(s);
  5634 + //计算营运里程,空驶里程
  5635 + if (!childTaskPlans.isEmpty()) {
  5636 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  5637 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  5638 + Collections.sort(listit, new ComparableChild());
  5639 + for (int j = 0; j < listit.size(); j++) {
  5640 + ScheduleRealInfo t = new ScheduleRealInfo();
  5641 + ChildTaskPlan childTaskPlan = listit.get(j);
  5642 + if (childTaskPlan.isDestroy()) {
  5643 + t.setFcsjActual("");
  5644 + t.setZdsjActual("");
  5645 + t.setJhlc(0.0);
  5646 + } else {
  5647 + t.setFcsjActual(childTaskPlan.getStartDate());
  5648 + t.setZdsjActual(childTaskPlan.getEndDate());
  5649 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  5650 + }
  5651 + t.setQdzName(childTaskPlan.getStartStationName());
  5652 + t.setZdzName(childTaskPlan.getEndStationName());
  5653 + t.setRemarks(childTaskPlan.getRemarks());
  5654 + t.setAdjustExps("子");
  5655 + t.setjGh("");
  5656 + t.setjName("");
  5657 + t.setsGh("");
  5658 + t.setsName("");
  5659 + listSchedule.add(t);
  5660 + }
  5661 + }
  5662 + }
  5663 + Map<String, Object> maps;
  5664 + for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
  5665 + maps = new HashMap<String, Object>();
  5666 + try {
  5667 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  5668 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  5669 + maps = rru.getMapValue(scheduleRealInfo);
  5670 + maps.put("bcs", scheduleRealInfo.getAdjustExps());
  5671 + String zdsj = scheduleRealInfo.getZdsj();
  5672 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  5673 + if (zdsj != null && zdsjActual != null &&
  5674 + !zdsj.equals(zdsjActual) &&
  5675 + !zdsj.equals("") &&
  5676 + !zdsjActual.equals("")) {
  5677 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  5678 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  5679 + if (zdsj.compareTo(zdsjActual) > 0) {
  5680 + if (zdsjT - zdsjAT > 1000) {
  5681 + maps.put("fast", "");
  5682 + maps.put("slow", zdsjAT - zdsjT + 1440);
  5683 + } else {
  5684 + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  5685 + maps.put("slow", "");
  5686 + }
  5687 + } else {
  5688 + if (zdsjAT - zdsjT > 1000) {
  5689 + maps.put("fast", zdsjT - zdsjAT + 1440);
  5690 + maps.put("slow", "");
  5691 + } else {
  5692 + maps.put("fast", "");
  5693 + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  5694 + }
  5695 + }
  5696 + } else {
  5697 + maps.put("fast", "");
  5698 + maps.put("slow", "");
  5699 + }
  5700 + listMap.add(maps);
  5701 + } catch (Exception e) {
  5702 + e.printStackTrace();
  5703 + }
  5704 + }
  5705 +
  5706 +
  5707 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  5708 + list.add(listMap.iterator());
  5709 + String xls = "";
  5710 + if (map.get("type").toString().equals("0")) {
  5711 + xls = "waybill_minhang.xls";
  5712 + } else {
  5713 + xls = "waybill_minhang_dl.xls";
  5714 + }
  5715 + map.put("sheetName", jName + "-" + clZbh + "-" + lpName);
  5716 + ee.excelReplace(list, new Object[]{map}, path + "mould/" + xls,
  5717 + path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  5718 + }
  5719 +
  5720 + @Override
  5721 + public Map<String, Object> exportWaybillMore(Map<String, Object> map) {
  5722 + String date = map.get("date").toString();
  5723 + String line = map.get("line").toString();
  5724 + ReportUtils ee = new ReportUtils();
  5725 + List<List> lists = JSON.parseArray(map.get("strs").toString(), List.class);
  5726 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
  5727 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  5728 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  5729 + int num = 0;
  5730 + File file = null;
  5731 + try {
  5732 + while (true) {
  5733 + String fileUrl = path + "行车路单" + sdfSimple.format(sdfMonth.parse(date));
  5734 +// file = new File(fileUrl + (num == 0 ? "/" : "(" + num + ")/")); //新建文件夹
  5735 + file = new File(fileUrl + (num == 0 ? ".xls" : "(" + num + ").xls")); //新建excel文件
  5736 + if (file.exists()) { //判断是否已存在重名
  5737 + num++;
  5738 + } else {
  5739 + break;
  5740 + }
  5741 + }
  5742 +// file.mkdirs(); //创建
  5743 + List<ScheduleRealInfo> lists_line = scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
  5744 + List<File> files = new ArrayList<File>();
  5745 + for (List<String> list : lists) {
  5746 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  5747 + String jName = list.get(0);
  5748 + String clZbh = list.get(1);
  5749 + String lpName = list.get(2);
  5750 + String jGh = list.get(3);
  5751 + for (int i = 0; i < lists_line.size(); i++) {
  5752 + ScheduleRealInfo s = lists_line.get(i);
  5753 + if (s.getjGh().equals(jGh) && s.getClZbh().equals(clZbh) && s.getLpName().equals(lpName)) {
  5754 + newList.add(s);
  5755 + }
  5756 + }
  5757 + this.exportWaybill_pl(newList, date, jName, clZbh, lpName);
  5758 + File temp = new File(path + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  5759 + String fileName = file.getName();
  5760 + files.add(temp);
  5761 + }
  5762 + for (int i = 1; i < files.size(); i++) {
  5763 + File file1 = files.get(0);
  5764 + File file2 = files.get(i);
  5765 + ee.copySheetByFile(file2, file1, 0, 145);
  5766 + }
  5767 + File newFile = files.get(0);
  5768 + newFile.renameTo(file);
  5769 +// temp.renameTo(new File(path + fileName + "/" + temp.getName()));
  5770 +// File[] listFiles = file.listFiles();
  5771 +// ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(path + file.getName() + ".zip")));
  5772 +//// zos.setEncoding("gbk");
  5773 +//// zos.putNextEntry(new ZipEntry(fileName + "/"));
  5774 +// for (int i = 0; i < listFiles.length; i++) {
  5775 +// zos.putNextEntry(new ZipEntry(fileName + "/" + listFiles[i].getName()));
  5776 +// BufferedInputStream bis = new BufferedInputStream(new FileInputStream(listFiles[i]));
  5777 +// BufferedOutputStream bos = new BufferedOutputStream(zos);
  5778 +// int bytesRead = 0;
  5779 +// for (byte[] buffer = new byte[BUF_SIZE]; ((bytesRead = bis.read(buffer, 0, BUF_SIZE)) != -1); ) {
  5780 +//// zos.write(buffer, 0, bytesRead);
  5781 +//// zos.flush();
  5782 +// bos.write(buffer, 0, bytesRead);
  5783 +// bos.flush();
  5784 +// }
  5785 +//// bos.close();
  5786 +// bis.close();
  5787 +// }
  5788 +// zos.close();
  5789 +// }
  5790 +
  5791 + } catch (Exception e) {
  5792 + // TODO: handle exception
  5793 + e.printStackTrace();
  5794 + }
  5795 +
  5796 + map.put("fileName", file.getName());
  5797 + return map;
  5798 + }
  5799 +
  5800 + @Autowired
  5801 + SchedulePlanInfoService schPlanService;
  5802 +
  5803 + @Override
  5804 + public List<SchedulePlanInfo> currentSchedulePlan(String lineCode) {
  5805 + List<SchedulePlanInfo> rs = dayOfSchedule.schedulePlanMap.get(lineCode);
  5806 +
  5807 + if (rs == null || rs.size() == 0) {
  5808 + //尝试刷新内存
  5809 + Map<String, Object> data = new HashMap<>();
  5810 + data.put("scheduleDate_eq", dayOfSchedule.currSchDateMap.get(lineCode));
  5811 + data.put("xlBm_eq", lineCode);
  5812 + List<SchedulePlanInfo> planItr = dayOfSchedule.cleanSchPlanItr(schPlanService.list(data).iterator());
  5813 +
  5814 + if (planItr.size() > 0) {
  5815 + dayOfSchedule.schedulePlanMap.put(lineCode, planItr);
  5816 + return planItr;
  5817 + }
  5818 + }
  5819 + return rs;
  5820 + }
  5821 +
  5822 +
  5823 + @Override
  5824 + public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx, int type) {
  5825 + Map<String, Object> rs = new HashMap<>();
  5826 + Set<ScheduleRealInfo> ts = new HashSet<>();
  5827 + try {
  5828 + List<String> leftList = Splitter.on(",").splitToList(leftIdx);
  5829 + List<String> rightList = Splitter.on(",").splitToList(rightIdx);
  5830 + Set<String> lpSet = new HashSet<>();
  5831 + Set<String> carSet = new HashSet<>();
  5832 +
  5833 + List<ScheduleRealInfo> largeList, smallList;
  5834 + if (leftList.size() > rightList.size()) {
  5835 + largeList = getByIdx(leftList);
  5836 + smallList = getByIdx(rightList);
  5837 + } else {
  5838 + largeList = getByIdx(rightList);
  5839 + smallList = getByIdx(leftList);
  5840 + }
  5841 +
  5842 + ScheduleRealInfo leftSch, rightSch = null;
  5843 + for (int i = 0; i < largeList.size(); i++) {
  5844 + leftSch = largeList.get(i);
  5845 + leftSch.setLpChange(1);
  5846 + if (i < smallList.size()) {
  5847 + rightSch = smallList.get(i);
  5848 + rightSch.setLpChange(1);
  5849 + ts.add(rightSch);
  5850 + } else {
  5851 + //不对称时多出来的
  5852 + lpChangeByLeft(leftSch, largeList.get(i - 1), type);
  5853 + ts.add(leftSch);
  5854 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
  5855 + continue;
  5856 + }
  5857 +
  5858 + //调换路牌
  5859 + lpChange(leftSch, rightSch, type);
  5860 + ts.add(leftSch);
  5861 +
  5862 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
  5863 + lpSet.add(rightSch.getXlBm() + "_" + rightSch.getLpName());
  5864 +
  5865 + carSet.add(leftSch.getClZbh());
  5866 + carSet.add(rightSch.getClZbh());
  5867 + scheduleRealInfoRepository.updateLpChange(leftSch.getId());
  5868 + scheduleRealInfoRepository.updateLpChange(rightSch.getId());
  5869 + }
  5870 +
  5871 + //重新计算路牌的起点应到时间
  5872 + for (String lpName : lpSet) {
  5873 + ts.addAll(dayOfSchedule.updateQdzTimePlan(lpName));
  5874 + }
  5875 +
  5876 + //重新就算车辆当前执行班次
  5877 + for(String nbbm : carSet){
  5878 + dayOfSchedule.reCalcExecPlan(nbbm);
  5879 + }
  5880 +
  5881 +
  5882 + for (ScheduleRealInfo sch : ts) {
  5883 + dayOfSchedule.save(sch);
  5884 + }
  5885 +
  5886 + rs.put("status", ResponseCode.SUCCESS);
  5887 + rs.put("ts", ts);
  5888 + } catch (Exception e) {
  5889 + logger.error("", e);
  5890 + rs.put("status", ResponseCode.ERROR);
  5891 + rs.put("msg", e.getMessage());
  5892 + }
  5893 +
  5894 + return rs;
  5895 + }
  5896 +
  5897 + private List<ScheduleRealInfo> getByIdx(List<String> idList) {
  5898 + List<ScheduleRealInfo> list = new ArrayList<>();
  5899 + for (String id : idList) {
  5900 + list.add(dayOfSchedule.get(Long.parseLong(id)));
  5901 + }
  5902 + return list;
  5903 + }
  5904 +
  5905 + @Override
  5906 + public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
  5907 + //释放班次映射
  5908 + if (type > 0) {
  5909 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
  5910 + dayOfSchedule.removeNbbm2SchMapp(rightSch);
  5911 + }
  5912 +
  5913 + //对调数据
  5914 + LpData leftData = new LpData(leftSch);
  5915 + LpData rightData = new LpData(rightSch);
  5916 +
  5917 + leftData.appendTo(rightSch, type);
  5918 + rightData.appendTo(leftSch, type);
  5919 +
  5920 + if (type > 0) {
  5921 + //重新映射
  5922 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  5923 + dayOfSchedule.addNbbm2SchMapp(rightSch);
  5924 + }
  5925 + }
  5926 +
  5927 + /**
  5928 + * 更换左边班次的路牌,右边不变
  5929 + *
  5930 + * @param leftSch
  5931 + * @param rightSch
  5932 + * @param type
  5933 + */
  5934 + public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
  5935 + //释放班次映射
  5936 + if (type > 0)
  5937 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
  5938 +
  5939 + LpData rightData = new LpData(rightSch);
  5940 + rightData.appendTo(leftSch, type);
  5941 +
  5942 + //重新映射
  5943 + if (type > 0)
  5944 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  5945 +
  5946 + }
  5947 +
  5948 + @Override
  5949 + public Map<String, Object> revokeRealArrive(Long id) {
  5950 + Map<String, Object> rs = new HashMap<>();
  5951 + List<ScheduleRealInfo> ts = new ArrayList<>();
  5952 +
  5953 + try {
  5954 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  5955 + if (sch.getZdsjActual() == null && sch.getFcsjActual() == null) {
  5956 + rs.put("status", ResponseCode.ERROR);
  5957 + rs.put("msg", "班次未执行,无法撤销!");
  5958 + } else {
  5959 + //日志记录
  5960 + ScheduleModifyLogger.cxzx(sch);
  5961 +
  5962 + sch.clearFcsjActual();
  5963 + sch.clearZdsjActual();
  5964 + //清除路牌下一个班的起点到达时间
  5965 + ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
  5966 + if (null != next) {
  5967 + next.setQdzArrDatesj(null);
  5968 + ts.add(next);
  5969 + }
  5970 +
  5971 + rs.put("status", ResponseCode.SUCCESS);
  5972 +
  5973 + ts.add(sch);
  5974 + rs.put("ts", ts);
  5975 +
  5976 + dayOfSchedule.save(sch);
  5977 + //重新计算当前执行班次
  5978 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  5979 +
  5980 + }
  5981 + } catch (Exception e) {
  5982 + logger.error("", e);
  5983 + rs.put("status", ResponseCode.ERROR);
  5984 + }
  5985 + return rs;
  5986 + }
  5987 +
  5988 + @Override
  5989 + public Map<String, Object> lateAdjust(String idx, float minute) {
  5990 + Map<String, Object> rs = new HashMap<>();
  5991 + try {
  5992 + int count = 0;
  5993 + List<ScheduleRealInfo> list = new ArrayList<>();
  5994 + List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
  5995 +
  5996 + ScheduleRealInfo sch;
  5997 + for (String id : ids) {
  5998 + sch = dayOfSchedule.get(Long.parseLong(id));
  5999 + if (sch != null && sch.getStatus() == 0) {
  6000 + if (minute > 0) {
  6001 + sch.setLateMinute(minute);
  6002 + } else if (minute == 0) {
  6003 + LateAdjustHandle.remove(sch);
  6004 + }
  6005 + count++;
  6006 + list.add(sch);
  6007 + }
  6008 + }
  6009 +
  6010 + rs.put("status", ResponseCode.SUCCESS);
  6011 + rs.put("count", count);
  6012 + rs.put("ts", list);
  6013 + } catch (Exception e) {
  6014 + logger.error("", e);
  6015 + rs.put("status", ResponseCode.ERROR);
  6016 + rs.put("msg", e.getMessage());
  6017 + }
  6018 +
  6019 + return rs;
  6020 + }
  6021 +
  6022 + @Override
  6023 + public List<ScheduleRealInfo> allLate2(String idx) {
  6024 + List<ScheduleRealInfo> rs = new ArrayList<>();
  6025 + List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
  6026 +
  6027 + Collection<ScheduleRealInfo> all = LateAdjustHandle.allLateSch();
  6028 + for (ScheduleRealInfo sch : all) {
  6029 + if (ids.indexOf(sch.getXlBm()) != -1) {
  6030 + rs.add(sch);
  6031 + }
  6032 + }
  6033 + return rs;
  6034 + }
  6035 +
  6036 +
  6037 + @Override
  6038 + public List<Map<String, Object>> mileageReport(String gsdm,
  6039 + String fgsdm, String line, String date, String date2) {
  6040 +
  6041 + String sql = "select * from calc_mileage where 1=1 ";
  6042 + if (!line.equals(" ")) {
  6043 + sql = sql + " and line_code='" + line + "' ";
  6044 + }
  6045 + sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
  6046 + if (!gsdm.equals(" ")) {
  6047 + sql = sql + " and company_id=" + gsdm;
  6048 + }
  6049 + if (!gsdm.equals(" ")) {
  6050 + sql = sql + " and sub_company_id=" + fgsdm;
  6051 + }
  6052 + sql = sql + " order by line_code";
  6053 + List<MileageReport> list = jdbcTemplate.query(sql,
  6054 + new RowMapper<MileageReport>() {
  6055 + @Override
  6056 + public MileageReport mapRow(ResultSet rs, int rowNum) throws SQLException {
  6057 + MileageReport mr = new MileageReport();
  6058 + mr.setCompanyName(rs.getString("company_name"));
  6059 + mr.setSubCompanyName(rs.getString("sub_company_name"));
  6060 + mr.setLineName(rs.getString("line_name"));
  6061 + mr.setSjyygl(rs.getDouble("sjyygl"));
  6062 + mr.setSjksgl(rs.getDouble("sjksgl"));
  6063 + mr.setZgl(rs.getDouble("zyygl"));
  6064 + mr.setZddfgl(rs.getDouble("zddfgl"));
  6065 + mr.setSddfgl(rs.getDouble("sddfgl"));
  6066 + mr.setWqwxhgl(rs.getDouble("wqwxhgl"));
  6067 + mr.setBfwxhgl(rs.getDouble("bfwxhgl"));
  6068 + mr.setPygl(rs.getDouble("pygl"));
  6069 + mr.setLjgl(rs.getDouble("ljgl"));
  6070 + mr.setZrwgl(rs.getDouble("zrwgl"));
  6071 + mr.setOther(rs.getString("other"));
  6072 + return mr;
  6073 + }
  6074 + });
  6075 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  6076 + double sjyygl = 0.0;
  6077 + double sjksgl = 0.0;
  6078 + double zgl = 0.0;
  6079 + double sddfgl = 0.0;
  6080 + double zddfgl = 0.0;
  6081 + double wqwxhgl = 0.0;
  6082 + double bfwxhgl = 0.0;
  6083 + double pygl = 0.0;
  6084 + double ljgl = 0.0;
  6085 + double zrwgl = 0.0;
  6086 + for (MileageReport mr : list) {
  6087 + Map<String, Object> resMap = new HashMap<String, Object>();
  6088 + resMap.put("gsName", mr.getCompanyName());
  6089 + resMap.put("fgsName", mr.getSubCompanyName());
  6090 + resMap.put("xlName", mr.getLineName());
  6091 + resMap.put("sjyygl", mr.getSjyygl());
  6092 + resMap.put("sjksgl", mr.getSjksgl());
  6093 + resMap.put("zgl", mr.getZgl());
  6094 + resMap.put("sddfgl", mr.getSddfgl());
  6095 + resMap.put("zddfgl", mr.getZddfgl());
  6096 + resMap.put("wqwxhgl", mr.getWqwxhgl());
  6097 + resMap.put("bfwxhgl", mr.getBfwxhgl());
  6098 + resMap.put("pygl", mr.getPygl());
  6099 + resMap.put("ljgl", mr.getLjgl());
  6100 + resMap.put("zrwgl", mr.getZrwgl());
  6101 + resMap.put("other", mr.getOther());
  6102 + lMap.add(resMap);
  6103 + sjyygl = Arith.add(sjyygl, mr.getSjyygl());
  6104 + sjksgl = Arith.add(sjksgl, mr.getSjksgl());
  6105 + zgl = Arith.add(zgl, mr.getZgl());
  6106 + sddfgl = Arith.add(sddfgl, mr.getSddfgl());
  6107 + zddfgl = Arith.add(zddfgl, mr.getZddfgl());
  6108 + wqwxhgl = Arith.add(wqwxhgl, mr.getWqwxhgl());
  6109 + bfwxhgl = Arith.add(bfwxhgl, mr.getBfwxhgl());
  6110 + pygl = Arith.add(pygl, mr.getPygl());
  6111 + ljgl = Arith.add(ljgl, mr.getLjgl());
  6112 + zrwgl = Arith.add(zrwgl, mr.getZrwgl());
  6113 + }
  6114 + Map<String, Object> resMap = new HashMap<String, Object>();
  6115 + resMap.put("xlName", "合计");
  6116 + resMap.put("sjyygl", sjyygl);
  6117 + resMap.put("sjksgl", sjksgl);
  6118 + resMap.put("zgl", zgl);
  6119 + resMap.put("sddfgl", sddfgl);
  6120 + resMap.put("zddfgl", zddfgl);
  6121 + resMap.put("wqwxhgl", wqwxhgl);
  6122 + resMap.put("bfwxhgl", bfwxhgl);
  6123 + resMap.put("pygl", pygl);
  6124 + resMap.put("ljgl", ljgl);
  6125 + resMap.put("zrwgl", zrwgl);
  6126 + resMap.put("other", null);
  6127 + lMap.add(resMap);
  6128 + return lMap;
  6129 + }
  6130 +
  6131 + @Override
  6132 + public List<Map<String, Object>> scheduleCorrectionReport(String gsdm,
  6133 + String fgsdm, String line, String date, String date2) {
  6134 +
  6135 + String sql = "select * from calc_schedule where 1=1 ";
  6136 + if (!line.equals(" ")) {
  6137 + sql = sql + " and line_code='" + line + "' ";
  6138 + }
  6139 + sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
  6140 + if (!gsdm.equals(" ")) {
  6141 + sql = sql + " and company_id=" + gsdm;
  6142 + }
  6143 + if (!gsdm.equals(" ")) {
  6144 + sql = sql + " and sub_company_id=" + fgsdm;
  6145 + }
  6146 + sql = sql + " order by line_code";
  6147 + List<ScheduleCorrectionReport> list = jdbcTemplate.query(sql,
  6148 + new RowMapper<ScheduleCorrectionReport>() {
  6149 + @Override
  6150 + public ScheduleCorrectionReport mapRow(ResultSet rs, int rowNum) throws SQLException {
  6151 + ScheduleCorrectionReport sReport = new ScheduleCorrectionReport();
  6152 + sReport.setCompanyName(rs.getString("company_name"));
  6153 + sReport.setSubCompanyName(rs.getString("sub_company_name"));
  6154 + sReport.setLineName(rs.getString("line_name"));
  6155 + sReport.setSjyybc(rs.getInt("sjyybc"));
  6156 + sReport.setSjksbc(rs.getInt("sjksbc"));
  6157 + sReport.setZbc(rs.getInt("zyybc"));
  6158 + sReport.setZddfbc(rs.getInt("zddfbc"));
  6159 + sReport.setSddfbc(rs.getInt("sddfbc"));
  6160 + sReport.setWqwxhbc(rs.getInt("wqwxhbc"));
  6161 + sReport.setBfwxhbc(rs.getInt("bfwxhbc"));
  6162 + sReport.setPybc(rs.getInt("pybc"));
  6163 + sReport.setLjbc(rs.getInt("ljbc"));
  6164 + sReport.setZrwbc(rs.getInt("zrwbc"));
  6165 + sReport.setOther(rs.getString("other"));
  6166 + return sReport;
  6167 + }
  6168 + });
  6169 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  6170 + int sjyybc = 0;
  6171 + int sjksbc = 0;
  6172 + int zbc = 0;
  6173 + int sddfbc = 0;
  6174 + int zddfbc = 0;
  6175 + int wqwxhbc = 0;
  6176 + int bfwxhbc = 0;
  6177 + int pybc = 0;
  6178 + int ljbc = 0;
  6179 + int zrwbc = 0;
  6180 + for (ScheduleCorrectionReport sReport : list) {
  6181 + Map<String, Object> resMap = new HashMap<String, Object>();
  6182 + resMap.put("gsName", sReport.getCompanyName());
  6183 + resMap.put("fgsName", sReport.getSubCompanyName());
  6184 + resMap.put("xlName", sReport.getLineName());
  6185 + resMap.put("sjyybc", sReport.getSjyybc());
  6186 + resMap.put("sjksbc", sReport.getSjksbc());
  6187 + resMap.put("zbc", sReport.getZbc());
  6188 + resMap.put("sddfbc", sReport.getSddfbc());
  6189 + resMap.put("zddfbc", sReport.getZddfbc());
  6190 + resMap.put("wqwxhbc", sReport.getWqwxhbc());
  6191 + resMap.put("bfwxhbc", sReport.getBfwxhbc());
  6192 + resMap.put("pybc", sReport.getPybc());
  6193 + resMap.put("ljbc", sReport.getLjbc());
  6194 + resMap.put("zrwbc", sReport.getZrwbc());
  6195 + resMap.put("other", sReport.getOther());
  6196 + lMap.add(resMap);
  6197 + sjyybc = sjyybc + sReport.getSjyybc();
  6198 + sjksbc = sjksbc + sReport.getSjksbc();
  6199 + zbc = zbc + sReport.getZbc();
  6200 + sddfbc = sddfbc + sReport.getSddfbc();
  6201 + zddfbc = zddfbc + sReport.getZddfbc();
  6202 + wqwxhbc = wqwxhbc + sReport.getWqwxhbc();
  6203 + bfwxhbc = bfwxhbc + sReport.getBfwxhbc();
  6204 + pybc = pybc + sReport.getPybc();
  6205 + ljbc = ljbc + sReport.getLjbc();
  6206 + zrwbc = zrwbc + sReport.getZrwbc();
  6207 + }
  6208 + Map<String, Object> resMap = new HashMap<String, Object>();
  6209 + resMap.put("xlName", "合计");
  6210 + resMap.put("sjyybc", sjyybc);
  6211 + resMap.put("sjksbc", sjksbc);
  6212 + resMap.put("zbc", zbc);
  6213 + resMap.put("sddfbc", sddfbc);
  6214 + resMap.put("zddfbc", zddfbc);
  6215 + resMap.put("wqwxhbc", wqwxhbc);
  6216 + resMap.put("bfwxhbc", bfwxhbc);
  6217 + resMap.put("pybc", pybc);
  6218 + resMap.put("ljbc", ljbc);
  6219 + resMap.put("zrwbc", zrwbc);
  6220 + resMap.put("other", null);
  6221 + lMap.add(resMap);
  6222 + return lMap;
  6223 + }
  6224 +
  6225 + @Override
  6226 + public Integer isCircleQdz(String clzbh, String sdr, String xlbm, String qdzCode) {
  6227 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  6228 + String time =sdf.format(Long.parseLong(sdr));
  6229 +
  6230 + Long num=scheduleRealInfoRepository.isCircleQdz(clzbh, time, xlbm, qdzCode);
  6231 + Integer num2=num==0L?0:1;
  6232 + return num2;
  6233 + }
  6234 +
  6235 + @SuppressWarnings("unchecked")
  6236 + private static Map<String, Object> request(String url) {
  6237 + Map<String, Object> res = new HashMap<String, Object>();
  6238 + res.put("status", ResponseCode.SUCCESS);
  6239 + InputStream in = null;
  6240 + HttpURLConnection con = null;
  6241 + try {
  6242 + con = (HttpURLConnection)new URL(url).openConnection();
  6243 + con.setRequestMethod("POST");
  6244 + con.setRequestProperty("keep-alive", "true");
  6245 + con.setRequestProperty("accept", "application/json");
  6246 + con.setRequestProperty("content-type", "application/json");
  6247 + con.setDoInput(true);
  6248 + con.setReadTimeout(2500);
  6249 + con.setConnectTimeout(2500);
  6250 +
  6251 + con.connect();
  6252 + if (con.getResponseCode() == 200) {
  6253 + in = con.getInputStream();
  6254 + ByteArrayOutputStream bout = new ByteArrayOutputStream();
  6255 + IOUtils.copy(in, bout); bout.close();
  6256 + Map<String, Object> response = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
  6257 + if (!"报修成功".equals(response.get("msg"))) {
  6258 + res.put("status", ResponseCode.ERROR);
  6259 + res.putAll(response);
  6260 + }
  6261 + } else {
  6262 + res.put("status", ResponseCode.ERROR);
  6263 + res.put("msg", "调用上报接口异常");
  6264 + }
  6265 + } catch (IOException e) {
  6266 + // TODO Auto-generated catch block
  6267 + res.put("status", ResponseCode.ERROR);
  6268 + res.put("msg", "调用上报接口异常");
  6269 + } finally {
  6270 + try {
  6271 + if (in != null) in.close();
  6272 + if (con != null) con.disconnect();
  6273 + } catch (IOException e) {
  6274 + // TODO Auto-generated catch block
  6275 + e.printStackTrace();
  6276 + }
  6277 + }
  6278 +
  6279 + return res;
  6280 + }
  6281 +
  6282 + /**
  6283 + ** 维修记录上报
  6284 + * @param param 参数信息
  6285 + * @param isActive 主/被动上报
  6286 + */
  6287 + @Override
  6288 + @Transactional
  6289 + public Map<String, Object> repairReport(Map<String, Object> param, boolean isActive) {
  6290 + Map<String, Object> res = new HashMap<String, Object>();
  6291 + res.put("status", ResponseCode.SUCCESS);
  6292 + // 获取实际排班信息
  6293 + Long id = Long.parseLong((String)param.get("id"));
  6294 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  6295 +
  6296 + if (null == sch) {
  6297 + res.put("status", ResponseCode.ERROR);
  6298 + res.put("msg", "不存在的班次!");
  6299 +
  6300 + return res;
  6301 + }
  6302 +
  6303 + int reportState = -1;
  6304 + SysUser user = SecurityUtils.getCurrentUser();
  6305 + String reportUser = user.getUserName(), reportName = user.getName(), incode = (String)param.get("clZbh"), reportTypes = (String)param.get("reportTypes"), repairTypes = reportType2RepairType(reportTypes);
  6306 + // 分公司保存格式 分公司编码_公司编码
  6307 + String val = BasicData.nbbm2FgsCompanyCodeMap.get(incode);
  6308 + String[] arr = val.split("_");
  6309 + StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
  6310 + url.append("?nbbm=").append(incode).append("&bxy=").append(reportUser).append("&bxbm=").append(repairTypes).append("&fgs=").append(arr[0]);
  6311 +
  6312 + int count = repairReportRepository.repairReportBySch(id, isActive ? 1 : 0);
  6313 + if (count > 0) return res;
  6314 + RepairReport lrr = dayOfSchedule.getLastestRepairReport(incode);
  6315 + // 非主动上报并且无上报记录或上次已上报 则不用上报
  6316 + if (!isActive && (lrr == null || lrr.getReportState() != 0)) {
  6317 + reportState = 0;
  6318 + } else {
  6319 + res = request(url.toString());
  6320 + if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
  6321 + }
  6322 + // 持久化此次上报记录
  6323 + RepairReport rr = new RepairReport();
  6324 + rr.setLineId(sch.getXlBm());
  6325 + rr.setLineName(sch.getXlName());
  6326 + rr.setReportUser(reportUser);
  6327 + rr.setReportName(reportName);
  6328 + rr.setSchId(id);
  6329 + rr.setIncode(incode);
  6330 + rr.setDepartureTime(sch.getFcsj());
  6331 + rr.setRepairType(repairTypes);
  6332 + rr.setReportType(reportTypes);
  6333 + rr.setReportDate(new Date());
  6334 + rr.setReportState(reportState);
  6335 + rr.setReportMode(isActive ? 1 : 0);
  6336 + rr = repairReportRepository.save(rr);
  6337 + dayOfSchedule.setLastestRepairReport(rr);
  6338 + // 如果上报失败,放到重传队列
  6339 + if (rr.getReportState() == -1) queue.add(rr);
  6340 +
  6341 + return res;
  6342 + }
  6343 +
  6344 + private void repairReport(RepairReport rr) {
  6345 + int reportState = -1;
  6346 + // 分公司保存格式 分公司编码_公司编码
  6347 + String val = BasicData.nbbm2FgsCompanyCodeMap.get(rr.getIncode());
  6348 + String[] arr = val.split("_");
  6349 + StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
  6350 + url.append("?nbbm=").append(rr.getIncode()).append("&bxy=").append(rr.getReportUser()).append("&bxbm=").append(rr.getRepairType()).append("&fgs=").append(arr[0]);
  6351 +
  6352 + Map<String, Object> res = request(url.toString());
  6353 + if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
  6354 + if (reportState == 1) {
  6355 + rr.setReportState(1);
  6356 + repairReportRepository.save(rr);
  6357 + }
  6358 + }
  6359 +
  6360 + /**
  6361 + ** 业务类型转报修类型
  6362 + */
  6363 + private String reportType2RepairType(String reportType) {
  6364 + String[] reportTypes = reportType.split(";");
  6365 + List<String> repairTypes = new ArrayList<>();
  6366 + for (String rt : reportTypes) {
  6367 + repairTypes.add(report2repair.get(rt));
  6368 + }
  6369 +
  6370 + return StringUtils.join(repairTypes, ";");
  6371 + }
  6372 +
  6373 + @Override
  6374 + public List<RepairReport> repairReportList(String lineId, String date, String incode, String type) {
  6375 + List<RepairReport> result = new ArrayList<RepairReport>();
  6376 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  6377 +
  6378 + Date start = null, end = null;
  6379 + if (date.length() > 0) {
  6380 + try {
  6381 + start = sdf.parse(date + " 00:00:00");
  6382 + end = sdf.parse(date + " 23:59:59");
  6383 + } catch (ParseException e) {
  6384 + // TODO Auto-generated catch block
  6385 + e.printStackTrace();
  6386 + }
  6387 +
  6388 + }
  6389 +
  6390 + result = repairReportRepository.repairReportList(lineId, start, end, incode);
  6391 + Map<String, Object> dMap=new HashMap<>();
  6392 + dMap.put("dGroup_eq", "repairtype");
  6393 + Map<String, String> code2name = new HashMap<String, String>();
  6394 + for (Dictionary dic : dictionaryService.list(dMap)) {
  6395 + code2name.put(dic.getdCode(), dic.getdName());
  6396 + }
  6397 + for (RepairReport rr : result) {
  6398 + String reportType = rr.getReportType();
  6399 + String[] types = reportType.split(";");
  6400 + StringBuilder sb = new StringBuilder();
  6401 +
  6402 + for (String t : types) {
  6403 + sb.append(code2name.get(t)).append(";");
  6404 + }
  6405 +
  6406 + rr.setRepairType(sb.toString());
  6407 + rr.setReportDateStr(sdf.format(rr.getReportDate()));
  6408 + switch (rr.getReportState()) {
  6409 + case 0:
  6410 + rr.setReportStateStr("不报");
  6411 + break;
  6412 + case 1:
  6413 + rr.setReportStateStr("上报成功");
  6414 + break;
  6415 + case -1:
  6416 + rr.setReportStateStr("上报失败");
  6417 + break;
  6418 + default:
  6419 + break;
  6420 + }
  6421 + }
  6422 +
  6423 + if ("export".equals(type)) {
  6424 + String lineName = BasicData.lineCode2NameMap.get(lineId);
  6425 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  6426 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  6427 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  6428 + Map<String, Object> m = new HashMap<String, Object>();
  6429 + ReportUtils ee = new ReportUtils();
  6430 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  6431 + for (int i = 0; i < result.size(); i++) {
  6432 + Map<String, Object> map = new HashMap<String, Object>();
  6433 + RepairReport rr = result.get(i);
  6434 + map.put("row", i + 1);
  6435 + map.put("lineId", rr.getLineName());
  6436 + map.put("incode", rr.getIncode());
  6437 + map.put("departureTime", rr.getDepartureTime());
  6438 + map.put("reportUser", rr.getReportUser());
  6439 + map.put("reportDateStr", rr.getReportDate());
  6440 + map.put("repairType", rr.getRepairType());
  6441 + map.put("reportStateStr", rr.getReportStateStr());
  6442 + newList.add(map);
  6443 + }
  6444 + try {
  6445 + listI.add(newList.iterator());
  6446 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  6447 + ee.excelReplace(listI, new Object[]{m}, path + "mould/repairReport.xls",
  6448 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  6449 + + "-" + lineName + "-维修上报记录.xls");
  6450 + } catch (Exception e) {
  6451 + // TODO: handle exception
  6452 + e.printStackTrace();
  6453 + }
  6454 + }
  6455 +
  6456 + return result;
  6457 + }
  6458 +
  6459 + @Override
  6460 + public Map<String, String> getLevelsByLines(List<String> lines) {
  6461 + Map<String, String> result = new HashMap<String, String>(), currSchDate = dayOfSchedule.getCurrSchDate();
  6462 + for (String line : lines) {
  6463 + String level = BasicData.lineDate2Level.get(line + "_" + currSchDate.get(line));
  6464 + result.put(line, level == null ? "" : level);
  6465 + }
  6466 +
  6467 + return result;
  6468 + }
  6469 +
  6470 +
  6471 + @Override
  6472 + public void destroy() throws Exception {
  6473 + // TODO Auto-generated method stub
  6474 + exec.shutdown();
  6475 + }
  6476 +
  6477 +
  6478 + @Override
  6479 + public void afterPropertiesSet() throws Exception {
  6480 + // TODO Auto-generated method stub
  6481 + // 维修上报重发调度
  6482 + exec.scheduleAtFixedRate(new Runnable() {
  6483 +
  6484 + @Override
  6485 + public void run() {
  6486 + // TODO Auto-generated method stub
  6487 + try {
  6488 + Iterator<RepairReport> it = queue.iterator();
  6489 + while (it.hasNext()) {
  6490 + RepairReport rr = it.next();
  6491 + repairReport(rr);
  6492 + if (rr.getReportState() == 1 || System.currentTimeMillis() - rr.getReportDate().getTime() > 86400000) queue.remove(rr);
  6493 + }
  6494 + } catch (Exception e) {
  6495 + logger.error("维修上报重发错误", e);
  6496 + }
  6497 + }
  6498 + }, 30, 30, TimeUnit.MINUTES);
  6499 +
  6500 + //// ---
  6501 + exec.scheduleWithFixedDelay(new Runnable() {
  6502 + @Override
  6503 + public void run() {
  6504 + Map<String, Object> res = new HashMap<>();
  6505 + InputStream in = null;
  6506 + String url ="http://211.95.61.66:9008/modules/tSafedrivingCs/DSMBHforCLBH";
  6507 +
  6508 + try {
  6509 + HttpURLConnection con = (HttpURLConnection)new URL(url.toString()).openConnection();
  6510 + con.setDoInput(true);
  6511 + con.setRequestMethod("POST");
  6512 + con.setConnectTimeout(5000);
  6513 + con.setReadTimeout(5000);
  6514 + con.setRequestProperty("keep-alive", "true");
  6515 + con.setRequestProperty("accept", "*/*");
  6516 + con.setRequestProperty("content-type", "application/x-www-form-urlencoded");
  6517 + con.connect();
  6518 +
  6519 + if (con.getResponseCode() == 200) {
  6520 + in = con.getInputStream();
  6521 + ByteArrayOutputStream bout = new ByteArrayOutputStream();
  6522 + IOUtils.copy(in, bout);
  6523 + DIRMAP = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
  6524 + }
  6525 + } catch (MalformedURLException e) {
  6526 + // TODO Auto-generated catch block
  6527 + e.printStackTrace();
  6528 + } catch (IOException e) {
  6529 + // TODO Auto-generated catch block
  6530 + e.printStackTrace();
  6531 + }
  6532 +
  6533 + }
  6534 + }, 0, 60 * 60 * 24, TimeUnit.MINUTES);
  6535 + }
  6536 +}
  6537 +
  6538 +class AccountMap implements Comparator<Map<String, Object>> {
  6539 + @Override
  6540 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6541 + // TODO Auto-generated method stub
  6542 + return o1.get("clZbh").toString().compareTo(o2.get("clZbh").toString());
  6543 + }
  6544 +}
  6545 +
  6546 +class AccountMap2 implements Comparator<Map<String, Object>> {
  6547 + @Override
  6548 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6549 + // TODO Auto-generated method stub
  6550 + return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString());
  6551 + }
  6552 +}
  6553 +
  6554 +class AccountXlbm implements Comparator<Map<String, Object>> {
  6555 + @Override
  6556 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6557 + // TODO Auto-generated method stub
  6558 +// PinyinHelper.convertToPinyinString(ppy.getName(),
  6559 +// "" , PinyinFormat.WITHOUT_TONE)
  6560 + return o1.get("xlNamePy").toString().compareTo(
  6561 + o2.get("xlNamePy").toString());
  6562 + }
  6563 +}
  6564 +
  6565 +class compareLpFcsjType implements Comparator<ScheduleRealInfo> {
  6566 + @Override
  6567 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6568 + // TODO Auto-generated method stub
  6569 + return (o1.getLpName()+o1.getFcsjT() + o1.getRemark()).compareTo(o2.getLpName()+o2.getFcsjT() + o2.getRemark());
  6570 + }
  6571 +
  6572 +}
  6573 +
  6574 +class compareDirLpFcsjType implements Comparator<ScheduleRealInfo> {
  6575 + @Override
  6576 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6577 + // TODO Auto-generated method stub
  6578 + return (o1.getXlDir()+o1.getFcsjT() + o1.getRemark()+o1.getLpName()).compareTo(o2.getXlDir()+o2.getFcsjT() + o2.getRemark()+o2.getLpName());
  6579 + }
  6580 +
  6581 +}
  6582 +class compareFcsjType implements Comparator<ScheduleRealInfo> {
  6583 + @Override
  6584 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6585 + // TODO Auto-generated method stub
  6586 + return (o1.getFcsjT() + o1.getRemark()).compareTo(o2.getFcsjT() + o2.getRemark());
  6587 + }
  6588 +
  6589 +}
... ...