Commit 295229a2fd0690bc47fce7077cf4ae2d542ed149

Authored by 潘钊
2 parents 78a2f1ce 3b5e534a

Merge branch 'pudong' of http://222.66.0.204:8090/panzhaov5/bsth_control into pudong

Showing 28 changed files with 2443 additions and 680 deletions

Too many changes to show.

To preserve performance only 28 of 57 files are displayed.

src/main/java/com/bsth/controller/BusIntervalController.java
... ... @@ -52,5 +52,10 @@ public class BusIntervalController {
52 52 public List<Map<String,Object>> correctStatis(@RequestParam Map<String, Object> map){
53 53 return busIntervalService.correctStatis(map);
54 54 }
55   -
  55 +
  56 + @RequestMapping(value = "exportWaybillMore", method = RequestMethod.GET)
  57 + public Map<String, Object> exportWaybillMore(@RequestParam Map<String, Object> map){
  58 + return busIntervalService.exportWaybillMore(map);
  59 + }
  60 +
56 61 }
... ...
src/main/java/com/bsth/controller/SectionController.java
... ... @@ -135,7 +135,16 @@ public class SectionController extends BaseController&lt;Section, Integer&gt; {
135 135 @RequestMapping(value="getSectionCode" , method = RequestMethod.GET)
136 136 public long getSectionCode() {
137 137 return GetUIDAndCode.getSectionId();
138   -
  138 + }
  139 +
  140 + /**
  141 + * @Description :TODO(把路段截取位双路名路段)
  142 + *
  143 + * @return int <sectionCode路段编码>
  144 + */
  145 + @RequestMapping(value="doubleName" , method = RequestMethod.GET)
  146 + public Map<String, Object> doubleName(@RequestParam Map<String, Object> map) {
  147 + return service.doubleName(map);
139 148 }
140 149  
141 150 }
... ...
src/main/java/com/bsth/controller/StationController.java
... ... @@ -148,14 +148,28 @@ public class StationController extends BaseController&lt;Station, Integer&gt; {
148 148 return service.stationCacheUpdate(map);
149 149 }
150 150 /**
  151 + * @Description :TODO(更新内部编码)
  152 + * @param stationCount,sectionCount 更新数
  153 + */
  154 + @RequestMapping(value="updateStationAndSectionCode" , method = RequestMethod.GET)
  155 + public int updateStationAndSectionCode(@RequestParam Integer stationCount, Integer sectionCount) {
  156 + for(int i = 0; i < stationCount; i++) {
  157 + GetUIDAndCode.getStationId();
  158 + }
  159 + for(int i = 0; i < sectionCount; i++) {
  160 + GetUIDAndCode.getSectionId();
  161 + }
  162 + return 1;
  163 + }
  164 + /**
151 165 * @Description :TODO(查询站点编码)
152   - *
  166 + *
153 167 * @return int <stationCode站点编码>
154 168 */
155 169 @RequestMapping(value="getStationCode" , method = RequestMethod.GET)
156 170 public long getStationCode() {
157 171 return GetUIDAndCode.getStationId();
158   -
  172 +
159 173 }
160 174 /**
161 175 * @Description :TODO(查询站点编码)
... ...
src/main/java/com/bsth/controller/StationRouteController.java
1 1 package com.bsth.controller;
2 2  
  3 +import com.bsth.entity.Station;
3 4 import com.bsth.entity.StationRoute;
4 5 import com.bsth.entity.StationRouteCache;
5 6 import com.bsth.repository.StationRouteCacheRepository;
... ... @@ -110,12 +111,20 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer
110 111 }
111 112  
112 113 /**
113   - * @Description :TODO(查询缓存站点的上一个缓存站点)
  114 + * @Description :TODO(查询线路某方向下的站点序号与类型)
114 115 */
115 116 @RequestMapping(value = "/findCacheUpStationRouteCode" , method = RequestMethod.GET)
116 117 public List<Map<String, Object>> findCacheUpStationRouteCode(@RequestParam Map<String, Object> map) {
117 118 return service.findCacheUpStationRouteCode(map);
118 119 }
  120 +
  121 + /**
  122 + * @Description :TODO(查询站点的下一个缓存站点)
  123 + */
  124 + @RequestMapping(value = "/findDownStationRoute" , method = RequestMethod.GET)
  125 + public List<Map<String, Object>> findDownStationRoute(@RequestParam Map<String, Object> map) {
  126 + return service.findDownStationRoute(map);
  127 + }
119 128  
120 129 /**
121 130 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)
... ...
src/main/java/com/bsth/entity/LonLatName.java 0 → 100644
  1 +package com.bsth.entity;
  2 +
  3 +public class LonLatName {
  4 + public String first_name;
  5 + public String second_name;
  6 + public String way_name;
  7 + public String location;
  8 +
  9 + public String getFirst_name() {
  10 + return first_name;
  11 + }
  12 +
  13 + public void setFirst_name(String first_name) {
  14 + this.first_name = first_name;
  15 + }
  16 +
  17 + public String getSecond_name() {
  18 + return second_name;
  19 + }
  20 +
  21 + public void setSecond_name(String second_name) {
  22 + this.second_name = second_name;
  23 + }
  24 +
  25 + public String getWay_name() {
  26 + return way_name;
  27 + }
  28 +
  29 + public void setWay_name(String way_name) {
  30 + this.way_name = way_name;
  31 + }
  32 + public String getLocation() {
  33 + return location;
  34 + }
  35 +
  36 + public void setLocation(String location) {
  37 + this.location = location;
  38 + }
  39 +}
... ...
src/main/java/com/bsth/entity/oil/Dlb.java
... ... @@ -58,6 +58,8 @@ public class Dlb {
58 58 private int nylx;
59 59 //进场顺序(根据最先出场和最后进场来关联车辆的存电量)
60 60 private int jcsx;
  61 +
  62 + private String jname;
61 63 @Transient
62 64 private String name;
63 65 @Transient
... ... @@ -73,6 +75,7 @@ public class Dlb {
73 75 private String fgsname;
74 76  
75 77  
  78 +
76 79 private String lp;
77 80  
78 81 public Integer getId() {
... ... @@ -391,6 +394,14 @@ public class Dlb {
391 394 public void setLp(String lp) {
392 395 this.lp = lp;
393 396 }
  397 +
  398 + public String getJname() {
  399 + return jname;
  400 + }
  401 +
  402 + public void setJname(String jname) {
  403 + this.jname = jname;
  404 + }
394 405  
395 406  
396 407  
... ...
src/main/java/com/bsth/entity/oil/Ylb.java
... ... @@ -26,6 +26,7 @@ public class Ylb {
26 26 private String fgsdm;
27 27 private String nbbm;
28 28 private String jsy;
  29 + private String jname;
29 30 private Double czlc=0.0;
30 31 private Double jzlc=0.0;
31 32 private Double czyl=0.0;
... ... @@ -339,6 +340,14 @@ public class Ylb {
339 340 public void setLp(String lp) {
340 341 this.lp = lp;
341 342 }
  343 +
  344 + public String getJname() {
  345 + return jname;
  346 + }
  347 +
  348 + public void setJname(String jname) {
  349 + this.jname = jname;
  350 + }
342 351  
343 352  
344 353 }
... ...
src/main/java/com/bsth/repository/CarsRepository.java
... ... @@ -15,4 +15,7 @@ public interface CarsRepository extends BaseRepository&lt;Cars, Integer&gt;{
15 15  
16 16 @Query(value="select s from Cars s")
17 17 List<Cars> findCars();
  18 +
  19 + @Query(value="select s from Cars s where s.insideCode=?1")
  20 + List<Cars> findCarsByCode(String insideCode);
18 21 }
... ...
src/main/java/com/bsth/repository/SectionRouteRepository.java
... ... @@ -172,9 +172,13 @@ public interface SectionRouteRepository extends BaseRepository&lt;SectionRoute, Int
172 172 void isRoadSpeedUpd(Integer isR,Integer line,Integer directions);
173 173  
174 174 @Modifying
175   - @Query(value="UPDATE bsth_c_sectionroute set sectionroute_code = (sectionroute_code+10) where line = ?1 and directions = ?2 and sectionroute_code >=?3 and destroy = 0", nativeQuery=true)
  175 + @Query(value="UPDATE bsth_c_sectionroute set sectionroute_code = (sectionroute_code+100) where line = ?1 and directions = ?2 and sectionroute_code >=?3 and destroy = 0", nativeQuery=true)
176 176 public void sectionUpdSectionRouteCode(Integer line,Integer dir,Integer routeCod);
177   -
  177 +
  178 + @Modifying
  179 + @Query(value="UPDATE bsth_c_sectionroute set sectionroute_code = (sectionroute_code+100) where line_code = ?1 and directions = ?2 and sectionroute_code >=?3 and destroy = 0", nativeQuery=true)
  180 + public void sectionUpdSectionRouteCode(String lineCode,Integer dir,int routeCod);
  181 +
178 182 @Modifying
179 183 @Query(value="UPDATE bsth_c_sectionroute set destroy = 1 where id = ?1", nativeQuery=true)
180 184 public void sectionRouteIsDestroyUpdBatch(Integer id);
... ...
src/main/java/com/bsth/repository/StationRouteRepository.java
... ... @@ -102,8 +102,79 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int
102 102 "select MAX(station_route_code) as stationRouteCode from bsth_c_stationroute r WHERE " +
103 103 "r.line=?1 and r.directions =?2 and station_route_code< ?3 and r.destroy = 0 ) and t.line=?1 and t.directions = ?2 AND t.destroy = 0", nativeQuery=true)
104 104 List<Object[]> findUpStationRouteCode(Integer lineId,Integer direction,Integer stationRouteCode);
105   -
106   -
  105 +
  106 + /**
  107 + * @Description :TODO(查询下个站点)
  108 + *
  109 + * @param map <lineId:线路ID; direction:方向;stationRouteCode:站点编码>
  110 + *
  111 + * @return List<Map<String, Object>>
  112 + */
  113 + @Query(value = "SELECT a.stationRouteLine," +
  114 + " a.stationRouteStation," +
  115 + " a.stationRouteCode," +
  116 + " a.stationRouteLIneCode," +
  117 + " a.stationRouteStationMark," +
  118 + " a.stationOutStationNmber," +
  119 + " a.stationRoutedirections," +
  120 + " a.stationRouteDistances," +
  121 + " a.stationRouteToTime," +
  122 + " a.staitonRouteFirstTime," +
  123 + " a.stationRouteEndTime," +
  124 + " a.stationRouteDescriptions," +
  125 + " a.stationRouteDestroy," +
  126 + " a.stationRouteVersions," +
  127 + " a.stationRouteCreateBy," +
  128 + " a.stationRouteCreateDate," +
  129 + " a.stationRouteUpdateBy," +
  130 + " a.stationRouteUpdateDate," +
  131 + " b.id AS stationId," +
  132 + " b.station_cod AS stationCode," +
  133 + " a.stationRouteName," +
  134 + " b.road_coding AS stationRoadCoding," +
  135 + " b.db_type AS stationDbType," +
  136 + " b.b_jwpoints AS stationJwpoints," +
  137 + " b.g_lonx AS stationGlonx," +
  138 + " b.g_laty AS stationGlaty," +
  139 + " b.x AS stationX," +
  140 + " b.y AS stationY," +
  141 + " ST_AsText(b.b_polygon_grid) as stationBPolyonGrid," +
  142 + " ST_AsText(b.g_polygon_grid) AS stationGPloyonGrid, " +
  143 + " b.destroy AS stationDestroy," +
  144 + " b.radius AS stationRadius," +
  145 + " b.shapes_type AS stationShapesType," +
  146 + " b.versions AS stationVersions," +
  147 + " b.descriptions AS sttationDescriptions," +
  148 + " b.create_by AS stationCreateBy," +
  149 + " b.create_date AS stationCreateDate," +
  150 + " b.update_by AS stationUpdateBy," +
  151 + " b.update_date AS stationUpdateDate," +
  152 + " a.stationRouteId,b.station_name as zdmc "+
  153 + " FROM ( SELECT s.id AS stationRouteId," +
  154 + " s.line AS stationRouteLine," +
  155 + " s.station as stationRouteStation," +
  156 + " s.station_name AS stationRouteName," +
  157 + " s.station_route_code as stationRouteCode," +
  158 + " s.line_code AS stationRouteLIneCode," +
  159 + " s.station_mark AS stationRouteStationMark," +
  160 + " s.out_station_nmber AS stationOutStationNmber," +
  161 + " s.directions AS stationRoutedirections," +
  162 + " s.distances AS stationRouteDistances," +
  163 + " s.to_time AS stationRouteToTime," +
  164 + " s.first_time AS staitonRouteFirstTime," +
  165 + " s.end_time AS stationRouteEndTime," +
  166 + " s.descriptions AS stationRouteDescriptions," +
  167 + " s.destroy AS stationRouteDestroy," +
  168 + " s.versions AS stationRouteVersions," +
  169 + " s.create_by AS stationRouteCreateBy," +
  170 + " s.create_date AS stationRouteCreateDate," +
  171 + " s.update_by AS stationRouteUpdateBy," +
  172 + " s.update_date AS stationRouteUpdateDate FROM bsth_c_stationroute s WHERE s.station_route_code =(" +
  173 + "select MIN(station_route_code) as stationRouteCode from bsth_c_stationroute r WHERE " +
  174 + "r.line=?1 and r.directions =?2 and station_route_code > ?3 and r.destroy = 0 ) and s.line=?1 and s.directions = ?2 AND s.destroy = 0) a " +
  175 + " LEFT JOIN bsth_c_station b ON a.stationRouteStation = b.id", nativeQuery=true)
  176 + List<Object[]> findDownStationRoute(Integer id,Integer direction,Integer stationRouteCode);
  177 +
107 178 /**
108 179 * @Description :TODO(站点中心点坐标查询)
109 180 *
... ...
src/main/java/com/bsth/repository/oil/DlbRepository.java
... ... @@ -95,4 +95,8 @@ public interface DlbRepository extends BaseRepository&lt;Dlb, Integer&gt;{
95 95  
96 96 @Query(value="SELECT * FROM bsth_c_dlb where to_days(?1)=to_days(rq) and nbbm =?2 and jsy=?3 and xlbm=?4",nativeQuery=true)
97 97 List<Dlb> queryListDlb(String rq,String nbbm,String jgh,String xlbm);
  98 +
  99 + @Query(value="SELECT * FROM bsth_c_dlb where to_days(?1)=to_days(rq) and xlbm=?2",nativeQuery=true)
  100 + List<Dlb> queryDlbByRqXlbm(String rq, String xlbm);
  101 +
98 102 }
... ...
src/main/java/com/bsth/repository/oil/YlbRepository.java
... ... @@ -49,13 +49,13 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
49 49 @Query(value="select * from bsth_c_ylb where to_days(?1) -to_days(rq) <30 "
50 50 + " and rq< ?1 and ssgsdm like %?2%"
51 51 + " and fgsdm like %?3% and xlbm like %?4% and nbbm like %?5% "
52   - + " order by nbbm , rq desc,jcsx desc",nativeQuery=true)
  52 + + " order by nbbm , rq desc,jcsx desc,lp desc",nativeQuery=true)
53 53 List<Ylb> listByRqJcsx(String rq,String gsbm,String fgsbm,String xlbm,String nbbm);
54 54  
55 55 @Query(value="select * from bsth_c_ylb where rq>=?1 "
56 56 + " and rq<= ?2 and ssgsdm =?3"
57 57 + " and fgsdm =?4 and xlbm like %?5% "
58   - + " order by nbbm , rq desc,jcsx desc",nativeQuery=true)
  58 + + " order by nbbm , rq desc,jcsx desc,lp desc",nativeQuery=true)
59 59 List<Ylb> listByMonthJcsx(String rq,String rq2,String gsbm,String fgsbm,String xlbm);
60 60  
61 61 /**
... ... @@ -81,6 +81,9 @@ public interface YlbRepository extends BaseRepository&lt;Ylb, Integer&gt;{
81 81  
82 82 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and nbbm =?2 and jsy=?3 and xlbm=?4",nativeQuery=true)
83 83 List<Ylb> queryListYlb(String rq,String nbbm,String jgh,String xlbm);
  84 +
  85 + @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and xlbm=?2",nativeQuery=true)
  86 + List<Ylb> queryYlbByRqXlbm(String rq,String xlbm);
84 87  
85 88 @Query(value="SELECT * FROM bsth_c_ylb where to_days(?1)=to_days(rq) and nbbm =?2 and jsy=?3 and xlbm=?4 order by ?5 asc",nativeQuery=true)
86 89 List<Ylb> checkYlb(String rq,String nbbm,String jgh,String xlbm,String px);
... ...
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
... ... @@ -193,10 +193,10 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
193 193 List<ScheduleRealInfo> scheduleByDateAndLineYbb(String line,String date,String date2);
194 194  
195 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(s.fcsj) as fcsj,min(s.realExecDate) 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,fcsj")
  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(s.fcsj) as fcsj,min(s.realExecDate) as realExecDate,s.jName as jName ) 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,jName ORDER BY clZbh,realExecDate,fcsj")
197 197 List<Map<String,Object>> yesterdayDataList(String line,String date,String gsbm,String fgsbm,String nbbm);
198 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(s.fcsj) as fcsj,min(s.realExecDate) 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,fcsj")
  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(s.fcsj) as fcsj,min(s.realExecDate) as realExecDate,s.jName as jName ) 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,jName ORDER BY clZbh,realExecDate,fcsj")
200 200 List<Map<String,Object>> yesterdayDataList_eq(String line,String date,String gsbm,String fgsbm,String nbbm);
201 201  
202 202 @Query(value="select s from ScheduleRealInfo s where s.scheduleDateStr = ?1 ORDER BY xlBm,lpName,clZbh,xlDir")
... ...
src/main/java/com/bsth/service/BusIntervalService.java
... ... @@ -19,4 +19,6 @@ public interface BusIntervalService {
19 19 List<Map<String, Object>> lbStatuAnaly(Map<String, Object> map);
20 20  
21 21 List<Map<String, Object>> correctStatis(Map<String, Object> map);
  22 +
  23 + Map<String, Object> exportWaybillMore(Map<String, Object> map);
22 24 }
... ...
src/main/java/com/bsth/service/SectionService.java
... ... @@ -37,4 +37,6 @@ public interface SectionService extends BaseService&lt;Section, Integer&gt; {
37 37 Map<String, Object> sectionCacheUpdate(Map<String, Object> map);
38 38  
39 39 Map<String, Object> sectionCutSaveLineLS(Map<String, Object> map);
  40 +
  41 + Map<String,Object> doubleName(Map<String, Object> map);
40 42 }
... ...
src/main/java/com/bsth/service/StationRouteService.java
... ... @@ -72,9 +72,18 @@ public interface StationRouteService extends BaseService&lt;StationRoute, Integer&gt;
72 72 * @return List<Map<String, Object>>
73 73 */
74 74 List<Map<String, Object>> findUpStationRouteCode(Map<String, Object> map);
75   -
  75 +
76 76 List<Map<String, Object>> findCacheUpStationRouteCode(Map<String, Object> map);
77   -
  77 +
  78 + /**
  79 + * @Description :TODO(查询下一个站点)
  80 + *
  81 + * @param map <站点路由id; direction:方向;stationRouteCode:站点编码>
  82 + *
  83 + * @return List<Map<String, Object>>
  84 + */
  85 + List<Map<String, Object>> findDownStationRoute(Map<String, Object> map);
  86 +
78 87 /**
79 88 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)
80 89 *
... ...
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
1 1 package com.bsth.service.impl;
2 2  
  3 +import java.io.File;
3 4 import java.math.BigDecimal;
4 5 import java.math.RoundingMode;
5 6 import java.sql.ResultSet;
6 7 import java.sql.SQLException;
7 8 import java.text.DecimalFormat;
  9 +import java.text.ParseException;
8 10 import java.text.SimpleDateFormat;
9 11 import java.util.ArrayList;
  12 +import java.util.Calendar;
10 13 import java.util.Collections;
11 14 import java.util.Comparator;
12 15 import java.util.Date;
  16 +import java.util.GregorianCalendar;
13 17 import java.util.HashMap;
14 18 import java.util.HashSet;
15 19 import java.util.Iterator;
... ... @@ -23,27 +27,62 @@ import org.springframework.jdbc.core.JdbcTemplate;
23 27 import org.springframework.jdbc.core.RowMapper;
24 28 import org.springframework.stereotype.Service;
25 29  
  30 +import com.alibaba.fastjson.JSON;
26 31 import com.alibaba.fastjson.JSONArray;
27 32 import com.bsth.data.BasicData;
28 33 import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
  34 +import com.bsth.entity.Cars;
  35 +import com.bsth.entity.Line;
  36 +import com.bsth.entity.oil.Dlb;
  37 +import com.bsth.entity.oil.Ylb;
29 38 import com.bsth.entity.realcontrol.ChildTaskPlan;
30 39 import com.bsth.entity.realcontrol.ScheduleRealInfo;
  40 +import com.bsth.entity.sys.DutyEmployee;
  41 +import com.bsth.repository.CarsRepository;
  42 +import com.bsth.repository.LineRepository;
  43 +import com.bsth.repository.oil.DlbRepository;
  44 +import com.bsth.repository.oil.YlbRepository;
31 45 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
32 46 import com.bsth.service.BusIntervalService;
  47 +import com.bsth.service.report.CulateMileageService;
33 48 import com.bsth.service.schedule.PeopleCarPlanService;
  49 +import com.bsth.service.sys.DutyEmployeeService;
  50 +import com.bsth.util.Arith;
  51 +import com.bsth.util.ComparableChild;
  52 +import com.bsth.util.ComparableReal;
  53 +import com.bsth.util.ReportRelatedUtils;
34 54 import com.bsth.util.ReportUtils;
  55 +import com.bsth.util.TimeUtils;
35 56 import com.google.gson.Gson;
36 57  
37 58  
38 59 @Service
39 60 public class BusIntervalServiceImpl implements BusIntervalService {
40 61  
  62 + @Autowired
  63 + CulateMileageService culateService;
  64 +
41 65 @Autowired
42 66 private PeopleCarPlanService peopleCarPlanService;
43 67  
44 68 @Autowired
45 69 private ScheduleRealInfoRepository scheduleRealInfoRepository;
46   -
  70 +
  71 + @Autowired
  72 + DutyEmployeeService dutyEmployeeService;
  73 +
  74 + @Autowired
  75 + LineRepository lineRepository;
  76 +
  77 + @Autowired
  78 + YlbRepository ylbRepository;
  79 +
  80 + @Autowired
  81 + DlbRepository dlbRepository;
  82 +
  83 + @Autowired
  84 + CarsRepository carsRepository;
  85 +
47 86 @Autowired
48 87 private JdbcTemplate jdbcTemplate;
49 88  
... ... @@ -241,7 +280,55 @@ public class BusIntervalServiceImpl implements BusIntervalService {
241 280  
242 281 return list;
243 282 }
244   -
  283 +
  284 + public Map<Long, Set<ChildTaskPlan>> getChildTaskPlans(Long schedule1, Long schedule2){
  285 +
  286 + Map<Long, Set<ChildTaskPlan>> schMap = new HashMap<Long, Set<ChildTaskPlan>>();
  287 + List<ChildTaskPlan> list = new ArrayList<ChildTaskPlan>();
  288 +
  289 + String sql = "select id,cc_id,mileage_type,destroy,destroy_reason," +
  290 + " mileage,type1,type2,schedule from bsth_c_s_child_task" +
  291 + " where 1=1";
  292 + if(schedule1 != null && schedule1 > 0){
  293 + sql += " and schedule >= '"+schedule1+"'";
  294 + }
  295 + if(schedule2 != null && schedule2 > 0){
  296 + sql += " and schedule <= '"+schedule2+"'";
  297 + }
  298 +
  299 + list = jdbcTemplate.query(sql,
  300 + new RowMapper<ChildTaskPlan>(){
  301 + @Override
  302 + public ChildTaskPlan mapRow(ResultSet rs, int rowNum) throws SQLException {
  303 + ChildTaskPlan ct = new ChildTaskPlan();
  304 + ct.setId(rs.getLong("id"));
  305 + ct.setCcId(rs.getLong("cc_id"));
  306 + ct.setMileageType(rs.getString("mileage_type"));
  307 + ct.setDestroy(rs.getBoolean("destroy"));
  308 + ct.setDestroyReason(rs.getString("destroy_reason"));
  309 + ct.setMileage(rs.getFloat("mileage"));
  310 + ct.setType1(rs.getString("type1"));
  311 + ct.setType2(rs.getString("type2"));
  312 + ScheduleRealInfo schedule = new ScheduleRealInfo();
  313 + schedule.setId(rs.getLong("schedule"));
  314 + ct.setSchedule(schedule);
  315 + if(ct.getCcId() == 0l){
  316 + ct.setCcId(null);
  317 + }
  318 + return ct;
  319 + }
  320 + });
  321 +
  322 + for(ChildTaskPlan ct : list){
  323 + Long id = ct.getSchedule().getId();
  324 + if(!schMap.containsKey(id))
  325 + schMap.put(id, new HashSet<ChildTaskPlan>());
  326 + schMap.get(id).add(ct);
  327 + }
  328 +
  329 + return schMap;
  330 + }
  331 +
245 332 @Override
246 333 public List<Map<String, Object>> getDir(Map<String, Object> map) {
247 334 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
... ... @@ -1630,6 +1717,15 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1630 1717 }
1631 1718  
1632 1719 list = getSchedule(company, subCompany, line, startDate, endDate, model, sfqr==1?times:"", true);
  1720 + long schedule1 = 0l, schedule2 = 0l;
  1721 + for(ScheduleRealInfo schedule : list){
  1722 + long id = schedule.getId();
  1723 + if(schedule1 == 0l || schedule1 > id)
  1724 + schedule1 = id;
  1725 + if(schedule2 == 0l || schedule1 < id)
  1726 + schedule2 = id;
  1727 + }
  1728 + Map<Long, Set<ChildTaskPlan>> cts = getChildTaskPlans(schedule1, schedule2);
1633 1729  
1634 1730 String[] date1 = startDate.split("-");
1635 1731 String[] date2 = endDate.split("-");
... ... @@ -1702,46 +1798,67 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1702 1798 jhlc = jhlc.add(lc);
1703 1799 }
1704 1800 if(schedule.getFcsjActual() != null && schedule.getZdsjActual() != null
1705   - && schedule.getStatus() != -1 && !schedule.isCcService()){
1706   - sjbc++;
1707   - sjlc = sjlc.add(lc);
1708   - } else if(schedule.getStatus() == -1 && !schedule.isCcService()){
  1801 + && schedule.getStatus() != -1){
  1802 + if(!schedule.isCcService())
  1803 + sjbc++;
  1804 +// sjlc = sjlc.add(lc);
  1805 + } else if(schedule.getStatus() == -1){
1709 1806 if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("路阻") != -1){
1710 1807 lzbc++;
1711   - lzlc = lzlc.add(lc);
  1808 +// lzlc = lzlc.add(lc);
1712 1809 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("吊慢") != -1){
1713 1810 dmbc++;
1714   - dmlc = dmlc.add(lc);
  1811 +// dmlc = dmlc.add(lc);
1715 1812 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("故障") != -1){
1716 1813 gzbc++;
1717   - gzlc = gzlc.add(lc);
  1814 +// gzlc = gzlc.add(lc);
1718 1815 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("纠纷") != -1){
1719 1816 jfbc++;
1720   - jflc = jflc.add(lc);
  1817 +// jflc = jflc.add(lc);
1721 1818 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("肇事") != -1){
1722 1819 zsbc++;
1723   - zslc = zslc.add(lc);
  1820 +// zslc = zslc.add(lc);
1724 1821 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("缺人") != -1){
1725 1822 qrbc++;
1726   - qrlc = qrlc.add(lc);
  1823 +// qrlc = qrlc.add(lc);
1727 1824 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("缺车") != -1){
1728 1825 qcbc++;
1729   - qclc = qclc.add(lc);
  1826 +// qclc = qclc.add(lc);
1730 1827 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("客稀") != -1){
1731 1828 kxbc++;
1732   - kxlc = kxlc.add(lc);
  1829 +// kxlc = kxlc.add(lc);
1733 1830 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("气候") != -1){
1734 1831 qhbc++;
1735   - qhlc = qhlc.add(lc);
  1832 +// qhlc = qhlc.add(lc);
1736 1833 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("外援") != -1){
1737 1834 wybc++;
1738   - wylc = wylc.add(lc);
  1835 +// wylc = wylc.add(lc);
1739 1836 } else {
1740 1837 qtbc++;
1741   - qtlc = qtlc.add(lc);
  1838 +// qtlc = qtlc.add(lc);
1742 1839 }
1743 1840 }
  1841 + if(cts.containsKey(schedule.getId())){
  1842 + schedule.setcTasks(cts.get(schedule.getId()));
  1843 + }
1744 1844 }
  1845 +
  1846 + sjlc = new BigDecimal(culateService.culateSjgl(keyMap.get(key)) + culateService.culateLjgl(keyMap.get(key)));
  1847 + lzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "路阻"));
  1848 + dmlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "吊慢"));
  1849 + gzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "故障"));
  1850 + jflc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "纠纷"));
  1851 + zslc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "肇事"));
  1852 + qrlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "缺人"));
  1853 + qclc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "缺车"));
  1854 + kxlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "客稀"));
  1855 + qhlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "气候"));
  1856 + wylc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "援外"));
  1857 + qtlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "配车")).add(
  1858 + new BigDecimal(culateService.culateCJLC(keyMap.get(key), "保养"))).add(
  1859 + new BigDecimal(culateService.culateCJLC(keyMap.get(key), "抽减"))).add(
  1860 + new BigDecimal(culateService.culateCJLC(keyMap.get(key), "其他")));
  1861 +
1745 1862 boolean flag = true;
1746 1863 if(jhlc.doubleValue() == 0d){
1747 1864 flag = false;
... ... @@ -1754,42 +1871,42 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1754 1871 tempMap.put("jhbc", jhbc);
1755 1872 tempMap.put("sjbc", sjbc);
1756 1873 tempMap.put("bcbfb", df.format(jhbc>0?(double)sjbc/jhbc*100:0)+"%");
1757   - tempMap.put("jhlc", jhlc.doubleValue());
1758   - tempMap.put("sjlc", sjlc.doubleValue());
  1874 + tempMap.put("jhlc", df.format(jhlc.doubleValue()));
  1875 + tempMap.put("sjlc", df.format(sjlc.doubleValue()));
1759 1876 // tempMap.put("lcbfb", df.format(flag?(double)sjlc/jhlc*100:0)+"%");
1760 1877 tempMap.put("lcbfb", df.format(flag?sjlc.divide(jhlc, 4, BigDecimal.ROUND_HALF_UP).doubleValue()*100:0)+"%");
1761 1878 tempMap.put("lzbc", lzbc);
1762   - tempMap.put("lzlc", lzlc.doubleValue());
  1879 + tempMap.put("lzlc", df.format(lzlc.doubleValue()));
1763 1880 tempMap.put("lzbfb", df.format(jhbc>0?(double)lzbc/jhbc*100:0)+"%");
1764 1881 tempMap.put("dmbc", dmbc);
1765   - tempMap.put("dmlc", dmlc.doubleValue());
  1882 + tempMap.put("dmlc", df.format(dmlc.doubleValue()));
1766 1883 tempMap.put("dmbfb", df.format(jhbc>0?(double)dmbc/jhbc*100:0)+"%");
1767 1884 tempMap.put("gzbc", gzbc);
1768   - tempMap.put("gzlc", gzlc.doubleValue());
  1885 + tempMap.put("gzlc", df.format(gzlc.doubleValue()));
1769 1886 tempMap.put("gzbfb", df.format(jhbc>0?(double)gzbc/jhbc*100:0)+"%");
1770 1887 tempMap.put("jfbc", jfbc);
1771   - tempMap.put("jflc", jflc.doubleValue());
  1888 + tempMap.put("jflc", df.format(jflc.doubleValue()));
1772 1889 tempMap.put("jfbfb", df.format(jhbc>0?(double)jfbc/jhbc*100:0)+"%");
1773 1890 tempMap.put("zsbc", zsbc);
1774   - tempMap.put("zslc", zslc.doubleValue());
  1891 + tempMap.put("zslc", df.format(zslc.doubleValue()));
1775 1892 tempMap.put("zsbfb", df.format(jhbc>0?(double)zsbc/jhbc*100:0)+"%");
1776 1893 tempMap.put("qrbc", qrbc);
1777   - tempMap.put("qrlc", qrlc.doubleValue());
  1894 + tempMap.put("qrlc", df.format(qrlc.doubleValue()));
1778 1895 tempMap.put("qrbfb", df.format(jhbc>0?(double)qrbc/jhbc*100:0)+"%");
1779 1896 tempMap.put("qcbc", qcbc);
1780   - tempMap.put("qclc", qclc.doubleValue());
  1897 + tempMap.put("qclc", df.format(qclc.doubleValue()));
1781 1898 tempMap.put("qcbfb", df.format(jhbc>0?(double)qcbc/jhbc*100:0)+"%");
1782 1899 tempMap.put("kxbc", kxbc);
1783   - tempMap.put("kxlc", kxlc.doubleValue());
  1900 + tempMap.put("kxlc", df.format(kxlc.doubleValue()));
1784 1901 tempMap.put("kxbfb", df.format(jhbc>0?(double)kxbc/jhbc*100:0)+"%");
1785 1902 tempMap.put("qhbc", qhbc);
1786   - tempMap.put("qhlc", qhlc.doubleValue());
  1903 + tempMap.put("qhlc", df.format(qhlc.doubleValue()));
1787 1904 tempMap.put("qhbfb", df.format(jhbc>0?(double)qhbc/jhbc*100:0)+"%");
1788 1905 tempMap.put("wybc", wybc);
1789   - tempMap.put("wylc", wylc.doubleValue());
  1906 + tempMap.put("wylc", df.format(wylc.doubleValue()));
1790 1907 tempMap.put("wybfb", df.format(jhbc>0?(double)wybc/jhbc*100:0)+"%");
1791 1908 tempMap.put("qtbc", qtbc);
1792   - tempMap.put("qtlc", qtlc.doubleValue());
  1909 + tempMap.put("qtlc", df.format(qtlc.doubleValue()));
1793 1910 tempMap.put("qtbfb", df.format(jhbc>0?(double)qtbc/jhbc*100:0)+"%");
1794 1911  
1795 1912 resList.add(tempMap);
... ... @@ -1822,41 +1939,41 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1822 1939 temp.put("jhbc", jhbc_);
1823 1940 temp.put("sjbc", sjbc_);
1824 1941 temp.put("bcbfb", df.format(jhbc_>0?(double)sjbc_/jhbc_*100:0)+"%");
1825   - temp.put("jhlc", jhlc_.doubleValue());
1826   - temp.put("sjlc", sjlc_.doubleValue());
  1942 + temp.put("jhlc", df.format(jhlc_.doubleValue()));
  1943 + temp.put("sjlc", df.format(sjlc_.doubleValue()));
1827 1944 temp.put("lcbfb", df.format(flag?sjlc_.divide(jhlc_, 4, BigDecimal.ROUND_HALF_UP).doubleValue()*100:0)+"%");
1828 1945 temp.put("lzbc", lzbc_);
1829   - temp.put("lzlc", lzlc_.doubleValue());
  1946 + temp.put("lzlc", df.format(lzlc_.doubleValue()));
1830 1947 temp.put("lzbfb", df.format(jhbc_>0?(double)lzbc_/jhbc_*100:0)+"%");
1831 1948 temp.put("dmbc", dmbc_);
1832   - temp.put("dmlc", dmlc_.doubleValue());
  1949 + temp.put("dmlc", df.format(dmlc_.doubleValue()));
1833 1950 temp.put("dmbfb", df.format(jhbc_>0?(double)dmbc_/jhbc_*100:0)+"%");
1834 1951 temp.put("gzbc", gzbc_);
1835   - temp.put("gzlc", gzlc_.doubleValue());
  1952 + temp.put("gzlc", df.format(gzlc_.doubleValue()));
1836 1953 temp.put("gzbfb", df.format(jhbc_>0?(double)gzbc_/jhbc_*100:0)+"%");
1837 1954 temp.put("jfbc", jfbc_);
1838   - temp.put("jflc", jflc_.doubleValue());
  1955 + temp.put("jflc", df.format(jflc_.doubleValue()));
1839 1956 temp.put("jfbfb", df.format(jhbc_>0?(double)jfbc_/jhbc_*100:0)+"%");
1840 1957 temp.put("zsbc", zsbc_);
1841   - temp.put("zslc", zslc_.doubleValue());
  1958 + temp.put("zslc", df.format(zslc_.doubleValue()));
1842 1959 temp.put("zsbfb", df.format(jhbc_>0?(double)zsbc_/jhbc_*100:0)+"%");
1843 1960 temp.put("qrbc", qrbc_);
1844   - temp.put("qrlc", qrlc_.doubleValue());
  1961 + temp.put("qrlc", df.format(qrlc_.doubleValue()));
1845 1962 temp.put("qrbfb", df.format(jhbc_>0?(double)qrbc_/jhbc_*100:0)+"%");
1846 1963 temp.put("qcbc", qcbc_);
1847   - temp.put("qclc", qclc_.doubleValue());
  1964 + temp.put("qclc", df.format(qclc_.doubleValue()));
1848 1965 temp.put("qcbfb", df.format(jhbc_>0?(double)qcbc_/jhbc_*100:0)+"%");
1849 1966 temp.put("kxbc", kxbc_);
1850   - temp.put("kxlc", kxlc_.doubleValue());
  1967 + temp.put("kxlc", df.format(kxlc_.doubleValue()));
1851 1968 temp.put("kxbfb", df.format(jhbc_>0?(double)kxbc_/jhbc_*100:0)+"%");
1852 1969 temp.put("qhbc", qhbc_);
1853   - temp.put("qhlc", qhlc_.doubleValue());
  1970 + temp.put("qhlc", df.format(qhlc_.doubleValue()));
1854 1971 temp.put("qhbfb", df.format(jhbc_>0?(double)qhbc_/jhbc_*100:0)+"%");
1855 1972 temp.put("wybc", wybc_);
1856   - temp.put("wylc", wylc_.doubleValue());
  1973 + temp.put("wylc", df.format(wylc_.doubleValue()));
1857 1974 temp.put("wybfb", df.format(jhbc_>0?(double)wybc_/jhbc_*100:0)+"%");
1858 1975 temp.put("qtbc", qtbc_);
1859   - temp.put("qtlc", qtlc_.doubleValue());
  1976 + temp.put("qtlc", df.format(qtlc_.doubleValue()));
1860 1977 temp.put("qtbfb", df.format(jhbc_>0?(double)qtbc_/jhbc_*100:0)+"%");
1861 1978  
1862 1979 resList.add(temp);
... ... @@ -2257,10 +2374,422 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2257 2374 resMap.put("xlname",BasicData.lineCode2NameMap.get(xlbm));
2258 2375 }
2259 2376 }
2260   -
  2377 +
2261 2378 return resList;
2262 2379 }
2263 2380  
2264   -
2265   -
  2381 + @Override
  2382 + public Map<String, Object> exportWaybillMore(Map<String, Object> map) {
  2383 + String date = map.get("date").toString();
  2384 + String line = map.get("line").toString();
  2385 + ReportUtils ee = new ReportUtils();
  2386 + List<List> strs = JSON.parseArray(map.get("strs").toString(), List.class);
  2387 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/export/";
  2388 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  2389 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  2390 + int num = 0;
  2391 + File file = null;
  2392 + try {
  2393 + while (true) {
  2394 + String fileUrl = path + "行车路单" + sdfSimple.format(sdfMonth.parse(date));
  2395 +// file = new File(fileUrl + (num == 0 ? "/" : "(" + num + ")/")); //新建文件夹
  2396 + file = new File(fileUrl + (num == 0 ? ".xls" : "(" + num + ").xls")); //新建excel文件
  2397 + if (file.exists()) { //判断是否已存在重名
  2398 + num++;
  2399 + } else {
  2400 + break;
  2401 + }
  2402 + }
  2403 +// file.mkdirs(); //创建
  2404 +
  2405 + Map<String, List<Ylb>> ylbMap = new HashMap<String, List<Ylb>>();
  2406 + Map<String, List<Dlb>> dlbMap = new HashMap<String, List<Dlb>>();
  2407 + Map<String, List<Cars>> carMap = new HashMap<String, List<Cars>>();
  2408 + List<ScheduleRealInfo> lists_line=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
  2409 + List<DutyEmployee> list2 = dutyEmployeeService.getDutyEmployee(line, date + "00:01", date + "23:59");
  2410 + List<Ylb> queryYlbByRqXlbm = ylbRepository.queryYlbByRqXlbm(date, line);
  2411 + List<Dlb> queryDlbByRqXlbm = dlbRepository.queryDlbByRqXlbm(date, line);
  2412 + List<Cars> findCars = carsRepository.findCars();
  2413 + String minfcsj="02:00";
  2414 + List<Line> lineList=lineRepository.findLineByCode(line);
  2415 + if(lineList.size()>0){
  2416 + String sqlMinYysj="select start_opt from bsth_c_line_config where "
  2417 + + " id = ("
  2418 + + "select max(id) from bsth_c_line_config where line ='"+lineList.get(0).getId() +"'"
  2419 + + ")";
  2420 + minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2421 + }
  2422 +
  2423 + for(Ylb ylb : queryYlbByRqXlbm){
  2424 + String key = sdfMonth.format(ylb.getRq()) + ylb.getXlbm();
  2425 + if(!ylbMap.containsKey(key))
  2426 + ylbMap.put(key, new ArrayList<Ylb>());
  2427 + ylbMap.get(key).add(ylb);
  2428 + }
  2429 + for(Dlb dlb : queryDlbByRqXlbm){
  2430 + String key = sdfMonth.format(dlb.getRq()) + dlb.getXlbm();
  2431 + if(!dlbMap.containsKey(key))
  2432 + dlbMap.put(key, new ArrayList<Dlb>());
  2433 + dlbMap.get(key).add(dlb);
  2434 + }
  2435 + for(Cars car : findCars){
  2436 + String key = car.getInsideCode();
  2437 + if(!carMap.containsKey(key))
  2438 + carMap.put(key, new ArrayList<Cars>());
  2439 + carMap.get(key).add(car);
  2440 + }
  2441 +
  2442 + List<File> files = new ArrayList<File>();
  2443 + for (List<String> list : strs){
  2444 + List<ScheduleRealInfo> newList=new ArrayList<ScheduleRealInfo>();
  2445 + String jName = list.get(0);
  2446 + String clZbh = list.get(1);
  2447 + String lpName = list.get(2);
  2448 + String jGh =list.get(3);
  2449 + for (int i = 0; i < lists_line.size(); i++) {
  2450 + ScheduleRealInfo s=lists_line.get(i);
  2451 + if(s.getjGh().equals(jGh) && s.getClZbh().equals(clZbh) && s.getLpName().equals(lpName)){
  2452 + newList.add(s);
  2453 + }
  2454 + }
  2455 + //——————————————————————————————————————————————————————
  2456 +
  2457 + ReportRelatedUtils rru = new ReportRelatedUtils();
  2458 + List<Iterator<?>> list1 = new ArrayList<Iterator<?>>();
  2459 + List<ScheduleRealInfo> scheduleRealInfos = newList;
  2460 + List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
  2461 +// List<ScheduleRealInfo> scheduleRealInfos=scheduleRealInfoRepository.queryListWaybillXcld(jName, clZbh, lpName, date, line);
  2462 + List<ScheduleRealInfo> lists=new ArrayList<ScheduleRealInfo>();
  2463 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  2464 + ScheduleRealInfo s=scheduleRealInfos.get(i);
  2465 + Set<ChildTaskPlan> cts = s.getcTasks();
  2466 + if(cts != null && cts.size() > 0){
  2467 + lists.add(s);
  2468 + }else{
  2469 + if(s.getZdsjActual()!=null && s.getFcsjActual()!=null){
  2470 + lists.add(s);
  2471 + }
  2472 + }
  2473 + }
  2474 + DecimalFormat format = new DecimalFormat("0.00");
  2475 + //计算里程和班次数,并放入Map里
  2476 +// Map<String, Object> map = this.MapById(scheduleRealInfos.get(0).getId());
  2477 +
  2478 + //-----------------------------------------------------
  2479 + Map<String, Object> Map = new HashMap<String, Object>();
  2480 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2481 +// ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(scheduleRealInfos.get(0).getId());
  2482 + ScheduleRealInfo s = scheduleRealInfos.get(0);
  2483 + String xlbm = s.getXlBm();
  2484 + String fcrq = s.getScheduleDateStr();
  2485 +
  2486 + int type = 0;
  2487 + Double ccyl = 0.0;
  2488 + Double jcyl = 0.0;
  2489 + Double yh = 0.0;
  2490 + Double jzl = 0.0;
  2491 + Double zlc = 0.0;
  2492 +// List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  2493 +// List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
  2494 + List<Ylb> listYlb = ylbMap.get(fcrq + xlbm);
  2495 + List<Dlb> listDlb = dlbMap.get(fcrq + xlbm);
  2496 +
  2497 +// List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
  2498 + List<Cars> listCars = carMap.get(s.getClZbh());
  2499 + if (listCars != null && listCars.size() > 0) {
  2500 + if(listCars.get(0).getSfdc()!=null){
  2501 + if (listCars.get(0).getSfdc()) {
  2502 + type = 1;
  2503 + if(listDlb != null)
  2504 + for (int i = 0; i < listDlb.size(); i++) {
  2505 + Dlb d = listDlb.get(i);
  2506 + if (d.getLp() == null) {
  2507 + ccyl = Arith.add(ccyl, d.getCzcd());
  2508 + jcyl = Arith.add(jcyl, d.getJzcd());
  2509 + yh = Arith.add(yh, d.getHd());
  2510 + jzl = Arith.add(jzl, d.getCdl());
  2511 + zlc = Arith.add(zlc, d.getZlc());
  2512 + } else {
  2513 + if (d.getLp().equals(s.getLpName())) {
  2514 + ccyl = Arith.add(ccyl, d.getCzcd());
  2515 + jcyl = Arith.add(jcyl, d.getJzcd());
  2516 + yh = Arith.add(yh, d.getHd());
  2517 + jzl = Arith.add(jzl, d.getCdl());
  2518 + zlc = Arith.add(zlc, d.getZlc());
  2519 + }
  2520 + }
  2521 +
  2522 + }
  2523 + } else {
  2524 + type = 0;
  2525 + if(listYlb != null)
  2526 + for (int i = 0; i < listYlb.size(); i++) {
  2527 + Ylb y = listYlb.get(i);
  2528 + if (y.getLp() == null) {
  2529 + ccyl = Arith.add(ccyl, y.getCzyl());
  2530 + jcyl = Arith.add(jcyl, y.getJzyl());
  2531 + yh = Arith.add(yh, y.getYh());
  2532 + jzl = Arith.add(jzl, y.getJzl());
  2533 + zlc = Arith.add(zlc, y.getZlc());
  2534 + } else {
  2535 + if (y.getLp().equals(s.getLpName())) {
  2536 + ccyl = Arith.add(ccyl, y.getCzyl());
  2537 + jcyl = Arith.add(jcyl, y.getJzyl());
  2538 + yh = Arith.add(yh, y.getYh());
  2539 + jzl = Arith.add(jzl, y.getJzl());
  2540 + zlc = Arith.add(zlc, y.getZlc());
  2541 + }
  2542 + }
  2543 + }
  2544 + }
  2545 + }
  2546 + }
  2547 +
  2548 + Map.put("jzl", jzl);
  2549 + Map.put("yh", yh);
  2550 + Map.put("ccyl", ccyl);
  2551 + Map.put("jcyl", jcyl);
  2552 + Map.put("type", type);
  2553 + Map.put("zlc", zlc);
  2554 + Map.put("xlName", s.getXlName());
  2555 + Map.put("clZbh", s.getClZbh());
  2556 + Map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  2557 + Map.put("fcsjActual", s.getFcsjActual());
  2558 + Map.put("zdzName", s.getZdzName());
  2559 + Map.put("scheduleDate", s.getScheduleDateStr());
  2560 + Map.put("lpName", s.getLpName());
  2561 + String zdp = "", zwdp = "", wdp = "";
  2562 + String zdpT = "", zwdpT = "", wdpT = "";
  2563 + String dbdp="";
  2564 +// List<DutyEmployee> list2 = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  2565 + try {
  2566 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  2567 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  2568 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  2569 + for (int i = 0; i < list2.size(); i++) {
  2570 + DutyEmployee t = list2.get(i);
  2571 + if(dbdp.indexOf(t.getuName()) == -1){
  2572 + if(!(dbdp.length()>0)){
  2573 + dbdp =t.getuName();
  2574 + }else{
  2575 + dbdp +=","+t.getuName();
  2576 + }
  2577 + }
  2578 + Long ts = t.getTs();
  2579 + if (ts > fcsj1 && ts < fcsj2) {
  2580 + if (zdp.indexOf(t.getuName()) == -1) {
  2581 + if (!(zdp.length() > 0)) {
  2582 + zdpT = t.getuName() + "...";
  2583 + }
  2584 + zdp += t.getuName() + ",";
  2585 +
  2586 + }
  2587 + } else if (ts > fcsj2 && ts < fcsj3) {
  2588 + if (zwdp.indexOf(t.getuName()) == -1) {
  2589 + if (!(zwdp.length() > 0)) {
  2590 + zwdpT = t.getuName() + "...";
  2591 + }
  2592 + zwdp += t.getuName() + ",";
  2593 + }
  2594 + } else {
  2595 + if (wdp.indexOf(t.getuName()) == -1) {
  2596 + if (!(wdp.length() > 0)) {
  2597 + wdpT = t.getuName() + "...";
  2598 + }
  2599 + wdp += t.getuName() + ",";
  2600 + }
  2601 + }
  2602 + }
  2603 + } catch (ParseException e) {
  2604 + // TODO Auto-generated catch block
  2605 + e.printStackTrace();
  2606 + }
  2607 + Map.put("zdp", zdp);
  2608 + Map.put("zwdp", zwdp);
  2609 + Map.put("wdp", wdp);
  2610 + Map.put("zdpT", zdpT);
  2611 + Map.put("zwdpT", zwdpT);
  2612 + Map.put("wdpT", wdpT);
  2613 + Map.put("dbdp", dbdp);
  2614 + //-----------------------------------------------------
  2615 +
  2616 + Map.put("jhlc",Arith.add(culateService.culateJhgl(scheduleRealInfos),culateService.culateJhJccgl(scheduleRealInfos)));
  2617 + Map.put("remMileage",culateService.culateLbgl(scheduleRealInfos));
  2618 + Map.put("addMileage", culateService.culateLjgl(lists));
  2619 + double yygl=Arith.add(culateService.culateSjgl(lists),culateService.culateLjgl(lists));
  2620 + Map.put("yygl", yygl);
  2621 + double ksgl=Arith.add(culateService.culateKsgl(scheduleRealInfos),culateService.culateJccgl(lists));
  2622 + Map.put("ksgl",ksgl);
  2623 + Map.put("realMileage", Arith.add(yygl ,ksgl));
  2624 + Map.put("jhbc", culateService.culateJhbc(scheduleRealInfos,""));
  2625 + Map.put("cjbc", culateService.culateLbbc(scheduleRealInfos));
  2626 + Map.put("ljbc", culateService.culateLjbc(lists, ""));
  2627 + int sjbc =culateService.culateLjbc(lists, "")+culateService.culateSjbc(lists, "");
  2628 + Map.put("sjbc", sjbc);
  2629 +// map=new HashMap<String,Object>();
  2630 +
  2631 + SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm");
  2632 +// String minfcsj="02:00";
  2633 +// List<Line> lineList=lineRepository.findLineByCode(newList.get(0).getXlBm());
  2634 +// if(lineList.size()>0){
  2635 +// String sqlMinYysj="select start_opt from bsth_c_line_config where "
  2636 +// + " id = ("
  2637 +// + "select max(id) from bsth_c_line_config where line ='"+lineList.get(0).getId() +"'"
  2638 +// + ")";
  2639 +// minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  2640 +// }
  2641 + String[] minSjs = minfcsj.split(":");
  2642 + Long minSj=Long.parseLong(minSjs[0])*60+Long.parseLong(minSjs[1]);
  2643 +
  2644 +
  2645 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  2646 + ScheduleRealInfo ss=scheduleRealInfos.get(i);
  2647 + String[] fcsj= ss.getFcsj().split(":");
  2648 + Long fcsjL=Long.parseLong(fcsj[0])*60+Long.parseLong(fcsj[1]);
  2649 +
  2650 + Long fscjT=0L;
  2651 + if(fcsjL<minSj){
  2652 + Calendar calendar = new GregorianCalendar();
  2653 + calendar.setTime(ss.getScheduleDate());
  2654 + calendar.add(calendar.DATE,1);
  2655 + ss.setScheduleDate(calendar.getTime());
  2656 + try {
  2657 + fscjT = sdf2.parse(sdf2.format(ss.getScheduleDate())+" "+ss.getFcsj()).getTime();
  2658 + } catch (ParseException e) {
  2659 + // TODO Auto-generated catch block
  2660 + e.printStackTrace();
  2661 + }
  2662 +
  2663 + }else{
  2664 + try {
  2665 + fscjT =sdf2.parse(ss.getScheduleDateStr()+" "+ss.getFcsj()).getTime();
  2666 + } catch (ParseException e) {
  2667 + // TODO Auto-generated catch block
  2668 + e.printStackTrace();
  2669 + };
  2670 + }
  2671 + ss.setFcsjT(fscjT);
  2672 + }
  2673 + List<ScheduleRealInfo> listSchedule = new ArrayList<ScheduleRealInfo>();
  2674 + Collections.sort(scheduleRealInfos, new ComparableReal());
  2675 + for (int i = 0; i < scheduleRealInfos.size(); i++) {
  2676 + ScheduleRealInfo ss = scheduleRealInfos.get(i);
  2677 + ss.setAdjustExps(i + 1 + "");
  2678 + String remarks = "";
  2679 + if (ss.getRemarks() != null) {
  2680 + remarks += ss.getRemarks();
  2681 + }
  2682 +
  2683 + Set<ChildTaskPlan> childTaskPlans = ss.getcTasks();
  2684 + if (!childTaskPlans.isEmpty()) {
  2685 + ss.setFcsjActual("");
  2686 + ss.setZdsjActual("");
  2687 + ss.setJhlc(0.0);
  2688 + }
  2689 +
  2690 + if (ss.isDestroy()) {
  2691 + ss.setFcsjActual("");
  2692 + ss.setZdsjActual("");
  2693 + ss.setJhlc(0.0);
  2694 + remarks += "(烂班)";
  2695 + ss.setRemarks(remarks);
  2696 + }
  2697 +
  2698 + listSchedule.add(ss);
  2699 + //计算营运里程,空驶里程
  2700 + if (!childTaskPlans.isEmpty()) {
  2701 +// Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  2702 + List<ChildTaskPlan> listit=new ArrayList<ChildTaskPlan>(childTaskPlans);
  2703 + Collections.sort(listit, new ComparableChild());
  2704 + for (int j = 0; j < listit.size(); j++) {
  2705 + ScheduleRealInfo t = new ScheduleRealInfo();
  2706 + ChildTaskPlan childTaskPlan = listit.get(j);
  2707 + if (childTaskPlan.isDestroy()) {
  2708 + t.setFcsjActual("");
  2709 + t.setZdsjActual("");
  2710 + t.setJhlc(0.0);
  2711 + } else {
  2712 + t.setFcsjActual(childTaskPlan.getStartDate());
  2713 + t.setZdsjActual(childTaskPlan.getEndDate());
  2714 + t.setJhlc(Double.parseDouble(String.valueOf(childTaskPlan.getMileage())));
  2715 + }
  2716 + t.setQdzName(childTaskPlan.getStartStationName());
  2717 + t.setZdzName(childTaskPlan.getEndStationName());
  2718 + t.setRemarks(childTaskPlan.getRemarks());
  2719 + t.setAdjustExps("子");
  2720 + t.setjGh("");
  2721 + t.setjName("");
  2722 + t.setsGh("");
  2723 + t.setsName("");
  2724 + listSchedule.add(t);
  2725 + }
  2726 + }
  2727 + }
  2728 + Map<String, Object> maps;
  2729 + for (ScheduleRealInfo scheduleRealInfo : listSchedule) {
  2730 + maps = new HashMap<String, Object>();
  2731 + try {
  2732 + scheduleRealInfo.setjName(scheduleRealInfo.getjGh() + scheduleRealInfo.getjName());
  2733 + scheduleRealInfo.setsName(scheduleRealInfo.getsGh() + scheduleRealInfo.getsName());
  2734 + maps = rru.getMapValue(scheduleRealInfo);
  2735 + maps.put("bcs", scheduleRealInfo.getAdjustExps());
  2736 + String zdsj = scheduleRealInfo.getZdsj();
  2737 + String zdsjActual = scheduleRealInfo.getZdsjActual();
  2738 + if (zdsj != null && zdsjActual != null &&
  2739 + !zdsj.equals(zdsjActual) &&
  2740 + !zdsj.equals("")&&
  2741 + !zdsjActual.equals("")) {
  2742 + if (zdsj.compareTo(zdsjActual) > 0) {
  2743 + maps.put("fast", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  2744 + maps.put("slow", "");
  2745 + } else {
  2746 + maps.put("fast", "");
  2747 + maps.put("slow", TimeUtils.getTimeDifference(zdsj, zdsjActual));
  2748 + }
  2749 + } else {
  2750 + maps.put("fast", "");
  2751 + maps.put("slow", "");
  2752 + }
  2753 + listMap.add(maps);
  2754 + } catch (Exception e) {
  2755 + e.printStackTrace();
  2756 + }
  2757 + }
  2758 +
  2759 + String path1 = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  2760 + list1.add(listMap.iterator());
  2761 + String xls="";
  2762 + if(Map.get("type").toString().equals("0")){
  2763 + xls="waybill_minhang.xls";
  2764 + }else{
  2765 + xls="waybill_minhang_dl.xls";
  2766 + }
  2767 + Map.put("sheetName", jName + "-" + clZbh + "-" + lpName);
  2768 + ee.excelReplace(list1, new Object[]{Map}, path1 + "mould/"+xls,
  2769 + path1 + "export/" + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  2770 +
  2771 +
  2772 + //————————————————————————————————————————————————
  2773 +
  2774 + File temp = new File(path + date + "-" + jName + "-" + clZbh + "-" + lpName + "-行车路单.xls");
  2775 + String fileName = file.getName();
  2776 + files.add(temp);
  2777 + }
  2778 + for(int i = 1; i < files.size(); i++){
  2779 + File file1 = files.get(0);
  2780 + File file2 = files.get(i);
  2781 + ee.copySheetByFile(file2, file1, 0, 145);
  2782 + }
  2783 + File newFile = files.get(0);
  2784 + newFile.renameTo(file);
  2785 +
  2786 + } catch (Exception e) {
  2787 + // TODO: handle exception
  2788 + e.printStackTrace();
  2789 + }
  2790 +
  2791 + map.put("fileName", file.getName());
  2792 + return map;
  2793 + }
  2794 +
2266 2795 }
... ...
src/main/java/com/bsth/service/impl/SectionServiceImpl.java
... ... @@ -7,6 +7,7 @@ import java.util.HashMap;
7 7 import java.util.List;
8 8 import java.util.Map;
9 9  
  10 +import com.bsth.util.RoadCutDoubleName;
10 11 import org.springframework.beans.factory.annotation.Autowired;
11 12 import org.springframework.stereotype.Service;
12 13 import org.springframework.transaction.annotation.Transactional;
... ... @@ -360,6 +361,129 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
360 361 return resultMap;
361 362 }
362 363  
  364 + /**
  365 + * @Description :TODO(生成双路名路段)
  366 + * @param map <lineId:线路ID; route:路段信息>
  367 + * @return
  368 + */
  369 + @Override
  370 + @Transactional
  371 + public Map<String, Object> doubleName(Map<String, Object> map) {
  372 + Map<String, Object> resultMap = new HashMap<String, Object>();
  373 + try {
  374 + // 路段点List
  375 + List<Point> bPointsList = new ArrayList<>();
  376 + // 截取后的路段
  377 + List<Map<String, String>> sectionArrayList = new ArrayList<>();
  378 + Integer lineId = Integer.parseInt(map.get("lineId").equals("") ? "" :map.get("lineId").toString());
  379 + String lineCode = map.get("lineCode").equals("") ? "" :map.get("lineCode").toString();
  380 + Integer directions = Integer.parseInt(map.get("directions").equals("") ? "" :map.get("directions").toString());
  381 + String sectionrouteCode = map.get("sectionrouteCode").equals("") ? "" :map.get("sectionrouteCode").toString();
  382 + Integer versions = Integer.parseInt(map.get("versions").equals("") ? "" :map.get("versions").toString());
  383 + String stationRouteBegin = map.get("stationRouteBegin").equals("") ? "" :map.get("stationRouteBegin").toString();
  384 + String stationRouteFinish = map.get("stationRouteFinish").equals("") ? "" :map.get("stationRouteFinish").toString();
  385 + String routes = map.get("route").equals("") ? "" :map.get("route").toString();
  386 + if(!routes.equals("")) {
  387 + String sectionStr = "";
  388 + // 转换成JSON数组
  389 + JSONArray sectionsArray = JSONArray.parseArray(routes);
  390 + // 遍历
  391 + for(int s = 0 ;s<sectionsArray.size();s++) {
  392 + String pointsLngStr = sectionsArray.getJSONObject(s).get("lng").toString();
  393 + String pointsLatStr = sectionsArray.getJSONObject(s).get("lat").toString();
  394 + if(s == sectionsArray.size()-1){
  395 + sectionStr += pointsLngStr+","+pointsLatStr;
  396 + } else {
  397 + sectionStr += pointsLngStr+","+pointsLatStr+";";
  398 + }
  399 + }
  400 + Map<String, Object> roads = RoadCutDoubleName.start(sectionStr);
  401 + if (!roads.isEmpty()) {
  402 + List bSectionList = (List) roads.get("bSections");
  403 + List roadName = (List) roads.get("roadName");
  404 + // 路段序号
  405 + Integer routeCode = 0;
  406 + if(!sectionrouteCode.equals("")){
  407 + String sectionrouteCodeArray[] = sectionrouteCode.split("_");
  408 + routeCode = Integer.valueOf(sectionrouteCodeArray[0])+100;
  409 + }else {
  410 + routeCode = 100;
  411 + }
  412 + // 增加路段序号
  413 +
  414 + for(int i = 0; i < bSectionList.size(); i++){
  415 + List<Location> bSection = new ArrayList<>();
  416 + bSectionList.get(i);
  417 + bSection = (List<Location>) bSectionList.get(i);
  418 +
  419 + String sectionsBpoints = "";
  420 + // WGS线状图形坐标集合
  421 + String sectionsWJPpoints = "";
  422 + for (int j = 0; j < bSection.size(); j++) {
  423 + bSection.get(j);
  424 + Location point = bSection.get(j);
  425 + String pointsLngStr = String.valueOf(point.getLng());
  426 + String pointsLatStr = String.valueOf(point.getLat());
  427 + /** to WGS坐标 */
  428 + Location resultPoint = FromBDPointToWGSPoint(pointsLngStr,pointsLatStr);
  429 + String WGSLngStr = String.valueOf(resultPoint.getLng());
  430 + String WGSLatStr = String.valueOf(resultPoint.getLat());
  431 + if(j == 0) {
  432 + sectionsBpoints = pointsLngStr + " " + pointsLatStr;
  433 + sectionsWJPpoints = WGSLngStr + " " + WGSLatStr;
  434 + }else {
  435 + sectionsBpoints = sectionsBpoints + "," + pointsLngStr + " " + pointsLatStr;
  436 + sectionsWJPpoints = sectionsWJPpoints + "," + WGSLngStr + " " + WGSLatStr;
  437 + }
  438 + }
  439 + // 获取当前最大Id
  440 + long sectionMaxId = GetUIDAndCode.getSectionId();
  441 + // 路段编码
  442 + String sectionCode = String.valueOf(sectionMaxId);
  443 + // 路段ID
  444 + int sectionId = (int)sectionMaxId;
  445 + String sectionName = roadName.get(i).toString();
  446 + // WGS坐标点集合
  447 + String gsectionVector = null;
  448 + if(!sectionsWJPpoints.equals("")) {
  449 + gsectionVector = "LINESTRING(" + sectionsWJPpoints +")";
  450 + }
  451 + // 原坐标点集合
  452 + String bsectionVectorS = null;
  453 + if(!sectionsBpoints.equals("")) {
  454 + bsectionVectorS = "LINESTRING(" + sectionsBpoints + ")";
  455 + }
  456 + repository.systemSave(sectionCode, sectionName, "", "", "", "", gsectionVector, bsectionVectorS, "", "", "", 0, 0, "", 0, "", 1, sectionId);
  457 +
  458 + routeRepository.sectionUpdSectionRouteCode(lineId, directions,routeCode+i*100);
  459 + SectionRoute route = new SectionRoute();
  460 + Line line = lineRepository.findOne(lineId);
  461 + Section section = repository.findOne(sectionId);
  462 + route.setSectionrouteCode(routeCode+i*100);
  463 + route.setLineCode(lineCode);
  464 + route.setSectionCode(sectionCode);
  465 + route.setDirections(directions);
  466 + route.setVersions(versions);
  467 + route.setDestroy(0);
  468 + route.setLine(line);
  469 + route.setSection(section);
  470 + route.setIsRoadeSpeed(0);
  471 + routeRepository.save(route);
  472 + }
  473 + resultMap.put("status", ResponseCode.SUCCESS);
  474 + return resultMap;
  475 + } else {
  476 + resultMap.put("status", "Failure");
  477 + return resultMap;
  478 + }
  479 + }
  480 + resultMap.put("status", ResponseCode.SUCCESS);
  481 + } catch (Exception e) {
  482 + resultMap.put("status", ResponseCode.ERROR);
  483 + }
  484 + return resultMap;
  485 + }
  486 +
363 487 private void sectionListCut(List<Point> bPointsList, List<Map<String, String>> sectionArrayList,
364 488 String bsectionVector, String bsectionVectorCutList) {
365 489 if(!bsectionVector.equals("")) {
... ... @@ -480,6 +604,7 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
480 604 * @return Map<String, Object> <SUCCESS ; ERROR>
481 605 */
482 606 @Override
  607 + @Transactional
483 608 public Map<String, Object> sectionUpdate(Map<String, Object> map) {
484 609 Map<String, Object> resultMap = new HashMap<String, Object>();
485 610 try {
... ... @@ -539,32 +664,30 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
539 664 SectionRoute resultS = routeRepository.findOne(sectionRouteId);
540 665 int old_code = resultS.getSectionrouteCode();
541 666 if(sectionrouteCode!=null) {
542   - int new_code = sectionrouteCode+100;
543   - if(new_code==old_code){
544   - sectionrouteCode = new_code;
545   - }else {
546   - sectionrouteCode = new_code-100+1;
547   - }
548   - }else {
549   - sectionrouteCode = old_code;
550   - }
  667 + sectionrouteCode += 100;
  668 + }else {
  669 + sectionrouteCode = old_code;
  670 + }
  671 + routeRepository.sectionUpdSectionRouteCode(lineCode, directions,sectionrouteCode);
551 672 // 限速
552 673 Double speedLimit = map.get("speedLimit").equals("") ? null : Double.valueOf(map.get("speedLimit").toString());
553 674 // 版本
554 675 Integer version = map.get("versions").equals("") ? null : Integer.valueOf(map.get("versions").toString());
555 676 // WGS坐标点集合
556 677 String gsectionVector = null;
557   - if(!sectionsWJPpoints.equals(""))
  678 + if(!sectionsWJPpoints.equals("")) {
558 679 gsectionVector = "LINESTRING(" + sectionsWJPpoints +")";
  680 + }
559 681 // 原坐标点集合
560 682 String bsectionVectorS = null;
561   - if(!sectionsBpoints.equals(""))
562   - bsectionVectorS = "LINESTRING(" + sectionsBpoints + ")";
  683 + if(!sectionsBpoints.equals("")) {
  684 + bsectionVectorS = "LINESTRING(" + sectionsBpoints + ")";
  685 + }
563 686 Integer createBy = map.get("createBy").equals("") ? null : Integer.valueOf(map.get("createBy").toString());
564 687 String createDate = map.get("createDate").equals("") ? null : map.get("createDate").toString();
565 688 Integer updateBy = map.get("updateBy").equals("") ?null : Integer.valueOf(map.get("updateBy").toString());
566 689 Integer isRoadeSpeed = map.get("isRoadeSpeed").equals("") ? null : Integer.valueOf(map.get("isRoadeSpeed").toString());
567   - SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
  690 + SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
568 691 Date date = new Date();
569 692 // 修改日期
570 693 String updateDate = formatter.format(date);
... ... @@ -604,6 +727,7 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
604 727 * @Description :TODO(编辑缓存线路走向)
605 728 */
606 729 @Override
  730 + @Transactional
607 731 public Map<String, Object> sectionCacheUpdate(Map<String, Object> map) {
608 732 Map<String, Object> resultMap = new HashMap<String, Object>();
609 733 try {
... ... @@ -670,26 +794,29 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
670 794 }else {
671 795 sectionrouteCode = new_code-100+1;
672 796 }
673   - }else {
674   - sectionrouteCode = old_code;
675   - }
  797 + }else {
  798 + sectionrouteCode = old_code;
  799 + }
  800 + routeRepository.sectionUpdSectionRouteCode(lineCode, directions,sectionrouteCode);
676 801 // 限速
677 802 Double speedLimit = map.get("speedLimit").equals("") ? null : Double.valueOf(map.get("speedLimit").toString());
678 803 // 版本
679 804 Integer version = map.get("versions").equals("") ? null : Integer.valueOf(map.get("versions").toString());
680 805 // WGS坐标点集合
681 806 String gsectionVector = null;
682   - if(!sectionsWJPpoints.equals(""))
  807 + if(!sectionsWJPpoints.equals("")) {
683 808 gsectionVector = "LINESTRING(" + sectionsWJPpoints +")";
  809 + }
684 810 // 原坐标点集合
685 811 String bsectionVectorS = null;
686   - if(!sectionsBpoints.equals(""))
687   - bsectionVectorS = "LINESTRING(" + sectionsBpoints + ")";
  812 + if(!sectionsBpoints.equals("")) {
  813 + bsectionVectorS = "LINESTRING(" + sectionsBpoints + ")";
  814 + }
688 815 Integer createBy = map.get("createBy").equals("") ? null : Integer.valueOf(map.get("createBy").toString());
689 816 String createDate = map.get("createDate").equals("") ? null : map.get("createDate").toString();
690 817 Integer updateBy = map.get("updateBy").equals("") ?null : Integer.valueOf(map.get("updateBy").toString());
691 818 Integer isRoadeSpeed = map.get("isRoadeSpeed").equals("") ? null : Integer.valueOf(map.get("isRoadeSpeed").toString());
692   - SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
  819 + SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
693 820 Date date = new Date();
694 821 // 修改日期
695 822 String updateDate = formatter.format(date);
... ... @@ -742,7 +869,6 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
742 869  
743 870 }
744 871  
745   -
746 872 /**
747 873 * 新增路段信息
748 874 *
... ... @@ -833,11 +959,11 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
833 959 Integer routeCode = null;
834 960 if(!sectionrouteCode.equals("")){
835 961 String sectionrouteCodeArray[] = sectionrouteCode.split("_");
836   - routeCode = Integer.valueOf(sectionrouteCodeArray[0])+1;
  962 + routeCode = Integer.valueOf(sectionrouteCodeArray[0])+100;
837 963 }else {
838 964 routeCode = 100;
839 965 }
840   - routeRepository.sectionUpdSectionRouteCode(lineId, directions,routeCode);
  966 + routeRepository.sectionUpdSectionRouteCode(lineId, directions, routeCode);
841 967 sectionRoute.setSectionrouteCode(routeCode);
842 968 sectionRoute.setLineCode(lineCode);
843 969 sectionRoute.setSection(section);
... ... @@ -856,4 +982,5 @@ public class SectionServiceImpl extends BaseServiceImpl&lt;Section, Integer&gt; implem
856 982 }
857 983 return resultMap;
858 984 }
  985 +
859 986 }
860 987 \ No newline at end of file
... ...
src/main/java/com/bsth/service/impl/StationRouteServiceImpl.java
... ... @@ -544,7 +544,116 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
544 544 }
545 545 return list;
546 546 }
547   -
  547 +
  548 + /**
  549 + * @Description :TODO(查询下一个站点)
  550 + *
  551 + * @param map <lineId:线路ID; direction:方向;stationRouteCode:站点编码>
  552 + *
  553 + * @return List<Map<String, Object>>
  554 + */
  555 + @Override
  556 + public List<Map<String, Object>> findDownStationRoute(Map<String, Object> map) {
  557 + Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());
  558 + Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString());
  559 + Integer stationRouteCode = map.get("stationRouteCode").equals("") ? null : Integer.parseInt(map.get("stationRouteCode").toString());
  560 + List<Object[]> objects = repository.findDownStationRoute(lineId, direction, stationRouteCode);
  561 + List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
  562 +
  563 + int len = objects.size();
  564 +
  565 + if(objects.size()>0) {
  566 +
  567 + for(int i = 0 ; i < len; i++) {
  568 + Map<String, Object> tempM = new HashMap<String,Object>();
  569 +
  570 + tempM.put("stationRouteLine", objects.get(i)[0]);
  571 +
  572 + tempM.put("stationRouteStation", objects.get(i)[1]);
  573 +
  574 + tempM.put("stationRouteCode", objects.get(i)[2]);
  575 +
  576 + tempM.put("stationRouteLIneCode", objects.get(i)[3]);
  577 +
  578 + tempM.put("stationRouteStationMark", objects.get(i)[4]);
  579 +
  580 + tempM.put("stationOutStationNmber", objects.get(i)[5]);
  581 +
  582 + tempM.put("stationRoutedirections", objects.get(i)[6]);
  583 +
  584 + tempM.put("stationRouteDistances", objects.get(i)[7]);
  585 +
  586 + tempM.put("stationRouteToTime", objects.get(i)[8]);
  587 +
  588 + tempM.put("staitonRouteFirstTime", objects.get(i)[9]);
  589 +
  590 + tempM.put("stationRouteEndTime", objects.get(i)[10]);
  591 +
  592 + tempM.put("stationRouteDescriptions", objects.get(i)[11]);
  593 +
  594 + tempM.put("stationRouteDestroy", objects.get(i)[12]);
  595 +
  596 + tempM.put("stationRouteVersions", objects.get(i)[13]);
  597 +
  598 + tempM.put("stationRouteCreateBy", objects.get(i)[14]);
  599 +
  600 + tempM.put("stationRouteCreateDate", objects.get(i)[15]);
  601 +
  602 + tempM.put("stationRouteUpdateBy", objects.get(i)[16]);
  603 +
  604 + tempM.put("stationRouteUpdateDate", objects.get(i)[17]);
  605 +
  606 + tempM.put("stationId", objects.get(i)[18]);
  607 +
  608 + tempM.put("stationCode", objects.get(i)[19]);
  609 +
  610 + tempM.put("stationRouteName", objects.get(i)[20]);
  611 +
  612 + tempM.put("stationRoadCoding", objects.get(i)[21]);
  613 +
  614 + tempM.put("stationDbType", objects.get(i)[22]);
  615 +
  616 + tempM.put("stationJwpoints", objects.get(i)[23]);
  617 +
  618 + tempM.put("stationGlonx", objects.get(i)[24]);
  619 +
  620 + tempM.put("stationGlaty", objects.get(i)[25]);
  621 +
  622 + tempM.put("stationX", objects.get(i)[26]);
  623 +
  624 + tempM.put("stationY", objects.get(i)[27]);
  625 +
  626 + tempM.put("stationBPolyonGrid", objects.get(i)[28]);
  627 +
  628 + tempM.put("stationGPloyonGrid", objects.get(i)[29]);
  629 +
  630 + tempM.put("stationDestroy", objects.get(i)[30]);
  631 +
  632 + tempM.put("stationRadius", objects.get(i)[31]);
  633 +
  634 + tempM.put("stationShapesType", objects.get(i)[32]);
  635 +
  636 + tempM.put("stationVersions", objects.get(i)[33]);
  637 +
  638 + tempM.put("sttationDescriptions", objects.get(i)[34]);
  639 +
  640 + tempM.put("stationCreateBy", objects.get(i)[35]);
  641 +
  642 + tempM.put("stationCreateDate", objects.get(i)[36]);
  643 +
  644 + tempM.put("stationUpdateBy", objects.get(i)[37]);
  645 +
  646 + tempM.put("stationUpdateDate", objects.get(i)[38]);
  647 +
  648 + tempM.put("stationRouteId", objects.get(i)[39]);
  649 + tempM.put("zdmc", objects.get(i)[40]);
  650 +
  651 + resultList.add(tempM);
  652 + }
  653 + }
  654 + return resultList;
  655 + }
  656 +
548 657 /**
549 658 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)
550 659 *
... ... @@ -742,10 +851,14 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
742 851  
743 852 // 将txt文件打包
744 853 File targetFile = PackTarGZUtils.compress(textFile, target);
745   -
  854 +
746 855 /*clientUtils.testUpLoadFromDisk(targetFile,targetFile.getName());*/
747   -
  856 +
748 857 clientUtils.FTPUpLoadFromDisk(targetFile, targetFile.getName(), url, port, username, password, remotePath);
  858 +
  859 + // 删除文件
  860 + textFile.delete();
  861 + targetFile.delete();
749 862  
750 863 resultMap.put("status", ResponseCode.SUCCESS);
751 864  
... ... @@ -1313,7 +1426,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1313 1426 /**
1314 1427 * @Description :TODO(查询缓存路由)
1315 1428 *
1316   - * @param map <line.id_eq:线路ID; directions_eq:方向>
  1429 + * @param map (line.id_eq:线路ID; directions_eq:方向)
1317 1430 *
1318 1431 * @return List<Map<String, Object>>
1319 1432 */
... ...
src/main/java/com/bsth/service/oil/impl/DlbServiceImpl.java
... ... @@ -203,6 +203,7 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
203 203 t.setLp(map.get("lpName").toString());
204 204 t.setRq(sdf.parse(rq));
205 205 t.setCreatetime(new Date());
  206 + t.setJname(map.get("jName").toString());
206 207 /*if(type.equals("add")){
207 208 addList.add(t);
208 209 }else{
... ... @@ -257,13 +258,13 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
257 258 // 保留两位小数
258 259 DecimalFormat df = new DecimalFormat("#.00");
259 260 // TODO Auto-generated method stub
260   - // 当天YLB信息
261   - List<Dlb> dlList = this.listOrderBy(rq,gsbm,fgsbm,line,nbbm,"nbbm");
  261 + // 当天DLB信息
  262 + List<Dlb> dlList = this.listOrderBy(rq,gsbm,fgsbm,"",nbbm,"nbbm");
262 263 // 当天YLXXB信息
263 264 List<Ylxxb> ylxxList = ylxxbRepository.obtainYlxx(rq, 0,gsbm);
264 265 // 从排班表中计算出行驶的总里程
265 266 List<Map<String, Object>> listpb =new ArrayList<Map<String, Object>>();
266   - List<Map<String, Object>> listpbs=scheduleRealInfoService.yesterdayDataList(line, rq, gsbm, fgsbm, "", nbbm);
  267 + List<Map<String, Object>> listpbs=scheduleRealInfoService.yesterdayDataList("", rq, gsbm, fgsbm, "", nbbm);
267 268 Map<String, Double> lcMap=new HashMap<String,Double>();
268 269 for (int i = 0; i < listpbs.size(); i++) {
269 270 String cl=listpbs.get(i).get("clZbh").toString();
... ... @@ -295,7 +296,7 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
295 296 if(sxtj.equals("0")){
296 297 listpb=listpbs;
297 298 }else{
298   - List<Object[]> objectLists=repository.checkNbmmNum(rq, gsbm, fgsbm, line,nbbm);
  299 + List<Object[]> objectLists=repository.checkNbmmNum(rq, gsbm, fgsbm, "",nbbm);
299 300 List<String> stringList=new ArrayList<String>();
300 301 for (int i = 0; i < objectLists.size(); i++) {
301 302 String clbm=objectLists.get(i)[0].toString();
... ... @@ -406,12 +407,12 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
406 407 }
407 408 nextJzyl =Arith.sub(zjzl,dh);
408 409 if(zlc>0){
409   - long l=Math.round(nextJzyl);
410   - double ylxs=l*100/100;
  410 +// long l=Math.round(nextJzyl);
  411 + double ylxs=nextJzyl;
411 412 dh=Arith.add(dh, Arith.sub(nextJzyl,ylxs));
412 413 if(dh<0){
413   - t.setHd(dh);
414   - t.setCdl(dh);
  414 + t.setHd(0.0);
  415 + t.setCdl(0.0);
415 416 nextJzyl=Arith.add(ylxs, dh);
416 417 }else{
417 418 t.setHd(dh);
... ... @@ -429,21 +430,21 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
429 430 }
430 431 nextJzyl =Arith.sub( nextJzyl,dh);
431 432 if(zlc>0){
432   - long l=0l;
  433 +// long l=0l;
433 434 double ylxs=0.0;
434 435 if(i==listpb.size()-1){
435 436 // ylxs=czyl;
436 437 }else{
437 438 if(listpb.get(i+1).get("clZbh").toString().equals(map.get("clZbh").toString())){
438   - l=Math.round(nextJzyl);
439   - ylxs=l*100/100;
  439 +// l=Math.round(nextJzyl);
  440 + ylxs=nextJzyl;
440 441 }
441 442  
442 443 }
443 444 dh=Arith.add(dh, Arith.sub(nextJzyl,ylxs));
444 445 if(dh<0){
445   - t.setHd(dh);
446   - t.setCdl(dh);
  446 + t.setHd(0.0);
  447 + t.setCdl(0.0);
447 448 nextJzyl=Arith.add(ylxs, dh);
448 449 }else{
449 450 t.setHd(dh);
... ... @@ -468,15 +469,22 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
468 469 t.setJhsj(map.get("fcsj")==null?"":map.get("fcsj").toString());
469 470 t.setRq(sdf.parse(rq));
470 471 t.setLp(map.get("lpName").toString());
471   - if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
472   - if(type.equals("add")){
473   - t.setCreatetime(date);
474   - addList.add(t);
475   - }else{
476   - t.setUpdatetime(date);
477   - updateList.add(t);
478   - }
479   - }
  472 + t.setJname(map.get("jName").toString());
  473 + if (!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))) {
  474 + if (t.getHd() < 0) {
  475 + t.setHd(0.0);
  476 + }
  477 + if (t.getCdl() < 0) {
  478 + t.setCdl(0.0);
  479 + }
  480 + if (type.equals("add")) {
  481 + t.setCreatetime(date);
  482 + addList.add(t);
  483 + } else {
  484 + t.setUpdatetime(date);
  485 + updateList.add(t);
  486 + }
  487 + }
480 488 newMap.put("status", ResponseCode.SUCCESS);
481 489 }
482 490 }
... ... @@ -1017,7 +1025,7 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
1017 1025 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
1018 1026 // 保留两位小数
1019 1027 DecimalFormat df = new DecimalFormat("#.00");
1020   - List<Dlb> dlbList=this.listOrderBy(date,gsdm,fgsdm,line,"","nbbm");
  1028 + List<Dlb> dlbList=this.listOrderBy(date,gsdm,fgsdm,"","","nbbm");
1021 1029 List<Dlb> dlbList_upd=new ArrayList<Dlb>();
1022 1030 List<Dlb> dlbList_del=new ArrayList<Dlb>();
1023 1031 try{
... ... @@ -1041,7 +1049,9 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
1041 1049 }
1042 1050  
1043 1051 if(fage){
1044   - dlbList_del.add(t);
  1052 + if(t.getXlbm().equals(line)){
  1053 + dlbList_del.add(t);
  1054 + }
1045 1055 }
1046 1056 }
1047 1057 mapList.put("delList", dlbList_del);
... ... @@ -1134,12 +1144,12 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
1134 1144 }
1135 1145 nextJzyl =Arith.sub(zjzl,dh);
1136 1146 if(zlc>0){
1137   - long l=Math.round(nextJzyl);
1138   - double ylxs=l*100/100;
  1147 +// long l=Math.round(nextJzyl);
  1148 + double ylxs=nextJzyl;
1139 1149 dh=Arith.add(dh, Arith.sub(nextJzyl,ylxs));
1140 1150 if(dh<0){
1141   - t.setHd(dh);
1142   - t.setCdl(dh);
  1151 + t.setHd(0.0);
  1152 + t.setCdl(0.0);
1143 1153 nextJzyl=Arith.add(ylxs, dh);
1144 1154 }else{
1145 1155 t.setHd(dh);
... ... @@ -1157,21 +1167,21 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
1157 1167 }
1158 1168 nextJzyl =Arith.sub( nextJzyl,dh);
1159 1169 if(zlc>0){
1160   - long l=0l;
  1170 +// long l=0l;
1161 1171 double ylxs=0.0;
1162 1172 if(i==listpbDc.size()-1){
1163 1173 // ylxs=czyl;
1164 1174 }else{
1165 1175 if(listpbDc.get(i+1).get("clZbh").toString().equals(map.get("clZbh").toString())){
1166   - l=Math.round(nextJzyl);
1167   - ylxs=l*100/100;
  1176 +// l=Math.round(nextJzyl);
  1177 + ylxs=nextJzyl;
1168 1178 }
1169 1179  
1170 1180 }
1171 1181 dh=Arith.add(dh, Arith.sub(nextJzyl,ylxs));
1172 1182 if(dh<0){
1173   - t.setHd(dh);
1174   - t.setCdl(dh);
  1183 + t.setHd(0.0);
  1184 + t.setCdl(0.0);
1175 1185 nextJzyl=Arith.add(ylxs, dh);
1176 1186 }else{
1177 1187 t.setHd(dh);
... ... @@ -1204,6 +1214,13 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
1204 1214 t.setUpdatetime(new Date());
1205 1215 }
1206 1216 }
  1217 +
  1218 + if(t.getHd()<0){
  1219 + t.setHd(0.0);
  1220 + }
  1221 + if(t.getCdl()<0){
  1222 + t.setCdl(0.0);
  1223 + }
1207 1224 updateDlb.add(t);
1208 1225 }
1209 1226 }
... ...
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
... ... @@ -198,6 +198,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
198 198 t.setFgsdm(map.get("bCompany")==null?"":map.get("bCompany").toString());
199 199 t.setLp(map.get("lpName")==null?"":map.get("lpName").toString());
200 200 t.setJhsj(map.get("fcsj")==null?"":map.get("fcsj").toString());
  201 + t.setJname(map.get("jName").toString());
201 202 t.setRq(sdf.parse(rq));
202 203 t.setCreatetime(dNow);
203 204 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
... ... @@ -272,24 +273,24 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
272 273 DecimalFormat df = new DecimalFormat("#.00");
273 274 // TODO Auto-generated method stub
274 275 // 当天YLB信息
275   - List<Ylb> ylList = this.listOrderBy(rq,gsbm,fgsbm,line,nbbm,"nbbm");
  276 + List<Ylb> ylList = this.listOrderBy(rq,gsbm,fgsbm,"",nbbm,"nbbm");
276 277  
277 278 // 当天YLXXB信息
278 279 List<Ylxxb> ylxxList = ylxxbRepository.obtainYlxx(rq, 0,gsbm);
279 280  
280 281 // 前一天所有车辆最后进场班次信息
281   - List<Ylb> ylListBe = this.listByRqJcsx(rq, gsbm, fgsbm, line, nbbm);
  282 + List<Ylb> ylListBe = this.listByRqJcsx(rq, gsbm, fgsbm, "", nbbm);
282 283 List<Cyl> clyList = cylRepository.obtainCyl(nbbm,gsbm);
283 284  
284 285 // 从排班表中计算出行驶的总里程
285 286 List<Map<String, Object>> listpb =new ArrayList<Map<String, Object>>();
286   - List<Map<String, Object>> listpbs=scheduleRealInfoService.yesterdayDataList(line, rq, gsbm, fgsbm, "", nbbm);
  287 + List<Map<String, Object>> listpbs=scheduleRealInfoService.yesterdayDataList("", rq, gsbm, fgsbm, "", nbbm);
287 288  
288 289 String sxtj=map2.get("sxtj").toString();
289 290 if(sxtj.equals("0")){
290 291 listpb=listpbs;
291 292 }else{
292   - List<Object[]> objectLists=repository.checkNbmmNum(rq, gsbm, fgsbm, line,nbbm);
  293 + List<Object[]> objectLists=repository.checkNbmmNum(rq, gsbm, fgsbm, "",nbbm);
293 294 List<String> stringList=new ArrayList<String>();
294 295 for (int i = 0; i < objectLists.size(); i++) {
295 296 String clbm=objectLists.get(i)[0].toString();
... ... @@ -363,49 +364,90 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
363 364 // 当日的第一个班次,出场油量等于前一天的最后一个班次的进场油量
364 365 if (map.get("seqNumber").toString().equals("1")) {
365 366 boolean fage = true;
366   - for (int i = 0; i < ylListBe.size(); i++) {
367   - Ylb ylb = ylListBe.get(i);
368   - if (map.get("clZbh").toString().equals(ylb.getNbbm())) {
369   - if(ylb.getJzyl()>0){
370   - t.setCzyl(ylb.getJzyl());
371   - fage = false;
372   - break;
  367 + if(line.equals("")){
  368 + for (int i = 0; i < ylListBe.size(); i++) {
  369 + Ylb ylb = ylListBe.get(i);
  370 + if (map.get("clZbh").toString().equals(ylb.getNbbm())) {
  371 + if(ylb.getJzyl()>0){
  372 + t.setCzyl(ylb.getJzyl());
  373 + fage = false;
  374 + break;
  375 + }
  376 +
373 377 }
374   -
375 378 }
376   - }
377   - if (fage) {
378   - for (int y = 0; y < clyList.size(); y++) {
379   - Cyl cyl = clyList.get(y);
380   - if (map.get("clZbh").toString().equals(cyl.getNbbm())) {
381   - if(cyl!=null){
382   - if(cyl.getCyl()>=0){
383   - t.setCzyl(cyl.getCyl());
  379 + if (fage) {
  380 + for (int y = 0; y < clyList.size(); y++) {
  381 + Cyl cyl = clyList.get(y);
  382 + if (map.get("clZbh").toString().equals(cyl.getNbbm())) {
  383 + if(cyl!=null){
  384 + if(cyl.getCyl()>=0){
  385 + t.setCzyl(cyl.getCyl());
  386 + fage = false;
  387 + break;
  388 + }else {
  389 + if(cyl.getCxrl()!=null){
  390 + if(cyl.getCxrl()>0){
  391 + t.setCzyl(cyl.getCxrl());
  392 + fage = false;
  393 + break;
  394 + }
  395 + }
  396 + }
  397 + }
  398 + }
  399 + }
  400 + }
  401 + if (fage) {
  402 + t.setCzyl(0.0);
  403 + }
  404 + }else{
  405 + if (line.equals(map.get("xlBm").toString())) {
  406 + for (int i = 0; i < ylListBe.size(); i++) {
  407 + Ylb ylb = ylListBe.get(i);
  408 + if (map.get("clZbh").toString().equals(ylb.getNbbm())) {
  409 + if(ylb.getJzyl()>0){
  410 + t.setCzyl(ylb.getJzyl());
384 411 fage = false;
385 412 break;
386   - }else {
387   - if(cyl.getCxrl()!=null){
388   - if(cyl.getCxrl()>0){
389   - t.setCzyl(cyl.getCxrl());
  413 + }
  414 +
  415 + }
  416 + }
  417 + if (fage) {
  418 + for (int y = 0; y < clyList.size(); y++) {
  419 + Cyl cyl = clyList.get(y);
  420 + if (map.get("clZbh").toString().equals(cyl.getNbbm())) {
  421 + if(cyl!=null){
  422 + if(cyl.getCyl()>=0){
  423 + t.setCzyl(cyl.getCyl());
390 424 fage = false;
391 425 break;
  426 + }else {
  427 + if(cyl.getCxrl()!=null){
  428 + if(cyl.getCxrl()>0){
  429 + t.setCzyl(cyl.getCxrl());
  430 + fage = false;
  431 + break;
  432 + }
  433 + }
392 434 }
393 435 }
394 436 }
395 437 }
396 438 }
  439 + if (fage) {
  440 + t.setCzyl(0.0);
  441 + }
397 442 }
398 443 }
399   - if (fage) {
400   - t.setCzyl(0.0);
401   - }
  444 +
402 445 }
403 446  
404 447 Double jzl = 0.0;
405 448 //一人一车加注量只匹配一次
406   - if(ylMap.get(map.get("clZbh").toString()+"_"+ map.get("jGh").toString())!=null){
  449 + if(ylMap.get(map.get("clZbh").toString()+"_"+ map.get("jGh").toString())==null){
407 450  
408   - }else{
409 451 boolean fage2=false;
410 452 for (int i = 0; i < ylxxList.size(); i++) {
411 453 Ylxxb ylxxb = ylxxList.get(i);
... ... @@ -455,6 +497,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
455 497 t.setJhsj(map.get("fcsj")==null?"":map.get("fcsj").toString());
456 498 t.setRq(sdf.parse(rq));
457 499 t.setLp(map.get("lpName")==null?"":map.get("lpName").toString());
  500 + t.setJname(map.get("jName").toString());
458 501 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
459 502 if(type.equals("add")){
460 503 t.setCreatetime(date);
... ... @@ -679,6 +722,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
679 722 t.setJzyl(nextJzyl);
680 723 }
681 724 }
  725 + if(t.getJzyl()<0){
  726 + t.setJzyl(0.0);
  727 + }
  728 + if(t.getCzyl()<0){
  729 + t.setCzyl(0.0);
  730 + }
  731 + if(t.getYh()<0){
  732 + t.setYh(0.0);
  733 + }
  734 + if(t.getSh()<0){
  735 + t.setSh(0.0);
  736 + }
682 737 repository.save(t);
683 738 }
684 739 map2.put("status", ResponseCode.SUCCESS);
... ... @@ -748,7 +803,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
748 803 nbbm=map.get("nbbm_eq").toString();
749 804 }
750 805 // List<Ylb> ylListBe=repository.obtainYlbefore(rq, gsbm, "", xlbm, nbbm);
751   - List<Ylb> ylListBe=this.listByRqJcsx(rq, gsbm, fgsbm, xlbm, nbbm);
  806 + List<Ylb> ylListBe=this.listByRqJcsx(rq, gsbm, fgsbm, "", nbbm);
752 807 List<Ylb> ylbList=this.listOrderBy(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm");
753 808 // repository.obtainYl(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm");
754 809 // List<Ylxxb> ylxxbList=ylxxbRepository.obtainYlxx(rq,0,gsbm);
... ... @@ -803,6 +858,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
803 858 t.setNbbm(y1.getNbbm());
804 859 t.setRq(y1.getYyrq());
805 860 t.setJsy(y1.getJsy());
  861 + t.setJname(BasicData.allPerson.get(y1.getGsdm()+"-"+y1.getJsy()));
806 862 t.setJzl(y1.getJzl());
807 863 t.setSsgsdm(y1.getGsdm());
808 864 String fgsdm="";
... ... @@ -1404,6 +1460,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1404 1460 t.setJzyl(nextJzyl);
1405 1461 }
1406 1462 }
  1463 + if(t.getJzyl()<0){
  1464 + t.setJzyl(0.0);
  1465 + }
  1466 + if(t.getCzyl()<0){
  1467 + t.setCzyl(0.0);
  1468 + }
  1469 + if(t.getYh()<0){
  1470 + t.setYh(0.0);
  1471 + }
  1472 + if(t.getSh()<0){
  1473 + t.setSh(0.0);
  1474 + }
1407 1475 repository.save(t);
1408 1476 }
1409 1477 newMap.put("status", ResponseCode.SUCCESS);
... ... @@ -1611,9 +1679,15 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1611 1679 fgsdm=l.getBrancheCompany();
1612 1680 }
1613 1681  
  1682 + String nbbmstr="";
1614 1683 List<Map<String, Object>> listpbYc=new ArrayList<Map<String, Object>>();//油车数据
1615 1684 List<Map<String, Object>> listpbDc=new ArrayList<Map<String, Object>>();//电车数据
1616   - List<Map<String,Object>> listpb=scheduleRealInfoService.yesterdayDataList(line, date,gsdm, fgsdm, "", "");
  1685 + List<Map<String,Object>> listpb=scheduleRealInfoService.yesterdayDataList("", date,gsdm, fgsdm, "", "");
  1686 + for (int i = 0; i < listpb.size(); i++) {
  1687 + if(listpb.get(i).get("xlBm").toString().equals(line)){
  1688 + nbbmstr +=listpb.get(i).get("clZbh").toString();
  1689 + }
  1690 + }
1617 1691 for (int i = 0; i < listpb.size(); i++) {
1618 1692 boolean sfdc=true;
1619 1693 Map<String, Object> m = listpb.get(i);
... ... @@ -1622,10 +1696,12 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1622 1696 } else {
1623 1697 sfdc = true;
1624 1698 }
1625   - if(sfdc){
1626   - listpbDc.add(m);
1627   - }else{
1628   - listpbYc.add(m);
  1699 + if(nbbmstr.indexOf(m.get("clZbh").toString())>-1){
  1700 + if(sfdc){
  1701 + listpbDc.add(m);
  1702 + }else{
  1703 + listpbYc.add(m);
  1704 + }
1629 1705 }
1630 1706 }
1631 1707 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
... ... @@ -1633,8 +1709,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1633 1709 List<Cyl> clyList = cylRepository.obtainCyl("",gsdm);
1634 1710 List<Ylxxb> ylxxList = ylxxbRepository.obtainYlxx(date, 0,gsdm);
1635 1711 //重新统计油车数据开始
1636   - List<Ylb> ylListBe =repository.listMaxRqJcsx(date, gsdm, fgsdm, line, "");
1637   - List<Ylb> ylbList=this.listOrderBy(date,gsdm,fgsdm,line,"","nbbm");
  1712 + List<Ylb> ylListBe =repository.listByRqJcsx(date, gsdm, fgsdm, "", "");
  1713 + List<Ylb> ylbList=this.listOrderBy(date,gsdm,fgsdm,"","","nbbm");
1638 1714 List<Ylb> ylbList_upd=new ArrayList<Ylb>();
1639 1715 List<Ylb> ylbList_del=new ArrayList<Ylb>();
1640 1716  
... ... @@ -1657,7 +1733,9 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1657 1733 }
1658 1734 }
1659 1735 if(fage){
1660   - ylbList_del.add(t);
  1736 + if(t.getXlbm().equals(line)){
  1737 + ylbList_del.add(t);
  1738 + }
1661 1739 }
1662 1740  
1663 1741 }
... ... @@ -1766,6 +1844,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1766 1844 t.setJzl(jzl);
1767 1845 t.setNbbm(maps.get("clZbh").toString());
1768 1846 t.setJsy(maps.get("jGh") == null ? "" : maps.get("jGh").toString());
  1847 + t.setJname(maps.get("jName").toString());
1769 1848 t.setZlc(maps.get("totalKilometers") == null ? 0.0
1770 1849 : Double.parseDouble(maps.get("totalKilometers").toString()));
1771 1850 t.setXlbm(maps.get("xlBm") == null ? "" : maps.get("xlBm").toString());
... ... @@ -1796,7 +1875,6 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1796 1875 }
1797 1876  
1798 1877 }
1799   -
1800 1878 for (int i = 0; i < ylbList_del.size(); i++) {
1801 1879 Ylb y=ylbList_del.get(i);
1802 1880 if(nbbmStr.indexOf(y.getNbbm())<0){
... ... @@ -1807,7 +1885,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1807 1885  
1808 1886 //重新计算删除了的或者新增了的车的车的油耗信息(考虑车辆可能跨线路,从分公司赛选计算)
1809 1887 double czyl=0.0;
1810   - List<Ylb> iterator2=this.listOrderBy(date,gsdm,fgsdm,line,"","nbbm,jcsx");
  1888 + List<Ylb> iterator2=this.listOrderBy(date,gsdm,fgsdm,"","","nbbm,jcsx");
1811 1889 String[] nbbms=nbbmStr.split(",");
1812 1890 for (int i = 0; i < nbbms.length; i++) {
1813 1891 String clzbm=nbbms[i];
... ... @@ -1879,6 +1957,18 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1879 1957 t.setJzyl(nextJzyl);
1880 1958 }
1881 1959 }
  1960 + if(t.getJzyl()<0){
  1961 + t.setJzyl(0.0);
  1962 + }
  1963 + if(t.getCzyl()<0){
  1964 + t.setCzyl(0.0);
  1965 + }
  1966 + if(t.getYh()<0){
  1967 + t.setYh(0.0);
  1968 + }
  1969 + if(t.getSh()<0){
  1970 + t.setSh(0.0);
  1971 + }
1882 1972 repository.save(t);
1883 1973 }
1884 1974 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -41,6 +41,7 @@ import com.bsth.entity.schedule.SchedulePlanInfo;
41 41 import com.bsth.entity.sys.DutyEmployee;
42 42 import com.bsth.entity.sys.SysUser;
43 43 import com.bsth.repository.CarDeviceRepository;
  44 +import com.bsth.repository.CarsRepository;
44 45 import com.bsth.repository.LineRepository;
45 46 import com.bsth.repository.oil.DlbRepository;
46 47 import com.bsth.repository.oil.YlbRepository;
... ... @@ -159,6 +160,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
159 160 @Autowired
160 161 CarDeviceRepository carDeviceRepository;
161 162  
  163 + @Autowired
  164 + CarsRepository carsRepository;
162 165 Logger logger = LoggerFactory.getLogger(this.getClass());
163 166  
164 167 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
... ... @@ -3879,134 +3882,138 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3879 3882 }
3880 3883  
3881 3884 @Override
3882   - public Map<String, Object> MapById(Long id) {
3883   - // TODO Auto-generated method stub
3884   - Map<String, Object> map = new HashMap<String, Object>();
3885   - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
3886   - ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
3887   - String xlbm = s.getXlBm();
3888   - String fcrq = s.getScheduleDateStr();
3889   -
3890   - int type=0;
3891   - Double ccyl = 0.0;
3892   - Double jcyl = 0.0;
3893   - Double yh = 0.0;
3894   - Double jzl = 0.0;
3895   - Double zlc=0.0;
3896   - List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
3897   - List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(),xlbm);
3898   - if(listYlb.size()>0){
3899   - type=0;
3900   - for (int i = 0; i < listYlb.size(); i++) {
3901   - Ylb y = listYlb.get(i);
3902   - if(y.getLp()==null){
3903   - ccyl=Arith.add(ccyl, y.getCzyl());
3904   - jcyl=Arith.add(jcyl, y.getJzyl());
3905   - yh =Arith.add(yh ,y.getYh());
3906   - jzl =Arith.add(jzl, y.getJzl());
3907   - zlc =Arith.add(zlc, y.getZlc());
3908   - }else{
3909   - if(y.getLp().equals(s.getLpName())){
3910   - ccyl=Arith.add(ccyl, y.getCzyl());
3911   - jcyl=Arith.add(jcyl, y.getJzyl());
3912   - yh =Arith.add(yh ,y.getYh());
3913   - jzl =Arith.add(jzl, y.getJzl());
3914   - zlc =Arith.add(zlc, y.getZlc());
3915   - }
3916   - }
3917   -
3918   - }
3919   - }else{
3920   - type=1;
3921   - for (int i = 0; i < listDlb.size(); i++) {
3922   - Dlb d=listDlb.get(i);
3923   - if(d.getLp()==null){
3924   - ccyl=Arith.add(ccyl, d.getCzcd());
3925   - jcyl=Arith.add(jcyl, d.getJzcd());
3926   - yh =Arith.add(yh ,d.getHd());
3927   - jzl =Arith.add(jzl, d.getCdl());
3928   - zlc =Arith.add(zlc, d.getZlc());
3929   - }else{
3930   - if(d.getLp().equals(s.getLpName())){
3931   - ccyl=Arith.add(ccyl, d.getCzcd());
3932   - jcyl=Arith.add(jcyl, d.getJzcd());
3933   - yh =Arith.add(yh ,d.getHd());
3934   - jzl =Arith.add(jzl, d.getCdl());
3935   - zlc =Arith.add(zlc, d.getZlc());
  3885 + public Map<String, Object> MapById(Long id) {
  3886 + // TODO Auto-generated method stub
  3887 + Map<String, Object> map = new HashMap<String, Object>();
  3888 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  3889 + ScheduleRealInfo s = scheduleRealInfoRepository.scheduleById(id);
  3890 + String xlbm = s.getXlBm();
  3891 + String fcrq = s.getScheduleDateStr();
  3892 +
  3893 + int type = 2;
  3894 + Double ccyl = 0.0;
  3895 + Double jcyl = 0.0;
  3896 + Double yh = 0.0;
  3897 + Double jzl = 0.0;
  3898 + Double zlc = 0.0;
  3899 + List<Cars> listCars = carsRepository.findCarsByCode(s.getClZbh());
  3900 + if (listCars.size() > 0) {
  3901 + if(listCars.get(0).getSfdc()!=null){
  3902 + if (listCars.get(0).getSfdc()) {
  3903 + List<Dlb> listDlb = dlbRepository.queryListDlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  3904 + type = 1;
  3905 + for (int i = 0; i < listDlb.size(); i++) {
  3906 + Dlb d = listDlb.get(i);
  3907 + if (d.getLp() == null) {
  3908 + ccyl = Arith.add(ccyl, d.getCzcd());
  3909 + jcyl = Arith.add(jcyl, d.getJzcd());
  3910 + yh = Arith.add(yh, d.getHd());
  3911 + jzl = Arith.add(jzl, d.getCdl());
  3912 + zlc = Arith.add(zlc, d.getZlc());
  3913 + } else {
  3914 + if (d.getLp().equals(s.getLpName())) {
  3915 + ccyl = Arith.add(ccyl, d.getCzcd());
  3916 + jcyl = Arith.add(jcyl, d.getJzcd());
  3917 + yh = Arith.add(yh, d.getHd());
  3918 + jzl = Arith.add(jzl, d.getCdl());
  3919 + zlc = Arith.add(zlc, d.getZlc());
  3920 + }
  3921 + }
  3922 +
  3923 + }
  3924 + } else {
  3925 + List<Ylb> listYlb = ylbRepository.queryListYlb(fcrq, s.getClZbh(), s.getjGh(), xlbm);
  3926 + type = 0;
  3927 + for (int i = 0; i < listYlb.size(); i++) {
  3928 + Ylb y = listYlb.get(i);
  3929 + if (y.getLp() == null) {
  3930 + ccyl = Arith.add(ccyl, y.getCzyl());
  3931 + jcyl = Arith.add(jcyl, y.getJzyl());
  3932 + yh = Arith.add(yh, y.getYh());
  3933 + jzl = Arith.add(jzl, y.getJzl());
  3934 + zlc = Arith.add(zlc, y.getZlc());
  3935 + } else {
  3936 + if (y.getLp().equals(s.getLpName())) {
  3937 + ccyl = Arith.add(ccyl, y.getCzyl());
  3938 + jcyl = Arith.add(jcyl, y.getJzyl());
  3939 + yh = Arith.add(yh, y.getYh());
  3940 + jzl = Arith.add(jzl, y.getJzl());
  3941 + zlc = Arith.add(zlc, y.getZlc());
  3942 + }
  3943 + }
3936 3944 }
3937 3945 }
3938   -
3939 3946 }
3940   - }
3941   -
3942   - map.put("jzl", jzl);
3943   - map.put("yh", yh);
3944   - map.put("ccyl", ccyl);
3945   - map.put("jcyl", jcyl);
3946   - map.put("type", type);
3947   - map.put("zlc", zlc);
3948   - map.put("xlName", s.getXlName());
3949   - map.put("clZbh", s.getClZbh());
3950   - map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
3951   - map.put("fcsjActual", s.getFcsjActual());
3952   - map.put("zdzName", s.getZdzName());
3953   - map.put("scheduleDate", s.getScheduleDateStr());
3954   - map.put("lpName", s.getLpName());
3955   - String zdp = "", zwdp = "", wdp = "";
3956   - String zdpT = "", zwdpT = "", wdpT = "";
3957   - String dbdp="";
3958   - List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
3959   - try {
3960   - Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
3961   - Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
3962   - Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
3963   - for (int i = 0; i < list.size(); i++) {
3964   - DutyEmployee t = list.get(i);
3965   - if(dbdp.indexOf(t.getuName()) == -1){
3966   - if(!(dbdp.length()>0)){
3967   - dbdp =t.getuName();
3968   - }else{
3969   - dbdp +=","+t.getuName();
3970   - }
3971   - }
3972   - Long ts = t.getTs();
3973   - if (ts > fcsj1 && ts < fcsj2) {
3974   - if (zdp.indexOf(t.getuName()) == -1) {
3975   - if (!(zdp.length() > 0)) {
3976   - zdpT = t.getuName() + "...";
3977   - }
3978   - zdp += t.getuName() + ",";
  3947 + }
3979 3948  
3980   - }
3981   - } else if (ts > fcsj2 && ts < fcsj3) {
3982   - if (zwdp.indexOf(t.getuName()) == -1) {
3983   - if (!(zwdp.length() > 0)) {
3984   - zwdpT = t.getuName() + "...";
3985   - }
3986   - zwdp += t.getuName() + ",";
3987   - }
3988   - } else {
3989   - if (wdp.indexOf(t.getuName()) == -1) {
3990   - if (!(wdp.length() > 0)) {
3991   - wdpT = t.getuName() + "...";
3992   - }
3993   - wdp += t.getuName() + ",";
3994   - }
3995   - }
3996   - }
3997   - } catch (ParseException e) {
3998   - // TODO Auto-generated catch block
3999   - e.printStackTrace();
4000   - }
4001   - map.put("zdp", zdp);
4002   - map.put("zwdp", zwdp);
4003   - map.put("wdp", wdp);
4004   - map.put("zdpT", zdpT);
4005   - map.put("zwdpT", zwdpT);
4006   - map.put("wdpT", wdpT);
4007   - map.put("dbdp", dbdp);
4008   - return map;
4009   - }
  3949 + map.put("jzl", jzl);
  3950 + map.put("yh", yh);
  3951 + map.put("ccyl", ccyl);
  3952 + map.put("jcyl", jcyl);
  3953 + map.put("type", type);
  3954 + map.put("zlc", zlc);
  3955 + map.put("xlName", s.getXlName());
  3956 + map.put("clZbh", s.getClZbh());
  3957 + map.put("plate", BasicData.nbbmCompanyPlateMap.get(s.getClZbh()));
  3958 + map.put("fcsjActual", s.getFcsjActual());
  3959 + map.put("zdzName", s.getZdzName());
  3960 + map.put("scheduleDate", s.getScheduleDateStr());
  3961 + map.put("lpName", s.getLpName());
  3962 + String zdp = "", zwdp = "", wdp = "";
  3963 + String zdpT = "", zwdpT = "", wdpT = "";
  3964 + String dbdp = "";
  3965 + List<DutyEmployee> list = dutyEmployeeService.getDutyEmployee(xlbm, fcrq + "00:01", fcrq + "23:59");
  3966 + try {
  3967 + Long fcsj1 = sdf.parse(fcrq + " 00:01").getTime();
  3968 + Long fcsj2 = sdf.parse(fcrq + " 11:00").getTime();
  3969 + Long fcsj3 = sdf.parse(fcrq + " 23:59").getTime();
  3970 + for (int i = 0; i < list.size(); i++) {
  3971 + DutyEmployee t = list.get(i);
  3972 + if (dbdp.indexOf(t.getuName()) == -1) {
  3973 + if (!(dbdp.length() > 0)) {
  3974 + dbdp = t.getuName();
  3975 + } else {
  3976 + dbdp += "," + t.getuName();
  3977 + }
  3978 + }
  3979 + Long ts = t.getTs();
  3980 + if (ts > fcsj1 && ts < fcsj2) {
  3981 + if (zdp.indexOf(t.getuName()) == -1) {
  3982 + if (!(zdp.length() > 0)) {
  3983 + zdpT = t.getuName() + "...";
  3984 + }
  3985 + zdp += t.getuName() + ",";
  3986 +
  3987 + }
  3988 + } else if (ts > fcsj2 && ts < fcsj3) {
  3989 + if (zwdp.indexOf(t.getuName()) == -1) {
  3990 + if (!(zwdp.length() > 0)) {
  3991 + zwdpT = t.getuName() + "...";
  3992 + }
  3993 + zwdp += t.getuName() + ",";
  3994 + }
  3995 + } else {
  3996 + if (wdp.indexOf(t.getuName()) == -1) {
  3997 + if (!(wdp.length() > 0)) {
  3998 + wdpT = t.getuName() + "...";
  3999 + }
  4000 + wdp += t.getuName() + ",";
  4001 + }
  4002 + }
  4003 + }
  4004 + } catch (ParseException e) {
  4005 + // TODO Auto-generated catch block
  4006 + e.printStackTrace();
  4007 + }
  4008 + map.put("zdp", zdp);
  4009 + map.put("zwdp", zwdp);
  4010 + map.put("wdp", wdp);
  4011 + map.put("zdpT", zdpT);
  4012 + map.put("zwdpT", zwdpT);
  4013 + map.put("wdpT", wdpT);
  4014 + map.put("dbdp", dbdp);
  4015 + return map;
  4016 + }
4010 4017  
4011 4018 @Override
4012 4019 public Map<String, Object> MapByIdQp(Long id) {
... ... @@ -4744,7 +4751,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4744 4751 }
4745 4752 // file.mkdirs(); //创建
4746 4753 List<ScheduleRealInfo> lists_line=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(line, date);
4747   -
4748 4754 List<File> files = new ArrayList<File>();
4749 4755 for (List<String> list : lists){
4750 4756 List<ScheduleRealInfo> newList=new ArrayList<ScheduleRealInfo>();
... ... @@ -4770,7 +4776,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
4770 4776 }
4771 4777 File newFile = files.get(0);
4772 4778 newFile.renameTo(file);
4773   -
4774 4779 // temp.renameTo(new File(path + fileName + "/" + temp.getName()));
4775 4780 // File[] listFiles = file.listFiles();
4776 4781 // ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(path + file.getName() + ".zip")));
... ...
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
... ... @@ -378,119 +378,194 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
378 378 }
379 379 }
380 380  
381   - @Override
382   - public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException {
383   - try {
384   - // 使用POI,创建xlsx文件
385   - XSSFWorkbook wb = new XSSFWorkbook();
386   - XSSFSheet sheet = wb.createSheet(WorkbookUtil.createSafeSheetName("时刻表信息"));
  381 + private void createDynamicTTinfoStatSheet(XSSFWorkbook wb, DTInfos dtInfos) {
  382 + XSSFSheet sheet = wb.createSheet(WorkbookUtil.createSafeSheetName("时刻表信息_统计"));
387 383  
388   - //-------------------------------- 1、路牌班次数据 -------------------------------//
389   - List<LpObj> lpObjList = dtInfos.getLpObjList();
  384 + //-------------------------------- 1、路牌班次数据 -------------------------------//
  385 + List<LpObj> lpObjList = dtInfos.getLpObjList();
390 386  
391   - // 构建第一行数据
392   - XSSFRow lpHeadRow = sheet.createRow((short) 0);
393   - if (lpObjList.size() == 0) {
394   - throw new RuntimeException("没有班次数据!");
395   - }
396   - int groupCount = lpObjList.get(0).getGroupCount(); // 获取总圈数
397   - if (groupCount == 0) {
398   - throw new RuntimeException("总圈数为0,有问题!");
399   - }
  387 + // 构建第一行数据
  388 + XSSFRow lpHeadRow = sheet.createRow((short) 0);
  389 + if (lpObjList.size() == 0) {
  390 + throw new RuntimeException("没有班次数据!");
  391 + }
  392 + int groupCount = lpObjList.get(0).getGroupCount(); // 获取总圈数
  393 + if (groupCount == 0) {
  394 + throw new RuntimeException("总圈数为0,有问题!");
  395 + }
400 396  
401   - // 构造表头
402   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short)0, "路牌", new Color(0x96b9d7));
403   - Station station1 = stationService.findById(lpObjList.get(0).getStationRouteId1());
404   - Station station2 = stationService.findById(lpObjList.get(1).getStationRouteId2());
405   - for (int i = 0; i < groupCount; i++) {
406   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1),
407   - station1.getStationName(), new Color(0x96b9d7));
408   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 2),
409   - station2.getStationName(), new Color(0x96b9d7));
  397 + // 构造表头
  398 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short)0, "路牌", new Color(0x96b9d7));
  399 + Station station1 = stationService.findById(lpObjList.get(0).getStationRouteId1());
  400 + Station station2 = stationService.findById(lpObjList.get(1).getStationRouteId2());
  401 + for (int i = 0; i < groupCount; i++) {
  402 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1),
  403 + station1.getStationName(), new Color(0x96b9d7));
  404 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 2),
  405 + station2.getStationName(), new Color(0x96b9d7));
  406 + }
  407 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 1),
  408 + "路牌工时", new Color(0x96b9d7));
  409 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 2),
  410 + "营运班次数", new Color(0x96b9d7));
  411 +
  412 + // 构建每个路牌的班次数据
  413 + for (int i = 0; i < lpObjList.size(); i++) {
  414 + LpObj lpObj = lpObjList.get(i);
  415 + XSSFRow lpRow = sheet.createRow((short) (i + 1));
  416 + PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname());
  417 + for (int j = 0; j < groupCount; j++) {
  418 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1));
  419 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 2));
410 420 }
411   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 1),
412   - "路牌工时", new Color(0x96b9d7));
413   - PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 2),
414   - "营运班次数", new Color(0x96b9d7));
415   -
416   - // 构建每个路牌的班次数据
417   - for (int i = 0; i < lpObjList.size(); i++) {
418   - LpObj lpObj = lpObjList.get(i);
419   - XSSFRow lpRow = sheet.createRow((short) (i + 1));
420   - PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname());
421   - for (int j = 0; j < groupCount; j++) {
422   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1));
423   - PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 2));
424   - }
425   - for (BcObj bcObj : lpObj.getBcObjList()) {
  421 + for (BcObj bcObj : lpObj.getBcObjList()) {
  422 + if (bcObj.getBcType() == BcType.NORMAL) {
426 423 Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 1));
427   - cell.setCellValue(bcObj.getFcsj());
  424 + cell.setCellValue(bcObj.getFcsjDesc());
428 425 }
429   - // 路牌工时/班次数
430   - PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 1),
431   - lpObj.getZgs() / 60);
432   - // 营运班次数
433   - PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 2),
434   - lpObj.getZbc());
435 426 }
  427 + // 路牌工时/班次数
  428 + PoiUtils.createDoubleXSSFCell(wb, lpRow, (short) (groupCount * 2 + 1),
  429 + lpObj.getZgs() / 60);
  430 + // 营运班次数
  431 + PoiUtils.createIntegerXSSFCell(wb, lpRow, (short) (groupCount * 2 + 2),
  432 + lpObj.getZbc());
  433 + }
436 434  
437   - // 自适应单元格长宽
438   - sheet.autoSizeColumn(0);
439   - for (int i = 0; i < groupCount; i++) {
440   - sheet.autoSizeColumn(i * 2 + 1);
441   - sheet.autoSizeColumn(i * 2 + 2);
442   - }
443   - sheet.autoSizeColumn(groupCount * 2 + 1);
444   - sheet.autoSizeColumn(groupCount * 2 + 2);
  435 + // 自适应单元格长宽
  436 + sheet.autoSizeColumn(0);
  437 + for (int i = 0; i < groupCount; i++) {
  438 + sheet.autoSizeColumn(i * 2 + 1);
  439 + sheet.autoSizeColumn(i * 2 + 2);
  440 + }
  441 + sheet.autoSizeColumn(groupCount * 2 + 1);
  442 + sheet.autoSizeColumn(groupCount * 2 + 2);
445 443  
446   - // 锁定行首,列首
447   - sheet.createFreezePane(1, 1);
  444 + // 锁定行首,列首
  445 + sheet.createFreezePane(1, 1);
448 446  
449   - //-------------------------------- 2、统计数据 -------------------------------//
450   - List<StatInfo> statInfos = dtInfos.getStatInfoList();
  447 + //-------------------------------- 2、统计数据 -------------------------------//
  448 + List<StatInfo> statInfos = dtInfos.getStatInfoList();
451 449  
452   - // 创建总的统计数据格式
453   - // 第一行 统计数据
454   - // 第二行 序号,统计项目(8个单元格合并),统计数值
455   - // 第三行开始数据,一共20行
  450 + // 创建总的统计数据格式
  451 + // 第一行 统计数据
  452 + // 第二行 序号,统计项目(8个单元格合并),统计数值
  453 + // 第三行开始数据,一共20行
456 454  
457   - int startrow = lpObjList.size() + 3;
458   - for (int i = startrow; i <= startrow + 22; i++) {
459   - XSSFRow xssfRow = sheet.createRow(i);
460   - for (int j = 0; j < 10; j++) {
461   - PoiUtils.createStringXSSFCell(wb, xssfRow, (short) j, "");
  455 + int startrow = lpObjList.size() + 3;
  456 + for (int i = startrow; i <= startrow + 22; i++) {
  457 + XSSFRow xssfRow = sheet.createRow(i);
  458 + for (int j = 0; j < 10; j++) {
  459 + PoiUtils.createStringXSSFCell(wb, xssfRow, (short) j, "");
462 460  
463   - }
464   - }
465   - // 合并第一行
466   - sheet.addMergedRegion(new CellRangeAddress(startrow, startrow, 0, 9));
467   - sheet.getRow(startrow).getCell(0).setCellValue("统计数据");
468   - // 合并第二行
469   - sheet.getRow(startrow + 1).getCell(0).setCellValue("序号");
470   - sheet.getRow(startrow + 1).getCell(1).setCellValue("统计项目");
471   - sheet.getRow(startrow + 1).getCell(9).setCellValue("统计数值");
472   - sheet.addMergedRegion(new CellRangeAddress(startrow + 1, startrow + 1, 1, 8));
473   - // 处理后面具体统计行
474   - for (int row = startrow + 2; row <= startrow + 2 + statInfos.size(); row++) {
475   - sheet.addMergedRegion(new CellRangeAddress(row, row, 1, 8));
476 461 }
  462 + }
  463 + // 合并第一行
  464 + sheet.addMergedRegion(new CellRangeAddress(startrow, startrow, 0, 9));
  465 + sheet.getRow(startrow).getCell(0).setCellValue("统计数据");
  466 + // 合并第二行
  467 + sheet.getRow(startrow + 1).getCell(0).setCellValue("序号");
  468 + sheet.getRow(startrow + 1).getCell(1).setCellValue("统计项目");
  469 + sheet.getRow(startrow + 1).getCell(9).setCellValue("统计数值");
  470 + sheet.addMergedRegion(new CellRangeAddress(startrow + 1, startrow + 1, 1, 8));
  471 + // 处理后面具体统计行
  472 + for (int row = startrow + 2; row <= startrow + 2 + statInfos.size(); row++) {
  473 + sheet.addMergedRegion(new CellRangeAddress(row, row, 1, 8));
  474 + }
  475 +
  476 + for (int i = 0; i < statInfos.size(); i++) {
  477 + StatInfo statInfo = statInfos.get(i);
  478 +
  479 + // 1、统计序号
  480 + PoiUtils.setIntegerStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(0));
  481 + sheet.getRow(startrow + 2 + i).getCell(0).setCellValue(i);
  482 +
  483 + // 2、统计项目
  484 + sheet.getRow(startrow + 2 + i).getCell(1).setCellValue(statInfo.getStatItem());
  485 +
  486 + // 3、统计数值
  487 + PoiUtils.setDoubleStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(9));
  488 + sheet.getRow(startrow + 2 + i).getCell(9).setCellValue(statInfo.getStatValue());
  489 + }
  490 +
  491 + }
477 492  
478   - for (int i = 0; i < statInfos.size(); i++) {
479   - StatInfo statInfo = statInfos.get(i);
  493 + private void createDynamicTTinfoSheet(XSSFWorkbook wb, DTInfos dtInfos) {
  494 + XSSFSheet sheet = wb.createSheet(WorkbookUtil.createSafeSheetName("时刻表信息"));
480 495  
481   - // 1、统计序号
482   - PoiUtils.setIntegerStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(0));
483   - sheet.getRow(startrow + 2 + i).getCell(0).setCellValue(i);
  496 + //-------------------------------- 1、路牌班次数据 -------------------------------//
  497 + List<LpObj> lpObjList = dtInfos.getLpObjList();
  498 +
  499 + // 构建第一行数据
  500 + XSSFRow lpHeadRow = sheet.createRow((short) 0);
  501 + if (lpObjList.size() == 0) {
  502 + throw new RuntimeException("没有班次数据!");
  503 + }
  504 + int groupCount = lpObjList.get(0).getGroupCount(); // 获取总圈数
  505 + if (groupCount == 0) {
  506 + throw new RuntimeException("总圈数为0,有问题!");
  507 + }
484 508  
485   - // 2、统计项目
486   - sheet.getRow(startrow + 2 + i).getCell(1).setCellValue(statInfo.getStatItem());
  509 + // 构造表头,添加一个进场,添加一个出场
  510 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short)0, "路牌", new Color(0x96b9d7));
  511 + Station station1 = stationService.findById(lpObjList.get(0).getStationRouteId1());
  512 + Station station2 = stationService.findById(lpObjList.get(1).getStationRouteId2());
  513 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (1),
  514 + "出场", new Color(0x96b9d7));
  515 + for (int i = 1; i <= groupCount; i++) {
  516 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2),
  517 + station1.getStationName(), new Color(0x96b9d7));
  518 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (i * 2 + 1),
  519 + station2.getStationName(), new Color(0x96b9d7));
  520 + }
  521 + PoiUtils.createStringXSSFCell(wb, lpHeadRow, (short) (groupCount * 2 + 2),
  522 + "进场", new Color(0x96b9d7));
  523 +
  524 + // 构建每个路牌的班次数据
  525 + for (int i = 0; i < lpObjList.size(); i++) {
  526 + LpObj lpObj = lpObjList.get(i);
  527 + XSSFRow lpRow = sheet.createRow((short) (i + 1));
  528 + PoiUtils.createStringXSSFCell(wb, lpRow, (short) 0, lpObj.getLpname());
  529 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (1));
  530 + for (int j = 1; j <= groupCount; j++) {
  531 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2));
  532 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (j * 2 + 1));
  533 + }
  534 + PoiUtils.createBlankXSSFCell(wb, lpRow, (short) (groupCount * 2 + 2));
487 535  
488   - // 3、统计数值
489   - PoiUtils.setDoubleStyleXSSFCellStyle(wb, sheet.getRow(startrow + 2 + i).getCell(9));
490   - sheet.getRow(startrow + 2 + i).getCell(9).setCellValue(statInfo.getStatValue());
  536 + for (BcObj bcObj : lpObj.getBcObjList()) {
  537 + if (bcObj.getBcType() == BcType.NORMAL) {
  538 + Cell cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 2));
  539 + cell.setCellValue(bcObj.getFcsj());
  540 + } else if (bcObj.getBcType() == BcType.OUT) {
  541 + Cell cell = lpRow.getCell((short) (1));
  542 + cell.setCellValue(bcObj.getFcsj());
  543 + } else if (bcObj.getBcType() == BcType.IN) {
  544 + Cell cell = lpRow.getCell((short) (groupCount * 2 + 2));
  545 + cell.setCellValue(bcObj.getFcsj());
  546 + }
491 547 }
  548 + }
  549 +
  550 + // 自适应单元格长宽
  551 + sheet.autoSizeColumn(0);
  552 + sheet.autoSizeColumn(1);
  553 + for (int i = 1; i <= groupCount; i++) {
  554 + sheet.autoSizeColumn(i * 2);
  555 + sheet.autoSizeColumn(i * 2 + 1);
  556 + }
  557 +
  558 + }
  559 +
  560 + @Override
  561 + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException {
  562 + try {
  563 + // 使用POI,创建xlsx文件
  564 + XSSFWorkbook wb = new XSSFWorkbook();
  565 + this.createDynamicTTinfoSheet(wb, dtInfos);
  566 + this.createDynamicTTinfoStatSheet(wb, dtInfos);
492 567  
493   - // 最后内存写入文件
  568 + // wb内存写入文件
494 569 String filepath = dataToolsProperties.getFileoutputDir() +
495 570 File.separator +
496 571 "动态时刻表-" +
... ...
src/main/java/com/bsth/service/schedule/datatools/TTinfoDetailDynamicData.java
1   -package com.bsth.service.schedule.datatools;
2   -
3   -import com.bsth.service.schedule.exception.ScheduleException;
4   -import com.bsth.service.schedule.utils.DataToolsFile;
5   -import com.fasterxml.jackson.annotation.JsonCreator;
6   -import com.fasterxml.jackson.annotation.JsonValue;
7   -
8   -import java.util.List;
9   -
10   -/**
11   - * 动态时刻表数据。
12   - */
13   -public interface TTinfoDetailDynamicData {
14   -
15   - //---------------------- 生成时刻表用对象(以下) ---------------------//
16   - public static enum BcType { // 班次类型枚举
17   - IN("in"), // 进场
18   - OUT("out"), // 出场
19   - BD("bd"), // 早例保
20   - LC("lc"), // 晚例保
21   - NORMAL("normal"); // 正常
22   - private String flag;
23   -
24   - @JsonCreator
25   - private BcType(String flag) {
26   - this.flag = flag;
27   - }
28   -
29   - @JsonValue
30   - public String getFlag() {
31   - return flag;
32   - }
33   -
34   - public void setFlag(String flag) {
35   - this.flag = flag;
36   - }
37   - }
38   -
39   - public static class BcObj { // 班次对象
40   - /** 班次时间 */
41   - private Integer bcsj;
42   - /** 停站时间 */
43   - private Integer ssj;
44   - /** 吃饭时间 */
45   - private Integer eatsj;
46   -
47   - /** 停车场id */
48   - private Integer tccid;
49   - /** 起点站id */
50   - private Integer qdzid;
51   - /** 终点站id */
52   - private Integer zdzid;
53   -
54   - /** 是否上行 */
55   - private Boolean isUp;
56   -
57   - /** 班次类型 */
58   - private BcType bcType;
59   - /** 发车时刻 */
60   - private String fcsj;
61   -
62   - /** 第几圈(从1开始) */
63   - private Integer groupNo;
64   - /** 圈里第几个班次(1或者2) */
65   - private Integer groupBcNo;
66   -
67   - public Integer getBcsj() {
68   - return bcsj;
69   - }
70   -
71   - public void setBcsj(Integer bcsj) {
72   - this.bcsj = bcsj;
73   - }
74   -
75   - public Integer getSsj() {
76   - return ssj;
77   - }
78   -
79   - public void setSsj(Integer ssj) {
80   - this.ssj = ssj;
81   - }
82   -
83   - public Integer getEatsj() {
84   - return eatsj;
85   - }
86   -
87   - public void setEatsj(Integer eatsj) {
88   - this.eatsj = eatsj;
89   - }
90   -
91   - public Integer getTccid() {
92   - return tccid;
93   - }
94   -
95   - public void setTccid(Integer tccid) {
96   - this.tccid = tccid;
97   - }
98   -
99   - public Integer getQdzid() {
100   - return qdzid;
101   - }
102   -
103   - public void setQdzid(Integer qdzid) {
104   - this.qdzid = qdzid;
105   - }
106   -
107   - public Integer getZdzid() {
108   - return zdzid;
109   - }
110   -
111   - public void setZdzid(Integer zdzid) {
112   - this.zdzid = zdzid;
113   - }
114   -
115   - public BcType getBcType() {
116   - return bcType;
117   - }
118   -
119   - public void setBcType(BcType bcType) {
120   - this.bcType = bcType;
121   - }
122   -
123   - public String getFcsj() {
124   - return fcsj;
125   - }
126   -
127   - public void setFcsj(String fcsj) {
128   - this.fcsj = fcsj;
129   - }
130   -
131   - public Boolean getIsUp() {
132   - return isUp;
133   - }
134   -
135   - public void setIsUp(Boolean isUp) {
136   - this.isUp = isUp;
137   - }
138   -
139   - public Integer getGroupNo() {
140   - return groupNo;
141   - }
142   -
143   - public void setGroupNo(Integer groupNo) {
144   - this.groupNo = groupNo;
145   - }
146   -
147   - public Integer getGroupBcNo() {
148   - return groupBcNo;
149   - }
150   -
151   - public void setGroupBcNo(Integer groupBcNo) {
152   - this.groupBcNo = groupBcNo;
153   - }
154   - }
155   -
156   - public static class LpObj { // 路牌对象
157   - /** 路牌名字 */
158   - private String lpname;
159   - /** 每圈的第一个班次是否上行 */
160   - private Boolean isUp;
161   -
162   - /** 第一个班次起点站路由id */
163   - private Integer stationRouteId1;
164   - /** 第二个班次起点站路由id */
165   - private Integer stationRouteId2;
166   -
167   - /** 班次列表 */
168   - private List<BcObj> bcObjList;
169   - /** 总圈数 */
170   - private Integer groupCount;
171   -
172   - /** 总工时 */
173   - private Double zgs;
174   - /** 总班次 */
175   - private Integer zbc;
176   -
177   -
178   - public String getLpname() {
179   - return lpname;
180   - }
181   -
182   - public void setLpname(String lpname) {
183   - this.lpname = lpname;
184   - }
185   -
186   - public Boolean getIsUp() {
187   - return isUp;
188   - }
189   -
190   - public void setIsUp(Boolean isUp) {
191   - this.isUp = isUp;
192   - }
193   -
194   - public List<BcObj> getBcObjList() {
195   - return bcObjList;
196   - }
197   -
198   - public void setBcObjList(List<BcObj> bcObjList) {
199   - this.bcObjList = bcObjList;
200   - }
201   -
202   - public Integer getGroupCount() {
203   - return groupCount;
204   - }
205   -
206   - public void setGroupCount(Integer groupCount) {
207   - this.groupCount = groupCount;
208   - }
209   -
210   - public Double getZgs() {
211   - return zgs;
212   - }
213   -
214   - public void setZgs(Double zgs) {
215   - this.zgs = zgs;
216   - }
217   -
218   - public Integer getZbc() {
219   - return zbc;
220   - }
221   -
222   - public void setZbc(Integer zbc) {
223   - this.zbc = zbc;
224   - }
225   -
226   - public Integer getStationRouteId1() {
227   - return stationRouteId1;
228   - }
229   -
230   - public void setStationRouteId1(Integer stationRouteId1) {
231   - this.stationRouteId1 = stationRouteId1;
232   - }
233   -
234   - public Integer getStationRouteId2() {
235   - return stationRouteId2;
236   - }
237   -
238   - public void setStationRouteId2(Integer stationRouteId2) {
239   - this.stationRouteId2 = stationRouteId2;
240   - }
241   - }
242   -
243   - public static class StatInfo { // 统计数据对象
244   - /** 统计项目 */
245   - private String statItem;
246   - /** 统计值 */
247   - private Double statValue;
248   -
249   - public String getStatItem() {
250   - return statItem;
251   - }
252   -
253   - public void setStatItem(String statItem) {
254   - this.statItem = statItem;
255   - }
256   -
257   - public Double getStatValue() {
258   - return statValue;
259   - }
260   -
261   - public void setStatValue(Double statValue) {
262   - this.statValue = statValue;
263   - }
264   - }
265   -
266   - public static class DTInfos { // 所有数据信息
267   - /** 路牌班次数据列表 */
268   - private List<LpObj> lpObjList;
269   - /** 统计数据列表 */
270   - private List<StatInfo> statInfoList;
271   -
272   - public List<LpObj> getLpObjList() {
273   - return lpObjList;
274   - }
275   -
276   - public void setLpObjList(List<LpObj> lpObjList) {
277   - this.lpObjList = lpObjList;
278   - }
279   -
280   - public List<StatInfo> getStatInfoList() {
281   - return statInfoList;
282   - }
283   -
284   - public void setStatInfoList(List<StatInfo> statInfoList) {
285   - this.statInfoList = statInfoList;
286   - }
287   - }
288   -
289   - //---------------------- 生成时刻表用对象(以上) ---------------------//
290   -
291   - /**
292   - * 导出动态时刻表数据。
293   - * @param dtInfos
294   - * @return
295   - * @throws ScheduleException
296   - */
297   - public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException;
298   -}
  1 +package com.bsth.service.schedule.datatools;
  2 +
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsFile;
  5 +import com.fasterxml.jackson.annotation.JsonCreator;
  6 +import com.fasterxml.jackson.annotation.JsonValue;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * 动态时刻表数据。
  12 + */
  13 +public interface TTinfoDetailDynamicData {
  14 +
  15 + //---------------------- 生成时刻表用对象(以下) ---------------------//
  16 + public static enum BcType { // 班次类型枚举
  17 + IN("in"), // 进场
  18 + OUT("out"), // 出场
  19 + BD("bd"), // 早例保
  20 + LC("lc"), // 晚例保
  21 + NORMAL("normal"); // 正常
  22 + private String flag;
  23 +
  24 + @JsonCreator
  25 + private BcType(String flag) {
  26 + this.flag = flag;
  27 + }
  28 +
  29 + @JsonValue
  30 + public String getFlag() {
  31 + return flag;
  32 + }
  33 +
  34 + public void setFlag(String flag) {
  35 + this.flag = flag;
  36 + }
  37 + }
  38 +
  39 + public static class BcObj { // 班次对象
  40 + /** 班次时间 */
  41 + private Integer bcsj;
  42 + /** 停站时间 */
  43 + private Integer ssj;
  44 + /** 吃饭时间 */
  45 + private Integer eatsj;
  46 +
  47 + /** 停车场id */
  48 + private Integer tccid;
  49 + /** 起点站id */
  50 + private Integer qdzid;
  51 + /** 终点站id */
  52 + private Integer zdzid;
  53 +
  54 + /** 是否上行 */
  55 + private Boolean isUp;
  56 +
  57 + /** 班次类型 */
  58 + private BcType bcType;
  59 + /** 发车时刻 */
  60 + private String fcsj;
  61 + /** 用于统计的发车时间描述(把进出场,保养,吃饭时间写在一起) */
  62 + private String fcsjDesc;
  63 +
  64 + /** 第几圈(从1开始) */
  65 + private Integer groupNo;
  66 + /** 圈里第几个班次(1或者2) */
  67 + private Integer groupBcNo;
  68 +
  69 + public Integer getBcsj() {
  70 + return bcsj;
  71 + }
  72 +
  73 + public void setBcsj(Integer bcsj) {
  74 + this.bcsj = bcsj;
  75 + }
  76 +
  77 + public Integer getSsj() {
  78 + return ssj;
  79 + }
  80 +
  81 + public void setSsj(Integer ssj) {
  82 + this.ssj = ssj;
  83 + }
  84 +
  85 + public Integer getEatsj() {
  86 + return eatsj;
  87 + }
  88 +
  89 + public void setEatsj(Integer eatsj) {
  90 + this.eatsj = eatsj;
  91 + }
  92 +
  93 + public Integer getTccid() {
  94 + return tccid;
  95 + }
  96 +
  97 + public void setTccid(Integer tccid) {
  98 + this.tccid = tccid;
  99 + }
  100 +
  101 + public Integer getQdzid() {
  102 + return qdzid;
  103 + }
  104 +
  105 + public void setQdzid(Integer qdzid) {
  106 + this.qdzid = qdzid;
  107 + }
  108 +
  109 + public Integer getZdzid() {
  110 + return zdzid;
  111 + }
  112 +
  113 + public void setZdzid(Integer zdzid) {
  114 + this.zdzid = zdzid;
  115 + }
  116 +
  117 + public BcType getBcType() {
  118 + return bcType;
  119 + }
  120 +
  121 + public void setBcType(BcType bcType) {
  122 + this.bcType = bcType;
  123 + }
  124 +
  125 + public String getFcsj() {
  126 + return fcsj;
  127 + }
  128 +
  129 + public void setFcsj(String fcsj) {
  130 + this.fcsj = fcsj;
  131 + }
  132 +
  133 + public Boolean getIsUp() {
  134 + return isUp;
  135 + }
  136 +
  137 + public void setIsUp(Boolean isUp) {
  138 + this.isUp = isUp;
  139 + }
  140 +
  141 + public Integer getGroupNo() {
  142 + return groupNo;
  143 + }
  144 +
  145 + public void setGroupNo(Integer groupNo) {
  146 + this.groupNo = groupNo;
  147 + }
  148 +
  149 + public Integer getGroupBcNo() {
  150 + return groupBcNo;
  151 + }
  152 +
  153 + public void setGroupBcNo(Integer groupBcNo) {
  154 + this.groupBcNo = groupBcNo;
  155 + }
  156 +
  157 + public Boolean getUp() {
  158 + return isUp;
  159 + }
  160 +
  161 + public void setUp(Boolean up) {
  162 + isUp = up;
  163 + }
  164 +
  165 + public String getFcsjDesc() {
  166 + return fcsjDesc;
  167 + }
  168 +
  169 + public void setFcsjDesc(String fcsjDesc) {
  170 + this.fcsjDesc = fcsjDesc;
  171 + }
  172 + }
  173 +
  174 + public static class LpObj { // 路牌对象
  175 + /** 路牌名字 */
  176 + private String lpname;
  177 + /** 每圈的第一个班次是否上行 */
  178 + private Boolean isUp;
  179 +
  180 + /** 第一个班次起点站路由id */
  181 + private Integer stationRouteId1;
  182 + /** 第二个班次起点站路由id */
  183 + private Integer stationRouteId2;
  184 +
  185 + /** 班次列表 */
  186 + private List<BcObj> bcObjList;
  187 + /** 总圈数 */
  188 + private Integer groupCount;
  189 +
  190 + /** 总工时 */
  191 + private Double zgs;
  192 + /** 总班次 */
  193 + private Integer zbc;
  194 +
  195 +
  196 + public String getLpname() {
  197 + return lpname;
  198 + }
  199 +
  200 + public void setLpname(String lpname) {
  201 + this.lpname = lpname;
  202 + }
  203 +
  204 + public Boolean getIsUp() {
  205 + return isUp;
  206 + }
  207 +
  208 + public void setIsUp(Boolean isUp) {
  209 + this.isUp = isUp;
  210 + }
  211 +
  212 + public List<BcObj> getBcObjList() {
  213 + return bcObjList;
  214 + }
  215 +
  216 + public void setBcObjList(List<BcObj> bcObjList) {
  217 + this.bcObjList = bcObjList;
  218 + }
  219 +
  220 + public Integer getGroupCount() {
  221 + return groupCount;
  222 + }
  223 +
  224 + public void setGroupCount(Integer groupCount) {
  225 + this.groupCount = groupCount;
  226 + }
  227 +
  228 + public Double getZgs() {
  229 + return zgs;
  230 + }
  231 +
  232 + public void setZgs(Double zgs) {
  233 + this.zgs = zgs;
  234 + }
  235 +
  236 + public Integer getZbc() {
  237 + return zbc;
  238 + }
  239 +
  240 + public void setZbc(Integer zbc) {
  241 + this.zbc = zbc;
  242 + }
  243 +
  244 + public Integer getStationRouteId1() {
  245 + return stationRouteId1;
  246 + }
  247 +
  248 + public void setStationRouteId1(Integer stationRouteId1) {
  249 + this.stationRouteId1 = stationRouteId1;
  250 + }
  251 +
  252 + public Integer getStationRouteId2() {
  253 + return stationRouteId2;
  254 + }
  255 +
  256 + public void setStationRouteId2(Integer stationRouteId2) {
  257 + this.stationRouteId2 = stationRouteId2;
  258 + }
  259 + }
  260 +
  261 + public static class StatInfo { // 统计数据对象
  262 + /** 统计项目 */
  263 + private String statItem;
  264 + /** 统计值 */
  265 + private Double statValue;
  266 +
  267 + public String getStatItem() {
  268 + return statItem;
  269 + }
  270 +
  271 + public void setStatItem(String statItem) {
  272 + this.statItem = statItem;
  273 + }
  274 +
  275 + public Double getStatValue() {
  276 + return statValue;
  277 + }
  278 +
  279 + public void setStatValue(Double statValue) {
  280 + this.statValue = statValue;
  281 + }
  282 + }
  283 +
  284 + public static class DTInfos { // 所有数据信息
  285 + /** 路牌班次数据列表 */
  286 + private List<LpObj> lpObjList;
  287 + /** 统计数据列表 */
  288 + private List<StatInfo> statInfoList;
  289 +
  290 + public List<LpObj> getLpObjList() {
  291 + return lpObjList;
  292 + }
  293 +
  294 + public void setLpObjList(List<LpObj> lpObjList) {
  295 + this.lpObjList = lpObjList;
  296 + }
  297 +
  298 + public List<StatInfo> getStatInfoList() {
  299 + return statInfoList;
  300 + }
  301 +
  302 + public void setStatInfoList(List<StatInfo> statInfoList) {
  303 + this.statInfoList = statInfoList;
  304 + }
  305 + }
  306 +
  307 + //---------------------- 生成时刻表用对象(以上) ---------------------//
  308 +
  309 + /**
  310 + * 导出动态时刻表数据。
  311 + * @param dtInfos
  312 + * @return
  313 + * @throws ScheduleException
  314 + */
  315 + public DataToolsFile exportDynamicTTinfo(DTInfos dtInfos) throws ScheduleException;
  316 +}
... ...
src/main/java/com/bsth/service/schedule/impl/PeopleCarPlanServiceImpl.java
... ... @@ -1746,7 +1746,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
1746 1746 tempMap.put("line", xlName);
1747 1747 tempMap.put("jhbc", jhbc);
1748 1748 tempMap.put("sjbc", sjbc);
1749   - tempMap.put("zdl", nf.format((float) sjbc / jhbc *100) + "%");
  1749 + tempMap.put("zdl", (jhbc<1?"0":nf.format((float) sjbc / jhbc *100)) + "%");
  1750 +
1750 1751 resList.add(tempMap);
1751 1752 }
1752 1753  
... ... @@ -1760,7 +1761,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
1760 1761 }
1761 1762 tempMap.put("jhbc", jhbc);
1762 1763 tempMap.put("sjbc", sjbc);
1763   - tempMap.put("zdl", nf.format((float) sjbc / jhbc * 100) + "%");
  1764 + tempMap.put("zdl", (jhbc<1?"0":nf.format((float) sjbc / jhbc * 100)) + "%");
1764 1765 for(Map<String, Object> m : mapList){
1765 1766 m.put("no", ++i);
1766 1767 m.put("company", companyName);
... ...
src/main/java/com/bsth/util/ClosestPoint.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.HashMap;
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +import com.bsth.util.TransGPS.Location;
  8 +
  9 +public class ClosestPoint {
  10 +
  11 + public static Location getVerticalPoint(Location loc1, Location loc2, Location loc3) {
  12 + // 第一步:求得直线方程相关参数y=kx+b | kx-y+b=0
  13 + double k = (loc1.getLat() - loc2.getLat()) * 1.0 / (loc1.getLng() - loc2.getLng());// 坐标直线斜率k
  14 + double b = loc1.getLat() - k * loc1.getLng();// 坐标直线b
  15 + // 第一种: 设直线方程为ax+by+c=0,点坐标为(m,n)
  16 + // 则垂足为((b*b*m-a*b*n-a*c)/(a*a+b*b),(a*a*n-a*b*m-b*c)/(a*a+b*b))
  17 + Location loc4 = TransGPS.LocationMake(((-1) * (-1) * loc3.getLng() - k * (-1) * loc3.getLat() - k * b) / (k * k + (-1) * (-1)),
  18 + (k * k * loc3.getLat() - k * (-1) * loc3.getLng() - (-1) * b) / (k * k + (-1) * (-1)));
  19 + return loc4;
  20 + }
  21 +
  22 + // 获取两点间距离
  23 + static double GetPointDistance(Location p1, Location p2) {
  24 + return Math.sqrt((p1.getLng() - p2.getLng()) * (p1.getLng() - p2.getLng()) + (p1.getLat() - p2.getLat()) * (p1.getLat() - p2.getLat()));
  25 + }
  26 +
  27 + // 求点到线段距离的最近点
  28 + static Map<Double, List<Location>> GetNearestDistance(Location PA, Location PB, Location P3) {
  29 + Map<Double, List<Location>> point = new HashMap<>();
  30 + List<Location> locations = new ArrayList<>();
  31 + locations.add(PA);
  32 + locations.add(PB);
  33 + // 点在线段上
  34 + double a, b, c;
  35 + a = GetPointDistance(PB, P3);
  36 + if (a <= 0.000000001) {
  37 + locations.add(P3);
  38 + point.put(a, locations);
  39 + return point;
  40 + }
  41 + b = GetPointDistance(PA, P3);
  42 + if (b <= 0.000000001) {
  43 + locations.add(P3);
  44 + point.put(b, locations);
  45 + return point;
  46 + }
  47 + c = GetPointDistance(PA, PB);
  48 + if (c <= 0.000000001) {
  49 + locations.add(PA);
  50 + point.put(b, locations);// 如果PA和PB坐标相同,则退出函数,并返回距离
  51 + return point;
  52 + }
  53 + // 点和线段组成钝角三角形
  54 + if (a * a >= b * b + c * c) {
  55 + locations.add(PA);
  56 + point.put(b, locations);
  57 + return point;// 如果是钝角返回b
  58 + }
  59 + if (b * b >= a * a + c * c) {
  60 + locations.add(PB);
  61 + point.put(a, locations);// 如果是钝角返回a
  62 + return point;
  63 + }
  64 +
  65 + // 点和线段组成锐角三角形
  66 + double l = (a + b + c) / 2; // 周长的一半
  67 + double s = Math.sqrt(l * (l - a) * (l - b) * (l - c)); // 海伦公式求面积,也可以用矢量求
  68 + Location location = getVerticalPoint(PA, PB, P3);
  69 + locations.add(location);
  70 + point.put(2 * s / c, locations);
  71 + return point;
  72 + }
  73 +}
... ...
src/main/java/com/bsth/util/HttpClientUtils.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import org.apache.http.HttpEntity;
  4 +import org.apache.http.client.config.RequestConfig;
  5 +import org.apache.http.client.methods.CloseableHttpResponse;
  6 +import org.apache.http.client.methods.HttpGet;
  7 +import org.apache.http.client.methods.HttpPost;
  8 +import org.apache.http.entity.StringEntity;
  9 +import org.apache.http.impl.client.CloseableHttpClient;
  10 +import org.apache.http.impl.client.HttpClients;
  11 +import org.slf4j.Logger;
  12 +import org.slf4j.LoggerFactory;
  13 +
  14 +import java.io.BufferedReader;
  15 +import java.io.IOException;
  16 +import java.io.InputStreamReader;
  17 +
  18 +/**
  19 + * Created by panzhao on 2017/8/2.
  20 + */
  21 +public class HttpClientUtils {
  22 +
  23 + static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);
  24 + public static StringBuilder get(String url) throws Exception {
  25 +
  26 + CloseableHttpClient httpClient = null;
  27 + CloseableHttpResponse response = null;
  28 + StringBuilder stringBuffer = null;
  29 + try {
  30 + httpClient = HttpClients.createDefault();
  31 + HttpGet get = new HttpGet(url);
  32 + //超时时间
  33 + RequestConfig requestConfig = RequestConfig.custom()
  34 + .setConnectTimeout(10500).setConnectionRequestTimeout(7000)
  35 + .setSocketTimeout(10500).build();
  36 + get.setConfig(requestConfig);
  37 + get.addHeader("Content-Encoding", "gzip");
  38 + response = httpClient.execute(get);
  39 + stringBuffer = getResult(response.getEntity());
  40 + } catch (Exception e) {
  41 + logger.error("", e);
  42 + } finally {
  43 + if (null != httpClient)
  44 + httpClient.close();
  45 + if (null != response)
  46 + response.close();
  47 + }
  48 + return stringBuffer;
  49 + }
  50 +
  51 + /**
  52 + * raw post data
  53 + * @param url
  54 + * @param data
  55 + * @return
  56 + */
  57 + public static StringBuilder post(String url, String data) throws Exception {
  58 + CloseableHttpClient httpClient = null;
  59 + CloseableHttpResponse response = null;
  60 + StringBuilder stringBuffer = null;
  61 + try {
  62 + httpClient = HttpClients.createDefault();
  63 + HttpPost post = new HttpPost(url);
  64 +
  65 + post.setHeader("Accept", "application/json");
  66 + post.setHeader("Content-Type", "application/json");
  67 + //超时时间
  68 + RequestConfig requestConfig = RequestConfig.custom()
  69 + .setConnectTimeout(2500).setConnectionRequestTimeout(2000)
  70 + .setSocketTimeout(3500).build();
  71 + post.setConfig(requestConfig);
  72 + post.setEntity((new StringEntity(data, "UTF-8")));
  73 +
  74 + response = httpClient.execute(post);
  75 + stringBuffer = getResult(response.getEntity());
  76 + } catch (Exception e) {
  77 + logger.error("", e);
  78 + } finally {
  79 + if (null != httpClient)
  80 + httpClient.close();
  81 + if (null != response)
  82 + response.close();
  83 + }
  84 + return stringBuffer;
  85 + }
  86 +
  87 + private static StringBuilder getResult(HttpEntity entity) throws IOException {
  88 + StringBuilder stringBuffer = null;
  89 + if (null != entity) {
  90 + BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));
  91 + stringBuffer = new StringBuilder();
  92 + String str = "";
  93 + while ((str = br.readLine()) != null)
  94 + stringBuffer.append(str);
  95 + }
  96 + return stringBuffer;
  97 + }
  98 +}
... ...
src/main/java/com/bsth/util/RoadCutDoubleName.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONArray;
  5 +import com.alibaba.fastjson.JSONObject;
  6 +import com.bsth.entity.LonLatName;
  7 +import com.bsth.util.TransGPS.Location;
  8 +import com.bsth.util.TransGPS;
  9 +
  10 +import java.net.URLEncoder;
  11 +import java.util.*;
  12 +
  13 +public class RoadCutDoubleName {
  14 +
  15 + // 存放获取交点的经纬度,路段名字
  16 + static ArrayList<LonLatName> al = new ArrayList<LonLatName>();
  17 +
  18 + public static Map<String, Object> start(String sectionStr) throws Exception {
  19 +
  20 + al.clear();
  21 + // 存放过滤后返还会来的list集合
  22 + ArrayList dl = new ArrayList();
  23 +
  24 + String fy = URLEncoder.encode("|", "utf-8");
  25 + String lL = baiduToGoogle(sectionStr);
  26 + String[] lonLat = lL.split(";");
  27 +
  28 + int number = 0;
  29 + if (lonLat.length % 20 == 0) {
  30 + number = lonLat.length / 20;
  31 + } else {
  32 + number = lonLat.length / 20 + 1;
  33 + }
  34 + int middle = 0;
  35 + int max = 20;
  36 + if (lonLat.length >= 20) {
  37 + for (int NOT = 1; NOT <= number; NOT++) {
  38 + String Ol = "";
  39 + if (NOT < number) {
  40 + for (int min = middle; min < max; min++) {
  41 + if (min < max - 1) {
  42 + Ol += lonLat[min] + fy;
  43 + } else {
  44 + Ol += lonLat[min];
  45 + }
  46 + }
  47 + dl = getData(Ol,al);
  48 + middle = max;
  49 + max += 20;
  50 + } else {
  51 + for (int min = middle; min < lonLat.length; min++) {
  52 + if (min < lonLat.length - 1) {
  53 + Ol += lonLat[min] + fy;
  54 + } else {
  55 + Ol += lonLat[min];
  56 + }
  57 + }
  58 + dl = getData(Ol,al);
  59 + }
  60 + }
  61 + } else {
  62 + String Ol = "";
  63 + for (int min = middle; min < lonLat.length; min++) {
  64 + if (min < lonLat.length - 1) {
  65 + Ol += lonLat[min] + fy;
  66 + } else {
  67 + Ol += lonLat[min];
  68 + }
  69 + }
  70 + dl = getData(Ol,al);
  71 + }
  72 + // 将原有的经纬度数组转换为list集合
  73 + ArrayList<Location> el = new ArrayList<>();
  74 + for (int j = 0; j < lonLat.length; j++) {
  75 + String lon[] = lonLat[j].split(",");
  76 + Location point = new Location();
  77 + point.setLng(Double.valueOf(lon[0]));
  78 + point.setLat(Double.valueOf(lon[1]));
  79 + el.add(point);
  80 + }
  81 + ArrayList<Location> gl = new ArrayList<>();
  82 + for (int k = 0; k < dl.size(); k += 4) {
  83 + Location point = new Location();
  84 + String object = (String) dl.get(k);
  85 + String[] split = object.split(",");
  86 + point.setLng(Double.valueOf(split[0]));
  87 + point.setLat(Double.valueOf(split[1]));
  88 + gl.add(point);
  89 + }
  90 + // 将做过处理的百度坐标与过滤后的交点坐标存入,传给垂足获取方法
  91 + ArrayList fl = new ArrayList();
  92 + // 路的坐标点
  93 + fl.add(0, el);
  94 + // 路的交点
  95 + fl.add(1, gl);
  96 + List returnData = returnData(fl);
  97 + ArrayList<Location> pointList = new ArrayList<>();
  98 + for (int x = 0; x < returnData.size(); x++) {
  99 + List<Location> aList = new ArrayList<>();
  100 + aList = (List<Location>) returnData.get(x);
  101 + for (int z = 0; z < aList.size(); z++) {
  102 + Location point = new Location();
  103 + Location location = aList.get(z);
  104 + point.setLng(location.getLng());
  105 + point.setLat(location.getLat());
  106 + pointList.add(point);
  107 + }
  108 + }
  109 + /*
  110 + * 垂足返还的数据中每三条为一个交点,第一经纬度为前,第二为后,第三为原交点的垂足
  111 + * 下面循环会将返还的数据按前经纬度与返还数据的第一经纬度相匹配 将返还数据的第三个经纬度按顺序插入进去
  112 + */
  113 + // lonLat:转换为高德的坐标点数组
  114 + for (int t = 0; t < pointList.size(); t += 3) {
  115 + Location pl = (Location) pointList.get(t);
  116 + Location newPl = (Location) pointList.get(t + 1);
  117 + // 判断切点是否添加成功
  118 + boolean type = false;
  119 + // pointList:包含前后垂足的集合,每三个一个轮回
  120 + for (int o = 0; o < el.size() - 1; o++) {
  121 + Location location1 = el.get(o);
  122 + Location location2 = el.get(o + 1);
  123 + if (location1.getLng() == pl.getLng() && location1.getLat() == pl.getLat()
  124 + && location2.getLng() == newPl.getLng() && location2.getLat() == newPl.getLat()) {
  125 + if (o < el.size() - 1) {
  126 + // el:存放原始坐标Location对象的集合
  127 + el.add(o + 1, (Location) pointList.get(t + 2));
  128 + type = true;
  129 + break;
  130 + } else {
  131 + el.add(o, (Location) pointList.get(t + 2));
  132 + type = true;
  133 + break;
  134 + }
  135 + }
  136 + }
  137 + // 防止在同一线段下的两个切点会只添加一个
  138 + if (!type) {
  139 + for (int o = 0; o < el.size(); o++) {
  140 + Location location = el.get(o);
  141 + if (location.getLng() == newPl.getLng() && location.getLat() == newPl.getLat()) {
  142 + el.add(o, (Location) pointList.get(t + 2));
  143 + type = true;
  144 + break;
  145 + }
  146 + }
  147 + }
  148 + }
  149 + // 通过返还的垂足数据,将原有的中间点给替换掉
  150 + int w = 0;
  151 + for (int q = 2; q < pointList.size(); q += 3) {
  152 + Location pL = (Location) pointList.get(q);
  153 + dl.set(w, pL.getLng() + "," + pL.getLat());
  154 + w += 4;
  155 + }
  156 + // 对替换后的location进行路名拼接,十个点则应拼接出九个路段路名
  157 + // 若location获取的路名不符合规则,则返还“(-)”
  158 + int maxOne = 2;
  159 + int maxTwo = 6;
  160 + int minOne = 1;
  161 + int minTwo = 5;
  162 + String theMainRoad = "";
  163 + String theFirstRoad = "";
  164 + String theSecondRoad = "";
  165 + List<String> roadName = new ArrayList<>();
  166 + for (int d = maxTwo; d < dl.size();) {
  167 + boolean buff = false;
  168 + // 若两段路名中含有相同的路名,则此路名作为主路名
  169 + for (int h = minOne; h <= maxOne; h++) {
  170 + for (int f = minTwo; f <= maxTwo; f++) {
  171 + if (dl.get(h).equals(dl.get(f))) {
  172 + theMainRoad = dl.get(h).toString();
  173 + buff = true;
  174 + break;
  175 + } else {
  176 + theMainRoad = "";
  177 + }
  178 + }
  179 + if (buff) {
  180 + break;
  181 + }
  182 + }
  183 + // 获取主路名后,将主路名不为空的进行拼接
  184 + // 规则为:两段路名的firstName和secondName不与主路名相同
  185 + // 存入roadName列表且按数序包含无法进行拼接的路名返回值为“(-)”
  186 + for (int h = minOne; h <= maxOne; h++) {
  187 + for (int f = minTwo; f <= maxTwo; f++) {
  188 + if (!theMainRoad.equals("")) {
  189 + if (!dl.get(h).equals(theMainRoad)) {
  190 + theFirstRoad = dl.get(h).toString();
  191 + if (!dl.get(f).equals(theMainRoad)) {
  192 + theSecondRoad = dl.get(f).toString();
  193 + }
  194 + }
  195 + } else {
  196 + theFirstRoad = "";
  197 + theSecondRoad = "";
  198 + }
  199 + }
  200 + }
  201 + minOne += 4;
  202 + minTwo += 4;
  203 + maxOne += 4;
  204 + maxTwo += 4;
  205 + d = maxTwo;
  206 + roadName.add(theMainRoad + "(" + theFirstRoad + "-" + theSecondRoad + ")");
  207 + }
  208 + // 将所有经纬度列表进行重复过滤
  209 + for (int i = 0; i < el.size() - 1; i++) {
  210 + Location location = el.get(i);
  211 + for (int j = i + 1; j < el.size(); j++) {
  212 + Location location2 = el.get(j);
  213 + if (location.getLng() == location2.getLng() && location.getLat() == location2.getLat()) {
  214 + el.remove(j);
  215 + break;
  216 + }
  217 + }
  218 + }
  219 + // 用来区分此线路的开始是否等于location的第一个点
  220 + boolean buff = false;
  221 + //将路名roadName与路段roadNumber添加进theFrontDesk返还给前台
  222 + Map<String, Object> theFrontDesk = new HashMap<>();
  223 + // 若坐标组的第一个坐标与交点的第一个不相同,就说明实际规划出的线路条数+1
  224 + // 此方法的作用就是用来避免线路名称与线路不对称
  225 + if(dl.size() != 0) {
  226 + String firstLocation = (String) dl.get(0);
  227 + String[] firstLocationSplit = firstLocation.split(",");
  228 + Location firstOfAll = el.get(0);
  229 + if (firstOfAll.getLng() != Double.valueOf(firstLocationSplit[0])
  230 + && firstOfAll.getLat() != Double.valueOf(firstLocationSplit[1])) {
  231 + roadName.add(0, "(-)");
  232 + buff = true;
  233 + }
  234 + String lastLocation = (String) dl.get(dl.size() - 4);
  235 + String[] lastLocationSplit = lastLocation.split(",");
  236 + Location lastOfAll = el.get(el.size() - 1);
  237 + if (lastOfAll.getLng() != Double.valueOf(lastLocationSplit[0])
  238 + && lastOfAll.getLat() != Double.valueOf(lastLocationSplit[1])) {
  239 + roadName.add(roadName.size(), "(-)");
  240 + }
  241 + //切分路段,有两种情况,路段的第一个经纬度既是切点,则从第二个点开始计算
  242 + //路段的前几个点是多余的点 则将其保留,并且上面的方法就是用来防止第一个路段路名错误
  243 + List roadNumber = new ArrayList();
  244 + if (buff) {
  245 + int logo = 0;
  246 + for (int j = 0; j < dl.size(); j += 4) {
  247 + List wayNumber = new ArrayList();
  248 + String object = (String) dl.get(j);
  249 + String[] split = object.split(",");
  250 + for (int i = logo; i < el.size(); i++) {
  251 + Location location = el.get(i);
  252 + wayNumber.add(el.get(i));
  253 + if (location.getLng() == Double.valueOf(split[0])
  254 + && location.getLat() == Double.valueOf(split[1])) {
  255 + logo = i;
  256 + roadNumber.add(wayNumber);
  257 + break;
  258 + }
  259 + if(i == el.size()-1){
  260 + logo = i;
  261 + roadNumber.add(wayNumber);
  262 + }
  263 + }
  264 + }
  265 + }else{
  266 + int logo = 0;
  267 + for (int j = 4; j < dl.size(); j += 4) {
  268 + List wayNumber = new ArrayList();
  269 + String object = (String) dl.get(j);
  270 + String[] split = object.split(",");
  271 + for (int i = logo; i < el.size(); i++) {
  272 + Location location = el.get(i);
  273 + wayNumber.add(el.get(i));
  274 + if (location.getLng() == Double.valueOf(split[0])
  275 + && location.getLat() == Double.valueOf(split[1])) {
  276 + logo = i;
  277 + roadNumber.add(wayNumber);
  278 + break;
  279 + }
  280 + if(i == el.size()-1){
  281 + logo = i;
  282 + roadNumber.add(wayNumber);
  283 + }
  284 + }
  285 + }
  286 + }
  287 + List bSections = googleToBaidu(roadNumber);
  288 + //将路名roadName与路段roadNumber添加进theFrontDesk返还给前台
  289 +// List theFrontDesk = new ArrayList();
  290 + theFrontDesk.put("roadName",roadName);
  291 + theFrontDesk.put("bSections",bSections);
  292 + for(int i =0;i<bSections.size();i++){
  293 + List<Location> rn = new ArrayList<>();
  294 + rn = (List<Location>) bSections.get(i);
  295 + System.out.println("第"+(i+1)+"条路");
  296 + System.out.println(roadName.get(i));
  297 + for(int j=0;j<rn.size();j++){
  298 + Location object = (Location) rn.get(j);
  299 + System.out.println(object.getLng()+" "+object.getLat()+";");
  300 + }
  301 + }
  302 + }
  303 +
  304 + return theFrontDesk;
  305 + }
  306 +
  307 + public static ArrayList<LonLatName> getData(String Ol,ArrayList<LonLatName> al) throws Exception {
  308 + // 将去重后的list列表添加进来
  309 + ArrayList cl = new ArrayList();
  310 + StringBuilder sb = HttpClientUtils.get("http://restapi.amap.com/v3/geocode/regeo?output=json&location=" + Ol
  311 + + "&key=ae7b43460cab274a8702b55640f9a5a7&radius=0&extensions=all&batch=true&roadlevel=1");
  312 + JSONObject jsonarr = JSON.parseObject(sb.toString());
  313 + JSONArray regeocodes = jsonarr.getJSONArray("regeocodes");
  314 +
  315 + for (int a = 0; a < regeocodes.size(); a++) {
  316 + LonLatName lln = new LonLatName();
  317 + JSONObject json = (JSONObject) regeocodes.get(a);
  318 + JSONArray roadinters = json.getJSONArray("roadinters");
  319 + JSONArray roads = json.getJSONArray("roads");
  320 + JSONObject jsonObject = roadinters.getJSONObject(0);
  321 + JSONObject roadsObject = roads.getJSONObject(0);
  322 + lln.setFirst_name(jsonObject.getString("first_name"));
  323 + lln.setSecond_name(jsonObject.getString("second_name"));
  324 + lln.setLocation(jsonObject.getString("location"));
  325 + lln.setWay_name(roadsObject.getString("name"));
  326 + al.add(lln);
  327 + }
  328 + int a = 0;
  329 + for (int b = 1; b < al.size(); b++) {
  330 + if (al.get(b).getWay_name().equals(al.get(b).getFirst_name())
  331 + || al.get(b).getWay_name().equals(al.get(b).getSecond_name())) {
  332 + if (b == 1) {
  333 + cl.add(al.get(a).getLocation());
  334 + cl.add(al.get(a).getFirst_name());
  335 + cl.add(al.get(a).getSecond_name());
  336 + cl.add(al.get(a).getWay_name());
  337 + }
  338 + if (!al.get(a).getLocation().equals(al.get(b).getLocation())) {
  339 +
  340 + cl.add(al.get(b).getLocation());
  341 + cl.add(al.get(b).getFirst_name());
  342 + cl.add(al.get(b).getSecond_name());
  343 + cl.add(al.get(b).getWay_name());
  344 + a = b;
  345 + }
  346 + }
  347 + }
  348 + return cl;
  349 + }
  350 +
  351 + // 处理所有的切点(用每个切点去匹配到整条路段上最近的点)
  352 + public static List returnData(ArrayList twoList) {
  353 +// List<Location> aList = new ArrayList<>();
  354 +// List<Location> wip = new ArrayList<>();
  355 + // 路的坐标点
  356 + List<Location> aList = (List<Location>) twoList.get(0);
  357 + // 路的交点
  358 + List<Location> wip = (List<Location>) twoList.get(1);
  359 + List<List<Location>> list = new ArrayList<>();
  360 + for (int j = 0; j < wip.size(); j++) {
  361 + Map<Double, List<Location>> points = new HashMap<>();
  362 + for (int i = 1; i < aList.size(); i++) {
  363 + // 获取最近点为切点
  364 + points.putAll(ClosestPoint.GetNearestDistance(aList.get(i - 1), aList.get(i), wip.get(j)));
  365 + }
  366 + // points 为返回的所有切点的集合
  367 + Object[] obj = points.keySet().toArray();
  368 + Arrays.sort(obj);
  369 + list.add(j,points.get(obj[0]));
  370 + }
  371 + return list;
  372 + }
  373 +
  374 + // 百度坐标解密位高德
  375 + public static String baiduToGoogle(String sectionStr) {
  376 + String gdLL="";
  377 +// String lL = "121.531301,31.211823;121.532438,31.213784;121.532438,31.213784;121.535025,31.213764;121.535095,31.213765;121.535702,31.213757;121.536388,31.21375;121.537383,31.213699;121.53802,31.213711;121.538408,31.213709;121.538478,31.21371;121.538955,31.213699;121.540289,31.213714;121.540826,31.213724;121.541543,31.213718;121.542867,31.213552;121.542976,31.213534;121.543245,31.213489;121.544787,31.213256;121.546102,31.213059;121.546221,31.213041;121.546898,31.212892;121.547445,31.212691;121.547724,31.212566;121.54855,31.212099;121.549466,31.211432;121.550113,31.210802;121.550402,31.210576;121.551437,31.20911;121.551486,31.209031;121.551795,31.208585;121.552282,31.207861;121.552641,31.207316;121.5528,31.207088;121.552959,31.20685;121.553009,31.20678;121.553357,31.206235;121.553626,31.205898;121.553696,31.205939;121.553696,31.205936;121.554105,31.206171;121.555941,31.207121;121.555941,31.207121;121.556021,31.207202;121.556719,31.207589;121.557458,31.208006;121.557538,31.208116;121.557538,31.208116;121.558047,31.208401;121.559076,31.208909;121.559625,31.209182;121.559865,31.209304;121.560744,31.209599;121.560904,31.20966;121.562362,31.209967;121.563621,31.210132;121.563951,31.210132;121.56675,31.210135;121.569371,31.210191;121.570593,31.210377;121.573087,31.211114;121.573437,31.211241;121.57461,31.211763;121.577197,31.21297;121.577458,31.213077;121.577458,31.213077;121.57805,31.213351;121.57805,31.213351;121.58085,31.214638;121.58097,31.214686;121.58097,31.214686;121.583581,31.21581;121.584605,31.216194;121.584967,31.216339;121.585961,31.216703;121.586393,31.216806;121.587398,31.217059;121.588342,31.217293;121.588744,31.217386;121.58998,31.217694;121.590814,31.217889;121.590915,31.217918;121.591548,31.218056;121.591648,31.218084;121.593065,31.218388;121.593517,31.21854;121.59393,31.218762;121.594704,31.219287;121.596986,31.220814;121.59766,31.221212;121.598001,31.221375;121.600474,31.222169;121.600544,31.222198;121.600574,31.222207;121.600685,31.222245;121.603348,31.223057;121.605639,31.223607;121.605638,31.223607;121.605648,31.223537;121.605698,31.222176;121.605787,31.221004;121.606055,31.216939;121.606324,31.213734;121.606373,31.212813;121.606522,31.21086;121.606611,31.210048;121.606621,31.209968;121.606772,31.209986;121.606772,31.209985;121.608479,31.210248;121.60864,31.210265;121.60864,31.210265;121.60871,31.210014";
  378 + System.out.println(sectionStr);
  379 + String lonLat[] = sectionStr.split(";");
  380 + for (int a = 0; a < lonLat.length; a++) {
  381 + String[] split = lonLat[a].split(",");
  382 + Location locationMake = TransGPS.LocationMake(Double.valueOf(split[0]), Double.valueOf(split[1]));
  383 + Location gd_decrypt = TransGPS.bd_decrypt(locationMake);
  384 + if (a < lonLat.length - 1) {
  385 + gdLL += gd_decrypt.getLng() + "," + gd_decrypt.getLat() + ";";
  386 + } else {
  387 + gdLL += gd_decrypt.getLng() + "," + gd_decrypt.getLat();
  388 + }
  389 +
  390 + }
  391 +
  392 + return gdLL;
  393 + }
  394 +
  395 + // 高德坐标加密位百度
  396 + public static List googleToBaidu(List list) {
  397 + List roadNumber = new ArrayList();
  398 + for(int i =0;i<list.size();i++){
  399 + String lL = "";
  400 + List wayNumber = new ArrayList();
  401 + List<Location> rn = new ArrayList<>();
  402 + rn = (List<Location>) list.get(i);
  403 + for(int j=0;j<rn.size();j++){
  404 + Location object = (Location) rn.get(j);
  405 + if(j<rn.size()-1){
  406 + lL += object.getLng()+","+object.getLat()+";";
  407 + }else{
  408 + lL += object.getLng()+","+object.getLat();
  409 + }
  410 + }
  411 + String lonLat[] = lL.split(";");
  412 + for (int a = 0; a < lonLat.length; a++) {
  413 + String[] split = lonLat[a].split(",");
  414 + Location locationMake = TransGPS.LocationMake(Double.valueOf(split[0]), Double.valueOf(split[1]));
  415 + Location bd_encrypt = TransGPS.bd_encrypt(locationMake);
  416 + wayNumber.add(bd_encrypt);
  417 + }
  418 + roadNumber.add(wayNumber);
  419 + }
  420 +
  421 + return roadNumber;
  422 + }
  423 +}
0 424 \ No newline at end of file
... ...