Commit 99c1870f5b7e955815f26060000828f6b459cf20

Authored by 娄高锋
1 parent a2e50374

路单审计报表导出名称修改。

src/main/java/com/bsth/service/calc/impl/CalcWaybillAuditServiceImpl.java
1 -package com.bsth.service.calc.impl;  
2 -  
3 -import com.bsth.data.BasicData;  
4 -import com.bsth.entity.Cars;  
5 -import com.bsth.entity.calc.CalcWaybillAudit;  
6 -import com.bsth.entity.realcontrol.ChildTaskPlan;  
7 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
8 -import com.bsth.repository.calc.CalcWaybillAuditRepository;  
9 -import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;  
10 -import com.bsth.service.calc.CalcWaybillAuditService;  
11 -import com.bsth.service.report.CulateMileageService;  
12 -import com.bsth.util.Arith;  
13 -import com.bsth.util.ReportUtils;  
14 -import com.github.stuxuhai.jpinyin.PinyinException;  
15 -import com.github.stuxuhai.jpinyin.PinyinFormat;  
16 -import com.github.stuxuhai.jpinyin.PinyinHelper;  
17 -import org.slf4j.Logger;  
18 -import org.slf4j.LoggerFactory;  
19 -import org.springframework.beans.factory.annotation.Autowired;  
20 -import org.springframework.scheduling.annotation.Scheduled;  
21 -import org.springframework.stereotype.Component;  
22 -import org.springframework.stereotype.Service;  
23 -import java.text.SimpleDateFormat;  
24 -import java.time.LocalDate;  
25 -import java.time.format.DateTimeFormatter;  
26 -import java.util.*;  
27 -import java.util.stream.Collectors;  
28 -  
29 -  
30 -@Component  
31 -@Service  
32 -public class CalcWaybillAuditServiceImpl implements CalcWaybillAuditService {  
33 -  
34 - @Autowired  
35 - ScheduleRealInfoRepository scheduleRealInfoRepository;  
36 -  
37 - @Autowired  
38 - CalcWaybillAuditRepository calcWaybillAuditRepository;  
39 -  
40 - @Autowired  
41 - CulateMileageService culateService;  
42 -  
43 -  
44 -  
45 -  
46 - Logger logger = LoggerFactory.getLogger(this.getClass());  
47 -  
48 -  
49 - //统计2天前的数据  
50 - @Scheduled(cron = "0 0 2 * * *")  
51 - public void clear() {  
52 - LocalDate dateTime = LocalDate.now().minusDays(2);  
53 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");  
54 -/* dateTime= LocalDate.parse("2025-03-03",formatter);*/  
55 - String date = dateTime.format(formatter);  
56 - this.create(date);  
57 - }  
58 -  
59 - //数据统计  
60 - @Override  
61 - public void create(String date) {  
62 - List<CalcWaybillAudit> list = new ArrayList<>();  
63 - //查询数据  
64 - List<ScheduleRealInfo> listAll = scheduleRealInfoRepository.auditReport(date);  
65 - //按车辆分组  
66 - Map<String, List<ScheduleRealInfo>> data=listAll.stream().collect(Collectors.groupingBy(sch-> sch.getScheduleDateStr()+"-"+sch.getXlBm()+"-"+sch.getClZbh()));  
67 - data.forEach((k,v)->{  
68 - CalcWaybillAudit c=new CalcWaybillAudit();  
69 - c.setRq(v.get(0).getScheduleDateStr());  
70 - c.setLineCode(v.get(0).getXlBm());  
71 - c.setLineName(v.get(0).getXlName());  
72 - c.setNbbm(v.get(0).getClZbh());  
73 - double sjyygl=culateService.culateSjgl(v);//实际营运公里  
74 - double ljgl = culateService.culateLjgl(v);//临加公里  
75 - c.setYylc(Arith.add(sjyygl,ljgl));  
76 - Map<String, Double> ks=this.culateksgl(v);  
77 - c.setInlc(ks.get("in"));  
78 - c.setOutlc(ks.get("out"));  
79 - c.setKslc(ks.get("ksgl"));  
80 - c.setZkslc(ks.get("zksgl"));  
81 - c.setZlc(Arith.add(Arith.add(sjyygl,ljgl),ks.get("zksgl")));  
82 - c.setFgsbm(v.get(0).getFgsBm());  
83 - c.setFgsName(v.get(0).getFgsName());  
84 - c.setGsbm(v.get(0).getGsBm());  
85 - c.setGsName(v.get(0).getGsName());  
86 - list.add(c);  
87 - });  
88 - if(!list.isEmpty()){  
89 - calcWaybillAuditRepository.delete(date);  
90 - calcWaybillAuditRepository.save(list);  
91 - }  
92 - }  
93 -  
94 - //汇总生成报表  
95 - @Override  
96 - public List<Map<String, Object>> auditReport(String gsdm,String fgsdm,String date, String date2,  
97 - String line,String nbbm, String type, String xlName) {  
98 - List<Map<String, Object>> lMap = new ArrayList<>();  
99 - //查询数据  
100 - List<CalcWaybillAudit> listAll = calcWaybillAuditRepository.auditReport(date, date2,gsdm,fgsdm, line, nbbm);  
101 - //按车辆分组  
102 - Map<String, List<CalcWaybillAudit>> data=listAll.stream().collect(Collectors.groupingBy(audit-> audit.getLineCode()+"-"+audit.getNbbm()));  
103 - data.forEach((k,v)->{  
104 - Map<String, Object> resMap = new HashMap<>();  
105 - Map<String,Double> sum=sum(v);  
106 - resMap.put("lineName", v.get(0).getLineName());  
107 - String clzbh=v.get(0).getNbbm();  
108 - resMap.put("plate", BasicData.nbbmCompanyPlateMap.get(clzbh)!=null?BasicData.nbbmCompanyPlateMap.get(clzbh):"");  
109 - Cars car=BasicData.nbbm2CarMap.get(clzbh);  
110 - String carClass=car!=null&&car.getCarClass()!=null? car.getCarClass():"";  
111 - resMap.put("carClass",carClass);  
112 - String carLength="";  
113 - if(!"".equals(carClass) && carClass.length()>6){  
114 - int i=Integer.parseInt(carClass.substring(4,5));  
115 - if(i==1){  
116 - carLength=">10";  
117 - }else if(i>1&&i<=7){  
118 - carLength="<8";  
119 - }else if(i>7){  
120 - carLength="8~10";  
121 - }  
122 - }  
123 - resMap.put("carLength",carLength);  
124 - resMap.put("sfdc",car!=null&&car.getSfdc()!=null? (car.getSfdc()==true?"是":"否"):"");  
125 - resMap.put("sfmix",car!=null&&car.getSfmix()!=null? (car.getSfmix()==true?"是":"否"):"");  
126 - resMap.put("yylc", sum.get("yylc"));  
127 - resMap.put("in", sum.get("inlc"));  
128 - resMap.put("out", sum.get("outlc"));  
129 - resMap.put("kslc", sum.get("kslc"));  
130 - resMap.put("zkslc", sum.get("zkslc"));  
131 - resMap.put("zlc", sum.get("zlc"));  
132 - resMap.put("fgsBm", v.get(0).getFgsbm());  
133 - resMap.put("xlBm", v.get(0).getLineCode());  
134 - resMap.put("fgsName", v.get(0).getFgsName());  
135 - try {  
136 - resMap.put("xlNamePy", PinyinHelper.convertToPinyinString(v.get(0).getFgsbm()+v.get(0).getLineName(), "", PinyinFormat.WITHOUT_TONE));  
137 - } catch (PinyinException e) {  
138 - // TODO Auto-generated catch block  
139 - e.printStackTrace();  
140 - }  
141 - lMap.add(resMap);  
142 - });  
143 -  
144 - Collections.sort(lMap, new AccountXlbm());  
145 - if (type != null && type.length() != 0 && type.equals("export")) {  
146 - List<Map<String, Object>> export = new ArrayList<>();  
147 - double yylc=0;  
148 - double in=0;  
149 - double out=0;  
150 - double kslc=0;  
151 - double zkslc=0;  
152 - double zlc=0;  
153 - String lineName=null;  
154 - Map<String, Object> map;  
155 - for (int i = 0; i < lMap.size(); i++) {  
156 - map=lMap.get(i);  
157 - if(lineName!=null && !lineName.equals(map.get("lineName"))){//不同线路  
158 - Map<String, Object> xj=new HashMap<>();  
159 - xj.put("lineName","小计");  
160 - xj.put("plate","");  
161 - xj.put("carClass","");  
162 - xj.put("carLength","");  
163 - xj.put("sfdc","");  
164 - xj.put("sfmix","");  
165 - xj.put("yylc",yylc);  
166 - xj.put("in",in);  
167 - xj.put("out",out);  
168 - xj.put("kslc",kslc);  
169 - xj.put("zkslc",zkslc);  
170 - xj.put("zlc",zlc);  
171 - export.add(xj);  
172 - yylc=0;  
173 - in=0;  
174 - out=0;  
175 - kslc=0;  
176 - zkslc=0;  
177 - zlc=0;  
178 - }  
179 - lineName=(String) map.get("lineName");  
180 - yylc=Arith.add(yylc,map.get("yylc"));  
181 - in=Arith.add(in,map.get("in"));  
182 - out=Arith.add(out,map.get("out"));  
183 - kslc=Arith.add(kslc,map.get("kslc"));  
184 - zkslc=Arith.add(zkslc,map.get("zkslc"));  
185 - zlc=Arith.add(zlc,map.get("zlc"));  
186 - export.add(map);  
187 - if(i==lMap.size()-1){//最后一个  
188 - Map<String, Object> xj=new HashMap<>();  
189 - xj.put("lineName","小计");  
190 - xj.put("plate","");  
191 - xj.put("carClass","");  
192 - xj.put("carLength","");  
193 - xj.put("sfdc","");  
194 - xj.put("sfmix","");  
195 - xj.put("yylc",yylc);  
196 - xj.put("in",in);  
197 - xj.put("out",out);  
198 - xj.put("kslc",kslc);  
199 - xj.put("zkslc",zkslc);  
200 - xj.put("zlc",zlc);  
201 - export.add(xj);  
202 - }  
203 - }  
204 - SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),  
205 - sdfSimple = new SimpleDateFormat("yyyyMMdd");  
206 - List<Iterator<?>> listI = new ArrayList<>();  
207 - Map<String, Object> m = new HashMap<>();  
208 - m.put("date", date + "至" + date2);  
209 - ReportUtils ee = new ReportUtils();  
210 - try {  
211 - String dateTime = "";  
212 - if (date.equals(date2)) {  
213 - dateTime = sdfSimple.format(sdfMonth.parse(date));  
214 - } else {  
215 - dateTime = sdfSimple.format(sdfMonth.parse(date))  
216 - + "-" + sdfSimple.format(sdfMonth.parse(date2));  
217 - }  
218 - listI.add(export.iterator());  
219 - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";  
220 - ee.excelReplace(listI, new Object[]{m}, path + "mould/auditReport.xls",  
221 - path + "export/" + dateTime + "-" + xlName + "-路单审计.xls");  
222 - } catch (Exception e) {  
223 - logger.error("", e);  
224 - }  
225 - }  
226 -  
227 - return lMap;  
228 - }  
229 -  
230 - //求和  
231 - public static Map<String,Double> sum(List<CalcWaybillAudit> lists) {  
232 - Map<String,Double> sum=new HashMap<>();  
233 - double yylc=0;  
234 - double inlc=0;  
235 - double outlc=0;  
236 - double kslc=0;  
237 - double zkslc=0;  
238 - double zlc=0;  
239 -  
240 - for (int i = 0; i < lists.size(); i++) {  
241 - CalcWaybillAudit audit=lists.get(i);  
242 - yylc=Arith.add(yylc,audit.getYylc());  
243 - inlc=Arith.add(inlc,audit.getInlc());  
244 - outlc=Arith.add(outlc,audit.getOutlc());  
245 - kslc=Arith.add(kslc,audit.getKslc());  
246 - zkslc=Arith.add(zkslc,audit.getZkslc());  
247 - zlc=Arith.add(zlc,audit.getZlc());  
248 - }  
249 - sum.put("yylc",yylc);  
250 - sum.put("inlc",inlc);  
251 - sum.put("outlc",outlc);  
252 - sum.put("kslc",kslc);  
253 - sum.put("zkslc",zkslc);  
254 - sum.put("zlc",zlc);  
255 - return sum;  
256 - }  
257 -  
258 -  
259 -  
260 - //计算少驶里程  
261 - //"normal-正常班次、out-出场、in-进场、region-区间、venting-放空班次、major-放站班次、ldks-两点间空驶"  
262 - @Override  
263 - public Map<String, Double> culateksgl(List<ScheduleRealInfo> lists) {  
264 - Map<String, Double> result=new HashMap<>();  
265 - double out =0;  
266 - double in =0;  
267 - double venting =0;  
268 - double major =0;  
269 - double ldks =0;  
270 - double normal =0;  
271 - double region =0;  
272 - double ksgl =0;//除进出场以外的空驶  
273 - double zksgl =0;  
274 - for (int i = 0; i < lists.size(); i++) {  
275 - ScheduleRealInfo scheduleRealInfo=lists.get(i);  
276 - if (scheduleRealInfo.getBcType().equals("in")) {  
277 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
278 - if(childTaskPlans.isEmpty()){  
279 - if(!scheduleRealInfo.isDestroy())  
280 - in =Arith.add(in, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());  
281 - }else{  
282 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
283 - while (it.hasNext()) {  
284 - ChildTaskPlan childTaskPlan = it.next();  
285 - if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){  
286 - if (!childTaskPlan.isDestroy()) {  
287 - Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();  
288 - in=Arith.add(in,jhgl);  
289 - }  
290 - }  
291 - }  
292 - }  
293 - }else if (scheduleRealInfo.getBcType().equals("out")) {  
294 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
295 - if(childTaskPlans.isEmpty()){  
296 - if(!scheduleRealInfo.isDestroy())  
297 - out =Arith.add(out, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());  
298 - }else{  
299 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
300 - while (it.hasNext()) {  
301 - ChildTaskPlan childTaskPlan = it.next();  
302 - if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){  
303 - if (!childTaskPlan.isDestroy()) {  
304 - Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();  
305 - out=Arith.add(out,jhgl);  
306 - }  
307 - }  
308 - }  
309 - }  
310 - }else if (scheduleRealInfo.getBcType().equals("venting")) {  
311 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
312 - if(childTaskPlans.isEmpty()){  
313 - if(!scheduleRealInfo.isDestroy())  
314 - venting =Arith.add(venting, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());  
315 - }else{  
316 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
317 - while (it.hasNext()) {  
318 - ChildTaskPlan childTaskPlan = it.next();  
319 - if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){  
320 - if (!childTaskPlan.isDestroy()) {  
321 - Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();  
322 - venting=Arith.add(venting,jhgl);  
323 - }  
324 - }  
325 - }  
326 - }  
327 - }else if (scheduleRealInfo.getBcType().equals("major")) {  
328 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
329 - if(childTaskPlans.isEmpty()){  
330 - if(!scheduleRealInfo.isDestroy())  
331 - major =Arith.add(major, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());  
332 - }else{  
333 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
334 - while (it.hasNext()) {  
335 - ChildTaskPlan childTaskPlan = it.next();  
336 - if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){  
337 - if (!childTaskPlan.isDestroy()) {  
338 - Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();  
339 - major=Arith.add(major,jhgl);  
340 - }  
341 - }  
342 - }  
343 - }  
344 - }else if (scheduleRealInfo.getBcType().equals("ldks")) {  
345 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
346 - if(childTaskPlans.isEmpty()){  
347 - if(!scheduleRealInfo.isDestroy())  
348 - ldks =Arith.add(ldks, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());  
349 - }else{  
350 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
351 - while (it.hasNext()) {  
352 - ChildTaskPlan childTaskPlan = it.next();  
353 - if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){  
354 - if (!childTaskPlan.isDestroy()) {  
355 - Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();  
356 - ldks=Arith.add(ldks,jhgl);  
357 - }  
358 - }  
359 - }  
360 - }  
361 - }else if (scheduleRealInfo.getBcType().equals("normal")) {  
362 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
363 - if(!childTaskPlans.isEmpty()){  
364 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
365 - while (it.hasNext()) {  
366 - ChildTaskPlan childTaskPlan = it.next();  
367 - if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){  
368 - if (!childTaskPlan.isDestroy()) {  
369 - Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();  
370 - normal=Arith.add(normal,jhgl);  
371 - }  
372 - }  
373 - }  
374 - }  
375 - }else if (scheduleRealInfo.getBcType().equals("region")) {  
376 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
377 - if(!childTaskPlans.isEmpty()){  
378 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
379 - while (it.hasNext()) {  
380 - ChildTaskPlan childTaskPlan = it.next();  
381 - if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){  
382 - if (!childTaskPlan.isDestroy()) {  
383 - Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();  
384 - region=Arith.add(region,jhgl);  
385 - }  
386 - }  
387 - }  
388 - }  
389 - }  
390 - }  
391 - ksgl =Arith.add(Arith.add(Arith.add(Arith.add(venting,major),ldks),normal),region);  
392 - zksgl=Arith.add(Arith.add(ksgl,in),out);  
393 - result.put("out",out);  
394 - result.put("in",in);  
395 - result.put("venting",venting);  
396 - result.put("major",major);  
397 - result.put("in",in);  
398 - result.put("ldks",ldks);  
399 - result.put("normal",normal);  
400 - result.put("region",region);  
401 - result.put("ksgl",ksgl);  
402 - result.put("zksgl",zksgl);  
403 - return result;  
404 - }  
405 -  
406 - @Override  
407 - public List<Map<String, String>> carList() {  
408 - List<Map<String, String>> list=new ArrayList<>();  
409 - Map<String, Cars> cars=BasicData.nbbm2CarMap;  
410 - Iterator<String> iterator = cars.keySet().iterator();  
411 - String key;  
412 - while (iterator.hasNext()) {  
413 - Map<String, String> map = new HashMap<>();  
414 - key = iterator.next();  
415 - Cars car=cars.get(key);  
416 - map.put("nbbm", car.getInsideCode());  
417 - map.put("carPlate", car.getCarPlate());  
418 - map.put("gsbm", car.getBusinessCode());  
419 - map.put("fgsbm", car.getBrancheCompanyCode());  
420 - list.add(map);  
421 - }  
422 - return list;  
423 - }  
424 -  
425 - class AccountXlbm implements Comparator<Map<String, Object>> {  
426 - @Override  
427 - public int compare(Map<String, Object> o1, Map<String, Object> o2) {  
428 - return o1.get("xlNamePy").toString().compareTo(  
429 - o2.get("xlNamePy").toString());  
430 - }  
431 - }  
432 -}  
433 -  
434 -  
435 - 1 +package com.bsth.service.calc.impl;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.entity.Cars;
  5 +import com.bsth.entity.calc.CalcWaybillAudit;
  6 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  7 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  8 +import com.bsth.repository.calc.CalcWaybillAuditRepository;
  9 +import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
  10 +import com.bsth.service.calc.CalcWaybillAuditService;
  11 +import com.bsth.service.report.CulateMileageService;
  12 +import com.bsth.util.Arith;
  13 +import com.bsth.util.ReportUtils;
  14 +import com.github.stuxuhai.jpinyin.PinyinException;
  15 +import com.github.stuxuhai.jpinyin.PinyinFormat;
  16 +import com.github.stuxuhai.jpinyin.PinyinHelper;
  17 +import org.slf4j.Logger;
  18 +import org.slf4j.LoggerFactory;
  19 +import org.springframework.beans.factory.annotation.Autowired;
  20 +import org.springframework.scheduling.annotation.Scheduled;
  21 +import org.springframework.stereotype.Component;
  22 +import org.springframework.stereotype.Service;
  23 +import java.text.SimpleDateFormat;
  24 +import java.time.LocalDate;
  25 +import java.time.format.DateTimeFormatter;
  26 +import java.util.*;
  27 +import java.util.stream.Collectors;
  28 +
  29 +
  30 +@Component
  31 +@Service
  32 +public class CalcWaybillAuditServiceImpl implements CalcWaybillAuditService {
  33 +
  34 + @Autowired
  35 + ScheduleRealInfoRepository scheduleRealInfoRepository;
  36 +
  37 + @Autowired
  38 + CalcWaybillAuditRepository calcWaybillAuditRepository;
  39 +
  40 + @Autowired
  41 + CulateMileageService culateService;
  42 +
  43 +
  44 +
  45 +
  46 + Logger logger = LoggerFactory.getLogger(this.getClass());
  47 +
  48 +
  49 + //统计2天前的数据
  50 + @Scheduled(cron = "0 0 2 * * *")
  51 + public void clear() {
  52 + LocalDate dateTime = LocalDate.now().minusDays(2);
  53 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  54 +/* dateTime= LocalDate.parse("2025-03-03",formatter);*/
  55 + String date = dateTime.format(formatter);
  56 + this.create(date);
  57 + }
  58 +
  59 + //数据统计
  60 + @Override
  61 + public void create(String date) {
  62 + List<CalcWaybillAudit> list = new ArrayList<>();
  63 + //查询数据
  64 + List<ScheduleRealInfo> listAll = scheduleRealInfoRepository.auditReport(date);
  65 + //按车辆分组
  66 + Map<String, List<ScheduleRealInfo>> data=listAll.stream().collect(Collectors.groupingBy(sch-> sch.getScheduleDateStr()+"-"+sch.getXlBm()+"-"+sch.getClZbh()));
  67 + data.forEach((k,v)->{
  68 + CalcWaybillAudit c=new CalcWaybillAudit();
  69 + c.setRq(v.get(0).getScheduleDateStr());
  70 + c.setLineCode(v.get(0).getXlBm());
  71 + c.setLineName(v.get(0).getXlName());
  72 + c.setNbbm(v.get(0).getClZbh());
  73 + double sjyygl=culateService.culateSjgl(v);//实际营运公里
  74 + double ljgl = culateService.culateLjgl(v);//临加公里
  75 + c.setYylc(Arith.add(sjyygl,ljgl));
  76 + Map<String, Double> ks=this.culateksgl(v);
  77 + c.setInlc(ks.get("in"));
  78 + c.setOutlc(ks.get("out"));
  79 + c.setKslc(ks.get("ksgl"));
  80 + c.setZkslc(ks.get("zksgl"));
  81 + c.setZlc(Arith.add(Arith.add(sjyygl,ljgl),ks.get("zksgl")));
  82 + c.setFgsbm(v.get(0).getFgsBm());
  83 + c.setFgsName(v.get(0).getFgsName());
  84 + c.setGsbm(v.get(0).getGsBm());
  85 + c.setGsName(v.get(0).getGsName());
  86 + list.add(c);
  87 + });
  88 + if(!list.isEmpty()){
  89 + calcWaybillAuditRepository.delete(date);
  90 + calcWaybillAuditRepository.save(list);
  91 + }
  92 + }
  93 +
  94 + //汇总生成报表
  95 + @Override
  96 + public List<Map<String, Object>> auditReport(String gsdm,String fgsdm,String date, String date2,
  97 + String line,String nbbm, String type, String xlName) {
  98 + List<Map<String, Object>> lMap = new ArrayList<>();
  99 + //查询数据
  100 + List<CalcWaybillAudit> listAll = calcWaybillAuditRepository.auditReport(date, date2,gsdm,fgsdm, line, nbbm);
  101 + //按车辆分组
  102 + Map<String, List<CalcWaybillAudit>> data=listAll.stream().collect(Collectors.groupingBy(audit-> audit.getLineCode()+"-"+audit.getNbbm()));
  103 + data.forEach((k,v)->{
  104 + Map<String, Object> resMap = new HashMap<>();
  105 + Map<String,Double> sum=sum(v);
  106 + resMap.put("lineName", v.get(0).getLineName());
  107 + String clzbh=v.get(0).getNbbm();
  108 + resMap.put("plate", BasicData.nbbmCompanyPlateMap.get(clzbh)!=null?BasicData.nbbmCompanyPlateMap.get(clzbh):"");
  109 + Cars car=BasicData.nbbm2CarMap.get(clzbh);
  110 + String carClass=car!=null&&car.getCarClass()!=null? car.getCarClass():"";
  111 + resMap.put("carClass",carClass);
  112 + String carLength="";
  113 + if(!"".equals(carClass) && carClass.length()>6){
  114 + int i=Integer.parseInt(carClass.substring(4,5));
  115 + if(i==1){
  116 + carLength=">10";
  117 + }else if(i>1&&i<=7){
  118 + carLength="<8";
  119 + }else if(i>7){
  120 + carLength="8~10";
  121 + }
  122 + }
  123 + resMap.put("carLength",carLength);
  124 + resMap.put("sfdc",car!=null&&car.getSfdc()!=null? (car.getSfdc()==true?"是":"否"):"");
  125 + resMap.put("sfmix",car!=null&&car.getSfmix()!=null? (car.getSfmix()==true?"是":"否"):"");
  126 + resMap.put("yylc", sum.get("yylc"));
  127 + resMap.put("in", sum.get("inlc"));
  128 + resMap.put("out", sum.get("outlc"));
  129 + resMap.put("kslc", sum.get("kslc"));
  130 + resMap.put("zkslc", sum.get("zkslc"));
  131 + resMap.put("zlc", sum.get("zlc"));
  132 + resMap.put("fgsBm", v.get(0).getFgsbm());
  133 + resMap.put("xlBm", v.get(0).getLineCode());
  134 + resMap.put("fgsName", v.get(0).getFgsName());
  135 + try {
  136 + resMap.put("xlNamePy", PinyinHelper.convertToPinyinString(v.get(0).getFgsbm()+v.get(0).getLineName(), "", PinyinFormat.WITHOUT_TONE));
  137 + } catch (PinyinException e) {
  138 + // TODO Auto-generated catch block
  139 + e.printStackTrace();
  140 + }
  141 + lMap.add(resMap);
  142 + });
  143 +
  144 + Collections.sort(lMap, new AccountXlbm());
  145 + if (type != null && type.length() != 0 && type.equals("export")) {
  146 + List<Map<String, Object>> export = new ArrayList<>();
  147 + double yylc=0;
  148 + double in=0;
  149 + double out=0;
  150 + double kslc=0;
  151 + double zkslc=0;
  152 + double zlc=0;
  153 + String lineName=null;
  154 + Map<String, Object> map;
  155 + for (int i = 0; i < lMap.size(); i++) {
  156 + map=lMap.get(i);
  157 + if(lineName!=null && !lineName.equals(map.get("lineName"))){//不同线路
  158 + Map<String, Object> xj=new HashMap<>();
  159 + xj.put("lineName","小计");
  160 + xj.put("plate","");
  161 + xj.put("carClass","");
  162 + xj.put("carLength","");
  163 + xj.put("sfdc","");
  164 + xj.put("sfmix","");
  165 + xj.put("yylc",yylc);
  166 + xj.put("in",in);
  167 + xj.put("out",out);
  168 + xj.put("kslc",kslc);
  169 + xj.put("zkslc",zkslc);
  170 + xj.put("zlc",zlc);
  171 + export.add(xj);
  172 + yylc=0;
  173 + in=0;
  174 + out=0;
  175 + kslc=0;
  176 + zkslc=0;
  177 + zlc=0;
  178 + }
  179 + lineName=(String) map.get("lineName");
  180 + yylc=Arith.add(yylc,map.get("yylc"));
  181 + in=Arith.add(in,map.get("in"));
  182 + out=Arith.add(out,map.get("out"));
  183 + kslc=Arith.add(kslc,map.get("kslc"));
  184 + zkslc=Arith.add(zkslc,map.get("zkslc"));
  185 + zlc=Arith.add(zlc,map.get("zlc"));
  186 + export.add(map);
  187 + if(i==lMap.size()-1){//最后一个
  188 + Map<String, Object> xj=new HashMap<>();
  189 + xj.put("lineName","小计");
  190 + xj.put("plate","");
  191 + xj.put("carClass","");
  192 + xj.put("carLength","");
  193 + xj.put("sfdc","");
  194 + xj.put("sfmix","");
  195 + xj.put("yylc",yylc);
  196 + xj.put("in",in);
  197 + xj.put("out",out);
  198 + xj.put("kslc",kslc);
  199 + xj.put("zkslc",zkslc);
  200 + xj.put("zlc",zlc);
  201 + export.add(xj);
  202 + }
  203 + }
  204 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  205 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  206 + List<Iterator<?>> listI = new ArrayList<>();
  207 + Map<String, Object> m = new HashMap<>();
  208 + m.put("date", date + "至" + date2);
  209 + ReportUtils ee = new ReportUtils();
  210 + try {
  211 + String dateTime = "";
  212 + if (date.equals(date2)) {
  213 + dateTime = sdfSimple.format(sdfMonth.parse(date));
  214 + } else {
  215 + dateTime = sdfSimple.format(sdfMonth.parse(date))
  216 + + "-" + sdfSimple.format(sdfMonth.parse(date2));
  217 + }
  218 + listI.add(export.iterator());
  219 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  220 + ee.excelReplace(listI, new Object[]{m}, path + "mould/auditReport.xls",
  221 + path + "export/" + dateTime + "-" + xlName + "-单车里程统计.xls");
  222 + } catch (Exception e) {
  223 + logger.error("", e);
  224 + }
  225 + }
  226 +
  227 + return lMap;
  228 + }
  229 +
  230 + //求和
  231 + public static Map<String,Double> sum(List<CalcWaybillAudit> lists) {
  232 + Map<String,Double> sum=new HashMap<>();
  233 + double yylc=0;
  234 + double inlc=0;
  235 + double outlc=0;
  236 + double kslc=0;
  237 + double zkslc=0;
  238 + double zlc=0;
  239 +
  240 + for (int i = 0; i < lists.size(); i++) {
  241 + CalcWaybillAudit audit=lists.get(i);
  242 + yylc=Arith.add(yylc,audit.getYylc());
  243 + inlc=Arith.add(inlc,audit.getInlc());
  244 + outlc=Arith.add(outlc,audit.getOutlc());
  245 + kslc=Arith.add(kslc,audit.getKslc());
  246 + zkslc=Arith.add(zkslc,audit.getZkslc());
  247 + zlc=Arith.add(zlc,audit.getZlc());
  248 + }
  249 + sum.put("yylc",yylc);
  250 + sum.put("inlc",inlc);
  251 + sum.put("outlc",outlc);
  252 + sum.put("kslc",kslc);
  253 + sum.put("zkslc",zkslc);
  254 + sum.put("zlc",zlc);
  255 + return sum;
  256 + }
  257 +
  258 +
  259 +
  260 + //计算少驶里程
  261 + //"normal-正常班次、out-出场、in-进场、region-区间、venting-放空班次、major-放站班次、ldks-两点间空驶"
  262 + @Override
  263 + public Map<String, Double> culateksgl(List<ScheduleRealInfo> lists) {
  264 + Map<String, Double> result=new HashMap<>();
  265 + double out =0;
  266 + double in =0;
  267 + double venting =0;
  268 + double major =0;
  269 + double ldks =0;
  270 + double normal =0;
  271 + double region =0;
  272 + double ksgl =0;//除进出场以外的空驶
  273 + double zksgl =0;
  274 + for (int i = 0; i < lists.size(); i++) {
  275 + ScheduleRealInfo scheduleRealInfo=lists.get(i);
  276 + if (scheduleRealInfo.getBcType().equals("in")) {
  277 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  278 + if(childTaskPlans.isEmpty()){
  279 + if(!scheduleRealInfo.isDestroy())
  280 + in =Arith.add(in, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
  281 + }else{
  282 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  283 + while (it.hasNext()) {
  284 + ChildTaskPlan childTaskPlan = it.next();
  285 + if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){
  286 + if (!childTaskPlan.isDestroy()) {
  287 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  288 + in=Arith.add(in,jhgl);
  289 + }
  290 + }
  291 + }
  292 + }
  293 + }else if (scheduleRealInfo.getBcType().equals("out")) {
  294 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  295 + if(childTaskPlans.isEmpty()){
  296 + if(!scheduleRealInfo.isDestroy())
  297 + out =Arith.add(out, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
  298 + }else{
  299 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  300 + while (it.hasNext()) {
  301 + ChildTaskPlan childTaskPlan = it.next();
  302 + if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){
  303 + if (!childTaskPlan.isDestroy()) {
  304 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  305 + out=Arith.add(out,jhgl);
  306 + }
  307 + }
  308 + }
  309 + }
  310 + }else if (scheduleRealInfo.getBcType().equals("venting")) {
  311 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  312 + if(childTaskPlans.isEmpty()){
  313 + if(!scheduleRealInfo.isDestroy())
  314 + venting =Arith.add(venting, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
  315 + }else{
  316 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  317 + while (it.hasNext()) {
  318 + ChildTaskPlan childTaskPlan = it.next();
  319 + if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){
  320 + if (!childTaskPlan.isDestroy()) {
  321 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  322 + venting=Arith.add(venting,jhgl);
  323 + }
  324 + }
  325 + }
  326 + }
  327 + }else if (scheduleRealInfo.getBcType().equals("major")) {
  328 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  329 + if(childTaskPlans.isEmpty()){
  330 + if(!scheduleRealInfo.isDestroy())
  331 + major =Arith.add(major, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
  332 + }else{
  333 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  334 + while (it.hasNext()) {
  335 + ChildTaskPlan childTaskPlan = it.next();
  336 + if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){
  337 + if (!childTaskPlan.isDestroy()) {
  338 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  339 + major=Arith.add(major,jhgl);
  340 + }
  341 + }
  342 + }
  343 + }
  344 + }else if (scheduleRealInfo.getBcType().equals("ldks")) {
  345 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  346 + if(childTaskPlans.isEmpty()){
  347 + if(!scheduleRealInfo.isDestroy())
  348 + ldks =Arith.add(ldks, scheduleRealInfo.getJhlc()==null?0:scheduleRealInfo.getJhlc());
  349 + }else{
  350 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  351 + while (it.hasNext()) {
  352 + ChildTaskPlan childTaskPlan = it.next();
  353 + if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){
  354 + if (!childTaskPlan.isDestroy()) {
  355 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  356 + ldks=Arith.add(ldks,jhgl);
  357 + }
  358 + }
  359 + }
  360 + }
  361 + }else if (scheduleRealInfo.getBcType().equals("normal")) {
  362 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  363 + if(!childTaskPlans.isEmpty()){
  364 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  365 + while (it.hasNext()) {
  366 + ChildTaskPlan childTaskPlan = it.next();
  367 + if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){
  368 + if (!childTaskPlan.isDestroy()) {
  369 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  370 + normal=Arith.add(normal,jhgl);
  371 + }
  372 + }
  373 + }
  374 + }
  375 + }else if (scheduleRealInfo.getBcType().equals("region")) {
  376 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  377 + if(!childTaskPlans.isEmpty()){
  378 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  379 + while (it.hasNext()) {
  380 + ChildTaskPlan childTaskPlan = it.next();
  381 + if(childTaskPlan.getMileageType().equals("empty") && childTaskPlan.getCcId()==null){
  382 + if (!childTaskPlan.isDestroy()) {
  383 + Float jhgl=childTaskPlan.getMileage()==null?0:childTaskPlan.getMileage();
  384 + region=Arith.add(region,jhgl);
  385 + }
  386 + }
  387 + }
  388 + }
  389 + }
  390 + }
  391 + ksgl =Arith.add(Arith.add(Arith.add(Arith.add(venting,major),ldks),normal),region);
  392 + zksgl=Arith.add(Arith.add(ksgl,in),out);
  393 + result.put("out",out);
  394 + result.put("in",in);
  395 + result.put("venting",venting);
  396 + result.put("major",major);
  397 + result.put("in",in);
  398 + result.put("ldks",ldks);
  399 + result.put("normal",normal);
  400 + result.put("region",region);
  401 + result.put("ksgl",ksgl);
  402 + result.put("zksgl",zksgl);
  403 + return result;
  404 + }
  405 +
  406 + @Override
  407 + public List<Map<String, String>> carList() {
  408 + List<Map<String, String>> list=new ArrayList<>();
  409 + Map<String, Cars> cars=BasicData.nbbm2CarMap;
  410 + Iterator<String> iterator = cars.keySet().iterator();
  411 + String key;
  412 + while (iterator.hasNext()) {
  413 + Map<String, String> map = new HashMap<>();
  414 + key = iterator.next();
  415 + Cars car=cars.get(key);
  416 + map.put("nbbm", car.getInsideCode());
  417 + map.put("carPlate", car.getCarPlate());
  418 + map.put("gsbm", car.getBusinessCode());
  419 + map.put("fgsbm", car.getBrancheCompanyCode());
  420 + list.add(map);
  421 + }
  422 + return list;
  423 + }
  424 +
  425 + class AccountXlbm implements Comparator<Map<String, Object>> {
  426 + @Override
  427 + public int compare(Map<String, Object> o1, Map<String, Object> o2) {
  428 + return o1.get("xlNamePy").toString().compareTo(
  429 + o2.get("xlNamePy").toString());
  430 + }
  431 + }
  432 +}
  433 +
  434 +
  435 +
src/main/resources/static/pages/forms/mould/auditReport.xls
No preview for this file type
src/main/resources/static/pages/forms/statement/auditReport.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 -  
18 - #forms > thead > tr> td >span{  
19 - width: 5px;  
20 - word-wrap: break-word;  
21 - letter-spacing: 20px;  
22 - }  
23 -  
24 - #forms > thead > tr> td >label{  
25 - word-break: keep-all;white-space:nowrap;  
26 - }  
27 -</style>  
28 -  
29 -<div class="page-head">  
30 - <div class="page-title">  
31 - <h1>路单审计</h1>  
32 - </div>  
33 -</div>  
34 -  
35 -<!-- <div class="row"> -->  
36 - <div class="col-md-12 portlet light porttlet-fit bordered" style="height:calc(100% - 56px)">  
37 -<!-- <div> -->  
38 - <div class="portlet-title">  
39 - <form class="form-inline" action="">  
40 - <div style="display: inline-block;margin-left: 29px; " id="gsdmDiv">  
41 - <span class="item-label" style="width: 80px;">公司: </span>  
42 - <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select>  
43 - </div>  
44 - <div style="display: inline-block; margin-left: 29px;" id="fgsdmDiv">  
45 - <span class="item-label" style="width: 80px;">分公司: </span>  
46 - <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select>  
47 - </div>  
48 - <div style="display: inline-block;margin-left: 42px;">  
49 - <span class="item-label" style="width: 80px;">线路: </span>  
50 - <select class="form-control" name="line" id="line" style="width: 180px;"></select>  
51 - </div>  
52 - <div style="display: inline-block;margin-left: 42px;">  
53 - <span class="item-label" style="width: 80px;">车辆: </span>  
54 - <select class="form-control" name="car" id="car" style="width: 180px;"></select>  
55 - </div>  
56 - <div style="margin-top: 3px"></div>  
57 - <div style="display: inline-block;margin-left: 15px;">  
58 - <span class="item-label" style="width: 80px;">开始时间: </span>  
59 - <input class="form-control" type="text" id="date" style="width: 180px;"/>  
60 - </div>  
61 - <div style="display: inline-block;margin-left: 15px;">  
62 - <span class="item-label" style="width: 80px;">结束时间: </span>  
63 - <input class="form-control" type="text" id="date2" style="width: 180px;"/>  
64 - </div>  
65 - <div class="form-group">  
66 - <input class="btn btn-default" type="button" id="query" value="查询"/>  
67 - <input class="btn btn-default" type="button" id="export" value="导出"/>  
68 - <input class="btn btn-default" type="button" id="create" value="生成" style="display: none;"/>  
69 - </div>  
70 - </form>  
71 - </div>  
72 - <div class="portlet-body" id="tjrbBody" style="overflow:auto;height: calc(100% - 80px)">  
73 - <div class="table-container" style="margin-top: 10px;min-width: 906px">  
74 -<!-- <label>早高峰:6:31~8:30&nbsp;&nbsp;&nbsp;&nbsp;晚高峰:16:01~18:00</label>-->  
75 - <table class="table table-bordered table-hover table-checkable" id="forms">  
76 - <thead>  
77 - <tr>  
78 - <th colspan="46"><label id="tjrq"></label> 路单审计</th>  
79 - </tr>  
80 - <tr>  
81 - <td rowspan="4"><label>线路</label></td>  
82 - <td rowspan="3"><label>车牌号</label></td>  
83 - <td rowspan="3"><label>车型类别</label></td>  
84 - <td rowspan="3"><label>车长</label></td>  
85 - <td rowspan="3"><label>电车</label></td>  
86 - <td rowspan="3"><label>混合电车</label></td>  
87 - <td rowspan="3"><label>营运里程</label></td>  
88 - <td rowspan="3"><label>进场</label></td>  
89 - <td rowspan="2"><label>出场</label>  
90 - <td rowspan="2"><label>空驶</label></td>  
91 - <td rowspan="2"><label>总空驶</label></td>  
92 - <td rowspan="2"><label>总里程</label></td>  
93 - </tr>  
94 - </thead>  
95 - <tbody class="statisticsDailyCalc2">  
96 -  
97 - </tbody>  
98 - </table>  
99 - </div>  
100 - </div>  
101 - </div>  
102 -  
103 -<script>  
104 - $(function(){  
105 - $('#export').attr('disabled', "true");  
106 -  
107 - // 关闭左侧栏  
108 - if (!$('body').hasClass('page-sidebar-closed'))  
109 - $('.menu-toggler.sidebar-toggler').click();  
110 -  
111 - var d = new Date();  
112 - d.setTime(d.getTime() - 2*1000*60*60*24);  
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 - var dateTime = year + "-" + month + "-" + day;  
121 - $("#date").datetimepicker({  
122 - format : 'YYYY-MM-DD',  
123 - locale : 'zh-cn',  
124 - maxDate : dateTime  
125 - });  
126 - $("#date2").datetimepicker({  
127 - format : 'YYYY-MM-DD',  
128 - locale : 'zh-cn',  
129 - maxDate : dateTime  
130 - });  
131 - $("#date").val(dateTime);  
132 - $("#date2").val(dateTime);  
133 -  
134 - var fage=false;  
135 - var obj = [];  
136 - var xlList;  
137 - $.get('/report/lineList',function(result){  
138 - xlList=result;  
139 - $.get('/user/companyData', function(result){  
140 - obj = result;  
141 - var options = '';  
142 - for(var i = 0; i < obj.length; i++){  
143 - options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';  
144 - }  
145 - if(obj.length ==0){  
146 - $("#gsdmDiv").css('display','none');  
147 - }else if(obj.length ==1){  
148 - $("#gsdmDiv").css('display','none');  
149 - if(obj[0].children.length == 1 || obj[0].children.length ==0)  
150 - $('#fgsdmDiv').css('display','none');  
151 - }  
152 - $('#gsdm').html(options);  
153 - updateCompany();  
154 - });  
155 - });  
156 -  
157 - $("#gsdm").on("change",updateCompany);  
158 - function updateCompany(){  
159 - var company = $('#gsdm').val();  
160 - var options = '<option value="">全部</option>';  
161 - for(var i = 0; i < obj.length; i++){  
162 - if(obj[i].companyCode == company){  
163 - var children = obj[i].children;  
164 - for(var j = 0; j < children.length; j++){  
165 - options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';  
166 - }  
167 - }  
168 - }  
169 - $('#fgsdm').html(options);  
170 - initXl();  
171 - }  
172 -  
173 -  
174 -  
175 -  
176 - $("#fgsdm").on("change",initXl);  
177 - function initXl(){  
178 - var data=[];  
179 - data.push({id: " ", text: "全部线路"});  
180 - if(fage){  
181 - $("#line").select2("destroy").html('');  
182 - }  
183 - var fgs=$('#fgsdm').val();  
184 - var gs=$('#gsdm').val();  
185 - for(var i=0;i<xlList.length;i++){  
186 - if(gs!=""){  
187 - if(fgs!=""){  
188 - if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){  
189 - data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});  
190 - }  
191 - }else{  
192 - if(xlList[i]["gsbm"]==gs){  
193 - data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});  
194 - }  
195 - }  
196 - }  
197 - }  
198 - initPinYinSelect2('#line',data,'');  
199 - fage=true;  
200 - }  
201 -  
202 - $.get('/auditReport/queryCarList',function(carList){  
203 - var data = [];  
204 - data.push({id: " ", text: "全部车辆"});  
205 - $.get('/user/companyData', function(result){  
206 - for(var i = 0; i < result.length; i++){  
207 - var companyCode = result[i].companyCode;  
208 - var children = result[i].children;  
209 - for(var j = 0; j < children.length; j++){  
210 - var code = children[j].code;  
211 - for(var k=0;k < carList.length;k++ ){  
212 - if(carList[k]["fgsbm"]==code && carList[k]["gsbm"]==companyCode){  
213 - data.push({id: carList[k]["nbbm"], text: carList[k]["carPlate"]});  
214 - }  
215 - }  
216 - }  
217 - }  
218 - initPinYinSelect2('#car',data,'');  
219 - });  
220 - });  
221 -  
222 - /*$("#line").on("change", function(){  
223 - if($("#line").val() == " "){  
224 - $("#gsdm").attr("disabled", false);  
225 - $("#fgsdm").attr("disabled", false);  
226 - } else {  
227 - var temp = tempData[$("#line").val()].split(":");  
228 - $("#gsdm").val(temp[0]);  
229 - updateCompany();  
230 - $("#fgsdm").val(temp[1]);  
231 - $("#gsdm").attr("disabled", true);  
232 - $("#fgsdm").attr("disabled", true);  
233 - }  
234 - });*/  
235 -  
236 -  
237 - var line ="";  
238 - var xlName ="";  
239 - var date = "";  
240 - var date2 ="";  
241 - var gsdm="";  
242 - var fgsdm="";  
243 - var nbbm="";  
244 - $("#query").on("click",function(){  
245 - if($("#date").val() == null || $("#date").val().trim().length == 0){  
246 - layer.msg("请选择时间范围!");  
247 - return;  
248 - }  
249 - if($("#date2").val() == null || $("#date2").val().trim().length == 0){  
250 - layer.msg("请选择时间范围!");  
251 - return;  
252 - }  
253 - line = $("#line").val();  
254 - date = $("#date").val();  
255 - date2 =$("#date2").val();  
256 - if(getDateDifference(date, date2)>365){  
257 - layer.msg("单次查询最多不超过365天!");  
258 - return;  
259 - }  
260 - gsdm =$("#gsdm").val();  
261 - fgsdm=$("#fgsdm").val();  
262 - nbbm = $("#car").val();  
263 - xlName = $("#select2-line-container").html();  
264 - if(xlName == "全部线路")  
265 - xlName = $('#fgsdm option:selected').text();  
266 - if(xlName =='请选择')  
267 - xlName = $('#gsdm option:selected').text();  
268 - if(line=="请选择"){  
269 - line="";  
270 - }  
271 - if(date==null || date =="" ||date2==null || date2 ==""){  
272 - layer.msg('请选择时间段.');  
273 - }else{  
274 - $("#tjrq").html(date+"至"+date2);  
275 - var params = {};  
276 - params['gsdm'] = gsdm;  
277 - params['fgsdm'] =fgsdm ;  
278 - params['line'] = line;  
279 - params['date'] = date;  
280 - params['date2'] = date2;  
281 - params['xlName'] = xlName;  
282 - params['nbbm'] = nbbm;  
283 - params['type'] = "query";  
284 - var i = layer.load(2);  
285 - $get('/auditReport/queryList',params,function(result){  
286 - console.log(result);  
287 - // 把数据填充到模版中  
288 - var tbodyHtml = template('statisticsDailyCalc2',{list:result});  
289 - // 把渲染好的模版html文本追加到表格中  
290 - $('#forms .statisticsDailyCalc2').html(tbodyHtml);  
291 - layer.close(i);  
292 - if(result.length == 0)  
293 - $("#export").attr('disabled',"true");  
294 - else  
295 - $("#export").removeAttr("disabled");  
296 - });  
297 - }  
298 -  
299 - });  
300 -// $("#tjrbBody").height($(window).height()-100);  
301 - $("#export").on("click",function(){  
302 - if(getDateDifference(date, date2)>365){  
303 - layer.msg("单次查询最多不超过365天!");  
304 - return;  
305 - }  
306 - var params = {};  
307 - params['gsdm'] = gsdm;  
308 - params['fgsdm'] =fgsdm ;  
309 - params['line'] = line;  
310 - params['date'] = date;  
311 - params['date2'] = date2;  
312 - params['xlName'] = xlName;  
313 - params['nbbm'] = nbbm;  
314 - params['type'] = "export";  
315 - var i = layer.load(2);  
316 - $get('/auditReport/queryList',params,function(result){  
317 - var dateTime = "";  
318 - if(date == date2){  
319 - dateTime = moment(date).format("YYYYMMDD");  
320 - } else {  
321 - dateTime = moment(date).format("YYYYMMDD")  
322 - +"-"+moment(date2).format("YYYYMMDD");  
323 - }  
324 - window.open("/downloadFile/download?fileName="  
325 - +dateTime+"-"+xlName+"-路单审计");  
326 - layer.close(i);  
327 - });  
328 - });  
329 -  
330 - $("#create").on("click",function(){  
331 - if($("#date").val() == null || $("#date").val().trim().length == 0){  
332 - layer.msg("请选择时间!");  
333 - return;  
334 - }  
335 - date = $("#date").val();  
336 - var params = {};  
337 - params['date'] = date;  
338 - var i = layer.load(2);  
339 - $get('/auditReport/create',params,function(result){  
340 - layer.close(i);  
341 - layer.msg('生成成功!');  
342 - });  
343 - });  
344 -  
345 - function getDateDifference(start, end) {  
346 - const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数  
347 - const startDate = new Date(start); // 转换为Date对象  
348 - const endDate = new Date(end); // 转换为Date对象  
349 - const diffDays = Math.round(Math.abs((endDate - startDate) / oneDay)); // 计算两个日期的差值,取绝对值并四舍五入  
350 - return diffDays;  
351 - }  
352 -  
353 - });  
354 -</script>  
355 -<script type="text/html" id="statisticsDailyCalc2">  
356 - {{each list as obj i}}  
357 - <tr>  
358 - <td>{{obj.lineName}}</td>  
359 - <td>{{obj.plate}}</td>  
360 - <td>{{obj.carClass}}</td>  
361 - <td>{{obj.carLength}}</td>  
362 - <td>{{obj.sfdc}}</td>  
363 - <td>{{obj.sfmix}}</td>  
364 - <td>{{obj.yylc}}</td>  
365 - <td>{{obj.in}}</td>  
366 - <td>{{obj.out}}</td>  
367 - <td>{{obj.kslc}}</td>  
368 - <td>{{obj.zkslc}}</td>  
369 - <td>{{obj.zlc}}</td>  
370 - </tr>  
371 - {{/each}}  
372 - {{if list.length == 0}}  
373 - <tr>  
374 - <td colspan="46"><h6 class="muted">没有找到相关数据</h6></td>  
375 - </tr>  
376 - {{/if}} 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 +
  18 + #forms > thead > tr> td >span{
  19 + width: 5px;
  20 + word-wrap: break-word;
  21 + letter-spacing: 20px;
  22 + }
  23 +
  24 + #forms > thead > tr> td >label{
  25 + word-break: keep-all;white-space:nowrap;
  26 + }
  27 +</style>
  28 +
  29 +<div class="page-head">
  30 + <div class="page-title">
  31 + <h1>路单审计</h1>
  32 + </div>
  33 +</div>
  34 +
  35 +<!-- <div class="row"> -->
  36 + <div class="col-md-12 portlet light porttlet-fit bordered" style="height:calc(100% - 56px)">
  37 +<!-- <div> -->
  38 + <div class="portlet-title">
  39 + <form class="form-inline" action="">
  40 + <div style="display: inline-block;margin-left: 29px; " id="gsdmDiv">
  41 + <span class="item-label" style="width: 80px;">公司: </span>
  42 + <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select>
  43 + </div>
  44 + <div style="display: inline-block; margin-left: 29px;" id="fgsdmDiv">
  45 + <span class="item-label" style="width: 80px;">分公司: </span>
  46 + <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select>
  47 + </div>
  48 + <div style="display: inline-block;margin-left: 42px;">
  49 + <span class="item-label" style="width: 80px;">线路: </span>
  50 + <select class="form-control" name="line" id="line" style="width: 180px;"></select>
  51 + </div>
  52 + <div style="display: inline-block;margin-left: 42px;">
  53 + <span class="item-label" style="width: 80px;">车辆: </span>
  54 + <select class="form-control" name="car" id="car" style="width: 180px;"></select>
  55 + </div>
  56 + <div style="margin-top: 3px"></div>
  57 + <div style="display: inline-block;margin-left: 15px;">
  58 + <span class="item-label" style="width: 80px;">开始时间: </span>
  59 + <input class="form-control" type="text" id="date" style="width: 180px;"/>
  60 + </div>
  61 + <div style="display: inline-block;margin-left: 15px;">
  62 + <span class="item-label" style="width: 80px;">结束时间: </span>
  63 + <input class="form-control" type="text" id="date2" style="width: 180px;"/>
  64 + </div>
  65 + <div class="form-group">
  66 + <input class="btn btn-default" type="button" id="query" value="查询"/>
  67 + <input class="btn btn-default" type="button" id="export" value="导出"/>
  68 + <input class="btn btn-default" type="button" id="create" value="生成" style="display: none;"/>
  69 + </div>
  70 + </form>
  71 + </div>
  72 + <div class="portlet-body" id="tjrbBody" style="overflow:auto;height: calc(100% - 80px)">
  73 + <div class="table-container" style="margin-top: 10px;min-width: 906px">
  74 +<!-- <label>早高峰:6:31~8:30&nbsp;&nbsp;&nbsp;&nbsp;晚高峰:16:01~18:00</label>-->
  75 + <table class="table table-bordered table-hover table-checkable" id="forms">
  76 + <thead>
  77 + <tr>
  78 + <th colspan="46"><label id="tjrq"></label> 路单审计</th>
  79 + </tr>
  80 + <tr>
  81 + <td rowspan="4"><label>线路</label></td>
  82 + <td rowspan="3"><label>车牌号</label></td>
  83 + <td rowspan="3"><label>车型类别</label></td>
  84 + <td rowspan="3"><label>车长</label></td>
  85 + <td rowspan="3"><label>电车</label></td>
  86 + <td rowspan="3"><label>混合电车</label></td>
  87 + <td rowspan="3"><label>营运里程</label></td>
  88 + <td rowspan="3"><label>进场</label></td>
  89 + <td rowspan="2"><label>出场</label>
  90 + <td rowspan="2"><label>空驶</label></td>
  91 + <td rowspan="2"><label>总空驶</label></td>
  92 + <td rowspan="2"><label>总里程</label></td>
  93 + </tr>
  94 + </thead>
  95 + <tbody class="statisticsDailyCalc2">
  96 +
  97 + </tbody>
  98 + </table>
  99 + </div>
  100 + </div>
  101 + </div>
  102 +
  103 +<script>
  104 + $(function(){
  105 + $('#export').attr('disabled', "true");
  106 +
  107 + // 关闭左侧栏
  108 + if (!$('body').hasClass('page-sidebar-closed'))
  109 + $('.menu-toggler.sidebar-toggler').click();
  110 +
  111 + var d = new Date();
  112 + d.setTime(d.getTime() - 2*1000*60*60*24);
  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 + var dateTime = year + "-" + month + "-" + day;
  121 + $("#date").datetimepicker({
  122 + format : 'YYYY-MM-DD',
  123 + locale : 'zh-cn',
  124 + maxDate : dateTime
  125 + });
  126 + $("#date2").datetimepicker({
  127 + format : 'YYYY-MM-DD',
  128 + locale : 'zh-cn',
  129 + maxDate : dateTime
  130 + });
  131 + $("#date").val(dateTime);
  132 + $("#date2").val(dateTime);
  133 +
  134 + var fage=false;
  135 + var obj = [];
  136 + var xlList;
  137 + $.get('/report/lineList',function(result){
  138 + xlList=result;
  139 + $.get('/user/companyData', function(result){
  140 + obj = result;
  141 + var options = '';
  142 + for(var i = 0; i < obj.length; i++){
  143 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  144 + }
  145 + if(obj.length ==0){
  146 + $("#gsdmDiv").css('display','none');
  147 + }else if(obj.length ==1){
  148 + $("#gsdmDiv").css('display','none');
  149 + if(obj[0].children.length == 1 || obj[0].children.length ==0)
  150 + $('#fgsdmDiv').css('display','none');
  151 + }
  152 + $('#gsdm').html(options);
  153 + updateCompany();
  154 + });
  155 + });
  156 +
  157 + $("#gsdm").on("change",updateCompany);
  158 + function updateCompany(){
  159 + var company = $('#gsdm').val();
  160 + var options = '<option value="">全部</option>';
  161 + for(var i = 0; i < obj.length; i++){
  162 + if(obj[i].companyCode == company){
  163 + var children = obj[i].children;
  164 + for(var j = 0; j < children.length; j++){
  165 + options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
  166 + }
  167 + }
  168 + }
  169 + $('#fgsdm').html(options);
  170 + initXl();
  171 + }
  172 +
  173 +
  174 +
  175 +
  176 + $("#fgsdm").on("change",initXl);
  177 + function initXl(){
  178 + var data=[];
  179 + data.push({id: " ", text: "全部线路"});
  180 + if(fage){
  181 + $("#line").select2("destroy").html('');
  182 + }
  183 + var fgs=$('#fgsdm').val();
  184 + var gs=$('#gsdm').val();
  185 + for(var i=0;i<xlList.length;i++){
  186 + if(gs!=""){
  187 + if(fgs!=""){
  188 + if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
  189 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  190 + }
  191 + }else{
  192 + if(xlList[i]["gsbm"]==gs){
  193 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  194 + }
  195 + }
  196 + }
  197 + }
  198 + initPinYinSelect2('#line',data,'');
  199 + fage=true;
  200 + }
  201 +
  202 + $.get('/auditReport/queryCarList',function(carList){
  203 + var data = [];
  204 + data.push({id: " ", text: "全部车辆"});
  205 + $.get('/user/companyData', function(result){
  206 + for(var i = 0; i < result.length; i++){
  207 + var companyCode = result[i].companyCode;
  208 + var children = result[i].children;
  209 + for(var j = 0; j < children.length; j++){
  210 + var code = children[j].code;
  211 + for(var k=0;k < carList.length;k++ ){
  212 + if(carList[k]["fgsbm"]==code && carList[k]["gsbm"]==companyCode){
  213 + data.push({id: carList[k]["nbbm"], text: carList[k]["carPlate"]});
  214 + }
  215 + }
  216 + }
  217 + }
  218 + initPinYinSelect2('#car',data,'');
  219 + });
  220 + });
  221 +
  222 + /*$("#line").on("change", function(){
  223 + if($("#line").val() == " "){
  224 + $("#gsdm").attr("disabled", false);
  225 + $("#fgsdm").attr("disabled", false);
  226 + } else {
  227 + var temp = tempData[$("#line").val()].split(":");
  228 + $("#gsdm").val(temp[0]);
  229 + updateCompany();
  230 + $("#fgsdm").val(temp[1]);
  231 + $("#gsdm").attr("disabled", true);
  232 + $("#fgsdm").attr("disabled", true);
  233 + }
  234 + });*/
  235 +
  236 +
  237 + var line ="";
  238 + var xlName ="";
  239 + var date = "";
  240 + var date2 ="";
  241 + var gsdm="";
  242 + var fgsdm="";
  243 + var nbbm="";
  244 + $("#query").on("click",function(){
  245 + if($("#date").val() == null || $("#date").val().trim().length == 0){
  246 + layer.msg("请选择时间范围!");
  247 + return;
  248 + }
  249 + if($("#date2").val() == null || $("#date2").val().trim().length == 0){
  250 + layer.msg("请选择时间范围!");
  251 + return;
  252 + }
  253 + line = $("#line").val();
  254 + date = $("#date").val();
  255 + date2 =$("#date2").val();
  256 + if(getDateDifference(date, date2)>365){
  257 + layer.msg("单次查询最多不超过365天!");
  258 + return;
  259 + }
  260 + gsdm =$("#gsdm").val();
  261 + fgsdm=$("#fgsdm").val();
  262 + nbbm = $("#car").val();
  263 + xlName = $("#select2-line-container").html();
  264 + if(xlName == "全部线路")
  265 + xlName = $('#fgsdm option:selected').text();
  266 + if(xlName =='请选择')
  267 + xlName = $('#gsdm option:selected').text();
  268 + if(line=="请选择"){
  269 + line="";
  270 + }
  271 + if(date==null || date =="" ||date2==null || date2 ==""){
  272 + layer.msg('请选择时间段.');
  273 + }else{
  274 + $("#tjrq").html(date+"至"+date2);
  275 + var params = {};
  276 + params['gsdm'] = gsdm;
  277 + params['fgsdm'] =fgsdm ;
  278 + params['line'] = line;
  279 + params['date'] = date;
  280 + params['date2'] = date2;
  281 + params['xlName'] = xlName;
  282 + params['nbbm'] = nbbm;
  283 + params['type'] = "query";
  284 + var i = layer.load(2);
  285 + $get('/auditReport/queryList',params,function(result){
  286 + console.log(result);
  287 + // 把数据填充到模版中
  288 + var tbodyHtml = template('statisticsDailyCalc2',{list:result});
  289 + // 把渲染好的模版html文本追加到表格中
  290 + $('#forms .statisticsDailyCalc2').html(tbodyHtml);
  291 + layer.close(i);
  292 + if(result.length == 0)
  293 + $("#export").attr('disabled',"true");
  294 + else
  295 + $("#export").removeAttr("disabled");
  296 + });
  297 + }
  298 +
  299 + });
  300 +// $("#tjrbBody").height($(window).height()-100);
  301 + $("#export").on("click",function(){
  302 + if(getDateDifference(date, date2)>365){
  303 + layer.msg("单次查询最多不超过365天!");
  304 + return;
  305 + }
  306 + var params = {};
  307 + params['gsdm'] = gsdm;
  308 + params['fgsdm'] =fgsdm ;
  309 + params['line'] = line;
  310 + params['date'] = date;
  311 + params['date2'] = date2;
  312 + params['xlName'] = xlName;
  313 + params['nbbm'] = nbbm;
  314 + params['type'] = "export";
  315 + var i = layer.load(2);
  316 + $get('/auditReport/queryList',params,function(result){
  317 + var dateTime = "";
  318 + if(date == date2){
  319 + dateTime = moment(date).format("YYYYMMDD");
  320 + } else {
  321 + dateTime = moment(date).format("YYYYMMDD")
  322 + +"-"+moment(date2).format("YYYYMMDD");
  323 + }
  324 + window.open("/downloadFile/download?fileName="
  325 + +dateTime+"-"+xlName+"-单车里程统计");
  326 + layer.close(i);
  327 + });
  328 + });
  329 +
  330 + $("#create").on("click",function(){
  331 + if($("#date").val() == null || $("#date").val().trim().length == 0){
  332 + layer.msg("请选择时间!");
  333 + return;
  334 + }
  335 + date = $("#date").val();
  336 + var params = {};
  337 + params['date'] = date;
  338 + var i = layer.load(2);
  339 + $get('/auditReport/create',params,function(result){
  340 + layer.close(i);
  341 + layer.msg('生成成功!');
  342 + });
  343 + });
  344 +
  345 + function getDateDifference(start, end) {
  346 + const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数
  347 + const startDate = new Date(start); // 转换为Date对象
  348 + const endDate = new Date(end); // 转换为Date对象
  349 + const diffDays = Math.round(Math.abs((endDate - startDate) / oneDay)); // 计算两个日期的差值,取绝对值并四舍五入
  350 + return diffDays;
  351 + }
  352 +
  353 + });
  354 +</script>
  355 +<script type="text/html" id="statisticsDailyCalc2">
  356 + {{each list as obj i}}
  357 + <tr>
  358 + <td>{{obj.lineName}}</td>
  359 + <td>{{obj.plate}}</td>
  360 + <td>{{obj.carClass}}</td>
  361 + <td>{{obj.carLength}}</td>
  362 + <td>{{obj.sfdc}}</td>
  363 + <td>{{obj.sfmix}}</td>
  364 + <td>{{obj.yylc}}</td>
  365 + <td>{{obj.in}}</td>
  366 + <td>{{obj.out}}</td>
  367 + <td>{{obj.kslc}}</td>
  368 + <td>{{obj.zkslc}}</td>
  369 + <td>{{obj.zlc}}</td>
  370 + </tr>
  371 + {{/each}}
  372 + {{if list.length == 0}}
  373 + <tr>
  374 + <td colspan="46"><h6 class="muted">没有找到相关数据</h6></td>
  375 + </tr>
  376 + {{/if}}
377 </script> 377 </script>
378 \ No newline at end of file 378 \ No newline at end of file