Commit 937051939a221997998524ad77fd039dd24de7fd

Authored by 王通
1 parent c6dc0b52

1.行车路单、服务热线上报修正

src/main/java/com/bsth/data/report_register/entity/ReportRegister.java
1   -package com.bsth.data.report_register.entity;
2   -
3   -import javax.persistence.Column;
4   -import javax.persistence.Entity;
5   -import javax.persistence.GeneratedValue;
6   -import javax.persistence.Id;
7   -import javax.persistence.Table;
8   -import java.text.DateFormat;
9   -import java.text.SimpleDateFormat;
10   -import java.util.Date;
11   -
12   -
13   -@Entity
14   -@Table(name = "bsth_t_report")
15   -public class ReportRegister {
16   -
17   - @Id
18   - @GeneratedValue
19   - private long ID;
20   -
21   - /** 类型*/
22   - private String REPORT_TYPE;
23   - /** 公司 */
24   - private String REPORT_GS;
25   - /** 分公司 */
26   - private String REPORT_FGS;
27   - /** 公司名 */
28   - private String REPORT_GSNAME;
29   - /** 分公司名 */
30   - private String REPORT_FGSNAME;
31   - /** 时间*/
32   - private Date REPORT_DATE;
33   - /** 报备人*/
34   - private String REPORT_BBR;
35   - /** 线路编码 */
36   - private String REPORT_XL;
37   - /** 线路名*/
38   - private String REPORT_XLNAME;
39   - /** 站点*/
40   - private String REPORT_STATION;
41   - /** 对外上报部门*/
42   - private String REPORT_DWSBBM;
43   - /** 对外上报时间*/
44   - private String REPORT_DWSBSJ;
45   - /** 延误时间*/
46   - private String REPORT_YWSJ;
47   - /** 首末班误点原因*/
48   - private String REPORT_SMBWD;
49   - /** 大间隔时间*/
50   - private String REPORT_DJGSJ;
51   - /** 大间隔原因*/
52   - private String REPORT_DJGYY;
53   - /** 突发事件*/
54   - private String REPORT_TFSJ;
55   - /** 影响时间*/
56   - private String REPORT_YXSJ;
57   - /** 影响班次数*/
58   - private String REPORT_YXBC;
59   - /** 调整措施*/
60   - private String REPORT_TZCS;
61   - /** 报案事故编号*/
62   - private String REPORT_SGBH;
63   - /** 车辆自编号*/
64   - private String REPORT_ZBH;
65   - /** 车辆牌照号*/
66   - private String REPORT_PZH;
67   - /** 驾驶员*/
68   - private String REPORT_JSY;
69   - /** 事故发生时间*/
70   - private String REPORT_SGSJ;
71   - /** 事故发生地点*/
72   - private String REPORT_SGDD;
73   - /** 行驶方向*/
74   - private String REPORT_XSFX;
75   - /** 事故对象*/
76   - private String REPORT_SGDX;
77   - /** 对象车牌照号*/
78   - private String REPORT_DXPZH;
79   - /** 事故概况*/
80   - private String REPORT_SGGK;
81   - /** 受伤人数*/
82   - private String REPORT_SSRS;
83   - /** 死亡人数*/
84   - private String REPORT_SWRS;
85   - /** 报告人 */
86   - private String REPORT_BGR;
87   - /** 报告人电话 */
88   - private String REPORT_BGRDH;
89   - /** 备注 */
90   - private String REPORT_BZ;
91   - /** 路段*/
92   - private String REPORT_ROAD;
93   - /** 访问接口时使用的状态码 操作类型,0:新增;1:修改;2:删除 */
94   - private String STATUS;
95   - /** 创建人*/
96   - private String CREATE_BY;
97   - /** 创建时间 */
98   - @Column(updatable = false, name = "CREATE_DATE", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
99   - private Date CREATE_DATE;
100   - /** 修改人*/
101   - private String UPDATE_BY;
102   - /** 修改时间*/
103   - @Column(name = "UPDATE_DATE", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
104   - private Date UPDATE_DATE;
105   -
106   - public long getID() {
107   - return ID;
108   - }
109   -
110   - public void setID(long ID) {
111   - this.ID = ID;
112   - }
113   -
114   - public String getREPORT_TYPE() {
115   - return REPORT_TYPE;
116   - }
117   -
118   - public void setREPORT_TYPE(String REPORT_TYPE) {
119   - this.REPORT_TYPE = REPORT_TYPE;
120   - }
121   -
122   - public String getREPORT_GS() {
123   - return REPORT_GS;
124   - }
125   -
126   - public void setREPORT_GS(String REPORT_GS) {
127   - this.REPORT_GS = REPORT_GS;
128   - }
129   -
130   - public String getREPORT_FGS() {
131   - return REPORT_FGS;
132   - }
133   -
134   - public void setREPORT_FGS(String REPORT_FGS) {
135   - this.REPORT_FGS = REPORT_FGS;
136   - }
137   -
138   - public String getREPORT_GSNAME() {
139   - return REPORT_GSNAME;
140   - }
141   -
142   - public void setREPORT_GSNAME(String REPORT_GSNAME) {
143   - this.REPORT_GSNAME = REPORT_GSNAME;
144   - }
145   -
146   - public String getREPORT_FGSNAME() {
147   - return REPORT_FGSNAME;
148   - }
149   -
150   - public void setREPORT_FGSNAME(String REPORT_FGSNAME) {
151   - this.REPORT_FGSNAME = REPORT_FGSNAME;
152   - }
153   -
154   - public Date getREPORT_DATE() {
155   - return REPORT_DATE;
156   - }
157   -
158   - public void setREPORT_DATE(Date REPORT_DATE) {
159   - this.REPORT_DATE = REPORT_DATE;
160   - }
161   -
162   - public String getREPORT_BBR() {
163   - return REPORT_BBR;
164   - }
165   -
166   - public void setREPORT_BBR(String REPORT_BBR) {
167   - this.REPORT_BBR = REPORT_BBR;
168   - }
169   -
170   - public String getREPORT_XL() {
171   - return REPORT_XL;
172   - }
173   -
174   - public void setREPORT_XL(String REPORT_XL) {
175   - this.REPORT_XL = REPORT_XL;
176   - }
177   -
178   - public String getREPORT_XLNAME() {
179   - return REPORT_XLNAME;
180   - }
181   -
182   - public void setREPORT_XLNAME(String REPORT_XLNAME) {
183   - this.REPORT_XLNAME = REPORT_XLNAME;
184   - }
185   -
186   - public String getREPORT_STATION() {
187   - return REPORT_STATION;
188   - }
189   -
190   - public void setREPORT_STATION(String REPORT_STATION) {
191   - this.REPORT_STATION = REPORT_STATION;
192   - }
193   -
194   - public String getREPORT_DWSBBM() {
195   - return REPORT_DWSBBM;
196   - }
197   -
198   - public void setREPORT_DWSBBM(String REPORT_DWSBBM) {
199   - this.REPORT_DWSBBM = REPORT_DWSBBM;
200   - }
201   -
202   - public String getREPORT_DWSBSJ() {
203   - return REPORT_DWSBSJ;
204   - }
205   -
206   - public void setREPORT_DWSBSJ(String REPORT_DWSBSJ) {
207   - this.REPORT_DWSBSJ = REPORT_DWSBSJ;
208   - }
209   -
210   - public String getREPORT_YWSJ() {
211   - return REPORT_YWSJ;
212   - }
213   -
214   - public void setREPORT_YWSJ(String REPORT_YWSJ) {
215   - this.REPORT_YWSJ = REPORT_YWSJ;
216   - }
217   -
218   - public String getREPORT_SMBWD() {
219   - return REPORT_SMBWD;
220   - }
221   -
222   - public void setREPORT_SMBWD(String REPORT_SMBWD) {
223   - this.REPORT_SMBWD = REPORT_SMBWD;
224   - }
225   -
226   - public String getREPORT_DJGSJ() {
227   - return REPORT_DJGSJ;
228   - }
229   -
230   - public void setREPORT_DJGSJ(String REPORT_DJGSJ) {
231   - this.REPORT_DJGSJ = REPORT_DJGSJ;
232   - }
233   -
234   - public String getREPORT_DJGYY() {
235   - return REPORT_DJGYY;
236   - }
237   -
238   - public void setREPORT_DJGYY(String REPORT_DJGYY) {
239   - this.REPORT_DJGYY = REPORT_DJGYY;
240   - }
241   -
242   - public String getREPORT_TFSJ() {
243   - return REPORT_TFSJ;
244   - }
245   -
246   - public void setREPORT_TFSJ(String REPORT_TFSJ) {
247   - this.REPORT_TFSJ = REPORT_TFSJ;
248   - }
249   -
250   - public String getREPORT_YXSJ() {
251   - return REPORT_YXSJ;
252   - }
253   -
254   - public void setREPORT_YXSJ(String REPORT_YXSJ) {
255   - this.REPORT_YXSJ = REPORT_YXSJ;
256   - }
257   -
258   - public String getREPORT_YXBC() {
259   - return REPORT_YXBC;
260   - }
261   -
262   - public void setREPORT_YXBC(String REPORT_YXBC) {
263   - this.REPORT_YXBC = REPORT_YXBC;
264   - }
265   -
266   - public String getREPORT_TZCS() {
267   - return REPORT_TZCS;
268   - }
269   -
270   - public void setREPORT_TZCS(String REPORT_TZCS) {
271   - this.REPORT_TZCS = REPORT_TZCS;
272   - }
273   -
274   - public String getREPORT_SGBH() {
275   - return REPORT_SGBH;
276   - }
277   -
278   - public void setREPORT_SGBH(String REPORT_SGBH) {
279   - this.REPORT_SGBH = REPORT_SGBH;
280   - }
281   -
282   - public String getREPORT_ZBH() {
283   - return REPORT_ZBH;
284   - }
285   -
286   - public void setREPORT_ZBH(String REPORT_ZBH) {
287   - this.REPORT_ZBH = REPORT_ZBH;
288   - }
289   -
290   - public String getREPORT_PZH() {
291   - return REPORT_PZH;
292   - }
293   -
294   - public void setREPORT_PZH(String REPORT_PZH) {
295   - this.REPORT_PZH = REPORT_PZH;
296   - }
297   -
298   - public String getREPORT_JSY() {
299   - return REPORT_JSY;
300   - }
301   -
302   - public void setREPORT_JSY(String REPORT_JSY) {
303   - this.REPORT_JSY = REPORT_JSY;
304   - }
305   -
306   - public String getREPORT_SGSJ() {
307   - return REPORT_SGSJ;
308   - }
309   -
310   - public void setREPORT_SGSJ(String REPORT_SGSJ) {
311   - this.REPORT_SGSJ = REPORT_SGSJ;
312   - }
313   -
314   - public String getREPORT_SGDD() {
315   - return REPORT_SGDD;
316   - }
317   -
318   - public void setREPORT_SGDD(String REPORT_SGDD) {
319   - this.REPORT_SGDD = REPORT_SGDD;
320   - }
321   -
322   - public String getREPORT_XSFX() {
323   - return REPORT_XSFX;
324   - }
325   -
326   - public void setREPORT_XSFX(String REPORT_XSFX) {
327   - this.REPORT_XSFX = REPORT_XSFX;
328   - }
329   -
330   - public String getREPORT_SGDX() {
331   - return REPORT_SGDX;
332   - }
333   -
334   - public void setREPORT_SGDX(String REPORT_SGDX) {
335   - this.REPORT_SGDX = REPORT_SGDX;
336   - }
337   -
338   - public String getREPORT_DXPZH() {
339   - return REPORT_DXPZH;
340   - }
341   -
342   - public void setREPORT_DXPZH(String REPORT_DXPZH) {
343   - this.REPORT_DXPZH = REPORT_DXPZH;
344   - }
345   -
346   - public String getREPORT_SGGK() {
347   - return REPORT_SGGK;
348   - }
349   -
350   - public void setREPORT_SGGK(String REPORT_SGGK) {
351   - this.REPORT_SGGK = REPORT_SGGK;
352   - }
353   -
354   - public String getREPORT_SSRS() {
355   - return REPORT_SSRS;
356   - }
357   -
358   - public void setREPORT_SSRS(String REPORT_SSRS) {
359   - this.REPORT_SSRS = REPORT_SSRS;
360   - }
361   -
362   - public String getREPORT_SWRS() {
363   - return REPORT_SWRS;
364   - }
365   -
366   - public void setREPORT_SWRS(String REPORT_SWRS) {
367   - this.REPORT_SWRS = REPORT_SWRS;
368   - }
369   -
370   - public String getREPORT_BGR() {
371   - return REPORT_BGR;
372   - }
373   -
374   - public void setREPORT_BGR(String REPORT_BGR) {
375   - this.REPORT_BGR = REPORT_BGR;
376   - }
377   -
378   - public String getREPORT_BGRDH() {
379   - return REPORT_BGRDH;
380   - }
381   -
382   - public void setREPORT_BGRDH(String REPORT_BGRDH) {
383   - this.REPORT_BGRDH = REPORT_BGRDH;
384   - }
385   -
386   - public String getREPORT_BZ() {
387   - return REPORT_BZ;
388   - }
389   -
390   - public void setREPORT_BZ(String REPORT_BZ) {
391   - this.REPORT_BZ = REPORT_BZ;
392   - }
393   -
394   - public String getCREATE_BY() {
395   - return CREATE_BY;
396   - }
397   -
398   - public void setCREATE_BY(String CREATE_BY) {
399   - this.CREATE_BY = CREATE_BY;
400   - }
401   -
402   - public Date getCREATE_DATE() {
403   - return CREATE_DATE;
404   - }
405   -
406   - public void setCREATE_DATE(Date CREATE_DATE) {
407   - this.CREATE_DATE = CREATE_DATE;
408   - }
409   -
410   - public String getUPDATE_BY() {
411   - return UPDATE_BY;
412   - }
413   -
414   - public void setUPDATE_BY(String UPDATE_BY) {
415   - this.UPDATE_BY = UPDATE_BY;
416   - }
417   -
418   - public Date getUPDATE_DATE() {
419   - return UPDATE_DATE;
420   - }
421   -
422   - public void setUPDATE_DATE(Date UPDATE_DATE) {
423   - this.UPDATE_DATE = UPDATE_DATE;
424   - }
425   -
426   - public String getREPORT_ROAD() {
427   - return REPORT_ROAD;
428   - }
429   -
430   - public void setREPORT_ROAD(String REPORT_ROAD) {
431   - this.REPORT_ROAD = REPORT_ROAD;
432   - }
433   -
434   - public String getSTATUS() {
435   - return STATUS;
436   - }
437   -
438   - public void setSTATUS(String STATUS) {
439   - this.STATUS = STATUS;
440   - }
441   -
442   - @Override
443   - public String toString() {
444   - DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
445   - return "{" +
446   - "ID:'" + ID + '\'' +
447   - ", REPORT_TYPE:'" + REPORT_TYPE + '\'' +
448   - ", REPORT_GS:'" + REPORT_GS + '\'' +
449   - ", REPORT_FGS:'" + REPORT_FGS + '\'' +
450   - ", REPORT_DATE:'" + dateFormat.format(REPORT_DATE) + '\'' +
451   - ", REPORT_BBR:'" + REPORT_BBR + '\'' +
452   - ", REPORT_XL:'" + REPORT_XL + '\'' +
453   - ", REPORT_XLNAME:'" + REPORT_XLNAME + '\'' +
454   - ", REPORT_STATION:'" + REPORT_STATION + '\'' +
455   - ", REPORT_DWSBBM:'" + REPORT_DWSBBM + '\'' +
456   - ", REPORT_DWSBSJ:'" + REPORT_DWSBSJ + '\'' +
457   - ", REPORT_YWSJ:'" + REPORT_YWSJ + '\'' +
458   - ", REPORT_SMBWD:'" + REPORT_SMBWD + '\'' +
459   - ", REPORT_DJGSJ:'" + REPORT_DJGSJ + '\'' +
460   - ", REPORT_DJGYY:'" + REPORT_DJGYY + '\'' +
461   - ", REPORT_TFSJ:'" + REPORT_TFSJ + '\'' +
462   - ", REPORT_YXSJ:'" + REPORT_YXSJ + '\'' +
463   - ", REPORT_YXBC:'" + REPORT_YXBC + '\'' +
464   - ", REPORT_TZCS:'" + REPORT_TZCS + '\'' +
465   - ", REPORT_SGBH:'" + REPORT_SGBH + '\'' +
466   - ", REPORT_ZBH:'" + REPORT_ZBH + '\'' +
467   - ", REPORT_PZH:'" + REPORT_PZH + '\'' +
468   - ", REPORT_JSY:'" + REPORT_JSY + '\'' +
469   - ", REPORT_SGSJ:'" + REPORT_SGSJ + '\'' +
470   - ", REPORT_SGDD:'" + REPORT_SGDD + '\'' +
471   - ", REPORT_XSFX:'" + REPORT_XSFX + '\'' +
472   - ", REPORT_SGDX:'" + REPORT_SGDX + '\'' +
473   - ", REPORT_DXPZH:'" + REPORT_DXPZH + '\'' +
474   - ", REPORT_SGGK:'" + REPORT_SGGK + '\'' +
475   - ", REPORT_SSRS:'" + REPORT_SSRS + '\'' +
476   - ", REPORT_SWRS:'" + REPORT_SWRS + '\'' +
477   - ", REPORT_BGR:'" + REPORT_BGR + '\'' +
478   - ", REPORT_BGRDH:'" + REPORT_BGRDH + '\'' +
479   - ", REPORT_BZ:'" + REPORT_BZ + '\'' +
480   - ", CREATE_BY:'" + CREATE_BY + '\'' +
481   - ", CREATE_DATE:" + CREATE_DATE +
482   - ", UPDATE_BY:'" + UPDATE_BY + '\'' +
483   - ", UPDATE_DATE:" + UPDATE_DATE +
484   - ", REPORT_ROAD:'" + REPORT_ROAD + '\'' +
485   - ", STATUS:'" + STATUS + '\'' +
486   - '}';
487   - }
488   -}
  1 +package com.bsth.data.report_register.entity;
  2 +
  3 +import javax.persistence.*;
  4 +import java.text.DateFormat;
  5 +import java.text.SimpleDateFormat;
  6 +import java.util.Date;
  7 +
  8 +
  9 +@Entity
  10 +@Table(name = "bsth_t_report")
  11 +public class ReportRegister {
  12 +
  13 + @Id
  14 + @GeneratedValue(strategy = GenerationType.IDENTITY)
  15 + private long ID;
  16 +
  17 + /** 类型*/
  18 + private String REPORT_TYPE;
  19 + /** 公司 */
  20 + private String REPORT_GS;
  21 + /** 分公司 */
  22 + private String REPORT_FGS;
  23 + /** 公司名 */
  24 + private String REPORT_GSNAME;
  25 + /** 分公司名 */
  26 + private String REPORT_FGSNAME;
  27 + /** 时间*/
  28 + private Date REPORT_DATE;
  29 + /** 报备人*/
  30 + private String REPORT_BBR;
  31 + /** 线路编码 */
  32 + private String REPORT_XL;
  33 + /** 线路名*/
  34 + private String REPORT_XLNAME;
  35 + /** 站点*/
  36 + private String REPORT_STATION;
  37 + /** 对外上报部门*/
  38 + private String REPORT_DWSBBM;
  39 + /** 对外上报时间*/
  40 + private String REPORT_DWSBSJ;
  41 + /** 延误时间*/
  42 + private String REPORT_YWSJ;
  43 + /** 首末班误点原因*/
  44 + private String REPORT_SMBWD;
  45 + /** 大间隔时间*/
  46 + private String REPORT_DJGSJ;
  47 + /** 大间隔原因*/
  48 + private String REPORT_DJGYY;
  49 + /** 突发事件*/
  50 + private String REPORT_TFSJ;
  51 + /** 影响时间*/
  52 + private String REPORT_YXSJ;
  53 + /** 影响班次数*/
  54 + private String REPORT_YXBC;
  55 + /** 调整措施*/
  56 + private String REPORT_TZCS;
  57 + /** 报案事故编号*/
  58 + private String REPORT_SGBH;
  59 + /** 车辆自编号*/
  60 + private String REPORT_ZBH;
  61 + /** 车辆牌照号*/
  62 + private String REPORT_PZH;
  63 + /** 驾驶员*/
  64 + private String REPORT_JSY;
  65 + /** 事故发生时间*/
  66 + private String REPORT_SGSJ;
  67 + /** 事故发生地点*/
  68 + private String REPORT_SGDD;
  69 + /** 行驶方向*/
  70 + private String REPORT_XSFX;
  71 + /** 事故对象*/
  72 + private String REPORT_SGDX;
  73 + /** 对象车牌照号*/
  74 + private String REPORT_DXPZH;
  75 + /** 事故概况*/
  76 + private String REPORT_SGGK;
  77 + /** 受伤人数*/
  78 + private String REPORT_SSRS;
  79 + /** 死亡人数*/
  80 + private String REPORT_SWRS;
  81 + /** 报告人 */
  82 + private String REPORT_BGR;
  83 + /** 报告人电话 */
  84 + private String REPORT_BGRDH;
  85 + /** 备注 */
  86 + private String REPORT_BZ;
  87 + /** 路段*/
  88 + private String REPORT_ROAD;
  89 + /** 访问接口时使用的状态码 操作类型,0:新增;1:修改;2:删除 */
  90 + private String STATUS;
  91 + /** 创建人*/
  92 + private String CREATE_BY;
  93 + /** 创建时间 */
  94 + @Column(updatable = false, name = "CREATE_DATE", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
  95 + private Date CREATE_DATE;
  96 + /** 修改人*/
  97 + private String UPDATE_BY;
  98 + /** 修改时间*/
  99 + @Column(name = "UPDATE_DATE", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
  100 + private Date UPDATE_DATE;
  101 +
  102 + public long getID() {
  103 + return ID;
  104 + }
  105 +
  106 + public void setID(long ID) {
  107 + this.ID = ID;
  108 + }
  109 +
  110 + public String getREPORT_TYPE() {
  111 + return REPORT_TYPE;
  112 + }
  113 +
  114 + public void setREPORT_TYPE(String REPORT_TYPE) {
  115 + this.REPORT_TYPE = REPORT_TYPE;
  116 + }
  117 +
  118 + public String getREPORT_GS() {
  119 + return REPORT_GS;
  120 + }
  121 +
  122 + public void setREPORT_GS(String REPORT_GS) {
  123 + this.REPORT_GS = REPORT_GS;
  124 + }
  125 +
  126 + public String getREPORT_FGS() {
  127 + return REPORT_FGS;
  128 + }
  129 +
  130 + public void setREPORT_FGS(String REPORT_FGS) {
  131 + this.REPORT_FGS = REPORT_FGS;
  132 + }
  133 +
  134 + public String getREPORT_GSNAME() {
  135 + return REPORT_GSNAME;
  136 + }
  137 +
  138 + public void setREPORT_GSNAME(String REPORT_GSNAME) {
  139 + this.REPORT_GSNAME = REPORT_GSNAME;
  140 + }
  141 +
  142 + public String getREPORT_FGSNAME() {
  143 + return REPORT_FGSNAME;
  144 + }
  145 +
  146 + public void setREPORT_FGSNAME(String REPORT_FGSNAME) {
  147 + this.REPORT_FGSNAME = REPORT_FGSNAME;
  148 + }
  149 +
  150 + public Date getREPORT_DATE() {
  151 + return REPORT_DATE;
  152 + }
  153 +
  154 + public void setREPORT_DATE(Date REPORT_DATE) {
  155 + this.REPORT_DATE = REPORT_DATE;
  156 + }
  157 +
  158 + public String getREPORT_BBR() {
  159 + return REPORT_BBR;
  160 + }
  161 +
  162 + public void setREPORT_BBR(String REPORT_BBR) {
  163 + this.REPORT_BBR = REPORT_BBR;
  164 + }
  165 +
  166 + public String getREPORT_XL() {
  167 + return REPORT_XL;
  168 + }
  169 +
  170 + public void setREPORT_XL(String REPORT_XL) {
  171 + this.REPORT_XL = REPORT_XL;
  172 + }
  173 +
  174 + public String getREPORT_XLNAME() {
  175 + return REPORT_XLNAME;
  176 + }
  177 +
  178 + public void setREPORT_XLNAME(String REPORT_XLNAME) {
  179 + this.REPORT_XLNAME = REPORT_XLNAME;
  180 + }
  181 +
  182 + public String getREPORT_STATION() {
  183 + return REPORT_STATION;
  184 + }
  185 +
  186 + public void setREPORT_STATION(String REPORT_STATION) {
  187 + this.REPORT_STATION = REPORT_STATION;
  188 + }
  189 +
  190 + public String getREPORT_DWSBBM() {
  191 + return REPORT_DWSBBM;
  192 + }
  193 +
  194 + public void setREPORT_DWSBBM(String REPORT_DWSBBM) {
  195 + this.REPORT_DWSBBM = REPORT_DWSBBM;
  196 + }
  197 +
  198 + public String getREPORT_DWSBSJ() {
  199 + return REPORT_DWSBSJ;
  200 + }
  201 +
  202 + public void setREPORT_DWSBSJ(String REPORT_DWSBSJ) {
  203 + this.REPORT_DWSBSJ = REPORT_DWSBSJ;
  204 + }
  205 +
  206 + public String getREPORT_YWSJ() {
  207 + return REPORT_YWSJ;
  208 + }
  209 +
  210 + public void setREPORT_YWSJ(String REPORT_YWSJ) {
  211 + this.REPORT_YWSJ = REPORT_YWSJ;
  212 + }
  213 +
  214 + public String getREPORT_SMBWD() {
  215 + return REPORT_SMBWD;
  216 + }
  217 +
  218 + public void setREPORT_SMBWD(String REPORT_SMBWD) {
  219 + this.REPORT_SMBWD = REPORT_SMBWD;
  220 + }
  221 +
  222 + public String getREPORT_DJGSJ() {
  223 + return REPORT_DJGSJ;
  224 + }
  225 +
  226 + public void setREPORT_DJGSJ(String REPORT_DJGSJ) {
  227 + this.REPORT_DJGSJ = REPORT_DJGSJ;
  228 + }
  229 +
  230 + public String getREPORT_DJGYY() {
  231 + return REPORT_DJGYY;
  232 + }
  233 +
  234 + public void setREPORT_DJGYY(String REPORT_DJGYY) {
  235 + this.REPORT_DJGYY = REPORT_DJGYY;
  236 + }
  237 +
  238 + public String getREPORT_TFSJ() {
  239 + return REPORT_TFSJ;
  240 + }
  241 +
  242 + public void setREPORT_TFSJ(String REPORT_TFSJ) {
  243 + this.REPORT_TFSJ = REPORT_TFSJ;
  244 + }
  245 +
  246 + public String getREPORT_YXSJ() {
  247 + return REPORT_YXSJ;
  248 + }
  249 +
  250 + public void setREPORT_YXSJ(String REPORT_YXSJ) {
  251 + this.REPORT_YXSJ = REPORT_YXSJ;
  252 + }
  253 +
  254 + public String getREPORT_YXBC() {
  255 + return REPORT_YXBC;
  256 + }
  257 +
  258 + public void setREPORT_YXBC(String REPORT_YXBC) {
  259 + this.REPORT_YXBC = REPORT_YXBC;
  260 + }
  261 +
  262 + public String getREPORT_TZCS() {
  263 + return REPORT_TZCS;
  264 + }
  265 +
  266 + public void setREPORT_TZCS(String REPORT_TZCS) {
  267 + this.REPORT_TZCS = REPORT_TZCS;
  268 + }
  269 +
  270 + public String getREPORT_SGBH() {
  271 + return REPORT_SGBH;
  272 + }
  273 +
  274 + public void setREPORT_SGBH(String REPORT_SGBH) {
  275 + this.REPORT_SGBH = REPORT_SGBH;
  276 + }
  277 +
  278 + public String getREPORT_ZBH() {
  279 + return REPORT_ZBH;
  280 + }
  281 +
  282 + public void setREPORT_ZBH(String REPORT_ZBH) {
  283 + this.REPORT_ZBH = REPORT_ZBH;
  284 + }
  285 +
  286 + public String getREPORT_PZH() {
  287 + return REPORT_PZH;
  288 + }
  289 +
  290 + public void setREPORT_PZH(String REPORT_PZH) {
  291 + this.REPORT_PZH = REPORT_PZH;
  292 + }
  293 +
  294 + public String getREPORT_JSY() {
  295 + return REPORT_JSY;
  296 + }
  297 +
  298 + public void setREPORT_JSY(String REPORT_JSY) {
  299 + this.REPORT_JSY = REPORT_JSY;
  300 + }
  301 +
  302 + public String getREPORT_SGSJ() {
  303 + return REPORT_SGSJ;
  304 + }
  305 +
  306 + public void setREPORT_SGSJ(String REPORT_SGSJ) {
  307 + this.REPORT_SGSJ = REPORT_SGSJ;
  308 + }
  309 +
  310 + public String getREPORT_SGDD() {
  311 + return REPORT_SGDD;
  312 + }
  313 +
  314 + public void setREPORT_SGDD(String REPORT_SGDD) {
  315 + this.REPORT_SGDD = REPORT_SGDD;
  316 + }
  317 +
  318 + public String getREPORT_XSFX() {
  319 + return REPORT_XSFX;
  320 + }
  321 +
  322 + public void setREPORT_XSFX(String REPORT_XSFX) {
  323 + this.REPORT_XSFX = REPORT_XSFX;
  324 + }
  325 +
  326 + public String getREPORT_SGDX() {
  327 + return REPORT_SGDX;
  328 + }
  329 +
  330 + public void setREPORT_SGDX(String REPORT_SGDX) {
  331 + this.REPORT_SGDX = REPORT_SGDX;
  332 + }
  333 +
  334 + public String getREPORT_DXPZH() {
  335 + return REPORT_DXPZH;
  336 + }
  337 +
  338 + public void setREPORT_DXPZH(String REPORT_DXPZH) {
  339 + this.REPORT_DXPZH = REPORT_DXPZH;
  340 + }
  341 +
  342 + public String getREPORT_SGGK() {
  343 + return REPORT_SGGK;
  344 + }
  345 +
  346 + public void setREPORT_SGGK(String REPORT_SGGK) {
  347 + this.REPORT_SGGK = REPORT_SGGK;
  348 + }
  349 +
  350 + public String getREPORT_SSRS() {
  351 + return REPORT_SSRS;
  352 + }
  353 +
  354 + public void setREPORT_SSRS(String REPORT_SSRS) {
  355 + this.REPORT_SSRS = REPORT_SSRS;
  356 + }
  357 +
  358 + public String getREPORT_SWRS() {
  359 + return REPORT_SWRS;
  360 + }
  361 +
  362 + public void setREPORT_SWRS(String REPORT_SWRS) {
  363 + this.REPORT_SWRS = REPORT_SWRS;
  364 + }
  365 +
  366 + public String getREPORT_BGR() {
  367 + return REPORT_BGR;
  368 + }
  369 +
  370 + public void setREPORT_BGR(String REPORT_BGR) {
  371 + this.REPORT_BGR = REPORT_BGR;
  372 + }
  373 +
  374 + public String getREPORT_BGRDH() {
  375 + return REPORT_BGRDH;
  376 + }
  377 +
  378 + public void setREPORT_BGRDH(String REPORT_BGRDH) {
  379 + this.REPORT_BGRDH = REPORT_BGRDH;
  380 + }
  381 +
  382 + public String getREPORT_BZ() {
  383 + return REPORT_BZ;
  384 + }
  385 +
  386 + public void setREPORT_BZ(String REPORT_BZ) {
  387 + this.REPORT_BZ = REPORT_BZ;
  388 + }
  389 +
  390 + public String getCREATE_BY() {
  391 + return CREATE_BY;
  392 + }
  393 +
  394 + public void setCREATE_BY(String CREATE_BY) {
  395 + this.CREATE_BY = CREATE_BY;
  396 + }
  397 +
  398 + public Date getCREATE_DATE() {
  399 + return CREATE_DATE;
  400 + }
  401 +
  402 + public void setCREATE_DATE(Date CREATE_DATE) {
  403 + this.CREATE_DATE = CREATE_DATE;
  404 + }
  405 +
  406 + public String getUPDATE_BY() {
  407 + return UPDATE_BY;
  408 + }
  409 +
  410 + public void setUPDATE_BY(String UPDATE_BY) {
  411 + this.UPDATE_BY = UPDATE_BY;
  412 + }
  413 +
  414 + public Date getUPDATE_DATE() {
  415 + return UPDATE_DATE;
  416 + }
  417 +
  418 + public void setUPDATE_DATE(Date UPDATE_DATE) {
  419 + this.UPDATE_DATE = UPDATE_DATE;
  420 + }
  421 +
  422 + public String getREPORT_ROAD() {
  423 + return REPORT_ROAD;
  424 + }
  425 +
  426 + public void setREPORT_ROAD(String REPORT_ROAD) {
  427 + this.REPORT_ROAD = REPORT_ROAD;
  428 + }
  429 +
  430 + public String getSTATUS() {
  431 + return STATUS;
  432 + }
  433 +
  434 + public void setSTATUS(String STATUS) {
  435 + this.STATUS = STATUS;
  436 + }
  437 +
  438 + @Override
  439 + public String toString() {
  440 + DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  441 + return "{" +
  442 + "ID:'" + ID + '\'' +
  443 + ", REPORT_TYPE:'" + REPORT_TYPE + '\'' +
  444 + ", REPORT_GS:'" + REPORT_GS + '\'' +
  445 + ", REPORT_FGS:'" + REPORT_FGS + '\'' +
  446 + ", REPORT_DATE:'" + dateFormat.format(REPORT_DATE) + '\'' +
  447 + ", REPORT_BBR:'" + REPORT_BBR + '\'' +
  448 + ", REPORT_XL:'" + REPORT_XL + '\'' +
  449 + ", REPORT_XLNAME:'" + REPORT_XLNAME + '\'' +
  450 + ", REPORT_STATION:'" + REPORT_STATION + '\'' +
  451 + ", REPORT_DWSBBM:'" + REPORT_DWSBBM + '\'' +
  452 + ", REPORT_DWSBSJ:'" + REPORT_DWSBSJ + '\'' +
  453 + ", REPORT_YWSJ:'" + REPORT_YWSJ + '\'' +
  454 + ", REPORT_SMBWD:'" + REPORT_SMBWD + '\'' +
  455 + ", REPORT_DJGSJ:'" + REPORT_DJGSJ + '\'' +
  456 + ", REPORT_DJGYY:'" + REPORT_DJGYY + '\'' +
  457 + ", REPORT_TFSJ:'" + REPORT_TFSJ + '\'' +
  458 + ", REPORT_YXSJ:'" + REPORT_YXSJ + '\'' +
  459 + ", REPORT_YXBC:'" + REPORT_YXBC + '\'' +
  460 + ", REPORT_TZCS:'" + REPORT_TZCS + '\'' +
  461 + ", REPORT_SGBH:'" + REPORT_SGBH + '\'' +
  462 + ", REPORT_ZBH:'" + REPORT_ZBH + '\'' +
  463 + ", REPORT_PZH:'" + REPORT_PZH + '\'' +
  464 + ", REPORT_JSY:'" + REPORT_JSY + '\'' +
  465 + ", REPORT_SGSJ:'" + REPORT_SGSJ + '\'' +
  466 + ", REPORT_SGDD:'" + REPORT_SGDD + '\'' +
  467 + ", REPORT_XSFX:'" + REPORT_XSFX + '\'' +
  468 + ", REPORT_SGDX:'" + REPORT_SGDX + '\'' +
  469 + ", REPORT_DXPZH:'" + REPORT_DXPZH + '\'' +
  470 + ", REPORT_SGGK:'" + REPORT_SGGK + '\'' +
  471 + ", REPORT_SSRS:'" + REPORT_SSRS + '\'' +
  472 + ", REPORT_SWRS:'" + REPORT_SWRS + '\'' +
  473 + ", REPORT_BGR:'" + REPORT_BGR + '\'' +
  474 + ", REPORT_BGRDH:'" + REPORT_BGRDH + '\'' +
  475 + ", REPORT_BZ:'" + REPORT_BZ + '\'' +
  476 + ", CREATE_BY:'" + CREATE_BY + '\'' +
  477 + ", CREATE_DATE:" + CREATE_DATE +
  478 + ", UPDATE_BY:'" + UPDATE_BY + '\'' +
  479 + ", UPDATE_DATE:" + UPDATE_DATE +
  480 + ", REPORT_ROAD:'" + REPORT_ROAD + '\'' +
  481 + ", STATUS:'" + STATUS + '\'' +
  482 + '}';
  483 + }
  484 +}
... ...
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
1   -package com.bsth.repository.realcontrol;
2   -
3   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
4   -import com.bsth.entity.schedule.CarConfigInfo;
5   -import com.bsth.repository.BaseRepository;
6   -import org.springframework.data.domain.Page;
7   -import org.springframework.data.domain.Pageable;
8   -import org.springframework.data.jpa.domain.Specification;
9   -import org.springframework.data.jpa.repository.EntityGraph;
10   -import org.springframework.data.jpa.repository.Modifying;
11   -import org.springframework.data.jpa.repository.Query;
12   -import org.springframework.stereotype.Repository;
13   -
14   -import javax.transaction.Transactional;
15   -import java.util.List;
16   -import java.util.Map;
17   -
18   -@Repository
19   -public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealInfo, Long>{
20   -
21   - @Query("select s from ScheduleRealInfo s where s.xlBm in ?1")
22   - List<ScheduleRealInfo> findByLines(List<String> lines);
23   -
24   -
25   - @Query(value="select s from ScheduleRealInfo s where s.id = ?1 ")
26   - ScheduleRealInfo scheduleById(Long id);
27   -
28   - @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and bc_type not in ('in','out') order by (lpName+1),clZbh,realExecDate,dfsj")
29   - List<ScheduleRealInfo> scheduleDailyQp(String line,String date);
30   -
31   - @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 GROUP BY s.id,s.jGh,s.clZbh,s.lpName order by (lpName+1)")
32   - List<ScheduleRealInfo> queryUserInfo(String line,String date);
33   -
34   - @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,min(s.jName) from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 GROUP BY s.jGh,s.clZbh,s.lpName order by (lpName+1)")
35   - List<ScheduleRealInfo> queryUserInfo2(String line,String date);
36   -
37   - @Query(value="select min(s.id), s.clZbh from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 GROUP BY s.clZbh ")
38   - List<ScheduleRealInfo> queryUserInfo3(String line,String date);
39   -
40   - @Query(value="select s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 order by bcs")
41   - List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName);
42   -
43   - //把sum(addMileage) 替换为0 数据表去掉了 add_mileage 字段
44   - @Query(value="select new map(clZbh as clZbh,jGh as jGh,jName as jName,sum(jhlc) as zgl,"
45   - + "0 as ksgl,count(jName) as bcs) from ScheduleRealInfo s where"
46   - + " s.xlBm = ?1 and s.scheduleDateStr = ?2 group by clZbh,jGh,jName")
47   - List<Map<String, Object>> dailyInfo(String line,String date);
48   -
49   - @Query(value="select d.device_id,d.sender,d.txt_content,d.timestamp,d.line_code from "
50   - + " bsth_v_directive_60 d where d.line_code=?1 and d.timestamp >=?2 and "
51   - + "d.timestamp <=?3 and d.device_id like %?4% ",nativeQuery=true)
52   - List<Object[]> historyMessage(String line,long d,long t,String code);
53   -
54   - @Query(value="SELECT r.xl_name,r.lp_name,r.cl_zbh,count(*) as cs "
55   - + " FROM bsth_c_s_sp_info_real r RIGHT JOIN bsth_v_directive_60 d "
56   - + " ON r.id = d.sch WHERE d.is_dispatch = 1 AND r.xl_bm like %?1% AND "
57   - + " r.schedule_date_str = ?2 and r.cl_zbh like %?3% group by "
58   - + " lp_name,xl_name,cl_zbh",nativeQuery=true)
59   - List<Object[]> historyMessageCount(String line,String date,String code);
60   -
61   - @Query(value="SELECT r.xl_name,r.cl_zbh,d.sender,d.timestamp,d.txt_content "
62   - + " FROM bsth_c_s_sp_info_real r RIGHT JOIN bsth_v_directive_60 d "
63   - + " ON r.id = d.sch WHERE d.is_dispatch = 1 AND r.xl_bm like %?1% AND "
64   - + " r.schedule_date_str = ?2 and r.cl_zbh =?3 ",nativeQuery=true)
65   - List<Object[]> historyMessageList(String line,String date,String code);
66   -
67   - @Query(value = "select max(id) from ScheduleRealInfo")
68   - Long getMaxId();
69   -
70   - @Query(value = "select count(*) from ScheduleRealInfo s where s.scheduleDateStr = ?1")
71   - int countByDate(String date);
72   -
73   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
74   - @Query(value = "select DISTINCT s from ScheduleRealInfo s where s.scheduleDateStr = ?1")
75   - List<ScheduleRealInfo> findByDate(String dateStr);
76   -
77   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
78   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and cl_zbh=?3 order by bcs")
79   - List<ScheduleRealInfo> findByDate2(String line,String date,String clzbh);
80   -
81   - @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.status = -1")
82   - int findCjbc(String jName,String clZbh,String lpName);
83   -
84   - @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and sflj != 0")
85   - int findLjbc(String jName,String clZbh,String lpName);
86   -
87   - @Query(value="SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,device_id FROM bsth_v_report_80 WHERE FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = ?2 AND line_id = ?1 and device_id like %?3%",nativeQuery=true)
88   - List<Object[]> account(String line,String date,String code);
89   -
90   - @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr >= ?2 "
91   - + " and s.scheduleDateStr <= ?3 and s.lpName like %?4% "
92   - + " and clZbh like %?5% order by s.fcsj")
93   - List<ScheduleRealInfo> correctForm(String line,String startDate,String endDate,String lpName,String code);
94   -
95   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
96   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDateStr = ?4 and s.xlBm=?5 order by realExecDate,fcsj")
97   - List<ScheduleRealInfo> queryListWaybill(String jName,String clZbh,String lpName,String date,String line);
98   -
99   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
100   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDateStr = ?4 and s.xlBm=?5 order by realExecDate,fcsj")
101   - List<ScheduleRealInfo> queryListWaybillXcld(String jGh,String clZbh,String lpName,String date,String line);
102   -
103   -// @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
104   -// @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh like %?1% and s.clZbh like %?2% and s.scheduleDate = str_to_date(?3,'%Y-%m-%d') and s.gsBm like %?4% and s.fgsBm like %?5% order by realExecDate,fcsj")
105   -// List<ScheduleRealInfo> queryListWaybill3(String jName,String clZbh,String date,String gsbm,String fgsbm);
106   -
107   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
108   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 order by s.xlBm,s.clZbh,s.jGh,s.realExecDate,s.fcsj")
109   - List<ScheduleRealInfo> scheduleByDateAndLineTjrb(String line,String date);
110   -
111   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
112   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and s.xlDir=?3 and s.fcsjActual is not null and s.zdsjActual is not null order by s.realExecDate,s.fcsjActual")
113   - List<ScheduleRealInfo> scheduleByDateAndLineInOut(String line,String date,String zd);
114   -
115   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
116   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.clZbh = ?1 and s.scheduleDateStr = ?2 and xlBm =?3 order by realExecDate,fcsj")
117   - List<ScheduleRealInfo> queryListWaybill2(String clZbh,String date,String line);
118   -
119   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
120   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh like %?1% and s.clZbh like %?2% and s.scheduleDateStr = ?3 and s.gsBm like %?4% and s.fgsBm like %?5% order by realExecDate,dfsj")
121   - List<ScheduleRealInfo> queryListWaybill3(String jName,String clZbh,String date,String gsbm,String fgsbm);
122   -
123   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
124   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.scheduleDateStr >=?3 and s.scheduleDateStr <=?4 order by bcs")
125   - List<ScheduleRealInfo> queryListWaybill4(String jName,String clZbh,String date,String enddate);
126   -
127   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
128   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2")
129   - List<ScheduleRealInfo> scheduleDaily(String line,String date);
130   -
131   - @Query(value = "select count(*) from ScheduleRealInfo s where s.xlBm=?1 and s.scheduleDateStr=?2")
132   - int countByLineCodeAndDate(String xlBm, String schDate);
133   -
134   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
135   - @Query(value = "select DISTINCT s from ScheduleRealInfo s where s.xlBm=?1 and s.scheduleDateStr=?2 and ccService=false")
136   - List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate);
137   -
138   - @Modifying
139   - @Transactional
140   - @Query(value = "delete ScheduleRealInfo s where s.xlBm=?1 and s.scheduleDateStr=?2")
141   - void deleteByLineCodeAndDate(String xlBm, String schDate);
142   -
143   - //去掉了 xlBm is not null
144   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
145   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr = ?2 order by s.xlDir,s.realExecDate,s.fcsj, lpName")
146   - List<ScheduleRealInfo> scheduleByDateAndLine(String line,String date);
147   -
148   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
149   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm =?1 and s.scheduleDateStr = ?2 order by s.lpName, s.realExecDate,s.fcsj")
150   - List<ScheduleRealInfo> scheduleByDateAndLineQp(String line,String date);
151   -
152   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
153   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm =?1 and s.scheduleDateStr = ?2 and s.ccService=false order by s.lpName, s.realExecDate,s.fcsj")
154   - List<ScheduleRealInfo> scheduleDdrb(String line,String date);
155   -
156   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
157   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr= ?2 and s.ccService=false order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
158   - List<ScheduleRealInfo> scheduleDdrb2(String line,String date);
159   -
160   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
161   - @Query(value="select DISTINCT s from ScheduleRealInfo s where gsBm like %?1% and fgsBm like %?2% and s.scheduleDateStr = ?3 order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
162   - List<ScheduleRealInfo> scheduleByDateAndLineByGs_(String gsdm,String fgsdm,String date);
163   -
164   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
165   - @Query(value="select DISTINCT s from ScheduleRealInfo s where gsBm like %?1% and fgsBm like %?2% and s.scheduleDateStr = ?3 and s.bcType not in ('in','out','ldks') order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
166   - List<ScheduleRealInfo> scheduleByDateAndLineByGs(String gsdm,String fgsdm,String date);
167   -
168   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
169   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr= ?2 order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
170   - List<ScheduleRealInfo> scheduleByDateAndLineQp2(String line,String date);
171   -
172   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
173   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and s.bcType not in ('in','out','ldks') order by s.xlBm,s.realExecDate,s.fcsj")
174   - List<ScheduleRealInfo> scheduleByDateAndLine2(String line,String date);
175   -
176   - //按月统计
177   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
178   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr = ?2 and s.bcType not in ('in','out','ldks') order by s.xlBm")
179   - List<ScheduleRealInfo> scheduleByDateAndLine3(String line,String date);
180   -
181   - //按照时间段统计
182   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
183   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr between ?2 and ?3 and gsBm = ?4 and fgsBm like %?5% order by s.fgsBm, s.xlBm")
184   - List<ScheduleRealInfo> scheduleByDateAndLineTj(String line,String date,String date2,String gsdm,String fgsdm);
185   -
186   - //按照时间段统计
187   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
188   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr >= ?2 and s.scheduleDateStr<= ?3 order by s.fgsBm,s.xlBm")
189   - List<ScheduleRealInfo> scheduleByDateAndLineTj2(String line,String date,String date2);
190   - //月报表
191   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
192   - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr >= ?2 and s.scheduleDateStr<= ?3 order by s.xlBm")
193   - List<ScheduleRealInfo> scheduleByDateAndLineYbb(String line,String date,String date2);
194   -
195   -
196   - @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh,s.lpName as lpName,min(CONCAT(s.realExecDate,' ',s.fcsj)) AS realExecDate ) from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr = ?2 and s.gsBm like %?3% and s.fgsBm like %?4% and s.clZbh like %?5% GROUP BY xlBm,clZbh,jGh,scheduleDate,lpName ORDER BY clZbh,realExecDate")
197   - List<Map<String,Object>> yesterdayDataList(String line,String date,String gsbm,String fgsbm,String nbbm);
198   -
199   - @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh,s.lpName as lpName,min(CONCAT(s.realExecDate,' ',s.fcsj)) AS realExecDate ) from ScheduleRealInfo s where s.xlBm =?1 and s.scheduleDateStr = ?2 and s.gsBm like %?3% and s.fgsBm like %?4% and s.clZbh like %?5% GROUP BY xlBm,clZbh,jGh,scheduleDate,lpName ORDER BY clZbh,realExecDate")
200   - List<Map<String,Object>> yesterdayDataList_eq(String line,String date,String gsbm,String fgsbm,String nbbm);
201   -
202   - @Query(value="select s from ScheduleRealInfo s where s.scheduleDateStr = ?1 ORDER BY xlBm,lpName,clZbh,xlDir")
203   - List<ScheduleRealInfo> setLD(String date);
204   -
205   - @Query(value="select new map(xlBm as xlBm,lpName as lpName,clZbh as clZbh) from ScheduleRealInfo s where s.scheduleDateStr = ?1 GROUP BY xlBm,lpName,clZbh ORDER BY xlBm,lpName,clZbh")
206   - List<Map<String,Object>> setLDGroup(String date);
207   -
208   - @Query(value="select new map(xlBm as xlBm,clZbh as clZbh) from ScheduleRealInfo s where s.scheduleDateStr = ?1 GROUP BY xlBm,clZbh ORDER BY xlBm,clZbh")
209   - List<Map<String,Object>> setLCYHGroup(String date);
210   -
211   - @Query(value="select new map(xlBm as xlBm) from ScheduleRealInfo s where s.scheduleDateStr = ?1 GROUP BY xlBm ORDER BY xlBm")
212   - List<Map<String,Object>> setDDRBGroup(String date);
213   -
214   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
215   - @Override
216   - Page<ScheduleRealInfo> findAll(Specification<ScheduleRealInfo> spec, Pageable pageable);
217   -
218   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
219   - @Override
220   - List<ScheduleRealInfo> findAll(Specification<ScheduleRealInfo> spec);
221   -
222   - @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
223   - @Override
224   - List<ScheduleRealInfo> findAll();
225   -
226   - @Modifying
227   - @Transactional
228   - @Query(value = "update ScheduleRealInfo s set s.lpChange=1 where s.id=?1 ")
229   - Integer updateLpChange(Long id);
230   -
231   - @Query(value = "select count (s.id) from ScheduleRealInfo s where s.clZbh=?1 and s.scheduleDateStr=?2 and s.xlBm=?3 and s.qdzCode=?4")
232   - Long isCircleQdz(String clzbh,String sdr,String xlbm,String qdzCode);
233   -
234   -}
  1 +package com.bsth.repository.realcontrol;
  2 +
  3 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  4 +import com.bsth.entity.schedule.CarConfigInfo;
  5 +import com.bsth.repository.BaseRepository;
  6 +import org.springframework.data.domain.Page;
  7 +import org.springframework.data.domain.Pageable;
  8 +import org.springframework.data.jpa.domain.Specification;
  9 +import org.springframework.data.jpa.repository.EntityGraph;
  10 +import org.springframework.data.jpa.repository.Modifying;
  11 +import org.springframework.data.jpa.repository.Query;
  12 +import org.springframework.stereotype.Repository;
  13 +
  14 +import javax.transaction.Transactional;
  15 +import java.util.List;
  16 +import java.util.Map;
  17 +
  18 +@Repository
  19 +public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealInfo, Long>{
  20 +
  21 + @Query("select s from ScheduleRealInfo s where s.xlBm in ?1")
  22 + List<ScheduleRealInfo> findByLines(List<String> lines);
  23 +
  24 +
  25 + @Query(value="select s from ScheduleRealInfo s where s.id = ?1 ")
  26 + ScheduleRealInfo scheduleById(Long id);
  27 +
  28 + @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and bc_type not in ('in','out') order by (lpName+1),clZbh,realExecDate,dfsj")
  29 + List<ScheduleRealInfo> scheduleDailyQp(String line,String date);
  30 +
  31 + @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 GROUP BY s.id,s.jGh,s.clZbh,s.lpName order by (lpName+1)")
  32 + List<ScheduleRealInfo> queryUserInfo(String line,String date);
  33 +
  34 + @Query(value="select min(s.id), s.jGh,s.clZbh,s.lpName,min(s.jName) from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 GROUP BY s.jGh,s.clZbh,s.lpName order by (lpName+1)")
  35 + List<Object[]> queryUserInfo2(String line,String date);
  36 +
  37 + @Query(value="select min(s.id), s.clZbh from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 GROUP BY s.clZbh ")
  38 + List<Object[]> queryUserInfo3(String line,String date);
  39 +
  40 + @Query(value="select s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 order by bcs")
  41 + List<ScheduleRealInfo> exportWaybill(String jName,String clZbh,String lpName);
  42 +
  43 + //把sum(addMileage) 替换为0 数据表去掉了 add_mileage 字段
  44 + @Query(value="select new map(clZbh as clZbh,jGh as jGh,jName as jName,sum(jhlc) as zgl,"
  45 + + "0 as ksgl,count(jName) as bcs) from ScheduleRealInfo s where"
  46 + + " s.xlBm = ?1 and s.scheduleDateStr = ?2 group by clZbh,jGh,jName")
  47 + List<Map<String, Object>> dailyInfo(String line,String date);
  48 +
  49 + @Query(value="select d.device_id,d.sender,d.txt_content,d.timestamp,d.line_code from "
  50 + + " bsth_v_directive_60 d where d.line_code=?1 and d.timestamp >=?2 and "
  51 + + "d.timestamp <=?3 and d.device_id like %?4% ",nativeQuery=true)
  52 + List<Object[]> historyMessage(String line,long d,long t,String code);
  53 +
  54 + @Query(value="SELECT r.xl_name,r.lp_name,r.cl_zbh,count(*) as cs "
  55 + + " FROM bsth_c_s_sp_info_real r RIGHT JOIN bsth_v_directive_60 d "
  56 + + " ON r.id = d.sch WHERE d.is_dispatch = 1 AND r.xl_bm like %?1% AND "
  57 + + " r.schedule_date_str = ?2 and r.cl_zbh like %?3% group by "
  58 + + " lp_name,xl_name,cl_zbh",nativeQuery=true)
  59 + List<Object[]> historyMessageCount(String line,String date,String code);
  60 +
  61 + @Query(value="SELECT r.xl_name,r.cl_zbh,d.sender,d.timestamp,d.txt_content "
  62 + + " FROM bsth_c_s_sp_info_real r RIGHT JOIN bsth_v_directive_60 d "
  63 + + " ON r.id = d.sch WHERE d.is_dispatch = 1 AND r.xl_bm like %?1% AND "
  64 + + " r.schedule_date_str = ?2 and r.cl_zbh =?3 ",nativeQuery=true)
  65 + List<Object[]> historyMessageList(String line,String date,String code);
  66 +
  67 + @Query(value = "select max(id) from ScheduleRealInfo")
  68 + Long getMaxId();
  69 +
  70 + @Query(value = "select count(*) from ScheduleRealInfo s where s.scheduleDateStr = ?1")
  71 + int countByDate(String date);
  72 +
  73 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  74 + @Query(value = "select DISTINCT s from ScheduleRealInfo s where s.scheduleDateStr = ?1")
  75 + List<ScheduleRealInfo> findByDate(String dateStr);
  76 +
  77 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  78 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and cl_zbh=?3 order by bcs")
  79 + List<ScheduleRealInfo> findByDate2(String line,String date,String clzbh);
  80 +
  81 + @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.status = -1")
  82 + int findCjbc(String jName,String clZbh,String lpName);
  83 +
  84 + @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and sflj != 0")
  85 + int findLjbc(String jName,String clZbh,String lpName);
  86 +
  87 + @Query(value="SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,device_id FROM bsth_v_report_80 WHERE FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = ?2 AND line_id = ?1 and device_id like %?3%",nativeQuery=true)
  88 + List<Object[]> account(String line,String date,String code);
  89 +
  90 + @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr >= ?2 "
  91 + + " and s.scheduleDateStr <= ?3 and s.lpName like %?4% "
  92 + + " and clZbh like %?5% order by s.fcsj")
  93 + List<ScheduleRealInfo> correctForm(String line,String startDate,String endDate,String lpName,String code);
  94 +
  95 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  96 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDateStr = ?4 and s.xlBm=?5 order by realExecDate,fcsj")
  97 + List<ScheduleRealInfo> queryListWaybill(String jName,String clZbh,String lpName,String date,String line);
  98 +
  99 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  100 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh = ?1 and s.clZbh = ?2 and s.lpName = ?3 and s.scheduleDateStr = ?4 and s.xlBm=?5 order by realExecDate,fcsj")
  101 + List<ScheduleRealInfo> queryListWaybillXcld(String jGh,String clZbh,String lpName,String date,String line);
  102 +
  103 +// @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  104 +// @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh like %?1% and s.clZbh like %?2% and s.scheduleDate = str_to_date(?3,'%Y-%m-%d') and s.gsBm like %?4% and s.fgsBm like %?5% order by realExecDate,fcsj")
  105 +// List<ScheduleRealInfo> queryListWaybill3(String jName,String clZbh,String date,String gsbm,String fgsbm);
  106 +
  107 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  108 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 order by s.xlBm,s.clZbh,s.jGh,s.realExecDate,s.fcsj")
  109 + List<ScheduleRealInfo> scheduleByDateAndLineTjrb(String line,String date);
  110 +
  111 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  112 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and s.xlDir=?3 and s.fcsjActual is not null and s.zdsjActual is not null order by s.realExecDate,s.fcsjActual")
  113 + List<ScheduleRealInfo> scheduleByDateAndLineInOut(String line,String date,String zd);
  114 +
  115 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  116 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.clZbh = ?1 and s.scheduleDateStr = ?2 and xlBm =?3 order by realExecDate,fcsj")
  117 + List<ScheduleRealInfo> queryListWaybill2(String clZbh,String date,String line);
  118 +
  119 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  120 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jGh like %?1% and s.clZbh like %?2% and s.scheduleDateStr = ?3 and s.gsBm like %?4% and s.fgsBm like %?5% order by realExecDate,dfsj")
  121 + List<ScheduleRealInfo> queryListWaybill3(String jName,String clZbh,String date,String gsbm,String fgsbm);
  122 +
  123 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  124 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.scheduleDateStr >=?3 and s.scheduleDateStr <=?4 order by bcs")
  125 + List<ScheduleRealInfo> queryListWaybill4(String jName,String clZbh,String date,String enddate);
  126 +
  127 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  128 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2")
  129 + List<ScheduleRealInfo> scheduleDaily(String line,String date);
  130 +
  131 + @Query(value = "select count(*) from ScheduleRealInfo s where s.xlBm=?1 and s.scheduleDateStr=?2")
  132 + int countByLineCodeAndDate(String xlBm, String schDate);
  133 +
  134 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  135 + @Query(value = "select DISTINCT s from ScheduleRealInfo s where s.xlBm=?1 and s.scheduleDateStr=?2 and ccService=false")
  136 + List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate);
  137 +
  138 + @Modifying
  139 + @Transactional
  140 + @Query(value = "delete ScheduleRealInfo s where s.xlBm=?1 and s.scheduleDateStr=?2")
  141 + void deleteByLineCodeAndDate(String xlBm, String schDate);
  142 +
  143 + //去掉了 xlBm is not null
  144 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  145 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr = ?2 order by s.xlDir,s.realExecDate,s.fcsj, lpName")
  146 + List<ScheduleRealInfo> scheduleByDateAndLine(String line,String date);
  147 +
  148 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  149 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm =?1 and s.scheduleDateStr = ?2 order by s.lpName, s.realExecDate,s.fcsj")
  150 + List<ScheduleRealInfo> scheduleByDateAndLineQp(String line,String date);
  151 +
  152 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  153 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm =?1 and s.scheduleDateStr = ?2 and s.ccService=false order by s.lpName, s.realExecDate,s.fcsj")
  154 + List<ScheduleRealInfo> scheduleDdrb(String line,String date);
  155 +
  156 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  157 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr= ?2 and s.ccService=false order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
  158 + List<ScheduleRealInfo> scheduleDdrb2(String line,String date);
  159 +
  160 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  161 + @Query(value="select DISTINCT s from ScheduleRealInfo s where gsBm like %?1% and fgsBm like %?2% and s.scheduleDateStr = ?3 order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
  162 + List<ScheduleRealInfo> scheduleByDateAndLineByGs_(String gsdm,String fgsdm,String date);
  163 +
  164 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  165 + @Query(value="select DISTINCT s from ScheduleRealInfo s where gsBm like %?1% and fgsBm like %?2% and s.scheduleDateStr = ?3 and s.bcType not in ('in','out','ldks') order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
  166 + List<ScheduleRealInfo> scheduleByDateAndLineByGs(String gsdm,String fgsdm,String date);
  167 +
  168 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  169 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr= ?2 order by s.xlDir,s.realExecDate,s.fcsj, s.lpName")
  170 + List<ScheduleRealInfo> scheduleByDateAndLineQp2(String line,String date);
  171 +
  172 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  173 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr = ?2 and s.bcType not in ('in','out','ldks') order by s.xlBm,s.realExecDate,s.fcsj")
  174 + List<ScheduleRealInfo> scheduleByDateAndLine2(String line,String date);
  175 +
  176 + //按月统计
  177 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  178 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr = ?2 and s.bcType not in ('in','out','ldks') order by s.xlBm")
  179 + List<ScheduleRealInfo> scheduleByDateAndLine3(String line,String date);
  180 +
  181 + //按照时间段统计
  182 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  183 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr between ?2 and ?3 and gsBm = ?4 and fgsBm like %?5% order by s.fgsBm, s.xlBm")
  184 + List<ScheduleRealInfo> scheduleByDateAndLineTj(String line,String date,String date2,String gsdm,String fgsdm);
  185 +
  186 + //按照时间段统计
  187 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  188 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr >= ?2 and s.scheduleDateStr<= ?3 order by s.fgsBm,s.xlBm")
  189 + List<ScheduleRealInfo> scheduleByDateAndLineTj2(String line,String date,String date2);
  190 + //月报表
  191 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  192 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDateStr >= ?2 and s.scheduleDateStr<= ?3 order by s.xlBm")
  193 + List<ScheduleRealInfo> scheduleByDateAndLineYbb(String line,String date,String date2);
  194 +
  195 +
  196 + @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh,s.lpName as lpName,min(CONCAT(s.realExecDate,' ',s.fcsj)) AS realExecDate ) from ScheduleRealInfo s where s.xlBm like %?1% and s.scheduleDateStr = ?2 and s.gsBm like %?3% and s.fgsBm like %?4% and s.clZbh like %?5% GROUP BY xlBm,clZbh,jGh,scheduleDate,lpName ORDER BY clZbh,realExecDate")
  197 + List<Map<String,Object>> yesterdayDataList(String line,String date,String gsbm,String fgsbm,String nbbm);
  198 +
  199 + @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh,s.lpName as lpName,min(CONCAT(s.realExecDate,' ',s.fcsj)) AS realExecDate ) from ScheduleRealInfo s where s.xlBm =?1 and s.scheduleDateStr = ?2 and s.gsBm like %?3% and s.fgsBm like %?4% and s.clZbh like %?5% GROUP BY xlBm,clZbh,jGh,scheduleDate,lpName ORDER BY clZbh,realExecDate")
  200 + List<Map<String,Object>> yesterdayDataList_eq(String line,String date,String gsbm,String fgsbm,String nbbm);
  201 +
  202 + @Query(value="select s from ScheduleRealInfo s where s.scheduleDateStr = ?1 ORDER BY xlBm,lpName,clZbh,xlDir")
  203 + List<ScheduleRealInfo> setLD(String date);
  204 +
  205 + @Query(value="select new map(xlBm as xlBm,lpName as lpName,clZbh as clZbh) from ScheduleRealInfo s where s.scheduleDateStr = ?1 GROUP BY xlBm,lpName,clZbh ORDER BY xlBm,lpName,clZbh")
  206 + List<Map<String,Object>> setLDGroup(String date);
  207 +
  208 + @Query(value="select new map(xlBm as xlBm,clZbh as clZbh) from ScheduleRealInfo s where s.scheduleDateStr = ?1 GROUP BY xlBm,clZbh ORDER BY xlBm,clZbh")
  209 + List<Map<String,Object>> setLCYHGroup(String date);
  210 +
  211 + @Query(value="select new map(xlBm as xlBm) from ScheduleRealInfo s where s.scheduleDateStr = ?1 GROUP BY xlBm ORDER BY xlBm")
  212 + List<Map<String,Object>> setDDRBGroup(String date);
  213 +
  214 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  215 + @Override
  216 + Page<ScheduleRealInfo> findAll(Specification<ScheduleRealInfo> spec, Pageable pageable);
  217 +
  218 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  219 + @Override
  220 + List<ScheduleRealInfo> findAll(Specification<ScheduleRealInfo> spec);
  221 +
  222 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  223 + @Override
  224 + List<ScheduleRealInfo> findAll();
  225 +
  226 + @Modifying
  227 + @Transactional
  228 + @Query(value = "update ScheduleRealInfo s set s.lpChange=1 where s.id=?1 ")
  229 + Integer updateLpChange(Long id);
  230 +
  231 + @Query(value = "select count (s.id) from ScheduleRealInfo s where s.clZbh=?1 and s.scheduleDateStr=?2 and s.xlBm=?3 and s.qdzCode=?4")
  232 + Long isCircleQdz(String clzbh,String sdr,String xlbm,String qdzCode);
  233 +
  234 +}
... ...
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   -@Service
138   -public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long>
139   - implements ScheduleRealInfoService, InitializingBean, DisposableBean {
140   - @Autowired
141   - JdbcTemplate jdbcTemplate;
142   - @Autowired
143   - ScheduleRealInfoRepository scheduleRealInfoRepository;
144   -
145   - @Autowired
146   - EmployeeConfigInfoRepository employeeConfigInfoRepository;
147   -
148   - @Autowired
149   - CarConfigInfoRepository carConfigInfoRepository;
150   -
151   - @Autowired
152   - SectionRouteService sectionRouteService;
153   -
154   - @Autowired
155   - CulateMileageService culateMieageService;
156   -
157   - @Autowired
158   - DictionaryService dictionaryService;
159   -
160   - @Autowired
161   - CalcIntervalRepository calcIntervalRepository;
162   - /*@Autowired
163   - BorrowCenter borrowCenter;*/
164   -
165   - @Autowired
166   - LineRepository lineRepository;
167   - @Autowired
168   - LineService lineService;
169   - @Autowired
170   - GuideboardInfoRepository guideboardInfoRepository;
171   -
172   - @Autowired
173   - ChildTaskPlanRepository cTaskPlanRepository;
174   -
175   - @Autowired
176   - SendUtils sendUtils;
177   -
178   - @Autowired
179   - DayOfSchedule dayOfSchedule;
180   -
181   - @Autowired
182   - SchAttrCalculator schAttrCalculator;
183   -
184   - @Autowired
185   - LineConfigData lineConfigData;
186   -
187   - @Autowired
188   - DutyEmployeeService dutyEmployeeService;
189   -
190   - @Autowired
191   - YlxxbRepository ylxxbRepository;
192   -
193   - @Autowired
194   - YlbRepository ylbRepository;
195   -
196   - @Autowired
197   - DlbRepository dlbRepository;
198   -
199   - @Autowired
200   - ReportService reposrService;
201   -
202   - @Autowired
203   - CulateMileageService culateService;
204   -
205   - @Autowired
206   - FormLogger schModifyLog;
207   -
208   - @Autowired
209   - DirectiveService directiveService;
210   -
211   - @Autowired
212   - CarDeviceRepository carDeviceRepository;
213   -
214   - @Autowired
215   - CarsRepository carsRepository;
216   -
217   - @Autowired
218   - RepairReportRepository repairReportRepository;
219   - Logger logger = LoggerFactory.getLogger(this.getClass());
220   -
221   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
222   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
223   -
224   - private Queue<RepairReport> queue = new ConcurrentLinkedQueue<>();
225   -
226   - private ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
227   -
228   - @Override
229   - public Thread newThread(Runnable r) {
230   - // TODO Auto-generated method stub
231   - Thread t = new Thread(r);
232   - t.setName("RepairReportReissuer");
233   -
234   - return t;
235   - }
236   - });
237   -
238   - private static Map<String, String> report2repair = new HashMap<String, String>();
239   -
240   - static {
241   - report2repair.put("9101", "9109");
242   - report2repair.put("9102", "9102");
243   - report2repair.put("9103", "9103");
244   - report2repair.put("9104", "9104");
245   - report2repair.put("9109", "9109");
246   - report2repair.put("9201", "9201");
247   - report2repair.put("9202", "9202");
248   - report2repair.put("9203", "9203");
249   - report2repair.put("9204", "9204");
250   - report2repair.put("9209", "9209");
251   - report2repair.put("9301", "9301");
252   - report2repair.put("9302", "9302");
253   - report2repair.put("9303", "9303");
254   - report2repair.put("9304", "9304");
255   - report2repair.put("9305", "9305");
256   - report2repair.put("9306", "9306");
257   - report2repair.put("9309", "9309");
258   - }
259   -
260   -
261   - /**
262   - * 校验人车 和 班次的公司和分公司归属
263   - *
264   - * @param schId
265   - * @param jsy
266   - * @param spy
267   - * @param nbbm
268   - * @return -2 跨营运公司,校验不过
269   - * -1 跨分公司,二次确认
270   - * 1 校验通过
271   - */
272   - @Override
273   - public Map<String, Object> checkPCFgsAscription(Long schId, String jGh, String sGh, String nbbm) {
274   - Map<String, Object> rs = new HashMap<>();
275   - try {
276   - rs.put("status", ResponseCode.SUCCESS);
277   - rs.put("checkStatus", -2);
278   -
279   - String msg = null;
280   - ScheduleRealInfo sch = dayOfSchedule.get(schId);
281   - String gsbm = sch.getGsBm(), fgsbm = sch.getFgsBm();
282   -
283   - if (nbbm != null && !carExist(gsbm, nbbm)) {
284   - msg = sch.getGsName() + "没有自编号为" + "[" + nbbm + "]的车辆";
285   - rs.put("msg", msg);
286   - return rs;
287   - }
288   -
289   - if (nbbm != null && !sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(nbbm))) {
290   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + nbbm + "】的车辆");
291   - return rs;
292   - }
293   -
294   - if (nbbm != null && !(fgsbm + "_" + gsbm).equals(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm))) {
295   -
296   - String clFgsName = BasicData.businessFgsCodeNameMap.get(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm));
297   -
298   - msg = ("【" + nbbm + "】" + "是" + clFgsName + "的车辆!");
299   - rs.put("msg", msg);
300   - rs.put("checkStatus", -1);
301   - return rs;
302   - }
303   -
304   - if(null != jGh && !"/".equals(StringUtils.trim(jGh))){
305   - Personnel jsy = BasicData.perMap.get(gsbm + "-" + jGh);
306   -
307   - if (null == jsy) {
308   - msg = "【驾驶员】:" + sch.getGsName() + "暂无工号为" + "【" + jGh + "】的人员";
309   - rs.put("msg", msg);
310   - return rs;
311   - }
312   - else if (!fgsbm.equals(jsy.getBrancheCompanyCode())) {
313   - //校验分公司
314   - msg = ("【驾驶员】:" + jGh + "/" + jsy.getPersonnelName() + "是" + jsy.getBrancheCompany() + "的人员");
315   - rs.put("msg", msg);
316   - rs.put("checkStatus", -1);
317   - return rs;
318   - }
319   - }
320   -
321   - if (null != sGh && !"/".equals(StringUtils.trim(sGh))) {
322   - Personnel spy = BasicData.perMap.get(gsbm + "-" + sGh);
323   - if (null == spy) {
324   - msg = "【售票员】: " + sch.getGsName() + "暂无工号为" + "【" + sGh + "】的人员";
325   - rs.put("msg", msg);
326   - return rs;
327   - }
328   - else if (!fgsbm.equals(spy.getBrancheCompanyCode())) {
329   - msg = ("【售票员】: " + sGh + "/" + spy.getPersonnelName() + "是" + spy.getBrancheCompany() + "的人员");
330   - rs.put("msg", msg);
331   - rs.put("checkStatus", -1);
332   - return rs;
333   - }
334   - }
335   -
336   - rs.put("checkStatus", 1);
337   - } catch (Exception e) {
338   - logger.error("", e);
339   - rs.put("status", ResponseCode.ERROR);
340   - }
341   - return rs;
342   - }
343   -
344   -
345   - /**
346   - * 车辆是否存在
347   - *
348   - * @param gsbm 公司编码
349   - * @param nbbm 车辆自编号
350   - * @return
351   - */
352   - private boolean carExist(String gsbm, String nbbm) {
353   - return BasicData.nbbm2CompanyCodeMap.containsKey(nbbm);
354   - }
355   -
356   - /**
357   - * 获取人员姓名
358   - *
359   - * @param gsbm 公司编码
360   - * @param gh 人员工号
361   - * @return
362   - */
363   - private String getPersonName(String gsbm, String gh) {
364   - return BasicData.allPerson.get(gsbm + '-' + gh);
365   - }
366   -
367   - @Override
368   - public Iterable<ScheduleRealInfo> list(Map<String, Object> map) {
369   - Iterator<ScheduleRealInfo> iterator = super.list(map).iterator();
370   - Set<ScheduleRealInfo> set = new HashSet<>(100);
371   -
372   - DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
373   - //计算时间戳
374   - ScheduleRealInfo sch;
375   - while (iterator.hasNext()) {
376   - sch = iterator.next();
377   - //待发时间戳
378   - sch.setDfsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getDfsj()));
379   - //实发时间戳
380   - if (StringUtils.isNotEmpty(sch.getFcsjActual())) {
381   - sch.setFcsjActualTime(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsjActual()));
382   - }
383   - set.add(sch);
384   - }
385   - return set;
386   - }
387   -
388   - @Override
389   - public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
390   - List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
391   -
392   - /*Multimap<String, ScheduleRealInfo> mMap = ArrayListMultimap.create();
393   -
394   - for (String lineCode : lineList) {
395   - mMap.putAll(lineCode, dayOfSchedule.findByLineCode(lineCode));
396   - }*/
397   - return dayOfSchedule.findByLineCodes(lineList);
398   - }
399   -
400   - private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
401   -
402   - private static int BUF_SIZE = 1024;
403   -
404   - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
405   - private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
406   -
407   - @Override
408   - public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType, String userId) {
409   - Map<String, Object> map = new HashMap<>();
410   - try {
411   -
412   - ScheduleRealInfo schedule = dayOfSchedule.get(id);
413   -
414   - if (schedule.getStatus() > 0) {
415   - map.put("status", ResponseCode.SUCCESS);
416   - map.put("flag", "4008");
417   - map.put("t", schedule);
418   - return map;
419   - }
420   -
421   - LineConfig config = lineConfigData.get(schedule.getXlBm());
422   - //小于线路开始运营时间,则默认跨过24点
423   - if (dfsj.compareTo(config.getStartOpt()) < 0) {
424   - schedule.setRealExecDate(fmtyyyyMMdd.print(schedule.getScheduleDate().getTime() + DAY_TIME));
425   - } else {
426   - schedule.setRealExecDate(schedule.getScheduleDateStr());
427   - }
428   -
429   - //记录日志
430   - ScheduleModifyLogger.dftz(schedule, opType, schedule.getDfsj(), dfsj, remarks, userId);
431   -
432   - schedule.setDfsjAll(dfsj);
433   - schedule.setDfAuto(false);
434   - if ("1".equals(opType))
435   - schedule.setRemarks(remarks);
436   -
437   - List<ScheduleRealInfo> ts = new ArrayList<>();
438   - ts.add(schedule);
439   - //调整终点时间和下一个班次的应到时间
440   - //schedule.calcEndTime();
441   - /*ScheduleRealInfo nextSch = dayOfSchedule.nextByLp2(schedule);
442   - if (null != nextSch) {
443   - nextSch.setQdzArrDatejh(schedule.getZdsj());
444   - ts.add(nextSch);
445   - }*/
446   -
447   - //调整班次类型
448   - if (StringUtils.isNotEmpty(bcType) && !bcType.equals(schedule.getBcType())) {
449   - if ((schedule.getBcType().equals("major")
450   - || schedule.getBcType().equals("venting"))
451   - && bcType.equals("normal")) {
452   - //清空备注
453   - schedule.setRemarks("");
454   - }
455   - schedule.setBcType(bcType);
456   - }
457   -
458   - //如果正在执行该班次
459   - //ScheduleRealInfo exec = dayOfSchedule.executeCurr(schedule.getClZbh());
460   - //if(exec != null && exec == schedule){
461   - //重新计算正在执行班次
462   - dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
463   - //}
464   -
465   - //重新计算是否误点
466   - schedule.reCalcLate();
467   - //取消应发未到标记,不再自动调整待发
468   - //if(schedule.isLate2()){
469   - // schedule.setLate2(false);
470   - //LateAdjustHandle.remove(schedule);
471   - //}
472   -
473   - try {
474   - if (!schedule.getDirectiveState().equals(-1) && schedule.getStatus() == 0) {
475   - //重新下发调度指令
476   - directiveService.send60Dispatch(schedule.getId(), "待发@系统");
477   - }
478   - } catch (Exception e) {
479   - logger.error("", e);
480   - }
481   -
482   - // 持久化到数据库
483   - dayOfSchedule.save(schedule);
484   -
485   - map.put("status", ResponseCode.SUCCESS);
486   - map.put("ts", ts);
487   - } catch (Exception e) {
488   - logger.error("", e);
489   - map.put("status", ResponseCode.ERROR);
490   - }
491   - return map;
492   - }
493   -
494   - @Override
495   - public Map<String, Object> destroy(String idsStr, String remarks, String reason, String userId) {
496   -
497   - Map<String, Object> map = new HashMap<>();
498   - List<ScheduleRealInfo> rsList = new ArrayList<>();
499   - map.put("ts", rsList);
500   - try {
501   - List<String> idList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(idsStr));
502   -
503   - ScheduleRealInfo schedule = null;
504   - for (String id : idList) {
505   - schedule = dayOfSchedule.get(Long.parseLong(id));
506   - if (schedule.isDestroy()) {
507   - map.put("status", ResponseCode.ERROR);
508   - map.put("msg", "不必要的重复烂班!");
509   - return map;
510   - }
511   - //记录日志
512   - ScheduleModifyLogger.jhlb(schedule, remarks, userId);
513   -
514   - schedule.setAdjustExps(reason);
515   - schedule.destroy();
516   - schedule.addRemarks(remarks);
517   -
518   - dayOfSchedule.save(schedule);
519   - rsList.add(schedule);
520   - }
521   -
522   - //重新计算当前执行班次
523   - dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
524   -
525   - map.put("status", ResponseCode.SUCCESS);
526   - } catch (Exception e) {
527   - logger.error("", e);
528   - map.put("status", ResponseCode.ERROR);
529   - }
530   - return map;
531   - }
532   -
533   - // 线路id获取驾驶员
534   - @Override
535   - public List<Map<String, String>> findDriverByLine(String lineCode) {
536   - List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
537   -
538   - List<Map<String, String>> rsList = new ArrayList<>();
539   - Map<String, String> map = null;
540   - Personnel driver = null;
541   - String code = null;
542   -
543   - for (EmployeeConfigInfo employee : list) {
544   - driver = employee.getJsy();
545   - if (driver != null) {
546   - map = new HashMap<>();
547   - code = driver.getJobCode();
548   - map.put("id", code + "/" + driver.getPersonnelName());
549   - map.put("text", code + "/" + driver.getPersonnelName());
550   - rsList.add(map);
551   - }
552   - }
553   - return rsList;
554   - }
555   -
556   - // 线路id获取售票员
557   - @Override
558   - public List<Map<String, String>> findConductorByLine(String lineCode) {
559   - List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
560   -
561   - List<Map<String, String>> rsList = new ArrayList<>();
562   - Map<String, String> map = null;
563   - Personnel conductor = null;
564   - String code = null;
565   -
566   - for (EmployeeConfigInfo employee : list) {
567   - conductor = employee.getSpy();
568   - if (conductor != null) {
569   - code = conductor.getJobCode();
570   - map = new HashMap<>();
571   - map.put("id", code + "/" + conductor.getPersonnelName());
572   - map.put("text", code + "/" + conductor.getPersonnelName());
573   - rsList.add(map);
574   - }
575   - }
576   - return rsList;
577   - }
578   -
579   - @Override
580   - public List<Map<String, String>> findCarByLine(String lineCode) {
581   -
582   - List<CarConfigInfo> list = carConfigInfoRepository.findBylineCode(lineCode);
583   -
584   - List<Map<String, String>> rsList = new ArrayList<>();
585   - Map<String, String> map = null;
586   - Cars car = null;
587   - String code = null;
588   -
589   - for (CarConfigInfo cci : list) {
590   - car = cci.getCl();
591   - if (car != null) {
592   - code = car.getInsideCode();
593   - map = new HashMap<>();
594   - map.put("id", code);
595   - map.put("text", code);
596   - rsList.add(map);
597   - }
598   - }
599   - return rsList;
600   - }
601   -
602   - /**
603   - * 添加到历史库
604   - *
605   - * @param t
606   - * @return
607   - */
608   - @Override
609   - public Map<String, Object> addToHistory(ScheduleRealInfo t) {
610   - Map<String, Object> rs = new HashMap<>();
611   - try {
612   - if (!carExist(t.getGsBm(), t.getClZbh())) {
613   - rs.put("msg", "车辆 " + t.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
614   - rs.put("status", ResponseCode.ERROR);
615   - return rs;
616   - }
617   -
618   - SysUser user = SecurityUtils.getCurrentUser();
619   - //String schDate = DayOfSchedule.currSchDateMap.get(t.getXlBm());
620   -
621   - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
622   -
623   - if (StringUtils.isEmpty(t.getjGh())) {
624   - rs.put("status", ResponseCode.ERROR);
625   - rs.put("msg", "驾驶员工号不能为空!");
626   - return rs;
627   - }
628   - //截取驾驶员工号
629   - if (t.getjGh().indexOf("-") != -1) {
630   - t.setjGh(t.getjGh().split("-")[1]);
631   - }
632   - //检查驾驶员工号
633   - String jName = getPersonName(t.getGsBm(), t.getjGh());
634   - if (StringUtils.isEmpty(jName)) {
635   - rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的驾驶员");
636   - rs.put("status", ResponseCode.ERROR);
637   - return rs;
638   - } else if (StringUtils.isEmpty(t.getjName())) {
639   - t.setjName(jName);//补上驾驶员名称
640   - }
641   -
642   - //有售票员
643   - if (StringUtils.isNotEmpty(t.getsGh())) {
644   - String sName = getPersonName(t.getGsBm(), t.getsGh());
645   - if (StringUtils.isEmpty(sName)) {
646   - rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的售票员");
647   - rs.put("status", ResponseCode.ERROR);
648   - return rs;
649   - } else if (StringUtils.isEmpty(t.getsName())) {
650   - t.setsName(sName);//补上售票员名称
651   - }
652   - } else {
653   - t.setsGh("");
654   - t.setsName("");
655   - }
656   -
657   - //公司 和 分公司名称
658   - t.setGsName(BasicData.businessCodeNameMap.get(t.getGsBm()));
659   - t.setFgsName(BasicData.businessFgsCodeNameMap.get(t.getFgsBm()+ "_" + t.getGsBm() ));
660   -
661   - //t.setScheduleDateStr(schDate);
662   - t.setScheduleDate(sdfyyyyMMdd.parse(t.getScheduleDateStr()));
663   - t.setRealExecDate(t.getScheduleDateStr());
664   - t.setCreateBy(user);
665   - t.setSflj(true);
666   - t.setLate(false);
667   - t.setDfsj(t.getFcsj());
668   - t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime());
669   - t.setJhlcOrig(t.getJhlc());
670   -
671   - //班次历时
672   - t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
673   -
674   - //起终点名称
675   - String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
676   - t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
677   - t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
678   -
679   - //计算班次实际执行时间
680   - schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
681   - //处理计达跨24点
682   - LineConfig conf = lineConfigData.get(t.getXlBm());
683   - if (t.getZdsj().compareTo(conf.getStartOpt()) < 0) {
684   - t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
685   - }
686   - if (t.getZdsjT() < t.getFcsjT()) {
687   - rs.put("status", ResponseCode.ERROR);
688   - rs.put("msg", "起终点时间异常!");
689   - return rs;
690   - }
691   -
692   - t.setId(dayOfSchedule.getId());
693   - //实时入库
694   - rs = super.save(t);
695   - } catch (Exception e) {
696   - logger.error("", e);
697   - rs.put("status", ResponseCode.ERROR);
698   - }
699   - return rs;
700   - }
701   -
702   -
703   - /**
704   - * 临加班次
705   - */
706   - @Override
707   - public Map<String, Object> save(ScheduleRealInfo sch) {
708   - Map<String, Object> rs = new HashMap<>();
709   - try {
710   - String clZbh = sch.getClZbh();
711   - if (StringUtils.isNotEmpty(clZbh)) {
712   - //检测
713   - if (!carExist(sch.getGsBm(), clZbh)) {
714   - rs.put("status", ResponseCode.ERROR);
715   - rs.put("msg", "车辆 " + clZbh + " 不存在!");
716   - return rs;
717   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
718   - rs.put("status", ResponseCode.ERROR);
719   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
720   - return rs;
721   - }
722   - }
723   -
724   - SysUser user = SecurityUtils.getCurrentUser();
725   - String schDate = DayOfSchedule.currSchDateMap.get(sch.getXlBm());
726   -
727   - SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
728   -
729   - if (StringUtils.isEmpty(sch.getjGh())) {
730   - rs.put("status", ResponseCode.ERROR);
731   - rs.put("msg", "驾驶员工号不能为空!");
732   - return rs;
733   - }
734   - //截取驾驶员工号
735   - if (sch.getjGh().indexOf("-") != -1) {
736   - sch.setjGh(sch.getjGh().split("-")[1]);
737   - }
738   - //检查驾驶员工号
739   - String jName = getPersonName(sch.getGsBm(), sch.getjGh());
740   - if (StringUtils.isEmpty(jName)) {
741   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
742   - rs.put("status", ResponseCode.ERROR);
743   - return rs;
744   - } else if (StringUtils.isEmpty(sch.getjName())) {
745   - sch.setjName(jName);//补上驾驶员名称
746   - }
747   -
748   - //有售票员
749   - if (StringUtils.isNotEmpty(sch.getsGh())) {
750   - String sName = getPersonName(sch.getGsBm(), sch.getsGh());
751   - if (StringUtils.isEmpty(sName)) {
752   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的售票员");
753   - rs.put("status", ResponseCode.ERROR);
754   - return rs;
755   - } else if (StringUtils.isEmpty(sch.getsName())) {
756   - sch.setsName(sName);//补上售票员名称
757   - }
758   - } else {
759   - sch.setsGh("");
760   - sch.setsName("");
761   - }
762   -
763   - //公司 和 分公司名称
764   - sch.setGsName(BasicData.businessCodeNameMap.get(sch.getGsBm()));
765   - sch.setFgsName(BasicData.businessFgsCodeNameMap.get(sch.getFgsBm() + "_" + sch.getGsBm()));
766   - sch.setCreateDate(new Date());
767   - sch.setScheduleDateStr(schDate);
768   - sch.setScheduleDate(sdfyyyyMMdd.parse(schDate));
769   - sch.setRealExecDate(schDate);
770   -
771   - sch.setCreateBy(user);
772   - sch.setSflj(true);
773   - sch.setLate(false);
774   - sch.setDfsj(sch.getFcsj());
775   - sch.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + sch.getZdsj()).getTime());
776   - sch.setJhlcOrig(sch.getJhlc());
777   - sch.setCreateDate(new Date());
778   - sch.setUpdateDate(new Date());
779   - sch.setSpId(-1L);
780   - //起终点名称
781   - String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
782   - sch.setQdzName(BasicData.getStationNameByCode(sch.getQdzCode(), prefix));
783   - sch.setZdzName(BasicData.getStationNameByCode(sch.getZdzCode(), prefix));
784   -
785   - //计算班次实际执行时间
786   - schAttrCalculator.calcRealDate(sch).calcAllTimeByFcsj(sch);
787   -
788   - //处理计达跨24点
789   - LineConfig conf = lineConfigData.get(sch.getXlBm());
790   - if (sch.getZdsj().compareTo(conf.getStartOpt()) < 0) {
791   - sch.setZdsjT(sdfyyyyMMddHHmm.parse(sch.getScheduleDateStr() + sch.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
792   - }
793   -
794   - //班次历时
795   - sch.setBcsj((int) ((sch.getZdsjT() - sch.getDfsjT()) / 1000 / 60));
796   - if (sch.getZdsjT() < sch.getFcsjT()) {
797   - rs.put("status", ResponseCode.ERROR);
798   - rs.put("msg", "起终点时间异常!");
799   - return rs;
800   - }
801   -
802   - sch.setId(dayOfSchedule.getId());
803   - //实时入库
804   - super.save(sch);
805   -
806   - // 加入缓存
807   - dayOfSchedule.put(sch);
808   -
809   - //更新起点应到时间
810   - List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
811   -
812   - //重新计算车辆当前执行班次
813   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
814   -
815   - //记录站到场历时数据
816   - Station2ParkBuffer.put(sch);
817   -
818   - rs.put("ts", ts);
819   - rs.put("t", sch);
820   - } catch (Exception e) {
821   - logger.error("", e);
822   - rs.put("status", ResponseCode.ERROR);
823   - }
824   - return rs;
825   - }
826   -
827   - /**
828   - * 删除历史表临加班次
829   - *
830   - * @param id
831   - * @return
832   - */
833   - @Override
834   - public Map<String, Object> deleteToHistory(Long id) {
835   - Map<String, Object> rs = new HashMap<>();
836   - rs.put("status", ResponseCode.ERROR);
837   -
838   - try {
839   - ScheduleRealInfo sch = super.findById(id);
840   - if (sch == null) {
841   - rs.put("msg", "无效的id号");
842   - return rs;
843   - }
844   -
845   - if (!sch.isSflj()) {
846   - rs.put("msg", "你只能删除临加班次");
847   - return rs;
848   - }
849   -
850   - //解除和调度指令的外键约束
851   - jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
852   -
853   - //数据库删除
854   - rs = super.delete(id);
855   - } catch (Exception e) {
856   - logger.error("", e);
857   - rs.put("msg", e.getMessage());
858   - }
859   -
860   - return rs;
861   - }
862   -
863   - @Override
864   - public Map<String, Object> delete(Long id) {
865   - Map<String, Object> rs = new HashMap<>();
866   - rs.put("status", ResponseCode.ERROR);
867   -
868   - ScheduleRealInfo sch = null;
869   - try {
870   - sch = dayOfSchedule.get(id);
871   - if (sch == null) {
872   - rs.put("msg", "无效的id号");
873   - return rs;
874   - }
875   -
876   - if (!sch.isSflj()) {
877   - rs.put("msg", "你只能删除临加班次");
878   - return rs;
879   - }
880   -
881   - sch.setDeleted(true);
882   - //解除和调度指令的外键约束
883   - jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
884   -
885   - //数据库删除
886   - rs = super.delete(id);
887   - if (rs.get("status").equals(ResponseCode.SUCCESS)) {
888   - dayOfSchedule.delete(sch);
889   - //更新起点应到时间
890   - List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
891   - rs.put("ts", ts);
892   - rs.put("delete", sch);
893   - } else
894   - sch.setDeleted(false);
895   - } catch (Exception e) {
896   - logger.error("", e);
897   - rs.put("msg", e.getMessage());
898   - sch.setDeleted(false);
899   - }
900   -
901   - return rs;
902   - }
903   -
904   - @Override
905   - public List<Map<String, String>> sreachVehic(String nbbm) {
906   - // 转大写
907   - nbbm = nbbm.toUpperCase();
908   -
909   - List<Map<String, String>> list = new ArrayList<>();
910   - Map<String, String> map;
911   - Set<String> allSet = BasicData.nbbm2CompanyCodeMap.keySet();
912   -
913   - Line line;
914   - for (String k : allSet) {
915   - if (k.indexOf(nbbm) != -1) {
916   - // 所属线路
917   - map = new HashMap<>();
918   - line = BasicData.nbbm2LineMap.get(k);
919   - map.put("id", k);
920   - map.put("text", k);
921   - if (null != line) {
922   - map.put("lineName", line.getName());
923   - map.put("lineCode", line.getLineCode());
924   - }
925   -
926   - list.add(map);
927   - }
928   -
929   - if (list.size() > 20)
930   - break;
931   - }
932   - return list;
933   - }
934   -
935   - @Override
936   - public void adjustCar(ScheduleRealInfo schedule, String car) {
937   - schedule.setClZbh(car);
938   - }
939   -
940   - @Override
941   - public void adjustDriver(ScheduleRealInfo schedule, String driver, String driverName) {
942   - if (driver.indexOf("-") != -1)
943   - driver = driver.split("-")[1];
944   - schedule.setjGh(driver);
945   - schedule.setjName(driverName);
946   - }
947   -
948   - @Override
949   - public void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName) {
950   - if (conductor.indexOf("-") != -1)
951   - conductor = conductor.split("-")[1];
952   - schedule.setsGh(conductor);
953   - schedule.setsName(conductorName);
954   - }
955   -
956   - @Override
957   - public List<ScheduleRealInfo> queryUserInfo(String line, String date, String state) {
958   - if (state.equals("2")) {
959   - return scheduleRealInfoRepository.queryUserInfo2(line, date);
960   - } else {
961   - return scheduleRealInfoRepository.queryUserInfo3(line, date);
962   - }
963   -
964   - }
965   -
966   - @Override
967   - public List<ScheduleRealInfo> queryUserInfoPx(String line, String date, String state, String type) {
968   -// List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
969   - state = state + "";
970   - String lpname = state;
971   - String px = type;
972   - if (state.equals("lpName")) {
973   - state = state + "+1";
974   - type = "ASC";
975   - }
976   - String minfcsj = "02:00";
977   - List<Line> lineList = lineRepository.findLineByCode(line);
978   - if (lineList.size() > 0) {
979   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
980   - + " id = ("
981   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
982   - + ")";
983   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
984   - }
985   - String sqlPlan = "select * from (select * from ("
986   - + " select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
987   - + " s.lp_Name as lpName,min(s.j_Name) as jName,max(s.schedule_date_str) as dateStr ,"
988   - + " min(s.fcsj) as fcsj,1 as px from bsth_c_s_sp_info_real s where "
989   - + " s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
990   - + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name) x where x.fcsj >'" + minfcsj + "'"
991   - + " UNION "
992   - + " select * from ( select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
993   - + " s.lp_Name as lpName,min(s.j_Name) as jName, max(s.schedule_date_str) as dateStr,"
994   - + " min(s.fcsj) as fcsj,2 as px from bsth_c_s_sp_info_real s "
995   - + " where s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
996   - + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name"
997   - + " ) y where y.fcsj <='" + minfcsj + "') z order by (" + state + "),dateStr,px,fcsj " + type;
998   - List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan,
999   - new RowMapper<ScheduleRealInfo>() {
1000   - @Override
1001   - public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
1002   - ScheduleRealInfo t = new ScheduleRealInfo();
1003   - t.setId(rs.getLong("id"));
1004   - t.setjGh(rs.getString("jGh"));
1005   - t.setClZbh(rs.getString("clZbh"));
1006   - t.setLpName(rs.getString("lpName"));
1007   - t.setjName(rs.getString("jName"));
1008   - t.setFcsj(rs.getString("fcsj"));
1009   - return t;
1010   - }
1011   - });
1012   - if (lpname.equals("lpName")) {
1013   -
1014   - List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>();
1015   - Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
1016   -// if (px.equals("desc")) {
1017   - int zt = 0;
1018   - for (int l = 0; l < 2; l++) {
1019   - for (int i = 0; i < list.size(); i++) {
1020   - ScheduleRealInfo t = list.get(i);
1021   - if (t.getLpName().indexOf("+") != -1) {
1022   - if (zt == 0) {
1023   - listNew.add(t);
1024   - }
1025   - } else if (pattern.matcher(t.getLpName()).matches()) {
1026   - if (zt == 1) {
1027   - listNew.add(t);
1028   - }
1029   - } else {
1030   - continue;
1031   - }
1032   - }
1033   - zt++;
1034   - }
1035   -
1036   - Collections.sort(list, new ComparableLp());
1037   - for (int i = 0; i < list.size(); i++) {
1038   - ScheduleRealInfo t = list.get(i);
1039   - if (t.getLpName().indexOf("+") != -1) {
1040   - continue;
1041   - } else if (pattern.matcher(t.getLpName()).matches()) {
1042   - continue;
1043   - } else {
1044   - listNew.add(t);
1045   - }
1046   - }
1047   - return listNew;
1048   - } else {
1049   - return list;
1050   - }
1051   -
1052   - }
1053   -
1054   - /**
1055   - *
1056   - */
1057   - @Override
1058   - public List<ScheduleRealInfo> exportWaybill(String jName,String jGh, String clZbh, String lpName, String date, String line) {
1059   - ReportUtils ee = new ReportUtils();
1060   - ReportRelatedUtils rru = new ReportRelatedUtils();
1061   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
1062   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
1063   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
1064   -// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
1065   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
1066   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1067   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1068   - Set<ChildTaskPlan> cts = s.getcTasks();
1069   - if (cts != null && cts.size() > 0) {
1070   - lists.add(s);
1071   - } else {
1072   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
1073   - lists.add(s);
1074   - }
1075   - }
1076   - }
1077   - DecimalFormat format = new DecimalFormat("0.00");
1078   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
1079   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
1080   - //计算里程和班次数,并放入Map里
1081   - Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
1082   -
1083   - map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
1084   - map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
1085   - map.put("addMileage", culateMieageService.culateLjgl(lists));
1086   - double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
1087   - map.put("yygl", yygl);
1088   - double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
1089   - map.put("ksgl", ksgl);
1090   - map.put("realMileage", Arith.add(yygl, ksgl));
1091   - map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
1092   - map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
1093   - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
1094   - int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
1095   - map.put("sjbc", sjbc);
1096   -// map=new HashMap<String,Object>();
1097   -
1098   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
1099   - String minfcsj = "02:00";
1100   - List<Line> lineList = lineRepository.findLineByCode(line);
1101   - if (lineList.size() > 0) {
1102   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
1103   - + " id = ("
1104   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
1105   - + ")";
1106   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
1107   - }
1108   - String[] minSjs = minfcsj.split(":");
1109   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
1110   -
1111   -
1112   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1113   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1114   - String[] fcsj = s.getFcsj().split(":");
1115   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
1116   -
1117   - Long fscjT = 0L;
1118   - if (fcsjL < minSj) {
1119   - Calendar calendar = new GregorianCalendar();
1120   - calendar.setTime(s.getScheduleDate());
1121   - calendar.add(calendar.DATE, 1);
1122   - s.setScheduleDate(calendar.getTime());
1123   - try {
1124   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
1125   - } catch (ParseException e) {
1126   - // TODO Auto-generated catch block
1127   - e.printStackTrace();
1128   - }
1129   -
1130   - } else {
1131   - try {
1132   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
1133   - } catch (ParseException e) {
1134   - // TODO Auto-generated catch block
1135   - e.printStackTrace();
1136   - }
1137   - ;
1138   - }
1139   - s.setFcsjT(fscjT);
1140   - }
1141   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
1142   - Collections.sort(scheduleRealInfos, new ComparableReal());
1143   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
1144   - ScheduleRealInfo s = scheduleRealInfos.get(i);
1145   - s.setAdjustExps(i + 1 + "");
1146   - String remarks = "";
1147   - if (s.getRemarks() != null) {
1148   - remarks += s.getRemarks();
1149   - }
1150   -
1151   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
1152   - if (!childTaskPlans.isEmpty()) {
1153   - s.setFcsjActual("");
1154   - s.setZdsjActual("");
1155   - s.setJhlc(0.0);
1156   - }
1157   -
1158   - if (s.isDestroy()) {
1159   - s.setFcsjActual("");
1160   - s.setZdsjActual("");
1161   - s.setJhlc(0.0);
1162   - remarks += "(烂班)";
1163   - s.setRemarks(remarks);
1164   - }
1165   -
1166   - listSchedule.add(s);
1167   - //计算营运里程,空驶里程
1168   - if (!childTaskPlans.isEmpty()) {
1169   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
1170   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
1171   - Collections.sort(listit, new ComparableChild());
1172   - for (int j = 0; j < listit.size(); j++) {
1173   - ScheduleRealInfo t = new ScheduleRealInfo();
1174   - ChildTaskPlan childTaskPlan = listit.get(j);
1175   - if (childTaskPlan.isDestroy()) {
1176   - t.setFcsjActual("");
1177   - t.setZdsjActual("");
1178   - t.setJhlc(0.0);
1179   - } else {
1180   - t.setFcsjActual(childTaskPlan.getStartDate());
1181   - t.setZdsjActual(childTaskPlan.getEndDate());
1182   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
1183   - }
1184   - t.setQdzName(childTaskPlan.getStartStationName());
1185   - t.setZdzName(childTaskPlan.getEndStationName());
1186   - t.setRemarks(childTaskPlan.getRemarks());
1187   - t.setAdjustExps("子");
1188   - t.setjGh("");
1189   - t.setjName("");
1190   - t.setsGh("");
1191   - t.setsName("");
1192   - listSchedule.add(t);
1193   - }
1194   - }
1195   - }
1196   - Map<String, Object> maps;
1197   - for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
1198   - maps = new HashMap<String, Object>();
1199   - try {
1200   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
1201   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
1202   - maps = rru.getMapValue(scheduleRealInfo);
1203   - maps.put("bcs", scheduleRealInfo.getAdjustExps());
1204   - String zdsj = scheduleRealInfo.getZdsj();
1205   - String zdsjActual = scheduleRealInfo.getZdsjActual();
1206   - if (zdsj != null && zdsjActual != null &&
1207   - !zdsj.equals(zdsjActual) &&
1208   - !zdsj.equals("") &&
1209   - !zdsjActual.equals("")) {
1210   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
1211   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
1212   - if (zdsj.compareTo(zdsjActual) > 0) {
1213   - if (zdsjT - zdsjAT > 1000) {
1214   - maps.put("fast", "");
1215   - maps.put("slow", zdsjAT - zdsjT + 1440);
1216   - } else {
1217   - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
1218   - maps.put("slow", "");
1219   - }
1220   - } else {
1221   - if (zdsjAT - zdsjT > 1000) {
1222   - maps.put("fast", zdsjT - zdsjAT + 1440);
1223   - maps.put("slow", "");
1224   - } else {
1225   - maps.put("fast", "");
1226   - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
1227   - }
1228   - }
1229   - } else {
1230   - maps.put("fast", "");
1231   - maps.put("slow", "");
1232   - }
1233   - listMap.add(maps);
1234   - } catch (Exception e) {
1235   - e.printStackTrace();
1236   - }
1237   - }
1238   -
1239   - String xls = "";
1240   - if (map.get("type").toString().equals("0")) {
1241   - xls = "waybill_minhang.xls";
1242   - } else {
1243   - xls = "waybill_minhang_dl.xls";
1244   - }
1245   -
1246   -
1247   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1248   -
1249   - list.add(listMap.iterator());
1250   - ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/" + xls,
1251   - path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
1252   - return scheduleRealInfos;
1253   - }
1254   -
1255   - @Override
1256   - public List<Map<String, Object>> dailyInfo(String line, String date, String type) {
1257   - DecimalFormat format = new DecimalFormat("0.00");
1258   - ReportUtils ee = new ReportUtils();
1259   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1260   - List<Map<String, Object>> list = scheduleRealInfoRepository.dailyInfo(line, date);
1261   -
1262   - double totalZGL = 0, totalKSGL = 0, totalYH = 0;
1263   - int totalBCS = 0;
1264   - for (int i = 0; i < list.size(); i++) {
1265   - String zgl = format.format(Double.parseDouble(list.get(i).get("zgl") == null ? "0" : list.get(i).get("zgl").toString()));
1266   - String ksgl = format.format(Double.parseDouble(list.get(i).get("ksgl") == null ? "0" : list.get(i).get("ksgl").toString()));
1267   - if (type.equals("export")) {
1268   - totalZGL += Double.parseDouble(zgl);
1269   - totalKSGL += Double.parseDouble(ksgl);
1270   - totalBCS += Integer.parseInt(list.get(i).get("bcs").toString());
1271   - }
1272   - list.get(i).put("zgl", zgl);
1273   - list.get(i).put("ksgl", ksgl);
1274   - }
1275   - if (type.equals("export")) {
1276   - Map<String, Object> map = new HashMap<String, Object>();
1277   - map.put("line", line);
1278   - map.put("date", date);
1279   - map.put("totalZGL", totalZGL);
1280   - map.put("totalKSGL", totalKSGL);
1281   - map.put("totalYH", totalYH);
1282   - map.put("totalBCS", totalBCS);
1283   -
1284   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1285   -
1286   - listI.add(list.iterator());
1287   - try {
1288   - ee.excelReplace(listI, new Object[]{map}, path + "mould/daily.xls",
1289   - path + "export/班次日报" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
1290   - } catch (ParseException e) {
1291   - e.printStackTrace();
1292   - }
1293   - }
1294   - return list;
1295   - }
1296   -
1297   - @Override
1298   - public List<Object[]> historyMessage(String line, String date, String code, String type) {
1299   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
1300   -
1301   - long d = 0;
1302   - long t = 0;
1303   - if (date.length() > 0) {
1304   - try {
1305   - d = sdf.parse(date + " 00:00:00").getTime();
1306   - t = sdf.parse(date + " 23:59:59").getTime();
1307   - } catch (ParseException e) {
1308   - // TODO Auto-generated catch block
1309   - e.printStackTrace();
1310   - }
1311   -
1312   - }
1313   - String device = "";
1314   - String device2 ="";
1315   - long qyrqTime=0l;
1316   - if (!code.equals("")) {
1317   - try {
1318   - List<CarDevice> deviceList=carDeviceRepository.findCarCode(code, sdf.parse(date+ " 00:00:00"));
1319   - if(deviceList.size()>0){
1320   - device=deviceList.get(0).getOldDeviceNo();
1321   - Date qyrq=deviceList.get(0).getQyrq();
1322   - qyrqTime=qyrq.getTime();
1323   - if(qyrqTime<t){
1324   - device2=deviceList.get(0).getNewDeviceNo();
1325   - }
1326   - }else{
1327   - device = BasicData.deviceId2NbbmMap.inverse().get(code);
1328   - }
1329   - } catch (ParseException e) {
1330   - // TODO Auto-generated catch block
1331   - e.printStackTrace();
1332   - }
1333   - }
1334   - List<Object[]> list=new ArrayList<Object[]>();
1335   -
1336   - List<Object[]> list0 =scheduleRealInfoRepository.historyMessage(line, d, t, device);
1337   - for (Object[] obj : list0) {
1338   - if (obj != null) {
1339   - if(code.equals("")){
1340   - if (BasicData.deviceId2NbbmMap.get(obj[0].toString()) == null) {
1341   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
1342   - try {
1343   - carDeviceList = carDeviceRepository.findCarDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
1344   - //启用日期大于营运日期 还是根据旧设备号查询
1345   - if(carDeviceList.size()==0){
1346   - carDeviceList = carDeviceRepository.findCarOldDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
1347   - }
1348   - } catch (Exception e) {
1349   - // TODO Auto-generated catch block
1350   - e.printStackTrace();
1351   - }
1352   - if (carDeviceList.size() > 0) {
1353   - obj[0] = carDeviceList.get(0).getClZbh();
1354   - } else {
1355   - obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
1356   - }
1357   - } else {
1358   - obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
1359   - }
1360   - }else{
1361   - obj[0]=code;
1362   - }
1363   -
1364   - obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
1365   - obj[4] = BasicData.lineCode2NameMap.get(line);
1366   - }
1367   - }
1368   - list.addAll(list0);
1369   - if(!device2.equals("")){
1370   - List<Object[]> list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2);
1371   - for (Object[] obj : list1) {
1372   - if (obj != null) {
1373   - obj[0] =code;
1374   - obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
1375   - obj[4] = BasicData.lineCode2NameMap.get(line);
1376   - }
1377   - }
1378   - list.addAll(list1);
1379   - }
1380   -
1381   - if (type != null && type.length() != 0 && type.equals("export")) {
1382   - String lineName = BasicData.lineCode2NameMap.get(line);
1383   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
1384   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
1385   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1386   - Map<String, Object> m = new HashMap<String, Object>();
1387   - ReportUtils ee = new ReportUtils();
1388   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
1389   - for (int i = 0; i < list.size(); i++) {
1390   - Map<String, Object> map = new HashMap<String, Object>();
1391   - Object[] obj = list.get(i);
1392   - map.put("num", i + 1);
1393   - map.put("line", obj[4]);
1394   - map.put("clZbh", obj[0]);
1395   - map.put("sender", obj[1]);
1396   - map.put("date", obj[3]);
1397   - map.put("text", obj[2]);
1398   - newList.add(map);
1399   - }
1400   - try {
1401   - listI.add(newList.iterator());
1402   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1403   - ee.excelReplace(listI, new Object[]{m}, path + "mould/historyMessage.xls",
1404   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
1405   - + "-" + lineName + "-调度历史消息.xls");
1406   - } catch (Exception e) {
1407   - // TODO: handle exception
1408   - e.printStackTrace();
1409   - }
1410   - }
1411   -
1412   - if (type != null && type.length() != 0 && type.equals("export_msg")) {
1413   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
1414   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
1415   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
1416   - Map<String, Object> m = new HashMap<String, Object>();
1417   - ReportUtils ee = new ReportUtils();
1418   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
1419   - for (int i = 0; i < list.size(); i++) {
1420   - Map<String, Object> map = new HashMap<String, Object>();
1421   - Object[] obj = list.get(i);
1422   - map.put("num", i + 1);
1423   - map.put("line", obj[4]);
1424   - map.put("clZbh", obj[0]);
1425   - map.put("sender", obj[1]);
1426   - map.put("date", obj[3]);
1427   - map.put("text", obj[2]);
1428   - newList.add(map);
1429   - }
1430   - try {
1431   - listI.add(newList.iterator());
1432   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
1433   - ee.excelReplace(listI, new Object[]{m}, path + "mould/message.xls",
1434   - path + "export/调度消息分析" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
1435   - } catch (Exception e) {
1436   - // TODO: handle exception
1437   - e.printStackTrace();
1438   - }
1439   - }
1440   - return list;
1441   - }
1442   -
1443   - @Override
1444   - public Map<Integer, Integer> trustStatus(String lineStr) {
1445   - List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lineStr));
1446   -
1447   - Map<Integer, Integer> map = new HashMap<>();
1448   - return map;
1449   - }
1450   -
1451   - @Override
1452   - public Map<String, Object> realOutAdjust(Map<String, String> map) {
1453   - Map<String, Object> rs = new HashMap<>();
1454   - List<ScheduleRealInfo> ts = new ArrayList<>();
1455   - try {
1456   - // 维修上报
1457   - if (StringUtils.isNotBlank(map.get("reportTypes"))) {
1458   - Map<String, Object> param = new HashMap<String, Object>();
1459   - param.putAll(map);
1460   - rs = repairReport(param, false);
1461   - }
1462   -
1463   - Long id = Long.parseLong(map.get("id"));
1464   - String remarks = map.get("remarks"), fcsjActual = map.get("fcsjActual");
1465   -
1466   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1467   -
1468   - LineConfig config = lineConfigData.get(sch.getXlBm());
1469   - //小于线路开始运营时间,则默认跨过24点
1470   - if (fcsjActual.compareTo(config.getStartOpt()) < 0) {
1471   - sch.setRealExecDate(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME));
1472   - } else {
1473   - sch.setRealExecDate(sch.getScheduleDateStr());
1474   - }
1475   -
1476   - //日志记录
1477   - ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
1478   -
1479   - sch.setFcsjActualAll(fcsjActual);
1480   - sch.setRemarks(remarks);
1481   - sch.calcStatus();
1482   - //if(sch.isLate2()){
1483   - //取消应发未到标记
1484   - // sch.setLate2(false);
1485   - LateAdjustHandle.remove(sch);
1486   - //}
1487   -
1488   - dayOfSchedule.save(sch);
1489   -
1490   - ts.add(sch);
1491   -
1492   - rs.put("status", ResponseCode.SUCCESS);
1493   - rs.put("ts", ts);
1494   -
1495   - //通知页面刷新
1496   - sendUtils.refreshSch(ts);
1497   - } catch (Exception e) {
1498   - logger.error("", e);
1499   - rs.put("status", ResponseCode.ERROR);
1500   - }
1501   -
1502   - return rs;
1503   - }
1504   -
1505   - @Override
1506   - public Map<String, Object> revokeDestroy(Long id) {
1507   - Map<String, Object> rs = new HashMap<>();
1508   - try {
1509   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1510   - if (sch.getStatus() != -1) {
1511   - rs.put("status", ResponseCode.ERROR);
1512   - rs.put("msg", "未烂班,无法撤销!");
1513   - } else {
1514   - //日志记录
1515   - ScheduleModifyLogger.cxlb(sch);
1516   -
1517   - sch.setStatus(0);
1518   - sch.setRemarks("");//清空备注
1519   - sch.setJhlc(sch.getJhlcOrig());
1520   -
1521   - //入库
1522   - dayOfSchedule.save(sch);
1523   - //重新计算当前执行班次
1524   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1525   - rs.put("status", ResponseCode.SUCCESS);
1526   - rs.put("t", sch);
1527   -
1528   - }
1529   - } catch (Exception e) {
1530   - logger.error("", e);
1531   - rs.put("status", ResponseCode.ERROR);
1532   - }
1533   - return rs;
1534   - }
1535   -
1536   - @Override
1537   - public Map<String, Object> revokeRealOutgo(Long id) {
1538   - Map<String, Object> rs = new HashMap<>();
1539   - List<ScheduleRealInfo> ts = new ArrayList<>();
1540   -
1541   - try {
1542   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1543   - if (sch.getFcsjActual() == null) {
1544   - rs.put("status", ResponseCode.ERROR);
1545   - rs.put("msg", "无实发时间,无法撤销!");
1546   - } else {
1547   - //日志记录
1548   - ScheduleModifyLogger.cxsf(sch);
1549   -
1550   - sch.clearFcsjActual();
1551   - rs.put("status", ResponseCode.SUCCESS);
1552   -
1553   - ts.add(sch);
1554   - rs.put("ts", ts);
1555   -
1556   - dayOfSchedule.save(sch);
1557   -
1558   - }
1559   - } catch (Exception e) {
1560   - logger.error("", e);
1561   - rs.put("status", ResponseCode.ERROR);
1562   - }
1563   - return rs;
1564   - }
1565   -
1566   - @Override
1567   - public Map<String, Object> spaceAdjust(Long[] ids, Integer space) {
1568   -
1569   - List<ScheduleRealInfo> list = new ArrayList<>(), ts = new ArrayList<>(), tempTs = null;
1570   - Map<String, Object> rs = new HashMap<>(), tempRs = new HashMap<>();
1571   - try {
1572   - ScheduleRealInfo sch, next;
1573   - for (Long id : ids) {
1574   - sch = dayOfSchedule.get(id);
1575   - if (null != sch)
1576   - list.add(sch);
1577   - }
1578   -
1579   - int size = list.size();
1580   - if (size == 0) {
1581   - rs.put("status", ResponseCode.ERROR);
1582   - } else {
1583   - // 按发车时间排序
1584   - Collections.sort(list, new ScheduleComparator.FCSJ());
1585   -
1586   - // 以第一个实际发车/待发时间为起点,调整间隔
1587   - sch = list.get(0);
1588   - Long st = sch.getFcsjActualTime() == null ? sch.getDfsjT() : sch.getFcsjActualTime(), plus = space * 60 * 1000L;
1589   -
1590   - for (int i = 1; i < size; i++) {
1591   - st += plus;
1592   - sch = list.get(i);
1593   -
1594   - //调整待发
1595   - tempRs = outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "3", null);
1596   -
1597   - if (null != tempRs && tempRs.get("ts") != null)
1598   - tempTs = (List<ScheduleRealInfo>) tempRs.get("ts");
1599   -
1600   - ts.addAll(tempTs);
1601   - }
1602   -
1603   - rs.put("status", ResponseCode.SUCCESS);
1604   - //返回最后一个班次,页面会全量刷新
1605   - rs.put("ts", ts);
1606   - }
1607   -
1608   - } catch (Exception e) {
1609   - logger.error("", e);
1610   - rs.put("status", ResponseCode.ERROR);
1611   - }
1612   - return rs;
1613   - }
1614   -
1615   - private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
1616   -
1617   - @Transactional
1618   - @Override
1619   - public Map<String, Object> schInfoFineTune(Map<String, String> map) {
1620   - Map<String, Object> rs = new HashMap<>();
1621   - List<ScheduleRealInfo> ts = new ArrayList<>();
1622   - try {
1623   - // 维修上报
1624   - if (StringUtils.isNotBlank(map.get("reportTypes"))) {
1625   - Map<String, Object> param = new HashMap<String, Object>();
1626   - param.putAll(map);
1627   - rs = repairReport(param, false);
1628   - }
1629   -
1630   - Long id = Long.parseLong(map.get("id"));
1631   - String remarks = map.get("remarks");
1632   -
1633   - ScheduleRealInfo sch = dayOfSchedule.get(id);
1634   -
1635   - if (null == sch) {
1636   - rs.put("status", ResponseCode.ERROR);
1637   - rs.put("msg", "不存在的班次!");
1638   - return rs;
1639   - }
1640   -
1641   - //日志记录器
1642   - FcxxwtLogger fLog = FcxxwtLogger.start(sch, remarks);
1643   -
1644   - String clZbh = map.get("clZbh");
1645   - String jsy = map.get("jsy");
1646   - if (!clZbh.equals(sch.getClZbh())
1647   - || !jsy.equals(sch.getjGh() + "/" + sch.getjName()))
1648   - schModifyLog.saveChangetochange(sch, clZbh, jsy);//为换人换车情况表写入数据
1649   - /**
1650   - * 换车
1651   - */
1652   - if (StringUtils.isNotEmpty(clZbh) && !clZbh.equals(sch.getClZbh())) {
1653   - //换车
1654   - if (!carExist(sch.getGsBm(), clZbh)) {
1655   - rs.put("status", ResponseCode.ERROR);
1656   - rs.put("msg", "车辆 " + clZbh + " 不存在!");
1657   - return rs;
1658   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
1659   - rs.put("status", ResponseCode.ERROR);
1660   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
1661   - return rs;
1662   - } else {
1663   - fLog.log("换车", sch.getClZbh(), clZbh);
1664   - dayOfSchedule.changeCar(sch, clZbh);
1665   - }
1666   - }
1667   -
1668   - if(StringUtils.isBlank(jsy) || "/".equals(StringUtils.trim(jsy))){
1669   - rs.put("status", ResponseCode.ERROR);
1670   - rs.put("msg", "无效的参数【驾驶员】");
1671   - return rs;
1672   - }
1673   -
1674   - /**
1675   - * 换驾驶员
1676   - */
1677   - if (StringUtils.isNotEmpty(jsy)) {
1678   - String jGh = jsy.split("/")[0];
1679   - String jName = getPersonName(sch.getGsBm(), jGh);
1680   - if (StringUtils.isEmpty(jName)) {
1681   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
1682   - rs.put("status", ResponseCode.ERROR);
1683   - return rs;
1684   - } else if (!jGh.equals(sch.getjGh())) {
1685   - fLog.log("换驾驶员", sch.getjGh() + "/" + sch.getjName(), jsy);
1686   - persoChange(sch, jGh);
1687   - }
1688   - }
1689   -
1690   - /**
1691   - * 换售票员
1692   - */
1693   - String spy = map.get("spy");
1694   - if (StringUtils.isNotEmpty(spy) && !StringUtils.trim(spy).equals("/")) {
1695   - String sGh = spy.split("/")[0];
1696   -
1697   - String sName = getPersonName(sch.getGsBm(), sGh);
1698   - if (StringUtils.isEmpty(sName)) {
1699   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
1700   - rs.put("status", ResponseCode.ERROR);
1701   - return rs;
1702   - } else if (!sGh.equals(sch.getsGh())) {
1703   - fLog.log("换售票员", sch.getsGh() + "/" + sch.getsName(), spy);
1704   - persoChangeSPY(sch, sGh);
1705   - }
1706   - } else if (StringUtils.isNotEmpty(sch.getsGh())) {
1707   - fLog.log("撤销售票员");
1708   - sch.setsGh("");
1709   - sch.setsName("");
1710   - }
1711   -
1712   - LineConfig config = lineConfigData.get(sch.getXlBm());
1713   - /**
1714   - * 调整实发
1715   - */
1716   - String fcsjActual = map.get("fcsjActual");
1717   - if (StringUtils.isNotBlank(fcsjActual)
1718   - && !fcsjActual.equals(sch.getFcsjActual())) {
1719   -
1720   - //long t = 0L;
1721   - //小于线路开始运营时间,则默认跨过24点
1722   - long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), fcsjActual, config);
1723   - /* if (fcsjActual.compareTo(config.getStartOpt()) < 0)
1724   - t = fmtyyyyMMddHHmm.parseMillis(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME) + fcsjActual);
1725   - else
1726   - t = fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + fcsjActual);*/
1727   -
1728   - fLog.log("调整实发时间", sch.getFcsjActual(), fcsjActual);
1729   - sch.setFcsjActualAll(t);
1730   - //取消应发未到标记
1731   - //if(sch.isLate2()){
1732   - // sch.setLate2(false);
1733   - LateAdjustHandle.remove(sch);
1734   - //}
1735   - } else if (StringUtils.isNotEmpty(sch.getFcsjActual()) && StringUtils.isEmpty(fcsjActual)) {
1736   - fLog.log("撤销实发时间", sch.getFcsjActual(), "");
1737   - //撤销实发
1738   - revokeRealOutgo(sch.getId());
1739   - }
1740   -
1741   - /**
1742   - * 调整实达
1743   - */
1744   - String zdsjActual = map.get("zdsjActual");
1745   - if (StringUtils.isNotBlank(zdsjActual)
1746   - && !zdsjActual.equals(sch.getZdsjActual())) {
1747   -
1748   - //调整实达
1749   - fLog.log("调整实达时间", sch.getZdsjActual(), zdsjActual);
1750   -
1751   - long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), zdsjActual, config);
1752   - sch.setZdsjActualAll(t);
1753   - //路牌下一班起点到达时间
1754   - ScheduleRealInfo next = dayOfSchedule.nextByLp2(sch);
1755   - if (null != next) {
1756   - next.setQdzArrDatesj(zdsjActual);
1757   - next.setLate2(false);
1758   - ts.add(next);
1759   - }
1760   -
1761   - //重新计算车辆执行班次
1762   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1763   - //取消应发未到标记
1764   - LateAdjustHandle.remove(sch);
1765   - } else if (StringUtils.isNotEmpty(sch.getZdsjActual()) && StringUtils.isEmpty(zdsjActual)) {
1766   - //清除实达时间
1767   - fLog.log("撤销实达时间", sch.getZdsjActual(), "");
1768   - sch.clearZdsjActual();
1769   - //清除路牌下一班起点到达时间
1770   - ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
1771   - if (null != next) {
1772   - next.setQdzArrDatesj(null);
1773   - ts.add(next);
1774   - }
1775   - //重新计算车辆执行班次
1776   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
1777   - }
1778   -
1779   - /**
1780   - * 备注
1781   - */
1782   - sch.setRemarks(remarks);
1783   -
1784   - /**
1785   - * 烂班
1786   - */
1787   - if (map.get("status") != null
1788   - && Integer.parseInt(map.get("status").toString()) == -1) {
1789   - destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
1790   - fLog.log("烂班");
1791   - }
1792   -
1793   - /**
1794   - * 修改班次里程
1795   - */
1796   - String jhlc = map.get("jhlc");
1797   - if (StringUtils.isNotEmpty(jhlc)) {
1798   - double jhlcNum = Double.parseDouble(jhlc);
1799   - //烂班
1800   - if (jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout() && !sch.isDestroy()) {
1801   - destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
1802   - fLog.log("里程设置为0,自动烂班");
1803   - } else if (jhlcNum != sch.getJhlc()) {
1804   - fLog.log("设置里程", sch.getJhlc(), jhlcNum);
1805   - sch.setJhlc(jhlcNum);
1806   - //临加班次,实际计划一起改
1807   - if (sch.isSflj())
1808   - sch.setJhlcOrig(jhlcNum);
1809   - }
1810   - }
1811   -
1812   - /**
1813   - * 修改班次类型
1814   - */
1815   - String bcType = map.get("bcType");
1816   - if (StringUtils.isNotEmpty(bcType) && !bcType.equals(sch.getBcType())) {
1817   - fLog.log("修改班次类型", sch.getBcType(), bcType);
1818   - sch.setBcType(bcType);
1819   - }
1820   -
1821   - //重新计算班次状态
1822   - sch.calcStatus();
1823   - dayOfSchedule.save(sch);
1824   - //页面需要更新的班次信息
1825   - ts.add(sch);
1826   -
1827   - rs.put("status", ResponseCode.SUCCESS);
1828   - rs.put("ts", ts);
1829   -
1830   - //日志记录结束
1831   - fLog.end();
1832   - } catch (Exception e) {
1833   - logger.error("", e);
1834   - rs.put("status", ResponseCode.ERROR);
1835   - }
1836   - return rs;
1837   - }
1838   -
1839   - @Override
1840   - public Map<String, Object> outgoAdjustAll(String params) {
1841   - Map<String, Object> rs = new HashMap<>();
1842   - try {
1843   - JSONArray jsonArray = JSONArray.parseArray(params);
1844   -
1845   - ScheduleRealInfo schedule = null;
1846   - JSONObject jsonObj;
1847   - String dfsj;
1848   - long id;
1849   - for (int i = 0; i < jsonArray.size(); i++) {
1850   - jsonObj = jsonArray.getJSONObject(i);
1851   - dfsj = jsonObj.getString("t");
1852   - id = jsonObj.getLong("id");
1853   - schedule = dayOfSchedule.get(id);
1854   -
1855   - if (schedule != null)
1856   - outgoAdjust(id, null, dfsj, null, "2", null);
1857   - }
1858   -
1859   - rs.put("status", ResponseCode.SUCCESS);
1860   - //将更新的最后一个班次返回,页面会做全量刷新
1861   - rs.put("t", schedule);
1862   - } catch (Exception e) {
1863   - logger.error("", e);
1864   - rs.put("status", ResponseCode.ERROR);
1865   - }
1866   - return rs;
1867   - }
1868   -
1869   - @Override
1870   - public Map<String, Object> findRouteByLine(String lineCode) {
1871   - Map<String, Object> map = new HashMap<>();
1872   - //上行
1873   - Integer lineId = BasicData.lineId2CodeMap.inverse().get(lineCode);
1874   - map.put("line.id_eq", lineId);
1875   - map.put("directions_eq", 0);
1876   - List<Map<String, Object>> upList = sectionRouteService.getSectionRoute(map);
1877   -
1878   - //下行
1879   - map.put("directions_eq", 1);
1880   - List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map);
1881   -
1882   - Map<String, Object> rs = new HashMap<>();
1883   -
1884   - String upVectors = "", vec;
1885   - //拼接上行路段
1886   - for (Map<String, Object> temp : upList) {
1887   - vec = temp.get("sectionBsectionVector").toString();
1888   - upVectors += vec.subSequence(11, vec.length() - 2) + " ";
1889   - }
1890   -
1891   - //拼接下行路段
1892   - String downVectors = "";
1893   - for (Map<String, Object> temp : downList) {//LINESTRING(
1894   - vec = temp.get("sectionBsectionVector").toString();
1895   - downVectors += vec.subSequence(11, vec.length() - 2) + " ";
1896   - }
1897   -
1898   -
1899   - rs.put("up", upVectors);
1900   - //上行gcj
1901   - rs.put("up_gcj", BdToGcjString(upVectors));
1902   - rs.put("down", downVectors);
1903   - //下行gcj
1904   - rs.put("down_gcj", BdToGcjString(downVectors));
1905   - rs.put("lineId", lineId);
1906   -
1907   - return rs;
1908   - }
1909   -
1910   - /**
1911   - * @param @param bdStr
1912   - * @throws
1913   - * @Title: BdToGcjString
1914   - * @Description: TODO(将百度路由字符串 转 成GCJ 字符串)
1915   - */
1916   - public String BdToGcjString(String bdStr) {
1917   - String[] array = bdStr.split(","), subArray;
1918   - if (array.length == 0 || bdStr.length() < 2)
1919   - return "";
1920   -
1921   - String gcjStr = "";
1922   - TransGPS.Location location;
1923   - for (String crd : array) {
1924   - subArray = crd.split(" ");
1925   - if (subArray.length != 2)
1926   - continue;
1927   - location = TransGPS.bd_decrypt(TransGPS.LocationMake(Double.parseDouble(subArray[0]), Double.parseDouble(subArray[1])));
1928   -
1929   - gcjStr += location.getLng() + " " + location.getLat() + ",";
1930   - }
1931   -
1932   - return gcjStr.substring(0, gcjStr.length() - 1);
1933   - }
1934   -
1935   - public List<Map<String, String>> findLine(String line) {
1936   - List<Line> listLine = lineRepository.findLine("%" + line + "%");
1937   - List<Map<String, String>> list = new ArrayList<Map<String, String>>();
1938   - Map<String, String> map;
1939   - for (Line temp : listLine) {
1940   - if (temp != null) {
1941   - String xlName = temp.getName();
1942   - if (xlName.indexOf(line) != -1) {
1943   - map = new HashMap<String, String>();
1944   - map.put("id", temp.getLineCode());
1945   - map.put("text", xlName);
1946   - list.add(map);
1947   - }
1948   - }
1949   - }
1950   - return list;
1951   - }
1952   -
1953   - public List<Map<String, String>> findLpName(String lpName) {
1954   - List<GuideboardInfo> listLpName = guideboardInfoRepository.findLpName("%" + lpName + "%");
1955   - List<Map<String, String>> list = new ArrayList<Map<String, String>>();
1956   - Map<String, String> map;
1957   - for (GuideboardInfo temp : listLpName) {
1958   - if (temp != null) {
1959   - String lp = temp.getLpName();
1960   - if (lp.indexOf(lpName) != -1) {
1961   - map = new HashMap<String, String>();
1962   - map.put("id", lp);
1963   - map.put("text", lp);
1964   - list.add(map);
1965   - }
1966   - }
1967   - }
1968   - return list;
1969   - }
1970   -
1971   - @Override
1972   - public Map<String, Object> findKMBC2(String jName, String clZbh, String date) {
1973   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill3(jName, clZbh, date, "", "");
1974   -
1975   - DecimalFormat format = new DecimalFormat("0.00");
1976   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
1977   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
1978   - int jhbc = 0, cjbc = 0, ljbc = 0;
1979   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
1980   - float addMileage = 0l, remMileage = 0l;
1981   - String j_Name = "";
1982   - Map<String, Object> map = new HashMap<String, Object>();
1983   - for (ScheduleRealInfo scheduleRealInfo : list) {
1984   - if (scheduleRealInfo != null) {
1985   - j_Name = scheduleRealInfo.getjName();
1986   - //计划里程(主任务过滤掉临加班次),
1987   - //烂班里程(主任务烂班),
1988   - //临加里程(主任务临加),
1989   - //计划班次,烂班班次,增加班次
1990   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
1991   - if (scheduleRealInfo.isSflj()) {
1992   - addMileage += tempJhlc;
1993   - ljbc++;
1994   - } else {
1995   - jhlc += tempJhlc;
1996   - jhbc++;
1997   - if (scheduleRealInfo.getStatus() == -1) {
1998   - remMileage += tempJhlc;
1999   - cjbc++;
2000   - }
2001   - }
2002   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
2003   - //计算营运里程,空驶里程
2004   - if (childTaskPlans.isEmpty()) {
2005   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
2006   - || scheduleRealInfo.getBcType().equals("venting")) {
2007   - ksgl += tempJhlc;
2008   - } else {
2009   - yygl += tempJhlc;
2010   - }
2011   - } else {
2012   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2013   - while (it.hasNext()) {
2014   - ChildTaskPlan childTaskPlan = it.next();
2015   - if (childTaskPlan.getMileageType().equals("empty")) {
2016   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
2017   - } else {
2018   - yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
2019   - }
2020   - }
2021   - }
2022   - }
2023   - }
2024   - map.put("j_name", j_Name);
2025   - map.put("jhlc", format.format(jhlc));
2026   - map.put("remMileage", format.format(remMileage));
2027   - map.put("addMileage", format.format(addMileage));
2028   - map.put("yygl", format.format(yygl));
2029   - map.put("ksgl", format.format(ksgl));
2030   - map.put("realMileage", format.format(yygl + ksgl));
2031   - map.put("jhbc", jhbc);
2032   - map.put("cjbc", cjbc);
2033   - map.put("ljbc", ljbc);
2034   - map.put("sjbc", jhbc - cjbc + ljbc);
2035   - return map;
2036   - }
2037   -
2038   -
2039   - public Map<String, Object> findKMBC(String jGh, String clZbh,
2040   - String lpName, String date, String line) {
2041   - Map<String, Object> map = new HashMap<String, Object>();
2042   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2043   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2044   - for (int i = 0; i < list.size(); i++) {
2045   - ScheduleRealInfo s = list.get(i);
2046   - Set<ChildTaskPlan> cts = s.getcTasks();
2047   - if (cts != null && cts.size() > 0) {
2048   - lists.add(s);
2049   - } else {
2050   - if (s.getFcsjActual() != null && s.getZdsjActual() != null) {
2051   - lists.add(s);
2052   - }
2053   - }
2054   - }
2055   - map.put("jhbc", culateService.culateJhbc(list, ""));//计划班次
2056   - map.put("jhlc", Arith.add(culateService.culateJhgl(list),
2057   - culateService.culateJhJccgl(list))); //计划总里程
2058   - map.put("cjbc", culateService.culateLbbc(list));//烂班班次
2059   - map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
2060   - map.put("ljbc", culateService.culateLjbc(lists, ""));//临加班次
2061   - double ljgl = culateService.culateLjgl(lists);
2062   - map.put("addMileage", ljgl); //临加公里
2063   - map.put("sjbc", culateService.culateSjbc(lists, "") + culateService.culateLjbc(lists, ""));
2064   - double ksgl = culateService.culateKsgl(list);//子任务空驶公里
2065   - double jccgl = culateService.culateJccgl(lists);//空驶班次公里
2066   - map.put("ksgl", ksgl);//空驶公里
2067   - double sjgl = culateService.culateSjgl(lists);//实际营运公里
2068   - map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));//总公里
2069   - map.put("zkslc", Arith.add(ksgl, jccgl));
2070   - map.put("jcclc", jccgl);
2071   - map.put("yygl", Arith.add(sjgl, ljgl)); //总营运公里
2072   - return map;
2073   - }
2074   -
2075   - public Map<String, Object> findKMBC_mh_2(String jGh, String clZbh,
2076   - String lpName, String date, String line) {
2077   - Map<String, Object> map = new HashMap<String, Object>();
2078   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2079   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2080   - for (int i = 0; i < list.size(); i++) {
2081   - ScheduleRealInfo s = list.get(i);
2082   - if (s.isDestroy() && s.isReissue()) {
2083   - s.setRemark("");
2084   - s.setFcsjActual(s.getDfsj());
2085   - s.setZdsjActual(s.getZdsj());
2086   - s.setStatus(2);
2087   - s.setJhlc(s.getJhlcOrig());
2088   - }
2089   -
2090   - Set<ChildTaskPlan> cts = s.getcTasks();
2091   - if (cts != null && cts.size() > 0) {
2092   - lists.add(s);
2093   - } else {
2094   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2095   - lists.add(s);
2096   - }
2097   - }
2098   - }
2099   - double ksgl = culateService.culateKsgl(list);
2100   - double sjgl = culateService.culateSjgl(lists);
2101   - double jccgl = culateService.culateJccgl(lists);
2102   - double ljgl = culateService.culateLjgl(lists);
2103   -
2104   - map.put("jhlc", Arith.add(culateService.culateJhgl(list), culateService.culateJhJccgl(list))); //计划里程
2105   - map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
2106   - map.put("addMileage", ljgl); //临加公里
2107   - map.put("yygl", Arith.add(sjgl, ljgl)); //实际公里
2108   - map.put("ksgl", ksgl);//空驶公里
2109   - map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));
2110   -// map.put("realMileage", format.format(yygl + ksgl + jcclc+addMileage));
2111   - map.put("jhbc", culateService.culateJhbc(list, ""));
2112   - map.put("cjbc", culateService.culateLbbc(list));
2113   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2114   - map.put("sjbc", culateService.culateJhbc(lists, "") - culateService.culateLbbc(lists) + culateService.culateLjbc(lists, ""));
2115   - map.put("jcclc", jccgl);
2116   - map.put("zkslc", Arith.add(ksgl, jccgl));
2117   -// map.put("zkslc", format.format(ksgl + jcclc+addMileageJc));
2118   - return map;
2119   - }
2120   -
2121   -
2122   - @Override
2123   - public List<Map<String, Object>> accountPx(String line, String date,
2124   - String code, String xlName, String px) {
2125   -// List<Object[]> lsitObj = scheduleRealInfoRepository.accountPx(line, date, code,px);
2126   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2127   - if (!code.trim().equals("")) {
2128   - code = BasicData.deviceId2NbbmMap.inverse().get(code);
2129   - }
2130   - String fgs = "";
2131   - List<Line> lineList = lineRepository.findLineByCode(line);
2132   - if (lineList.size() > 0) {
2133   - Line l = lineList.get(0);
2134   - fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
2135   - }
2136   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
2137   - String sql = "SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,"
2138   - + " device_id FROM bsth_v_report_80 WHERE "
2139   - + " FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = '" + date + "' AND"
2140   - + " line_id = '" + line + "' and device_id like '%" + code + "%'";
2141   - Map<String, Object> map;
2142   - List<Object[]> lsitObj = jdbcTemplate.query(sql,
2143   - new RowMapper<Object[]>() {
2144   - @Override
2145   - public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException {
2146   - Object[] t = new Object[3];
2147   - t[0] = rs.getString("request_code");
2148   - t[1] = rs.getString("TIMESTAMP");
2149   - t[2] = rs.getString("device_id");
2150   - return t;
2151   - }
2152   - });
2153   - int i = 1;
2154   - for (Object[] obj : lsitObj) {
2155   - if (obj != null) {
2156   - map = new HashMap<String, Object>();
2157   - map.put("num", i++);
2158   - map.put("xlName", xlName);
2159   - if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
2160   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
2161   - try {
2162   - carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
2163   - } catch (Exception e) {
2164   - // TODO Auto-generated catch block
2165   - e.printStackTrace();
2166   - }
2167   - if (carDeviceList.size() > 0) {
2168   - map.put("clZbh", carDeviceList.get(0).getClZbh());
2169   -
2170   - } else {
2171   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2172   - }
2173   - } else {
2174   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2175   -
2176   - }
2177   - map.put("company", fgs);
2178   - map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
2179   - map.put("requestTime", obj[1]);
2180   - listMap.add(map);
2181   - }
2182   - }
2183   - if (listMap.size() > 1) {
2184   - if (px.equals("asc")) {
2185   - Collections.sort(listMap, new AccountMap());
2186   - } else {
2187   - Collections.sort(listMap, new AccountMap2());
2188   - }
2189   - }
2190   - return listMap;
2191   - }
2192   -
2193   - @Override
2194   - public List<Map<String, Object>> account(String line, String date,
2195   - String code, String xlName, String type) {
2196   - if (!code.trim().equals("")) {
2197   - code = BasicData.deviceId2NbbmMap.inverse().get(code);
2198   - }
2199   - String fgs = "";
2200   - List<Line> lineList = lineRepository.findLineByCode(line);
2201   - if (lineList.size() > 0) {
2202   - Line l = lineList.get(0);
2203   - fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
2204   - }
2205   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2206   - List<Object[]> lsitObj = scheduleRealInfoRepository.account(line, date, code);
2207   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
2208   - Map<String, Object> map;
2209   - int i = 1;
2210   - for (Object[] obj : lsitObj) {
2211   - if (obj != null) {
2212   - map = new HashMap<String, Object>();
2213   - map.put("num", i++);
2214   - map.put("xlName", xlName);
2215   - if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
2216   - List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
2217   - try {
2218   - carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
2219   - } catch (Exception e) {
2220   - // TODO Auto-generated catch block
2221   - e.printStackTrace();
2222   - }
2223   - if (carDeviceList.size() > 0) {
2224   - map.put("clZbh", carDeviceList.get(0).getClZbh());
2225   -
2226   - } else {
2227   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2228   - }
2229   - } else {
2230   - map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
2231   -
2232   - }
2233   - map.put("company", fgs);
2234   - map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
2235   - map.put("requestTime", obj[1]);
2236   - listMap.add(map);
2237   - }
2238   - }
2239   -
2240   - if (type != null && type.length() != 0 && type.equals("export")) {
2241   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
2242   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
2243   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
2244   - Map<String, Object> m = new HashMap<String, Object>();
2245   - ReportUtils ee = new ReportUtils();
2246   - Map<String, Object> typeMap = new HashMap<String, Object>();
2247   - typeMap.put("0xA1", "请求恢复运营");
2248   - typeMap.put("0xA2", "申请调档");
2249   - typeMap.put("0xA3", "出场请求");
2250   - typeMap.put("0xA5", "进场请求");
2251   - typeMap.put("0xA7", "加油请求");
2252   - typeMap.put("0x50", "车辆故障");
2253   - typeMap.put("0x70", "路阻报告");
2254   - typeMap.put("0x60", "事故报告");
2255   - typeMap.put("0x11", "扣证纠纷");
2256   - typeMap.put("0x12", "报警");
2257   - for (Map<String, Object> map1 : listMap) {
2258   - map1.put("requestText", typeMap.get(map1.get("requestType")));
2259   - }
2260   - try {
2261   - listI.add(listMap.iterator());
2262   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
2263   - ee.excelReplace(listI, new Object[]{m}, path + "mould/account.xls",
2264   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
2265   - + "-" + xlName + "-驾驶员请求台账.xls");
2266   - } catch (Exception e) {
2267   - // TODO: handle exception
2268   - e.printStackTrace();
2269   - }
2270   - }
2271   -
2272   - return listMap;
2273   - }
2274   -
2275   - @Override
2276   - public List<SchEditInfoDto> correctForm(String line, String date, String endDate,
2277   - String lpName, String code, String type, String changType) {
2278   -
2279   -// var types = {'DFTZ': '待发调整', 'FCXXWT':'发车信息微调', 'JHLB': '计划烂班', 'CXLB': '撤销烂班',
2280   -// 'CXZX': '撤销执行', 'CXSF': '撤销实发', 'SFTZ': '实发调整', 'TZRC': '调整人车'};
2281   - Map<String, Object> map = new HashMap<String, Object>();
2282   - map.put("DFTZ", "待发调整");
2283   - map.put("FCXXWT", "发车信息微调");
2284   - map.put("JHLB", "计划烂班");
2285   - map.put("CXLB", "撤销烂班");
2286   - map.put("CXZX", "撤销执行");
2287   - map.put("CXSF", "撤销实发");
2288   - map.put("SFTZ", "实发调整");
2289   - map.put("TZRC", "调整人车");
2290   -
2291   - SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm");
2292   - SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2293   - String cont = "";
2294   - cont = " and xl_bm ='" + line + "'";
2295   - if (!lpName.equals("")) {
2296   - cont += " and lp_name = '" + lpName + "'";
2297   - }
2298   - if (!code.equals("")) {
2299   - cont += " and cl_zbh ='" + code + "'";
2300   - }
2301   - String sql = "select t1.*, t2.real_exec_date,"
2302   - + "t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,"
2303   - + "t2.xl_dir,t2.real_exec_date from (select * from "
2304   - + "logger_sch_modify where rq BETWEEN ? and ? and line_code=? )"
2305   - + " t1 INNER JOIN bsth_c_s_sp_info_real t2 on "
2306   - + "t1.sch_id=t2.id where 1=1 " + cont;
2307   -
2308   - List<SchEditInfoDto> list = jdbcTemplate.query(sql,
2309   - new BeanPropertyRowMapper(SchEditInfoDto.class), date, endDate, line);
2310   - List<SchEditInfoDto> lists = new ArrayList<SchEditInfoDto>();
2311   - for (int i = 0; i < list.size(); i++) {
2312   - Long fcsjs = 0l;
2313   - Long updsj = 0l;
2314   - SchEditInfoDto t = list.get(i);
2315   - if (map.get(t.getType()) != null) {
2316   -
2317   - if (changType.equals("")) {
2318   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2319   - } else {
2320   - String fcsj = "";
2321   - String updtime = "";
2322   - try {
2323   - fcsj = sdf1.format(sdf1.parse(t.getFcsj()));
2324   - updtime = sdf1.format(sdf1.parse(t.getTimeStr()));
2325   - fcsjs = sdf2.parse(t.getRealExecDate() + " " + fcsj).getTime();
2326   - updsj = sdf2.parse(t.getRq() + " " + updtime).getTime();
2327   - } catch (ParseException e) {
2328   - // TODO Auto-generated catch block
2329   - e.printStackTrace();
2330   - }
2331   - if (changType.equals("1")) {
2332   - if (fcsjs > updsj) {
2333   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2334   - } else {
2335   - t.setType2("");
2336   - }
2337   - } else if (changType.equals("2")) {
2338   - if (fcsjs < updsj) {
2339   - t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
2340   - } else {
2341   - t.setType2("");
2342   - }
2343   - }
2344   - }
2345   - } else {
2346   - t.setType2("");
2347   - }
2348   - boolean fage = true;
2349   - for (int j = 0; j < lists.size(); j++) {
2350   - SchEditInfoDto s = lists.get(j);
2351   - if (s.getSchId() == t.getSchId()) {
2352   - s.setType2(s.getType2() + " " + t.getType2());
2353   - fage = false;
2354   - }
2355   - }
2356   -
2357   - if (fage) {
2358   - if (changType.equals("")) {
2359   - lists.add(t);
2360   - } else {
2361   - if (changType.equals("1")) {
2362   - if (fcsjs > updsj) {
2363   - lists.add(t);
2364   - }
2365   - } else if (changType.equals("2")) {
2366   - if (fcsjs < updsj) {
2367   - lists.add(t);
2368   - }
2369   - }
2370   - }
2371   - }
2372   - }
2373   -
2374   - if (type != null && type.length() != 0 && type.equals("export")) {
2375   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
2376   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
2377   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
2378   - Map<String, Object> m = new HashMap<String, Object>();
2379   - m.put("dates", date);
2380   - ReportUtils ee = new ReportUtils();
2381   - List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
2382   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2383   - for (SchEditInfoDto d : lists) {
2384   - Map<String, Object> tempMap = new HashMap<String, Object>();
2385   - tempMap.put("lpName", d.getLpName());
2386   - tempMap.put("rq", d.getRq());
2387   - tempMap.put("clZbh", d.getClZbh());
2388   - tempMap.put("jName", d.getjName() + "/" + d.getjGh());
2389   - tempMap.put("fcsj", d.getFcsj());
2390   - tempMap.put("type", d.getType2());
2391   - tempList.add(tempMap);
2392   - }
2393   - try {
2394   - String dateTime = sdfSimple.format(sdfMonth.parse(date));
2395   - if(!endDate.equals(date)){
2396   - dateTime += "-" + sdfSimple.format(sdfMonth.parse(endDate));
2397   - }
2398   - String lineName = BasicData.lineCode2NameMap.get(line);
2399   - listI.add(tempList.iterator());
2400   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
2401   - ee.excelReplace(listI, new Object[]{m}, path + "mould/correctForm.xls",
2402   - path + "export/" + dateTime + "-" + lineName + "-修正报表.xls");
2403   - } catch (Exception e) {
2404   - // TODO: handle exception
2405   - e.printStackTrace();
2406   - }
2407   -// Map<String, Object> maps = tempList.get(tempList.size() - 1);
2408   - }
2409   - return lists;
2410   - }
2411   -
2412   - @Override
2413   - public List<ScheduleRealInfo> queryListWaybill(String jGh, String clZbh,
2414   - String lpName, String date, String line) {
2415   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
2416   - List<ScheduleRealInfo> list = null;
2417   - list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
2418   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2419   - String minfcsj = "02:00";
2420   - List<Line> lineList = lineRepository.findLineByCode(line);
2421   - if (lineList.size() > 0) {
2422   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
2423   - + " id = ("
2424   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
2425   - + ")";
2426   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
2427   - }
2428   - String[] minSjs = minfcsj.split(":");
2429   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
2430   -
2431   - for (int i = 0; i < list.size(); i++) {
2432   - ScheduleRealInfo s = list.get(i);
2433   - if (s.getBcType().equals("out")) {
2434   - s.setRemark("1");
2435   - } else if (s.getBcType().equals("in")) {
2436   - s.setRemark("3");
2437   - } else {
2438   - s.setRemark("2");
2439   - }
2440   - String[] fcsj = s.getFcsj().split(":");
2441   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
2442   -
2443   - Long fscjT = 0L;
2444   - if (fcsjL < minSj) {
2445   - Calendar calendar = new GregorianCalendar();
2446   - calendar.setTime(s.getScheduleDate());
2447   - calendar.add(calendar.DATE, 1);
2448   - s.setScheduleDate(calendar.getTime());
2449   - try {
2450   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
2451   - } catch (ParseException e) {
2452   - // TODO Auto-generated catch block
2453   - e.printStackTrace();
2454   - }
2455   -
2456   - } else {
2457   - try {
2458   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
2459   - } catch (ParseException e) {
2460   - // TODO Auto-generated catch block
2461   - e.printStackTrace();
2462   - }
2463   - ;
2464   - }
2465   - s.setFcsjT(fscjT);
2466   - }
2467   - Collections.sort(list, new compareFcsjType());
2468   - for (int i = 0; i < list.size(); i++) {
2469   - ScheduleRealInfo s = list.get(i);
2470   - s.setAdjustExps(i + 1 + "");
2471   - String remarks = "";
2472   - if (s.getRemarks() != null) {
2473   - remarks += s.getRemarks();
2474   - }
2475   -
2476   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
2477   - if (!childTaskPlans.isEmpty()) {
2478   - s.setFcsjActual("");
2479   - s.setZdsjActual("");
2480   - s.setJhlc(0.0);
2481   - }
2482   -
2483   - if (s.isDestroy()) {
2484   - s.setFcsjActual("");
2485   - s.setZdsjActual("");
2486   - s.setJhlc(0.0);
2487   - remarks += "(烂班)";
2488   - s.setRemarks(remarks);
2489   - }
2490   -
2491   - listSchedule.add(s);
2492   - //计算营运里程,空驶里程
2493   - if (!childTaskPlans.isEmpty()) {
2494   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2495   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
2496   - Collections.sort(listit, new ComparableChild());
2497   - for (int j = 0; j < listit.size(); j++) {
2498   - ScheduleRealInfo t = new ScheduleRealInfo();
2499   - ChildTaskPlan childTaskPlan = listit.get(j);
2500   - if (childTaskPlan.getCcId() == null) {
2501   - if (childTaskPlan.isDestroy()) {
2502   - t.setFcsjActual("");
2503   - t.setZdsjActual("");
2504   - t.setJhlc(0.0);
2505   - } else {
2506   - t.setFcsjActual(childTaskPlan.getStartDate());
2507   - t.setZdsjActual(childTaskPlan.getEndDate());
2508   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
2509   - }
2510   - t.setFcsj(childTaskPlan.getStartDate());
2511   - t.setZdsj(childTaskPlan.getEndDate());
2512   - t.setQdzName(childTaskPlan.getStartStationName());
2513   - t.setZdzName(childTaskPlan.getEndStationName());
2514   - t.setRemarks(childTaskPlan.getRemarks());
2515   - t.setAdjustExps("子");
2516   - listSchedule.add(t);
2517   - }
2518   - }
2519   - }
2520   - }
2521   -
2522   - return listSchedule;
2523   - }
2524   -
2525   - @Override
2526   - public List<ScheduleRealInfo> queryListWaybill2(String jName, String clZbh,
2527   - String lpName, String date, String line) {
2528   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
2529   - List<ScheduleRealInfo> list = null;
2530   - list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
2531   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
2532   - String minfcsj = "02:00";
2533   - List<Line> lineList = lineRepository.findLineByCode(line);
2534   - if (lineList.size() > 0) {
2535   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
2536   - + " id = ("
2537   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
2538   - + ")";
2539   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
2540   - }
2541   - String[] minSjs = minfcsj.split(":");
2542   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
2543   -
2544   - for (int i = 0; i < list.size(); i++) {
2545   - ScheduleRealInfo s = list.get(i);
2546   - String[] fcsj = s.getFcsj().split(":");
2547   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
2548   -
2549   - Long fscjT = 0L;
2550   - if (fcsjL < minSj) {
2551   - Calendar calendar = new GregorianCalendar();
2552   - calendar.setTime(s.getScheduleDate());
2553   - calendar.add(calendar.DATE, 1);
2554   - s.setScheduleDate(calendar.getTime());
2555   - try {
2556   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
2557   - } catch (ParseException e) {
2558   - // TODO Auto-generated catch block
2559   - e.printStackTrace();
2560   - }
2561   -
2562   - } else {
2563   - try {
2564   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
2565   - } catch (ParseException e) {
2566   - // TODO Auto-generated catch block
2567   - e.printStackTrace();
2568   - }
2569   - ;
2570   - }
2571   - s.setFcsjT(fscjT);
2572   - }
2573   - Collections.sort(list, new ComparableReal());
2574   - for (int i = 0; i < list.size(); i++) {
2575   - ScheduleRealInfo s = list.get(i);
2576   - s.setAdjustExps(i + 1 + "");
2577   - String remarks = "";
2578   - if (s.getRemarks() != null) {
2579   - remarks += s.getRemarks();
2580   - }
2581   -
2582   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
2583   - if (!childTaskPlans.isEmpty()) {
2584   - s.setFcsjActual("");
2585   - s.setZdsjActual("");
2586   - s.setJhlc(0.0);
2587   - }
2588   -
2589   - if (s.isDestroy()) {
2590   - if (s.isReissue()) {
2591   - s.setFcsjActual(s.getDfsj());
2592   - s.setZdsjActual(s.getZdsj());
2593   - s.setRemarks("");
2594   - s.setStatus(2);
2595   - s.setJhlc(s.getJhlcOrig());
2596   - } else {
2597   - s.setFcsjActual("");
2598   - s.setZdsjActual("");
2599   - s.setJhlc(0.0);
2600   - remarks += "(烂班)";
2601   - s.setRemarks(remarks);
2602   - }
2603   - }
2604   -
2605   - listSchedule.add(s);
2606   - //计算营运里程,空驶里程
2607   - if (!childTaskPlans.isEmpty()) {
2608   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
2609   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
2610   - Collections.sort(listit, new ComparableChild());
2611   - for (int j = 0; j < listit.size(); j++) {
2612   - ScheduleRealInfo t = new ScheduleRealInfo();
2613   - ChildTaskPlan childTaskPlan = listit.get(j);
2614   - if (childTaskPlan.isDestroy()) {
2615   - t.setFcsjActual("");
2616   - t.setZdsjActual("");
2617   - t.setJhlc(0.0);
2618   - } else {
2619   - t.setFcsjActual(childTaskPlan.getStartDate());
2620   - t.setZdsjActual(childTaskPlan.getEndDate());
2621   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
2622   - }
2623   - t.setQdzName(childTaskPlan.getStartStationName());
2624   - t.setZdzName(childTaskPlan.getEndStationName());
2625   - t.setRemarks(childTaskPlan.getRemarks());
2626   - t.setAdjustExps("子");
2627   - listSchedule.add(t);
2628   - }
2629   - }
2630   - }
2631   -
2632   - return listSchedule;
2633   - }
2634   -
2635   - @Override
2636   - public Map<String, Object> removeChildTask(Long taskId) {
2637   - Map<String, Object> rs = new HashMap<>();
2638   - ChildTaskPlan chTask = cTaskPlanRepository.findOne(taskId);
2639   -
2640   - ScheduleRealInfo sch = dayOfSchedule.get(chTask.getSchedule().getId());
2641   - try {
2642   -
2643   - sch.getcTasks().remove(chTask);
2644   - scheduleRealInfoRepository.save(sch);
2645   - rs.put("status", ResponseCode.SUCCESS);
2646   - } catch (Exception e) {
2647   - logger.error("", e);
2648   - rs.put("status", ResponseCode.ERROR);
2649   - }
2650   - return rs;
2651   - }
2652   -
2653   - @Override
2654   - public List<Map<String, Object>> statisticsDaily(String line, String date,
2655   - String xlName, String type) {
2656   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2657   - List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
2658   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2659   - for (int i = 0; i < list_s.size(); i++) {
2660   - ScheduleRealInfo s = list_s.get(i);
2661   - Set<ChildTaskPlan> cts = s.getcTasks();
2662   - if (cts != null && cts.size() > 0) {
2663   - lists.add(s);
2664   - } else {
2665   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2666   - lists.add(s);
2667   - }
2668   - }
2669   - }
2670   - Map<String, Object> map = new HashMap<String, Object>();
2671   - map.put("xlName", xlName);
2672   - double jhlc = culateService.culateJhgl(list_s);
2673   - map.put("jhlc", jhlc);
2674   - map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
2675   - double lbgl = culateService.culateLbgl(list_s);
2676   - map.put("ssgl", lbgl);
2677   - map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2678   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
2679   - map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2680   - map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2681   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
2682   - map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2683   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2684   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2685   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2686   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2687   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2688   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2689   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2690   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2691   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2692   - map.put("ssbc", culateService.culateLbbc(list_s));
2693   - double ljgl = culateService.culateLjgl(lists);
2694   - map.put("ljgl", ljgl);
2695   - map.put("jhbc", culateService.culateJhbc(list_s, ""));
2696   - map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
2697   - map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
2698   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2699   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2700   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2701   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2702   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2703   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2704   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2705   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2706   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2707   - map.put("dtbc", 0);
2708   - map.put("dtbc_m", 0);
2709   - map.put("dtbc_a", 0);
2710   - List<CalcInterval> intervalList=calcIntervalRepository.selectByDateAndLine(line, date,"");
2711   - if(intervalList.size()>0){
2712   - CalcInterval c=intervalList.get(0);
2713   - map.put("djg",c.getDjgAll());
2714   - map.put("djg_m", c.getDjgZgf());
2715   - map.put("djg_a", c.getDjgWgf());
2716   - map.put("djg_time", c.getDjgTime());
2717   - }else{
2718   - Map<String, Object> m = culateService.culateDjg(list_s, line);
2719   - map.put("djg", m.get("djgcsq"));
2720   - map.put("djg_m", m.get("djgcsz"));
2721   - map.put("djg_a", m.get("djgcsw"));
2722   - map.put("djg_time", m.get("djgsj"));
2723   - }
2724   -
2725   - map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
2726   - lMap.add(map);
2727   -
2728   - if (date.length() == 10) {
2729   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
2730   - String dbdp = "";
2731   - try {
2732   - for (int i = 0; i < list.size(); i++) {
2733   - DutyEmployee t = list.get(i);
2734   - if (dbdp.indexOf(t.getuName()) == -1) {
2735   - if (!(dbdp.length() > 0)) {
2736   - dbdp = t.getuName();
2737   - } else {
2738   - dbdp += "," + t.getuName();
2739   - }
2740   - }
2741   - }
2742   - } catch (Exception e) {
2743   - // TODO: handle exception
2744   - e.printStackTrace();
2745   - }
2746   - map.put("dbdp", dbdp);
2747   - }
2748   -
2749   - return lMap;
2750   - }
2751   -
2752   - @Override
2753   - public List<Map<String, Object>> statisticsDaily_mh_2(String line, String date,
2754   - String xlName, String type) {
2755   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2756   - List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
2757   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2758   - for (int i = 0; i < list_s.size(); i++) {
2759   - ScheduleRealInfo s = list_s.get(i);
2760   - if (s.isDestroy() && s.isReissue()) {
2761   - s.setRemark("");
2762   - s.setFcsjActual(s.getDfsj());
2763   - s.setZdsjActual(s.getZdsj());
2764   - s.setStatus(2);
2765   - s.setJhlc(s.getJhlcOrig());
2766   - }
2767   -
2768   - Set<ChildTaskPlan> cts = s.getcTasks();
2769   - if (cts != null && cts.size() > 0) {
2770   - lists.add(s);
2771   - } else {
2772   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2773   - lists.add(s);
2774   - }
2775   - }
2776   - }
2777   - Map<String, Object> map = new HashMap<String, Object>();
2778   - map.put("xlName", xlName);
2779   - double jhlc = culateService.culateJhgl(list_s);
2780   - map.put("jhlc", jhlc);
2781   - map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
2782   - double lbgl = culateService.culateLbgl(list_s);
2783   - map.put("ssgl", lbgl);
2784   - map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2785   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
2786   - map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2787   - map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2788   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
2789   - map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2790   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2791   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2792   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2793   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2794   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2795   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2796   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2797   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2798   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2799   - map.put("ssbc", culateService.culateLbbc(list_s));
2800   - double ljgl = culateService.culateLjgl(lists);
2801   - map.put("ljgl", ljgl);
2802   - map.put("jhbc", culateService.culateJhbc(list_s, ""));
2803   - map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
2804   - map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
2805   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2806   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2807   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2808   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2809   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2810   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2811   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2812   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2813   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2814   - map.put("dtbc", 0);
2815   - map.put("dtbc_m", 0);
2816   - map.put("dtbc_a", 0);
2817   - map.put("djg", 0);
2818   - map.put("djg_m", 0);
2819   - map.put("djg_a", 0);
2820   - map.put("djg_time", 0);
2821   - map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
2822   - lMap.add(map);
2823   - return lMap;
2824   - }
2825   -
2826   - public final Map<String, Object> staticTj(List<ScheduleRealInfo> list,Map<String, Object> m) {
2827   -
2828   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2829   - for (int i = 0; i < list.size(); i++) {
2830   - ScheduleRealInfo s = list.get(i);
2831   - Set<ChildTaskPlan> cts = s.getcTasks();
2832   - if (cts != null && cts.size() > 0) {
2833   - lists.add(s);
2834   - } else {
2835   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2836   - lists.add(s);
2837   - }
2838   - }
2839   - }
2840   - Map<String, Object> map = new HashMap<String, Object>();
2841   - if (list.size() > 0) {
2842   - map.put("fgsBm", list.get(0).getFgsBm());
2843   - map.put("xlBm", list.get(0).getXlBm());
2844   - map.put("xlName", list.get(0).getXlName());
2845   - map.put("fgsName", list.get(0).getFgsName());
2846   - try {
2847   - map.put("xlNamePy", PinyinHelper.convertToPinyinString(list.get(0).getFgsBm()+list.get(0).getXlName(), "", PinyinFormat.WITHOUT_TONE));
2848   - } catch (PinyinException e) {
2849   - // TODO Auto-generated catch block
2850   - e.printStackTrace();
2851   - }
2852   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
2853   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
2854   - map.put("jhlc", jhyygl);
2855   - map.put("jcclc", jhjcclc);
2856   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
2857   - double ljks=culateService.culateLjksgl(lists);
2858   - map.put("ljks", ljks);
2859   - double ljgl = culateService.culateLjgl(lists);
2860   - double sjyygl = culateService.culateSjgl(lists);
2861   - double zyygl = Arith.add(sjyygl, ljgl);
2862   -
2863   - double sjjccgl = culateService.culateJccgl(lists);
2864   - double sjksgl = culateService.culateKsgl(lists);
2865   - double zksgl = Arith.add(sjjccgl, sjksgl);
2866   - map.put("sjzgl", Arith.add(zyygl, zksgl));
2867   - map.put("sjgl", zyygl);
2868   - map.put("sjksgl", zksgl);
2869   - double ssgl = culateService.culateLbgl(list);
2870   - map.put("ssgl", ssgl);
2871   -
2872   - //计划+临加-少驶=实驶
2873   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
2874   - if (jl == zyygl) {
2875   - map.put("zt", 0);
2876   - } else {
2877   - map.put("zt", 1);
2878   - }
2879   -
2880   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
2881   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
2882   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
2883   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
2884   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
2885   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
2886   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
2887   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
2888   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
2889   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
2890   - double ssgl_pc = culateService.culateCJLC(list, "配车");
2891   - double ssgl_by = culateService.culateCJLC(list, "保养");
2892   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
2893   - double ssgl_qt = culateService.culateCJLC(list, "其他");
2894   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
2895   - map.put("ssbc", culateService.culateLbbc(list));
2896   - map.put("ljgl", ljgl);
2897   - map.put("jhbc", culateService.culateJhbc(list, ""));
2898   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
2899   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
2900   - map.put("sjbc", culateService.culateSjbc(lists, ""));
2901   - map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
2902   - map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
2903   - map.put("ljbc", culateService.culateLjbc(lists, ""));
2904   - map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
2905   - map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
2906   - map.put("fzbc", culateService.culateFzbc(lists, ""));
2907   - map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
2908   - map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
2909   - map.put("dtbc", 0);
2910   - map.put("dtbc_m", 0);
2911   - map.put("dtbc_a", 0);
2912   - if(m.get("xl")==null){
2913   - Map<String, Object> m_ = culateService.culateDjg(lists, list.get(0).getXlBm());
2914   - map.put("djg", m_.get("djgcsq"));
2915   - map.put("djg_m", m_.get("djgcsz"));
2916   - map.put("djg_a", m_.get("djgcsw"));
2917   - map.put("djg_time", m_.get("djgsj"));
2918   - }else{
2919   - map.put("djg", m.get("djgAll")==null?"0":m.get("djgAll"));
2920   - map.put("djg_m", m.get("djgZgf")==null?"0":m.get("djgZgf"));
2921   - map.put("djg_a", m.get("djgWgf")==null?"0":m.get("djgWgf"));
2922   - map.put("djg_time", m.get("djgTime")==null?"0":m.get("djgTime"));
2923   - }
2924   - }
2925   - return map;
2926   - }
2927   -
2928   - @Override
2929   - public List<Map<String, Object>> statisticsDailyTj(String gsdm, String fgsdm, String line, String date, String date2,
2930   - String xlName, String type,String nature) {
2931   - List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
2932   - List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
2933   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
2934   - List<Object[]> listInterval=new ArrayList<Object[]>();
2935   - line = line.trim();
2936   - if (line.equals("")) {
2937   - //查询所有线路
2938   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
2939   - listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
2940   - } else {
2941   - //查询单条线路
2942   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
2943   - listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
2944   - }
2945   - Map<String, Map<String,Object>> mapInterval=new HashMap<String, Map<String,Object>>();
2946   - for (int i = 0; i < listInterval.size(); i++) {
2947   - Object[] interval=listInterval.get(i);
2948   - String gs=interval[0].toString();
2949   - String fgs=interval[1].toString();
2950   - String xl=interval[2].toString();
2951   - Map<String, Object> m=new HashMap<String,Object>();
2952   - m.put("gs", gs);
2953   - m.put("fgs", fgs);
2954   - m.put("xl", xl);
2955   - m.put("djgAll", interval[3]);
2956   - m.put("djgZgf", interval[6]);
2957   - m.put("djgWgf", interval[7]);
2958   - m.put("djgTime", interval[8]);
2959   - mapInterval.put(gs+"-"+fgs+"-"+xl, m);
2960   - }
2961   - Map<String, Boolean> lineMap=lineService.lineNature();
2962   - List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
2963   - for (int i = 0; i < listAll.size(); i++) {
2964   - ScheduleRealInfo s=listAll.get(i);
2965   - if (nature.equals("0")) {
2966   - list.add(s);
2967   - }else if(nature.equals("1")){
2968   - if(lineMap.get(s.getXlBm())){
2969   - list.add(s);
2970   - }
2971   - }else{
2972   - if(!lineMap.get(s.getXlBm())){
2973   - list.add(s);
2974   - }
2975   - }
2976   - }
2977   - for (int i = 0; i < list.size(); i++) {
2978   - ScheduleRealInfo s = list.get(i);
2979   - Set<ChildTaskPlan> cts = s.getcTasks();
2980   - if (cts != null && cts.size() > 0) {
2981   - list_s.add(s);
2982   - } else {
2983   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
2984   - list_s.add(s);
2985   - }
2986   - }
2987   - }
2988   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
2989   - for (int i = 0; i < list.size(); i++) {
2990   - if (i < list.size() - 1) {
2991   - if ((list.get(i+1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
2992   - lists.add(list.get(i));
2993   - } else {
2994   - lists.add(list.get(i));
2995   - Map<String, Object> mm=new HashMap<String,Object>();
2996   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
2997   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
2998   - }
2999   - Map<String, Object> map = staticTj(lists,mm);
3000   - lMap.add(map);
3001   - lists = new ArrayList<ScheduleRealInfo>();
3002   - }
3003   - } else {
3004   - if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
3005   - lists.add(list.get(i));
3006   - Map<String, Object> mm=new HashMap<String,Object>();
3007   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3008   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3009   - }
3010   - Map<String, Object> map = staticTj(lists,mm);
3011   - lMap.add(map);
3012   - } else {
3013   - lists = new ArrayList<ScheduleRealInfo>();
3014   - lists.add(list.get(i));
3015   - Map<String, Object> mm=new HashMap<String,Object>();
3016   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3017   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3018   - }
3019   - Map<String, Object> map = staticTj(lists,mm);
3020   - lMap.add(map);
3021   - }
3022   - }
3023   - }
3024   - /*if(!line.equals("")){
3025   - List<Line> l=lineRepository.findLineByCode(line);
3026   - if(l.size()>0)
3027   - lMap.get(0).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
3028   - }*/
3029   - Collections.sort(lMap, new AccountXlbm());
3030   - Map<String, Object> map = new HashMap<String, Object>();
3031   - map.put("xlName", "合计");
3032   - map.put("fgsName", "");
3033   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
3034   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
3035   - map.put("jhlc", jhyygl);
3036   - map.put("jcclc", jhjcclc);
3037   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
3038   -
3039   - double ljgl = culateService.culateLjgl(list_s);
3040   - double sjyygl = culateService.culateSjgl(list_s);
3041   - double zyygl = Arith.add(sjyygl, ljgl);
3042   - double ljks=culateService.culateLjksgl(list_s);
3043   - map.put("ljks", ljks);
3044   - double sjjccgl = culateService.culateJccgl(list_s);
3045   - double sjksgl = culateService.culateKsgl(list_s);
3046   - double zksgl = Arith.add(sjjccgl, sjksgl);
3047   - map.put("sjzgl", Arith.add(zyygl, zksgl));
3048   - map.put("sjgl", zyygl);
3049   - map.put("sjksgl", zksgl);
3050   -
3051   - double ssgl = culateService.culateLbgl(list);
3052   - map.put("ssgl", ssgl);
3053   - //计划+临加-少驶=实驶
3054   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
3055   - if (jl == zyygl) {
3056   - map.put("zt", 0);
3057   - } else {
3058   - map.put("zt", 1);
3059   - }
3060   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
3061   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
3062   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
3063   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
3064   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
3065   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
3066   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
3067   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
3068   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
3069   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
3070   - double ssgl_pc = culateService.culateCJLC(list, "配车");
3071   - double ssgl_by = culateService.culateCJLC(list, "保养");
3072   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
3073   - double ssgl_qt = culateService.culateCJLC(list, "其他");
3074   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
3075   -
3076   - map.put("ssbc", culateService.culateLbbc(list));
3077   - map.put("ljgl", ljgl);
3078   - map.put("jhbc", culateService.culateJhbc(list, ""));
3079   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
3080   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
3081   - map.put("sjbc", culateService.culateSjbc(list_s, ""));
3082   - map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
3083   - map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
3084   - map.put("ljbc", culateService.culateLjbc(list_s, ""));
3085   - map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
3086   - map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
3087   - map.put("fzbc", culateService.culateFzbc(list_s, ""));
3088   - map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
3089   - map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
3090   - map.put("dtbc", 0);
3091   - map.put("dtbc_m", 0);
3092   - map.put("dtbc_a", 0);
3093   - if (list.size() > 0) {
3094   - int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
3095   - for (Map<String, Object> m : lMap) {
3096   - if (m.containsKey("djg") && m.get("djg") != null)
3097   - djg += Integer.valueOf(m.get("djg").toString());
3098   - if (m.containsKey("djg_m") && m.get("djg_m") != null)
3099   - djg_m += Integer.valueOf(m.get("djg_m").toString());
3100   - if (m.containsKey("djg_a") && m.get("djg_a") != null)
3101   - djg_a += Integer.valueOf(m.get("djg_a").toString());
3102   - if (m.containsKey("djg_time") && m.get("djg_time") != null) {
3103   - int t = Integer.valueOf(m.get("djg_time").toString());
3104   - if (t > djg_time)
3105   - djg_time = t;
3106   - }
3107   - }
3108   - map.put("djg", djg);
3109   - map.put("djg_m", djg_m);
3110   - map.put("djg_a", djg_a);
3111   - map.put("djg_time", djg_time);
3112   -// Map<String, Object> m_=culateService.culateDjg(list_s, list.get(0).getXlBm());
3113   -// map.put("djg", m_.get("djgcsq"));
3114   -// map.put("djg_m", m_.get("djgcsz"));
3115   -// map.put("djg_a", m_.get("djgcsw"));
3116   -// map.put("djg_time", m_.get("djgsj"));
3117   - } else {
3118   - map.put("djg", "0");
3119   - map.put("djg_m", "0");
3120   - map.put("djg_a", "0");
3121   - map.put("djg_time", "0");
3122   - }
3123   - lMap.add(map);
3124   - if (type != null && type.length() != 0 && type.equals("export")) {
3125   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
3126   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
3127   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
3128   - Map<String, Object> m = new HashMap<String, Object>();
3129   - m.put("date", date + "至" + date2);
3130   - ReportUtils ee = new ReportUtils();
3131   - try {
3132   - String dateTime = "";
3133   - if (date.equals(date2)) {
3134   - dateTime = sdfSimple.format(sdfMonth.parse(date));
3135   - } else {
3136   - dateTime = sdfSimple.format(sdfMonth.parse(date))
3137   - + "-" + sdfSimple.format(sdfMonth.parse(date2));
3138   - }
3139   - listI.add(lMap.iterator());
3140   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
3141   - ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",
3142   - path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
3143   - } catch (Exception e) {
3144   - // TODO: handle exception
3145   - //e.printStackTrace();
3146   - logger.info("", e);
3147   - }
3148   - }
3149   -
3150   - return lMap;
3151   - }
3152   -
3153   - @Override
3154   - public List<Map<String, Object>> statisticsDailyTjHb(String gsdm, String fgsdm, String line, String date, String date2,
3155   - String xlName, String type,String nature) {
3156   - List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
3157   - List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
3158   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
3159   - List<Object[]> listInterval=new ArrayList<Object[]>();
3160   -
3161   - line = line.trim();
3162   - if (line.equals("")) {
3163   - //查询所有线路
3164   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
3165   - listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
3166   - } else {
3167   - //查询单条线路
3168   - listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
3169   - listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
3170   - }
3171   - Map<String, Map<String,Object>> mapInterval=new HashMap<>();
3172   - for (int i = 0; i < listInterval.size(); i++) {
3173   - Object[] interval=listInterval.get(i);
3174   - String gs=interval[0].toString();
3175   - String fgs=interval[1].toString();
3176   - String xl=interval[2].toString();
3177   - Map<String, Object> m=new HashMap<String,Object>();
3178   - m.put("gs", gs);
3179   - m.put("fgs", fgs);
3180   - m.put("xl", xl);
3181   - m.put("djgAll", interval[3]);
3182   - m.put("djgZgf", interval[6]);
3183   - m.put("djgWgf", interval[7]);
3184   - m.put("djgTime", interval[8]);
3185   - mapInterval.put(gs+"-"+fgs+"-"+xl, m);
3186   - }
3187   -
3188   - Map<String, Boolean> lineMap=lineService.lineNature();
3189   - List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
3190   - for (int i = 0; i < listAll.size(); i++) {
3191   - ScheduleRealInfo s=listAll.get(i);
3192   - if (nature.equals("0")) {
3193   - list.add(s);
3194   - }else if(nature.equals("1")){
3195   - if(lineMap.get(s.getXlBm())){
3196   - list.add(s);
3197   - }
3198   - }else{
3199   - if(!lineMap.get(s.getXlBm())){
3200   - list.add(s);
3201   - }
3202   - }
3203   - }
3204   - for (int i = 0; i < list.size(); i++) {
3205   - ScheduleRealInfo s = list.get(i);
3206   - Set<ChildTaskPlan> cts = s.getcTasks();
3207   - if (cts != null && cts.size() > 0) {
3208   - list_s.add(s);
3209   - } else {
3210   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
3211   - list_s.add(s);
3212   - }
3213   - }
3214   - }
3215   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
3216   - for (int i = 0; i < list.size(); i++) {
3217   - if (i < list.size() - 1) {
3218   - if ((list.get(i + 1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
3219   - lists.add(list.get(i));
3220   - } else {
3221   - lists.add(list.get(i));
3222   - Map<String, Object> mm=new HashMap<String,Object>();
3223   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3224   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3225   - }
3226   - Map<String, Object> map = staticTj(lists,mm);
3227   - lMap.add(map);
3228   - lists = new ArrayList<ScheduleRealInfo>();
3229   - }
3230   - } else {
3231   - if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
3232   - lists.add(list.get(i));
3233   - Map<String, Object> mm=new HashMap<String,Object>();
3234   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3235   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3236   - }
3237   - Map<String, Object> map = staticTj(lists,mm);
3238   - lMap.add(map);
3239   - } else {
3240   - lists = new ArrayList<ScheduleRealInfo>();
3241   - lists.add(list.get(i));
3242   - Map<String, Object> mm=new HashMap<String,Object>();
3243   - if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
3244   - mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
3245   - }
3246   - Map<String, Object> map = staticTj(lists,mm);
3247   - lMap.add(map);
3248   - }
3249   - }
3250   - }
3251   -
3252   - Collections.sort(lMap, new AccountXlbm());
3253   - Map<String, Object> map = new HashMap<String, Object>();
3254   - map.put("xlBm", "hj");
3255   - map.put("xlName", "合计");
3256   - map.put("fgsBm", "");
3257   - map.put("fgsName", "");
3258   - map.put("gsBm", "");
3259   - double jhyygl = culateService.culateJhgl(list);//计划营运公里
3260   - double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
3261   - map.put("jhlc", jhyygl);
3262   - map.put("jcclc", jhjcclc);
3263   - map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
3264   -
3265   - double ljgl = culateService.culateLjgl(list_s);
3266   - double sjyygl = culateService.culateSjgl(list_s);
3267   - double zyygl = Arith.add(sjyygl, ljgl);
3268   - double ljks=culateService.culateLjksgl(list_s);
3269   - map.put("ljks", ljks);
3270   - double sjjccgl = culateService.culateJccgl(list_s);
3271   - double sjksgl = culateService.culateKsgl(list_s);
3272   - double zksgl = Arith.add(sjjccgl, sjksgl);
3273   - map.put("sjzgl", Arith.add(zyygl, zksgl));
3274   - map.put("sjgl", zyygl);
3275   - map.put("sjksgl", zksgl);
3276   -
3277   - double ssgl = culateService.culateLbgl(list);
3278   - map.put("ssgl", ssgl);
3279   - //计划+临加-少驶=实驶
3280   - double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
3281   - if (jl == zyygl) {
3282   - map.put("zt", 0);
3283   - } else {
3284   - map.put("zt", 1);
3285   - }
3286   - map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
3287   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
3288   - map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
3289   - map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
3290   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
3291   - map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
3292   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
3293   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
3294   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
3295   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
3296   - double ssgl_pc = culateService.culateCJLC(list, "配车");
3297   - double ssgl_by = culateService.culateCJLC(list, "保养");
3298   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
3299   - double ssgl_qt = culateService.culateCJLC(list, "其他");
3300   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
3301   -
3302   - map.put("ssbc", culateService.culateLbbc(list));
3303   - map.put("ljgl", ljgl);
3304   - map.put("jhbc", culateService.culateJhbc(list, ""));
3305   - map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
3306   - map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
3307   - map.put("sjbc", culateService.culateSjbc(list_s, ""));
3308   - map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
3309   - map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
3310   - map.put("ljbc", culateService.culateLjbc(list_s, ""));
3311   - map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
3312   - map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
3313   - map.put("fzbc", culateService.culateFzbc(list_s, ""));
3314   - map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
3315   - map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
3316   - map.put("dtbc", 0);
3317   - map.put("dtbc_m", 0);
3318   - map.put("dtbc_a", 0);
3319   - if (list.size() > 0) {
3320   - int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
3321   - for (Map<String, Object> m : lMap) {
3322   - if (m.containsKey("djg") && m.get("djg") != null)
3323   - djg += Integer.valueOf(m.get("djg").toString());
3324   - if (m.containsKey("djg_m") && m.get("djg_m") != null)
3325   - djg_m += Integer.valueOf(m.get("djg_m").toString());
3326   - if (m.containsKey("djg_a") && m.get("djg_a") != null)
3327   - djg_a += Integer.valueOf(m.get("djg_a").toString());
3328   - if (m.containsKey("djg_time") && m.get("djg_time") != null) {
3329   - int t = Integer.valueOf(m.get("djg_time").toString());
3330   - if (t > djg_time)
3331   - djg_time = t;
3332   - }
3333   - }
3334   - map.put("djg", djg);
3335   - map.put("djg_m", djg_m);
3336   - map.put("djg_a", djg_a);
3337   - map.put("djg_time", djg_time);
3338   - } else {
3339   - map.put("djg", "0");
3340   - map.put("djg_m", "0");
3341   - map.put("djg_a", "0");
3342   - map.put("djg_time", "0");
3343   - }
3344   - lMap.add(map);
3345   - return lMap;
3346   - }
3347   -
3348   - @Override
3349   - public Map<String, Object> scheduleDaily(String line, String date) {
3350   - Map<String, String> tempMap = null;
3351   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
3352   - Map<String, Object> map = new HashMap<String, Object>();
3353   - Double jhlc = 0.00;
3354   - 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;
3355   - int jhbc = 0;
3356   - for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
3357   - if (scheduleRealInfo != null) {
3358   - //计算里程(包括子任务)
3359   - jhlc += scheduleRealInfo.getJhlc();
3360   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
3361   - if (!childTaskPlans.isEmpty()) {
3362   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
3363   - while (it.hasNext()) {
3364   - ChildTaskPlan childTaskPlan = it.next();
3365   - //是否烂班,烂班就是少驶
3366   - if (!childTaskPlan.isDestroy()) {
3367   - sjgl += childTaskPlan.getMileage();
3368   - } else {
3369   - ssgl += childTaskPlan.getMileage();
3370   - if (childTaskPlan.getDestroyReason().equals("路阻")) {
3371   - ssgl_lz += childTaskPlan.getMileage();
3372   - } else if (childTaskPlan.getDestroyReason().equals("吊慢")) {
3373   - ssgl_dm += childTaskPlan.getMileage();
3374   - } else if (childTaskPlan.getDestroyReason().equals("故障")) {
3375   - ssgl_gz += childTaskPlan.getMileage();
3376   - } else if (childTaskPlan.getDestroyReason().equals("纠纷")) {
3377   - ssgl_jf += childTaskPlan.getMileage();
3378   - } else if (childTaskPlan.getDestroyReason().equals("肇事")) {
3379   - ssgl_zs += childTaskPlan.getMileage();
3380   - } else if (childTaskPlan.getDestroyReason().equals("缺人")) {
3381   - ssgl_qr += childTaskPlan.getMileage();
3382   - } else if (childTaskPlan.getDestroyReason().equals("缺车")) {
3383   - ssgl_qc += childTaskPlan.getMileage();
3384   - } else if (childTaskPlan.getDestroyReason().equals("客稀")) {
3385   - ssgl_kx += childTaskPlan.getMileage();
3386   - } else if (childTaskPlan.getDestroyReason().equals("气候")) {
3387   - ssgl_qh += childTaskPlan.getMileage();
3388   - } else if (childTaskPlan.getDestroyReason().equals("援外")) {
3389   - ssgl_yw += childTaskPlan.getMileage();
3390   - } else {
3391   - ssgl_other += childTaskPlan.getMileage();
3392   - }
3393   - }
3394   - //临加公里
3395   - if (childTaskPlan.getType1().equals("临加")) {
3396   - ljgl += childTaskPlan.getMileage();
3397   - }
3398   - }
3399   - }
3400   - //班次
3401   - scheduleRealInfo.getFcsjT();
3402   - scheduleRealInfo.getFcsjActualTime();
3403   - }
3404   - }
3405   - map.put("jhlc", jhlc);
3406   - map.put("sjgl", sjgl);
3407   - map.put("ssgl", ssgl);
3408   - map.put("ssgl_lz", ssgl_lz);
3409   - map.put("ssgl_dm", ssgl_dm);
3410   - map.put("ssgl_gz", ssgl_gz);
3411   - map.put("ssgl_jf", ssgl_jf);
3412   - map.put("ssgl_zs", ssgl_zs);
3413   - map.put("ssgl_qr", ssgl_qr);
3414   - map.put("ssgl_qc", ssgl_qc);
3415   - map.put("ssgl_kx", ssgl_kx);
3416   - map.put("ssgl_qh", ssgl_qh);
3417   - map.put("ssgl_yw", ssgl_yw);
3418   - map.put("ssgl_other", ssgl_other);
3419   - map.put("ljgl", ljgl);
3420   -
3421   - map.put("jhbc", scheduleRealInfos.size());
3422   - return null;
3423   - }
3424   -
3425   - @Override
3426   - public int countByLineCodeAndDate(String xlBm, String schDate) {
3427   - return scheduleRealInfoRepository.countByLineCodeAndDate(xlBm + "", schDate);
3428   - }
3429   -
3430   - @Override
3431   - public List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate) {
3432   - return scheduleRealInfoRepository.findByLineCodeAndDate(xlBm + "", schDate);
3433   - }
3434   -
3435   - @Override
3436   - public void deleteByLineCodeAndDate(String xlBm, String schDate) {
3437   - scheduleRealInfoRepository.deleteByLineCodeAndDate(xlBm + "", schDate);
3438   - }
3439   -
3440   - @Override
3441   - public Long getMaxId() {
3442   - return scheduleRealInfoRepository.getMaxId();
3443   - }
3444   -
3445   - @Override
3446   - public List<ScheduleRealInfo> realScheduleList(String line, String date) {
3447   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3448   - String lpName = "lpName";
3449   - String zdsj = "";
3450   - String zdsjActual = "";
3451   - String zdsj1 = "";
3452   - String zdsjActual1 = "";
3453   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
3454   -
3455   - /*
3456   - * 对计划发车时间相同的班次进行排序 out最前 in最后
3457   - */
3458   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3459   - SimpleDateFormat sdfnyr =new SimpleDateFormat("yyyy-MM-dd");
3460   - String minfcsj = "02:00";
3461   - List<Line> lineList = lineRepository.findLineByCode(line);
3462   - if (lineList.size() > 0) {
3463   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
3464   - + " id = ("
3465   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
3466   - + ")";
3467   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
3468   - }
3469   - String[] minSjs = minfcsj.split(":");
3470   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
3471   - for (int i = 0; i < listInfo.size(); i++) {
3472   - ScheduleRealInfo s = listInfo.get(i);
3473   - if (s.getBcType().equals("out")) {
3474   - s.setRemark("1");
3475   - } else if (s.getBcType().equals("in")) {
3476   - s.setRemark("3");
3477   - } else {
3478   - s.setRemark("2");
3479   - }
3480   - String[] fcsj = s.getFcsj().split(":");
3481   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3482   -
3483   - Long fscjT = 0L;
3484   - if (fcsjL < minSj) {
3485   - Calendar calendar = new GregorianCalendar();
3486   - calendar.setTime(s.getScheduleDate());
3487   - calendar.add(calendar.DATE, 1);
3488   - Date date_sch= calendar.getTime();
3489   - try {
3490   - fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
3491   - } catch (ParseException e) {
3492   - // TODO Auto-generated catch block
3493   - e.printStackTrace();
3494   - }
3495   -
3496   - } else {
3497   - try {
3498   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3499   - } catch (ParseException e) {
3500   - // TODO Auto-generated catch block
3501   - e.printStackTrace();
3502   - };
3503   - }
3504   - s.setFcsjT(fscjT);
3505   - }
3506   - List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
3507   - listInfo2.addAll(listInfo);
3508   - Collections.sort(listInfo, new compareLpFcsjType());
3509   - Collections.sort(listInfo2,new compareDirLpFcsjType());
3510   - for (int i = 0; i < listInfo.size(); i++) {
3511   - ScheduleRealInfo t = listInfo.get(i);
3512   - if (!lpName.equals(t.getLpName())) {
3513   - zdsjActual = t.getZdsjActual();
3514   - zdsj = t.getZdsj();
3515   - t.setZdsjActual("");
3516   - t.setZdsj("");
3517   - } else {
3518   - zdsj1 = t.getZdsj();
3519   - zdsjActual1 = t.getZdsjActual();
3520   - t.setZdsjActual(zdsjActual);
3521   - t.setZdsj(zdsj);
3522   - zdsj = zdsj1;
3523   - zdsjActual = zdsjActual1;
3524   - }
3525   - lpName = t.getLpName();
3526   - list.add(t);
3527   - }
3528   -/*
3529   - List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleDdrb2(line, date);
3530   - for (int i = 0; i < listInfo2.size(); i++) {
3531   - ScheduleRealInfo s = listInfo2.get(i);
3532   - if (s.getBcType().equals("out")) {
3533   - s.setRemark("1");
3534   - } else if (s.getBcType().equals("in")) {
3535   - s.setRemark("3");
3536   - } else {
3537   - s.setRemark("2");
3538   - }
3539   - String[] fcsj = s.getFcsj().split(":");
3540   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3541   -
3542   - Long fscjT = 0L;
3543   - if (fcsjL < minSj) {
3544   - Calendar calendar = new GregorianCalendar();
3545   - calendar.setTime(s.getScheduleDate());
3546   - calendar.add(calendar.DATE, 1);
3547   - s.setScheduleDate(calendar.getTime());
3548   - try {
3549   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
3550   - } catch (ParseException e) {
3551   - // TODO Auto-generated catch block
3552   - e.printStackTrace();
3553   - }
3554   -
3555   - } else {
3556   - try {
3557   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3558   - } catch (ParseException e) {
3559   - // TODO Auto-generated catch block
3560   - e.printStackTrace();
3561   - }
3562   - ;
3563   - }
3564   - s.setFcsjT(fscjT);
3565   - }*/
3566   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3567   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3568   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3569   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3570   - if (listInfo2.size() > 0) {
3571   - int a = listInfo2.size() % 3;
3572   - int b = listInfo2.size() / 3;
3573   - int x = 0, y = 0;
3574   - if (a == 2) {
3575   - x = b + 1;
3576   - y = x * 2;
3577   - } else if (a == 1) {
3578   - x = b + 1;
3579   - y = x * 2 - 1;
3580   - } else {
3581   - x = b;
3582   - y = 2 * x;
3583   -
3584   - }
3585   - for (int i = 0; i < listInfo2.size(); i++) {
3586   - ScheduleRealInfo s = listInfo2.get(i);
3587   - if (i + 1 <= x) {
3588   - xList.add(s);
3589   - } else if ((i + 1) > x && (i + 1) <= y) {
3590   - yList.add(s);
3591   - } else {
3592   - zList.add(s);
3593   - }
3594   - }
3595   - for (int i = 0; i < x; i++) {
3596   - newList.add(xList.get(i));
3597   - if (yList.size() > i) {
3598   - newList.add(yList.get(i));
3599   - } else {
3600   - newList.add(new ScheduleRealInfo());
3601   - }
3602   - if (zList.size() > i) {
3603   - newList.add(zList.get(i));
3604   - } else {
3605   - newList.add(new ScheduleRealInfo());
3606   - }
3607   -
3608   - }
3609   - }
3610   - for (int i = 0; i < newList.size(); i++) {
3611   - ScheduleRealInfo t1 = newList.get(i);
3612   - for (int j = 0; j < list.size(); j++) {
3613   - ScheduleRealInfo t2 = list.get(j);
3614   - if (t1.getId() == t2.getId()) {
3615   - t1 = t2;
3616   - }
3617   - }
3618   - }
3619   -
3620   - for (int i = 0; i < newList.size(); i++) {
3621   - ScheduleRealInfo t1 = newList.get(i);
3622   - String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
3623   - if (reamrks1.length() > 4) {
3624   - t1.setRemarks(reamrks1.substring(0, 4));
3625   - t1.setRemark(reamrks1);
3626   - } else {
3627   - t1.setRemark(reamrks1);
3628   - }
3629   - }
3630   - return newList;
3631   - }
3632   -
3633   - @Override
3634   - public List<ScheduleRealInfo> realScheduleList_zrw(String line, String date) {
3635   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3636   - String lpName = "lpName";
3637   - String zdsj = "";
3638   - String zdsjActual = "";
3639   - String zdsj1 = "";
3640   - String zdsjActual1 = "";
3641   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
3642   -
3643   - /*
3644   - * 对计划发车时间相同的班次进行排序 out最前 in最后
3645   - */
3646   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3647   - SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
3648   -
3649   - String minfcsj = "02:00";
3650   - List<Line> lineList = lineRepository.findLineByCode(line);
3651   - if (lineList.size() > 0) {
3652   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
3653   - + " id = ("
3654   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
3655   - + ")";
3656   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
3657   - }
3658   - String[] minSjs = minfcsj.split(":");
3659   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
3660   - for (int i = 0; i < listInfo.size(); i++) {
3661   - ScheduleRealInfo s = listInfo.get(i);
3662   - if (s.getBcType().equals("out")) {
3663   - s.setRemark("1");
3664   - } else if (s.getBcType().equals("in")) {
3665   - s.setRemark("3");
3666   - } else {
3667   - s.setRemark("2");
3668   - }
3669   - String[] fcsj = s.getFcsj().split(":");
3670   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
3671   -
3672   - Long fscjT = 0L;
3673   - if (fcsjL < minSj) {
3674   - Calendar calendar = new GregorianCalendar();
3675   - calendar.setTime(s.getScheduleDate());
3676   - calendar.add(calendar.DATE, 1);
3677   - Date date_sch=calendar.getTime();
3678   - try {
3679   - fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
3680   - } catch (ParseException e) {
3681   - // TODO Auto-generated catch block
3682   - e.printStackTrace();
3683   - }
3684   -
3685   - } else {
3686   - try {
3687   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
3688   - } catch (ParseException e) {
3689   - // TODO Auto-generated catch block
3690   - e.printStackTrace();
3691   - }
3692   - ;
3693   - }
3694   - s.setFcsjT(fscjT);
3695   - }
3696   -
3697   -// Collections.sort(listInfo, new compareLpFcsjType());
3698   - List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
3699   -
3700   - Collections.sort(listInfo, new compareLpFcsjType());
3701   - for (int i = 0; i < listInfo.size(); i++) {
3702   - ScheduleRealInfo t = listInfo.get(i);
3703   - if (!lpName.equals(t.getLpName())) {
3704   - zdsjActual = t.getZdsjActual();
3705   - zdsj = t.getZdsj();
3706   - t.setZdsjActual("");
3707   - t.setZdsj("");
3708   - } else {
3709   - zdsj1 = t.getZdsj();
3710   - zdsjActual1 = t.getZdsjActual();
3711   - t.setZdsjActual(zdsjActual);
3712   - t.setZdsj(zdsj);
3713   - zdsj = zdsj1;
3714   - zdsjActual = zdsjActual1;
3715   - }
3716   -
3717   -
3718   -
3719   - lpName = t.getLpName();
3720   - listInfo2.add(t);
3721   -
3722   - }
3723   -
3724   - Collections.sort(listInfo2,new compareDirLpFcsjType());
3725   - for (int i = 0; i < listInfo2.size(); i++) {
3726   - ScheduleRealInfo t=listInfo2.get(i);
3727   - list.add(t);
3728   - Set<ChildTaskPlan> childTaskPlans = t.getcTasks();
3729   - //计算营运里程,空驶里程
3730   - if (!childTaskPlans.isEmpty()) {
3731   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
3732   - Collections.sort(listit, new ComparableChild());
3733   - for (int j = 0; j < listit.size(); j++) {
3734   - ScheduleRealInfo s = new ScheduleRealInfo();
3735   - ChildTaskPlan childTaskPlan = listit.get(j);
3736   - if (childTaskPlan.getCcId() == null) {
3737   - if (childTaskPlan.isDestroy()) {
3738   - s.setFcsjActual("");
3739   - s.setZdsjActual("");
3740   - } else {
3741   - s.setFcsjActual(childTaskPlan.getStartDate());
3742   - s.setZdsjActual("");
3743   - s.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
3744   - }
3745   - s.setFcsj(childTaskPlan.getStartDate());
3746   - s.setZdsj("");
3747   - s.setQdzName(childTaskPlan.getStartStationName());
3748   - s.setZdzName(childTaskPlan.getEndStationName());
3749   - s.setRemarks(childTaskPlan.getRemarks());
3750   - s.setAdjustExps("子");
3751   - s.setLpName("");
3752   - list.add(s);
3753   - }
3754   - }
3755   - }
3756   - }
3757   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3758   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3759   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3760   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3761   - if (list.size() > 0) {
3762   - int a = list.size() % 3;
3763   - int b = list.size() / 3;
3764   - int x = 0, y = 0;
3765   - if (a == 2) {
3766   - x = b + 1;
3767   - y = x * 2;
3768   - } else if (a == 1) {
3769   - x = b + 1;
3770   - y = x * 2 - 1;
3771   - } else {
3772   - x = b;
3773   - y = 2 * x;
3774   -
3775   - }
3776   - for (int i = 0; i < list.size(); i++) {
3777   - ScheduleRealInfo s = list.get(i);
3778   - if (i + 1 <= x) {
3779   - xList.add(s);
3780   - } else if ((i + 1) > x && (i + 1) <= y) {
3781   - yList.add(s);
3782   - } else {
3783   - zList.add(s);
3784   - }
3785   - }
3786   - for (int i = 0; i < x; i++) {
3787   - newList.add(xList.get(i));
3788   - if (yList.size() > i) {
3789   - newList.add(yList.get(i));
3790   - } else {
3791   - newList.add(new ScheduleRealInfo());
3792   - }
3793   - if (zList.size() > i) {
3794   - newList.add(zList.get(i));
3795   - } else {
3796   - newList.add(new ScheduleRealInfo());
3797   - }
3798   -
3799   - }
3800   - }
3801   - /* for (int i = 0; i < newList.size(); i++) {
3802   - ScheduleRealInfo t1 = newList.get(i);
3803   - for (int j = 0; j < list.size(); j++) {
3804   - ScheduleRealInfo t2 = list.get(j);
3805   - if (t1.getId() == t2.getId()) {
3806   - t1 = t2;
3807   - }
3808   - }
3809   - }*/
3810   -
3811   - for (int i = 0; i < newList.size(); i++) {
3812   - ScheduleRealInfo t1 = newList.get(i);
3813   - String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
3814   - if (reamrks1.length() > 4) {
3815   - t1.setRemarks(reamrks1.substring(0, 4));
3816   - t1.setRemark(reamrks1);
3817   - } else {
3818   - t1.setRemark(reamrks1);
3819   - }
3820   - }
3821   - return newList;
3822   - }
3823   -
3824   - @Override
3825   - public List<ScheduleRealInfo> realScheduleList_mh_2(String line, String date) {
3826   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3827   - String lpName = "lpName";
3828   - String zdsj = "";
3829   - String zdsjActual = "";
3830   - String zdsj1 = "";
3831   - String zdsjActual1 = "";
3832   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
3833   -
3834   - for (ScheduleRealInfo s : listInfo) {
3835   - if (s.isDestroy() && s.isReissue()) {
3836   - s.setRemark("");
3837   - s.setFcsjActual(s.getDfsj());
3838   - s.setZdsjActual(s.getZdsj());
3839   - s.setStatus(2);
3840   - s.setJhlc(s.getJhlcOrig());
3841   - }
3842   - }
3843   -
3844   - for (int i = 0; i < listInfo.size(); i++) {
3845   - ScheduleRealInfo t = listInfo.get(i);
3846   - if (!lpName.equals(t.getLpName())) {
3847   - zdsjActual = t.getZdsjActual();
3848   - zdsj = t.getZdsj();
3849   - t.setZdsjActual("");
3850   - t.setZdsj("");
3851   - } else {
3852   - zdsj1 = t.getZdsj();
3853   - zdsjActual1 = t.getZdsjActual();
3854   - t.setZdsjActual(zdsjActual);
3855   - t.setZdsj(zdsj);
3856   - zdsj = zdsj1;
3857   - zdsjActual = zdsjActual1;
3858   - }
3859   - lpName = t.getLpName();
3860   - list.add(t);
3861   - }
3862   -
3863   - List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLineQp2(line, date);
3864   - List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
3865   - List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
3866   - List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
3867   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
3868   - if (listInfo2.size() > 0) {
3869   - int a = listInfo2.size() % 3;
3870   - int b = listInfo2.size() / 3;
3871   - int x = 0, y = 0;
3872   - if (a == 2) {
3873   - x = b + 1;
3874   - y = x * 2;
3875   - } else if (b == 1) {
3876   - x = b + 1;
3877   - y = x * 2 - 1;
3878   - } else {
3879   - x = b;
3880   - y = 2 * x;
3881   -
3882   - }
3883   - for (int i = 0; i < listInfo2.size(); i++) {
3884   - ScheduleRealInfo s = listInfo2.get(i);
3885   - if (i + 1 <= x) {
3886   - xList.add(s);
3887   - } else if ((i + 1) > x && (i + 1) <= y) {
3888   - yList.add(s);
3889   - } else {
3890   - zList.add(s);
3891   - }
3892   - }
3893   - for (int i = 0; i < x; i++) {
3894   - newList.add(xList.get(i));
3895   - if (yList.size() > i) {
3896   - newList.add(yList.get(i));
3897   - } else {
3898   - newList.add(new ScheduleRealInfo());
3899   - }
3900   - if (zList.size() > i) {
3901   - newList.add(zList.get(i));
3902   - } else {
3903   - newList.add(new ScheduleRealInfo());
3904   - }
3905   -
3906   - }
3907   - }
3908   - for (int i = 0; i < newList.size(); i++) {
3909   - ScheduleRealInfo t1 = newList.get(i);
3910   - for (int j = 0; j < list.size(); j++) {
3911   - ScheduleRealInfo t2 = list.get(j);
3912   - if (t1.getId() == t2.getId()) {
3913   - t1 = t2;
3914   - }
3915   - }
3916   - }
3917   - return newList;
3918   - }
3919   -
3920   - @Override
3921   - public List<ScheduleRealInfo> realScheduleListQp(String line, String date) {
3922   - List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
3923   - String lpName = "lpName";
3924   - String zdsj = "";
3925   - String zdsjActual = "";
3926   - String zdsj1 = "";
3927   - String zdsjActual1 = "";
3928   - List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
3929   - for (int i = 0; i < listInfo.size(); i++) {
3930   - ScheduleRealInfo t = listInfo.get(i);
3931   - if (!lpName.equals(t.getLpName())) {
3932   - zdsjActual = t.getZdsjActual();
3933   - zdsj = t.getZdsj();
3934   - t.setZdsjActual("");
3935   - t.setZdsj("");
3936   - } else {
3937   - zdsj1 = t.getZdsj();
3938   - zdsjActual1 = t.getZdsjActual();
3939   - t.setZdsjActual(zdsjActual);
3940   - t.setZdsj(zdsj);
3941   - zdsj = zdsj1;
3942   - zdsjActual = zdsjActual1;
3943   - }
3944   -
3945   - lpName = t.getLpName();
3946   - list.add(t);
3947   - }
3948   - return list;
3949   - }
3950   -
3951   - public List<Map<String, Object>> yesterdayDataList(String line, String date, String gsbm, String fgsbm, String jGh, String nbbm) {
3952   - List<Map<String, Object>> yesterdayDataList = new ArrayList<Map<String, Object>>();
3953   - if (line.equals("")) {
3954   - yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList(line, date, gsbm, fgsbm, nbbm);
3955   - } else {
3956   - yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList_eq(line, date, gsbm, fgsbm, nbbm);
3957   - }
3958   - List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill3(jGh, nbbm, date, gsbm, fgsbm);
3959   - for (int x = 0; x < yesterdayDataList.size(); x++) {
3960   - String jsy = yesterdayDataList.get(x).get("jGh").toString();
3961   - String clZbh = yesterdayDataList.get(x).get("clZbh").toString();
3962   - String xlbm = yesterdayDataList.get(x).get("xlBm").toString();
3963   - String lp = yesterdayDataList.get(x).get("lpName").toString();
3964   - String realExecDate=yesterdayDataList.get(x).get("realExecDate").toString();
3965   - String fcsj[] =realExecDate.split(" ");
3966   - //取出最小计划发车时间
3967   - yesterdayDataList.get(x).put("fcsj", fcsj[1]);
3968   - Map<String, Object> map = new HashMap<String, Object>();
3969   - boolean fage = true;
3970   - String company = "";
3971   - String bCompany = "";
3972   - String lineName="";
3973   - String jName="";
3974   - List<ScheduleRealInfo> listS = new ArrayList<ScheduleRealInfo>();
3975   - for (ScheduleRealInfo scheduleRealInfo : lists) {
3976   - if (scheduleRealInfo.getjGh().equals(jsy)
3977   - && scheduleRealInfo.getClZbh().equals(clZbh)
3978   - && scheduleRealInfo.getXlBm().equals(xlbm)
3979   - && scheduleRealInfo.getLpName().equals(lp)) {
3980   - if (fage) {
3981   - //根据线路代码获取公司
3982   - company = scheduleRealInfo.getGsBm();
3983   - bCompany = scheduleRealInfo.getFgsBm();
3984   - lineName = scheduleRealInfo.getXlName();
3985   - jName= scheduleRealInfo.getjName();
3986   - fage = false;
3987   - }
3988   - Set<ChildTaskPlan> cts = scheduleRealInfo.getcTasks();
3989   - if (cts != null && cts.size() > 0) {
3990   - listS.add(scheduleRealInfo);
3991   - } else {
3992   - if (scheduleRealInfo.getZdsjActual() != null && scheduleRealInfo.getFcsjActual() != null) {
3993   - listS.add(scheduleRealInfo);
3994   - }
3995   - }
3996   - }
3997   - }
3998   - yesterdayDataList.get(x).put("company", company);
3999   - yesterdayDataList.get(x).put("bCompany", bCompany);
4000   - yesterdayDataList.get(x).put("lineName", lineName);
4001   - yesterdayDataList.get(x).put("jName", jName);
4002   - Double ljgl = culateMieageService.culateLjgl(listS);
4003   - Double sjgl = culateMieageService.culateSjgl(listS);
4004   - Double ksgl = culateMieageService.culateKsgl(listS);
4005   - Double jccgl = culateMieageService.culateJccgl(listS);
4006   - Double zyygl = Arith.add(sjgl, ljgl);
4007   - Double zksgl = Arith.add(ksgl, jccgl);
4008   - Double zlc = Arith.add(zyygl, zksgl);
4009   - yesterdayDataList.get(x).put("totalKilometers", zlc);
4010   -
4011   - }
4012   - //增加顺序号
4013   - for (int i = 0; i < yesterdayDataList.size(); i++) {
4014   - if (i == 0) {
4015   - yesterdayDataList.get(i).put("seqNumber", 1);
4016   - } else {
4017   - if (yesterdayDataList.get(i - 1).get("clZbh").equals(yesterdayDataList.get(i).get("clZbh"))) {
4018   - yesterdayDataList.get(i).put("seqNumber", 1 + (int) yesterdayDataList.get(i - 1).get("seqNumber"));
4019   - } else {
4020   - yesterdayDataList.get(i).put("seqNumber", 1);
4021   - }
4022   - }
4023   - }
4024   -
4025   - return yesterdayDataList;
4026   - }
4027   -
4028   - /**
4029   - * 批量调整人车
4030   - */
4031   - @Override
4032   - public Map<String, Object> multi_tzrc(List<ChangePersonCar> cpcs, String userId) {
4033   - Map<String, Object> rs = new HashMap<>();
4034   - Set<ScheduleRealInfo> set = new HashSet<>();
4035   -
4036   - ScheduleRealInfo sch;
4037   -
4038   - String jGh = null, jName, sGh, sName;
4039   - for (ChangePersonCar cpc : cpcs) {
4040   -
4041   - sch = dayOfSchedule.get(cpc.getSchId());
4042   - if (sch == null)
4043   - continue;
4044   -
4045   - if (cpc.getClZbh() != null) {
4046   - if (!carExist(sch.getGsBm(), cpc.getClZbh())) {
4047   - rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
4048   - rs.put("status", ResponseCode.ERROR);
4049   - return rs;
4050   - } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(cpc.getClZbh()))) {
4051   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + cpc.getClZbh() + "】的车辆");
4052   - rs.put("status", ResponseCode.ERROR);
4053   - return rs;
4054   - }
4055   - }
4056   -
4057   - if (StringUtils.isNotEmpty(cpc.getJsy())) {
4058   - try{
4059   - jGh = cpc.getJsy().split("/")[0];
4060   - }catch (Exception e){
4061   - logger.error("", e);
4062   - rs.put("msg", "驾驶员参数异常!!");
4063   - rs.put("status", ResponseCode.ERROR);
4064   - return rs;
4065   - }
4066   -
4067   - jName = getPersonName(sch.getGsBm(), jGh);
4068   - if (StringUtils.isEmpty(jName)) {
4069   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
4070   - rs.put("status", ResponseCode.ERROR);
4071   - return rs;
4072   - }
4073   - }
4074   -
4075   -
4076   - //为换人换车情况表写入数据
4077   - schModifyLog.saveChangetochange(sch, cpc, userId);
4078   - //日志记录
4079   - ScheduleModifyLogger.tzrc(sch, cpc, userId);
4080   -
4081   - //换驾驶员
4082   - if (StringUtils.isNotEmpty(cpc.getJsy())) {
4083   - //换驾驶员
4084   - if (persoChange(sch, jGh))
4085   - set.add(sch);
4086   - }
4087   -
4088   - //换售票员
4089   - if (StringUtils.isNotEmpty(cpc.getSpy())
4090   - && !"/".equals(StringUtils.trim(cpc.getSpy()))) {
4091   -
4092   - sGh = cpc.getSpy().split("/")[0];
4093   - sName = getPersonName(sch.getGsBm(), sGh);
4094   - if (StringUtils.isEmpty(sName)) {
4095   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
4096   - rs.put("status", ResponseCode.ERROR);
4097   - return rs;
4098   - }
4099   -
4100   - /*if(!sGh.equals(sch.getsGh()))
4101   - sb.append(sch.getsGh() + " 换 " + sGh + ";");*/
4102   - if (persoChangeSPY(sch, sGh))
4103   - set.add(sch);
4104   - } else if (StringUtils.isNotEmpty(sch.getsGh())) {
4105   - sch.setsGh("");
4106   - sch.setsName("");
4107   - }
4108   -
4109   - //换车
4110   - if (StringUtils.isNotEmpty(cpc.getClZbh()) && !cpc.getClZbh().equals(sch.getClZbh())) {
4111   - //sb.append(sch.getClZbh() + " 换 " + cpc.getClZbh() + ";");
4112   - set.add(sch);
4113   - set.addAll(dayOfSchedule.changeCar(sch, cpc.getClZbh()));
4114   - }
4115   -
4116   - /*if(sb.length() > 0)
4117   - sch.setRemarks(sb.toString());*/
4118   -
4119   - dayOfSchedule.save(sch);
4120   - set.add(sch);
4121   -
4122   - }
4123   - rs.put("ts", set);
4124   - rs.put("status", ResponseCode.SUCCESS);
4125   - return rs;
4126   - }
4127   -
4128   - /**
4129   - * @Title: persoChange
4130   - * @Description: TODO(班次换驾驶员)
4131   - */
4132   - public boolean persoChange(ScheduleRealInfo sch, String jGh) {
4133   - if (sch.getjGh().equals(jGh))
4134   - return false;
4135   - String jName = getPersonName(sch.getGsBm(), jGh);
4136   - if (StringUtils.isNotEmpty(jName)) {
4137   -
4138   - if (jGh.indexOf("-") != -1)
4139   - sch.setjGh(jGh.substring(jGh.indexOf("-") + 1));
4140   - else
4141   - sch.setjGh(jGh);
4142   -
4143   - sch.setjName(jName);
4144   - return true;
4145   - }
4146   - return false;
4147   - }
4148   -
4149   - /**
4150   - * @Title: persoChange
4151   - * @Description: TODO(班次换售票员)
4152   - */
4153   - public boolean persoChangeSPY(ScheduleRealInfo sch, String sGh) {
4154   - if (sch.getsGh().equals(sGh))
4155   - return false;
4156   - String sName = getPersonName(sch.getGsBm(), sGh);
4157   - if (StringUtils.isNotEmpty(sName)) {
4158   - if (sGh.indexOf("-") != -1)
4159   - sch.setsGh(sGh.substring(sGh.indexOf("-") + 1));
4160   - else
4161   - sch.setsGh(sGh);
4162   - sch.setsName(sName);
4163   - return true;
4164   - }
4165   - return false;
4166   - }
4167   -
4168   - /**
4169   - * 批量待发调整
4170   - */
4171   - @Override
4172   - public Map<String, Object> multi_dftz(List<DfsjChange> dfsjcs) {
4173   - Map<String, Object> rs = new HashMap<>(), tempMap = new HashMap<>();
4174   - List<ScheduleRealInfo> list = new ArrayList<>();
4175   -
4176   - for (DfsjChange dc : dfsjcs) {
4177   - if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
4178   - continue;
4179   -
4180   - tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "2", null);
4181   -
4182   - if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
4183   - list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
4184   - }
4185   - }
4186   -
4187   - rs.put("status", ResponseCode.SUCCESS);
4188   - rs.put("ts", list);
4189   - return rs;
4190   - }
4191   -
4192   -
4193   - @Override
4194   - public Map<String, Object> findKMBC1(String jName, String clZbh,
4195   - String date, String enddate) {
4196   - List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill4(jName, clZbh, date, enddate);
4197   - DecimalFormat format = new DecimalFormat("0.00");
4198   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4199   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4200   - int jhbc = 0, cjbc = 0, ljbc = 0;
4201   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
4202   - float addMileage = 0l, remMileage = 0l;
4203   - Map<String, Object> map = new HashMap<String, Object>();
4204   - for (ScheduleRealInfo scheduleRealInfo : list) {
4205   - if (scheduleRealInfo != null) {
4206   - //计划里程(主任务过滤掉临加班次),
4207   - //烂班里程(主任务烂班),
4208   - //临加里程(主任务临加),
4209   - //计划班次,烂班班次,增加班次
4210   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
4211   - if (scheduleRealInfo.isSflj()) {
4212   - addMileage += tempJhlc;
4213   - ljbc++;
4214   - } else {
4215   - jhlc += tempJhlc;
4216   - jhbc++;
4217   - if (scheduleRealInfo.getStatus() == -1) {
4218   - remMileage += tempJhlc;
4219   - cjbc++;
4220   - }
4221   - }
4222   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
4223   - //计算营运里程,空驶里程
4224   - if (childTaskPlans.isEmpty()) {
4225   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
4226   - || scheduleRealInfo.getBcType().equals("venting")) {
4227   - ksgl += tempJhlc;
4228   - } else {
4229   - yygl += tempJhlc;
4230   - }
4231   - } else {
4232   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4233   - while (it.hasNext()) {
4234   - ChildTaskPlan childTaskPlan = it.next();
4235   - if (childTaskPlan.getMileageType().equals("empty")) {
4236   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4237   - } else {
4238   - yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4239   - }
4240   - }
4241   - }
4242   - }
4243   - }
4244   - map.put("jhlc", format.format(jhlc));
4245   - map.put("remMileage", format.format(remMileage));
4246   - map.put("addMileage", format.format(addMileage));
4247   - map.put("yygl", format.format(yygl));
4248   - map.put("ksgl", format.format(ksgl));
4249   - map.put("realMileage", format.format(yygl + ksgl));
4250   - map.put("jhbc", jhbc);
4251   - map.put("cjbc", cjbc);
4252   - map.put("ljbc", ljbc);
4253   - map.put("sjbc", jhbc - cjbc + ljbc);
4254   - return map;
4255   - }
4256   -
4257   - /**
4258   - * 调整班次类型
4259   - *
4260   - * @param id
4261   - * @param bcType
4262   - * @param remarks
4263   - * @return
4264   - */
4265   - @Override
4266   - public Map<String, Object> changeBcType(Long id, String bcType, String remarks, String majorStationName) {
4267   - Map<String, Object> rs = new HashMap<>();
4268   -
4269   - try {
4270   - ScheduleRealInfo sch = dayOfSchedule.get(id);
4271   - if (sch != null) {
4272   - sch.setBcType(bcType);
4273   - sch.setRemarks(remarks);
4274   - rs.put("status", ResponseCode.SUCCESS);
4275   - rs.put("t", sch);
4276   -
4277   - if ("major".equals(bcType)) {
4278   - sch.setMajorStationName(majorStationName);
4279   - }
4280   -
4281   - dayOfSchedule.save(sch);
4282   - }
4283   - } catch (Exception e) {
4284   - logger.error("", e);
4285   - rs.put("status", ResponseCode.ERROR);
4286   - }
4287   -
4288   - return rs;
4289   - }
4290   -
4291   - @Override
4292   - public Map<String, Object> historySave(ScheduleRealInfo sch) {
4293   - Map<String, Object> rs = new HashMap<>();
4294   - rs.put("status", ResponseCode.ERROR);
4295   -
4296   - ScheduleRealInfo oldSch = super.findById(sch.getId());
4297   - //事后日志记录
4298   - AfterwardsLogger aflog = AfterwardsLogger.start(oldSch, "事后调整");
4299   -
4300   - //换车
4301   - if (StringUtils.isNotEmpty(sch.getClZbh()) && !oldSch.getClZbh().equals(sch.getClZbh())) {
4302   - if (!carExist(oldSch.getGsBm(), sch.getClZbh())) {
4303   - rs.put("msg", "车辆 " + sch.getClZbh() + " 不存在!");
4304   - return rs;
4305   - } else {
4306   - aflog.log("换车", oldSch.getClZbh(), sch.getClZbh());
4307   - oldSch.setClZbh(sch.getClZbh());
4308   - }
4309   - }
4310   -
4311   - //换驾驶员
4312   - if (StringUtils.isNotEmpty(sch.getjGh()) && !oldSch.getjGh().equals(sch.getjGh())) {
4313   - String jName = getPersonName(oldSch.getGsBm(), sch.getjGh());
4314   - if (StringUtils.isEmpty(jName)) {
4315   - rs.put("msg", oldSch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
4316   - return rs;
4317   - }
4318   - aflog.log("换驾驶员", oldSch.getjGh() + "/" + oldSch.getjName(), sch.getjGh() + "/" + sch.getjName());
4319   - persoChange(oldSch, sch.getjGh());
4320   - }
4321   -
4322   - //换售票员
4323   - if (StringUtils.isNotEmpty(sch.getsGh()) && !oldSch.getsGh().equals(sch.getsGh())) {
4324   - String sName = getPersonName(oldSch.getGsBm(), sch.getsGh());
4325   - if (StringUtils.isEmpty(sName)) {
4326   - rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getsGh() + "】的售票员");
4327   - return rs;
4328   - }
4329   - aflog.log("换售票员", oldSch.getsGh() + "/" + oldSch.getsName(), sch.getsGh() + "/" + sch.getsName());
4330   - persoChangeSPY(oldSch, sch.getsGh());
4331   - }
4332   -
4333   - //烂班
4334   - boolean dest1 = oldSch.getStatus() == -1;
4335   - boolean dest2 = sch.getStatus() == -1;
4336   - if (!dest1 && dest2) {
4337   - oldSch.destroy();
4338   - aflog.log("烂班");
4339   - } else if (dest1 && !dest2) {
4340   - //撤销烂班
4341   - oldSch.setJhlc(oldSch.getJhlcOrig());
4342   - oldSch.setStatus(0);
4343   - oldSch.calcStatus();
4344   - oldSch.setAdjustExps(null);
4345   - aflog.log("撤销烂班");
4346   - }
4347   -
4348   - oldSch.setAdjustExps(sch.getAdjustExps());
4349   -
4350   - /**
4351   - * 修改班次里程
4352   - */
4353   - if (!oldSch.getJhlc().equals(sch.getJhlc())) {
4354   - double jhlcNum = sch.getJhlc();
4355   - aflog.log("修改班次里程", oldSch.getJhlc(), jhlcNum);
4356   - //烂班
4357   - if (jhlcNum == 0 && oldSch.getJhlcOrig() != 0)
4358   - oldSch.destroy();
4359   - else {
4360   - oldSch.setJhlc(jhlcNum);
4361   - //临加班次,实际计划一起改
4362   - if (oldSch.isSflj())
4363   - oldSch.setJhlcOrig(jhlcNum);
4364   - }
4365   - }
4366   -
4367   - //待发时间
4368   - if (!CustomStringUtils.equals(oldSch.getDfsj(), sch.getDfsj())) {
4369   - aflog.log("修改待发时间", oldSch.getDfsj(), sch.getDfsj());
4370   - oldSch.setDfsj(sch.getDfsj());
4371   - }
4372   - //实发时间
4373   - if (!CustomStringUtils.equals(oldSch.getFcsjActual(), sch.getFcsjActual())) {
4374   - aflog.log("修改实发时间", oldSch.getFcsjActual(), sch.getFcsjActual());
4375   - oldSch.setFcsjActual(sch.getFcsjActual());
4376   - }
4377   - //实际终点
4378   - if (!CustomStringUtils.equals(oldSch.getZdsjActual(), sch.getZdsjActual())) {
4379   - aflog.log("修改实达时间", oldSch.getZdsjActual(), sch.getZdsjActual());
4380   - oldSch.setZdsjActual(sch.getZdsjActual());
4381   - }
4382   -
4383   - //备注
4384   - if (!CustomStringUtils.equals(oldSch.getRemarks(), sch.getRemarks())) {
4385   - aflog.log("修改备注", oldSch.getRemarks(), sch.getRemarks());
4386   - oldSch.setRemarks(sch.getRemarks());
4387   - }
4388   -
4389   - scheduleRealInfoRepository.save(oldSch);
4390   -
4391   - aflog.end();
4392   - rs.put("status", ResponseCode.SUCCESS);
4393   - return rs;
4394   - }
4395   -
4396   - @Autowired
4397   - SvgAttributeRepository svgAttributeRepository;
4398   -
4399   - @Override
4400   - public Map<String, Object> svgAttr(String jsonStr) {
4401   - Map<String, Object> rs = new HashMap<>();
4402   -
4403   - try {
4404   - JSONObject jObj = JSONObject.parseObject(StringEscapeUtils.unescapeHtml4(jsonStr));
4405   -
4406   - SvgAttribute svgAttribute = new SvgAttribute();
4407   - svgAttribute.setLineCode(jObj.getString("lineCode"));
4408   - svgAttribute.setHideStations(jObj.getString("hideStations"));
4409   - svgAttribute.setNicknames(jObj.getString("nicknames"));
4410   - svgAttributeRepository.save(svgAttribute);
4411   -
4412   - rs.put("t", svgAttribute);
4413   - rs.put("status", ResponseCode.SUCCESS);
4414   - } catch (Exception e) {
4415   - logger.error("", e);
4416   - rs.put("status", ResponseCode.ERROR);
4417   - }
4418   - return rs;
4419   - }
4420   -
4421   - @Override
4422   - public Map<String, Object> findSvgAttr(String idx) {
4423   - Map<String, Object> rs = new HashMap<>();
4424   - try {
4425   - List<String> lineCodes = Splitter.on(",").splitToList(idx);
4426   - List<SvgAttribute> list = svgAttributeRepository.findSvgAttr(lineCodes);
4427   -
4428   - rs.put("status", ResponseCode.SUCCESS);
4429   - rs.put("list", list);
4430   - } catch (Exception e) {
4431   - logger.error("", e);
4432   - rs.put("status", ResponseCode.ERROR);
4433   - }
4434   - return rs;
4435   - }
4436   -
4437   - @Override
4438   - public Map<String, Object> addRemarks(Long id, String remarks) {
4439   - Map<String, Object> rs = new HashMap<>();
4440   - try {
4441   - ScheduleRealInfo sch = dayOfSchedule.get(id);
4442   - sch.addRemarks(remarks);
4443   -
4444   - rs.put("status", ResponseCode.SUCCESS);
4445   - rs.put("t", sch);
4446   - } catch (Exception e) {
4447   - logger.error("", e);
4448   - rs.put("status", ResponseCode.ERROR);
4449   - }
4450   - return rs;
4451   - }
4452   -
4453   - @Override
4454   - public List<Map<String, Object>> yesterdayDataList(String line) {
4455   - // TODO Auto-generated method stub
4456   - return null;
4457   - }
4458   -
4459   - @Override
4460   - public List<ScheduleRealInfo> exportWaybillQp(String clZbh, String date, String line) {
4461   - // TODO Auto-generated method stub
4462   - ReportUtils ee = new ReportUtils();
4463   - ReportRelatedUtils rru = new ReportRelatedUtils();
4464   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
4465   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4466   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
4467   -
4468   - DecimalFormat format = new DecimalFormat("0.00");
4469   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4470   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4471   - int jhbc = 0, cjbc = 0, ljbc = 0;
4472   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0;
4473   - float addMileage = 0l, remMileage = 0l, addgl = 0, remgl = 0;
4474   - int xyz = 1;
4475   - Map<String, Object> map;
4476   - for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
4477   - if (scheduleRealInfo != null) {
4478   - //计算计划里程(主任务过滤掉临加班次),烂班里程,临加里程,计划班次,烂班班次,增加班次
4479   - //计划里程(主任务过滤掉临加班次),
4480   - //烂班里程(主任务烂班),
4481   - //临加里程(主任务临加),
4482   - //计划班次,烂班班次,增加班次
4483   - double jh = 0, sj = 0;
4484   - tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
4485   - if (scheduleRealInfo.isSflj()) {
4486   - ljbc++;
4487   - } else {
4488   - if (!(scheduleRealInfo.getBcType().equals("in")
4489   - || scheduleRealInfo.getBcType().equals("out"))) {
4490   - jhbc++;
4491   - jh += tempJhlc;
4492   - }
4493   - if (scheduleRealInfo.getStatus() == -1) {
4494   - remMileage += tempJhlc;
4495   - cjbc++;
4496   - }
4497   - }
4498   - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
4499   - //计算营运里程,空驶里程
4500   - if (childTaskPlans.isEmpty()) {
4501   - if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
4502   - ) {
4503   - jcclc += tempJhlc;
4504   - } else {
4505   - if (scheduleRealInfo.getStatus() != -1) {
4506   - if (scheduleRealInfo.isSflj()) {
4507   - addMileage += tempJhlc;
4508   - }
4509   - sj += tempJhlc;
4510   - }
4511   - }
4512   - } else {
4513   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4514   - while (it.hasNext()) {
4515   - ChildTaskPlan childTaskPlan = it.next();
4516   - if (childTaskPlan.getMileageType().equals("empty")) {
4517   - if (childTaskPlan.isDestroy()) {
4518   - remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4519   - } else {
4520   - if (scheduleRealInfo.isSflj()) {
4521   - addMileage += tempJhlc;
4522   - }
4523   - ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4524   - }
4525   - } else {
4526   - if (childTaskPlan.isDestroy()) {
4527   - remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4528   -// cjbc++;
4529   - } else {
4530   - if (scheduleRealInfo.isSflj()) {
4531   - addMileage += tempJhlc;
4532   - }
4533   - sj += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
4534   - }
4535   - }
4536   - }
4537   - }
4538   -
4539   - if (!(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out"))) {
4540   - map = new HashMap<String, Object>();
4541   - try {
4542   - scheduleRealInfo.setBcs(xyz);
4543   - xyz++;
4544   - Set<ChildTaskPlan> cs = scheduleRealInfo.getcTasks();
4545   - Double sjlc = 0.0;
4546   - if (!cs.isEmpty()) {
4547   - Iterator<ChildTaskPlan> it = cs.iterator();
4548   - while (it.hasNext()) {
4549   - ChildTaskPlan c = it.next();
4550   - if (!c.isDestroy()) {
4551   - sjlc += c.getMileage() == null ? 0 : c.getMileage();
4552   - }
4553   -
4554   - }
4555   - } else {
4556   - if (scheduleRealInfo.getStatus() != -1) {
4557   - sjlc = scheduleRealInfo.getJhlc();
4558   - }
4559   - }
4560   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
4561   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
4562   - scheduleRealInfo.setSjlc(format.format(sjlc));
4563   - map = rru.getMapValue(scheduleRealInfo);
4564   - String zdsj = scheduleRealInfo.getZdsj();
4565   - String zdsjActual = scheduleRealInfo.getZdsjActual();
4566   - if (zdsj != null && zdsjActual != null &&
4567   - !zdsj.equals(zdsjActual)) {
4568   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
4569   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
4570   - if (zdsj.compareTo(zdsjActual) > 0) {
4571   - if (zdsjT - zdsjAT > 1000) {
4572   - map.put("fast", "");
4573   - map.put("slow", zdsjAT - zdsjT + 1440);
4574   - } else {
4575   - map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
4576   - map.put("slow", "");
4577   - }
4578   - } else {
4579   - if (zdsjAT - zdsjT > 1000) {
4580   - map.put("fast", zdsjT - zdsjAT + 1440);
4581   - map.put("slow", "");
4582   - } else {
4583   - map.put("fast", "");
4584   - map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
4585   - }
4586   - }
4587   - } else {
4588   - map.put("fast", "");
4589   - map.put("slow", "");
4590   - }
4591   - listMap.add(map);
4592   - } catch (Exception e) {
4593   - e.printStackTrace();
4594   - }
4595   - }
4596   - jhlc += jh;
4597   - yygl += sj;
4598   - if (jh > sj) {
4599   - remgl += jh - sj;
4600   - } else {
4601   - addgl += sj - jh;
4602   - }
4603   - }
4604   - }
4605   -
4606   -
4607   - List<Ylxxb> listYlxxb = ylxxbRepository.queryListYlxxb(clZbh, date);
4608   - Double jzl = 0.0;
4609   - for (int t = 0; t < listYlxxb.size(); t++) {
4610   - Ylxxb y = listYlxxb.get(t);
4611   - jzl += y.getJzl();
4612   - }
4613   -
4614   - //计算里程和班次数,并放入Map里
4615   - map = findKMBCQp(clZbh, date, line);
4616   - map.put("jzl", jzl);
4617   -// map.put("jhlc", format.format(jhlc + jcclc));
4618   -// map.put("yygljh", format.format(jhlc));
4619   -// map.put("ssgl", format.format(remMileage));
4620   -// map.put("ksgl", format.format(ksgl));
4621   -// map.put("yyglsj", format.format(yygl));
4622   -// map.put("jhbc", jhbc);
4623   -// map.put("jcclc", jcclc);
4624   -//
4625   -// map.put("ljgl", format.format(addMileage));
4626   -// map.put("ssbc", cjbc);
4627   -// map.put("ysgl", format.format(yygl));
4628   -// map.put("sjbc", jhbc - cjbc + ljbc);
4629   -// map.put("zgl", format.format(yygl + ksgl + jcclc));
4630   -// map.put("ljbc", ljbc);
4631   -
4632   - String zdp = "", zwdp = "", wdp = "";
4633   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4634   - List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59");
4635   - try {
4636   - Long fcsj1 = sdf.parse(date + " 03:00").getTime();
4637   - Long fcsj2 = sdf.parse(date + " 11:00").getTime();
4638   - Long fcsj3 = sdf.parse(date + " 22:00").getTime();
4639   - for (int i = 0; i < listDtuy.size(); i++) {
4640   - DutyEmployee t = listDtuy.get(i);
4641   - Long ts = t.getTs();
4642   - if (ts > fcsj1 && ts < fcsj2) {
4643   - if (zdp.indexOf(t.getuName()) == -1) {
4644   - zdp += t.getuName() + ",";
4645   -
4646   - }
4647   - } else if (ts > fcsj2 && ts < fcsj3) {
4648   - if (zwdp.indexOf(t.getuName()) == -1) {
4649   - zwdp += t.getuName() + ",";
4650   - }
4651   - } else {
4652   - if (wdp.indexOf(t.getuName()) == -1) {
4653   - wdp += t.getuName() + ",";
4654   - }
4655   - }
4656   - }
4657   - } catch (ParseException e) {
4658   - // TODO Auto-generated catch block
4659   - e.printStackTrace();
4660   - }
4661   - map.put("zdp", zdp);
4662   - map.put("zwdp", zwdp);
4663   - map.put("wdp", wdp);
4664   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
4665   - list.add(listMap.iterator());
4666   - ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/waybill_qingpu.xls",
4667   - path + "export/" + date + "-" + clZbh + "-行车路单.xls");
4668   -
4669   - return scheduleRealInfos;
4670   - }
4671   -
4672   - @Override
4673   - public Map<String, Object> findKMBCQp(String clZbh, String date, String line) {
4674   - // TODO Auto-generated method stub
4675   - List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4676   - DecimalFormat format = new DecimalFormat("0.00");
4677   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
4678   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
4679   - int jhbc = 0, cjbc = 0, ljbc = 0, sjbc = 0;
4680   - double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0, ljjcclc = 0, jhjcclc = 0;
4681   - double addMileage = 0, remMileage = 0, addgl = 0, remgl = 0;
4682   - Map<String, Object> map = new HashMap<String, Object>();
4683   - jhlc = culateMieageService.culateJhgl(lists);
4684   - jcclc = culateMieageService.culateJccgl(lists);
4685   - jhjcclc = culateMieageService.culateJhJccgl(lists);
4686   - remMileage = culateMieageService.culateLbgl(lists);
4687   - ksgl = culateMieageService.culateKsgl(lists);
4688   - yygl = culateMieageService.culateSjgl(lists);
4689   - jhbc = culateMieageService.culateJhbc(lists, "");
4690   - addMileage = culateMieageService.culateLjgl(lists);
4691   - cjbc = culateMieageService.culateLbbc(lists);
4692   - sjbc = culateMieageService.culateSjbc(lists, "");
4693   - ljbc = culateMieageService.culateLjbc(lists, "");
4694   - double zyygl = Arith.add(yygl, addMileage);
4695   - double zksgl = Arith.add(ksgl, jcclc);
4696   - map.put("jhlc", Arith.add(jhlc, jhjcclc));
4697   - map.put("yygljh", jhlc);
4698   - map.put("ssgl", remMileage);
4699   - map.put("ksgl", ksgl);
4700   - map.put("yyglsj", Arith.add(yygl, addMileage));
4701   - map.put("jcclc", jcclc);
4702   - map.put("jhbc", jhbc);
4703   - map.put("ljgl", addMileage);
4704   - map.put("ssbc", cjbc);
4705   - map.put("ysgl", Arith.add(yygl, addMileage));
4706   - map.put("sjbc", sjbc);
4707   - map.put("zgl", Arith.add(zyygl, zksgl));
4708   - map.put("ljbc", ljbc);
4709   -
4710   - return map;
4711   - }
4712   -
4713   - @Override
4714   - public List<ScheduleRealInfo> queryListWaybillQp(String clZbh, String date, String line) {
4715   - // TODO Auto-generated method stub
4716   - DecimalFormat format = new DecimalFormat("0.00");
4717   - List<ScheduleRealInfo> list = null;
4718   - list = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
4719   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
4720   - for (int i = 0; i < list.size(); i++) {
4721   - ScheduleRealInfo s = list.get(i);
4722   - if (!(s.getBcType().equals("in") || s.getBcType().equals("out"))) {
4723   - String remarks = "";
4724   - Double sjlc = 0.0;
4725   - if (s.getRemarks() != null) {
4726   - remarks += s.getRemarks();
4727   - }
4728   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
4729   - if (!childTaskPlans.isEmpty()) {
4730   - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
4731   - while (it.hasNext()) {
4732   - ChildTaskPlan c = it.next();
4733   - if (c.getRemarks() != null && c.getRemarks().length() > 0) {
4734   - if (remarks.indexOf(c.getRemarks()) == -1) {
4735   - remarks += c.getRemarks();
4736   - }
4737   - }
4738   -
4739   - if (!c.isDestroy()) {
4740   - if (c.getMileageType().equals("service")) {
4741   - sjlc += c.getMileage() == null ? 0 : c.getMileage();
4742   - }
4743   - }
4744   -
4745   - }
4746   - } else {
4747   - if (s.getStatus() != -1) {
4748   - sjlc = s.getJhlc();
4749   - }
4750   - }
4751   - s.setSjlc(format.format(sjlc));
4752   - s.setRemarks(remarks);
4753   - newList.add(s);
4754   - }
4755   -
4756   - }
4757   -
4758   - return newList;
4759   - }
4760   -
4761   - @Override
4762   - public Map<String, Object> MapById(Long id) {
4763   - // TODO Auto-generated method stub
4764   - Map<String, Object> dMap=new HashMap<>();
4765   - dMap.put("dGroup_eq", "oilType");
4766   - Iterator<Dictionary> it= dictionaryService.list(dMap).iterator();
4767   - while (it.hasNext()) {
4768   - Dictionary d=it.next();
4769   - dMap.put(d.getdCode(), d.getdName());
4770   - }
4771   - Map<String, Object> map = new HashMap<String, Object>();
4772   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4773   - ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
4774   - String xlbm = s.getXlBm();
4775   - String fcrq = s.getScheduleDateStr();
4776   -
4777   - int type = 2;
4778   - Double ccyl = 0.0;
4779   - Double jcyl = 0.0;
4780   - Double yh = 0.0;
4781   - Double jzl = 0.0;
4782   - Double zlc = 0.0;
4783   - String rylx="";
4784   - List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
4785   - if (listCars.size() > 0) {
4786   - if (listCars.get(0).getSfdc() != null) {
4787   - if (listCars.get(0).getSfdc()) {
4788   - List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
4789   - type = 1;
4790   - for (int i = 0; i < listDlb.size(); i++) {
4791   - Dlb d = listDlb.get(i);
4792   - if (d.getLp() == null) {
4793   - ccyl = Arith.add(ccyl, d.getCzcd());
4794   - jcyl = Arith.add(jcyl, d.getJzcd());
4795   - yh = Arith.add(yh, d.getHd());
4796   - jzl = Arith.add(jzl, d.getCdl());
4797   - zlc = Arith.add(zlc, d.getZlc());
4798   - } else {
4799   - if (d.getLp().equals(s.getLpName())) {
4800   - ccyl = Arith.add(ccyl, d.getCzcd());
4801   - jcyl = Arith.add(jcyl, d.getJzcd());
4802   - yh = Arith.add(yh, d.getHd());
4803   - jzl = Arith.add(jzl, d.getCdl());
4804   - zlc = Arith.add(zlc, d.getZlc());
4805   - }
4806   - }
4807   -
4808   - }
4809   - } else {
4810   - List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
4811   - type = 0;
4812   - for (int i = 0; i < listYlb.size(); i++) {
4813   - Ylb y = listYlb.get(i);
4814   - if (y.getLp() == null) {
4815   - ccyl = Arith.add(ccyl, y.getCzyl());
4816   - jcyl = Arith.add(jcyl, y.getJzyl());
4817   - yh = Arith.add(yh, y.getYh());
4818   - jzl = Arith.add(jzl, y.getJzl());
4819   - zlc = Arith.add(zlc, y.getZlc());
4820   - if(dMap.get(y.getRylx())!=null)
4821   - rylx =dMap.get(y.getRylx()).toString();
4822   - } else {
4823   - if (y.getLp().equals(s.getLpName())) {
4824   - ccyl = Arith.add(ccyl, y.getCzyl());
4825   - jcyl = Arith.add(jcyl, y.getJzyl());
4826   - yh = Arith.add(yh, y.getYh());
4827   - jzl = Arith.add(jzl, y.getJzl());
4828   - zlc = Arith.add(zlc, y.getZlc());
4829   - if(dMap.get(y.getRylx())!=null)
4830   - rylx =dMap.get(y.getRylx()).toString();
4831   - }
4832   - }
4833   - }
4834   - }
4835   - }
4836   - }
4837   -
4838   - map.put("rylx", "加注类别:"+rylx);
4839   - map.put("jzl", jzl);
4840   - map.put("yh", yh);
4841   - map.put("ccyl", ccyl);
4842   - map.put("jcyl", jcyl);
4843   - map.put("type", type);
4844   - map.put("zlc", zlc);
4845   - map.put("xlName", s.getXlName());
4846   - map.put("clZbh", s.getClZbh());
4847   - map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
4848   - map.put("fcsjActual", s.getFcsjActual());
4849   - map.put("zdzName", s.getZdzName());
4850   - map.put("scheduleDate", s.getScheduleDateStr());
4851   - map.put("lpName", s.getLpName());
4852   - String zdp = "", zwdp = "", wdp = "";
4853   - String zdpT = "", zwdpT = "", wdpT = "";
4854   - String dbdp = "";
4855   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
4856   - try {
4857   - Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
4858   - Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
4859   - Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
4860   - for (int i = 0; i < list.size(); i++) {
4861   - DutyEmployee t = list.get(i);
4862   - if (dbdp.indexOf(t.getuName()) == -1) {
4863   - if (!(dbdp.length() > 0)) {
4864   - dbdp = t.getuName();
4865   - } else {
4866   - dbdp += "," + t.getuName();
4867   - }
4868   - }
4869   - Long ts = t.getTs();
4870   - if (ts > fcsj1 && ts < fcsj2) {
4871   - if (zdp.indexOf(t.getuName()) == -1) {
4872   - if (!(zdp.length() > 0)) {
4873   - zdpT = t.getuName() + "...";
4874   - }
4875   - zdp += t.getuName() + ",";
4876   -
4877   - }
4878   - } else if (ts > fcsj2 && ts < fcsj3) {
4879   - if (zwdp.indexOf(t.getuName()) == -1) {
4880   - if (!(zwdp.length() > 0)) {
4881   - zwdpT = t.getuName() + "...";
4882   - }
4883   - zwdp += t.getuName() + ",";
4884   - }
4885   - } else {
4886   - if (wdp.indexOf(t.getuName()) == -1) {
4887   - if (!(wdp.length() > 0)) {
4888   - wdpT = t.getuName() + "...";
4889   - }
4890   - wdp += t.getuName() + ",";
4891   - }
4892   - }
4893   - }
4894   - } catch (ParseException e) {
4895   - // TODO Auto-generated catch block
4896   - e.printStackTrace();
4897   - }
4898   - map.put("zdp", zdp);
4899   - map.put("zwdp", zwdp);
4900   - map.put("wdp", wdp);
4901   - map.put("zdpT", zdpT);
4902   - map.put("zwdpT", zwdpT);
4903   - map.put("wdpT", wdpT);
4904   - map.put("dbdp", dbdp);
4905   - return map;
4906   - }
4907   -
4908   - @Override
4909   - public Map<String, Object> MapByIdQp(Long id) {
4910   - // TODO Auto-generated method stub
4911   - Map<String, Object> map = new HashMap<String, Object>();
4912   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4913   - ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
4914   - String xlbm = s.getXlBm();
4915   - String fcrq = s.getScheduleDateStr();
4916   -
4917   - int type = 0;
4918   - Double ccyl = 0.0;
4919   - Double jcyl = 0.0;
4920   - Double yh = 0.0;
4921   - Double jzl = 0.0;
4922   - Double zlc = 0.0;
4923   -// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
4924   -// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
4925   -// if(listYlb.size()>0){
4926   -// type=0;
4927   -// for (int i = 0; i < listYlb.size(); i++) {
4928   -// Ylb y = listYlb.get(i);
4929   -// if(y.getLp()==null){
4930   -// ccyl=Arith.add(ccyl, y.getCzyl());
4931   -// jcyl=Arith.add(jcyl, y.getJzyl());
4932   -// yh =Arith.add(yh ,y.getYh());
4933   -// jzl =Arith.add(jzl, y.getJzl());
4934   -// zlc =Arith.add(zlc, y.getZlc());
4935   -// }else{
4936   -// if(y.getLp().equals(s.getLpName())){
4937   -// ccyl=Arith.add(ccyl, y.getCzyl());
4938   -// jcyl=Arith.add(jcyl, y.getJzyl());
4939   -// yh =Arith.add(yh ,y.getYh());
4940   -// jzl =Arith.add(jzl, y.getJzl());
4941   -// zlc =Arith.add(zlc, y.getZlc());
4942   -// }
4943   -// }
4944   -//
4945   -// }
4946   -// }else{
4947   -// type=1;
4948   -// for (int i = 0; i < listDlb.size(); i++) {
4949   -// Dlb d=listDlb.get(i);
4950   -// if(d.getLp()==null){
4951   -// ccyl=Arith.add(ccyl, d.getCzcd());
4952   -// jcyl=Arith.add(jcyl, d.getJzcd());
4953   -// yh =Arith.add(yh ,d.getHd());
4954   -// jzl =Arith.add(jzl, d.getCdl());
4955   -// zlc =Arith.add(zlc, d.getZlc());
4956   -// }else{
4957   -// if(d.getLp().equals(s.getLpName())){
4958   -// ccyl=Arith.add(ccyl, d.getCzcd());
4959   -// jcyl=Arith.add(jcyl, d.getJzcd());
4960   -// yh =Arith.add(yh ,d.getHd());
4961   -// jzl =Arith.add(jzl, d.getCdl());
4962   -// zlc =Arith.add(zlc, d.getZlc());
4963   -// }
4964   -// }
4965   -//
4966   -// }
4967   -// }
4968   -
4969   - List<Ylxxb> listylxxb = ylxxbRepository.queryListYlxxb(s.getClZbh(), fcrq);
4970   - for (int i = 0; i < listylxxb.size(); i++) {
4971   - Ylxxb t = listylxxb.get(i);
4972   - jzl = Arith.add(jzl, t.getJzl());
4973   - }
4974   - map.put("jzl", jzl);
4975   - map.put("yh", yh);
4976   - map.put("ccyl", ccyl);
4977   - map.put("jcyl", jcyl);
4978   - map.put("type", type);
4979   - map.put("zlc", zlc);
4980   - map.put("xlName", s.getXlName());
4981   - map.put("clZbh", s.getClZbh());
4982   - map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
4983   - map.put("fcsjActual", s.getFcsjActual());
4984   - map.put("zdzName", s.getZdzName());
4985   - map.put("scheduleDate", s.getScheduleDateStr());
4986   - map.put("lpName", s.getLpName());
4987   - String zdp = "", zwdp = "", wdp = "";
4988   - String zdpT = "", zwdpT = "", wdpT = "";
4989   - String dbdp = "";
4990   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
4991   - try {
4992   - Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
4993   - Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
4994   - Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
4995   - for (int i = 0; i < list.size(); i++) {
4996   - DutyEmployee t = list.get(i);
4997   - if (dbdp.indexOf(t.getuName()) == -1) {
4998   - if (!(dbdp.length() > 0)) {
4999   - dbdp = t.getuName();
5000   - } else {
5001   - dbdp += "," + t.getuName();
5002   - }
5003   - }
5004   - Long ts = t.getTs();
5005   - if (ts > fcsj1 && ts < fcsj2) {
5006   - if (zdp.indexOf(t.getuName()) == -1) {
5007   - if (!(zdp.length() > 0)) {
5008   - zdpT = t.getuName() + "...";
5009   - }
5010   - zdp += t.getuName() + ",";
5011   -
5012   - }
5013   - } else if (ts > fcsj2 && ts < fcsj3) {
5014   - if (zwdp.indexOf(t.getuName()) == -1) {
5015   - if (!(zwdp.length() > 0)) {
5016   - zwdpT = t.getuName() + "...";
5017   - }
5018   - zwdp += t.getuName() + ",";
5019   - }
5020   - } else {
5021   - if (wdp.indexOf(t.getuName()) == -1) {
5022   - if (!(wdp.length() > 0)) {
5023   - wdpT = t.getuName() + "...";
5024   - }
5025   - wdp += t.getuName() + ",";
5026   - }
5027   - }
5028   - }
5029   - } catch (ParseException e) {
5030   - // TODO Auto-generated catch block
5031   - e.printStackTrace();
5032   - }
5033   - map.put("zdp", zdp);
5034   - map.put("zwdp", zwdp);
5035   - map.put("wdp", wdp);
5036   - map.put("zdpT", zdpT);
5037   - map.put("zwdpT", zwdpT);
5038   - map.put("wdpT", wdpT);
5039   - map.put("dbdp", dbdp);
5040   - return map;
5041   - }
5042   -
5043   - @Override
5044   - public List<Map<String, Object>> scheduleDailyQp(String line, String date) {
5045   - // TODO Auto-generated method stub
5046   - List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
5047   - List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleDailyQp(line, date);
5048   - Map<String, Object> map = null;
5049   - String lp = "lp";
5050   - String jgh = "jgh";
5051   - String clzbh = "clzbh";
5052   - int bcs = 0;
5053   - String thclzbh = "";
5054   - String sgh = "sgh";
5055   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5056   - ScheduleRealInfo scheduleRealInfo = scheduleRealInfos.get(i);
5057   - if (scheduleRealInfo.getLpName().equals(lp)) {
5058   - bcs++;
5059   - String fcsj = scheduleRealInfo.getFcsj();
5060   -
5061   - if (!clzbh.equals(scheduleRealInfo.getClZbh())) {
5062   - clzbh = scheduleRealInfo.getClZbh();
5063   - if (thclzbh == "") {
5064   - thclzbh += scheduleRealInfo.getClZbh() + ",";
5065   - } else {
5066   - thclzbh += scheduleRealInfo.getClZbh();
5067   - }
5068   - map.put("thclzbh", thclzbh);
5069   - }
5070   -
5071   - if (!jgh.equals(scheduleRealInfo.getjGh())) {
5072   - jgh = scheduleRealInfo.getjGh();
5073   - if (map.get("jjb2") != null) {
5074   - map.put("jjb3", scheduleRealInfo.getjGh() + "/" +
5075   - scheduleRealInfo.getFcsjActual());
5076   -
5077   - } else {
5078   - map.put("jjb2", scheduleRealInfo.getjGh() + "/" +
5079   - scheduleRealInfo.getFcsjActual());
5080   - }
5081   -
5082   - }
5083   -
5084   - if (scheduleRealInfo.getsGh() != null) {
5085   - if (!scheduleRealInfo.getsGh().equals(sgh)) {
5086   - sgh = scheduleRealInfo.getsGh() == null ? "" : scheduleRealInfo.getsGh();
5087   - if (!sgh.equals("")) {
5088   - if (map.get("sjb1") != null) {
5089   - if (map.get("sjb2") != null) {
5090   - map.put("sjb3", scheduleRealInfo.getsGh() + "/" +
5091   - scheduleRealInfo.getFcsjActual());
5092   - } else {
5093   - map.put("sjb2", scheduleRealInfo.getsGh() + "/" +
5094   - scheduleRealInfo.getFcsjActual());
5095   - }
5096   - } else {
5097   - map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
5098   - scheduleRealInfo.getFcsjActual());
5099   - }
5100   - }
5101   - }
5102   - }
5103   - if (scheduleRealInfo.getFcsjActual() != null) {
5104   - String fcsjs[] = fcsj.split(":");
5105   - String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
5106   - int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
5107   - int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
5108   - map.put("cz" + bcs, b - a);
5109   - } else {
5110   - map.put("cz" + bcs, "无");
5111   - }
5112   - map.put("lp", scheduleRealInfo.getLpName());
5113   - map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
5114   - map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
5115   -
5116   - if (i < scheduleRealInfos.size() - 1) {
5117   - if (!scheduleRealInfos.get(i + 1).getLpName().equals
5118   - (scheduleRealInfos.get(i).getLpName())) {
5119   - list.add(map);
5120   - lp = "lp";
5121   - jgh = "jgh";
5122   - clzbh = "clzbh";
5123   - bcs = 0;
5124   - thclzbh = "";
5125   - sgh = "sgh";
5126   - }
5127   - } else {
5128   - list.add(map);
5129   - }
5130   - } else {
5131   - bcs = 1;
5132   - map = new HashMap<String, Object>();
5133   - lp = scheduleRealInfo.getLpName();
5134   - jgh = scheduleRealInfo.getjGh();
5135   - clzbh = scheduleRealInfo.getClZbh();
5136   - if (scheduleRealInfo.getsGh() != null) {
5137   - sgh = scheduleRealInfo.getsGh();
5138   - map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
5139   - scheduleRealInfo.getFcsjActual());
5140   - }
5141   - String fcsj = scheduleRealInfo.getFcsj();
5142   - scheduleRealInfo.getFcsjActual();
5143   - map.put("jjb1", jgh + "/" + scheduleRealInfo.getFcsjActual());
5144   - map.put("cccl", clzbh);
5145   -
5146   - if (scheduleRealInfo.getFcsjActual() != null) {
5147   - String fcsjs[] = fcsj.split(":");
5148   - String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
5149   - int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
5150   - int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
5151   - map.put("cz" + bcs, b - a);
5152   - } else {
5153   - map.put("cz" + bcs, "无");
5154   - }
5155   -
5156   -
5157   - map.put("lp", scheduleRealInfo.getLpName());
5158   - map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
5159   - map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
5160   -
5161   - if (i < scheduleRealInfos.size() - 1) {
5162   - if (!scheduleRealInfos.get(i + 1).getLpName().equals
5163   - (scheduleRealInfos.get(i).getLpName())) {
5164   - list.add(map);
5165   - lp = "lp";
5166   - jgh = "jgh";
5167   - clzbh = "clzbh";
5168   - bcs = 0;
5169   - thclzbh = "";
5170   - sgh = "sgh";
5171   - }
5172   - } else {
5173   - list.add(map);
5174   - }
5175   - }
5176   -
5177   - }
5178   - return list;
5179   - }
5180   -
5181   -
5182   - @Override
5183   - public List<Map<String, Object>> scheduleDailyExport(Map<String, Object> map) {
5184   - String line = map.get("line").toString();
5185   - String date = map.get("date").toString();
5186   - String xlName = map.get("xlName").toString();
5187   - String state = map.get("state").toString();
5188   - String type = map.get("type").toString();
5189   - String genre =map.get("genre").toString();
5190   - String df="";
5191   - if(map.get("df")!=null){
5192   - df=map.get("df").toString();
5193   - }
5194   -
5195   - List<Map<String, Object>> dataList2 = new ArrayList<Map<String, Object>>();
5196   - List<Map<String, Object>> dataList3 = new ArrayList<Map<String, Object>>();
5197   - List<Map<String, Object>> list1 = this.statisticsDaily(line, date, xlName, null);
5198   - List<ScheduleRealInfo> list2 = this.queryUserInfo(line, date, state);
5199   - List<ScheduleRealInfo> list3 = new ArrayList<ScheduleRealInfo>();
5200   - if(genre.equals("qp"))
5201   - list3=this.realScheduleListQp(line, date);
5202   - else if(genre.equals("zrw"))
5203   - list3=this.realScheduleList_zrw(line, date);
5204   - else
5205   - list3=this.realScheduleList(line, date);
5206   - Map<String, Object> nMap = new HashMap<String, Object>();
5207   - nMap.put("date", xlName + date);
5208   - nMap.put("jls", list1.get(0).get("jls"));
5209   - nMap.put("sjgl", list1.get(0).get("sjgl"));
5210   - for (Map<String, Object> m : list1) {
5211   -// m.put("ssgl", m.get("ssgl"));
5212   -// m.put("ssbc", m.get("ssbc"));
5213   -// m.put("ssgl_lz", m.get("ssgl_lz") + " / " + m.get("ssbc_lz"));
5214   -// m.put("ssgl_dm", m.get("ssgl_dm") + " / " + m.get("ssbc_dm"));
5215   -// m.put("ssgl_gz", m.get("ssgl_gz") + " / " + m.get("ssbc_gz"));
5216   -// m.put("ssgl_jf", m.get("ssgl_jf") + " / " + m.get("ssbc_jf"));
5217   -// m.put("ssgl_zs", m.get("ssgl_zs") + " / " + m.get("ssbc_zs"));
5218   -// m.put("ssgl_qr", m.get("ssgl_qr") + " / " + m.get("ssbc_qr"));
5219   -// m.put("ssgl_qc", m.get("ssgl_qc") + " / " + m.get("ssbc_qc"));
5220   -// m.put("ssgl_kx", m.get("ssgl_kx") + " / " + m.get("ssbc_kx"));
5221   -// m.put("ssgl_qh", m.get("ssgl_qh") + " / " + m.get("ssbc_qh"));
5222   -// m.put("ssgl_yw", m.get("ssgl_yw") + " / " + m.get("ssbc_yw"));
5223   -// m.put("ssgl_other", m.get("ssgl_other") + " / " + m.get("ssbc_other"));
5224   - }
5225   -
5226   - int size = 0;
5227   - Map<String, Object> tempMap = new HashMap<String, Object>();
5228   - for (int i = 0; i < list2.size(); i++) {
5229   - Object obj = (Object) list2.get(i);
5230   - Object[] objs = (Object[]) obj;
5231   - if (size == 5) {
5232   - size = 0;
5233   - dataList2.add(tempMap);
5234   - tempMap = new HashMap<String, Object>();
5235   - }
5236   - tempMap.put("lp" + size, objs[3]);
5237   - tempMap.put("ch" + size, objs[2]);
5238   - tempMap.put("jz" + size, objs[1] + "/" + objs[4]);
5239   - tempMap.put("sz" + size, "");
5240   - tempMap.put("jw" + size, "");
5241   - tempMap.put("sw" + size, "");
5242   -
5243   - size++;
5244   - }
5245   - if (size < 5) {
5246   - for (; size < 5; size++) {
5247   - tempMap.put("lp" + size, "");
5248   - tempMap.put("ch" + size, "");
5249   - tempMap.put("jz" + size, "");
5250   - tempMap.put("sz" + size, "");
5251   - tempMap.put("jw" + size, "");
5252   - tempMap.put("sw" + size, "");
5253   - }
5254   - }
5255   -
5256   - dataList2.add(tempMap);
5257   -/*
5258   - size = 0;
5259   - tempMap = new HashMap<String, Object>();
5260   - for (ScheduleRealInfo schedule : list3) {
5261   - if (size == 3) {
5262   - size = 0;
5263   - dataList3.add(tempMap);
5264   - tempMap = new HashMap<String, Object>();
5265   - }
5266   - tempMap.put("lpName" + size, schedule.getLpName());
5267   - tempMap.put("qdzName" + size, schedule.getQdzName());
5268   - tempMap.put("zdsj" + size, schedule.getZdsj());
5269   - tempMap.put("zdsjActual" + size, schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "");
5270   - tempMap.put("zdsjk" + size, "");
5271   - tempMap.put("zdsjm" + size, "");
5272   - tempMap.put("fcsj" + size, schedule.getFcsj());
5273   - String fcsjActural=schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
5274   - String bcType=schedule.getBcType()!=null?schedule.getBcType():"";
5275   - if(bcType.equals("in")){
5276   - fcsjActural=fcsjActural+"(进)";
5277   - }
5278   - if(bcType.equals("out")){
5279   - fcsjActural=fcsjActural+"(出)";
5280   - }
5281   - tempMap.put("fcsjActual" + size, fcsjActural);
5282   - tempMap.put("fcsjk" + size, "");
5283   - tempMap.put("fcsjm" + size, "");
5284   - tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : "");
5285   -
5286   - size++;
5287   - }
5288   - if (size < 3) {
5289   - for (; size < 3; size++) {
5290   - tempMap.put("lpName" + size, "");
5291   - tempMap.put("qdzName" + size, "");
5292   - tempMap.put("zdsj" + size, "");
5293   - tempMap.put("zdsjActual" + size, "");
5294   - tempMap.put("zdsjk" + size, "");
5295   - tempMap.put("zdsjm" + size, "");
5296   - tempMap.put("fcsj" + size, "");
5297   - tempMap.put("fcsjActual" + size, "");
5298   - tempMap.put("fcsjk" + size, "");
5299   - tempMap.put("fcsjm" + size, "");
5300   - tempMap.put("remarks" + size, "");
5301   - }
5302   - }
5303   -*/
5304   -
5305   - size = 0;
5306   - tempMap = new HashMap<String, Object>();
5307   - for (ScheduleRealInfo schedule : list3) {
5308   - int x = size % 3;
5309   - if (x == 0 && size > 0) {
5310   - dataList3.add(tempMap);
5311   - tempMap = new HashMap<String, Object>();
5312   - }
5313   - tempMap.put("lpName" + x, schedule.getLpName());
5314   - tempMap.put("qdzName" + x, schedule.getQdzName());
5315   - tempMap.put("zdsj" + x, schedule.getZdsj());
5316   - String zdsjActual = schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "";
5317   - tempMap.put("zdsjActual" + x, zdsjActual);
5318   -
5319   - String zdsjk = "";
5320   - String zdsjm = "";
5321   - if (!zdsjActual.equals("")) {
5322   - String[] zdsj_s = schedule.getZdsj().split(":");
5323   - String[] zdsjActual_s = zdsjActual.split(":");
5324   - Long zdsj_ = Long.parseLong(zdsj_s[0]) * 60 + Long.parseLong(zdsj_s[1]);
5325   - Long zdsjActual_ = Long.parseLong(zdsjActual_s[0]) * 60 + Long.parseLong(zdsjActual_s[1]);
5326   - if ((zdsj_ - zdsjActual_) > 0) {
5327   - if(zdsj_ - zdsjActual_>1200){
5328   - zdsjm=String.valueOf(1440-(zdsj_-zdsjActual_));
5329   - }else{
5330   - zdsjk = String.valueOf(zdsj_ - zdsjActual_);
5331   - }
5332   - } else {
5333   - if(zdsjActual_ - zdsj_>1200){
5334   - zdsjk =String.valueOf(1440-(zdsjActual_ - zdsj_));
5335   - }else{
5336   - zdsjm = String.valueOf(zdsjActual_ - zdsj_);
5337   - }
5338   - }
5339   - }
5340   - tempMap.put("zdsjk" + x, zdsjk);
5341   - tempMap.put("zdsjm" + x, zdsjm.equals("0")?"":zdsjm);
5342   - tempMap.put("fcsj" + x, schedule.getFcsj());
5343   - String fcsjActural = schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
5344   - String bcType = schedule.getBcType() != null ? schedule.getBcType() : "";
5345   - String fcsjActuralstr = "";
5346   - if (bcType.equals("in")) {
5347   - fcsjActuralstr = fcsjActural + "(进)";
5348   - } else if (bcType.equals("out")) {
5349   - fcsjActuralstr = fcsjActural + "(出)";
5350   - } else {
5351   - fcsjActuralstr = fcsjActural;
5352   - }
5353   - tempMap.put("fcsjActual" + x, fcsjActuralstr);
5354   - String fcsjk = "";
5355   - String fcsjm = "";
5356   - String dfsjk ="";
5357   - String dfsjm="";
5358   - if (!fcsjActural.equals("")) {
5359   - String[] fcsj_s = schedule.getFcsj().split(":");
5360   - String[] fcsjActural_s = fcsjActural.split(":");
5361   - Long fcsj_ = Long.parseLong(fcsj_s[0]) * 60 + Long.parseLong(fcsj_s[1]);
5362   - Long fcsjActural_ = Long.parseLong(fcsjActural_s[0]) * 60 + Long.parseLong(fcsjActural_s[1]);
5363   - if ((fcsj_ - fcsjActural_) > 0) {
5364   - if(fcsj_ - fcsjActural_>1200){
5365   - fcsjm=String.valueOf(1440-(fcsj_ - fcsjActural_));
5366   - }else{
5367   - fcsjk = String.valueOf(fcsj_ - fcsjActural_);
5368   - }
5369   - } else {
5370   - if(fcsjActural_ - fcsj_>1200){
5371   - fcsjk =String.valueOf(1440-(fcsjActural_ - fcsj_));
5372   - }
5373   - else{
5374   - fcsjm = String.valueOf(fcsjActural_ - fcsj_);
5375   - }
5376   - }
5377   - if(df.equals("df")){
5378   - String[] dfsj_s =schedule.getDfsj().split(":");
5379   - Long dfsj_ = Long.parseLong(dfsj_s[0]) * 60 + Long.parseLong(dfsj_s[1]);
5380   - if ((dfsj_ - fcsjActural_) > 0) {
5381   - if(dfsj_ - fcsjActural_>1200){
5382   - dfsjm=String.valueOf(1440-(dfsj_ - fcsjActural_));
5383   - }else{
5384   - dfsjk = String.valueOf(dfsj_ - fcsjActural_);
5385   - }
5386   - } else {
5387   - if(fcsjActural_ - dfsj_>1200){
5388   - dfsjk= String.valueOf(1440-(fcsjActural_ - dfsj_));
5389   - }else{
5390   - dfsjm = String.valueOf(fcsjActural_ - dfsj_);
5391   - }
5392   - }
5393   - }
5394   - }
5395   - if(df.equals("df")){
5396   - tempMap.put("dfsj"+x,schedule.getDfsj());
5397   - tempMap.put("dfsjk" + x, dfsjk);
5398   - tempMap.put("dfsjm" + x, dfsjm.equals("0")?"":dfsjm);
5399   - }
5400   - tempMap.put("fcsjk" + x, fcsjk);
5401   - tempMap.put("fcsjm" + x, fcsjm.equals("0")?"":fcsjm);
5402   - tempMap.put("remarks" + x, schedule.getRemark() != null ? schedule.getRemark() : "");
5403   -
5404   - size++;
5405   - }
5406   - if (tempMap.get("lpName0") != null) {
5407   - if (tempMap.get("lpName1") == null) {
5408   - tempMap.put("lpName1", "");
5409   - tempMap.put("qdzName1", "");
5410   - tempMap.put("zdsj1", "");
5411   - tempMap.put("zdsjActual1", "");
5412   - tempMap.put("zdsjk1", "");
5413   - tempMap.put("zdsjm1", "");
5414   - tempMap.put("fcsj1", "");
5415   - tempMap.put("fcsjActual1", "");
5416   - tempMap.put("fcsjk1", "");
5417   - tempMap.put("fcsjm1", "");
5418   - if(df.equals("df")){
5419   - tempMap.put("dfsj1","");
5420   - tempMap.put("dfsjk1" , "");
5421   - tempMap.put("dfsjm1" , "");
5422   - }
5423   - tempMap.put("remarks1", "");
5424   - }
5425   - if (tempMap.get("lpName2") == null) {
5426   - tempMap.put("lpName2", "");
5427   - tempMap.put("qdzName2", "");
5428   - tempMap.put("zdsj2", "");
5429   - tempMap.put("zdsjActual2", "");
5430   - tempMap.put("zdsjk2", "");
5431   - tempMap.put("zdsjm2", "");
5432   - tempMap.put("fcsj2", "");
5433   - tempMap.put("fcsjActual2", "");
5434   - tempMap.put("fcsjk2", "");
5435   - tempMap.put("fcsjm2", "");
5436   - if(df.equals("df")){
5437   - tempMap.put("dfsj2","");
5438   - tempMap.put("dfsjk2" , "");
5439   - tempMap.put("dfsjm2" , "");
5440   - }
5441   - tempMap.put("remarks2", "");
5442   - }
5443   - dataList3.add(tempMap);
5444   - }
5445   -
5446   - if (date.length() == 10) {
5447   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
5448   - String dbdp = "";
5449   - try {
5450   - for (int i = 0; i < list.size(); i++) {
5451   - DutyEmployee t = list.get(i);
5452   - if (dbdp.indexOf(t.getuName()) == -1) {
5453   - if (!(dbdp.length() > 0)) {
5454   - dbdp = t.getuName();
5455   - } else {
5456   - dbdp += "," + t.getuName();
5457   - }
5458   - }
5459   - }
5460   - } catch (Exception e) {
5461   - // TODO: handle exception
5462   - e.printStackTrace();
5463   - }
5464   - nMap.put("dbdp", dbdp);
5465   - }
5466   -
5467   - if (type.equals("export")) {
5468   - String lineName = "";
5469   - if (map.containsKey("lineName"))
5470   - lineName = "-" + map.get("lineName").toString() + "-";
5471   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
5472   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
5473   - Map<String, Object> m = new HashMap<String, Object>();
5474   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
5475   - ReportUtils ee = new ReportUtils();
5476   - try {
5477   - listI.add(list1.iterator());
5478   - listI.add(dataList2.iterator());
5479   - listI.add(dataList3.iterator());
5480   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
5481   - String sourcePath = path + "mould/scheduleDaily.xls";
5482   - if (date.length() == 7) {
5483   - sdfMonth = new SimpleDateFormat("yyyy-MM");
5484   - sdfSimple = new SimpleDateFormat("yyyyMM");
5485   - sourcePath = path + "mould/scheduleDaily_m.xls";
5486   - }
5487   - if(df.equals("df")){
5488   - sourcePath =path + "mould/scheduleDaily_df.xls";
5489   - }
5490   - ee.excelReplace(listI, new Object[]{nMap}, sourcePath,
5491   - path + "export/" + sdfSimple.format(sdfMonth.parse(date)) + lineName + "调度日报.xls");
5492   - } catch (Exception e) {
5493   - // TODO: handle exception
5494   - e.printStackTrace();
5495   - }
5496   - }
5497   -
5498   - return new ArrayList<Map<String, Object>>();
5499   - }
5500   -
5501   - public void exportWaybill_pl(List<ScheduleRealInfo> listpl,
5502   - String date, String jName, String clZbh, String lpName) {
5503   - ReportUtils ee = new ReportUtils();
5504   - ReportRelatedUtils rru = new ReportRelatedUtils();
5505   - List<Iterator<?>> list = new ArrayList<Iterator<?>>();
5506   - List<ScheduleRealInfo> scheduleRealInfos = listpl;
5507   - List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
5508   -// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
5509   - List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
5510   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5511   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5512   - Set<ChildTaskPlan> cts = s.getcTasks();
5513   - if (cts != null && cts.size() > 0) {
5514   - lists.add(s);
5515   - } else {
5516   - if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
5517   - lists.add(s);
5518   - }
5519   - }
5520   - }
5521   - DecimalFormat format = new DecimalFormat("0.00");
5522   -// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
5523   -// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
5524   - //计算里程和班次数,并放入Map里
5525   - Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
5526   -
5527   - map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
5528   - map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
5529   - map.put("addMileage", culateMieageService.culateLjgl(lists));
5530   - double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
5531   - map.put("yygl", yygl);
5532   - double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
5533   - map.put("ksgl", ksgl);
5534   - map.put("realMileage", Arith.add(yygl, ksgl));
5535   - map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
5536   - map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
5537   - map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
5538   - int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
5539   - map.put("sjbc", sjbc);
5540   -// map=new HashMap<String,Object>();
5541   -
5542   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
5543   - String minfcsj = "02:00";
5544   - List<Line> lineList = lineRepository.findLineByCode(listpl.get(0).getXlBm());
5545   - if (lineList.size() > 0) {
5546   - String sqlMinYysj = "select start_opt from bsth_c_line_config where "
5547   - + " id = ("
5548   - + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
5549   - + ")";
5550   - minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
5551   - }
5552   - String[] minSjs = minfcsj.split(":");
5553   - Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
5554   -
5555   -
5556   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5557   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5558   - String[] fcsj = s.getFcsj().split(":");
5559   - Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
5560   -
5561   - Long fscjT = 0L;
5562   - if (fcsjL < minSj) {
5563   - Calendar calendar = new GregorianCalendar();
5564   - calendar.setTime(s.getScheduleDate());
5565   - calendar.add(calendar.DATE, 1);
5566   - s.setScheduleDate(calendar.getTime());
5567   - try {
5568   - fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
5569   - } catch (ParseException e) {
5570   - // TODO Auto-generated catch block
5571   - e.printStackTrace();
5572   - }
5573   -
5574   - } else {
5575   - try {
5576   - fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
5577   - } catch (ParseException e) {
5578   - // TODO Auto-generated catch block
5579   - e.printStackTrace();
5580   - }
5581   - ;
5582   - }
5583   - s.setFcsjT(fscjT);
5584   - }
5585   - List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
5586   - Collections.sort(scheduleRealInfos, new ComparableReal());
5587   - for (int i = 0; i < scheduleRealInfos.size(); i++) {
5588   - ScheduleRealInfo s = scheduleRealInfos.get(i);
5589   - s.setAdjustExps(i + 1 + "");
5590   - String remarks = "";
5591   - if (s.getRemarks() != null) {
5592   - remarks += s.getRemarks();
5593   - }
5594   -
5595   - Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
5596   - if (!childTaskPlans.isEmpty()) {
5597   - s.setFcsjActual("");
5598   - s.setZdsjActual("");
5599   - s.setJhlc(0.0);
5600   - }
5601   -
5602   - if (s.isDestroy()) {
5603   - s.setFcsjActual("");
5604   - s.setZdsjActual("");
5605   - s.setJhlc(0.0);
5606   - remarks += "(烂班)";
5607   - s.setRemarks(remarks);
5608   - }
5609   -
5610   - listSchedule.add(s);
5611   - //计算营运里程,空驶里程
5612   - if (!childTaskPlans.isEmpty()) {
5613   -// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
5614   - List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
5615   - Collections.sort(listit, new ComparableChild());
5616   - for (int j = 0; j < listit.size(); j++) {
5617   - ScheduleRealInfo t = new ScheduleRealInfo();
5618   - ChildTaskPlan childTaskPlan = listit.get(j);
5619   - if (childTaskPlan.isDestroy()) {
5620   - t.setFcsjActual("");
5621   - t.setZdsjActual("");
5622   - t.setJhlc(0.0);
5623   - } else {
5624   - t.setFcsjActual(childTaskPlan.getStartDate());
5625   - t.setZdsjActual(childTaskPlan.getEndDate());
5626   - t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
5627   - }
5628   - t.setQdzName(childTaskPlan.getStartStationName());
5629   - t.setZdzName(childTaskPlan.getEndStationName());
5630   - t.setRemarks(childTaskPlan.getRemarks());
5631   - t.setAdjustExps("子");
5632   - t.setjGh("");
5633   - t.setjName("");
5634   - t.setsGh("");
5635   - t.setsName("");
5636   - listSchedule.add(t);
5637   - }
5638   - }
5639   - }
5640   - Map<String, Object> maps;
5641   - for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
5642   - maps = new HashMap<String, Object>();
5643   - try {
5644   - scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
5645   - scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
5646   - maps = rru.getMapValue(scheduleRealInfo);
5647   - maps.put("bcs", scheduleRealInfo.getAdjustExps());
5648   - String zdsj = scheduleRealInfo.getZdsj();
5649   - String zdsjActual = scheduleRealInfo.getZdsjActual();
5650   - if (zdsj != null && zdsjActual != null &&
5651   - !zdsj.equals(zdsjActual) &&
5652   - !zdsj.equals("") &&
5653   - !zdsjActual.equals("")) {
5654   - int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
5655   - int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
5656   - if (zdsj.compareTo(zdsjActual) > 0) {
5657   - if (zdsjT - zdsjAT > 1000) {
5658   - maps.put("fast", "");
5659   - maps.put("slow", zdsjAT - zdsjT + 1440);
5660   - } else {
5661   - maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
5662   - maps.put("slow", "");
5663   - }
5664   - } else {
5665   - if (zdsjAT - zdsjT > 1000) {
5666   - maps.put("fast", zdsjT - zdsjAT + 1440);
5667   - maps.put("slow", "");
5668   - } else {
5669   - maps.put("fast", "");
5670   - maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
5671   - }
5672   - }
5673   - } else {
5674   - maps.put("fast", "");
5675   - maps.put("slow", "");
5676   - }
5677   - listMap.add(maps);
5678   - } catch (Exception e) {
5679   - e.printStackTrace();
5680   - }
5681   - }
5682   -
5683   -
5684   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
5685   - list.add(listMap.iterator());
5686   - String xls = "";
5687   - if (map.get("type").toString().equals("0")) {
5688   - xls = "waybill_minhang.xls";
5689   - } else {
5690   - xls = "waybill_minhang_dl.xls";
5691   - }
5692   - map.put("sheetName", jName + "-" + clZbh + "-" + lpName);
5693   - ee.excelReplace(list, new Object[]{map}, path + "mould/" + xls,
5694   - path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
5695   - }
5696   -
5697   - @Override
5698   - public Map<String, Object> exportWaybillMore(Map<String, Object> map) {
5699   - String date = map.get("date").toString();
5700   - String line = map.get("line").toString();
5701   - ReportUtils ee = new ReportUtils();
5702   - List<List> lists = JSON.parseArray(map.get("strs").toString(), List.class);
5703   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
5704   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
5705   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
5706   - int num = 0;
5707   - File file = null;
5708   - try {
5709   - while (true) {
5710   - String fileUrl = path + "行车路单" + sdfSimple.format(sdfMonth.parse(date));
5711   -// file = new File(fileUrl + (num == 0 ? "/" : "(" + num + ")/")); //新建文件夹
5712   - file = new File(fileUrl + (num == 0 ? ".xls" : "(" + num + ").xls")); //新建excel文件
5713   - if (file.exists()) { //判断是否已存在重名
5714   - num++;
5715   - } else {
5716   - break;
5717   - }
5718   - }
5719   -// file.mkdirs(); //创建
5720   - List<ScheduleRealInfo> lists_line = scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
5721   - List<File> files = new ArrayList<File>();
5722   - for (List<String> list : lists) {
5723   - List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
5724   - String jName = list.get(0);
5725   - String clZbh = list.get(1);
5726   - String lpName = list.get(2);
5727   - String jGh = list.get(3);
5728   - for (int i = 0; i < lists_line.size(); i++) {
5729   - ScheduleRealInfo s = lists_line.get(i);
5730   - if (s.getjGh().equals(jGh) && s.getClZbh().equals(clZbh) && s.getLpName().equals(lpName)) {
5731   - newList.add(s);
5732   - }
5733   - }
5734   - this.exportWaybill_pl(newList, date, jName, clZbh, lpName);
5735   - File temp = new File(path + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
5736   - String fileName = file.getName();
5737   - files.add(temp);
5738   - }
5739   - for (int i = 1; i < files.size(); i++) {
5740   - File file1 = files.get(0);
5741   - File file2 = files.get(i);
5742   - ee.copySheetByFile(file2, file1, 0, 145);
5743   - }
5744   - File newFile = files.get(0);
5745   - newFile.renameTo(file);
5746   -// temp.renameTo(new File(path + fileName + "/" + temp.getName()));
5747   -// File[] listFiles = file.listFiles();
5748   -// ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(path + file.getName() + ".zip")));
5749   -//// zos.setEncoding("gbk");
5750   -//// zos.putNextEntry(new ZipEntry(fileName + "/"));
5751   -// for (int i = 0; i < listFiles.length; i++) {
5752   -// zos.putNextEntry(new ZipEntry(fileName + "/" + listFiles[i].getName()));
5753   -// BufferedInputStream bis = new BufferedInputStream(new FileInputStream(listFiles[i]));
5754   -// BufferedOutputStream bos = new BufferedOutputStream(zos);
5755   -// int bytesRead = 0;
5756   -// for (byte[] buffer = new byte[BUF_SIZE]; ((bytesRead = bis.read(buffer, 0, BUF_SIZE)) != -1); ) {
5757   -//// zos.write(buffer, 0, bytesRead);
5758   -//// zos.flush();
5759   -// bos.write(buffer, 0, bytesRead);
5760   -// bos.flush();
5761   -// }
5762   -//// bos.close();
5763   -// bis.close();
5764   -// }
5765   -// zos.close();
5766   -// }
5767   -
5768   - } catch (Exception e) {
5769   - // TODO: handle exception
5770   - e.printStackTrace();
5771   - }
5772   -
5773   - map.put("fileName", file.getName());
5774   - return map;
5775   - }
5776   -
5777   - @Autowired
5778   - SchedulePlanInfoService schPlanService;
5779   -
5780   - @Override
5781   - public List<SchedulePlanInfo> currentSchedulePlan(String lineCode) {
5782   - List<SchedulePlanInfo> rs = dayOfSchedule.schedulePlanMap.get(lineCode);
5783   -
5784   - if (rs == null || rs.size() == 0) {
5785   - //尝试刷新内存
5786   - Map<String, Object> data = new HashMap<>();
5787   - data.put("scheduleDate_eq", dayOfSchedule.currSchDateMap.get(lineCode));
5788   - data.put("xlBm_eq", lineCode);
5789   - List<SchedulePlanInfo> planItr = dayOfSchedule.cleanSchPlanItr(schPlanService.list(data).iterator());
5790   -
5791   - if (planItr.size() > 0) {
5792   - dayOfSchedule.schedulePlanMap.put(lineCode, planItr);
5793   - return planItr;
5794   - }
5795   - }
5796   - return rs;
5797   - }
5798   -
5799   -
5800   - @Override
5801   - public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx, int type) {
5802   - Map<String, Object> rs = new HashMap<>();
5803   - Set<ScheduleRealInfo> ts = new HashSet<>();
5804   - try {
5805   - List<String> leftList = Splitter.on(",").splitToList(leftIdx);
5806   - List<String> rightList = Splitter.on(",").splitToList(rightIdx);
5807   - Set<String> lpSet = new HashSet<>();
5808   - Set<String> carSet = new HashSet<>();
5809   -
5810   - List<ScheduleRealInfo> largeList, smallList;
5811   - if (leftList.size() > rightList.size()) {
5812   - largeList = getByIdx(leftList);
5813   - smallList = getByIdx(rightList);
5814   - } else {
5815   - largeList = getByIdx(rightList);
5816   - smallList = getByIdx(leftList);
5817   - }
5818   -
5819   - ScheduleRealInfo leftSch, rightSch = null;
5820   - for (int i = 0; i < largeList.size(); i++) {
5821   - leftSch = largeList.get(i);
5822   - leftSch.setLpChange(1);
5823   - if (i < smallList.size()) {
5824   - rightSch = smallList.get(i);
5825   - rightSch.setLpChange(1);
5826   - ts.add(rightSch);
5827   - } else {
5828   - //不对称时多出来的
5829   - lpChangeByLeft(leftSch, largeList.get(i - 1), type);
5830   - ts.add(leftSch);
5831   - lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
5832   - continue;
5833   - }
5834   -
5835   - //调换路牌
5836   - lpChange(leftSch, rightSch, type);
5837   - ts.add(leftSch);
5838   -
5839   - lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
5840   - lpSet.add(rightSch.getXlBm() + "_" + rightSch.getLpName());
5841   -
5842   - carSet.add(leftSch.getClZbh());
5843   - carSet.add(rightSch.getClZbh());
5844   - scheduleRealInfoRepository.updateLpChange(leftSch.getId());
5845   - scheduleRealInfoRepository.updateLpChange(rightSch.getId());
5846   - }
5847   -
5848   - //重新计算路牌的起点应到时间
5849   - for (String lpName : lpSet) {
5850   - ts.addAll(dayOfSchedule.updateQdzTimePlan(lpName));
5851   - }
5852   -
5853   - //重新就算车辆当前执行班次
5854   - for(String nbbm : carSet){
5855   - dayOfSchedule.reCalcExecPlan(nbbm);
5856   - }
5857   -
5858   -
5859   - for (ScheduleRealInfo sch : ts) {
5860   - dayOfSchedule.save(sch);
5861   - }
5862   -
5863   - rs.put("status", ResponseCode.SUCCESS);
5864   - rs.put("ts", ts);
5865   - } catch (Exception e) {
5866   - logger.error("", e);
5867   - rs.put("status", ResponseCode.ERROR);
5868   - rs.put("msg", e.getMessage());
5869   - }
5870   -
5871   - return rs;
5872   - }
5873   -
5874   - private List<ScheduleRealInfo> getByIdx(List<String> idList) {
5875   - List<ScheduleRealInfo> list = new ArrayList<>();
5876   - for (String id : idList) {
5877   - list.add(dayOfSchedule.get(Long.parseLong(id)));
5878   - }
5879   - return list;
5880   - }
5881   -
5882   - @Override
5883   - public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
5884   - //释放班次映射
5885   - if (type > 0) {
5886   - dayOfSchedule.removeNbbm2SchMapp(leftSch);
5887   - dayOfSchedule.removeNbbm2SchMapp(rightSch);
5888   - }
5889   -
5890   - //对调数据
5891   - LpData leftData = new LpData(leftSch);
5892   - LpData rightData = new LpData(rightSch);
5893   -
5894   - leftData.appendTo(rightSch, type);
5895   - rightData.appendTo(leftSch, type);
5896   -
5897   - if (type > 0) {
5898   - //重新映射
5899   - dayOfSchedule.addNbbm2SchMapp(leftSch);
5900   - dayOfSchedule.addNbbm2SchMapp(rightSch);
5901   - }
5902   - }
5903   -
5904   - /**
5905   - * 更换左边班次的路牌,右边不变
5906   - *
5907   - * @param leftSch
5908   - * @param rightSch
5909   - * @param type
5910   - */
5911   - public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
5912   - //释放班次映射
5913   - if (type > 0)
5914   - dayOfSchedule.removeNbbm2SchMapp(leftSch);
5915   -
5916   - LpData rightData = new LpData(rightSch);
5917   - rightData.appendTo(leftSch, type);
5918   -
5919   - //重新映射
5920   - if (type > 0)
5921   - dayOfSchedule.addNbbm2SchMapp(leftSch);
5922   -
5923   - }
5924   -
5925   - @Override
5926   - public Map<String, Object> revokeRealArrive(Long id) {
5927   - Map<String, Object> rs = new HashMap<>();
5928   - List<ScheduleRealInfo> ts = new ArrayList<>();
5929   -
5930   - try {
5931   - ScheduleRealInfo sch = dayOfSchedule.get(id);
5932   - if (sch.getZdsjActual() == null && sch.getFcsjActual() == null) {
5933   - rs.put("status", ResponseCode.ERROR);
5934   - rs.put("msg", "班次未执行,无法撤销!");
5935   - } else {
5936   - //日志记录
5937   - ScheduleModifyLogger.cxzx(sch);
5938   -
5939   - sch.clearFcsjActual();
5940   - sch.clearZdsjActual();
5941   - //清除路牌下一个班的起点到达时间
5942   - ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
5943   - if (null != next) {
5944   - next.setQdzArrDatesj(null);
5945   - ts.add(next);
5946   - }
5947   -
5948   - rs.put("status", ResponseCode.SUCCESS);
5949   -
5950   - ts.add(sch);
5951   - rs.put("ts", ts);
5952   -
5953   - dayOfSchedule.save(sch);
5954   - //重新计算当前执行班次
5955   - dayOfSchedule.reCalcExecPlan(sch.getClZbh());
5956   -
5957   - }
5958   - } catch (Exception e) {
5959   - logger.error("", e);
5960   - rs.put("status", ResponseCode.ERROR);
5961   - }
5962   - return rs;
5963   - }
5964   -
5965   - @Override
5966   - public Map<String, Object> lateAdjust(String idx, float minute) {
5967   - Map<String, Object> rs = new HashMap<>();
5968   - try {
5969   - int count = 0;
5970   - List<ScheduleRealInfo> list = new ArrayList<>();
5971   - List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
5972   -
5973   - ScheduleRealInfo sch;
5974   - for (String id : ids) {
5975   - sch = dayOfSchedule.get(Long.parseLong(id));
5976   - if (sch != null && sch.getStatus() == 0) {
5977   - if (minute > 0) {
5978   - sch.setLateMinute(minute);
5979   - } else if (minute == 0) {
5980   - LateAdjustHandle.remove(sch);
5981   - }
5982   - count++;
5983   - list.add(sch);
5984   - }
5985   - }
5986   -
5987   - rs.put("status", ResponseCode.SUCCESS);
5988   - rs.put("count", count);
5989   - rs.put("ts", list);
5990   - } catch (Exception e) {
5991   - logger.error("", e);
5992   - rs.put("status", ResponseCode.ERROR);
5993   - rs.put("msg", e.getMessage());
5994   - }
5995   -
5996   - return rs;
5997   - }
5998   -
5999   - @Override
6000   - public List<ScheduleRealInfo> allLate2(String idx) {
6001   - List<ScheduleRealInfo> rs = new ArrayList<>();
6002   - List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
6003   -
6004   - Collection<ScheduleRealInfo> all = LateAdjustHandle.allLateSch();
6005   - for (ScheduleRealInfo sch : all) {
6006   - if (ids.indexOf(sch.getXlBm()) != -1) {
6007   - rs.add(sch);
6008   - }
6009   - }
6010   - return rs;
6011   - }
6012   -
6013   -
6014   - @Override
6015   - public List<Map<String, Object>> mileageReport(String gsdm,
6016   - String fgsdm, String line, String date, String date2) {
6017   -
6018   - String sql = "select * from calc_mileage where 1=1 ";
6019   - if (!line.equals(" ")) {
6020   - sql = sql + " and line_code='" + line + "' ";
6021   - }
6022   - sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
6023   - if (!gsdm.equals(" ")) {
6024   - sql = sql + " and company_id=" + gsdm;
6025   - }
6026   - if (!gsdm.equals(" ")) {
6027   - sql = sql + " and sub_company_id=" + fgsdm;
6028   - }
6029   - sql = sql + " order by line_code";
6030   - List<MileageReport> list = jdbcTemplate.query(sql,
6031   - new RowMapper<MileageReport>() {
6032   - @Override
6033   - public MileageReport mapRow(ResultSet rs, int rowNum) throws SQLException {
6034   - MileageReport mr = new MileageReport();
6035   - mr.setCompanyName(rs.getString("company_name"));
6036   - mr.setSubCompanyName(rs.getString("sub_company_name"));
6037   - mr.setLineName(rs.getString("line_name"));
6038   - mr.setSjyygl(rs.getDouble("sjyygl"));
6039   - mr.setSjksgl(rs.getDouble("sjksgl"));
6040   - mr.setZgl(rs.getDouble("zyygl"));
6041   - mr.setZddfgl(rs.getDouble("zddfgl"));
6042   - mr.setSddfgl(rs.getDouble("sddfgl"));
6043   - mr.setWqwxhgl(rs.getDouble("wqwxhgl"));
6044   - mr.setBfwxhgl(rs.getDouble("bfwxhgl"));
6045   - mr.setPygl(rs.getDouble("pygl"));
6046   - mr.setLjgl(rs.getDouble("ljgl"));
6047   - mr.setZrwgl(rs.getDouble("zrwgl"));
6048   - mr.setOther(rs.getString("other"));
6049   - return mr;
6050   - }
6051   - });
6052   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
6053   - double sjyygl = 0.0;
6054   - double sjksgl = 0.0;
6055   - double zgl = 0.0;
6056   - double sddfgl = 0.0;
6057   - double zddfgl = 0.0;
6058   - double wqwxhgl = 0.0;
6059   - double bfwxhgl = 0.0;
6060   - double pygl = 0.0;
6061   - double ljgl = 0.0;
6062   - double zrwgl = 0.0;
6063   - for (MileageReport mr : list) {
6064   - Map<String, Object> resMap = new HashMap<String, Object>();
6065   - resMap.put("gsName", mr.getCompanyName());
6066   - resMap.put("fgsName", mr.getSubCompanyName());
6067   - resMap.put("xlName", mr.getLineName());
6068   - resMap.put("sjyygl", mr.getSjyygl());
6069   - resMap.put("sjksgl", mr.getSjksgl());
6070   - resMap.put("zgl", mr.getZgl());
6071   - resMap.put("sddfgl", mr.getSddfgl());
6072   - resMap.put("zddfgl", mr.getZddfgl());
6073   - resMap.put("wqwxhgl", mr.getWqwxhgl());
6074   - resMap.put("bfwxhgl", mr.getBfwxhgl());
6075   - resMap.put("pygl", mr.getPygl());
6076   - resMap.put("ljgl", mr.getLjgl());
6077   - resMap.put("zrwgl", mr.getZrwgl());
6078   - resMap.put("other", mr.getOther());
6079   - lMap.add(resMap);
6080   - sjyygl = Arith.add(sjyygl, mr.getSjyygl());
6081   - sjksgl = Arith.add(sjksgl, mr.getSjksgl());
6082   - zgl = Arith.add(zgl, mr.getZgl());
6083   - sddfgl = Arith.add(sddfgl, mr.getSddfgl());
6084   - zddfgl = Arith.add(zddfgl, mr.getZddfgl());
6085   - wqwxhgl = Arith.add(wqwxhgl, mr.getWqwxhgl());
6086   - bfwxhgl = Arith.add(bfwxhgl, mr.getBfwxhgl());
6087   - pygl = Arith.add(pygl, mr.getPygl());
6088   - ljgl = Arith.add(ljgl, mr.getLjgl());
6089   - zrwgl = Arith.add(zrwgl, mr.getZrwgl());
6090   - }
6091   - Map<String, Object> resMap = new HashMap<String, Object>();
6092   - resMap.put("xlName", "合计");
6093   - resMap.put("sjyygl", sjyygl);
6094   - resMap.put("sjksgl", sjksgl);
6095   - resMap.put("zgl", zgl);
6096   - resMap.put("sddfgl", sddfgl);
6097   - resMap.put("zddfgl", zddfgl);
6098   - resMap.put("wqwxhgl", wqwxhgl);
6099   - resMap.put("bfwxhgl", bfwxhgl);
6100   - resMap.put("pygl", pygl);
6101   - resMap.put("ljgl", ljgl);
6102   - resMap.put("zrwgl", zrwgl);
6103   - resMap.put("other", null);
6104   - lMap.add(resMap);
6105   - return lMap;
6106   - }
6107   -
6108   - @Override
6109   - public List<Map<String, Object>> scheduleCorrectionReport(String gsdm,
6110   - String fgsdm, String line, String date, String date2) {
6111   -
6112   - String sql = "select * from calc_schedule where 1=1 ";
6113   - if (!line.equals(" ")) {
6114   - sql = sql + " and line_code='" + line + "' ";
6115   - }
6116   - sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
6117   - if (!gsdm.equals(" ")) {
6118   - sql = sql + " and company_id=" + gsdm;
6119   - }
6120   - if (!gsdm.equals(" ")) {
6121   - sql = sql + " and sub_company_id=" + fgsdm;
6122   - }
6123   - sql = sql + " order by line_code";
6124   - List<ScheduleCorrectionReport> list = jdbcTemplate.query(sql,
6125   - new RowMapper<ScheduleCorrectionReport>() {
6126   - @Override
6127   - public ScheduleCorrectionReport mapRow(ResultSet rs, int rowNum) throws SQLException {
6128   - ScheduleCorrectionReport sReport = new ScheduleCorrectionReport();
6129   - sReport.setCompanyName(rs.getString("company_name"));
6130   - sReport.setSubCompanyName(rs.getString("sub_company_name"));
6131   - sReport.setLineName(rs.getString("line_name"));
6132   - sReport.setSjyybc(rs.getInt("sjyybc"));
6133   - sReport.setSjksbc(rs.getInt("sjksbc"));
6134   - sReport.setZbc(rs.getInt("zyybc"));
6135   - sReport.setZddfbc(rs.getInt("zddfbc"));
6136   - sReport.setSddfbc(rs.getInt("sddfbc"));
6137   - sReport.setWqwxhbc(rs.getInt("wqwxhbc"));
6138   - sReport.setBfwxhbc(rs.getInt("bfwxhbc"));
6139   - sReport.setPybc(rs.getInt("pybc"));
6140   - sReport.setLjbc(rs.getInt("ljbc"));
6141   - sReport.setZrwbc(rs.getInt("zrwbc"));
6142   - sReport.setOther(rs.getString("other"));
6143   - return sReport;
6144   - }
6145   - });
6146   - List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
6147   - int sjyybc = 0;
6148   - int sjksbc = 0;
6149   - int zbc = 0;
6150   - int sddfbc = 0;
6151   - int zddfbc = 0;
6152   - int wqwxhbc = 0;
6153   - int bfwxhbc = 0;
6154   - int pybc = 0;
6155   - int ljbc = 0;
6156   - int zrwbc = 0;
6157   - for (ScheduleCorrectionReport sReport : list) {
6158   - Map<String, Object> resMap = new HashMap<String, Object>();
6159   - resMap.put("gsName", sReport.getCompanyName());
6160   - resMap.put("fgsName", sReport.getSubCompanyName());
6161   - resMap.put("xlName", sReport.getLineName());
6162   - resMap.put("sjyybc", sReport.getSjyybc());
6163   - resMap.put("sjksbc", sReport.getSjksbc());
6164   - resMap.put("zbc", sReport.getZbc());
6165   - resMap.put("sddfbc", sReport.getSddfbc());
6166   - resMap.put("zddfbc", sReport.getZddfbc());
6167   - resMap.put("wqwxhbc", sReport.getWqwxhbc());
6168   - resMap.put("bfwxhbc", sReport.getBfwxhbc());
6169   - resMap.put("pybc", sReport.getPybc());
6170   - resMap.put("ljbc", sReport.getLjbc());
6171   - resMap.put("zrwbc", sReport.getZrwbc());
6172   - resMap.put("other", sReport.getOther());
6173   - lMap.add(resMap);
6174   - sjyybc = sjyybc + sReport.getSjyybc();
6175   - sjksbc = sjksbc + sReport.getSjksbc();
6176   - zbc = zbc + sReport.getZbc();
6177   - sddfbc = sddfbc + sReport.getSddfbc();
6178   - zddfbc = zddfbc + sReport.getZddfbc();
6179   - wqwxhbc = wqwxhbc + sReport.getWqwxhbc();
6180   - bfwxhbc = bfwxhbc + sReport.getBfwxhbc();
6181   - pybc = pybc + sReport.getPybc();
6182   - ljbc = ljbc + sReport.getLjbc();
6183   - zrwbc = zrwbc + sReport.getZrwbc();
6184   - }
6185   - Map<String, Object> resMap = new HashMap<String, Object>();
6186   - resMap.put("xlName", "合计");
6187   - resMap.put("sjyybc", sjyybc);
6188   - resMap.put("sjksbc", sjksbc);
6189   - resMap.put("zbc", zbc);
6190   - resMap.put("sddfbc", sddfbc);
6191   - resMap.put("zddfbc", zddfbc);
6192   - resMap.put("wqwxhbc", wqwxhbc);
6193   - resMap.put("bfwxhbc", bfwxhbc);
6194   - resMap.put("pybc", pybc);
6195   - resMap.put("ljbc", ljbc);
6196   - resMap.put("zrwbc", zrwbc);
6197   - resMap.put("other", null);
6198   - lMap.add(resMap);
6199   - return lMap;
6200   - }
6201   -
6202   - @Override
6203   - public Integer isCircleQdz(String clzbh, String sdr, String xlbm, String qdzCode) {
6204   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
6205   - String time =sdf.format(Long.parseLong(sdr));
6206   -
6207   - Long num=scheduleRealInfoRepository.isCircleQdz(clzbh, time, xlbm, qdzCode);
6208   - Integer num2=num==0L?0:1;
6209   - return num2;
6210   - }
6211   -
6212   - @SuppressWarnings("unchecked")
6213   - private static Map<String, Object> request(String url) {
6214   - Map<String, Object> res = new HashMap<String, Object>();
6215   - res.put("status", ResponseCode.SUCCESS);
6216   - InputStream in = null;
6217   - HttpURLConnection con = null;
6218   - try {
6219   - con = (HttpURLConnection)new URL(url).openConnection();
6220   - con.setRequestMethod("POST");
6221   - con.setRequestProperty("keep-alive", "true");
6222   - con.setRequestProperty("accept", "application/json");
6223   - con.setRequestProperty("content-type", "application/json");
6224   - con.setDoInput(true);
6225   - con.setReadTimeout(2500);
6226   - con.setConnectTimeout(2500);
6227   -
6228   - con.connect();
6229   - if (con.getResponseCode() == 200) {
6230   - in = con.getInputStream();
6231   - ByteArrayOutputStream bout = new ByteArrayOutputStream();
6232   - IOUtils.copy(in, bout); bout.close();
6233   - Map<String, Object> response = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
6234   - if (!"报修成功".equals(response.get("msg"))) {
6235   - res.put("status", ResponseCode.ERROR);
6236   - res.putAll(response);
6237   - }
6238   - } else {
6239   - res.put("status", ResponseCode.ERROR);
6240   - res.put("msg", "调用上报接口异常");
6241   - }
6242   - } catch (IOException e) {
6243   - // TODO Auto-generated catch block
6244   - res.put("status", ResponseCode.ERROR);
6245   - res.put("msg", "调用上报接口异常");
6246   - } finally {
6247   - try {
6248   - if (in != null) in.close();
6249   - if (con != null) con.disconnect();
6250   - } catch (IOException e) {
6251   - // TODO Auto-generated catch block
6252   - e.printStackTrace();
6253   - }
6254   - }
6255   -
6256   - return res;
6257   - }
6258   -
6259   - /**
6260   - ** 维修记录上报
6261   - * @param param 参数信息
6262   - * @param isActive 主/被动上报
6263   - */
6264   - @Override
6265   - @Transactional
6266   - public Map<String, Object> repairReport(Map<String, Object> param, boolean isActive) {
6267   - Map<String, Object> res = new HashMap<String, Object>();
6268   - res.put("status", ResponseCode.SUCCESS);
6269   - // 获取实际排班信息
6270   - Long id = Long.parseLong((String)param.get("id"));
6271   - ScheduleRealInfo sch = dayOfSchedule.get(id);
6272   -
6273   - if (null == sch) {
6274   - res.put("status", ResponseCode.ERROR);
6275   - res.put("msg", "不存在的班次!");
6276   -
6277   - return res;
6278   - }
6279   -
6280   - int reportState = -1;
6281   - SysUser user = SecurityUtils.getCurrentUser();
6282   - String reportUser = user.getUserName(), reportName = user.getName(), incode = (String)param.get("clZbh"), reportTypes = (String)param.get("reportTypes"), repairTypes = reportType2RepairType(reportTypes);
6283   - // 分公司保存格式 分公司编码_公司编码
6284   - String val = BasicData.nbbm2FgsCompanyCodeMap.get(incode);
6285   - String[] arr = val.split("_");
6286   - StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
6287   - url.append("?nbbm=").append(incode).append("&bxy=").append(reportUser).append("&bxbm=").append(repairTypes).append("&fgs=").append(arr[0]);
6288   -
6289   - int count = repairReportRepository.repairReportBySch(id, isActive ? 1 : 0);
6290   - if (count > 0) return res;
6291   - RepairReport lrr = dayOfSchedule.getLastestRepairReport(incode);
6292   - // 非主动上报并且无上报记录或上次已上报 则不用上报
6293   - if (!isActive && (lrr == null || lrr.getReportState() != 0)) {
6294   - reportState = 0;
6295   - } else {
6296   - res = request(url.toString());
6297   - if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
6298   - }
6299   - // 持久化此次上报记录
6300   - RepairReport rr = new RepairReport();
6301   - rr.setLineId(sch.getXlBm());
6302   - rr.setLineName(sch.getXlName());
6303   - rr.setReportUser(reportUser);
6304   - rr.setReportName(reportName);
6305   - rr.setSchId(id);
6306   - rr.setIncode(incode);
6307   - rr.setDepartureTime(sch.getFcsj());
6308   - rr.setRepairType(repairTypes);
6309   - rr.setReportType(reportTypes);
6310   - rr.setReportDate(new Date());
6311   - rr.setReportState(reportState);
6312   - rr.setReportMode(isActive ? 1 : 0);
6313   - rr = repairReportRepository.save(rr);
6314   - dayOfSchedule.setLastestRepairReport(rr);
6315   - // 如果上报失败,放到重传队列
6316   - if (rr.getReportState() == -1) queue.add(rr);
6317   -
6318   - return res;
6319   - }
6320   -
6321   - private void repairReport(RepairReport rr) {
6322   - int reportState = -1;
6323   - // 分公司保存格式 分公司编码_公司编码
6324   - String val = BasicData.nbbm2FgsCompanyCodeMap.get(rr.getIncode());
6325   - String[] arr = val.split("_");
6326   - StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
6327   - url.append("?nbbm=").append(rr.getIncode()).append("&bxy=").append(rr.getReportUser()).append("&bxbm=").append(rr.getRepairType()).append("&fgs=").append(arr[0]);
6328   -
6329   - Map<String, Object> res = request(url.toString());
6330   - if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
6331   - if (reportState == 1) {
6332   - rr.setReportState(1);
6333   - repairReportRepository.save(rr);
6334   - }
6335   - }
6336   -
6337   - /**
6338   - ** 业务类型转报修类型
6339   - */
6340   - private String reportType2RepairType(String reportType) {
6341   - String[] reportTypes = reportType.split(";");
6342   - List<String> repairTypes = new ArrayList<>();
6343   - for (String rt : reportTypes) {
6344   - repairTypes.add(report2repair.get(rt));
6345   - }
6346   -
6347   - return StringUtils.join(repairTypes, ";");
6348   - }
6349   -
6350   - @Override
6351   - public List<RepairReport> repairReportList(String lineId, String date, String incode, String type) {
6352   - List<RepairReport> result = new ArrayList<RepairReport>();
6353   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
6354   -
6355   - Date start = null, end = null;
6356   - if (date.length() > 0) {
6357   - try {
6358   - start = sdf.parse(date + " 00:00:00");
6359   - end = sdf.parse(date + " 23:59:59");
6360   - } catch (ParseException e) {
6361   - // TODO Auto-generated catch block
6362   - e.printStackTrace();
6363   - }
6364   -
6365   - }
6366   -
6367   - result = repairReportRepository.repairReportList(lineId, start, end, incode);
6368   - Map<String, Object> dMap=new HashMap<>();
6369   - dMap.put("dGroup_eq", "repairtype");
6370   - Map<String, String> code2name = new HashMap<String, String>();
6371   - for (Dictionary dic : dictionaryService.list(dMap)) {
6372   - code2name.put(dic.getdCode(), dic.getdName());
6373   - }
6374   - for (RepairReport rr : result) {
6375   - String reportType = rr.getReportType();
6376   - String[] types = reportType.split(";");
6377   - StringBuilder sb = new StringBuilder();
6378   -
6379   - for (String t : types) {
6380   - sb.append(code2name.get(t)).append(";");
6381   - }
6382   -
6383   - rr.setRepairType(sb.toString());
6384   - rr.setReportDateStr(sdf.format(rr.getReportDate()));
6385   - switch (rr.getReportState()) {
6386   - case 0:
6387   - rr.setReportStateStr("不报");
6388   - break;
6389   - case 1:
6390   - rr.setReportStateStr("上报成功");
6391   - break;
6392   - case -1:
6393   - rr.setReportStateStr("上报失败");
6394   - break;
6395   - default:
6396   - break;
6397   - }
6398   - }
6399   -
6400   - if ("export".equals(type)) {
6401   - String lineName = BasicData.lineCode2NameMap.get(lineId);
6402   - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
6403   - sdfSimple = new SimpleDateFormat("yyyyMMdd");
6404   - List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
6405   - Map<String, Object> m = new HashMap<String, Object>();
6406   - ReportUtils ee = new ReportUtils();
6407   - List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
6408   - for (int i = 0; i < result.size(); i++) {
6409   - Map<String, Object> map = new HashMap<String, Object>();
6410   - RepairReport rr = result.get(i);
6411   - map.put("row", i + 1);
6412   - map.put("lineId", rr.getLineName());
6413   - map.put("incode", rr.getIncode());
6414   - map.put("departureTime", rr.getDepartureTime());
6415   - map.put("reportUser", rr.getReportUser());
6416   - map.put("reportDateStr", rr.getReportDate());
6417   - map.put("repairType", rr.getRepairType());
6418   - map.put("reportStateStr", rr.getReportStateStr());
6419   - newList.add(map);
6420   - }
6421   - try {
6422   - listI.add(newList.iterator());
6423   - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
6424   - ee.excelReplace(listI, new Object[]{m}, path + "mould/repairReport.xls",
6425   - path + "export/" + sdfSimple.format(sdfMonth.parse(date))
6426   - + "-" + lineName + "-维修上报记录.xls");
6427   - } catch (Exception e) {
6428   - // TODO: handle exception
6429   - e.printStackTrace();
6430   - }
6431   - }
6432   -
6433   - return result;
6434   - }
6435   -
6436   - @Override
6437   - public Map<String, String> getLevelsByLines(List<String> lines) {
6438   - Map<String, String> result = new HashMap<String, String>(), currSchDate = dayOfSchedule.getCurrSchDate();
6439   - for (String line : lines) {
6440   - String level = BasicData.lineDate2Level.get(line + "_" + currSchDate.get(line));
6441   - result.put(line, level == null ? "" : level);
6442   - }
6443   -
6444   - return result;
6445   - }
6446   -
6447   -
6448   - @Override
6449   - public void destroy() throws Exception {
6450   - // TODO Auto-generated method stub
6451   - exec.shutdown();
6452   - }
6453   -
6454   -
6455   - @Override
6456   - public void afterPropertiesSet() throws Exception {
6457   - // TODO Auto-generated method stub
6458   - // 维修上报重发调度
6459   - exec.scheduleAtFixedRate(new Runnable() {
6460   -
6461   - @Override
6462   - public void run() {
6463   - // TODO Auto-generated method stub
6464   - try {
6465   - Iterator<RepairReport> it = queue.iterator();
6466   - while (it.hasNext()) {
6467   - RepairReport rr = it.next();
6468   - repairReport(rr);
6469   - if (rr.getReportState() == 1 || System.currentTimeMillis() - rr.getReportDate().getTime() > 86400000) queue.remove(rr);
6470   - }
6471   - } catch (Exception e) {
6472   - logger.error("维修上报重发错误", e);
6473   - }
6474   - }
6475   - }, 30, 30, TimeUnit.MINUTES);
6476   - }
6477   -}
6478   -
6479   -class AccountMap implements Comparator<Map<String, Object>> {
6480   - @Override
6481   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6482   - // TODO Auto-generated method stub
6483   - return o1.get("clZbh").toString().compareTo(o2.get("clZbh").toString());
6484   - }
6485   -}
6486   -
6487   -class AccountMap2 implements Comparator<Map<String, Object>> {
6488   - @Override
6489   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6490   - // TODO Auto-generated method stub
6491   - return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString());
6492   - }
6493   -}
6494   -
6495   -class AccountXlbm implements Comparator<Map<String, Object>> {
6496   - @Override
6497   - public int compare(Map<String, Object> o1, Map<String, Object> o2) {
6498   - // TODO Auto-generated method stub
6499   -// PinyinHelper.convertToPinyinString(ppy.getName(),
6500   -// "" , PinyinFormat.WITHOUT_TONE)
6501   - return o1.get("xlNamePy").toString().compareTo(
6502   - o2.get("xlNamePy").toString());
6503   - }
6504   -}
6505   -
6506   -class compareLpFcsjType implements Comparator<ScheduleRealInfo> {
6507   - @Override
6508   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6509   - // TODO Auto-generated method stub
6510   - return (o1.getLpName()+o1.getFcsjT() + o1.getRemark()).compareTo(o2.getLpName()+o2.getFcsjT() + o2.getRemark());
6511   - }
6512   -
6513   -}
6514   -
6515   -class compareDirLpFcsjType implements Comparator<ScheduleRealInfo> {
6516   - @Override
6517   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6518   - // TODO Auto-generated method stub
6519   - return (o1.getXlDir()+o1.getFcsjT() + o1.getRemark()+o1.getLpName()).compareTo(o2.getXlDir()+o2.getFcsjT() + o2.getRemark()+o2.getLpName());
6520   - }
6521   -
6522   -}
6523   -class compareFcsjType implements Comparator<ScheduleRealInfo> {
6524   - @Override
6525   - public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
6526   - // TODO Auto-generated method stub
6527   - return (o1.getFcsjT() + o1.getRemark()).compareTo(o2.getFcsjT() + o2.getRemark());
6528   - }
6529   -
6530   -}
  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 +@Service
  138 +public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long>
  139 + implements ScheduleRealInfoService, InitializingBean, DisposableBean {
  140 + @Autowired
  141 + JdbcTemplate jdbcTemplate;
  142 + @Autowired
  143 + ScheduleRealInfoRepository scheduleRealInfoRepository;
  144 +
  145 + @Autowired
  146 + EmployeeConfigInfoRepository employeeConfigInfoRepository;
  147 +
  148 + @Autowired
  149 + CarConfigInfoRepository carConfigInfoRepository;
  150 +
  151 + @Autowired
  152 + SectionRouteService sectionRouteService;
  153 +
  154 + @Autowired
  155 + CulateMileageService culateMieageService;
  156 +
  157 + @Autowired
  158 + DictionaryService dictionaryService;
  159 +
  160 + @Autowired
  161 + CalcIntervalRepository calcIntervalRepository;
  162 + /*@Autowired
  163 + BorrowCenter borrowCenter;*/
  164 +
  165 + @Autowired
  166 + LineRepository lineRepository;
  167 + @Autowired
  168 + LineService lineService;
  169 + @Autowired
  170 + GuideboardInfoRepository guideboardInfoRepository;
  171 +
  172 + @Autowired
  173 + ChildTaskPlanRepository cTaskPlanRepository;
  174 +
  175 + @Autowired
  176 + SendUtils sendUtils;
  177 +
  178 + @Autowired
  179 + DayOfSchedule dayOfSchedule;
  180 +
  181 + @Autowired
  182 + SchAttrCalculator schAttrCalculator;
  183 +
  184 + @Autowired
  185 + LineConfigData lineConfigData;
  186 +
  187 + @Autowired
  188 + DutyEmployeeService dutyEmployeeService;
  189 +
  190 + @Autowired
  191 + YlxxbRepository ylxxbRepository;
  192 +
  193 + @Autowired
  194 + YlbRepository ylbRepository;
  195 +
  196 + @Autowired
  197 + DlbRepository dlbRepository;
  198 +
  199 + @Autowired
  200 + ReportService reposrService;
  201 +
  202 + @Autowired
  203 + CulateMileageService culateService;
  204 +
  205 + @Autowired
  206 + FormLogger schModifyLog;
  207 +
  208 + @Autowired
  209 + DirectiveService directiveService;
  210 +
  211 + @Autowired
  212 + CarDeviceRepository carDeviceRepository;
  213 +
  214 + @Autowired
  215 + CarsRepository carsRepository;
  216 +
  217 + @Autowired
  218 + RepairReportRepository repairReportRepository;
  219 + Logger logger = LoggerFactory.getLogger(this.getClass());
  220 +
  221 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  222 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  223 +
  224 + private Queue<RepairReport> queue = new ConcurrentLinkedQueue<>();
  225 +
  226 + private ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
  227 +
  228 + @Override
  229 + public Thread newThread(Runnable r) {
  230 + // TODO Auto-generated method stub
  231 + Thread t = new Thread(r);
  232 + t.setName("RepairReportReissuer");
  233 +
  234 + return t;
  235 + }
  236 + });
  237 +
  238 + private static Map<String, String> report2repair = new HashMap<String, String>();
  239 +
  240 + static {
  241 + report2repair.put("9101", "9109");
  242 + report2repair.put("9102", "9102");
  243 + report2repair.put("9103", "9103");
  244 + report2repair.put("9104", "9104");
  245 + report2repair.put("9109", "9109");
  246 + report2repair.put("9201", "9201");
  247 + report2repair.put("9202", "9202");
  248 + report2repair.put("9203", "9203");
  249 + report2repair.put("9204", "9204");
  250 + report2repair.put("9209", "9209");
  251 + report2repair.put("9301", "9301");
  252 + report2repair.put("9302", "9302");
  253 + report2repair.put("9303", "9303");
  254 + report2repair.put("9304", "9304");
  255 + report2repair.put("9305", "9305");
  256 + report2repair.put("9306", "9306");
  257 + report2repair.put("9309", "9309");
  258 + }
  259 +
  260 +
  261 + /**
  262 + * 校验人车 和 班次的公司和分公司归属
  263 + *
  264 + * @param schId
  265 + * @param jsy
  266 + * @param spy
  267 + * @param nbbm
  268 + * @return -2 跨营运公司,校验不过
  269 + * -1 跨分公司,二次确认
  270 + * 1 校验通过
  271 + */
  272 + @Override
  273 + public Map<String, Object> checkPCFgsAscription(Long schId, String jGh, String sGh, String nbbm) {
  274 + Map<String, Object> rs = new HashMap<>();
  275 + try {
  276 + rs.put("status", ResponseCode.SUCCESS);
  277 + rs.put("checkStatus", -2);
  278 +
  279 + String msg = null;
  280 + ScheduleRealInfo sch = dayOfSchedule.get(schId);
  281 + String gsbm = sch.getGsBm(), fgsbm = sch.getFgsBm();
  282 +
  283 + if (nbbm != null && !carExist(gsbm, nbbm)) {
  284 + msg = sch.getGsName() + "没有自编号为" + "[" + nbbm + "]的车辆";
  285 + rs.put("msg", msg);
  286 + return rs;
  287 + }
  288 +
  289 + if (nbbm != null && !sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(nbbm))) {
  290 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + nbbm + "】的车辆");
  291 + return rs;
  292 + }
  293 +
  294 + if (nbbm != null && !(fgsbm + "_" + gsbm).equals(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm))) {
  295 +
  296 + String clFgsName = BasicData.businessFgsCodeNameMap.get(BasicData.nbbm2FgsCompanyCodeMap.get(nbbm));
  297 +
  298 + msg = ("【" + nbbm + "】" + "是" + clFgsName + "的车辆!");
  299 + rs.put("msg", msg);
  300 + rs.put("checkStatus", -1);
  301 + return rs;
  302 + }
  303 +
  304 + if(null != jGh && !"/".equals(StringUtils.trim(jGh))){
  305 + Personnel jsy = BasicData.perMap.get(gsbm + "-" + jGh);
  306 +
  307 + if (null == jsy) {
  308 + msg = "【驾驶员】:" + sch.getGsName() + "暂无工号为" + "【" + jGh + "】的人员";
  309 + rs.put("msg", msg);
  310 + return rs;
  311 + }
  312 + else if (!fgsbm.equals(jsy.getBrancheCompanyCode())) {
  313 + //校验分公司
  314 + msg = ("【驾驶员】:" + jGh + "/" + jsy.getPersonnelName() + "是" + jsy.getBrancheCompany() + "的人员");
  315 + rs.put("msg", msg);
  316 + rs.put("checkStatus", -1);
  317 + return rs;
  318 + }
  319 + }
  320 +
  321 + if (null != sGh && !"/".equals(StringUtils.trim(sGh))) {
  322 + Personnel spy = BasicData.perMap.get(gsbm + "-" + sGh);
  323 + if (null == spy) {
  324 + msg = "【售票员】: " + sch.getGsName() + "暂无工号为" + "【" + sGh + "】的人员";
  325 + rs.put("msg", msg);
  326 + return rs;
  327 + }
  328 + else if (!fgsbm.equals(spy.getBrancheCompanyCode())) {
  329 + msg = ("【售票员】: " + sGh + "/" + spy.getPersonnelName() + "是" + spy.getBrancheCompany() + "的人员");
  330 + rs.put("msg", msg);
  331 + rs.put("checkStatus", -1);
  332 + return rs;
  333 + }
  334 + }
  335 +
  336 + rs.put("checkStatus", 1);
  337 + } catch (Exception e) {
  338 + logger.error("", e);
  339 + rs.put("status", ResponseCode.ERROR);
  340 + }
  341 + return rs;
  342 + }
  343 +
  344 +
  345 + /**
  346 + * 车辆是否存在
  347 + *
  348 + * @param gsbm 公司编码
  349 + * @param nbbm 车辆自编号
  350 + * @return
  351 + */
  352 + private boolean carExist(String gsbm, String nbbm) {
  353 + return BasicData.nbbm2CompanyCodeMap.containsKey(nbbm);
  354 + }
  355 +
  356 + /**
  357 + * 获取人员姓名
  358 + *
  359 + * @param gsbm 公司编码
  360 + * @param gh 人员工号
  361 + * @return
  362 + */
  363 + private String getPersonName(String gsbm, String gh) {
  364 + return BasicData.allPerson.get(gsbm + '-' + gh);
  365 + }
  366 +
  367 + @Override
  368 + public Iterable<ScheduleRealInfo> list(Map<String, Object> map) {
  369 + Iterator<ScheduleRealInfo> iterator = super.list(map).iterator();
  370 + Set<ScheduleRealInfo> set = new HashSet<>(100);
  371 +
  372 + DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  373 + //计算时间戳
  374 + ScheduleRealInfo sch;
  375 + while (iterator.hasNext()) {
  376 + sch = iterator.next();
  377 + //待发时间戳
  378 + sch.setDfsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getDfsj()));
  379 + //实发时间戳
  380 + if (StringUtils.isNotEmpty(sch.getFcsjActual())) {
  381 + sch.setFcsjActualTime(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsjActual()));
  382 + }
  383 + set.add(sch);
  384 + }
  385 + return set;
  386 + }
  387 +
  388 + @Override
  389 + public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
  390 + List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
  391 +
  392 + /*Multimap<String, ScheduleRealInfo> mMap = ArrayListMultimap.create();
  393 +
  394 + for (String lineCode : lineList) {
  395 + mMap.putAll(lineCode, dayOfSchedule.findByLineCode(lineCode));
  396 + }*/
  397 + return dayOfSchedule.findByLineCodes(lineList);
  398 + }
  399 +
  400 + private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
  401 +
  402 + private static int BUF_SIZE = 1024;
  403 +
  404 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  405 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  406 +
  407 + @Override
  408 + public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType, String opType, String userId) {
  409 + Map<String, Object> map = new HashMap<>();
  410 + try {
  411 +
  412 + ScheduleRealInfo schedule = dayOfSchedule.get(id);
  413 +
  414 + if (schedule.getStatus() > 0) {
  415 + map.put("status", ResponseCode.SUCCESS);
  416 + map.put("flag", "4008");
  417 + map.put("t", schedule);
  418 + return map;
  419 + }
  420 +
  421 + LineConfig config = lineConfigData.get(schedule.getXlBm());
  422 + //小于线路开始运营时间,则默认跨过24点
  423 + if (dfsj.compareTo(config.getStartOpt()) < 0) {
  424 + schedule.setRealExecDate(fmtyyyyMMdd.print(schedule.getScheduleDate().getTime() + DAY_TIME));
  425 + } else {
  426 + schedule.setRealExecDate(schedule.getScheduleDateStr());
  427 + }
  428 +
  429 + //记录日志
  430 + ScheduleModifyLogger.dftz(schedule, opType, schedule.getDfsj(), dfsj, remarks, userId);
  431 +
  432 + schedule.setDfsjAll(dfsj);
  433 + schedule.setDfAuto(false);
  434 + if ("1".equals(opType))
  435 + schedule.setRemarks(remarks);
  436 +
  437 + List<ScheduleRealInfo> ts = new ArrayList<>();
  438 + ts.add(schedule);
  439 + //调整终点时间和下一个班次的应到时间
  440 + //schedule.calcEndTime();
  441 + /*ScheduleRealInfo nextSch = dayOfSchedule.nextByLp2(schedule);
  442 + if (null != nextSch) {
  443 + nextSch.setQdzArrDatejh(schedule.getZdsj());
  444 + ts.add(nextSch);
  445 + }*/
  446 +
  447 + //调整班次类型
  448 + if (StringUtils.isNotEmpty(bcType) && !bcType.equals(schedule.getBcType())) {
  449 + if ((schedule.getBcType().equals("major")
  450 + || schedule.getBcType().equals("venting"))
  451 + && bcType.equals("normal")) {
  452 + //清空备注
  453 + schedule.setRemarks("");
  454 + }
  455 + schedule.setBcType(bcType);
  456 + }
  457 +
  458 + //如果正在执行该班次
  459 + //ScheduleRealInfo exec = dayOfSchedule.executeCurr(schedule.getClZbh());
  460 + //if(exec != null && exec == schedule){
  461 + //重新计算正在执行班次
  462 + dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
  463 + //}
  464 +
  465 + //重新计算是否误点
  466 + schedule.reCalcLate();
  467 + //取消应发未到标记,不再自动调整待发
  468 + //if(schedule.isLate2()){
  469 + // schedule.setLate2(false);
  470 + //LateAdjustHandle.remove(schedule);
  471 + //}
  472 +
  473 + try {
  474 + if (!schedule.getDirectiveState().equals(-1) && schedule.getStatus() == 0) {
  475 + //重新下发调度指令
  476 + directiveService.send60Dispatch(schedule.getId(), "待发@系统");
  477 + }
  478 + } catch (Exception e) {
  479 + logger.error("", e);
  480 + }
  481 +
  482 + // 持久化到数据库
  483 + dayOfSchedule.save(schedule);
  484 +
  485 + map.put("status", ResponseCode.SUCCESS);
  486 + map.put("ts", ts);
  487 + } catch (Exception e) {
  488 + logger.error("", e);
  489 + map.put("status", ResponseCode.ERROR);
  490 + }
  491 + return map;
  492 + }
  493 +
  494 + @Override
  495 + public Map<String, Object> destroy(String idsStr, String remarks, String reason, String userId) {
  496 +
  497 + Map<String, Object> map = new HashMap<>();
  498 + List<ScheduleRealInfo> rsList = new ArrayList<>();
  499 + map.put("ts", rsList);
  500 + try {
  501 + List<String> idList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(idsStr));
  502 +
  503 + ScheduleRealInfo schedule = null;
  504 + for (String id : idList) {
  505 + schedule = dayOfSchedule.get(Long.parseLong(id));
  506 + if (schedule.isDestroy()) {
  507 + map.put("status", ResponseCode.ERROR);
  508 + map.put("msg", "不必要的重复烂班!");
  509 + return map;
  510 + }
  511 + //记录日志
  512 + ScheduleModifyLogger.jhlb(schedule, remarks, userId);
  513 +
  514 + schedule.setAdjustExps(reason);
  515 + schedule.destroy();
  516 + schedule.addRemarks(remarks);
  517 +
  518 + dayOfSchedule.save(schedule);
  519 + rsList.add(schedule);
  520 + }
  521 +
  522 + //重新计算当前执行班次
  523 + dayOfSchedule.reCalcExecPlan(schedule.getClZbh());
  524 +
  525 + map.put("status", ResponseCode.SUCCESS);
  526 + } catch (Exception e) {
  527 + logger.error("", e);
  528 + map.put("status", ResponseCode.ERROR);
  529 + }
  530 + return map;
  531 + }
  532 +
  533 + // 线路id获取驾驶员
  534 + @Override
  535 + public List<Map<String, String>> findDriverByLine(String lineCode) {
  536 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  537 +
  538 + List<Map<String, String>> rsList = new ArrayList<>();
  539 + Map<String, String> map = null;
  540 + Personnel driver = null;
  541 + String code = null;
  542 +
  543 + for (EmployeeConfigInfo employee : list) {
  544 + driver = employee.getJsy();
  545 + if (driver != null) {
  546 + map = new HashMap<>();
  547 + code = driver.getJobCode();
  548 + map.put("id", code + "/" + driver.getPersonnelName());
  549 + map.put("text", code + "/" + driver.getPersonnelName());
  550 + rsList.add(map);
  551 + }
  552 + }
  553 + return rsList;
  554 + }
  555 +
  556 + // 线路id获取售票员
  557 + @Override
  558 + public List<Map<String, String>> findConductorByLine(String lineCode) {
  559 + List<EmployeeConfigInfo> list = employeeConfigInfoRepository.findBylineCode(lineCode);
  560 +
  561 + List<Map<String, String>> rsList = new ArrayList<>();
  562 + Map<String, String> map = null;
  563 + Personnel conductor = null;
  564 + String code = null;
  565 +
  566 + for (EmployeeConfigInfo employee : list) {
  567 + conductor = employee.getSpy();
  568 + if (conductor != null) {
  569 + code = conductor.getJobCode();
  570 + map = new HashMap<>();
  571 + map.put("id", code + "/" + conductor.getPersonnelName());
  572 + map.put("text", code + "/" + conductor.getPersonnelName());
  573 + rsList.add(map);
  574 + }
  575 + }
  576 + return rsList;
  577 + }
  578 +
  579 + @Override
  580 + public List<Map<String, String>> findCarByLine(String lineCode) {
  581 +
  582 + List<CarConfigInfo> list = carConfigInfoRepository.findBylineCode(lineCode);
  583 +
  584 + List<Map<String, String>> rsList = new ArrayList<>();
  585 + Map<String, String> map = null;
  586 + Cars car = null;
  587 + String code = null;
  588 +
  589 + for (CarConfigInfo cci : list) {
  590 + car = cci.getCl();
  591 + if (car != null) {
  592 + code = car.getInsideCode();
  593 + map = new HashMap<>();
  594 + map.put("id", code);
  595 + map.put("text", code);
  596 + rsList.add(map);
  597 + }
  598 + }
  599 + return rsList;
  600 + }
  601 +
  602 + /**
  603 + * 添加到历史库
  604 + *
  605 + * @param t
  606 + * @return
  607 + */
  608 + @Override
  609 + public Map<String, Object> addToHistory(ScheduleRealInfo t) {
  610 + Map<String, Object> rs = new HashMap<>();
  611 + try {
  612 + if (!carExist(t.getGsBm(), t.getClZbh())) {
  613 + rs.put("msg", "车辆 " + t.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
  614 + rs.put("status", ResponseCode.ERROR);
  615 + return rs;
  616 + }
  617 +
  618 + SysUser user = SecurityUtils.getCurrentUser();
  619 + //String schDate = DayOfSchedule.currSchDateMap.get(t.getXlBm());
  620 +
  621 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
  622 +
  623 + if (StringUtils.isEmpty(t.getjGh())) {
  624 + rs.put("status", ResponseCode.ERROR);
  625 + rs.put("msg", "驾驶员工号不能为空!");
  626 + return rs;
  627 + }
  628 + //截取驾驶员工号
  629 + if (t.getjGh().indexOf("-") != -1) {
  630 + t.setjGh(t.getjGh().split("-")[1]);
  631 + }
  632 + //检查驾驶员工号
  633 + String jName = getPersonName(t.getGsBm(), t.getjGh());
  634 + if (StringUtils.isEmpty(jName)) {
  635 + rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的驾驶员");
  636 + rs.put("status", ResponseCode.ERROR);
  637 + return rs;
  638 + } else if (StringUtils.isEmpty(t.getjName())) {
  639 + t.setjName(jName);//补上驾驶员名称
  640 + }
  641 +
  642 + //有售票员
  643 + if (StringUtils.isNotEmpty(t.getsGh())) {
  644 + String sName = getPersonName(t.getGsBm(), t.getsGh());
  645 + if (StringUtils.isEmpty(sName)) {
  646 + rs.put("msg", t.getXlName() + "所属的公司编码下找不到工号为【" + t.getjGh() + "】的售票员");
  647 + rs.put("status", ResponseCode.ERROR);
  648 + return rs;
  649 + } else if (StringUtils.isEmpty(t.getsName())) {
  650 + t.setsName(sName);//补上售票员名称
  651 + }
  652 + } else {
  653 + t.setsGh("");
  654 + t.setsName("");
  655 + }
  656 +
  657 + //公司 和 分公司名称
  658 + t.setGsName(BasicData.businessCodeNameMap.get(t.getGsBm()));
  659 + t.setFgsName(BasicData.businessFgsCodeNameMap.get(t.getFgsBm()+ "_" + t.getGsBm() ));
  660 +
  661 + //t.setScheduleDateStr(schDate);
  662 + t.setScheduleDate(sdfyyyyMMdd.parse(t.getScheduleDateStr()));
  663 + t.setRealExecDate(t.getScheduleDateStr());
  664 + t.setCreateBy(user);
  665 + t.setSflj(true);
  666 + t.setLate(false);
  667 + t.setDfsj(t.getFcsj());
  668 + t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime());
  669 + t.setJhlcOrig(t.getJhlc());
  670 +
  671 + //班次历时
  672 + t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
  673 +
  674 + //起终点名称
  675 + String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
  676 + t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
  677 + t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
  678 +
  679 + //计算班次实际执行时间
  680 + schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
  681 + //处理计达跨24点
  682 + LineConfig conf = lineConfigData.get(t.getXlBm());
  683 + if (t.getZdsj().compareTo(conf.getStartOpt()) < 0) {
  684 + t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
  685 + }
  686 + if (t.getZdsjT() < t.getFcsjT()) {
  687 + rs.put("status", ResponseCode.ERROR);
  688 + rs.put("msg", "起终点时间异常!");
  689 + return rs;
  690 + }
  691 +
  692 + t.setId(dayOfSchedule.getId());
  693 + //实时入库
  694 + rs = super.save(t);
  695 + } catch (Exception e) {
  696 + logger.error("", e);
  697 + rs.put("status", ResponseCode.ERROR);
  698 + }
  699 + return rs;
  700 + }
  701 +
  702 +
  703 + /**
  704 + * 临加班次
  705 + */
  706 + @Override
  707 + public Map<String, Object> save(ScheduleRealInfo sch) {
  708 + Map<String, Object> rs = new HashMap<>();
  709 + try {
  710 + String clZbh = sch.getClZbh();
  711 + if (StringUtils.isNotEmpty(clZbh)) {
  712 + //检测
  713 + if (!carExist(sch.getGsBm(), clZbh)) {
  714 + rs.put("status", ResponseCode.ERROR);
  715 + rs.put("msg", "车辆 " + clZbh + " 不存在!");
  716 + return rs;
  717 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
  718 + rs.put("status", ResponseCode.ERROR);
  719 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
  720 + return rs;
  721 + }
  722 + }
  723 +
  724 + SysUser user = SecurityUtils.getCurrentUser();
  725 + String schDate = DayOfSchedule.currSchDateMap.get(sch.getXlBm());
  726 +
  727 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"), sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
  728 +
  729 + if (StringUtils.isEmpty(sch.getjGh())) {
  730 + rs.put("status", ResponseCode.ERROR);
  731 + rs.put("msg", "驾驶员工号不能为空!");
  732 + return rs;
  733 + }
  734 + //截取驾驶员工号
  735 + if (sch.getjGh().indexOf("-") != -1) {
  736 + sch.setjGh(sch.getjGh().split("-")[1]);
  737 + }
  738 + //检查驾驶员工号
  739 + String jName = getPersonName(sch.getGsBm(), sch.getjGh());
  740 + if (StringUtils.isEmpty(jName)) {
  741 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
  742 + rs.put("status", ResponseCode.ERROR);
  743 + return rs;
  744 + } else if (StringUtils.isEmpty(sch.getjName())) {
  745 + sch.setjName(jName);//补上驾驶员名称
  746 + }
  747 +
  748 + //有售票员
  749 + if (StringUtils.isNotEmpty(sch.getsGh())) {
  750 + String sName = getPersonName(sch.getGsBm(), sch.getsGh());
  751 + if (StringUtils.isEmpty(sName)) {
  752 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的售票员");
  753 + rs.put("status", ResponseCode.ERROR);
  754 + return rs;
  755 + } else if (StringUtils.isEmpty(sch.getsName())) {
  756 + sch.setsName(sName);//补上售票员名称
  757 + }
  758 + } else {
  759 + sch.setsGh("");
  760 + sch.setsName("");
  761 + }
  762 +
  763 + //公司 和 分公司名称
  764 + sch.setGsName(BasicData.businessCodeNameMap.get(sch.getGsBm()));
  765 + sch.setFgsName(BasicData.businessFgsCodeNameMap.get(sch.getFgsBm() + "_" + sch.getGsBm()));
  766 + sch.setCreateDate(new Date());
  767 + sch.setScheduleDateStr(schDate);
  768 + sch.setScheduleDate(sdfyyyyMMdd.parse(schDate));
  769 + sch.setRealExecDate(schDate);
  770 +
  771 + sch.setCreateBy(user);
  772 + sch.setSflj(true);
  773 + sch.setLate(false);
  774 + sch.setDfsj(sch.getFcsj());
  775 + sch.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + sch.getZdsj()).getTime());
  776 + sch.setJhlcOrig(sch.getJhlc());
  777 + sch.setCreateDate(new Date());
  778 + sch.setUpdateDate(new Date());
  779 + sch.setSpId(-1L);
  780 + //起终点名称
  781 + String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
  782 + sch.setQdzName(BasicData.getStationNameByCode(sch.getQdzCode(), prefix));
  783 + sch.setZdzName(BasicData.getStationNameByCode(sch.getZdzCode(), prefix));
  784 +
  785 + //计算班次实际执行时间
  786 + schAttrCalculator.calcRealDate(sch).calcAllTimeByFcsj(sch);
  787 +
  788 + //处理计达跨24点
  789 + LineConfig conf = lineConfigData.get(sch.getXlBm());
  790 + if (sch.getZdsj().compareTo(conf.getStartOpt()) < 0) {
  791 + sch.setZdsjT(sdfyyyyMMddHHmm.parse(sch.getScheduleDateStr() + sch.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
  792 + }
  793 +
  794 + //班次历时
  795 + sch.setBcsj((int) ((sch.getZdsjT() - sch.getDfsjT()) / 1000 / 60));
  796 + if (sch.getZdsjT() < sch.getFcsjT()) {
  797 + rs.put("status", ResponseCode.ERROR);
  798 + rs.put("msg", "起终点时间异常!");
  799 + return rs;
  800 + }
  801 +
  802 + sch.setId(dayOfSchedule.getId());
  803 + //实时入库
  804 + super.save(sch);
  805 +
  806 + // 加入缓存
  807 + dayOfSchedule.put(sch);
  808 +
  809 + //更新起点应到时间
  810 + List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
  811 +
  812 + //重新计算车辆当前执行班次
  813 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  814 +
  815 + //记录站到场历时数据
  816 + Station2ParkBuffer.put(sch);
  817 +
  818 + rs.put("ts", ts);
  819 + rs.put("t", sch);
  820 + } catch (Exception e) {
  821 + logger.error("", e);
  822 + rs.put("status", ResponseCode.ERROR);
  823 + }
  824 + return rs;
  825 + }
  826 +
  827 + /**
  828 + * 删除历史表临加班次
  829 + *
  830 + * @param id
  831 + * @return
  832 + */
  833 + @Override
  834 + public Map<String, Object> deleteToHistory(Long id) {
  835 + Map<String, Object> rs = new HashMap<>();
  836 + rs.put("status", ResponseCode.ERROR);
  837 +
  838 + try {
  839 + ScheduleRealInfo sch = super.findById(id);
  840 + if (sch == null) {
  841 + rs.put("msg", "无效的id号");
  842 + return rs;
  843 + }
  844 +
  845 + if (!sch.isSflj()) {
  846 + rs.put("msg", "你只能删除临加班次");
  847 + return rs;
  848 + }
  849 +
  850 + //解除和调度指令的外键约束
  851 + jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
  852 +
  853 + //数据库删除
  854 + rs = super.delete(id);
  855 + } catch (Exception e) {
  856 + logger.error("", e);
  857 + rs.put("msg", e.getMessage());
  858 + }
  859 +
  860 + return rs;
  861 + }
  862 +
  863 + @Override
  864 + public Map<String, Object> delete(Long id) {
  865 + Map<String, Object> rs = new HashMap<>();
  866 + rs.put("status", ResponseCode.ERROR);
  867 +
  868 + ScheduleRealInfo sch = null;
  869 + try {
  870 + sch = dayOfSchedule.get(id);
  871 + if (sch == null) {
  872 + rs.put("msg", "无效的id号");
  873 + return rs;
  874 + }
  875 +
  876 + if (!sch.isSflj()) {
  877 + rs.put("msg", "你只能删除临加班次");
  878 + return rs;
  879 + }
  880 +
  881 + sch.setDeleted(true);
  882 + //解除和调度指令的外键约束
  883 + jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id);
  884 +
  885 + //数据库删除
  886 + rs = super.delete(id);
  887 + if (rs.get("status").equals(ResponseCode.SUCCESS)) {
  888 + dayOfSchedule.delete(sch);
  889 + //更新起点应到时间
  890 + List<ScheduleRealInfo> ts = dayOfSchedule.updateQdzTimePlan(sch);
  891 + rs.put("ts", ts);
  892 + rs.put("delete", sch);
  893 + } else
  894 + sch.setDeleted(false);
  895 + } catch (Exception e) {
  896 + logger.error("", e);
  897 + rs.put("msg", e.getMessage());
  898 + sch.setDeleted(false);
  899 + }
  900 +
  901 + return rs;
  902 + }
  903 +
  904 + @Override
  905 + public List<Map<String, String>> sreachVehic(String nbbm) {
  906 + // 转大写
  907 + nbbm = nbbm.toUpperCase();
  908 +
  909 + List<Map<String, String>> list = new ArrayList<>();
  910 + Map<String, String> map;
  911 + Set<String> allSet = BasicData.nbbm2CompanyCodeMap.keySet();
  912 +
  913 + Line line;
  914 + for (String k : allSet) {
  915 + if (k.indexOf(nbbm) != -1) {
  916 + // 所属线路
  917 + map = new HashMap<>();
  918 + line = BasicData.nbbm2LineMap.get(k);
  919 + map.put("id", k);
  920 + map.put("text", k);
  921 + if (null != line) {
  922 + map.put("lineName", line.getName());
  923 + map.put("lineCode", line.getLineCode());
  924 + }
  925 +
  926 + list.add(map);
  927 + }
  928 +
  929 + if (list.size() > 20)
  930 + break;
  931 + }
  932 + return list;
  933 + }
  934 +
  935 + @Override
  936 + public void adjustCar(ScheduleRealInfo schedule, String car) {
  937 + schedule.setClZbh(car);
  938 + }
  939 +
  940 + @Override
  941 + public void adjustDriver(ScheduleRealInfo schedule, String driver, String driverName) {
  942 + if (driver.indexOf("-") != -1)
  943 + driver = driver.split("-")[1];
  944 + schedule.setjGh(driver);
  945 + schedule.setjName(driverName);
  946 + }
  947 +
  948 + @Override
  949 + public void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName) {
  950 + if (conductor.indexOf("-") != -1)
  951 + conductor = conductor.split("-")[1];
  952 + schedule.setsGh(conductor);
  953 + schedule.setsName(conductorName);
  954 + }
  955 +
  956 + @Override
  957 + public List<ScheduleRealInfo> queryUserInfo(String line, String date, String state) {
  958 + List<ScheduleRealInfo> scheduleRealInfos = new ArrayList<>();
  959 + List<Object[]> objects = null;
  960 + if (state.equals("2")) {
  961 + objects = scheduleRealInfoRepository.queryUserInfo2(line, date);
  962 + for (Object[] objs : objects) {
  963 + ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
  964 + scheduleRealInfo.setId((Long)objs[0]);
  965 + scheduleRealInfo.setjGh((String)objs[1]);
  966 + scheduleRealInfo.setClZbh((String)objs[2]);
  967 + scheduleRealInfo.setLpName((String)objs[3]);
  968 + scheduleRealInfo.setjName((String)objs[4]);
  969 +
  970 + scheduleRealInfos.add(scheduleRealInfo);
  971 + }
  972 + } else {
  973 + objects = scheduleRealInfoRepository.queryUserInfo3(line, date);
  974 + for (Object[] objs : objects) {
  975 + ScheduleRealInfo scheduleRealInfo = new ScheduleRealInfo();
  976 + scheduleRealInfo.setId((Long)objs[0]);
  977 + scheduleRealInfo.setClZbh((String)objs[1]);
  978 +
  979 + scheduleRealInfos.add(scheduleRealInfo);
  980 + }
  981 + }
  982 +
  983 + return scheduleRealInfos;
  984 + }
  985 +
  986 + @Override
  987 + public List<ScheduleRealInfo> queryUserInfoPx(String line, String date, String state, String type) {
  988 +// List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  989 + state = state + "";
  990 + String lpname = state;
  991 + String px = type;
  992 + if (state.equals("lpName")) {
  993 + state = state + "+1";
  994 + type = "ASC";
  995 + }
  996 + String minfcsj = "02:00";
  997 + List<Line> lineList = lineRepository.findLineByCode(line);
  998 + if (lineList.size() > 0) {
  999 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  1000 + + " id = ("
  1001 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  1002 + + ")";
  1003 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  1004 + }
  1005 + String sqlPlan = "select * from (select * from ("
  1006 + + " select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
  1007 + + " s.lp_Name as lpName,min(s.j_Name) as jName,max(s.schedule_date_str) as dateStr ,"
  1008 + + " min(s.fcsj) as fcsj,1 as px from bsth_c_s_sp_info_real s where "
  1009 + + " s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
  1010 + + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name) x where x.fcsj >'" + minfcsj + "'"
  1011 + + " UNION "
  1012 + + " select * from ( select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh, "
  1013 + + " s.lp_Name as lpName,min(s.j_Name) as jName, max(s.schedule_date_str) as dateStr,"
  1014 + + " min(s.fcsj) as fcsj,2 as px from bsth_c_s_sp_info_real s "
  1015 + + " where s.xl_Bm = '" + line + "' and s.schedule_date_str ='" + date + "'"
  1016 + + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name"
  1017 + + " ) y where y.fcsj <='" + minfcsj + "') z order by (" + state + "),dateStr,px,fcsj " + type;
  1018 + List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan,
  1019 + new RowMapper<ScheduleRealInfo>() {
  1020 + @Override
  1021 + public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
  1022 + ScheduleRealInfo t = new ScheduleRealInfo();
  1023 + t.setId(rs.getLong("id"));
  1024 + t.setjGh(rs.getString("jGh"));
  1025 + t.setClZbh(rs.getString("clZbh"));
  1026 + t.setLpName(rs.getString("lpName"));
  1027 + t.setjName(rs.getString("jName"));
  1028 + t.setFcsj(rs.getString("fcsj"));
  1029 + return t;
  1030 + }
  1031 + });
  1032 + if (lpname.equals("lpName")) {
  1033 +
  1034 + List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>();
  1035 + Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
  1036 +// if (px.equals("desc")) {
  1037 + int zt = 0;
  1038 + for (int l = 0; l < 2; l++) {
  1039 + for (int i = 0; i < list.size(); i++) {
  1040 + ScheduleRealInfo t = list.get(i);
  1041 + if (t.getLpName().indexOf("+") != -1) {
  1042 + if (zt == 0) {
  1043 + listNew.add(t);
  1044 + }
  1045 + } else if (pattern.matcher(t.getLpName()).matches()) {
  1046 + if (zt == 1) {
  1047 + listNew.add(t);
  1048 + }
  1049 + } else {
  1050 + continue;
  1051 + }
  1052 + }
  1053 + zt++;
  1054 + }
  1055 +
  1056 + Collections.sort(list, new ComparableLp());
  1057 + for (int i = 0; i < list.size(); i++) {
  1058 + ScheduleRealInfo t = list.get(i);
  1059 + if (t.getLpName().indexOf("+") != -1) {
  1060 + continue;
  1061 + } else if (pattern.matcher(t.getLpName()).matches()) {
  1062 + continue;
  1063 + } else {
  1064 + listNew.add(t);
  1065 + }
  1066 + }
  1067 + return listNew;
  1068 + } else {
  1069 + return list;
  1070 + }
  1071 +
  1072 + }
  1073 +
  1074 + /**
  1075 + *
  1076 + */
  1077 + @Override
  1078 + public List<ScheduleRealInfo> exportWaybill(String jName,String jGh, String clZbh, String lpName, String date, String line) {
  1079 + ReportUtils ee = new ReportUtils();
  1080 + ReportRelatedUtils rru = new ReportRelatedUtils();
  1081 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  1082 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  1083 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  1084 +// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
  1085 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  1086 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1087 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1088 + Set<ChildTaskPlan> cts = s.getcTasks();
  1089 + if (cts != null && cts.size() > 0) {
  1090 + lists.add(s);
  1091 + } else {
  1092 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  1093 + lists.add(s);
  1094 + }
  1095 + }
  1096 + }
  1097 + DecimalFormat format = new DecimalFormat("0.00");
  1098 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  1099 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  1100 + //计算里程和班次数,并放入Map里
  1101 + Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  1102 +
  1103 + map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
  1104 + map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
  1105 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  1106 + double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
  1107 + map.put("yygl", yygl);
  1108 + double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
  1109 + map.put("ksgl", ksgl);
  1110 + map.put("realMileage", Arith.add(yygl, ksgl));
  1111 + map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
  1112 + map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
  1113 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  1114 + int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
  1115 + map.put("sjbc", sjbc);
  1116 +// map=new HashMap<String,Object>();
  1117 +
  1118 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  1119 + String minfcsj = "02:00";
  1120 + List<Line> lineList = lineRepository.findLineByCode(line);
  1121 + if (lineList.size() > 0) {
  1122 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  1123 + + " id = ("
  1124 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  1125 + + ")";
  1126 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  1127 + }
  1128 + String[] minSjs = minfcsj.split(":");
  1129 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  1130 +
  1131 +
  1132 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1133 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1134 + String[] fcsj = s.getFcsj().split(":");
  1135 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  1136 +
  1137 + Long fscjT = 0L;
  1138 + if (fcsjL < minSj) {
  1139 + Calendar calendar = new GregorianCalendar();
  1140 + calendar.setTime(s.getScheduleDate());
  1141 + calendar.add(calendar.DATE, 1);
  1142 + s.setScheduleDate(calendar.getTime());
  1143 + try {
  1144 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  1145 + } catch (ParseException e) {
  1146 + // TODO Auto-generated catch block
  1147 + e.printStackTrace();
  1148 + }
  1149 +
  1150 + } else {
  1151 + try {
  1152 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  1153 + } catch (ParseException e) {
  1154 + // TODO Auto-generated catch block
  1155 + e.printStackTrace();
  1156 + }
  1157 + ;
  1158 + }
  1159 + s.setFcsjT(fscjT);
  1160 + }
  1161 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  1162 + Collections.sort(scheduleRealInfos, new ComparableReal());
  1163 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  1164 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  1165 + s.setAdjustExps(i + 1 + "");
  1166 + String remarks = "";
  1167 + if (s.getRemarks() != null) {
  1168 + remarks += s.getRemarks();
  1169 + }
  1170 +
  1171 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  1172 + if (!childTaskPlans.isEmpty()) {
  1173 + s.setFcsjActual("");
  1174 + s.setZdsjActual("");
  1175 + s.setJhlc(0.0);
  1176 + }
  1177 +
  1178 + if (s.isDestroy()) {
  1179 + s.setFcsjActual("");
  1180 + s.setZdsjActual("");
  1181 + s.setJhlc(0.0);
  1182 + remarks += "(烂班)";
  1183 + s.setRemarks(remarks);
  1184 + }
  1185 +
  1186 + listSchedule.add(s);
  1187 + //计算营运里程,空驶里程
  1188 + if (!childTaskPlans.isEmpty()) {
  1189 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  1190 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  1191 + Collections.sort(listit, new ComparableChild());
  1192 + for (int j = 0; j < listit.size(); j++) {
  1193 + ScheduleRealInfo t = new ScheduleRealInfo();
  1194 + ChildTaskPlan childTaskPlan = listit.get(j);
  1195 + if (childTaskPlan.isDestroy()) {
  1196 + t.setFcsjActual("");
  1197 + t.setZdsjActual("");
  1198 + t.setJhlc(0.0);
  1199 + } else {
  1200 + t.setFcsjActual(childTaskPlan.getStartDate());
  1201 + t.setZdsjActual(childTaskPlan.getEndDate());
  1202 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  1203 + }
  1204 + t.setQdzName(childTaskPlan.getStartStationName());
  1205 + t.setZdzName(childTaskPlan.getEndStationName());
  1206 + t.setRemarks(childTaskPlan.getRemarks());
  1207 + t.setAdjustExps("子");
  1208 + t.setjGh("");
  1209 + t.setjName("");
  1210 + t.setsGh("");
  1211 + t.setsName("");
  1212 + listSchedule.add(t);
  1213 + }
  1214 + }
  1215 + }
  1216 + Map<String, Object> maps;
  1217 + for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
  1218 + maps = new HashMap<String, Object>();
  1219 + try {
  1220 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  1221 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  1222 + maps = rru.getMapValue(scheduleRealInfo);
  1223 + maps.put("bcs", scheduleRealInfo.getAdjustExps());
  1224 + String zdsj = scheduleRealInfo.getZdsj();
  1225 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  1226 + if (zdsj != null && zdsjActual != null &&
  1227 + !zdsj.equals(zdsjActual) &&
  1228 + !zdsj.equals("") &&
  1229 + !zdsjActual.equals("")) {
  1230 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  1231 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  1232 + if (zdsj.compareTo(zdsjActual) > 0) {
  1233 + if (zdsjT - zdsjAT > 1000) {
  1234 + maps.put("fast", "");
  1235 + maps.put("slow", zdsjAT - zdsjT + 1440);
  1236 + } else {
  1237 + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  1238 + maps.put("slow", "");
  1239 + }
  1240 + } else {
  1241 + if (zdsjAT - zdsjT > 1000) {
  1242 + maps.put("fast", zdsjT - zdsjAT + 1440);
  1243 + maps.put("slow", "");
  1244 + } else {
  1245 + maps.put("fast", "");
  1246 + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  1247 + }
  1248 + }
  1249 + } else {
  1250 + maps.put("fast", "");
  1251 + maps.put("slow", "");
  1252 + }
  1253 + listMap.add(maps);
  1254 + } catch (Exception e) {
  1255 + e.printStackTrace();
  1256 + }
  1257 + }
  1258 +
  1259 + String xls = "";
  1260 + if (map.get("type").toString().equals("0")) {
  1261 + xls = "waybill_minhang.xls";
  1262 + } else {
  1263 + xls = "waybill_minhang_dl.xls";
  1264 + }
  1265 +
  1266 +
  1267 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1268 +
  1269 + list.add(listMap.iterator());
  1270 + ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/" + xls,
  1271 + path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  1272 + return scheduleRealInfos;
  1273 + }
  1274 +
  1275 + @Override
  1276 + public List<Map<String, Object>> dailyInfo(String line, String date, String type) {
  1277 + DecimalFormat format = new DecimalFormat("0.00");
  1278 + ReportUtils ee = new ReportUtils();
  1279 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1280 + List<Map<String, Object>> list = scheduleRealInfoRepository.dailyInfo(line, date);
  1281 +
  1282 + double totalZGL = 0, totalKSGL = 0, totalYH = 0;
  1283 + int totalBCS = 0;
  1284 + for (int i = 0; i < list.size(); i++) {
  1285 + String zgl = format.format(Double.parseDouble(list.get(i).get("zgl") == null ? "0" : list.get(i).get("zgl").toString()));
  1286 + String ksgl = format.format(Double.parseDouble(list.get(i).get("ksgl") == null ? "0" : list.get(i).get("ksgl").toString()));
  1287 + if (type.equals("export")) {
  1288 + totalZGL += Double.parseDouble(zgl);
  1289 + totalKSGL += Double.parseDouble(ksgl);
  1290 + totalBCS += Integer.parseInt(list.get(i).get("bcs").toString());
  1291 + }
  1292 + list.get(i).put("zgl", zgl);
  1293 + list.get(i).put("ksgl", ksgl);
  1294 + }
  1295 + if (type.equals("export")) {
  1296 + Map<String, Object> map = new HashMap<String, Object>();
  1297 + map.put("line", line);
  1298 + map.put("date", date);
  1299 + map.put("totalZGL", totalZGL);
  1300 + map.put("totalKSGL", totalKSGL);
  1301 + map.put("totalYH", totalYH);
  1302 + map.put("totalBCS", totalBCS);
  1303 +
  1304 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1305 +
  1306 + listI.add(list.iterator());
  1307 + try {
  1308 + ee.excelReplace(listI, new Object[]{map}, path + "mould/daily.xls",
  1309 + path + "export/班次日报" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  1310 + } catch (ParseException e) {
  1311 + e.printStackTrace();
  1312 + }
  1313 + }
  1314 + return list;
  1315 + }
  1316 +
  1317 + @Override
  1318 + public List<Object[]> historyMessage(String line, String date, String code, String type) {
  1319 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1320 +
  1321 + long d = 0;
  1322 + long t = 0;
  1323 + if (date.length() > 0) {
  1324 + try {
  1325 + d = sdf.parse(date + " 00:00:00").getTime();
  1326 + t = sdf.parse(date + " 23:59:59").getTime();
  1327 + } catch (ParseException e) {
  1328 + // TODO Auto-generated catch block
  1329 + e.printStackTrace();
  1330 + }
  1331 +
  1332 + }
  1333 + String device = "";
  1334 + String device2 ="";
  1335 + long qyrqTime=0l;
  1336 + if (!code.equals("")) {
  1337 + try {
  1338 + List<CarDevice> deviceList=carDeviceRepository.findCarCode(code, sdf.parse(date+ " 00:00:00"));
  1339 + if(deviceList.size()>0){
  1340 + device=deviceList.get(0).getOldDeviceNo();
  1341 + Date qyrq=deviceList.get(0).getQyrq();
  1342 + qyrqTime=qyrq.getTime();
  1343 + if(qyrqTime<t){
  1344 + device2=deviceList.get(0).getNewDeviceNo();
  1345 + }
  1346 + }else{
  1347 + device = BasicData.deviceId2NbbmMap.inverse().get(code);
  1348 + }
  1349 + } catch (ParseException e) {
  1350 + // TODO Auto-generated catch block
  1351 + e.printStackTrace();
  1352 + }
  1353 + }
  1354 + List<Object[]> list=new ArrayList<Object[]>();
  1355 +
  1356 + List<Object[]> list0 =scheduleRealInfoRepository.historyMessage(line, d, t, device);
  1357 + for (Object[] obj : list0) {
  1358 + if (obj != null) {
  1359 + if(code.equals("")){
  1360 + if (BasicData.deviceId2NbbmMap.get(obj[0].toString()) == null) {
  1361 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  1362 + try {
  1363 + carDeviceList = carDeviceRepository.findCarDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
  1364 + //启用日期大于营运日期 还是根据旧设备号查询
  1365 + if(carDeviceList.size()==0){
  1366 + carDeviceList = carDeviceRepository.findCarOldDevice(obj[0].toString(), new Date(Long.parseLong(obj[3].toString())));
  1367 + }
  1368 + } catch (Exception e) {
  1369 + // TODO Auto-generated catch block
  1370 + e.printStackTrace();
  1371 + }
  1372 + if (carDeviceList.size() > 0) {
  1373 + obj[0] = carDeviceList.get(0).getClZbh();
  1374 + } else {
  1375 + obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
  1376 + }
  1377 + } else {
  1378 + obj[0] = BasicData.deviceId2NbbmMap.get(obj[0].toString());
  1379 + }
  1380 + }else{
  1381 + obj[0]=code;
  1382 + }
  1383 +
  1384 + obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
  1385 + obj[4] = BasicData.lineCode2NameMap.get(line);
  1386 + }
  1387 + }
  1388 + list.addAll(list0);
  1389 + if(!device2.equals("")){
  1390 + List<Object[]> list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2);
  1391 + for (Object[] obj : list1) {
  1392 + if (obj != null) {
  1393 + obj[0] =code;
  1394 + obj[3] = sdf.format(new Date(Long.parseLong(obj[3].toString())));
  1395 + obj[4] = BasicData.lineCode2NameMap.get(line);
  1396 + }
  1397 + }
  1398 + list.addAll(list1);
  1399 + }
  1400 +
  1401 + if (type != null && type.length() != 0 && type.equals("export")) {
  1402 + String lineName = BasicData.lineCode2NameMap.get(line);
  1403 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1404 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1405 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1406 + Map<String, Object> m = new HashMap<String, Object>();
  1407 + ReportUtils ee = new ReportUtils();
  1408 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  1409 + for (int i = 0; i < list.size(); i++) {
  1410 + Map<String, Object> map = new HashMap<String, Object>();
  1411 + Object[] obj = list.get(i);
  1412 + map.put("num", i + 1);
  1413 + map.put("line", obj[4]);
  1414 + map.put("clZbh", obj[0]);
  1415 + map.put("sender", obj[1]);
  1416 + map.put("date", obj[3]);
  1417 + map.put("text", obj[2]);
  1418 + newList.add(map);
  1419 + }
  1420 + try {
  1421 + listI.add(newList.iterator());
  1422 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1423 + ee.excelReplace(listI, new Object[]{m}, path + "mould/historyMessage.xls",
  1424 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  1425 + + "-" + lineName + "-调度历史消息.xls");
  1426 + } catch (Exception e) {
  1427 + // TODO: handle exception
  1428 + e.printStackTrace();
  1429 + }
  1430 + }
  1431 +
  1432 + if (type != null && type.length() != 0 && type.equals("export_msg")) {
  1433 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1434 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1435 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1436 + Map<String, Object> m = new HashMap<String, Object>();
  1437 + ReportUtils ee = new ReportUtils();
  1438 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  1439 + for (int i = 0; i < list.size(); i++) {
  1440 + Map<String, Object> map = new HashMap<String, Object>();
  1441 + Object[] obj = list.get(i);
  1442 + map.put("num", i + 1);
  1443 + map.put("line", obj[4]);
  1444 + map.put("clZbh", obj[0]);
  1445 + map.put("sender", obj[1]);
  1446 + map.put("date", obj[3]);
  1447 + map.put("text", obj[2]);
  1448 + newList.add(map);
  1449 + }
  1450 + try {
  1451 + listI.add(newList.iterator());
  1452 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  1453 + ee.excelReplace(listI, new Object[]{m}, path + "mould/message.xls",
  1454 + path + "export/调度消息分析" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  1455 + } catch (Exception e) {
  1456 + // TODO: handle exception
  1457 + e.printStackTrace();
  1458 + }
  1459 + }
  1460 + return list;
  1461 + }
  1462 +
  1463 + @Override
  1464 + public Map<Integer, Integer> trustStatus(String lineStr) {
  1465 + List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lineStr));
  1466 +
  1467 + Map<Integer, Integer> map = new HashMap<>();
  1468 + return map;
  1469 + }
  1470 +
  1471 + @Override
  1472 + public Map<String, Object> realOutAdjust(Map<String, String> map) {
  1473 + Map<String, Object> rs = new HashMap<>();
  1474 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1475 + try {
  1476 + // 维修上报
  1477 + if (StringUtils.isNotBlank(map.get("reportTypes"))) {
  1478 + Map<String, Object> param = new HashMap<String, Object>();
  1479 + param.putAll(map);
  1480 + rs = repairReport(param, false);
  1481 + }
  1482 +
  1483 + Long id = Long.parseLong(map.get("id"));
  1484 + String remarks = map.get("remarks"), fcsjActual = map.get("fcsjActual");
  1485 +
  1486 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1487 +
  1488 + LineConfig config = lineConfigData.get(sch.getXlBm());
  1489 + //小于线路开始运营时间,则默认跨过24点
  1490 + if (fcsjActual.compareTo(config.getStartOpt()) < 0) {
  1491 + sch.setRealExecDate(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME));
  1492 + } else {
  1493 + sch.setRealExecDate(sch.getScheduleDateStr());
  1494 + }
  1495 +
  1496 + //日志记录
  1497 + ScheduleModifyLogger.sftz(sch, fcsjActual, remarks);
  1498 +
  1499 + sch.setFcsjActualAll(fcsjActual);
  1500 + sch.setRemarks(remarks);
  1501 + sch.calcStatus();
  1502 + //if(sch.isLate2()){
  1503 + //取消应发未到标记
  1504 + // sch.setLate2(false);
  1505 + LateAdjustHandle.remove(sch);
  1506 + //}
  1507 +
  1508 + dayOfSchedule.save(sch);
  1509 +
  1510 + ts.add(sch);
  1511 +
  1512 + rs.put("status", ResponseCode.SUCCESS);
  1513 + rs.put("ts", ts);
  1514 +
  1515 + //通知页面刷新
  1516 + sendUtils.refreshSch(ts);
  1517 + } catch (Exception e) {
  1518 + logger.error("", e);
  1519 + rs.put("status", ResponseCode.ERROR);
  1520 + }
  1521 +
  1522 + return rs;
  1523 + }
  1524 +
  1525 + @Override
  1526 + public Map<String, Object> revokeDestroy(Long id) {
  1527 + Map<String, Object> rs = new HashMap<>();
  1528 + try {
  1529 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1530 + if (sch.getStatus() != -1) {
  1531 + rs.put("status", ResponseCode.ERROR);
  1532 + rs.put("msg", "未烂班,无法撤销!");
  1533 + } else {
  1534 + //日志记录
  1535 + ScheduleModifyLogger.cxlb(sch);
  1536 +
  1537 + sch.setStatus(0);
  1538 + sch.setRemarks("");//清空备注
  1539 + sch.setJhlc(sch.getJhlcOrig());
  1540 +
  1541 + //入库
  1542 + dayOfSchedule.save(sch);
  1543 + //重新计算当前执行班次
  1544 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1545 + rs.put("status", ResponseCode.SUCCESS);
  1546 + rs.put("t", sch);
  1547 +
  1548 + }
  1549 + } catch (Exception e) {
  1550 + logger.error("", e);
  1551 + rs.put("status", ResponseCode.ERROR);
  1552 + }
  1553 + return rs;
  1554 + }
  1555 +
  1556 + @Override
  1557 + public Map<String, Object> revokeRealOutgo(Long id) {
  1558 + Map<String, Object> rs = new HashMap<>();
  1559 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1560 +
  1561 + try {
  1562 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1563 + if (sch.getFcsjActual() == null) {
  1564 + rs.put("status", ResponseCode.ERROR);
  1565 + rs.put("msg", "无实发时间,无法撤销!");
  1566 + } else {
  1567 + //日志记录
  1568 + ScheduleModifyLogger.cxsf(sch);
  1569 +
  1570 + sch.clearFcsjActual();
  1571 + rs.put("status", ResponseCode.SUCCESS);
  1572 +
  1573 + ts.add(sch);
  1574 + rs.put("ts", ts);
  1575 +
  1576 + dayOfSchedule.save(sch);
  1577 +
  1578 + }
  1579 + } catch (Exception e) {
  1580 + logger.error("", e);
  1581 + rs.put("status", ResponseCode.ERROR);
  1582 + }
  1583 + return rs;
  1584 + }
  1585 +
  1586 + @Override
  1587 + public Map<String, Object> spaceAdjust(Long[] ids, Integer space) {
  1588 +
  1589 + List<ScheduleRealInfo> list = new ArrayList<>(), ts = new ArrayList<>(), tempTs = null;
  1590 + Map<String, Object> rs = new HashMap<>(), tempRs = new HashMap<>();
  1591 + try {
  1592 + ScheduleRealInfo sch, next;
  1593 + for (Long id : ids) {
  1594 + sch = dayOfSchedule.get(id);
  1595 + if (null != sch)
  1596 + list.add(sch);
  1597 + }
  1598 +
  1599 + int size = list.size();
  1600 + if (size == 0) {
  1601 + rs.put("status", ResponseCode.ERROR);
  1602 + } else {
  1603 + // 按发车时间排序
  1604 + Collections.sort(list, new ScheduleComparator.FCSJ());
  1605 +
  1606 + // 以第一个实际发车/待发时间为起点,调整间隔
  1607 + sch = list.get(0);
  1608 + Long st = sch.getFcsjActualTime() == null ? sch.getDfsjT() : sch.getFcsjActualTime(), plus = space * 60 * 1000L;
  1609 +
  1610 + for (int i = 1; i < size; i++) {
  1611 + st += plus;
  1612 + sch = list.get(i);
  1613 +
  1614 + //调整待发
  1615 + tempRs = outgoAdjust(sch.getId(), null, fmtHHmm.print(st), null, "3", null);
  1616 +
  1617 + if (null != tempRs && tempRs.get("ts") != null)
  1618 + tempTs = (List<ScheduleRealInfo>) tempRs.get("ts");
  1619 +
  1620 + ts.addAll(tempTs);
  1621 + }
  1622 +
  1623 + rs.put("status", ResponseCode.SUCCESS);
  1624 + //返回最后一个班次,页面会全量刷新
  1625 + rs.put("ts", ts);
  1626 + }
  1627 +
  1628 + } catch (Exception e) {
  1629 + logger.error("", e);
  1630 + rs.put("status", ResponseCode.ERROR);
  1631 + }
  1632 + return rs;
  1633 + }
  1634 +
  1635 + private static DateTimeFormatter fmtyyyyMMddHHmm = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm");
  1636 +
  1637 + @Transactional
  1638 + @Override
  1639 + public Map<String, Object> schInfoFineTune(Map<String, String> map) {
  1640 + Map<String, Object> rs = new HashMap<>();
  1641 + List<ScheduleRealInfo> ts = new ArrayList<>();
  1642 + try {
  1643 + // 维修上报
  1644 + if (StringUtils.isNotBlank(map.get("reportTypes"))) {
  1645 + Map<String, Object> param = new HashMap<String, Object>();
  1646 + param.putAll(map);
  1647 + rs = repairReport(param, false);
  1648 + }
  1649 +
  1650 + Long id = Long.parseLong(map.get("id"));
  1651 + String remarks = map.get("remarks");
  1652 +
  1653 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  1654 +
  1655 + if (null == sch) {
  1656 + rs.put("status", ResponseCode.ERROR);
  1657 + rs.put("msg", "不存在的班次!");
  1658 + return rs;
  1659 + }
  1660 +
  1661 + //日志记录器
  1662 + FcxxwtLogger fLog = FcxxwtLogger.start(sch, remarks);
  1663 +
  1664 + String clZbh = map.get("clZbh");
  1665 + String jsy = map.get("jsy");
  1666 + if (!clZbh.equals(sch.getClZbh())
  1667 + || !jsy.equals(sch.getjGh() + "/" + sch.getjName()))
  1668 + schModifyLog.saveChangetochange(sch, clZbh, jsy);//为换人换车情况表写入数据
  1669 + /**
  1670 + * 换车
  1671 + */
  1672 + if (StringUtils.isNotEmpty(clZbh) && !clZbh.equals(sch.getClZbh())) {
  1673 + //换车
  1674 + if (!carExist(sch.getGsBm(), clZbh)) {
  1675 + rs.put("status", ResponseCode.ERROR);
  1676 + rs.put("msg", "车辆 " + clZbh + " 不存在!");
  1677 + return rs;
  1678 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(clZbh))) {
  1679 + rs.put("status", ResponseCode.ERROR);
  1680 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + clZbh + "】的车辆");
  1681 + return rs;
  1682 + } else {
  1683 + fLog.log("换车", sch.getClZbh(), clZbh);
  1684 + dayOfSchedule.changeCar(sch, clZbh);
  1685 + }
  1686 + }
  1687 +
  1688 + if(StringUtils.isBlank(jsy) || "/".equals(StringUtils.trim(jsy))){
  1689 + rs.put("status", ResponseCode.ERROR);
  1690 + rs.put("msg", "无效的参数【驾驶员】");
  1691 + return rs;
  1692 + }
  1693 +
  1694 + /**
  1695 + * 换驾驶员
  1696 + */
  1697 + if (StringUtils.isNotEmpty(jsy)) {
  1698 + String jGh = jsy.split("/")[0];
  1699 + String jName = getPersonName(sch.getGsBm(), jGh);
  1700 + if (StringUtils.isEmpty(jName)) {
  1701 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
  1702 + rs.put("status", ResponseCode.ERROR);
  1703 + return rs;
  1704 + } else if (!jGh.equals(sch.getjGh())) {
  1705 + fLog.log("换驾驶员", sch.getjGh() + "/" + sch.getjName(), jsy);
  1706 + persoChange(sch, jGh);
  1707 + }
  1708 + }
  1709 +
  1710 + /**
  1711 + * 换售票员
  1712 + */
  1713 + String spy = map.get("spy");
  1714 + if (StringUtils.isNotEmpty(spy) && !StringUtils.trim(spy).equals("/")) {
  1715 + String sGh = spy.split("/")[0];
  1716 +
  1717 + String sName = getPersonName(sch.getGsBm(), sGh);
  1718 + if (StringUtils.isEmpty(sName)) {
  1719 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
  1720 + rs.put("status", ResponseCode.ERROR);
  1721 + return rs;
  1722 + } else if (!sGh.equals(sch.getsGh())) {
  1723 + fLog.log("换售票员", sch.getsGh() + "/" + sch.getsName(), spy);
  1724 + persoChangeSPY(sch, sGh);
  1725 + }
  1726 + } else if (StringUtils.isNotEmpty(sch.getsGh())) {
  1727 + fLog.log("撤销售票员");
  1728 + sch.setsGh("");
  1729 + sch.setsName("");
  1730 + }
  1731 +
  1732 + LineConfig config = lineConfigData.get(sch.getXlBm());
  1733 + /**
  1734 + * 调整实发
  1735 + */
  1736 + String fcsjActual = map.get("fcsjActual");
  1737 + if (StringUtils.isNotBlank(fcsjActual)
  1738 + && !fcsjActual.equals(sch.getFcsjActual())) {
  1739 +
  1740 + //long t = 0L;
  1741 + //小于线路开始运营时间,则默认跨过24点
  1742 + long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), fcsjActual, config);
  1743 + /* if (fcsjActual.compareTo(config.getStartOpt()) < 0)
  1744 + t = fmtyyyyMMddHHmm.parseMillis(fmtyyyyMMdd.print(sch.getScheduleDate().getTime() + DAY_TIME) + fcsjActual);
  1745 + else
  1746 + t = fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr() + fcsjActual);*/
  1747 +
  1748 + fLog.log("调整实发时间", sch.getFcsjActual(), fcsjActual);
  1749 + sch.setFcsjActualAll(t);
  1750 + //取消应发未到标记
  1751 + //if(sch.isLate2()){
  1752 + // sch.setLate2(false);
  1753 + LateAdjustHandle.remove(sch);
  1754 + //}
  1755 + } else if (StringUtils.isNotEmpty(sch.getFcsjActual()) && StringUtils.isEmpty(fcsjActual)) {
  1756 + fLog.log("撤销实发时间", sch.getFcsjActual(), "");
  1757 + //撤销实发
  1758 + revokeRealOutgo(sch.getId());
  1759 + }
  1760 +
  1761 + /**
  1762 + * 调整实达
  1763 + */
  1764 + String zdsjActual = map.get("zdsjActual");
  1765 + if (StringUtils.isNotBlank(zdsjActual)
  1766 + && !zdsjActual.equals(sch.getZdsjActual())) {
  1767 +
  1768 + //调整实达
  1769 + fLog.log("调整实达时间", sch.getZdsjActual(), zdsjActual);
  1770 +
  1771 + long t = schAttrCalculator.getTime(sch.getScheduleDateStr(), zdsjActual, config);
  1772 + sch.setZdsjActualAll(t);
  1773 + //路牌下一班起点到达时间
  1774 + ScheduleRealInfo next = dayOfSchedule.nextByLp2(sch);
  1775 + if (null != next) {
  1776 + next.setQdzArrDatesj(zdsjActual);
  1777 + next.setLate2(false);
  1778 + ts.add(next);
  1779 + }
  1780 +
  1781 + //重新计算车辆执行班次
  1782 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1783 + //取消应发未到标记
  1784 + LateAdjustHandle.remove(sch);
  1785 + } else if (StringUtils.isNotEmpty(sch.getZdsjActual()) && StringUtils.isEmpty(zdsjActual)) {
  1786 + //清除实达时间
  1787 + fLog.log("撤销实达时间", sch.getZdsjActual(), "");
  1788 + sch.clearZdsjActual();
  1789 + //清除路牌下一班起点到达时间
  1790 + ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
  1791 + if (null != next) {
  1792 + next.setQdzArrDatesj(null);
  1793 + ts.add(next);
  1794 + }
  1795 + //重新计算车辆执行班次
  1796 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  1797 + }
  1798 +
  1799 + /**
  1800 + * 备注
  1801 + */
  1802 + sch.setRemarks(remarks);
  1803 +
  1804 + /**
  1805 + * 烂班
  1806 + */
  1807 + if (map.get("status") != null
  1808 + && Integer.parseInt(map.get("status").toString()) == -1) {
  1809 + destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
  1810 + fLog.log("烂班");
  1811 + }
  1812 +
  1813 + /**
  1814 + * 修改班次里程
  1815 + */
  1816 + String jhlc = map.get("jhlc");
  1817 + if (StringUtils.isNotEmpty(jhlc)) {
  1818 + double jhlcNum = Double.parseDouble(jhlc);
  1819 + //烂班
  1820 + if (jhlcNum == 0 && sch.getJhlcOrig() != 0 && !sch._isInout() && !sch.isDestroy()) {
  1821 + destroy(sch.getId() + "", "", map.get("adjustExps").toString(), null);
  1822 + fLog.log("里程设置为0,自动烂班");
  1823 + } else if (jhlcNum != sch.getJhlc()) {
  1824 + fLog.log("设置里程", sch.getJhlc(), jhlcNum);
  1825 + sch.setJhlc(jhlcNum);
  1826 + //临加班次,实际计划一起改
  1827 + if (sch.isSflj())
  1828 + sch.setJhlcOrig(jhlcNum);
  1829 + }
  1830 + }
  1831 +
  1832 + /**
  1833 + * 修改班次类型
  1834 + */
  1835 + String bcType = map.get("bcType");
  1836 + if (StringUtils.isNotEmpty(bcType) && !bcType.equals(sch.getBcType())) {
  1837 + fLog.log("修改班次类型", sch.getBcType(), bcType);
  1838 + sch.setBcType(bcType);
  1839 + }
  1840 +
  1841 + //重新计算班次状态
  1842 + sch.calcStatus();
  1843 + dayOfSchedule.save(sch);
  1844 + //页面需要更新的班次信息
  1845 + ts.add(sch);
  1846 +
  1847 + rs.put("status", ResponseCode.SUCCESS);
  1848 + rs.put("ts", ts);
  1849 +
  1850 + //日志记录结束
  1851 + fLog.end();
  1852 + } catch (Exception e) {
  1853 + logger.error("", e);
  1854 + rs.put("status", ResponseCode.ERROR);
  1855 + }
  1856 + return rs;
  1857 + }
  1858 +
  1859 + @Override
  1860 + public Map<String, Object> outgoAdjustAll(String params) {
  1861 + Map<String, Object> rs = new HashMap<>();
  1862 + try {
  1863 + JSONArray jsonArray = JSONArray.parseArray(params);
  1864 +
  1865 + ScheduleRealInfo schedule = null;
  1866 + JSONObject jsonObj;
  1867 + String dfsj;
  1868 + long id;
  1869 + for (int i = 0; i < jsonArray.size(); i++) {
  1870 + jsonObj = jsonArray.getJSONObject(i);
  1871 + dfsj = jsonObj.getString("t");
  1872 + id = jsonObj.getLong("id");
  1873 + schedule = dayOfSchedule.get(id);
  1874 +
  1875 + if (schedule != null)
  1876 + outgoAdjust(id, null, dfsj, null, "2", null);
  1877 + }
  1878 +
  1879 + rs.put("status", ResponseCode.SUCCESS);
  1880 + //将更新的最后一个班次返回,页面会做全量刷新
  1881 + rs.put("t", schedule);
  1882 + } catch (Exception e) {
  1883 + logger.error("", e);
  1884 + rs.put("status", ResponseCode.ERROR);
  1885 + }
  1886 + return rs;
  1887 + }
  1888 +
  1889 + @Override
  1890 + public Map<String, Object> findRouteByLine(String lineCode) {
  1891 + Map<String, Object> map = new HashMap<>();
  1892 + //上行
  1893 + Integer lineId = BasicData.lineId2CodeMap.inverse().get(lineCode);
  1894 + map.put("line.id_eq", lineId);
  1895 + map.put("directions_eq", 0);
  1896 + List<Map<String, Object>> upList = sectionRouteService.getSectionRoute(map);
  1897 +
  1898 + //下行
  1899 + map.put("directions_eq", 1);
  1900 + List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map);
  1901 +
  1902 + Map<String, Object> rs = new HashMap<>();
  1903 +
  1904 + String upVectors = "", vec;
  1905 + //拼接上行路段
  1906 + for (Map<String, Object> temp : upList) {
  1907 + vec = temp.get("sectionBsectionVector").toString();
  1908 + upVectors += vec.subSequence(11, vec.length() - 2) + " ";
  1909 + }
  1910 +
  1911 + //拼接下行路段
  1912 + String downVectors = "";
  1913 + for (Map<String, Object> temp : downList) {//LINESTRING(
  1914 + vec = temp.get("sectionBsectionVector").toString();
  1915 + downVectors += vec.subSequence(11, vec.length() - 2) + " ";
  1916 + }
  1917 +
  1918 +
  1919 + rs.put("up", upVectors);
  1920 + //上行gcj
  1921 + rs.put("up_gcj", BdToGcjString(upVectors));
  1922 + rs.put("down", downVectors);
  1923 + //下行gcj
  1924 + rs.put("down_gcj", BdToGcjString(downVectors));
  1925 + rs.put("lineId", lineId);
  1926 +
  1927 + return rs;
  1928 + }
  1929 +
  1930 + /**
  1931 + * @param @param bdStr
  1932 + * @throws
  1933 + * @Title: BdToGcjString
  1934 + * @Description: TODO(将百度路由字符串 转 成GCJ 字符串)
  1935 + */
  1936 + public String BdToGcjString(String bdStr) {
  1937 + String[] array = bdStr.split(","), subArray;
  1938 + if (array.length == 0 || bdStr.length() < 2)
  1939 + return "";
  1940 +
  1941 + String gcjStr = "";
  1942 + TransGPS.Location location;
  1943 + for (String crd : array) {
  1944 + subArray = crd.split(" ");
  1945 + if (subArray.length != 2)
  1946 + continue;
  1947 + location = TransGPS.bd_decrypt(TransGPS.LocationMake(Double.parseDouble(subArray[0]), Double.parseDouble(subArray[1])));
  1948 +
  1949 + gcjStr += location.getLng() + " " + location.getLat() + ",";
  1950 + }
  1951 +
  1952 + return gcjStr.substring(0, gcjStr.length() - 1);
  1953 + }
  1954 +
  1955 + public List<Map<String, String>> findLine(String line) {
  1956 + List<Line> listLine = lineRepository.findLine("%" + line + "%");
  1957 + List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  1958 + Map<String, String> map;
  1959 + for (Line temp : listLine) {
  1960 + if (temp != null) {
  1961 + String xlName = temp.getName();
  1962 + if (xlName.indexOf(line) != -1) {
  1963 + map = new HashMap<String, String>();
  1964 + map.put("id", temp.getLineCode());
  1965 + map.put("text", xlName);
  1966 + list.add(map);
  1967 + }
  1968 + }
  1969 + }
  1970 + return list;
  1971 + }
  1972 +
  1973 + public List<Map<String, String>> findLpName(String lpName) {
  1974 + List<GuideboardInfo> listLpName = guideboardInfoRepository.findLpName("%" + lpName + "%");
  1975 + List<Map<String, String>> list = new ArrayList<Map<String, String>>();
  1976 + Map<String, String> map;
  1977 + for (GuideboardInfo temp : listLpName) {
  1978 + if (temp != null) {
  1979 + String lp = temp.getLpName();
  1980 + if (lp.indexOf(lpName) != -1) {
  1981 + map = new HashMap<String, String>();
  1982 + map.put("id", lp);
  1983 + map.put("text", lp);
  1984 + list.add(map);
  1985 + }
  1986 + }
  1987 + }
  1988 + return list;
  1989 + }
  1990 +
  1991 + @Override
  1992 + public Map<String, Object> findKMBC2(String jName, String clZbh, String date) {
  1993 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill3(jName, clZbh, date, "", "");
  1994 +
  1995 + DecimalFormat format = new DecimalFormat("0.00");
  1996 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  1997 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  1998 + int jhbc = 0, cjbc = 0, ljbc = 0;
  1999 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
  2000 + float addMileage = 0l, remMileage = 0l;
  2001 + String j_Name = "";
  2002 + Map<String, Object> map = new HashMap<String, Object>();
  2003 + for (ScheduleRealInfo scheduleRealInfo : list) {
  2004 + if (scheduleRealInfo != null) {
  2005 + j_Name = scheduleRealInfo.getjName();
  2006 + //计划里程(主任务过滤掉临加班次),
  2007 + //烂班里程(主任务烂班),
  2008 + //临加里程(主任务临加),
  2009 + //计划班次,烂班班次,增加班次
  2010 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  2011 + if (scheduleRealInfo.isSflj()) {
  2012 + addMileage += tempJhlc;
  2013 + ljbc++;
  2014 + } else {
  2015 + jhlc += tempJhlc;
  2016 + jhbc++;
  2017 + if (scheduleRealInfo.getStatus() == -1) {
  2018 + remMileage += tempJhlc;
  2019 + cjbc++;
  2020 + }
  2021 + }
  2022 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  2023 + //计算营运里程,空驶里程
  2024 + if (childTaskPlans.isEmpty()) {
  2025 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  2026 + || scheduleRealInfo.getBcType().equals("venting")) {
  2027 + ksgl += tempJhlc;
  2028 + } else {
  2029 + yygl += tempJhlc;
  2030 + }
  2031 + } else {
  2032 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2033 + while (it.hasNext()) {
  2034 + ChildTaskPlan childTaskPlan = it.next();
  2035 + if (childTaskPlan.getMileageType().equals("empty")) {
  2036 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  2037 + } else {
  2038 + yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  2039 + }
  2040 + }
  2041 + }
  2042 + }
  2043 + }
  2044 + map.put("j_name", j_Name);
  2045 + map.put("jhlc", format.format(jhlc));
  2046 + map.put("remMileage", format.format(remMileage));
  2047 + map.put("addMileage", format.format(addMileage));
  2048 + map.put("yygl", format.format(yygl));
  2049 + map.put("ksgl", format.format(ksgl));
  2050 + map.put("realMileage", format.format(yygl + ksgl));
  2051 + map.put("jhbc", jhbc);
  2052 + map.put("cjbc", cjbc);
  2053 + map.put("ljbc", ljbc);
  2054 + map.put("sjbc", jhbc - cjbc + ljbc);
  2055 + return map;
  2056 + }
  2057 +
  2058 +
  2059 + public Map<String, Object> findKMBC(String jGh, String clZbh,
  2060 + String lpName, String date, String line) {
  2061 + Map<String, Object> map = new HashMap<String, Object>();
  2062 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2063 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2064 + for (int i = 0; i < list.size(); i++) {
  2065 + ScheduleRealInfo s = list.get(i);
  2066 + Set<ChildTaskPlan> cts = s.getcTasks();
  2067 + if (cts != null && cts.size() > 0) {
  2068 + lists.add(s);
  2069 + } else {
  2070 + if (s.getFcsjActual() != null && s.getZdsjActual() != null) {
  2071 + lists.add(s);
  2072 + }
  2073 + }
  2074 + }
  2075 + map.put("jhbc", culateService.culateJhbc(list, ""));//计划班次
  2076 + map.put("jhlc", Arith.add(culateService.culateJhgl(list),
  2077 + culateService.culateJhJccgl(list))); //计划总里程
  2078 + map.put("cjbc", culateService.culateLbbc(list));//烂班班次
  2079 + map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
  2080 + map.put("ljbc", culateService.culateLjbc(lists, ""));//临加班次
  2081 + double ljgl = culateService.culateLjgl(lists);
  2082 + map.put("addMileage", ljgl); //临加公里
  2083 + map.put("sjbc", culateService.culateSjbc(lists, "") + culateService.culateLjbc(lists, ""));
  2084 + double ksgl = culateService.culateKsgl(list);//子任务空驶公里
  2085 + double jccgl = culateService.culateJccgl(lists);//空驶班次公里
  2086 + map.put("ksgl", ksgl);//空驶公里
  2087 + double sjgl = culateService.culateSjgl(lists);//实际营运公里
  2088 + map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));//总公里
  2089 + map.put("zkslc", Arith.add(ksgl, jccgl));
  2090 + map.put("jcclc", jccgl);
  2091 + map.put("yygl", Arith.add(sjgl, ljgl)); //总营运公里
  2092 + return map;
  2093 + }
  2094 +
  2095 + public Map<String, Object> findKMBC_mh_2(String jGh, String clZbh,
  2096 + String lpName, String date, String line) {
  2097 + Map<String, Object> map = new HashMap<String, Object>();
  2098 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2099 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2100 + for (int i = 0; i < list.size(); i++) {
  2101 + ScheduleRealInfo s = list.get(i);
  2102 + if (s.isDestroy() && s.isReissue()) {
  2103 + s.setRemark("");
  2104 + s.setFcsjActual(s.getDfsj());
  2105 + s.setZdsjActual(s.getZdsj());
  2106 + s.setStatus(2);
  2107 + s.setJhlc(s.getJhlcOrig());
  2108 + }
  2109 +
  2110 + Set<ChildTaskPlan> cts = s.getcTasks();
  2111 + if (cts != null && cts.size() > 0) {
  2112 + lists.add(s);
  2113 + } else {
  2114 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2115 + lists.add(s);
  2116 + }
  2117 + }
  2118 + }
  2119 + double ksgl = culateService.culateKsgl(list);
  2120 + double sjgl = culateService.culateSjgl(lists);
  2121 + double jccgl = culateService.culateJccgl(lists);
  2122 + double ljgl = culateService.culateLjgl(lists);
  2123 +
  2124 + map.put("jhlc", Arith.add(culateService.culateJhgl(list), culateService.culateJhJccgl(list))); //计划里程
  2125 + map.put("remMileage", culateService.culateLbgl(list)); //烂班公里
  2126 + map.put("addMileage", ljgl); //临加公里
  2127 + map.put("yygl", Arith.add(sjgl, ljgl)); //实际公里
  2128 + map.put("ksgl", ksgl);//空驶公里
  2129 + map.put("realMileage", Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));
  2130 +// map.put("realMileage", format.format(yygl + ksgl + jcclc+addMileage));
  2131 + map.put("jhbc", culateService.culateJhbc(list, ""));
  2132 + map.put("cjbc", culateService.culateLbbc(list));
  2133 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2134 + map.put("sjbc", culateService.culateJhbc(lists, "") - culateService.culateLbbc(lists) + culateService.culateLjbc(lists, ""));
  2135 + map.put("jcclc", jccgl);
  2136 + map.put("zkslc", Arith.add(ksgl, jccgl));
  2137 +// map.put("zkslc", format.format(ksgl + jcclc+addMileageJc));
  2138 + return map;
  2139 + }
  2140 +
  2141 +
  2142 + @Override
  2143 + public List<Map<String, Object>> accountPx(String line, String date,
  2144 + String code, String xlName, String px) {
  2145 +// List<Object[]> lsitObj = scheduleRealInfoRepository.accountPx(line, date, code,px);
  2146 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2147 + if (!code.trim().equals("")) {
  2148 + code = BasicData.deviceId2NbbmMap.inverse().get(code);
  2149 + }
  2150 + String fgs = "";
  2151 + List<Line> lineList = lineRepository.findLineByCode(line);
  2152 + if (lineList.size() > 0) {
  2153 + Line l = lineList.get(0);
  2154 + fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
  2155 + }
  2156 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  2157 + String sql = "SELECT request_code,FROM_UNIXTIME(TIMESTAMP / 1000,'%Y-%m-%d %T') as TIMESTAMP ,"
  2158 + + " device_id FROM bsth_v_report_80 WHERE "
  2159 + + " FROM_UNIXTIME( TIMESTAMP / 1000,'%Y-%m-%d') = '" + date + "' AND"
  2160 + + " line_id = '" + line + "' and device_id like '%" + code + "%'";
  2161 + Map<String, Object> map;
  2162 + List<Object[]> lsitObj = jdbcTemplate.query(sql,
  2163 + new RowMapper<Object[]>() {
  2164 + @Override
  2165 + public Object[] mapRow(ResultSet rs, int rowNum) throws SQLException {
  2166 + Object[] t = new Object[3];
  2167 + t[0] = rs.getString("request_code");
  2168 + t[1] = rs.getString("TIMESTAMP");
  2169 + t[2] = rs.getString("device_id");
  2170 + return t;
  2171 + }
  2172 + });
  2173 + int i = 1;
  2174 + for (Object[] obj : lsitObj) {
  2175 + if (obj != null) {
  2176 + map = new HashMap<String, Object>();
  2177 + map.put("num", i++);
  2178 + map.put("xlName", xlName);
  2179 + if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
  2180 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  2181 + try {
  2182 + carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
  2183 + } catch (Exception e) {
  2184 + // TODO Auto-generated catch block
  2185 + e.printStackTrace();
  2186 + }
  2187 + if (carDeviceList.size() > 0) {
  2188 + map.put("clZbh", carDeviceList.get(0).getClZbh());
  2189 +
  2190 + } else {
  2191 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2192 + }
  2193 + } else {
  2194 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2195 +
  2196 + }
  2197 + map.put("company", fgs);
  2198 + map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
  2199 + map.put("requestTime", obj[1]);
  2200 + listMap.add(map);
  2201 + }
  2202 + }
  2203 + if (listMap.size() > 1) {
  2204 + if (px.equals("asc")) {
  2205 + Collections.sort(listMap, new AccountMap());
  2206 + } else {
  2207 + Collections.sort(listMap, new AccountMap2());
  2208 + }
  2209 + }
  2210 + return listMap;
  2211 + }
  2212 +
  2213 + @Override
  2214 + public List<Map<String, Object>> account(String line, String date,
  2215 + String code, String xlName, String type) {
  2216 + if (!code.trim().equals("")) {
  2217 + code = BasicData.deviceId2NbbmMap.inverse().get(code);
  2218 + }
  2219 + String fgs = "";
  2220 + List<Line> lineList = lineRepository.findLineByCode(line);
  2221 + if (lineList.size() > 0) {
  2222 + Line l = lineList.get(0);
  2223 + fgs = BasicData.businessFgsCodeNameMap.get(l.getBrancheCompany() + "_" + l.getCompany());
  2224 + }
  2225 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2226 + List<Object[]> lsitObj = scheduleRealInfoRepository.account(line, date, code);
  2227 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  2228 + Map<String, Object> map;
  2229 + int i = 1;
  2230 + for (Object[] obj : lsitObj) {
  2231 + if (obj != null) {
  2232 + map = new HashMap<String, Object>();
  2233 + map.put("num", i++);
  2234 + map.put("xlName", xlName);
  2235 + if (BasicData.deviceId2NbbmMap.get(obj[2]) == null) {
  2236 + List<CarDevice> carDeviceList = new ArrayList<CarDevice>();
  2237 + try {
  2238 + carDeviceList = carDeviceRepository.findCarDevice(obj[2].toString(), sdf.parse(obj[1].toString()));
  2239 + } catch (Exception e) {
  2240 + // TODO Auto-generated catch block
  2241 + e.printStackTrace();
  2242 + }
  2243 + if (carDeviceList.size() > 0) {
  2244 + map.put("clZbh", carDeviceList.get(0).getClZbh());
  2245 +
  2246 + } else {
  2247 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2248 + }
  2249 + } else {
  2250 + map.put("clZbh", BasicData.deviceId2NbbmMap.get(obj[2]));
  2251 +
  2252 + }
  2253 + map.put("company", fgs);
  2254 + map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[0] + "")).toUpperCase());
  2255 + map.put("requestTime", obj[1]);
  2256 + listMap.add(map);
  2257 + }
  2258 + }
  2259 +
  2260 + if (type != null && type.length() != 0 && type.equals("export")) {
  2261 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  2262 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  2263 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  2264 + Map<String, Object> m = new HashMap<String, Object>();
  2265 + ReportUtils ee = new ReportUtils();
  2266 + Map<String, Object> typeMap = new HashMap<String, Object>();
  2267 + typeMap.put("0xA1", "请求恢复运营");
  2268 + typeMap.put("0xA2", "申请调档");
  2269 + typeMap.put("0xA3", "出场请求");
  2270 + typeMap.put("0xA5", "进场请求");
  2271 + typeMap.put("0xA7", "加油请求");
  2272 + typeMap.put("0x50", "车辆故障");
  2273 + typeMap.put("0x70", "路阻报告");
  2274 + typeMap.put("0x60", "事故报告");
  2275 + typeMap.put("0x11", "扣证纠纷");
  2276 + typeMap.put("0x12", "报警");
  2277 + for (Map<String, Object> map1 : listMap) {
  2278 + map1.put("requestText", typeMap.get(map1.get("requestType")));
  2279 + }
  2280 + try {
  2281 + listI.add(listMap.iterator());
  2282 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  2283 + ee.excelReplace(listI, new Object[]{m}, path + "mould/account.xls",
  2284 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  2285 + + "-" + xlName + "-驾驶员请求台账.xls");
  2286 + } catch (Exception e) {
  2287 + // TODO: handle exception
  2288 + e.printStackTrace();
  2289 + }
  2290 + }
  2291 +
  2292 + return listMap;
  2293 + }
  2294 +
  2295 + @Override
  2296 + public List<SchEditInfoDto> correctForm(String line, String date, String endDate,
  2297 + String lpName, String code, String type, String changType) {
  2298 +
  2299 +// var types = {'DFTZ': '待发调整', 'FCXXWT':'发车信息微调', 'JHLB': '计划烂班', 'CXLB': '撤销烂班',
  2300 +// 'CXZX': '撤销执行', 'CXSF': '撤销实发', 'SFTZ': '实发调整', 'TZRC': '调整人车'};
  2301 + Map<String, Object> map = new HashMap<String, Object>();
  2302 + map.put("DFTZ", "待发调整");
  2303 + map.put("FCXXWT", "发车信息微调");
  2304 + map.put("JHLB", "计划烂班");
  2305 + map.put("CXLB", "撤销烂班");
  2306 + map.put("CXZX", "撤销执行");
  2307 + map.put("CXSF", "撤销实发");
  2308 + map.put("SFTZ", "实发调整");
  2309 + map.put("TZRC", "调整人车");
  2310 +
  2311 + SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm");
  2312 + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2313 + String cont = "";
  2314 + cont = " and xl_bm ='" + line + "'";
  2315 + if (!lpName.equals("")) {
  2316 + cont += " and lp_name = '" + lpName + "'";
  2317 + }
  2318 + if (!code.equals("")) {
  2319 + cont += " and cl_zbh ='" + code + "'";
  2320 + }
  2321 + String sql = "select t1.*, t2.real_exec_date,"
  2322 + + "t2.fcsj,t2.lp_name,t2.cl_zbh,t2.j_gh,t2.j_name,"
  2323 + + "t2.xl_dir,t2.real_exec_date from (select * from "
  2324 + + "logger_sch_modify where rq BETWEEN ? and ? and line_code=? )"
  2325 + + " t1 INNER JOIN bsth_c_s_sp_info_real t2 on "
  2326 + + "t1.sch_id=t2.id where 1=1 " + cont;
  2327 +
  2328 + List<SchEditInfoDto> list = jdbcTemplate.query(sql,
  2329 + new BeanPropertyRowMapper(SchEditInfoDto.class), date, endDate, line);
  2330 + List<SchEditInfoDto> lists = new ArrayList<SchEditInfoDto>();
  2331 + for (int i = 0; i < list.size(); i++) {
  2332 + Long fcsjs = 0l;
  2333 + Long updsj = 0l;
  2334 + SchEditInfoDto t = list.get(i);
  2335 + if (map.get(t.getType()) != null) {
  2336 +
  2337 + if (changType.equals("")) {
  2338 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2339 + } else {
  2340 + String fcsj = "";
  2341 + String updtime = "";
  2342 + try {
  2343 + fcsj = sdf1.format(sdf1.parse(t.getFcsj()));
  2344 + updtime = sdf1.format(sdf1.parse(t.getTimeStr()));
  2345 + fcsjs = sdf2.parse(t.getRealExecDate() + " " + fcsj).getTime();
  2346 + updsj = sdf2.parse(t.getRq() + " " + updtime).getTime();
  2347 + } catch (ParseException e) {
  2348 + // TODO Auto-generated catch block
  2349 + e.printStackTrace();
  2350 + }
  2351 + if (changType.equals("1")) {
  2352 + if (fcsjs > updsj) {
  2353 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2354 + } else {
  2355 + t.setType2("");
  2356 + }
  2357 + } else if (changType.equals("2")) {
  2358 + if (fcsjs < updsj) {
  2359 + t.setType2(t.getUser() + "于" + t.getTimeStr() + "进行" + map.get(t.getType()).toString() + ";");
  2360 + } else {
  2361 + t.setType2("");
  2362 + }
  2363 + }
  2364 + }
  2365 + } else {
  2366 + t.setType2("");
  2367 + }
  2368 + boolean fage = true;
  2369 + for (int j = 0; j < lists.size(); j++) {
  2370 + SchEditInfoDto s = lists.get(j);
  2371 + if (s.getSchId() == t.getSchId()) {
  2372 + s.setType2(s.getType2() + " " + t.getType2());
  2373 + fage = false;
  2374 + }
  2375 + }
  2376 +
  2377 + if (fage) {
  2378 + if (changType.equals("")) {
  2379 + lists.add(t);
  2380 + } else {
  2381 + if (changType.equals("1")) {
  2382 + if (fcsjs > updsj) {
  2383 + lists.add(t);
  2384 + }
  2385 + } else if (changType.equals("2")) {
  2386 + if (fcsjs < updsj) {
  2387 + lists.add(t);
  2388 + }
  2389 + }
  2390 + }
  2391 + }
  2392 + }
  2393 +
  2394 + if (type != null && type.length() != 0 && type.equals("export")) {
  2395 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  2396 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  2397 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  2398 + Map<String, Object> m = new HashMap<String, Object>();
  2399 + m.put("dates", date);
  2400 + ReportUtils ee = new ReportUtils();
  2401 + List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
  2402 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2403 + for (SchEditInfoDto d : lists) {
  2404 + Map<String, Object> tempMap = new HashMap<String, Object>();
  2405 + tempMap.put("lpName", d.getLpName());
  2406 + tempMap.put("rq", d.getRq());
  2407 + tempMap.put("clZbh", d.getClZbh());
  2408 + tempMap.put("jName", d.getjName() + "/" + d.getjGh());
  2409 + tempMap.put("fcsj", d.getFcsj());
  2410 + tempMap.put("type", d.getType2());
  2411 + tempList.add(tempMap);
  2412 + }
  2413 + try {
  2414 + String dateTime = sdfSimple.format(sdfMonth.parse(date));
  2415 + if(!endDate.equals(date)){
  2416 + dateTime += "-" + sdfSimple.format(sdfMonth.parse(endDate));
  2417 + }
  2418 + String lineName = BasicData.lineCode2NameMap.get(line);
  2419 + listI.add(tempList.iterator());
  2420 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  2421 + ee.excelReplace(listI, new Object[]{m}, path + "mould/correctForm.xls",
  2422 + path + "export/" + dateTime + "-" + lineName + "-修正报表.xls");
  2423 + } catch (Exception e) {
  2424 + // TODO: handle exception
  2425 + e.printStackTrace();
  2426 + }
  2427 +// Map<String, Object> maps = tempList.get(tempList.size() - 1);
  2428 + }
  2429 + return lists;
  2430 + }
  2431 +
  2432 + @Override
  2433 + public List<ScheduleRealInfo> queryListWaybill(String jGh, String clZbh,
  2434 + String lpName, String date, String line) {
  2435 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  2436 + List<ScheduleRealInfo> list = null;
  2437 + list = scheduleRealInfoRepository.queryListWaybillXcld(jGh, clZbh, lpName, date, line);
  2438 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2439 + String minfcsj = "02:00";
  2440 + List<Line> lineList = lineRepository.findLineByCode(line);
  2441 + if (lineList.size() > 0) {
  2442 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  2443 + + " id = ("
  2444 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  2445 + + ")";
  2446 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2447 + }
  2448 + String[] minSjs = minfcsj.split(":");
  2449 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  2450 +
  2451 + for (int i = 0; i < list.size(); i++) {
  2452 + ScheduleRealInfo s = list.get(i);
  2453 + if (s.getBcType().equals("out")) {
  2454 + s.setRemark("1");
  2455 + } else if (s.getBcType().equals("in")) {
  2456 + s.setRemark("3");
  2457 + } else {
  2458 + s.setRemark("2");
  2459 + }
  2460 + String[] fcsj = s.getFcsj().split(":");
  2461 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  2462 +
  2463 + Long fscjT = 0L;
  2464 + if (fcsjL < minSj) {
  2465 + Calendar calendar = new GregorianCalendar();
  2466 + calendar.setTime(s.getScheduleDate());
  2467 + calendar.add(calendar.DATE, 1);
  2468 + s.setScheduleDate(calendar.getTime());
  2469 + try {
  2470 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  2471 + } catch (ParseException e) {
  2472 + // TODO Auto-generated catch block
  2473 + e.printStackTrace();
  2474 + }
  2475 +
  2476 + } else {
  2477 + try {
  2478 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  2479 + } catch (ParseException e) {
  2480 + // TODO Auto-generated catch block
  2481 + e.printStackTrace();
  2482 + }
  2483 + ;
  2484 + }
  2485 + s.setFcsjT(fscjT);
  2486 + }
  2487 + Collections.sort(list, new compareFcsjType());
  2488 + for (int i = 0; i < list.size(); i++) {
  2489 + ScheduleRealInfo s = list.get(i);
  2490 + s.setAdjustExps(i + 1 + "");
  2491 + String remarks = "";
  2492 + if (s.getRemarks() != null) {
  2493 + remarks += s.getRemarks();
  2494 + }
  2495 +
  2496 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  2497 + if (!childTaskPlans.isEmpty()) {
  2498 + s.setFcsjActual("");
  2499 + s.setZdsjActual("");
  2500 + s.setJhlc(0.0);
  2501 + }
  2502 +
  2503 + if (s.isDestroy()) {
  2504 + s.setFcsjActual("");
  2505 + s.setZdsjActual("");
  2506 + s.setJhlc(0.0);
  2507 + remarks += "(烂班)";
  2508 + s.setRemarks(remarks);
  2509 + }
  2510 +
  2511 + listSchedule.add(s);
  2512 + //计算营运里程,空驶里程
  2513 + if (!childTaskPlans.isEmpty()) {
  2514 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2515 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  2516 + Collections.sort(listit, new ComparableChild());
  2517 + for (int j = 0; j < listit.size(); j++) {
  2518 + ScheduleRealInfo t = new ScheduleRealInfo();
  2519 + ChildTaskPlan childTaskPlan = listit.get(j);
  2520 + if (childTaskPlan.getCcId() == null) {
  2521 + if (childTaskPlan.isDestroy()) {
  2522 + t.setFcsjActual("");
  2523 + t.setZdsjActual("");
  2524 + t.setJhlc(0.0);
  2525 + } else {
  2526 + t.setFcsjActual(childTaskPlan.getStartDate());
  2527 + t.setZdsjActual(childTaskPlan.getEndDate());
  2528 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  2529 + }
  2530 + t.setFcsj(childTaskPlan.getStartDate());
  2531 + t.setZdsj(childTaskPlan.getEndDate());
  2532 + t.setQdzName(childTaskPlan.getStartStationName());
  2533 + t.setZdzName(childTaskPlan.getEndStationName());
  2534 + t.setRemarks(childTaskPlan.getRemarks());
  2535 + t.setAdjustExps("子");
  2536 + listSchedule.add(t);
  2537 + }
  2538 + }
  2539 + }
  2540 + }
  2541 +
  2542 + return listSchedule;
  2543 + }
  2544 +
  2545 + @Override
  2546 + public List<ScheduleRealInfo> queryListWaybill2(String jName, String clZbh,
  2547 + String lpName, String date, String line) {
  2548 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  2549 + List<ScheduleRealInfo> list = null;
  2550 + list = scheduleRealInfoRepository.queryListWaybill(jName, clZbh, lpName, date, line);
  2551 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2552 + String minfcsj = "02:00";
  2553 + List<Line> lineList = lineRepository.findLineByCode(line);
  2554 + if (lineList.size() > 0) {
  2555 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  2556 + + " id = ("
  2557 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  2558 + + ")";
  2559 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2560 + }
  2561 + String[] minSjs = minfcsj.split(":");
  2562 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  2563 +
  2564 + for (int i = 0; i < list.size(); i++) {
  2565 + ScheduleRealInfo s = list.get(i);
  2566 + String[] fcsj = s.getFcsj().split(":");
  2567 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  2568 +
  2569 + Long fscjT = 0L;
  2570 + if (fcsjL < minSj) {
  2571 + Calendar calendar = new GregorianCalendar();
  2572 + calendar.setTime(s.getScheduleDate());
  2573 + calendar.add(calendar.DATE, 1);
  2574 + s.setScheduleDate(calendar.getTime());
  2575 + try {
  2576 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  2577 + } catch (ParseException e) {
  2578 + // TODO Auto-generated catch block
  2579 + e.printStackTrace();
  2580 + }
  2581 +
  2582 + } else {
  2583 + try {
  2584 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  2585 + } catch (ParseException e) {
  2586 + // TODO Auto-generated catch block
  2587 + e.printStackTrace();
  2588 + }
  2589 + ;
  2590 + }
  2591 + s.setFcsjT(fscjT);
  2592 + }
  2593 + Collections.sort(list, new ComparableReal());
  2594 + for (int i = 0; i < list.size(); i++) {
  2595 + ScheduleRealInfo s = list.get(i);
  2596 + s.setAdjustExps(i + 1 + "");
  2597 + String remarks = "";
  2598 + if (s.getRemarks() != null) {
  2599 + remarks += s.getRemarks();
  2600 + }
  2601 +
  2602 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  2603 + if (!childTaskPlans.isEmpty()) {
  2604 + s.setFcsjActual("");
  2605 + s.setZdsjActual("");
  2606 + s.setJhlc(0.0);
  2607 + }
  2608 +
  2609 + if (s.isDestroy()) {
  2610 + if (s.isReissue()) {
  2611 + s.setFcsjActual(s.getDfsj());
  2612 + s.setZdsjActual(s.getZdsj());
  2613 + s.setRemarks("");
  2614 + s.setStatus(2);
  2615 + s.setJhlc(s.getJhlcOrig());
  2616 + } else {
  2617 + s.setFcsjActual("");
  2618 + s.setZdsjActual("");
  2619 + s.setJhlc(0.0);
  2620 + remarks += "(烂班)";
  2621 + s.setRemarks(remarks);
  2622 + }
  2623 + }
  2624 +
  2625 + listSchedule.add(s);
  2626 + //计算营运里程,空驶里程
  2627 + if (!childTaskPlans.isEmpty()) {
  2628 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2629 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  2630 + Collections.sort(listit, new ComparableChild());
  2631 + for (int j = 0; j < listit.size(); j++) {
  2632 + ScheduleRealInfo t = new ScheduleRealInfo();
  2633 + ChildTaskPlan childTaskPlan = listit.get(j);
  2634 + if (childTaskPlan.isDestroy()) {
  2635 + t.setFcsjActual("");
  2636 + t.setZdsjActual("");
  2637 + t.setJhlc(0.0);
  2638 + } else {
  2639 + t.setFcsjActual(childTaskPlan.getStartDate());
  2640 + t.setZdsjActual(childTaskPlan.getEndDate());
  2641 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  2642 + }
  2643 + t.setQdzName(childTaskPlan.getStartStationName());
  2644 + t.setZdzName(childTaskPlan.getEndStationName());
  2645 + t.setRemarks(childTaskPlan.getRemarks());
  2646 + t.setAdjustExps("子");
  2647 + listSchedule.add(t);
  2648 + }
  2649 + }
  2650 + }
  2651 +
  2652 + return listSchedule;
  2653 + }
  2654 +
  2655 + @Override
  2656 + public Map<String, Object> removeChildTask(Long taskId) {
  2657 + Map<String, Object> rs = new HashMap<>();
  2658 + ChildTaskPlan chTask = cTaskPlanRepository.findOne(taskId);
  2659 +
  2660 + ScheduleRealInfo sch = dayOfSchedule.get(chTask.getSchedule().getId());
  2661 + try {
  2662 +
  2663 + sch.getcTasks().remove(chTask);
  2664 + scheduleRealInfoRepository.save(sch);
  2665 + rs.put("status", ResponseCode.SUCCESS);
  2666 + } catch (Exception e) {
  2667 + logger.error("", e);
  2668 + rs.put("status", ResponseCode.ERROR);
  2669 + }
  2670 + return rs;
  2671 + }
  2672 +
  2673 + @Override
  2674 + public List<Map<String, Object>> statisticsDaily(String line, String date,
  2675 + String xlName, String type) {
  2676 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  2677 + List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  2678 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2679 + for (int i = 0; i < list_s.size(); i++) {
  2680 + ScheduleRealInfo s = list_s.get(i);
  2681 + Set<ChildTaskPlan> cts = s.getcTasks();
  2682 + if (cts != null && cts.size() > 0) {
  2683 + lists.add(s);
  2684 + } else {
  2685 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2686 + lists.add(s);
  2687 + }
  2688 + }
  2689 + }
  2690 + Map<String, Object> map = new HashMap<String, Object>();
  2691 + map.put("xlName", xlName);
  2692 + double jhlc = culateService.culateJhgl(list_s);
  2693 + map.put("jhlc", jhlc);
  2694 + map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
  2695 + double lbgl = culateService.culateLbgl(list_s);
  2696 + map.put("ssgl", lbgl);
  2697 + map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
  2698 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2699 + map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
  2700 + map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
  2701 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2702 + map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
  2703 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
  2704 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
  2705 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
  2706 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
  2707 + double ssgl_pc = culateService.culateCJLC(list_s, "配车");
  2708 + double ssgl_by = culateService.culateCJLC(list_s, "保养");
  2709 + double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
  2710 + double ssgl_qt = culateService.culateCJLC(list_s, "其他");
  2711 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2712 + map.put("ssbc", culateService.culateLbbc(list_s));
  2713 + double ljgl = culateService.culateLjgl(lists);
  2714 + map.put("ljgl", ljgl);
  2715 + map.put("jhbc", culateService.culateJhbc(list_s, ""));
  2716 + map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
  2717 + map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
  2718 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2719 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2720 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2721 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2722 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2723 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2724 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2725 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2726 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2727 + map.put("dtbc", 0);
  2728 + map.put("dtbc_m", 0);
  2729 + map.put("dtbc_a", 0);
  2730 + List<CalcInterval> intervalList=calcIntervalRepository.selectByDateAndLine(line, date,"");
  2731 + if(intervalList.size()>0){
  2732 + CalcInterval c=intervalList.get(0);
  2733 + map.put("djg",c.getDjgAll());
  2734 + map.put("djg_m", c.getDjgZgf());
  2735 + map.put("djg_a", c.getDjgWgf());
  2736 + map.put("djg_time", c.getDjgTime());
  2737 + }else{
  2738 + Map<String, Object> m = culateService.culateDjg(list_s, line);
  2739 + map.put("djg", m.get("djgcsq"));
  2740 + map.put("djg_m", m.get("djgcsz"));
  2741 + map.put("djg_a", m.get("djgcsw"));
  2742 + map.put("djg_time", m.get("djgsj"));
  2743 + }
  2744 +
  2745 + map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
  2746 + lMap.add(map);
  2747 +
  2748 + if (date.length() == 10) {
  2749 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
  2750 + String dbdp = "";
  2751 + try {
  2752 + for (int i = 0; i < list.size(); i++) {
  2753 + DutyEmployee t = list.get(i);
  2754 + if (dbdp.indexOf(t.getuName()) == -1) {
  2755 + if (!(dbdp.length() > 0)) {
  2756 + dbdp = t.getuName();
  2757 + } else {
  2758 + dbdp += "," + t.getuName();
  2759 + }
  2760 + }
  2761 + }
  2762 + } catch (Exception e) {
  2763 + // TODO: handle exception
  2764 + e.printStackTrace();
  2765 + }
  2766 + map.put("dbdp", dbdp);
  2767 + }
  2768 +
  2769 + return lMap;
  2770 + }
  2771 +
  2772 + @Override
  2773 + public List<Map<String, Object>> statisticsDaily_mh_2(String line, String date,
  2774 + String xlName, String type) {
  2775 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  2776 + List<ScheduleRealInfo> list_s = scheduleRealInfoRepository.scheduleByDateAndLine2(line, date);
  2777 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2778 + for (int i = 0; i < list_s.size(); i++) {
  2779 + ScheduleRealInfo s = list_s.get(i);
  2780 + if (s.isDestroy() && s.isReissue()) {
  2781 + s.setRemark("");
  2782 + s.setFcsjActual(s.getDfsj());
  2783 + s.setZdsjActual(s.getZdsj());
  2784 + s.setStatus(2);
  2785 + s.setJhlc(s.getJhlcOrig());
  2786 + }
  2787 +
  2788 + Set<ChildTaskPlan> cts = s.getcTasks();
  2789 + if (cts != null && cts.size() > 0) {
  2790 + lists.add(s);
  2791 + } else {
  2792 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2793 + lists.add(s);
  2794 + }
  2795 + }
  2796 + }
  2797 + Map<String, Object> map = new HashMap<String, Object>();
  2798 + map.put("xlName", xlName);
  2799 + double jhlc = culateService.culateJhgl(list_s);
  2800 + map.put("jhlc", jhlc);
  2801 + map.put("sjgl", Arith.add(culateService.culateSjgl(lists), culateService.culateLjgl(lists)));
  2802 + double lbgl = culateService.culateLbgl(list_s);
  2803 + map.put("ssgl", lbgl);
  2804 + map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
  2805 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2806 + map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
  2807 + map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
  2808 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2809 + map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
  2810 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
  2811 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
  2812 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
  2813 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
  2814 + double ssgl_pc = culateService.culateCJLC(list_s, "配车");
  2815 + double ssgl_by = culateService.culateCJLC(list_s, "保养");
  2816 + double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
  2817 + double ssgl_qt = culateService.culateCJLC(list_s, "其他");
  2818 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2819 + map.put("ssbc", culateService.culateLbbc(list_s));
  2820 + double ljgl = culateService.culateLjgl(lists);
  2821 + map.put("ljgl", ljgl);
  2822 + map.put("jhbc", culateService.culateJhbc(list_s, ""));
  2823 + map.put("jhbc_m", culateService.culateJhbc(list_s, "zgf"));
  2824 + map.put("jhbc_a", culateService.culateJhbc(list_s, "wgf"));
  2825 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2826 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2827 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2828 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2829 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2830 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2831 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2832 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2833 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2834 + map.put("dtbc", 0);
  2835 + map.put("dtbc_m", 0);
  2836 + map.put("dtbc_a", 0);
  2837 + map.put("djg", 0);
  2838 + map.put("djg_m", 0);
  2839 + map.put("djg_a", 0);
  2840 + map.put("djg_time", 0);
  2841 + map.put("jls", Arith.sub(Arith.add(jhlc, ljgl), lbgl));
  2842 + lMap.add(map);
  2843 + return lMap;
  2844 + }
  2845 +
  2846 + public final Map<String, Object> staticTj(List<ScheduleRealInfo> list,Map<String, Object> m) {
  2847 +
  2848 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2849 + for (int i = 0; i < list.size(); i++) {
  2850 + ScheduleRealInfo s = list.get(i);
  2851 + Set<ChildTaskPlan> cts = s.getcTasks();
  2852 + if (cts != null && cts.size() > 0) {
  2853 + lists.add(s);
  2854 + } else {
  2855 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  2856 + lists.add(s);
  2857 + }
  2858 + }
  2859 + }
  2860 + Map<String, Object> map = new HashMap<String, Object>();
  2861 + if (list.size() > 0) {
  2862 + map.put("fgsBm", list.get(0).getFgsBm());
  2863 + map.put("xlBm", list.get(0).getXlBm());
  2864 + map.put("xlName", list.get(0).getXlName());
  2865 + map.put("fgsName", list.get(0).getFgsName());
  2866 + try {
  2867 + map.put("xlNamePy", PinyinHelper.convertToPinyinString(list.get(0).getFgsBm()+list.get(0).getXlName(), "", PinyinFormat.WITHOUT_TONE));
  2868 + } catch (PinyinException e) {
  2869 + // TODO Auto-generated catch block
  2870 + e.printStackTrace();
  2871 + }
  2872 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  2873 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  2874 + map.put("jhlc", jhyygl);
  2875 + map.put("jcclc", jhjcclc);
  2876 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  2877 + double ljks=culateService.culateLjksgl(lists);
  2878 + map.put("ljks", ljks);
  2879 + double ljgl = culateService.culateLjgl(lists);
  2880 + double sjyygl = culateService.culateSjgl(lists);
  2881 + double zyygl = Arith.add(sjyygl, ljgl);
  2882 +
  2883 + double sjjccgl = culateService.culateJccgl(lists);
  2884 + double sjksgl = culateService.culateKsgl(lists);
  2885 + double zksgl = Arith.add(sjjccgl, sjksgl);
  2886 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  2887 + map.put("sjgl", zyygl);
  2888 + map.put("sjksgl", zksgl);
  2889 + double ssgl = culateService.culateLbgl(list);
  2890 + map.put("ssgl", ssgl);
  2891 +
  2892 + //计划+临加-少驶=实驶
  2893 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  2894 + if (jl == zyygl) {
  2895 + map.put("zt", 0);
  2896 + } else {
  2897 + map.put("zt", 1);
  2898 + }
  2899 +
  2900 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  2901 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  2902 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  2903 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  2904 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  2905 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  2906 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  2907 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  2908 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  2909 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  2910 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  2911 + double ssgl_by = culateService.culateCJLC(list, "保养");
  2912 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  2913 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  2914 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2915 + map.put("ssbc", culateService.culateLbbc(list));
  2916 + map.put("ljgl", ljgl);
  2917 + map.put("jhbc", culateService.culateJhbc(list, ""));
  2918 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  2919 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  2920 + map.put("sjbc", culateService.culateSjbc(lists, ""));
  2921 + map.put("sjbc_m", culateService.culateSjbc(lists, "zgf"));
  2922 + map.put("sjbc_a", culateService.culateSjbc(lists, "wgf"));
  2923 + map.put("ljbc", culateService.culateLjbc(lists, ""));
  2924 + map.put("ljbc_m", culateService.culateLjbc(lists, "zgf"));
  2925 + map.put("ljbc_a", culateService.culateLjbc(lists, "wgf"));
  2926 + map.put("fzbc", culateService.culateFzbc(lists, ""));
  2927 + map.put("fzbc_m", culateService.culateFzbc(lists, "zgf"));
  2928 + map.put("fzbc_a", culateService.culateFzbc(lists, "wgf"));
  2929 + map.put("dtbc", 0);
  2930 + map.put("dtbc_m", 0);
  2931 + map.put("dtbc_a", 0);
  2932 + if(m.get("xl")==null){
  2933 + Map<String, Object> m_ = culateService.culateDjg(lists, list.get(0).getXlBm());
  2934 + map.put("djg", m_.get("djgcsq"));
  2935 + map.put("djg_m", m_.get("djgcsz"));
  2936 + map.put("djg_a", m_.get("djgcsw"));
  2937 + map.put("djg_time", m_.get("djgsj"));
  2938 + }else{
  2939 + map.put("djg", m.get("djgAll")==null?"0":m.get("djgAll"));
  2940 + map.put("djg_m", m.get("djgZgf")==null?"0":m.get("djgZgf"));
  2941 + map.put("djg_a", m.get("djgWgf")==null?"0":m.get("djgWgf"));
  2942 + map.put("djg_time", m.get("djgTime")==null?"0":m.get("djgTime"));
  2943 + }
  2944 + }
  2945 + return map;
  2946 + }
  2947 +
  2948 + @Override
  2949 + public List<Map<String, Object>> statisticsDailyTj(String gsdm, String fgsdm, String line, String date, String date2,
  2950 + String xlName, String type,String nature) {
  2951 + List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
  2952 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
  2953 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  2954 + List<Object[]> listInterval=new ArrayList<Object[]>();
  2955 + line = line.trim();
  2956 + if (line.equals("")) {
  2957 + //查询所有线路
  2958 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  2959 + listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
  2960 + } else {
  2961 + //查询单条线路
  2962 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
  2963 + listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
  2964 + }
  2965 + Map<String, Map<String,Object>> mapInterval=new HashMap<String, Map<String,Object>>();
  2966 + for (int i = 0; i < listInterval.size(); i++) {
  2967 + Object[] interval=listInterval.get(i);
  2968 + String gs=interval[0].toString();
  2969 + String fgs=interval[1].toString();
  2970 + String xl=interval[2].toString();
  2971 + Map<String, Object> m=new HashMap<String,Object>();
  2972 + m.put("gs", gs);
  2973 + m.put("fgs", fgs);
  2974 + m.put("xl", xl);
  2975 + m.put("djgAll", interval[3]);
  2976 + m.put("djgZgf", interval[6]);
  2977 + m.put("djgWgf", interval[7]);
  2978 + m.put("djgTime", interval[8]);
  2979 + mapInterval.put(gs+"-"+fgs+"-"+xl, m);
  2980 + }
  2981 + Map<String, Boolean> lineMap=lineService.lineNature();
  2982 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  2983 + for (int i = 0; i < listAll.size(); i++) {
  2984 + ScheduleRealInfo s=listAll.get(i);
  2985 + if (nature.equals("0")) {
  2986 + list.add(s);
  2987 + }else if(nature.equals("1")){
  2988 + if(lineMap.get(s.getXlBm())){
  2989 + list.add(s);
  2990 + }
  2991 + }else{
  2992 + if(!lineMap.get(s.getXlBm())){
  2993 + list.add(s);
  2994 + }
  2995 + }
  2996 + }
  2997 + for (int i = 0; i < list.size(); i++) {
  2998 + ScheduleRealInfo s = list.get(i);
  2999 + Set<ChildTaskPlan> cts = s.getcTasks();
  3000 + if (cts != null && cts.size() > 0) {
  3001 + list_s.add(s);
  3002 + } else {
  3003 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  3004 + list_s.add(s);
  3005 + }
  3006 + }
  3007 + }
  3008 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  3009 + for (int i = 0; i < list.size(); i++) {
  3010 + if (i < list.size() - 1) {
  3011 + if ((list.get(i+1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
  3012 + lists.add(list.get(i));
  3013 + } else {
  3014 + lists.add(list.get(i));
  3015 + Map<String, Object> mm=new HashMap<String,Object>();
  3016 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3017 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3018 + }
  3019 + Map<String, Object> map = staticTj(lists,mm);
  3020 + lMap.add(map);
  3021 + lists = new ArrayList<ScheduleRealInfo>();
  3022 + }
  3023 + } else {
  3024 + if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
  3025 + lists.add(list.get(i));
  3026 + Map<String, Object> mm=new HashMap<String,Object>();
  3027 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3028 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3029 + }
  3030 + Map<String, Object> map = staticTj(lists,mm);
  3031 + lMap.add(map);
  3032 + } else {
  3033 + lists = new ArrayList<ScheduleRealInfo>();
  3034 + lists.add(list.get(i));
  3035 + Map<String, Object> mm=new HashMap<String,Object>();
  3036 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3037 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3038 + }
  3039 + Map<String, Object> map = staticTj(lists,mm);
  3040 + lMap.add(map);
  3041 + }
  3042 + }
  3043 + }
  3044 + /*if(!line.equals("")){
  3045 + List<Line> l=lineRepository.findLineByCode(line);
  3046 + if(l.size()>0)
  3047 + lMap.get(0).put("fgsName", BasicData.businessFgsCodeNameMap.get(l.get(0).getBrancheCompany()+"_"+l.get(0).getCompany()));
  3048 + }*/
  3049 + Collections.sort(lMap, new AccountXlbm());
  3050 + Map<String, Object> map = new HashMap<String, Object>();
  3051 + map.put("xlName", "合计");
  3052 + map.put("fgsName", "");
  3053 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  3054 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  3055 + map.put("jhlc", jhyygl);
  3056 + map.put("jcclc", jhjcclc);
  3057 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  3058 +
  3059 + double ljgl = culateService.culateLjgl(list_s);
  3060 + double sjyygl = culateService.culateSjgl(list_s);
  3061 + double zyygl = Arith.add(sjyygl, ljgl);
  3062 + double ljks=culateService.culateLjksgl(list_s);
  3063 + map.put("ljks", ljks);
  3064 + double sjjccgl = culateService.culateJccgl(list_s);
  3065 + double sjksgl = culateService.culateKsgl(list_s);
  3066 + double zksgl = Arith.add(sjjccgl, sjksgl);
  3067 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  3068 + map.put("sjgl", zyygl);
  3069 + map.put("sjksgl", zksgl);
  3070 +
  3071 + double ssgl = culateService.culateLbgl(list);
  3072 + map.put("ssgl", ssgl);
  3073 + //计划+临加-少驶=实驶
  3074 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  3075 + if (jl == zyygl) {
  3076 + map.put("zt", 0);
  3077 + } else {
  3078 + map.put("zt", 1);
  3079 + }
  3080 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  3081 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  3082 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  3083 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  3084 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  3085 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  3086 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  3087 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  3088 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  3089 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  3090 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  3091 + double ssgl_by = culateService.culateCJLC(list, "保养");
  3092 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  3093 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  3094 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  3095 +
  3096 + map.put("ssbc", culateService.culateLbbc(list));
  3097 + map.put("ljgl", ljgl);
  3098 + map.put("jhbc", culateService.culateJhbc(list, ""));
  3099 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  3100 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  3101 + map.put("sjbc", culateService.culateSjbc(list_s, ""));
  3102 + map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
  3103 + map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
  3104 + map.put("ljbc", culateService.culateLjbc(list_s, ""));
  3105 + map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
  3106 + map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
  3107 + map.put("fzbc", culateService.culateFzbc(list_s, ""));
  3108 + map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
  3109 + map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
  3110 + map.put("dtbc", 0);
  3111 + map.put("dtbc_m", 0);
  3112 + map.put("dtbc_a", 0);
  3113 + if (list.size() > 0) {
  3114 + int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
  3115 + for (Map<String, Object> m : lMap) {
  3116 + if (m.containsKey("djg") && m.get("djg") != null)
  3117 + djg += Integer.valueOf(m.get("djg").toString());
  3118 + if (m.containsKey("djg_m") && m.get("djg_m") != null)
  3119 + djg_m += Integer.valueOf(m.get("djg_m").toString());
  3120 + if (m.containsKey("djg_a") && m.get("djg_a") != null)
  3121 + djg_a += Integer.valueOf(m.get("djg_a").toString());
  3122 + if (m.containsKey("djg_time") && m.get("djg_time") != null) {
  3123 + int t = Integer.valueOf(m.get("djg_time").toString());
  3124 + if (t > djg_time)
  3125 + djg_time = t;
  3126 + }
  3127 + }
  3128 + map.put("djg", djg);
  3129 + map.put("djg_m", djg_m);
  3130 + map.put("djg_a", djg_a);
  3131 + map.put("djg_time", djg_time);
  3132 +// Map<String, Object> m_=culateService.culateDjg(list_s, list.get(0).getXlBm());
  3133 +// map.put("djg", m_.get("djgcsq"));
  3134 +// map.put("djg_m", m_.get("djgcsz"));
  3135 +// map.put("djg_a", m_.get("djgcsw"));
  3136 +// map.put("djg_time", m_.get("djgsj"));
  3137 + } else {
  3138 + map.put("djg", "0");
  3139 + map.put("djg_m", "0");
  3140 + map.put("djg_a", "0");
  3141 + map.put("djg_time", "0");
  3142 + }
  3143 + lMap.add(map);
  3144 + if (type != null && type.length() != 0 && type.equals("export")) {
  3145 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  3146 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  3147 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  3148 + Map<String, Object> m = new HashMap<String, Object>();
  3149 + m.put("date", date + "至" + date2);
  3150 + ReportUtils ee = new ReportUtils();
  3151 + try {
  3152 + String dateTime = "";
  3153 + if (date.equals(date2)) {
  3154 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  3155 + } else {
  3156 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  3157 + + "-" + sdfSimple.format(sdfMonth.parse(date2));
  3158 + }
  3159 + listI.add(lMap.iterator());
  3160 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  3161 + ee.excelReplace(listI, new Object[]{m}, path + "mould/statisticsDaily_2.xls",
  3162 + path + "export/" + dateTime + "-" + xlName + "-统计日报.xls");
  3163 + } catch (Exception e) {
  3164 + // TODO: handle exception
  3165 + //e.printStackTrace();
  3166 + logger.info("", e);
  3167 + }
  3168 + }
  3169 +
  3170 + return lMap;
  3171 + }
  3172 +
  3173 + @Override
  3174 + public List<Map<String, Object>> statisticsDailyTjHb(String gsdm, String fgsdm, String line, String date, String date2,
  3175 + String xlName, String type,String nature) {
  3176 + List<ScheduleRealInfo> listAll = new ArrayList<ScheduleRealInfo>();
  3177 + List<ScheduleRealInfo> list_s = new ArrayList<ScheduleRealInfo>();
  3178 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  3179 + List<Object[]> listInterval=new ArrayList<Object[]>();
  3180 +
  3181 + line = line.trim();
  3182 + if (line.equals("")) {
  3183 + //查询所有线路
  3184 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj(line, date, date2, gsdm, fgsdm);
  3185 + listInterval = calcIntervalRepository.countByDateAndLine(gsdm, fgsdm, date, date2);
  3186 + } else {
  3187 + //查询单条线路
  3188 + listAll = scheduleRealInfoRepository.scheduleByDateAndLineTj2(line, date, date2);
  3189 + listInterval = calcIntervalRepository.countByDateAndLine(line, date, date2);
  3190 + }
  3191 + Map<String, Map<String,Object>> mapInterval=new HashMap<>();
  3192 + for (int i = 0; i < listInterval.size(); i++) {
  3193 + Object[] interval=listInterval.get(i);
  3194 + String gs=interval[0].toString();
  3195 + String fgs=interval[1].toString();
  3196 + String xl=interval[2].toString();
  3197 + Map<String, Object> m=new HashMap<String,Object>();
  3198 + m.put("gs", gs);
  3199 + m.put("fgs", fgs);
  3200 + m.put("xl", xl);
  3201 + m.put("djgAll", interval[3]);
  3202 + m.put("djgZgf", interval[6]);
  3203 + m.put("djgWgf", interval[7]);
  3204 + m.put("djgTime", interval[8]);
  3205 + mapInterval.put(gs+"-"+fgs+"-"+xl, m);
  3206 + }
  3207 +
  3208 + Map<String, Boolean> lineMap=lineService.lineNature();
  3209 + List<ScheduleRealInfo> list=new ArrayList<ScheduleRealInfo>();
  3210 + for (int i = 0; i < listAll.size(); i++) {
  3211 + ScheduleRealInfo s=listAll.get(i);
  3212 + if (nature.equals("0")) {
  3213 + list.add(s);
  3214 + }else if(nature.equals("1")){
  3215 + if(lineMap.get(s.getXlBm())){
  3216 + list.add(s);
  3217 + }
  3218 + }else{
  3219 + if(!lineMap.get(s.getXlBm())){
  3220 + list.add(s);
  3221 + }
  3222 + }
  3223 + }
  3224 + for (int i = 0; i < list.size(); i++) {
  3225 + ScheduleRealInfo s = list.get(i);
  3226 + Set<ChildTaskPlan> cts = s.getcTasks();
  3227 + if (cts != null && cts.size() > 0) {
  3228 + list_s.add(s);
  3229 + } else {
  3230 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  3231 + list_s.add(s);
  3232 + }
  3233 + }
  3234 + }
  3235 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  3236 + for (int i = 0; i < list.size(); i++) {
  3237 + if (i < list.size() - 1) {
  3238 + if ((list.get(i + 1).getFgsBm()+list.get(i + 1).getXlBm()).equals(list.get(i).getFgsBm()+list.get(i).getXlBm())) {
  3239 + lists.add(list.get(i));
  3240 + } else {
  3241 + lists.add(list.get(i));
  3242 + Map<String, Object> mm=new HashMap<String,Object>();
  3243 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3244 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3245 + }
  3246 + Map<String, Object> map = staticTj(lists,mm);
  3247 + lMap.add(map);
  3248 + lists = new ArrayList<ScheduleRealInfo>();
  3249 + }
  3250 + } else {
  3251 + if ((list.get(i).getFgsBm()+list.get(i).getXlBm()).equals(list.get(i - 1).getFgsBm()+list.get(i - 1).getXlBm())) {
  3252 + lists.add(list.get(i));
  3253 + Map<String, Object> mm=new HashMap<String,Object>();
  3254 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3255 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3256 + }
  3257 + Map<String, Object> map = staticTj(lists,mm);
  3258 + lMap.add(map);
  3259 + } else {
  3260 + lists = new ArrayList<ScheduleRealInfo>();
  3261 + lists.add(list.get(i));
  3262 + Map<String, Object> mm=new HashMap<String,Object>();
  3263 + if(mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm())!=null){
  3264 + mm=mapInterval.get(lists.get(0).getGsBm()+"-"+lists.get(0).getFgsBm()+"-"+lists.get(0).getXlBm());
  3265 + }
  3266 + Map<String, Object> map = staticTj(lists,mm);
  3267 + lMap.add(map);
  3268 + }
  3269 + }
  3270 + }
  3271 +
  3272 + Collections.sort(lMap, new AccountXlbm());
  3273 + Map<String, Object> map = new HashMap<String, Object>();
  3274 + map.put("xlBm", "hj");
  3275 + map.put("xlName", "合计");
  3276 + map.put("fgsBm", "");
  3277 + map.put("fgsName", "");
  3278 + map.put("gsBm", "");
  3279 + double jhyygl = culateService.culateJhgl(list);//计划营运公里
  3280 + double jhjcclc = culateService.culateJhJccgl(list);//计划进出场公里(计划空驶公里)
  3281 + map.put("jhlc", jhyygl);
  3282 + map.put("jcclc", jhjcclc);
  3283 + map.put("jhzlc", Arith.add(jhyygl, jhjcclc));
  3284 +
  3285 + double ljgl = culateService.culateLjgl(list_s);
  3286 + double sjyygl = culateService.culateSjgl(list_s);
  3287 + double zyygl = Arith.add(sjyygl, ljgl);
  3288 + double ljks=culateService.culateLjksgl(list_s);
  3289 + map.put("ljks", ljks);
  3290 + double sjjccgl = culateService.culateJccgl(list_s);
  3291 + double sjksgl = culateService.culateKsgl(list_s);
  3292 + double zksgl = Arith.add(sjjccgl, sjksgl);
  3293 + map.put("sjzgl", Arith.add(zyygl, zksgl));
  3294 + map.put("sjgl", zyygl);
  3295 + map.put("sjksgl", zksgl);
  3296 +
  3297 + double ssgl = culateService.culateLbgl(list);
  3298 + map.put("ssgl", ssgl);
  3299 + //计划+临加-少驶=实驶
  3300 + double jl = Arith.sub(Arith.add(jhyygl, ljgl), ssgl);
  3301 + if (jl == zyygl) {
  3302 + map.put("zt", 0);
  3303 + } else {
  3304 + map.put("zt", 1);
  3305 + }
  3306 + map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
  3307 + map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  3308 + map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
  3309 + map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
  3310 + map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  3311 + map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
  3312 + map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
  3313 + map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
  3314 + map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
  3315 + map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
  3316 + double ssgl_pc = culateService.culateCJLC(list, "配车");
  3317 + double ssgl_by = culateService.culateCJLC(list, "保养");
  3318 + double ssgl_cj = culateService.culateCJLC(list, "抽减");
  3319 + double ssgl_qt = culateService.culateCJLC(list, "其他");
  3320 + map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  3321 +
  3322 + map.put("ssbc", culateService.culateLbbc(list));
  3323 + map.put("ljgl", ljgl);
  3324 + map.put("jhbc", culateService.culateJhbc(list, ""));
  3325 + map.put("jhbc_m", culateService.culateJhbc(list, "zgf"));
  3326 + map.put("jhbc_a", culateService.culateJhbc(list, "wgf"));
  3327 + map.put("sjbc", culateService.culateSjbc(list_s, ""));
  3328 + map.put("sjbc_m", culateService.culateSjbc(list_s, "zgf"));
  3329 + map.put("sjbc_a", culateService.culateSjbc(list_s, "wgf"));
  3330 + map.put("ljbc", culateService.culateLjbc(list_s, ""));
  3331 + map.put("ljbc_m", culateService.culateLjbc(list_s, "zgf"));
  3332 + map.put("ljbc_a", culateService.culateLjbc(list_s, "wgf"));
  3333 + map.put("fzbc", culateService.culateFzbc(list_s, ""));
  3334 + map.put("fzbc_m", culateService.culateFzbc(list_s, "zgf"));
  3335 + map.put("fzbc_a", culateService.culateFzbc(list_s, "wgf"));
  3336 + map.put("dtbc", 0);
  3337 + map.put("dtbc_m", 0);
  3338 + map.put("dtbc_a", 0);
  3339 + if (list.size() > 0) {
  3340 + int djg = 0, djg_m = 0, djg_a = 0, djg_time = 0;
  3341 + for (Map<String, Object> m : lMap) {
  3342 + if (m.containsKey("djg") && m.get("djg") != null)
  3343 + djg += Integer.valueOf(m.get("djg").toString());
  3344 + if (m.containsKey("djg_m") && m.get("djg_m") != null)
  3345 + djg_m += Integer.valueOf(m.get("djg_m").toString());
  3346 + if (m.containsKey("djg_a") && m.get("djg_a") != null)
  3347 + djg_a += Integer.valueOf(m.get("djg_a").toString());
  3348 + if (m.containsKey("djg_time") && m.get("djg_time") != null) {
  3349 + int t = Integer.valueOf(m.get("djg_time").toString());
  3350 + if (t > djg_time)
  3351 + djg_time = t;
  3352 + }
  3353 + }
  3354 + map.put("djg", djg);
  3355 + map.put("djg_m", djg_m);
  3356 + map.put("djg_a", djg_a);
  3357 + map.put("djg_time", djg_time);
  3358 + } else {
  3359 + map.put("djg", "0");
  3360 + map.put("djg_m", "0");
  3361 + map.put("djg_a", "0");
  3362 + map.put("djg_time", "0");
  3363 + }
  3364 + lMap.add(map);
  3365 + return lMap;
  3366 + }
  3367 +
  3368 + @Override
  3369 + public Map<String, Object> scheduleDaily(String line, String date) {
  3370 + Map<String, String> tempMap = null;
  3371 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleByDateAndLine(line, date);
  3372 + Map<String, Object> map = new HashMap<String, Object>();
  3373 + Double jhlc = 0.00;
  3374 + 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;
  3375 + int jhbc = 0;
  3376 + for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
  3377 + if (scheduleRealInfo != null) {
  3378 + //计算里程(包括子任务)
  3379 + jhlc += scheduleRealInfo.getJhlc();
  3380 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  3381 + if (!childTaskPlans.isEmpty()) {
  3382 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  3383 + while (it.hasNext()) {
  3384 + ChildTaskPlan childTaskPlan = it.next();
  3385 + //是否烂班,烂班就是少驶
  3386 + if (!childTaskPlan.isDestroy()) {
  3387 + sjgl += childTaskPlan.getMileage();
  3388 + } else {
  3389 + ssgl += childTaskPlan.getMileage();
  3390 + if (childTaskPlan.getDestroyReason().equals("路阻")) {
  3391 + ssgl_lz += childTaskPlan.getMileage();
  3392 + } else if (childTaskPlan.getDestroyReason().equals("吊慢")) {
  3393 + ssgl_dm += childTaskPlan.getMileage();
  3394 + } else if (childTaskPlan.getDestroyReason().equals("故障")) {
  3395 + ssgl_gz += childTaskPlan.getMileage();
  3396 + } else if (childTaskPlan.getDestroyReason().equals("纠纷")) {
  3397 + ssgl_jf += childTaskPlan.getMileage();
  3398 + } else if (childTaskPlan.getDestroyReason().equals("肇事")) {
  3399 + ssgl_zs += childTaskPlan.getMileage();
  3400 + } else if (childTaskPlan.getDestroyReason().equals("缺人")) {
  3401 + ssgl_qr += childTaskPlan.getMileage();
  3402 + } else if (childTaskPlan.getDestroyReason().equals("缺车")) {
  3403 + ssgl_qc += childTaskPlan.getMileage();
  3404 + } else if (childTaskPlan.getDestroyReason().equals("客稀")) {
  3405 + ssgl_kx += childTaskPlan.getMileage();
  3406 + } else if (childTaskPlan.getDestroyReason().equals("气候")) {
  3407 + ssgl_qh += childTaskPlan.getMileage();
  3408 + } else if (childTaskPlan.getDestroyReason().equals("援外")) {
  3409 + ssgl_yw += childTaskPlan.getMileage();
  3410 + } else {
  3411 + ssgl_other += childTaskPlan.getMileage();
  3412 + }
  3413 + }
  3414 + //临加公里
  3415 + if (childTaskPlan.getType1().equals("临加")) {
  3416 + ljgl += childTaskPlan.getMileage();
  3417 + }
  3418 + }
  3419 + }
  3420 + //班次
  3421 + scheduleRealInfo.getFcsjT();
  3422 + scheduleRealInfo.getFcsjActualTime();
  3423 + }
  3424 + }
  3425 + map.put("jhlc", jhlc);
  3426 + map.put("sjgl", sjgl);
  3427 + map.put("ssgl", ssgl);
  3428 + map.put("ssgl_lz", ssgl_lz);
  3429 + map.put("ssgl_dm", ssgl_dm);
  3430 + map.put("ssgl_gz", ssgl_gz);
  3431 + map.put("ssgl_jf", ssgl_jf);
  3432 + map.put("ssgl_zs", ssgl_zs);
  3433 + map.put("ssgl_qr", ssgl_qr);
  3434 + map.put("ssgl_qc", ssgl_qc);
  3435 + map.put("ssgl_kx", ssgl_kx);
  3436 + map.put("ssgl_qh", ssgl_qh);
  3437 + map.put("ssgl_yw", ssgl_yw);
  3438 + map.put("ssgl_other", ssgl_other);
  3439 + map.put("ljgl", ljgl);
  3440 +
  3441 + map.put("jhbc", scheduleRealInfos.size());
  3442 + return null;
  3443 + }
  3444 +
  3445 + @Override
  3446 + public int countByLineCodeAndDate(String xlBm, String schDate) {
  3447 + return scheduleRealInfoRepository.countByLineCodeAndDate(xlBm + "", schDate);
  3448 + }
  3449 +
  3450 + @Override
  3451 + public List<ScheduleRealInfo> findByLineCodeAndDate(String xlBm, String schDate) {
  3452 + return scheduleRealInfoRepository.findByLineCodeAndDate(xlBm + "", schDate);
  3453 + }
  3454 +
  3455 + @Override
  3456 + public void deleteByLineCodeAndDate(String xlBm, String schDate) {
  3457 + scheduleRealInfoRepository.deleteByLineCodeAndDate(xlBm + "", schDate);
  3458 + }
  3459 +
  3460 + @Override
  3461 + public Long getMaxId() {
  3462 + return scheduleRealInfoRepository.getMaxId();
  3463 + }
  3464 +
  3465 + @Override
  3466 + public List<ScheduleRealInfo> realScheduleList(String line, String date) {
  3467 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3468 + String lpName = "lpName";
  3469 + String zdsj = "";
  3470 + String zdsjActual = "";
  3471 + String zdsj1 = "";
  3472 + String zdsjActual1 = "";
  3473 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
  3474 +
  3475 + /*
  3476 + * 对计划发车时间相同的班次进行排序 out最前 in最后
  3477 + */
  3478 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  3479 + SimpleDateFormat sdfnyr =new SimpleDateFormat("yyyy-MM-dd");
  3480 + String minfcsj = "02:00";
  3481 + List<Line> lineList = lineRepository.findLineByCode(line);
  3482 + if (lineList.size() > 0) {
  3483 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  3484 + + " id = ("
  3485 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  3486 + + ")";
  3487 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  3488 + }
  3489 + String[] minSjs = minfcsj.split(":");
  3490 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  3491 + for (int i = 0; i < listInfo.size(); i++) {
  3492 + ScheduleRealInfo s = listInfo.get(i);
  3493 + if (s.getBcType().equals("out")) {
  3494 + s.setRemark("1");
  3495 + } else if (s.getBcType().equals("in")) {
  3496 + s.setRemark("3");
  3497 + } else {
  3498 + s.setRemark("2");
  3499 + }
  3500 + String[] fcsj = s.getFcsj().split(":");
  3501 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3502 +
  3503 + Long fscjT = 0L;
  3504 + if (fcsjL < minSj) {
  3505 + Calendar calendar = new GregorianCalendar();
  3506 + calendar.setTime(s.getScheduleDate());
  3507 + calendar.add(calendar.DATE, 1);
  3508 + Date date_sch= calendar.getTime();
  3509 + try {
  3510 + fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
  3511 + } catch (ParseException e) {
  3512 + // TODO Auto-generated catch block
  3513 + e.printStackTrace();
  3514 + }
  3515 +
  3516 + } else {
  3517 + try {
  3518 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3519 + } catch (ParseException e) {
  3520 + // TODO Auto-generated catch block
  3521 + e.printStackTrace();
  3522 + };
  3523 + }
  3524 + s.setFcsjT(fscjT);
  3525 + }
  3526 + List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
  3527 + listInfo2.addAll(listInfo);
  3528 + Collections.sort(listInfo, new compareLpFcsjType());
  3529 + Collections.sort(listInfo2,new compareDirLpFcsjType());
  3530 + for (int i = 0; i < listInfo.size(); i++) {
  3531 + ScheduleRealInfo t = listInfo.get(i);
  3532 + if (!lpName.equals(t.getLpName())) {
  3533 + zdsjActual = t.getZdsjActual();
  3534 + zdsj = t.getZdsj();
  3535 + t.setZdsjActual("");
  3536 + t.setZdsj("");
  3537 + } else {
  3538 + zdsj1 = t.getZdsj();
  3539 + zdsjActual1 = t.getZdsjActual();
  3540 + t.setZdsjActual(zdsjActual);
  3541 + t.setZdsj(zdsj);
  3542 + zdsj = zdsj1;
  3543 + zdsjActual = zdsjActual1;
  3544 + }
  3545 + lpName = t.getLpName();
  3546 + list.add(t);
  3547 + }
  3548 +/*
  3549 + List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleDdrb2(line, date);
  3550 + for (int i = 0; i < listInfo2.size(); i++) {
  3551 + ScheduleRealInfo s = listInfo2.get(i);
  3552 + if (s.getBcType().equals("out")) {
  3553 + s.setRemark("1");
  3554 + } else if (s.getBcType().equals("in")) {
  3555 + s.setRemark("3");
  3556 + } else {
  3557 + s.setRemark("2");
  3558 + }
  3559 + String[] fcsj = s.getFcsj().split(":");
  3560 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3561 +
  3562 + Long fscjT = 0L;
  3563 + if (fcsjL < minSj) {
  3564 + Calendar calendar = new GregorianCalendar();
  3565 + calendar.setTime(s.getScheduleDate());
  3566 + calendar.add(calendar.DATE, 1);
  3567 + s.setScheduleDate(calendar.getTime());
  3568 + try {
  3569 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  3570 + } catch (ParseException e) {
  3571 + // TODO Auto-generated catch block
  3572 + e.printStackTrace();
  3573 + }
  3574 +
  3575 + } else {
  3576 + try {
  3577 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3578 + } catch (ParseException e) {
  3579 + // TODO Auto-generated catch block
  3580 + e.printStackTrace();
  3581 + }
  3582 + ;
  3583 + }
  3584 + s.setFcsjT(fscjT);
  3585 + }*/
  3586 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3587 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3588 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3589 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3590 + if (listInfo2.size() > 0) {
  3591 + int a = listInfo2.size() % 3;
  3592 + int b = listInfo2.size() / 3;
  3593 + int x = 0, y = 0;
  3594 + if (a == 2) {
  3595 + x = b + 1;
  3596 + y = x * 2;
  3597 + } else if (a == 1) {
  3598 + x = b + 1;
  3599 + y = x * 2 - 1;
  3600 + } else {
  3601 + x = b;
  3602 + y = 2 * x;
  3603 +
  3604 + }
  3605 + for (int i = 0; i < listInfo2.size(); i++) {
  3606 + ScheduleRealInfo s = listInfo2.get(i);
  3607 + if (i + 1 <= x) {
  3608 + xList.add(s);
  3609 + } else if ((i + 1) > x && (i + 1) <= y) {
  3610 + yList.add(s);
  3611 + } else {
  3612 + zList.add(s);
  3613 + }
  3614 + }
  3615 + for (int i = 0; i < x; i++) {
  3616 + newList.add(xList.get(i));
  3617 + if (yList.size() > i) {
  3618 + newList.add(yList.get(i));
  3619 + } else {
  3620 + newList.add(new ScheduleRealInfo());
  3621 + }
  3622 + if (zList.size() > i) {
  3623 + newList.add(zList.get(i));
  3624 + } else {
  3625 + newList.add(new ScheduleRealInfo());
  3626 + }
  3627 +
  3628 + }
  3629 + }
  3630 + for (int i = 0; i < newList.size(); i++) {
  3631 + ScheduleRealInfo t1 = newList.get(i);
  3632 + for (int j = 0; j < list.size(); j++) {
  3633 + ScheduleRealInfo t2 = list.get(j);
  3634 + if (t1.getId() == t2.getId()) {
  3635 + t1 = t2;
  3636 + }
  3637 + }
  3638 + }
  3639 +
  3640 + for (int i = 0; i < newList.size(); i++) {
  3641 + ScheduleRealInfo t1 = newList.get(i);
  3642 + String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
  3643 + if (reamrks1.length() > 4) {
  3644 + t1.setRemarks(reamrks1.substring(0, 4));
  3645 + t1.setRemark(reamrks1);
  3646 + } else {
  3647 + t1.setRemark(reamrks1);
  3648 + }
  3649 + }
  3650 + return newList;
  3651 + }
  3652 +
  3653 + @Override
  3654 + public List<ScheduleRealInfo> realScheduleList_zrw(String line, String date) {
  3655 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3656 + String lpName = "lpName";
  3657 + String zdsj = "";
  3658 + String zdsjActual = "";
  3659 + String zdsj1 = "";
  3660 + String zdsjActual1 = "";
  3661 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleDdrb(line, date);
  3662 +
  3663 + /*
  3664 + * 对计划发车时间相同的班次进行排序 out最前 in最后
  3665 + */
  3666 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  3667 + SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
  3668 +
  3669 + String minfcsj = "02:00";
  3670 + List<Line> lineList = lineRepository.findLineByCode(line);
  3671 + if (lineList.size() > 0) {
  3672 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  3673 + + " id = ("
  3674 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  3675 + + ")";
  3676 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  3677 + }
  3678 + String[] minSjs = minfcsj.split(":");
  3679 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  3680 + for (int i = 0; i < listInfo.size(); i++) {
  3681 + ScheduleRealInfo s = listInfo.get(i);
  3682 + if (s.getBcType().equals("out")) {
  3683 + s.setRemark("1");
  3684 + } else if (s.getBcType().equals("in")) {
  3685 + s.setRemark("3");
  3686 + } else {
  3687 + s.setRemark("2");
  3688 + }
  3689 + String[] fcsj = s.getFcsj().split(":");
  3690 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  3691 +
  3692 + Long fscjT = 0L;
  3693 + if (fcsjL < minSj) {
  3694 + Calendar calendar = new GregorianCalendar();
  3695 + calendar.setTime(s.getScheduleDate());
  3696 + calendar.add(calendar.DATE, 1);
  3697 + Date date_sch=calendar.getTime();
  3698 + try {
  3699 + fscjT = sdf.parse(sdfnyr.format(date_sch) + " " + s.getFcsj()).getTime();
  3700 + } catch (ParseException e) {
  3701 + // TODO Auto-generated catch block
  3702 + e.printStackTrace();
  3703 + }
  3704 +
  3705 + } else {
  3706 + try {
  3707 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  3708 + } catch (ParseException e) {
  3709 + // TODO Auto-generated catch block
  3710 + e.printStackTrace();
  3711 + }
  3712 + ;
  3713 + }
  3714 + s.setFcsjT(fscjT);
  3715 + }
  3716 +
  3717 +// Collections.sort(listInfo, new compareLpFcsjType());
  3718 + List<ScheduleRealInfo> listInfo2=new ArrayList<ScheduleRealInfo>();
  3719 +
  3720 + Collections.sort(listInfo, new compareLpFcsjType());
  3721 + for (int i = 0; i < listInfo.size(); i++) {
  3722 + ScheduleRealInfo t = listInfo.get(i);
  3723 + if (!lpName.equals(t.getLpName())) {
  3724 + zdsjActual = t.getZdsjActual();
  3725 + zdsj = t.getZdsj();
  3726 + t.setZdsjActual("");
  3727 + t.setZdsj("");
  3728 + } else {
  3729 + zdsj1 = t.getZdsj();
  3730 + zdsjActual1 = t.getZdsjActual();
  3731 + t.setZdsjActual(zdsjActual);
  3732 + t.setZdsj(zdsj);
  3733 + zdsj = zdsj1;
  3734 + zdsjActual = zdsjActual1;
  3735 + }
  3736 +
  3737 +
  3738 +
  3739 + lpName = t.getLpName();
  3740 + listInfo2.add(t);
  3741 +
  3742 + }
  3743 +
  3744 + Collections.sort(listInfo2,new compareDirLpFcsjType());
  3745 + for (int i = 0; i < listInfo2.size(); i++) {
  3746 + ScheduleRealInfo t=listInfo2.get(i);
  3747 + list.add(t);
  3748 + Set<ChildTaskPlan> childTaskPlans = t.getcTasks();
  3749 + //计算营运里程,空驶里程
  3750 + if (!childTaskPlans.isEmpty()) {
  3751 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  3752 + Collections.sort(listit, new ComparableChild());
  3753 + for (int j = 0; j < listit.size(); j++) {
  3754 + ScheduleRealInfo s = new ScheduleRealInfo();
  3755 + ChildTaskPlan childTaskPlan = listit.get(j);
  3756 + if (childTaskPlan.getCcId() == null) {
  3757 + if (childTaskPlan.isDestroy()) {
  3758 + s.setFcsjActual("");
  3759 + s.setZdsjActual("");
  3760 + } else {
  3761 + s.setFcsjActual(childTaskPlan.getStartDate());
  3762 + s.setZdsjActual("");
  3763 + s.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  3764 + }
  3765 + s.setFcsj(childTaskPlan.getStartDate());
  3766 + s.setZdsj("");
  3767 + s.setQdzName(childTaskPlan.getStartStationName());
  3768 + s.setZdzName(childTaskPlan.getEndStationName());
  3769 + s.setRemarks(childTaskPlan.getRemarks());
  3770 + s.setAdjustExps("子");
  3771 + s.setLpName("");
  3772 + list.add(s);
  3773 + }
  3774 + }
  3775 + }
  3776 + }
  3777 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3778 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3779 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3780 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3781 + if (list.size() > 0) {
  3782 + int a = list.size() % 3;
  3783 + int b = list.size() / 3;
  3784 + int x = 0, y = 0;
  3785 + if (a == 2) {
  3786 + x = b + 1;
  3787 + y = x * 2;
  3788 + } else if (a == 1) {
  3789 + x = b + 1;
  3790 + y = x * 2 - 1;
  3791 + } else {
  3792 + x = b;
  3793 + y = 2 * x;
  3794 +
  3795 + }
  3796 + for (int i = 0; i < list.size(); i++) {
  3797 + ScheduleRealInfo s = list.get(i);
  3798 + if (i + 1 <= x) {
  3799 + xList.add(s);
  3800 + } else if ((i + 1) > x && (i + 1) <= y) {
  3801 + yList.add(s);
  3802 + } else {
  3803 + zList.add(s);
  3804 + }
  3805 + }
  3806 + for (int i = 0; i < x; i++) {
  3807 + newList.add(xList.get(i));
  3808 + if (yList.size() > i) {
  3809 + newList.add(yList.get(i));
  3810 + } else {
  3811 + newList.add(new ScheduleRealInfo());
  3812 + }
  3813 + if (zList.size() > i) {
  3814 + newList.add(zList.get(i));
  3815 + } else {
  3816 + newList.add(new ScheduleRealInfo());
  3817 + }
  3818 +
  3819 + }
  3820 + }
  3821 + /* for (int i = 0; i < newList.size(); i++) {
  3822 + ScheduleRealInfo t1 = newList.get(i);
  3823 + for (int j = 0; j < list.size(); j++) {
  3824 + ScheduleRealInfo t2 = list.get(j);
  3825 + if (t1.getId() == t2.getId()) {
  3826 + t1 = t2;
  3827 + }
  3828 + }
  3829 + }*/
  3830 +
  3831 + for (int i = 0; i < newList.size(); i++) {
  3832 + ScheduleRealInfo t1 = newList.get(i);
  3833 + String reamrks1 = t1.getRemarks() == null ? "" : t1.getRemarks();
  3834 + if (reamrks1.length() > 4) {
  3835 + t1.setRemarks(reamrks1.substring(0, 4));
  3836 + t1.setRemark(reamrks1);
  3837 + } else {
  3838 + t1.setRemark(reamrks1);
  3839 + }
  3840 + }
  3841 + return newList;
  3842 + }
  3843 +
  3844 + @Override
  3845 + public List<ScheduleRealInfo> realScheduleList_mh_2(String line, String date) {
  3846 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3847 + String lpName = "lpName";
  3848 + String zdsj = "";
  3849 + String zdsjActual = "";
  3850 + String zdsj1 = "";
  3851 + String zdsjActual1 = "";
  3852 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
  3853 +
  3854 + for (ScheduleRealInfo s : listInfo) {
  3855 + if (s.isDestroy() && s.isReissue()) {
  3856 + s.setRemark("");
  3857 + s.setFcsjActual(s.getDfsj());
  3858 + s.setZdsjActual(s.getZdsj());
  3859 + s.setStatus(2);
  3860 + s.setJhlc(s.getJhlcOrig());
  3861 + }
  3862 + }
  3863 +
  3864 + for (int i = 0; i < listInfo.size(); i++) {
  3865 + ScheduleRealInfo t = listInfo.get(i);
  3866 + if (!lpName.equals(t.getLpName())) {
  3867 + zdsjActual = t.getZdsjActual();
  3868 + zdsj = t.getZdsj();
  3869 + t.setZdsjActual("");
  3870 + t.setZdsj("");
  3871 + } else {
  3872 + zdsj1 = t.getZdsj();
  3873 + zdsjActual1 = t.getZdsjActual();
  3874 + t.setZdsjActual(zdsjActual);
  3875 + t.setZdsj(zdsj);
  3876 + zdsj = zdsj1;
  3877 + zdsjActual = zdsjActual1;
  3878 + }
  3879 + lpName = t.getLpName();
  3880 + list.add(t);
  3881 + }
  3882 +
  3883 + List<ScheduleRealInfo> listInfo2 = scheduleRealInfoRepository.scheduleByDateAndLineQp2(line, date);
  3884 + List<ScheduleRealInfo> xList = new ArrayList<ScheduleRealInfo>();
  3885 + List<ScheduleRealInfo> yList = new ArrayList<ScheduleRealInfo>();
  3886 + List<ScheduleRealInfo> zList = new ArrayList<ScheduleRealInfo>();
  3887 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  3888 + if (listInfo2.size() > 0) {
  3889 + int a = listInfo2.size() % 3;
  3890 + int b = listInfo2.size() / 3;
  3891 + int x = 0, y = 0;
  3892 + if (a == 2) {
  3893 + x = b + 1;
  3894 + y = x * 2;
  3895 + } else if (b == 1) {
  3896 + x = b + 1;
  3897 + y = x * 2 - 1;
  3898 + } else {
  3899 + x = b;
  3900 + y = 2 * x;
  3901 +
  3902 + }
  3903 + for (int i = 0; i < listInfo2.size(); i++) {
  3904 + ScheduleRealInfo s = listInfo2.get(i);
  3905 + if (i + 1 <= x) {
  3906 + xList.add(s);
  3907 + } else if ((i + 1) > x && (i + 1) <= y) {
  3908 + yList.add(s);
  3909 + } else {
  3910 + zList.add(s);
  3911 + }
  3912 + }
  3913 + for (int i = 0; i < x; i++) {
  3914 + newList.add(xList.get(i));
  3915 + if (yList.size() > i) {
  3916 + newList.add(yList.get(i));
  3917 + } else {
  3918 + newList.add(new ScheduleRealInfo());
  3919 + }
  3920 + if (zList.size() > i) {
  3921 + newList.add(zList.get(i));
  3922 + } else {
  3923 + newList.add(new ScheduleRealInfo());
  3924 + }
  3925 +
  3926 + }
  3927 + }
  3928 + for (int i = 0; i < newList.size(); i++) {
  3929 + ScheduleRealInfo t1 = newList.get(i);
  3930 + for (int j = 0; j < list.size(); j++) {
  3931 + ScheduleRealInfo t2 = list.get(j);
  3932 + if (t1.getId() == t2.getId()) {
  3933 + t1 = t2;
  3934 + }
  3935 + }
  3936 + }
  3937 + return newList;
  3938 + }
  3939 +
  3940 + @Override
  3941 + public List<ScheduleRealInfo> realScheduleListQp(String line, String date) {
  3942 + List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
  3943 + String lpName = "lpName";
  3944 + String zdsj = "";
  3945 + String zdsjActual = "";
  3946 + String zdsj1 = "";
  3947 + String zdsjActual1 = "";
  3948 + List<ScheduleRealInfo> listInfo = scheduleRealInfoRepository.scheduleByDateAndLineQp(line, date);
  3949 + for (int i = 0; i < listInfo.size(); i++) {
  3950 + ScheduleRealInfo t = listInfo.get(i);
  3951 + if (!lpName.equals(t.getLpName())) {
  3952 + zdsjActual = t.getZdsjActual();
  3953 + zdsj = t.getZdsj();
  3954 + t.setZdsjActual("");
  3955 + t.setZdsj("");
  3956 + } else {
  3957 + zdsj1 = t.getZdsj();
  3958 + zdsjActual1 = t.getZdsjActual();
  3959 + t.setZdsjActual(zdsjActual);
  3960 + t.setZdsj(zdsj);
  3961 + zdsj = zdsj1;
  3962 + zdsjActual = zdsjActual1;
  3963 + }
  3964 +
  3965 + lpName = t.getLpName();
  3966 + list.add(t);
  3967 + }
  3968 + return list;
  3969 + }
  3970 +
  3971 + public List<Map<String, Object>> yesterdayDataList(String line, String date, String gsbm, String fgsbm, String jGh, String nbbm) {
  3972 + List<Map<String, Object>> yesterdayDataList = new ArrayList<Map<String, Object>>();
  3973 + if (line.equals("")) {
  3974 + yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList(line, date, gsbm, fgsbm, nbbm);
  3975 + } else {
  3976 + yesterdayDataList = scheduleRealInfoRepository.yesterdayDataList_eq(line, date, gsbm, fgsbm, nbbm);
  3977 + }
  3978 + List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill3(jGh, nbbm, date, gsbm, fgsbm);
  3979 + for (int x = 0; x < yesterdayDataList.size(); x++) {
  3980 + String jsy = yesterdayDataList.get(x).get("jGh").toString();
  3981 + String clZbh = yesterdayDataList.get(x).get("clZbh").toString();
  3982 + String xlbm = yesterdayDataList.get(x).get("xlBm").toString();
  3983 + String lp = yesterdayDataList.get(x).get("lpName").toString();
  3984 + String realExecDate=yesterdayDataList.get(x).get("realExecDate").toString();
  3985 + String fcsj[] =realExecDate.split(" ");
  3986 + //取出最小计划发车时间
  3987 + yesterdayDataList.get(x).put("fcsj", fcsj[1]);
  3988 + Map<String, Object> map = new HashMap<String, Object>();
  3989 + boolean fage = true;
  3990 + String company = "";
  3991 + String bCompany = "";
  3992 + String lineName="";
  3993 + String jName="";
  3994 + List<ScheduleRealInfo> listS = new ArrayList<ScheduleRealInfo>();
  3995 + for (ScheduleRealInfo scheduleRealInfo : lists) {
  3996 + if (scheduleRealInfo.getjGh().equals(jsy)
  3997 + && scheduleRealInfo.getClZbh().equals(clZbh)
  3998 + && scheduleRealInfo.getXlBm().equals(xlbm)
  3999 + && scheduleRealInfo.getLpName().equals(lp)) {
  4000 + if (fage) {
  4001 + //根据线路代码获取公司
  4002 + company = scheduleRealInfo.getGsBm();
  4003 + bCompany = scheduleRealInfo.getFgsBm();
  4004 + lineName = scheduleRealInfo.getXlName();
  4005 + jName= scheduleRealInfo.getjName();
  4006 + fage = false;
  4007 + }
  4008 + Set<ChildTaskPlan> cts = scheduleRealInfo.getcTasks();
  4009 + if (cts != null && cts.size() > 0) {
  4010 + listS.add(scheduleRealInfo);
  4011 + } else {
  4012 + if (scheduleRealInfo.getZdsjActual() != null && scheduleRealInfo.getFcsjActual() != null) {
  4013 + listS.add(scheduleRealInfo);
  4014 + }
  4015 + }
  4016 + }
  4017 + }
  4018 + yesterdayDataList.get(x).put("company", company);
  4019 + yesterdayDataList.get(x).put("bCompany", bCompany);
  4020 + yesterdayDataList.get(x).put("lineName", lineName);
  4021 + yesterdayDataList.get(x).put("jName", jName);
  4022 + Double ljgl = culateMieageService.culateLjgl(listS);
  4023 + Double sjgl = culateMieageService.culateSjgl(listS);
  4024 + Double ksgl = culateMieageService.culateKsgl(listS);
  4025 + Double jccgl = culateMieageService.culateJccgl(listS);
  4026 + Double zyygl = Arith.add(sjgl, ljgl);
  4027 + Double zksgl = Arith.add(ksgl, jccgl);
  4028 + Double zlc = Arith.add(zyygl, zksgl);
  4029 + yesterdayDataList.get(x).put("totalKilometers", zlc);
  4030 +
  4031 + }
  4032 + //增加顺序号
  4033 + for (int i = 0; i < yesterdayDataList.size(); i++) {
  4034 + if (i == 0) {
  4035 + yesterdayDataList.get(i).put("seqNumber", 1);
  4036 + } else {
  4037 + if (yesterdayDataList.get(i - 1).get("clZbh").equals(yesterdayDataList.get(i).get("clZbh"))) {
  4038 + yesterdayDataList.get(i).put("seqNumber", 1 + (int) yesterdayDataList.get(i - 1).get("seqNumber"));
  4039 + } else {
  4040 + yesterdayDataList.get(i).put("seqNumber", 1);
  4041 + }
  4042 + }
  4043 + }
  4044 +
  4045 + return yesterdayDataList;
  4046 + }
  4047 +
  4048 + /**
  4049 + * 批量调整人车
  4050 + */
  4051 + @Override
  4052 + public Map<String, Object> multi_tzrc(List<ChangePersonCar> cpcs, String userId) {
  4053 + Map<String, Object> rs = new HashMap<>();
  4054 + Set<ScheduleRealInfo> set = new HashSet<>();
  4055 +
  4056 + ScheduleRealInfo sch;
  4057 +
  4058 + String jGh = null, jName, sGh, sName;
  4059 + for (ChangePersonCar cpc : cpcs) {
  4060 +
  4061 + sch = dayOfSchedule.get(cpc.getSchId());
  4062 + if (sch == null)
  4063 + continue;
  4064 +
  4065 + if (cpc.getClZbh() != null) {
  4066 + if (!carExist(sch.getGsBm(), cpc.getClZbh())) {
  4067 + rs.put("msg", "车辆 " + cpc.getClZbh() + " <a href=\"/#/busInfoManage\" target=_blank>车辆基础信息</a> 里找不到!");
  4068 + rs.put("status", ResponseCode.ERROR);
  4069 + return rs;
  4070 + } else if (!sch.getGsBm().equals(BasicData.nbbm2CompanyCodeMap.get(cpc.getClZbh()))) {
  4071 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到自编号为【" + cpc.getClZbh() + "】的车辆");
  4072 + rs.put("status", ResponseCode.ERROR);
  4073 + return rs;
  4074 + }
  4075 + }
  4076 +
  4077 + if (StringUtils.isNotEmpty(cpc.getJsy())) {
  4078 + try{
  4079 + jGh = cpc.getJsy().split("/")[0];
  4080 + }catch (Exception e){
  4081 + logger.error("", e);
  4082 + rs.put("msg", "驾驶员参数异常!!");
  4083 + rs.put("status", ResponseCode.ERROR);
  4084 + return rs;
  4085 + }
  4086 +
  4087 + jName = getPersonName(sch.getGsBm(), jGh);
  4088 + if (StringUtils.isEmpty(jName)) {
  4089 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + jGh + "】的驾驶员");
  4090 + rs.put("status", ResponseCode.ERROR);
  4091 + return rs;
  4092 + }
  4093 + }
  4094 +
  4095 +
  4096 + //为换人换车情况表写入数据
  4097 + schModifyLog.saveChangetochange(sch, cpc, userId);
  4098 + //日志记录
  4099 + ScheduleModifyLogger.tzrc(sch, cpc, userId);
  4100 +
  4101 + //换驾驶员
  4102 + if (StringUtils.isNotEmpty(cpc.getJsy())) {
  4103 + //换驾驶员
  4104 + if (persoChange(sch, jGh))
  4105 + set.add(sch);
  4106 + }
  4107 +
  4108 + //换售票员
  4109 + if (StringUtils.isNotEmpty(cpc.getSpy())
  4110 + && !"/".equals(StringUtils.trim(cpc.getSpy()))) {
  4111 +
  4112 + sGh = cpc.getSpy().split("/")[0];
  4113 + sName = getPersonName(sch.getGsBm(), sGh);
  4114 + if (StringUtils.isEmpty(sName)) {
  4115 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sGh + "】的售票员");
  4116 + rs.put("status", ResponseCode.ERROR);
  4117 + return rs;
  4118 + }
  4119 +
  4120 + /*if(!sGh.equals(sch.getsGh()))
  4121 + sb.append(sch.getsGh() + " 换 " + sGh + ";");*/
  4122 + if (persoChangeSPY(sch, sGh))
  4123 + set.add(sch);
  4124 + } else if (StringUtils.isNotEmpty(sch.getsGh())) {
  4125 + sch.setsGh("");
  4126 + sch.setsName("");
  4127 + }
  4128 +
  4129 + //换车
  4130 + if (StringUtils.isNotEmpty(cpc.getClZbh()) && !cpc.getClZbh().equals(sch.getClZbh())) {
  4131 + //sb.append(sch.getClZbh() + " 换 " + cpc.getClZbh() + ";");
  4132 + set.add(sch);
  4133 + set.addAll(dayOfSchedule.changeCar(sch, cpc.getClZbh()));
  4134 + }
  4135 +
  4136 + /*if(sb.length() > 0)
  4137 + sch.setRemarks(sb.toString());*/
  4138 +
  4139 + dayOfSchedule.save(sch);
  4140 + set.add(sch);
  4141 +
  4142 + }
  4143 + rs.put("ts", set);
  4144 + rs.put("status", ResponseCode.SUCCESS);
  4145 + return rs;
  4146 + }
  4147 +
  4148 + /**
  4149 + * @Title: persoChange
  4150 + * @Description: TODO(班次换驾驶员)
  4151 + */
  4152 + public boolean persoChange(ScheduleRealInfo sch, String jGh) {
  4153 + if (sch.getjGh().equals(jGh))
  4154 + return false;
  4155 + String jName = getPersonName(sch.getGsBm(), jGh);
  4156 + if (StringUtils.isNotEmpty(jName)) {
  4157 +
  4158 + if (jGh.indexOf("-") != -1)
  4159 + sch.setjGh(jGh.substring(jGh.indexOf("-") + 1));
  4160 + else
  4161 + sch.setjGh(jGh);
  4162 +
  4163 + sch.setjName(jName);
  4164 + return true;
  4165 + }
  4166 + return false;
  4167 + }
  4168 +
  4169 + /**
  4170 + * @Title: persoChange
  4171 + * @Description: TODO(班次换售票员)
  4172 + */
  4173 + public boolean persoChangeSPY(ScheduleRealInfo sch, String sGh) {
  4174 + if (sch.getsGh().equals(sGh))
  4175 + return false;
  4176 + String sName = getPersonName(sch.getGsBm(), sGh);
  4177 + if (StringUtils.isNotEmpty(sName)) {
  4178 + if (sGh.indexOf("-") != -1)
  4179 + sch.setsGh(sGh.substring(sGh.indexOf("-") + 1));
  4180 + else
  4181 + sch.setsGh(sGh);
  4182 + sch.setsName(sName);
  4183 + return true;
  4184 + }
  4185 + return false;
  4186 + }
  4187 +
  4188 + /**
  4189 + * 批量待发调整
  4190 + */
  4191 + @Override
  4192 + public Map<String, Object> multi_dftz(List<DfsjChange> dfsjcs) {
  4193 + Map<String, Object> rs = new HashMap<>(), tempMap = new HashMap<>();
  4194 + List<ScheduleRealInfo> list = new ArrayList<>();
  4195 +
  4196 + for (DfsjChange dc : dfsjcs) {
  4197 + if (StringUtils.isEmpty(dc.getOld_dfsj()) || StringUtils.isEmpty(dc.getNew_dfsj()))
  4198 + continue;
  4199 +
  4200 + tempMap = outgoAdjust(dc.getSchId(), "", dc.getNew_dfsj(), null, "2", null);
  4201 +
  4202 + if (tempMap.get("status").equals(ResponseCode.SUCCESS)) {
  4203 + list.addAll((Collection<? extends ScheduleRealInfo>) tempMap.get("ts"));
  4204 + }
  4205 + }
  4206 +
  4207 + rs.put("status", ResponseCode.SUCCESS);
  4208 + rs.put("ts", list);
  4209 + return rs;
  4210 + }
  4211 +
  4212 +
  4213 + @Override
  4214 + public Map<String, Object> findKMBC1(String jName, String clZbh,
  4215 + String date, String enddate) {
  4216 + List<ScheduleRealInfo> list = scheduleRealInfoRepository.queryListWaybill4(jName, clZbh, date, enddate);
  4217 + DecimalFormat format = new DecimalFormat("0.00");
  4218 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4219 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4220 + int jhbc = 0, cjbc = 0, ljbc = 0;
  4221 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0;
  4222 + float addMileage = 0l, remMileage = 0l;
  4223 + Map<String, Object> map = new HashMap<String, Object>();
  4224 + for (ScheduleRealInfo scheduleRealInfo : list) {
  4225 + if (scheduleRealInfo != null) {
  4226 + //计划里程(主任务过滤掉临加班次),
  4227 + //烂班里程(主任务烂班),
  4228 + //临加里程(主任务临加),
  4229 + //计划班次,烂班班次,增加班次
  4230 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  4231 + if (scheduleRealInfo.isSflj()) {
  4232 + addMileage += tempJhlc;
  4233 + ljbc++;
  4234 + } else {
  4235 + jhlc += tempJhlc;
  4236 + jhbc++;
  4237 + if (scheduleRealInfo.getStatus() == -1) {
  4238 + remMileage += tempJhlc;
  4239 + cjbc++;
  4240 + }
  4241 + }
  4242 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  4243 + //计算营运里程,空驶里程
  4244 + if (childTaskPlans.isEmpty()) {
  4245 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  4246 + || scheduleRealInfo.getBcType().equals("venting")) {
  4247 + ksgl += tempJhlc;
  4248 + } else {
  4249 + yygl += tempJhlc;
  4250 + }
  4251 + } else {
  4252 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4253 + while (it.hasNext()) {
  4254 + ChildTaskPlan childTaskPlan = it.next();
  4255 + if (childTaskPlan.getMileageType().equals("empty")) {
  4256 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4257 + } else {
  4258 + yygl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4259 + }
  4260 + }
  4261 + }
  4262 + }
  4263 + }
  4264 + map.put("jhlc", format.format(jhlc));
  4265 + map.put("remMileage", format.format(remMileage));
  4266 + map.put("addMileage", format.format(addMileage));
  4267 + map.put("yygl", format.format(yygl));
  4268 + map.put("ksgl", format.format(ksgl));
  4269 + map.put("realMileage", format.format(yygl + ksgl));
  4270 + map.put("jhbc", jhbc);
  4271 + map.put("cjbc", cjbc);
  4272 + map.put("ljbc", ljbc);
  4273 + map.put("sjbc", jhbc - cjbc + ljbc);
  4274 + return map;
  4275 + }
  4276 +
  4277 + /**
  4278 + * 调整班次类型
  4279 + *
  4280 + * @param id
  4281 + * @param bcType
  4282 + * @param remarks
  4283 + * @return
  4284 + */
  4285 + @Override
  4286 + public Map<String, Object> changeBcType(Long id, String bcType, String remarks, String majorStationName) {
  4287 + Map<String, Object> rs = new HashMap<>();
  4288 +
  4289 + try {
  4290 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  4291 + if (sch != null) {
  4292 + sch.setBcType(bcType);
  4293 + sch.setRemarks(remarks);
  4294 + rs.put("status", ResponseCode.SUCCESS);
  4295 + rs.put("t", sch);
  4296 +
  4297 + if ("major".equals(bcType)) {
  4298 + sch.setMajorStationName(majorStationName);
  4299 + }
  4300 +
  4301 + dayOfSchedule.save(sch);
  4302 + }
  4303 + } catch (Exception e) {
  4304 + logger.error("", e);
  4305 + rs.put("status", ResponseCode.ERROR);
  4306 + }
  4307 +
  4308 + return rs;
  4309 + }
  4310 +
  4311 + @Override
  4312 + public Map<String, Object> historySave(ScheduleRealInfo sch) {
  4313 + Map<String, Object> rs = new HashMap<>();
  4314 + rs.put("status", ResponseCode.ERROR);
  4315 +
  4316 + ScheduleRealInfo oldSch = super.findById(sch.getId());
  4317 + //事后日志记录
  4318 + AfterwardsLogger aflog = AfterwardsLogger.start(oldSch, "事后调整");
  4319 +
  4320 + //换车
  4321 + if (StringUtils.isNotEmpty(sch.getClZbh()) && !oldSch.getClZbh().equals(sch.getClZbh())) {
  4322 + if (!carExist(oldSch.getGsBm(), sch.getClZbh())) {
  4323 + rs.put("msg", "车辆 " + sch.getClZbh() + " 不存在!");
  4324 + return rs;
  4325 + } else {
  4326 + aflog.log("换车", oldSch.getClZbh(), sch.getClZbh());
  4327 + oldSch.setClZbh(sch.getClZbh());
  4328 + }
  4329 + }
  4330 +
  4331 + //换驾驶员
  4332 + if (StringUtils.isNotEmpty(sch.getjGh()) && !oldSch.getjGh().equals(sch.getjGh())) {
  4333 + String jName = getPersonName(oldSch.getGsBm(), sch.getjGh());
  4334 + if (StringUtils.isEmpty(jName)) {
  4335 + rs.put("msg", oldSch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getjGh() + "】的驾驶员");
  4336 + return rs;
  4337 + }
  4338 + aflog.log("换驾驶员", oldSch.getjGh() + "/" + oldSch.getjName(), sch.getjGh() + "/" + sch.getjName());
  4339 + persoChange(oldSch, sch.getjGh());
  4340 + }
  4341 +
  4342 + //换售票员
  4343 + if (StringUtils.isNotEmpty(sch.getsGh()) && !oldSch.getsGh().equals(sch.getsGh())) {
  4344 + String sName = getPersonName(oldSch.getGsBm(), sch.getsGh());
  4345 + if (StringUtils.isEmpty(sName)) {
  4346 + rs.put("msg", sch.getXlName() + "所属的公司编码下找不到工号为【" + sch.getsGh() + "】的售票员");
  4347 + return rs;
  4348 + }
  4349 + aflog.log("换售票员", oldSch.getsGh() + "/" + oldSch.getsName(), sch.getsGh() + "/" + sch.getsName());
  4350 + persoChangeSPY(oldSch, sch.getsGh());
  4351 + }
  4352 +
  4353 + //烂班
  4354 + boolean dest1 = oldSch.getStatus() == -1;
  4355 + boolean dest2 = sch.getStatus() == -1;
  4356 + if (!dest1 && dest2) {
  4357 + oldSch.destroy();
  4358 + aflog.log("烂班");
  4359 + } else if (dest1 && !dest2) {
  4360 + //撤销烂班
  4361 + oldSch.setJhlc(oldSch.getJhlcOrig());
  4362 + oldSch.setStatus(0);
  4363 + oldSch.calcStatus();
  4364 + oldSch.setAdjustExps(null);
  4365 + aflog.log("撤销烂班");
  4366 + }
  4367 +
  4368 + oldSch.setAdjustExps(sch.getAdjustExps());
  4369 +
  4370 + /**
  4371 + * 修改班次里程
  4372 + */
  4373 + if (!oldSch.getJhlc().equals(sch.getJhlc())) {
  4374 + double jhlcNum = sch.getJhlc();
  4375 + aflog.log("修改班次里程", oldSch.getJhlc(), jhlcNum);
  4376 + //烂班
  4377 + if (jhlcNum == 0 && oldSch.getJhlcOrig() != 0)
  4378 + oldSch.destroy();
  4379 + else {
  4380 + oldSch.setJhlc(jhlcNum);
  4381 + //临加班次,实际计划一起改
  4382 + if (oldSch.isSflj())
  4383 + oldSch.setJhlcOrig(jhlcNum);
  4384 + }
  4385 + }
  4386 +
  4387 + //待发时间
  4388 + if (!CustomStringUtils.equals(oldSch.getDfsj(), sch.getDfsj())) {
  4389 + aflog.log("修改待发时间", oldSch.getDfsj(), sch.getDfsj());
  4390 + oldSch.setDfsj(sch.getDfsj());
  4391 + }
  4392 + //实发时间
  4393 + if (!CustomStringUtils.equals(oldSch.getFcsjActual(), sch.getFcsjActual())) {
  4394 + aflog.log("修改实发时间", oldSch.getFcsjActual(), sch.getFcsjActual());
  4395 + oldSch.setFcsjActual(sch.getFcsjActual());
  4396 + }
  4397 + //实际终点
  4398 + if (!CustomStringUtils.equals(oldSch.getZdsjActual(), sch.getZdsjActual())) {
  4399 + aflog.log("修改实达时间", oldSch.getZdsjActual(), sch.getZdsjActual());
  4400 + oldSch.setZdsjActual(sch.getZdsjActual());
  4401 + }
  4402 +
  4403 + //备注
  4404 + if (!CustomStringUtils.equals(oldSch.getRemarks(), sch.getRemarks())) {
  4405 + aflog.log("修改备注", oldSch.getRemarks(), sch.getRemarks());
  4406 + oldSch.setRemarks(sch.getRemarks());
  4407 + }
  4408 +
  4409 + scheduleRealInfoRepository.save(oldSch);
  4410 +
  4411 + aflog.end();
  4412 + rs.put("status", ResponseCode.SUCCESS);
  4413 + return rs;
  4414 + }
  4415 +
  4416 + @Autowired
  4417 + SvgAttributeRepository svgAttributeRepository;
  4418 +
  4419 + @Override
  4420 + public Map<String, Object> svgAttr(String jsonStr) {
  4421 + Map<String, Object> rs = new HashMap<>();
  4422 +
  4423 + try {
  4424 + JSONObject jObj = JSONObject.parseObject(StringEscapeUtils.unescapeHtml4(jsonStr));
  4425 +
  4426 + SvgAttribute svgAttribute = new SvgAttribute();
  4427 + svgAttribute.setLineCode(jObj.getString("lineCode"));
  4428 + svgAttribute.setHideStations(jObj.getString("hideStations"));
  4429 + svgAttribute.setNicknames(jObj.getString("nicknames"));
  4430 + svgAttributeRepository.save(svgAttribute);
  4431 +
  4432 + rs.put("t", svgAttribute);
  4433 + rs.put("status", ResponseCode.SUCCESS);
  4434 + } catch (Exception e) {
  4435 + logger.error("", e);
  4436 + rs.put("status", ResponseCode.ERROR);
  4437 + }
  4438 + return rs;
  4439 + }
  4440 +
  4441 + @Override
  4442 + public Map<String, Object> findSvgAttr(String idx) {
  4443 + Map<String, Object> rs = new HashMap<>();
  4444 + try {
  4445 + List<String> lineCodes = Splitter.on(",").splitToList(idx);
  4446 + List<SvgAttribute> list = svgAttributeRepository.findSvgAttr(lineCodes);
  4447 +
  4448 + rs.put("status", ResponseCode.SUCCESS);
  4449 + rs.put("list", list);
  4450 + } catch (Exception e) {
  4451 + logger.error("", e);
  4452 + rs.put("status", ResponseCode.ERROR);
  4453 + }
  4454 + return rs;
  4455 + }
  4456 +
  4457 + @Override
  4458 + public Map<String, Object> addRemarks(Long id, String remarks) {
  4459 + Map<String, Object> rs = new HashMap<>();
  4460 + try {
  4461 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  4462 + sch.addRemarks(remarks);
  4463 +
  4464 + rs.put("status", ResponseCode.SUCCESS);
  4465 + rs.put("t", sch);
  4466 + } catch (Exception e) {
  4467 + logger.error("", e);
  4468 + rs.put("status", ResponseCode.ERROR);
  4469 + }
  4470 + return rs;
  4471 + }
  4472 +
  4473 + @Override
  4474 + public List<Map<String, Object>> yesterdayDataList(String line) {
  4475 + // TODO Auto-generated method stub
  4476 + return null;
  4477 + }
  4478 +
  4479 + @Override
  4480 + public List<ScheduleRealInfo> exportWaybillQp(String clZbh, String date, String line) {
  4481 + // TODO Auto-generated method stub
  4482 + ReportUtils ee = new ReportUtils();
  4483 + ReportRelatedUtils rru = new ReportRelatedUtils();
  4484 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  4485 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4486 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  4487 +
  4488 + DecimalFormat format = new DecimalFormat("0.00");
  4489 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4490 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4491 + int jhbc = 0, cjbc = 0, ljbc = 0;
  4492 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0;
  4493 + float addMileage = 0l, remMileage = 0l, addgl = 0, remgl = 0;
  4494 + int xyz = 1;
  4495 + Map<String, Object> map;
  4496 + for (ScheduleRealInfo scheduleRealInfo : scheduleRealInfos) {
  4497 + if (scheduleRealInfo != null) {
  4498 + //计算计划里程(主任务过滤掉临加班次),烂班里程,临加里程,计划班次,烂班班次,增加班次
  4499 + //计划里程(主任务过滤掉临加班次),
  4500 + //烂班里程(主任务烂班),
  4501 + //临加里程(主任务临加),
  4502 + //计划班次,烂班班次,增加班次
  4503 + double jh = 0, sj = 0;
  4504 + tempJhlc = scheduleRealInfo.getJhlc() == null ? 0 : scheduleRealInfo.getJhlc();
  4505 + if (scheduleRealInfo.isSflj()) {
  4506 + ljbc++;
  4507 + } else {
  4508 + if (!(scheduleRealInfo.getBcType().equals("in")
  4509 + || scheduleRealInfo.getBcType().equals("out"))) {
  4510 + jhbc++;
  4511 + jh += tempJhlc;
  4512 + }
  4513 + if (scheduleRealInfo.getStatus() == -1) {
  4514 + remMileage += tempJhlc;
  4515 + cjbc++;
  4516 + }
  4517 + }
  4518 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  4519 + //计算营运里程,空驶里程
  4520 + if (childTaskPlans.isEmpty()) {
  4521 + if (scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  4522 + ) {
  4523 + jcclc += tempJhlc;
  4524 + } else {
  4525 + if (scheduleRealInfo.getStatus() != -1) {
  4526 + if (scheduleRealInfo.isSflj()) {
  4527 + addMileage += tempJhlc;
  4528 + }
  4529 + sj += tempJhlc;
  4530 + }
  4531 + }
  4532 + } else {
  4533 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4534 + while (it.hasNext()) {
  4535 + ChildTaskPlan childTaskPlan = it.next();
  4536 + if (childTaskPlan.getMileageType().equals("empty")) {
  4537 + if (childTaskPlan.isDestroy()) {
  4538 + remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4539 + } else {
  4540 + if (scheduleRealInfo.isSflj()) {
  4541 + addMileage += tempJhlc;
  4542 + }
  4543 + ksgl += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4544 + }
  4545 + } else {
  4546 + if (childTaskPlan.isDestroy()) {
  4547 + remMileage += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4548 +// cjbc++;
  4549 + } else {
  4550 + if (scheduleRealInfo.isSflj()) {
  4551 + addMileage += tempJhlc;
  4552 + }
  4553 + sj += childTaskPlan.getMileage() == null ? 0 : childTaskPlan.getMileage();
  4554 + }
  4555 + }
  4556 + }
  4557 + }
  4558 +
  4559 + if (!(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out"))) {
  4560 + map = new HashMap<String, Object>();
  4561 + try {
  4562 + scheduleRealInfo.setBcs(xyz);
  4563 + xyz++;
  4564 + Set<ChildTaskPlan> cs = scheduleRealInfo.getcTasks();
  4565 + Double sjlc = 0.0;
  4566 + if (!cs.isEmpty()) {
  4567 + Iterator<ChildTaskPlan> it = cs.iterator();
  4568 + while (it.hasNext()) {
  4569 + ChildTaskPlan c = it.next();
  4570 + if (!c.isDestroy()) {
  4571 + sjlc += c.getMileage() == null ? 0 : c.getMileage();
  4572 + }
  4573 +
  4574 + }
  4575 + } else {
  4576 + if (scheduleRealInfo.getStatus() != -1) {
  4577 + sjlc = scheduleRealInfo.getJhlc();
  4578 + }
  4579 + }
  4580 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  4581 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  4582 + scheduleRealInfo.setSjlc(format.format(sjlc));
  4583 + map = rru.getMapValue(scheduleRealInfo);
  4584 + String zdsj = scheduleRealInfo.getZdsj();
  4585 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  4586 + if (zdsj != null && zdsjActual != null &&
  4587 + !zdsj.equals(zdsjActual)) {
  4588 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  4589 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  4590 + if (zdsj.compareTo(zdsjActual) > 0) {
  4591 + if (zdsjT - zdsjAT > 1000) {
  4592 + map.put("fast", "");
  4593 + map.put("slow", zdsjAT - zdsjT + 1440);
  4594 + } else {
  4595 + map.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  4596 + map.put("slow", "");
  4597 + }
  4598 + } else {
  4599 + if (zdsjAT - zdsjT > 1000) {
  4600 + map.put("fast", zdsjT - zdsjAT + 1440);
  4601 + map.put("slow", "");
  4602 + } else {
  4603 + map.put("fast", "");
  4604 + map.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  4605 + }
  4606 + }
  4607 + } else {
  4608 + map.put("fast", "");
  4609 + map.put("slow", "");
  4610 + }
  4611 + listMap.add(map);
  4612 + } catch (Exception e) {
  4613 + e.printStackTrace();
  4614 + }
  4615 + }
  4616 + jhlc += jh;
  4617 + yygl += sj;
  4618 + if (jh > sj) {
  4619 + remgl += jh - sj;
  4620 + } else {
  4621 + addgl += sj - jh;
  4622 + }
  4623 + }
  4624 + }
  4625 +
  4626 +
  4627 + List<Ylxxb> listYlxxb = ylxxbRepository.queryListYlxxb(clZbh, date);
  4628 + Double jzl = 0.0;
  4629 + for (int t = 0; t < listYlxxb.size(); t++) {
  4630 + Ylxxb y = listYlxxb.get(t);
  4631 + jzl += y.getJzl();
  4632 + }
  4633 +
  4634 + //计算里程和班次数,并放入Map里
  4635 + map = findKMBCQp(clZbh, date, line);
  4636 + map.put("jzl", jzl);
  4637 +// map.put("jhlc", format.format(jhlc + jcclc));
  4638 +// map.put("yygljh", format.format(jhlc));
  4639 +// map.put("ssgl", format.format(remMileage));
  4640 +// map.put("ksgl", format.format(ksgl));
  4641 +// map.put("yyglsj", format.format(yygl));
  4642 +// map.put("jhbc", jhbc);
  4643 +// map.put("jcclc", jcclc);
  4644 +//
  4645 +// map.put("ljgl", format.format(addMileage));
  4646 +// map.put("ssbc", cjbc);
  4647 +// map.put("ysgl", format.format(yygl));
  4648 +// map.put("sjbc", jhbc - cjbc + ljbc);
  4649 +// map.put("zgl", format.format(yygl + ksgl + jcclc));
  4650 +// map.put("ljbc", ljbc);
  4651 +
  4652 + String zdp = "", zwdp = "", wdp = "";
  4653 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4654 + List<DutyEmployee> listDtuy = dutyEmployeeService.getDutyEmployee(line, date + "00:00", date + "23:59");
  4655 + try {
  4656 + Long fcsj1 = sdf.parse(date + " 03:00").getTime();
  4657 + Long fcsj2 = sdf.parse(date + " 11:00").getTime();
  4658 + Long fcsj3 = sdf.parse(date + " 22:00").getTime();
  4659 + for (int i = 0; i < listDtuy.size(); i++) {
  4660 + DutyEmployee t = listDtuy.get(i);
  4661 + Long ts = t.getTs();
  4662 + if (ts > fcsj1 && ts < fcsj2) {
  4663 + if (zdp.indexOf(t.getuName()) == -1) {
  4664 + zdp += t.getuName() + ",";
  4665 +
  4666 + }
  4667 + } else if (ts > fcsj2 && ts < fcsj3) {
  4668 + if (zwdp.indexOf(t.getuName()) == -1) {
  4669 + zwdp += t.getuName() + ",";
  4670 + }
  4671 + } else {
  4672 + if (wdp.indexOf(t.getuName()) == -1) {
  4673 + wdp += t.getuName() + ",";
  4674 + }
  4675 + }
  4676 + }
  4677 + } catch (ParseException e) {
  4678 + // TODO Auto-generated catch block
  4679 + e.printStackTrace();
  4680 + }
  4681 + map.put("zdp", zdp);
  4682 + map.put("zwdp", zwdp);
  4683 + map.put("wdp", wdp);
  4684 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  4685 + list.add(listMap.iterator());
  4686 + ee.excelReplace(list, new Object[]{scheduleRealInfos.get(0), map}, path + "mould/waybill_qingpu.xls",
  4687 + path + "export/" + date + "-" + clZbh + "-行车路单.xls");
  4688 +
  4689 + return scheduleRealInfos;
  4690 + }
  4691 +
  4692 + @Override
  4693 + public Map<String, Object> findKMBCQp(String clZbh, String date, String line) {
  4694 + // TODO Auto-generated method stub
  4695 + List<ScheduleRealInfo> lists = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4696 + DecimalFormat format = new DecimalFormat("0.00");
  4697 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  4698 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  4699 + int jhbc = 0, cjbc = 0, ljbc = 0, sjbc = 0;
  4700 + double jhlc = 0, yygl = 0, ksgl = 0, tempJhlc = 0, jcclc = 0, ljjcclc = 0, jhjcclc = 0;
  4701 + double addMileage = 0, remMileage = 0, addgl = 0, remgl = 0;
  4702 + Map<String, Object> map = new HashMap<String, Object>();
  4703 + jhlc = culateMieageService.culateJhgl(lists);
  4704 + jcclc = culateMieageService.culateJccgl(lists);
  4705 + jhjcclc = culateMieageService.culateJhJccgl(lists);
  4706 + remMileage = culateMieageService.culateLbgl(lists);
  4707 + ksgl = culateMieageService.culateKsgl(lists);
  4708 + yygl = culateMieageService.culateSjgl(lists);
  4709 + jhbc = culateMieageService.culateJhbc(lists, "");
  4710 + addMileage = culateMieageService.culateLjgl(lists);
  4711 + cjbc = culateMieageService.culateLbbc(lists);
  4712 + sjbc = culateMieageService.culateSjbc(lists, "");
  4713 + ljbc = culateMieageService.culateLjbc(lists, "");
  4714 + double zyygl = Arith.add(yygl, addMileage);
  4715 + double zksgl = Arith.add(ksgl, jcclc);
  4716 + map.put("jhlc", Arith.add(jhlc, jhjcclc));
  4717 + map.put("yygljh", jhlc);
  4718 + map.put("ssgl", remMileage);
  4719 + map.put("ksgl", ksgl);
  4720 + map.put("yyglsj", Arith.add(yygl, addMileage));
  4721 + map.put("jcclc", jcclc);
  4722 + map.put("jhbc", jhbc);
  4723 + map.put("ljgl", addMileage);
  4724 + map.put("ssbc", cjbc);
  4725 + map.put("ysgl", Arith.add(yygl, addMileage));
  4726 + map.put("sjbc", sjbc);
  4727 + map.put("zgl", Arith.add(zyygl, zksgl));
  4728 + map.put("ljbc", ljbc);
  4729 +
  4730 + return map;
  4731 + }
  4732 +
  4733 + @Override
  4734 + public List<ScheduleRealInfo> queryListWaybillQp(String clZbh, String date, String line) {
  4735 + // TODO Auto-generated method stub
  4736 + DecimalFormat format = new DecimalFormat("0.00");
  4737 + List<ScheduleRealInfo> list = null;
  4738 + list = scheduleRealInfoRepository.queryListWaybill2(clZbh, date, line);
  4739 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  4740 + for (int i = 0; i < list.size(); i++) {
  4741 + ScheduleRealInfo s = list.get(i);
  4742 + if (!(s.getBcType().equals("in") || s.getBcType().equals("out"))) {
  4743 + String remarks = "";
  4744 + Double sjlc = 0.0;
  4745 + if (s.getRemarks() != null) {
  4746 + remarks += s.getRemarks();
  4747 + }
  4748 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  4749 + if (!childTaskPlans.isEmpty()) {
  4750 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  4751 + while (it.hasNext()) {
  4752 + ChildTaskPlan c = it.next();
  4753 + if (c.getRemarks() != null && c.getRemarks().length() > 0) {
  4754 + if (remarks.indexOf(c.getRemarks()) == -1) {
  4755 + remarks += c.getRemarks();
  4756 + }
  4757 + }
  4758 +
  4759 + if (!c.isDestroy()) {
  4760 + if (c.getMileageType().equals("service")) {
  4761 + sjlc += c.getMileage() == null ? 0 : c.getMileage();
  4762 + }
  4763 + }
  4764 +
  4765 + }
  4766 + } else {
  4767 + if (s.getStatus() != -1) {
  4768 + sjlc = s.getJhlc();
  4769 + }
  4770 + }
  4771 + s.setSjlc(format.format(sjlc));
  4772 + s.setRemarks(remarks);
  4773 + newList.add(s);
  4774 + }
  4775 +
  4776 + }
  4777 +
  4778 + return newList;
  4779 + }
  4780 +
  4781 + @Override
  4782 + public Map<String, Object> MapById(Long id) {
  4783 + // TODO Auto-generated method stub
  4784 + Map<String, Object> dMap=new HashMap<>();
  4785 + dMap.put("dGroup_eq", "oilType");
  4786 + Iterator<Dictionary> it= dictionaryService.list(dMap).iterator();
  4787 + while (it.hasNext()) {
  4788 + Dictionary d=it.next();
  4789 + dMap.put(d.getdCode(), d.getdName());
  4790 + }
  4791 + Map<String, Object> map = new HashMap<String, Object>();
  4792 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4793 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  4794 + String xlbm = s.getXlBm();
  4795 + String fcrq = s.getScheduleDateStr();
  4796 +
  4797 + int type = 2;
  4798 + Double ccyl = 0.0;
  4799 + Double jcyl = 0.0;
  4800 + Double yh = 0.0;
  4801 + Double jzl = 0.0;
  4802 + Double zlc = 0.0;
  4803 + String rylx="";
  4804 + List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
  4805 + if (listCars.size() > 0) {
  4806 + if (listCars.get(0).getSfdc() != null) {
  4807 + if (listCars.get(0).getSfdc()) {
  4808 + List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  4809 + type = 1;
  4810 + for (int i = 0; i < listDlb.size(); i++) {
  4811 + Dlb d = listDlb.get(i);
  4812 + if (d.getLp() == null) {
  4813 + ccyl = Arith.add(ccyl, d.getCzcd());
  4814 + jcyl = Arith.add(jcyl, d.getJzcd());
  4815 + yh = Arith.add(yh, d.getHd());
  4816 + jzl = Arith.add(jzl, d.getCdl());
  4817 + zlc = Arith.add(zlc, d.getZlc());
  4818 + } else {
  4819 + if (d.getLp().equals(s.getLpName())) {
  4820 + ccyl = Arith.add(ccyl, d.getCzcd());
  4821 + jcyl = Arith.add(jcyl, d.getJzcd());
  4822 + yh = Arith.add(yh, d.getHd());
  4823 + jzl = Arith.add(jzl, d.getCdl());
  4824 + zlc = Arith.add(zlc, d.getZlc());
  4825 + }
  4826 + }
  4827 +
  4828 + }
  4829 + } else {
  4830 + List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  4831 + type = 0;
  4832 + for (int i = 0; i < listYlb.size(); i++) {
  4833 + Ylb y = listYlb.get(i);
  4834 + if (y.getLp() == null) {
  4835 + ccyl = Arith.add(ccyl, y.getCzyl());
  4836 + jcyl = Arith.add(jcyl, y.getJzyl());
  4837 + yh = Arith.add(yh, y.getYh());
  4838 + jzl = Arith.add(jzl, y.getJzl());
  4839 + zlc = Arith.add(zlc, y.getZlc());
  4840 + if(dMap.get(y.getRylx())!=null)
  4841 + rylx =dMap.get(y.getRylx()).toString();
  4842 + } else {
  4843 + if (y.getLp().equals(s.getLpName())) {
  4844 + ccyl = Arith.add(ccyl, y.getCzyl());
  4845 + jcyl = Arith.add(jcyl, y.getJzyl());
  4846 + yh = Arith.add(yh, y.getYh());
  4847 + jzl = Arith.add(jzl, y.getJzl());
  4848 + zlc = Arith.add(zlc, y.getZlc());
  4849 + if(dMap.get(y.getRylx())!=null)
  4850 + rylx =dMap.get(y.getRylx()).toString();
  4851 + }
  4852 + }
  4853 + }
  4854 + }
  4855 + }
  4856 + }
  4857 +
  4858 + map.put("rylx", "加注类别:"+rylx);
  4859 + map.put("jzl", jzl);
  4860 + map.put("yh", yh);
  4861 + map.put("ccyl", ccyl);
  4862 + map.put("jcyl", jcyl);
  4863 + map.put("type", type);
  4864 + map.put("zlc", zlc);
  4865 + map.put("xlName", s.getXlName());
  4866 + map.put("clZbh", s.getClZbh());
  4867 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  4868 + map.put("fcsjActual", s.getFcsjActual());
  4869 + map.put("zdzName", s.getZdzName());
  4870 + map.put("scheduleDate", s.getScheduleDateStr());
  4871 + map.put("lpName", s.getLpName());
  4872 + String zdp = "", zwdp = "", wdp = "";
  4873 + String zdpT = "", zwdpT = "", wdpT = "";
  4874 + String dbdp = "";
  4875 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  4876 + try {
  4877 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  4878 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  4879 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  4880 + for (int i = 0; i < list.size(); i++) {
  4881 + DutyEmployee t = list.get(i);
  4882 + if (dbdp.indexOf(t.getuName()) == -1) {
  4883 + if (!(dbdp.length() > 0)) {
  4884 + dbdp = t.getuName();
  4885 + } else {
  4886 + dbdp += "," + t.getuName();
  4887 + }
  4888 + }
  4889 + Long ts = t.getTs();
  4890 + if (ts > fcsj1 && ts < fcsj2) {
  4891 + if (zdp.indexOf(t.getuName()) == -1) {
  4892 + if (!(zdp.length() > 0)) {
  4893 + zdpT = t.getuName() + "...";
  4894 + }
  4895 + zdp += t.getuName() + ",";
  4896 +
  4897 + }
  4898 + } else if (ts > fcsj2 && ts < fcsj3) {
  4899 + if (zwdp.indexOf(t.getuName()) == -1) {
  4900 + if (!(zwdp.length() > 0)) {
  4901 + zwdpT = t.getuName() + "...";
  4902 + }
  4903 + zwdp += t.getuName() + ",";
  4904 + }
  4905 + } else {
  4906 + if (wdp.indexOf(t.getuName()) == -1) {
  4907 + if (!(wdp.length() > 0)) {
  4908 + wdpT = t.getuName() + "...";
  4909 + }
  4910 + wdp += t.getuName() + ",";
  4911 + }
  4912 + }
  4913 + }
  4914 + } catch (ParseException e) {
  4915 + // TODO Auto-generated catch block
  4916 + e.printStackTrace();
  4917 + }
  4918 + map.put("zdp", zdp);
  4919 + map.put("zwdp", zwdp);
  4920 + map.put("wdp", wdp);
  4921 + map.put("zdpT", zdpT);
  4922 + map.put("zwdpT", zwdpT);
  4923 + map.put("wdpT", wdpT);
  4924 + map.put("dbdp", dbdp);
  4925 + return map;
  4926 + }
  4927 +
  4928 + @Override
  4929 + public Map<String, Object> MapByIdQp(Long id) {
  4930 + // TODO Auto-generated method stub
  4931 + Map<String, Object> map = new HashMap<String, Object>();
  4932 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  4933 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  4934 + String xlbm = s.getXlBm();
  4935 + String fcrq = s.getScheduleDateStr();
  4936 +
  4937 + int type = 0;
  4938 + Double ccyl = 0.0;
  4939 + Double jcyl = 0.0;
  4940 + Double yh = 0.0;
  4941 + Double jzl = 0.0;
  4942 + Double zlc = 0.0;
  4943 +// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4944 +// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  4945 +// if(listYlb.size()>0){
  4946 +// type=0;
  4947 +// for (int i = 0; i < listYlb.size(); i++) {
  4948 +// Ylb y = listYlb.get(i);
  4949 +// if(y.getLp()==null){
  4950 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4951 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4952 +// yh =Arith.add(yh ,y.getYh());
  4953 +// jzl =Arith.add(jzl, y.getJzl());
  4954 +// zlc =Arith.add(zlc, y.getZlc());
  4955 +// }else{
  4956 +// if(y.getLp().equals(s.getLpName())){
  4957 +// ccyl=Arith.add(ccyl, y.getCzyl());
  4958 +// jcyl=Arith.add(jcyl, y.getJzyl());
  4959 +// yh =Arith.add(yh ,y.getYh());
  4960 +// jzl =Arith.add(jzl, y.getJzl());
  4961 +// zlc =Arith.add(zlc, y.getZlc());
  4962 +// }
  4963 +// }
  4964 +//
  4965 +// }
  4966 +// }else{
  4967 +// type=1;
  4968 +// for (int i = 0; i < listDlb.size(); i++) {
  4969 +// Dlb d=listDlb.get(i);
  4970 +// if(d.getLp()==null){
  4971 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4972 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4973 +// yh =Arith.add(yh ,d.getHd());
  4974 +// jzl =Arith.add(jzl, d.getCdl());
  4975 +// zlc =Arith.add(zlc, d.getZlc());
  4976 +// }else{
  4977 +// if(d.getLp().equals(s.getLpName())){
  4978 +// ccyl=Arith.add(ccyl, d.getCzcd());
  4979 +// jcyl=Arith.add(jcyl, d.getJzcd());
  4980 +// yh =Arith.add(yh ,d.getHd());
  4981 +// jzl =Arith.add(jzl, d.getCdl());
  4982 +// zlc =Arith.add(zlc, d.getZlc());
  4983 +// }
  4984 +// }
  4985 +//
  4986 +// }
  4987 +// }
  4988 +
  4989 + List<Ylxxb> listylxxb = ylxxbRepository.queryListYlxxb(s.getClZbh(), fcrq);
  4990 + for (int i = 0; i < listylxxb.size(); i++) {
  4991 + Ylxxb t = listylxxb.get(i);
  4992 + jzl = Arith.add(jzl, t.getJzl());
  4993 + }
  4994 + map.put("jzl", jzl);
  4995 + map.put("yh", yh);
  4996 + map.put("ccyl", ccyl);
  4997 + map.put("jcyl", jcyl);
  4998 + map.put("type", type);
  4999 + map.put("zlc", zlc);
  5000 + map.put("xlName", s.getXlName());
  5001 + map.put("clZbh", s.getClZbh());
  5002 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  5003 + map.put("fcsjActual", s.getFcsjActual());
  5004 + map.put("zdzName", s.getZdzName());
  5005 + map.put("scheduleDate", s.getScheduleDateStr());
  5006 + map.put("lpName", s.getLpName());
  5007 + String zdp = "", zwdp = "", wdp = "";
  5008 + String zdpT = "", zwdpT = "", wdpT = "";
  5009 + String dbdp = "";
  5010 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  5011 + try {
  5012 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  5013 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  5014 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  5015 + for (int i = 0; i < list.size(); i++) {
  5016 + DutyEmployee t = list.get(i);
  5017 + if (dbdp.indexOf(t.getuName()) == -1) {
  5018 + if (!(dbdp.length() > 0)) {
  5019 + dbdp = t.getuName();
  5020 + } else {
  5021 + dbdp += "," + t.getuName();
  5022 + }
  5023 + }
  5024 + Long ts = t.getTs();
  5025 + if (ts > fcsj1 && ts < fcsj2) {
  5026 + if (zdp.indexOf(t.getuName()) == -1) {
  5027 + if (!(zdp.length() > 0)) {
  5028 + zdpT = t.getuName() + "...";
  5029 + }
  5030 + zdp += t.getuName() + ",";
  5031 +
  5032 + }
  5033 + } else if (ts > fcsj2 && ts < fcsj3) {
  5034 + if (zwdp.indexOf(t.getuName()) == -1) {
  5035 + if (!(zwdp.length() > 0)) {
  5036 + zwdpT = t.getuName() + "...";
  5037 + }
  5038 + zwdp += t.getuName() + ",";
  5039 + }
  5040 + } else {
  5041 + if (wdp.indexOf(t.getuName()) == -1) {
  5042 + if (!(wdp.length() > 0)) {
  5043 + wdpT = t.getuName() + "...";
  5044 + }
  5045 + wdp += t.getuName() + ",";
  5046 + }
  5047 + }
  5048 + }
  5049 + } catch (ParseException e) {
  5050 + // TODO Auto-generated catch block
  5051 + e.printStackTrace();
  5052 + }
  5053 + map.put("zdp", zdp);
  5054 + map.put("zwdp", zwdp);
  5055 + map.put("wdp", wdp);
  5056 + map.put("zdpT", zdpT);
  5057 + map.put("zwdpT", zwdpT);
  5058 + map.put("wdpT", wdpT);
  5059 + map.put("dbdp", dbdp);
  5060 + return map;
  5061 + }
  5062 +
  5063 + @Override
  5064 + public List<Map<String, Object>> scheduleDailyQp(String line, String date) {
  5065 + // TODO Auto-generated method stub
  5066 + List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  5067 + List<ScheduleRealInfo> scheduleRealInfos = scheduleRealInfoRepository.scheduleDailyQp(line, date);
  5068 + Map<String, Object> map = null;
  5069 + String lp = "lp";
  5070 + String jgh = "jgh";
  5071 + String clzbh = "clzbh";
  5072 + int bcs = 0;
  5073 + String thclzbh = "";
  5074 + String sgh = "sgh";
  5075 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5076 + ScheduleRealInfo scheduleRealInfo = scheduleRealInfos.get(i);
  5077 + if (scheduleRealInfo.getLpName().equals(lp)) {
  5078 + bcs++;
  5079 + String fcsj = scheduleRealInfo.getFcsj();
  5080 +
  5081 + if (!clzbh.equals(scheduleRealInfo.getClZbh())) {
  5082 + clzbh = scheduleRealInfo.getClZbh();
  5083 + if (thclzbh == "") {
  5084 + thclzbh += scheduleRealInfo.getClZbh() + ",";
  5085 + } else {
  5086 + thclzbh += scheduleRealInfo.getClZbh();
  5087 + }
  5088 + map.put("thclzbh", thclzbh);
  5089 + }
  5090 +
  5091 + if (!jgh.equals(scheduleRealInfo.getjGh())) {
  5092 + jgh = scheduleRealInfo.getjGh();
  5093 + if (map.get("jjb2") != null) {
  5094 + map.put("jjb3", scheduleRealInfo.getjGh() + "/" +
  5095 + scheduleRealInfo.getFcsjActual());
  5096 +
  5097 + } else {
  5098 + map.put("jjb2", scheduleRealInfo.getjGh() + "/" +
  5099 + scheduleRealInfo.getFcsjActual());
  5100 + }
  5101 +
  5102 + }
  5103 +
  5104 + if (scheduleRealInfo.getsGh() != null) {
  5105 + if (!scheduleRealInfo.getsGh().equals(sgh)) {
  5106 + sgh = scheduleRealInfo.getsGh() == null ? "" : scheduleRealInfo.getsGh();
  5107 + if (!sgh.equals("")) {
  5108 + if (map.get("sjb1") != null) {
  5109 + if (map.get("sjb2") != null) {
  5110 + map.put("sjb3", scheduleRealInfo.getsGh() + "/" +
  5111 + scheduleRealInfo.getFcsjActual());
  5112 + } else {
  5113 + map.put("sjb2", scheduleRealInfo.getsGh() + "/" +
  5114 + scheduleRealInfo.getFcsjActual());
  5115 + }
  5116 + } else {
  5117 + map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
  5118 + scheduleRealInfo.getFcsjActual());
  5119 + }
  5120 + }
  5121 + }
  5122 + }
  5123 + if (scheduleRealInfo.getFcsjActual() != null) {
  5124 + String fcsjs[] = fcsj.split(":");
  5125 + String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
  5126 + int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
  5127 + int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
  5128 + map.put("cz" + bcs, b - a);
  5129 + } else {
  5130 + map.put("cz" + bcs, "无");
  5131 + }
  5132 + map.put("lp", scheduleRealInfo.getLpName());
  5133 + map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
  5134 + map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
  5135 +
  5136 + if (i < scheduleRealInfos.size() - 1) {
  5137 + if (!scheduleRealInfos.get(i + 1).getLpName().equals
  5138 + (scheduleRealInfos.get(i).getLpName())) {
  5139 + list.add(map);
  5140 + lp = "lp";
  5141 + jgh = "jgh";
  5142 + clzbh = "clzbh";
  5143 + bcs = 0;
  5144 + thclzbh = "";
  5145 + sgh = "sgh";
  5146 + }
  5147 + } else {
  5148 + list.add(map);
  5149 + }
  5150 + } else {
  5151 + bcs = 1;
  5152 + map = new HashMap<String, Object>();
  5153 + lp = scheduleRealInfo.getLpName();
  5154 + jgh = scheduleRealInfo.getjGh();
  5155 + clzbh = scheduleRealInfo.getClZbh();
  5156 + if (scheduleRealInfo.getsGh() != null) {
  5157 + sgh = scheduleRealInfo.getsGh();
  5158 + map.put("sjb1", scheduleRealInfo.getsGh() + "/" +
  5159 + scheduleRealInfo.getFcsjActual());
  5160 + }
  5161 + String fcsj = scheduleRealInfo.getFcsj();
  5162 + scheduleRealInfo.getFcsjActual();
  5163 + map.put("jjb1", jgh + "/" + scheduleRealInfo.getFcsjActual());
  5164 + map.put("cccl", clzbh);
  5165 +
  5166 + if (scheduleRealInfo.getFcsjActual() != null) {
  5167 + String fcsjs[] = fcsj.split(":");
  5168 + String fcsjActuals[] = scheduleRealInfo.getFcsjActual().split(":");
  5169 + int a = Integer.parseInt(fcsjActuals[0]) * 60 + Integer.parseInt(fcsjActuals[1]);
  5170 + int b = Integer.parseInt(fcsjs[0]) * 60 + Integer.parseInt(fcsjs[1]);
  5171 + map.put("cz" + bcs, b - a);
  5172 + } else {
  5173 + map.put("cz" + bcs, "无");
  5174 + }
  5175 +
  5176 +
  5177 + map.put("lp", scheduleRealInfo.getLpName());
  5178 + map.put("dd" + bcs, scheduleRealInfo.getZdsjActual());
  5179 + map.put("kc" + bcs, scheduleRealInfo.getFcsjActual());
  5180 +
  5181 + if (i < scheduleRealInfos.size() - 1) {
  5182 + if (!scheduleRealInfos.get(i + 1).getLpName().equals
  5183 + (scheduleRealInfos.get(i).getLpName())) {
  5184 + list.add(map);
  5185 + lp = "lp";
  5186 + jgh = "jgh";
  5187 + clzbh = "clzbh";
  5188 + bcs = 0;
  5189 + thclzbh = "";
  5190 + sgh = "sgh";
  5191 + }
  5192 + } else {
  5193 + list.add(map);
  5194 + }
  5195 + }
  5196 +
  5197 + }
  5198 + return list;
  5199 + }
  5200 +
  5201 +
  5202 + @Override
  5203 + public List<Map<String, Object>> scheduleDailyExport(Map<String, Object> map) {
  5204 + String line = map.get("line").toString();
  5205 + String date = map.get("date").toString();
  5206 + String xlName = map.get("xlName").toString();
  5207 + String state = map.get("state").toString();
  5208 + String type = map.get("type").toString();
  5209 + String genre =map.get("genre").toString();
  5210 + String df="";
  5211 + if(map.get("df")!=null){
  5212 + df=map.get("df").toString();
  5213 + }
  5214 +
  5215 + List<Map<String, Object>> dataList2 = new ArrayList<Map<String, Object>>();
  5216 + List<Map<String, Object>> dataList3 = new ArrayList<Map<String, Object>>();
  5217 + List<Map<String, Object>> list1 = this.statisticsDaily(line, date, xlName, null);
  5218 + List<ScheduleRealInfo> list2 = this.queryUserInfo(line, date, state);
  5219 + List<ScheduleRealInfo> list3 = new ArrayList<ScheduleRealInfo>();
  5220 + if(genre.equals("qp"))
  5221 + list3=this.realScheduleListQp(line, date);
  5222 + else if(genre.equals("zrw"))
  5223 + list3=this.realScheduleList_zrw(line, date);
  5224 + else
  5225 + list3=this.realScheduleList(line, date);
  5226 + Map<String, Object> nMap = new HashMap<String, Object>();
  5227 + nMap.put("date", xlName + date);
  5228 + nMap.put("jls", list1.get(0).get("jls"));
  5229 + nMap.put("sjgl", list1.get(0).get("sjgl"));
  5230 + for (Map<String, Object> m : list1) {
  5231 +// m.put("ssgl", m.get("ssgl"));
  5232 +// m.put("ssbc", m.get("ssbc"));
  5233 +// m.put("ssgl_lz", m.get("ssgl_lz") + " / " + m.get("ssbc_lz"));
  5234 +// m.put("ssgl_dm", m.get("ssgl_dm") + " / " + m.get("ssbc_dm"));
  5235 +// m.put("ssgl_gz", m.get("ssgl_gz") + " / " + m.get("ssbc_gz"));
  5236 +// m.put("ssgl_jf", m.get("ssgl_jf") + " / " + m.get("ssbc_jf"));
  5237 +// m.put("ssgl_zs", m.get("ssgl_zs") + " / " + m.get("ssbc_zs"));
  5238 +// m.put("ssgl_qr", m.get("ssgl_qr") + " / " + m.get("ssbc_qr"));
  5239 +// m.put("ssgl_qc", m.get("ssgl_qc") + " / " + m.get("ssbc_qc"));
  5240 +// m.put("ssgl_kx", m.get("ssgl_kx") + " / " + m.get("ssbc_kx"));
  5241 +// m.put("ssgl_qh", m.get("ssgl_qh") + " / " + m.get("ssbc_qh"));
  5242 +// m.put("ssgl_yw", m.get("ssgl_yw") + " / " + m.get("ssbc_yw"));
  5243 +// m.put("ssgl_other", m.get("ssgl_other") + " / " + m.get("ssbc_other"));
  5244 + }
  5245 +
  5246 + int size = 0;
  5247 + Map<String, Object> tempMap = new HashMap<String, Object>();
  5248 + for (int i = 0; i < list2.size(); i++) {
  5249 + Object obj = (Object) list2.get(i);
  5250 + Object[] objs = (Object[]) obj;
  5251 + if (size == 5) {
  5252 + size = 0;
  5253 + dataList2.add(tempMap);
  5254 + tempMap = new HashMap<String, Object>();
  5255 + }
  5256 + tempMap.put("lp" + size, objs[3]);
  5257 + tempMap.put("ch" + size, objs[2]);
  5258 + tempMap.put("jz" + size, objs[1] + "/" + objs[4]);
  5259 + tempMap.put("sz" + size, "");
  5260 + tempMap.put("jw" + size, "");
  5261 + tempMap.put("sw" + size, "");
  5262 +
  5263 + size++;
  5264 + }
  5265 + if (size < 5) {
  5266 + for (; size < 5; size++) {
  5267 + tempMap.put("lp" + size, "");
  5268 + tempMap.put("ch" + size, "");
  5269 + tempMap.put("jz" + size, "");
  5270 + tempMap.put("sz" + size, "");
  5271 + tempMap.put("jw" + size, "");
  5272 + tempMap.put("sw" + size, "");
  5273 + }
  5274 + }
  5275 +
  5276 + dataList2.add(tempMap);
  5277 +/*
  5278 + size = 0;
  5279 + tempMap = new HashMap<String, Object>();
  5280 + for (ScheduleRealInfo schedule : list3) {
  5281 + if (size == 3) {
  5282 + size = 0;
  5283 + dataList3.add(tempMap);
  5284 + tempMap = new HashMap<String, Object>();
  5285 + }
  5286 + tempMap.put("lpName" + size, schedule.getLpName());
  5287 + tempMap.put("qdzName" + size, schedule.getQdzName());
  5288 + tempMap.put("zdsj" + size, schedule.getZdsj());
  5289 + tempMap.put("zdsjActual" + size, schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "");
  5290 + tempMap.put("zdsjk" + size, "");
  5291 + tempMap.put("zdsjm" + size, "");
  5292 + tempMap.put("fcsj" + size, schedule.getFcsj());
  5293 + String fcsjActural=schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
  5294 + String bcType=schedule.getBcType()!=null?schedule.getBcType():"";
  5295 + if(bcType.equals("in")){
  5296 + fcsjActural=fcsjActural+"(进)";
  5297 + }
  5298 + if(bcType.equals("out")){
  5299 + fcsjActural=fcsjActural+"(出)";
  5300 + }
  5301 + tempMap.put("fcsjActual" + size, fcsjActural);
  5302 + tempMap.put("fcsjk" + size, "");
  5303 + tempMap.put("fcsjm" + size, "");
  5304 + tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : "");
  5305 +
  5306 + size++;
  5307 + }
  5308 + if (size < 3) {
  5309 + for (; size < 3; size++) {
  5310 + tempMap.put("lpName" + size, "");
  5311 + tempMap.put("qdzName" + size, "");
  5312 + tempMap.put("zdsj" + size, "");
  5313 + tempMap.put("zdsjActual" + size, "");
  5314 + tempMap.put("zdsjk" + size, "");
  5315 + tempMap.put("zdsjm" + size, "");
  5316 + tempMap.put("fcsj" + size, "");
  5317 + tempMap.put("fcsjActual" + size, "");
  5318 + tempMap.put("fcsjk" + size, "");
  5319 + tempMap.put("fcsjm" + size, "");
  5320 + tempMap.put("remarks" + size, "");
  5321 + }
  5322 + }
  5323 +*/
  5324 +
  5325 + size = 0;
  5326 + tempMap = new HashMap<String, Object>();
  5327 + for (ScheduleRealInfo schedule : list3) {
  5328 + int x = size % 3;
  5329 + if (x == 0 && size > 0) {
  5330 + dataList3.add(tempMap);
  5331 + tempMap = new HashMap<String, Object>();
  5332 + }
  5333 + tempMap.put("lpName" + x, schedule.getLpName());
  5334 + tempMap.put("qdzName" + x, schedule.getQdzName());
  5335 + tempMap.put("zdsj" + x, schedule.getZdsj());
  5336 + String zdsjActual = schedule.getZdsjActual() != null ? schedule.getZdsjActual() : "";
  5337 + tempMap.put("zdsjActual" + x, zdsjActual);
  5338 +
  5339 + String zdsjk = "";
  5340 + String zdsjm = "";
  5341 + if (!zdsjActual.equals("")) {
  5342 + String[] zdsj_s = schedule.getZdsj().split(":");
  5343 + String[] zdsjActual_s = zdsjActual.split(":");
  5344 + Long zdsj_ = Long.parseLong(zdsj_s[0]) * 60 + Long.parseLong(zdsj_s[1]);
  5345 + Long zdsjActual_ = Long.parseLong(zdsjActual_s[0]) * 60 + Long.parseLong(zdsjActual_s[1]);
  5346 + if ((zdsj_ - zdsjActual_) > 0) {
  5347 + if(zdsj_ - zdsjActual_>1200){
  5348 + zdsjm=String.valueOf(1440-(zdsj_-zdsjActual_));
  5349 + }else{
  5350 + zdsjk = String.valueOf(zdsj_ - zdsjActual_);
  5351 + }
  5352 + } else {
  5353 + if(zdsjActual_ - zdsj_>1200){
  5354 + zdsjk =String.valueOf(1440-(zdsjActual_ - zdsj_));
  5355 + }else{
  5356 + zdsjm = String.valueOf(zdsjActual_ - zdsj_);
  5357 + }
  5358 + }
  5359 + }
  5360 + tempMap.put("zdsjk" + x, zdsjk);
  5361 + tempMap.put("zdsjm" + x, zdsjm.equals("0")?"":zdsjm);
  5362 + tempMap.put("fcsj" + x, schedule.getFcsj());
  5363 + String fcsjActural = schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
  5364 + String bcType = schedule.getBcType() != null ? schedule.getBcType() : "";
  5365 + String fcsjActuralstr = "";
  5366 + if (bcType.equals("in")) {
  5367 + fcsjActuralstr = fcsjActural + "(进)";
  5368 + } else if (bcType.equals("out")) {
  5369 + fcsjActuralstr = fcsjActural + "(出)";
  5370 + } else {
  5371 + fcsjActuralstr = fcsjActural;
  5372 + }
  5373 + tempMap.put("fcsjActual" + x, fcsjActuralstr);
  5374 + String fcsjk = "";
  5375 + String fcsjm = "";
  5376 + String dfsjk ="";
  5377 + String dfsjm="";
  5378 + if (!fcsjActural.equals("")) {
  5379 + String[] fcsj_s = schedule.getFcsj().split(":");
  5380 + String[] fcsjActural_s = fcsjActural.split(":");
  5381 + Long fcsj_ = Long.parseLong(fcsj_s[0]) * 60 + Long.parseLong(fcsj_s[1]);
  5382 + Long fcsjActural_ = Long.parseLong(fcsjActural_s[0]) * 60 + Long.parseLong(fcsjActural_s[1]);
  5383 + if ((fcsj_ - fcsjActural_) > 0) {
  5384 + if(fcsj_ - fcsjActural_>1200){
  5385 + fcsjm=String.valueOf(1440-(fcsj_ - fcsjActural_));
  5386 + }else{
  5387 + fcsjk = String.valueOf(fcsj_ - fcsjActural_);
  5388 + }
  5389 + } else {
  5390 + if(fcsjActural_ - fcsj_>1200){
  5391 + fcsjk =String.valueOf(1440-(fcsjActural_ - fcsj_));
  5392 + }
  5393 + else{
  5394 + fcsjm = String.valueOf(fcsjActural_ - fcsj_);
  5395 + }
  5396 + }
  5397 + if(df.equals("df")){
  5398 + String[] dfsj_s =schedule.getDfsj().split(":");
  5399 + Long dfsj_ = Long.parseLong(dfsj_s[0]) * 60 + Long.parseLong(dfsj_s[1]);
  5400 + if ((dfsj_ - fcsjActural_) > 0) {
  5401 + if(dfsj_ - fcsjActural_>1200){
  5402 + dfsjm=String.valueOf(1440-(dfsj_ - fcsjActural_));
  5403 + }else{
  5404 + dfsjk = String.valueOf(dfsj_ - fcsjActural_);
  5405 + }
  5406 + } else {
  5407 + if(fcsjActural_ - dfsj_>1200){
  5408 + dfsjk= String.valueOf(1440-(fcsjActural_ - dfsj_));
  5409 + }else{
  5410 + dfsjm = String.valueOf(fcsjActural_ - dfsj_);
  5411 + }
  5412 + }
  5413 + }
  5414 + }
  5415 + if(df.equals("df")){
  5416 + tempMap.put("dfsj"+x,schedule.getDfsj());
  5417 + tempMap.put("dfsjk" + x, dfsjk);
  5418 + tempMap.put("dfsjm" + x, dfsjm.equals("0")?"":dfsjm);
  5419 + }
  5420 + tempMap.put("fcsjk" + x, fcsjk);
  5421 + tempMap.put("fcsjm" + x, fcsjm.equals("0")?"":fcsjm);
  5422 + tempMap.put("remarks" + x, schedule.getRemark() != null ? schedule.getRemark() : "");
  5423 +
  5424 + size++;
  5425 + }
  5426 + if (tempMap.get("lpName0") != null) {
  5427 + if (tempMap.get("lpName1") == null) {
  5428 + tempMap.put("lpName1", "");
  5429 + tempMap.put("qdzName1", "");
  5430 + tempMap.put("zdsj1", "");
  5431 + tempMap.put("zdsjActual1", "");
  5432 + tempMap.put("zdsjk1", "");
  5433 + tempMap.put("zdsjm1", "");
  5434 + tempMap.put("fcsj1", "");
  5435 + tempMap.put("fcsjActual1", "");
  5436 + tempMap.put("fcsjk1", "");
  5437 + tempMap.put("fcsjm1", "");
  5438 + if(df.equals("df")){
  5439 + tempMap.put("dfsj1","");
  5440 + tempMap.put("dfsjk1" , "");
  5441 + tempMap.put("dfsjm1" , "");
  5442 + }
  5443 + tempMap.put("remarks1", "");
  5444 + }
  5445 + if (tempMap.get("lpName2") == null) {
  5446 + tempMap.put("lpName2", "");
  5447 + tempMap.put("qdzName2", "");
  5448 + tempMap.put("zdsj2", "");
  5449 + tempMap.put("zdsjActual2", "");
  5450 + tempMap.put("zdsjk2", "");
  5451 + tempMap.put("zdsjm2", "");
  5452 + tempMap.put("fcsj2", "");
  5453 + tempMap.put("fcsjActual2", "");
  5454 + tempMap.put("fcsjk2", "");
  5455 + tempMap.put("fcsjm2", "");
  5456 + if(df.equals("df")){
  5457 + tempMap.put("dfsj2","");
  5458 + tempMap.put("dfsjk2" , "");
  5459 + tempMap.put("dfsjm2" , "");
  5460 + }
  5461 + tempMap.put("remarks2", "");
  5462 + }
  5463 + dataList3.add(tempMap);
  5464 + }
  5465 +
  5466 + if (date.length() == 10) {
  5467 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
  5468 + String dbdp = "";
  5469 + try {
  5470 + for (int i = 0; i < list.size(); i++) {
  5471 + DutyEmployee t = list.get(i);
  5472 + if (dbdp.indexOf(t.getuName()) == -1) {
  5473 + if (!(dbdp.length() > 0)) {
  5474 + dbdp = t.getuName();
  5475 + } else {
  5476 + dbdp += "," + t.getuName();
  5477 + }
  5478 + }
  5479 + }
  5480 + } catch (Exception e) {
  5481 + // TODO: handle exception
  5482 + e.printStackTrace();
  5483 + }
  5484 + nMap.put("dbdp", dbdp);
  5485 + }
  5486 +
  5487 + if (type.equals("export")) {
  5488 + String lineName = "";
  5489 + if (map.containsKey("lineName"))
  5490 + lineName = "-" + map.get("lineName").toString() + "-";
  5491 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  5492 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  5493 + Map<String, Object> m = new HashMap<String, Object>();
  5494 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  5495 + ReportUtils ee = new ReportUtils();
  5496 + try {
  5497 + listI.add(list1.iterator());
  5498 + listI.add(dataList2.iterator());
  5499 + listI.add(dataList3.iterator());
  5500 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  5501 + String sourcePath = path + "mould/scheduleDaily.xls";
  5502 + if (date.length() == 7) {
  5503 + sdfMonth = new SimpleDateFormat("yyyy-MM");
  5504 + sdfSimple = new SimpleDateFormat("yyyyMM");
  5505 + sourcePath = path + "mould/scheduleDaily_m.xls";
  5506 + }
  5507 + if(df.equals("df")){
  5508 + sourcePath =path + "mould/scheduleDaily_df.xls";
  5509 + }
  5510 + ee.excelReplace(listI, new Object[]{nMap}, sourcePath,
  5511 + path + "export/" + sdfSimple.format(sdfMonth.parse(date)) + lineName + "调度日报.xls");
  5512 + } catch (Exception e) {
  5513 + // TODO: handle exception
  5514 + e.printStackTrace();
  5515 + }
  5516 + }
  5517 +
  5518 + return new ArrayList<Map<String, Object>>();
  5519 + }
  5520 +
  5521 + public void exportWaybill_pl(List<ScheduleRealInfo> listpl,
  5522 + String date, String jName, String clZbh, String lpName) {
  5523 + ReportUtils ee = new ReportUtils();
  5524 + ReportRelatedUtils rru = new ReportRelatedUtils();
  5525 + List<Iterator<?>> list = new ArrayList<Iterator<?>>();
  5526 + List<ScheduleRealInfo> scheduleRealInfos = listpl;
  5527 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  5528 +// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
  5529 + List<ScheduleRealInfo> lists = new ArrayList<ScheduleRealInfo>();
  5530 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5531 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5532 + Set<ChildTaskPlan> cts = s.getcTasks();
  5533 + if (cts != null && cts.size() > 0) {
  5534 + lists.add(s);
  5535 + } else {
  5536 + if (s.getZdsjActual() != null && s.getFcsjActual() != null) {
  5537 + lists.add(s);
  5538 + }
  5539 + }
  5540 + }
  5541 + DecimalFormat format = new DecimalFormat("0.00");
  5542 +// int cjbc = scheduleRealInfoRepository.findCjbc(jName, clZbh, lpName);
  5543 +// int ljbc = scheduleRealInfoRepository.findLjbc(jName, clZbh, lpName);
  5544 + //计算里程和班次数,并放入Map里
  5545 + Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  5546 +
  5547 + map.put("jhlc", Arith.add(culateMieageService.culateJhgl(scheduleRealInfos), culateMieageService.culateJhJccgl(scheduleRealInfos)));
  5548 + map.put("remMileage", culateMieageService.culateLbgl(scheduleRealInfos));
  5549 + map.put("addMileage", culateMieageService.culateLjgl(lists));
  5550 + double yygl = Arith.add(culateMieageService.culateSjgl(lists), culateMieageService.culateLjgl(lists));
  5551 + map.put("yygl", yygl);
  5552 + double ksgl = Arith.add(culateMieageService.culateKsgl(scheduleRealInfos), culateMieageService.culateJccgl(lists));
  5553 + map.put("ksgl", ksgl);
  5554 + map.put("realMileage", Arith.add(yygl, ksgl));
  5555 + map.put("jhbc", culateMieageService.culateJhbc(scheduleRealInfos, ""));
  5556 + map.put("cjbc", culateMieageService.culateLbbc(scheduleRealInfos));
  5557 + map.put("ljbc", culateMieageService.culateLjbc(lists, ""));
  5558 + int sjbc = culateMieageService.culateLjbc(lists, "") + culateMieageService.culateSjbc(lists, "");
  5559 + map.put("sjbc", sjbc);
  5560 +// map=new HashMap<String,Object>();
  5561 +
  5562 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  5563 + String minfcsj = "02:00";
  5564 + List<Line> lineList = lineRepository.findLineByCode(listpl.get(0).getXlBm());
  5565 + if (lineList.size() > 0) {
  5566 + String sqlMinYysj = "select start_opt from bsth_c_line_config where "
  5567 + + " id = ("
  5568 + + "select max(id) from bsth_c_line_config where line ='" + lineList.get(0).getId() + "'"
  5569 + + ")";
  5570 + minfcsj = jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  5571 + }
  5572 + String[] minSjs = minfcsj.split(":");
  5573 + Long minSj = Long.parseLong(minSjs[0]) * 60 + Long.parseLong(minSjs[1]);
  5574 +
  5575 +
  5576 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5577 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5578 + String[] fcsj = s.getFcsj().split(":");
  5579 + Long fcsjL = Long.parseLong(fcsj[0]) * 60 + Long.parseLong(fcsj[1]);
  5580 +
  5581 + Long fscjT = 0L;
  5582 + if (fcsjL < minSj) {
  5583 + Calendar calendar = new GregorianCalendar();
  5584 + calendar.setTime(s.getScheduleDate());
  5585 + calendar.add(calendar.DATE, 1);
  5586 + s.setScheduleDate(calendar.getTime());
  5587 + try {
  5588 + fscjT = sdf.parse(sdf.format(s.getScheduleDate()) + " " + s.getFcsj()).getTime();
  5589 + } catch (ParseException e) {
  5590 + // TODO Auto-generated catch block
  5591 + e.printStackTrace();
  5592 + }
  5593 +
  5594 + } else {
  5595 + try {
  5596 + fscjT = sdf.parse(s.getScheduleDateStr() + " " + s.getFcsj()).getTime();
  5597 + } catch (ParseException e) {
  5598 + // TODO Auto-generated catch block
  5599 + e.printStackTrace();
  5600 + }
  5601 + ;
  5602 + }
  5603 + s.setFcsjT(fscjT);
  5604 + }
  5605 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  5606 + Collections.sort(scheduleRealInfos, new ComparableReal());
  5607 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  5608 + ScheduleRealInfo s = scheduleRealInfos.get(i);
  5609 + s.setAdjustExps(i + 1 + "");
  5610 + String remarks = "";
  5611 + if (s.getRemarks() != null) {
  5612 + remarks += s.getRemarks();
  5613 + }
  5614 +
  5615 + Set<ChildTaskPlan> childTaskPlans = s.getcTasks();
  5616 + if (!childTaskPlans.isEmpty()) {
  5617 + s.setFcsjActual("");
  5618 + s.setZdsjActual("");
  5619 + s.setJhlc(0.0);
  5620 + }
  5621 +
  5622 + if (s.isDestroy()) {
  5623 + s.setFcsjActual("");
  5624 + s.setZdsjActual("");
  5625 + s.setJhlc(0.0);
  5626 + remarks += "(烂班)";
  5627 + s.setRemarks(remarks);
  5628 + }
  5629 +
  5630 + listSchedule.add(s);
  5631 + //计算营运里程,空驶里程
  5632 + if (!childTaskPlans.isEmpty()) {
  5633 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  5634 + List<ChildTaskPlan> listit = new ArrayList<ChildTaskPlan>(childTaskPlans);
  5635 + Collections.sort(listit, new ComparableChild());
  5636 + for (int j = 0; j < listit.size(); j++) {
  5637 + ScheduleRealInfo t = new ScheduleRealInfo();
  5638 + ChildTaskPlan childTaskPlan = listit.get(j);
  5639 + if (childTaskPlan.isDestroy()) {
  5640 + t.setFcsjActual("");
  5641 + t.setZdsjActual("");
  5642 + t.setJhlc(0.0);
  5643 + } else {
  5644 + t.setFcsjActual(childTaskPlan.getStartDate());
  5645 + t.setZdsjActual(childTaskPlan.getEndDate());
  5646 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  5647 + }
  5648 + t.setQdzName(childTaskPlan.getStartStationName());
  5649 + t.setZdzName(childTaskPlan.getEndStationName());
  5650 + t.setRemarks(childTaskPlan.getRemarks());
  5651 + t.setAdjustExps("子");
  5652 + t.setjGh("");
  5653 + t.setjName("");
  5654 + t.setsGh("");
  5655 + t.setsName("");
  5656 + listSchedule.add(t);
  5657 + }
  5658 + }
  5659 + }
  5660 + Map<String, Object> maps;
  5661 + for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
  5662 + maps = new HashMap<String, Object>();
  5663 + try {
  5664 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  5665 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  5666 + maps = rru.getMapValue(scheduleRealInfo);
  5667 + maps.put("bcs", scheduleRealInfo.getAdjustExps());
  5668 + String zdsj = scheduleRealInfo.getZdsj();
  5669 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  5670 + if (zdsj != null && zdsjActual != null &&
  5671 + !zdsj.equals(zdsjActual) &&
  5672 + !zdsj.equals("") &&
  5673 + !zdsjActual.equals("")) {
  5674 + int zdsjT = Integer.valueOf(zdsj.split(":")[0]) * 60 + Integer.valueOf(zdsj.split(":")[1]);
  5675 + int zdsjAT = Integer.valueOf(zdsjActual.split(":")[0]) * 60 + Integer.valueOf(zdsjActual.split(":")[1]);
  5676 + if (zdsj.compareTo(zdsjActual) > 0) {
  5677 + if (zdsjT - zdsjAT > 1000) {
  5678 + maps.put("fast", "");
  5679 + maps.put("slow", zdsjAT - zdsjT + 1440);
  5680 + } else {
  5681 + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  5682 + maps.put("slow", "");
  5683 + }
  5684 + } else {
  5685 + if (zdsjAT - zdsjT > 1000) {
  5686 + maps.put("fast", zdsjT - zdsjAT + 1440);
  5687 + maps.put("slow", "");
  5688 + } else {
  5689 + maps.put("fast", "");
  5690 + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  5691 + }
  5692 + }
  5693 + } else {
  5694 + maps.put("fast", "");
  5695 + maps.put("slow", "");
  5696 + }
  5697 + listMap.add(maps);
  5698 + } catch (Exception e) {
  5699 + e.printStackTrace();
  5700 + }
  5701 + }
  5702 +
  5703 +
  5704 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  5705 + list.add(listMap.iterator());
  5706 + String xls = "";
  5707 + if (map.get("type").toString().equals("0")) {
  5708 + xls = "waybill_minhang.xls";
  5709 + } else {
  5710 + xls = "waybill_minhang_dl.xls";
  5711 + }
  5712 + map.put("sheetName", jName + "-" + clZbh + "-" + lpName);
  5713 + ee.excelReplace(list, new Object[]{map}, path + "mould/" + xls,
  5714 + path + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  5715 + }
  5716 +
  5717 + @Override
  5718 + public Map<String, Object> exportWaybillMore(Map<String, Object> map) {
  5719 + String date = map.get("date").toString();
  5720 + String line = map.get("line").toString();
  5721 + ReportUtils ee = new ReportUtils();
  5722 + List<List> lists = JSON.parseArray(map.get("strs").toString(), List.class);
  5723 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
  5724 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  5725 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  5726 + int num = 0;
  5727 + File file = null;
  5728 + try {
  5729 + while (true) {
  5730 + String fileUrl = path + "行车路单" + sdfSimple.format(sdfMonth.parse(date));
  5731 +// file = new File(fileUrl + (num == 0 ? "/" : "(" + num + ")/")); //新建文件夹
  5732 + file = new File(fileUrl + (num == 0 ? ".xls" : "(" + num + ").xls")); //新建excel文件
  5733 + if (file.exists()) { //判断是否已存在重名
  5734 + num++;
  5735 + } else {
  5736 + break;
  5737 + }
  5738 + }
  5739 +// file.mkdirs(); //创建
  5740 + List<ScheduleRealInfo> lists_line = scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
  5741 + List<File> files = new ArrayList<File>();
  5742 + for (List<String> list : lists) {
  5743 + List<ScheduleRealInfo> newList = new ArrayList<ScheduleRealInfo>();
  5744 + String jName = list.get(0);
  5745 + String clZbh = list.get(1);
  5746 + String lpName = list.get(2);
  5747 + String jGh = list.get(3);
  5748 + for (int i = 0; i < lists_line.size(); i++) {
  5749 + ScheduleRealInfo s = lists_line.get(i);
  5750 + if (s.getjGh().equals(jGh) && s.getClZbh().equals(clZbh) && s.getLpName().equals(lpName)) {
  5751 + newList.add(s);
  5752 + }
  5753 + }
  5754 + this.exportWaybill_pl(newList, date, jName, clZbh, lpName);
  5755 + File temp = new File(path + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  5756 + String fileName = file.getName();
  5757 + files.add(temp);
  5758 + }
  5759 + for (int i = 1; i < files.size(); i++) {
  5760 + File file1 = files.get(0);
  5761 + File file2 = files.get(i);
  5762 + ee.copySheetByFile(file2, file1, 0, 145);
  5763 + }
  5764 + File newFile = files.get(0);
  5765 + newFile.renameTo(file);
  5766 +// temp.renameTo(new File(path + fileName + "/" + temp.getName()));
  5767 +// File[] listFiles = file.listFiles();
  5768 +// ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(path + file.getName() + ".zip")));
  5769 +//// zos.setEncoding("gbk");
  5770 +//// zos.putNextEntry(new ZipEntry(fileName + "/"));
  5771 +// for (int i = 0; i < listFiles.length; i++) {
  5772 +// zos.putNextEntry(new ZipEntry(fileName + "/" + listFiles[i].getName()));
  5773 +// BufferedInputStream bis = new BufferedInputStream(new FileInputStream(listFiles[i]));
  5774 +// BufferedOutputStream bos = new BufferedOutputStream(zos);
  5775 +// int bytesRead = 0;
  5776 +// for (byte[] buffer = new byte[BUF_SIZE]; ((bytesRead = bis.read(buffer, 0, BUF_SIZE)) != -1); ) {
  5777 +//// zos.write(buffer, 0, bytesRead);
  5778 +//// zos.flush();
  5779 +// bos.write(buffer, 0, bytesRead);
  5780 +// bos.flush();
  5781 +// }
  5782 +//// bos.close();
  5783 +// bis.close();
  5784 +// }
  5785 +// zos.close();
  5786 +// }
  5787 +
  5788 + } catch (Exception e) {
  5789 + // TODO: handle exception
  5790 + e.printStackTrace();
  5791 + }
  5792 +
  5793 + map.put("fileName", file.getName());
  5794 + return map;
  5795 + }
  5796 +
  5797 + @Autowired
  5798 + SchedulePlanInfoService schPlanService;
  5799 +
  5800 + @Override
  5801 + public List<SchedulePlanInfo> currentSchedulePlan(String lineCode) {
  5802 + List<SchedulePlanInfo> rs = dayOfSchedule.schedulePlanMap.get(lineCode);
  5803 +
  5804 + if (rs == null || rs.size() == 0) {
  5805 + //尝试刷新内存
  5806 + Map<String, Object> data = new HashMap<>();
  5807 + data.put("scheduleDate_eq", dayOfSchedule.currSchDateMap.get(lineCode));
  5808 + data.put("xlBm_eq", lineCode);
  5809 + List<SchedulePlanInfo> planItr = dayOfSchedule.cleanSchPlanItr(schPlanService.list(data).iterator());
  5810 +
  5811 + if (planItr.size() > 0) {
  5812 + dayOfSchedule.schedulePlanMap.put(lineCode, planItr);
  5813 + return planItr;
  5814 + }
  5815 + }
  5816 + return rs;
  5817 + }
  5818 +
  5819 +
  5820 + @Override
  5821 + public Map<String, Object> lpChangeMulti(String leftIdx, String rightIdx, int type) {
  5822 + Map<String, Object> rs = new HashMap<>();
  5823 + Set<ScheduleRealInfo> ts = new HashSet<>();
  5824 + try {
  5825 + List<String> leftList = Splitter.on(",").splitToList(leftIdx);
  5826 + List<String> rightList = Splitter.on(",").splitToList(rightIdx);
  5827 + Set<String> lpSet = new HashSet<>();
  5828 + Set<String> carSet = new HashSet<>();
  5829 +
  5830 + List<ScheduleRealInfo> largeList, smallList;
  5831 + if (leftList.size() > rightList.size()) {
  5832 + largeList = getByIdx(leftList);
  5833 + smallList = getByIdx(rightList);
  5834 + } else {
  5835 + largeList = getByIdx(rightList);
  5836 + smallList = getByIdx(leftList);
  5837 + }
  5838 +
  5839 + ScheduleRealInfo leftSch, rightSch = null;
  5840 + for (int i = 0; i < largeList.size(); i++) {
  5841 + leftSch = largeList.get(i);
  5842 + leftSch.setLpChange(1);
  5843 + if (i < smallList.size()) {
  5844 + rightSch = smallList.get(i);
  5845 + rightSch.setLpChange(1);
  5846 + ts.add(rightSch);
  5847 + } else {
  5848 + //不对称时多出来的
  5849 + lpChangeByLeft(leftSch, largeList.get(i - 1), type);
  5850 + ts.add(leftSch);
  5851 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
  5852 + continue;
  5853 + }
  5854 +
  5855 + //调换路牌
  5856 + lpChange(leftSch, rightSch, type);
  5857 + ts.add(leftSch);
  5858 +
  5859 + lpSet.add(leftSch.getXlBm() + "_" + leftSch.getLpName());
  5860 + lpSet.add(rightSch.getXlBm() + "_" + rightSch.getLpName());
  5861 +
  5862 + carSet.add(leftSch.getClZbh());
  5863 + carSet.add(rightSch.getClZbh());
  5864 + scheduleRealInfoRepository.updateLpChange(leftSch.getId());
  5865 + scheduleRealInfoRepository.updateLpChange(rightSch.getId());
  5866 + }
  5867 +
  5868 + //重新计算路牌的起点应到时间
  5869 + for (String lpName : lpSet) {
  5870 + ts.addAll(dayOfSchedule.updateQdzTimePlan(lpName));
  5871 + }
  5872 +
  5873 + //重新就算车辆当前执行班次
  5874 + for(String nbbm : carSet){
  5875 + dayOfSchedule.reCalcExecPlan(nbbm);
  5876 + }
  5877 +
  5878 +
  5879 + for (ScheduleRealInfo sch : ts) {
  5880 + dayOfSchedule.save(sch);
  5881 + }
  5882 +
  5883 + rs.put("status", ResponseCode.SUCCESS);
  5884 + rs.put("ts", ts);
  5885 + } catch (Exception e) {
  5886 + logger.error("", e);
  5887 + rs.put("status", ResponseCode.ERROR);
  5888 + rs.put("msg", e.getMessage());
  5889 + }
  5890 +
  5891 + return rs;
  5892 + }
  5893 +
  5894 + private List<ScheduleRealInfo> getByIdx(List<String> idList) {
  5895 + List<ScheduleRealInfo> list = new ArrayList<>();
  5896 + for (String id : idList) {
  5897 + list.add(dayOfSchedule.get(Long.parseLong(id)));
  5898 + }
  5899 + return list;
  5900 + }
  5901 +
  5902 + @Override
  5903 + public void lpChange(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
  5904 + //释放班次映射
  5905 + if (type > 0) {
  5906 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
  5907 + dayOfSchedule.removeNbbm2SchMapp(rightSch);
  5908 + }
  5909 +
  5910 + //对调数据
  5911 + LpData leftData = new LpData(leftSch);
  5912 + LpData rightData = new LpData(rightSch);
  5913 +
  5914 + leftData.appendTo(rightSch, type);
  5915 + rightData.appendTo(leftSch, type);
  5916 +
  5917 + if (type > 0) {
  5918 + //重新映射
  5919 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  5920 + dayOfSchedule.addNbbm2SchMapp(rightSch);
  5921 + }
  5922 + }
  5923 +
  5924 + /**
  5925 + * 更换左边班次的路牌,右边不变
  5926 + *
  5927 + * @param leftSch
  5928 + * @param rightSch
  5929 + * @param type
  5930 + */
  5931 + public void lpChangeByLeft(ScheduleRealInfo leftSch, ScheduleRealInfo rightSch, int type) {
  5932 + //释放班次映射
  5933 + if (type > 0)
  5934 + dayOfSchedule.removeNbbm2SchMapp(leftSch);
  5935 +
  5936 + LpData rightData = new LpData(rightSch);
  5937 + rightData.appendTo(leftSch, type);
  5938 +
  5939 + //重新映射
  5940 + if (type > 0)
  5941 + dayOfSchedule.addNbbm2SchMapp(leftSch);
  5942 +
  5943 + }
  5944 +
  5945 + @Override
  5946 + public Map<String, Object> revokeRealArrive(Long id) {
  5947 + Map<String, Object> rs = new HashMap<>();
  5948 + List<ScheduleRealInfo> ts = new ArrayList<>();
  5949 +
  5950 + try {
  5951 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  5952 + if (sch.getZdsjActual() == null && sch.getFcsjActual() == null) {
  5953 + rs.put("status", ResponseCode.ERROR);
  5954 + rs.put("msg", "班次未执行,无法撤销!");
  5955 + } else {
  5956 + //日志记录
  5957 + ScheduleModifyLogger.cxzx(sch);
  5958 +
  5959 + sch.clearFcsjActual();
  5960 + sch.clearZdsjActual();
  5961 + //清除路牌下一个班的起点到达时间
  5962 + ScheduleRealInfo next = dayOfSchedule.nextByLp(sch);
  5963 + if (null != next) {
  5964 + next.setQdzArrDatesj(null);
  5965 + ts.add(next);
  5966 + }
  5967 +
  5968 + rs.put("status", ResponseCode.SUCCESS);
  5969 +
  5970 + ts.add(sch);
  5971 + rs.put("ts", ts);
  5972 +
  5973 + dayOfSchedule.save(sch);
  5974 + //重新计算当前执行班次
  5975 + dayOfSchedule.reCalcExecPlan(sch.getClZbh());
  5976 +
  5977 + }
  5978 + } catch (Exception e) {
  5979 + logger.error("", e);
  5980 + rs.put("status", ResponseCode.ERROR);
  5981 + }
  5982 + return rs;
  5983 + }
  5984 +
  5985 + @Override
  5986 + public Map<String, Object> lateAdjust(String idx, float minute) {
  5987 + Map<String, Object> rs = new HashMap<>();
  5988 + try {
  5989 + int count = 0;
  5990 + List<ScheduleRealInfo> list = new ArrayList<>();
  5991 + List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
  5992 +
  5993 + ScheduleRealInfo sch;
  5994 + for (String id : ids) {
  5995 + sch = dayOfSchedule.get(Long.parseLong(id));
  5996 + if (sch != null && sch.getStatus() == 0) {
  5997 + if (minute > 0) {
  5998 + sch.setLateMinute(minute);
  5999 + } else if (minute == 0) {
  6000 + LateAdjustHandle.remove(sch);
  6001 + }
  6002 + count++;
  6003 + list.add(sch);
  6004 + }
  6005 + }
  6006 +
  6007 + rs.put("status", ResponseCode.SUCCESS);
  6008 + rs.put("count", count);
  6009 + rs.put("ts", list);
  6010 + } catch (Exception e) {
  6011 + logger.error("", e);
  6012 + rs.put("status", ResponseCode.ERROR);
  6013 + rs.put("msg", e.getMessage());
  6014 + }
  6015 +
  6016 + return rs;
  6017 + }
  6018 +
  6019 + @Override
  6020 + public List<ScheduleRealInfo> allLate2(String idx) {
  6021 + List<ScheduleRealInfo> rs = new ArrayList<>();
  6022 + List<String> ids = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(idx);
  6023 +
  6024 + Collection<ScheduleRealInfo> all = LateAdjustHandle.allLateSch();
  6025 + for (ScheduleRealInfo sch : all) {
  6026 + if (ids.indexOf(sch.getXlBm()) != -1) {
  6027 + rs.add(sch);
  6028 + }
  6029 + }
  6030 + return rs;
  6031 + }
  6032 +
  6033 +
  6034 + @Override
  6035 + public List<Map<String, Object>> mileageReport(String gsdm,
  6036 + String fgsdm, String line, String date, String date2) {
  6037 +
  6038 + String sql = "select * from calc_mileage where 1=1 ";
  6039 + if (!line.equals(" ")) {
  6040 + sql = sql + " and line_code='" + line + "' ";
  6041 + }
  6042 + sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
  6043 + if (!gsdm.equals(" ")) {
  6044 + sql = sql + " and company_id=" + gsdm;
  6045 + }
  6046 + if (!gsdm.equals(" ")) {
  6047 + sql = sql + " and sub_company_id=" + fgsdm;
  6048 + }
  6049 + sql = sql + " order by line_code";
  6050 + List<MileageReport> list = jdbcTemplate.query(sql,
  6051 + new RowMapper<MileageReport>() {
  6052 + @Override
  6053 + public MileageReport mapRow(ResultSet rs, int rowNum) throws SQLException {
  6054 + MileageReport mr = new MileageReport();
  6055 + mr.setCompanyName(rs.getString("company_name"));
  6056 + mr.setSubCompanyName(rs.getString("sub_company_name"));
  6057 + mr.setLineName(rs.getString("line_name"));
  6058 + mr.setSjyygl(rs.getDouble("sjyygl"));
  6059 + mr.setSjksgl(rs.getDouble("sjksgl"));
  6060 + mr.setZgl(rs.getDouble("zyygl"));
  6061 + mr.setZddfgl(rs.getDouble("zddfgl"));
  6062 + mr.setSddfgl(rs.getDouble("sddfgl"));
  6063 + mr.setWqwxhgl(rs.getDouble("wqwxhgl"));
  6064 + mr.setBfwxhgl(rs.getDouble("bfwxhgl"));
  6065 + mr.setPygl(rs.getDouble("pygl"));
  6066 + mr.setLjgl(rs.getDouble("ljgl"));
  6067 + mr.setZrwgl(rs.getDouble("zrwgl"));
  6068 + mr.setOther(rs.getString("other"));
  6069 + return mr;
  6070 + }
  6071 + });
  6072 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  6073 + double sjyygl = 0.0;
  6074 + double sjksgl = 0.0;
  6075 + double zgl = 0.0;
  6076 + double sddfgl = 0.0;
  6077 + double zddfgl = 0.0;
  6078 + double wqwxhgl = 0.0;
  6079 + double bfwxhgl = 0.0;
  6080 + double pygl = 0.0;
  6081 + double ljgl = 0.0;
  6082 + double zrwgl = 0.0;
  6083 + for (MileageReport mr : list) {
  6084 + Map<String, Object> resMap = new HashMap<String, Object>();
  6085 + resMap.put("gsName", mr.getCompanyName());
  6086 + resMap.put("fgsName", mr.getSubCompanyName());
  6087 + resMap.put("xlName", mr.getLineName());
  6088 + resMap.put("sjyygl", mr.getSjyygl());
  6089 + resMap.put("sjksgl", mr.getSjksgl());
  6090 + resMap.put("zgl", mr.getZgl());
  6091 + resMap.put("sddfgl", mr.getSddfgl());
  6092 + resMap.put("zddfgl", mr.getZddfgl());
  6093 + resMap.put("wqwxhgl", mr.getWqwxhgl());
  6094 + resMap.put("bfwxhgl", mr.getBfwxhgl());
  6095 + resMap.put("pygl", mr.getPygl());
  6096 + resMap.put("ljgl", mr.getLjgl());
  6097 + resMap.put("zrwgl", mr.getZrwgl());
  6098 + resMap.put("other", mr.getOther());
  6099 + lMap.add(resMap);
  6100 + sjyygl = Arith.add(sjyygl, mr.getSjyygl());
  6101 + sjksgl = Arith.add(sjksgl, mr.getSjksgl());
  6102 + zgl = Arith.add(zgl, mr.getZgl());
  6103 + sddfgl = Arith.add(sddfgl, mr.getSddfgl());
  6104 + zddfgl = Arith.add(zddfgl, mr.getZddfgl());
  6105 + wqwxhgl = Arith.add(wqwxhgl, mr.getWqwxhgl());
  6106 + bfwxhgl = Arith.add(bfwxhgl, mr.getBfwxhgl());
  6107 + pygl = Arith.add(pygl, mr.getPygl());
  6108 + ljgl = Arith.add(ljgl, mr.getLjgl());
  6109 + zrwgl = Arith.add(zrwgl, mr.getZrwgl());
  6110 + }
  6111 + Map<String, Object> resMap = new HashMap<String, Object>();
  6112 + resMap.put("xlName", "合计");
  6113 + resMap.put("sjyygl", sjyygl);
  6114 + resMap.put("sjksgl", sjksgl);
  6115 + resMap.put("zgl", zgl);
  6116 + resMap.put("sddfgl", sddfgl);
  6117 + resMap.put("zddfgl", zddfgl);
  6118 + resMap.put("wqwxhgl", wqwxhgl);
  6119 + resMap.put("bfwxhgl", bfwxhgl);
  6120 + resMap.put("pygl", pygl);
  6121 + resMap.put("ljgl", ljgl);
  6122 + resMap.put("zrwgl", zrwgl);
  6123 + resMap.put("other", null);
  6124 + lMap.add(resMap);
  6125 + return lMap;
  6126 + }
  6127 +
  6128 + @Override
  6129 + public List<Map<String, Object>> scheduleCorrectionReport(String gsdm,
  6130 + String fgsdm, String line, String date, String date2) {
  6131 +
  6132 + String sql = "select * from calc_schedule where 1=1 ";
  6133 + if (!line.equals(" ")) {
  6134 + sql = sql + " and line_code='" + line + "' ";
  6135 + }
  6136 + sql = sql + " and DATE_FORMAT(rq,'%Y-%m-%d') between '" + date + "' and '" + date2 + "'";
  6137 + if (!gsdm.equals(" ")) {
  6138 + sql = sql + " and company_id=" + gsdm;
  6139 + }
  6140 + if (!gsdm.equals(" ")) {
  6141 + sql = sql + " and sub_company_id=" + fgsdm;
  6142 + }
  6143 + sql = sql + " order by line_code";
  6144 + List<ScheduleCorrectionReport> list = jdbcTemplate.query(sql,
  6145 + new RowMapper<ScheduleCorrectionReport>() {
  6146 + @Override
  6147 + public ScheduleCorrectionReport mapRow(ResultSet rs, int rowNum) throws SQLException {
  6148 + ScheduleCorrectionReport sReport = new ScheduleCorrectionReport();
  6149 + sReport.setCompanyName(rs.getString("company_name"));
  6150 + sReport.setSubCompanyName(rs.getString("sub_company_name"));
  6151 + sReport.setLineName(rs.getString("line_name"));
  6152 + sReport.setSjyybc(rs.getInt("sjyybc"));
  6153 + sReport.setSjksbc(rs.getInt("sjksbc"));
  6154 + sReport.setZbc(rs.getInt("zyybc"));
  6155 + sReport.setZddfbc(rs.getInt("zddfbc"));
  6156 + sReport.setSddfbc(rs.getInt("sddfbc"));
  6157 + sReport.setWqwxhbc(rs.getInt("wqwxhbc"));
  6158 + sReport.setBfwxhbc(rs.getInt("bfwxhbc"));
  6159 + sReport.setPybc(rs.getInt("pybc"));
  6160 + sReport.setLjbc(rs.getInt("ljbc"));
  6161 + sReport.setZrwbc(rs.getInt("zrwbc"));
  6162 + sReport.setOther(rs.getString("other"));
  6163 + return sReport;
  6164 + }
  6165 + });
  6166 + List<Map<String, Object>> lMap = new ArrayList<Map<String, Object>>();
  6167 + int sjyybc = 0;
  6168 + int sjksbc = 0;
  6169 + int zbc = 0;
  6170 + int sddfbc = 0;
  6171 + int zddfbc = 0;
  6172 + int wqwxhbc = 0;
  6173 + int bfwxhbc = 0;
  6174 + int pybc = 0;
  6175 + int ljbc = 0;
  6176 + int zrwbc = 0;
  6177 + for (ScheduleCorrectionReport sReport : list) {
  6178 + Map<String, Object> resMap = new HashMap<String, Object>();
  6179 + resMap.put("gsName", sReport.getCompanyName());
  6180 + resMap.put("fgsName", sReport.getSubCompanyName());
  6181 + resMap.put("xlName", sReport.getLineName());
  6182 + resMap.put("sjyybc", sReport.getSjyybc());
  6183 + resMap.put("sjksbc", sReport.getSjksbc());
  6184 + resMap.put("zbc", sReport.getZbc());
  6185 + resMap.put("sddfbc", sReport.getSddfbc());
  6186 + resMap.put("zddfbc", sReport.getZddfbc());
  6187 + resMap.put("wqwxhbc", sReport.getWqwxhbc());
  6188 + resMap.put("bfwxhbc", sReport.getBfwxhbc());
  6189 + resMap.put("pybc", sReport.getPybc());
  6190 + resMap.put("ljbc", sReport.getLjbc());
  6191 + resMap.put("zrwbc", sReport.getZrwbc());
  6192 + resMap.put("other", sReport.getOther());
  6193 + lMap.add(resMap);
  6194 + sjyybc = sjyybc + sReport.getSjyybc();
  6195 + sjksbc = sjksbc + sReport.getSjksbc();
  6196 + zbc = zbc + sReport.getZbc();
  6197 + sddfbc = sddfbc + sReport.getSddfbc();
  6198 + zddfbc = zddfbc + sReport.getZddfbc();
  6199 + wqwxhbc = wqwxhbc + sReport.getWqwxhbc();
  6200 + bfwxhbc = bfwxhbc + sReport.getBfwxhbc();
  6201 + pybc = pybc + sReport.getPybc();
  6202 + ljbc = ljbc + sReport.getLjbc();
  6203 + zrwbc = zrwbc + sReport.getZrwbc();
  6204 + }
  6205 + Map<String, Object> resMap = new HashMap<String, Object>();
  6206 + resMap.put("xlName", "合计");
  6207 + resMap.put("sjyybc", sjyybc);
  6208 + resMap.put("sjksbc", sjksbc);
  6209 + resMap.put("zbc", zbc);
  6210 + resMap.put("sddfbc", sddfbc);
  6211 + resMap.put("zddfbc", zddfbc);
  6212 + resMap.put("wqwxhbc", wqwxhbc);
  6213 + resMap.put("bfwxhbc", bfwxhbc);
  6214 + resMap.put("pybc", pybc);
  6215 + resMap.put("ljbc", ljbc);
  6216 + resMap.put("zrwbc", zrwbc);
  6217 + resMap.put("other", null);
  6218 + lMap.add(resMap);
  6219 + return lMap;
  6220 + }
  6221 +
  6222 + @Override
  6223 + public Integer isCircleQdz(String clzbh, String sdr, String xlbm, String qdzCode) {
  6224 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  6225 + String time =sdf.format(Long.parseLong(sdr));
  6226 +
  6227 + Long num=scheduleRealInfoRepository.isCircleQdz(clzbh, time, xlbm, qdzCode);
  6228 + Integer num2=num==0L?0:1;
  6229 + return num2;
  6230 + }
  6231 +
  6232 + @SuppressWarnings("unchecked")
  6233 + private static Map<String, Object> request(String url) {
  6234 + Map<String, Object> res = new HashMap<String, Object>();
  6235 + res.put("status", ResponseCode.SUCCESS);
  6236 + InputStream in = null;
  6237 + HttpURLConnection con = null;
  6238 + try {
  6239 + con = (HttpURLConnection)new URL(url).openConnection();
  6240 + con.setRequestMethod("POST");
  6241 + con.setRequestProperty("keep-alive", "true");
  6242 + con.setRequestProperty("accept", "application/json");
  6243 + con.setRequestProperty("content-type", "application/json");
  6244 + con.setDoInput(true);
  6245 + con.setReadTimeout(2500);
  6246 + con.setConnectTimeout(2500);
  6247 +
  6248 + con.connect();
  6249 + if (con.getResponseCode() == 200) {
  6250 + in = con.getInputStream();
  6251 + ByteArrayOutputStream bout = new ByteArrayOutputStream();
  6252 + IOUtils.copy(in, bout); bout.close();
  6253 + Map<String, Object> response = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
  6254 + if (!"报修成功".equals(response.get("msg"))) {
  6255 + res.put("status", ResponseCode.ERROR);
  6256 + res.putAll(response);
  6257 + }
  6258 + } else {
  6259 + res.put("status", ResponseCode.ERROR);
  6260 + res.put("msg", "调用上报接口异常");
  6261 + }
  6262 + } catch (IOException e) {
  6263 + // TODO Auto-generated catch block
  6264 + res.put("status", ResponseCode.ERROR);
  6265 + res.put("msg", "调用上报接口异常");
  6266 + } finally {
  6267 + try {
  6268 + if (in != null) in.close();
  6269 + if (con != null) con.disconnect();
  6270 + } catch (IOException e) {
  6271 + // TODO Auto-generated catch block
  6272 + e.printStackTrace();
  6273 + }
  6274 + }
  6275 +
  6276 + return res;
  6277 + }
  6278 +
  6279 + /**
  6280 + ** 维修记录上报
  6281 + * @param param 参数信息
  6282 + * @param isActive 主/被动上报
  6283 + */
  6284 + @Override
  6285 + @Transactional
  6286 + public Map<String, Object> repairReport(Map<String, Object> param, boolean isActive) {
  6287 + Map<String, Object> res = new HashMap<String, Object>();
  6288 + res.put("status", ResponseCode.SUCCESS);
  6289 + // 获取实际排班信息
  6290 + Long id = Long.parseLong((String)param.get("id"));
  6291 + ScheduleRealInfo sch = dayOfSchedule.get(id);
  6292 +
  6293 + if (null == sch) {
  6294 + res.put("status", ResponseCode.ERROR);
  6295 + res.put("msg", "不存在的班次!");
  6296 +
  6297 + return res;
  6298 + }
  6299 +
  6300 + int reportState = -1;
  6301 + SysUser user = SecurityUtils.getCurrentUser();
  6302 + String reportUser = user.getUserName(), reportName = user.getName(), incode = (String)param.get("clZbh"), reportTypes = (String)param.get("reportTypes"), repairTypes = reportType2RepairType(reportTypes);
  6303 + // 分公司保存格式 分公司编码_公司编码
  6304 + String val = BasicData.nbbm2FgsCompanyCodeMap.get(incode);
  6305 + String[] arr = val.split("_");
  6306 + StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
  6307 + url.append("?nbbm=").append(incode).append("&bxy=").append(reportUser).append("&bxbm=").append(repairTypes).append("&fgs=").append(arr[0]);
  6308 +
  6309 + int count = repairReportRepository.repairReportBySch(id, isActive ? 1 : 0);
  6310 + if (count > 0) return res;
  6311 + RepairReport lrr = dayOfSchedule.getLastestRepairReport(incode);
  6312 + // 非主动上报并且无上报记录或上次已上报 则不用上报
  6313 + if (!isActive && (lrr == null || lrr.getReportState() != 0)) {
  6314 + reportState = 0;
  6315 + } else {
  6316 + res = request(url.toString());
  6317 + if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
  6318 + }
  6319 + // 持久化此次上报记录
  6320 + RepairReport rr = new RepairReport();
  6321 + rr.setLineId(sch.getXlBm());
  6322 + rr.setLineName(sch.getXlName());
  6323 + rr.setReportUser(reportUser);
  6324 + rr.setReportName(reportName);
  6325 + rr.setSchId(id);
  6326 + rr.setIncode(incode);
  6327 + rr.setDepartureTime(sch.getFcsj());
  6328 + rr.setRepairType(repairTypes);
  6329 + rr.setReportType(reportTypes);
  6330 + rr.setReportDate(new Date());
  6331 + rr.setReportState(reportState);
  6332 + rr.setReportMode(isActive ? 1 : 0);
  6333 + rr = repairReportRepository.save(rr);
  6334 + dayOfSchedule.setLastestRepairReport(rr);
  6335 + // 如果上报失败,放到重传队列
  6336 + if (rr.getReportState() == -1) queue.add(rr);
  6337 +
  6338 + return res;
  6339 + }
  6340 +
  6341 + private void repairReport(RepairReport rr) {
  6342 + int reportState = -1;
  6343 + // 分公司保存格式 分公司编码_公司编码
  6344 + String val = BasicData.nbbm2FgsCompanyCodeMap.get(rr.getIncode());
  6345 + String[] arr = val.split("_");
  6346 + StringBuilder url = new StringBuilder(ConfigUtil.get("http.report.url." + arr[1]));
  6347 + url.append("?nbbm=").append(rr.getIncode()).append("&bxy=").append(rr.getReportUser()).append("&bxbm=").append(rr.getRepairType()).append("&fgs=").append(arr[0]);
  6348 +
  6349 + Map<String, Object> res = request(url.toString());
  6350 + if (ResponseCode.SUCCESS.equals(res.get("status"))) reportState = 1;
  6351 + if (reportState == 1) {
  6352 + rr.setReportState(1);
  6353 + repairReportRepository.save(rr);
  6354 + }
  6355 + }
  6356 +
  6357 + /**
  6358 + ** 业务类型转报修类型
  6359 + */
  6360 + private String reportType2RepairType(String reportType) {
  6361 + String[] reportTypes = reportType.split(";");
  6362 + List<String> repairTypes = new ArrayList<>();
  6363 + for (String rt : reportTypes) {
  6364 + repairTypes.add(report2repair.get(rt));
  6365 + }
  6366 +
  6367 + return StringUtils.join(repairTypes, ";");
  6368 + }
  6369 +
  6370 + @Override
  6371 + public List<RepairReport> repairReportList(String lineId, String date, String incode, String type) {
  6372 + List<RepairReport> result = new ArrayList<RepairReport>();
  6373 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  6374 +
  6375 + Date start = null, end = null;
  6376 + if (date.length() > 0) {
  6377 + try {
  6378 + start = sdf.parse(date + " 00:00:00");
  6379 + end = sdf.parse(date + " 23:59:59");
  6380 + } catch (ParseException e) {
  6381 + // TODO Auto-generated catch block
  6382 + e.printStackTrace();
  6383 + }
  6384 +
  6385 + }
  6386 +
  6387 + result = repairReportRepository.repairReportList(lineId, start, end, incode);
  6388 + Map<String, Object> dMap=new HashMap<>();
  6389 + dMap.put("dGroup_eq", "repairtype");
  6390 + Map<String, String> code2name = new HashMap<String, String>();
  6391 + for (Dictionary dic : dictionaryService.list(dMap)) {
  6392 + code2name.put(dic.getdCode(), dic.getdName());
  6393 + }
  6394 + for (RepairReport rr : result) {
  6395 + String reportType = rr.getReportType();
  6396 + String[] types = reportType.split(";");
  6397 + StringBuilder sb = new StringBuilder();
  6398 +
  6399 + for (String t : types) {
  6400 + sb.append(code2name.get(t)).append(";");
  6401 + }
  6402 +
  6403 + rr.setRepairType(sb.toString());
  6404 + rr.setReportDateStr(sdf.format(rr.getReportDate()));
  6405 + switch (rr.getReportState()) {
  6406 + case 0:
  6407 + rr.setReportStateStr("不报");
  6408 + break;
  6409 + case 1:
  6410 + rr.setReportStateStr("上报成功");
  6411 + break;
  6412 + case -1:
  6413 + rr.setReportStateStr("上报失败");
  6414 + break;
  6415 + default:
  6416 + break;
  6417 + }
  6418 + }
  6419 +
  6420 + if ("export".equals(type)) {
  6421 + String lineName = BasicData.lineCode2NameMap.get(lineId);
  6422 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  6423 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  6424 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  6425 + Map<String, Object> m = new HashMap<String, Object>();
  6426 + ReportUtils ee = new ReportUtils();
  6427 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  6428 + for (int i = 0; i < result.size(); i++) {
  6429 + Map<String, Object> map = new HashMap<String, Object>();
  6430 + RepairReport rr = result.get(i);
  6431 + map.put("row", i + 1);
  6432 + map.put("lineId", rr.getLineName());
  6433 + map.put("incode", rr.getIncode());
  6434 + map.put("departureTime", rr.getDepartureTime());
  6435 + map.put("reportUser", rr.getReportUser());
  6436 + map.put("reportDateStr", rr.getReportDate());
  6437 + map.put("repairType", rr.getRepairType());
  6438 + map.put("reportStateStr", rr.getReportStateStr());
  6439 + newList.add(map);
  6440 + }
  6441 + try {
  6442 + listI.add(newList.iterator());
  6443 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  6444 + ee.excelReplace(listI, new Object[]{m}, path + "mould/repairReport.xls",
  6445 + path + "export/" + sdfSimple.format(sdfMonth.parse(date))
  6446 + + "-" + lineName + "-维修上报记录.xls");
  6447 + } catch (Exception e) {
  6448 + // TODO: handle exception
  6449 + e.printStackTrace();
  6450 + }
  6451 + }
  6452 +
  6453 + return result;
  6454 + }
  6455 +
  6456 + @Override
  6457 + public Map<String, String> getLevelsByLines(List<String> lines) {
  6458 + Map<String, String> result = new HashMap<String, String>(), currSchDate = dayOfSchedule.getCurrSchDate();
  6459 + for (String line : lines) {
  6460 + String level = BasicData.lineDate2Level.get(line + "_" + currSchDate.get(line));
  6461 + result.put(line, level == null ? "" : level);
  6462 + }
  6463 +
  6464 + return result;
  6465 + }
  6466 +
  6467 +
  6468 + @Override
  6469 + public void destroy() throws Exception {
  6470 + // TODO Auto-generated method stub
  6471 + exec.shutdown();
  6472 + }
  6473 +
  6474 +
  6475 + @Override
  6476 + public void afterPropertiesSet() throws Exception {
  6477 + // TODO Auto-generated method stub
  6478 + // 维修上报重发调度
  6479 + exec.scheduleAtFixedRate(new Runnable() {
  6480 +
  6481 + @Override
  6482 + public void run() {
  6483 + // TODO Auto-generated method stub
  6484 + try {
  6485 + Iterator<RepairReport> it = queue.iterator();
  6486 + while (it.hasNext()) {
  6487 + RepairReport rr = it.next();
  6488 + repairReport(rr);
  6489 + if (rr.getReportState() == 1 || System.currentTimeMillis() - rr.getReportDate().getTime() > 86400000) queue.remove(rr);
  6490 + }
  6491 + } catch (Exception e) {
  6492 + logger.error("维修上报重发错误", e);
  6493 + }
  6494 + }
  6495 + }, 30, 30, TimeUnit.MINUTES);
  6496 + }
  6497 +}
  6498 +
  6499 +class AccountMap implements Comparator<Map<String, Object>> {
  6500 + @Override
  6501 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6502 + // TODO Auto-generated method stub
  6503 + return o1.get("clZbh").toString().compareTo(o2.get("clZbh").toString());
  6504 + }
  6505 +}
  6506 +
  6507 +class AccountMap2 implements Comparator<Map<String, Object>> {
  6508 + @Override
  6509 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6510 + // TODO Auto-generated method stub
  6511 + return o2.get("clZbh").toString().compareTo(o1.get("clZbh").toString());
  6512 + }
  6513 +}
  6514 +
  6515 +class AccountXlbm implements Comparator<Map<String, Object>> {
  6516 + @Override
  6517 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  6518 + // TODO Auto-generated method stub
  6519 +// PinyinHelper.convertToPinyinString(ppy.getName(),
  6520 +// "" , PinyinFormat.WITHOUT_TONE)
  6521 + return o1.get("xlNamePy").toString().compareTo(
  6522 + o2.get("xlNamePy").toString());
  6523 + }
  6524 +}
  6525 +
  6526 +class compareLpFcsjType implements Comparator<ScheduleRealInfo> {
  6527 + @Override
  6528 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6529 + // TODO Auto-generated method stub
  6530 + return (o1.getLpName()+o1.getFcsjT() + o1.getRemark()).compareTo(o2.getLpName()+o2.getFcsjT() + o2.getRemark());
  6531 + }
  6532 +
  6533 +}
  6534 +
  6535 +class compareDirLpFcsjType implements Comparator<ScheduleRealInfo> {
  6536 + @Override
  6537 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6538 + // TODO Auto-generated method stub
  6539 + return (o1.getXlDir()+o1.getFcsjT() + o1.getRemark()+o1.getLpName()).compareTo(o2.getXlDir()+o2.getFcsjT() + o2.getRemark()+o2.getLpName());
  6540 + }
  6541 +
  6542 +}
  6543 +class compareFcsjType implements Comparator<ScheduleRealInfo> {
  6544 + @Override
  6545 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  6546 + // TODO Auto-generated method stub
  6547 + return (o1.getFcsjT() + o1.getRemark()).compareTo(o2.getFcsjT() + o2.getRemark());
  6548 + }
  6549 +
  6550 +}
... ...
src/main/resources/static/pages/forms/statement/waybill.html
1   -<style type="text/css">
2   - .table-bordered {
3   - border: 1px solid; }
4   - .table-bordered > thead > tr > th,
5   - .table-bordered > thead > tr > td,
6   - .table-bordered > tbody > tr > th,
7   - .table-bordered > tbody > tr > td,
8   - .table-bordered > tfoot > tr > th,
9   - .table-bordered > tfoot > tr > td {
10   - border: 1px solid; }
11   - .table-bordered > thead > tr > th,
12   - .table-bordered > thead > tr > td {
13   - border-bottom-width: 2px; }
14   -
15   - .table > tbody + tbody {
16   - border-top: 1px solid; }
17   -</style>
18   -
19   -<div class="page-head">
20   - <div class="page-title">
21   - <h1>行车路单</h1>
22   - </div>
23   -</div>
24   -
25   -<div class="row">
26   - <div class="col-md-12">
27   - <div class="portlet light porttlet-fit bordered">
28   - <div class="portlet-title">
29   - <form class="form-inline" action="">
30   - <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_xcld">
31   - <span class="item-label" style="width: 80px;">公司: </span>
32   - <select class="form-control" name="company" id="gsdmXcld" style="width: 180px;"></select>
33   - </div>
34   - <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_xcld">
35   - <span class="item-label" style="width: 80px;">分公司: </span>
36   - <select class="form-control" name="subCompany" id="fgsdmXcld" style="width: 180px;"></select>
37   - </div>
38   - <div style="margin-top: 2px"></div>
39   - <div style="display: inline-block; margin-left: 33px;">
40   - <span class="item-label" style="width: 80px;">线路: </span>
41   - <select class="form-control" name="line" id="line" style="width: 180px;"></select>
42   - </div>
43   - <div style="display: inline-block;margin-left: 24px;">
44   - <span class="item-label" style="width: 80px;">&nbsp;时间: </span>
45   - <input class="form-control" type="text" id="date" style="width: 180px;"/>
46   - </div>
47   - <div class="form-group" style="display: inline-block;margin-left: 15px;">
48   - <input class="btn btn-default" type="button" id="query" value="查询"/>
49   - <input class="btn btn-default" type="button" id="export" value="导出"/>
50   - <input class="btn btn-default" type="button" id="print" value="打印"/>
51   - <input class="btn btn-default" type="button" id="exportMore" value="批量导出"/>
52   - </div>
53   - </form>
54   - </div>
55   - <div class="portlet-body">
56   - <div class="row">
57   - <div class="col-md-3">
58   - <div class="" id="left_height" style="margin-top: 10px;overflow:auto;">
59   - <table class="table table-bordered table-hover table-checkable pre-scrollable" id="info">
60   - <thead>
61   - <tr class="hidden">
62   - <th class="rypx" style="cursor:pointer ">人员</th>
63   - <th class="zbhpx" style="cursor:pointer ">自编号</th>
64   - <th class="lppx" style="cursor:pointer ">路牌</th>
65   - </tr>
66   - </thead>
67   - <tbody>
68   -
69   - </tbody>
70   - </table>
71   - </div>
72   - </div>
73   - <div class="col-md-9" id="printArea">
74   - <div class="table-container" id="xcld_height" style="margin-top: 10px;overflow:auto;min-width: 906px;">
75   - <table class="table table-bordered table-checkable" id="forms">
76   - <tbody class="ludan_1">
77   -
78   - </tbody>
79   - <tbody class="ludan_2">
80   -
81   - </tbody>
82   - <tbody class="ludan_3">
83   -
84   - </tbody>
85   - <tbody class="ludan_4">
86   -
87   - </tbody>
88   - </table>
89   - </div>
90   - </div>
91   - </div>
92   - </div>
93   - </div>
94   - </div>
95   -</div>
96   -
97   -<script>
98   - $(function(){
99   - var fage=false;
100   - // 关闭左侧栏
101   - if (!$('body').hasClass('page-sidebar-closed'))
102   - $('.menu-toggler.sidebar-toggler').click();
103   -
104   - $("#date").datetimepicker({
105   - format : 'YYYY-MM-DD',
106   - locale : 'zh-cn'
107   - });
108   -
109   - $("#left_height").height($(window).height()-100);
110   - $("#xcld_height").height($(window).height()-100);
111   -
112   - var d = new Date();
113   - var year = d.getFullYear();
114   - var month = d.getMonth() + 1;
115   - var day = d.getDate();
116   - if(month < 10)
117   - month = "0" + month;
118   - if(day < 10)
119   - day = "0" + day;
120   - $("#date").val(year + "-" + month + "-" + day);
121   -
122   - var obj = [];
123   - var xlList;
124   - $.get('/report/lineList',function(result){
125   - xlList=result;
126   -
127   - $.get('/user/companyData', function(result){
128   - obj = result;
129   - console.log(obj);
130   - var options = '';
131   - for(var i = 0; i < obj.length; i++){
132   - options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
133   - }
134   -
135   - if(obj.length ==0){
136   - $("#gsdmDiv_xcld").css('display','none');
137   - }else if(obj.length ==1){
138   - $("#gsdmDiv_xcld").css('display','none');
139   - if(obj[0].children.length == 1 || obj[0].children.length ==0)
140   - $('#fgsdmDiv_xcld').css('display','none');
141   - }
142   - $('#gsdmXcld').html(options);
143   -
144   - updateCompany();
145   - });
146   - });
147   -
148   - $("#gsdmXcld").on("change",updateCompany);
149   - function updateCompany(){
150   - var company = $('#gsdmXcld').val();
151   - var options = '';
152   - for(var i = 0; i < obj.length; i++){
153   - if(obj[i].companyCode == company){
154   - var children = obj[i].children;
155   - for(var j = 0; j < children.length; j++){
156   - options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
157   - }
158   - }
159   - }
160   - $('#fgsdmXcld').html(options);
161   -// initXl();
162   - }
163   -
164   -
165   -
166   -
167   -// $("#fgsdmXcld").on("change",initXl);
168   - /* function initXl(){
169   - var data=[];
170   - if(fage){
171   - $("#line").select2("destroy").html('');
172   - }
173   - var fgs=$('#fgsdmXcld').val();
174   - var gs=$('#gsdmXcld').val();
175   - for(var i=0;i<xlList.length;i++){
176   - if(gs!=""){
177   - if(fgs!=""){
178   - if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
179   - data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
180   - }
181   - }else{
182   - if(xlList[i]["gsbm"]==gs){
183   - data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
184   - }
185   - }
186   - }
187   - }
188   - initPinYinSelect2('#line',data,'');
189   - fage=true;
190   - } */
191   -
192   - var tempData = {};
193   - $.get('/report/lineList',function(xlList){
194   - var data = [];
195   -// data.push({id: " ", text: "全部线路"});
196   - $.get('/user/companyData', function(result){
197   - for(var i = 0; i < result.length; i++){
198   - var companyCode = result[i].companyCode;
199   - var children = result[i].children;
200   - for(var j = 0; j < children.length; j++){
201   - var code = children[j].code;
202   - for(var k=0;k < xlList.length;k++ ){
203   - if(xlList[k]["fgsbm"]==code && xlList[k]["gsbm"]==companyCode){
204   - data.push({id: xlList[k]["xlbm"], text: xlList[k]["xlname"]});
205   - tempData[xlList[k]["xlbm"]] = companyCode+":"+code;
206   - }
207   - }
208   - }
209   - }
210   - initPinYinSelect2('#line',data,'');
211   -
212   - });
213   - });
214   -
215   - $("#line").on("change", function(){
216   - if($("#line").val() == " "){
217   - $("#gsdmXcld").attr("disabled", false);
218   - $("#fgsdmXcld").attr("disabled", false);
219   - } else {
220   - var temp = tempData[$("#line").val()].split(":");
221   - $("#gsdmXcld").val(temp[0]);
222   - updateCompany();
223   - $("#fgsdmXcld").val(temp[1]);
224   - $("#gsdmXcld").attr("disabled", true);
225   - $("#fgsdmXcld").attr("disabled", true);
226   - }
227   - });
228   - var date = '';
229   - var line = '';
230   - var lineName;
231   - $("#query").on("click",function(){
232   - $("#left_height").height($(window).height()-100);
233   - line = $("#line").val();
234   - date = $("#date").val();
235   - lineName = $('#line option:selected').text();
236   - $(".hidden").removeClass("hidden");
237   - $get('/realSchedule/queryUserInfo',{line:line,date:date,state:2},function(result){
238   - // 把数据填充到模版中
239   - var tbodyHtml = template('list_info',{list:result});
240   - // 把渲染好的模版html文本追加到表格中
241   - $('#info tbody').html(tbodyHtml);
242   - });
243   - });
244   - var type="desc";
245   - $(".rypx").on("click",function(){
246   - line = $("#line").val();
247   - date = $("#date").val();
248   - $(".hidden").removeClass("hidden");
249   - $get('/realSchedule/queryUserInfoPx',{line:line,date:date,state:"jGh",type:type},function(result){
250   - if(type=="desc"){
251   - type ="asc";
252   - }else{
253   - type ="desc";
254   - }
255   - // 把数据填充到模版中
256   - var tbodyHtml = template('list_info_px',{list:result});
257   - // 把渲染好的模版html文本追加到表格中
258   - $('#info tbody').html(tbodyHtml);
259   - });
260   - })
261   -
262   - $(".zbhpx").on("click",function(){
263   - line = $("#line").val();
264   - date = $("#date").val();
265   - $(".hidden").removeClass("hidden");
266   - $get('/realSchedule/queryUserInfoPx',{line:line,date:date,state:"clZbh",type:type},function(result){
267   - if(type=="desc"){
268   - type ="asc";
269   - }else{
270   - type ="desc";
271   - }
272   - // 把数据填充到模版中
273   - var tbodyHtml = template('list_info_px',{list:result});
274   - // 把渲染好的模版html文本追加到表格中
275   - $('#info tbody').html(tbodyHtml);
276   - });
277   - })
278   -
279   - $(".lppx").on("click",function(){
280   - line = $("#line").val();
281   - date = $("#date").val();
282   - $(".hidden").removeClass("hidden");
283   - $get('/realSchedule/queryUserInfoPx',{line:line,date:date,state:"lpName",type:type},function(result){
284   - if(type=="desc"){
285   - type ="asc";
286   - }else{
287   - type ="desc";
288   - }
289   - // 把数据填充到模版中
290   - var tbodyHtml = template('list_info_px',{list:result});
291   - // 把渲染好的模版html文本追加到表格中
292   - $('#info tbody').html(tbodyHtml);
293   - });
294   - })
295   -
296   - var params = new Array();
297   - var jName = '';
298   - var jGh = '';
299   - $("#info tbody").on("click","tr",function(){
300   - if($(this).children().size() < 2){
301   - return;
302   - }
303   - $("#xcld_height").height($(window).height()-100);
304   - $(this).children().each(function(index){
305   - params[index] = $(this).text();
306   - });
307   - jName = params[0].split("\\")[0];
308   - jGh = params[0].split("\\")[1];
309   - var id = params[3];
310   - var obj = $(this);
311   - $get('/realSchedule/MapById',{id:id},function(result){
312   - result.scheduleDate = moment(result.scheduleDate).format("YYYY/MM/DD");
313   - var ludan_1 = template('ludan_1',result);
314   - // 把渲染好的模版html文本追加到表格中
315   - $('#forms .ludan_1').html(ludan_1);
316   - });
317   - $get('/realSchedule/queryListWaybill',{jGh:jGh,clZbh:params[1],lpName:params[2],date:date,line:line},function(result){
318   - getTime(result);
319   - /* $get('/realSchedule/MapById',{id:result[0].id},function(result){
320   - result.scheduleDate = moment(result.scheduleDate).format("YYYY/MM/DD");
321   - var ludan_1 = template('ludan_1',result);
322   - // 把渲染好的模版html文本追加到表格中
323   - $('#forms .ludan_1').html(ludan_1);
324   - }); */
325   - var ludan_2 = template('ludan_2',{list:result});
326   - // 把渲染好的模版html文本追加到表格中
327   - $('#forms .ludan_2').html(ludan_2);
328   - });
329   - $get('/realSchedule/findKMBC',{jGh:jGh,clZbh:params[1],lpName:params[2],date:date,line:line},function(result){
330   - var ludan_3 = template('ludan_3',result);
331   - $('#forms .ludan_3').html(ludan_3);
332   - $("#info tbody tr").css('background-color', '');
333   - obj.css('background-color', '#99CCFF');
334   - });
335   -
336   -
337   - });
338   -
339   - $("#export").on("click",function(){
340   - if(params.length < 1){
341   - return;
342   - }
343   - var i = layer.load(2);
344   - $get('/realSchedule/exportWaybill',{jName:jName,jGh:jGh,clZbh:params[1],lpName:params[2],date:date,line:line},function(result){
345   - var fileName=date+"-"+jName+"-"+params[1]+"-"+params[2]+"-行车路单";
346   - window.open("/downloadFile/download?fileName="+encodeURIComponent(fileName));
347   - layer.close(i);
348   - });
349   - });
350   -
351   - $("#print").click(function(){
352   - $("#printArea").printArea();
353   - });
354   -
355   - $("#exportMore").on("click",function(){
356   - if($("#info tbody tr td").length <= 1)
357   - return;
358   - var i = layer.load(2);
359   - var param = new Array();
360   - $("#info tbody tr").each(function(index){
361   - param[index] = new Array();
362   - $(this).children().each(function(i){
363   - if(i<3){
364   - param[index][i] = $(this).text().split("\\")[0];
365   - if(i==0){
366   - param[index][3] = $(this).text().split("\\")[1];
367   -
368   - }
369   - }
370   - });
371   - });
372   -// $get('/realSchedule/exportWaybillMore',{date:date,line:line,strs:JSON.stringify(param)},function(result){
373   -// window.open("/downloadFile/downloadList?fileName="+result.fileName); //下载压缩包
374   - $get('/busInterval/exportWaybillMore',{date:date,line:line,lineName:lineName,strs:JSON.stringify(param)},function(result){
375   - window.open("/downloadFile/download?fileName="+result.fileName);
376   - layer.close(i);
377   - });
378   - });
379   -
380   - function getTime(list){
381   - $.each(list, function(i, obj) {
382   - if(obj.zdsj != null && obj.zdsjActual != null ){
383   - var zdsjActual = (obj.zdsjActual).split(":");
384   - var zdsj = (obj.zdsj).split(":");
385   - if(zdsjActual[0]*60+Number(zdsjActual[1]) > zdsj[0]*60+Number(zdsj[1])){
386   - if(zdsjActual[0]*60+Number(zdsjActual[1]) - zdsj[0]*60+Number(zdsj[1]) > 1000){
387   - obj["fast"] = (zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])) + 1440;
388   - } else {
389   - obj["slow"] = (zdsjActual[0]*60+Number(zdsjActual[1])) - (zdsj[0]*60+Number(zdsj[1]));
390   - }
391   - }
392   - else if(zdsjActual[0]*60+Number(zdsjActual[1]) < zdsj[0]*60+Number(zdsj[1])){
393   - if((zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])) > 1000){
394   - obj["slow"] = (zdsjActual[0]*60+Number(zdsjActual[1])) - (zdsj[0]*60+Number(zdsj[1])) + 1440;
395   - } else {
396   - obj["fast"] = (zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1]));
397   - }
398   - }
399   - }
400   - });
401   - }
402   - });
403   -</script>
404   -<script type="text/html" id="list_info">
405   - {{each list as obj i}}
406   - <tr>
407   - <td width="45%">{{obj[4]}}\{{obj[1]}}</td>
408   - <td width="32%">{{obj[2]}}</td>
409   - <td width="20%">{{obj[3]}}</td>
410   - <td width="3%" hidden="true">{{obj[0]}}</td>
411   - </tr>
412   - {{/each}}
413   - {{if list.length == 0}}
414   - <tr>
415   - <td colspan="3"><h6 class="muted">没有找到相关数据</h6></td>
416   - </tr>
417   - {{/if}}
418   -</script>
419   -<script type="text/html" id="list_info_px">
420   - {{each list as obj i}}
421   - <tr>
422   -
423   - <td width="45%">{{obj.jName}}\{{obj.jGh}}</td>
424   - <td width="32%">{{obj.clZbh}}</td>
425   - <td width="23%">{{obj.lpName}}</td>
426   - <td hidden="true">{{obj.id}}</td>
427   - </tr>
428   - {{/each}}
429   - {{if list.length == 0}}
430   - <tr>
431   - <td colspan="3"><h6 class="muted">没有找到相关数据</h6></td>
432   - </tr>
433   - {{/if}}
434   -</script>
435   -<script type="text/html" id="ludan_1">
436   - <tr>
437   - <td colspan="14">行车路单</td>
438   - </tr>
439   - <tr>
440   - <td colspan="14">路别:{{xlName}} 路牌:{{lpName}} 车号:{{clZbh}}({{plate}}) 出场时间:{{fcsjActual}} 到达站名:{{zdzName}} 当班调派:{{dbdp}} 日期:{{scheduleDate}}</td>
441   - </tr>
442   - <tr>
443   - {{if type==0}}
444   - <td colspan="2">出场存油 {{ccyl}}升</td>
445   - <td colspan="2">加注量 {{jzl}}升</td>
446   - <td colspan="2">进场存油 {{jcyl}}升</td>
447   - <td colspan="2">加注机油 &nbsp;升</td>
448   - <td colspan="3">{{rylx}}</td>
449   - <td colspan="3">本日耗油 {{yh}}升</td>
450   - {{/if}}
451   - {{if type==1}}
452   - <td colspan="2">出场存电 {{ccyl}}%</td>
453   - <td colspan="2">充电量 {{jzl}}度</td>
454   - <td colspan="2">进场存电 {{jcyl}}%</td>
455   - <td colspan="4">加注机油 &nbsp;升</td>
456   - <td colspan="4">本日耗电 {{yh}}度</td>
457   - {{/if}}
458   - {{if type==2}}
459   - <td colspan="2">出场存电 {{ccyl}}%</td>
460   - <td colspan="2">充电量 {{jzl}}度</td>
461   - <td colspan="2">进场存电 {{jcyl}}%</td>
462   - <td colspan="4">加注机油 &nbsp;升</td>
463   - <td colspan="4">本日耗电 {{yh}}度</td>
464   - {{/if}}
465   - </tr>
466   - <tr>
467   - <td rowspan="2">调度章</td>
468   - <td colspan="1">&nbsp;</td>
469   - <td rowspan="2">早班</td>
470   - <td colspan="1">&nbsp;</td>
471   - <td rowspan="2">夜班</td>
472   - <td colspan="1">&nbsp;</td>
473   - <td rowspan="2" colspan="2">交叉</td>
474   - <td colspan="2">&nbsp;</td>
475   - <td rowspan="2">其他</td>
476   - <td colspan="1">&nbsp;</td>
477   - <td colspan="1">&nbsp;</td>
478   - <td colspan="1">&nbsp;</td>
479   - </tr>
480   - <tr>
481   - <td colspan="1">&nbsp;</td>
482   - <td colspan="1">&nbsp;</td>
483   - <td colspan="1">&nbsp;</td>
484   - <td colspan="2">&nbsp;</td>
485   - <td colspan="1">&nbsp;</td>
486   - <td colspan="1">&nbsp;</td>
487   - <td colspan="1">&nbsp;</td>
488   - </tr>
489   - <tr>
490   - <td rowspan="2">车次</td>
491   - <td colspan="2">工号</td>
492   - <td rowspan="2">公里耗油</td>
493   - <td colspan="2">起讫站</td>
494   - <td colspan="4">时间</td>
495   - <td colspan="2">误点</td>
496   - <td rowspan="2" width="66px">里程(公里)计划</td>
497   - <td rowspan="2">备注</td>
498   - </tr>
499   - <tr>
500   - <td colspan="1" width="60px">司&nbsp;机</td>
501   - <td colspan="1" width="60px">售&nbsp;票</td>
502   - <td colspan="1">起点</td>
503   - <td colspan="1">终点</td>
504   - <td colspan="1">计发</td>
505   - <td colspan="1">实发</td>
506   - <td colspan="1">应到</td>
507   - <td colspan="1">实到</td>
508   - <td colspan="1">快</td>
509   - <td colspan="1">慢</td>
510   - </tr>
511   -</script>
512   -<script type="text/html" id="ludan_2">
513   - {{each list as obj i}}
514   - <tr>
515   - <td>{{obj.adjustExps}}</td>
516   - <td>{{obj.jGh}}{{obj.jName}}</td>
517   - <td>{{if obj.sGh !=null}}
518   - {{obj.sGh}}{{obj.sName}}
519   - {{/if}}
520   - </td>
521   - <td>&nbsp;</td>
522   - <td>{{obj.qdzName}}</td>
523   - <td>{{obj.zdzName}}</td>
524   - <td>{{obj.fcsj}}</td>
525   - <td>{{obj.fcsjActual}}</td>
526   - <td>{{obj.zdsj}}</td>
527   - <td>{{obj.zdsjActual}}</td>
528   - <td>{{obj.fast}}</td>
529   - <td>{{obj.slow}}</td>
530   - <td>
531   - {{if obj.zdsjActual!=null}}
532   - {{obj.jhlc}}
533   - {{/if}}
534   - </td>
535   - <td >
536   - {{obj.remarks}}
537   - </td>
538   - </tr>
539   - {{/each}}
540   - {{if list.length == 0}}
541   - <tr>
542   - <td colspan="14"><h6 class="muted">没有找到相关数据</h6></td>
543   - </tr>
544   - {{/if}}
545   -</script>
546   -<script type="text/html" id="ludan_3">
547   - <tr>
548   - <td colspan="2">计划班次</td>
549   - <td>{{jhbc}}</td>
550   - <td colspan="2">计划公里</td>
551   - <td>{{jhlc}}</td>
552   - <td colspan="2">烂班班次</td>
553   - <td>{{cjbc}}</td>
554   - <td colspan="3"> 烂班公里</td>
555   - <td colspan="2">{{remMileage}}</td>
556   - </tr>
557   - <tr>
558   - <td colspan="2">临加班次</td>
559   - <td>{{ljbc}}</td>
560   - <td colspan="2">临加公里</td>
561   - <td>{{addMileage}}</td>
562   - <td colspan="2">实际班次</td>
563   - <td>{{sjbc}}</td>
564   - <td colspan="3">营运公里</td>
565   - <td colspan="2">{{yygl}}</td>
566   - </tr>
567   - <tr>
568   - <td colspan="2">空驶公里</td>
569   - <td>{{zkslc}}</td>
570   - <td colspan="2">总公里</td>
571   - <td>{{realMileage}}</td>
572   - <td colspan="2"></td>
573   - <td></td>
574   - <td colspan="3"></td>
575   - <td colspan="2"></td>
576   - </tr>
577   -</script>
  1 +<style type="text/css">
  2 + .table-bordered {
  3 + border: 1px solid; }
  4 + .table-bordered > thead > tr > th,
  5 + .table-bordered > thead > tr > td,
  6 + .table-bordered > tbody > tr > th,
  7 + .table-bordered > tbody > tr > td,
  8 + .table-bordered > tfoot > tr > th,
  9 + .table-bordered > tfoot > tr > td {
  10 + border: 1px solid; }
  11 + .table-bordered > thead > tr > th,
  12 + .table-bordered > thead > tr > td {
  13 + border-bottom-width: 2px; }
  14 +
  15 + .table > tbody + tbody {
  16 + border-top: 1px solid; }
  17 +</style>
  18 +
  19 +<div class="page-head">
  20 + <div class="page-title">
  21 + <h1>行车路单</h1>
  22 + </div>
  23 +</div>
  24 +
  25 +<div class="row">
  26 + <div class="col-md-12">
  27 + <div class="portlet light porttlet-fit bordered">
  28 + <div class="portlet-title">
  29 + <form class="form-inline" action="">
  30 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_xcld">
  31 + <span class="item-label" style="width: 80px;">公司: </span>
  32 + <select class="form-control" name="company" id="gsdmXcld" style="width: 180px;"></select>
  33 + </div>
  34 + <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_xcld">
  35 + <span class="item-label" style="width: 80px;">分公司: </span>
  36 + <select class="form-control" name="subCompany" id="fgsdmXcld" style="width: 180px;"></select>
  37 + </div>
  38 + <div style="margin-top: 2px"></div>
  39 + <div style="display: inline-block; margin-left: 33px;">
  40 + <span class="item-label" style="width: 80px;">线路: </span>
  41 + <select class="form-control" name="line" id="line" style="width: 180px;"></select>
  42 + </div>
  43 + <div style="display: inline-block;margin-left: 24px;">
  44 + <span class="item-label" style="width: 80px;">&nbsp;时间: </span>
  45 + <input class="form-control" type="text" id="date" style="width: 180px;"/>
  46 + </div>
  47 + <div class="form-group" style="display: inline-block;margin-left: 15px;">
  48 + <input class="btn btn-default" type="button" id="query" value="查询"/>
  49 + <input class="btn btn-default" type="button" id="export" value="导出"/>
  50 + <input class="btn btn-default" type="button" id="print" value="打印"/>
  51 + <input class="btn btn-default" type="button" id="exportMore" value="批量导出"/>
  52 + </div>
  53 + </form>
  54 + </div>
  55 + <div class="portlet-body">
  56 + <div class="row">
  57 + <div class="col-md-3">
  58 + <div class="" id="left_height" style="margin-top: 10px;overflow:auto;">
  59 + <table class="table table-bordered table-hover table-checkable pre-scrollable" id="info">
  60 + <thead>
  61 + <tr class="hidden">
  62 + <th class="rypx" style="cursor:pointer ">人员</th>
  63 + <th class="zbhpx" style="cursor:pointer ">自编号</th>
  64 + <th class="lppx" style="cursor:pointer ">路牌</th>
  65 + </tr>
  66 + </thead>
  67 + <tbody>
  68 +
  69 + </tbody>
  70 + </table>
  71 + </div>
  72 + </div>
  73 + <div class="col-md-9" id="printArea">
  74 + <div class="table-container" id="xcld_height" style="margin-top: 10px;overflow:auto;min-width: 906px;">
  75 + <table class="table table-bordered table-checkable" id="forms">
  76 + <tbody class="ludan_1">
  77 +
  78 + </tbody>
  79 + <tbody class="ludan_2">
  80 +
  81 + </tbody>
  82 + <tbody class="ludan_3">
  83 +
  84 + </tbody>
  85 + <tbody class="ludan_4">
  86 +
  87 + </tbody>
  88 + </table>
  89 + </div>
  90 + </div>
  91 + </div>
  92 + </div>
  93 + </div>
  94 + </div>
  95 +</div>
  96 +
  97 +<script>
  98 + $(function(){
  99 + var fage=false;
  100 + // 关闭左侧栏
  101 + if (!$('body').hasClass('page-sidebar-closed'))
  102 + $('.menu-toggler.sidebar-toggler').click();
  103 +
  104 + $("#date").datetimepicker({
  105 + format : 'YYYY-MM-DD',
  106 + locale : 'zh-cn'
  107 + });
  108 +
  109 + $("#left_height").height($(window).height()-100);
  110 + $("#xcld_height").height($(window).height()-100);
  111 +
  112 + var d = new Date();
  113 + var year = d.getFullYear();
  114 + var month = d.getMonth() + 1;
  115 + var day = d.getDate();
  116 + if(month < 10)
  117 + month = "0" + month;
  118 + if(day < 10)
  119 + day = "0" + day;
  120 + $("#date").val(year + "-" + month + "-" + day);
  121 +
  122 + var obj = [];
  123 + var xlList;
  124 + $.get('/report/lineList',function(result){
  125 + xlList=result;
  126 +
  127 + $.get('/user/companyData', function(result){
  128 + obj = result;
  129 + console.log(obj);
  130 + var options = '';
  131 + for(var i = 0; i < obj.length; i++){
  132 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  133 + }
  134 +
  135 + if(obj.length ==0){
  136 + $("#gsdmDiv_xcld").css('display','none');
  137 + }else if(obj.length ==1){
  138 + $("#gsdmDiv_xcld").css('display','none');
  139 + if(obj[0].children.length == 1 || obj[0].children.length ==0)
  140 + $('#fgsdmDiv_xcld').css('display','none');
  141 + }
  142 + $('#gsdmXcld').html(options);
  143 +
  144 + updateCompany();
  145 + });
  146 + });
  147 +
  148 + $("#gsdmXcld").on("change",updateCompany);
  149 + function updateCompany(){
  150 + var company = $('#gsdmXcld').val();
  151 + var options = '';
  152 + for(var i = 0; i < obj.length; i++){
  153 + if(obj[i].companyCode == company){
  154 + var children = obj[i].children;
  155 + for(var j = 0; j < children.length; j++){
  156 + options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
  157 + }
  158 + }
  159 + }
  160 + $('#fgsdmXcld').html(options);
  161 +// initXl();
  162 + }
  163 +
  164 +
  165 +
  166 +
  167 +// $("#fgsdmXcld").on("change",initXl);
  168 + /* function initXl(){
  169 + var data=[];
  170 + if(fage){
  171 + $("#line").select2("destroy").html('');
  172 + }
  173 + var fgs=$('#fgsdmXcld').val();
  174 + var gs=$('#gsdmXcld').val();
  175 + for(var i=0;i<xlList.length;i++){
  176 + if(gs!=""){
  177 + if(fgs!=""){
  178 + if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
  179 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  180 + }
  181 + }else{
  182 + if(xlList[i]["gsbm"]==gs){
  183 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  184 + }
  185 + }
  186 + }
  187 + }
  188 + initPinYinSelect2('#line',data,'');
  189 + fage=true;
  190 + } */
  191 +
  192 + var tempData = {};
  193 + $.get('/report/lineList',function(xlList){
  194 + var data = [];
  195 +// data.push({id: " ", text: "全部线路"});
  196 + $.get('/user/companyData', function(result){
  197 + for(var i = 0; i < result.length; i++){
  198 + var companyCode = result[i].companyCode;
  199 + var children = result[i].children;
  200 + for(var j = 0; j < children.length; j++){
  201 + var code = children[j].code;
  202 + for(var k=0;k < xlList.length;k++ ){
  203 + if(xlList[k]["fgsbm"]==code && xlList[k]["gsbm"]==companyCode){
  204 + data.push({id: xlList[k]["xlbm"], text: xlList[k]["xlname"]});
  205 + tempData[xlList[k]["xlbm"]] = companyCode+":"+code;
  206 + }
  207 + }
  208 + }
  209 + }
  210 + initPinYinSelect2('#line',data,'');
  211 +
  212 + });
  213 + });
  214 +
  215 + $("#line").on("change", function(){
  216 + if($("#line").val() == " "){
  217 + $("#gsdmXcld").attr("disabled", false);
  218 + $("#fgsdmXcld").attr("disabled", false);
  219 + } else {
  220 + var temp = tempData[$("#line").val()].split(":");
  221 + $("#gsdmXcld").val(temp[0]);
  222 + updateCompany();
  223 + $("#fgsdmXcld").val(temp[1]);
  224 + $("#gsdmXcld").attr("disabled", true);
  225 + $("#fgsdmXcld").attr("disabled", true);
  226 + }
  227 + });
  228 + var date = '';
  229 + var line = '';
  230 + var lineName;
  231 + $("#query").on("click",function(){
  232 + $("#left_height").height($(window).height()-100);
  233 + line = $("#line").val();
  234 + date = $("#date").val();
  235 + lineName = $('#line option:selected').text();
  236 + $(".hidden").removeClass("hidden");
  237 + $get('/realSchedule/queryUserInfo',{line:line,date:date,state:2},function(result){
  238 + // 把数据填充到模版中
  239 + var tbodyHtml = template('list_info',{list:result});
  240 + // 把渲染好的模版html文本追加到表格中
  241 + $('#info tbody').html(tbodyHtml);
  242 + });
  243 + });
  244 + var type="desc";
  245 + $(".rypx").on("click",function(){
  246 + line = $("#line").val();
  247 + date = $("#date").val();
  248 + $(".hidden").removeClass("hidden");
  249 + $get('/realSchedule/queryUserInfoPx',{line:line,date:date,state:"jGh",type:type},function(result){
  250 + if(type=="desc"){
  251 + type ="asc";
  252 + }else{
  253 + type ="desc";
  254 + }
  255 + // 把数据填充到模版中
  256 + var tbodyHtml = template('list_info_px',{list:result});
  257 + // 把渲染好的模版html文本追加到表格中
  258 + $('#info tbody').html(tbodyHtml);
  259 + });
  260 + })
  261 +
  262 + $(".zbhpx").on("click",function(){
  263 + line = $("#line").val();
  264 + date = $("#date").val();
  265 + $(".hidden").removeClass("hidden");
  266 + $get('/realSchedule/queryUserInfoPx',{line:line,date:date,state:"clZbh",type:type},function(result){
  267 + if(type=="desc"){
  268 + type ="asc";
  269 + }else{
  270 + type ="desc";
  271 + }
  272 + // 把数据填充到模版中
  273 + var tbodyHtml = template('list_info_px',{list:result});
  274 + // 把渲染好的模版html文本追加到表格中
  275 + $('#info tbody').html(tbodyHtml);
  276 + });
  277 + })
  278 +
  279 + $(".lppx").on("click",function(){
  280 + line = $("#line").val();
  281 + date = $("#date").val();
  282 + $(".hidden").removeClass("hidden");
  283 + $get('/realSchedule/queryUserInfoPx',{line:line,date:date,state:"lpName",type:type},function(result){
  284 + if(type=="desc"){
  285 + type ="asc";
  286 + }else{
  287 + type ="desc";
  288 + }
  289 + // 把数据填充到模版中
  290 + var tbodyHtml = template('list_info_px',{list:result});
  291 + // 把渲染好的模版html文本追加到表格中
  292 + $('#info tbody').html(tbodyHtml);
  293 + });
  294 + })
  295 +
  296 + var params = new Array();
  297 + var jName = '';
  298 + var jGh = '';
  299 + $("#info tbody").on("click","tr",function(){
  300 + if($(this).children().size() < 2){
  301 + return;
  302 + }
  303 + $("#xcld_height").height($(window).height()-100);
  304 + $(this).children().each(function(index){
  305 + params[index] = $(this).text();
  306 + });
  307 + jName = params[0].split("\\")[0];
  308 + jGh = params[0].split("\\")[1];
  309 + var id = params[3];
  310 + var obj = $(this);
  311 + $get('/realSchedule/MapById',{id:id},function(result){
  312 + result.scheduleDate = moment(result.scheduleDate).format("YYYY/MM/DD");
  313 + var ludan_1 = template('ludan_1',result);
  314 + // 把渲染好的模版html文本追加到表格中
  315 + $('#forms .ludan_1').html(ludan_1);
  316 + });
  317 + $get('/realSchedule/queryListWaybill',{jGh:jGh,clZbh:params[1],lpName:params[2],date:date,line:line},function(result){
  318 + getTime(result);
  319 + /* $get('/realSchedule/MapById',{id:result[0].id},function(result){
  320 + result.scheduleDate = moment(result.scheduleDate).format("YYYY/MM/DD");
  321 + var ludan_1 = template('ludan_1',result);
  322 + // 把渲染好的模版html文本追加到表格中
  323 + $('#forms .ludan_1').html(ludan_1);
  324 + }); */
  325 + var ludan_2 = template('ludan_2',{list:result});
  326 + // 把渲染好的模版html文本追加到表格中
  327 + $('#forms .ludan_2').html(ludan_2);
  328 + });
  329 + $get('/realSchedule/findKMBC',{jGh:jGh,clZbh:params[1],lpName:params[2],date:date,line:line},function(result){
  330 + var ludan_3 = template('ludan_3',result);
  331 + $('#forms .ludan_3').html(ludan_3);
  332 + $("#info tbody tr").css('background-color', '');
  333 + obj.css('background-color', '#99CCFF');
  334 + });
  335 +
  336 +
  337 + });
  338 +
  339 + $("#export").on("click",function(){
  340 + if(params.length < 1){
  341 + return;
  342 + }
  343 + var i = layer.load(2);
  344 + $get('/realSchedule/exportWaybill',{jName:jName,jGh:jGh,clZbh:params[1],lpName:params[2],date:date,line:line},function(result){
  345 + var fileName=date+"-"+jName+"-"+params[1]+"-"+params[2]+"-行车路单";
  346 + window.open("/downloadFile/download?fileName="+encodeURIComponent(fileName));
  347 + layer.close(i);
  348 + });
  349 + });
  350 +
  351 + $("#print").click(function(){
  352 + $("#printArea").printArea();
  353 + });
  354 +
  355 + $("#exportMore").on("click",function(){
  356 + if($("#info tbody tr td").length <= 1)
  357 + return;
  358 + var i = layer.load(2);
  359 + var param = new Array();
  360 + $("#info tbody tr").each(function(index){
  361 + param[index] = new Array();
  362 + $(this).children().each(function(i){
  363 + if(i<3){
  364 + param[index][i] = $(this).text().split("\\")[0];
  365 + if(i==0){
  366 + param[index][3] = $(this).text().split("\\")[1];
  367 +
  368 + }
  369 + }
  370 + });
  371 + });
  372 +// $get('/realSchedule/exportWaybillMore',{date:date,line:line,strs:JSON.stringify(param)},function(result){
  373 +// window.open("/downloadFile/downloadList?fileName="+result.fileName); //下载压缩包
  374 + $get('/busInterval/exportWaybillMore',{date:date,line:line,lineName:lineName,strs:JSON.stringify(param)},function(result){
  375 + window.open("/downloadFile/download?fileName="+result.fileName);
  376 + layer.close(i);
  377 + });
  378 + });
  379 +
  380 + function getTime(list){
  381 + $.each(list, function(i, obj) {
  382 + if(obj.zdsj != null && obj.zdsjActual != null ){
  383 + var zdsjActual = (obj.zdsjActual).split(":");
  384 + var zdsj = (obj.zdsj).split(":");
  385 + if(zdsjActual[0]*60+Number(zdsjActual[1]) > zdsj[0]*60+Number(zdsj[1])){
  386 + if(zdsjActual[0]*60+Number(zdsjActual[1]) - zdsj[0]*60+Number(zdsj[1]) > 1000){
  387 + obj["fast"] = (zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])) + 1440;
  388 + } else {
  389 + obj["slow"] = (zdsjActual[0]*60+Number(zdsjActual[1])) - (zdsj[0]*60+Number(zdsj[1]));
  390 + }
  391 + }
  392 + else if(zdsjActual[0]*60+Number(zdsjActual[1]) < zdsj[0]*60+Number(zdsj[1])){
  393 + if((zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1])) > 1000){
  394 + obj["slow"] = (zdsjActual[0]*60+Number(zdsjActual[1])) - (zdsj[0]*60+Number(zdsj[1])) + 1440;
  395 + } else {
  396 + obj["fast"] = (zdsj[0]*60+Number(zdsj[1])) - (zdsjActual[0]*60+Number(zdsjActual[1]));
  397 + }
  398 + }
  399 + }
  400 + });
  401 + }
  402 + });
  403 +</script>
  404 +<script type="text/html" id="list_info">
  405 + {{each list as obj i}}
  406 + <tr>
  407 + <td width="45%">{{obj.jName}}\{{obj.jGh}}</td>
  408 + <td width="32%">{{obj.clZbh}}</td>
  409 + <td width="23%">{{obj.lpName}}</td>
  410 + <td hidden="true">{{obj.id}}</td>
  411 + </tr>
  412 + {{/each}}
  413 + {{if list.length == 0}}
  414 + <tr>
  415 + <td colspan="3"><h6 class="muted">没有找到相关数据</h6></td>
  416 + </tr>
  417 + {{/if}}
  418 +</script>
  419 +<script type="text/html" id="list_info_px">
  420 + {{each list as obj i}}
  421 + <tr>
  422 +
  423 + <td width="45%">{{obj.jName}}\{{obj.jGh}}</td>
  424 + <td width="32%">{{obj.clZbh}}</td>
  425 + <td width="23%">{{obj.lpName}}</td>
  426 + <td hidden="true">{{obj.id}}</td>
  427 + </tr>
  428 + {{/each}}
  429 + {{if list.length == 0}}
  430 + <tr>
  431 + <td colspan="3"><h6 class="muted">没有找到相关数据</h6></td>
  432 + </tr>
  433 + {{/if}}
  434 +</script>
  435 +<script type="text/html" id="ludan_1">
  436 + <tr>
  437 + <td colspan="14">行车路单</td>
  438 + </tr>
  439 + <tr>
  440 + <td colspan="14">路别:{{xlName}} 路牌:{{lpName}} 车号:{{clZbh}}({{plate}}) 出场时间:{{fcsjActual}} 到达站名:{{zdzName}} 当班调派:{{dbdp}} 日期:{{scheduleDate}}</td>
  441 + </tr>
  442 + <tr>
  443 + {{if type==0}}
  444 + <td colspan="2">出场存油 {{ccyl}}升</td>
  445 + <td colspan="2">加注量 {{jzl}}升</td>
  446 + <td colspan="2">进场存油 {{jcyl}}升</td>
  447 + <td colspan="2">加注机油 &nbsp;升</td>
  448 + <td colspan="3">{{rylx}}</td>
  449 + <td colspan="3">本日耗油 {{yh}}升</td>
  450 + {{/if}}
  451 + {{if type==1}}
  452 + <td colspan="2">出场存电 {{ccyl}}%</td>
  453 + <td colspan="2">充电量 {{jzl}}度</td>
  454 + <td colspan="2">进场存电 {{jcyl}}%</td>
  455 + <td colspan="4">加注机油 &nbsp;升</td>
  456 + <td colspan="4">本日耗电 {{yh}}度</td>
  457 + {{/if}}
  458 + {{if type==2}}
  459 + <td colspan="2">出场存电 {{ccyl}}%</td>
  460 + <td colspan="2">充电量 {{jzl}}度</td>
  461 + <td colspan="2">进场存电 {{jcyl}}%</td>
  462 + <td colspan="4">加注机油 &nbsp;升</td>
  463 + <td colspan="4">本日耗电 {{yh}}度</td>
  464 + {{/if}}
  465 + </tr>
  466 + <tr>
  467 + <td rowspan="2">调度章</td>
  468 + <td colspan="1">&nbsp;</td>
  469 + <td rowspan="2">早班</td>
  470 + <td colspan="1">&nbsp;</td>
  471 + <td rowspan="2">夜班</td>
  472 + <td colspan="1">&nbsp;</td>
  473 + <td rowspan="2" colspan="2">交叉</td>
  474 + <td colspan="2">&nbsp;</td>
  475 + <td rowspan="2">其他</td>
  476 + <td colspan="1">&nbsp;</td>
  477 + <td colspan="1">&nbsp;</td>
  478 + <td colspan="1">&nbsp;</td>
  479 + </tr>
  480 + <tr>
  481 + <td colspan="1">&nbsp;</td>
  482 + <td colspan="1">&nbsp;</td>
  483 + <td colspan="1">&nbsp;</td>
  484 + <td colspan="2">&nbsp;</td>
  485 + <td colspan="1">&nbsp;</td>
  486 + <td colspan="1">&nbsp;</td>
  487 + <td colspan="1">&nbsp;</td>
  488 + </tr>
  489 + <tr>
  490 + <td rowspan="2">车次</td>
  491 + <td colspan="2">工号</td>
  492 + <td rowspan="2">公里耗油</td>
  493 + <td colspan="2">起讫站</td>
  494 + <td colspan="4">时间</td>
  495 + <td colspan="2">误点</td>
  496 + <td rowspan="2" width="66px">里程(公里)计划</td>
  497 + <td rowspan="2">备注</td>
  498 + </tr>
  499 + <tr>
  500 + <td colspan="1" width="60px">司&nbsp;机</td>
  501 + <td colspan="1" width="60px">售&nbsp;票</td>
  502 + <td colspan="1">起点</td>
  503 + <td colspan="1">终点</td>
  504 + <td colspan="1">计发</td>
  505 + <td colspan="1">实发</td>
  506 + <td colspan="1">应到</td>
  507 + <td colspan="1">实到</td>
  508 + <td colspan="1">快</td>
  509 + <td colspan="1">慢</td>
  510 + </tr>
  511 +</script>
  512 +<script type="text/html" id="ludan_2">
  513 + {{each list as obj i}}
  514 + <tr>
  515 + <td>{{obj.adjustExps}}</td>
  516 + <td>{{obj.jGh}}{{obj.jName}}</td>
  517 + <td>{{if obj.sGh !=null}}
  518 + {{obj.sGh}}{{obj.sName}}
  519 + {{/if}}
  520 + </td>
  521 + <td>&nbsp;</td>
  522 + <td>{{obj.qdzName}}</td>
  523 + <td>{{obj.zdzName}}</td>
  524 + <td>{{obj.fcsj}}</td>
  525 + <td>{{obj.fcsjActual}}</td>
  526 + <td>{{obj.zdsj}}</td>
  527 + <td>{{obj.zdsjActual}}</td>
  528 + <td>{{obj.fast}}</td>
  529 + <td>{{obj.slow}}</td>
  530 + <td>
  531 + {{if obj.zdsjActual!=null}}
  532 + {{obj.jhlc}}
  533 + {{/if}}
  534 + </td>
  535 + <td >
  536 + {{obj.remarks}}
  537 + </td>
  538 + </tr>
  539 + {{/each}}
  540 + {{if list.length == 0}}
  541 + <tr>
  542 + <td colspan="14"><h6 class="muted">没有找到相关数据</h6></td>
  543 + </tr>
  544 + {{/if}}
  545 +</script>
  546 +<script type="text/html" id="ludan_3">
  547 + <tr>
  548 + <td colspan="2">计划班次</td>
  549 + <td>{{jhbc}}</td>
  550 + <td colspan="2">计划公里</td>
  551 + <td>{{jhlc}}</td>
  552 + <td colspan="2">烂班班次</td>
  553 + <td>{{cjbc}}</td>
  554 + <td colspan="3"> 烂班公里</td>
  555 + <td colspan="2">{{remMileage}}</td>
  556 + </tr>
  557 + <tr>
  558 + <td colspan="2">临加班次</td>
  559 + <td>{{ljbc}}</td>
  560 + <td colspan="2">临加公里</td>
  561 + <td>{{addMileage}}</td>
  562 + <td colspan="2">实际班次</td>
  563 + <td>{{sjbc}}</td>
  564 + <td colspan="3">营运公里</td>
  565 + <td colspan="2">{{yygl}}</td>
  566 + </tr>
  567 + <tr>
  568 + <td colspan="2">空驶公里</td>
  569 + <td>{{zkslc}}</td>
  570 + <td colspan="2">总公里</td>
  571 + <td>{{realMileage}}</td>
  572 + <td colspan="2"></td>
  573 + <td></td>
  574 + <td colspan="3"></td>
  575 + <td colspan="2"></td>
  576 + </tr>
  577 +</script>
... ...