Commit 6fb6a87aba799c95eda963fec0847cd5b7f1f7c9

Authored by 娄高锋
1 parent 68e62db4

调度日报导出时类型错误

src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
1   -package com.bsth.service.realcontrol.impl;
2   -
3   -import java.io.ByteArrayOutputStream;
4   -import java.io.File;
5   -import java.io.IOException;
6   -import java.io.InputStream;
7   -import java.net.HttpURLConnection;
8   -import java.net.URL;
9   -import java.sql.ResultSet;
10   -import java.sql.SQLException;
11   -import java.text.DecimalFormat;
12   -import java.text.ParseException;
13   -import java.text.SimpleDateFormat;
14   -import java.util.ArrayList;
15   -import java.util.Calendar;
16   -import java.util.Collection;
17   -import java.util.Collections;
18   -import java.util.Comparator;
19   -import java.util.Date;
20   -import java.util.GregorianCalendar;
21   -import java.util.HashMap;
22   -import java.util.HashSet;
23   -import java.util.Iterator;
24   -import java.util.List;
25   -import java.util.Map;
26   -import java.util.Queue;
27   -import java.util.Set;
28   -import java.util.concurrent.ConcurrentLinkedQueue;
29   -import java.util.concurrent.Executors;
30   -import java.util.concurrent.ScheduledExecutorService;
31   -import java.util.concurrent.ThreadFactory;
32   -import java.util.concurrent.TimeUnit;
33   -import java.util.regex.Pattern;
34   -
35   -import org.apache.commons.io.IOUtils;
36   -import org.apache.commons.lang3.StringEscapeUtils;
37   -import org.apache.commons.lang3.StringUtils;
38   -import org.joda.time.format.DateTimeFormat;
39   -import org.joda.time.format.DateTimeFormatter;
40   -import org.slf4j.Logger;
41   -import org.slf4j.LoggerFactory;
42   -import org.springframework.beans.factory.DisposableBean;
43   -import org.springframework.beans.factory.InitializingBean;
44   -import org.springframework.beans.factory.annotation.Autowired;
45   -import org.springframework.jdbc.core.BeanPropertyRowMapper;
46   -import org.springframework.jdbc.core.JdbcTemplate;
47   -import org.springframework.jdbc.core.RowMapper;
48   -import org.springframework.stereotype.Service;
49   -import org.springframework.transaction.annotation.Transactional;
50   -
51   -import com.alibaba.fastjson.JSON;
52   -import com.alibaba.fastjson.JSONArray;
53   -import com.alibaba.fastjson.JSONObject;
54   -import com.bsth.common.Constants;
55   -import com.bsth.common.ResponseCode;
56   -import com.bsth.controller.realcontrol.dto.ChangePersonCar;
57   -import com.bsth.controller.realcontrol.dto.DfsjChange;
58   -import com.bsth.controller.realcontrol.dto.LpData;
59   -import com.bsth.data.BasicData;
60   -import com.bsth.data.LineConfigData;
61   -import com.bsth.data.Station2ParkBuffer;
62   -import com.bsth.data.schedule.DayOfSchedule;
63   -import com.bsth.data.schedule.SchAttrCalculator;
64   -import com.bsth.data.schedule.ScheduleComparator;
65   -import com.bsth.data.schedule.edit_logs.FormLogger;
66   -import com.bsth.data.schedule.edit_logs.ScheduleModifyLogger;
67   -import com.bsth.data.schedule.edit_logs.loggers.AfterwardsLogger;
68   -import com.bsth.data.schedule.edit_logs.loggers.FcxxwtLogger;
69   -import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
70   -import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
71   -import com.bsth.data.utils.CustomStringUtils;
72   -import com.bsth.entity.CarDevice;
73   -import com.bsth.entity.Cars;
74   -import com.bsth.entity.Line;
75   -import com.bsth.entity.Personnel;
76   -import com.bsth.entity.calc.CalcInterval;
77   -import com.bsth.entity.oil.Dlb;
78   -import com.bsth.entity.oil.Ylb;
79   -import com.bsth.entity.oil.Ylxxb;
80   -import com.bsth.entity.realcontrol.ChildTaskPlan;
81   -import com.bsth.entity.realcontrol.LineConfig;
82   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
83   -import com.bsth.entity.realcontrol.SvgAttribute;
84   -import com.bsth.entity.report.MileageReport;
85   -import com.bsth.entity.report.RepairReport;
86   -import com.bsth.entity.report.ScheduleCorrectionReport;
87   -import com.bsth.entity.schedule.CarConfigInfo;
88   -import com.bsth.entity.schedule.EmployeeConfigInfo;
89   -import com.bsth.entity.schedule.GuideboardInfo;
90   -import com.bsth.entity.schedule.SchedulePlanInfo;
91   -import com.bsth.entity.sys.Dictionary;
92   -import com.bsth.entity.sys.DutyEmployee;
93   -import com.bsth.entity.sys.SysUser;
94   -import com.bsth.repository.CarDeviceRepository;
95   -import com.bsth.repository.CarsRepository;
96   -import com.bsth.repository.LineRepository;
97   -import com.bsth.repository.RepairReportRepository;
98   -import com.bsth.repository.calc.CalcIntervalRepository;
99   -import com.bsth.repository.oil.DlbRepository;
100   -import com.bsth.repository.oil.YlbRepository;
101   -import com.bsth.repository.oil.YlxxbRepository;
102   -import com.bsth.repository.realcontrol.ChildTaskPlanRepository;
103   -import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
104   -import com.bsth.repository.realcontrol.SvgAttributeRepository;
105   -import com.bsth.repository.schedule.CarConfigInfoRepository;
106   -import com.bsth.repository.schedule.EmployeeConfigInfoRepository;
107   -import com.bsth.repository.schedule.GuideboardInfoRepository;
108   -import com.bsth.security.util.SecurityUtils;
109   -import com.bsth.service.LineService;
110   -import com.bsth.service.SectionRouteService;
111   -import com.bsth.service.directive.DirectiveService;
112   -import com.bsth.service.impl.BaseServiceImpl;
113   -import com.bsth.service.realcontrol.ScheduleRealInfoService;
114   -import com.bsth.service.report.CulateMileageService;
115   -import com.bsth.service.report.ReportService;
116   -import com.bsth.service.schedule.SchedulePlanInfoService;
117   -import com.bsth.service.sys.DictionaryService;
118   -import com.bsth.service.sys.DutyEmployeeService;
119   -import com.bsth.util.Arith;
120   -import com.bsth.util.ComparableChild;
121   -import com.bsth.util.ComparableLp;
122   -import com.bsth.util.ComparableReal;
123   -import com.bsth.util.ConfigUtil;
124   -import com.bsth.util.DateUtils;
125   -import com.bsth.util.ReportRelatedUtils;
126   -import com.bsth.util.ReportUtils;
127   -import com.bsth.util.TimeUtils;
128   -import com.bsth.util.TransGPS;
129   -import com.bsth.websocket.handler.SendUtils;
130   -import com.fasterxml.jackson.databind.ObjectMapper;
131   -import com.github.stuxuhai.jpinyin.PinyinException;
132   -import com.github.stuxuhai.jpinyin.PinyinFormat;
133   -import com.github.stuxuhai.jpinyin.PinyinHelper;
134   -import com.google.common.base.Splitter;
135   -import com.google.common.collect.Lists;
136   -
137   -import javax.ws.rs.HEAD;
138   -
139   -@Service
140   -public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long>
141   - implements ScheduleRealInfoService, InitializingBean, DisposableBean {
142   - @Autowired
143   - JdbcTemplate jdbcTemplate;
144   - @Autowired
145   - ScheduleRealInfoRepository scheduleRealInfoRepository;
146   -
147   - @Autowired
148   - EmployeeConfigInfoRepository employeeConfigInfoRepository;
149   -
150   - @Autowired
151   - CarConfigInfoRepository carConfigInfoRepository;
152   -
153   - @Autowired
154   - SectionRouteService sectionRouteService;
155   -
156   - @Autowired
157   - CulateMileageService culateMieageService;
158   -
159   - @Autowired
160   - DictionaryService dictionaryService;
161   -
162   - @Autowired
163   - CalcIntervalRepository calcIntervalRepository;
164   - /*@Autowired
165   - BorrowCenter borrowCenter;*/
166   -
167   - @Autowired
168   - LineRepository lineRepository;
169   - @Autowired
170   - LineService lineService;
171   - @Autowired
172   - GuideboardInfoRepository guideboardInfoRepository;
173   -
174   - @Autowired
175   - ChildTaskPlanRepository cTaskPlanRepository;
176   -
177   - @Autowired
178   - SendUtils sendUtils;
179   -
180   - @Autowired
181   - DayOfSchedule dayOfSchedule;
182   -
183   - @Autowired
184   - SchAttrCalculator schAttrCalculator;
185   -
186   - @Autowired
187   - LineConfigData lineConfigData;
188   -
189   - @Autowired
190   - DutyEmployeeService dutyEmployeeService;
191   -
192   - @Autowired
193   - YlxxbRepository ylxxbRepository;
194   -
195   - @Autowired
196   - YlbRepository ylbRepository;
197   -
198   - @Autowired
199   - DlbRepository dlbRepository;
200   -
201   - @Autowired
202   - ReportService reposrService;
203   -
204   - @Autowired
205   - CulateMileageService culateService;
206   -
207   - @Autowired
208   - FormLogger schModifyLog;
209   -
210   - @Autowired
211   - DirectiveService directiveService;
212   -
213   - @Autowired
214   - CarDeviceRepository carDeviceRepository;
215   -
216   - @Autowired
217   - CarsRepository carsRepository;
218   -
219   - @Autowired
220   - RepairReportRepository repairReportRepository;
221   - Logger logger = LoggerFactory.getLogger(this.getClass());
222   -
223   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
224   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
225   -
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   - private static Map<String, String> report2repair = new HashMap<String, String>();
241   -
242   - static {
243   - report2repair.put("9101", "9109");
244   - report2repair.put("9102", "9102");
245   - report2repair.put("9103", "9103");
246   - report2repair.put("9104", "9104");
247   - report2repair.put("9109", "9109");
248   - report2repair.put("9201", "9201");
249   - report2repair.put("9202", "9202");
250   - report2repair.put("9203", "9203");
251   - report2repair.put("9204", "9204");
252   - report2repair.put("9209", "9209");
253   - report2repair.put("9301", "9301");
254   - report2repair.put("9302", "9302");
255   - report2repair.put("9303", "9303");
256   - report2repair.put("9304", "9304");
257   - report2repair.put("9305", "9305");
258   - report2repair.put("9306", "9306");
259   - report2repair.put("9309", "9309");
260   - }
261   -
262   -
263   - /**
264   - * 校验人车 和 班次的公司和分公司归属
265   - *
266   - * @param schId
267   - * @param jGh
268   - * @param sGh
269   - * @param nbbm
270   - * @return -2 跨营运公司,校验不过
271   - * -1 跨分公司,二次确认
272   - * 1 校验通过
273   - */
274   - @Override
275   - public Map<String, Object> checkPCFgsAscription(Long schId, String jGh, String sGh, String nbbm) {
276   - Map<String, Object> rs = new HashMap<>();
277   - try {
278   - rs.put("status", ResponseCode.SUCCESS);
279   - rs.put("checkStatus", -2);
280   -
281   - String msg = null;
282   - ScheduleRealInfo sch = dayOfSchedule.get(schId);
283   - String gsbm = sch.getGsBm(), fgsbm = sch.getFgsBm();
284   -
285   - if (nbbm != null && !carExist(gsbm, nbbm)) {
286   - msg = sch.getGsName() + "没有自编号为" + "[" + nbbm + "]的车辆";
287   - rs.put("msg", msg);
288   - return rs;
289   - }
290   -
291   - if (nbbm != null && !sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(nbbm))) {
292   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + nbbm + "】的车辆");
293   - return rs;
294   - }
295   -
296   - if (nbbm != null && !(fgsbm + "_" + gsbm).equals(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm))) {
297   -
298   - String clFgsName = BasicData.businessFgsCodeNameMap.get(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm));
299   -
300   - msg = ("【" + nbbm + "】" + "是" + clFgsName + "的车辆!");
301   - rs.put("msg", msg);
302   - rs.put("checkStatus", -1);
303   - return rs;
304   - }
305   -
306   - if(null != jGh && !"/".equals(StringUtils.trim(jGh))){
307   - Personnel jsy = BasicData.perMap.get(gsbm + "-" + jGh);
308   -
309   - if (null == jsy) {
310   - msg = "【驾驶员】:" + sch.getGsName() + "暂无工号为" + "【" + jGh + "】的人员";
311   - rs.put("msg", msg);
312   - return rs;
313   - }
314   - else if (!fgsbm.equals(jsy.getBrancheCompanyCode())) {
315   - //校验分公司
316   - msg = ("【驾驶员】:" + jGh + "/" + jsy.getPersonnelName() + "是" + jsy.getBrancheCompany() + "的人员");
317   - rs.put("msg", msg);
318   - rs.put("checkStatus", -1);
319   - return rs;
320   - }
321   - }
322   -
323   - if (null != sGh && !"/".equals(StringUtils.trim(sGh))) {
324   - Personnel spy = BasicData.perMap.get(gsbm + "-" + sGh);
325   - if (null == spy) {
326   - msg = "【售票员】: " + sch.getGsName() + "暂无工号为" + "【" + sGh + "】的人员";
327   - rs.put("msg", msg);
328   - return rs;
329   - }
330   - else if (!fgsbm.equals(spy.getBrancheCompanyCode())) {
331   - msg = ("【售票员】: " + sGh + "/" + spy.getPersonnelName() + "是" + spy.getBrancheCompany() + "的人员");
332   - rs.put("msg", msg);
333   - rs.put("checkStatus", -1);
334   - return rs;
335   - }
336   - }
337   -
338   - rs.put("checkStatus", 1);
339   - } catch (Exception e) {
340   - logger.error("", e);
341   - rs.put("status", ResponseCode.ERROR);
342   - }
343   - return rs;
344   - }
345   -
346   -
347   - /**
348   - * 车辆是否存在
349   - *
350   - * @param gsbm 公司编码
351   - * @param nbbm 车辆自编号
352   - * @return
353   - */
354   - private boolean carExist(String gsbm, String nbbm) {
355   - return BasicData.nbbm2CompanyCodeMap.containsKey(nbbm);
356   - }
357   -
358   - /**
359   - * 获取人员姓名
360   - *
361   - * @param gsbm 公司编码
362   - * @param gh 人员工号
363   - * @return
364   - */
365   - private String getPersonName(String gsbm, String gh) {
366   - return BasicData.allPerson.get(gsbm + '-' + gh);
367   - }
368   -
369   - @Override
370   - public Iterable<ScheduleRealInfo> list(Map<String, Object> map) {
371   - Iterator<ScheduleRealInfo> iterator = super.list(map).iterator();
372   - Set<ScheduleRealInfo> set = new HashSet<>(100);
373   -
374   - DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
375   - //计算时间戳
376   - ScheduleRealInfo sch;
377   - while (iterator.hasNext()) {
378   - sch = iterator.next();
379   - //待发时间戳
380   - sch.setDfsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getDfsj()));
381   - //实发时间戳
382   - if (StringUtils.isNotEmpty(sch.getFcsjActual())) {
383   - sch.setFcsjActualTime(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsjActual()));
384   - }
385   - set.add(sch);
386   - }
387   - return set;
388   - }
389   -
390   - @Override
391   - public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
392   - List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
393   -
394   - /*Multimap<String, ScheduleRealInfo> mMap = ArrayListMultimap.create();
395   -
396   - for (String lineCode : lineList) {
397   - mMap.putAll(lineCode, dayOfSchedule.findByLineCode(lineCode));
398   - }*/
399   - return dayOfSchedule.findByLineCodes(lineList);
400   - }
401   -
402   - private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
403   -
404   - private static int BUF_SIZE = 1024;
405   -
406   - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
407   - private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
408   -
409   - @Override
410   - public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType, String userId) {
411   - Map<String, Object> map = new HashMap<>();
412   - try {
413   -
414   - ScheduleRealInfo schedule = dayOfSchedule.get(id);
415   -
416   - if (schedule.getStatus() > 0) {
417   - map.put("status", ResponseCode.SUCCESS);
418   - map.put("flag", "4008");
419   - map.put("t", schedule);
420   - return map;
421   - }
422   -
423   - LineConfig config = lineConfigData.get(schedule.getXlBm());
424   - //小于线路开始运营时间,则默认跨过24点
425   - if (dfsj.compareTo(config.getStartOpt()) < 0) {
426   - schedule.setRealExecDate(fmtyyyyMMdd.print(schedule.getScheduleDate().getTime() + DAY_TIME));
427   - } else {
428   - schedule.setRealExecDate(schedule.getScheduleDateStr());
429   - }
430   -
431   - //记录日志
432   - ScheduleModifyLogger.dftz(schedule, opType, schedule.getDfsj(), dfsj, remarks, userId);
433   -
434   - schedule.setDfsjAll(dfsj);
435   - schedule.setDfAuto(false);
436   - if ("1".equals(opType))
437   - schedule.setRemarks(remarks);
438   -
439   - List<ScheduleRealInfo> ts = new ArrayList<>();
440   - ts.add(schedule);
441   - //调整终点时间和下一个班次的应到时间
442   - //schedule.calcEndTime();
443   - /*ScheduleRealInfo nextSch = dayOfSchedule.nextByLp2(schedule);
444   - if (null != nextSch) {
445   - nextSch.setQdzArrDatejh(schedule.getZdsj());
446   - ts.add(nextSch);
447   - }*/
448   -
449   - //调整班次类型
450   - if (StringUtils.isNotEmpty(bcType) && !bcType.equals(schedule.getBcType())) {
451   - if ((schedule.getBcType().equals("major")
452   - || schedule.getBcType().equals("venting"))
453   - && bcType.equals("normal")) {
454   - //清空备注
455   - schedule.setRemarks("");
456   - }
457   - schedule.setBcType(bcType);
458   - }
459   -
460   - //如果正在执行该班次
461   - //ScheduleRealInfo exec = dayOfSchedule.executeCurr(schedule.getClZbh());
462   - //if(exec != null && exec == schedule){
463   - //重新计算正在执行班次
464   - dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
465   - //}
466   -
467   - //重新计算是否误点
468   - schedule.reCalcLate();
469   - //取消应发未到标记,不再自动调整待发
470   - //if(schedule.isLate2()){
471   - // schedule.setLate2(false);
472   - //LateAdjustHandle.remove(schedule);
473   - //}
474   -
475   - try {
476   - if (!schedule.getDirectiveState().equals(-1) && schedule.getStatus() == 0) {
477   - //重新下发调度指令
478   - directiveService.send60Dispatch(schedule.getId(), "待发@系统");
479   - }
480   - } catch (Exception e) {
481   - logger.error("", e);
482   - }
483   -
484   - // 持久化到数据库
485   - dayOfSchedule.save(schedule);
486   -
487   - map.put("status", ResponseCode.SUCCESS);
488   - map.put("ts", ts);
489   - } catch (Exception e) {
490   - logger.error("", e);
491   - map.put("status", ResponseCode.ERROR);
492   - }
493   - return map;
494   - }
495   -
496   - @Override
497   - public Map<String, Object> destroy(String idsStr, String remarks, String reason, String userId) {
498   -
499   - Map<String, Object> map = new HashMap<>();
500   - List<ScheduleRealInfo> rsList = new ArrayList<>();
501   - map.put("ts", rsList);
502   - try {
503   - List<String> idList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(idsStr));
504   -
505   - ScheduleRealInfo schedule = null;
506   - for (String id : idList) {
507   - schedule = dayOfSchedule.get(Long.parseLong(id));
508   - if (schedule.isDestroy()) {
509   - map.put("status", ResponseCode.ERROR);
510   - map.put("msg", "不必要的重复烂班!");
511   - return map;
512   - }
513   - //记录日志
514   - ScheduleModifyLogger.jhlb(schedule, remarks, userId);
515   -
516   - schedule.setAdjustExps(reason);
517   - schedule.destroy();
518   - schedule.addRemarks(remarks);
519   -
520   - dayOfSchedule.save(schedule);
521   - rsList.add(schedule);
522   - }
523   -
524   - //重新计算当前执行班次
525   - dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
526   -
527   - map.put("status", ResponseCode.SUCCESS);
528   - } catch (Exception e) {
529   - logger.error("", e);
530   - map.put("status", ResponseCode.ERROR);
531   - }
532   - return map;
533   - }
534   -
535   - // 线路id获取驾驶员
536   - @Override
537   - public List<Map<String, String>> findDriverByLine(String lineCode) {
538   - List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
539   -
540   - List<Map<String, String>> rsList = new ArrayList<>();
541   - Map<String, String> map = null;
542   - Personnel driver = null;
543   - String code = null;
544   -
545   - for (EmployeeConfigInfo employee : list) {
546   - driver = employee.getJsy();
547   - if (driver != null) {
548   - map = new HashMap<>();
549   - code = driver.getJobCode();
550   - map.put("id", code + "/" + driver.getPersonnelName());
551   - map.put("text", code + "/" + driver.getPersonnelName());
552   - rsList.add(map);
553   - }
554   - }
555   - return rsList;
556   - }
557   -
558   - // 线路id获取售票员
559   - @Override
560   - public List<Map<String, String>> findConductorByLine(String lineCode) {
561   - List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
562   -
563   - List<Map<String, String>> rsList = new ArrayList<>();
564   - Map<String, String> map = null;
565   - Personnel conductor = null;
566   - String code = null;
567   -
568   - for (EmployeeConfigInfo employee : list) {
569   - conductor = employee.getSpy();
570   - if (conductor != null) {
571   - code = conductor.getJobCode();
572   - map = new HashMap<>();
573   - map.put("id", code + "/" + conductor.getPersonnelName());
574   - map.put("text", code + "/" + conductor.getPersonnelName());
575   - rsList.add(map);
576   - }
577   - }
578   - return rsList;
579   - }
580   -
581   - @Override
582   - public List<Map<String, String>> findCarByLine(String lineCode) {
583   -
584   - List<CarConfigInfo> list = carConfigInfoRepository.findBylineCode(lineCode);
585   -
586   - List<Map<String, String>> rsList = new ArrayList<>();
587   - Map<String, String> map = null;
588   - Cars car = null;
589   - String code = null;
590   -
591   - for (CarConfigInfo cci : list) {
592   - car = cci.getCl();
593   - if (car != null) {
594   - code = car.getInsideCode();
595   - map = new HashMap<>();
596   - map.put("id", code);
597   - map.put("text", code);
598   - rsList.add(map);
599   - }
600   - }
601   - return rsList;
602   - }
603   -
604   - /**
605   - * 添加到历史库
606   - *
607   - * @param t
608   - * @return
609   - */
610   - @Override
611   - public Map<String, Object> addToHistory(ScheduleRealInfo t) {
612   - Map<String, Object> rs = new HashMap<>();
613   - try {
614   - if (!carExist(t.getGsBm(), t.getClZbh())) {
615   - rs.put("msg", "车辆 " + t.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
616   - rs.put("status", ResponseCode.ERROR);
617   - return rs;
618   - }
619   -
620   - SysUser user = SecurityUtils.getCurrentUser();
621   - //String schDate = DayOfSchedule.currSchDateMap.get(t.getXlBm());
622   -
623   - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
624   -
625   - if (StringUtils.isEmpty(t.getjGh())) {
626   - rs.put("status", ResponseCode.ERROR);
627   - rs.put("msg", "驾驶员工号不能为空!");
628   - return rs;
629   - }
630   - //截取驾驶员工号
631   - if (t.getjGh().indexOf("-") != -1) {
632   - t.setjGh(t.getjGh().split("-")[1]);
633   - }
634   - //检查驾驶员工号
635   - String jName = getPersonName(t.getGsBm(), t.getjGh());
636   - if (StringUtils.isEmpty(jName)) {
637   - rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的驾驶员");
638   - rs.put("status", ResponseCode.ERROR);
639   - return rs;
640   - } else if (StringUtils.isEmpty(t.getjName())) {
641   - t.setjName(jName);//补上驾驶员名称
642   - }
643   -
644   - //有售票员
645   - if (StringUtils.isNotEmpty(t.getsGh())) {
646   - String sName = getPersonName(t.getGsBm(), t.getsGh());
647   - if (StringUtils.isEmpty(sName)) {
648   - rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的售票员");
649   - rs.put("status", ResponseCode.ERROR);
650   - return rs;
651   - } else if (StringUtils.isEmpty(t.getsName())) {
652   - t.setsName(sName);//补上售票员名称
653   - }
654   - } else {
655   - t.setsGh("");
656   - t.setsName("");
657   - }
658   -
659   - //公司 和 分公司名称
660   - t.setGsName(BasicData.businessCodeNameMap.get(t.getGsBm()));
661   - t.setFgsName(BasicData.businessFgsCodeNameMap.get(t.getFgsBm()+ "_" + t.getGsBm() ));
662   -
663   - //t.setScheduleDateStr(schDate);
664   - t.setScheduleDate(sdfyyyyMMdd.parse(t.getScheduleDateStr()));
665   - t.setRealExecDate(t.getScheduleDateStr());
666   - t.setCreateBy(user);
667   - t.setSflj(true);
668   - t.setLate(false);
669   - t.setDfsj(t.getFcsj());
670   - t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime());
671   - t.setJhlcOrig(t.getJhlc());
672   -
673   - //班次历时
674   - t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
675   -
676   - //起终点名称
677   - String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
678   - t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
679   - t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
680   -
681   - //计算班次实际执行时间
682   - schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
683   - //处理计达跨24点
684   - LineConfig conf = lineConfigData.get(t.getXlBm());
685   - if (t.getZdsj().compareTo(conf.getStartOpt()) < 0) {
686   - t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
687   - }
688   - if (t.getZdsjT() < t.getFcsjT()) {
689   - rs.put("status", ResponseCode.ERROR);
690   - rs.put("msg", "起终点时间异常!");
691   - return rs;
692   - }
693   -
694   - t.setId(dayOfSchedule.getId());
695   - //实时入库
696   - rs = super.save(t);
697   - } catch (Exception e) {
698   - logger.error("", e);
699   - rs.put("status", ResponseCode.ERROR);
700   - }
701   - return rs;
702   - }
703   -
704   -
705   - /**
706   - * 临加班次
707   - */
708   - @Override
709   - public Map<String, Object> save(ScheduleRealInfo sch) {
710   - Map<String, Object> rs = new HashMap<>();
711   - try {
712   - String clZbh = sch.getClZbh();
713   - if (StringUtils.isNotEmpty(clZbh)) {
714   - //检测
715   - if (!carExist(sch.getGsBm(), clZbh)) {
716   - rs.put("status", ResponseCode.ERROR);
717   - rs.put("msg", "车辆 " + clZbh + " 不存在!");
718   - return rs;
719   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
720   - rs.put("status", ResponseCode.ERROR);
721   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
722   - return rs;
723   - }
724   - }
725   -
726   - SysUser user = SecurityUtils.getCurrentUser();
727   - String schDate = DayOfSchedule.currSchDateMap.get(sch.getXlBm());
728   -
729   - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
730   -
731   - if (StringUtils.isEmpty(sch.getjGh())) {
732   - rs.put("status", ResponseCode.ERROR);
733   - rs.put("msg", "驾驶员工号不能为空!");
734   - return rs;
735   - }
736   - //截取驾驶员工号
737   - if (sch.getjGh().indexOf("-") != -1) {
738   - sch.setjGh(sch.getjGh().split("-")[1]);
739   - }
740   - //检查驾驶员工号
741   - String jName = getPersonName(sch.getGsBm(), sch.getjGh());
742   - if (StringUtils.isEmpty(jName)) {
743   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
744   - rs.put("status", ResponseCode.ERROR);
745   - return rs;
746   - } else if (StringUtils.isEmpty(sch.getjName())) {
747   - sch.setjName(jName);//补上驾驶员名称
748   - }
749   -
750   - //有售票员
751   - if (StringUtils.isNotEmpty(sch.getsGh())) {
752   - String sName = getPersonName(sch.getGsBm(), sch.getsGh());
753   - if (StringUtils.isEmpty(sName)) {
754   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的售票员");
755   - rs.put("status", ResponseCode.ERROR);
756   - return rs;
757   - } else if (StringUtils.isEmpty(sch.getsName())) {
758   - sch.setsName(sName);//补上售票员名称
759   - }
760   - } else {
761   - sch.setsGh("");
762   - sch.setsName("");
763   - }
764   -
765   - //公司 和 分公司名称
766   - sch.setGsName(BasicData.businessCodeNameMap.get(sch.getGsBm()));
767   - sch.setFgsName(BasicData.businessFgsCodeNameMap.get(sch.getFgsBm() + "_" + sch.getGsBm()));
768   - sch.setCreateDate(new Date());
769   - sch.setScheduleDateStr(schDate);
770   - sch.setScheduleDate(sdfyyyyMMdd.parse(schDate));
771   - sch.setRealExecDate(schDate);
772   -
773   - sch.setCreateBy(user);
774   - sch.setSflj(true);
775   - sch.setLate(false);
776   - sch.setDfsj(sch.getFcsj());
777   - sch.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + sch.getZdsj()).getTime());
778   - sch.setJhlcOrig(sch.getJhlc());
779   - sch.setCreateDate(new Date());
780   - sch.setUpdateDate(new Date());
781   - sch.setSpId(-1L);
782   - //起终点名称
783   - String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
784   - sch.setQdzName(BasicData.getStationNameByCode(sch.getQdzCode(), prefix));
785   - sch.setZdzName(BasicData.getStationNameByCode(sch.getZdzCode(), prefix));
786   -
787   - //计算班次实际执行时间
788   - schAttrCalculator.calcRealDate(sch).calcAllTimeByFcsj(sch);
789   -
790   - //处理计达跨24点
791   - LineConfig conf = lineConfigData.get(sch.getXlBm());
792   - if (sch.getZdsj().compareTo(conf.getStartOpt()) < 0) {
793   - sch.setZdsjT(sdfyyyyMMddHHmm.parse(sch.getScheduleDateStr() + sch.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
794   - }
795   -
796   - //班次历时
797   - sch.setBcsj((int) ((sch.getZdsjT() - sch.getDfsjT()) / 1000 / 60));
798   - if (sch.getZdsjT() < sch.getFcsjT()) {
799   - rs.put("status", ResponseCode.ERROR);
800   - rs.put("msg", "起终点时间异常!");
801   - return rs;
802   - }
803   -
804   - sch.setId(dayOfSchedule.getId());
805   - //实时入库
806   - super.save(sch);
807   -
808   - // 加入缓存
809   - dayOfSchedule.put(sch);
810   -
811   - //更新起点应到时间
812   - List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
813   -
814   - //重新计算车辆当前执行班次
815   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
816   -
817   - //记录站到场历时数据
818   - Station2ParkBuffer.put(sch);
819   -
820   - rs.put("ts", ts);
821   - rs.put("t", sch);
822   - } catch (Exception e) {
823   - logger.error("", e);
824   - rs.put("status", ResponseCode.ERROR);
825   - }
826   - return rs;
827   - }
828   -
829   - /**
830   - * 删除历史表临加班次
831   - *
832   - * @param id
833   - * @return
834   - */
835   - @Override
836   - public Map<String, Object> deleteToHistory(Long id) {
837   - Map<String, Object> rs = new HashMap<>();
838   - rs.put("status", ResponseCode.ERROR);
839   -
840   - try {
841   - ScheduleRealInfo sch = super.findById(id);
842   - if (sch == null) {
843   - rs.put("msg", "无效的id号");
844   - return rs;
845   - }
846   -
847   - if (!sch.isSflj()) {
848   - rs.put("msg", "你只能删除临加班次");
849   - return rs;
850   - }
851   -
852   - //解除和调度指令的外键约束
853   - jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
854   -
855   - //数据库删除
856   - rs = super.delete(id);
857   - } catch (Exception e) {
858   - logger.error("", e);
859   - rs.put("msg", e.getMessage());
860   - }
861   -
862   - return rs;
863   - }
864   -
865   - @Override
866   - public Map<String, Object> delete(Long id) {
867   - Map<String, Object> rs = new HashMap<>();
868   - rs.put("status", ResponseCode.ERROR);
869   -
870   - ScheduleRealInfo sch = null;
871   - try {
872   - sch = dayOfSchedule.get(id);
873   - if (sch == null) {
874   - rs.put("msg", "无效的id号");
875   - return rs;
876   - }
877   -
878   - if (!sch.isSflj()) {
879   - rs.put("msg", "你只能删除临加班次");
880   - return rs;
881   - }
882   -
883   - sch.setDeleted(true);
884   - //解除和调度指令的外键约束
885   - jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
886   -
887   - //数据库删除
888   - rs = super.delete(id);
889   - if (rs.get("status").equals(ResponseCode.SUCCESS)) {
890   - dayOfSchedule.delete(sch);
891   - //更新起点应到时间
892   - List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
893   - rs.put("ts", ts);
894   - rs.put("delete", sch);
895   - } else
896   - sch.setDeleted(false);
897   - } catch (Exception e) {
898   - logger.error("", e);
899   - rs.put("msg", e.getMessage());
900   - sch.setDeleted(false);
901   - }
902   -
903   - return rs;
904   - }
905   -
906   - @Override
907   - public List<Map<String, String>> sreachVehic(String nbbm) {
908   - // 转大写
909   - nbbm = nbbm.toUpperCase();
910   -
911   - List<Map<String, String>> list = new ArrayList<>();
912   - Map<String, String> map;
913   - Set<String> allSet = BasicData.nbbm2CompanyCodeMap.keySet();
914   -
915   - Line line;
916   - for (String k : allSet) {
917   - if (k.indexOf(nbbm) != -1) {
918   - // 所属线路
919   - map = new HashMap<>();
920   - line = BasicData.nbbm2LineMap.get(k);
921   - map.put("id", k);
922   - map.put("text", k);
923   - if (null != line) {
924   - map.put("lineName", line.getName());
925   - map.put("lineCode", line.getLineCode());
926   - }
927   -
928   - list.add(map);
929   - }
930   -
931   - if (list.size() > 20)
932   - break;
933   - }
934   - return list;
935   - }
936   -
937   - @Override
938   - public void adjustCar(ScheduleRealInfo schedule, String car) {
939   - schedule.setClZbh(car);
940   - }
941   -
942   - @Override
943   - public void adjustDriver(ScheduleRealInfo schedule, String driver, String driverName) {
944   - if (driver.indexOf("-") != -1)
945   - driver = driver.split("-")[1];
946   - schedule.setjGh(driver);
947   - schedule.setjName(driverName);
948   - }
949   -
950   - @Override
951   - public void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName) {
952   - if (conductor.indexOf("-") != -1)
953   - conductor = conductor.split("-")[1];
954   - schedule.setsGh(conductor);
955   - schedule.setsName(conductorName);
956   - }
957   -
958   - @Override
959   - public List<ScheduleRealInfo> queryUserInfo(String line, String date, String state) {
960   - List<ScheduleRealInfo> scheduleRealInfos = new ArrayList<>();
961   - List<Object[]> objects = null;
962   - if (state.equals("2")) {
963   - objects = scheduleRealInfoRepository.queryUserInfo2(line, date);
964   - for (Object[] objs : objects) {
965   - ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
966   - scheduleRealInfo.setId((Long)objs[0]);
967   - scheduleRealInfo.setjGh((String)objs[1]);
968   - scheduleRealInfo.setClZbh((String)objs[2]);
969   - scheduleRealInfo.setLpName((String)objs[3]);
970   - scheduleRealInfo.setjName((String)objs[4]);
971   -
972   - scheduleRealInfos.add(scheduleRealInfo);
973   - }
974   - } else {
975   - objects = scheduleRealInfoRepository.queryUserInfo3(line, date);
976   - for (Object[] objs : objects) {
977   - ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
978   - scheduleRealInfo.setId((Long)objs[0]);
979   - scheduleRealInfo.setClZbh((String)objs[1]);
980   -
981   - scheduleRealInfos.add(scheduleRealInfo);
982   - }
983   - }
984   -
985   - return scheduleRealInfos;
986   - }
987   -
988   - @Override
989   - public List<ScheduleRealInfo> queryUserInfoPx(String line, String date, String state, String type) {
990   -// List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
991   - state = state + "";
992   - String lpname = state;
993   - String px = type;
994   - if (state.equals("lpName")) {
995   - state = state + "+1";
996   - type = "ASC";
997   - }
998   - String minfcsj = "02:00";
999   - List<Line> lineList = lineRepository.findLineByCode(line);
1000   - if (lineList.size() > 0) {
1001   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
1002   - + " id = ("
1003   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
1004   - + ")";
1005   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
1006   - }
1007   - String sqlPlan = "select * from (select * from ("
1008   - + " select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
1009   - + " s.lp_Name as lpName,min(s.j_Name) as jName,max(s.schedule_date_str) as dateStr ,"
1010   - + " min(s.fcsj) as fcsj,1 as px from bsth_c_s_sp_info_real s where "
1011   - + " s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
1012   - + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name) x where x.fcsj >'" + minfcsj + "'"
1013   - + " UNION "
1014   - + " select * from ( select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
1015   - + " s.lp_Name as lpName,min(s.j_Name) as jName, max(s.schedule_date_str) as dateStr,"
1016   - + " min(s.fcsj) as fcsj,2 as px from bsth_c_s_sp_info_real s "
1017   - + " where s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
1018   - + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name"
1019   - + " ) y where y.fcsj <='" + minfcsj + "') z order by (" + state + "),dateStr,px,fcsj " + type;
1020   - List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan,
1021   - new RowMapper<ScheduleRealInfo>() {
1022   - @Override
1023   - public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
1024   - ScheduleRealInfo t = new ScheduleRealInfo();
1025   - t.setId(rs.getLong("id"));
1026   - t.setjGh(rs.getString("jGh"));
1027   - t.setClZbh(rs.getString("clZbh"));
1028   - t.setLpName(rs.getString("lpName"));
1029   - t.setjName(rs.getString("jName"));
1030   - t.setFcsj(rs.getString("fcsj"));
1031   - return t;
1032   - }
1033   - });
1034   - if (lpname.equals("lpName")) {
1035   -
1036   - List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>();
1037   - Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
1038   -// if (px.equals("desc")) {
1039   - int zt = 0;
1040   - for (int l = 0; l < 2; l++) {
1041   - for (int i = 0; i < list.size(); i++) {
1042   - ScheduleRealInfo t = list.get(i);
1043   - if (t.getLpName().indexOf("+") != -1) {
1044   - if (zt == 0) {
1045   - listNew.add(t);
1046   - }
1047   - } else if (pattern.matcher(t.getLpName()).matches()) {
1048   - if (zt == 1) {
1049   - listNew.add(t);
1050   - }
1051   - } else {
1052   - continue;
1053   - }
1054   - }
1055   - zt++;
1056   - }
1057   -
1058   - Collections.sort(list, new ComparableLp());
1059   - for (int i = 0; i < list.size(); i++) {
1060   - ScheduleRealInfo t = list.get(i);
1061   - if (t.getLpName().indexOf("+") != -1) {
1062   - continue;
1063   - } else if (pattern.matcher(t.getLpName()).matches()) {
1064   - continue;
1065   - } else {
1066   - listNew.add(t);
1067   - }
1068   - }
1069   - return listNew;
1070   - } else {
1071   - return list;
1072   - }
1073   -
1074   - }
1075   -
1076   - /**
1077   - *
1078   - */
1079   - @Override
1080   - public List<ScheduleRealInfo> exportWaybill(String jName,String jGh, String clZbh, String lpName, String date, String line) {
1081   - ReportUtils ee = new ReportUtils();
1082   - ReportRelatedUtils rru = new ReportRelatedUtils();
1083   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
1084   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
1085   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
1086   -// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
1087   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
1088   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1089   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1090   - Set<ChildTaskPlan> cts = s.getcTasks();
1091   - if (cts != null && cts.size() > 0) {
1092   - lists.add(s);
1093   - } else {
1094   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
1095   - lists.add(s);
1096   - }
1097   - }
1098   - }
1099   - DecimalFormat format = new DecimalFormat("0.00");
1100   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
1101   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
1102   - //计算里程和班次数,并放入Map里
1103   - Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
1104   -
1105   - map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
1106   - map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
1107   - map.put("addMileage", culateMieageService.culateLjgl(lists));
1108   - double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
1109   - map.put("yygl", yygl);
1110   - double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
1111   - map.put("ksgl", ksgl);
1112   - map.put("realMileage", Arith.add(yygl, ksgl));
1113   - map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
1114   - map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
1115   - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
1116   - int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
1117   - map.put("sjbc", sjbc);
1118   -// map=new HashMap<String,Object>();
1119   -
1120   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
1121   - String minfcsj = "02:00";
1122   - List<Line> lineList = lineRepository.findLineByCode(line);
1123   - if (lineList.size() > 0) {
1124   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
1125   - + " id = ("
1126   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
1127   - + ")";
1128   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
1129   - }
1130   - String[] minSjs = minfcsj.split(":");
1131   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
1132   -
1133   -
1134   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1135   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1136   - String[] fcsj = s.getFcsj().split(":");
1137   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
1138   -
1139   - Long fscjT = 0L;
1140   - if (fcsjL < minSj) {
1141   - Calendar calendar = new GregorianCalendar();
1142   - calendar.setTime(s.getScheduleDate());
1143   - calendar.add(calendar.DATE, 1);
1144   - s.setScheduleDate(calendar.getTime());
1145   - try {
1146   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
1147   - } catch (ParseException e) {
1148   - // TODO Auto-generated catch block
1149   - e.printStackTrace();
1150   - }
1151   -
1152   - } else {
1153   - try {
1154   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
1155   - } catch (ParseException e) {
1156   - // TODO Auto-generated catch block
1157   - e.printStackTrace();
1158   - }
1159   - ;
1160   - }
1161   - s.setFcsjT(fscjT);
1162   - }
1163   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
1164   - Collections.sort(scheduleRealInfos, new ComparableReal());
1165   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1166   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1167   - s.setAdjustExps(i + 1 + "");
1168   - String remarks = "";
1169   - if (s.getRemarks() != null) {
1170   - remarks += s.getRemarks();
1171   - }
1172   -
1173   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
1174   - if (!childTaskPlans.isEmpty()) {
1175   - s.setFcsjActual("");
1176   - s.setZdsjActual("");
1177   - s.setJhlc(0.0);
1178   - }
1179   -
1180   - if (s.isDestroy()) {
1181   - s.setFcsjActual("");
1182   - s.setZdsjActual("");
1183   - s.setJhlc(0.0);
1184   - remarks += "(烂班)";
1185   - s.setRemarks(remarks);
1186   - }
1187   -
1188   - listSchedule.add(s);
1189   - //计算营运里程,空驶里程
1190   - if (!childTaskPlans.isEmpty()) {
1191   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
1192   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
1193   - Collections.sort(listit, new ComparableChild());
1194   - for (int j = 0; j < listit.size(); j++) {
1195   - ScheduleRealInfo t = new ScheduleRealInfo();
1196   - ChildTaskPlan childTaskPlan = listit.get(j);
1197   - if (childTaskPlan.isDestroy()) {
1198   - t.setFcsjActual("");
1199   - t.setZdsjActual("");
1200   - t.setJhlc(0.0);
1201   - } else {
1202   - t.setFcsjActual(childTaskPlan.getStartDate());
1203   - t.setZdsjActual(childTaskPlan.getEndDate());
1204   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
1205   - }
1206   - t.setQdzName(childTaskPlan.getStartStationName());
1207   - t.setZdzName(childTaskPlan.getEndStationName());
1208   - t.setRemarks(childTaskPlan.getRemarks());
1209   - t.setAdjustExps("子");
1210   - t.setjGh("");
1211   - t.setjName("");
1212   - t.setsGh("");
1213   - t.setsName("");
1214   - listSchedule.add(t);
1215   - }
1216   - }
1217   - }
1218   - Map<String, Object> maps;
1219   - for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
1220   - maps = new HashMap<String, Object>();
1221   - try {
1222   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
1223   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
1224   - maps = rru.getMapValue(scheduleRealInfo);
1225   - maps.put("bcs", scheduleRealInfo.getAdjustExps());
1226   - String zdsj = scheduleRealInfo.getZdsj();
1227   - String zdsjActual = scheduleRealInfo.getZdsjActual();
1228   - if (zdsj != null && zdsjActual != null &&
1229   - !zdsj.equals(zdsjActual) &&
1230   - !zdsj.equals("") &&
1231   - !zdsjActual.equals("")) {
1232   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
1233   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
1234   - if (zdsj.compareTo(zdsjActual) > 0) {
1235   - if (zdsjT - zdsjAT > 1000) {
1236   - maps.put("fast", "");
1237   - maps.put("slow", zdsjAT - zdsjT + 1440);
1238   - } else {
1239   - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
1240   - maps.put("slow", "");
1241   - }
1242   - } else {
1243   - if (zdsjAT - zdsjT > 1000) {
1244   - maps.put("fast", zdsjT - zdsjAT + 1440);
1245   - maps.put("slow", "");
1246   - } else {
1247   - maps.put("fast", "");
1248   - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
1249   - }
1250   - }
1251   - } else {
1252   - maps.put("fast", "");
1253   - maps.put("slow", "");
1254   - }
1255   - listMap.add(maps);
1256   - } catch (Exception e) {
1257   - e.printStackTrace();
1258   - }
1259   - }
1260   -
1261   - String xls = "";
1262   - if (map.get("type").toString().equals("0")) {
1263   - xls = "waybill_minhang.xls";
1264   - } else {
1265   - xls = "waybill_minhang_dl.xls";
1266   - }
1267   -
1268   -
1269   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1270   -
1271   - list.add(listMap.iterator());
1272   - ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/" + xls,
1273   - path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
1274   - return scheduleRealInfos;
1275   - }
1276   -
1277   - @Override
1278   - public List<Map<String, Object>> dailyInfo(String line, String date, String type) {
1279   - DecimalFormat format = new DecimalFormat("0.00");
1280   - ReportUtils ee = new ReportUtils();
1281   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1282   - List<Map<String, Object>> list = scheduleRealInfoRepository.dailyInfo(line, date);
1283   -
1284   - double totalZGL = 0, totalKSGL = 0, totalYH = 0;
1285   - int totalBCS = 0;
1286   - for (int i = 0; i < list.size(); i++) {
1287   - String zgl = format.format(Double.parseDouble(list.get(i).get("zgl") == null ? "0" : list.get(i).get("zgl").toString()));
1288   - String ksgl = format.format(Double.parseDouble(list.get(i).get("ksgl") == null ? "0" : list.get(i).get("ksgl").toString()));
1289   - if (type.equals("export")) {
1290   - totalZGL += Double.parseDouble(zgl);
1291   - totalKSGL += Double.parseDouble(ksgl);
1292   - totalBCS += Integer.parseInt(list.get(i).get("bcs").toString());
1293   - }
1294   - list.get(i).put("zgl", zgl);
1295   - list.get(i).put("ksgl", ksgl);
1296   - }
1297   - if (type.equals("export")) {
1298   - Map<String, Object> map = new HashMap<String, Object>();
1299   - map.put("line", line);
1300   - map.put("date", date);
1301   - map.put("totalZGL", totalZGL);
1302   - map.put("totalKSGL", totalKSGL);
1303   - map.put("totalYH", totalYH);
1304   - map.put("totalBCS", totalBCS);
1305   -
1306   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1307   -
1308   - listI.add(list.iterator());
1309   - try {
1310   - ee.excelReplace(listI, new Object[]{map}, path + "mould/daily.xls",
1311   - path + "export/班次日报" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
1312   - } catch (ParseException e) {
1313   - e.printStackTrace();
1314   - }
1315   - }
1316   - return list;
1317   - }
1318   -
1319   - @Override
1320   - public List<Object[]> historyMessage(String line, String date, String code, String type) {
1321   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
1322   -
1323   - long d = 0;
1324   - long t = 0;
1325   - if (date.length() > 0) {
1326   - try {
1327   - d = sdf.parse(date + " 00:00:00").getTime();
1328   - t = sdf.parse(date + " 23:59:59").getTime();
1329   - } catch (ParseException e) {
1330   - // TODO Auto-generated catch block
1331   - e.printStackTrace();
1332   - }
1333   -
1334   - }
1335   - String device = "";
1336   - String device2 ="";
1337   - long qyrqTime=0l;
1338   - if (!code.equals("")) {
1339   - try {
1340   - List<CarDevice> deviceList=carDeviceRepository.findCarCode(code, sdf.parse(date+ " 00:00:00"));
1341   - if(deviceList.size()>0){
1342   - device=deviceList.get(0).getOldDeviceNo();
1343   - Date qyrq=deviceList.get(0).getQyrq();
1344   - qyrqTime=qyrq.getTime();
1345   - if(qyrqTime<t){
1346   - device2=deviceList.get(0).getNewDeviceNo();
1347   - }
1348   - }else{
1349   - device = BasicData.deviceId2NbbmMap.inverse().get(code);
1350   - }
1351   - } catch (ParseException e) {
1352   - // TODO Auto-generated catch block
1353   - e.printStackTrace();
1354   - }
1355   - }
1356   - List<Object[]> list=new ArrayList<Object[]>();
1357   -
1358   - List<Object[]> list0 =scheduleRealInfoRepository.historyMessage(line, d, t, device);
1359   - for (Object[] obj : list0) {
1360   - if (obj != null) {
1361   - if(code.equals("")){
1362   - if (BasicData.deviceId2NbbmMap.get(obj[0].toString()) == null) {
1363   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
1364   - try {
1365   - carDeviceList = carDeviceRepository.findCarDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
1366   - //启用日期大于营运日期 还是根据旧设备号查询
1367   - if(carDeviceList.size()==0){
1368   - carDeviceList = carDeviceRepository.findCarOldDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
1369   - }
1370   - } catch (Exception e) {
1371   - // TODO Auto-generated catch block
1372   - e.printStackTrace();
1373   - }
1374   - if (carDeviceList.size() > 0) {
1375   - obj[0] = carDeviceList.get(0).getClZbh();
1376   - } else {
1377   - obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
1378   - }
1379   - } else {
1380   - obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
1381   - }
1382   - }else{
1383   - obj[0]=code;
1384   - }
1385   -
1386   - obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
1387   - obj[4] = BasicData.lineCode2NameMap.get(line);
1388   - }
1389   - }
1390   - list.addAll(list0);
1391   - if(!device2.equals("")){
1392   - List<Object[]> list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2);
1393   - for (Object[] obj : list1) {
1394   - if (obj != null) {
1395   - obj[0] =code;
1396   - obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
1397   - obj[4] = BasicData.lineCode2NameMap.get(line);
1398   - }
1399   - }
1400   - list.addAll(list1);
1401   - }
1402   -
1403   - if (type != null && type.length() != 0 && type.equals("export")) {
1404   - String lineName = BasicData.lineCode2NameMap.get(line);
1405   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
1406   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
1407   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1408   - Map<String, Object> m = new HashMap<String, Object>();
1409   - ReportUtils ee = new ReportUtils();
1410   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
1411   - for (int i = 0; i < list.size(); i++) {
1412   - Map<String, Object> map = new HashMap<String, Object>();
1413   - Object[] obj = list.get(i);
1414   - map.put("num", i + 1);
1415   - map.put("line", obj[4]);
1416   - map.put("clZbh", obj[0]);
1417   - map.put("sender", obj[1]);
1418   - map.put("date", obj[3]);
1419   - map.put("text", obj[2]);
1420   - newList.add(map);
1421   - }
1422   - try {
1423   - listI.add(newList.iterator());
1424   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1425   - ee.excelReplace(listI, new Object[]{m}, path + "mould/historyMessage.xls",
1426   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
1427   - + "-" + lineName + "-调度历史消息.xls");
1428   - } catch (Exception e) {
1429   - // TODO: handle exception
1430   - e.printStackTrace();
1431   - }
1432   - }
1433   -
1434   - if (type != null && type.length() != 0 && type.equals("export_msg")) {
1435   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
1436   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
1437   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1438   - Map<String, Object> m = new HashMap<String, Object>();
1439   - ReportUtils ee = new ReportUtils();
1440   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
1441   - for (int i = 0; i < list.size(); i++) {
1442   - Map<String, Object> map = new HashMap<String, Object>();
1443   - Object[] obj = list.get(i);
1444   - map.put("num", i + 1);
1445   - map.put("line", obj[4]);
1446   - map.put("clZbh", obj[0]);
1447   - map.put("sender", obj[1]);
1448   - map.put("date", obj[3]);
1449   - map.put("text", obj[2]);
1450   - newList.add(map);
1451   - }
1452   - try {
1453   - listI.add(newList.iterator());
1454   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1455   - ee.excelReplace(listI, new Object[]{m}, path + "mould/message.xls",
1456   - path + "export/调度消息分析" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
1457   - } catch (Exception e) {
1458   - // TODO: handle exception
1459   - e.printStackTrace();
1460   - }
1461   - }
1462   - return list;
1463   - }
1464   -
1465   - @Override
1466   - public Map<Integer, Integer> trustStatus(String lineStr) {
1467   - List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lineStr));
1468   -
1469   - Map<Integer, Integer> map = new HashMap<>();
1470   - return map;
1471   - }
1472   -
1473   - @Override
1474   - public Map<String, Object> realOutAdjust(Map<String, String> map) {
1475   - Map<String, Object> rs = new HashMap<>();
1476   - List<ScheduleRealInfo> ts = new ArrayList<>();
1477   - try {
1478   - // 维修上报
1479   - if (StringUtils.isNotBlank(map.get("reportTypes"))) {
1480   - Map<String, Object> param = new HashMap<String, Object>();
1481   - param.putAll(map);
1482   - rs = repairReport(param, false);
1483   - }
1484   -
1485   - Long id = Long.parseLong(map.get("id"));
1486   - String remarks = map.get("remarks"), fcsjActual = map.get("fcsjActual");
1487   -
1488   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1489   -
1490   - LineConfig config = lineConfigData.get(sch.getXlBm());
1491   - //小于线路开始运营时间,则默认跨过24点
1492   - if (fcsjActual.compareTo(config.getStartOpt()) < 0) {
1493   - sch.setRealExecDate(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME));
1494   - } else {
1495   - sch.setRealExecDate(sch.getScheduleDateStr());
1496   - }
1497   -
1498   - //日志记录
1499   - ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
1500   -
1501   - sch.setFcsjActualAll(fcsjActual);
1502   - sch.setRemarks(remarks);
1503   - sch.calcStatus();
1504   - //if(sch.isLate2()){
1505   - //取消应发未到标记
1506   - // sch.setLate2(false);
1507   - LateAdjustHandle.remove(sch);
1508   - //}
1509   -
1510   - dayOfSchedule.save(sch);
1511   -
1512   - ts.add(sch);
1513   -
1514   - rs.put("status", ResponseCode.SUCCESS);
1515   - rs.put("ts", ts);
1516   -
1517   - //通知页面刷新
1518   - sendUtils.refreshSch(ts);
1519   - } catch (Exception e) {
1520   - logger.error("", e);
1521   - rs.put("status", ResponseCode.ERROR);
1522   - }
1523   -
1524   - return rs;
1525   - }
1526   -
1527   - @Override
1528   - public Map<String, Object> revokeDestroy(Long id) {
1529   - Map<String, Object> rs = new HashMap<>();
1530   - try {
1531   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1532   - if (sch.getStatus() != -1) {
1533   - rs.put("status", ResponseCode.ERROR);
1534   - rs.put("msg", "未烂班,无法撤销!");
1535   - } else {
1536   - //日志记录
1537   - ScheduleModifyLogger.cxlb(sch);
1538   -
1539   - sch.setStatus(0);
1540   - sch.setRemarks("");//清空备注
1541   - sch.setJhlc(sch.getJhlcOrig());
1542   -
1543   - //入库
1544   - dayOfSchedule.save(sch);
1545   - //重新计算当前执行班次
1546   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1547   - rs.put("status", ResponseCode.SUCCESS);
1548   - rs.put("t", sch);
1549   -
1550   - }
1551   - } catch (Exception e) {
1552   - logger.error("", e);
1553   - rs.put("status", ResponseCode.ERROR);
1554   - }
1555   - return rs;
1556   - }
1557   -
1558   - @Override
1559   - public Map<String, Object> revokeRealOutgo(Long id) {
1560   - Map<String, Object> rs = new HashMap<>();
1561   - List<ScheduleRealInfo> ts = new ArrayList<>();
1562   -
1563   - try {
1564   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1565   - if (sch.getFcsjActual() == null) {
1566   - rs.put("status", ResponseCode.ERROR);
1567   - rs.put("msg", "无实发时间,无法撤销!");
1568   - } else {
1569   - //日志记录
1570   - ScheduleModifyLogger.cxsf(sch);
1571   -
1572   - sch.clearFcsjActual();
1573   - rs.put("status", ResponseCode.SUCCESS);
1574   -
1575   - ts.add(sch);
1576   - rs.put("ts", ts);
1577   -
1578   - dayOfSchedule.save(sch);
1579   -
1580   - }
1581   - } catch (Exception e) {
1582   - logger.error("", e);
1583   - rs.put("status", ResponseCode.ERROR);
1584   - }
1585   - return rs;
1586   - }
1587   -
1588   - @Override
1589   - public Map<String, Object> spaceAdjust(Long[] ids, Integer space) {
1590   -
1591   - List<ScheduleRealInfo> list = new ArrayList<>(), ts = new ArrayList<>(), tempTs = null;
1592   - Map<String, Object> rs = new HashMap<>(), tempRs = new HashMap<>();
1593   - try {
1594   - ScheduleRealInfo sch, next;
1595   - for (Long id : ids) {
1596   - sch = dayOfSchedule.get(id);
1597   - if (null != sch)
1598   - list.add(sch);
1599   - }
1600   -
1601   - int size = list.size();
1602   - if (size == 0) {
1603   - rs.put("status", ResponseCode.ERROR);
1604   - } else {
1605   - // 按发车时间排序
1606   - Collections.sort(list, new ScheduleComparator.FCSJ());
1607   -
1608   - // 以第一个实际发车/待发时间为起点,调整间隔
1609   - sch = list.get(0);
1610   - Long st = sch.getFcsjActualTime() == null ? sch.getDfsjT() : sch.getFcsjActualTime(), plus = space * 60 * 1000L;
1611   -
1612   - for (int i = 1; i < size; i++) {
1613   - st += plus;
1614   - sch = list.get(i);
1615   -
1616   - //调整待发
1617   - tempRs = outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "3", null);
1618   -
1619   - if (null != tempRs && tempRs.get("ts") != null)
1620   - tempTs = (List<ScheduleRealInfo>) tempRs.get("ts");
1621   -
1622   - ts.addAll(tempTs);
1623   - }
1624   -
1625   - rs.put("status", ResponseCode.SUCCESS);
1626   - //返回最后一个班次,页面会全量刷新
1627   - rs.put("ts", ts);
1628   - }
1629   -
1630   - } catch (Exception e) {
1631   - logger.error("", e);
1632   - rs.put("status", ResponseCode.ERROR);
1633   - }
1634   - return rs;
1635   - }
1636   -
1637   - private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
1638   -
1639   - @Transactional
1640   - @Override
1641   - public Map<String, Object> schInfoFineTune(Map<String, String> map) {
1642   - Map<String, Object> rs = new HashMap<>();
1643   - List<ScheduleRealInfo> ts = new ArrayList<>();
1644   - try {
1645   - // 维修上报
1646   - if (StringUtils.isNotBlank(map.get("reportTypes"))) {
1647   - Map<String, Object> param = new HashMap<String, Object>();
1648   - param.putAll(map);
1649   - rs = repairReport(param, false);
1650   - }
1651   -
1652   - Long id = Long.parseLong(map.get("id"));
1653   - String remarks = map.get("remarks");
1654   -
1655   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1656   -
1657   - if (null == sch) {
1658   - rs.put("status", ResponseCode.ERROR);
1659   - rs.put("msg", "不存在的班次!");
1660   - return rs;
1661   - }
1662   -
1663   - //日志记录器
1664   - FcxxwtLogger fLog = FcxxwtLogger.start(sch, remarks);
1665   -
1666   - String clZbh = map.get("clZbh");
1667   - String jsy = map.get("jsy");
1668   - if (!clZbh.equals(sch.getClZbh())
1669   - || !jsy.equals(sch.getjGh() + "/" + sch.getjName()))
1670   - schModifyLog.saveChangetochange(sch, clZbh, jsy);//为换人换车情况表写入数据
1671   - /**
1672   - * 换车
1673   - */
1674   - if (StringUtils.isNotEmpty(clZbh) && !clZbh.equals(sch.getClZbh())) {
1675   - //换车
1676   - if (!carExist(sch.getGsBm(), clZbh)) {
1677   - rs.put("status", ResponseCode.ERROR);
1678   - rs.put("msg", "车辆 " + clZbh + " 不存在!");
1679   - return rs;
1680   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
1681   - rs.put("status", ResponseCode.ERROR);
1682   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
1683   - return rs;
1684   - } else {
1685   - fLog.log("换车", sch.getClZbh(), clZbh);
1686   - dayOfSchedule.changeCar(sch, clZbh);
1687   - }
1688   - }
1689   -
1690   - if(StringUtils.isBlank(jsy) || "/".equals(StringUtils.trim(jsy))){
1691   - rs.put("status", ResponseCode.ERROR);
1692   - rs.put("msg", "无效的参数【驾驶员】");
1693   - return rs;
1694   - }
1695   -
1696   - /**
1697   - * 换驾驶员
1698   - */
1699   - if (StringUtils.isNotEmpty(jsy)) {
1700   - String jGh = jsy.split("/")[0];
1701   - String jName = getPersonName(sch.getGsBm(), jGh);
1702   - if (StringUtils.isEmpty(jName)) {
1703   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
1704   - rs.put("status", ResponseCode.ERROR);
1705   - return rs;
1706   - } else if (!jGh.equals(sch.getjGh())) {
1707   - fLog.log("换驾驶员", sch.getjGh() + "/" + sch.getjName(), jsy);
1708   - persoChange(sch, jGh);
1709   - }
1710   - }
1711   -
1712   - /**
1713   - * 换售票员
1714   - */
1715   - String spy = map.get("spy");
1716   - if (StringUtils.isNotEmpty(spy) && !StringUtils.trim(spy).equals("/")) {
1717   - String sGh = spy.split("/")[0];
1718   -
1719   - String sName = getPersonName(sch.getGsBm(), sGh);
1720   - if (StringUtils.isEmpty(sName)) {
1721   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
1722   - rs.put("status", ResponseCode.ERROR);
1723   - return rs;
1724   - } else if (!sGh.equals(sch.getsGh())) {
1725   - fLog.log("换售票员", sch.getsGh() + "/" + sch.getsName(), spy);
1726   - persoChangeSPY(sch, sGh);
1727   - }
1728   - } else if (StringUtils.isNotEmpty(sch.getsGh())) {
1729   - fLog.log("撤销售票员");
1730   - sch.setsGh("");
1731   - sch.setsName("");
1732   - }
1733   -
1734   - LineConfig config = lineConfigData.get(sch.getXlBm());
1735   - /**
1736   - * 调整实发
1737   - */
1738   - String fcsjActual = map.get("fcsjActual");
1739   - if (StringUtils.isNotBlank(fcsjActual)
1740   - && !fcsjActual.equals(sch.getFcsjActual())) {
1741   -
1742   - //long t = 0L;
1743   - //小于线路开始运营时间,则默认跨过24点
1744   - long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), fcsjActual, config);
1745   - /* if (fcsjActual.compareTo(config.getStartOpt()) < 0)
1746   - t = fmtyyyyMMddHHmm.parseMillis(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME) + fcsjActual);
1747   - else
1748   - t = fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + fcsjActual);*/
1749   -
1750   - fLog.log("调整实发时间", sch.getFcsjActual(), fcsjActual);
1751   - sch.setFcsjActualAll(t);
1752   - //取消应发未到标记
1753   - //if(sch.isLate2()){
1754   - // sch.setLate2(false);
1755   - LateAdjustHandle.remove(sch);
1756   - //}
1757   - } else if (StringUtils.isNotEmpty(sch.getFcsjActual()) && StringUtils.isEmpty(fcsjActual)) {
1758   - fLog.log("撤销实发时间", sch.getFcsjActual(), "");
1759   - //撤销实发
1760   - revokeRealOutgo(sch.getId());
1761   - }
1762   -
1763   - /**
1764   - * 调整实达
1765   - */
1766   - String zdsjActual = map.get("zdsjActual");
1767   - if (StringUtils.isNotBlank(zdsjActual)
1768   - && !zdsjActual.equals(sch.getZdsjActual())) {
1769   -
1770   - //调整实达
1771   - fLog.log("调整实达时间", sch.getZdsjActual(), zdsjActual);
1772   -
1773   - long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), zdsjActual, config);
1774   - sch.setZdsjActualAll(t);
1775   - //路牌下一班起点到达时间
1776   - ScheduleRealInfo next = dayOfSchedule.nextByLp2(sch);
1777   - if (null != next) {
1778   - next.setQdzArrDatesj(zdsjActual);
1779   - next.setLate2(false);
1780   - ts.add(next);
1781   - }
1782   -
1783   - //重新计算车辆执行班次
1784   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1785   - //取消应发未到标记
1786   - LateAdjustHandle.remove(sch);
1787   - } else if (StringUtils.isNotEmpty(sch.getZdsjActual()) && StringUtils.isEmpty(zdsjActual)) {
1788   - //清除实达时间
1789   - fLog.log("撤销实达时间", sch.getZdsjActual(), "");
1790   - sch.clearZdsjActual();
1791   - //清除路牌下一班起点到达时间
1792   - ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
1793   - if (null != next) {
1794   - next.setQdzArrDatesj(null);
1795   - ts.add(next);
1796   - }
1797   - //重新计算车辆执行班次
1798   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1799   - }
1800   -
1801   - /**
1802   - * 备注
1803   - */
1804   - sch.setRemarks(remarks);
1805   -
1806   - /**
1807   - * 烂班
1808   - */
1809   - if (map.get("status") != null
1810   - && Integer.parseInt(map.get("status").toString()) == -1) {
1811   - destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
1812   - fLog.log("烂班");
1813   - }
1814   -
1815   - /**
1816   - * 修改班次里程
1817   - */
1818   - String jhlc = map.get("jhlc");
1819   - if (StringUtils.isNotEmpty(jhlc)) {
1820   - double jhlcNum = Double.parseDouble(jhlc);
1821   - //烂班
1822   - if (jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout() && !sch.isDestroy()) {
1823   - destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
1824   - fLog.log("里程设置为0,自动烂班");
1825   - } else if (jhlcNum != sch.getJhlc()) {
1826   - fLog.log("设置里程", sch.getJhlc(), jhlcNum);
1827   - sch.setJhlc(jhlcNum);
1828   - //临加班次,实际计划一起改
1829   - if (sch.isSflj())
1830   - sch.setJhlcOrig(jhlcNum);
1831   - }
1832   - }
1833   -
1834   - /**
1835   - * 修改班次类型
1836   - */
1837   - String bcType = map.get("bcType");
1838   - if (StringUtils.isNotEmpty(bcType) && !bcType.equals(sch.getBcType())) {
1839   - fLog.log("修改班次类型", sch.getBcType(), bcType);
1840   - sch.setBcType(bcType);
1841   - }
1842   -
1843   - //重新计算班次状态
1844   - sch.calcStatus();
1845   - dayOfSchedule.save(sch);
1846   - //页面需要更新的班次信息
1847   - ts.add(sch);
1848   -
1849   - rs.put("status", ResponseCode.SUCCESS);
1850   - rs.put("ts", ts);
1851   -
1852   - //日志记录结束
1853   - fLog.end();
1854   - } catch (Exception e) {
1855   - logger.error("", e);
1856   - rs.put("status", ResponseCode.ERROR);
1857   - }
1858   - return rs;
1859   - }
1860   -
1861   - @Override
1862   - public Map<String, Object> outgoAdjustAll(String params) {
1863   - Map<String, Object> rs = new HashMap<>();
1864   - try {
1865   - JSONArray jsonArray = JSONArray.parseArray(params);
1866   -
1867   - ScheduleRealInfo schedule = null;
1868   - JSONObject jsonObj;
1869   - String dfsj;
1870   - long id;
1871   - for (int i = 0; i < jsonArray.size(); i++) {
1872   - jsonObj = jsonArray.getJSONObject(i);
1873   - dfsj = jsonObj.getString("t");
1874   - id = jsonObj.getLong("id");
1875   - schedule = dayOfSchedule.get(id);
1876   -
1877   - if (schedule != null)
1878   - outgoAdjust(id, null, dfsj, null, "2", null);
1879   - }
1880   -
1881   - rs.put("status", ResponseCode.SUCCESS);
1882   - //将更新的最后一个班次返回,页面会做全量刷新
1883   - rs.put("t", schedule);
1884   - } catch (Exception e) {
1885   - logger.error("", e);
1886   - rs.put("status", ResponseCode.ERROR);
1887   - }
1888   - return rs;
1889   - }
1890   -
1891   - @Override
1892   - public Map<String, Object> findRouteByLine(String lineCode) {
1893   - Map<String, Object> map = new HashMap<>();
1894   - //上行
1895   - Integer lineId = BasicData.lineId2CodeMap.inverse().get(lineCode);
1896   - map.put("line.id_eq", lineId);
1897   - map.put("directions_eq", 0);
1898   - List<Map<String, Object>> upList = sectionRouteService.getSectionRoute(map);
1899   -
1900   - //下行
1901   - map.put("directions_eq", 1);
1902   - List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map);
1903   -
1904   - Map<String, Object> rs = new HashMap<>();
1905   -
1906   - String upVectors = "", vec;
1907   - //拼接上行路段
1908   - for (Map<String, Object> temp : upList) {
1909   - vec = temp.get("sectionBsectionVector").toString();
1910   - upVectors += vec.subSequence(11, vec.length() - 2) + " ";
1911   - }
1912   -
1913   - //拼接下行路段
1914   - String downVectors = "";
1915   - for (Map<String, Object> temp : downList) {//LINESTRING(
1916   - vec = temp.get("sectionBsectionVector").toString();
1917   - downVectors += vec.subSequence(11, vec.length() - 2) + " ";
1918   - }
1919   -
1920   -
1921   - rs.put("up", upVectors);
1922   - //上行gcj
1923   - rs.put("up_gcj", BdToGcjString(upVectors));
1924   - rs.put("down", downVectors);
1925   - //下行gcj
1926   - rs.put("down_gcj", BdToGcjString(downVectors));
1927   - rs.put("lineId", lineId);
1928   -
1929   - return rs;
1930   - }
1931   -
1932   - /**
1933   - * @param @param bdStr
1934   - * @throws
1935   - * @Title: BdToGcjString
1936   - * @Description: TODO(将百度路由字符串 转 成GCJ 字符串)
1937   - */
1938   - public String BdToGcjString(String bdStr) {
1939   - String[] array = bdStr.split(","), subArray;
1940   - if (array.length == 0 || bdStr.length() < 2)
1941   - return "";
1942   -
1943   - String gcjStr = "";
1944   - TransGPS.Location location;
1945   - for (String crd : array) {
1946   - subArray = crd.split(" ");
1947   - if (subArray.length != 2)
1948   - continue;
1949   - location = TransGPS.bd_decrypt(TransGPS.LocationMake(Double.parseDouble(subArray[0]), Double.parseDouble(subArray[1])));
1950   -
1951   - gcjStr += location.getLng() + " " + location.getLat() + ",";
1952   - }
1953   -
1954   - return gcjStr.substring(0, gcjStr.length() - 1);
1955   - }
1956   -
1957   - public List<Map<String, String>> findLine(String line) {
1958   - List<Line> listLine = lineRepository.findLine("%" + line + "%");
1959   - List<Map<String, String>> list = new ArrayList<Map<String, String>>();
1960   - Map<String, String> map;
1961   - for (Line temp : listLine) {
1962   - if (temp != null) {
1963   - String xlName = temp.getName();
1964   - if (xlName.indexOf(line) != -1) {
1965   - map = new HashMap<String, String>();
1966   - map.put("id", temp.getLineCode());
1967   - map.put("text", xlName);
1968   - list.add(map);
1969   - }
1970   - }
1971   - }
1972   - return list;
1973   - }
1974   -
1975   - public List<Map<String, String>> findLpName(String lpName) {
1976   - List<GuideboardInfo> listLpName = guideboardInfoRepository.findLpName("%" + lpName + "%");
1977   - List<Map<String, String>> list = new ArrayList<Map<String, String>>();
1978   - Map<String, String> map;
1979   - for (GuideboardInfo temp : listLpName) {
1980   - if (temp != null) {
1981   - String lp = temp.getLpName();
1982   - if (lp.indexOf(lpName) != -1) {
1983   - map = new HashMap<String, String>();
1984   - map.put("id", lp);
1985   - map.put("text", lp);
1986   - list.add(map);
1987   - }
1988   - }
1989   - }
1990   - return list;
1991   - }
1992   -
1993   - @Override
1994   - public Map<String, Object> findKMBC2(String jName, String clZbh, String date) {
1995   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill3(jName, clZbh, date, "", "");
1996   -
1997   - DecimalFormat format = new DecimalFormat("0.00");
1998   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
1999   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
2000   - int jhbc = 0, cjbc = 0, ljbc = 0;
2001   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
2002   - float addMileage = 0l, remMileage = 0l;
2003   - String j_Name = "";
2004   - Map<String, Object> map = new HashMap<String, Object>();
2005   - for (ScheduleRealInfo scheduleRealInfo : list) {
2006   - if (scheduleRealInfo != null) {
2007   - j_Name = scheduleRealInfo.getjName();
2008   - //计划里程(主任务过滤掉临加班次),
2009   - //烂班里程(主任务烂班),
2010   - //临加里程(主任务临加),
2011   - //计划班次,烂班班次,增加班次
2012   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
2013   - if (scheduleRealInfo.isSflj()) {
2014   - addMileage += tempJhlc;
2015   - ljbc++;
2016   - } else {
2017   - jhlc += tempJhlc;
2018   - jhbc++;
2019   - if (scheduleRealInfo.getStatus() == -1) {
2020   - remMileage += tempJhlc;
2021   - cjbc++;
2022   - }
2023   - }
2024   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
2025   - //计算营运里程,空驶里程
2026   - if (childTaskPlans.isEmpty()) {
2027   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
2028   - || scheduleRealInfo.getBcType().equals("venting")) {
2029   - ksgl += tempJhlc;
2030   - } else {
2031   - yygl += tempJhlc;
2032   - }
2033   - } else {
2034   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2035   - while (it.hasNext()) {
2036   - ChildTaskPlan childTaskPlan = it.next();
2037   - if (childTaskPlan.getMileageType().equals("empty")) {
2038   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
2039   - } else {
2040   - yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
2041   - }
2042   - }
2043   - }
2044   - }
2045   - }
2046   - map.put("j_name", j_Name);
2047   - map.put("jhlc", format.format(jhlc));
2048   - map.put("remMileage", format.format(remMileage));
2049   - map.put("addMileage", format.format(addMileage));
2050   - map.put("yygl", format.format(yygl));
2051   - map.put("ksgl", format.format(ksgl));
2052   - map.put("realMileage", format.format(yygl + ksgl));
2053   - map.put("jhbc", jhbc);
2054   - map.put("cjbc", cjbc);
2055   - map.put("ljbc", ljbc);
2056   - map.put("sjbc", jhbc - cjbc + ljbc);
2057   - return map;
2058   - }
2059   -
2060   -
2061   - public Map<String, Object> findKMBC(String jGh, String clZbh,
2062   - String lpName, String date, String line) {
2063   - Map<String, Object> map = new HashMap<String, Object>();
2064   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2065   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2066   - for (int i = 0; i < list.size(); i++) {
2067   - ScheduleRealInfo s = list.get(i);
2068   - Set<ChildTaskPlan> cts = s.getcTasks();
2069   - if (cts != null && cts.size() > 0) {
2070   - lists.add(s);
2071   - } else {
2072   - if (s.getFcsjActual() != null && s.getZdsjActual() != null) {
2073   - lists.add(s);
2074   - }
2075   - }
2076   - }
2077   - map.put("jhbc", culateService.culateJhbc(list, ""));//计划班次
2078   - map.put("jhlc", Arith.add(culateService.culateJhgl(list),
2079   - culateService.culateJhJccgl(list))); //计划总里程
2080   - map.put("cjbc", culateService.culateLbbc(list));//烂班班次
2081   - map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
2082   - map.put("ljbc", culateService.culateLjbc(lists, ""));//临加班次
2083   - double ljgl = culateService.culateLjgl(lists);
2084   - map.put("addMileage", ljgl); //临加公里
2085   - map.put("sjbc", culateService.culateSjbc(lists, "") + culateService.culateLjbc(lists, ""));
2086   - double ksgl = culateService.culateKsgl(list);//子任务空驶公里
2087   - double jccgl = culateService.culateJccgl(lists);//空驶班次公里
2088   - map.put("ksgl", ksgl);//空驶公里
2089   - double sjgl = culateService.culateSjgl(lists);//实际营运公里
2090   - map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));//总公里
2091   - map.put("zkslc", Arith.add(ksgl, jccgl));
2092   - map.put("jcclc", jccgl);
2093   - map.put("yygl", Arith.add(sjgl, ljgl)); //总营运公里
2094   - return map;
2095   - }
2096   -
2097   - public Map<String, Object> findKMBC_mh_2(String jGh, String clZbh,
2098   - String lpName, String date, String line) {
2099   - Map<String, Object> map = new HashMap<String, Object>();
2100   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2101   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2102   - for (int i = 0; i < list.size(); i++) {
2103   - ScheduleRealInfo s = list.get(i);
2104   - if (s.isDestroy() && s.isReissue()) {
2105   - s.setRemark("");
2106   - s.setFcsjActual(s.getDfsj());
2107   - s.setZdsjActual(s.getZdsj());
2108   - s.setStatus(2);
2109   - s.setJhlc(s.getJhlcOrig());
2110   - }
2111   -
2112   - Set<ChildTaskPlan> cts = s.getcTasks();
2113   - if (cts != null && cts.size() > 0) {
2114   - lists.add(s);
2115   - } else {
2116   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2117   - lists.add(s);
2118   - }
2119   - }
2120   - }
2121   - double ksgl = culateService.culateKsgl(list);
2122   - double sjgl = culateService.culateSjgl(lists);
2123   - double jccgl = culateService.culateJccgl(lists);
2124   - double ljgl = culateService.culateLjgl(lists);
2125   -
2126   - map.put("jhlc", Arith.add(culateService.culateJhgl(list), culateService.culateJhJccgl(list))); //计划里程
2127   - map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
2128   - map.put("addMileage", ljgl); //临加公里
2129   - map.put("yygl", Arith.add(sjgl, ljgl)); //实际公里
2130   - map.put("ksgl", ksgl);//空驶公里
2131   - map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));
2132   -// map.put("realMileage", format.format(yygl + ksgl + jcclc+addMileage));
2133   - map.put("jhbc", culateService.culateJhbc(list, ""));
2134   - map.put("cjbc", culateService.culateLbbc(list));
2135   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2136   - map.put("sjbc", culateService.culateJhbc(lists, "") - culateService.culateLbbc(lists) + culateService.culateLjbc(lists, ""));
2137   - map.put("jcclc", jccgl);
2138   - map.put("zkslc", Arith.add(ksgl, jccgl));
2139   -// map.put("zkslc", format.format(ksgl + jcclc+addMileageJc));
2140   - return map;
2141   - }
2142   -
2143   -
2144   - @Override
2145   - public List<Map<String, Object>> accountPx(String line, String date,
2146   - String code, String xlName, String px) {
2147   -// List<Object[]> lsitObj = scheduleRealInfoRepository.accountPx(line, date, code,px);
2148   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2149   - if (!code.trim().equals("")) {
2150   - code = BasicData.deviceId2NbbmMap.inverse().get(code);
2151   - }
2152   - String fgs = "";
2153   - List<Line> lineList = lineRepository.findLineByCode(line);
2154   - if (lineList.size() > 0) {
2155   - Line l = lineList.get(0);
2156   - fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
2157   - }
2158   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
2159   - String sql = "SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,"
2160   - + " device_id FROM bsth_v_report_80 WHERE "
2161   - + " FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = '" + date + "' AND"
2162   - + " line_id = '" + line + "' and device_id like '%" + code + "%'";
2163   - Map<String, Object> map;
2164   - List<Object[]> lsitObj = jdbcTemplate.query(sql,
2165   - new RowMapper<Object[]>() {
2166   - @Override
2167   - public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException {
2168   - Object[] t = new Object[3];
2169   - t[0] = rs.getString("request_code");
2170   - t[1] = rs.getString("TIMESTAMP");
2171   - t[2] = rs.getString("device_id");
2172   - return t;
2173   - }
2174   - });
2175   - int i = 1;
2176   - for (Object[] obj : lsitObj) {
2177   - if (obj != null) {
2178   - map = new HashMap<String, Object>();
2179   - map.put("num", i++);
2180   - map.put("xlName", xlName);
2181   - if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
2182   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
2183   - try {
2184   - carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
2185   - } catch (Exception e) {
2186   - // TODO Auto-generated catch block
2187   - e.printStackTrace();
2188   - }
2189   - if (carDeviceList.size() > 0) {
2190   - map.put("clZbh", carDeviceList.get(0).getClZbh());
2191   -
2192   - } else {
2193   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2194   - }
2195   - } else {
2196   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2197   -
2198   - }
2199   - map.put("company", fgs);
2200   - map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
2201   - map.put("requestTime", obj[1]);
2202   - listMap.add(map);
2203   - }
2204   - }
2205   - if (listMap.size() > 1) {
2206   - if (px.equals("asc")) {
2207   - Collections.sort(listMap, new AccountMap());
2208   - } else {
2209   - Collections.sort(listMap, new AccountMap2());
2210   - }
2211   - }
2212   - return listMap;
2213   - }
2214   -
2215   - @Override
2216   - public List<Map<String, Object>> account(String line, String date,
2217   - String code, String xlName, String type) {
2218   - if (!code.trim().equals("")) {
2219   - code = BasicData.deviceId2NbbmMap.inverse().get(code);
2220   - }
2221   - String fgs = "";
2222   - List<Line> lineList = lineRepository.findLineByCode(line);
2223   - if (lineList.size() > 0) {
2224   - Line l = lineList.get(0);
2225   - fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
2226   - }
2227   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2228   - List<Object[]> lsitObj = scheduleRealInfoRepository.account(line, date, code);
2229   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
2230   - Map<String, Object> map;
2231   - int i = 1;
2232   - for (Object[] obj : lsitObj) {
2233   - if (obj != null) {
2234   - map = new HashMap<String, Object>();
2235   - map.put("num", i++);
2236   - map.put("xlName", xlName);
2237   - if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
2238   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
2239   - try {
2240   - carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
2241   - } catch (Exception e) {
2242   - // TODO Auto-generated catch block
2243   - e.printStackTrace();
2244   - }
2245   - if (carDeviceList.size() > 0) {
2246   - map.put("clZbh", carDeviceList.get(0).getClZbh());
2247   -
2248   - } else {
2249   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2250   - }
2251   - } else {
2252   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2253   -
2254   - }
2255   - map.put("company", fgs);
2256   - map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
2257   - map.put("requestTime", obj[1]);
2258   - listMap.add(map);
2259   - }
2260   - }
2261   -
2262   - if (type != null && type.length() != 0 && type.equals("export")) {
2263   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
2264   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
2265   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
2266   - Map<String, Object> m = new HashMap<String, Object>();
2267   - ReportUtils ee = new ReportUtils();
2268   - Map<String, Object> typeMap = new HashMap<String, Object>();
2269   - typeMap.put("0xA1", "请求恢复运营");
2270   - typeMap.put("0xA2", "申请调档");
2271   - typeMap.put("0xA3", "出场请求");
2272   - typeMap.put("0xA5", "进场请求");
2273   - typeMap.put("0xA7", "加油请求");
2274   - typeMap.put("0x50", "车辆故障");
2275   - typeMap.put("0x70", "路阻报告");
2276   - typeMap.put("0x60", "事故报告");
2277   - typeMap.put("0x11", "扣证纠纷");
2278   - typeMap.put("0x12", "报警");
2279   - for (Map<String, Object> map1 : listMap) {
2280   - map1.put("requestText", typeMap.get(map1.get("requestType")));
2281   - }
2282   - try {
2283   - listI.add(listMap.iterator());
2284   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
2285   - ee.excelReplace(listI, new Object[]{m}, path + "mould/account.xls",
2286   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
2287   - + "-" + xlName + "-驾驶员请求台账.xls");
2288   - } catch (Exception e) {
2289   - // TODO: handle exception
2290   - e.printStackTrace();
2291   - }
2292   - }
2293   -
2294   - return listMap;
2295   - }
2296   -
2297   - @Override
2298   - public List<SchEditInfoDto> correctForm(String line, String date, String endDate,
2299   - String lpName, String code, String type, String changType) {
2300   -
2301   -// var types = {'DFTZ': '待发调整', 'FCXXWT':'发车信息微调', 'JHLB': '计划烂班', 'CXLB': '撤销烂班',
2302   -// 'CXZX': '撤销执行', 'CXSF': '撤销实发', 'SFTZ': '实发调整', 'TZRC': '调整人车'};
2303   - Map<String, Object> map = new HashMap<String, Object>();
2304   - map.put("DFTZ", "待发调整");
2305   - map.put("FCXXWT", "发车信息微调");
2306   - map.put("JHLB", "计划烂班");
2307   - map.put("CXLB", "撤销烂班");
2308   - map.put("CXZX", "撤销执行");
2309   - map.put("CXSF", "撤销实发");
2310   - map.put("SFTZ", "实发调整");
2311   - map.put("TZRC", "调整人车");
2312   -
2313   - SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm");
2314   - SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2315   - String cont = "";
2316   - cont = " and xl_bm ='" + line + "'";
2317   - if (!lpName.equals("")) {
2318   - cont += " and lp_name = '" + lpName + "'";
2319   - }
2320   - if (!code.equals("")) {
2321   - cont += " and cl_zbh ='" + code + "'";
2322   - }
2323   - String sql = "select t1.*, t2.real_exec_date,"
2324   - + "t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,"
2325   - + "t2.xl_dir,t2.real_exec_date from (select * from "
2326   - + "logger_sch_modify where rq BETWEEN ? and ? and line_code=? )"
2327   - + " t1 INNER JOIN bsth_c_s_sp_info_real t2 on "
2328   - + "t1.sch_id=t2.id where 1=1 " + cont;
2329   -
2330   - List<SchEditInfoDto> list = jdbcTemplate.query(sql,
2331   - new BeanPropertyRowMapper(SchEditInfoDto.class), date, endDate, line);
2332   - List<SchEditInfoDto> lists = new ArrayList<SchEditInfoDto>();
2333   - for (int i = 0; i < list.size(); i++) {
2334   - Long fcsjs = 0l;
2335   - Long updsj = 0l;
2336   - SchEditInfoDto t = list.get(i);
2337   - if (map.get(t.getType()) != null) {
2338   -
2339   - if (changType.equals("")) {
2340   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2341   - } else {
2342   - String fcsj = "";
2343   - String updtime = "";
2344   - try {
2345   - fcsj = sdf1.format(sdf1.parse(t.getFcsj()));
2346   - updtime = sdf1.format(sdf1.parse(t.getTimeStr()));
2347   - fcsjs = sdf2.parse(t.getRealExecDate() + " " + fcsj).getTime();
2348   - updsj = sdf2.parse(t.getRq() + " " + updtime).getTime();
2349   - } catch (ParseException e) {
2350   - // TODO Auto-generated catch block
2351   - e.printStackTrace();
2352   - }
2353   - if (changType.equals("1")) {
2354   - if (fcsjs > updsj) {
2355   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2356   - } else {
2357   - t.setType2("");
2358   - }
2359   - } else if (changType.equals("2")) {
2360   - if (fcsjs < updsj) {
2361   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2362   - } else {
2363   - t.setType2("");
2364   - }
2365   - }
2366   - }
2367   - } else {
2368   - t.setType2("");
2369   - }
2370   - boolean fage = true;
2371   - for (int j = 0; j < lists.size(); j++) {
2372   - SchEditInfoDto s = lists.get(j);
2373   - if (s.getSchId() == t.getSchId()) {
2374   - s.setType2(s.getType2() + " " + t.getType2());
2375   - fage = false;
2376   - }
2377   - }
2378   -
2379   - if (fage) {
2380   - if (changType.equals("")) {
2381   - lists.add(t);
2382   - } else {
2383   - if (changType.equals("1")) {
2384   - if (fcsjs > updsj) {
2385   - lists.add(t);
2386   - }
2387   - } else if (changType.equals("2")) {
2388   - if (fcsjs < updsj) {
2389   - lists.add(t);
2390   - }
2391   - }
2392   - }
2393   - }
2394   - }
2395   -
2396   - if (type != null && type.length() != 0 && type.equals("export")) {
2397   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
2398   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
2399   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
2400   - Map<String, Object> m = new HashMap<String, Object>();
2401   - m.put("dates", date);
2402   - ReportUtils ee = new ReportUtils();
2403   - List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
2404   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2405   - for (SchEditInfoDto d : lists) {
2406   - Map<String, Object> tempMap = new HashMap<String, Object>();
2407   - tempMap.put("lpName", d.getLpName());
2408   - tempMap.put("rq", d.getRq());
2409   - tempMap.put("clZbh", d.getClZbh());
2410   - tempMap.put("jName", d.getjName() + "/" + d.getjGh());
2411   - tempMap.put("fcsj", d.getFcsj());
2412   - tempMap.put("type", d.getType2());
2413   - tempList.add(tempMap);
2414   - }
2415   - try {
2416   - String dateTime = sdfSimple.format(sdfMonth.parse(date));
2417   - if(!endDate.equals(date)){
2418   - dateTime += "-" + sdfSimple.format(sdfMonth.parse(endDate));
2419   - }
2420   - String lineName = BasicData.lineCode2NameMap.get(line);
2421   - listI.add(tempList.iterator());
2422   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
2423   - ee.excelReplace(listI, new Object[]{m}, path + "mould/correctForm.xls",
2424   - path + "export/" + dateTime + "-" + lineName + "-修正报表.xls");
2425   - } catch (Exception e) {
2426   - // TODO: handle exception
2427   - e.printStackTrace();
2428   - }
2429   -// Map<String, Object> maps = tempList.get(tempList.size() - 1);
2430   - }
2431   - return lists;
2432   - }
2433   -
2434   - @Override
2435   - public List<ScheduleRealInfo> queryListWaybill(String jGh, String clZbh,
2436   - String lpName, String date, String line) {
2437   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
2438   - List<ScheduleRealInfo> list = null;
2439   - list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2440   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2441   - String minfcsj = "02:00";
2442   - List<Line> lineList = lineRepository.findLineByCode(line);
2443   - if (lineList.size() > 0) {
2444   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
2445   - + " id = ("
2446   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
2447   - + ")";
2448   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
2449   - }
2450   - String[] minSjs = minfcsj.split(":");
2451   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
2452   -
2453   - for (int i = 0; i < list.size(); i++) {
2454   - ScheduleRealInfo s = list.get(i);
2455   - if (s.getBcType().equals("out")) {
2456   - s.setRemark("1");
2457   - } else if (s.getBcType().equals("in")) {
2458   - s.setRemark("3");
2459   - } else {
2460   - s.setRemark("2");
2461   - }
2462   - String[] fcsj = s.getFcsj().split(":");
2463   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
2464   -
2465   - Long fscjT = 0L;
2466   - if (fcsjL < minSj) {
2467   - Calendar calendar = new GregorianCalendar();
2468   - calendar.setTime(s.getScheduleDate());
2469   - calendar.add(calendar.DATE, 1);
2470   - s.setScheduleDate(calendar.getTime());
2471   - try {
2472   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
2473   - } catch (ParseException e) {
2474   - // TODO Auto-generated catch block
2475   - e.printStackTrace();
2476   - }
2477   -
2478   - } else {
2479   - try {
2480   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
2481   - } catch (ParseException e) {
2482   - // TODO Auto-generated catch block
2483   - e.printStackTrace();
2484   - }
2485   - ;
2486   - }
2487   - s.setFcsjT(fscjT);
2488   - }
2489   - Collections.sort(list, new compareFcsjType());
2490   - for (int i = 0; i < list.size(); i++) {
2491   - ScheduleRealInfo s = list.get(i);
2492   - s.setAdjustExps(i + 1 + "");
2493   - String remarks = "";
2494   - if (s.getRemarks() != null) {
2495   - remarks += s.getRemarks();
2496   - }
2497   -
2498   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
2499   - if (!childTaskPlans.isEmpty()) {
2500   - s.setFcsjActual("");
2501   - s.setZdsjActual("");
2502   - s.setJhlc(0.0);
2503   - }
2504   -
2505   - if (s.isDestroy()) {
2506   - s.setFcsjActual("");
2507   - s.setZdsjActual("");
2508   - s.setJhlc(0.0);
2509   - remarks += "(烂班)";
2510   - s.setRemarks(remarks);
2511   - }
2512   -
2513   - listSchedule.add(s);
2514   - //计算营运里程,空驶里程
2515   - if (!childTaskPlans.isEmpty()) {
2516   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2517   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
2518   - Collections.sort(listit, new ComparableChild());
2519   - for (int j = 0; j < listit.size(); j++) {
2520   - ScheduleRealInfo t = new ScheduleRealInfo();
2521   - ChildTaskPlan childTaskPlan = listit.get(j);
2522   - if (childTaskPlan.getCcId() == null) {
2523   - if (childTaskPlan.isDestroy()) {
2524   - t.setFcsjActual("");
2525   - t.setZdsjActual("");
2526   - t.setJhlc(0.0);
2527   - } else {
2528   - t.setFcsjActual(childTaskPlan.getStartDate());
2529   - t.setZdsjActual(childTaskPlan.getEndDate());
2530   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
2531   - }
2532   - t.setFcsj(childTaskPlan.getStartDate());
2533   - t.setZdsj(childTaskPlan.getEndDate());
2534   - t.setQdzName(childTaskPlan.getStartStationName());
2535   - t.setZdzName(childTaskPlan.getEndStationName());
2536   - t.setRemarks(childTaskPlan.getRemarks());
2537   - t.setAdjustExps("子");
2538   - listSchedule.add(t);
2539   - }
2540   - }
2541   - }
2542   - }
2543   -
2544   - return listSchedule;
2545   - }
2546   -
2547   - @Override
2548   - public List<ScheduleRealInfo> queryListWaybill2(String jName, String clZbh,
2549   - String lpName, String date, String line) {
2550   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
2551   - List<ScheduleRealInfo> list = null;
2552   - list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
2553   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2554   - String minfcsj = "02:00";
2555   - List<Line> lineList = lineRepository.findLineByCode(line);
2556   - if (lineList.size() > 0) {
2557   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
2558   - + " id = ("
2559   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
2560   - + ")";
2561   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
2562   - }
2563   - String[] minSjs = minfcsj.split(":");
2564   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
2565   -
2566   - for (int i = 0; i < list.size(); i++) {
2567   - ScheduleRealInfo s = list.get(i);
2568   - String[] fcsj = s.getFcsj().split(":");
2569   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
2570   -
2571   - Long fscjT = 0L;
2572   - if (fcsjL < minSj) {
2573   - Calendar calendar = new GregorianCalendar();
2574   - calendar.setTime(s.getScheduleDate());
2575   - calendar.add(calendar.DATE, 1);
2576   - s.setScheduleDate(calendar.getTime());
2577   - try {
2578   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
2579   - } catch (ParseException e) {
2580   - // TODO Auto-generated catch block
2581   - e.printStackTrace();
2582   - }
2583   -
2584   - } else {
2585   - try {
2586   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
2587   - } catch (ParseException e) {
2588   - // TODO Auto-generated catch block
2589   - e.printStackTrace();
2590   - }
2591   - ;
2592   - }
2593   - s.setFcsjT(fscjT);
2594   - }
2595   - Collections.sort(list, new ComparableReal());
2596   - for (int i = 0; i < list.size(); i++) {
2597   - ScheduleRealInfo s = list.get(i);
2598   - s.setAdjustExps(i + 1 + "");
2599   - String remarks = "";
2600   - if (s.getRemarks() != null) {
2601   - remarks += s.getRemarks();
2602   - }
2603   -
2604   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
2605   - if (!childTaskPlans.isEmpty()) {
2606   - s.setFcsjActual("");
2607   - s.setZdsjActual("");
2608   - s.setJhlc(0.0);
2609   - }
2610   -
2611   - if (s.isDestroy()) {
2612   - if (s.isReissue()) {
2613   - s.setFcsjActual(s.getDfsj());
2614   - s.setZdsjActual(s.getZdsj());
2615   - s.setRemarks("");
2616   - s.setStatus(2);
2617   - s.setJhlc(s.getJhlcOrig());
2618   - } else {
2619   - s.setFcsjActual("");
2620   - s.setZdsjActual("");
2621   - s.setJhlc(0.0);
2622   - remarks += "(烂班)";
2623   - s.setRemarks(remarks);
2624   - }
2625   - }
2626   -
2627   - listSchedule.add(s);
2628   - //计算营运里程,空驶里程
2629   - if (!childTaskPlans.isEmpty()) {
2630   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2631   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
2632   - Collections.sort(listit, new ComparableChild());
2633   - for (int j = 0; j < listit.size(); j++) {
2634   - ScheduleRealInfo t = new ScheduleRealInfo();
2635   - ChildTaskPlan childTaskPlan = listit.get(j);
2636   - if (childTaskPlan.isDestroy()) {
2637   - t.setFcsjActual("");
2638   - t.setZdsjActual("");
2639   - t.setJhlc(0.0);
2640   - } else {
2641   - t.setFcsjActual(childTaskPlan.getStartDate());
2642   - t.setZdsjActual(childTaskPlan.getEndDate());
2643   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
2644   - }
2645   - t.setQdzName(childTaskPlan.getStartStationName());
2646   - t.setZdzName(childTaskPlan.getEndStationName());
2647   - t.setRemarks(childTaskPlan.getRemarks());
2648   - t.setAdjustExps("子");
2649   - listSchedule.add(t);
2650   - }
2651   - }
2652   - }
2653   -
2654   - return listSchedule;
2655   - }
2656   -
2657   - @Override
2658   - public Map<String, Object> removeChildTask(Long taskId) {
2659   - Map<String, Object> rs = new HashMap<>();
2660   - ChildTaskPlan chTask = cTaskPlanRepository.findById(taskId).get();
2661   -
2662   - ScheduleRealInfo sch = dayOfSchedule.get(chTask.getSchedule().getId());
2663   - try {
2664   -
2665   - sch.getcTasks().remove(chTask);
2666   - scheduleRealInfoRepository.save(sch);
2667   - rs.put("status", ResponseCode.SUCCESS);
2668   - } catch (Exception e) {
2669   - logger.error("", e);
2670   - rs.put("status", ResponseCode.ERROR);
2671   - }
2672   - return rs;
2673   - }
2674   -
2675   - @Override
2676   - public List<Map<String, Object>> statisticsDaily(String line, String date,
2677   - String xlName, String type) {
2678   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2679   - List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
2680   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2681   - for (int i = 0; i < list_s.size(); i++) {
2682   - ScheduleRealInfo s = list_s.get(i);
2683   - Set<ChildTaskPlan> cts = s.getcTasks();
2684   - if (cts != null && cts.size() > 0) {
2685   - lists.add(s);
2686   - } else {
2687   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2688   - lists.add(s);
2689   - }
2690   - }
2691   - }
2692   - Map<String, Object> map = new HashMap<String, Object>();
2693   - map.put("xlName", xlName);
2694   - double jhlc = culateService.culateJhgl(list_s);
2695   - map.put("jhlc", jhlc);
2696   - map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
2697   - double lbgl = culateService.culateLbgl(list_s);
2698   - map.put("ssgl", lbgl);
2699   - map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2700   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
2701   - map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2702   - map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2703   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
2704   - map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2705   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2706   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2707   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2708   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2709   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2710   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2711   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2712   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2713   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2714   - map.put("ssbc", culateService.culateLbbc(list_s));
2715   - double ljgl = culateService.culateLjgl(lists);
2716   - map.put("ljgl", ljgl);
2717   - map.put("jhbc", culateService.culateJhbc(list_s, ""));
2718   - map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
2719   - map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
2720   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2721   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2722   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2723   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2724   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2725   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2726   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2727   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2728   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2729   - map.put("dtbc", 0);
2730   - map.put("dtbc_m", 0);
2731   - map.put("dtbc_a", 0);
2732   - List<CalcInterval> intervalList=calcIntervalRepository.selectByDateAndLine(line, date,"");
2733   - if(intervalList.size()>0){
2734   - CalcInterval c=intervalList.get(0);
2735   - map.put("djg",c.getDjgAll());
2736   - map.put("djg_m", c.getDjgZgf());
2737   - map.put("djg_a", c.getDjgWgf());
2738   - map.put("djg_time", c.getDjgTime());
2739   - }else{
2740   - Map<String, Object> m = culateService.culateDjg(list_s, line);
2741   - map.put("djg", m.get("djgcsq"));
2742   - map.put("djg_m", m.get("djgcsz"));
2743   - map.put("djg_a", m.get("djgcsw"));
2744   - map.put("djg_time", m.get("djgsj"));
2745   - }
2746   -
2747   - map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
2748   - lMap.add(map);
2749   -
2750   - if (date.length() == 10) {
2751   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
2752   - String dbdp = "";
2753   - try {
2754   - for (int i = 0; i < list.size(); i++) {
2755   - DutyEmployee t = list.get(i);
2756   - if (dbdp.indexOf(t.getuName()) == -1) {
2757   - if (!(dbdp.length() > 0)) {
2758   - dbdp = t.getuName();
2759   - } else {
2760   - dbdp += "," + t.getuName();
2761   - }
2762   - }
2763   - }
2764   - } catch (Exception e) {
2765   - // TODO: handle exception
2766   - e.printStackTrace();
2767   - }
2768   - map.put("dbdp", dbdp);
2769   - }
2770   -
2771   - return lMap;
2772   - }
2773   -
2774   - @Override
2775   - public List<Map<String, Object>> statisticsDaily_mh_2(String line, String date,
2776   - String xlName, String type) {
2777   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2778   - List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
2779   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2780   - for (int i = 0; i < list_s.size(); i++) {
2781   - ScheduleRealInfo s = list_s.get(i);
2782   - if (s.isDestroy() && s.isReissue()) {
2783   - s.setRemark("");
2784   - s.setFcsjActual(s.getDfsj());
2785   - s.setZdsjActual(s.getZdsj());
2786   - s.setStatus(2);
2787   - s.setJhlc(s.getJhlcOrig());
2788   - }
2789   -
2790   - Set<ChildTaskPlan> cts = s.getcTasks();
2791   - if (cts != null && cts.size() > 0) {
2792   - lists.add(s);
2793   - } else {
2794   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2795   - lists.add(s);
2796   - }
2797   - }
2798   - }
2799   - Map<String, Object> map = new HashMap<String, Object>();
2800   - map.put("xlName", xlName);
2801   - double jhlc = culateService.culateJhgl(list_s);
2802   - map.put("jhlc", jhlc);
2803   - map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
2804   - double lbgl = culateService.culateLbgl(list_s);
2805   - map.put("ssgl", lbgl);
2806   - map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2807   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
2808   - map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2809   - map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2810   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
2811   - map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2812   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2813   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2814   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2815   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2816   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2817   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2818   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2819   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2820   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2821   - map.put("ssbc", culateService.culateLbbc(list_s));
2822   - double ljgl = culateService.culateLjgl(lists);
2823   - map.put("ljgl", ljgl);
2824   - map.put("jhbc", culateService.culateJhbc(list_s, ""));
2825   - map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
2826   - map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
2827   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2828   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2829   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2830   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2831   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2832   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2833   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2834   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2835   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2836   - map.put("dtbc", 0);
2837   - map.put("dtbc_m", 0);
2838   - map.put("dtbc_a", 0);
2839   - map.put("djg", 0);
2840   - map.put("djg_m", 0);
2841   - map.put("djg_a", 0);
2842   - map.put("djg_time", 0);
2843   - map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
2844   - lMap.add(map);
2845   - return lMap;
2846   - }
2847   -
2848   - public final Map<String, Object> staticTj(List<ScheduleRealInfo> list,Map<String, Object> m) {
2849   -
2850   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2851   - for (int i = 0; i < list.size(); i++) {
2852   - ScheduleRealInfo s = list.get(i);
2853   - Set<ChildTaskPlan> cts = s.getcTasks();
2854   - if (cts != null && cts.size() > 0) {
2855   - lists.add(s);
2856   - } else {
2857   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2858   - lists.add(s);
2859   - }
2860   - }
2861   - }
2862   - Map<String, Object> map = new HashMap<String, Object>();
2863   - if (list.size() > 0) {
2864   - map.put("fgsBm", list.get(0).getFgsBm());
2865   - map.put("xlBm", list.get(0).getXlBm());
2866   - map.put("xlName", list.get(0).getXlName());
2867   - map.put("fgsName", list.get(0).getFgsName());
2868   - try {
2869   - map.put("xlNamePy", PinyinHelper.convertToPinyinString(list.get(0).getFgsBm()+list.get(0).getXlName(), "", PinyinFormat.WITHOUT_TONE));
2870   - } catch (PinyinException e) {
2871   - // TODO Auto-generated catch block
2872   - e.printStackTrace();
2873   - }
2874   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
2875   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
2876   - map.put("jhlc", jhyygl);
2877   - map.put("jcclc", jhjcclc);
2878   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
2879   - double ljks=culateService.culateLjksgl(lists);
2880   - map.put("ljks", ljks);
2881   - double ljgl = culateService.culateLjgl(lists);
2882   - double sjyygl = culateService.culateSjgl(lists);
2883   - double zyygl = Arith.add(sjyygl, ljgl);
2884   -
2885   - double sjjccgl = culateService.culateJccgl(lists);
2886   - double sjksgl = culateService.culateKsgl(lists);
2887   - double zksgl = Arith.add(sjjccgl, sjksgl);
2888   - map.put("sjzgl", Arith.add(zyygl, zksgl));
2889   - map.put("sjgl", zyygl);
2890   - map.put("sjksgl", zksgl);
2891   - double ssgl = culateService.culateLbgl(list);
2892   - map.put("ssgl", ssgl);
2893   -
2894   - //计划+临加-少驶=实驶
2895   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
2896   - if (jl == zyygl) {
2897   - map.put("zt", 0);
2898   - } else {
2899   - map.put("zt", 1);
2900   - }
2901   -
2902   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
2903   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
2904   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
2905   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
2906   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
2907   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
2908   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
2909   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
2910   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
2911   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
2912   - double ssgl_pc = culateService.culateCJLC(list, "配车");
2913   - double ssgl_by = culateService.culateCJLC(list, "保养");
2914   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
2915   - double ssgl_qt = culateService.culateCJLC(list, "其他");
2916   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2917   - map.put("ssbc", culateService.culateLbbc(list));
2918   - map.put("ljgl", ljgl);
2919   - map.put("jhbc", culateService.culateJhbc(list, ""));
2920   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
2921   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
2922   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2923   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2924   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2925   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2926   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2927   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2928   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2929   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2930   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2931   - map.put("dtbc", 0);
2932   - map.put("dtbc_m", 0);
2933   - map.put("dtbc_a", 0);
2934   - if(m.get("xl")==null){
2935   - Map<String, Object> m_ = culateService.culateDjg(lists, list.get(0).getXlBm());
2936   - map.put("djg", m_.get("djgcsq"));
2937   - map.put("djg_m", m_.get("djgcsz"));
2938   - map.put("djg_a", m_.get("djgcsw"));
2939   - map.put("djg_time", m_.get("djgsj"));
2940   - }else{
2941   - map.put("djg", m.get("djgAll")==null?"0":m.get("djgAll"));
2942   - map.put("djg_m", m.get("djgZgf")==null?"0":m.get("djgZgf"));
2943   - map.put("djg_a", m.get("djgWgf")==null?"0":m.get("djgWgf"));
2944   - map.put("djg_time", m.get("djgTime")==null?"0":m.get("djgTime"));
2945   - }
2946   - }
2947   - return map;
2948   - }
2949   -
2950   - @Override
2951   - public List<Map<String, Object>> statisticsDailyTj(String gsdm, String fgsdm, String line, String date, String date2,
2952   - String xlName, String type,String nature) {
2953   - List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
2954   - List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
2955   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2956   - List<Object[]> listInterval=new ArrayList<Object[]>();
2957   - line = line.trim();
2958   - if (line.equals("")) {
2959   - //查询所有线路
2960   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
2961   - listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
2962   - } else {
2963   - //查询单条线路
2964   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
2965   - listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
2966   - }
2967   - Map<String, Map<String,Object>> mapInterval=new HashMap<String, Map<String,Object>>();
2968   - for (int i = 0; i < listInterval.size(); i++) {
2969   - Object[] interval=listInterval.get(i);
2970   - String gs=interval[0].toString();
2971   - String fgs=interval[1].toString();
2972   - String xl=interval[2].toString();
2973   - Map<String, Object> m=new HashMap<String,Object>();
2974   - m.put("gs", gs);
2975   - m.put("fgs", fgs);
2976   - m.put("xl", xl);
2977   - m.put("djgAll", interval[3]);
2978   - m.put("djgZgf", interval[6]);
2979   - m.put("djgWgf", interval[7]);
2980   - m.put("djgTime", interval[8]);
2981   - mapInterval.put(gs+"-"+fgs+"-"+xl, m);
2982   - }
2983   - Map<String, Boolean> lineMap=lineService.lineNature();
2984   - List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
2985   - for (int i = 0; i < listAll.size(); i++) {
2986   - ScheduleRealInfo s=listAll.get(i);
2987   - if (nature.equals("0")) {
2988   - list.add(s);
2989   - }else if(nature.equals("1")){
2990   - if(lineMap.get(s.getXlBm())){
2991   - list.add(s);
2992   - }
2993   - }else{
2994   - if(!lineMap.get(s.getXlBm())){
2995   - list.add(s);
2996   - }
2997   - }
2998   - }
2999   - for (int i = 0; i < list.size(); i++) {
3000   - ScheduleRealInfo s = list.get(i);
3001   - Set<ChildTaskPlan> cts = s.getcTasks();
3002   - if (cts != null && cts.size() > 0) {
3003   - list_s.add(s);
3004   - } else {
3005   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
3006   - list_s.add(s);
3007   - }
3008   - }
3009   - }
3010   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
3011   - for (int i = 0; i < list.size(); i++) {
3012   - if (i < list.size() - 1) {
3013   - if ((list.get(i+1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
3014   - lists.add(list.get(i));
3015   - } else {
3016   - lists.add(list.get(i));
3017   - Map<String, Object> mm=new HashMap<String,Object>();
3018   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3019   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3020   - }
3021   - Map<String, Object> map = staticTj(lists,mm);
3022   - lMap.add(map);
3023   - lists = new ArrayList<ScheduleRealInfo>();
3024   - }
3025   - } else {
3026   - if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
3027   - lists.add(list.get(i));
3028   - Map<String, Object> mm=new HashMap<String,Object>();
3029   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3030   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3031   - }
3032   - Map<String, Object> map = staticTj(lists,mm);
3033   - lMap.add(map);
3034   - } else {
3035   - lists = new ArrayList<ScheduleRealInfo>();
3036   - lists.add(list.get(i));
3037   - Map<String, Object> mm=new HashMap<String,Object>();
3038   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3039   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3040   - }
3041   - Map<String, Object> map = staticTj(lists,mm);
3042   - lMap.add(map);
3043   - }
3044   - }
3045   - }
3046   - /*if(!line.equals("")){
3047   - List<Line> l=lineRepository.findLineByCode(line);
3048   - if(l.size()>0)
3049   - lMap.get(0).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
3050   - }*/
3051   - Collections.sort(lMap, new AccountXlbm());
3052   - Map<String, Object> map = new HashMap<String, Object>();
3053   - map.put("xlName", "合计");
3054   - map.put("fgsName", "");
3055   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
3056   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
3057   - map.put("jhlc", jhyygl);
3058   - map.put("jcclc", jhjcclc);
3059   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
3060   -
3061   - double ljgl = culateService.culateLjgl(list_s);
3062   - double sjyygl = culateService.culateSjgl(list_s);
3063   - double zyygl = Arith.add(sjyygl, ljgl);
3064   - double ljks=culateService.culateLjksgl(list_s);
3065   - map.put("ljks", ljks);
3066   - double sjjccgl = culateService.culateJccgl(list_s);
3067   - double sjksgl = culateService.culateKsgl(list_s);
3068   - double zksgl = Arith.add(sjjccgl, sjksgl);
3069   - map.put("sjzgl", Arith.add(zyygl, zksgl));
3070   - map.put("sjgl", zyygl);
3071   - map.put("sjksgl", zksgl);
3072   -
3073   - double ssgl = culateService.culateLbgl(list);
3074   - map.put("ssgl", ssgl);
3075   - //计划+临加-少驶=实驶
3076   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
3077   - if (jl == zyygl) {
3078   - map.put("zt", 0);
3079   - } else {
3080   - map.put("zt", 1);
3081   - }
3082   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
3083   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
3084   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
3085   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
3086   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
3087   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
3088   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
3089   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
3090   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
3091   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
3092   - double ssgl_pc = culateService.culateCJLC(list, "配车");
3093   - double ssgl_by = culateService.culateCJLC(list, "保养");
3094   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
3095   - double ssgl_qt = culateService.culateCJLC(list, "其他");
3096   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
3097   -
3098   - map.put("ssbc", culateService.culateLbbc(list));
3099   - map.put("ljgl", ljgl);
3100   - map.put("jhbc", culateService.culateJhbc(list, ""));
3101   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
3102   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
3103   - map.put("sjbc", culateService.culateSjbc(list_s, ""));
3104   - map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
3105   - map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
3106   - map.put("ljbc", culateService.culateLjbc(list_s, ""));
3107   - map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
3108   - map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
3109   - map.put("fzbc", culateService.culateFzbc(list_s, ""));
3110   - map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
3111   - map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
3112   - map.put("dtbc", 0);
3113   - map.put("dtbc_m", 0);
3114   - map.put("dtbc_a", 0);
3115   - if (list.size() > 0) {
3116   - int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
3117   - for (Map<String, Object> m : lMap) {
3118   - if (m.containsKey("djg") && m.get("djg") != null)
3119   - djg += Integer.valueOf(m.get("djg").toString());
3120   - if (m.containsKey("djg_m") && m.get("djg_m") != null)
3121   - djg_m += Integer.valueOf(m.get("djg_m").toString());
3122   - if (m.containsKey("djg_a") && m.get("djg_a") != null)
3123   - djg_a += Integer.valueOf(m.get("djg_a").toString());
3124   - if (m.containsKey("djg_time") && m.get("djg_time") != null) {
3125   - int t = Integer.valueOf(m.get("djg_time").toString());
3126   - if (t > djg_time)
3127   - djg_time = t;
3128   - }
3129   - }
3130   - map.put("djg", djg);
3131   - map.put("djg_m", djg_m);
3132   - map.put("djg_a", djg_a);
3133   - map.put("djg_time", djg_time);
3134   -// Map<String, Object> m_=culateService.culateDjg(list_s, list.get(0).getXlBm());
3135   -// map.put("djg", m_.get("djgcsq"));
3136   -// map.put("djg_m", m_.get("djgcsz"));
3137   -// map.put("djg_a", m_.get("djgcsw"));
3138   -// map.put("djg_time", m_.get("djgsj"));
3139   - } else {
3140   - map.put("djg", "0");
3141   - map.put("djg_m", "0");
3142   - map.put("djg_a", "0");
3143   - map.put("djg_time", "0");
3144   - }
3145   - lMap.add(map);
3146   - if (type != null && type.length() != 0 && type.equals("export")) {
3147   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
3148   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
3149   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
3150   - Map<String, Object> m = new HashMap<String, Object>();
3151   - m.put("date", date + "至" + date2);
3152   - ReportUtils ee = new ReportUtils();
3153   - try {
3154   - String dateTime = "";
3155   - if (date.equals(date2)) {
3156   - dateTime = sdfSimple.format(sdfMonth.parse(date));
3157   - } else {
3158   - dateTime = sdfSimple.format(sdfMonth.parse(date))
3159   - + "-" + sdfSimple.format(sdfMonth.parse(date2));
3160   - }
3161   - listI.add(lMap.iterator());
3162   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
3163   - ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",
3164   - path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
3165   - } catch (Exception e) {
3166   - // TODO: handle exception
3167   - //e.printStackTrace();
3168   - logger.info("", e);
3169   - }
3170   - }
3171   -
3172   - return lMap;
3173   - }
3174   -
3175   - @Override
3176   - public List<Map<String, Object>> statisticsDailyTjHb(String gsdm, String fgsdm, String line, String date, String date2,
3177   - String xlName, String type,String nature) {
3178   - List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
3179   - List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
3180   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
3181   - List<Object[]> listInterval=new ArrayList<Object[]>();
3182   -
3183   - line = line.trim();
3184   - if (line.equals("")) {
3185   - //查询所有线路
3186   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
3187   - listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
3188   - } else {
3189   - //查询单条线路
3190   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
3191   - listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
3192   - }
3193   - Map<String, Map<String,Object>> mapInterval=new HashMap<>();
3194   - for (int i = 0; i < listInterval.size(); i++) {
3195   - Object[] interval=listInterval.get(i);
3196   - String gs=interval[0].toString();
3197   - String fgs=interval[1].toString();
3198   - String xl=interval[2].toString();
3199   - Map<String, Object> m=new HashMap<String,Object>();
3200   - m.put("gs", gs);
3201   - m.put("fgs", fgs);
3202   - m.put("xl", xl);
3203   - m.put("djgAll", interval[3]);
3204   - m.put("djgZgf", interval[6]);
3205   - m.put("djgWgf", interval[7]);
3206   - m.put("djgTime", interval[8]);
3207   - mapInterval.put(gs+"-"+fgs+"-"+xl, m);
3208   - }
3209   -
3210   - Map<String, Boolean> lineMap=lineService.lineNature();
3211   - List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
3212   - for (int i = 0; i < listAll.size(); i++) {
3213   - ScheduleRealInfo s=listAll.get(i);
3214   - if (nature.equals("0")) {
3215   - list.add(s);
3216   - }else if(nature.equals("1")){
3217   - if(lineMap.get(s.getXlBm())){
3218   - list.add(s);
3219   - }
3220   - }else{
3221   - if(!lineMap.get(s.getXlBm())){
3222   - list.add(s);
3223   - }
3224   - }
3225   - }
3226   - for (int i = 0; i < list.size(); i++) {
3227   - ScheduleRealInfo s = list.get(i);
3228   - Set<ChildTaskPlan> cts = s.getcTasks();
3229   - if (cts != null && cts.size() > 0) {
3230   - list_s.add(s);
3231   - } else {
3232   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
3233   - list_s.add(s);
3234   - }
3235   - }
3236   - }
3237   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
3238   - for (int i = 0; i < list.size(); i++) {
3239   - if (i < list.size() - 1) {
3240   - if ((list.get(i + 1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
3241   - lists.add(list.get(i));
3242   - } else {
3243   - lists.add(list.get(i));
3244   - Map<String, Object> mm=new HashMap<String,Object>();
3245   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3246   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3247   - }
3248   - Map<String, Object> map = staticTj(lists,mm);
3249   - lMap.add(map);
3250   - lists = new ArrayList<ScheduleRealInfo>();
3251   - }
3252   - } else {
3253   - if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
3254   - lists.add(list.get(i));
3255   - Map<String, Object> mm=new HashMap<String,Object>();
3256   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3257   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3258   - }
3259   - Map<String, Object> map = staticTj(lists,mm);
3260   - lMap.add(map);
3261   - } else {
3262   - lists = new ArrayList<ScheduleRealInfo>();
3263   - lists.add(list.get(i));
3264   - Map<String, Object> mm=new HashMap<String,Object>();
3265   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3266   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3267   - }
3268   - Map<String, Object> map = staticTj(lists,mm);
3269   - lMap.add(map);
3270   - }
3271   - }
3272   - }
3273   -
3274   - Collections.sort(lMap, new AccountXlbm());
3275   - Map<String, Object> map = new HashMap<String, Object>();
3276   - map.put("xlBm", "hj");
3277   - map.put("xlName", "合计");
3278   - map.put("fgsBm", "");
3279   - map.put("fgsName", "");
3280   - map.put("gsBm", "");
3281   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
3282   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
3283   - map.put("jhlc", jhyygl);
3284   - map.put("jcclc", jhjcclc);
3285   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
3286   -
3287   - double ljgl = culateService.culateLjgl(list_s);
3288   - double sjyygl = culateService.culateSjgl(list_s);
3289   - double zyygl = Arith.add(sjyygl, ljgl);
3290   - double ljks=culateService.culateLjksgl(list_s);
3291   - map.put("ljks", ljks);
3292   - double sjjccgl = culateService.culateJccgl(list_s);
3293   - double sjksgl = culateService.culateKsgl(list_s);
3294   - double zksgl = Arith.add(sjjccgl, sjksgl);
3295   - map.put("sjzgl", Arith.add(zyygl, zksgl));
3296   - map.put("sjgl", zyygl);
3297   - map.put("sjksgl", zksgl);
3298   -
3299   - double ssgl = culateService.culateLbgl(list);
3300   - map.put("ssgl", ssgl);
3301   - //计划+临加-少驶=实驶
3302   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
3303   - if (jl == zyygl) {
3304   - map.put("zt", 0);
3305   - } else {
3306   - map.put("zt", 1);
3307   - }
3308   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
3309   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
3310   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
3311   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
3312   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
3313   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
3314   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
3315   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
3316   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
3317   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
3318   - double ssgl_pc = culateService.culateCJLC(list, "配车");
3319   - double ssgl_by = culateService.culateCJLC(list, "保养");
3320   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
3321   - double ssgl_qt = culateService.culateCJLC(list, "其他");
3322   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
3323   -
3324   - map.put("ssbc", culateService.culateLbbc(list));
3325   - map.put("ljgl", ljgl);
3326   - map.put("jhbc", culateService.culateJhbc(list, ""));
3327   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
3328   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
3329   - map.put("sjbc", culateService.culateSjbc(list_s, ""));
3330   - map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
3331   - map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
3332   - map.put("ljbc", culateService.culateLjbc(list_s, ""));
3333   - map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
3334   - map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
3335   - map.put("fzbc", culateService.culateFzbc(list_s, ""));
3336   - map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
3337   - map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
3338   - map.put("dtbc", 0);
3339   - map.put("dtbc_m", 0);
3340   - map.put("dtbc_a", 0);
3341   - if (list.size() > 0) {
3342   - int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
3343   - for (Map<String, Object> m : lMap) {
3344   - if (m.containsKey("djg") && m.get("djg") != null)
3345   - djg += Integer.valueOf(m.get("djg").toString());
3346   - if (m.containsKey("djg_m") && m.get("djg_m") != null)
3347   - djg_m += Integer.valueOf(m.get("djg_m").toString());
3348   - if (m.containsKey("djg_a") && m.get("djg_a") != null)
3349   - djg_a += Integer.valueOf(m.get("djg_a").toString());
3350   - if (m.containsKey("djg_time") && m.get("djg_time") != null) {
3351   - int t = Integer.valueOf(m.get("djg_time").toString());
3352   - if (t > djg_time)
3353   - djg_time = t;
3354   - }
3355   - }
3356   - map.put("djg", djg);
3357   - map.put("djg_m", djg_m);
3358   - map.put("djg_a", djg_a);
3359   - map.put("djg_time", djg_time);
3360   - } else {
3361   - map.put("djg", "0");
3362   - map.put("djg_m", "0");
3363   - map.put("djg_a", "0");
3364   - map.put("djg_time", "0");
3365   - }
3366   - lMap.add(map);
3367   - return lMap;
3368   - }
3369   -
3370   - @Override
3371   - public Map<String, Object> scheduleDaily(String line, String date) {
3372   - Map<String, String> tempMap = null;
3373   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
3374   - Map<String, Object> map = new HashMap<String, Object>();
3375   - Double jhlc = 0.00;
3376   - 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;
3377   - int jhbc = 0;
3378   - for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
3379   - if (scheduleRealInfo != null) {
3380   - //计算里程(包括子任务)
3381   - jhlc += scheduleRealInfo.getJhlc();
3382   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
3383   - if (!childTaskPlans.isEmpty()) {
3384   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
3385   - while (it.hasNext()) {
3386   - ChildTaskPlan childTaskPlan = it.next();
3387   - //是否烂班,烂班就是少驶
3388   - if (!childTaskPlan.isDestroy()) {
3389   - sjgl += childTaskPlan.getMileage();
3390   - } else {
3391   - ssgl += childTaskPlan.getMileage();
3392   - if (childTaskPlan.getDestroyReason().equals("路阻")) {
3393   - ssgl_lz += childTaskPlan.getMileage();
3394   - } else if (childTaskPlan.getDestroyReason().equals("吊慢")) {
3395   - ssgl_dm += childTaskPlan.getMileage();
3396   - } else if (childTaskPlan.getDestroyReason().equals("故障")) {
3397   - ssgl_gz += childTaskPlan.getMileage();
3398   - } else if (childTaskPlan.getDestroyReason().equals("纠纷")) {
3399   - ssgl_jf += childTaskPlan.getMileage();
3400   - } else if (childTaskPlan.getDestroyReason().equals("肇事")) {
3401   - ssgl_zs += childTaskPlan.getMileage();
3402   - } else if (childTaskPlan.getDestroyReason().equals("缺人")) {
3403   - ssgl_qr += childTaskPlan.getMileage();
3404   - } else if (childTaskPlan.getDestroyReason().equals("缺车")) {
3405   - ssgl_qc += childTaskPlan.getMileage();
3406   - } else if (childTaskPlan.getDestroyReason().equals("客稀")) {
3407   - ssgl_kx += childTaskPlan.getMileage();
3408   - } else if (childTaskPlan.getDestroyReason().equals("气候")) {
3409   - ssgl_qh += childTaskPlan.getMileage();
3410   - } else if (childTaskPlan.getDestroyReason().equals("援外")) {
3411   - ssgl_yw += childTaskPlan.getMileage();
3412   - } else {
3413   - ssgl_other += childTaskPlan.getMileage();
3414   - }
3415   - }
3416   - //临加公里
3417   - if (childTaskPlan.getType1().equals("临加")) {
3418   - ljgl += childTaskPlan.getMileage();
3419   - }
3420   - }
3421   - }
3422   - //班次
3423   - scheduleRealInfo.getFcsjT();
3424   - scheduleRealInfo.getFcsjActualTime();
3425   - }
3426   - }
3427   - map.put("jhlc", jhlc);
3428   - map.put("sjgl", sjgl);
3429   - map.put("ssgl", ssgl);
3430   - map.put("ssgl_lz", ssgl_lz);
3431   - map.put("ssgl_dm", ssgl_dm);
3432   - map.put("ssgl_gz", ssgl_gz);
3433   - map.put("ssgl_jf", ssgl_jf);
3434   - map.put("ssgl_zs", ssgl_zs);
3435   - map.put("ssgl_qr", ssgl_qr);
3436   - map.put("ssgl_qc", ssgl_qc);
3437   - map.put("ssgl_kx", ssgl_kx);
3438   - map.put("ssgl_qh", ssgl_qh);
3439   - map.put("ssgl_yw", ssgl_yw);
3440   - map.put("ssgl_other", ssgl_other);
3441   - map.put("ljgl", ljgl);
3442   -
3443   - map.put("jhbc", scheduleRealInfos.size());
3444   - return null;
3445   - }
3446   -
3447   - @Override
3448   - public int countByLineCodeAndDate(String xlBm, String schDate) {
3449   - return scheduleRealInfoRepository.countByLineCodeAndDate(xlBm + "", schDate);
3450   - }
3451   -
3452   - @Override
3453   - public List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate) {
3454   - return scheduleRealInfoRepository.findByLineCodeAndDate(xlBm + "", schDate);
3455   - }
3456   -
3457   - @Override
3458   - public void deleteByLineCodeAndDate(String xlBm, String schDate) {
3459   - scheduleRealInfoRepository.deleteByLineCodeAndDate(xlBm + "", schDate);
3460   - }
3461   -
3462   - @Override
3463   - public Long getMaxId() {
3464   - return scheduleRealInfoRepository.getMaxId();
3465   - }
3466   -
3467   - @Override
3468   - public List<ScheduleRealInfo> realScheduleList(String line, String date) {
3469   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3470   - String lpName = "lpName";
3471   - String zdsj = "";
3472   - String zdsjActual = "";
3473   - String zdsj1 = "";
3474   - String zdsjActual1 = "";
3475   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
3476   -
3477   - /*
3478   - * 对计划发车时间相同的班次进行排序 out最前 in最后
3479   - */
3480   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3481   - SimpleDateFormat sdfnyr =new SimpleDateFormat("yyyy-MM-dd");
3482   - String minfcsj = "02:00";
3483   - List<Line> lineList = lineRepository.findLineByCode(line);
3484   - if (lineList.size() > 0) {
3485   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
3486   - + " id = ("
3487   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
3488   - + ")";
3489   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
3490   - }
3491   - String[] minSjs = minfcsj.split(":");
3492   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
3493   - for (int i = 0; i < listInfo.size(); i++) {
3494   - ScheduleRealInfo s = listInfo.get(i);
3495   - if (s.getBcType().equals("out")) {
3496   - s.setRemark("1");
3497   - } else if (s.getBcType().equals("in")) {
3498   - s.setRemark("3");
3499   - } else {
3500   - s.setRemark("2");
3501   - }
3502   - String[] fcsj = s.getFcsj().split(":");
3503   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3504   -
3505   - Long fscjT = 0L;
3506   - if (fcsjL < minSj) {
3507   - Calendar calendar = new GregorianCalendar();
3508   - calendar.setTime(s.getScheduleDate());
3509   - calendar.add(calendar.DATE, 1);
3510   - Date date_sch= calendar.getTime();
3511   - try {
3512   - fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
3513   - } catch (ParseException e) {
3514   - // TODO Auto-generated catch block
3515   - e.printStackTrace();
3516   - }
3517   -
3518   - } else {
3519   - try {
3520   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3521   - } catch (ParseException e) {
3522   - // TODO Auto-generated catch block
3523   - e.printStackTrace();
3524   - };
3525   - }
3526   - s.setFcsjT(fscjT);
3527   - }
3528   - List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
3529   - listInfo2.addAll(listInfo);
3530   - Collections.sort(listInfo, new compareLpFcsjType());
3531   - Collections.sort(listInfo2,new compareDirLpFcsjType());
3532   - for (int i = 0; i < listInfo.size(); i++) {
3533   - ScheduleRealInfo t = listInfo.get(i);
3534   - if (!lpName.equals(t.getLpName())) {
3535   - zdsjActual = t.getZdsjActual();
3536   - zdsj = t.getZdsj();
3537   - t.setZdsjActual("");
3538   - t.setZdsj("");
3539   - } else {
3540   - zdsj1 = t.getZdsj();
3541   - zdsjActual1 = t.getZdsjActual();
3542   - t.setZdsjActual(zdsjActual);
3543   - t.setZdsj(zdsj);
3544   - zdsj = zdsj1;
3545   - zdsjActual = zdsjActual1;
3546   - }
3547   - lpName = t.getLpName();
3548   - list.add(t);
3549   - }
3550   -/*
3551   - List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleDdrb2(line, date);
3552   - for (int i = 0; i < listInfo2.size(); i++) {
3553   - ScheduleRealInfo s = listInfo2.get(i);
3554   - if (s.getBcType().equals("out")) {
3555   - s.setRemark("1");
3556   - } else if (s.getBcType().equals("in")) {
3557   - s.setRemark("3");
3558   - } else {
3559   - s.setRemark("2");
3560   - }
3561   - String[] fcsj = s.getFcsj().split(":");
3562   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3563   -
3564   - Long fscjT = 0L;
3565   - if (fcsjL < minSj) {
3566   - Calendar calendar = new GregorianCalendar();
3567   - calendar.setTime(s.getScheduleDate());
3568   - calendar.add(calendar.DATE, 1);
3569   - s.setScheduleDate(calendar.getTime());
3570   - try {
3571   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
3572   - } catch (ParseException e) {
3573   - // TODO Auto-generated catch block
3574   - e.printStackTrace();
3575   - }
3576   -
3577   - } else {
3578   - try {
3579   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3580   - } catch (ParseException e) {
3581   - // TODO Auto-generated catch block
3582   - e.printStackTrace();
3583   - }
3584   - ;
3585   - }
3586   - s.setFcsjT(fscjT);
3587   - }*/
3588   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3589   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3590   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3591   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3592   - if (listInfo2.size() > 0) {
3593   - int a = listInfo2.size() % 3;
3594   - int b = listInfo2.size() / 3;
3595   - int x = 0, y = 0;
3596   - if (a == 2) {
3597   - x = b + 1;
3598   - y = x * 2;
3599   - } else if (a == 1) {
3600   - x = b + 1;
3601   - y = x * 2 - 1;
3602   - } else {
3603   - x = b;
3604   - y = 2 * x;
3605   -
3606   - }
3607   - for (int i = 0; i < listInfo2.size(); i++) {
3608   - ScheduleRealInfo s = listInfo2.get(i);
3609   - if (i + 1 <= x) {
3610   - xList.add(s);
3611   - } else if ((i + 1) > x && (i + 1) <= y) {
3612   - yList.add(s);
3613   - } else {
3614   - zList.add(s);
3615   - }
3616   - }
3617   - for (int i = 0; i < x; i++) {
3618   - newList.add(xList.get(i));
3619   - if (yList.size() > i) {
3620   - newList.add(yList.get(i));
3621   - } else {
3622   - newList.add(new ScheduleRealInfo());
3623   - }
3624   - if (zList.size() > i) {
3625   - newList.add(zList.get(i));
3626   - } else {
3627   - newList.add(new ScheduleRealInfo());
3628   - }
3629   -
3630   - }
3631   - }
3632   - for (int i = 0; i < newList.size(); i++) {
3633   - ScheduleRealInfo t1 = newList.get(i);
3634   - for (int j = 0; j < list.size(); j++) {
3635   - ScheduleRealInfo t2 = list.get(j);
3636   - if (t1.getId() == t2.getId()) {
3637   - t1 = t2;
3638   - }
3639   - }
3640   - }
3641   -
3642   - for (int i = 0; i < newList.size(); i++) {
3643   - ScheduleRealInfo t1 = newList.get(i);
3644   - String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
3645   - if (reamrks1.length() > 4) {
3646   - t1.setRemarks(reamrks1.substring(0, 4));
3647   - t1.setRemark(reamrks1);
3648   - } else {
3649   - t1.setRemark(reamrks1);
3650   - }
3651   - }
3652   - return newList;
3653   - }
3654   -
3655   - @Override
3656   - public List<ScheduleRealInfo> realScheduleList_zrw(String line, String date) {
3657   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3658   - String lpName = "lpName";
3659   - String zdsj = "";
3660   - String zdsjActual = "";
3661   - String zdsj1 = "";
3662   - String zdsjActual1 = "";
3663   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
3664   -
3665   - /*
3666   - * 对计划发车时间相同的班次进行排序 out最前 in最后
3667   - */
3668   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3669   - SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
3670   -
3671   - String minfcsj = "02:00";
3672   - List<Line> lineList = lineRepository.findLineByCode(line);
3673   - if (lineList.size() > 0) {
3674   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
3675   - + " id = ("
3676   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
3677   - + ")";
3678   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
3679   - }
3680   - String[] minSjs = minfcsj.split(":");
3681   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
3682   - for (int i = 0; i < listInfo.size(); i++) {
3683   - ScheduleRealInfo s = listInfo.get(i);
3684   - if (s.getBcType().equals("out")) {
3685   - s.setRemark("1");
3686   - } else if (s.getBcType().equals("in")) {
3687   - s.setRemark("3");
3688   - } else {
3689   - s.setRemark("2");
3690   - }
3691   - String[] fcsj = s.getFcsj().split(":");
3692   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3693   -
3694   - Long fscjT = 0L;
3695   - if (fcsjL < minSj) {
3696   - Calendar calendar = new GregorianCalendar();
3697   - calendar.setTime(s.getScheduleDate());
3698   - calendar.add(calendar.DATE, 1);
3699   - Date date_sch=calendar.getTime();
3700   - try {
3701   - fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
3702   - } catch (ParseException e) {
3703   - // TODO Auto-generated catch block
3704   - e.printStackTrace();
3705   - }
3706   -
3707   - } else {
3708   - try {
3709   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3710   - } catch (ParseException e) {
3711   - // TODO Auto-generated catch block
3712   - e.printStackTrace();
3713   - }
3714   - ;
3715   - }
3716   - s.setFcsjT(fscjT);
3717   - }
3718   -
3719   -// Collections.sort(listInfo, new compareLpFcsjType());
3720   - List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
3721   -
3722   - Collections.sort(listInfo, new compareLpFcsjType());
3723   - for (int i = 0; i < listInfo.size(); i++) {
3724   - ScheduleRealInfo t = listInfo.get(i);
3725   - if (!lpName.equals(t.getLpName())) {
3726   - zdsjActual = t.getZdsjActual();
3727   - zdsj = t.getZdsj();
3728   - t.setZdsjActual("");
3729   - t.setZdsj("");
3730   - } else {
3731   - zdsj1 = t.getZdsj();
3732   - zdsjActual1 = t.getZdsjActual();
3733   - t.setZdsjActual(zdsjActual);
3734   - t.setZdsj(zdsj);
3735   - zdsj = zdsj1;
3736   - zdsjActual = zdsjActual1;
3737   - }
3738   -
3739   -
3740   -
3741   - lpName = t.getLpName();
3742   - listInfo2.add(t);
3743   -
3744   - }
3745   -
3746   - Collections.sort(listInfo2,new compareDirLpFcsjType());
3747   - for (int i = 0; i < listInfo2.size(); i++) {
3748   - ScheduleRealInfo t=listInfo2.get(i);
3749   - list.add(t);
3750   - Set<ChildTaskPlan> childTaskPlans = t.getcTasks();
3751   - //计算营运里程,空驶里程
3752   - if (!childTaskPlans.isEmpty()) {
3753   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
3754   - Collections.sort(listit, new ComparableChild());
3755   - for (int j = 0; j < listit.size(); j++) {
3756   - ScheduleRealInfo s = new ScheduleRealInfo();
3757   - ChildTaskPlan childTaskPlan = listit.get(j);
3758   - if (childTaskPlan.getCcId() == null) {
3759   - if (childTaskPlan.isDestroy()) {
3760   - s.setFcsjActual("");
3761   - s.setZdsjActual("");
3762   - } else {
3763   - s.setFcsjActual(childTaskPlan.getStartDate());
3764   - s.setZdsjActual("");
3765   - s.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
3766   - }
3767   - s.setFcsj(childTaskPlan.getStartDate());
3768   - s.setZdsj("");
3769   - s.setQdzName(childTaskPlan.getStartStationName());
3770   - s.setZdzName(childTaskPlan.getEndStationName());
3771   - s.setRemarks(childTaskPlan.getRemarks());
3772   - s.setAdjustExps("子");
3773   - s.setLpName("");
3774   - list.add(s);
3775   - }
3776   - }
3777   - }
3778   - }
3779   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3780   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3781   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3782   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3783   - if (list.size() > 0) {
3784   - int a = list.size() % 3;
3785   - int b = list.size() / 3;
3786   - int x = 0, y = 0;
3787   - if (a == 2) {
3788   - x = b + 1;
3789   - y = x * 2;
3790   - } else if (a == 1) {
3791   - x = b + 1;
3792   - y = x * 2 - 1;
3793   - } else {
3794   - x = b;
3795   - y = 2 * x;
3796   -
3797   - }
3798   - for (int i = 0; i < list.size(); i++) {
3799   - ScheduleRealInfo s = list.get(i);
3800   - if (i + 1 <= x) {
3801   - xList.add(s);
3802   - } else if ((i + 1) > x && (i + 1) <= y) {
3803   - yList.add(s);
3804   - } else {
3805   - zList.add(s);
3806   - }
3807   - }
3808   - for (int i = 0; i < x; i++) {
3809   - newList.add(xList.get(i));
3810   - if (yList.size() > i) {
3811   - newList.add(yList.get(i));
3812   - } else {
3813   - newList.add(new ScheduleRealInfo());
3814   - }
3815   - if (zList.size() > i) {
3816   - newList.add(zList.get(i));
3817   - } else {
3818   - newList.add(new ScheduleRealInfo());
3819   - }
3820   -
3821   - }
3822   - }
3823   - /* for (int i = 0; i < newList.size(); i++) {
3824   - ScheduleRealInfo t1 = newList.get(i);
3825   - for (int j = 0; j < list.size(); j++) {
3826   - ScheduleRealInfo t2 = list.get(j);
3827   - if (t1.getId() == t2.getId()) {
3828   - t1 = t2;
3829   - }
3830   - }
3831   - }*/
3832   -
3833   - for (int i = 0; i < newList.size(); i++) {
3834   - ScheduleRealInfo t1 = newList.get(i);
3835   - String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
3836   - if (reamrks1.length() > 4) {
3837   - t1.setRemarks(reamrks1.substring(0, 4));
3838   - t1.setRemark(reamrks1);
3839   - } else {
3840   - t1.setRemark(reamrks1);
3841   - }
3842   - }
3843   - return newList;
3844   - }
3845   -
3846   - @Override
3847   - public List<ScheduleRealInfo> realScheduleList_mh_2(String line, String date) {
3848   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3849   - String lpName = "lpName";
3850   - String zdsj = "";
3851   - String zdsjActual = "";
3852   - String zdsj1 = "";
3853   - String zdsjActual1 = "";
3854   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
3855   -
3856   - for (ScheduleRealInfo s : listInfo) {
3857   - if (s.isDestroy() && s.isReissue()) {
3858   - s.setRemark("");
3859   - s.setFcsjActual(s.getDfsj());
3860   - s.setZdsjActual(s.getZdsj());
3861   - s.setStatus(2);
3862   - s.setJhlc(s.getJhlcOrig());
3863   - }
3864   - }
3865   -
3866   - for (int i = 0; i < listInfo.size(); i++) {
3867   - ScheduleRealInfo t = listInfo.get(i);
3868   - if (!lpName.equals(t.getLpName())) {
3869   - zdsjActual = t.getZdsjActual();
3870   - zdsj = t.getZdsj();
3871   - t.setZdsjActual("");
3872   - t.setZdsj("");
3873   - } else {
3874   - zdsj1 = t.getZdsj();
3875   - zdsjActual1 = t.getZdsjActual();
3876   - t.setZdsjActual(zdsjActual);
3877   - t.setZdsj(zdsj);
3878   - zdsj = zdsj1;
3879   - zdsjActual = zdsjActual1;
3880   - }
3881   - lpName = t.getLpName();
3882   - list.add(t);
3883   - }
3884   -
3885   - List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLineQp2(line, date);
3886   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3887   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3888   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3889   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3890   - if (listInfo2.size() > 0) {
3891   - int a = listInfo2.size() % 3;
3892   - int b = listInfo2.size() / 3;
3893   - int x = 0, y = 0;
3894   - if (a == 2) {
3895   - x = b + 1;
3896   - y = x * 2;
3897   - } else if (b == 1) {
3898   - x = b + 1;
3899   - y = x * 2 - 1;
3900   - } else {
3901   - x = b;
3902   - y = 2 * x;
3903   -
3904   - }
3905   - for (int i = 0; i < listInfo2.size(); i++) {
3906   - ScheduleRealInfo s = listInfo2.get(i);
3907   - if (i + 1 <= x) {
3908   - xList.add(s);
3909   - } else if ((i + 1) > x && (i + 1) <= y) {
3910   - yList.add(s);
3911   - } else {
3912   - zList.add(s);
3913   - }
3914   - }
3915   - for (int i = 0; i < x; i++) {
3916   - newList.add(xList.get(i));
3917   - if (yList.size() > i) {
3918   - newList.add(yList.get(i));
3919   - } else {
3920   - newList.add(new ScheduleRealInfo());
3921   - }
3922   - if (zList.size() > i) {
3923   - newList.add(zList.get(i));
3924   - } else {
3925   - newList.add(new ScheduleRealInfo());
3926   - }
3927   -
3928   - }
3929   - }
3930   - for (int i = 0; i < newList.size(); i++) {
3931   - ScheduleRealInfo t1 = newList.get(i);
3932   - for (int j = 0; j < list.size(); j++) {
3933   - ScheduleRealInfo t2 = list.get(j);
3934   - if (t1.getId() == t2.getId()) {
3935   - t1 = t2;
3936   - }
3937   - }
3938   - }
3939   - return newList;
3940   - }
3941   -
3942   - @Override
3943   - public List<ScheduleRealInfo> realScheduleListQp(String line, String date) {
3944   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3945   - String lpName = "lpName";
3946   - String zdsj = "";
3947   - String zdsjActual = "";
3948   - String zdsj1 = "";
3949   - String zdsjActual1 = "";
3950   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
3951   - for (int i = 0; i < listInfo.size(); i++) {
3952   - ScheduleRealInfo t = listInfo.get(i);
3953   - if (!lpName.equals(t.getLpName())) {
3954   - zdsjActual = t.getZdsjActual();
3955   - zdsj = t.getZdsj();
3956   - t.setZdsjActual("");
3957   - t.setZdsj("");
3958   - } else {
3959   - zdsj1 = t.getZdsj();
3960   - zdsjActual1 = t.getZdsjActual();
3961   - t.setZdsjActual(zdsjActual);
3962   - t.setZdsj(zdsj);
3963   - zdsj = zdsj1;
3964   - zdsjActual = zdsjActual1;
3965   - }
3966   -
3967   - lpName = t.getLpName();
3968   - list.add(t);
3969   - }
3970   - return list;
3971   - }
3972   -
3973   - public List<Map<String, Object>> yesterdayDataList(String line, String date, String gsbm, String fgsbm, String jGh, String nbbm) {
3974   - List<Map<String, Object>> yesterdayDataList = new ArrayList<Map<String, Object>>();
3975   - if (line.equals("")) {
3976   - yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList(line, date, gsbm, fgsbm, nbbm);
3977   - } else {
3978   - yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList_eq(line, date, gsbm, fgsbm, nbbm);
3979   - }
3980   - List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill3(jGh, nbbm, date, gsbm, fgsbm);
3981   - for (int x = 0; x < yesterdayDataList.size(); x++) {
3982   - String jsy = yesterdayDataList.get(x).get("jGh").toString();
3983   - String clZbh = yesterdayDataList.get(x).get("clZbh").toString();
3984   - String xlbm = yesterdayDataList.get(x).get("xlBm").toString();
3985   - String lp = yesterdayDataList.get(x).get("lpName").toString();
3986   - String realExecDate=yesterdayDataList.get(x).get("realExecDate").toString();
3987   - String fcsj[] =realExecDate.split(" ");
3988   - //取出最小计划发车时间
3989   - yesterdayDataList.get(x).put("fcsj", fcsj[1]);
3990   - Map<String, Object> map = new HashMap<String, Object>();
3991   - boolean fage = true;
3992   - String company = "";
3993   - String bCompany = "";
3994   - String lineName="";
3995   - String jName="";
3996   - List<ScheduleRealInfo> listS = new ArrayList<ScheduleRealInfo>();
3997   - for (ScheduleRealInfo scheduleRealInfo : lists) {
3998   - if (scheduleRealInfo.getjGh().equals(jsy)
3999   - && scheduleRealInfo.getClZbh().equals(clZbh)
4000   - && scheduleRealInfo.getXlBm().equals(xlbm)
4001   - && scheduleRealInfo.getLpName().equals(lp)) {
4002   - if (fage) {
4003   - //根据线路代码获取公司
4004   - company = scheduleRealInfo.getGsBm();
4005   - bCompany = scheduleRealInfo.getFgsBm();
4006   - lineName = scheduleRealInfo.getXlName();
4007   - jName= scheduleRealInfo.getjName();
4008   - fage = false;
4009   - }
4010   - Set<ChildTaskPlan> cts = scheduleRealInfo.getcTasks();
4011   - if (cts != null && cts.size() > 0) {
4012   - listS.add(scheduleRealInfo);
4013   - } else {
4014   - if (scheduleRealInfo.getZdsjActual() != null && scheduleRealInfo.getFcsjActual() != null) {
4015   - listS.add(scheduleRealInfo);
4016   - }
4017   - }
4018   - }
4019   - }
4020   - yesterdayDataList.get(x).put("company", company);
4021   - yesterdayDataList.get(x).put("bCompany", bCompany);
4022   - yesterdayDataList.get(x).put("lineName", lineName);
4023   - yesterdayDataList.get(x).put("jName", jName);
4024   - Double ljgl = culateMieageService.culateLjgl(listS);
4025   - Double sjgl = culateMieageService.culateSjgl(listS);
4026   - Double ksgl = culateMieageService.culateKsgl(listS);
4027   - Double jccgl = culateMieageService.culateJccgl(listS);
4028   - Double zyygl = Arith.add(sjgl, ljgl);
4029   - Double zksgl = Arith.add(ksgl, jccgl);
4030   - Double zlc = Arith.add(zyygl, zksgl);
4031   - yesterdayDataList.get(x).put("totalKilometers", zlc);
4032   -
4033   - }
4034   - //增加顺序号
4035   - for (int i = 0; i < yesterdayDataList.size(); i++) {
4036   - if (i == 0) {
4037   - yesterdayDataList.get(i).put("seqNumber", 1);
4038   - } else {
4039   - if (yesterdayDataList.get(i - 1).get("clZbh").equals(yesterdayDataList.get(i).get("clZbh"))) {
4040   - yesterdayDataList.get(i).put("seqNumber", 1 + (int) yesterdayDataList.get(i - 1).get("seqNumber"));
4041   - } else {
4042   - yesterdayDataList.get(i).put("seqNumber", 1);
4043   - }
4044   - }
4045   - }
4046   -
4047   - return yesterdayDataList;
4048   - }
4049   -
4050   - /**
4051   - * 批量调整人车
4052   - */
4053   - @Override
4054   - public Map<String, Object> multi_tzrc(List<ChangePersonCar> cpcs, String userId) {
4055   - Map<String, Object> rs = new HashMap<>();
4056   - Set<ScheduleRealInfo> set = new HashSet<>();
4057   -
4058   - ScheduleRealInfo sch;
4059   -
4060   - String jGh = null, jName, sGh, sName;
4061   - for (ChangePersonCar cpc : cpcs) {
4062   -
4063   - sch = dayOfSchedule.get(cpc.getSchId());
4064   - if (sch == null)
4065   - continue;
4066   -
4067   - if (cpc.getClZbh() != null) {
4068   - if (!carExist(sch.getGsBm(), cpc.getClZbh())) {
4069   - rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
4070   - rs.put("status", ResponseCode.ERROR);
4071   - return rs;
4072   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(cpc.getClZbh()))) {
4073   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + cpc.getClZbh() + "】的车辆");
4074   - rs.put("status", ResponseCode.ERROR);
4075   - return rs;
4076   - }
4077   - }
4078   -
4079   - if (StringUtils.isNotEmpty(cpc.getJsy())) {
4080   - try{
4081   - jGh = cpc.getJsy().split("/")[0];
4082   - }catch (Exception e){
4083   - logger.error("", e);
4084   - rs.put("msg", "驾驶员参数异常!!");
4085   - rs.put("status", ResponseCode.ERROR);
4086   - return rs;
4087   - }
4088   -
4089   - jName = getPersonName(sch.getGsBm(), jGh);
4090   - if (StringUtils.isEmpty(jName)) {
4091   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
4092   - rs.put("status", ResponseCode.ERROR);
4093   - return rs;
4094   - }
4095   - }
4096   -
4097   -
4098   - //为换人换车情况表写入数据
4099   - schModifyLog.saveChangetochange(sch, cpc, userId);
4100   - //日志记录
4101   - ScheduleModifyLogger.tzrc(sch, cpc, userId);
4102   -
4103   - //换驾驶员
4104   - if (StringUtils.isNotEmpty(cpc.getJsy())) {
4105   - //换驾驶员
4106   - if (persoChange(sch, jGh))
4107   - set.add(sch);
4108   - }
4109   -
4110   - //换售票员
4111   - if (StringUtils.isNotEmpty(cpc.getSpy())
4112   - && !"/".equals(StringUtils.trim(cpc.getSpy()))) {
4113   -
4114   - sGh = cpc.getSpy().split("/")[0];
4115   - sName = getPersonName(sch.getGsBm(), sGh);
4116   - if (StringUtils.isEmpty(sName)) {
4117   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
4118   - rs.put("status", ResponseCode.ERROR);
4119   - return rs;
4120   - }
4121   -
4122   - /*if(!sGh.equals(sch.getsGh()))
4123   - sb.append(sch.getsGh() + " 换 " + sGh + ";");*/
4124   - if (persoChangeSPY(sch, sGh))
4125   - set.add(sch);
4126   - } else if (StringUtils.isNotEmpty(sch.getsGh())) {
4127   - sch.setsGh("");
4128   - sch.setsName("");
4129   - }
4130   -
4131   - //换车
4132   - if (StringUtils.isNotEmpty(cpc.getClZbh()) && !cpc.getClZbh().equals(sch.getClZbh())) {
4133   - //sb.append(sch.getClZbh() + " 换 " + cpc.getClZbh() + ";");
4134   - set.add(sch);
4135   - set.addAll(dayOfSchedule.changeCar(sch, cpc.getClZbh()));
4136   - }
4137   -
4138   - /*if(sb.length() > 0)
4139   - sch.setRemarks(sb.toString());*/
4140   -
4141   - dayOfSchedule.save(sch);
4142   - set.add(sch);
4143   -
4144   - }
4145   - rs.put("ts", set);
4146   - rs.put("status", ResponseCode.SUCCESS);
4147   - return rs;
4148   - }
4149   -
4150   - /**
4151   - * @Title: persoChange
4152   - * @Description: TODO(班次换驾驶员)
4153   - */
4154   - public boolean persoChange(ScheduleRealInfo sch, String jGh) {
4155   - if (sch.getjGh().equals(jGh))
4156   - return false;
4157   - String jName = getPersonName(sch.getGsBm(), jGh);
4158   - if (StringUtils.isNotEmpty(jName)) {
4159   -
4160   - if (jGh.indexOf("-") != -1)
4161   - sch.setjGh(jGh.substring(jGh.indexOf("-") + 1));
4162   - else
4163   - sch.setjGh(jGh);
4164   -
4165   - sch.setjName(jName);
4166   - return true;
4167   - }
4168   - return false;
4169   - }
4170   -
4171   - /**
4172   - * @Title: persoChange
4173   - * @Description: TODO(班次换售票员)
4174   - */
4175   - public boolean persoChangeSPY(ScheduleRealInfo sch, String sGh) {
4176   - if (sch.getsGh().equals(sGh))
4177   - return false;
4178   - String sName = getPersonName(sch.getGsBm(), sGh);
4179   - if (StringUtils.isNotEmpty(sName)) {
4180   - if (sGh.indexOf("-") != -1)
4181   - sch.setsGh(sGh.substring(sGh.indexOf("-") + 1));
4182   - else
4183   - sch.setsGh(sGh);
4184   - sch.setsName(sName);
4185   - return true;
4186   - }
4187   - return false;
4188   - }
4189   -
4190   - /**
4191   - * 批量待发调整
4192   - */
4193   - @Override
4194   - public Map<String, Object> multi_dftz(List<DfsjChange> dfsjcs) {
4195   - Map<String, Object> rs = new HashMap<>(), tempMap = new HashMap<>();
4196   - List<ScheduleRealInfo> list = new ArrayList<>();
4197   -
4198   - for (DfsjChange dc : dfsjcs) {
4199   - if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
4200   - continue;
4201   -
4202   - tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "2", null);
4203   -
4204   - if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
4205   - list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
4206   - }
4207   - }
4208   -
4209   - rs.put("status", ResponseCode.SUCCESS);
4210   - rs.put("ts", list);
4211   - return rs;
4212   - }
4213   -
4214   -
4215   - @Override
4216   - public Map<String, Object> findKMBC1(String jName, String clZbh,
4217   - String date, String enddate) {
4218   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill4(jName, clZbh, date, enddate);
4219   - DecimalFormat format = new DecimalFormat("0.00");
4220   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4221   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4222   - int jhbc = 0, cjbc = 0, ljbc = 0;
4223   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
4224   - float addMileage = 0l, remMileage = 0l;
4225   - Map<String, Object> map = new HashMap<String, Object>();
4226   - for (ScheduleRealInfo scheduleRealInfo : list) {
4227   - if (scheduleRealInfo != null) {
4228   - //计划里程(主任务过滤掉临加班次),
4229   - //烂班里程(主任务烂班),
4230   - //临加里程(主任务临加),
4231   - //计划班次,烂班班次,增加班次
4232   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
4233   - if (scheduleRealInfo.isSflj()) {
4234   - addMileage += tempJhlc;
4235   - ljbc++;
4236   - } else {
4237   - jhlc += tempJhlc;
4238   - jhbc++;
4239   - if (scheduleRealInfo.getStatus() == -1) {
4240   - remMileage += tempJhlc;
4241   - cjbc++;
4242   - }
4243   - }
4244   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
4245   - //计算营运里程,空驶里程
4246   - if (childTaskPlans.isEmpty()) {
4247   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
4248   - || scheduleRealInfo.getBcType().equals("venting")) {
4249   - ksgl += tempJhlc;
4250   - } else {
4251   - yygl += tempJhlc;
4252   - }
4253   - } else {
4254   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4255   - while (it.hasNext()) {
4256   - ChildTaskPlan childTaskPlan = it.next();
4257   - if (childTaskPlan.getMileageType().equals("empty")) {
4258   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4259   - } else {
4260   - yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4261   - }
4262   - }
4263   - }
4264   - }
4265   - }
4266   - map.put("jhlc", format.format(jhlc));
4267   - map.put("remMileage", format.format(remMileage));
4268   - map.put("addMileage", format.format(addMileage));
4269   - map.put("yygl", format.format(yygl));
4270   - map.put("ksgl", format.format(ksgl));
4271   - map.put("realMileage", format.format(yygl + ksgl));
4272   - map.put("jhbc", jhbc);
4273   - map.put("cjbc", cjbc);
4274   - map.put("ljbc", ljbc);
4275   - map.put("sjbc", jhbc - cjbc + ljbc);
4276   - return map;
4277   - }
4278   -
4279   - /**
4280   - * 调整班次类型
4281   - *
4282   - * @param id
4283   - * @param bcType
4284   - * @param remarks
4285   - * @return
4286   - */
4287   - @Override
4288   - public Map<String, Object> changeBcType(Long id, String bcType, String remarks, String majorStationName) {
4289   - Map<String, Object> rs = new HashMap<>();
4290   -
4291   - try {
4292   - ScheduleRealInfo sch = dayOfSchedule.get(id);
4293   - if (sch != null) {
4294   - sch.setBcType(bcType);
4295   - sch.setRemarks(remarks);
4296   - rs.put("status", ResponseCode.SUCCESS);
4297   - rs.put("t", sch);
4298   -
4299   - if ("major".equals(bcType)) {
4300   - sch.setMajorStationName(majorStationName);
4301   - }
4302   -
4303   - dayOfSchedule.save(sch);
4304   - }
4305   - } catch (Exception e) {
4306   - logger.error("", e);
4307   - rs.put("status", ResponseCode.ERROR);
4308   - }
4309   -
4310   - return rs;
4311   - }
4312   -
4313   - @Override
4314   - public Map<String, Object> historySave(ScheduleRealInfo sch) {
4315   - Map<String, Object> rs = new HashMap<>();
4316   - rs.put("status", ResponseCode.ERROR);
4317   -
4318   - ScheduleRealInfo oldSch = super.findById(sch.getId());
4319   - //事后日志记录
4320   - AfterwardsLogger aflog = AfterwardsLogger.start(oldSch, "事后调整");
4321   -
4322   - //换车
4323   - if (StringUtils.isNotEmpty(sch.getClZbh()) && !oldSch.getClZbh().equals(sch.getClZbh())) {
4324   - if (!carExist(oldSch.getGsBm(), sch.getClZbh())) {
4325   - rs.put("msg", "车辆 " + sch.getClZbh() + " 不存在!");
4326   - return rs;
4327   - } else {
4328   - aflog.log("换车", oldSch.getClZbh(), sch.getClZbh());
4329   - oldSch.setClZbh(sch.getClZbh());
4330   - }
4331   - }
4332   -
4333   - //换驾驶员
4334   - if (StringUtils.isNotEmpty(sch.getjGh()) && !oldSch.getjGh().equals(sch.getjGh())) {
4335   - String jName = getPersonName(oldSch.getGsBm(), sch.getjGh());
4336   - if (StringUtils.isEmpty(jName)) {
4337   - rs.put("msg", oldSch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
4338   - return rs;
4339   - }
4340   - aflog.log("换驾驶员", oldSch.getjGh() + "/" + oldSch.getjName(), sch.getjGh() + "/" + sch.getjName());
4341   - persoChange(oldSch, sch.getjGh());
4342   - }
4343   -
4344   - //换售票员
4345   - if (StringUtils.isNotEmpty(sch.getsGh()) && !oldSch.getsGh().equals(sch.getsGh())) {
4346   - String sName = getPersonName(oldSch.getGsBm(), sch.getsGh());
4347   - if (StringUtils.isEmpty(sName)) {
4348   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getsGh() + "】的售票员");
4349   - return rs;
4350   - }
4351   - aflog.log("换售票员", oldSch.getsGh() + "/" + oldSch.getsName(), sch.getsGh() + "/" + sch.getsName());
4352   - persoChangeSPY(oldSch, sch.getsGh());
4353   - }
4354   -
4355   - //烂班
4356   - boolean dest1 = oldSch.getStatus() == -1;
4357   - boolean dest2 = sch.getStatus() == -1;
4358   - if (!dest1 && dest2) {
4359   - oldSch.destroy();
4360   - aflog.log("烂班");
4361   - } else if (dest1 && !dest2) {
4362   - //撤销烂班
4363   - oldSch.setJhlc(oldSch.getJhlcOrig());
4364   - oldSch.setStatus(0);
4365   - oldSch.calcStatus();
4366   - oldSch.setAdjustExps(null);
4367   - aflog.log("撤销烂班");
4368   - }
4369   -
4370   - oldSch.setAdjustExps(sch.getAdjustExps());
4371   -
4372   - /**
4373   - * 修改班次里程
4374   - */
4375   - if (!oldSch.getJhlc().equals(sch.getJhlc())) {
4376   - double jhlcNum = sch.getJhlc();
4377   - aflog.log("修改班次里程", oldSch.getJhlc(), jhlcNum);
4378   - //烂班
4379   - if (jhlcNum == 0 && oldSch.getJhlcOrig() != 0)
4380   - oldSch.destroy();
4381   - else {
4382   - oldSch.setJhlc(jhlcNum);
4383   - //临加班次,实际计划一起改
4384   - if (oldSch.isSflj())
4385   - oldSch.setJhlcOrig(jhlcNum);
4386   - }
4387   - }
4388   -
4389   - //待发时间
4390   - if (!CustomStringUtils.equals(oldSch.getDfsj(), sch.getDfsj())) {
4391   - aflog.log("修改待发时间", oldSch.getDfsj(), sch.getDfsj());
4392   - oldSch.setDfsj(sch.getDfsj());
4393   - }
4394   - //实发时间
4395   - if (!CustomStringUtils.equals(oldSch.getFcsjActual(), sch.getFcsjActual())) {
4396   - aflog.log("修改实发时间", oldSch.getFcsjActual(), sch.getFcsjActual());
4397   - oldSch.setFcsjActual(sch.getFcsjActual());
4398   - }
4399   - //实际终点
4400   - if (!CustomStringUtils.equals(oldSch.getZdsjActual(), sch.getZdsjActual())) {
4401   - aflog.log("修改实达时间", oldSch.getZdsjActual(), sch.getZdsjActual());
4402   - oldSch.setZdsjActual(sch.getZdsjActual());
4403   - }
4404   -
4405   - //备注
4406   - if (!CustomStringUtils.equals(oldSch.getRemarks(), sch.getRemarks())) {
4407   - aflog.log("修改备注", oldSch.getRemarks(), sch.getRemarks());
4408   - oldSch.setRemarks(sch.getRemarks());
4409   - }
4410   -
4411   - scheduleRealInfoRepository.save(oldSch);
4412   -
4413   - aflog.end();
4414   - rs.put("status", ResponseCode.SUCCESS);
4415   - return rs;
4416   - }
4417   -
4418   - @Autowired
4419   - SvgAttributeRepository svgAttributeRepository;
4420   -
4421   - @Override
4422   - public Map<String, Object> svgAttr(String jsonStr) {
4423   - Map<String, Object> rs = new HashMap<>();
4424   -
4425   - try {
4426   - JSONObject jObj = JSONObject.parseObject(StringEscapeUtils.unescapeHtml4(jsonStr));
4427   -
4428   - SvgAttribute svgAttribute = new SvgAttribute();
4429   - svgAttribute.setLineCode(jObj.getString("lineCode"));
4430   - svgAttribute.setHideStations(jObj.getString("hideStations"));
4431   - svgAttribute.setNicknames(jObj.getString("nicknames"));
4432   - svgAttributeRepository.save(svgAttribute);
4433   -
4434   - rs.put("t", svgAttribute);
4435   - rs.put("status", ResponseCode.SUCCESS);
4436   - } catch (Exception e) {
4437   - logger.error("", e);
4438   - rs.put("status", ResponseCode.ERROR);
4439   - }
4440   - return rs;
4441   - }
4442   -
4443   - @Override
4444   - public Map<String, Object> findSvgAttr(String idx) {
4445   - Map<String, Object> rs = new HashMap<>();
4446   - try {
4447   - List<String> lineCodes = Splitter.on(",").splitToList(idx);
4448   - List<SvgAttribute> list = svgAttributeRepository.findSvgAttr(lineCodes);
4449   -
4450   - rs.put("status", ResponseCode.SUCCESS);
4451   - rs.put("list", list);
4452   - } catch (Exception e) {
4453   - logger.error("", e);
4454   - rs.put("status", ResponseCode.ERROR);
4455   - }
4456   - return rs;
4457   - }
4458   -
4459   - @Override
4460   - public Map<String, Object> addRemarks(Long id, String remarks) {
4461   - Map<String, Object> rs = new HashMap<>();
4462   - try {
4463   - ScheduleRealInfo sch = dayOfSchedule.get(id);
4464   - sch.addRemarks(remarks);
4465   -
4466   - rs.put("status", ResponseCode.SUCCESS);
4467   - rs.put("t", sch);
4468   - } catch (Exception e) {
4469   - logger.error("", e);
4470   - rs.put("status", ResponseCode.ERROR);
4471   - }
4472   - return rs;
4473   - }
4474   -
4475   - @Override
4476   - public List<Map<String, Object>> yesterdayDataList(String line) {
4477   - // TODO Auto-generated method stub
4478   - return null;
4479   - }
4480   -
4481   - @Override
4482   - public List<ScheduleRealInfo> exportWaybillQp(String clZbh, String date, String line) {
4483   - // TODO Auto-generated method stub
4484   - ReportUtils ee = new ReportUtils();
4485   - ReportRelatedUtils rru = new ReportRelatedUtils();
4486   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
4487   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4488   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
4489   -
4490   - DecimalFormat format = new DecimalFormat("0.00");
4491   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4492   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4493   - int jhbc = 0, cjbc = 0, ljbc = 0;
4494   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0;
4495   - float addMileage = 0l, remMileage = 0l, addgl = 0, remgl = 0;
4496   - int xyz = 1;
4497   - Map<String, Object> map;
4498   - for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
4499   - if (scheduleRealInfo != null) {
4500   - //计算计划里程(主任务过滤掉临加班次),烂班里程,临加里程,计划班次,烂班班次,增加班次
4501   - //计划里程(主任务过滤掉临加班次),
4502   - //烂班里程(主任务烂班),
4503   - //临加里程(主任务临加),
4504   - //计划班次,烂班班次,增加班次
4505   - double jh = 0, sj = 0;
4506   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
4507   - if (scheduleRealInfo.isSflj()) {
4508   - ljbc++;
4509   - } else {
4510   - if (!(scheduleRealInfo.getBcType().equals("in")
4511   - || scheduleRealInfo.getBcType().equals("out"))) {
4512   - jhbc++;
4513   - jh += tempJhlc;
4514   - }
4515   - if (scheduleRealInfo.getStatus() == -1) {
4516   - remMileage += tempJhlc;
4517   - cjbc++;
4518   - }
4519   - }
4520   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
4521   - //计算营运里程,空驶里程
4522   - if (childTaskPlans.isEmpty()) {
4523   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
4524   - ) {
4525   - jcclc += tempJhlc;
4526   - } else {
4527   - if (scheduleRealInfo.getStatus() != -1) {
4528   - if (scheduleRealInfo.isSflj()) {
4529   - addMileage += tempJhlc;
4530   - }
4531   - sj += tempJhlc;
4532   - }
4533   - }
4534   - } else {
4535   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4536   - while (it.hasNext()) {
4537   - ChildTaskPlan childTaskPlan = it.next();
4538   - if (childTaskPlan.getMileageType().equals("empty")) {
4539   - if (childTaskPlan.isDestroy()) {
4540   - remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4541   - } else {
4542   - if (scheduleRealInfo.isSflj()) {
4543   - addMileage += tempJhlc;
4544   - }
4545   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4546   - }
4547   - } else {
4548   - if (childTaskPlan.isDestroy()) {
4549   - remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4550   -// cjbc++;
4551   - } else {
4552   - if (scheduleRealInfo.isSflj()) {
4553   - addMileage += tempJhlc;
4554   - }
4555   - sj += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4556   - }
4557   - }
4558   - }
4559   - }
4560   -
4561   - if (!(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out"))) {
4562   - map = new HashMap<String, Object>();
4563   - try {
4564   - scheduleRealInfo.setBcs(xyz);
4565   - xyz++;
4566   - Set<ChildTaskPlan> cs = scheduleRealInfo.getcTasks();
4567   - Double sjlc = 0.0;
4568   - if (!cs.isEmpty()) {
4569   - Iterator<ChildTaskPlan> it = cs.iterator();
4570   - while (it.hasNext()) {
4571   - ChildTaskPlan c = it.next();
4572   - if (!c.isDestroy()) {
4573   - sjlc += c.getMileage() == null ? 0 : c.getMileage();
4574   - }
4575   -
4576   - }
4577   - } else {
4578   - if (scheduleRealInfo.getStatus() != -1) {
4579   - sjlc = scheduleRealInfo.getJhlc();
4580   - }
4581   - }
4582   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
4583   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
4584   - scheduleRealInfo.setSjlc(format.format(sjlc));
4585   - map = rru.getMapValue(scheduleRealInfo);
4586   - String zdsj = scheduleRealInfo.getZdsj();
4587   - String zdsjActual = scheduleRealInfo.getZdsjActual();
4588   - if (zdsj != null && zdsjActual != null &&
4589   - !zdsj.equals(zdsjActual)) {
4590   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
4591   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
4592   - if (zdsj.compareTo(zdsjActual) > 0) {
4593   - if (zdsjT - zdsjAT > 1000) {
4594   - map.put("fast", "");
4595   - map.put("slow", zdsjAT - zdsjT + 1440);
4596   - } else {
4597   - map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
4598   - map.put("slow", "");
4599   - }
4600   - } else {
4601   - if (zdsjAT - zdsjT > 1000) {
4602   - map.put("fast", zdsjT - zdsjAT + 1440);
4603   - map.put("slow", "");
4604   - } else {
4605   - map.put("fast", "");
4606   - map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
4607   - }
4608   - }
4609   - } else {
4610   - map.put("fast", "");
4611   - map.put("slow", "");
4612   - }
4613   - listMap.add(map);
4614   - } catch (Exception e) {
4615   - e.printStackTrace();
4616   - }
4617   - }
4618   - jhlc += jh;
4619   - yygl += sj;
4620   - if (jh > sj) {
4621   - remgl += jh - sj;
4622   - } else {
4623   - addgl += sj - jh;
4624   - }
4625   - }
4626   - }
4627   -
4628   -
4629   - List<Ylxxb> listYlxxb = ylxxbRepository.queryListYlxxb(clZbh, date);
4630   - Double jzl = 0.0;
4631   - for (int t = 0; t < listYlxxb.size(); t++) {
4632   - Ylxxb y = listYlxxb.get(t);
4633   - jzl += y.getJzl();
4634   - }
4635   -
4636   - //计算里程和班次数,并放入Map里
4637   - map = findKMBCQp(clZbh, date, line);
4638   - map.put("jzl", jzl);
4639   -// map.put("jhlc", format.format(jhlc + jcclc));
4640   -// map.put("yygljh", format.format(jhlc));
4641   -// map.put("ssgl", format.format(remMileage));
4642   -// map.put("ksgl", format.format(ksgl));
4643   -// map.put("yyglsj", format.format(yygl));
4644   -// map.put("jhbc", jhbc);
4645   -// map.put("jcclc", jcclc);
4646   -//
4647   -// map.put("ljgl", format.format(addMileage));
4648   -// map.put("ssbc", cjbc);
4649   -// map.put("ysgl", format.format(yygl));
4650   -// map.put("sjbc", jhbc - cjbc + ljbc);
4651   -// map.put("zgl", format.format(yygl + ksgl + jcclc));
4652   -// map.put("ljbc", ljbc);
4653   -
4654   - String zdp = "", zwdp = "", wdp = "";
4655   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4656   - List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59");
4657   - try {
4658   - Long fcsj1 = sdf.parse(date + " 03:00").getTime();
4659   - Long fcsj2 = sdf.parse(date + " 11:00").getTime();
4660   - Long fcsj3 = sdf.parse(date + " 22:00").getTime();
4661   - for (int i = 0; i < listDtuy.size(); i++) {
4662   - DutyEmployee t = listDtuy.get(i);
4663   - Long ts = t.getTs();
4664   - if (ts > fcsj1 && ts < fcsj2) {
4665   - if (zdp.indexOf(t.getuName()) == -1) {
4666   - zdp += t.getuName() + ",";
4667   -
4668   - }
4669   - } else if (ts > fcsj2 && ts < fcsj3) {
4670   - if (zwdp.indexOf(t.getuName()) == -1) {
4671   - zwdp += t.getuName() + ",";
4672   - }
4673   - } else {
4674   - if (wdp.indexOf(t.getuName()) == -1) {
4675   - wdp += t.getuName() + ",";
4676   - }
4677   - }
4678   - }
4679   - } catch (ParseException e) {
4680   - // TODO Auto-generated catch block
4681   - e.printStackTrace();
4682   - }
4683   - map.put("zdp", zdp);
4684   - map.put("zwdp", zwdp);
4685   - map.put("wdp", wdp);
4686   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
4687   - list.add(listMap.iterator());
4688   - ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/waybill_qingpu.xls",
4689   - path + "export/" + date + "-" + clZbh + "-行车路单.xls");
4690   -
4691   - return scheduleRealInfos;
4692   - }
4693   -
4694   - @Override
4695   - public Map<String, Object> findKMBCQp(String clZbh, String date, String line) {
4696   - // TODO Auto-generated method stub
4697   - List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4698   - DecimalFormat format = new DecimalFormat("0.00");
4699   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4700   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4701   - int jhbc = 0, cjbc = 0, ljbc = 0, sjbc = 0;
4702   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0, ljjcclc = 0, jhjcclc = 0;
4703   - double addMileage = 0, remMileage = 0, addgl = 0, remgl = 0;
4704   - Map<String, Object> map = new HashMap<String, Object>();
4705   - jhlc = culateMieageService.culateJhgl(lists);
4706   - jcclc = culateMieageService.culateJccgl(lists);
4707   - jhjcclc = culateMieageService.culateJhJccgl(lists);
4708   - remMileage = culateMieageService.culateLbgl(lists);
4709   - ksgl = culateMieageService.culateKsgl(lists);
4710   - yygl = culateMieageService.culateSjgl(lists);
4711   - jhbc = culateMieageService.culateJhbc(lists, "");
4712   - addMileage = culateMieageService.culateLjgl(lists);
4713   - cjbc = culateMieageService.culateLbbc(lists);
4714   - sjbc = culateMieageService.culateSjbc(lists, "");
4715   - ljbc = culateMieageService.culateLjbc(lists, "");
4716   - double zyygl = Arith.add(yygl, addMileage);
4717   - double zksgl = Arith.add(ksgl, jcclc);
4718   - map.put("jhlc", Arith.add(jhlc, jhjcclc));
4719   - map.put("yygljh", jhlc);
4720   - map.put("ssgl", remMileage);
4721   - map.put("ksgl", ksgl);
4722   - map.put("yyglsj", Arith.add(yygl, addMileage));
4723   - map.put("jcclc", jcclc);
4724   - map.put("jhbc", jhbc);
4725   - map.put("ljgl", addMileage);
4726   - map.put("ssbc", cjbc);
4727   - map.put("ysgl", Arith.add(yygl, addMileage));
4728   - map.put("sjbc", sjbc);
4729   - map.put("zgl", Arith.add(zyygl, zksgl));
4730   - map.put("ljbc", ljbc);
4731   -
4732   - return map;
4733   - }
4734   -
4735   - @Override
4736   - public List<ScheduleRealInfo> queryListWaybillQp(String clZbh, String date, String line) {
4737   - // TODO Auto-generated method stub
4738   - DecimalFormat format = new DecimalFormat("0.00");
4739   - List<ScheduleRealInfo> list = null;
4740   - list = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4741   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
4742   - for (int i = 0; i < list.size(); i++) {
4743   - ScheduleRealInfo s = list.get(i);
4744   - if (!(s.getBcType().equals("in") || s.getBcType().equals("out"))) {
4745   - String remarks = "";
4746   - Double sjlc = 0.0;
4747   - if (s.getRemarks() != null) {
4748   - remarks += s.getRemarks();
4749   - }
4750   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
4751   - if (!childTaskPlans.isEmpty()) {
4752   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4753   - while (it.hasNext()) {
4754   - ChildTaskPlan c = it.next();
4755   - if (c.getRemarks() != null && c.getRemarks().length() > 0) {
4756   - if (remarks.indexOf(c.getRemarks()) == -1) {
4757   - remarks += c.getRemarks();
4758   - }
4759   - }
4760   -
4761   - if (!c.isDestroy()) {
4762   - if (c.getMileageType().equals("service")) {
4763   - sjlc += c.getMileage() == null ? 0 : c.getMileage();
4764   - }
4765   - }
4766   -
4767   - }
4768   - } else {
4769   - if (s.getStatus() != -1) {
4770   - sjlc = s.getJhlc();
4771   - }
4772   - }
4773   - s.setSjlc(format.format(sjlc));
4774   - s.setRemarks(remarks);
4775   - newList.add(s);
4776   - }
4777   -
4778   - }
4779   -
4780   - return newList;
4781   - }
4782   -
4783   - @Override
4784   - public Map<String, Object> MapById(Long id) {
4785   - // TODO Auto-generated method stub
4786   - Map<String, Object> dMap=new HashMap<>();
4787   - dMap.put("dGroup_eq", "oilType");
4788   - Iterator<Dictionary> it= dictionaryService.list(dMap).iterator();
4789   - while (it.hasNext()) {
4790   - Dictionary d=it.next();
4791   - dMap.put(d.getdCode(), d.getdName());
4792   - }
4793   - Map<String, Object> map = new HashMap<String, Object>();
4794   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4795   - ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
4796   - String xlbm = s.getXlBm();
4797   - String fcrq = s.getScheduleDateStr();
4798   -
4799   - int type = 2;
4800   - Double ccyl = 0.0;
4801   - Double jcyl = 0.0;
4802   - Double yh = 0.0;
4803   - Double jzl = 0.0;
4804   - Double zlc = 0.0;
4805   - String rylx="";
4806   - List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
4807   - if (listCars.size() > 0) {
4808   - if (listCars.get(0).getSfdc() != null) {
4809   - if (listCars.get(0).getSfdc()) {
4810   - List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
4811   - type = 1;
4812   - for (int i = 0; i < listDlb.size(); i++) {
4813   - Dlb d = listDlb.get(i);
4814   - if (d.getLp() == null) {
4815   - ccyl = Arith.add(ccyl, d.getCzcd());
4816   - jcyl = Arith.add(jcyl, d.getJzcd());
4817   - yh = Arith.add(yh, d.getHd());
4818   - jzl = Arith.add(jzl, d.getCdl());
4819   - zlc = Arith.add(zlc, d.getZlc());
4820   - } else {
4821   - if (d.getLp().equals(s.getLpName())) {
4822   - ccyl = Arith.add(ccyl, d.getCzcd());
4823   - jcyl = Arith.add(jcyl, d.getJzcd());
4824   - yh = Arith.add(yh, d.getHd());
4825   - jzl = Arith.add(jzl, d.getCdl());
4826   - zlc = Arith.add(zlc, d.getZlc());
4827   - }
4828   - }
4829   -
4830   - }
4831   - } else {
4832   - List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
4833   - type = 0;
4834   - for (int i = 0; i < listYlb.size(); i++) {
4835   - Ylb y = listYlb.get(i);
4836   - if (y.getLp() == null) {
4837   - ccyl = Arith.add(ccyl, y.getCzyl());
4838   - jcyl = Arith.add(jcyl, y.getJzyl());
4839   - yh = Arith.add(yh, y.getYh());
4840   - jzl = Arith.add(jzl, y.getJzl());
4841   - zlc = Arith.add(zlc, y.getZlc());
4842   - if(dMap.get(y.getRylx())!=null)
4843   - rylx =dMap.get(y.getRylx()).toString();
4844   - } else {
4845   - if (y.getLp().equals(s.getLpName())) {
4846   - ccyl = Arith.add(ccyl, y.getCzyl());
4847   - jcyl = Arith.add(jcyl, y.getJzyl());
4848   - yh = Arith.add(yh, y.getYh());
4849   - jzl = Arith.add(jzl, y.getJzl());
4850   - zlc = Arith.add(zlc, y.getZlc());
4851   - if(dMap.get(y.getRylx())!=null)
4852   - rylx =dMap.get(y.getRylx()).toString();
4853   - }
4854   - }
4855   - }
4856   - }
4857   - }
4858   - }
4859   -
4860   - map.put("rylx", "加注类别:"+rylx);
4861   - map.put("jzl", jzl);
4862   - map.put("yh", yh);
4863   - map.put("ccyl", ccyl);
4864   - map.put("jcyl", jcyl);
4865   - map.put("type", type);
4866   - map.put("zlc", zlc);
4867   - map.put("xlName", s.getXlName());
4868   - map.put("clZbh", s.getClZbh());
4869   - map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
4870   - map.put("fcsjActual", s.getFcsjActual());
4871   - map.put("zdzName", s.getZdzName());
4872   - map.put("scheduleDate", s.getScheduleDateStr());
4873   - map.put("lpName", s.getLpName());
4874   - String zdp = "", zwdp = "", wdp = "";
4875   - String zdpT = "", zwdpT = "", wdpT = "";
4876   - String dbdp = "";
4877   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
4878   - try {
4879   - Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
4880   - Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
4881   - Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
4882   - for (int i = 0; i < list.size(); i++) {
4883   - DutyEmployee t = list.get(i);
4884   - if (dbdp.indexOf(t.getuName()) == -1) {
4885   - if (!(dbdp.length() > 0)) {
4886   - dbdp = t.getuName();
4887   - } else {
4888   - dbdp += "," + t.getuName();
4889   - }
4890   - }
4891   - Long ts = t.getTs();
4892   - if (ts > fcsj1 && ts < fcsj2) {
4893   - if (zdp.indexOf(t.getuName()) == -1) {
4894   - if (!(zdp.length() > 0)) {
4895   - zdpT = t.getuName() + "...";
4896   - }
4897   - zdp += t.getuName() + ",";
4898   -
4899   - }
4900   - } else if (ts > fcsj2 && ts < fcsj3) {
4901   - if (zwdp.indexOf(t.getuName()) == -1) {
4902   - if (!(zwdp.length() > 0)) {
4903   - zwdpT = t.getuName() + "...";
4904   - }
4905   - zwdp += t.getuName() + ",";
4906   - }
4907   - } else {
4908   - if (wdp.indexOf(t.getuName()) == -1) {
4909   - if (!(wdp.length() > 0)) {
4910   - wdpT = t.getuName() + "...";
4911   - }
4912   - wdp += t.getuName() + ",";
4913   - }
4914   - }
4915   - }
4916   - } catch (ParseException e) {
4917   - // TODO Auto-generated catch block
4918   - e.printStackTrace();
4919   - }
4920   - map.put("zdp", zdp);
4921   - map.put("zwdp", zwdp);
4922   - map.put("wdp", wdp);
4923   - map.put("zdpT", zdpT);
4924   - map.put("zwdpT", zwdpT);
4925   - map.put("wdpT", wdpT);
4926   - map.put("dbdp", dbdp);
4927   - return map;
4928   - }
4929   -
4930   - @Override
4931   - public Map<String, Object> MapByIdQp(Long id) {
4932   - // TODO Auto-generated method stub
4933   - Map<String, Object> map = new HashMap<String, Object>();
4934   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4935   - ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
4936   - String xlbm = s.getXlBm();
4937   - String fcrq = s.getScheduleDateStr();
4938   -
4939   - int type = 0;
4940   - Double ccyl = 0.0;
4941   - Double jcyl = 0.0;
4942   - Double yh = 0.0;
4943   - Double jzl = 0.0;
4944   - Double zlc = 0.0;
4945   -// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
4946   -// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
4947   -// if(listYlb.size()>0){
4948   -// type=0;
4949   -// for (int i = 0; i < listYlb.size(); i++) {
4950   -// Ylb y = listYlb.get(i);
4951   -// if(y.getLp()==null){
4952   -// ccyl=Arith.add(ccyl, y.getCzyl());
4953   -// jcyl=Arith.add(jcyl, y.getJzyl());
4954   -// yh =Arith.add(yh ,y.getYh());
4955   -// jzl =Arith.add(jzl, y.getJzl());
4956   -// zlc =Arith.add(zlc, y.getZlc());
4957   -// }else{
4958   -// if(y.getLp().equals(s.getLpName())){
4959   -// ccyl=Arith.add(ccyl, y.getCzyl());
4960   -// jcyl=Arith.add(jcyl, y.getJzyl());
4961   -// yh =Arith.add(yh ,y.getYh());
4962   -// jzl =Arith.add(jzl, y.getJzl());
4963   -// zlc =Arith.add(zlc, y.getZlc());
4964   -// }
4965   -// }
4966   -//
4967   -// }
4968   -// }else{
4969   -// type=1;
4970   -// for (int i = 0; i < listDlb.size(); i++) {
4971   -// Dlb d=listDlb.get(i);
4972   -// if(d.getLp()==null){
4973   -// ccyl=Arith.add(ccyl, d.getCzcd());
4974   -// jcyl=Arith.add(jcyl, d.getJzcd());
4975   -// yh =Arith.add(yh ,d.getHd());
4976   -// jzl =Arith.add(jzl, d.getCdl());
4977   -// zlc =Arith.add(zlc, d.getZlc());
4978   -// }else{
4979   -// if(d.getLp().equals(s.getLpName())){
4980   -// ccyl=Arith.add(ccyl, d.getCzcd());
4981   -// jcyl=Arith.add(jcyl, d.getJzcd());
4982   -// yh =Arith.add(yh ,d.getHd());
4983   -// jzl =Arith.add(jzl, d.getCdl());
4984   -// zlc =Arith.add(zlc, d.getZlc());
4985   -// }
4986   -// }
4987   -//
4988   -// }
4989   -// }
4990   -
4991   - List<Ylxxb> listylxxb = ylxxbRepository.queryListYlxxb(s.getClZbh(), fcrq);
4992   - for (int i = 0; i < listylxxb.size(); i++) {
4993   - Ylxxb t = listylxxb.get(i);
4994   - jzl = Arith.add(jzl, t.getJzl());
4995   - }
4996   - map.put("jzl", jzl);
4997   - map.put("yh", yh);
4998   - map.put("ccyl", ccyl);
4999   - map.put("jcyl", jcyl);
5000   - map.put("type", type);
5001   - map.put("zlc", zlc);
5002   - map.put("xlName", s.getXlName());
5003   - map.put("clZbh", s.getClZbh());
5004   - map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
5005   - map.put("fcsjActual", s.getFcsjActual());
5006   - map.put("zdzName", s.getZdzName());
5007   - map.put("scheduleDate", s.getScheduleDateStr());
5008   - map.put("lpName", s.getLpName());
5009   - String zdp = "", zwdp = "", wdp = "";
5010   - String zdpT = "", zwdpT = "", wdpT = "";
5011   - String dbdp = "";
5012   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
5013   - try {
5014   - Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
5015   - Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
5016   - Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
5017   - for (int i = 0; i < list.size(); i++) {
5018   - DutyEmployee t = list.get(i);
5019   - if (dbdp.indexOf(t.getuName()) == -1) {
5020   - if (!(dbdp.length() > 0)) {
5021   - dbdp = t.getuName();
5022   - } else {
5023   - dbdp += "," + t.getuName();
5024   - }
5025   - }
5026   - Long ts = t.getTs();
5027   - if (ts > fcsj1 && ts < fcsj2) {
5028   - if (zdp.indexOf(t.getuName()) == -1) {
5029   - if (!(zdp.length() > 0)) {
5030   - zdpT = t.getuName() + "...";
5031   - }
5032   - zdp += t.getuName() + ",";
5033   -
5034   - }
5035   - } else if (ts > fcsj2 && ts < fcsj3) {
5036   - if (zwdp.indexOf(t.getuName()) == -1) {
5037   - if (!(zwdp.length() > 0)) {
5038   - zwdpT = t.getuName() + "...";
5039   - }
5040   - zwdp += t.getuName() + ",";
5041   - }
5042   - } else {
5043   - if (wdp.indexOf(t.getuName()) == -1) {
5044   - if (!(wdp.length() > 0)) {
5045   - wdpT = t.getuName() + "...";
5046   - }
5047   - wdp += t.getuName() + ",";
5048   - }
5049   - }
5050   - }
5051   - } catch (ParseException e) {
5052   - // TODO Auto-generated catch block
5053   - e.printStackTrace();
5054   - }
5055   - map.put("zdp", zdp);
5056   - map.put("zwdp", zwdp);
5057   - map.put("wdp", wdp);
5058   - map.put("zdpT", zdpT);
5059   - map.put("zwdpT", zwdpT);
5060   - map.put("wdpT", wdpT);
5061   - map.put("dbdp", dbdp);
5062   - return map;
5063   - }
5064   -
5065   - @Override
5066   - public List<Map<String, Object>> scheduleDailyQp(String line, String date) {
5067   - // TODO Auto-generated method stub
5068   - List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
5069   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleDailyQp(line, date);
5070   - Map<String, Object> map = null;
5071   - String lp = "lp";
5072   - String jgh = "jgh";
5073   - String clzbh = "clzbh";
5074   - int bcs = 0;
5075   - String thclzbh = "";
5076   - String sgh = "sgh";
5077   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5078   - ScheduleRealInfo scheduleRealInfo = scheduleRealInfos.get(i);
5079   - if (scheduleRealInfo.getLpName().equals(lp)) {
5080   - bcs++;
5081   - String fcsj = scheduleRealInfo.getFcsj();
5082   -
5083   - if (!clzbh.equals(scheduleRealInfo.getClZbh())) {
5084   - clzbh = scheduleRealInfo.getClZbh();
5085   - if (thclzbh == "") {
5086   - thclzbh += scheduleRealInfo.getClZbh() + ",";
5087   - } else {
5088   - thclzbh += scheduleRealInfo.getClZbh();
5089   - }
5090   - map.put("thclzbh", thclzbh);
5091   - }
5092   -
5093   - if (!jgh.equals(scheduleRealInfo.getjGh())) {
5094   - jgh = scheduleRealInfo.getjGh();
5095   - if (map.get("jjb2") != null) {
5096   - map.put("jjb3", scheduleRealInfo.getjGh() + "/" +
5097   - scheduleRealInfo.getFcsjActual());
5098   -
5099   - } else {
5100   - map.put("jjb2", scheduleRealInfo.getjGh() + "/" +
5101   - scheduleRealInfo.getFcsjActual());
5102   - }
5103   -
5104   - }
5105   -
5106   - if (scheduleRealInfo.getsGh() != null) {
5107   - if (!scheduleRealInfo.getsGh().equals(sgh)) {
5108   - sgh = scheduleRealInfo.getsGh() == null ? "" : scheduleRealInfo.getsGh();
5109   - if (!sgh.equals("")) {
5110   - if (map.get("sjb1") != null) {
5111   - if (map.get("sjb2") != null) {
5112   - map.put("sjb3", scheduleRealInfo.getsGh() + "/" +
5113   - scheduleRealInfo.getFcsjActual());
5114   - } else {
5115   - map.put("sjb2", scheduleRealInfo.getsGh() + "/" +
5116   - scheduleRealInfo.getFcsjActual());
5117   - }
5118   - } else {
5119   - map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
5120   - scheduleRealInfo.getFcsjActual());
5121   - }
5122   - }
5123   - }
5124   - }
5125   - if (scheduleRealInfo.getFcsjActual() != null) {
5126   - String fcsjs[] = fcsj.split(":");
5127   - String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
5128   - int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
5129   - int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
5130   - map.put("cz" + bcs, b - a);
5131   - } else {
5132   - map.put("cz" + bcs, "无");
5133   - }
5134   - map.put("lp", scheduleRealInfo.getLpName());
5135   - map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
5136   - map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
5137   -
5138   - if (i < scheduleRealInfos.size() - 1) {
5139   - if (!scheduleRealInfos.get(i + 1).getLpName().equals
5140   - (scheduleRealInfos.get(i).getLpName())) {
5141   - list.add(map);
5142   - lp = "lp";
5143   - jgh = "jgh";
5144   - clzbh = "clzbh";
5145   - bcs = 0;
5146   - thclzbh = "";
5147   - sgh = "sgh";
5148   - }
5149   - } else {
5150   - list.add(map);
5151   - }
5152   - } else {
5153   - bcs = 1;
5154   - map = new HashMap<String, Object>();
5155   - lp = scheduleRealInfo.getLpName();
5156   - jgh = scheduleRealInfo.getjGh();
5157   - clzbh = scheduleRealInfo.getClZbh();
5158   - if (scheduleRealInfo.getsGh() != null) {
5159   - sgh = scheduleRealInfo.getsGh();
5160   - map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
5161   - scheduleRealInfo.getFcsjActual());
5162   - }
5163   - String fcsj = scheduleRealInfo.getFcsj();
5164   - scheduleRealInfo.getFcsjActual();
5165   - map.put("jjb1", jgh + "/" + scheduleRealInfo.getFcsjActual());
5166   - map.put("cccl", clzbh);
5167   -
5168   - if (scheduleRealInfo.getFcsjActual() != null) {
5169   - String fcsjs[] = fcsj.split(":");
5170   - String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
5171   - int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
5172   - int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
5173   - map.put("cz" + bcs, b - a);
5174   - } else {
5175   - map.put("cz" + bcs, "无");
5176   - }
5177   -
5178   -
5179   - map.put("lp", scheduleRealInfo.getLpName());
5180   - map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
5181   - map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
5182   -
5183   - if (i < scheduleRealInfos.size() - 1) {
5184   - if (!scheduleRealInfos.get(i + 1).getLpName().equals
5185   - (scheduleRealInfos.get(i).getLpName())) {
5186   - list.add(map);
5187   - lp = "lp";
5188   - jgh = "jgh";
5189   - clzbh = "clzbh";
5190   - bcs = 0;
5191   - thclzbh = "";
5192   - sgh = "sgh";
5193   - }
5194   - } else {
5195   - list.add(map);
5196   - }
5197   - }
5198   -
5199   - }
5200   - return list;
5201   - }
5202   -
5203   -
5204   - @Override
5205   - public List<Map<String, Object>> scheduleDailyExport(Map<String, Object> map) {
5206   - String line = map.get("line").toString();
5207   - String date = map.get("date").toString();
5208   - String xlName = map.get("xlName").toString();
5209   - String state = map.get("state").toString();
5210   - String type = map.get("type").toString();
5211   - String genre =map.get("genre").toString();
5212   - String df="";
5213   - if(map.get("df")!=null){
5214   - df=map.get("df").toString();
5215   - }
5216   -
5217   - List<Map<String, Object>> dataList2 = new ArrayList<Map<String, Object>>();
5218   - List<Map<String, Object>> dataList3 = new ArrayList<Map<String, Object>>();
5219   - List<Map<String, Object>> list1 = this.statisticsDaily(line, date, xlName, null);
5220   - List<ScheduleRealInfo> list2 = this.queryUserInfo(line, date, state);
5221   - List<ScheduleRealInfo> list3 = new ArrayList<ScheduleRealInfo>();
5222   - if(genre.equals("qp"))
5223   - list3=this.realScheduleListQp(line, date);
5224   - else if(genre.equals("zrw"))
5225   - list3=this.realScheduleList_zrw(line, date);
5226   - else
5227   - list3=this.realScheduleList(line, date);
5228   - Map<String, Object> nMap = new HashMap<String, Object>();
5229   - nMap.put("date", xlName + date);
5230   - nMap.put("jls", list1.get(0).get("jls"));
5231   - nMap.put("sjgl", list1.get(0).get("sjgl"));
5232   - for (Map<String, Object> m : list1) {
5233   -// m.put("ssgl", m.get("ssgl"));
5234   -// m.put("ssbc", m.get("ssbc"));
5235   -// m.put("ssgl_lz", m.get("ssgl_lz") + " / " + m.get("ssbc_lz"));
5236   -// m.put("ssgl_dm", m.get("ssgl_dm") + " / " + m.get("ssbc_dm"));
5237   -// m.put("ssgl_gz", m.get("ssgl_gz") + " / " + m.get("ssbc_gz"));
5238   -// m.put("ssgl_jf", m.get("ssgl_jf") + " / " + m.get("ssbc_jf"));
5239   -// m.put("ssgl_zs", m.get("ssgl_zs") + " / " + m.get("ssbc_zs"));
5240   -// m.put("ssgl_qr", m.get("ssgl_qr") + " / " + m.get("ssbc_qr"));
5241   -// m.put("ssgl_qc", m.get("ssgl_qc") + " / " + m.get("ssbc_qc"));
5242   -// m.put("ssgl_kx", m.get("ssgl_kx") + " / " + m.get("ssbc_kx"));
5243   -// m.put("ssgl_qh", m.get("ssgl_qh") + " / " + m.get("ssbc_qh"));
5244   -// m.put("ssgl_yw", m.get("ssgl_yw") + " / " + m.get("ssbc_yw"));
5245   -// m.put("ssgl_other", m.get("ssgl_other") + " / " + m.get("ssbc_other"));
5246   - }
5247   -
5248   - int size = 0;
5249   - Map<String, Object> tempMap = new HashMap<String, Object>();
5250   - for (int i = 0; i < list2.size(); i++) {
5251   - Object obj = (Object) list2.get(i);
5252   - Object[] objs = (Object[]) obj;
5253   - if (size == 5) {
5254   - size = 0;
5255   - dataList2.add(tempMap);
5256   - tempMap = new HashMap<String, Object>();
5257   - }
5258   - tempMap.put("lp" + size, objs[3]);
5259   - tempMap.put("ch" + size, objs[2]);
5260   - tempMap.put("jz" + size, objs[1] + "/" + objs[4]);
5261   - tempMap.put("sz" + size, "");
5262   - tempMap.put("jw" + size, "");
5263   - tempMap.put("sw" + size, "");
5264   -
5265   - size++;
5266   - }
5267   - if (size < 5) {
5268   - for (; size < 5; size++) {
5269   - tempMap.put("lp" + size, "");
5270   - tempMap.put("ch" + size, "");
5271   - tempMap.put("jz" + size, "");
5272   - tempMap.put("sz" + size, "");
5273   - tempMap.put("jw" + size, "");
5274   - tempMap.put("sw" + size, "");
5275   - }
5276   - }
5277   -
5278   - dataList2.add(tempMap);
5279   -/*
5280   - size = 0;
5281   - tempMap = new HashMap<String, Object>();
5282   - for (ScheduleRealInfo schedule : list3) {
5283   - if (size == 3) {
5284   - size = 0;
5285   - dataList3.add(tempMap);
5286   - tempMap = new HashMap<String, Object>();
5287   - }
5288   - tempMap.put("lpName" + size, schedule.getLpName());
5289   - tempMap.put("qdzName" + size, schedule.getQdzName());
5290   - tempMap.put("zdsj" + size, schedule.getZdsj());
5291   - tempMap.put("zdsjActual" + size, schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "");
5292   - tempMap.put("zdsjk" + size, "");
5293   - tempMap.put("zdsjm" + size, "");
5294   - tempMap.put("fcsj" + size, schedule.getFcsj());
5295   - String fcsjActural=schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
5296   - String bcType=schedule.getBcType()!=null?schedule.getBcType():"";
5297   - if(bcType.equals("in")){
5298   - fcsjActural=fcsjActural+"(进)";
5299   - }
5300   - if(bcType.equals("out")){
5301   - fcsjActural=fcsjActural+"(出)";
5302   - }
5303   - tempMap.put("fcsjActual" + size, fcsjActural);
5304   - tempMap.put("fcsjk" + size, "");
5305   - tempMap.put("fcsjm" + size, "");
5306   - tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : "");
5307   -
5308   - size++;
5309   - }
5310   - if (size < 3) {
5311   - for (; size < 3; size++) {
5312   - tempMap.put("lpName" + size, "");
5313   - tempMap.put("qdzName" + size, "");
5314   - tempMap.put("zdsj" + size, "");
5315   - tempMap.put("zdsjActual" + size, "");
5316   - tempMap.put("zdsjk" + size, "");
5317   - tempMap.put("zdsjm" + size, "");
5318   - tempMap.put("fcsj" + size, "");
5319   - tempMap.put("fcsjActual" + size, "");
5320   - tempMap.put("fcsjk" + size, "");
5321   - tempMap.put("fcsjm" + size, "");
5322   - tempMap.put("remarks" + size, "");
5323   - }
5324   - }
5325   -*/
5326   -
5327   - size = 0;
5328   - tempMap = new HashMap<String, Object>();
5329   - for (ScheduleRealInfo schedule : list3) {
5330   - int x = size % 3;
5331   - if (x == 0 && size > 0) {
5332   - dataList3.add(tempMap);
5333   - tempMap = new HashMap<String, Object>();
5334   - }
5335   - tempMap.put("lpName" + x, schedule.getLpName());
5336   - tempMap.put("qdzName" + x, schedule.getQdzName());
5337   - tempMap.put("zdsj" + x, schedule.getZdsj());
5338   - String zdsjActual = schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "";
5339   - tempMap.put("zdsjActual" + x, zdsjActual);
5340   -
5341   - String zdsjk = "";
5342   - String zdsjm = "";
5343   - if (!zdsjActual.equals("")) {
5344   - String[] zdsj_s = schedule.getZdsj().split(":");
5345   - String[] zdsjActual_s = zdsjActual.split(":");
5346   - Long zdsj_ = Long.parseLong(zdsj_s[0]) * 60 + Long.parseLong(zdsj_s[1]);
5347   - Long zdsjActual_ = Long.parseLong(zdsjActual_s[0]) * 60 + Long.parseLong(zdsjActual_s[1]);
5348   - if ((zdsj_ - zdsjActual_) > 0) {
5349   - if(zdsj_ - zdsjActual_>1200){
5350   - zdsjm=String.valueOf(1440-(zdsj_-zdsjActual_));
5351   - }else{
5352   - zdsjk = String.valueOf(zdsj_ - zdsjActual_);
5353   - }
5354   - } else {
5355   - if(zdsjActual_ - zdsj_>1200){
5356   - zdsjk =String.valueOf(1440-(zdsjActual_ - zdsj_));
5357   - }else{
5358   - zdsjm = String.valueOf(zdsjActual_ - zdsj_);
5359   - }
5360   - }
5361   - }
5362   - tempMap.put("zdsjk" + x, zdsjk);
5363   - tempMap.put("zdsjm" + x, zdsjm.equals("0")?"":zdsjm);
5364   - tempMap.put("fcsj" + x, schedule.getFcsj());
5365   - String fcsjActural = schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
5366   - String bcType = schedule.getBcType() != null ? schedule.getBcType() : "";
5367   - String fcsjActuralstr = "";
5368   - if (bcType.equals("in")) {
5369   - fcsjActuralstr = fcsjActural + "(进)";
5370   - } else if (bcType.equals("out")) {
5371   - fcsjActuralstr = fcsjActural + "(出)";
5372   - } else {
5373   - fcsjActuralstr = fcsjActural;
5374   - }
5375   - tempMap.put("fcsjActual" + x, fcsjActuralstr);
5376   - String fcsjk = "";
5377   - String fcsjm = "";
5378   - String dfsjk ="";
5379   - String dfsjm="";
5380   - if (!fcsjActural.equals("")) {
5381   - String[] fcsj_s = schedule.getFcsj().split(":");
5382   - String[] fcsjActural_s = fcsjActural.split(":");
5383   - Long fcsj_ = Long.parseLong(fcsj_s[0]) * 60 + Long.parseLong(fcsj_s[1]);
5384   - Long fcsjActural_ = Long.parseLong(fcsjActural_s[0]) * 60 + Long.parseLong(fcsjActural_s[1]);
5385   - if ((fcsj_ - fcsjActural_) > 0) {
5386   - if(fcsj_ - fcsjActural_>1200){
5387   - fcsjm=String.valueOf(1440-(fcsj_ - fcsjActural_));
5388   - }else{
5389   - fcsjk = String.valueOf(fcsj_ - fcsjActural_);
5390   - }
5391   - } else {
5392   - if(fcsjActural_ - fcsj_>1200){
5393   - fcsjk =String.valueOf(1440-(fcsjActural_ - fcsj_));
5394   - }
5395   - else{
5396   - fcsjm = String.valueOf(fcsjActural_ - fcsj_);
5397   - }
5398   - }
5399   - if(df.equals("df")){
5400   - String[] dfsj_s =schedule.getDfsj().split(":");
5401   - Long dfsj_ = Long.parseLong(dfsj_s[0]) * 60 + Long.parseLong(dfsj_s[1]);
5402   - if ((dfsj_ - fcsjActural_) > 0) {
5403   - if(dfsj_ - fcsjActural_>1200){
5404   - dfsjm=String.valueOf(1440-(dfsj_ - fcsjActural_));
5405   - }else{
5406   - dfsjk = String.valueOf(dfsj_ - fcsjActural_);
5407   - }
5408   - } else {
5409   - if(fcsjActural_ - dfsj_>1200){
5410   - dfsjk= String.valueOf(1440-(fcsjActural_ - dfsj_));
5411   - }else{
5412   - dfsjm = String.valueOf(fcsjActural_ - dfsj_);
5413   - }
5414   - }
5415   - }
5416   - }
5417   - if(df.equals("df")){
5418   - tempMap.put("dfsj"+x,schedule.getDfsj());
5419   - tempMap.put("dfsjk" + x, dfsjk);
5420   - tempMap.put("dfsjm" + x, dfsjm.equals("0")?"":dfsjm);
5421   - }
5422   - tempMap.put("fcsjk" + x, fcsjk);
5423   - tempMap.put("fcsjm" + x, fcsjm.equals("0")?"":fcsjm);
5424   - tempMap.put("remarks" + x, schedule.getRemark() != null ? schedule.getRemark() : "");
5425   -
5426   - size++;
5427   - }
5428   - if (tempMap.get("lpName0") != null) {
5429   - if (tempMap.get("lpName1") == null) {
5430   - tempMap.put("lpName1", "");
5431   - tempMap.put("qdzName1", "");
5432   - tempMap.put("zdsj1", "");
5433   - tempMap.put("zdsjActual1", "");
5434   - tempMap.put("zdsjk1", "");
5435   - tempMap.put("zdsjm1", "");
5436   - tempMap.put("fcsj1", "");
5437   - tempMap.put("fcsjActual1", "");
5438   - tempMap.put("fcsjk1", "");
5439   - tempMap.put("fcsjm1", "");
5440   - if(df.equals("df")){
5441   - tempMap.put("dfsj1","");
5442   - tempMap.put("dfsjk1" , "");
5443   - tempMap.put("dfsjm1" , "");
5444   - }
5445   - tempMap.put("remarks1", "");
5446   - }
5447   - if (tempMap.get("lpName2") == null) {
5448   - tempMap.put("lpName2", "");
5449   - tempMap.put("qdzName2", "");
5450   - tempMap.put("zdsj2", "");
5451   - tempMap.put("zdsjActual2", "");
5452   - tempMap.put("zdsjk2", "");
5453   - tempMap.put("zdsjm2", "");
5454   - tempMap.put("fcsj2", "");
5455   - tempMap.put("fcsjActual2", "");
5456   - tempMap.put("fcsjk2", "");
5457   - tempMap.put("fcsjm2", "");
5458   - if(df.equals("df")){
5459   - tempMap.put("dfsj2","");
5460   - tempMap.put("dfsjk2" , "");
5461   - tempMap.put("dfsjm2" , "");
5462   - }
5463   - tempMap.put("remarks2", "");
5464   - }
5465   - dataList3.add(tempMap);
5466   - }
5467   -
5468   - if (date.length() == 10) {
5469   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
5470   - String dbdp = "";
5471   - try {
5472   - for (int i = 0; i < list.size(); i++) {
5473   - DutyEmployee t = list.get(i);
5474   - if (dbdp.indexOf(t.getuName()) == -1) {
5475   - if (!(dbdp.length() > 0)) {
5476   - dbdp = t.getuName();
5477   - } else {
5478   - dbdp += "," + t.getuName();
5479   - }
5480   - }
5481   - }
5482   - } catch (Exception e) {
5483   - // TODO: handle exception
5484   - e.printStackTrace();
5485   - }
5486   - nMap.put("dbdp", dbdp);
5487   - }
5488   -
5489   - if (type.equals("export")) {
5490   - String lineName = "";
5491   - if (map.containsKey("lineName"))
5492   - lineName = "-" + map.get("lineName").toString() + "-";
5493   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
5494   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
5495   - Map<String, Object> m = new HashMap<String, Object>();
5496   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
5497   - ReportUtils ee = new ReportUtils();
5498   - try {
5499   - listI.add(list1.iterator());
5500   - listI.add(dataList2.iterator());
5501   - listI.add(dataList3.iterator());
5502   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
5503   - String sourcePath = path + "mould/scheduleDaily.xls";
5504   - if (date.length() == 7) {
5505   - sdfMonth = new SimpleDateFormat("yyyy-MM");
5506   - sdfSimple = new SimpleDateFormat("yyyyMM");
5507   - sourcePath = path + "mould/scheduleDaily_m.xls";
5508   - }
5509   - if(df.equals("df")){
5510   - sourcePath =path + "mould/scheduleDaily_df.xls";
5511   - }
5512   - ee.excelReplace(listI, new Object[]{nMap}, sourcePath,
5513   - path + "export/" + sdfSimple.format(sdfMonth.parse(date)) + lineName + "调度日报.xls");
5514   - } catch (Exception e) {
5515   - // TODO: handle exception
5516   - e.printStackTrace();
5517   - }
5518   - }
5519   -
5520   - return new ArrayList<Map<String, Object>>();
5521   - }
5522   -
5523   - public void exportWaybill_pl(List<ScheduleRealInfo> listpl,
5524   - String date, String jName, String clZbh, String lpName) {
5525   - ReportUtils ee = new ReportUtils();
5526   - ReportRelatedUtils rru = new ReportRelatedUtils();
5527   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
5528   - List<ScheduleRealInfo> scheduleRealInfos = listpl;
5529   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
5530   -// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
5531   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
5532   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5533   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5534   - Set<ChildTaskPlan> cts = s.getcTasks();
5535   - if (cts != null && cts.size() > 0) {
5536   - lists.add(s);
5537   - } else {
5538   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
5539   - lists.add(s);
5540   - }
5541   - }
5542   - }
5543   - DecimalFormat format = new DecimalFormat("0.00");
5544   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
5545   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
5546   - //计算里程和班次数,并放入Map里
5547   - Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
5548   -
5549   - map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
5550   - map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
5551   - map.put("addMileage", culateMieageService.culateLjgl(lists));
5552   - double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
5553   - map.put("yygl", yygl);
5554   - double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
5555   - map.put("ksgl", ksgl);
5556   - map.put("realMileage", Arith.add(yygl, ksgl));
5557   - map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
5558   - map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
5559   - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
5560   - int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
5561   - map.put("sjbc", sjbc);
5562   -// map=new HashMap<String,Object>();
5563   -
5564   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
5565   - String minfcsj = "02:00";
5566   - List<Line> lineList = lineRepository.findLineByCode(listpl.get(0).getXlBm());
5567   - if (lineList.size() > 0) {
5568   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
5569   - + " id = ("
5570   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
5571   - + ")";
5572   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
5573   - }
5574   - String[] minSjs = minfcsj.split(":");
5575   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
5576   -
5577   -
5578   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5579   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5580   - String[] fcsj = s.getFcsj().split(":");
5581   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
5582   -
5583   - Long fscjT = 0L;
5584   - if (fcsjL < minSj) {
5585   - Calendar calendar = new GregorianCalendar();
5586   - calendar.setTime(s.getScheduleDate());
5587   - calendar.add(calendar.DATE, 1);
5588   - s.setScheduleDate(calendar.getTime());
5589   - try {
5590   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
5591   - } catch (ParseException e) {
5592   - // TODO Auto-generated catch block
5593   - e.printStackTrace();
5594   - }
5595   -
5596   - } else {
5597   - try {
5598   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
5599   - } catch (ParseException e) {
5600   - // TODO Auto-generated catch block
5601   - e.printStackTrace();
5602   - }
5603   - ;
5604   - }
5605   - s.setFcsjT(fscjT);
5606   - }
5607   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
5608   - Collections.sort(scheduleRealInfos, new ComparableReal());
5609   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5610   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5611   - s.setAdjustExps(i + 1 + "");
5612   - String remarks = "";
5613   - if (s.getRemarks() != null) {
5614   - remarks += s.getRemarks();
5615   - }
5616   -
5617   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
5618   - if (!childTaskPlans.isEmpty()) {
5619   - s.setFcsjActual("");
5620   - s.setZdsjActual("");
5621   - s.setJhlc(0.0);
5622   - }
5623   -
5624   - if (s.isDestroy()) {
5625   - s.setFcsjActual("");
5626   - s.setZdsjActual("");
5627   - s.setJhlc(0.0);
5628   - remarks += "(烂班)";
5629   - s.setRemarks(remarks);
5630   - }
5631   -
5632   - listSchedule.add(s);
5633   - //计算营运里程,空驶里程
5634   - if (!childTaskPlans.isEmpty()) {
5635   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
5636   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
5637   - Collections.sort(listit, new ComparableChild());
5638   - for (int j = 0; j < listit.size(); j++) {
5639   - ScheduleRealInfo t = new ScheduleRealInfo();
5640   - ChildTaskPlan childTaskPlan = listit.get(j);
5641   - if (childTaskPlan.isDestroy()) {
5642   - t.setFcsjActual("");
5643   - t.setZdsjActual("");
5644   - t.setJhlc(0.0);
5645   - } else {
5646   - t.setFcsjActual(childTaskPlan.getStartDate());
5647   - t.setZdsjActual(childTaskPlan.getEndDate());
5648   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
5649   - }
5650   - t.setQdzName(childTaskPlan.getStartStationName());
5651   - t.setZdzName(childTaskPlan.getEndStationName());
5652   - t.setRemarks(childTaskPlan.getRemarks());
5653   - t.setAdjustExps("子");
5654   - t.setjGh("");
5655   - t.setjName("");
5656   - t.setsGh("");
5657   - t.setsName("");
5658   - listSchedule.add(t);
5659   - }
5660   - }
5661   - }
5662   - Map<String, Object> maps;
5663   - for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
5664   - maps = new HashMap<String, Object>();
5665   - try {
5666   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
5667   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
5668   - maps = rru.getMapValue(scheduleRealInfo);
5669   - maps.put("bcs", scheduleRealInfo.getAdjustExps());
5670   - String zdsj = scheduleRealInfo.getZdsj();
5671   - String zdsjActual = scheduleRealInfo.getZdsjActual();
5672   - if (zdsj != null && zdsjActual != null &&
5673   - !zdsj.equals(zdsjActual) &&
5674   - !zdsj.equals("") &&
5675   - !zdsjActual.equals("")) {
5676   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
5677   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
5678   - if (zdsj.compareTo(zdsjActual) > 0) {
5679   - if (zdsjT - zdsjAT > 1000) {
5680   - maps.put("fast", "");
5681   - maps.put("slow", zdsjAT - zdsjT + 1440);
5682   - } else {
5683   - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
5684   - maps.put("slow", "");
5685   - }
5686   - } else {
5687   - if (zdsjAT - zdsjT > 1000) {
5688   - maps.put("fast", zdsjT - zdsjAT + 1440);
5689   - maps.put("slow", "");
5690   - } else {
5691   - maps.put("fast", "");
5692   - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
5693   - }
5694   - }
5695   - } else {
5696   - maps.put("fast", "");
5697   - maps.put("slow", "");
5698   - }
5699   - listMap.add(maps);
5700   - } catch (Exception e) {
5701   - e.printStackTrace();
5702   - }
5703   - }
5704   -
5705   -
5706   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
5707   - list.add(listMap.iterator());
5708   - String xls = "";
5709   - if (map.get("type").toString().equals("0")) {
5710   - xls = "waybill_minhang.xls";
5711   - } else {
5712   - xls = "waybill_minhang_dl.xls";
5713   - }
5714   - map.put("sheetName", jName + "-" + clZbh + "-" + lpName);
5715   - ee.excelReplace(list, new Object[]{map}, path + "mould/" + xls,
5716   - path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
5717   - }
5718   -
5719   - @Override
5720   - public Map<String, Object> exportWaybillMore(Map<String, Object> map) {
5721   - String date = map.get("date").toString();
5722   - String line = map.get("line").toString();
5723   - ReportUtils ee = new ReportUtils();
5724   - List<List> lists = JSON.parseArray(map.get("strs").toString(), List.class);
5725   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
5726   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
5727   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
5728   - int num = 0;
5729   - File file = null;
5730   - try {
5731   - while (true) {
5732   - String fileUrl = path + "行车路单" + sdfSimple.format(sdfMonth.parse(date));
5733   -// file = new File(fileUrl + (num == 0 ? "/" : "(" + num + ")/")); //新建文件夹
5734   - file = new File(fileUrl + (num == 0 ? ".xls" : "(" + num + ").xls")); //新建excel文件
5735   - if (file.exists()) { //判断是否已存在重名
5736   - num++;
5737   - } else {
5738   - break;
5739   - }
5740   - }
5741   -// file.mkdirs(); //创建
5742   - List<ScheduleRealInfo> lists_line = scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
5743   - List<File> files = new ArrayList<File>();
5744   - for (List<String> list : lists) {
5745   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
5746   - String jName = list.get(0);
5747   - String clZbh = list.get(1);
5748   - String lpName = list.get(2);
5749   - String jGh = list.get(3);
5750   - for (int i = 0; i < lists_line.size(); i++) {
5751   - ScheduleRealInfo s = lists_line.get(i);
5752   - if (s.getjGh().equals(jGh) && s.getClZbh().equals(clZbh) && s.getLpName().equals(lpName)) {
5753   - newList.add(s);
5754   - }
5755   - }
5756   - this.exportWaybill_pl(newList, date, jName, clZbh, lpName);
5757   - File temp = new File(path + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
5758   - String fileName = file.getName();
5759   - files.add(temp);
5760   - }
5761   - for (int i = 1; i < files.size(); i++) {
5762   - File file1 = files.get(0);
5763   - File file2 = files.get(i);
5764   - ee.copySheetByFile(file2, file1, 0, 145);
5765   - }
5766   - File newFile = files.get(0);
5767   - newFile.renameTo(file);
5768   -// temp.renameTo(new File(path + fileName + "/" + temp.getName()));
5769   -// File[] listFiles = file.listFiles();
5770   -// ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(path + file.getName() + ".zip")));
5771   -//// zos.setEncoding("gbk");
5772   -//// zos.putNextEntry(new ZipEntry(fileName + "/"));
5773   -// for (int i = 0; i < listFiles.length; i++) {
5774   -// zos.putNextEntry(new ZipEntry(fileName + "/" + listFiles[i].getName()));
5775   -// BufferedInputStream bis = new BufferedInputStream(new FileInputStream(listFiles[i]));
5776   -// BufferedOutputStream bos = new BufferedOutputStream(zos);
5777   -// int bytesRead = 0;
5778   -// for (byte[] buffer = new byte[BUF_SIZE]; ((bytesRead = bis.read(buffer, 0, BUF_SIZE)) != -1); ) {
5779   -//// zos.write(buffer, 0, bytesRead);
5780   -//// zos.flush();
5781   -// bos.write(buffer, 0, bytesRead);
5782   -// bos.flush();
5783   -// }
5784   -//// bos.close();
5785   -// bis.close();
5786   -// }
5787   -// zos.close();
5788   -// }
5789   -
5790   - } catch (Exception e) {
5791   - // TODO: handle exception
5792   - e.printStackTrace();
5793   - }
5794   -
5795   - map.put("fileName", file.getName());
5796   - return map;
5797   - }
5798   -
5799   - @Autowired
5800   - SchedulePlanInfoService schPlanService;
5801   -
5802   - @Override
5803   - public List<SchedulePlanInfo> currentSchedulePlan(String lineCode) {
5804   - List<SchedulePlanInfo> rs = dayOfSchedule.schedulePlanMap.get(lineCode);
5805   -
5806   - if (rs == null || rs.size() == 0) {
5807   - //尝试刷新内存
5808   - Map<String, Object> data = new HashMap<>();
5809   - data.put("scheduleDate_eq", dayOfSchedule.currSchDateMap.get(lineCode));
5810   - data.put("xlBm_eq", lineCode);
5811   - List<SchedulePlanInfo> planItr = dayOfSchedule.cleanSchPlanItr(schPlanService.list(data).iterator());
5812   -
5813   - if (planItr.size() > 0) {
5814   - dayOfSchedule.schedulePlanMap.put(lineCode, planItr);
5815   - return planItr;
5816   - }
5817   - }
5818   - return rs;
5819   - }
5820   -
5821   -
5822   - @Override
5823   - public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx, int type) {
5824   - Map<String, Object> rs = new HashMap<>();
5825   - Set<ScheduleRealInfo> ts = new HashSet<>();
5826   - try {
5827   - List<String> leftList = Splitter.on(",").splitToList(leftIdx);
5828   - List<String> rightList = Splitter.on(",").splitToList(rightIdx);
5829   - Set<String> lpSet = new HashSet<>();
5830   - Set<String> carSet = new HashSet<>();
5831   -
5832   - List<ScheduleRealInfo> largeList, smallList;
5833   - if (leftList.size() > rightList.size()) {
5834   - largeList = getByIdx(leftList);
5835   - smallList = getByIdx(rightList);
5836   - } else {
5837   - largeList = getByIdx(rightList);
5838   - smallList = getByIdx(leftList);
5839   - }
5840   -
5841   - ScheduleRealInfo leftSch, rightSch = null;
5842   - for (int i = 0; i < largeList.size(); i++) {
5843   - leftSch = largeList.get(i);
5844   - leftSch.setLpChange(1);
5845   - if (i < smallList.size()) {
5846   - rightSch = smallList.get(i);
5847   - rightSch.setLpChange(1);
5848   - ts.add(rightSch);
5849   - } else {
5850   - //不对称时多出来的
5851   - lpChangeByLeft(leftSch, largeList.get(i - 1), type);
5852   - ts.add(leftSch);
5853   - lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
5854   - continue;
5855   - }
5856   -
5857   - //调换路牌
5858   - lpChange(leftSch, rightSch, type);
5859   - ts.add(leftSch);
5860   -
5861   - lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
5862   - lpSet.add(rightSch.getXlBm() + "_" + rightSch.getLpName());
5863   -
5864   - carSet.add(leftSch.getClZbh());
5865   - carSet.add(rightSch.getClZbh());
5866   - scheduleRealInfoRepository.updateLpChange(leftSch.getId());
5867   - scheduleRealInfoRepository.updateLpChange(rightSch.getId());
5868   - }
5869   -
5870   - //重新计算路牌的起点应到时间
5871   - for (String lpName : lpSet) {
5872   - ts.addAll(dayOfSchedule.updateQdzTimePlan(lpName));
5873   - }
5874   -
5875   - //重新就算车辆当前执行班次
5876   - for(String nbbm : carSet){
5877   - dayOfSchedule.reCalcExecPlan(nbbm);
5878   - }
5879   -
5880   -
5881   - for (ScheduleRealInfo sch : ts) {
5882   - dayOfSchedule.save(sch);
5883   - }
5884   -
5885   - rs.put("status", ResponseCode.SUCCESS);
5886   - rs.put("ts", ts);
5887   - } catch (Exception e) {
5888   - logger.error("", e);
5889   - rs.put("status", ResponseCode.ERROR);
5890   - rs.put("msg", e.getMessage());
5891   - }
5892   -
5893   - return rs;
5894   - }
5895   -
5896   - private List<ScheduleRealInfo> getByIdx(List<String> idList) {
5897   - List<ScheduleRealInfo> list = new ArrayList<>();
5898   - for (String id : idList) {
5899   - list.add(dayOfSchedule.get(Long.parseLong(id)));
5900   - }
5901   - return list;
5902   - }
5903   -
5904   - @Override
5905   - public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
5906   - //释放班次映射
5907   - if (type > 0) {
5908   - dayOfSchedule.removeNbbm2SchMapp(leftSch);
5909   - dayOfSchedule.removeNbbm2SchMapp(rightSch);
5910   - }
5911   -
5912   - //对调数据
5913   - LpData leftData = new LpData(leftSch);
5914   - LpData rightData = new LpData(rightSch);
5915   -
5916   - leftData.appendTo(rightSch, type);
5917   - rightData.appendTo(leftSch, type);
5918   -
5919   - if (type > 0) {
5920   - //重新映射
5921   - dayOfSchedule.addNbbm2SchMapp(leftSch);
5922   - dayOfSchedule.addNbbm2SchMapp(rightSch);
5923   - }
5924   - }
5925   -
5926   - /**
5927   - * 更换左边班次的路牌,右边不变
5928   - *
5929   - * @param leftSch
5930   - * @param rightSch
5931   - * @param type
5932   - */
5933   - public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
5934   - //释放班次映射
5935   - if (type > 0)
5936   - dayOfSchedule.removeNbbm2SchMapp(leftSch);
5937   -
5938   - LpData rightData = new LpData(rightSch);
5939   - rightData.appendTo(leftSch, type);
5940   -
5941   - //重新映射
5942   - if (type > 0)
5943   - dayOfSchedule.addNbbm2SchMapp(leftSch);
5944   -
5945   - }
5946   -
5947   - @Override
5948   - public Map<String, Object> revokeRealArrive(Long id) {
5949   - Map<String, Object> rs = new HashMap<>();
5950   - List<ScheduleRealInfo> ts = new ArrayList<>();
5951   -
5952   - try {
5953   - ScheduleRealInfo sch = dayOfSchedule.get(id);
5954   - if (sch.getZdsjActual() == null && sch.getFcsjActual() == null) {
5955   - rs.put("status", ResponseCode.ERROR);
5956   - rs.put("msg", "班次未执行,无法撤销!");
5957   - } else {
5958   - //日志记录
5959   - ScheduleModifyLogger.cxzx(sch);
5960   -
5961   - sch.clearFcsjActual();
5962   - sch.clearZdsjActual();
5963   - //清除路牌下一个班的起点到达时间
5964   - ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
5965   - if (null != next) {
5966   - next.setQdzArrDatesj(null);
5967   - ts.add(next);
5968   - }
5969   -
5970   - rs.put("status", ResponseCode.SUCCESS);
5971   -
5972   - ts.add(sch);
5973   - rs.put("ts", ts);
5974   -
5975   - dayOfSchedule.save(sch);
5976   - //重新计算当前执行班次
5977   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
5978   -
5979   - }
5980   - } catch (Exception e) {
5981   - logger.error("", e);
5982   - rs.put("status", ResponseCode.ERROR);
5983   - }
5984   - return rs;
5985   - }
5986   -
5987   - @Override
5988   - public Map<String, Object> lateAdjust(String idx, float minute) {
5989   - Map<String, Object> rs = new HashMap<>();
5990   - try {
5991   - int count = 0;
5992   - List<ScheduleRealInfo> list = new ArrayList<>();
5993   - List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
5994   -
5995   - ScheduleRealInfo sch;
5996   - for (String id : ids) {
5997   - sch = dayOfSchedule.get(Long.parseLong(id));
5998   - if (sch != null && sch.getStatus() == 0) {
5999   - if (minute > 0) {
6000   - sch.setLateMinute(minute);
6001   - } else if (minute == 0) {
6002   - LateAdjustHandle.remove(sch);
6003   - }
6004   - count++;
6005   - list.add(sch);
6006   - }
6007   - }
6008   -
6009   - rs.put("status", ResponseCode.SUCCESS);
6010   - rs.put("count", count);
6011   - rs.put("ts", list);
6012   - } catch (Exception e) {
6013   - logger.error("", e);
6014   - rs.put("status", ResponseCode.ERROR);
6015   - rs.put("msg", e.getMessage());
6016   - }
6017   -
6018   - return rs;
6019   - }
6020   -
6021   - @Override
6022   - public List<ScheduleRealInfo> allLate2(String idx) {
6023   - List<ScheduleRealInfo> rs = new ArrayList<>();
6024   - List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
6025   -
6026   - Collection<ScheduleRealInfo> all = LateAdjustHandle.allLateSch();
6027   - for (ScheduleRealInfo sch : all) {
6028   - if (ids.indexOf(sch.getXlBm()) != -1) {
6029   - rs.add(sch);
6030   - }
6031   - }
6032   - return rs;
6033   - }
6034   -
6035   -
6036   - @Override
6037   - public List<Map<String, Object>> mileageReport(String gsdm,
6038   - String fgsdm, String line, String date, String date2) {
6039   -
6040   - String sql = "select * from calc_mileage where 1=1 ";
6041   - if (!line.equals(" ")) {
6042   - sql = sql + " and line_code='" + line + "' ";
6043   - }
6044   - sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
6045   - if (!gsdm.equals(" ")) {
6046   - sql = sql + " and company_id=" + gsdm;
6047   - }
6048   - if (!gsdm.equals(" ")) {
6049   - sql = sql + " and sub_company_id=" + fgsdm;
6050   - }
6051   - sql = sql + " order by line_code";
6052   - List<MileageReport> list = jdbcTemplate.query(sql,
6053   - new RowMapper<MileageReport>() {
6054   - @Override
6055   - public MileageReport mapRow(ResultSet rs, int rowNum) throws SQLException {
6056   - MileageReport mr = new MileageReport();
6057   - mr.setCompanyName(rs.getString("company_name"));
6058   - mr.setSubCompanyName(rs.getString("sub_company_name"));
6059   - mr.setLineName(rs.getString("line_name"));
6060   - mr.setSjyygl(rs.getDouble("sjyygl"));
6061   - mr.setSjksgl(rs.getDouble("sjksgl"));
6062   - mr.setZgl(rs.getDouble("zyygl"));
6063   - mr.setZddfgl(rs.getDouble("zddfgl"));
6064   - mr.setSddfgl(rs.getDouble("sddfgl"));
6065   - mr.setWqwxhgl(rs.getDouble("wqwxhgl"));
6066   - mr.setBfwxhgl(rs.getDouble("bfwxhgl"));
6067   - mr.setPygl(rs.getDouble("pygl"));
6068   - mr.setLjgl(rs.getDouble("ljgl"));
6069   - mr.setZrwgl(rs.getDouble("zrwgl"));
6070   - mr.setOther(rs.getString("other"));
6071   - return mr;
6072   - }
6073   - });
6074   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
6075   - double sjyygl = 0.0;
6076   - double sjksgl = 0.0;
6077   - double zgl = 0.0;
6078   - double sddfgl = 0.0;
6079   - double zddfgl = 0.0;
6080   - double wqwxhgl = 0.0;
6081   - double bfwxhgl = 0.0;
6082   - double pygl = 0.0;
6083   - double ljgl = 0.0;
6084   - double zrwgl = 0.0;
6085   - for (MileageReport mr : list) {
6086   - Map<String, Object> resMap = new HashMap<String, Object>();
6087   - resMap.put("gsName", mr.getCompanyName());
6088   - resMap.put("fgsName", mr.getSubCompanyName());
6089   - resMap.put("xlName", mr.getLineName());
6090   - resMap.put("sjyygl", mr.getSjyygl());
6091   - resMap.put("sjksgl", mr.getSjksgl());
6092   - resMap.put("zgl", mr.getZgl());
6093   - resMap.put("sddfgl", mr.getSddfgl());
6094   - resMap.put("zddfgl", mr.getZddfgl());
6095   - resMap.put("wqwxhgl", mr.getWqwxhgl());
6096   - resMap.put("bfwxhgl", mr.getBfwxhgl());
6097   - resMap.put("pygl", mr.getPygl());
6098   - resMap.put("ljgl", mr.getLjgl());
6099   - resMap.put("zrwgl", mr.getZrwgl());
6100   - resMap.put("other", mr.getOther());
6101   - lMap.add(resMap);
6102   - sjyygl = Arith.add(sjyygl, mr.getSjyygl());
6103   - sjksgl = Arith.add(sjksgl, mr.getSjksgl());
6104   - zgl = Arith.add(zgl, mr.getZgl());
6105   - sddfgl = Arith.add(sddfgl, mr.getSddfgl());
6106   - zddfgl = Arith.add(zddfgl, mr.getZddfgl());
6107   - wqwxhgl = Arith.add(wqwxhgl, mr.getWqwxhgl());
6108   - bfwxhgl = Arith.add(bfwxhgl, mr.getBfwxhgl());
6109   - pygl = Arith.add(pygl, mr.getPygl());
6110   - ljgl = Arith.add(ljgl, mr.getLjgl());
6111   - zrwgl = Arith.add(zrwgl, mr.getZrwgl());
6112   - }
6113   - Map<String, Object> resMap = new HashMap<String, Object>();
6114   - resMap.put("xlName", "合计");
6115   - resMap.put("sjyygl", sjyygl);
6116   - resMap.put("sjksgl", sjksgl);
6117   - resMap.put("zgl", zgl);
6118   - resMap.put("sddfgl", sddfgl);
6119   - resMap.put("zddfgl", zddfgl);
6120   - resMap.put("wqwxhgl", wqwxhgl);
6121   - resMap.put("bfwxhgl", bfwxhgl);
6122   - resMap.put("pygl", pygl);
6123   - resMap.put("ljgl", ljgl);
6124   - resMap.put("zrwgl", zrwgl);
6125   - resMap.put("other", null);
6126   - lMap.add(resMap);
6127   - return lMap;
6128   - }
6129   -
6130   - @Override
6131   - public List<Map<String, Object>> scheduleCorrectionReport(String gsdm,
6132   - String fgsdm, String line, String date, String date2) {
6133   -
6134   - String sql = "select * from calc_schedule where 1=1 ";
6135   - if (!line.equals(" ")) {
6136   - sql = sql + " and line_code='" + line + "' ";
6137   - }
6138   - sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
6139   - if (!gsdm.equals(" ")) {
6140   - sql = sql + " and company_id=" + gsdm;
6141   - }
6142   - if (!gsdm.equals(" ")) {
6143   - sql = sql + " and sub_company_id=" + fgsdm;
6144   - }
6145   - sql = sql + " order by line_code";
6146   - List<ScheduleCorrectionReport> list = jdbcTemplate.query(sql,
6147   - new RowMapper<ScheduleCorrectionReport>() {
6148   - @Override
6149   - public ScheduleCorrectionReport mapRow(ResultSet rs, int rowNum) throws SQLException {
6150   - ScheduleCorrectionReport sReport = new ScheduleCorrectionReport();
6151   - sReport.setCompanyName(rs.getString("company_name"));
6152   - sReport.setSubCompanyName(rs.getString("sub_company_name"));
6153   - sReport.setLineName(rs.getString("line_name"));
6154   - sReport.setSjyybc(rs.getInt("sjyybc"));
6155   - sReport.setSjksbc(rs.getInt("sjksbc"));
6156   - sReport.setZbc(rs.getInt("zyybc"));
6157   - sReport.setZddfbc(rs.getInt("zddfbc"));
6158   - sReport.setSddfbc(rs.getInt("sddfbc"));
6159   - sReport.setWqwxhbc(rs.getInt("wqwxhbc"));
6160   - sReport.setBfwxhbc(rs.getInt("bfwxhbc"));
6161   - sReport.setPybc(rs.getInt("pybc"));
6162   - sReport.setLjbc(rs.getInt("ljbc"));
6163   - sReport.setZrwbc(rs.getInt("zrwbc"));
6164   - sReport.setOther(rs.getString("other"));
6165   - return sReport;
6166   - }
6167   - });
6168   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
6169   - int sjyybc = 0;
6170   - int sjksbc = 0;
6171   - int zbc = 0;
6172   - int sddfbc = 0;
6173   - int zddfbc = 0;
6174   - int wqwxhbc = 0;
6175   - int bfwxhbc = 0;
6176   - int pybc = 0;
6177   - int ljbc = 0;
6178   - int zrwbc = 0;
6179   - for (ScheduleCorrectionReport sReport : list) {
6180   - Map<String, Object> resMap = new HashMap<String, Object>();
6181   - resMap.put("gsName", sReport.getCompanyName());
6182   - resMap.put("fgsName", sReport.getSubCompanyName());
6183   - resMap.put("xlName", sReport.getLineName());
6184   - resMap.put("sjyybc", sReport.getSjyybc());
6185   - resMap.put("sjksbc", sReport.getSjksbc());
6186   - resMap.put("zbc", sReport.getZbc());
6187   - resMap.put("sddfbc", sReport.getSddfbc());
6188   - resMap.put("zddfbc", sReport.getZddfbc());
6189   - resMap.put("wqwxhbc", sReport.getWqwxhbc());
6190   - resMap.put("bfwxhbc", sReport.getBfwxhbc());
6191   - resMap.put("pybc", sReport.getPybc());
6192   - resMap.put("ljbc", sReport.getLjbc());
6193   - resMap.put("zrwbc", sReport.getZrwbc());
6194   - resMap.put("other", sReport.getOther());
6195   - lMap.add(resMap);
6196   - sjyybc = sjyybc + sReport.getSjyybc();
6197   - sjksbc = sjksbc + sReport.getSjksbc();
6198   - zbc = zbc + sReport.getZbc();
6199   - sddfbc = sddfbc + sReport.getSddfbc();
6200   - zddfbc = zddfbc + sReport.getZddfbc();
6201   - wqwxhbc = wqwxhbc + sReport.getWqwxhbc();
6202   - bfwxhbc = bfwxhbc + sReport.getBfwxhbc();
6203   - pybc = pybc + sReport.getPybc();
6204   - ljbc = ljbc + sReport.getLjbc();
6205   - zrwbc = zrwbc + sReport.getZrwbc();
6206   - }
6207   - Map<String, Object> resMap = new HashMap<String, Object>();
6208   - resMap.put("xlName", "合计");
6209   - resMap.put("sjyybc", sjyybc);
6210   - resMap.put("sjksbc", sjksbc);
6211   - resMap.put("zbc", zbc);
6212   - resMap.put("sddfbc", sddfbc);
6213   - resMap.put("zddfbc", zddfbc);
6214   - resMap.put("wqwxhbc", wqwxhbc);
6215   - resMap.put("bfwxhbc", bfwxhbc);
6216   - resMap.put("pybc", pybc);
6217   - resMap.put("ljbc", ljbc);
6218   - resMap.put("zrwbc", zrwbc);
6219   - resMap.put("other", null);
6220   - lMap.add(resMap);
6221   - return lMap;
6222   - }
6223   -
6224   - @Override
6225   - public Integer isCircleQdz(String clzbh, String sdr, String xlbm, String qdzCode) {
6226   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
6227   - String time =sdf.format(Long.parseLong(sdr));
6228   -
6229   - Long num=scheduleRealInfoRepository.isCircleQdz(clzbh, time, xlbm, qdzCode);
6230   - Integer num2=num==0L?0:1;
6231   - return num2;
6232   - }
6233   -
6234   - @SuppressWarnings("unchecked")
6235   - private static Map<String, Object> request(String url) {
6236   - Map<String, Object> res = new HashMap<String, Object>();
6237   - res.put("status", ResponseCode.SUCCESS);
6238   - InputStream in = null;
6239   - HttpURLConnection con = null;
6240   - try {
6241   - con = (HttpURLConnection)new URL(url).openConnection();
6242   - con.setRequestMethod("POST");
6243   - con.setRequestProperty("keep-alive", "true");
6244   - con.setRequestProperty("accept", "application/json");
6245   - con.setRequestProperty("content-type", "application/json");
6246   - con.setDoInput(true);
6247   - con.setReadTimeout(2500);
6248   - con.setConnectTimeout(2500);
6249   -
6250   - con.connect();
6251   - if (con.getResponseCode() == 200) {
6252   - in = con.getInputStream();
6253   - ByteArrayOutputStream bout = new ByteArrayOutputStream();
6254   - IOUtils.copy(in, bout); bout.close();
6255   - Map<String, Object> response = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
6256   - if (!"报修成功".equals(response.get("msg"))) {
6257   - res.put("status", ResponseCode.ERROR);
6258   - res.putAll(response);
6259   - }
6260   - } else {
6261   - res.put("status", ResponseCode.ERROR);
6262   - res.put("msg", "调用上报接口异常");
6263   - }
6264   - } catch (IOException e) {
6265   - // TODO Auto-generated catch block
6266   - res.put("status", ResponseCode.ERROR);
6267   - res.put("msg", "调用上报接口异常");
6268   - } finally {
6269   - try {
6270   - if (in != null) in.close();
6271   - if (con != null) con.disconnect();
6272   - } catch (IOException e) {
6273   - // TODO Auto-generated catch block
6274   - e.printStackTrace();
6275   - }
6276   - }
6277   -
6278   - return res;
6279   - }
6280   -
6281   - /**
6282   - ** 维修记录上报
6283   - * @param param 参数信息
6284   - * @param isActive 主/被动上报
6285   - */
6286   - @Override
6287   - @Transactional
6288   - public Map<String, Object> repairReport(Map<String, Object> param, boolean isActive) {
6289   - Map<String, Object> res = new HashMap<String, Object>();
6290   - res.put("status", ResponseCode.SUCCESS);
6291   - // 获取实际排班信息
6292   - Long id = Long.parseLong((String)param.get("id"));
6293   - ScheduleRealInfo sch = dayOfSchedule.get(id);
6294   -
6295   - if (null == sch) {
6296   - res.put("status", ResponseCode.ERROR);
6297   - res.put("msg", "不存在的班次!");
6298   -
6299   - return res;
6300   - }
6301   -
6302   - int reportState = -1;
6303   - SysUser user = SecurityUtils.getCurrentUser();
6304   - String reportUser = user.getUserName(), reportName = user.getName(), incode = (String)param.get("clZbh"), reportTypes = (String)param.get("reportTypes"), repairTypes = reportType2RepairType(reportTypes);
6305   - // 分公司保存格式 分公司编码_公司编码
6306   - String val = BasicData.nbbm2FgsCompanyCodeMap.get(incode);
6307   - String[] arr = val.split("_");
6308   - StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
6309   - url.append("?nbbm=").append(incode).append("&bxy=").append(reportUser).append("&bxbm=").append(repairTypes).append("&fgs=").append(arr[0]);
6310   -
6311   - int count = repairReportRepository.repairReportBySch(id, isActive ? 1 : 0);
6312   - if (count > 0) return res;
6313   - RepairReport lrr = dayOfSchedule.getLastestRepairReport(incode);
6314   - // 非主动上报并且无上报记录或上次已上报 则不用上报
6315   - if (!isActive && (lrr == null || lrr.getReportState() != 0)) {
6316   - reportState = 0;
6317   - } else {
6318   - res = request(url.toString());
6319   - if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
6320   - }
6321   - // 持久化此次上报记录
6322   - RepairReport rr = new RepairReport();
6323   - rr.setLineId(sch.getXlBm());
6324   - rr.setLineName(sch.getXlName());
6325   - rr.setReportUser(reportUser);
6326   - rr.setReportName(reportName);
6327   - rr.setSchId(id);
6328   - rr.setIncode(incode);
6329   - rr.setDepartureTime(sch.getFcsj());
6330   - rr.setRepairType(repairTypes);
6331   - rr.setReportType(reportTypes);
6332   - rr.setReportDate(new Date());
6333   - rr.setReportState(reportState);
6334   - rr.setReportMode(isActive ? 1 : 0);
6335   - rr = repairReportRepository.save(rr);
6336   - dayOfSchedule.setLastestRepairReport(rr);
6337   - // 如果上报失败,放到重传队列
6338   - if (rr.getReportState() == -1) queue.add(rr);
6339   -
6340   - return res;
6341   - }
6342   -
6343   - private void repairReport(RepairReport rr) {
6344   - int reportState = -1;
6345   - // 分公司保存格式 分公司编码_公司编码
6346   - String val = BasicData.nbbm2FgsCompanyCodeMap.get(rr.getIncode());
6347   - String[] arr = val.split("_");
6348   - StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
6349   - url.append("?nbbm=").append(rr.getIncode()).append("&bxy=").append(rr.getReportUser()).append("&bxbm=").append(rr.getRepairType()).append("&fgs=").append(arr[0]);
6350   -
6351   - Map<String, Object> res = request(url.toString());
6352   - if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
6353   - if (reportState == 1) {
6354   - rr.setReportState(1);
6355   - repairReportRepository.save(rr);
6356   - }
6357   - }
6358   -
6359   - /**
6360   - ** 业务类型转报修类型
6361   - */
6362   - private String reportType2RepairType(String reportType) {
6363   - String[] reportTypes = reportType.split(";");
6364   - List<String> repairTypes = new ArrayList<>();
6365   - for (String rt : reportTypes) {
6366   - repairTypes.add(report2repair.get(rt));
6367   - }
6368   -
6369   - return StringUtils.join(repairTypes, ";");
6370   - }
6371   -
6372   - @Override
6373   - public List<RepairReport> repairReportList(String lineId, String date, String incode, String type) {
6374   - List<RepairReport> result = new ArrayList<RepairReport>();
6375   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
6376   -
6377   - Date start = null, end = null;
6378   - if (date.length() > 0) {
6379   - try {
6380   - start = sdf.parse(date + " 00:00:00");
6381   - end = sdf.parse(date + " 23:59:59");
6382   - } catch (ParseException e) {
6383   - // TODO Auto-generated catch block
6384   - e.printStackTrace();
6385   - }
6386   -
6387   - }
6388   -
6389   - result = repairReportRepository.repairReportList(lineId, start, end, incode);
6390   - Map<String, Object> dMap=new HashMap<>();
6391   - dMap.put("dGroup_eq", "repairtype");
6392   - Map<String, String> code2name = new HashMap<String, String>();
6393   - for (Dictionary dic : dictionaryService.list(dMap)) {
6394   - code2name.put(dic.getdCode(), dic.getdName());
6395   - }
6396   - for (RepairReport rr : result) {
6397   - String reportType = rr.getReportType();
6398   - String[] types = reportType.split(";");
6399   - StringBuilder sb = new StringBuilder();
6400   -
6401   - for (String t : types) {
6402   - sb.append(code2name.get(t)).append(";");
6403   - }
6404   -
6405   - rr.setRepairType(sb.toString());
6406   - rr.setReportDateStr(sdf.format(rr.getReportDate()));
6407   - switch (rr.getReportState()) {
6408   - case 0:
6409   - rr.setReportStateStr("不报");
6410   - break;
6411   - case 1:
6412   - rr.setReportStateStr("上报成功");
6413   - break;
6414   - case -1:
6415   - rr.setReportStateStr("上报失败");
6416   - break;
6417   - default:
6418   - break;
6419   - }
6420   - }
6421   -
6422   - if ("export".equals(type)) {
6423   - String lineName = BasicData.lineCode2NameMap.get(lineId);
6424   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
6425   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
6426   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
6427   - Map<String, Object> m = new HashMap<String, Object>();
6428   - ReportUtils ee = new ReportUtils();
6429   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
6430   - for (int i = 0; i < result.size(); i++) {
6431   - Map<String, Object> map = new HashMap<String, Object>();
6432   - RepairReport rr = result.get(i);
6433   - map.put("row", i + 1);
6434   - map.put("lineId", rr.getLineName());
6435   - map.put("incode", rr.getIncode());
6436   - map.put("departureTime", rr.getDepartureTime());
6437   - map.put("reportUser", rr.getReportUser());
6438   - map.put("reportDateStr", rr.getReportDate());
6439   - map.put("repairType", rr.getRepairType());
6440   - map.put("reportStateStr", rr.getReportStateStr());
6441   - newList.add(map);
6442   - }
6443   - try {
6444   - listI.add(newList.iterator());
6445   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
6446   - ee.excelReplace(listI, new Object[]{m}, path + "mould/repairReport.xls",
6447   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
6448   - + "-" + lineName + "-维修上报记录.xls");
6449   - } catch (Exception e) {
6450   - // TODO: handle exception
6451   - e.printStackTrace();
6452   - }
6453   - }
6454   -
6455   - return result;
6456   - }
6457   -
6458   - @Override
6459   - public Map<String, String> getLevelsByLines(List<String> lines) {
6460   - Map<String, String> result = new HashMap<String, String>(), currSchDate = dayOfSchedule.getCurrSchDate();
6461   - for (String line : lines) {
6462   - String level = BasicData.lineDate2Level.get(line + "_" + currSchDate.get(line));
6463   - result.put(line, level == null ? "" : level);
6464   - }
6465   -
6466   - return result;
6467   - }
6468   -
6469   -
6470   - @Override
6471   - public void destroy() throws Exception {
6472   - // TODO Auto-generated method stub
6473   - exec.shutdown();
6474   - }
6475   -
6476   -
6477   - @Override
6478   - public void afterPropertiesSet() throws Exception {
6479   - // TODO Auto-generated method stub
6480   - // 维修上报重发调度
6481   - exec.scheduleAtFixedRate(new Runnable() {
6482   -
6483   - @Override
6484   - public void run() {
6485   - // TODO Auto-generated method stub
6486   - try {
6487   - Iterator<RepairReport> it = queue.iterator();
6488   - while (it.hasNext()) {
6489   - RepairReport rr = it.next();
6490   - repairReport(rr);
6491   - if (rr.getReportState() == 1 || System.currentTimeMillis() - rr.getReportDate().getTime() > 86400000) queue.remove(rr);
6492   - }
6493   - } catch (Exception e) {
6494   - logger.error("维修上报重发错误", e);
6495   - }
6496   - }
6497   - }, 30, 30, TimeUnit.MINUTES);
6498   - }
6499   -}
6500   -
6501   -class AccountMap implements Comparator<Map<String, Object>> {
6502   - @Override
6503   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6504   - // TODO Auto-generated method stub
6505   - return o1.get("clZbh").toString().compareTo(o2.get("clZbh").toString());
6506   - }
6507   -}
6508   -
6509   -class AccountMap2 implements Comparator<Map<String, Object>> {
6510   - @Override
6511   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6512   - // TODO Auto-generated method stub
6513   - return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString());
6514   - }
6515   -}
6516   -
6517   -class AccountXlbm implements Comparator<Map<String, Object>> {
6518   - @Override
6519   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6520   - // TODO Auto-generated method stub
6521   -// PinyinHelper.convertToPinyinString(ppy.getName(),
6522   -// "" , PinyinFormat.WITHOUT_TONE)
6523   - return o1.get("xlNamePy").toString().compareTo(
6524   - o2.get("xlNamePy").toString());
6525   - }
6526   -}
6527   -
6528   -class compareLpFcsjType implements Comparator<ScheduleRealInfo> {
6529   - @Override
6530   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6531   - // TODO Auto-generated method stub
6532   - return (o1.getLpName()+o1.getFcsjT() + o1.getRemark()).compareTo(o2.getLpName()+o2.getFcsjT() + o2.getRemark());
6533   - }
6534   -
6535   -}
6536   -
6537   -class compareDirLpFcsjType implements Comparator<ScheduleRealInfo> {
6538   - @Override
6539   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6540   - // TODO Auto-generated method stub
6541   - return (o1.getXlDir()+o1.getFcsjT() + o1.getRemark()+o1.getLpName()).compareTo(o2.getXlDir()+o2.getFcsjT() + o2.getRemark()+o2.getLpName());
6542   - }
6543   -
6544   -}
6545   -class compareFcsjType implements Comparator<ScheduleRealInfo> {
6546   - @Override
6547   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6548   - // TODO Auto-generated method stub
6549   - return (o1.getFcsjT() + o1.getRemark()).compareTo(o2.getFcsjT() + o2.getRemark());
6550   - }
6551   -
6552   -}
  1 +package com.bsth.service.realcontrol.impl;
  2 +
  3 +import java.io.ByteArrayOutputStream;
  4 +import java.io.File;
  5 +import java.io.IOException;
  6 +import java.io.InputStream;
  7 +import java.net.HttpURLConnection;
  8 +import java.net.URL;
  9 +import java.sql.ResultSet;
  10 +import java.sql.SQLException;
  11 +import java.text.DecimalFormat;
  12 +import java.text.ParseException;
  13 +import java.text.SimpleDateFormat;
  14 +import java.util.ArrayList;
  15 +import java.util.Calendar;
  16 +import java.util.Collection;
  17 +import java.util.Collections;
  18 +import java.util.Comparator;
  19 +import java.util.Date;
  20 +import java.util.GregorianCalendar;
  21 +import java.util.HashMap;
  22 +import java.util.HashSet;
  23 +import java.util.Iterator;
  24 +import java.util.List;
  25 +import java.util.Map;
  26 +import java.util.Queue;
  27 +import java.util.Set;
  28 +import java.util.concurrent.ConcurrentLinkedQueue;
  29 +import java.util.concurrent.Executors;
  30 +import java.util.concurrent.ScheduledExecutorService;
  31 +import java.util.concurrent.ThreadFactory;
  32 +import java.util.concurrent.TimeUnit;
  33 +import java.util.regex.Pattern;
  34 +
  35 +import org.apache.commons.io.IOUtils;
  36 +import org.apache.commons.lang3.StringEscapeUtils;
  37 +import org.apache.commons.lang3.StringUtils;
  38 +import org.joda.time.format.DateTimeFormat;
  39 +import org.joda.time.format.DateTimeFormatter;
  40 +import org.slf4j.Logger;
  41 +import org.slf4j.LoggerFactory;
  42 +import org.springframework.beans.factory.DisposableBean;
  43 +import org.springframework.beans.factory.InitializingBean;
  44 +import org.springframework.beans.factory.annotation.Autowired;
  45 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
  46 +import org.springframework.jdbc.core.JdbcTemplate;
  47 +import org.springframework.jdbc.core.RowMapper;
  48 +import org.springframework.stereotype.Service;
  49 +import org.springframework.transaction.annotation.Transactional;
  50 +
  51 +import com.alibaba.fastjson.JSON;
  52 +import com.alibaba.fastjson.JSONArray;
  53 +import com.alibaba.fastjson.JSONObject;
  54 +import com.bsth.common.Constants;
  55 +import com.bsth.common.ResponseCode;
  56 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  57 +import com.bsth.controller.realcontrol.dto.DfsjChange;
  58 +import com.bsth.controller.realcontrol.dto.LpData;
  59 +import com.bsth.data.BasicData;
  60 +import com.bsth.data.LineConfigData;
  61 +import com.bsth.data.Station2ParkBuffer;
  62 +import com.bsth.data.schedule.DayOfSchedule;
  63 +import com.bsth.data.schedule.SchAttrCalculator;
  64 +import com.bsth.data.schedule.ScheduleComparator;
  65 +import com.bsth.data.schedule.edit_logs.FormLogger;
  66 +import com.bsth.data.schedule.edit_logs.ScheduleModifyLogger;
  67 +import com.bsth.data.schedule.edit_logs.loggers.AfterwardsLogger;
  68 +import com.bsth.data.schedule.edit_logs.loggers.FcxxwtLogger;
  69 +import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
  70 +import com.bsth.data.schedule.late_adjust.LateAdjustHandle;
  71 +import com.bsth.data.utils.CustomStringUtils;
  72 +import com.bsth.entity.CarDevice;
  73 +import com.bsth.entity.Cars;
  74 +import com.bsth.entity.Line;
  75 +import com.bsth.entity.Personnel;
  76 +import com.bsth.entity.calc.CalcInterval;
  77 +import com.bsth.entity.oil.Dlb;
  78 +import com.bsth.entity.oil.Ylb;
  79 +import com.bsth.entity.oil.Ylxxb;
  80 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  81 +import com.bsth.entity.realcontrol.LineConfig;
  82 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  83 +import com.bsth.entity.realcontrol.SvgAttribute;
  84 +import com.bsth.entity.report.MileageReport;
  85 +import com.bsth.entity.report.RepairReport;
  86 +import com.bsth.entity.report.ScheduleCorrectionReport;
  87 +import com.bsth.entity.schedule.CarConfigInfo;
  88 +import com.bsth.entity.schedule.EmployeeConfigInfo;
  89 +import com.bsth.entity.schedule.GuideboardInfo;
  90 +import com.bsth.entity.schedule.SchedulePlanInfo;
  91 +import com.bsth.entity.sys.Dictionary;
  92 +import com.bsth.entity.sys.DutyEmployee;
  93 +import com.bsth.entity.sys.SysUser;
  94 +import com.bsth.repository.CarDeviceRepository;
  95 +import com.bsth.repository.CarsRepository;
  96 +import com.bsth.repository.LineRepository;
  97 +import com.bsth.repository.RepairReportRepository;
  98 +import com.bsth.repository.calc.CalcIntervalRepository;
  99 +import com.bsth.repository.oil.DlbRepository;
  100 +import com.bsth.repository.oil.YlbRepository;
  101 +import com.bsth.repository.oil.YlxxbRepository;
  102 +import com.bsth.repository.realcontrol.ChildTaskPlanRepository;
  103 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  104 +import com.bsth.repository.realcontrol.SvgAttributeRepository;
  105 +import com.bsth.repository.schedule.CarConfigInfoRepository;
  106 +import com.bsth.repository.schedule.EmployeeConfigInfoRepository;
  107 +import com.bsth.repository.schedule.GuideboardInfoRepository;
  108 +import com.bsth.security.util.SecurityUtils;
  109 +import com.bsth.service.LineService;
  110 +import com.bsth.service.SectionRouteService;
  111 +import com.bsth.service.directive.DirectiveService;
  112 +import com.bsth.service.impl.BaseServiceImpl;
  113 +import com.bsth.service.realcontrol.ScheduleRealInfoService;
  114 +import com.bsth.service.report.CulateMileageService;
  115 +import com.bsth.service.report.ReportService;
  116 +import com.bsth.service.schedule.SchedulePlanInfoService;
  117 +import com.bsth.service.sys.DictionaryService;
  118 +import com.bsth.service.sys.DutyEmployeeService;
  119 +import com.bsth.util.Arith;
  120 +import com.bsth.util.ComparableChild;
  121 +import com.bsth.util.ComparableLp;
  122 +import com.bsth.util.ComparableReal;
  123 +import com.bsth.util.ConfigUtil;
  124 +import com.bsth.util.DateUtils;
  125 +import com.bsth.util.ReportRelatedUtils;
  126 +import com.bsth.util.ReportUtils;
  127 +import com.bsth.util.TimeUtils;
  128 +import com.bsth.util.TransGPS;
  129 +import com.bsth.websocket.handler.SendUtils;
  130 +import com.fasterxml.jackson.databind.ObjectMapper;
  131 +import com.github.stuxuhai.jpinyin.PinyinException;
  132 +import com.github.stuxuhai.jpinyin.PinyinFormat;
  133 +import com.github.stuxuhai.jpinyin.PinyinHelper;
  134 +import com.google.common.base.Splitter;
  135 +import com.google.common.collect.Lists;
  136 +
  137 +import javax.ws.rs.HEAD;
  138 +
  139 +@Service
  140 +public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long>
  141 + implements ScheduleRealInfoService, InitializingBean, DisposableBean {
  142 + @Autowired
  143 + JdbcTemplate jdbcTemplate;
  144 + @Autowired
  145 + ScheduleRealInfoRepository scheduleRealInfoRepository;
  146 +
  147 + @Autowired
  148 + EmployeeConfigInfoRepository employeeConfigInfoRepository;
  149 +
  150 + @Autowired
  151 + CarConfigInfoRepository carConfigInfoRepository;
  152 +
  153 + @Autowired
  154 + SectionRouteService sectionRouteService;
  155 +
  156 + @Autowired
  157 + CulateMileageService culateMieageService;
  158 +
  159 + @Autowired
  160 + DictionaryService dictionaryService;
  161 +
  162 + @Autowired
  163 + CalcIntervalRepository calcIntervalRepository;
  164 + /*@Autowired
  165 + BorrowCenter borrowCenter;*/
  166 +
  167 + @Autowired
  168 + LineRepository lineRepository;
  169 + @Autowired
  170 + LineService lineService;
  171 + @Autowired
  172 + GuideboardInfoRepository guideboardInfoRepository;
  173 +
  174 + @Autowired
  175 + ChildTaskPlanRepository cTaskPlanRepository;
  176 +
  177 + @Autowired
  178 + SendUtils sendUtils;
  179 +
  180 + @Autowired
  181 + DayOfSchedule dayOfSchedule;
  182 +
  183 + @Autowired
  184 + SchAttrCalculator schAttrCalculator;
  185 +
  186 + @Autowired
  187 + LineConfigData lineConfigData;
  188 +
  189 + @Autowired
  190 + DutyEmployeeService dutyEmployeeService;
  191 +
  192 + @Autowired
  193 + YlxxbRepository ylxxbRepository;
  194 +
  195 + @Autowired
  196 + YlbRepository ylbRepository;
  197 +
  198 + @Autowired
  199 + DlbRepository dlbRepository;
  200 +
  201 + @Autowired
  202 + ReportService reposrService;
  203 +
  204 + @Autowired
  205 + CulateMileageService culateService;
  206 +
  207 + @Autowired
  208 + FormLogger schModifyLog;
  209 +
  210 + @Autowired
  211 + DirectiveService directiveService;
  212 +
  213 + @Autowired
  214 + CarDeviceRepository carDeviceRepository;
  215 +
  216 + @Autowired
  217 + CarsRepository carsRepository;
  218 +
  219 + @Autowired
  220 + RepairReportRepository repairReportRepository;
  221 + Logger logger = LoggerFactory.getLogger(this.getClass());
  222 +
  223 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  224 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  225 +
  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 + private static Map<String, String> report2repair = new HashMap<String, String>();
  241 +
  242 + static {
  243 + report2repair.put("9101", "9109");
  244 + report2repair.put("9102", "9102");
  245 + report2repair.put("9103", "9103");
  246 + report2repair.put("9104", "9104");
  247 + report2repair.put("9109", "9109");
  248 + report2repair.put("9201", "9201");
  249 + report2repair.put("9202", "9202");
  250 + report2repair.put("9203", "9203");
  251 + report2repair.put("9204", "9204");
  252 + report2repair.put("9209", "9209");
  253 + report2repair.put("9301", "9301");
  254 + report2repair.put("9302", "9302");
  255 + report2repair.put("9303", "9303");
  256 + report2repair.put("9304", "9304");
  257 + report2repair.put("9305", "9305");
  258 + report2repair.put("9306", "9306");
  259 + report2repair.put("9309", "9309");
  260 + }
  261 +
  262 +
  263 + /**
  264 + * 校验人车 和 班次的公司和分公司归属
  265 + *
  266 + * @param schId
  267 + * @param jGh
  268 + * @param sGh
  269 + * @param nbbm
  270 + * @return -2 跨营运公司,校验不过
  271 + * -1 跨分公司,二次确认
  272 + * 1 校验通过
  273 + */
  274 + @Override
  275 + public Map<String, Object> checkPCFgsAscription(Long schId, String jGh, String sGh, String nbbm) {
  276 + Map<String, Object> rs = new HashMap<>();
  277 + try {
  278 + rs.put("status", ResponseCode.SUCCESS);
  279 + rs.put("checkStatus", -2);
  280 +
  281 + String msg = null;
  282 + ScheduleRealInfo sch = dayOfSchedule.get(schId);
  283 + String gsbm = sch.getGsBm(), fgsbm = sch.getFgsBm();
  284 +
  285 + if (nbbm != null && !carExist(gsbm, nbbm)) {
  286 + msg = sch.getGsName() + "没有自编号为" + "[" + nbbm + "]的车辆";
  287 + rs.put("msg", msg);
  288 + return rs;
  289 + }
  290 +
  291 + if (nbbm != null && !sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(nbbm))) {
  292 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + nbbm + "】的车辆");
  293 + return rs;
  294 + }
  295 +
  296 + if (nbbm != null && !(fgsbm + "_" + gsbm).equals(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm))) {
  297 +
  298 + String clFgsName = BasicData.businessFgsCodeNameMap.get(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm));
  299 +
  300 + msg = ("【" + nbbm + "】" + "是" + clFgsName + "的车辆!");
  301 + rs.put("msg", msg);
  302 + rs.put("checkStatus", -1);
  303 + return rs;
  304 + }
  305 +
  306 + if(null != jGh && !"/".equals(StringUtils.trim(jGh))){
  307 + Personnel jsy = BasicData.perMap.get(gsbm + "-" + jGh);
  308 +
  309 + if (null == jsy) {
  310 + msg = "【驾驶员】:" + sch.getGsName() + "暂无工号为" + "【" + jGh + "】的人员";
  311 + rs.put("msg", msg);
  312 + return rs;
  313 + }
  314 + else if (!fgsbm.equals(jsy.getBrancheCompanyCode())) {
  315 + //校验分公司
  316 + msg = ("【驾驶员】:" + jGh + "/" + jsy.getPersonnelName() + "是" + jsy.getBrancheCompany() + "的人员");
  317 + rs.put("msg", msg);
  318 + rs.put("checkStatus", -1);
  319 + return rs;
  320 + }
  321 + }
  322 +
  323 + if (null != sGh && !"/".equals(StringUtils.trim(sGh))) {
  324 + Personnel spy = BasicData.perMap.get(gsbm + "-" + sGh);
  325 + if (null == spy) {
  326 + msg = "【售票员】: " + sch.getGsName() + "暂无工号为" + "【" + sGh + "】的人员";
  327 + rs.put("msg", msg);
  328 + return rs;
  329 + }
  330 + else if (!fgsbm.equals(spy.getBrancheCompanyCode())) {
  331 + msg = ("【售票员】: " + sGh + "/" + spy.getPersonnelName() + "是" + spy.getBrancheCompany() + "的人员");
  332 + rs.put("msg", msg);
  333 + rs.put("checkStatus", -1);
  334 + return rs;
  335 + }
  336 + }
  337 +
  338 + rs.put("checkStatus", 1);
  339 + } catch (Exception e) {
  340 + logger.error("", e);
  341 + rs.put("status", ResponseCode.ERROR);
  342 + }
  343 + return rs;
  344 + }
  345 +
  346 +
  347 + /**
  348 + * 车辆是否存在
  349 + *
  350 + * @param gsbm 公司编码
  351 + * @param nbbm 车辆自编号
  352 + * @return
  353 + */
  354 + private boolean carExist(String gsbm, String nbbm) {
  355 + return BasicData.nbbm2CompanyCodeMap.containsKey(nbbm);
  356 + }
  357 +
  358 + /**
  359 + * 获取人员姓名
  360 + *
  361 + * @param gsbm 公司编码
  362 + * @param gh 人员工号
  363 + * @return
  364 + */
  365 + private String getPersonName(String gsbm, String gh) {
  366 + return BasicData.allPerson.get(gsbm + '-' + gh);
  367 + }
  368 +
  369 + @Override
  370 + public Iterable<ScheduleRealInfo> list(Map<String, Object> map) {
  371 + Iterator<ScheduleRealInfo> iterator = super.list(map).iterator();
  372 + Set<ScheduleRealInfo> set = new HashSet<>(100);
  373 +
  374 + DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  375 + //计算时间戳
  376 + ScheduleRealInfo sch;
  377 + while (iterator.hasNext()) {
  378 + sch = iterator.next();
  379 + //待发时间戳
  380 + sch.setDfsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getDfsj()));
  381 + //实发时间戳
  382 + if (StringUtils.isNotEmpty(sch.getFcsjActual())) {
  383 + sch.setFcsjActualTime(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsjActual()));
  384 + }
  385 + set.add(sch);
  386 + }
  387 + return set;
  388 + }
  389 +
  390 + @Override
  391 + public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
  392 + List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
  393 +
  394 + /*Multimap<String, ScheduleRealInfo> mMap = ArrayListMultimap.create();
  395 +
  396 + for (String lineCode : lineList) {
  397 + mMap.putAll(lineCode, dayOfSchedule.findByLineCode(lineCode));
  398 + }*/
  399 + return dayOfSchedule.findByLineCodes(lineList);
  400 + }
  401 +
  402 + private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
  403 +
  404 + private static int BUF_SIZE = 1024;
  405 +
  406 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  407 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  408 +
  409 + @Override
  410 + public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType, String userId) {
  411 + Map<String, Object> map = new HashMap<>();
  412 + try {
  413 +
  414 + ScheduleRealInfo schedule = dayOfSchedule.get(id);
  415 +
  416 + if (schedule.getStatus() > 0) {
  417 + map.put("status", ResponseCode.SUCCESS);
  418 + map.put("flag", "4008");
  419 + map.put("t", schedule);
  420 + return map;
  421 + }
  422 +
  423 + LineConfig config = lineConfigData.get(schedule.getXlBm());
  424 + //小于线路开始运营时间,则默认跨过24点
  425 + if (dfsj.compareTo(config.getStartOpt()) < 0) {
  426 + schedule.setRealExecDate(fmtyyyyMMdd.print(schedule.getScheduleDate().getTime() + DAY_TIME));
  427 + } else {
  428 + schedule.setRealExecDate(schedule.getScheduleDateStr());
  429 + }
  430 +
  431 + //记录日志
  432 + ScheduleModifyLogger.dftz(schedule, opType, schedule.getDfsj(), dfsj, remarks, userId);
  433 +
  434 + schedule.setDfsjAll(dfsj);
  435 + schedule.setDfAuto(false);
  436 + if ("1".equals(opType))
  437 + schedule.setRemarks(remarks);
  438 +
  439 + List<ScheduleRealInfo> ts = new ArrayList<>();
  440 + ts.add(schedule);
  441 + //调整终点时间和下一个班次的应到时间
  442 + //schedule.calcEndTime();
  443 + /*ScheduleRealInfo nextSch = dayOfSchedule.nextByLp2(schedule);
  444 + if (null != nextSch) {
  445 + nextSch.setQdzArrDatejh(schedule.getZdsj());
  446 + ts.add(nextSch);
  447 + }*/
  448 +
  449 + //调整班次类型
  450 + if (StringUtils.isNotEmpty(bcType) && !bcType.equals(schedule.getBcType())) {
  451 + if ((schedule.getBcType().equals("major")
  452 + || schedule.getBcType().equals("venting"))
  453 + && bcType.equals("normal")) {
  454 + //清空备注
  455 + schedule.setRemarks("");
  456 + }
  457 + schedule.setBcType(bcType);
  458 + }
  459 +
  460 + //如果正在执行该班次
  461 + //ScheduleRealInfo exec = dayOfSchedule.executeCurr(schedule.getClZbh());
  462 + //if(exec != null && exec == schedule){
  463 + //重新计算正在执行班次
  464 + dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
  465 + //}
  466 +
  467 + //重新计算是否误点
  468 + schedule.reCalcLate();
  469 + //取消应发未到标记,不再自动调整待发
  470 + //if(schedule.isLate2()){
  471 + // schedule.setLate2(false);
  472 + //LateAdjustHandle.remove(schedule);
  473 + //}
  474 +
  475 + try {
  476 + if (!schedule.getDirectiveState().equals(-1) && schedule.getStatus() == 0) {
  477 + //重新下发调度指令
  478 + directiveService.send60Dispatch(schedule.getId(), "待发@系统");
  479 + }
  480 + } catch (Exception e) {
  481 + logger.error("", e);
  482 + }
  483 +
  484 + // 持久化到数据库
  485 + dayOfSchedule.save(schedule);
  486 +
  487 + map.put("status", ResponseCode.SUCCESS);
  488 + map.put("ts", ts);
  489 + } catch (Exception e) {
  490 + logger.error("", e);
  491 + map.put("status", ResponseCode.ERROR);
  492 + }
  493 + return map;
  494 + }
  495 +
  496 + @Override
  497 + public Map<String, Object> destroy(String idsStr, String remarks, String reason, String userId) {
  498 +
  499 + Map<String, Object> map = new HashMap<>();
  500 + List<ScheduleRealInfo> rsList = new ArrayList<>();
  501 + map.put("ts", rsList);
  502 + try {
  503 + List<String> idList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(idsStr));
  504 +
  505 + ScheduleRealInfo schedule = null;
  506 + for (String id : idList) {
  507 + schedule = dayOfSchedule.get(Long.parseLong(id));
  508 + if (schedule.isDestroy()) {
  509 + map.put("status", ResponseCode.ERROR);
  510 + map.put("msg", "不必要的重复烂班!");
  511 + return map;
  512 + }
  513 + //记录日志
  514 + ScheduleModifyLogger.jhlb(schedule, remarks, userId);
  515 +
  516 + schedule.setAdjustExps(reason);
  517 + schedule.destroy();
  518 + schedule.addRemarks(remarks);
  519 +
  520 + dayOfSchedule.save(schedule);
  521 + rsList.add(schedule);
  522 + }
  523 +
  524 + //重新计算当前执行班次
  525 + dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
  526 +
  527 + map.put("status", ResponseCode.SUCCESS);
  528 + } catch (Exception e) {
  529 + logger.error("", e);
  530 + map.put("status", ResponseCode.ERROR);
  531 + }
  532 + return map;
  533 + }
  534 +
  535 + // 线路id获取驾驶员
  536 + @Override
  537 + public List<Map<String, String>> findDriverByLine(String lineCode) {
  538 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  539 +
  540 + List<Map<String, String>> rsList = new ArrayList<>();
  541 + Map<String, String> map = null;
  542 + Personnel driver = null;
  543 + String code = null;
  544 +
  545 + for (EmployeeConfigInfo employee : list) {
  546 + driver = employee.getJsy();
  547 + if (driver != null) {
  548 + map = new HashMap<>();
  549 + code = driver.getJobCode();
  550 + map.put("id", code + "/" + driver.getPersonnelName());
  551 + map.put("text", code + "/" + driver.getPersonnelName());
  552 + rsList.add(map);
  553 + }
  554 + }
  555 + return rsList;
  556 + }
  557 +
  558 + // 线路id获取售票员
  559 + @Override
  560 + public List<Map<String, String>> findConductorByLine(String lineCode) {
  561 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  562 +
  563 + List<Map<String, String>> rsList = new ArrayList<>();
  564 + Map<String, String> map = null;
  565 + Personnel conductor = null;
  566 + String code = null;
  567 +
  568 + for (EmployeeConfigInfo employee : list) {
  569 + conductor = employee.getSpy();
  570 + if (conductor != null) {
  571 + code = conductor.getJobCode();
  572 + map = new HashMap<>();
  573 + map.put("id", code + "/" + conductor.getPersonnelName());
  574 + map.put("text", code + "/" + conductor.getPersonnelName());
  575 + rsList.add(map);
  576 + }
  577 + }
  578 + return rsList;
  579 + }
  580 +
  581 + @Override
  582 + public List<Map<String, String>> findCarByLine(String lineCode) {
  583 +
  584 + List<CarConfigInfo> list = carConfigInfoRepository.findBylineCode(lineCode);
  585 +
  586 + List<Map<String, String>> rsList = new ArrayList<>();
  587 + Map<String, String> map = null;
  588 + Cars car = null;
  589 + String code = null;
  590 +
  591 + for (CarConfigInfo cci : list) {
  592 + car = cci.getCl();
  593 + if (car != null) {
  594 + code = car.getInsideCode();
  595 + map = new HashMap<>();
  596 + map.put("id", code);
  597 + map.put("text", code);
  598 + rsList.add(map);
  599 + }
  600 + }
  601 + return rsList;
  602 + }
  603 +
  604 + /**
  605 + * 添加到历史库
  606 + *
  607 + * @param t
  608 + * @return
  609 + */
  610 + @Override
  611 + public Map<String, Object> addToHistory(ScheduleRealInfo t) {
  612 + Map<String, Object> rs = new HashMap<>();
  613 + try {
  614 + if (!carExist(t.getGsBm(), t.getClZbh())) {
  615 + rs.put("msg", "车辆 " + t.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
  616 + rs.put("status", ResponseCode.ERROR);
  617 + return rs;
  618 + }
  619 +
  620 + SysUser user = SecurityUtils.getCurrentUser();
  621 + //String schDate = DayOfSchedule.currSchDateMap.get(t.getXlBm());
  622 +
  623 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
  624 +
  625 + if (StringUtils.isEmpty(t.getjGh())) {
  626 + rs.put("status", ResponseCode.ERROR);
  627 + rs.put("msg", "驾驶员工号不能为空!");
  628 + return rs;
  629 + }
  630 + //截取驾驶员工号
  631 + if (t.getjGh().indexOf("-") != -1) {
  632 + t.setjGh(t.getjGh().split("-")[1]);
  633 + }
  634 + //检查驾驶员工号
  635 + String jName = getPersonName(t.getGsBm(), t.getjGh());
  636 + if (StringUtils.isEmpty(jName)) {
  637 + rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的驾驶员");
  638 + rs.put("status", ResponseCode.ERROR);
  639 + return rs;
  640 + } else if (StringUtils.isEmpty(t.getjName())) {
  641 + t.setjName(jName);//补上驾驶员名称
  642 + }
  643 +
  644 + //有售票员
  645 + if (StringUtils.isNotEmpty(t.getsGh())) {
  646 + String sName = getPersonName(t.getGsBm(), t.getsGh());
  647 + if (StringUtils.isEmpty(sName)) {
  648 + rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的售票员");
  649 + rs.put("status", ResponseCode.ERROR);
  650 + return rs;
  651 + } else if (StringUtils.isEmpty(t.getsName())) {
  652 + t.setsName(sName);//补上售票员名称
  653 + }
  654 + } else {
  655 + t.setsGh("");
  656 + t.setsName("");
  657 + }
  658 +
  659 + //公司 和 分公司名称
  660 + t.setGsName(BasicData.businessCodeNameMap.get(t.getGsBm()));
  661 + t.setFgsName(BasicData.businessFgsCodeNameMap.get(t.getFgsBm()+ "_" + t.getGsBm() ));
  662 +
  663 + //t.setScheduleDateStr(schDate);
  664 + t.setScheduleDate(sdfyyyyMMdd.parse(t.getScheduleDateStr()));
  665 + t.setRealExecDate(t.getScheduleDateStr());
  666 + t.setCreateBy(user);
  667 + t.setSflj(true);
  668 + t.setLate(false);
  669 + t.setDfsj(t.getFcsj());
  670 + t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime());
  671 + t.setJhlcOrig(t.getJhlc());
  672 +
  673 + //班次历时
  674 + t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
  675 +
  676 + //起终点名称
  677 + String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
  678 + t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
  679 + t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
  680 +
  681 + //计算班次实际执行时间
  682 + schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
  683 + //处理计达跨24点
  684 + LineConfig conf = lineConfigData.get(t.getXlBm());
  685 + if (t.getZdsj().compareTo(conf.getStartOpt()) < 0) {
  686 + t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
  687 + }
  688 + if (t.getZdsjT() < t.getFcsjT()) {
  689 + rs.put("status", ResponseCode.ERROR);
  690 + rs.put("msg", "起终点时间异常!");
  691 + return rs;
  692 + }
  693 +
  694 + t.setId(dayOfSchedule.getId());
  695 + //实时入库
  696 + rs = super.save(t);
  697 + } catch (Exception e) {
  698 + logger.error("", e);
  699 + rs.put("status", ResponseCode.ERROR);
  700 + }
  701 + return rs;
  702 + }
  703 +
  704 +
  705 + /**
  706 + * 临加班次
  707 + */
  708 + @Override
  709 + public Map<String, Object> save(ScheduleRealInfo sch) {
  710 + Map<String, Object> rs = new HashMap<>();
  711 + try {
  712 + String clZbh = sch.getClZbh();
  713 + if (StringUtils.isNotEmpty(clZbh)) {
  714 + //检测
  715 + if (!carExist(sch.getGsBm(), clZbh)) {
  716 + rs.put("status", ResponseCode.ERROR);
  717 + rs.put("msg", "车辆 " + clZbh + " 不存在!");
  718 + return rs;
  719 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
  720 + rs.put("status", ResponseCode.ERROR);
  721 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
  722 + return rs;
  723 + }
  724 + }
  725 +
  726 + SysUser user = SecurityUtils.getCurrentUser();
  727 + String schDate = DayOfSchedule.currSchDateMap.get(sch.getXlBm());
  728 +
  729 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
  730 +
  731 + if (StringUtils.isEmpty(sch.getjGh())) {
  732 + rs.put("status", ResponseCode.ERROR);
  733 + rs.put("msg", "驾驶员工号不能为空!");
  734 + return rs;
  735 + }
  736 + //截取驾驶员工号
  737 + if (sch.getjGh().indexOf("-") != -1) {
  738 + sch.setjGh(sch.getjGh().split("-")[1]);
  739 + }
  740 + //检查驾驶员工号
  741 + String jName = getPersonName(sch.getGsBm(), sch.getjGh());
  742 + if (StringUtils.isEmpty(jName)) {
  743 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
  744 + rs.put("status", ResponseCode.ERROR);
  745 + return rs;
  746 + } else if (StringUtils.isEmpty(sch.getjName())) {
  747 + sch.setjName(jName);//补上驾驶员名称
  748 + }
  749 +
  750 + //有售票员
  751 + if (StringUtils.isNotEmpty(sch.getsGh())) {
  752 + String sName = getPersonName(sch.getGsBm(), sch.getsGh());
  753 + if (StringUtils.isEmpty(sName)) {
  754 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的售票员");
  755 + rs.put("status", ResponseCode.ERROR);
  756 + return rs;
  757 + } else if (StringUtils.isEmpty(sch.getsName())) {
  758 + sch.setsName(sName);//补上售票员名称
  759 + }
  760 + } else {
  761 + sch.setsGh("");
  762 + sch.setsName("");
  763 + }
  764 +
  765 + //公司 和 分公司名称
  766 + sch.setGsName(BasicData.businessCodeNameMap.get(sch.getGsBm()));
  767 + sch.setFgsName(BasicData.businessFgsCodeNameMap.get(sch.getFgsBm() + "_" + sch.getGsBm()));
  768 + sch.setCreateDate(new Date());
  769 + sch.setScheduleDateStr(schDate);
  770 + sch.setScheduleDate(sdfyyyyMMdd.parse(schDate));
  771 + sch.setRealExecDate(schDate);
  772 +
  773 + sch.setCreateBy(user);
  774 + sch.setSflj(true);
  775 + sch.setLate(false);
  776 + sch.setDfsj(sch.getFcsj());
  777 + sch.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + sch.getZdsj()).getTime());
  778 + sch.setJhlcOrig(sch.getJhlc());
  779 + sch.setCreateDate(new Date());
  780 + sch.setUpdateDate(new Date());
  781 + sch.setSpId(-1L);
  782 + //起终点名称
  783 + String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
  784 + sch.setQdzName(BasicData.getStationNameByCode(sch.getQdzCode(), prefix));
  785 + sch.setZdzName(BasicData.getStationNameByCode(sch.getZdzCode(), prefix));
  786 +
  787 + //计算班次实际执行时间
  788 + schAttrCalculator.calcRealDate(sch).calcAllTimeByFcsj(sch);
  789 +
  790 + //处理计达跨24点
  791 + LineConfig conf = lineConfigData.get(sch.getXlBm());
  792 + if (sch.getZdsj().compareTo(conf.getStartOpt()) < 0) {
  793 + sch.setZdsjT(sdfyyyyMMddHHmm.parse(sch.getScheduleDateStr() + sch.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
  794 + }
  795 +
  796 + //班次历时
  797 + sch.setBcsj((int) ((sch.getZdsjT() - sch.getDfsjT()) / 1000 / 60));
  798 + if (sch.getZdsjT() < sch.getFcsjT()) {
  799 + rs.put("status", ResponseCode.ERROR);
  800 + rs.put("msg", "起终点时间异常!");
  801 + return rs;
  802 + }
  803 +
  804 + sch.setId(dayOfSchedule.getId());
  805 + //实时入库
  806 + super.save(sch);
  807 +
  808 + // 加入缓存
  809 + dayOfSchedule.put(sch);
  810 +
  811 + //更新起点应到时间
  812 + List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
  813 +
  814 + //重新计算车辆当前执行班次
  815 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  816 +
  817 + //记录站到场历时数据
  818 + Station2ParkBuffer.put(sch);
  819 +
  820 + rs.put("ts", ts);
  821 + rs.put("t", sch);
  822 + } catch (Exception e) {
  823 + logger.error("", e);
  824 + rs.put("status", ResponseCode.ERROR);
  825 + }
  826 + return rs;
  827 + }
  828 +
  829 + /**
  830 + * 删除历史表临加班次
  831 + *
  832 + * @param id
  833 + * @return
  834 + */
  835 + @Override
  836 + public Map<String, Object> deleteToHistory(Long id) {
  837 + Map<String, Object> rs = new HashMap<>();
  838 + rs.put("status", ResponseCode.ERROR);
  839 +
  840 + try {
  841 + ScheduleRealInfo sch = super.findById(id);
  842 + if (sch == null) {
  843 + rs.put("msg", "无效的id号");
  844 + return rs;
  845 + }
  846 +
  847 + if (!sch.isSflj()) {
  848 + rs.put("msg", "你只能删除临加班次");
  849 + return rs;
  850 + }
  851 +
  852 + //解除和调度指令的外键约束
  853 + jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
  854 +
  855 + //数据库删除
  856 + rs = super.delete(id);
  857 + } catch (Exception e) {
  858 + logger.error("", e);
  859 + rs.put("msg", e.getMessage());
  860 + }
  861 +
  862 + return rs;
  863 + }
  864 +
  865 + @Override
  866 + public Map<String, Object> delete(Long id) {
  867 + Map<String, Object> rs = new HashMap<>();
  868 + rs.put("status", ResponseCode.ERROR);
  869 +
  870 + ScheduleRealInfo sch = null;
  871 + try {
  872 + sch = dayOfSchedule.get(id);
  873 + if (sch == null) {
  874 + rs.put("msg", "无效的id号");
  875 + return rs;
  876 + }
  877 +
  878 + if (!sch.isSflj()) {
  879 + rs.put("msg", "你只能删除临加班次");
  880 + return rs;
  881 + }
  882 +
  883 + sch.setDeleted(true);
  884 + //解除和调度指令的外键约束
  885 + jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
  886 +
  887 + //数据库删除
  888 + rs = super.delete(id);
  889 + if (rs.get("status").equals(ResponseCode.SUCCESS)) {
  890 + dayOfSchedule.delete(sch);
  891 + //更新起点应到时间
  892 + List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
  893 + rs.put("ts", ts);
  894 + rs.put("delete", sch);
  895 + } else
  896 + sch.setDeleted(false);
  897 + } catch (Exception e) {
  898 + logger.error("", e);
  899 + rs.put("msg", e.getMessage());
  900 + sch.setDeleted(false);
  901 + }
  902 +
  903 + return rs;
  904 + }
  905 +
  906 + @Override
  907 + public List<Map<String, String>> sreachVehic(String nbbm) {
  908 + // 转大写
  909 + nbbm = nbbm.toUpperCase();
  910 +
  911 + List<Map<String, String>> list = new ArrayList<>();
  912 + Map<String, String> map;
  913 + Set<String> allSet = BasicData.nbbm2CompanyCodeMap.keySet();
  914 +
  915 + Line line;
  916 + for (String k : allSet) {
  917 + if (k.indexOf(nbbm) != -1) {
  918 + // 所属线路
  919 + map = new HashMap<>();
  920 + line = BasicData.nbbm2LineMap.get(k);
  921 + map.put("id", k);
  922 + map.put("text", k);
  923 + if (null != line) {
  924 + map.put("lineName", line.getName());
  925 + map.put("lineCode", line.getLineCode());
  926 + }
  927 +
  928 + list.add(map);
  929 + }
  930 +
  931 + if (list.size() > 20)
  932 + break;
  933 + }
  934 + return list;
  935 + }
  936 +
  937 + @Override
  938 + public void adjustCar(ScheduleRealInfo schedule, String car) {
  939 + schedule.setClZbh(car);
  940 + }
  941 +
  942 + @Override
  943 + public void adjustDriver(ScheduleRealInfo schedule, String driver, String driverName) {
  944 + if (driver.indexOf("-") != -1)
  945 + driver = driver.split("-")[1];
  946 + schedule.setjGh(driver);
  947 + schedule.setjName(driverName);
  948 + }
  949 +
  950 + @Override
  951 + public void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName) {
  952 + if (conductor.indexOf("-") != -1)
  953 + conductor = conductor.split("-")[1];
  954 + schedule.setsGh(conductor);
  955 + schedule.setsName(conductorName);
  956 + }
  957 +
  958 + @Override
  959 + public List<ScheduleRealInfo> queryUserInfo(String line, String date, String state) {
  960 + List<ScheduleRealInfo> scheduleRealInfos = new ArrayList<>();
  961 + List<Object[]> objects = null;
  962 + if (state.equals("2")) {
  963 + objects = scheduleRealInfoRepository.queryUserInfo2(line, date);
  964 + for (Object[] objs : objects) {
  965 + ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
  966 + scheduleRealInfo.setId((Long)objs[0]);
  967 + scheduleRealInfo.setjGh((String)objs[1]);
  968 + scheduleRealInfo.setClZbh((String)objs[2]);
  969 + scheduleRealInfo.setLpName((String)objs[3]);
  970 + scheduleRealInfo.setjName((String)objs[4]);
  971 +
  972 + scheduleRealInfos.add(scheduleRealInfo);
  973 + }
  974 + } else {
  975 + objects = scheduleRealInfoRepository.queryUserInfo3(line, date);
  976 + for (Object[] objs : objects) {
  977 + ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
  978 + scheduleRealInfo.setId((Long)objs[0]);
  979 + scheduleRealInfo.setClZbh((String)objs[1]);
  980 +
  981 + scheduleRealInfos.add(scheduleRealInfo);
  982 + }
  983 + }
  984 +
  985 + return scheduleRealInfos;
  986 + }
  987 +
  988 + @Override
  989 + public List<ScheduleRealInfo> queryUserInfoPx(String line, String date, String state, String type) {
  990 +// List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  991 + state = state + "";
  992 + String lpname = state;
  993 + String px = type;
  994 + if (state.equals("lpName")) {
  995 + state = state + "+1";
  996 + type = "ASC";
  997 + }
  998 + String minfcsj = "02:00";
  999 + List<Line> lineList = lineRepository.findLineByCode(line);
  1000 + if (lineList.size() > 0) {
  1001 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  1002 + + " id = ("
  1003 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  1004 + + ")";
  1005 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  1006 + }
  1007 + String sqlPlan = "select * from (select * from ("
  1008 + + " select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
  1009 + + " s.lp_Name as lpName,min(s.j_Name) as jName,max(s.schedule_date_str) as dateStr ,"
  1010 + + " min(s.fcsj) as fcsj,1 as px from bsth_c_s_sp_info_real s where "
  1011 + + " s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
  1012 + + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name) x where x.fcsj >'" + minfcsj + "'"
  1013 + + " UNION "
  1014 + + " select * from ( select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
  1015 + + " s.lp_Name as lpName,min(s.j_Name) as jName, max(s.schedule_date_str) as dateStr,"
  1016 + + " min(s.fcsj) as fcsj,2 as px from bsth_c_s_sp_info_real s "
  1017 + + " where s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
  1018 + + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name"
  1019 + + " ) y where y.fcsj <='" + minfcsj + "') z order by (" + state + "),dateStr,px,fcsj " + type;
  1020 + List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan,
  1021 + new RowMapper<ScheduleRealInfo>() {
  1022 + @Override
  1023 + public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  1024 + ScheduleRealInfo t = new ScheduleRealInfo();
  1025 + t.setId(rs.getLong("id"));
  1026 + t.setjGh(rs.getString("jGh"));
  1027 + t.setClZbh(rs.getString("clZbh"));
  1028 + t.setLpName(rs.getString("lpName"));
  1029 + t.setjName(rs.getString("jName"));
  1030 + t.setFcsj(rs.getString("fcsj"));
  1031 + return t;
  1032 + }
  1033 + });
  1034 + if (lpname.equals("lpName")) {
  1035 +
  1036 + List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>();
  1037 + Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
  1038 +// if (px.equals("desc")) {
  1039 + int zt = 0;
  1040 + for (int l = 0; l < 2; l++) {
  1041 + for (int i = 0; i < list.size(); i++) {
  1042 + ScheduleRealInfo t = list.get(i);
  1043 + if (t.getLpName().indexOf("+") != -1) {
  1044 + if (zt == 0) {
  1045 + listNew.add(t);
  1046 + }
  1047 + } else if (pattern.matcher(t.getLpName()).matches()) {
  1048 + if (zt == 1) {
  1049 + listNew.add(t);
  1050 + }
  1051 + } else {
  1052 + continue;
  1053 + }
  1054 + }
  1055 + zt++;
  1056 + }
  1057 +
  1058 + Collections.sort(list, new ComparableLp());
  1059 + for (int i = 0; i < list.size(); i++) {
  1060 + ScheduleRealInfo t = list.get(i);
  1061 + if (t.getLpName().indexOf("+") != -1) {
  1062 + continue;
  1063 + } else if (pattern.matcher(t.getLpName()).matches()) {
  1064 + continue;
  1065 + } else {
  1066 + listNew.add(t);
  1067 + }
  1068 + }
  1069 + return listNew;
  1070 + } else {
  1071 + return list;
  1072 + }
  1073 +
  1074 + }
  1075 +
  1076 + /**
  1077 + *
  1078 + */
  1079 + @Override
  1080 + public List<ScheduleRealInfo> exportWaybill(String jName,String jGh, String clZbh, String lpName, String date, String line) {
  1081 + ReportUtils ee = new ReportUtils();
  1082 + ReportRelatedUtils rru = new ReportRelatedUtils();
  1083 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  1084 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  1085 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  1086 +// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
  1087 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  1088 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1089 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1090 + Set<ChildTaskPlan> cts = s.getcTasks();
  1091 + if (cts != null && cts.size() > 0) {
  1092 + lists.add(s);
  1093 + } else {
  1094 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  1095 + lists.add(s);
  1096 + }
  1097 + }
  1098 + }
  1099 + DecimalFormat format = new DecimalFormat("0.00");
  1100 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  1101 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  1102 + //计算里程和班次数,并放入Map里
  1103 + Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  1104 +
  1105 + map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
  1106 + map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
  1107 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  1108 + double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
  1109 + map.put("yygl", yygl);
  1110 + double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
  1111 + map.put("ksgl", ksgl);
  1112 + map.put("realMileage", Arith.add(yygl, ksgl));
  1113 + map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
  1114 + map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
  1115 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  1116 + int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
  1117 + map.put("sjbc", sjbc);
  1118 +// map=new HashMap<String,Object>();
  1119 +
  1120 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  1121 + String minfcsj = "02:00";
  1122 + List<Line> lineList = lineRepository.findLineByCode(line);
  1123 + if (lineList.size() > 0) {
  1124 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  1125 + + " id = ("
  1126 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  1127 + + ")";
  1128 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  1129 + }
  1130 + String[] minSjs = minfcsj.split(":");
  1131 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  1132 +
  1133 +
  1134 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1135 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1136 + String[] fcsj = s.getFcsj().split(":");
  1137 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  1138 +
  1139 + Long fscjT = 0L;
  1140 + if (fcsjL < minSj) {
  1141 + Calendar calendar = new GregorianCalendar();
  1142 + calendar.setTime(s.getScheduleDate());
  1143 + calendar.add(calendar.DATE, 1);
  1144 + s.setScheduleDate(calendar.getTime());
  1145 + try {
  1146 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  1147 + } catch (ParseException e) {
  1148 + // TODO Auto-generated catch block
  1149 + e.printStackTrace();
  1150 + }
  1151 +
  1152 + } else {
  1153 + try {
  1154 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  1155 + } catch (ParseException e) {
  1156 + // TODO Auto-generated catch block
  1157 + e.printStackTrace();
  1158 + }
  1159 + ;
  1160 + }
  1161 + s.setFcsjT(fscjT);
  1162 + }
  1163 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  1164 + Collections.sort(scheduleRealInfos, new ComparableReal());
  1165 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1166 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1167 + s.setAdjustExps(i + 1 + "");
  1168 + String remarks = "";
  1169 + if (s.getRemarks() != null) {
  1170 + remarks += s.getRemarks();
  1171 + }
  1172 +
  1173 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  1174 + if (!childTaskPlans.isEmpty()) {
  1175 + s.setFcsjActual("");
  1176 + s.setZdsjActual("");
  1177 + s.setJhlc(0.0);
  1178 + }
  1179 +
  1180 + if (s.isDestroy()) {
  1181 + s.setFcsjActual("");
  1182 + s.setZdsjActual("");
  1183 + s.setJhlc(0.0);
  1184 + remarks += "(烂班)";
  1185 + s.setRemarks(remarks);
  1186 + }
  1187 +
  1188 + listSchedule.add(s);
  1189 + //计算营运里程,空驶里程
  1190 + if (!childTaskPlans.isEmpty()) {
  1191 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  1192 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  1193 + Collections.sort(listit, new ComparableChild());
  1194 + for (int j = 0; j < listit.size(); j++) {
  1195 + ScheduleRealInfo t = new ScheduleRealInfo();
  1196 + ChildTaskPlan childTaskPlan = listit.get(j);
  1197 + if (childTaskPlan.isDestroy()) {
  1198 + t.setFcsjActual("");
  1199 + t.setZdsjActual("");
  1200 + t.setJhlc(0.0);
  1201 + } else {
  1202 + t.setFcsjActual(childTaskPlan.getStartDate());
  1203 + t.setZdsjActual(childTaskPlan.getEndDate());
  1204 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  1205 + }
  1206 + t.setQdzName(childTaskPlan.getStartStationName());
  1207 + t.setZdzName(childTaskPlan.getEndStationName());
  1208 + t.setRemarks(childTaskPlan.getRemarks());
  1209 + t.setAdjustExps("子");
  1210 + t.setjGh("");
  1211 + t.setjName("");
  1212 + t.setsGh("");
  1213 + t.setsName("");
  1214 + listSchedule.add(t);
  1215 + }
  1216 + }
  1217 + }
  1218 + Map<String, Object> maps;
  1219 + for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
  1220 + maps = new HashMap<String, Object>();
  1221 + try {
  1222 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  1223 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  1224 + maps = rru.getMapValue(scheduleRealInfo);
  1225 + maps.put("bcs", scheduleRealInfo.getAdjustExps());
  1226 + String zdsj = scheduleRealInfo.getZdsj();
  1227 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  1228 + if (zdsj != null && zdsjActual != null &&
  1229 + !zdsj.equals(zdsjActual) &&
  1230 + !zdsj.equals("") &&
  1231 + !zdsjActual.equals("")) {
  1232 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  1233 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  1234 + if (zdsj.compareTo(zdsjActual) > 0) {
  1235 + if (zdsjT - zdsjAT > 1000) {
  1236 + maps.put("fast", "");
  1237 + maps.put("slow", zdsjAT - zdsjT + 1440);
  1238 + } else {
  1239 + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  1240 + maps.put("slow", "");
  1241 + }
  1242 + } else {
  1243 + if (zdsjAT - zdsjT > 1000) {
  1244 + maps.put("fast", zdsjT - zdsjAT + 1440);
  1245 + maps.put("slow", "");
  1246 + } else {
  1247 + maps.put("fast", "");
  1248 + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  1249 + }
  1250 + }
  1251 + } else {
  1252 + maps.put("fast", "");
  1253 + maps.put("slow", "");
  1254 + }
  1255 + listMap.add(maps);
  1256 + } catch (Exception e) {
  1257 + e.printStackTrace();
  1258 + }
  1259 + }
  1260 +
  1261 + String xls = "";
  1262 + if (map.get("type").toString().equals("0")) {
  1263 + xls = "waybill_minhang.xls";
  1264 + } else {
  1265 + xls = "waybill_minhang_dl.xls";
  1266 + }
  1267 +
  1268 +
  1269 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1270 +
  1271 + list.add(listMap.iterator());
  1272 + ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/" + xls,
  1273 + path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  1274 + return scheduleRealInfos;
  1275 + }
  1276 +
  1277 + @Override
  1278 + public List<Map<String, Object>> dailyInfo(String line, String date, String type) {
  1279 + DecimalFormat format = new DecimalFormat("0.00");
  1280 + ReportUtils ee = new ReportUtils();
  1281 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1282 + List<Map<String, Object>> list = scheduleRealInfoRepository.dailyInfo(line, date);
  1283 +
  1284 + double totalZGL = 0, totalKSGL = 0, totalYH = 0;
  1285 + int totalBCS = 0;
  1286 + for (int i = 0; i < list.size(); i++) {
  1287 + String zgl = format.format(Double.parseDouble(list.get(i).get("zgl") == null ? "0" : list.get(i).get("zgl").toString()));
  1288 + String ksgl = format.format(Double.parseDouble(list.get(i).get("ksgl") == null ? "0" : list.get(i).get("ksgl").toString()));
  1289 + if (type.equals("export")) {
  1290 + totalZGL += Double.parseDouble(zgl);
  1291 + totalKSGL += Double.parseDouble(ksgl);
  1292 + totalBCS += Integer.parseInt(list.get(i).get("bcs").toString());
  1293 + }
  1294 + list.get(i).put("zgl", zgl);
  1295 + list.get(i).put("ksgl", ksgl);
  1296 + }
  1297 + if (type.equals("export")) {
  1298 + Map<String, Object> map = new HashMap<String, Object>();
  1299 + map.put("line", line);
  1300 + map.put("date", date);
  1301 + map.put("totalZGL", totalZGL);
  1302 + map.put("totalKSGL", totalKSGL);
  1303 + map.put("totalYH", totalYH);
  1304 + map.put("totalBCS", totalBCS);
  1305 +
  1306 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1307 +
  1308 + listI.add(list.iterator());
  1309 + try {
  1310 + ee.excelReplace(listI, new Object[]{map}, path + "mould/daily.xls",
  1311 + path + "export/班次日报" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  1312 + } catch (ParseException e) {
  1313 + e.printStackTrace();
  1314 + }
  1315 + }
  1316 + return list;
  1317 + }
  1318 +
  1319 + @Override
  1320 + public List<Object[]> historyMessage(String line, String date, String code, String type) {
  1321 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1322 +
  1323 + long d = 0;
  1324 + long t = 0;
  1325 + if (date.length() > 0) {
  1326 + try {
  1327 + d = sdf.parse(date + " 00:00:00").getTime();
  1328 + t = sdf.parse(date + " 23:59:59").getTime();
  1329 + } catch (ParseException e) {
  1330 + // TODO Auto-generated catch block
  1331 + e.printStackTrace();
  1332 + }
  1333 +
  1334 + }
  1335 + String device = "";
  1336 + String device2 ="";
  1337 + long qyrqTime=0l;
  1338 + if (!code.equals("")) {
  1339 + try {
  1340 + List<CarDevice> deviceList=carDeviceRepository.findCarCode(code, sdf.parse(date+ " 00:00:00"));
  1341 + if(deviceList.size()>0){
  1342 + device=deviceList.get(0).getOldDeviceNo();
  1343 + Date qyrq=deviceList.get(0).getQyrq();
  1344 + qyrqTime=qyrq.getTime();
  1345 + if(qyrqTime<t){
  1346 + device2=deviceList.get(0).getNewDeviceNo();
  1347 + }
  1348 + }else{
  1349 + device = BasicData.deviceId2NbbmMap.inverse().get(code);
  1350 + }
  1351 + } catch (ParseException e) {
  1352 + // TODO Auto-generated catch block
  1353 + e.printStackTrace();
  1354 + }
  1355 + }
  1356 + List<Object[]> list=new ArrayList<Object[]>();
  1357 +
  1358 + List<Object[]> list0 =scheduleRealInfoRepository.historyMessage(line, d, t, device);
  1359 + for (Object[] obj : list0) {
  1360 + if (obj != null) {
  1361 + if(code.equals("")){
  1362 + if (BasicData.deviceId2NbbmMap.get(obj[0].toString()) == null) {
  1363 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  1364 + try {
  1365 + carDeviceList = carDeviceRepository.findCarDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
  1366 + //启用日期大于营运日期 还是根据旧设备号查询
  1367 + if(carDeviceList.size()==0){
  1368 + carDeviceList = carDeviceRepository.findCarOldDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
  1369 + }
  1370 + } catch (Exception e) {
  1371 + // TODO Auto-generated catch block
  1372 + e.printStackTrace();
  1373 + }
  1374 + if (carDeviceList.size() > 0) {
  1375 + obj[0] = carDeviceList.get(0).getClZbh();
  1376 + } else {
  1377 + obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
  1378 + }
  1379 + } else {
  1380 + obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
  1381 + }
  1382 + }else{
  1383 + obj[0]=code;
  1384 + }
  1385 +
  1386 + obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
  1387 + obj[4] = BasicData.lineCode2NameMap.get(line);
  1388 + }
  1389 + }
  1390 + list.addAll(list0);
  1391 + if(!device2.equals("")){
  1392 + List<Object[]> list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2);
  1393 + for (Object[] obj : list1) {
  1394 + if (obj != null) {
  1395 + obj[0] =code;
  1396 + obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
  1397 + obj[4] = BasicData.lineCode2NameMap.get(line);
  1398 + }
  1399 + }
  1400 + list.addAll(list1);
  1401 + }
  1402 +
  1403 + if (type != null && type.length() != 0 && type.equals("export")) {
  1404 + String lineName = BasicData.lineCode2NameMap.get(line);
  1405 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1406 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1407 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1408 + Map<String, Object> m = new HashMap<String, Object>();
  1409 + ReportUtils ee = new ReportUtils();
  1410 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  1411 + for (int i = 0; i < list.size(); i++) {
  1412 + Map<String, Object> map = new HashMap<String, Object>();
  1413 + Object[] obj = list.get(i);
  1414 + map.put("num", i + 1);
  1415 + map.put("line", obj[4]);
  1416 + map.put("clZbh", obj[0]);
  1417 + map.put("sender", obj[1]);
  1418 + map.put("date", obj[3]);
  1419 + map.put("text", obj[2]);
  1420 + newList.add(map);
  1421 + }
  1422 + try {
  1423 + listI.add(newList.iterator());
  1424 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1425 + ee.excelReplace(listI, new Object[]{m}, path + "mould/historyMessage.xls",
  1426 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  1427 + + "-" + lineName + "-调度历史消息.xls");
  1428 + } catch (Exception e) {
  1429 + // TODO: handle exception
  1430 + e.printStackTrace();
  1431 + }
  1432 + }
  1433 +
  1434 + if (type != null && type.length() != 0 && type.equals("export_msg")) {
  1435 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1436 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1437 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1438 + Map<String, Object> m = new HashMap<String, Object>();
  1439 + ReportUtils ee = new ReportUtils();
  1440 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  1441 + for (int i = 0; i < list.size(); i++) {
  1442 + Map<String, Object> map = new HashMap<String, Object>();
  1443 + Object[] obj = list.get(i);
  1444 + map.put("num", i + 1);
  1445 + map.put("line", obj[4]);
  1446 + map.put("clZbh", obj[0]);
  1447 + map.put("sender", obj[1]);
  1448 + map.put("date", obj[3]);
  1449 + map.put("text", obj[2]);
  1450 + newList.add(map);
  1451 + }
  1452 + try {
  1453 + listI.add(newList.iterator());
  1454 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1455 + ee.excelReplace(listI, new Object[]{m}, path + "mould/message.xls",
  1456 + path + "export/调度消息分析" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  1457 + } catch (Exception e) {
  1458 + // TODO: handle exception
  1459 + e.printStackTrace();
  1460 + }
  1461 + }
  1462 + return list;
  1463 + }
  1464 +
  1465 + @Override
  1466 + public Map<Integer, Integer> trustStatus(String lineStr) {
  1467 + List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lineStr));
  1468 +
  1469 + Map<Integer, Integer> map = new HashMap<>();
  1470 + return map;
  1471 + }
  1472 +
  1473 + @Override
  1474 + public Map<String, Object> realOutAdjust(Map<String, String> map) {
  1475 + Map<String, Object> rs = new HashMap<>();
  1476 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1477 + try {
  1478 + // 维修上报
  1479 + if (StringUtils.isNotBlank(map.get("reportTypes"))) {
  1480 + Map<String, Object> param = new HashMap<String, Object>();
  1481 + param.putAll(map);
  1482 + rs = repairReport(param, false);
  1483 + }
  1484 +
  1485 + Long id = Long.parseLong(map.get("id"));
  1486 + String remarks = map.get("remarks"), fcsjActual = map.get("fcsjActual");
  1487 +
  1488 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1489 +
  1490 + LineConfig config = lineConfigData.get(sch.getXlBm());
  1491 + //小于线路开始运营时间,则默认跨过24点
  1492 + if (fcsjActual.compareTo(config.getStartOpt()) < 0) {
  1493 + sch.setRealExecDate(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME));
  1494 + } else {
  1495 + sch.setRealExecDate(sch.getScheduleDateStr());
  1496 + }
  1497 +
  1498 + //日志记录
  1499 + ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
  1500 +
  1501 + sch.setFcsjActualAll(fcsjActual);
  1502 + sch.setRemarks(remarks);
  1503 + sch.calcStatus();
  1504 + //if(sch.isLate2()){
  1505 + //取消应发未到标记
  1506 + // sch.setLate2(false);
  1507 + LateAdjustHandle.remove(sch);
  1508 + //}
  1509 +
  1510 + dayOfSchedule.save(sch);
  1511 +
  1512 + ts.add(sch);
  1513 +
  1514 + rs.put("status", ResponseCode.SUCCESS);
  1515 + rs.put("ts", ts);
  1516 +
  1517 + //通知页面刷新
  1518 + sendUtils.refreshSch(ts);
  1519 + } catch (Exception e) {
  1520 + logger.error("", e);
  1521 + rs.put("status", ResponseCode.ERROR);
  1522 + }
  1523 +
  1524 + return rs;
  1525 + }
  1526 +
  1527 + @Override
  1528 + public Map<String, Object> revokeDestroy(Long id) {
  1529 + Map<String, Object> rs = new HashMap<>();
  1530 + try {
  1531 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1532 + if (sch.getStatus() != -1) {
  1533 + rs.put("status", ResponseCode.ERROR);
  1534 + rs.put("msg", "未烂班,无法撤销!");
  1535 + } else {
  1536 + //日志记录
  1537 + ScheduleModifyLogger.cxlb(sch);
  1538 +
  1539 + sch.setStatus(0);
  1540 + sch.setRemarks("");//清空备注
  1541 + sch.setJhlc(sch.getJhlcOrig());
  1542 +
  1543 + //入库
  1544 + dayOfSchedule.save(sch);
  1545 + //重新计算当前执行班次
  1546 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1547 + rs.put("status", ResponseCode.SUCCESS);
  1548 + rs.put("t", sch);
  1549 +
  1550 + }
  1551 + } catch (Exception e) {
  1552 + logger.error("", e);
  1553 + rs.put("status", ResponseCode.ERROR);
  1554 + }
  1555 + return rs;
  1556 + }
  1557 +
  1558 + @Override
  1559 + public Map<String, Object> revokeRealOutgo(Long id) {
  1560 + Map<String, Object> rs = new HashMap<>();
  1561 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1562 +
  1563 + try {
  1564 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1565 + if (sch.getFcsjActual() == null) {
  1566 + rs.put("status", ResponseCode.ERROR);
  1567 + rs.put("msg", "无实发时间,无法撤销!");
  1568 + } else {
  1569 + //日志记录
  1570 + ScheduleModifyLogger.cxsf(sch);
  1571 +
  1572 + sch.clearFcsjActual();
  1573 + rs.put("status", ResponseCode.SUCCESS);
  1574 +
  1575 + ts.add(sch);
  1576 + rs.put("ts", ts);
  1577 +
  1578 + dayOfSchedule.save(sch);
  1579 +
  1580 + }
  1581 + } catch (Exception e) {
  1582 + logger.error("", e);
  1583 + rs.put("status", ResponseCode.ERROR);
  1584 + }
  1585 + return rs;
  1586 + }
  1587 +
  1588 + @Override
  1589 + public Map<String, Object> spaceAdjust(Long[] ids, Integer space) {
  1590 +
  1591 + List<ScheduleRealInfo> list = new ArrayList<>(), ts = new ArrayList<>(), tempTs = null;
  1592 + Map<String, Object> rs = new HashMap<>(), tempRs = new HashMap<>();
  1593 + try {
  1594 + ScheduleRealInfo sch, next;
  1595 + for (Long id : ids) {
  1596 + sch = dayOfSchedule.get(id);
  1597 + if (null != sch)
  1598 + list.add(sch);
  1599 + }
  1600 +
  1601 + int size = list.size();
  1602 + if (size == 0) {
  1603 + rs.put("status", ResponseCode.ERROR);
  1604 + } else {
  1605 + // 按发车时间排序
  1606 + Collections.sort(list, new ScheduleComparator.FCSJ());
  1607 +
  1608 + // 以第一个实际发车/待发时间为起点,调整间隔
  1609 + sch = list.get(0);
  1610 + Long st = sch.getFcsjActualTime() == null ? sch.getDfsjT() : sch.getFcsjActualTime(), plus = space * 60 * 1000L;
  1611 +
  1612 + for (int i = 1; i < size; i++) {
  1613 + st += plus;
  1614 + sch = list.get(i);
  1615 +
  1616 + //调整待发
  1617 + tempRs = outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "3", null);
  1618 +
  1619 + if (null != tempRs && tempRs.get("ts") != null)
  1620 + tempTs = (List<ScheduleRealInfo>) tempRs.get("ts");
  1621 +
  1622 + ts.addAll(tempTs);
  1623 + }
  1624 +
  1625 + rs.put("status", ResponseCode.SUCCESS);
  1626 + //返回最后一个班次,页面会全量刷新
  1627 + rs.put("ts", ts);
  1628 + }
  1629 +
  1630 + } catch (Exception e) {
  1631 + logger.error("", e);
  1632 + rs.put("status", ResponseCode.ERROR);
  1633 + }
  1634 + return rs;
  1635 + }
  1636 +
  1637 + private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  1638 +
  1639 + @Transactional
  1640 + @Override
  1641 + public Map<String, Object> schInfoFineTune(Map<String, String> map) {
  1642 + Map<String, Object> rs = new HashMap<>();
  1643 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1644 + try {
  1645 + // 维修上报
  1646 + if (StringUtils.isNotBlank(map.get("reportTypes"))) {
  1647 + Map<String, Object> param = new HashMap<String, Object>();
  1648 + param.putAll(map);
  1649 + rs = repairReport(param, false);
  1650 + }
  1651 +
  1652 + Long id = Long.parseLong(map.get("id"));
  1653 + String remarks = map.get("remarks");
  1654 +
  1655 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1656 +
  1657 + if (null == sch) {
  1658 + rs.put("status", ResponseCode.ERROR);
  1659 + rs.put("msg", "不存在的班次!");
  1660 + return rs;
  1661 + }
  1662 +
  1663 + //日志记录器
  1664 + FcxxwtLogger fLog = FcxxwtLogger.start(sch, remarks);
  1665 +
  1666 + String clZbh = map.get("clZbh");
  1667 + String jsy = map.get("jsy");
  1668 + if (!clZbh.equals(sch.getClZbh())
  1669 + || !jsy.equals(sch.getjGh() + "/" + sch.getjName()))
  1670 + schModifyLog.saveChangetochange(sch, clZbh, jsy);//为换人换车情况表写入数据
  1671 + /**
  1672 + * 换车
  1673 + */
  1674 + if (StringUtils.isNotEmpty(clZbh) && !clZbh.equals(sch.getClZbh())) {
  1675 + //换车
  1676 + if (!carExist(sch.getGsBm(), clZbh)) {
  1677 + rs.put("status", ResponseCode.ERROR);
  1678 + rs.put("msg", "车辆 " + clZbh + " 不存在!");
  1679 + return rs;
  1680 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
  1681 + rs.put("status", ResponseCode.ERROR);
  1682 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
  1683 + return rs;
  1684 + } else {
  1685 + fLog.log("换车", sch.getClZbh(), clZbh);
  1686 + dayOfSchedule.changeCar(sch, clZbh);
  1687 + }
  1688 + }
  1689 +
  1690 + if(StringUtils.isBlank(jsy) || "/".equals(StringUtils.trim(jsy))){
  1691 + rs.put("status", ResponseCode.ERROR);
  1692 + rs.put("msg", "无效的参数【驾驶员】");
  1693 + return rs;
  1694 + }
  1695 +
  1696 + /**
  1697 + * 换驾驶员
  1698 + */
  1699 + if (StringUtils.isNotEmpty(jsy)) {
  1700 + String jGh = jsy.split("/")[0];
  1701 + String jName = getPersonName(sch.getGsBm(), jGh);
  1702 + if (StringUtils.isEmpty(jName)) {
  1703 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
  1704 + rs.put("status", ResponseCode.ERROR);
  1705 + return rs;
  1706 + } else if (!jGh.equals(sch.getjGh())) {
  1707 + fLog.log("换驾驶员", sch.getjGh() + "/" + sch.getjName(), jsy);
  1708 + persoChange(sch, jGh);
  1709 + }
  1710 + }
  1711 +
  1712 + /**
  1713 + * 换售票员
  1714 + */
  1715 + String spy = map.get("spy");
  1716 + if (StringUtils.isNotEmpty(spy) && !StringUtils.trim(spy).equals("/")) {
  1717 + String sGh = spy.split("/")[0];
  1718 +
  1719 + String sName = getPersonName(sch.getGsBm(), sGh);
  1720 + if (StringUtils.isEmpty(sName)) {
  1721 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
  1722 + rs.put("status", ResponseCode.ERROR);
  1723 + return rs;
  1724 + } else if (!sGh.equals(sch.getsGh())) {
  1725 + fLog.log("换售票员", sch.getsGh() + "/" + sch.getsName(), spy);
  1726 + persoChangeSPY(sch, sGh);
  1727 + }
  1728 + } else if (StringUtils.isNotEmpty(sch.getsGh())) {
  1729 + fLog.log("撤销售票员");
  1730 + sch.setsGh("");
  1731 + sch.setsName("");
  1732 + }
  1733 +
  1734 + LineConfig config = lineConfigData.get(sch.getXlBm());
  1735 + /**
  1736 + * 调整实发
  1737 + */
  1738 + String fcsjActual = map.get("fcsjActual");
  1739 + if (StringUtils.isNotBlank(fcsjActual)
  1740 + && !fcsjActual.equals(sch.getFcsjActual())) {
  1741 +
  1742 + //long t = 0L;
  1743 + //小于线路开始运营时间,则默认跨过24点
  1744 + long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), fcsjActual, config);
  1745 + /* if (fcsjActual.compareTo(config.getStartOpt()) < 0)
  1746 + t = fmtyyyyMMddHHmm.parseMillis(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME) + fcsjActual);
  1747 + else
  1748 + t = fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + fcsjActual);*/
  1749 +
  1750 + fLog.log("调整实发时间", sch.getFcsjActual(), fcsjActual);
  1751 + sch.setFcsjActualAll(t);
  1752 + //取消应发未到标记
  1753 + //if(sch.isLate2()){
  1754 + // sch.setLate2(false);
  1755 + LateAdjustHandle.remove(sch);
  1756 + //}
  1757 + } else if (StringUtils.isNotEmpty(sch.getFcsjActual()) && StringUtils.isEmpty(fcsjActual)) {
  1758 + fLog.log("撤销实发时间", sch.getFcsjActual(), "");
  1759 + //撤销实发
  1760 + revokeRealOutgo(sch.getId());
  1761 + }
  1762 +
  1763 + /**
  1764 + * 调整实达
  1765 + */
  1766 + String zdsjActual = map.get("zdsjActual");
  1767 + if (StringUtils.isNotBlank(zdsjActual)
  1768 + && !zdsjActual.equals(sch.getZdsjActual())) {
  1769 +
  1770 + //调整实达
  1771 + fLog.log("调整实达时间", sch.getZdsjActual(), zdsjActual);
  1772 +
  1773 + long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), zdsjActual, config);
  1774 + sch.setZdsjActualAll(t);
  1775 + //路牌下一班起点到达时间
  1776 + ScheduleRealInfo next = dayOfSchedule.nextByLp2(sch);
  1777 + if (null != next) {
  1778 + next.setQdzArrDatesj(zdsjActual);
  1779 + next.setLate2(false);
  1780 + ts.add(next);
  1781 + }
  1782 +
  1783 + //重新计算车辆执行班次
  1784 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1785 + //取消应发未到标记
  1786 + LateAdjustHandle.remove(sch);
  1787 + } else if (StringUtils.isNotEmpty(sch.getZdsjActual()) && StringUtils.isEmpty(zdsjActual)) {
  1788 + //清除实达时间
  1789 + fLog.log("撤销实达时间", sch.getZdsjActual(), "");
  1790 + sch.clearZdsjActual();
  1791 + //清除路牌下一班起点到达时间
  1792 + ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
  1793 + if (null != next) {
  1794 + next.setQdzArrDatesj(null);
  1795 + ts.add(next);
  1796 + }
  1797 + //重新计算车辆执行班次
  1798 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1799 + }
  1800 +
  1801 + /**
  1802 + * 备注
  1803 + */
  1804 + sch.setRemarks(remarks);
  1805 +
  1806 + /**
  1807 + * 烂班
  1808 + */
  1809 + if (map.get("status") != null
  1810 + && Integer.parseInt(map.get("status").toString()) == -1) {
  1811 + destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
  1812 + fLog.log("烂班");
  1813 + }
  1814 +
  1815 + /**
  1816 + * 修改班次里程
  1817 + */
  1818 + String jhlc = map.get("jhlc");
  1819 + if (StringUtils.isNotEmpty(jhlc)) {
  1820 + double jhlcNum = Double.parseDouble(jhlc);
  1821 + //烂班
  1822 + if (jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout() && !sch.isDestroy()) {
  1823 + destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
  1824 + fLog.log("里程设置为0,自动烂班");
  1825 + } else if (jhlcNum != sch.getJhlc()) {
  1826 + fLog.log("设置里程", sch.getJhlc(), jhlcNum);
  1827 + sch.setJhlc(jhlcNum);
  1828 + //临加班次,实际计划一起改
  1829 + if (sch.isSflj())
  1830 + sch.setJhlcOrig(jhlcNum);
  1831 + }
  1832 + }
  1833 +
  1834 + /**
  1835 + * 修改班次类型
  1836 + */
  1837 + String bcType = map.get("bcType");
  1838 + if (StringUtils.isNotEmpty(bcType) && !bcType.equals(sch.getBcType())) {
  1839 + fLog.log("修改班次类型", sch.getBcType(), bcType);
  1840 + sch.setBcType(bcType);
  1841 + }
  1842 +
  1843 + //重新计算班次状态
  1844 + sch.calcStatus();
  1845 + dayOfSchedule.save(sch);
  1846 + //页面需要更新的班次信息
  1847 + ts.add(sch);
  1848 +
  1849 + rs.put("status", ResponseCode.SUCCESS);
  1850 + rs.put("ts", ts);
  1851 +
  1852 + //日志记录结束
  1853 + fLog.end();
  1854 + } catch (Exception e) {
  1855 + logger.error("", e);
  1856 + rs.put("status", ResponseCode.ERROR);
  1857 + }
  1858 + return rs;
  1859 + }
  1860 +
  1861 + @Override
  1862 + public Map<String, Object> outgoAdjustAll(String params) {
  1863 + Map<String, Object> rs = new HashMap<>();
  1864 + try {
  1865 + JSONArray jsonArray = JSONArray.parseArray(params);
  1866 +
  1867 + ScheduleRealInfo schedule = null;
  1868 + JSONObject jsonObj;
  1869 + String dfsj;
  1870 + long id;
  1871 + for (int i = 0; i < jsonArray.size(); i++) {
  1872 + jsonObj = jsonArray.getJSONObject(i);
  1873 + dfsj = jsonObj.getString("t");
  1874 + id = jsonObj.getLong("id");
  1875 + schedule = dayOfSchedule.get(id);
  1876 +
  1877 + if (schedule != null)
  1878 + outgoAdjust(id, null, dfsj, null, "2", null);
  1879 + }
  1880 +
  1881 + rs.put("status", ResponseCode.SUCCESS);
  1882 + //将更新的最后一个班次返回,页面会做全量刷新
  1883 + rs.put("t", schedule);
  1884 + } catch (Exception e) {
  1885 + logger.error("", e);
  1886 + rs.put("status", ResponseCode.ERROR);
  1887 + }
  1888 + return rs;
  1889 + }
  1890 +
  1891 + @Override
  1892 + public Map<String, Object> findRouteByLine(String lineCode) {
  1893 + Map<String, Object> map = new HashMap<>();
  1894 + //上行
  1895 + Integer lineId = BasicData.lineId2CodeMap.inverse().get(lineCode);
  1896 + map.put("line.id_eq", lineId);
  1897 + map.put("directions_eq", 0);
  1898 + List<Map<String, Object>> upList = sectionRouteService.getSectionRoute(map);
  1899 +
  1900 + //下行
  1901 + map.put("directions_eq", 1);
  1902 + List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map);
  1903 +
  1904 + Map<String, Object> rs = new HashMap<>();
  1905 +
  1906 + String upVectors = "", vec;
  1907 + //拼接上行路段
  1908 + for (Map<String, Object> temp : upList) {
  1909 + vec = temp.get("sectionBsectionVector").toString();
  1910 + upVectors += vec.subSequence(11, vec.length() - 2) + " ";
  1911 + }
  1912 +
  1913 + //拼接下行路段
  1914 + String downVectors = "";
  1915 + for (Map<String, Object> temp : downList) {//LINESTRING(
  1916 + vec = temp.get("sectionBsectionVector").toString();
  1917 + downVectors += vec.subSequence(11, vec.length() - 2) + " ";
  1918 + }
  1919 +
  1920 +
  1921 + rs.put("up", upVectors);
  1922 + //上行gcj
  1923 + rs.put("up_gcj", BdToGcjString(upVectors));
  1924 + rs.put("down", downVectors);
  1925 + //下行gcj
  1926 + rs.put("down_gcj", BdToGcjString(downVectors));
  1927 + rs.put("lineId", lineId);
  1928 +
  1929 + return rs;
  1930 + }
  1931 +
  1932 + /**
  1933 + * @param @param bdStr
  1934 + * @throws
  1935 + * @Title: BdToGcjString
  1936 + * @Description: TODO(将百度路由字符串 转 成GCJ 字符串)
  1937 + */
  1938 + public String BdToGcjString(String bdStr) {
  1939 + String[] array = bdStr.split(","), subArray;
  1940 + if (array.length == 0 || bdStr.length() < 2)
  1941 + return "";
  1942 +
  1943 + String gcjStr = "";
  1944 + TransGPS.Location location;
  1945 + for (String crd : array) {
  1946 + subArray = crd.split(" ");
  1947 + if (subArray.length != 2)
  1948 + continue;
  1949 + location = TransGPS.bd_decrypt(TransGPS.LocationMake(Double.parseDouble(subArray[0]), Double.parseDouble(subArray[1])));
  1950 +
  1951 + gcjStr += location.getLng() + " " + location.getLat() + ",";
  1952 + }
  1953 +
  1954 + return gcjStr.substring(0, gcjStr.length() - 1);
  1955 + }
  1956 +
  1957 + public List<Map<String, String>> findLine(String line) {
  1958 + List<Line> listLine = lineRepository.findLine("%" + line + "%");
  1959 + List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  1960 + Map<String, String> map;
  1961 + for (Line temp : listLine) {
  1962 + if (temp != null) {
  1963 + String xlName = temp.getName();
  1964 + if (xlName.indexOf(line) != -1) {
  1965 + map = new HashMap<String, String>();
  1966 + map.put("id", temp.getLineCode());
  1967 + map.put("text", xlName);
  1968 + list.add(map);
  1969 + }
  1970 + }
  1971 + }
  1972 + return list;
  1973 + }
  1974 +
  1975 + public List<Map<String, String>> findLpName(String lpName) {
  1976 + List<GuideboardInfo> listLpName = guideboardInfoRepository.findLpName("%" + lpName + "%");
  1977 + List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  1978 + Map<String, String> map;
  1979 + for (GuideboardInfo temp : listLpName) {
  1980 + if (temp != null) {
  1981 + String lp = temp.getLpName();
  1982 + if (lp.indexOf(lpName) != -1) {
  1983 + map = new HashMap<String, String>();
  1984 + map.put("id", lp);
  1985 + map.put("text", lp);
  1986 + list.add(map);
  1987 + }
  1988 + }
  1989 + }
  1990 + return list;
  1991 + }
  1992 +
  1993 + @Override
  1994 + public Map<String, Object> findKMBC2(String jName, String clZbh, String date) {
  1995 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill3(jName, clZbh, date, "", "");
  1996 +
  1997 + DecimalFormat format = new DecimalFormat("0.00");
  1998 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  1999 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  2000 + int jhbc = 0, cjbc = 0, ljbc = 0;
  2001 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
  2002 + float addMileage = 0l, remMileage = 0l;
  2003 + String j_Name = "";
  2004 + Map<String, Object> map = new HashMap<String, Object>();
  2005 + for (ScheduleRealInfo scheduleRealInfo : list) {
  2006 + if (scheduleRealInfo != null) {
  2007 + j_Name = scheduleRealInfo.getjName();
  2008 + //计划里程(主任务过滤掉临加班次),
  2009 + //烂班里程(主任务烂班),
  2010 + //临加里程(主任务临加),
  2011 + //计划班次,烂班班次,增加班次
  2012 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  2013 + if (scheduleRealInfo.isSflj()) {
  2014 + addMileage += tempJhlc;
  2015 + ljbc++;
  2016 + } else {
  2017 + jhlc += tempJhlc;
  2018 + jhbc++;
  2019 + if (scheduleRealInfo.getStatus() == -1) {
  2020 + remMileage += tempJhlc;
  2021 + cjbc++;
  2022 + }
  2023 + }
  2024 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  2025 + //计算营运里程,空驶里程
  2026 + if (childTaskPlans.isEmpty()) {
  2027 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  2028 + || scheduleRealInfo.getBcType().equals("venting")) {
  2029 + ksgl += tempJhlc;
  2030 + } else {
  2031 + yygl += tempJhlc;
  2032 + }
  2033 + } else {
  2034 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2035 + while (it.hasNext()) {
  2036 + ChildTaskPlan childTaskPlan = it.next();
  2037 + if (childTaskPlan.getMileageType().equals("empty")) {
  2038 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  2039 + } else {
  2040 + yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  2041 + }
  2042 + }
  2043 + }
  2044 + }
  2045 + }
  2046 + map.put("j_name", j_Name);
  2047 + map.put("jhlc", format.format(jhlc));
  2048 + map.put("remMileage", format.format(remMileage));
  2049 + map.put("addMileage", format.format(addMileage));
  2050 + map.put("yygl", format.format(yygl));
  2051 + map.put("ksgl", format.format(ksgl));
  2052 + map.put("realMileage", format.format(yygl + ksgl));
  2053 + map.put("jhbc", jhbc);
  2054 + map.put("cjbc", cjbc);
  2055 + map.put("ljbc", ljbc);
  2056 + map.put("sjbc", jhbc - cjbc + ljbc);
  2057 + return map;
  2058 + }
  2059 +
  2060 +
  2061 + public Map<String, Object> findKMBC(String jGh, String clZbh,
  2062 + String lpName, String date, String line) {
  2063 + Map<String, Object> map = new HashMap<String, Object>();
  2064 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2065 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2066 + for (int i = 0; i < list.size(); i++) {
  2067 + ScheduleRealInfo s = list.get(i);
  2068 + Set<ChildTaskPlan> cts = s.getcTasks();
  2069 + if (cts != null && cts.size() > 0) {
  2070 + lists.add(s);
  2071 + } else {
  2072 + if (s.getFcsjActual() != null && s.getZdsjActual() != null) {
  2073 + lists.add(s);
  2074 + }
  2075 + }
  2076 + }
  2077 + map.put("jhbc", culateService.culateJhbc(list, ""));//计划班次
  2078 + map.put("jhlc", Arith.add(culateService.culateJhgl(list),
  2079 + culateService.culateJhJccgl(list))); //计划总里程
  2080 + map.put("cjbc", culateService.culateLbbc(list));//烂班班次
  2081 + map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
  2082 + map.put("ljbc", culateService.culateLjbc(lists, ""));//临加班次
  2083 + double ljgl = culateService.culateLjgl(lists);
  2084 + map.put("addMileage", ljgl); //临加公里
  2085 + map.put("sjbc", culateService.culateSjbc(lists, "") + culateService.culateLjbc(lists, ""));
  2086 + double ksgl = culateService.culateKsgl(list);//子任务空驶公里
  2087 + double jccgl = culateService.culateJccgl(lists);//空驶班次公里
  2088 + map.put("ksgl", ksgl);//空驶公里
  2089 + double sjgl = culateService.culateSjgl(lists);//实际营运公里
  2090 + map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));//总公里
  2091 + map.put("zkslc", Arith.add(ksgl, jccgl));
  2092 + map.put("jcclc", jccgl);
  2093 + map.put("yygl", Arith.add(sjgl, ljgl)); //总营运公里
  2094 + return map;
  2095 + }
  2096 +
  2097 + public Map<String, Object> findKMBC_mh_2(String jGh, String clZbh,
  2098 + String lpName, String date, String line) {
  2099 + Map<String, Object> map = new HashMap<String, Object>();
  2100 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2101 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2102 + for (int i = 0; i < list.size(); i++) {
  2103 + ScheduleRealInfo s = list.get(i);
  2104 + if (s.isDestroy() && s.isReissue()) {
  2105 + s.setRemark("");
  2106 + s.setFcsjActual(s.getDfsj());
  2107 + s.setZdsjActual(s.getZdsj());
  2108 + s.setStatus(2);
  2109 + s.setJhlc(s.getJhlcOrig());
  2110 + }
  2111 +
  2112 + Set<ChildTaskPlan> cts = s.getcTasks();
  2113 + if (cts != null && cts.size() > 0) {
  2114 + lists.add(s);
  2115 + } else {
  2116 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2117 + lists.add(s);
  2118 + }
  2119 + }
  2120 + }
  2121 + double ksgl = culateService.culateKsgl(list);
  2122 + double sjgl = culateService.culateSjgl(lists);
  2123 + double jccgl = culateService.culateJccgl(lists);
  2124 + double ljgl = culateService.culateLjgl(lists);
  2125 +
  2126 + map.put("jhlc", Arith.add(culateService.culateJhgl(list), culateService.culateJhJccgl(list))); //计划里程
  2127 + map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
  2128 + map.put("addMileage", ljgl); //临加公里
  2129 + map.put("yygl", Arith.add(sjgl, ljgl)); //实际公里
  2130 + map.put("ksgl", ksgl);//空驶公里
  2131 + map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));
  2132 +// map.put("realMileage", format.format(yygl + ksgl + jcclc+addMileage));
  2133 + map.put("jhbc", culateService.culateJhbc(list, ""));
  2134 + map.put("cjbc", culateService.culateLbbc(list));
  2135 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2136 + map.put("sjbc", culateService.culateJhbc(lists, "") - culateService.culateLbbc(lists) + culateService.culateLjbc(lists, ""));
  2137 + map.put("jcclc", jccgl);
  2138 + map.put("zkslc", Arith.add(ksgl, jccgl));
  2139 +// map.put("zkslc", format.format(ksgl + jcclc+addMileageJc));
  2140 + return map;
  2141 + }
  2142 +
  2143 +
  2144 + @Override
  2145 + public List<Map<String, Object>> accountPx(String line, String date,
  2146 + String code, String xlName, String px) {
  2147 +// List<Object[]> lsitObj = scheduleRealInfoRepository.accountPx(line, date, code,px);
  2148 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2149 + if (!code.trim().equals("")) {
  2150 + code = BasicData.deviceId2NbbmMap.inverse().get(code);
  2151 + }
  2152 + String fgs = "";
  2153 + List<Line> lineList = lineRepository.findLineByCode(line);
  2154 + if (lineList.size() > 0) {
  2155 + Line l = lineList.get(0);
  2156 + fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
  2157 + }
  2158 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  2159 + String sql = "SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,"
  2160 + + " device_id FROM bsth_v_report_80 WHERE "
  2161 + + " FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = '" + date + "' AND"
  2162 + + " line_id = '" + line + "' and device_id like '%" + code + "%'";
  2163 + Map<String, Object> map;
  2164 + List<Object[]> lsitObj = jdbcTemplate.query(sql,
  2165 + new RowMapper<Object[]>() {
  2166 + @Override
  2167 + public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException {
  2168 + Object[] t = new Object[3];
  2169 + t[0] = rs.getString("request_code");
  2170 + t[1] = rs.getString("TIMESTAMP");
  2171 + t[2] = rs.getString("device_id");
  2172 + return t;
  2173 + }
  2174 + });
  2175 + int i = 1;
  2176 + for (Object[] obj : lsitObj) {
  2177 + if (obj != null) {
  2178 + map = new HashMap<String, Object>();
  2179 + map.put("num", i++);
  2180 + map.put("xlName", xlName);
  2181 + if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
  2182 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  2183 + try {
  2184 + carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
  2185 + } catch (Exception e) {
  2186 + // TODO Auto-generated catch block
  2187 + e.printStackTrace();
  2188 + }
  2189 + if (carDeviceList.size() > 0) {
  2190 + map.put("clZbh", carDeviceList.get(0).getClZbh());
  2191 +
  2192 + } else {
  2193 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2194 + }
  2195 + } else {
  2196 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2197 +
  2198 + }
  2199 + map.put("company", fgs);
  2200 + map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
  2201 + map.put("requestTime", obj[1]);
  2202 + listMap.add(map);
  2203 + }
  2204 + }
  2205 + if (listMap.size() > 1) {
  2206 + if (px.equals("asc")) {
  2207 + Collections.sort(listMap, new AccountMap());
  2208 + } else {
  2209 + Collections.sort(listMap, new AccountMap2());
  2210 + }
  2211 + }
  2212 + return listMap;
  2213 + }
  2214 +
  2215 + @Override
  2216 + public List<Map<String, Object>> account(String line, String date,
  2217 + String code, String xlName, String type) {
  2218 + if (!code.trim().equals("")) {
  2219 + code = BasicData.deviceId2NbbmMap.inverse().get(code);
  2220 + }
  2221 + String fgs = "";
  2222 + List<Line> lineList = lineRepository.findLineByCode(line);
  2223 + if (lineList.size() > 0) {
  2224 + Line l = lineList.get(0);
  2225 + fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
  2226 + }
  2227 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2228 + List<Object[]> lsitObj = scheduleRealInfoRepository.account(line, date, code);
  2229 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  2230 + Map<String, Object> map;
  2231 + int i = 1;
  2232 + for (Object[] obj : lsitObj) {
  2233 + if (obj != null) {
  2234 + map = new HashMap<String, Object>();
  2235 + map.put("num", i++);
  2236 + map.put("xlName", xlName);
  2237 + if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
  2238 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  2239 + try {
  2240 + carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
  2241 + } catch (Exception e) {
  2242 + // TODO Auto-generated catch block
  2243 + e.printStackTrace();
  2244 + }
  2245 + if (carDeviceList.size() > 0) {
  2246 + map.put("clZbh", carDeviceList.get(0).getClZbh());
  2247 +
  2248 + } else {
  2249 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2250 + }
  2251 + } else {
  2252 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2253 +
  2254 + }
  2255 + map.put("company", fgs);
  2256 + map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
  2257 + map.put("requestTime", obj[1]);
  2258 + listMap.add(map);
  2259 + }
  2260 + }
  2261 +
  2262 + if (type != null && type.length() != 0 && type.equals("export")) {
  2263 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  2264 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  2265 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  2266 + Map<String, Object> m = new HashMap<String, Object>();
  2267 + ReportUtils ee = new ReportUtils();
  2268 + Map<String, Object> typeMap = new HashMap<String, Object>();
  2269 + typeMap.put("0xA1", "请求恢复运营");
  2270 + typeMap.put("0xA2", "申请调档");
  2271 + typeMap.put("0xA3", "出场请求");
  2272 + typeMap.put("0xA5", "进场请求");
  2273 + typeMap.put("0xA7", "加油请求");
  2274 + typeMap.put("0x50", "车辆故障");
  2275 + typeMap.put("0x70", "路阻报告");
  2276 + typeMap.put("0x60", "事故报告");
  2277 + typeMap.put("0x11", "扣证纠纷");
  2278 + typeMap.put("0x12", "报警");
  2279 + for (Map<String, Object> map1 : listMap) {
  2280 + map1.put("requestText", typeMap.get(map1.get("requestType")));
  2281 + }
  2282 + try {
  2283 + listI.add(listMap.iterator());
  2284 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  2285 + ee.excelReplace(listI, new Object[]{m}, path + "mould/account.xls",
  2286 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  2287 + + "-" + xlName + "-驾驶员请求台账.xls");
  2288 + } catch (Exception e) {
  2289 + // TODO: handle exception
  2290 + e.printStackTrace();
  2291 + }
  2292 + }
  2293 +
  2294 + return listMap;
  2295 + }
  2296 +
  2297 + @Override
  2298 + public List<SchEditInfoDto> correctForm(String line, String date, String endDate,
  2299 + String lpName, String code, String type, String changType) {
  2300 +
  2301 +// var types = {'DFTZ': '待发调整', 'FCXXWT':'发车信息微调', 'JHLB': '计划烂班', 'CXLB': '撤销烂班',
  2302 +// 'CXZX': '撤销执行', 'CXSF': '撤销实发', 'SFTZ': '实发调整', 'TZRC': '调整人车'};
  2303 + Map<String, Object> map = new HashMap<String, Object>();
  2304 + map.put("DFTZ", "待发调整");
  2305 + map.put("FCXXWT", "发车信息微调");
  2306 + map.put("JHLB", "计划烂班");
  2307 + map.put("CXLB", "撤销烂班");
  2308 + map.put("CXZX", "撤销执行");
  2309 + map.put("CXSF", "撤销实发");
  2310 + map.put("SFTZ", "实发调整");
  2311 + map.put("TZRC", "调整人车");
  2312 +
  2313 + SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm");
  2314 + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2315 + String cont = "";
  2316 + cont = " and xl_bm ='" + line + "'";
  2317 + if (!lpName.equals("")) {
  2318 + cont += " and lp_name = '" + lpName + "'";
  2319 + }
  2320 + if (!code.equals("")) {
  2321 + cont += " and cl_zbh ='" + code + "'";
  2322 + }
  2323 + String sql = "select t1.*, t2.real_exec_date,"
  2324 + + "t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,"
  2325 + + "t2.xl_dir,t2.real_exec_date from (select * from "
  2326 + + "logger_sch_modify where rq BETWEEN ? and ? and line_code=? )"
  2327 + + " t1 INNER JOIN bsth_c_s_sp_info_real t2 on "
  2328 + + "t1.sch_id=t2.id where 1=1 " + cont;
  2329 +
  2330 + List<SchEditInfoDto> list = jdbcTemplate.query(sql,
  2331 + new BeanPropertyRowMapper(SchEditInfoDto.class), date, endDate, line);
  2332 + List<SchEditInfoDto> lists = new ArrayList<SchEditInfoDto>();
  2333 + for (int i = 0; i < list.size(); i++) {
  2334 + Long fcsjs = 0l;
  2335 + Long updsj = 0l;
  2336 + SchEditInfoDto t = list.get(i);
  2337 + if (map.get(t.getType()) != null) {
  2338 +
  2339 + if (changType.equals("")) {
  2340 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2341 + } else {
  2342 + String fcsj = "";
  2343 + String updtime = "";
  2344 + try {
  2345 + fcsj = sdf1.format(sdf1.parse(t.getFcsj()));
  2346 + updtime = sdf1.format(sdf1.parse(t.getTimeStr()));
  2347 + fcsjs = sdf2.parse(t.getRealExecDate() + " " + fcsj).getTime();
  2348 + updsj = sdf2.parse(t.getRq() + " " + updtime).getTime();
  2349 + } catch (ParseException e) {
  2350 + // TODO Auto-generated catch block
  2351 + e.printStackTrace();
  2352 + }
  2353 + if (changType.equals("1")) {
  2354 + if (fcsjs > updsj) {
  2355 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2356 + } else {
  2357 + t.setType2("");
  2358 + }
  2359 + } else if (changType.equals("2")) {
  2360 + if (fcsjs < updsj) {
  2361 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2362 + } else {
  2363 + t.setType2("");
  2364 + }
  2365 + }
  2366 + }
  2367 + } else {
  2368 + t.setType2("");
  2369 + }
  2370 + boolean fage = true;
  2371 + for (int j = 0; j < lists.size(); j++) {
  2372 + SchEditInfoDto s = lists.get(j);
  2373 + if (s.getSchId() == t.getSchId()) {
  2374 + s.setType2(s.getType2() + " " + t.getType2());
  2375 + fage = false;
  2376 + }
  2377 + }
  2378 +
  2379 + if (fage) {
  2380 + if (changType.equals("")) {
  2381 + lists.add(t);
  2382 + } else {
  2383 + if (changType.equals("1")) {
  2384 + if (fcsjs > updsj) {
  2385 + lists.add(t);
  2386 + }
  2387 + } else if (changType.equals("2")) {
  2388 + if (fcsjs < updsj) {
  2389 + lists.add(t);
  2390 + }
  2391 + }
  2392 + }
  2393 + }
  2394 + }
  2395 +
  2396 + if (type != null && type.length() != 0 && type.equals("export")) {
  2397 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  2398 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  2399 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  2400 + Map<String, Object> m = new HashMap<String, Object>();
  2401 + m.put("dates", date);
  2402 + ReportUtils ee = new ReportUtils();
  2403 + List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
  2404 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2405 + for (SchEditInfoDto d : lists) {
  2406 + Map<String, Object> tempMap = new HashMap<String, Object>();
  2407 + tempMap.put("lpName", d.getLpName());
  2408 + tempMap.put("rq", d.getRq());
  2409 + tempMap.put("clZbh", d.getClZbh());
  2410 + tempMap.put("jName", d.getjName() + "/" + d.getjGh());
  2411 + tempMap.put("fcsj", d.getFcsj());
  2412 + tempMap.put("type", d.getType2());
  2413 + tempList.add(tempMap);
  2414 + }
  2415 + try {
  2416 + String dateTime = sdfSimple.format(sdfMonth.parse(date));
  2417 + if(!endDate.equals(date)){
  2418 + dateTime += "-" + sdfSimple.format(sdfMonth.parse(endDate));
  2419 + }
  2420 + String lineName = BasicData.lineCode2NameMap.get(line);
  2421 + listI.add(tempList.iterator());
  2422 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  2423 + ee.excelReplace(listI, new Object[]{m}, path + "mould/correctForm.xls",
  2424 + path + "export/" + dateTime + "-" + lineName + "-修正报表.xls");
  2425 + } catch (Exception e) {
  2426 + // TODO: handle exception
  2427 + e.printStackTrace();
  2428 + }
  2429 +// Map<String, Object> maps = tempList.get(tempList.size() - 1);
  2430 + }
  2431 + return lists;
  2432 + }
  2433 +
  2434 + @Override
  2435 + public List<ScheduleRealInfo> queryListWaybill(String jGh, String clZbh,
  2436 + String lpName, String date, String line) {
  2437 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  2438 + List<ScheduleRealInfo> list = null;
  2439 + list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2440 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2441 + String minfcsj = "02:00";
  2442 + List<Line> lineList = lineRepository.findLineByCode(line);
  2443 + if (lineList.size() > 0) {
  2444 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  2445 + + " id = ("
  2446 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  2447 + + ")";
  2448 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2449 + }
  2450 + String[] minSjs = minfcsj.split(":");
  2451 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  2452 +
  2453 + for (int i = 0; i < list.size(); i++) {
  2454 + ScheduleRealInfo s = list.get(i);
  2455 + if (s.getBcType().equals("out")) {
  2456 + s.setRemark("1");
  2457 + } else if (s.getBcType().equals("in")) {
  2458 + s.setRemark("3");
  2459 + } else {
  2460 + s.setRemark("2");
  2461 + }
  2462 + String[] fcsj = s.getFcsj().split(":");
  2463 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  2464 +
  2465 + Long fscjT = 0L;
  2466 + if (fcsjL < minSj) {
  2467 + Calendar calendar = new GregorianCalendar();
  2468 + calendar.setTime(s.getScheduleDate());
  2469 + calendar.add(calendar.DATE, 1);
  2470 + s.setScheduleDate(calendar.getTime());
  2471 + try {
  2472 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  2473 + } catch (ParseException e) {
  2474 + // TODO Auto-generated catch block
  2475 + e.printStackTrace();
  2476 + }
  2477 +
  2478 + } else {
  2479 + try {
  2480 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  2481 + } catch (ParseException e) {
  2482 + // TODO Auto-generated catch block
  2483 + e.printStackTrace();
  2484 + }
  2485 + ;
  2486 + }
  2487 + s.setFcsjT(fscjT);
  2488 + }
  2489 + Collections.sort(list, new compareFcsjType());
  2490 + for (int i = 0; i < list.size(); i++) {
  2491 + ScheduleRealInfo s = list.get(i);
  2492 + s.setAdjustExps(i + 1 + "");
  2493 + String remarks = "";
  2494 + if (s.getRemarks() != null) {
  2495 + remarks += s.getRemarks();
  2496 + }
  2497 +
  2498 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  2499 + if (!childTaskPlans.isEmpty()) {
  2500 + s.setFcsjActual("");
  2501 + s.setZdsjActual("");
  2502 + s.setJhlc(0.0);
  2503 + }
  2504 +
  2505 + if (s.isDestroy()) {
  2506 + s.setFcsjActual("");
  2507 + s.setZdsjActual("");
  2508 + s.setJhlc(0.0);
  2509 + remarks += "(烂班)";
  2510 + s.setRemarks(remarks);
  2511 + }
  2512 +
  2513 + listSchedule.add(s);
  2514 + //计算营运里程,空驶里程
  2515 + if (!childTaskPlans.isEmpty()) {
  2516 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2517 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  2518 + Collections.sort(listit, new ComparableChild());
  2519 + for (int j = 0; j < listit.size(); j++) {
  2520 + ScheduleRealInfo t = new ScheduleRealInfo();
  2521 + ChildTaskPlan childTaskPlan = listit.get(j);
  2522 + if (childTaskPlan.getCcId() == null) {
  2523 + if (childTaskPlan.isDestroy()) {
  2524 + t.setFcsjActual("");
  2525 + t.setZdsjActual("");
  2526 + t.setJhlc(0.0);
  2527 + } else {
  2528 + t.setFcsjActual(childTaskPlan.getStartDate());
  2529 + t.setZdsjActual(childTaskPlan.getEndDate());
  2530 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  2531 + }
  2532 + t.setFcsj(childTaskPlan.getStartDate());
  2533 + t.setZdsj(childTaskPlan.getEndDate());
  2534 + t.setQdzName(childTaskPlan.getStartStationName());
  2535 + t.setZdzName(childTaskPlan.getEndStationName());
  2536 + t.setRemarks(childTaskPlan.getRemarks());
  2537 + t.setAdjustExps("子");
  2538 + listSchedule.add(t);
  2539 + }
  2540 + }
  2541 + }
  2542 + }
  2543 +
  2544 + return listSchedule;
  2545 + }
  2546 +
  2547 + @Override
  2548 + public List<ScheduleRealInfo> queryListWaybill2(String jName, String clZbh,
  2549 + String lpName, String date, String line) {
  2550 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  2551 + List<ScheduleRealInfo> list = null;
  2552 + list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
  2553 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2554 + String minfcsj = "02:00";
  2555 + List<Line> lineList = lineRepository.findLineByCode(line);
  2556 + if (lineList.size() > 0) {
  2557 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  2558 + + " id = ("
  2559 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  2560 + + ")";
  2561 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2562 + }
  2563 + String[] minSjs = minfcsj.split(":");
  2564 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  2565 +
  2566 + for (int i = 0; i < list.size(); i++) {
  2567 + ScheduleRealInfo s = list.get(i);
  2568 + String[] fcsj = s.getFcsj().split(":");
  2569 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  2570 +
  2571 + Long fscjT = 0L;
  2572 + if (fcsjL < minSj) {
  2573 + Calendar calendar = new GregorianCalendar();
  2574 + calendar.setTime(s.getScheduleDate());
  2575 + calendar.add(calendar.DATE, 1);
  2576 + s.setScheduleDate(calendar.getTime());
  2577 + try {
  2578 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  2579 + } catch (ParseException e) {
  2580 + // TODO Auto-generated catch block
  2581 + e.printStackTrace();
  2582 + }
  2583 +
  2584 + } else {
  2585 + try {
  2586 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  2587 + } catch (ParseException e) {
  2588 + // TODO Auto-generated catch block
  2589 + e.printStackTrace();
  2590 + }
  2591 + ;
  2592 + }
  2593 + s.setFcsjT(fscjT);
  2594 + }
  2595 + Collections.sort(list, new ComparableReal());
  2596 + for (int i = 0; i < list.size(); i++) {
  2597 + ScheduleRealInfo s = list.get(i);
  2598 + s.setAdjustExps(i + 1 + "");
  2599 + String remarks = "";
  2600 + if (s.getRemarks() != null) {
  2601 + remarks += s.getRemarks();
  2602 + }
  2603 +
  2604 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  2605 + if (!childTaskPlans.isEmpty()) {
  2606 + s.setFcsjActual("");
  2607 + s.setZdsjActual("");
  2608 + s.setJhlc(0.0);
  2609 + }
  2610 +
  2611 + if (s.isDestroy()) {
  2612 + if (s.isReissue()) {
  2613 + s.setFcsjActual(s.getDfsj());
  2614 + s.setZdsjActual(s.getZdsj());
  2615 + s.setRemarks("");
  2616 + s.setStatus(2);
  2617 + s.setJhlc(s.getJhlcOrig());
  2618 + } else {
  2619 + s.setFcsjActual("");
  2620 + s.setZdsjActual("");
  2621 + s.setJhlc(0.0);
  2622 + remarks += "(烂班)";
  2623 + s.setRemarks(remarks);
  2624 + }
  2625 + }
  2626 +
  2627 + listSchedule.add(s);
  2628 + //计算营运里程,空驶里程
  2629 + if (!childTaskPlans.isEmpty()) {
  2630 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2631 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  2632 + Collections.sort(listit, new ComparableChild());
  2633 + for (int j = 0; j < listit.size(); j++) {
  2634 + ScheduleRealInfo t = new ScheduleRealInfo();
  2635 + ChildTaskPlan childTaskPlan = listit.get(j);
  2636 + if (childTaskPlan.isDestroy()) {
  2637 + t.setFcsjActual("");
  2638 + t.setZdsjActual("");
  2639 + t.setJhlc(0.0);
  2640 + } else {
  2641 + t.setFcsjActual(childTaskPlan.getStartDate());
  2642 + t.setZdsjActual(childTaskPlan.getEndDate());
  2643 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  2644 + }
  2645 + t.setQdzName(childTaskPlan.getStartStationName());
  2646 + t.setZdzName(childTaskPlan.getEndStationName());
  2647 + t.setRemarks(childTaskPlan.getRemarks());
  2648 + t.setAdjustExps("子");
  2649 + listSchedule.add(t);
  2650 + }
  2651 + }
  2652 + }
  2653 +
  2654 + return listSchedule;
  2655 + }
  2656 +
  2657 + @Override
  2658 + public Map<String, Object> removeChildTask(Long taskId) {
  2659 + Map<String, Object> rs = new HashMap<>();
  2660 + ChildTaskPlan chTask = cTaskPlanRepository.findById(taskId).get();
  2661 +
  2662 + ScheduleRealInfo sch = dayOfSchedule.get(chTask.getSchedule().getId());
  2663 + try {
  2664 +
  2665 + sch.getcTasks().remove(chTask);
  2666 + scheduleRealInfoRepository.save(sch);
  2667 + rs.put("status", ResponseCode.SUCCESS);
  2668 + } catch (Exception e) {
  2669 + logger.error("", e);
  2670 + rs.put("status", ResponseCode.ERROR);
  2671 + }
  2672 + return rs;
  2673 + }
  2674 +
  2675 + @Override
  2676 + public List<Map<String, Object>> statisticsDaily(String line, String date,
  2677 + String xlName, String type) {
  2678 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  2679 + List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  2680 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2681 + for (int i = 0; i < list_s.size(); i++) {
  2682 + ScheduleRealInfo s = list_s.get(i);
  2683 + Set<ChildTaskPlan> cts = s.getcTasks();
  2684 + if (cts != null && cts.size() > 0) {
  2685 + lists.add(s);
  2686 + } else {
  2687 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2688 + lists.add(s);
  2689 + }
  2690 + }
  2691 + }
  2692 + Map<String, Object> map = new HashMap<String, Object>();
  2693 + map.put("xlName", xlName);
  2694 + double jhlc = culateService.culateJhgl(list_s);
  2695 + map.put("jhlc", jhlc);
  2696 + map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
  2697 + double lbgl = culateService.culateLbgl(list_s);
  2698 + map.put("ssgl", lbgl);
  2699 + map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
  2700 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2701 + map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
  2702 + map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
  2703 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2704 + map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
  2705 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
  2706 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
  2707 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
  2708 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
  2709 + double ssgl_pc = culateService.culateCJLC(list_s, "配车");
  2710 + double ssgl_by = culateService.culateCJLC(list_s, "保养");
  2711 + double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
  2712 + double ssgl_qt = culateService.culateCJLC(list_s, "其他");
  2713 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2714 + map.put("ssbc", culateService.culateLbbc(list_s));
  2715 + double ljgl = culateService.culateLjgl(lists);
  2716 + map.put("ljgl", ljgl);
  2717 + map.put("jhbc", culateService.culateJhbc(list_s, ""));
  2718 + map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
  2719 + map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
  2720 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2721 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2722 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2723 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2724 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2725 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2726 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2727 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2728 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2729 + map.put("dtbc", 0);
  2730 + map.put("dtbc_m", 0);
  2731 + map.put("dtbc_a", 0);
  2732 + List<CalcInterval> intervalList=calcIntervalRepository.selectByDateAndLine(line, date,"");
  2733 + if(intervalList.size()>0){
  2734 + CalcInterval c=intervalList.get(0);
  2735 + map.put("djg",c.getDjgAll());
  2736 + map.put("djg_m", c.getDjgZgf());
  2737 + map.put("djg_a", c.getDjgWgf());
  2738 + map.put("djg_time", c.getDjgTime());
  2739 + }else{
  2740 + Map<String, Object> m = culateService.culateDjg(list_s, line);
  2741 + map.put("djg", m.get("djgcsq"));
  2742 + map.put("djg_m", m.get("djgcsz"));
  2743 + map.put("djg_a", m.get("djgcsw"));
  2744 + map.put("djg_time", m.get("djgsj"));
  2745 + }
  2746 +
  2747 + map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
  2748 + lMap.add(map);
  2749 +
  2750 + if (date.length() == 10) {
  2751 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
  2752 + String dbdp = "";
  2753 + try {
  2754 + for (int i = 0; i < list.size(); i++) {
  2755 + DutyEmployee t = list.get(i);
  2756 + if (dbdp.indexOf(t.getuName()) == -1) {
  2757 + if (!(dbdp.length() > 0)) {
  2758 + dbdp = t.getuName();
  2759 + } else {
  2760 + dbdp += "," + t.getuName();
  2761 + }
  2762 + }
  2763 + }
  2764 + } catch (Exception e) {
  2765 + // TODO: handle exception
  2766 + e.printStackTrace();
  2767 + }
  2768 + map.put("dbdp", dbdp);
  2769 + }
  2770 +
  2771 + return lMap;
  2772 + }
  2773 +
  2774 + @Override
  2775 + public List<Map<String, Object>> statisticsDaily_mh_2(String line, String date,
  2776 + String xlName, String type) {
  2777 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  2778 + List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  2779 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2780 + for (int i = 0; i < list_s.size(); i++) {
  2781 + ScheduleRealInfo s = list_s.get(i);
  2782 + if (s.isDestroy() && s.isReissue()) {
  2783 + s.setRemark("");
  2784 + s.setFcsjActual(s.getDfsj());
  2785 + s.setZdsjActual(s.getZdsj());
  2786 + s.setStatus(2);
  2787 + s.setJhlc(s.getJhlcOrig());
  2788 + }
  2789 +
  2790 + Set<ChildTaskPlan> cts = s.getcTasks();
  2791 + if (cts != null && cts.size() > 0) {
  2792 + lists.add(s);
  2793 + } else {
  2794 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2795 + lists.add(s);
  2796 + }
  2797 + }
  2798 + }
  2799 + Map<String, Object> map = new HashMap<String, Object>();
  2800 + map.put("xlName", xlName);
  2801 + double jhlc = culateService.culateJhgl(list_s);
  2802 + map.put("jhlc", jhlc);
  2803 + map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
  2804 + double lbgl = culateService.culateLbgl(list_s);
  2805 + map.put("ssgl", lbgl);
  2806 + map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
  2807 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2808 + map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
  2809 + map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
  2810 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2811 + map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
  2812 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
  2813 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
  2814 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
  2815 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
  2816 + double ssgl_pc = culateService.culateCJLC(list_s, "配车");
  2817 + double ssgl_by = culateService.culateCJLC(list_s, "保养");
  2818 + double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
  2819 + double ssgl_qt = culateService.culateCJLC(list_s, "其他");
  2820 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2821 + map.put("ssbc", culateService.culateLbbc(list_s));
  2822 + double ljgl = culateService.culateLjgl(lists);
  2823 + map.put("ljgl", ljgl);
  2824 + map.put("jhbc", culateService.culateJhbc(list_s, ""));
  2825 + map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
  2826 + map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
  2827 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2828 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2829 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2830 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2831 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2832 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2833 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2834 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2835 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2836 + map.put("dtbc", 0);
  2837 + map.put("dtbc_m", 0);
  2838 + map.put("dtbc_a", 0);
  2839 + map.put("djg", 0);
  2840 + map.put("djg_m", 0);
  2841 + map.put("djg_a", 0);
  2842 + map.put("djg_time", 0);
  2843 + map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
  2844 + lMap.add(map);
  2845 + return lMap;
  2846 + }
  2847 +
  2848 + public final Map<String, Object> staticTj(List<ScheduleRealInfo> list,Map<String, Object> m) {
  2849 +
  2850 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2851 + for (int i = 0; i < list.size(); i++) {
  2852 + ScheduleRealInfo s = list.get(i);
  2853 + Set<ChildTaskPlan> cts = s.getcTasks();
  2854 + if (cts != null && cts.size() > 0) {
  2855 + lists.add(s);
  2856 + } else {
  2857 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2858 + lists.add(s);
  2859 + }
  2860 + }
  2861 + }
  2862 + Map<String, Object> map = new HashMap<String, Object>();
  2863 + if (list.size() > 0) {
  2864 + map.put("fgsBm", list.get(0).getFgsBm());
  2865 + map.put("xlBm", list.get(0).getXlBm());
  2866 + map.put("xlName", list.get(0).getXlName());
  2867 + map.put("fgsName", list.get(0).getFgsName());
  2868 + try {
  2869 + map.put("xlNamePy", PinyinHelper.convertToPinyinString(list.get(0).getFgsBm()+list.get(0).getXlName(), "", PinyinFormat.WITHOUT_TONE));
  2870 + } catch (PinyinException e) {
  2871 + // TODO Auto-generated catch block
  2872 + e.printStackTrace();
  2873 + }
  2874 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  2875 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  2876 + map.put("jhlc", jhyygl);
  2877 + map.put("jcclc", jhjcclc);
  2878 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  2879 + double ljks=culateService.culateLjksgl(lists);
  2880 + map.put("ljks", ljks);
  2881 + double ljgl = culateService.culateLjgl(lists);
  2882 + double sjyygl = culateService.culateSjgl(lists);
  2883 + double zyygl = Arith.add(sjyygl, ljgl);
  2884 +
  2885 + double sjjccgl = culateService.culateJccgl(lists);
  2886 + double sjksgl = culateService.culateKsgl(lists);
  2887 + double zksgl = Arith.add(sjjccgl, sjksgl);
  2888 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  2889 + map.put("sjgl", zyygl);
  2890 + map.put("sjksgl", zksgl);
  2891 + double ssgl = culateService.culateLbgl(list);
  2892 + map.put("ssgl", ssgl);
  2893 +
  2894 + //计划+临加-少驶=实驶
  2895 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  2896 + if (jl == zyygl) {
  2897 + map.put("zt", 0);
  2898 + } else {
  2899 + map.put("zt", 1);
  2900 + }
  2901 +
  2902 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  2903 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  2904 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  2905 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  2906 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  2907 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  2908 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  2909 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  2910 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  2911 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  2912 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  2913 + double ssgl_by = culateService.culateCJLC(list, "保养");
  2914 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  2915 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  2916 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2917 + map.put("ssbc", culateService.culateLbbc(list));
  2918 + map.put("ljgl", ljgl);
  2919 + map.put("jhbc", culateService.culateJhbc(list, ""));
  2920 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  2921 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  2922 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2923 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2924 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2925 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2926 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2927 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2928 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2929 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2930 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2931 + map.put("dtbc", 0);
  2932 + map.put("dtbc_m", 0);
  2933 + map.put("dtbc_a", 0);
  2934 + if(m.get("xl")==null){
  2935 + Map<String, Object> m_ = culateService.culateDjg(lists, list.get(0).getXlBm());
  2936 + map.put("djg", m_.get("djgcsq"));
  2937 + map.put("djg_m", m_.get("djgcsz"));
  2938 + map.put("djg_a", m_.get("djgcsw"));
  2939 + map.put("djg_time", m_.get("djgsj"));
  2940 + }else{
  2941 + map.put("djg", m.get("djgAll")==null?"0":m.get("djgAll"));
  2942 + map.put("djg_m", m.get("djgZgf")==null?"0":m.get("djgZgf"));
  2943 + map.put("djg_a", m.get("djgWgf")==null?"0":m.get("djgWgf"));
  2944 + map.put("djg_time", m.get("djgTime")==null?"0":m.get("djgTime"));
  2945 + }
  2946 + }
  2947 + return map;
  2948 + }
  2949 +
  2950 + @Override
  2951 + public List<Map<String, Object>> statisticsDailyTj(String gsdm, String fgsdm, String line, String date, String date2,
  2952 + String xlName, String type,String nature) {
  2953 + List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
  2954 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
  2955 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2956 + List<Object[]> listInterval=new ArrayList<Object[]>();
  2957 + line = line.trim();
  2958 + if (line.equals("")) {
  2959 + //查询所有线路
  2960 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  2961 + listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
  2962 + } else {
  2963 + //查询单条线路
  2964 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
  2965 + listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
  2966 + }
  2967 + Map<String, Map<String,Object>> mapInterval=new HashMap<String, Map<String,Object>>();
  2968 + for (int i = 0; i < listInterval.size(); i++) {
  2969 + Object[] interval=listInterval.get(i);
  2970 + String gs=interval[0].toString();
  2971 + String fgs=interval[1].toString();
  2972 + String xl=interval[2].toString();
  2973 + Map<String, Object> m=new HashMap<String,Object>();
  2974 + m.put("gs", gs);
  2975 + m.put("fgs", fgs);
  2976 + m.put("xl", xl);
  2977 + m.put("djgAll", interval[3]);
  2978 + m.put("djgZgf", interval[6]);
  2979 + m.put("djgWgf", interval[7]);
  2980 + m.put("djgTime", interval[8]);
  2981 + mapInterval.put(gs+"-"+fgs+"-"+xl, m);
  2982 + }
  2983 + Map<String, Boolean> lineMap=lineService.lineNature();
  2984 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  2985 + for (int i = 0; i < listAll.size(); i++) {
  2986 + ScheduleRealInfo s=listAll.get(i);
  2987 + if (nature.equals("0")) {
  2988 + list.add(s);
  2989 + }else if(nature.equals("1")){
  2990 + if(lineMap.get(s.getXlBm())){
  2991 + list.add(s);
  2992 + }
  2993 + }else{
  2994 + if(!lineMap.get(s.getXlBm())){
  2995 + list.add(s);
  2996 + }
  2997 + }
  2998 + }
  2999 + for (int i = 0; i < list.size(); i++) {
  3000 + ScheduleRealInfo s = list.get(i);
  3001 + Set<ChildTaskPlan> cts = s.getcTasks();
  3002 + if (cts != null && cts.size() > 0) {
  3003 + list_s.add(s);
  3004 + } else {
  3005 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  3006 + list_s.add(s);
  3007 + }
  3008 + }
  3009 + }
  3010 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  3011 + for (int i = 0; i < list.size(); i++) {
  3012 + if (i < list.size() - 1) {
  3013 + if ((list.get(i+1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
  3014 + lists.add(list.get(i));
  3015 + } else {
  3016 + lists.add(list.get(i));
  3017 + Map<String, Object> mm=new HashMap<String,Object>();
  3018 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3019 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3020 + }
  3021 + Map<String, Object> map = staticTj(lists,mm);
  3022 + lMap.add(map);
  3023 + lists = new ArrayList<ScheduleRealInfo>();
  3024 + }
  3025 + } else {
  3026 + if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
  3027 + lists.add(list.get(i));
  3028 + Map<String, Object> mm=new HashMap<String,Object>();
  3029 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3030 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3031 + }
  3032 + Map<String, Object> map = staticTj(lists,mm);
  3033 + lMap.add(map);
  3034 + } else {
  3035 + lists = new ArrayList<ScheduleRealInfo>();
  3036 + lists.add(list.get(i));
  3037 + Map<String, Object> mm=new HashMap<String,Object>();
  3038 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3039 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3040 + }
  3041 + Map<String, Object> map = staticTj(lists,mm);
  3042 + lMap.add(map);
  3043 + }
  3044 + }
  3045 + }
  3046 + /*if(!line.equals("")){
  3047 + List<Line> l=lineRepository.findLineByCode(line);
  3048 + if(l.size()>0)
  3049 + lMap.get(0).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
  3050 + }*/
  3051 + Collections.sort(lMap, new AccountXlbm());
  3052 + Map<String, Object> map = new HashMap<String, Object>();
  3053 + map.put("xlName", "合计");
  3054 + map.put("fgsName", "");
  3055 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  3056 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  3057 + map.put("jhlc", jhyygl);
  3058 + map.put("jcclc", jhjcclc);
  3059 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  3060 +
  3061 + double ljgl = culateService.culateLjgl(list_s);
  3062 + double sjyygl = culateService.culateSjgl(list_s);
  3063 + double zyygl = Arith.add(sjyygl, ljgl);
  3064 + double ljks=culateService.culateLjksgl(list_s);
  3065 + map.put("ljks", ljks);
  3066 + double sjjccgl = culateService.culateJccgl(list_s);
  3067 + double sjksgl = culateService.culateKsgl(list_s);
  3068 + double zksgl = Arith.add(sjjccgl, sjksgl);
  3069 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  3070 + map.put("sjgl", zyygl);
  3071 + map.put("sjksgl", zksgl);
  3072 +
  3073 + double ssgl = culateService.culateLbgl(list);
  3074 + map.put("ssgl", ssgl);
  3075 + //计划+临加-少驶=实驶
  3076 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  3077 + if (jl == zyygl) {
  3078 + map.put("zt", 0);
  3079 + } else {
  3080 + map.put("zt", 1);
  3081 + }
  3082 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  3083 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  3084 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  3085 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  3086 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  3087 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  3088 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  3089 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  3090 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  3091 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  3092 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  3093 + double ssgl_by = culateService.culateCJLC(list, "保养");
  3094 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  3095 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  3096 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  3097 +
  3098 + map.put("ssbc", culateService.culateLbbc(list));
  3099 + map.put("ljgl", ljgl);
  3100 + map.put("jhbc", culateService.culateJhbc(list, ""));
  3101 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  3102 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  3103 + map.put("sjbc", culateService.culateSjbc(list_s, ""));
  3104 + map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
  3105 + map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
  3106 + map.put("ljbc", culateService.culateLjbc(list_s, ""));
  3107 + map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
  3108 + map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
  3109 + map.put("fzbc", culateService.culateFzbc(list_s, ""));
  3110 + map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
  3111 + map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
  3112 + map.put("dtbc", 0);
  3113 + map.put("dtbc_m", 0);
  3114 + map.put("dtbc_a", 0);
  3115 + if (list.size() > 0) {
  3116 + int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
  3117 + for (Map<String, Object> m : lMap) {
  3118 + if (m.containsKey("djg") && m.get("djg") != null)
  3119 + djg += Integer.valueOf(m.get("djg").toString());
  3120 + if (m.containsKey("djg_m") && m.get("djg_m") != null)
  3121 + djg_m += Integer.valueOf(m.get("djg_m").toString());
  3122 + if (m.containsKey("djg_a") && m.get("djg_a") != null)
  3123 + djg_a += Integer.valueOf(m.get("djg_a").toString());
  3124 + if (m.containsKey("djg_time") && m.get("djg_time") != null) {
  3125 + int t = Integer.valueOf(m.get("djg_time").toString());
  3126 + if (t > djg_time)
  3127 + djg_time = t;
  3128 + }
  3129 + }
  3130 + map.put("djg", djg);
  3131 + map.put("djg_m", djg_m);
  3132 + map.put("djg_a", djg_a);
  3133 + map.put("djg_time", djg_time);
  3134 +// Map<String, Object> m_=culateService.culateDjg(list_s, list.get(0).getXlBm());
  3135 +// map.put("djg", m_.get("djgcsq"));
  3136 +// map.put("djg_m", m_.get("djgcsz"));
  3137 +// map.put("djg_a", m_.get("djgcsw"));
  3138 +// map.put("djg_time", m_.get("djgsj"));
  3139 + } else {
  3140 + map.put("djg", "0");
  3141 + map.put("djg_m", "0");
  3142 + map.put("djg_a", "0");
  3143 + map.put("djg_time", "0");
  3144 + }
  3145 + lMap.add(map);
  3146 + if (type != null && type.length() != 0 && type.equals("export")) {
  3147 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  3148 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  3149 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  3150 + Map<String, Object> m = new HashMap<String, Object>();
  3151 + m.put("date", date + "至" + date2);
  3152 + ReportUtils ee = new ReportUtils();
  3153 + try {
  3154 + String dateTime = "";
  3155 + if (date.equals(date2)) {
  3156 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  3157 + } else {
  3158 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  3159 + + "-" + sdfSimple.format(sdfMonth.parse(date2));
  3160 + }
  3161 + listI.add(lMap.iterator());
  3162 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  3163 + ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",
  3164 + path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
  3165 + } catch (Exception e) {
  3166 + // TODO: handle exception
  3167 + //e.printStackTrace();
  3168 + logger.info("", e);
  3169 + }
  3170 + }
  3171 +
  3172 + return lMap;
  3173 + }
  3174 +
  3175 + @Override
  3176 + public List<Map<String, Object>> statisticsDailyTjHb(String gsdm, String fgsdm, String line, String date, String date2,
  3177 + String xlName, String type,String nature) {
  3178 + List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
  3179 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
  3180 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  3181 + List<Object[]> listInterval=new ArrayList<Object[]>();
  3182 +
  3183 + line = line.trim();
  3184 + if (line.equals("")) {
  3185 + //查询所有线路
  3186 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  3187 + listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
  3188 + } else {
  3189 + //查询单条线路
  3190 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
  3191 + listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
  3192 + }
  3193 + Map<String, Map<String,Object>> mapInterval=new HashMap<>();
  3194 + for (int i = 0; i < listInterval.size(); i++) {
  3195 + Object[] interval=listInterval.get(i);
  3196 + String gs=interval[0].toString();
  3197 + String fgs=interval[1].toString();
  3198 + String xl=interval[2].toString();
  3199 + Map<String, Object> m=new HashMap<String,Object>();
  3200 + m.put("gs", gs);
  3201 + m.put("fgs", fgs);
  3202 + m.put("xl", xl);
  3203 + m.put("djgAll", interval[3]);
  3204 + m.put("djgZgf", interval[6]);
  3205 + m.put("djgWgf", interval[7]);
  3206 + m.put("djgTime", interval[8]);
  3207 + mapInterval.put(gs+"-"+fgs+"-"+xl, m);
  3208 + }
  3209 +
  3210 + Map<String, Boolean> lineMap=lineService.lineNature();
  3211 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  3212 + for (int i = 0; i < listAll.size(); i++) {
  3213 + ScheduleRealInfo s=listAll.get(i);
  3214 + if (nature.equals("0")) {
  3215 + list.add(s);
  3216 + }else if(nature.equals("1")){
  3217 + if(lineMap.get(s.getXlBm())){
  3218 + list.add(s);
  3219 + }
  3220 + }else{
  3221 + if(!lineMap.get(s.getXlBm())){
  3222 + list.add(s);
  3223 + }
  3224 + }
  3225 + }
  3226 + for (int i = 0; i < list.size(); i++) {
  3227 + ScheduleRealInfo s = list.get(i);
  3228 + Set<ChildTaskPlan> cts = s.getcTasks();
  3229 + if (cts != null && cts.size() > 0) {
  3230 + list_s.add(s);
  3231 + } else {
  3232 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  3233 + list_s.add(s);
  3234 + }
  3235 + }
  3236 + }
  3237 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  3238 + for (int i = 0; i < list.size(); i++) {
  3239 + if (i < list.size() - 1) {
  3240 + if ((list.get(i + 1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
  3241 + lists.add(list.get(i));
  3242 + } else {
  3243 + lists.add(list.get(i));
  3244 + Map<String, Object> mm=new HashMap<String,Object>();
  3245 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3246 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3247 + }
  3248 + Map<String, Object> map = staticTj(lists,mm);
  3249 + lMap.add(map);
  3250 + lists = new ArrayList<ScheduleRealInfo>();
  3251 + }
  3252 + } else {
  3253 + if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
  3254 + lists.add(list.get(i));
  3255 + Map<String, Object> mm=new HashMap<String,Object>();
  3256 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3257 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3258 + }
  3259 + Map<String, Object> map = staticTj(lists,mm);
  3260 + lMap.add(map);
  3261 + } else {
  3262 + lists = new ArrayList<ScheduleRealInfo>();
  3263 + lists.add(list.get(i));
  3264 + Map<String, Object> mm=new HashMap<String,Object>();
  3265 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3266 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3267 + }
  3268 + Map<String, Object> map = staticTj(lists,mm);
  3269 + lMap.add(map);
  3270 + }
  3271 + }
  3272 + }
  3273 +
  3274 + Collections.sort(lMap, new AccountXlbm());
  3275 + Map<String, Object> map = new HashMap<String, Object>();
  3276 + map.put("xlBm", "hj");
  3277 + map.put("xlName", "合计");
  3278 + map.put("fgsBm", "");
  3279 + map.put("fgsName", "");
  3280 + map.put("gsBm", "");
  3281 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  3282 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  3283 + map.put("jhlc", jhyygl);
  3284 + map.put("jcclc", jhjcclc);
  3285 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  3286 +
  3287 + double ljgl = culateService.culateLjgl(list_s);
  3288 + double sjyygl = culateService.culateSjgl(list_s);
  3289 + double zyygl = Arith.add(sjyygl, ljgl);
  3290 + double ljks=culateService.culateLjksgl(list_s);
  3291 + map.put("ljks", ljks);
  3292 + double sjjccgl = culateService.culateJccgl(list_s);
  3293 + double sjksgl = culateService.culateKsgl(list_s);
  3294 + double zksgl = Arith.add(sjjccgl, sjksgl);
  3295 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  3296 + map.put("sjgl", zyygl);
  3297 + map.put("sjksgl", zksgl);
  3298 +
  3299 + double ssgl = culateService.culateLbgl(list);
  3300 + map.put("ssgl", ssgl);
  3301 + //计划+临加-少驶=实驶
  3302 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  3303 + if (jl == zyygl) {
  3304 + map.put("zt", 0);
  3305 + } else {
  3306 + map.put("zt", 1);
  3307 + }
  3308 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  3309 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  3310 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  3311 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  3312 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  3313 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  3314 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  3315 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  3316 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  3317 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  3318 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  3319 + double ssgl_by = culateService.culateCJLC(list, "保养");
  3320 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  3321 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  3322 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  3323 +
  3324 + map.put("ssbc", culateService.culateLbbc(list));
  3325 + map.put("ljgl", ljgl);
  3326 + map.put("jhbc", culateService.culateJhbc(list, ""));
  3327 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  3328 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  3329 + map.put("sjbc", culateService.culateSjbc(list_s, ""));
  3330 + map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
  3331 + map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
  3332 + map.put("ljbc", culateService.culateLjbc(list_s, ""));
  3333 + map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
  3334 + map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
  3335 + map.put("fzbc", culateService.culateFzbc(list_s, ""));
  3336 + map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
  3337 + map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
  3338 + map.put("dtbc", 0);
  3339 + map.put("dtbc_m", 0);
  3340 + map.put("dtbc_a", 0);
  3341 + if (list.size() > 0) {
  3342 + int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
  3343 + for (Map<String, Object> m : lMap) {
  3344 + if (m.containsKey("djg") && m.get("djg") != null)
  3345 + djg += Integer.valueOf(m.get("djg").toString());
  3346 + if (m.containsKey("djg_m") && m.get("djg_m") != null)
  3347 + djg_m += Integer.valueOf(m.get("djg_m").toString());
  3348 + if (m.containsKey("djg_a") && m.get("djg_a") != null)
  3349 + djg_a += Integer.valueOf(m.get("djg_a").toString());
  3350 + if (m.containsKey("djg_time") && m.get("djg_time") != null) {
  3351 + int t = Integer.valueOf(m.get("djg_time").toString());
  3352 + if (t > djg_time)
  3353 + djg_time = t;
  3354 + }
  3355 + }
  3356 + map.put("djg", djg);
  3357 + map.put("djg_m", djg_m);
  3358 + map.put("djg_a", djg_a);
  3359 + map.put("djg_time", djg_time);
  3360 + } else {
  3361 + map.put("djg", "0");
  3362 + map.put("djg_m", "0");
  3363 + map.put("djg_a", "0");
  3364 + map.put("djg_time", "0");
  3365 + }
  3366 + lMap.add(map);
  3367 + return lMap;
  3368 + }
  3369 +
  3370 + @Override
  3371 + public Map<String, Object> scheduleDaily(String line, String date) {
  3372 + Map<String, String> tempMap = null;
  3373 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
  3374 + Map<String, Object> map = new HashMap<String, Object>();
  3375 + Double jhlc = 0.00;
  3376 + 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;
  3377 + int jhbc = 0;
  3378 + for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
  3379 + if (scheduleRealInfo != null) {
  3380 + //计算里程(包括子任务)
  3381 + jhlc += scheduleRealInfo.getJhlc();
  3382 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  3383 + if (!childTaskPlans.isEmpty()) {
  3384 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  3385 + while (it.hasNext()) {
  3386 + ChildTaskPlan childTaskPlan = it.next();
  3387 + //是否烂班,烂班就是少驶
  3388 + if (!childTaskPlan.isDestroy()) {
  3389 + sjgl += childTaskPlan.getMileage();
  3390 + } else {
  3391 + ssgl += childTaskPlan.getMileage();
  3392 + if (childTaskPlan.getDestroyReason().equals("路阻")) {
  3393 + ssgl_lz += childTaskPlan.getMileage();
  3394 + } else if (childTaskPlan.getDestroyReason().equals("吊慢")) {
  3395 + ssgl_dm += childTaskPlan.getMileage();
  3396 + } else if (childTaskPlan.getDestroyReason().equals("故障")) {
  3397 + ssgl_gz += childTaskPlan.getMileage();
  3398 + } else if (childTaskPlan.getDestroyReason().equals("纠纷")) {
  3399 + ssgl_jf += childTaskPlan.getMileage();
  3400 + } else if (childTaskPlan.getDestroyReason().equals("肇事")) {
  3401 + ssgl_zs += childTaskPlan.getMileage();
  3402 + } else if (childTaskPlan.getDestroyReason().equals("缺人")) {
  3403 + ssgl_qr += childTaskPlan.getMileage();
  3404 + } else if (childTaskPlan.getDestroyReason().equals("缺车")) {
  3405 + ssgl_qc += childTaskPlan.getMileage();
  3406 + } else if (childTaskPlan.getDestroyReason().equals("客稀")) {
  3407 + ssgl_kx += childTaskPlan.getMileage();
  3408 + } else if (childTaskPlan.getDestroyReason().equals("气候")) {
  3409 + ssgl_qh += childTaskPlan.getMileage();
  3410 + } else if (childTaskPlan.getDestroyReason().equals("援外")) {
  3411 + ssgl_yw += childTaskPlan.getMileage();
  3412 + } else {
  3413 + ssgl_other += childTaskPlan.getMileage();
  3414 + }
  3415 + }
  3416 + //临加公里
  3417 + if (childTaskPlan.getType1().equals("临加")) {
  3418 + ljgl += childTaskPlan.getMileage();
  3419 + }
  3420 + }
  3421 + }
  3422 + //班次
  3423 + scheduleRealInfo.getFcsjT();
  3424 + scheduleRealInfo.getFcsjActualTime();
  3425 + }
  3426 + }
  3427 + map.put("jhlc", jhlc);
  3428 + map.put("sjgl", sjgl);
  3429 + map.put("ssgl", ssgl);
  3430 + map.put("ssgl_lz", ssgl_lz);
  3431 + map.put("ssgl_dm", ssgl_dm);
  3432 + map.put("ssgl_gz", ssgl_gz);
  3433 + map.put("ssgl_jf", ssgl_jf);
  3434 + map.put("ssgl_zs", ssgl_zs);
  3435 + map.put("ssgl_qr", ssgl_qr);
  3436 + map.put("ssgl_qc", ssgl_qc);
  3437 + map.put("ssgl_kx", ssgl_kx);
  3438 + map.put("ssgl_qh", ssgl_qh);
  3439 + map.put("ssgl_yw", ssgl_yw);
  3440 + map.put("ssgl_other", ssgl_other);
  3441 + map.put("ljgl", ljgl);
  3442 +
  3443 + map.put("jhbc", scheduleRealInfos.size());
  3444 + return null;
  3445 + }
  3446 +
  3447 + @Override
  3448 + public int countByLineCodeAndDate(String xlBm, String schDate) {
  3449 + return scheduleRealInfoRepository.countByLineCodeAndDate(xlBm + "", schDate);
  3450 + }
  3451 +
  3452 + @Override
  3453 + public List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate) {
  3454 + return scheduleRealInfoRepository.findByLineCodeAndDate(xlBm + "", schDate);
  3455 + }
  3456 +
  3457 + @Override
  3458 + public void deleteByLineCodeAndDate(String xlBm, String schDate) {
  3459 + scheduleRealInfoRepository.deleteByLineCodeAndDate(xlBm + "", schDate);
  3460 + }
  3461 +
  3462 + @Override
  3463 + public Long getMaxId() {
  3464 + return scheduleRealInfoRepository.getMaxId();
  3465 + }
  3466 +
  3467 + @Override
  3468 + public List<ScheduleRealInfo> realScheduleList(String line, String date) {
  3469 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3470 + String lpName = "lpName";
  3471 + String zdsj = "";
  3472 + String zdsjActual = "";
  3473 + String zdsj1 = "";
  3474 + String zdsjActual1 = "";
  3475 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
  3476 +
  3477 + /*
  3478 + * 对计划发车时间相同的班次进行排序 out最前 in最后
  3479 + */
  3480 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  3481 + SimpleDateFormat sdfnyr =new SimpleDateFormat("yyyy-MM-dd");
  3482 + String minfcsj = "02:00";
  3483 + List<Line> lineList = lineRepository.findLineByCode(line);
  3484 + if (lineList.size() > 0) {
  3485 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  3486 + + " id = ("
  3487 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  3488 + + ")";
  3489 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  3490 + }
  3491 + String[] minSjs = minfcsj.split(":");
  3492 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  3493 + for (int i = 0; i < listInfo.size(); i++) {
  3494 + ScheduleRealInfo s = listInfo.get(i);
  3495 + if (s.getBcType().equals("out")) {
  3496 + s.setRemark("1");
  3497 + } else if (s.getBcType().equals("in")) {
  3498 + s.setRemark("3");
  3499 + } else {
  3500 + s.setRemark("2");
  3501 + }
  3502 + String[] fcsj = s.getFcsj().split(":");
  3503 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3504 +
  3505 + Long fscjT = 0L;
  3506 + if (fcsjL < minSj) {
  3507 + Calendar calendar = new GregorianCalendar();
  3508 + calendar.setTime(s.getScheduleDate());
  3509 + calendar.add(calendar.DATE, 1);
  3510 + Date date_sch= calendar.getTime();
  3511 + try {
  3512 + fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
  3513 + } catch (ParseException e) {
  3514 + // TODO Auto-generated catch block
  3515 + e.printStackTrace();
  3516 + }
  3517 +
  3518 + } else {
  3519 + try {
  3520 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3521 + } catch (ParseException e) {
  3522 + // TODO Auto-generated catch block
  3523 + e.printStackTrace();
  3524 + };
  3525 + }
  3526 + s.setFcsjT(fscjT);
  3527 + }
  3528 + List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
  3529 + listInfo2.addAll(listInfo);
  3530 + Collections.sort(listInfo, new compareLpFcsjType());
  3531 + Collections.sort(listInfo2,new compareDirLpFcsjType());
  3532 + for (int i = 0; i < listInfo.size(); i++) {
  3533 + ScheduleRealInfo t = listInfo.get(i);
  3534 + if (!lpName.equals(t.getLpName())) {
  3535 + zdsjActual = t.getZdsjActual();
  3536 + zdsj = t.getZdsj();
  3537 + t.setZdsjActual("");
  3538 + t.setZdsj("");
  3539 + } else {
  3540 + zdsj1 = t.getZdsj();
  3541 + zdsjActual1 = t.getZdsjActual();
  3542 + t.setZdsjActual(zdsjActual);
  3543 + t.setZdsj(zdsj);
  3544 + zdsj = zdsj1;
  3545 + zdsjActual = zdsjActual1;
  3546 + }
  3547 + lpName = t.getLpName();
  3548 + list.add(t);
  3549 + }
  3550 +/*
  3551 + List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleDdrb2(line, date);
  3552 + for (int i = 0; i < listInfo2.size(); i++) {
  3553 + ScheduleRealInfo s = listInfo2.get(i);
  3554 + if (s.getBcType().equals("out")) {
  3555 + s.setRemark("1");
  3556 + } else if (s.getBcType().equals("in")) {
  3557 + s.setRemark("3");
  3558 + } else {
  3559 + s.setRemark("2");
  3560 + }
  3561 + String[] fcsj = s.getFcsj().split(":");
  3562 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3563 +
  3564 + Long fscjT = 0L;
  3565 + if (fcsjL < minSj) {
  3566 + Calendar calendar = new GregorianCalendar();
  3567 + calendar.setTime(s.getScheduleDate());
  3568 + calendar.add(calendar.DATE, 1);
  3569 + s.setScheduleDate(calendar.getTime());
  3570 + try {
  3571 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  3572 + } catch (ParseException e) {
  3573 + // TODO Auto-generated catch block
  3574 + e.printStackTrace();
  3575 + }
  3576 +
  3577 + } else {
  3578 + try {
  3579 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3580 + } catch (ParseException e) {
  3581 + // TODO Auto-generated catch block
  3582 + e.printStackTrace();
  3583 + }
  3584 + ;
  3585 + }
  3586 + s.setFcsjT(fscjT);
  3587 + }*/
  3588 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3589 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3590 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3591 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3592 + if (listInfo2.size() > 0) {
  3593 + int a = listInfo2.size() % 3;
  3594 + int b = listInfo2.size() / 3;
  3595 + int x = 0, y = 0;
  3596 + if (a == 2) {
  3597 + x = b + 1;
  3598 + y = x * 2;
  3599 + } else if (a == 1) {
  3600 + x = b + 1;
  3601 + y = x * 2 - 1;
  3602 + } else {
  3603 + x = b;
  3604 + y = 2 * x;
  3605 +
  3606 + }
  3607 + for (int i = 0; i < listInfo2.size(); i++) {
  3608 + ScheduleRealInfo s = listInfo2.get(i);
  3609 + if (i + 1 <= x) {
  3610 + xList.add(s);
  3611 + } else if ((i + 1) > x && (i + 1) <= y) {
  3612 + yList.add(s);
  3613 + } else {
  3614 + zList.add(s);
  3615 + }
  3616 + }
  3617 + for (int i = 0; i < x; i++) {
  3618 + newList.add(xList.get(i));
  3619 + if (yList.size() > i) {
  3620 + newList.add(yList.get(i));
  3621 + } else {
  3622 + newList.add(new ScheduleRealInfo());
  3623 + }
  3624 + if (zList.size() > i) {
  3625 + newList.add(zList.get(i));
  3626 + } else {
  3627 + newList.add(new ScheduleRealInfo());
  3628 + }
  3629 +
  3630 + }
  3631 + }
  3632 + for (int i = 0; i < newList.size(); i++) {
  3633 + ScheduleRealInfo t1 = newList.get(i);
  3634 + for (int j = 0; j < list.size(); j++) {
  3635 + ScheduleRealInfo t2 = list.get(j);
  3636 + if (t1.getId() == t2.getId()) {
  3637 + t1 = t2;
  3638 + }
  3639 + }
  3640 + }
  3641 +
  3642 + for (int i = 0; i < newList.size(); i++) {
  3643 + ScheduleRealInfo t1 = newList.get(i);
  3644 + String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
  3645 + if (reamrks1.length() > 4) {
  3646 + t1.setRemarks(reamrks1.substring(0, 4));
  3647 + t1.setRemark(reamrks1);
  3648 + } else {
  3649 + t1.setRemark(reamrks1);
  3650 + }
  3651 + }
  3652 + return newList;
  3653 + }
  3654 +
  3655 + @Override
  3656 + public List<ScheduleRealInfo> realScheduleList_zrw(String line, String date) {
  3657 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3658 + String lpName = "lpName";
  3659 + String zdsj = "";
  3660 + String zdsjActual = "";
  3661 + String zdsj1 = "";
  3662 + String zdsjActual1 = "";
  3663 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
  3664 +
  3665 + /*
  3666 + * 对计划发车时间相同的班次进行排序 out最前 in最后
  3667 + */
  3668 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  3669 + SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
  3670 +
  3671 + String minfcsj = "02:00";
  3672 + List<Line> lineList = lineRepository.findLineByCode(line);
  3673 + if (lineList.size() > 0) {
  3674 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  3675 + + " id = ("
  3676 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  3677 + + ")";
  3678 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  3679 + }
  3680 + String[] minSjs = minfcsj.split(":");
  3681 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  3682 + for (int i = 0; i < listInfo.size(); i++) {
  3683 + ScheduleRealInfo s = listInfo.get(i);
  3684 + if (s.getBcType().equals("out")) {
  3685 + s.setRemark("1");
  3686 + } else if (s.getBcType().equals("in")) {
  3687 + s.setRemark("3");
  3688 + } else {
  3689 + s.setRemark("2");
  3690 + }
  3691 + String[] fcsj = s.getFcsj().split(":");
  3692 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3693 +
  3694 + Long fscjT = 0L;
  3695 + if (fcsjL < minSj) {
  3696 + Calendar calendar = new GregorianCalendar();
  3697 + calendar.setTime(s.getScheduleDate());
  3698 + calendar.add(calendar.DATE, 1);
  3699 + Date date_sch=calendar.getTime();
  3700 + try {
  3701 + fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
  3702 + } catch (ParseException e) {
  3703 + // TODO Auto-generated catch block
  3704 + e.printStackTrace();
  3705 + }
  3706 +
  3707 + } else {
  3708 + try {
  3709 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3710 + } catch (ParseException e) {
  3711 + // TODO Auto-generated catch block
  3712 + e.printStackTrace();
  3713 + }
  3714 + ;
  3715 + }
  3716 + s.setFcsjT(fscjT);
  3717 + }
  3718 +
  3719 +// Collections.sort(listInfo, new compareLpFcsjType());
  3720 + List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
  3721 +
  3722 + Collections.sort(listInfo, new compareLpFcsjType());
  3723 + for (int i = 0; i < listInfo.size(); i++) {
  3724 + ScheduleRealInfo t = listInfo.get(i);
  3725 + if (!lpName.equals(t.getLpName())) {
  3726 + zdsjActual = t.getZdsjActual();
  3727 + zdsj = t.getZdsj();
  3728 + t.setZdsjActual("");
  3729 + t.setZdsj("");
  3730 + } else {
  3731 + zdsj1 = t.getZdsj();
  3732 + zdsjActual1 = t.getZdsjActual();
  3733 + t.setZdsjActual(zdsjActual);
  3734 + t.setZdsj(zdsj);
  3735 + zdsj = zdsj1;
  3736 + zdsjActual = zdsjActual1;
  3737 + }
  3738 +
  3739 +
  3740 +
  3741 + lpName = t.getLpName();
  3742 + listInfo2.add(t);
  3743 +
  3744 + }
  3745 +
  3746 + Collections.sort(listInfo2,new compareDirLpFcsjType());
  3747 + for (int i = 0; i < listInfo2.size(); i++) {
  3748 + ScheduleRealInfo t=listInfo2.get(i);
  3749 + list.add(t);
  3750 + Set<ChildTaskPlan> childTaskPlans = t.getcTasks();
  3751 + //计算营运里程,空驶里程
  3752 + if (!childTaskPlans.isEmpty()) {
  3753 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  3754 + Collections.sort(listit, new ComparableChild());
  3755 + for (int j = 0; j < listit.size(); j++) {
  3756 + ScheduleRealInfo s = new ScheduleRealInfo();
  3757 + ChildTaskPlan childTaskPlan = listit.get(j);
  3758 + if (childTaskPlan.getCcId() == null) {
  3759 + if (childTaskPlan.isDestroy()) {
  3760 + s.setFcsjActual("");
  3761 + s.setZdsjActual("");
  3762 + } else {
  3763 + s.setFcsjActual(childTaskPlan.getStartDate());
  3764 + s.setZdsjActual("");
  3765 + s.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  3766 + }
  3767 + s.setFcsj(childTaskPlan.getStartDate());
  3768 + s.setZdsj("");
  3769 + s.setQdzName(childTaskPlan.getStartStationName());
  3770 + s.setZdzName(childTaskPlan.getEndStationName());
  3771 + s.setRemarks(childTaskPlan.getRemarks());
  3772 + s.setAdjustExps("子");
  3773 + s.setLpName("");
  3774 + list.add(s);
  3775 + }
  3776 + }
  3777 + }
  3778 + }
  3779 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3780 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3781 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3782 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3783 + if (list.size() > 0) {
  3784 + int a = list.size() % 3;
  3785 + int b = list.size() / 3;
  3786 + int x = 0, y = 0;
  3787 + if (a == 2) {
  3788 + x = b + 1;
  3789 + y = x * 2;
  3790 + } else if (a == 1) {
  3791 + x = b + 1;
  3792 + y = x * 2 - 1;
  3793 + } else {
  3794 + x = b;
  3795 + y = 2 * x;
  3796 +
  3797 + }
  3798 + for (int i = 0; i < list.size(); i++) {
  3799 + ScheduleRealInfo s = list.get(i);
  3800 + if (i + 1 <= x) {
  3801 + xList.add(s);
  3802 + } else if ((i + 1) > x && (i + 1) <= y) {
  3803 + yList.add(s);
  3804 + } else {
  3805 + zList.add(s);
  3806 + }
  3807 + }
  3808 + for (int i = 0; i < x; i++) {
  3809 + newList.add(xList.get(i));
  3810 + if (yList.size() > i) {
  3811 + newList.add(yList.get(i));
  3812 + } else {
  3813 + newList.add(new ScheduleRealInfo());
  3814 + }
  3815 + if (zList.size() > i) {
  3816 + newList.add(zList.get(i));
  3817 + } else {
  3818 + newList.add(new ScheduleRealInfo());
  3819 + }
  3820 +
  3821 + }
  3822 + }
  3823 + /* for (int i = 0; i < newList.size(); i++) {
  3824 + ScheduleRealInfo t1 = newList.get(i);
  3825 + for (int j = 0; j < list.size(); j++) {
  3826 + ScheduleRealInfo t2 = list.get(j);
  3827 + if (t1.getId() == t2.getId()) {
  3828 + t1 = t2;
  3829 + }
  3830 + }
  3831 + }*/
  3832 +
  3833 + for (int i = 0; i < newList.size(); i++) {
  3834 + ScheduleRealInfo t1 = newList.get(i);
  3835 + String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
  3836 + if (reamrks1.length() > 4) {
  3837 + t1.setRemarks(reamrks1.substring(0, 4));
  3838 + t1.setRemark(reamrks1);
  3839 + } else {
  3840 + t1.setRemark(reamrks1);
  3841 + }
  3842 + }
  3843 + return newList;
  3844 + }
  3845 +
  3846 + @Override
  3847 + public List<ScheduleRealInfo> realScheduleList_mh_2(String line, String date) {
  3848 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3849 + String lpName = "lpName";
  3850 + String zdsj = "";
  3851 + String zdsjActual = "";
  3852 + String zdsj1 = "";
  3853 + String zdsjActual1 = "";
  3854 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
  3855 +
  3856 + for (ScheduleRealInfo s : listInfo) {
  3857 + if (s.isDestroy() && s.isReissue()) {
  3858 + s.setRemark("");
  3859 + s.setFcsjActual(s.getDfsj());
  3860 + s.setZdsjActual(s.getZdsj());
  3861 + s.setStatus(2);
  3862 + s.setJhlc(s.getJhlcOrig());
  3863 + }
  3864 + }
  3865 +
  3866 + for (int i = 0; i < listInfo.size(); i++) {
  3867 + ScheduleRealInfo t = listInfo.get(i);
  3868 + if (!lpName.equals(t.getLpName())) {
  3869 + zdsjActual = t.getZdsjActual();
  3870 + zdsj = t.getZdsj();
  3871 + t.setZdsjActual("");
  3872 + t.setZdsj("");
  3873 + } else {
  3874 + zdsj1 = t.getZdsj();
  3875 + zdsjActual1 = t.getZdsjActual();
  3876 + t.setZdsjActual(zdsjActual);
  3877 + t.setZdsj(zdsj);
  3878 + zdsj = zdsj1;
  3879 + zdsjActual = zdsjActual1;
  3880 + }
  3881 + lpName = t.getLpName();
  3882 + list.add(t);
  3883 + }
  3884 +
  3885 + List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLineQp2(line, date);
  3886 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3887 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3888 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3889 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3890 + if (listInfo2.size() > 0) {
  3891 + int a = listInfo2.size() % 3;
  3892 + int b = listInfo2.size() / 3;
  3893 + int x = 0, y = 0;
  3894 + if (a == 2) {
  3895 + x = b + 1;
  3896 + y = x * 2;
  3897 + } else if (b == 1) {
  3898 + x = b + 1;
  3899 + y = x * 2 - 1;
  3900 + } else {
  3901 + x = b;
  3902 + y = 2 * x;
  3903 +
  3904 + }
  3905 + for (int i = 0; i < listInfo2.size(); i++) {
  3906 + ScheduleRealInfo s = listInfo2.get(i);
  3907 + if (i + 1 <= x) {
  3908 + xList.add(s);
  3909 + } else if ((i + 1) > x && (i + 1) <= y) {
  3910 + yList.add(s);
  3911 + } else {
  3912 + zList.add(s);
  3913 + }
  3914 + }
  3915 + for (int i = 0; i < x; i++) {
  3916 + newList.add(xList.get(i));
  3917 + if (yList.size() > i) {
  3918 + newList.add(yList.get(i));
  3919 + } else {
  3920 + newList.add(new ScheduleRealInfo());
  3921 + }
  3922 + if (zList.size() > i) {
  3923 + newList.add(zList.get(i));
  3924 + } else {
  3925 + newList.add(new ScheduleRealInfo());
  3926 + }
  3927 +
  3928 + }
  3929 + }
  3930 + for (int i = 0; i < newList.size(); i++) {
  3931 + ScheduleRealInfo t1 = newList.get(i);
  3932 + for (int j = 0; j < list.size(); j++) {
  3933 + ScheduleRealInfo t2 = list.get(j);
  3934 + if (t1.getId() == t2.getId()) {
  3935 + t1 = t2;
  3936 + }
  3937 + }
  3938 + }
  3939 + return newList;
  3940 + }
  3941 +
  3942 + @Override
  3943 + public List<ScheduleRealInfo> realScheduleListQp(String line, String date) {
  3944 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3945 + String lpName = "lpName";
  3946 + String zdsj = "";
  3947 + String zdsjActual = "";
  3948 + String zdsj1 = "";
  3949 + String zdsjActual1 = "";
  3950 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
  3951 + for (int i = 0; i < listInfo.size(); i++) {
  3952 + ScheduleRealInfo t = listInfo.get(i);
  3953 + if (!lpName.equals(t.getLpName())) {
  3954 + zdsjActual = t.getZdsjActual();
  3955 + zdsj = t.getZdsj();
  3956 + t.setZdsjActual("");
  3957 + t.setZdsj("");
  3958 + } else {
  3959 + zdsj1 = t.getZdsj();
  3960 + zdsjActual1 = t.getZdsjActual();
  3961 + t.setZdsjActual(zdsjActual);
  3962 + t.setZdsj(zdsj);
  3963 + zdsj = zdsj1;
  3964 + zdsjActual = zdsjActual1;
  3965 + }
  3966 +
  3967 + lpName = t.getLpName();
  3968 + list.add(t);
  3969 + }
  3970 + return list;
  3971 + }
  3972 +
  3973 + public List<Map<String, Object>> yesterdayDataList(String line, String date, String gsbm, String fgsbm, String jGh, String nbbm) {
  3974 + List<Map<String, Object>> yesterdayDataList = new ArrayList<Map<String, Object>>();
  3975 + if (line.equals("")) {
  3976 + yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList(line, date, gsbm, fgsbm, nbbm);
  3977 + } else {
  3978 + yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList_eq(line, date, gsbm, fgsbm, nbbm);
  3979 + }
  3980 + List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill3(jGh, nbbm, date, gsbm, fgsbm);
  3981 + for (int x = 0; x < yesterdayDataList.size(); x++) {
  3982 + String jsy = yesterdayDataList.get(x).get("jGh").toString();
  3983 + String clZbh = yesterdayDataList.get(x).get("clZbh").toString();
  3984 + String xlbm = yesterdayDataList.get(x).get("xlBm").toString();
  3985 + String lp = yesterdayDataList.get(x).get("lpName").toString();
  3986 + String realExecDate=yesterdayDataList.get(x).get("realExecDate").toString();
  3987 + String fcsj[] =realExecDate.split(" ");
  3988 + //取出最小计划发车时间
  3989 + yesterdayDataList.get(x).put("fcsj", fcsj[1]);
  3990 + Map<String, Object> map = new HashMap<String, Object>();
  3991 + boolean fage = true;
  3992 + String company = "";
  3993 + String bCompany = "";
  3994 + String lineName="";
  3995 + String jName="";
  3996 + List<ScheduleRealInfo> listS = new ArrayList<ScheduleRealInfo>();
  3997 + for (ScheduleRealInfo scheduleRealInfo : lists) {
  3998 + if (scheduleRealInfo.getjGh().equals(jsy)
  3999 + && scheduleRealInfo.getClZbh().equals(clZbh)
  4000 + && scheduleRealInfo.getXlBm().equals(xlbm)
  4001 + && scheduleRealInfo.getLpName().equals(lp)) {
  4002 + if (fage) {
  4003 + //根据线路代码获取公司
  4004 + company = scheduleRealInfo.getGsBm();
  4005 + bCompany = scheduleRealInfo.getFgsBm();
  4006 + lineName = scheduleRealInfo.getXlName();
  4007 + jName= scheduleRealInfo.getjName();
  4008 + fage = false;
  4009 + }
  4010 + Set<ChildTaskPlan> cts = scheduleRealInfo.getcTasks();
  4011 + if (cts != null && cts.size() > 0) {
  4012 + listS.add(scheduleRealInfo);
  4013 + } else {
  4014 + if (scheduleRealInfo.getZdsjActual() != null && scheduleRealInfo.getFcsjActual() != null) {
  4015 + listS.add(scheduleRealInfo);
  4016 + }
  4017 + }
  4018 + }
  4019 + }
  4020 + yesterdayDataList.get(x).put("company", company);
  4021 + yesterdayDataList.get(x).put("bCompany", bCompany);
  4022 + yesterdayDataList.get(x).put("lineName", lineName);
  4023 + yesterdayDataList.get(x).put("jName", jName);
  4024 + Double ljgl = culateMieageService.culateLjgl(listS);
  4025 + Double sjgl = culateMieageService.culateSjgl(listS);
  4026 + Double ksgl = culateMieageService.culateKsgl(listS);
  4027 + Double jccgl = culateMieageService.culateJccgl(listS);
  4028 + Double zyygl = Arith.add(sjgl, ljgl);
  4029 + Double zksgl = Arith.add(ksgl, jccgl);
  4030 + Double zlc = Arith.add(zyygl, zksgl);
  4031 + yesterdayDataList.get(x).put("totalKilometers", zlc);
  4032 +
  4033 + }
  4034 + //增加顺序号
  4035 + for (int i = 0; i < yesterdayDataList.size(); i++) {
  4036 + if (i == 0) {
  4037 + yesterdayDataList.get(i).put("seqNumber", 1);
  4038 + } else {
  4039 + if (yesterdayDataList.get(i - 1).get("clZbh").equals(yesterdayDataList.get(i).get("clZbh"))) {
  4040 + yesterdayDataList.get(i).put("seqNumber", 1 + (int) yesterdayDataList.get(i - 1).get("seqNumber"));
  4041 + } else {
  4042 + yesterdayDataList.get(i).put("seqNumber", 1);
  4043 + }
  4044 + }
  4045 + }
  4046 +
  4047 + return yesterdayDataList;
  4048 + }
  4049 +
  4050 + /**
  4051 + * 批量调整人车
  4052 + */
  4053 + @Override
  4054 + public Map<String, Object> multi_tzrc(List<ChangePersonCar> cpcs, String userId) {
  4055 + Map<String, Object> rs = new HashMap<>();
  4056 + Set<ScheduleRealInfo> set = new HashSet<>();
  4057 +
  4058 + ScheduleRealInfo sch;
  4059 +
  4060 + String jGh = null, jName, sGh, sName;
  4061 + for (ChangePersonCar cpc : cpcs) {
  4062 +
  4063 + sch = dayOfSchedule.get(cpc.getSchId());
  4064 + if (sch == null)
  4065 + continue;
  4066 +
  4067 + if (cpc.getClZbh() != null) {
  4068 + if (!carExist(sch.getGsBm(), cpc.getClZbh())) {
  4069 + rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
  4070 + rs.put("status", ResponseCode.ERROR);
  4071 + return rs;
  4072 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(cpc.getClZbh()))) {
  4073 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + cpc.getClZbh() + "】的车辆");
  4074 + rs.put("status", ResponseCode.ERROR);
  4075 + return rs;
  4076 + }
  4077 + }
  4078 +
  4079 + if (StringUtils.isNotEmpty(cpc.getJsy())) {
  4080 + try{
  4081 + jGh = cpc.getJsy().split("/")[0];
  4082 + }catch (Exception e){
  4083 + logger.error("", e);
  4084 + rs.put("msg", "驾驶员参数异常!!");
  4085 + rs.put("status", ResponseCode.ERROR);
  4086 + return rs;
  4087 + }
  4088 +
  4089 + jName = getPersonName(sch.getGsBm(), jGh);
  4090 + if (StringUtils.isEmpty(jName)) {
  4091 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
  4092 + rs.put("status", ResponseCode.ERROR);
  4093 + return rs;
  4094 + }
  4095 + }
  4096 +
  4097 +
  4098 + //为换人换车情况表写入数据
  4099 + schModifyLog.saveChangetochange(sch, cpc, userId);
  4100 + //日志记录
  4101 + ScheduleModifyLogger.tzrc(sch, cpc, userId);
  4102 +
  4103 + //换驾驶员
  4104 + if (StringUtils.isNotEmpty(cpc.getJsy())) {
  4105 + //换驾驶员
  4106 + if (persoChange(sch, jGh))
  4107 + set.add(sch);
  4108 + }
  4109 +
  4110 + //换售票员
  4111 + if (StringUtils.isNotEmpty(cpc.getSpy())
  4112 + && !"/".equals(StringUtils.trim(cpc.getSpy()))) {
  4113 +
  4114 + sGh = cpc.getSpy().split("/")[0];
  4115 + sName = getPersonName(sch.getGsBm(), sGh);
  4116 + if (StringUtils.isEmpty(sName)) {
  4117 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
  4118 + rs.put("status", ResponseCode.ERROR);
  4119 + return rs;
  4120 + }
  4121 +
  4122 + /*if(!sGh.equals(sch.getsGh()))
  4123 + sb.append(sch.getsGh() + " 换 " + sGh + ";");*/
  4124 + if (persoChangeSPY(sch, sGh))
  4125 + set.add(sch);
  4126 + } else if (StringUtils.isNotEmpty(sch.getsGh())) {
  4127 + sch.setsGh("");
  4128 + sch.setsName("");
  4129 + }
  4130 +
  4131 + //换车
  4132 + if (StringUtils.isNotEmpty(cpc.getClZbh()) && !cpc.getClZbh().equals(sch.getClZbh())) {
  4133 + //sb.append(sch.getClZbh() + " 换 " + cpc.getClZbh() + ";");
  4134 + set.add(sch);
  4135 + set.addAll(dayOfSchedule.changeCar(sch, cpc.getClZbh()));
  4136 + }
  4137 +
  4138 + /*if(sb.length() > 0)
  4139 + sch.setRemarks(sb.toString());*/
  4140 +
  4141 + dayOfSchedule.save(sch);
  4142 + set.add(sch);
  4143 +
  4144 + }
  4145 + rs.put("ts", set);
  4146 + rs.put("status", ResponseCode.SUCCESS);
  4147 + return rs;
  4148 + }
  4149 +
  4150 + /**
  4151 + * @Title: persoChange
  4152 + * @Description: TODO(班次换驾驶员)
  4153 + */
  4154 + public boolean persoChange(ScheduleRealInfo sch, String jGh) {
  4155 + if (sch.getjGh().equals(jGh))
  4156 + return false;
  4157 + String jName = getPersonName(sch.getGsBm(), jGh);
  4158 + if (StringUtils.isNotEmpty(jName)) {
  4159 +
  4160 + if (jGh.indexOf("-") != -1)
  4161 + sch.setjGh(jGh.substring(jGh.indexOf("-") + 1));
  4162 + else
  4163 + sch.setjGh(jGh);
  4164 +
  4165 + sch.setjName(jName);
  4166 + return true;
  4167 + }
  4168 + return false;
  4169 + }
  4170 +
  4171 + /**
  4172 + * @Title: persoChange
  4173 + * @Description: TODO(班次换售票员)
  4174 + */
  4175 + public boolean persoChangeSPY(ScheduleRealInfo sch, String sGh) {
  4176 + if (sch.getsGh().equals(sGh))
  4177 + return false;
  4178 + String sName = getPersonName(sch.getGsBm(), sGh);
  4179 + if (StringUtils.isNotEmpty(sName)) {
  4180 + if (sGh.indexOf("-") != -1)
  4181 + sch.setsGh(sGh.substring(sGh.indexOf("-") + 1));
  4182 + else
  4183 + sch.setsGh(sGh);
  4184 + sch.setsName(sName);
  4185 + return true;
  4186 + }
  4187 + return false;
  4188 + }
  4189 +
  4190 + /**
  4191 + * 批量待发调整
  4192 + */
  4193 + @Override
  4194 + public Map<String, Object> multi_dftz(List<DfsjChange> dfsjcs) {
  4195 + Map<String, Object> rs = new HashMap<>(), tempMap = new HashMap<>();
  4196 + List<ScheduleRealInfo> list = new ArrayList<>();
  4197 +
  4198 + for (DfsjChange dc : dfsjcs) {
  4199 + if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
  4200 + continue;
  4201 +
  4202 + tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "2", null);
  4203 +
  4204 + if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
  4205 + list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
  4206 + }
  4207 + }
  4208 +
  4209 + rs.put("status", ResponseCode.SUCCESS);
  4210 + rs.put("ts", list);
  4211 + return rs;
  4212 + }
  4213 +
  4214 +
  4215 + @Override
  4216 + public Map<String, Object> findKMBC1(String jName, String clZbh,
  4217 + String date, String enddate) {
  4218 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill4(jName, clZbh, date, enddate);
  4219 + DecimalFormat format = new DecimalFormat("0.00");
  4220 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4221 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4222 + int jhbc = 0, cjbc = 0, ljbc = 0;
  4223 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
  4224 + float addMileage = 0l, remMileage = 0l;
  4225 + Map<String, Object> map = new HashMap<String, Object>();
  4226 + for (ScheduleRealInfo scheduleRealInfo : list) {
  4227 + if (scheduleRealInfo != null) {
  4228 + //计划里程(主任务过滤掉临加班次),
  4229 + //烂班里程(主任务烂班),
  4230 + //临加里程(主任务临加),
  4231 + //计划班次,烂班班次,增加班次
  4232 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  4233 + if (scheduleRealInfo.isSflj()) {
  4234 + addMileage += tempJhlc;
  4235 + ljbc++;
  4236 + } else {
  4237 + jhlc += tempJhlc;
  4238 + jhbc++;
  4239 + if (scheduleRealInfo.getStatus() == -1) {
  4240 + remMileage += tempJhlc;
  4241 + cjbc++;
  4242 + }
  4243 + }
  4244 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  4245 + //计算营运里程,空驶里程
  4246 + if (childTaskPlans.isEmpty()) {
  4247 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  4248 + || scheduleRealInfo.getBcType().equals("venting")) {
  4249 + ksgl += tempJhlc;
  4250 + } else {
  4251 + yygl += tempJhlc;
  4252 + }
  4253 + } else {
  4254 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4255 + while (it.hasNext()) {
  4256 + ChildTaskPlan childTaskPlan = it.next();
  4257 + if (childTaskPlan.getMileageType().equals("empty")) {
  4258 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4259 + } else {
  4260 + yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4261 + }
  4262 + }
  4263 + }
  4264 + }
  4265 + }
  4266 + map.put("jhlc", format.format(jhlc));
  4267 + map.put("remMileage", format.format(remMileage));
  4268 + map.put("addMileage", format.format(addMileage));
  4269 + map.put("yygl", format.format(yygl));
  4270 + map.put("ksgl", format.format(ksgl));
  4271 + map.put("realMileage", format.format(yygl + ksgl));
  4272 + map.put("jhbc", jhbc);
  4273 + map.put("cjbc", cjbc);
  4274 + map.put("ljbc", ljbc);
  4275 + map.put("sjbc", jhbc - cjbc + ljbc);
  4276 + return map;
  4277 + }
  4278 +
  4279 + /**
  4280 + * 调整班次类型
  4281 + *
  4282 + * @param id
  4283 + * @param bcType
  4284 + * @param remarks
  4285 + * @return
  4286 + */
  4287 + @Override
  4288 + public Map<String, Object> changeBcType(Long id, String bcType, String remarks, String majorStationName) {
  4289 + Map<String, Object> rs = new HashMap<>();
  4290 +
  4291 + try {
  4292 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  4293 + if (sch != null) {
  4294 + sch.setBcType(bcType);
  4295 + sch.setRemarks(remarks);
  4296 + rs.put("status", ResponseCode.SUCCESS);
  4297 + rs.put("t", sch);
  4298 +
  4299 + if ("major".equals(bcType)) {
  4300 + sch.setMajorStationName(majorStationName);
  4301 + }
  4302 +
  4303 + dayOfSchedule.save(sch);
  4304 + }
  4305 + } catch (Exception e) {
  4306 + logger.error("", e);
  4307 + rs.put("status", ResponseCode.ERROR);
  4308 + }
  4309 +
  4310 + return rs;
  4311 + }
  4312 +
  4313 + @Override
  4314 + public Map<String, Object> historySave(ScheduleRealInfo sch) {
  4315 + Map<String, Object> rs = new HashMap<>();
  4316 + rs.put("status", ResponseCode.ERROR);
  4317 +
  4318 + ScheduleRealInfo oldSch = super.findById(sch.getId());
  4319 + //事后日志记录
  4320 + AfterwardsLogger aflog = AfterwardsLogger.start(oldSch, "事后调整");
  4321 +
  4322 + //换车
  4323 + if (StringUtils.isNotEmpty(sch.getClZbh()) && !oldSch.getClZbh().equals(sch.getClZbh())) {
  4324 + if (!carExist(oldSch.getGsBm(), sch.getClZbh())) {
  4325 + rs.put("msg", "车辆 " + sch.getClZbh() + " 不存在!");
  4326 + return rs;
  4327 + } else {
  4328 + aflog.log("换车", oldSch.getClZbh(), sch.getClZbh());
  4329 + oldSch.setClZbh(sch.getClZbh());
  4330 + }
  4331 + }
  4332 +
  4333 + //换驾驶员
  4334 + if (StringUtils.isNotEmpty(sch.getjGh()) && !oldSch.getjGh().equals(sch.getjGh())) {
  4335 + String jName = getPersonName(oldSch.getGsBm(), sch.getjGh());
  4336 + if (StringUtils.isEmpty(jName)) {
  4337 + rs.put("msg", oldSch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
  4338 + return rs;
  4339 + }
  4340 + aflog.log("换驾驶员", oldSch.getjGh() + "/" + oldSch.getjName(), sch.getjGh() + "/" + sch.getjName());
  4341 + persoChange(oldSch, sch.getjGh());
  4342 + }
  4343 +
  4344 + //换售票员
  4345 + if (StringUtils.isNotEmpty(sch.getsGh()) && !oldSch.getsGh().equals(sch.getsGh())) {
  4346 + String sName = getPersonName(oldSch.getGsBm(), sch.getsGh());
  4347 + if (StringUtils.isEmpty(sName)) {
  4348 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getsGh() + "】的售票员");
  4349 + return rs;
  4350 + }
  4351 + aflog.log("换售票员", oldSch.getsGh() + "/" + oldSch.getsName(), sch.getsGh() + "/" + sch.getsName());
  4352 + persoChangeSPY(oldSch, sch.getsGh());
  4353 + }
  4354 +
  4355 + //烂班
  4356 + boolean dest1 = oldSch.getStatus() == -1;
  4357 + boolean dest2 = sch.getStatus() == -1;
  4358 + if (!dest1 && dest2) {
  4359 + oldSch.destroy();
  4360 + aflog.log("烂班");
  4361 + } else if (dest1 && !dest2) {
  4362 + //撤销烂班
  4363 + oldSch.setJhlc(oldSch.getJhlcOrig());
  4364 + oldSch.setStatus(0);
  4365 + oldSch.calcStatus();
  4366 + oldSch.setAdjustExps(null);
  4367 + aflog.log("撤销烂班");
  4368 + }
  4369 +
  4370 + oldSch.setAdjustExps(sch.getAdjustExps());
  4371 +
  4372 + /**
  4373 + * 修改班次里程
  4374 + */
  4375 + if (!oldSch.getJhlc().equals(sch.getJhlc())) {
  4376 + double jhlcNum = sch.getJhlc();
  4377 + aflog.log("修改班次里程", oldSch.getJhlc(), jhlcNum);
  4378 + //烂班
  4379 + if (jhlcNum == 0 && oldSch.getJhlcOrig() != 0)
  4380 + oldSch.destroy();
  4381 + else {
  4382 + oldSch.setJhlc(jhlcNum);
  4383 + //临加班次,实际计划一起改
  4384 + if (oldSch.isSflj())
  4385 + oldSch.setJhlcOrig(jhlcNum);
  4386 + }
  4387 + }
  4388 +
  4389 + //待发时间
  4390 + if (!CustomStringUtils.equals(oldSch.getDfsj(), sch.getDfsj())) {
  4391 + aflog.log("修改待发时间", oldSch.getDfsj(), sch.getDfsj());
  4392 + oldSch.setDfsj(sch.getDfsj());
  4393 + }
  4394 + //实发时间
  4395 + if (!CustomStringUtils.equals(oldSch.getFcsjActual(), sch.getFcsjActual())) {
  4396 + aflog.log("修改实发时间", oldSch.getFcsjActual(), sch.getFcsjActual());
  4397 + oldSch.setFcsjActual(sch.getFcsjActual());
  4398 + }
  4399 + //实际终点
  4400 + if (!CustomStringUtils.equals(oldSch.getZdsjActual(), sch.getZdsjActual())) {
  4401 + aflog.log("修改实达时间", oldSch.getZdsjActual(), sch.getZdsjActual());
  4402 + oldSch.setZdsjActual(sch.getZdsjActual());
  4403 + }
  4404 +
  4405 + //备注
  4406 + if (!CustomStringUtils.equals(oldSch.getRemarks(), sch.getRemarks())) {
  4407 + aflog.log("修改备注", oldSch.getRemarks(), sch.getRemarks());
  4408 + oldSch.setRemarks(sch.getRemarks());
  4409 + }
  4410 +
  4411 + scheduleRealInfoRepository.save(oldSch);
  4412 +
  4413 + aflog.end();
  4414 + rs.put("status", ResponseCode.SUCCESS);
  4415 + return rs;
  4416 + }
  4417 +
  4418 + @Autowired
  4419 + SvgAttributeRepository svgAttributeRepository;
  4420 +
  4421 + @Override
  4422 + public Map<String, Object> svgAttr(String jsonStr) {
  4423 + Map<String, Object> rs = new HashMap<>();
  4424 +
  4425 + try {
  4426 + JSONObject jObj = JSONObject.parseObject(StringEscapeUtils.unescapeHtml4(jsonStr));
  4427 +
  4428 + SvgAttribute svgAttribute = new SvgAttribute();
  4429 + svgAttribute.setLineCode(jObj.getString("lineCode"));
  4430 + svgAttribute.setHideStations(jObj.getString("hideStations"));
  4431 + svgAttribute.setNicknames(jObj.getString("nicknames"));
  4432 + svgAttributeRepository.save(svgAttribute);
  4433 +
  4434 + rs.put("t", svgAttribute);
  4435 + rs.put("status", ResponseCode.SUCCESS);
  4436 + } catch (Exception e) {
  4437 + logger.error("", e);
  4438 + rs.put("status", ResponseCode.ERROR);
  4439 + }
  4440 + return rs;
  4441 + }
  4442 +
  4443 + @Override
  4444 + public Map<String, Object> findSvgAttr(String idx) {
  4445 + Map<String, Object> rs = new HashMap<>();
  4446 + try {
  4447 + List<String> lineCodes = Splitter.on(",").splitToList(idx);
  4448 + List<SvgAttribute> list = svgAttributeRepository.findSvgAttr(lineCodes);
  4449 +
  4450 + rs.put("status", ResponseCode.SUCCESS);
  4451 + rs.put("list", list);
  4452 + } catch (Exception e) {
  4453 + logger.error("", e);
  4454 + rs.put("status", ResponseCode.ERROR);
  4455 + }
  4456 + return rs;
  4457 + }
  4458 +
  4459 + @Override
  4460 + public Map<String, Object> addRemarks(Long id, String remarks) {
  4461 + Map<String, Object> rs = new HashMap<>();
  4462 + try {
  4463 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  4464 + sch.addRemarks(remarks);
  4465 +
  4466 + rs.put("status", ResponseCode.SUCCESS);
  4467 + rs.put("t", sch);
  4468 + } catch (Exception e) {
  4469 + logger.error("", e);
  4470 + rs.put("status", ResponseCode.ERROR);
  4471 + }
  4472 + return rs;
  4473 + }
  4474 +
  4475 + @Override
  4476 + public List<Map<String, Object>> yesterdayDataList(String line) {
  4477 + // TODO Auto-generated method stub
  4478 + return null;
  4479 + }
  4480 +
  4481 + @Override
  4482 + public List<ScheduleRealInfo> exportWaybillQp(String clZbh, String date, String line) {
  4483 + // TODO Auto-generated method stub
  4484 + ReportUtils ee = new ReportUtils();
  4485 + ReportRelatedUtils rru = new ReportRelatedUtils();
  4486 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  4487 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4488 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  4489 +
  4490 + DecimalFormat format = new DecimalFormat("0.00");
  4491 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4492 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4493 + int jhbc = 0, cjbc = 0, ljbc = 0;
  4494 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0;
  4495 + float addMileage = 0l, remMileage = 0l, addgl = 0, remgl = 0;
  4496 + int xyz = 1;
  4497 + Map<String, Object> map;
  4498 + for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
  4499 + if (scheduleRealInfo != null) {
  4500 + //计算计划里程(主任务过滤掉临加班次),烂班里程,临加里程,计划班次,烂班班次,增加班次
  4501 + //计划里程(主任务过滤掉临加班次),
  4502 + //烂班里程(主任务烂班),
  4503 + //临加里程(主任务临加),
  4504 + //计划班次,烂班班次,增加班次
  4505 + double jh = 0, sj = 0;
  4506 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  4507 + if (scheduleRealInfo.isSflj()) {
  4508 + ljbc++;
  4509 + } else {
  4510 + if (!(scheduleRealInfo.getBcType().equals("in")
  4511 + || scheduleRealInfo.getBcType().equals("out"))) {
  4512 + jhbc++;
  4513 + jh += tempJhlc;
  4514 + }
  4515 + if (scheduleRealInfo.getStatus() == -1) {
  4516 + remMileage += tempJhlc;
  4517 + cjbc++;
  4518 + }
  4519 + }
  4520 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  4521 + //计算营运里程,空驶里程
  4522 + if (childTaskPlans.isEmpty()) {
  4523 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  4524 + ) {
  4525 + jcclc += tempJhlc;
  4526 + } else {
  4527 + if (scheduleRealInfo.getStatus() != -1) {
  4528 + if (scheduleRealInfo.isSflj()) {
  4529 + addMileage += tempJhlc;
  4530 + }
  4531 + sj += tempJhlc;
  4532 + }
  4533 + }
  4534 + } else {
  4535 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4536 + while (it.hasNext()) {
  4537 + ChildTaskPlan childTaskPlan = it.next();
  4538 + if (childTaskPlan.getMileageType().equals("empty")) {
  4539 + if (childTaskPlan.isDestroy()) {
  4540 + remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4541 + } else {
  4542 + if (scheduleRealInfo.isSflj()) {
  4543 + addMileage += tempJhlc;
  4544 + }
  4545 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4546 + }
  4547 + } else {
  4548 + if (childTaskPlan.isDestroy()) {
  4549 + remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4550 +// cjbc++;
  4551 + } else {
  4552 + if (scheduleRealInfo.isSflj()) {
  4553 + addMileage += tempJhlc;
  4554 + }
  4555 + sj += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4556 + }
  4557 + }
  4558 + }
  4559 + }
  4560 +
  4561 + if (!(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out"))) {
  4562 + map = new HashMap<String, Object>();
  4563 + try {
  4564 + scheduleRealInfo.setBcs(xyz);
  4565 + xyz++;
  4566 + Set<ChildTaskPlan> cs = scheduleRealInfo.getcTasks();
  4567 + Double sjlc = 0.0;
  4568 + if (!cs.isEmpty()) {
  4569 + Iterator<ChildTaskPlan> it = cs.iterator();
  4570 + while (it.hasNext()) {
  4571 + ChildTaskPlan c = it.next();
  4572 + if (!c.isDestroy()) {
  4573 + sjlc += c.getMileage() == null ? 0 : c.getMileage();
  4574 + }
  4575 +
  4576 + }
  4577 + } else {
  4578 + if (scheduleRealInfo.getStatus() != -1) {
  4579 + sjlc = scheduleRealInfo.getJhlc();
  4580 + }
  4581 + }
  4582 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  4583 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  4584 + scheduleRealInfo.setSjlc(format.format(sjlc));
  4585 + map = rru.getMapValue(scheduleRealInfo);
  4586 + String zdsj = scheduleRealInfo.getZdsj();
  4587 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  4588 + if (zdsj != null && zdsjActual != null &&
  4589 + !zdsj.equals(zdsjActual)) {
  4590 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  4591 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  4592 + if (zdsj.compareTo(zdsjActual) > 0) {
  4593 + if (zdsjT - zdsjAT > 1000) {
  4594 + map.put("fast", "");
  4595 + map.put("slow", zdsjAT - zdsjT + 1440);
  4596 + } else {
  4597 + map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  4598 + map.put("slow", "");
  4599 + }
  4600 + } else {
  4601 + if (zdsjAT - zdsjT > 1000) {
  4602 + map.put("fast", zdsjT - zdsjAT + 1440);
  4603 + map.put("slow", "");
  4604 + } else {
  4605 + map.put("fast", "");
  4606 + map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  4607 + }
  4608 + }
  4609 + } else {
  4610 + map.put("fast", "");
  4611 + map.put("slow", "");
  4612 + }
  4613 + listMap.add(map);
  4614 + } catch (Exception e) {
  4615 + e.printStackTrace();
  4616 + }
  4617 + }
  4618 + jhlc += jh;
  4619 + yygl += sj;
  4620 + if (jh > sj) {
  4621 + remgl += jh - sj;
  4622 + } else {
  4623 + addgl += sj - jh;
  4624 + }
  4625 + }
  4626 + }
  4627 +
  4628 +
  4629 + List<Ylxxb> listYlxxb = ylxxbRepository.queryListYlxxb(clZbh, date);
  4630 + Double jzl = 0.0;
  4631 + for (int t = 0; t < listYlxxb.size(); t++) {
  4632 + Ylxxb y = listYlxxb.get(t);
  4633 + jzl += y.getJzl();
  4634 + }
  4635 +
  4636 + //计算里程和班次数,并放入Map里
  4637 + map = findKMBCQp(clZbh, date, line);
  4638 + map.put("jzl", jzl);
  4639 +// map.put("jhlc", format.format(jhlc + jcclc));
  4640 +// map.put("yygljh", format.format(jhlc));
  4641 +// map.put("ssgl", format.format(remMileage));
  4642 +// map.put("ksgl", format.format(ksgl));
  4643 +// map.put("yyglsj", format.format(yygl));
  4644 +// map.put("jhbc", jhbc);
  4645 +// map.put("jcclc", jcclc);
  4646 +//
  4647 +// map.put("ljgl", format.format(addMileage));
  4648 +// map.put("ssbc", cjbc);
  4649 +// map.put("ysgl", format.format(yygl));
  4650 +// map.put("sjbc", jhbc - cjbc + ljbc);
  4651 +// map.put("zgl", format.format(yygl + ksgl + jcclc));
  4652 +// map.put("ljbc", ljbc);
  4653 +
  4654 + String zdp = "", zwdp = "", wdp = "";
  4655 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4656 + List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59");
  4657 + try {
  4658 + Long fcsj1 = sdf.parse(date + " 03:00").getTime();
  4659 + Long fcsj2 = sdf.parse(date + " 11:00").getTime();
  4660 + Long fcsj3 = sdf.parse(date + " 22:00").getTime();
  4661 + for (int i = 0; i < listDtuy.size(); i++) {
  4662 + DutyEmployee t = listDtuy.get(i);
  4663 + Long ts = t.getTs();
  4664 + if (ts > fcsj1 && ts < fcsj2) {
  4665 + if (zdp.indexOf(t.getuName()) == -1) {
  4666 + zdp += t.getuName() + ",";
  4667 +
  4668 + }
  4669 + } else if (ts > fcsj2 && ts < fcsj3) {
  4670 + if (zwdp.indexOf(t.getuName()) == -1) {
  4671 + zwdp += t.getuName() + ",";
  4672 + }
  4673 + } else {
  4674 + if (wdp.indexOf(t.getuName()) == -1) {
  4675 + wdp += t.getuName() + ",";
  4676 + }
  4677 + }
  4678 + }
  4679 + } catch (ParseException e) {
  4680 + // TODO Auto-generated catch block
  4681 + e.printStackTrace();
  4682 + }
  4683 + map.put("zdp", zdp);
  4684 + map.put("zwdp", zwdp);
  4685 + map.put("wdp", wdp);
  4686 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  4687 + list.add(listMap.iterator());
  4688 + ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/waybill_qingpu.xls",
  4689 + path + "export/" + date + "-" + clZbh + "-行车路单.xls");
  4690 +
  4691 + return scheduleRealInfos;
  4692 + }
  4693 +
  4694 + @Override
  4695 + public Map<String, Object> findKMBCQp(String clZbh, String date, String line) {
  4696 + // TODO Auto-generated method stub
  4697 + List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4698 + DecimalFormat format = new DecimalFormat("0.00");
  4699 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4700 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4701 + int jhbc = 0, cjbc = 0, ljbc = 0, sjbc = 0;
  4702 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0, ljjcclc = 0, jhjcclc = 0;
  4703 + double addMileage = 0, remMileage = 0, addgl = 0, remgl = 0;
  4704 + Map<String, Object> map = new HashMap<String, Object>();
  4705 + jhlc = culateMieageService.culateJhgl(lists);
  4706 + jcclc = culateMieageService.culateJccgl(lists);
  4707 + jhjcclc = culateMieageService.culateJhJccgl(lists);
  4708 + remMileage = culateMieageService.culateLbgl(lists);
  4709 + ksgl = culateMieageService.culateKsgl(lists);
  4710 + yygl = culateMieageService.culateSjgl(lists);
  4711 + jhbc = culateMieageService.culateJhbc(lists, "");
  4712 + addMileage = culateMieageService.culateLjgl(lists);
  4713 + cjbc = culateMieageService.culateLbbc(lists);
  4714 + sjbc = culateMieageService.culateSjbc(lists, "");
  4715 + ljbc = culateMieageService.culateLjbc(lists, "");
  4716 + double zyygl = Arith.add(yygl, addMileage);
  4717 + double zksgl = Arith.add(ksgl, jcclc);
  4718 + map.put("jhlc", Arith.add(jhlc, jhjcclc));
  4719 + map.put("yygljh", jhlc);
  4720 + map.put("ssgl", remMileage);
  4721 + map.put("ksgl", ksgl);
  4722 + map.put("yyglsj", Arith.add(yygl, addMileage));
  4723 + map.put("jcclc", jcclc);
  4724 + map.put("jhbc", jhbc);
  4725 + map.put("ljgl", addMileage);
  4726 + map.put("ssbc", cjbc);
  4727 + map.put("ysgl", Arith.add(yygl, addMileage));
  4728 + map.put("sjbc", sjbc);
  4729 + map.put("zgl", Arith.add(zyygl, zksgl));
  4730 + map.put("ljbc", ljbc);
  4731 +
  4732 + return map;
  4733 + }
  4734 +
  4735 + @Override
  4736 + public List<ScheduleRealInfo> queryListWaybillQp(String clZbh, String date, String line) {
  4737 + // TODO Auto-generated method stub
  4738 + DecimalFormat format = new DecimalFormat("0.00");
  4739 + List<ScheduleRealInfo> list = null;
  4740 + list = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4741 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  4742 + for (int i = 0; i < list.size(); i++) {
  4743 + ScheduleRealInfo s = list.get(i);
  4744 + if (!(s.getBcType().equals("in") || s.getBcType().equals("out"))) {
  4745 + String remarks = "";
  4746 + Double sjlc = 0.0;
  4747 + if (s.getRemarks() != null) {
  4748 + remarks += s.getRemarks();
  4749 + }
  4750 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  4751 + if (!childTaskPlans.isEmpty()) {
  4752 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4753 + while (it.hasNext()) {
  4754 + ChildTaskPlan c = it.next();
  4755 + if (c.getRemarks() != null && c.getRemarks().length() > 0) {
  4756 + if (remarks.indexOf(c.getRemarks()) == -1) {
  4757 + remarks += c.getRemarks();
  4758 + }
  4759 + }
  4760 +
  4761 + if (!c.isDestroy()) {
  4762 + if (c.getMileageType().equals("service")) {
  4763 + sjlc += c.getMileage() == null ? 0 : c.getMileage();
  4764 + }
  4765 + }
  4766 +
  4767 + }
  4768 + } else {
  4769 + if (s.getStatus() != -1) {
  4770 + sjlc = s.getJhlc();
  4771 + }
  4772 + }
  4773 + s.setSjlc(format.format(sjlc));
  4774 + s.setRemarks(remarks);
  4775 + newList.add(s);
  4776 + }
  4777 +
  4778 + }
  4779 +
  4780 + return newList;
  4781 + }
  4782 +
  4783 + @Override
  4784 + public Map<String, Object> MapById(Long id) {
  4785 + // TODO Auto-generated method stub
  4786 + Map<String, Object> dMap=new HashMap<>();
  4787 + dMap.put("dGroup_eq", "oilType");
  4788 + Iterator<Dictionary> it= dictionaryService.list(dMap).iterator();
  4789 + while (it.hasNext()) {
  4790 + Dictionary d=it.next();
  4791 + dMap.put(d.getdCode(), d.getdName());
  4792 + }
  4793 + Map<String, Object> map = new HashMap<String, Object>();
  4794 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4795 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  4796 + String xlbm = s.getXlBm();
  4797 + String fcrq = s.getScheduleDateStr();
  4798 +
  4799 + int type = 2;
  4800 + Double ccyl = 0.0;
  4801 + Double jcyl = 0.0;
  4802 + Double yh = 0.0;
  4803 + Double jzl = 0.0;
  4804 + Double zlc = 0.0;
  4805 + String rylx="";
  4806 + List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
  4807 + if (listCars.size() > 0) {
  4808 + if (listCars.get(0).getSfdc() != null) {
  4809 + if (listCars.get(0).getSfdc()) {
  4810 + List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  4811 + type = 1;
  4812 + for (int i = 0; i < listDlb.size(); i++) {
  4813 + Dlb d = listDlb.get(i);
  4814 + if (d.getLp() == null) {
  4815 + ccyl = Arith.add(ccyl, d.getCzcd());
  4816 + jcyl = Arith.add(jcyl, d.getJzcd());
  4817 + yh = Arith.add(yh, d.getHd());
  4818 + jzl = Arith.add(jzl, d.getCdl());
  4819 + zlc = Arith.add(zlc, d.getZlc());
  4820 + } else {
  4821 + if (d.getLp().equals(s.getLpName())) {
  4822 + ccyl = Arith.add(ccyl, d.getCzcd());
  4823 + jcyl = Arith.add(jcyl, d.getJzcd());
  4824 + yh = Arith.add(yh, d.getHd());
  4825 + jzl = Arith.add(jzl, d.getCdl());
  4826 + zlc = Arith.add(zlc, d.getZlc());
  4827 + }
  4828 + }
  4829 +
  4830 + }
  4831 + } else {
  4832 + List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  4833 + type = 0;
  4834 + for (int i = 0; i < listYlb.size(); i++) {
  4835 + Ylb y = listYlb.get(i);
  4836 + if (y.getLp() == null) {
  4837 + ccyl = Arith.add(ccyl, y.getCzyl());
  4838 + jcyl = Arith.add(jcyl, y.getJzyl());
  4839 + yh = Arith.add(yh, y.getYh());
  4840 + jzl = Arith.add(jzl, y.getJzl());
  4841 + zlc = Arith.add(zlc, y.getZlc());
  4842 + if(dMap.get(y.getRylx())!=null)
  4843 + rylx =dMap.get(y.getRylx()).toString();
  4844 + } else {
  4845 + if (y.getLp().equals(s.getLpName())) {
  4846 + ccyl = Arith.add(ccyl, y.getCzyl());
  4847 + jcyl = Arith.add(jcyl, y.getJzyl());
  4848 + yh = Arith.add(yh, y.getYh());
  4849 + jzl = Arith.add(jzl, y.getJzl());
  4850 + zlc = Arith.add(zlc, y.getZlc());
  4851 + if(dMap.get(y.getRylx())!=null)
  4852 + rylx =dMap.get(y.getRylx()).toString();
  4853 + }
  4854 + }
  4855 + }
  4856 + }
  4857 + }
  4858 + }
  4859 +
  4860 + map.put("rylx", "加注类别:"+rylx);
  4861 + map.put("jzl", jzl);
  4862 + map.put("yh", yh);
  4863 + map.put("ccyl", ccyl);
  4864 + map.put("jcyl", jcyl);
  4865 + map.put("type", type);
  4866 + map.put("zlc", zlc);
  4867 + map.put("xlName", s.getXlName());
  4868 + map.put("clZbh", s.getClZbh());
  4869 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  4870 + map.put("fcsjActual", s.getFcsjActual());
  4871 + map.put("zdzName", s.getZdzName());
  4872 + map.put("scheduleDate", s.getScheduleDateStr());
  4873 + map.put("lpName", s.getLpName());
  4874 + String zdp = "", zwdp = "", wdp = "";
  4875 + String zdpT = "", zwdpT = "", wdpT = "";
  4876 + String dbdp = "";
  4877 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  4878 + try {
  4879 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  4880 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  4881 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  4882 + for (int i = 0; i < list.size(); i++) {
  4883 + DutyEmployee t = list.get(i);
  4884 + if (dbdp.indexOf(t.getuName()) == -1) {
  4885 + if (!(dbdp.length() > 0)) {
  4886 + dbdp = t.getuName();
  4887 + } else {
  4888 + dbdp += "," + t.getuName();
  4889 + }
  4890 + }
  4891 + Long ts = t.getTs();
  4892 + if (ts > fcsj1 && ts < fcsj2) {
  4893 + if (zdp.indexOf(t.getuName()) == -1) {
  4894 + if (!(zdp.length() > 0)) {
  4895 + zdpT = t.getuName() + "...";
  4896 + }
  4897 + zdp += t.getuName() + ",";
  4898 +
  4899 + }
  4900 + } else if (ts > fcsj2 && ts < fcsj3) {
  4901 + if (zwdp.indexOf(t.getuName()) == -1) {
  4902 + if (!(zwdp.length() > 0)) {
  4903 + zwdpT = t.getuName() + "...";
  4904 + }
  4905 + zwdp += t.getuName() + ",";
  4906 + }
  4907 + } else {
  4908 + if (wdp.indexOf(t.getuName()) == -1) {
  4909 + if (!(wdp.length() > 0)) {
  4910 + wdpT = t.getuName() + "...";
  4911 + }
  4912 + wdp += t.getuName() + ",";
  4913 + }
  4914 + }
  4915 + }
  4916 + } catch (ParseException e) {
  4917 + // TODO Auto-generated catch block
  4918 + e.printStackTrace();
  4919 + }
  4920 + map.put("zdp", zdp);
  4921 + map.put("zwdp", zwdp);
  4922 + map.put("wdp", wdp);
  4923 + map.put("zdpT", zdpT);
  4924 + map.put("zwdpT", zwdpT);
  4925 + map.put("wdpT", wdpT);
  4926 + map.put("dbdp", dbdp);
  4927 + return map;
  4928 + }
  4929 +
  4930 + @Override
  4931 + public Map<String, Object> MapByIdQp(Long id) {
  4932 + // TODO Auto-generated method stub
  4933 + Map<String, Object> map = new HashMap<String, Object>();
  4934 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4935 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  4936 + String xlbm = s.getXlBm();
  4937 + String fcrq = s.getScheduleDateStr();
  4938 +
  4939 + int type = 0;
  4940 + Double ccyl = 0.0;
  4941 + Double jcyl = 0.0;
  4942 + Double yh = 0.0;
  4943 + Double jzl = 0.0;
  4944 + Double zlc = 0.0;
  4945 +// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4946 +// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4947 +// if(listYlb.size()>0){
  4948 +// type=0;
  4949 +// for (int i = 0; i < listYlb.size(); i++) {
  4950 +// Ylb y = listYlb.get(i);
  4951 +// if(y.getLp()==null){
  4952 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4953 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4954 +// yh =Arith.add(yh ,y.getYh());
  4955 +// jzl =Arith.add(jzl, y.getJzl());
  4956 +// zlc =Arith.add(zlc, y.getZlc());
  4957 +// }else{
  4958 +// if(y.getLp().equals(s.getLpName())){
  4959 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4960 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4961 +// yh =Arith.add(yh ,y.getYh());
  4962 +// jzl =Arith.add(jzl, y.getJzl());
  4963 +// zlc =Arith.add(zlc, y.getZlc());
  4964 +// }
  4965 +// }
  4966 +//
  4967 +// }
  4968 +// }else{
  4969 +// type=1;
  4970 +// for (int i = 0; i < listDlb.size(); i++) {
  4971 +// Dlb d=listDlb.get(i);
  4972 +// if(d.getLp()==null){
  4973 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4974 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4975 +// yh =Arith.add(yh ,d.getHd());
  4976 +// jzl =Arith.add(jzl, d.getCdl());
  4977 +// zlc =Arith.add(zlc, d.getZlc());
  4978 +// }else{
  4979 +// if(d.getLp().equals(s.getLpName())){
  4980 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4981 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4982 +// yh =Arith.add(yh ,d.getHd());
  4983 +// jzl =Arith.add(jzl, d.getCdl());
  4984 +// zlc =Arith.add(zlc, d.getZlc());
  4985 +// }
  4986 +// }
  4987 +//
  4988 +// }
  4989 +// }
  4990 +
  4991 + List<Ylxxb> listylxxb = ylxxbRepository.queryListYlxxb(s.getClZbh(), fcrq);
  4992 + for (int i = 0; i < listylxxb.size(); i++) {
  4993 + Ylxxb t = listylxxb.get(i);
  4994 + jzl = Arith.add(jzl, t.getJzl());
  4995 + }
  4996 + map.put("jzl", jzl);
  4997 + map.put("yh", yh);
  4998 + map.put("ccyl", ccyl);
  4999 + map.put("jcyl", jcyl);
  5000 + map.put("type", type);
  5001 + map.put("zlc", zlc);
  5002 + map.put("xlName", s.getXlName());
  5003 + map.put("clZbh", s.getClZbh());
  5004 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  5005 + map.put("fcsjActual", s.getFcsjActual());
  5006 + map.put("zdzName", s.getZdzName());
  5007 + map.put("scheduleDate", s.getScheduleDateStr());
  5008 + map.put("lpName", s.getLpName());
  5009 + String zdp = "", zwdp = "", wdp = "";
  5010 + String zdpT = "", zwdpT = "", wdpT = "";
  5011 + String dbdp = "";
  5012 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  5013 + try {
  5014 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  5015 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  5016 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  5017 + for (int i = 0; i < list.size(); i++) {
  5018 + DutyEmployee t = list.get(i);
  5019 + if (dbdp.indexOf(t.getuName()) == -1) {
  5020 + if (!(dbdp.length() > 0)) {
  5021 + dbdp = t.getuName();
  5022 + } else {
  5023 + dbdp += "," + t.getuName();
  5024 + }
  5025 + }
  5026 + Long ts = t.getTs();
  5027 + if (ts > fcsj1 && ts < fcsj2) {
  5028 + if (zdp.indexOf(t.getuName()) == -1) {
  5029 + if (!(zdp.length() > 0)) {
  5030 + zdpT = t.getuName() + "...";
  5031 + }
  5032 + zdp += t.getuName() + ",";
  5033 +
  5034 + }
  5035 + } else if (ts > fcsj2 && ts < fcsj3) {
  5036 + if (zwdp.indexOf(t.getuName()) == -1) {
  5037 + if (!(zwdp.length() > 0)) {
  5038 + zwdpT = t.getuName() + "...";
  5039 + }
  5040 + zwdp += t.getuName() + ",";
  5041 + }
  5042 + } else {
  5043 + if (wdp.indexOf(t.getuName()) == -1) {
  5044 + if (!(wdp.length() > 0)) {
  5045 + wdpT = t.getuName() + "...";
  5046 + }
  5047 + wdp += t.getuName() + ",";
  5048 + }
  5049 + }
  5050 + }
  5051 + } catch (ParseException e) {
  5052 + // TODO Auto-generated catch block
  5053 + e.printStackTrace();
  5054 + }
  5055 + map.put("zdp", zdp);
  5056 + map.put("zwdp", zwdp);
  5057 + map.put("wdp", wdp);
  5058 + map.put("zdpT", zdpT);
  5059 + map.put("zwdpT", zwdpT);
  5060 + map.put("wdpT", wdpT);
  5061 + map.put("dbdp", dbdp);
  5062 + return map;
  5063 + }
  5064 +
  5065 + @Override
  5066 + public List<Map<String, Object>> scheduleDailyQp(String line, String date) {
  5067 + // TODO Auto-generated method stub
  5068 + List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  5069 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleDailyQp(line, date);
  5070 + Map<String, Object> map = null;
  5071 + String lp = "lp";
  5072 + String jgh = "jgh";
  5073 + String clzbh = "clzbh";
  5074 + int bcs = 0;
  5075 + String thclzbh = "";
  5076 + String sgh = "sgh";
  5077 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5078 + ScheduleRealInfo scheduleRealInfo = scheduleRealInfos.get(i);
  5079 + if (scheduleRealInfo.getLpName().equals(lp)) {
  5080 + bcs++;
  5081 + String fcsj = scheduleRealInfo.getFcsj();
  5082 +
  5083 + if (!clzbh.equals(scheduleRealInfo.getClZbh())) {
  5084 + clzbh = scheduleRealInfo.getClZbh();
  5085 + if (thclzbh == "") {
  5086 + thclzbh += scheduleRealInfo.getClZbh() + ",";
  5087 + } else {
  5088 + thclzbh += scheduleRealInfo.getClZbh();
  5089 + }
  5090 + map.put("thclzbh", thclzbh);
  5091 + }
  5092 +
  5093 + if (!jgh.equals(scheduleRealInfo.getjGh())) {
  5094 + jgh = scheduleRealInfo.getjGh();
  5095 + if (map.get("jjb2") != null) {
  5096 + map.put("jjb3", scheduleRealInfo.getjGh() + "/" +
  5097 + scheduleRealInfo.getFcsjActual());
  5098 +
  5099 + } else {
  5100 + map.put("jjb2", scheduleRealInfo.getjGh() + "/" +
  5101 + scheduleRealInfo.getFcsjActual());
  5102 + }
  5103 +
  5104 + }
  5105 +
  5106 + if (scheduleRealInfo.getsGh() != null) {
  5107 + if (!scheduleRealInfo.getsGh().equals(sgh)) {
  5108 + sgh = scheduleRealInfo.getsGh() == null ? "" : scheduleRealInfo.getsGh();
  5109 + if (!sgh.equals("")) {
  5110 + if (map.get("sjb1") != null) {
  5111 + if (map.get("sjb2") != null) {
  5112 + map.put("sjb3", scheduleRealInfo.getsGh() + "/" +
  5113 + scheduleRealInfo.getFcsjActual());
  5114 + } else {
  5115 + map.put("sjb2", scheduleRealInfo.getsGh() + "/" +
  5116 + scheduleRealInfo.getFcsjActual());
  5117 + }
  5118 + } else {
  5119 + map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
  5120 + scheduleRealInfo.getFcsjActual());
  5121 + }
  5122 + }
  5123 + }
  5124 + }
  5125 + if (scheduleRealInfo.getFcsjActual() != null) {
  5126 + String fcsjs[] = fcsj.split(":");
  5127 + String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
  5128 + int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
  5129 + int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
  5130 + map.put("cz" + bcs, b - a);
  5131 + } else {
  5132 + map.put("cz" + bcs, "无");
  5133 + }
  5134 + map.put("lp", scheduleRealInfo.getLpName());
  5135 + map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
  5136 + map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
  5137 +
  5138 + if (i < scheduleRealInfos.size() - 1) {
  5139 + if (!scheduleRealInfos.get(i + 1).getLpName().equals
  5140 + (scheduleRealInfos.get(i).getLpName())) {
  5141 + list.add(map);
  5142 + lp = "lp";
  5143 + jgh = "jgh";
  5144 + clzbh = "clzbh";
  5145 + bcs = 0;
  5146 + thclzbh = "";
  5147 + sgh = "sgh";
  5148 + }
  5149 + } else {
  5150 + list.add(map);
  5151 + }
  5152 + } else {
  5153 + bcs = 1;
  5154 + map = new HashMap<String, Object>();
  5155 + lp = scheduleRealInfo.getLpName();
  5156 + jgh = scheduleRealInfo.getjGh();
  5157 + clzbh = scheduleRealInfo.getClZbh();
  5158 + if (scheduleRealInfo.getsGh() != null) {
  5159 + sgh = scheduleRealInfo.getsGh();
  5160 + map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
  5161 + scheduleRealInfo.getFcsjActual());
  5162 + }
  5163 + String fcsj = scheduleRealInfo.getFcsj();
  5164 + scheduleRealInfo.getFcsjActual();
  5165 + map.put("jjb1", jgh + "/" + scheduleRealInfo.getFcsjActual());
  5166 + map.put("cccl", clzbh);
  5167 +
  5168 + if (scheduleRealInfo.getFcsjActual() != null) {
  5169 + String fcsjs[] = fcsj.split(":");
  5170 + String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
  5171 + int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
  5172 + int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
  5173 + map.put("cz" + bcs, b - a);
  5174 + } else {
  5175 + map.put("cz" + bcs, "无");
  5176 + }
  5177 +
  5178 +
  5179 + map.put("lp", scheduleRealInfo.getLpName());
  5180 + map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
  5181 + map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
  5182 +
  5183 + if (i < scheduleRealInfos.size() - 1) {
  5184 + if (!scheduleRealInfos.get(i + 1).getLpName().equals
  5185 + (scheduleRealInfos.get(i).getLpName())) {
  5186 + list.add(map);
  5187 + lp = "lp";
  5188 + jgh = "jgh";
  5189 + clzbh = "clzbh";
  5190 + bcs = 0;
  5191 + thclzbh = "";
  5192 + sgh = "sgh";
  5193 + }
  5194 + } else {
  5195 + list.add(map);
  5196 + }
  5197 + }
  5198 +
  5199 + }
  5200 + return list;
  5201 + }
  5202 +
  5203 +
  5204 + @Override
  5205 + public List<Map<String, Object>> scheduleDailyExport(Map<String, Object> map) {
  5206 + String line = map.get("line").toString();
  5207 + String date = map.get("date").toString();
  5208 + String xlName = map.get("xlName").toString();
  5209 + String state = map.get("state").toString();
  5210 + String type = map.get("type").toString();
  5211 + String genre =map.get("genre").toString();
  5212 + String df="";
  5213 + if(map.get("df")!=null){
  5214 + df=map.get("df").toString();
  5215 + }
  5216 +
  5217 + List<Map<String, Object>> dataList2 = new ArrayList<Map<String, Object>>();
  5218 + List<Map<String, Object>> dataList3 = new ArrayList<Map<String, Object>>();
  5219 + List<Map<String, Object>> list1 = this.statisticsDaily(line, date, xlName, null);
  5220 + List<ScheduleRealInfo> list2 = this.queryUserInfo(line, date, state);
  5221 + List<ScheduleRealInfo> list3 = new ArrayList<ScheduleRealInfo>();
  5222 + if(genre.equals("qp"))
  5223 + list3=this.realScheduleListQp(line, date);
  5224 + else if(genre.equals("zrw"))
  5225 + list3=this.realScheduleList_zrw(line, date);
  5226 + else
  5227 + list3=this.realScheduleList(line, date);
  5228 + Map<String, Object> nMap = new HashMap<String, Object>();
  5229 + nMap.put("date", xlName + date);
  5230 + nMap.put("jls", list1.get(0).get("jls"));
  5231 + nMap.put("sjgl", list1.get(0).get("sjgl"));
  5232 + for (Map<String, Object> m : list1) {
  5233 +// m.put("ssgl", m.get("ssgl"));
  5234 +// m.put("ssbc", m.get("ssbc"));
  5235 +// m.put("ssgl_lz", m.get("ssgl_lz") + " / " + m.get("ssbc_lz"));
  5236 +// m.put("ssgl_dm", m.get("ssgl_dm") + " / " + m.get("ssbc_dm"));
  5237 +// m.put("ssgl_gz", m.get("ssgl_gz") + " / " + m.get("ssbc_gz"));
  5238 +// m.put("ssgl_jf", m.get("ssgl_jf") + " / " + m.get("ssbc_jf"));
  5239 +// m.put("ssgl_zs", m.get("ssgl_zs") + " / " + m.get("ssbc_zs"));
  5240 +// m.put("ssgl_qr", m.get("ssgl_qr") + " / " + m.get("ssbc_qr"));
  5241 +// m.put("ssgl_qc", m.get("ssgl_qc") + " / " + m.get("ssbc_qc"));
  5242 +// m.put("ssgl_kx", m.get("ssgl_kx") + " / " + m.get("ssbc_kx"));
  5243 +// m.put("ssgl_qh", m.get("ssgl_qh") + " / " + m.get("ssbc_qh"));
  5244 +// m.put("ssgl_yw", m.get("ssgl_yw") + " / " + m.get("ssbc_yw"));
  5245 +// m.put("ssgl_other", m.get("ssgl_other") + " / " + m.get("ssbc_other"));
  5246 + }
  5247 +
  5248 + int size = 0;
  5249 + Map<String, Object> tempMap = new HashMap<String, Object>();
  5250 + for (int i = 0; i < list2.size(); i++) {
  5251 + ScheduleRealInfo s = list2.get(i);
  5252 + if (size == 5) {
  5253 + size = 0;
  5254 + dataList2.add(tempMap);
  5255 + tempMap = new HashMap<String, Object>();
  5256 + }
  5257 + tempMap.put("lp" + size, s.getLpName());
  5258 + tempMap.put("ch" + size, s.getClZbh());
  5259 + tempMap.put("jz" + size, s.getjGh() + "/" + s.getjName());
  5260 + tempMap.put("sz" + size, "");
  5261 + tempMap.put("jw" + size, "");
  5262 + tempMap.put("sw" + size, "");
  5263 +
  5264 + size++;
  5265 + }
  5266 + if (size < 5) {
  5267 + for (; size < 5; size++) {
  5268 + tempMap.put("lp" + size, "");
  5269 + tempMap.put("ch" + size, "");
  5270 + tempMap.put("jz" + size, "");
  5271 + tempMap.put("sz" + size, "");
  5272 + tempMap.put("jw" + size, "");
  5273 + tempMap.put("sw" + size, "");
  5274 + }
  5275 + }
  5276 +
  5277 + dataList2.add(tempMap);
  5278 +/*
  5279 + size = 0;
  5280 + tempMap = new HashMap<String, Object>();
  5281 + for (ScheduleRealInfo schedule : list3) {
  5282 + if (size == 3) {
  5283 + size = 0;
  5284 + dataList3.add(tempMap);
  5285 + tempMap = new HashMap<String, Object>();
  5286 + }
  5287 + tempMap.put("lpName" + size, schedule.getLpName());
  5288 + tempMap.put("qdzName" + size, schedule.getQdzName());
  5289 + tempMap.put("zdsj" + size, schedule.getZdsj());
  5290 + tempMap.put("zdsjActual" + size, schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "");
  5291 + tempMap.put("zdsjk" + size, "");
  5292 + tempMap.put("zdsjm" + size, "");
  5293 + tempMap.put("fcsj" + size, schedule.getFcsj());
  5294 + String fcsjActural=schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
  5295 + String bcType=schedule.getBcType()!=null?schedule.getBcType():"";
  5296 + if(bcType.equals("in")){
  5297 + fcsjActural=fcsjActural+"(进)";
  5298 + }
  5299 + if(bcType.equals("out")){
  5300 + fcsjActural=fcsjActural+"(出)";
  5301 + }
  5302 + tempMap.put("fcsjActual" + size, fcsjActural);
  5303 + tempMap.put("fcsjk" + size, "");
  5304 + tempMap.put("fcsjm" + size, "");
  5305 + tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : "");
  5306 +
  5307 + size++;
  5308 + }
  5309 + if (size < 3) {
  5310 + for (; size < 3; size++) {
  5311 + tempMap.put("lpName" + size, "");
  5312 + tempMap.put("qdzName" + size, "");
  5313 + tempMap.put("zdsj" + size, "");
  5314 + tempMap.put("zdsjActual" + size, "");
  5315 + tempMap.put("zdsjk" + size, "");
  5316 + tempMap.put("zdsjm" + size, "");
  5317 + tempMap.put("fcsj" + size, "");
  5318 + tempMap.put("fcsjActual" + size, "");
  5319 + tempMap.put("fcsjk" + size, "");
  5320 + tempMap.put("fcsjm" + size, "");
  5321 + tempMap.put("remarks" + size, "");
  5322 + }
  5323 + }
  5324 +*/
  5325 +
  5326 + size = 0;
  5327 + tempMap = new HashMap<String, Object>();
  5328 + for (ScheduleRealInfo schedule : list3) {
  5329 + int x = size % 3;
  5330 + if (x == 0 && size > 0) {
  5331 + dataList3.add(tempMap);
  5332 + tempMap = new HashMap<String, Object>();
  5333 + }
  5334 + tempMap.put("lpName" + x, schedule.getLpName());
  5335 + tempMap.put("qdzName" + x, schedule.getQdzName());
  5336 + tempMap.put("zdsj" + x, schedule.getZdsj());
  5337 + String zdsjActual = schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "";
  5338 + tempMap.put("zdsjActual" + x, zdsjActual);
  5339 +
  5340 + String zdsjk = "";
  5341 + String zdsjm = "";
  5342 + if (!zdsjActual.equals("")) {
  5343 + String[] zdsj_s = schedule.getZdsj().split(":");
  5344 + String[] zdsjActual_s = zdsjActual.split(":");
  5345 + Long zdsj_ = Long.parseLong(zdsj_s[0]) * 60 + Long.parseLong(zdsj_s[1]);
  5346 + Long zdsjActual_ = Long.parseLong(zdsjActual_s[0]) * 60 + Long.parseLong(zdsjActual_s[1]);
  5347 + if ((zdsj_ - zdsjActual_) > 0) {
  5348 + if(zdsj_ - zdsjActual_>1200){
  5349 + zdsjm=String.valueOf(1440-(zdsj_-zdsjActual_));
  5350 + }else{
  5351 + zdsjk = String.valueOf(zdsj_ - zdsjActual_);
  5352 + }
  5353 + } else {
  5354 + if(zdsjActual_ - zdsj_>1200){
  5355 + zdsjk =String.valueOf(1440-(zdsjActual_ - zdsj_));
  5356 + }else{
  5357 + zdsjm = String.valueOf(zdsjActual_ - zdsj_);
  5358 + }
  5359 + }
  5360 + }
  5361 + tempMap.put("zdsjk" + x, zdsjk);
  5362 + tempMap.put("zdsjm" + x, zdsjm.equals("0")?"":zdsjm);
  5363 + tempMap.put("fcsj" + x, schedule.getFcsj());
  5364 + String fcsjActural = schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
  5365 + String bcType = schedule.getBcType() != null ? schedule.getBcType() : "";
  5366 + String fcsjActuralstr = "";
  5367 + if (bcType.equals("in")) {
  5368 + fcsjActuralstr = fcsjActural + "(进)";
  5369 + } else if (bcType.equals("out")) {
  5370 + fcsjActuralstr = fcsjActural + "(出)";
  5371 + } else {
  5372 + fcsjActuralstr = fcsjActural;
  5373 + }
  5374 + tempMap.put("fcsjActual" + x, fcsjActuralstr);
  5375 + String fcsjk = "";
  5376 + String fcsjm = "";
  5377 + String dfsjk ="";
  5378 + String dfsjm="";
  5379 + if (!fcsjActural.equals("")) {
  5380 + String[] fcsj_s = schedule.getFcsj().split(":");
  5381 + String[] fcsjActural_s = fcsjActural.split(":");
  5382 + Long fcsj_ = Long.parseLong(fcsj_s[0]) * 60 + Long.parseLong(fcsj_s[1]);
  5383 + Long fcsjActural_ = Long.parseLong(fcsjActural_s[0]) * 60 + Long.parseLong(fcsjActural_s[1]);
  5384 + if ((fcsj_ - fcsjActural_) > 0) {
  5385 + if(fcsj_ - fcsjActural_>1200){
  5386 + fcsjm=String.valueOf(1440-(fcsj_ - fcsjActural_));
  5387 + }else{
  5388 + fcsjk = String.valueOf(fcsj_ - fcsjActural_);
  5389 + }
  5390 + } else {
  5391 + if(fcsjActural_ - fcsj_>1200){
  5392 + fcsjk =String.valueOf(1440-(fcsjActural_ - fcsj_));
  5393 + }
  5394 + else{
  5395 + fcsjm = String.valueOf(fcsjActural_ - fcsj_);
  5396 + }
  5397 + }
  5398 + if(df.equals("df")){
  5399 + String[] dfsj_s =schedule.getDfsj().split(":");
  5400 + Long dfsj_ = Long.parseLong(dfsj_s[0]) * 60 + Long.parseLong(dfsj_s[1]);
  5401 + if ((dfsj_ - fcsjActural_) > 0) {
  5402 + if(dfsj_ - fcsjActural_>1200){
  5403 + dfsjm=String.valueOf(1440-(dfsj_ - fcsjActural_));
  5404 + }else{
  5405 + dfsjk = String.valueOf(dfsj_ - fcsjActural_);
  5406 + }
  5407 + } else {
  5408 + if(fcsjActural_ - dfsj_>1200){
  5409 + dfsjk= String.valueOf(1440-(fcsjActural_ - dfsj_));
  5410 + }else{
  5411 + dfsjm = String.valueOf(fcsjActural_ - dfsj_);
  5412 + }
  5413 + }
  5414 + }
  5415 + }
  5416 + if(df.equals("df")){
  5417 + tempMap.put("dfsj"+x,schedule.getDfsj());
  5418 + tempMap.put("dfsjk" + x, dfsjk);
  5419 + tempMap.put("dfsjm" + x, dfsjm.equals("0")?"":dfsjm);
  5420 + }
  5421 + tempMap.put("fcsjk" + x, fcsjk);
  5422 + tempMap.put("fcsjm" + x, fcsjm.equals("0")?"":fcsjm);
  5423 + tempMap.put("remarks" + x, schedule.getRemark() != null ? schedule.getRemark() : "");
  5424 +
  5425 + size++;
  5426 + }
  5427 + if (tempMap.get("lpName0") != null) {
  5428 + if (tempMap.get("lpName1") == null) {
  5429 + tempMap.put("lpName1", "");
  5430 + tempMap.put("qdzName1", "");
  5431 + tempMap.put("zdsj1", "");
  5432 + tempMap.put("zdsjActual1", "");
  5433 + tempMap.put("zdsjk1", "");
  5434 + tempMap.put("zdsjm1", "");
  5435 + tempMap.put("fcsj1", "");
  5436 + tempMap.put("fcsjActual1", "");
  5437 + tempMap.put("fcsjk1", "");
  5438 + tempMap.put("fcsjm1", "");
  5439 + if(df.equals("df")){
  5440 + tempMap.put("dfsj1","");
  5441 + tempMap.put("dfsjk1" , "");
  5442 + tempMap.put("dfsjm1" , "");
  5443 + }
  5444 + tempMap.put("remarks1", "");
  5445 + }
  5446 + if (tempMap.get("lpName2") == null) {
  5447 + tempMap.put("lpName2", "");
  5448 + tempMap.put("qdzName2", "");
  5449 + tempMap.put("zdsj2", "");
  5450 + tempMap.put("zdsjActual2", "");
  5451 + tempMap.put("zdsjk2", "");
  5452 + tempMap.put("zdsjm2", "");
  5453 + tempMap.put("fcsj2", "");
  5454 + tempMap.put("fcsjActual2", "");
  5455 + tempMap.put("fcsjk2", "");
  5456 + tempMap.put("fcsjm2", "");
  5457 + if(df.equals("df")){
  5458 + tempMap.put("dfsj2","");
  5459 + tempMap.put("dfsjk2" , "");
  5460 + tempMap.put("dfsjm2" , "");
  5461 + }
  5462 + tempMap.put("remarks2", "");
  5463 + }
  5464 + dataList3.add(tempMap);
  5465 + }
  5466 +
  5467 + if (date.length() == 10) {
  5468 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
  5469 + String dbdp = "";
  5470 + try {
  5471 + for (int i = 0; i < list.size(); i++) {
  5472 + DutyEmployee t = list.get(i);
  5473 + if (dbdp.indexOf(t.getuName()) == -1) {
  5474 + if (!(dbdp.length() > 0)) {
  5475 + dbdp = t.getuName();
  5476 + } else {
  5477 + dbdp += "," + t.getuName();
  5478 + }
  5479 + }
  5480 + }
  5481 + } catch (Exception e) {
  5482 + // TODO: handle exception
  5483 + e.printStackTrace();
  5484 + }
  5485 + nMap.put("dbdp", dbdp);
  5486 + }
  5487 +
  5488 + if (type.equals("export")) {
  5489 + String lineName = "";
  5490 + if (map.containsKey("lineName"))
  5491 + lineName = "-" + map.get("lineName").toString() + "-";
  5492 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  5493 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  5494 + Map<String, Object> m = new HashMap<String, Object>();
  5495 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  5496 + ReportUtils ee = new ReportUtils();
  5497 + try {
  5498 + listI.add(list1.iterator());
  5499 + listI.add(dataList2.iterator());
  5500 + listI.add(dataList3.iterator());
  5501 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  5502 + String sourcePath = path + "mould/scheduleDaily.xls";
  5503 + if (date.length() == 7) {
  5504 + sdfMonth = new SimpleDateFormat("yyyy-MM");
  5505 + sdfSimple = new SimpleDateFormat("yyyyMM");
  5506 + sourcePath = path + "mould/scheduleDaily_m.xls";
  5507 + }
  5508 + if(df.equals("df")){
  5509 + sourcePath =path + "mould/scheduleDaily_df.xls";
  5510 + }
  5511 + ee.excelReplace(listI, new Object[]{nMap}, sourcePath,
  5512 + path + "export/" + sdfSimple.format(sdfMonth.parse(date)) + lineName + "调度日报.xls");
  5513 + } catch (Exception e) {
  5514 + // TODO: handle exception
  5515 + e.printStackTrace();
  5516 + }
  5517 + }
  5518 +
  5519 + return new ArrayList<Map<String, Object>>();
  5520 + }
  5521 +
  5522 + public void exportWaybill_pl(List<ScheduleRealInfo> listpl,
  5523 + String date, String jName, String clZbh, String lpName) {
  5524 + ReportUtils ee = new ReportUtils();
  5525 + ReportRelatedUtils rru = new ReportRelatedUtils();
  5526 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  5527 + List<ScheduleRealInfo> scheduleRealInfos = listpl;
  5528 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  5529 +// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
  5530 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  5531 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5532 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5533 + Set<ChildTaskPlan> cts = s.getcTasks();
  5534 + if (cts != null && cts.size() > 0) {
  5535 + lists.add(s);
  5536 + } else {
  5537 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  5538 + lists.add(s);
  5539 + }
  5540 + }
  5541 + }
  5542 + DecimalFormat format = new DecimalFormat("0.00");
  5543 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  5544 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  5545 + //计算里程和班次数,并放入Map里
  5546 + Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  5547 +
  5548 + map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
  5549 + map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
  5550 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  5551 + double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
  5552 + map.put("yygl", yygl);
  5553 + double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
  5554 + map.put("ksgl", ksgl);
  5555 + map.put("realMileage", Arith.add(yygl, ksgl));
  5556 + map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
  5557 + map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
  5558 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  5559 + int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
  5560 + map.put("sjbc", sjbc);
  5561 +// map=new HashMap<String,Object>();
  5562 +
  5563 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  5564 + String minfcsj = "02:00";
  5565 + List<Line> lineList = lineRepository.findLineByCode(listpl.get(0).getXlBm());
  5566 + if (lineList.size() > 0) {
  5567 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  5568 + + " id = ("
  5569 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  5570 + + ")";
  5571 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  5572 + }
  5573 + String[] minSjs = minfcsj.split(":");
  5574 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  5575 +
  5576 +
  5577 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5578 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5579 + String[] fcsj = s.getFcsj().split(":");
  5580 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  5581 +
  5582 + Long fscjT = 0L;
  5583 + if (fcsjL < minSj) {
  5584 + Calendar calendar = new GregorianCalendar();
  5585 + calendar.setTime(s.getScheduleDate());
  5586 + calendar.add(calendar.DATE, 1);
  5587 + s.setScheduleDate(calendar.getTime());
  5588 + try {
  5589 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  5590 + } catch (ParseException e) {
  5591 + // TODO Auto-generated catch block
  5592 + e.printStackTrace();
  5593 + }
  5594 +
  5595 + } else {
  5596 + try {
  5597 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  5598 + } catch (ParseException e) {
  5599 + // TODO Auto-generated catch block
  5600 + e.printStackTrace();
  5601 + }
  5602 + ;
  5603 + }
  5604 + s.setFcsjT(fscjT);
  5605 + }
  5606 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  5607 + Collections.sort(scheduleRealInfos, new ComparableReal());
  5608 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5609 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5610 + s.setAdjustExps(i + 1 + "");
  5611 + String remarks = "";
  5612 + if (s.getRemarks() != null) {
  5613 + remarks += s.getRemarks();
  5614 + }
  5615 +
  5616 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  5617 + if (!childTaskPlans.isEmpty()) {
  5618 + s.setFcsjActual("");
  5619 + s.setZdsjActual("");
  5620 + s.setJhlc(0.0);
  5621 + }
  5622 +
  5623 + if (s.isDestroy()) {
  5624 + s.setFcsjActual("");
  5625 + s.setZdsjActual("");
  5626 + s.setJhlc(0.0);
  5627 + remarks += "(烂班)";
  5628 + s.setRemarks(remarks);
  5629 + }
  5630 +
  5631 + listSchedule.add(s);
  5632 + //计算营运里程,空驶里程
  5633 + if (!childTaskPlans.isEmpty()) {
  5634 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  5635 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  5636 + Collections.sort(listit, new ComparableChild());
  5637 + for (int j = 0; j < listit.size(); j++) {
  5638 + ScheduleRealInfo t = new ScheduleRealInfo();
  5639 + ChildTaskPlan childTaskPlan = listit.get(j);
  5640 + if (childTaskPlan.isDestroy()) {
  5641 + t.setFcsjActual("");
  5642 + t.setZdsjActual("");
  5643 + t.setJhlc(0.0);
  5644 + } else {
  5645 + t.setFcsjActual(childTaskPlan.getStartDate());
  5646 + t.setZdsjActual(childTaskPlan.getEndDate());
  5647 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  5648 + }
  5649 + t.setQdzName(childTaskPlan.getStartStationName());
  5650 + t.setZdzName(childTaskPlan.getEndStationName());
  5651 + t.setRemarks(childTaskPlan.getRemarks());
  5652 + t.setAdjustExps("子");
  5653 + t.setjGh("");
  5654 + t.setjName("");
  5655 + t.setsGh("");
  5656 + t.setsName("");
  5657 + listSchedule.add(t);
  5658 + }
  5659 + }
  5660 + }
  5661 + Map<String, Object> maps;
  5662 + for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
  5663 + maps = new HashMap<String, Object>();
  5664 + try {
  5665 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  5666 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  5667 + maps = rru.getMapValue(scheduleRealInfo);
  5668 + maps.put("bcs", scheduleRealInfo.getAdjustExps());
  5669 + String zdsj = scheduleRealInfo.getZdsj();
  5670 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  5671 + if (zdsj != null && zdsjActual != null &&
  5672 + !zdsj.equals(zdsjActual) &&
  5673 + !zdsj.equals("") &&
  5674 + !zdsjActual.equals("")) {
  5675 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  5676 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  5677 + if (zdsj.compareTo(zdsjActual) > 0) {
  5678 + if (zdsjT - zdsjAT > 1000) {
  5679 + maps.put("fast", "");
  5680 + maps.put("slow", zdsjAT - zdsjT + 1440);
  5681 + } else {
  5682 + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  5683 + maps.put("slow", "");
  5684 + }
  5685 + } else {
  5686 + if (zdsjAT - zdsjT > 1000) {
  5687 + maps.put("fast", zdsjT - zdsjAT + 1440);
  5688 + maps.put("slow", "");
  5689 + } else {
  5690 + maps.put("fast", "");
  5691 + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  5692 + }
  5693 + }
  5694 + } else {
  5695 + maps.put("fast", "");
  5696 + maps.put("slow", "");
  5697 + }
  5698 + listMap.add(maps);
  5699 + } catch (Exception e) {
  5700 + e.printStackTrace();
  5701 + }
  5702 + }
  5703 +
  5704 +
  5705 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  5706 + list.add(listMap.iterator());
  5707 + String xls = "";
  5708 + if (map.get("type").toString().equals("0")) {
  5709 + xls = "waybill_minhang.xls";
  5710 + } else {
  5711 + xls = "waybill_minhang_dl.xls";
  5712 + }
  5713 + map.put("sheetName", jName + "-" + clZbh + "-" + lpName);
  5714 + ee.excelReplace(list, new Object[]{map}, path + "mould/" + xls,
  5715 + path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  5716 + }
  5717 +
  5718 + @Override
  5719 + public Map<String, Object> exportWaybillMore(Map<String, Object> map) {
  5720 + String date = map.get("date").toString();
  5721 + String line = map.get("line").toString();
  5722 + ReportUtils ee = new ReportUtils();
  5723 + List<List> lists = JSON.parseArray(map.get("strs").toString(), List.class);
  5724 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
  5725 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  5726 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  5727 + int num = 0;
  5728 + File file = null;
  5729 + try {
  5730 + while (true) {
  5731 + String fileUrl = path + "行车路单" + sdfSimple.format(sdfMonth.parse(date));
  5732 +// file = new File(fileUrl + (num == 0 ? "/" : "(" + num + ")/")); //新建文件夹
  5733 + file = new File(fileUrl + (num == 0 ? ".xls" : "(" + num + ").xls")); //新建excel文件
  5734 + if (file.exists()) { //判断是否已存在重名
  5735 + num++;
  5736 + } else {
  5737 + break;
  5738 + }
  5739 + }
  5740 +// file.mkdirs(); //创建
  5741 + List<ScheduleRealInfo> lists_line = scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
  5742 + List<File> files = new ArrayList<File>();
  5743 + for (List<String> list : lists) {
  5744 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  5745 + String jName = list.get(0);
  5746 + String clZbh = list.get(1);
  5747 + String lpName = list.get(2);
  5748 + String jGh = list.get(3);
  5749 + for (int i = 0; i < lists_line.size(); i++) {
  5750 + ScheduleRealInfo s = lists_line.get(i);
  5751 + if (s.getjGh().equals(jGh) && s.getClZbh().equals(clZbh) && s.getLpName().equals(lpName)) {
  5752 + newList.add(s);
  5753 + }
  5754 + }
  5755 + this.exportWaybill_pl(newList, date, jName, clZbh, lpName);
  5756 + File temp = new File(path + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  5757 + String fileName = file.getName();
  5758 + files.add(temp);
  5759 + }
  5760 + for (int i = 1; i < files.size(); i++) {
  5761 + File file1 = files.get(0);
  5762 + File file2 = files.get(i);
  5763 + ee.copySheetByFile(file2, file1, 0, 145);
  5764 + }
  5765 + File newFile = files.get(0);
  5766 + newFile.renameTo(file);
  5767 +// temp.renameTo(new File(path + fileName + "/" + temp.getName()));
  5768 +// File[] listFiles = file.listFiles();
  5769 +// ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(path + file.getName() + ".zip")));
  5770 +//// zos.setEncoding("gbk");
  5771 +//// zos.putNextEntry(new ZipEntry(fileName + "/"));
  5772 +// for (int i = 0; i < listFiles.length; i++) {
  5773 +// zos.putNextEntry(new ZipEntry(fileName + "/" + listFiles[i].getName()));
  5774 +// BufferedInputStream bis = new BufferedInputStream(new FileInputStream(listFiles[i]));
  5775 +// BufferedOutputStream bos = new BufferedOutputStream(zos);
  5776 +// int bytesRead = 0;
  5777 +// for (byte[] buffer = new byte[BUF_SIZE]; ((bytesRead = bis.read(buffer, 0, BUF_SIZE)) != -1); ) {
  5778 +//// zos.write(buffer, 0, bytesRead);
  5779 +//// zos.flush();
  5780 +// bos.write(buffer, 0, bytesRead);
  5781 +// bos.flush();
  5782 +// }
  5783 +//// bos.close();
  5784 +// bis.close();
  5785 +// }
  5786 +// zos.close();
  5787 +// }
  5788 +
  5789 + } catch (Exception e) {
  5790 + // TODO: handle exception
  5791 + e.printStackTrace();
  5792 + }
  5793 +
  5794 + map.put("fileName", file.getName());
  5795 + return map;
  5796 + }
  5797 +
  5798 + @Autowired
  5799 + SchedulePlanInfoService schPlanService;
  5800 +
  5801 + @Override
  5802 + public List<SchedulePlanInfo> currentSchedulePlan(String lineCode) {
  5803 + List<SchedulePlanInfo> rs = dayOfSchedule.schedulePlanMap.get(lineCode);
  5804 +
  5805 + if (rs == null || rs.size() == 0) {
  5806 + //尝试刷新内存
  5807 + Map<String, Object> data = new HashMap<>();
  5808 + data.put("scheduleDate_eq", dayOfSchedule.currSchDateMap.get(lineCode));
  5809 + data.put("xlBm_eq", lineCode);
  5810 + List<SchedulePlanInfo> planItr = dayOfSchedule.cleanSchPlanItr(schPlanService.list(data).iterator());
  5811 +
  5812 + if (planItr.size() > 0) {
  5813 + dayOfSchedule.schedulePlanMap.put(lineCode, planItr);
  5814 + return planItr;
  5815 + }
  5816 + }
  5817 + return rs;
  5818 + }
  5819 +
  5820 +
  5821 + @Override
  5822 + public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx, int type) {
  5823 + Map<String, Object> rs = new HashMap<>();
  5824 + Set<ScheduleRealInfo> ts = new HashSet<>();
  5825 + try {
  5826 + List<String> leftList = Splitter.on(",").splitToList(leftIdx);
  5827 + List<String> rightList = Splitter.on(",").splitToList(rightIdx);
  5828 + Set<String> lpSet = new HashSet<>();
  5829 + Set<String> carSet = new HashSet<>();
  5830 +
  5831 + List<ScheduleRealInfo> largeList, smallList;
  5832 + if (leftList.size() > rightList.size()) {
  5833 + largeList = getByIdx(leftList);
  5834 + smallList = getByIdx(rightList);
  5835 + } else {
  5836 + largeList = getByIdx(rightList);
  5837 + smallList = getByIdx(leftList);
  5838 + }
  5839 +
  5840 + ScheduleRealInfo leftSch, rightSch = null;
  5841 + for (int i = 0; i < largeList.size(); i++) {
  5842 + leftSch = largeList.get(i);
  5843 + leftSch.setLpChange(1);
  5844 + if (i < smallList.size()) {
  5845 + rightSch = smallList.get(i);
  5846 + rightSch.setLpChange(1);
  5847 + ts.add(rightSch);
  5848 + } else {
  5849 + //不对称时多出来的
  5850 + lpChangeByLeft(leftSch, largeList.get(i - 1), type);
  5851 + ts.add(leftSch);
  5852 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
  5853 + continue;
  5854 + }
  5855 +
  5856 + //调换路牌
  5857 + lpChange(leftSch, rightSch, type);
  5858 + ts.add(leftSch);
  5859 +
  5860 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
  5861 + lpSet.add(rightSch.getXlBm() + "_" + rightSch.getLpName());
  5862 +
  5863 + carSet.add(leftSch.getClZbh());
  5864 + carSet.add(rightSch.getClZbh());
  5865 + scheduleRealInfoRepository.updateLpChange(leftSch.getId());
  5866 + scheduleRealInfoRepository.updateLpChange(rightSch.getId());
  5867 + }
  5868 +
  5869 + //重新计算路牌的起点应到时间
  5870 + for (String lpName : lpSet) {
  5871 + ts.addAll(dayOfSchedule.updateQdzTimePlan(lpName));
  5872 + }
  5873 +
  5874 + //重新就算车辆当前执行班次
  5875 + for(String nbbm : carSet){
  5876 + dayOfSchedule.reCalcExecPlan(nbbm);
  5877 + }
  5878 +
  5879 +
  5880 + for (ScheduleRealInfo sch : ts) {
  5881 + dayOfSchedule.save(sch);
  5882 + }
  5883 +
  5884 + rs.put("status", ResponseCode.SUCCESS);
  5885 + rs.put("ts", ts);
  5886 + } catch (Exception e) {
  5887 + logger.error("", e);
  5888 + rs.put("status", ResponseCode.ERROR);
  5889 + rs.put("msg", e.getMessage());
  5890 + }
  5891 +
  5892 + return rs;
  5893 + }
  5894 +
  5895 + private List<ScheduleRealInfo> getByIdx(List<String> idList) {
  5896 + List<ScheduleRealInfo> list = new ArrayList<>();
  5897 + for (String id : idList) {
  5898 + list.add(dayOfSchedule.get(Long.parseLong(id)));
  5899 + }
  5900 + return list;
  5901 + }
  5902 +
  5903 + @Override
  5904 + public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
  5905 + //释放班次映射
  5906 + if (type > 0) {
  5907 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
  5908 + dayOfSchedule.removeNbbm2SchMapp(rightSch);
  5909 + }
  5910 +
  5911 + //对调数据
  5912 + LpData leftData = new LpData(leftSch);
  5913 + LpData rightData = new LpData(rightSch);
  5914 +
  5915 + leftData.appendTo(rightSch, type);
  5916 + rightData.appendTo(leftSch, type);
  5917 +
  5918 + if (type > 0) {
  5919 + //重新映射
  5920 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  5921 + dayOfSchedule.addNbbm2SchMapp(rightSch);
  5922 + }
  5923 + }
  5924 +
  5925 + /**
  5926 + * 更换左边班次的路牌,右边不变
  5927 + *
  5928 + * @param leftSch
  5929 + * @param rightSch
  5930 + * @param type
  5931 + */
  5932 + public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
  5933 + //释放班次映射
  5934 + if (type > 0)
  5935 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
  5936 +
  5937 + LpData rightData = new LpData(rightSch);
  5938 + rightData.appendTo(leftSch, type);
  5939 +
  5940 + //重新映射
  5941 + if (type > 0)
  5942 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  5943 +
  5944 + }
  5945 +
  5946 + @Override
  5947 + public Map<String, Object> revokeRealArrive(Long id) {
  5948 + Map<String, Object> rs = new HashMap<>();
  5949 + List<ScheduleRealInfo> ts = new ArrayList<>();
  5950 +
  5951 + try {
  5952 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  5953 + if (sch.getZdsjActual() == null && sch.getFcsjActual() == null) {
  5954 + rs.put("status", ResponseCode.ERROR);
  5955 + rs.put("msg", "班次未执行,无法撤销!");
  5956 + } else {
  5957 + //日志记录
  5958 + ScheduleModifyLogger.cxzx(sch);
  5959 +
  5960 + sch.clearFcsjActual();
  5961 + sch.clearZdsjActual();
  5962 + //清除路牌下一个班的起点到达时间
  5963 + ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
  5964 + if (null != next) {
  5965 + next.setQdzArrDatesj(null);
  5966 + ts.add(next);
  5967 + }
  5968 +
  5969 + rs.put("status", ResponseCode.SUCCESS);
  5970 +
  5971 + ts.add(sch);
  5972 + rs.put("ts", ts);
  5973 +
  5974 + dayOfSchedule.save(sch);
  5975 + //重新计算当前执行班次
  5976 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  5977 +
  5978 + }
  5979 + } catch (Exception e) {
  5980 + logger.error("", e);
  5981 + rs.put("status", ResponseCode.ERROR);
  5982 + }
  5983 + return rs;
  5984 + }
  5985 +
  5986 + @Override
  5987 + public Map<String, Object> lateAdjust(String idx, float minute) {
  5988 + Map<String, Object> rs = new HashMap<>();
  5989 + try {
  5990 + int count = 0;
  5991 + List<ScheduleRealInfo> list = new ArrayList<>();
  5992 + List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
  5993 +
  5994 + ScheduleRealInfo sch;
  5995 + for (String id : ids) {
  5996 + sch = dayOfSchedule.get(Long.parseLong(id));
  5997 + if (sch != null && sch.getStatus() == 0) {
  5998 + if (minute > 0) {
  5999 + sch.setLateMinute(minute);
  6000 + } else if (minute == 0) {
  6001 + LateAdjustHandle.remove(sch);
  6002 + }
  6003 + count++;
  6004 + list.add(sch);
  6005 + }
  6006 + }
  6007 +
  6008 + rs.put("status", ResponseCode.SUCCESS);
  6009 + rs.put("count", count);
  6010 + rs.put("ts", list);
  6011 + } catch (Exception e) {
  6012 + logger.error("", e);
  6013 + rs.put("status", ResponseCode.ERROR);
  6014 + rs.put("msg", e.getMessage());
  6015 + }
  6016 +
  6017 + return rs;
  6018 + }
  6019 +
  6020 + @Override
  6021 + public List<ScheduleRealInfo> allLate2(String idx) {
  6022 + List<ScheduleRealInfo> rs = new ArrayList<>();
  6023 + List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
  6024 +
  6025 + Collection<ScheduleRealInfo> all = LateAdjustHandle.allLateSch();
  6026 + for (ScheduleRealInfo sch : all) {
  6027 + if (ids.indexOf(sch.getXlBm()) != -1) {
  6028 + rs.add(sch);
  6029 + }
  6030 + }
  6031 + return rs;
  6032 + }
  6033 +
  6034 +
  6035 + @Override
  6036 + public List<Map<String, Object>> mileageReport(String gsdm,
  6037 + String fgsdm, String line, String date, String date2) {
  6038 +
  6039 + String sql = "select * from calc_mileage where 1=1 ";
  6040 + if (!line.equals(" ")) {
  6041 + sql = sql + " and line_code='" + line + "' ";
  6042 + }
  6043 + sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
  6044 + if (!gsdm.equals(" ")) {
  6045 + sql = sql + " and company_id=" + gsdm;
  6046 + }
  6047 + if (!gsdm.equals(" ")) {
  6048 + sql = sql + " and sub_company_id=" + fgsdm;
  6049 + }
  6050 + sql = sql + " order by line_code";
  6051 + List<MileageReport> list = jdbcTemplate.query(sql,
  6052 + new RowMapper<MileageReport>() {
  6053 + @Override
  6054 + public MileageReport mapRow(ResultSet rs, int rowNum) throws SQLException {
  6055 + MileageReport mr = new MileageReport();
  6056 + mr.setCompanyName(rs.getString("company_name"));
  6057 + mr.setSubCompanyName(rs.getString("sub_company_name"));
  6058 + mr.setLineName(rs.getString("line_name"));
  6059 + mr.setSjyygl(rs.getDouble("sjyygl"));
  6060 + mr.setSjksgl(rs.getDouble("sjksgl"));
  6061 + mr.setZgl(rs.getDouble("zyygl"));
  6062 + mr.setZddfgl(rs.getDouble("zddfgl"));
  6063 + mr.setSddfgl(rs.getDouble("sddfgl"));
  6064 + mr.setWqwxhgl(rs.getDouble("wqwxhgl"));
  6065 + mr.setBfwxhgl(rs.getDouble("bfwxhgl"));
  6066 + mr.setPygl(rs.getDouble("pygl"));
  6067 + mr.setLjgl(rs.getDouble("ljgl"));
  6068 + mr.setZrwgl(rs.getDouble("zrwgl"));
  6069 + mr.setOther(rs.getString("other"));
  6070 + return mr;
  6071 + }
  6072 + });
  6073 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  6074 + double sjyygl = 0.0;
  6075 + double sjksgl = 0.0;
  6076 + double zgl = 0.0;
  6077 + double sddfgl = 0.0;
  6078 + double zddfgl = 0.0;
  6079 + double wqwxhgl = 0.0;
  6080 + double bfwxhgl = 0.0;
  6081 + double pygl = 0.0;
  6082 + double ljgl = 0.0;
  6083 + double zrwgl = 0.0;
  6084 + for (MileageReport mr : list) {
  6085 + Map<String, Object> resMap = new HashMap<String, Object>();
  6086 + resMap.put("gsName", mr.getCompanyName());
  6087 + resMap.put("fgsName", mr.getSubCompanyName());
  6088 + resMap.put("xlName", mr.getLineName());
  6089 + resMap.put("sjyygl", mr.getSjyygl());
  6090 + resMap.put("sjksgl", mr.getSjksgl());
  6091 + resMap.put("zgl", mr.getZgl());
  6092 + resMap.put("sddfgl", mr.getSddfgl());
  6093 + resMap.put("zddfgl", mr.getZddfgl());
  6094 + resMap.put("wqwxhgl", mr.getWqwxhgl());
  6095 + resMap.put("bfwxhgl", mr.getBfwxhgl());
  6096 + resMap.put("pygl", mr.getPygl());
  6097 + resMap.put("ljgl", mr.getLjgl());
  6098 + resMap.put("zrwgl", mr.getZrwgl());
  6099 + resMap.put("other", mr.getOther());
  6100 + lMap.add(resMap);
  6101 + sjyygl = Arith.add(sjyygl, mr.getSjyygl());
  6102 + sjksgl = Arith.add(sjksgl, mr.getSjksgl());
  6103 + zgl = Arith.add(zgl, mr.getZgl());
  6104 + sddfgl = Arith.add(sddfgl, mr.getSddfgl());
  6105 + zddfgl = Arith.add(zddfgl, mr.getZddfgl());
  6106 + wqwxhgl = Arith.add(wqwxhgl, mr.getWqwxhgl());
  6107 + bfwxhgl = Arith.add(bfwxhgl, mr.getBfwxhgl());
  6108 + pygl = Arith.add(pygl, mr.getPygl());
  6109 + ljgl = Arith.add(ljgl, mr.getLjgl());
  6110 + zrwgl = Arith.add(zrwgl, mr.getZrwgl());
  6111 + }
  6112 + Map<String, Object> resMap = new HashMap<String, Object>();
  6113 + resMap.put("xlName", "合计");
  6114 + resMap.put("sjyygl", sjyygl);
  6115 + resMap.put("sjksgl", sjksgl);
  6116 + resMap.put("zgl", zgl);
  6117 + resMap.put("sddfgl", sddfgl);
  6118 + resMap.put("zddfgl", zddfgl);
  6119 + resMap.put("wqwxhgl", wqwxhgl);
  6120 + resMap.put("bfwxhgl", bfwxhgl);
  6121 + resMap.put("pygl", pygl);
  6122 + resMap.put("ljgl", ljgl);
  6123 + resMap.put("zrwgl", zrwgl);
  6124 + resMap.put("other", null);
  6125 + lMap.add(resMap);
  6126 + return lMap;
  6127 + }
  6128 +
  6129 + @Override
  6130 + public List<Map<String, Object>> scheduleCorrectionReport(String gsdm,
  6131 + String fgsdm, String line, String date, String date2) {
  6132 +
  6133 + String sql = "select * from calc_schedule where 1=1 ";
  6134 + if (!line.equals(" ")) {
  6135 + sql = sql + " and line_code='" + line + "' ";
  6136 + }
  6137 + sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
  6138 + if (!gsdm.equals(" ")) {
  6139 + sql = sql + " and company_id=" + gsdm;
  6140 + }
  6141 + if (!gsdm.equals(" ")) {
  6142 + sql = sql + " and sub_company_id=" + fgsdm;
  6143 + }
  6144 + sql = sql + " order by line_code";
  6145 + List<ScheduleCorrectionReport> list = jdbcTemplate.query(sql,
  6146 + new RowMapper<ScheduleCorrectionReport>() {
  6147 + @Override
  6148 + public ScheduleCorrectionReport mapRow(ResultSet rs, int rowNum) throws SQLException {
  6149 + ScheduleCorrectionReport sReport = new ScheduleCorrectionReport();
  6150 + sReport.setCompanyName(rs.getString("company_name"));
  6151 + sReport.setSubCompanyName(rs.getString("sub_company_name"));
  6152 + sReport.setLineName(rs.getString("line_name"));
  6153 + sReport.setSjyybc(rs.getInt("sjyybc"));
  6154 + sReport.setSjksbc(rs.getInt("sjksbc"));
  6155 + sReport.setZbc(rs.getInt("zyybc"));
  6156 + sReport.setZddfbc(rs.getInt("zddfbc"));
  6157 + sReport.setSddfbc(rs.getInt("sddfbc"));
  6158 + sReport.setWqwxhbc(rs.getInt("wqwxhbc"));
  6159 + sReport.setBfwxhbc(rs.getInt("bfwxhbc"));
  6160 + sReport.setPybc(rs.getInt("pybc"));
  6161 + sReport.setLjbc(rs.getInt("ljbc"));
  6162 + sReport.setZrwbc(rs.getInt("zrwbc"));
  6163 + sReport.setOther(rs.getString("other"));
  6164 + return sReport;
  6165 + }
  6166 + });
  6167 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  6168 + int sjyybc = 0;
  6169 + int sjksbc = 0;
  6170 + int zbc = 0;
  6171 + int sddfbc = 0;
  6172 + int zddfbc = 0;
  6173 + int wqwxhbc = 0;
  6174 + int bfwxhbc = 0;
  6175 + int pybc = 0;
  6176 + int ljbc = 0;
  6177 + int zrwbc = 0;
  6178 + for (ScheduleCorrectionReport sReport : list) {
  6179 + Map<String, Object> resMap = new HashMap<String, Object>();
  6180 + resMap.put("gsName", sReport.getCompanyName());
  6181 + resMap.put("fgsName", sReport.getSubCompanyName());
  6182 + resMap.put("xlName", sReport.getLineName());
  6183 + resMap.put("sjyybc", sReport.getSjyybc());
  6184 + resMap.put("sjksbc", sReport.getSjksbc());
  6185 + resMap.put("zbc", sReport.getZbc());
  6186 + resMap.put("sddfbc", sReport.getSddfbc());
  6187 + resMap.put("zddfbc", sReport.getZddfbc());
  6188 + resMap.put("wqwxhbc", sReport.getWqwxhbc());
  6189 + resMap.put("bfwxhbc", sReport.getBfwxhbc());
  6190 + resMap.put("pybc", sReport.getPybc());
  6191 + resMap.put("ljbc", sReport.getLjbc());
  6192 + resMap.put("zrwbc", sReport.getZrwbc());
  6193 + resMap.put("other", sReport.getOther());
  6194 + lMap.add(resMap);
  6195 + sjyybc = sjyybc + sReport.getSjyybc();
  6196 + sjksbc = sjksbc + sReport.getSjksbc();
  6197 + zbc = zbc + sReport.getZbc();
  6198 + sddfbc = sddfbc + sReport.getSddfbc();
  6199 + zddfbc = zddfbc + sReport.getZddfbc();
  6200 + wqwxhbc = wqwxhbc + sReport.getWqwxhbc();
  6201 + bfwxhbc = bfwxhbc + sReport.getBfwxhbc();
  6202 + pybc = pybc + sReport.getPybc();
  6203 + ljbc = ljbc + sReport.getLjbc();
  6204 + zrwbc = zrwbc + sReport.getZrwbc();
  6205 + }
  6206 + Map<String, Object> resMap = new HashMap<String, Object>();
  6207 + resMap.put("xlName", "合计");
  6208 + resMap.put("sjyybc", sjyybc);
  6209 + resMap.put("sjksbc", sjksbc);
  6210 + resMap.put("zbc", zbc);
  6211 + resMap.put("sddfbc", sddfbc);
  6212 + resMap.put("zddfbc", zddfbc);
  6213 + resMap.put("wqwxhbc", wqwxhbc);
  6214 + resMap.put("bfwxhbc", bfwxhbc);
  6215 + resMap.put("pybc", pybc);
  6216 + resMap.put("ljbc", ljbc);
  6217 + resMap.put("zrwbc", zrwbc);
  6218 + resMap.put("other", null);
  6219 + lMap.add(resMap);
  6220 + return lMap;
  6221 + }
  6222 +
  6223 + @Override
  6224 + public Integer isCircleQdz(String clzbh, String sdr, String xlbm, String qdzCode) {
  6225 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  6226 + String time =sdf.format(Long.parseLong(sdr));
  6227 +
  6228 + Long num=scheduleRealInfoRepository.isCircleQdz(clzbh, time, xlbm, qdzCode);
  6229 + Integer num2=num==0L?0:1;
  6230 + return num2;
  6231 + }
  6232 +
  6233 + @SuppressWarnings("unchecked")
  6234 + private static Map<String, Object> request(String url) {
  6235 + Map<String, Object> res = new HashMap<String, Object>();
  6236 + res.put("status", ResponseCode.SUCCESS);
  6237 + InputStream in = null;
  6238 + HttpURLConnection con = null;
  6239 + try {
  6240 + con = (HttpURLConnection)new URL(url).openConnection();
  6241 + con.setRequestMethod("POST");
  6242 + con.setRequestProperty("keep-alive", "true");
  6243 + con.setRequestProperty("accept", "application/json");
  6244 + con.setRequestProperty("content-type", "application/json");
  6245 + con.setDoInput(true);
  6246 + con.setReadTimeout(2500);
  6247 + con.setConnectTimeout(2500);
  6248 +
  6249 + con.connect();
  6250 + if (con.getResponseCode() == 200) {
  6251 + in = con.getInputStream();
  6252 + ByteArrayOutputStream bout = new ByteArrayOutputStream();
  6253 + IOUtils.copy(in, bout); bout.close();
  6254 + Map<String, Object> response = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
  6255 + if (!"报修成功".equals(response.get("msg"))) {
  6256 + res.put("status", ResponseCode.ERROR);
  6257 + res.putAll(response);
  6258 + }
  6259 + } else {
  6260 + res.put("status", ResponseCode.ERROR);
  6261 + res.put("msg", "调用上报接口异常");
  6262 + }
  6263 + } catch (IOException e) {
  6264 + // TODO Auto-generated catch block
  6265 + res.put("status", ResponseCode.ERROR);
  6266 + res.put("msg", "调用上报接口异常");
  6267 + } finally {
  6268 + try {
  6269 + if (in != null) in.close();
  6270 + if (con != null) con.disconnect();
  6271 + } catch (IOException e) {
  6272 + // TODO Auto-generated catch block
  6273 + e.printStackTrace();
  6274 + }
  6275 + }
  6276 +
  6277 + return res;
  6278 + }
  6279 +
  6280 + /**
  6281 + ** 维修记录上报
  6282 + * @param param 参数信息
  6283 + * @param isActive 主/被动上报
  6284 + */
  6285 + @Override
  6286 + @Transactional
  6287 + public Map<String, Object> repairReport(Map<String, Object> param, boolean isActive) {
  6288 + Map<String, Object> res = new HashMap<String, Object>();
  6289 + res.put("status", ResponseCode.SUCCESS);
  6290 + // 获取实际排班信息
  6291 + Long id = Long.parseLong((String)param.get("id"));
  6292 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  6293 +
  6294 + if (null == sch) {
  6295 + res.put("status", ResponseCode.ERROR);
  6296 + res.put("msg", "不存在的班次!");
  6297 +
  6298 + return res;
  6299 + }
  6300 +
  6301 + int reportState = -1;
  6302 + SysUser user = SecurityUtils.getCurrentUser();
  6303 + String reportUser = user.getUserName(), reportName = user.getName(), incode = (String)param.get("clZbh"), reportTypes = (String)param.get("reportTypes"), repairTypes = reportType2RepairType(reportTypes);
  6304 + // 分公司保存格式 分公司编码_公司编码
  6305 + String val = BasicData.nbbm2FgsCompanyCodeMap.get(incode);
  6306 + String[] arr = val.split("_");
  6307 + StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
  6308 + url.append("?nbbm=").append(incode).append("&bxy=").append(reportUser).append("&bxbm=").append(repairTypes).append("&fgs=").append(arr[0]);
  6309 +
  6310 + int count = repairReportRepository.repairReportBySch(id, isActive ? 1 : 0);
  6311 + if (count > 0) return res;
  6312 + RepairReport lrr = dayOfSchedule.getLastestRepairReport(incode);
  6313 + // 非主动上报并且无上报记录或上次已上报 则不用上报
  6314 + if (!isActive && (lrr == null || lrr.getReportState() != 0)) {
  6315 + reportState = 0;
  6316 + } else {
  6317 + res = request(url.toString());
  6318 + if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
  6319 + }
  6320 + // 持久化此次上报记录
  6321 + RepairReport rr = new RepairReport();
  6322 + rr.setLineId(sch.getXlBm());
  6323 + rr.setLineName(sch.getXlName());
  6324 + rr.setReportUser(reportUser);
  6325 + rr.setReportName(reportName);
  6326 + rr.setSchId(id);
  6327 + rr.setIncode(incode);
  6328 + rr.setDepartureTime(sch.getFcsj());
  6329 + rr.setRepairType(repairTypes);
  6330 + rr.setReportType(reportTypes);
  6331 + rr.setReportDate(new Date());
  6332 + rr.setReportState(reportState);
  6333 + rr.setReportMode(isActive ? 1 : 0);
  6334 + rr = repairReportRepository.save(rr);
  6335 + dayOfSchedule.setLastestRepairReport(rr);
  6336 + // 如果上报失败,放到重传队列
  6337 + if (rr.getReportState() == -1) queue.add(rr);
  6338 +
  6339 + return res;
  6340 + }
  6341 +
  6342 + private void repairReport(RepairReport rr) {
  6343 + int reportState = -1;
  6344 + // 分公司保存格式 分公司编码_公司编码
  6345 + String val = BasicData.nbbm2FgsCompanyCodeMap.get(rr.getIncode());
  6346 + String[] arr = val.split("_");
  6347 + StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
  6348 + url.append("?nbbm=").append(rr.getIncode()).append("&bxy=").append(rr.getReportUser()).append("&bxbm=").append(rr.getRepairType()).append("&fgs=").append(arr[0]);
  6349 +
  6350 + Map<String, Object> res = request(url.toString());
  6351 + if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
  6352 + if (reportState == 1) {
  6353 + rr.setReportState(1);
  6354 + repairReportRepository.save(rr);
  6355 + }
  6356 + }
  6357 +
  6358 + /**
  6359 + ** 业务类型转报修类型
  6360 + */
  6361 + private String reportType2RepairType(String reportType) {
  6362 + String[] reportTypes = reportType.split(";");
  6363 + List<String> repairTypes = new ArrayList<>();
  6364 + for (String rt : reportTypes) {
  6365 + repairTypes.add(report2repair.get(rt));
  6366 + }
  6367 +
  6368 + return StringUtils.join(repairTypes, ";");
  6369 + }
  6370 +
  6371 + @Override
  6372 + public List<RepairReport> repairReportList(String lineId, String date, String incode, String type) {
  6373 + List<RepairReport> result = new ArrayList<RepairReport>();
  6374 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  6375 +
  6376 + Date start = null, end = null;
  6377 + if (date.length() > 0) {
  6378 + try {
  6379 + start = sdf.parse(date + " 00:00:00");
  6380 + end = sdf.parse(date + " 23:59:59");
  6381 + } catch (ParseException e) {
  6382 + // TODO Auto-generated catch block
  6383 + e.printStackTrace();
  6384 + }
  6385 +
  6386 + }
  6387 +
  6388 + result = repairReportRepository.repairReportList(lineId, start, end, incode);
  6389 + Map<String, Object> dMap=new HashMap<>();
  6390 + dMap.put("dGroup_eq", "repairtype");
  6391 + Map<String, String> code2name = new HashMap<String, String>();
  6392 + for (Dictionary dic : dictionaryService.list(dMap)) {
  6393 + code2name.put(dic.getdCode(), dic.getdName());
  6394 + }
  6395 + for (RepairReport rr : result) {
  6396 + String reportType = rr.getReportType();
  6397 + String[] types = reportType.split(";");
  6398 + StringBuilder sb = new StringBuilder();
  6399 +
  6400 + for (String t : types) {
  6401 + sb.append(code2name.get(t)).append(";");
  6402 + }
  6403 +
  6404 + rr.setRepairType(sb.toString());
  6405 + rr.setReportDateStr(sdf.format(rr.getReportDate()));
  6406 + switch (rr.getReportState()) {
  6407 + case 0:
  6408 + rr.setReportStateStr("不报");
  6409 + break;
  6410 + case 1:
  6411 + rr.setReportStateStr("上报成功");
  6412 + break;
  6413 + case -1:
  6414 + rr.setReportStateStr("上报失败");
  6415 + break;
  6416 + default:
  6417 + break;
  6418 + }
  6419 + }
  6420 +
  6421 + if ("export".equals(type)) {
  6422 + String lineName = BasicData.lineCode2NameMap.get(lineId);
  6423 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  6424 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  6425 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  6426 + Map<String, Object> m = new HashMap<String, Object>();
  6427 + ReportUtils ee = new ReportUtils();
  6428 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  6429 + for (int i = 0; i < result.size(); i++) {
  6430 + Map<String, Object> map = new HashMap<String, Object>();
  6431 + RepairReport rr = result.get(i);
  6432 + map.put("row", i + 1);
  6433 + map.put("lineId", rr.getLineName());
  6434 + map.put("incode", rr.getIncode());
  6435 + map.put("departureTime", rr.getDepartureTime());
  6436 + map.put("reportUser", rr.getReportUser());
  6437 + map.put("reportDateStr", rr.getReportDate());
  6438 + map.put("repairType", rr.getRepairType());
  6439 + map.put("reportStateStr", rr.getReportStateStr());
  6440 + newList.add(map);
  6441 + }
  6442 + try {
  6443 + listI.add(newList.iterator());
  6444 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  6445 + ee.excelReplace(listI, new Object[]{m}, path + "mould/repairReport.xls",
  6446 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  6447 + + "-" + lineName + "-维修上报记录.xls");
  6448 + } catch (Exception e) {
  6449 + // TODO: handle exception
  6450 + e.printStackTrace();
  6451 + }
  6452 + }
  6453 +
  6454 + return result;
  6455 + }
  6456 +
  6457 + @Override
  6458 + public Map<String, String> getLevelsByLines(List<String> lines) {
  6459 + Map<String, String> result = new HashMap<String, String>(), currSchDate = dayOfSchedule.getCurrSchDate();
  6460 + for (String line : lines) {
  6461 + String level = BasicData.lineDate2Level.get(line + "_" + currSchDate.get(line));
  6462 + result.put(line, level == null ? "" : level);
  6463 + }
  6464 +
  6465 + return result;
  6466 + }
  6467 +
  6468 +
  6469 + @Override
  6470 + public void destroy() throws Exception {
  6471 + // TODO Auto-generated method stub
  6472 + exec.shutdown();
  6473 + }
  6474 +
  6475 +
  6476 + @Override
  6477 + public void afterPropertiesSet() throws Exception {
  6478 + // TODO Auto-generated method stub
  6479 + // 维修上报重发调度
  6480 + exec.scheduleAtFixedRate(new Runnable() {
  6481 +
  6482 + @Override
  6483 + public void run() {
  6484 + // TODO Auto-generated method stub
  6485 + try {
  6486 + Iterator<RepairReport> it = queue.iterator();
  6487 + while (it.hasNext()) {
  6488 + RepairReport rr = it.next();
  6489 + repairReport(rr);
  6490 + if (rr.getReportState() == 1 || System.currentTimeMillis() - rr.getReportDate().getTime() > 86400000) queue.remove(rr);
  6491 + }
  6492 + } catch (Exception e) {
  6493 + logger.error("维修上报重发错误", e);
  6494 + }
  6495 + }
  6496 + }, 30, 30, TimeUnit.MINUTES);
  6497 + }
  6498 +}
  6499 +
  6500 +class AccountMap implements Comparator<Map<String, Object>> {
  6501 + @Override
  6502 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6503 + // TODO Auto-generated method stub
  6504 + return o1.get("clZbh").toString().compareTo(o2.get("clZbh").toString());
  6505 + }
  6506 +}
  6507 +
  6508 +class AccountMap2 implements Comparator<Map<String, Object>> {
  6509 + @Override
  6510 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6511 + // TODO Auto-generated method stub
  6512 + return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString());
  6513 + }
  6514 +}
  6515 +
  6516 +class AccountXlbm implements Comparator<Map<String, Object>> {
  6517 + @Override
  6518 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6519 + // TODO Auto-generated method stub
  6520 +// PinyinHelper.convertToPinyinString(ppy.getName(),
  6521 +// "" , PinyinFormat.WITHOUT_TONE)
  6522 + return o1.get("xlNamePy").toString().compareTo(
  6523 + o2.get("xlNamePy").toString());
  6524 + }
  6525 +}
  6526 +
  6527 +class compareLpFcsjType implements Comparator<ScheduleRealInfo> {
  6528 + @Override
  6529 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6530 + // TODO Auto-generated method stub
  6531 + return (o1.getLpName()+o1.getFcsjT() + o1.getRemark()).compareTo(o2.getLpName()+o2.getFcsjT() + o2.getRemark());
  6532 + }
  6533 +
  6534 +}
  6535 +
  6536 +class compareDirLpFcsjType implements Comparator<ScheduleRealInfo> {
  6537 + @Override
  6538 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6539 + // TODO Auto-generated method stub
  6540 + return (o1.getXlDir()+o1.getFcsjT() + o1.getRemark()+o1.getLpName()).compareTo(o2.getXlDir()+o2.getFcsjT() + o2.getRemark()+o2.getLpName());
  6541 + }
  6542 +
  6543 +}
  6544 +class compareFcsjType implements Comparator<ScheduleRealInfo> {
  6545 + @Override
  6546 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6547 + // TODO Auto-generated method stub
  6548 + return (o1.getFcsjT() + o1.getRemark()).compareTo(o2.getFcsjT() + o2.getRemark());
  6549 + }
  6550 +
  6551 +}
... ...