Commit da8078881e70c72eb3fbf544432616b3dd80d6cb

Authored by 潘钊
2 parents a2833f01 8c0029d6

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

src/main/java/com/bsth/controller/forms/ExportController.java
@@ -82,7 +82,7 @@ public class ExportController { @@ -82,7 +82,7 @@ public class ExportController {
82 } 82 }
83 83
84 // 班次车辆人员日统计 84 // 班次车辆人员日统计
85 - @RequestMapping(value = "/shifdayExport", method = RequestMethod.POST) 85 + @RequestMapping(value = "/shifdayExport", method = RequestMethod.GET)
86 public List<Map<String, Object>> shifdayExport(@RequestParam Map<String, Object> map) { 86 public List<Map<String, Object>> shifdayExport(@RequestParam Map<String, Object> map) {
87 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 87 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
88 List<Iterator<?>> listI = new ArrayList<Iterator<?>>(); 88 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
@@ -122,7 +122,7 @@ public class ExportController { @@ -122,7 +122,7 @@ public class ExportController {
122 } 122 }
123 123
124 // 班次车辆人员月统计 124 // 班次车辆人员月统计
125 - @RequestMapping(value = "/shiftuehiclemanthExport", method = RequestMethod.POST) 125 + @RequestMapping(value = "/shiftuehiclemanthExport", method = RequestMethod.GET)
126 public List<Map<String, Object>> shiftuehiclemanthExport(@RequestParam Map<String, Object> map) { 126 public List<Map<String, Object>> shiftuehiclemanthExport(@RequestParam Map<String, Object> map) {
127 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 127 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
128 List<Iterator<?>> listI = new ArrayList<Iterator<?>>(); 128 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
@@ -147,12 +147,18 @@ public class ExportController { @@ -147,12 +147,18 @@ public class ExportController {
147 } 147 }
148 148
149 try { 149 try {
  150 + String mouldurl = null;
  151 + if(map.get("empnames").equals("驾驶员")){
  152 + mouldurl="mould/shiftuehiclemanth.xls";
  153 + }else if(map.get("empnames").equals("售票员")){
  154 + mouldurl="mould/shiftuehiclemanthspy.xls";
  155 + }else if(map.get("empnames").equals("车辆自编号")){
  156 + mouldurl="mould/shiftuehiclemanthclzbh.xls";
  157 + }
150 listI.add(resList.iterator()); 158 listI.add(resList.iterator());
151 -  
152 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/"; 159 String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
153 - ee.excelReplace(listI, new Object[] { map }, path + "mould/shiftuehiclemanth.xls", path  
154 - + "export/班次车辆人员月报表" + sdfSimple.format(sdfMonth.parse(map.get("startDate").toString())) + ".xls");  
155 - 160 + ee.excelReplace(listI, new Object[] { map }, path +mouldurl,
  161 + path + "export/班次车辆人员月报表" + sdfSimple.format(sdfMonth.parse(map.get("startDate").toString())) + ".xls");
156 } catch (Exception e) { 162 } catch (Exception e) {
157 e.printStackTrace(); 163 e.printStackTrace();
158 } 164 }
src/main/java/com/bsth/controller/forms/MCY_FormsController.java
@@ -52,14 +52,14 @@ public class MCY_FormsController { @@ -52,14 +52,14 @@ public class MCY_FormsController {
52 } 52 }
53 53
54 // 班次车辆人员月报表 54 // 班次车辆人员月报表
55 - @RequestMapping(value = "/shiftuehiclemanth", method = RequestMethod.POST) 55 + @RequestMapping(value = "/shiftuehiclemanth", method = RequestMethod.GET)
56 public List<Shiftuehiclemanth> shiftuehiclemanth(@RequestParam Map<String, Object> map) { 56 public List<Shiftuehiclemanth> shiftuehiclemanth(@RequestParam Map<String, Object> map) {
57 57
58 return formsService.shiftuehiclemanth(map); 58 return formsService.shiftuehiclemanth(map);
59 } 59 }
60 60
61 // 班次车辆人员日统计 61 // 班次车辆人员日统计
62 - @RequestMapping(value = "/shifday", method = RequestMethod.POST) 62 + @RequestMapping(value = "/shifday", method = RequestMethod.GET)
63 public List<Shifday> shifday(@RequestParam Map<String, Object> map) { 63 public List<Shifday> shifday(@RequestParam Map<String, Object> map) {
64 64
65 return formsService.shifday(map); 65 return formsService.shifday(map);
src/main/java/com/bsth/entity/schedule/rule/ScheduleRule1Flat.java
@@ -57,6 +57,7 @@ public class ScheduleRule1Flat extends BEntity { @@ -57,6 +57,7 @@ public class ScheduleRule1Flat extends BEntity {
57 private String lpNames; 57 private String lpNames;
58 /** 对应的路牌ids(用逗号隔开) */ 58 /** 对应的路牌ids(用逗号隔开) */
59 @NotNull 59 @NotNull
  60 + @Column(length = 1000)
60 private String lpIds; 61 private String lpIds;
61 /** 起始路牌(从0开始) */ 62 /** 起始路牌(从0开始) */
62 @NotNull 63 @NotNull
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
@@ -155,8 +155,13 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -155,8 +155,13 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
155 List<ScheduleRealInfo> scheduleByDateAndLineTj(String line,String date,String date2,String gsdm,String fgsdm); 155 List<ScheduleRealInfo> scheduleByDateAndLineTj(String line,String date,String date2,String gsdm,String fgsdm);
156 156
157 //按照时间段统计 157 //按照时间段统计
158 - @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') between ?2 and ?3 and s.bcType not in ('in','out') order by s.xlBm")  
159 - List<ScheduleRealInfo> scheduleByDateAndLineTj2(String line,String date,String date2); 158 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  159 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') between ?2 and ?3 and s.bcType not in ('in','out') order by s.xlBm")
  160 + List<ScheduleRealInfo> scheduleByDateAndLineTj2(String line,String date,String date2);
  161 + //月报表
  162 + @EntityGraph(value = "scheduleRealInfo_cTasks", type = EntityGraph.EntityGraphType.FETCH)
  163 + @Query(value="select DISTINCT s from ScheduleRealInfo s where s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') between ?2 and ?3 order by s.xlBm")
  164 + List<ScheduleRealInfo> scheduleByDateAndLineYbb(String line,String date,String date2);
160 165
161 @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh,min(s.fcsj) as fcsj ) from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.gsBm like %?3% and s.fgsBm like %?4% GROUP BY xlBm,clZbh,jGh,scheduleDate,jGh ORDER BY clZbh,fcsj") 166 @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh,min(s.fcsj) as fcsj ) from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 and s.gsBm like %?3% and s.fgsBm like %?4% GROUP BY xlBm,clZbh,jGh,scheduleDate,jGh ORDER BY clZbh,fcsj")
162 List<Map<String,Object>> yesterdayDataList(String line,String date,String gsbm,String fgsbm); 167 List<Map<String,Object>> yesterdayDataList(String line,String date,String gsbm,String fgsbm);
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
@@ -147,59 +147,94 @@ public class FormsServiceImpl implements FormsService { @@ -147,59 +147,94 @@ public class FormsServiceImpl implements FormsService {
147 147
148 @Override 148 @Override
149 public List<Shiftuehiclemanth> shiftuehiclemanth(Map<String, Object> map) { 149 public List<Shiftuehiclemanth> shiftuehiclemanth(Map<String, Object> map) {
150 - String sql = "select r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type " 150 + final String empnames=map.get("empnames").toString();
  151 + String gsdmManth="";
  152 + String fgsdmManth="";
  153 + if(map.containsKey("gsdmManth")){
  154 + gsdmManth=map.get("gsdmManth").toString();
  155 + }
  156 + if(map.containsKey("fgsdmManth")){
  157 + fgsdmManth=map.get("fgsdmManth").toString();
  158 + }
  159 + String sql = "select r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type,r.s_name,r.lp_name "
151 + " from bsth_c_s_sp_info_real r " 160 + " from bsth_c_s_sp_info_real r "
152 + " where 1=1 "; 161 + " where 1=1 ";
153 - if(map.get("startDate").toString()!=""){ 162 + if(map.get("startDate")!=null&&!map.get("startDate").equals("")){
154 sql+=" and to_days(r.schedule_date_str) BETWEEN to_days('" + map.get("startDate").toString() + "') "; 163 sql+=" and to_days(r.schedule_date_str) BETWEEN to_days('" + map.get("startDate").toString() + "') ";
155 } 164 }
156 165
157 - if(map.get("endDate").toString()!=""){ 166 + if(map.get("endDate")!=null&&!map.get("endDate").equals("")){
158 sql+=" and to_days('" + map.get("endDate").toString() + "') "; 167 sql+=" and to_days('" + map.get("endDate").toString() + "') ";
159 } 168 }
160 - if( map.get("line").toString()!=""){ 169 + if(map.get("line")!=null&&!map.get("line").equals("")){
161 sql+=" and r.xl_bm='"+ map.get("line").toString() + "' "; 170 sql+=" and r.xl_bm='"+ map.get("line").toString() + "' ";
162 } 171 }
163 sql+= " AND r.gs_bm is not null and r.bc_type not in('in','out')"; 172 sql+= " AND r.gs_bm is not null and r.bc_type not in('in','out')";
164 - if(map.get("gsdmManth").toString()!=""){ 173 + if(map.get("gsdmManth")!=null&&!map.get("gsdmManth").equals("")){
165 sql+=" and r.gs_bm='"+map.get("gsdmManth").toString()+"' "; 174 sql+=" and r.gs_bm='"+map.get("gsdmManth").toString()+"' ";
166 } 175 }
167 - if(map.get("fgsdmManth").toString()!=""){ 176 + if(map.get("fgsdmManth")!=null&&!map.get("fgsdmManth").equals("")){
168 sql+=" and r.fgs_bm='"+map.get("fgsdmManth").toString()+"' "; 177 sql+=" and r.fgs_bm='"+map.get("fgsdmManth").toString()+"' ";
169 } 178 }
  179 + if(empnames.equals("售票员")){
  180 + sql+="and r.s_name is not null AND r.s_name !=''";
  181 + }
170 sql += " GROUP BY r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type "; 182 sql += " GROUP BY r.j_name,r.cl_zbh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type ";
171 183
172 - startDate = map.get("startDate").toString();  
173 - endDate = map.get("endDate").toString(); 184 +
174 List<Shiftuehiclemanth> list = jdbcTemplate.query(sql, new RowMapper<Shiftuehiclemanth>() { 185 List<Shiftuehiclemanth> list = jdbcTemplate.query(sql, new RowMapper<Shiftuehiclemanth>() {
175 - 186 +
176 @Override 187 @Override
177 public Shiftuehiclemanth mapRow(ResultSet arg0, int arg1) throws SQLException { 188 public Shiftuehiclemanth mapRow(ResultSet arg0, int arg1) throws SQLException {
178 Shiftuehiclemanth shif = new Shiftuehiclemanth(); 189 Shiftuehiclemanth shif = new Shiftuehiclemanth();
179 - shif.setjName(arg0.getString("j_name")); 190 + if(empnames.equals("驾驶员")){
  191 + shif.setjName(arg0.getString("j_name"));
  192 + }else if(empnames.equals("售票员")){
  193 + shif.setjName(arg0.getString("s_name")==null ? "":arg0.getString("s_name"));
  194 + }else if(empnames.equals("车辆自编号")){
  195 + shif.setjName(arg0.getString("cl_zbh"));
  196 + }
  197 +
180 shif.setJgh(arg0.getString("j_gh")); 198 shif.setJgh(arg0.getString("j_gh"));
181 shif.setZbh(arg0.getString("cl_zbh")); 199 shif.setZbh(arg0.getString("cl_zbh"));
182 return shif; 200 return shif;
183 } 201 }
184 }); 202 });
185 203
  204 + List<ScheduleRealInfo> sList;
  205 + List<ScheduleRealInfo> lists=scheduleRealInfoRepository.scheduleByDateAndLineYbb(map.get("line").toString(), map.get("startDate").toString(), map.get("endDate").toString());
186 for(int i=0;i<list.size();i++){ 206 for(int i=0;i<list.size();i++){
187 - Shiftuehiclemanth s=list.get(i);  
188 - Map<String, Object> maps = new HashMap<>();  
189 -  
190 - maps = commonService.findKMBC1(s.getjName(),s.getZbh(), startDate,  
191 - endDate);  
192 -  
193 - s.setJhlc(maps.get("jhlc").toString());  
194 - s.setEmptMileage(maps.get("ksgl").toString());  
195 - s.setRemMileage(maps.get("remMileage").toString());  
196 - s.setAddMileage(maps.get("addMileage").toString());  
197 - s.setTotalm(maps.get("realMileage").toString());  
198 - s.setCjbc(maps.get("cjbc").toString());  
199 - s.setLjbc(maps.get("ljbc").toString());  
200 - s.setSjbc(maps.get("sjbc").toString());  
201 - 207 + sList =new ArrayList<ScheduleRealInfo>();
  208 + Shiftuehiclemanth d=list.get(i);
  209 + for (int j = 0; j < lists.size(); j++) {
  210 + ScheduleRealInfo s=lists.get(j);
  211 + if(d.getJgh().equals(s.getjGh()) && d.getZbh().equals(s.getClZbh())){
  212 + sList.add(s);
  213 + }
  214 + }
  215 +
  216 + double ksgl=culateMileageService.culateKsgl(sList);
  217 + double jccgl=culateMileageService.culateJccgl(sList);
  218 + double zksgl=Arith.add(ksgl, jccgl);
  219 + double ljgl=culateMileageService.culateLjgl(sList);
  220 + double sjgl=culateMileageService.culateSjgl(sList);
  221 + double zyygl=Arith.add(ljgl, sjgl);
  222 + double cjbc=culateMileageService.culateLbbc(sList);
  223 + double Ljbc=culateMileageService.culateLjbc(sList,"");
  224 + double cjgl=culateMileageService.culateLbgl(sList);
  225 + double zjgl=culateMileageService.culateLjgl(sList);
  226 + d.setEmptMileage(String.valueOf(zksgl));//空驶公里
  227 + d.setTotalm(String.valueOf(Arith.add(zksgl, zyygl)));//总公里
  228 + d.setSjbc(String.valueOf(culateMileageService.culateSjbc(sList, "")+culateMileageService.culateLjbc(sList, "")));
  229 + d.setJhlc(String.valueOf(zyygl));//运营里程
  230 + d.setCjbc(String.valueOf(cjbc));//抽检班次
  231 + d.setLjbc(String.valueOf(Ljbc));//增加班次
  232 + d.setRemMileage(String.valueOf(cjgl));//抽检里程
  233 + d.setAddMileage(String.valueOf(zjgl));//增加里程
  234 +
202 } 235 }
  236 +
  237 +
203 return list; 238 return list;
204 } 239 }
205 240
@@ -207,32 +242,30 @@ public class FormsServiceImpl implements FormsService { @@ -207,32 +242,30 @@ public class FormsServiceImpl implements FormsService {
207 @Override 242 @Override
208 public List<Shifday> shifday(Map<String, Object> map) { 243 public List<Shifday> shifday(Map<String, Object> map) {
209 244
210 - String sql ="select t.* from (select r.schedule_date,r.j_name,IFNULL(r.s_name,'')as s_name,"  
211 - + " r.cl_zbh,r.xl_bm, r.j_gh,r.gs_bm,r.fgs_bm FROM bsth_c_s_sp_info_real r where 1=1 "  
212 - + " and to_days(r.schedule_date)=to_days('"+ map.get("date").toString() + "') "  
213 - + " and r.xl_bm like '%"+map.get("line").toString()+"%' "  
214 - + " and r.gs_bm='"+map.get("gsdmShif").toString()+"' "  
215 - + " and r.fgs_bm='"+map.get("fgsdmShif").toString()+"' ) t"  
216 - + " GROUP BY t.schedule_date,t.j_name,t.s_name, t.cl_zbh,t.xl_bm,t.j_gh,t.gs_bm,t.fgs_bm ";  
217 - /*String sql = " select r.schedule_date,r.lp_name,r.xl_name,r.j_name,r.s_name, r.cl_zbh,r.xl_bm,"  
218 - + " r.cl_zbh,r.j_gh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name,r.bc_type "  
219 - + " FROM bsth_c_s_sp_info_real r "  
220 - + " where 1=1 ";  
221 - if(map.get("date").toString()!=""){  
222 - sql+=" and to_days(r.schedule_date)=to_days('"+ map.get("date").toString() + "') "; 245 + String line="";
  246 + String date="";
  247 + String gsdmShif="";
  248 + String fgsdmShif="";
  249 + if(map.get("line")!=null&&!map.get("line").equals("")){
  250 + line =map.get("line").toString();
223 } 251 }
224 - if( map.get("line").toString()!=""){  
225 - sql+=" and r.xl_bm=" + map.get("line").toString(); 252 + if(map.get("date")!=null&&!map.get("date").equals("")){
  253 + date =map.get("date").toString();
226 } 254 }
227 - sql+= " and r.bc_type not in('in','out')";  
228 - if(map.get("gsdmShif").toString()!=""){  
229 - sql+=" and r.gs_bm='"+map.get("gsdmShif").toString()+"'"; 255 + if(map.get("gsdmShif")!=null&&!map.get("gsdmShif").equals("")){
  256 + gsdmShif =map.get("gsdmShif").toString();
230 } 257 }
231 - if(map.get("fgsdmShif").toString()!=""){  
232 - sql+=" and r.fgs_bm='"+map.get("fgsdmShif").toString()+"'";  
233 - }  
234 - sql += " GROUP BY r.schedule_date,r.lp_name,r.xl_name,r.j_name,r.s_name, r.cl_zbh,r.xl_bm,r.cl_zbh,r.j_gh,r.j_gh,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name "  
235 - + " ORDER BY r.lp_name asc";*/ 258 + if(map.get("fgsdmShif")!=null&&!map.get("fgsdmShif").equals("")){
  259 + fgsdmShif =map.get("fgsdmShif").toString();
  260 + }
  261 + String sql ="select t.* from (select r.schedule_date,r.j_name,IFNULL(r.s_name,'')as s_name,"
  262 + + " r.cl_zbh,r.xl_bm, r.j_gh,r.gs_bm,r.fgs_bm,r.lp_name FROM bsth_c_s_sp_info_real r where 1=1 "
  263 + + " and to_days(r.schedule_date)=to_days('"+date + "') "
  264 + + " and r.xl_bm like '%"+line+"%' "
  265 + + " and r.gs_bm like '%"+gsdmShif+"%' "
  266 + + " and r.fgs_bm like '%"+fgsdmShif+"%' ) t"
  267 + + " GROUP BY t.schedule_date,t.j_name,t.s_name, t.cl_zbh,t.xl_bm,t.j_gh,t.gs_bm,t.fgs_bm ";
  268 +
236 269
237 List<Shifday> list = jdbcTemplate.query(sql, new RowMapper<Shifday>() { 270 List<Shifday> list = jdbcTemplate.query(sql, new RowMapper<Shifday>() {
238 271
@@ -244,31 +277,48 @@ public class FormsServiceImpl implements FormsService { @@ -244,31 +277,48 @@ public class FormsServiceImpl implements FormsService {
244 shifday.setsName(arg0.getString("s_name") == null ? "" : arg0.getString("s_name").toString()); 277 shifday.setsName(arg0.getString("s_name") == null ? "" : arg0.getString("s_name").toString());
245 shifday.setCarPlate(arg0.getString("cl_zbh").toString()); 278 shifday.setCarPlate(arg0.getString("cl_zbh").toString());
246 shifday.setJgh(arg0.getString("j_gh")); 279 shifday.setJgh(arg0.getString("j_gh"));
  280 + shifday.setLpName(arg0.getString("lp_name")== null ? "" : arg0.getString("lp_name").toString());
247 return shifday; 281 return shifday;
248 } 282 }
249 283
250 }); 284 });
251 - 285 + List<ScheduleRealInfo> sList;
  286 + List<ScheduleRealInfo> lists=scheduleRealInfoRepository.scheduleByDateAndLineTjrb(map.get("line").toString(), map.get("date").toString());
252 for(int i=0;i<list.size();i++){ 287 for(int i=0;i<list.size();i++){
253 - Shifday shi=list.get(i);  
254 - Map<String, Object> maps = new HashMap<>();  
255 - maps = commonService.findKMBC2(shi.getJgh(), shi.getCarPlate(),  
256 - shi.getRq());  
257 - shi.setJhlc(maps.get("jhlc").toString());// 计划里程  
258 - //shifday.setSjjhlc(map.get("remMileage").toString());//实际计划里程  
259 - shi.setYygl(maps.get("yygl").toString());// 营运里程  
260 - shi.setEmptMileage(maps.get("ksgl").toString());// 空驶里程  
261 - shi.setRemMileage(maps.get("remMileage").toString());// 抽减里程  
262 - shi.setAddMileage(maps.get("addMileage").toString());// 增加里程  
263 - shi.setTotalm(maps.get("realMileage").toString());// 总里程  
264 - shi.setJhbc(maps.get("jhbc").toString());// 计划班次  
265 - //shifday.setSjjhbc(map.get("sjjhbc").toString());//实际计划班次  
266 - shi.setCjbc(maps.get("cjbc").toString());// 抽减班次  
267 - shi.setLjbc(maps.get("ljbc").toString());// 增加班次  
268 - shi.setSjbc(maps.get("sjbc").toString());// 实际班次  
269 -  
270 - }  
271 - 288 + sList =new ArrayList<ScheduleRealInfo>();
  289 + Shifday d=list.get(i);
  290 + for (int j = 0; j < lists.size(); j++) {
  291 + ScheduleRealInfo s=lists.get(j);
  292 + if(d.getJgh().equals(s.getjGh()) && d.getCarPlate().equals(s.getClZbh())){
  293 + sList.add(s);
  294 + }
  295 + }
  296 +
  297 + double ksgl=culateMileageService.culateKsgl(sList);
  298 + double jccgl=culateMileageService.culateJccgl(sList);
  299 + double zksgl=Arith.add(ksgl, jccgl);
  300 + double ljgl=culateMileageService.culateLjgl(sList);
  301 + double sjgl=culateMileageService.culateSjgl(sList);
  302 + double zyygl=Arith.add(ljgl, sjgl);
  303 + double jhgl=culateMileageService.culateJhgl(sList);
  304 + double cjgl=culateMileageService.culateLbgl(sList);
  305 + double jhbc =culateMileageService.culateJhbc(sList,"");
  306 + double cjbc=culateMileageService.culateLbbc(sList);
  307 + double Ljbc=culateMileageService.culateLjbc(sList,"");
  308 + double zjgl=culateMileageService.culateLjgl(sList);
  309 + d.setEmptMileage(String.valueOf(zksgl));//空驶公里
  310 + d.setTotalm(String.valueOf(Arith.add(zksgl, zyygl)));//总公里
  311 + d.setSjbc(String.valueOf(culateMileageService.culateSjbc(sList, "")+culateMileageService.culateLjbc(sList, "")));
  312 + d.setJhlc(String.valueOf(jhgl));//计划里程
  313 + d.setYygl(String.valueOf(zyygl));//运营公里
  314 + d.setSjjhlc(String.valueOf(sjgl));//实际计划里程
  315 + d.setRemMileage(String.valueOf(cjgl));//抽减里程
  316 + d.setJhbc(String.valueOf(jhbc));//计划班次
  317 + d.setCjbc(String.valueOf(cjbc));//抽检班次
  318 + d.setLjbc(String.valueOf(Ljbc));//增加班次
  319 + d.setAddMileage(String.valueOf(zjgl));//增加公里
  320 + d.setSjjhbc(String.valueOf(culateMileageService.culateSjbc(sList, "")));//实际计划班次
  321 + }
272 return list; 322 return list;
273 } 323 }
274 324
src/main/java/com/bsth/service/oil/impl/DlbServiceImpl.java
@@ -106,8 +106,6 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS @@ -106,8 +106,6 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
106 List<Cdl> cdyList=cdlRepository.obtainCdl(); 106 List<Cdl> cdyList=cdlRepository.obtainCdl();
107 //从排班表中计算出行驶的总里程 107 //从排班表中计算出行驶的总里程
108 List<Map<String,Object>> listpb=scheduleRealInfoService.yesterdayDataList(line,rq,"","","",""); 108 List<Map<String,Object>> listpb=scheduleRealInfoService.yesterdayDataList(line,rq,"","","","");
109 - List<Ylb> addList=new ArrayList<Ylb>();  
110 - List<Ylb> updateList=new ArrayList<Ylb>();  
111 for(int x=0;x<listpb.size();x++){ 109 for(int x=0;x<listpb.size();x++){
112 String type="add"; 110 String type="add";
113 boolean sfdc=false; 111 boolean sfdc=false;
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -494,14 +494,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -494,14 +494,14 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
494 String px = type; 494 String px = type;
495 if (state.equals("lpName")) { 495 if (state.equals("lpName")) {
496 state = state + "+1"; 496 state = state + "+1";
497 - type = "asc"; 497 + type = "ASC";
498 } 498 }
499 String sqlPlan = "select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh," 499 String sqlPlan = "select min(s.id) as id,s.j_Gh as jGh,s.cl_Zbh as clZbh,"
500 - + " s.lp_Name as lpName,s.j_Name as jName" 500 + + " s.lp_Name as lpName,s.j_Name as jName,min(s.schedule_date_str) as dateStr ,min(s.fcsj) as fcsj"
501 + " from bsth_c_s_sp_info_real s " 501 + " from bsth_c_s_sp_info_real s "
502 + " where s.xl_Bm = '" + line + "' and DATE_FORMAT(s.schedule_Date,'%Y-%m-%d') ='" + date + "' " 502 + " where s.xl_Bm = '" + line + "' and DATE_FORMAT(s.schedule_Date,'%Y-%m-%d') ='" + date + "' "
503 + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name ,s.j_Name" 503 + " GROUP BY s.j_Gh,s.cl_Zbh,s.lp_Name ,s.j_Name"
504 - + " order by (" + state + ") " + type; 504 + + " order by (" + state + "),schedule_date_str,fcsj " + type;
505 List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan, 505 List<ScheduleRealInfo> list = jdbcTemplate.query(sqlPlan,
506 new RowMapper<ScheduleRealInfo>() { 506 new RowMapper<ScheduleRealInfo>() {
507 @Override 507 @Override
@@ -518,29 +518,41 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -518,29 +518,41 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
518 if (lpname.equals("lpName")) { 518 if (lpname.equals("lpName")) {
519 List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>(); 519 List<ScheduleRealInfo> listNew = new ArrayList<ScheduleRealInfo>();
520 Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); 520 Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
521 - if (px.equals("desc")) { 521 +// if (px.equals("desc")) {
522 int zt = 0; 522 int zt = 0;
523 - for (int l = 0; l < 3; l++) { 523 + for (int l = 0; l < 2; l++) {
524 for (int i = 0; i < list.size(); i++) { 524 for (int i = 0; i < list.size(); i++) {
525 ScheduleRealInfo t = list.get(i); 525 ScheduleRealInfo t = list.get(i);
526 if (t.getLpName().indexOf("+") != -1) { 526 if (t.getLpName().indexOf("+") != -1) {
527 if (zt == 0) { 527 if (zt == 0) {
528 listNew.add(t); 528 listNew.add(t);
529 } 529 }
530 -  
531 } else if (pattern.matcher(t.getLpName()).matches()) { 530 } else if (pattern.matcher(t.getLpName()).matches()) {
532 if (zt == 1) { 531 if (zt == 1) {
533 listNew.add(t); 532 listNew.add(t);
534 } 533 }
535 } else { 534 } else {
536 - if (zt == 2) {  
537 - listNew.add(t);  
538 - } 535 +// if (zt == 2) {
  536 +// listNew.add(t);
  537 +// }
  538 + continue;
539 } 539 }
540 } 540 }
541 zt++; 541 zt++;
542 } 542 }
543 - } else { 543 +
  544 + Collections.sort(list, new ComparableLp());
  545 + for (int i = 0; i < list.size(); i++) {
  546 + ScheduleRealInfo t = list.get(i);
  547 + if (t.getLpName().indexOf("+") != -1) {
  548 + continue;
  549 + } else if (pattern.matcher(t.getLpName()).matches()) {
  550 + continue;
  551 + } else {
  552 + listNew.add(t);
  553 + }
  554 + }
  555 + /*} else {
544 int zt = 0; 556 int zt = 0;
545 for (int l = 0; l < 3; l++) { 557 for (int l = 0; l < 3; l++) {
546 for (int i = 0; i < list.size(); i++) { 558 for (int i = 0; i < list.size(); i++) {
@@ -563,7 +575,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -563,7 +575,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
563 zt++; 575 zt++;
564 } 576 }
565 577
566 - } 578 + }*/
567 return listNew; 579 return listNew;
568 } else { 580 } else {
569 return list; 581 return list;
@@ -3712,7 +3724,15 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3712,7 +3724,15 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3712 tempMap.put("zdsjk" + size, ""); 3724 tempMap.put("zdsjk" + size, "");
3713 tempMap.put("zdsjm" + size, ""); 3725 tempMap.put("zdsjm" + size, "");
3714 tempMap.put("fcsj" + size, schedule.getFcsj()); 3726 tempMap.put("fcsj" + size, schedule.getFcsj());
3715 - tempMap.put("fcsjActual" + size, schedule.getFcsjActual() != null ? schedule.getFcsjActual() : ""); 3727 + String fcsjActural=schedule.getFcsjActual() != null ? schedule.getFcsjActual() : "";
  3728 + String bcType=schedule.getBcType()!=null?schedule.getBcType():"";
  3729 + if(bcType.equals("in")){
  3730 + fcsjActural=fcsjActural+"(进)";
  3731 + }
  3732 + if(bcType.equals("out")){
  3733 + fcsjActural=fcsjActural+"(出)";
  3734 + }
  3735 + tempMap.put("fcsjActual" + size, fcsjActural);
3716 tempMap.put("fcsjk" + size, ""); 3736 tempMap.put("fcsjk" + size, "");
3717 tempMap.put("fcsjm" + size, ""); 3737 tempMap.put("fcsjm" + size, "");
3718 tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : ""); 3738 tempMap.put("remarks" + size, schedule.getRemarks() != null ? schedule.getRemarks() : "");
src/main/java/com/bsth/service/report/impl/CulateMileageServiceImpl.java
@@ -364,7 +364,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{ @@ -364,7 +364,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
364 time=scheduleRealInfo.getFcsj(); 364 time=scheduleRealInfo.getFcsj();
365 } 365 }
366 if(!time.equals("")){ 366 if(!time.equals("")){
367 - String[] fcsjStr = scheduleRealInfo.getFcsj().split(":"); 367 + String[] fcsjStr = time.split(":");
368 long fcsj= Long.parseLong(fcsjStr[0])*60+Long.parseLong(fcsjStr[1]); 368 long fcsj= Long.parseLong(fcsjStr[0])*60+Long.parseLong(fcsjStr[1]);
369 if(childTaskPlans.isEmpty()){ 369 if(childTaskPlans.isEmpty()){
370 if(scheduleRealInfo.getStatus()!=-1){ 370 if(scheduleRealInfo.getStatus()!=-1){
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
@@ -360,7 +360,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im @@ -360,7 +360,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl&lt;TTInfoDetail, Long&gt; im
360 } 360 }
361 editInfo.getHeader().addAll(Arrays.asList(headarrays)); 361 editInfo.getHeader().addAll(Arrays.asList(headarrays));
362 362
363 - editInfo.setYy_desc(String.format("空驶班次=%d,营运班次=%d,空驶里程=%.2f,营运里程=%.2f", all_bc_ks, all_bc_yy, all_lc_ks, all_lc_yy)); 363 + editInfo.setYy_desc(String.format("空驶班次=%d,营运班次=%d,空驶里程=%.2f,营运里程=%.2f,总里程=%.2f", all_bc_ks, all_bc_yy, all_lc_ks, all_lc_yy, all_lc_ks + all_lc_yy));
364 } 364 }
365 365
366 LOGGER.info("//---------------- 时刻表编辑用数据输出 success... ----------------//"); 366 LOGGER.info("//---------------- 时刻表编辑用数据输出 success... ----------------//");
src/main/java/com/bsth/util/ComparableLp.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import java.util.Comparator;
  4 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  5 +
  6 +public class ComparableLp implements Comparator<ScheduleRealInfo>{
  7 +
  8 + @Override
  9 + public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) {
  10 + // TODO Auto-generated method stub
  11 + return o1.getLpName().compareTo(o2.getLpName());
  12 + }
  13 +
  14 +}
src/main/resources/static/pages/forms/mould/shiftuehiclemanthclzbh.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/shiftuehiclemanthspy.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/statement/scheduleDaily.html
@@ -14,6 +14,17 @@ @@ -14,6 +14,17 @@
14 14
15 .table > tbody + tbody { 15 .table > tbody + tbody {
16 border-top: 1px solid; } 16 border-top: 1px solid; }
  17 +
  18 + #forms > thead > tr> td >span{
  19 +
  20 + width: 5px;
  21 +word-wrap: break-word;
  22 +letter-spacing: 20px;
  23 + }
  24 +
  25 + #forms tr> td >label{
  26 + word-break: keep-all;white-space:nowrap;
  27 + }
17 </style> 28 </style>
18 29
19 <div class="page-head"> 30 <div class="page-head">
@@ -60,18 +71,18 @@ @@ -60,18 +71,18 @@
60 <th colspan="40">线路调度日报</th> 71 <th colspan="40">线路调度日报</th>
61 </tr> 72 </tr>
62 <tr> 73 <tr>
63 - <td rowspan="3">路线名</td> 74 + <td rowspan="3"><span >路线名</span></td>
64 <td colspan="16"><c>全日</c>营运里程(公里)</td> 75 <td colspan="16"><c>全日</c>营运里程(公里)</td>
65 <td colspan="15"><c>全日</c>营运班次</td> 76 <td colspan="15"><c>全日</c>营运班次</td>
66 <td colspan="9">大间隔情况</td> 77 <td colspan="9">大间隔情况</td>
67 </tr> 78 </tr>
68 <tr> 79 <tr>
69 - <td rowspan="2">计划</td>  
70 - <td rowspan="2">实驶</td>  
71 - <td rowspan="2">少驶公里</td>  
72 - <td rowspan="2">少驶班次</td> 80 + <td rowspan="2"><span >计划</span></td>
  81 + <td rowspan="2"><span >实驶</span></td>
  82 + <td rowspan="2"><span>少驶公里</span></td>
  83 + <td rowspan="2"><span>少驶班次</span></td>
73 <td colspan="11">少驶原因(公里)</td> 84 <td colspan="11">少驶原因(公里)</td>
74 - <td rowspan="2">临加公里</td> 85 + <td rowspan="2"><span >临加公里</span></td>
75 <td colspan="3">计划班次</td> 86 <td colspan="3">计划班次</td>
76 <td colspan="3">实际班次</td> 87 <td colspan="3">实际班次</td>
77 <td colspan="3">临加班次</td> 88 <td colspan="3">临加班次</td>
@@ -82,35 +93,35 @@ @@ -82,35 +93,35 @@
82 <td colspan="5" rowspan="2">原因</td> 93 <td colspan="5" rowspan="2">原因</td>
83 </tr> 94 </tr>
84 <tr> 95 <tr>
85 - <td>路阻</td>  
86 - <td>吊慢</td>  
87 - <td>故障</td>  
88 - <td>纠纷</td>  
89 - <td>肇事</td>  
90 - <td>缺人</td>  
91 - <td>缺车</td>  
92 - <td>客稀</td>  
93 - <td>气候</td>  
94 - <td>援外</td>  
95 - <td>其他</td>  
96 - <td><c>全日</c></td>  
97 - <td>早高峰</td>  
98 - <td>晚高峰</td>  
99 - <td><c>全日</c></td>  
100 - <td>早高峰</td>  
101 - <td>晚高峰</td>  
102 - <td><c>全日</c></td>  
103 - <td>早高峰</td>  
104 - <td>晚高峰</td>  
105 - <td><c>全日</c></td>  
106 - <td>早高峰</td>  
107 - <td>晚高峰</td>  
108 - <td><c>全日</c></td>  
109 - <td>早高峰</td>  
110 - <td>晚高峰</td>  
111 - <td><c>全日</c></td>  
112 - <td>早高峰</td>  
113 - <td>晚高峰</td> 96 + <td><span >路阻</span></td>
  97 + <td><span>吊慢</span></td>
  98 + <td><span >故障</span></td>
  99 + <td><span >纠纷</span></td>
  100 + <td><span >肇事</span></td>
  101 + <td><span>缺人</span></td>
  102 + <td><span>缺车</span></td>
  103 + <td><span >客稀</span></td>
  104 + <td><span>气候</span></td>
  105 + <td><span>援外</span></td>
  106 + <td><span>其他</span></td>
  107 + <td><span ><c>全日</c></span></td>
  108 + <td><span >早高峰</span></td>
  109 + <td><span>晚高峰</span></td>
  110 + <td><span><c>全日</c></span></td>
  111 + <td><span>早高峰</span></td>
  112 + <td><span>晚高峰</span></td>
  113 + <td><span><c>全日</c></span></td>
  114 + <td><span>早高峰</span></td>
  115 + <td><span>晚高峰</span></td>
  116 + <td><span><c>全日</c></span></td>
  117 + <td><span>早高峰</span></td>
  118 + <td><span>晚高峰</span></td>
  119 + <td><span><c>全日</c></span></td>
  120 + <td><span>早高峰</span></td>
  121 + <td><span>晚高峰</span></td>
  122 + <td><span><c>全日</c></span></td>
  123 + <td><span>早高峰</span></td>
  124 + <td><span>晚高峰</span></td>
114 </tr> 125 </tr>
115 </thead> 126 </thead>
116 127
@@ -169,36 +180,36 @@ @@ -169,36 +180,36 @@
169 <td colspan="40">&nbsp;</td> 180 <td colspan="40">&nbsp;</td>
170 </tr> --> 181 </tr> -->
171 <tr> 182 <tr>
172 - <td colspan="2">路牌</td>  
173 - <td colspan="2">车号</td>  
174 - <td>司早</td>  
175 - <td>售早</td>  
176 - <td>司晚</td>  
177 - <td>售晚</td>  
178 - <td colspan="2">路牌</td>  
179 - <td colspan="2">车号</td>  
180 - <td>司早</td>  
181 - <td>售早</td>  
182 - <td>司晚</td>  
183 - <td>售晚</td>  
184 - <td colspan="2">路牌</td>  
185 - <td colspan="2">车号</td>  
186 - <td>司早</td>  
187 - <td>售早</td>  
188 - <td>司晚</td>  
189 - <td>售晚</td>  
190 - <td colspan="2">路牌</td>  
191 - <td colspan="2">车号</td>  
192 - <td>司早</td>  
193 - <td>售早</td>  
194 - <td>司晚</td>  
195 - <td>售晚</td>  
196 - <td colspan="2">路牌</td>  
197 - <td colspan="2">车号</td>  
198 - <td>司早</td>  
199 - <td>售早</td>  
200 - <td>司晚</td>  
201 - <td>售晚</td> 183 + <td colspan="2"><label>路牌</label></td>
  184 + <td colspan="2"><label>车号</label></td>
  185 + <td> <label>司早</label></td>
  186 + <td><label>售早</label></td>
  187 + <td><label>司晚</label></td>
  188 + <td><label>售晚</label></td>
  189 + <td colspan="2"><label>路牌</label></td>
  190 + <td colspan="2"><label>车号</label></td>
  191 + <td><label>司早</label></td>
  192 + <td><label>售早</label></td>
  193 + <td><label>司晚</label></td>
  194 + <td><label>售晚</label></td>
  195 + <td colspan="2"><label>路牌</label></td>
  196 + <td colspan="2"><label>车号</label></td>
  197 + <td><label>司早</label></td>
  198 + <td><label>售早</label></td>
  199 + <td><label>司晚</label></td>
  200 + <td><label>售晚</label></td>
  201 + <td colspan="2"><label>路牌</label></td>
  202 + <td colspan="2"><label>车号</label></td>
  203 + <td><label>司早</label></td>
  204 + <td><label>售早</label></td>
  205 + <td><label>司晚</label></td>
  206 + <td><label>售晚</label></td>
  207 + <td colspan="2"><label>路牌</label></td>
  208 + <td colspan="2"><label>车号</label></td>
  209 + <td><label>司早</label></td>
  210 + <td><label>售早</label></td>
  211 + <td><label>司晚</label></td>
  212 + <td><label>售晚</label></td>
202 </tr> 213 </tr>
203 <tbody class="scheduleDaily_2"> 214 <tbody class="scheduleDaily_2">
204 215
@@ -208,17 +219,17 @@ @@ -208,17 +219,17 @@
208 </tr> 219 </tr>
209 <tr> 220 <tr>
210 <td rowspan="2">路牌</td> 221 <td rowspan="2">路牌</td>
211 - <td colspan="2" rowspan="2">起点站</td> 222 + <td colspan="2" rowspan="2" style="word-break: keep-all;white-space:nowrap;">起点站</td>
212 <td colspan="4">到达时间</td> 223 <td colspan="4">到达时间</td>
213 <td colspan="4">发车时间</td> 224 <td colspan="4">发车时间</td>
214 <td colspan="2" rowspan="2">备注</td> 225 <td colspan="2" rowspan="2">备注</td>
215 <td rowspan="2">路牌</td> 226 <td rowspan="2">路牌</td>
216 - <td colspan="2" rowspan="2">起点站</td> 227 + <td colspan="2" rowspan="2" style="word-break: keep-all;white-space:nowrap;">起点站</td>
217 <td colspan="4">到达时间</td> 228 <td colspan="4">到达时间</td>
218 <td colspan="4">发车时间</td> 229 <td colspan="4">发车时间</td>
219 <td colspan="2" rowspan="2">备注</td> 230 <td colspan="2" rowspan="2">备注</td>
220 <td rowspan="2">路牌</td> 231 <td rowspan="2">路牌</td>
221 - <td colspan="2" rowspan="2">起点站</td> 232 + <td colspan="2" rowspan="2" style="word-break: keep-all;white-space:nowrap;">起点站</td>
222 <td colspan="4">到达时间</td> 233 <td colspan="4">到达时间</td>
223 <td colspan="4">发车时间</td> 234 <td colspan="4">发车时间</td>
224 <td colspan="2" rowspan="2">备注</td> 235 <td colspan="2" rowspan="2">备注</td>
@@ -456,7 +467,7 @@ @@ -456,7 +467,7 @@
456 </script> 467 </script>
457 <script type="text/html" id="scheduleDaily_1"> 468 <script type="text/html" id="scheduleDaily_1">
458 {{each list as obj i}} 469 {{each list as obj i}}
459 - <tr> 470 + <tr >
460 <td>{{obj.xlName}}</td> 471 <td>{{obj.xlName}}</td>
461 <td>{{obj.jhlc}}</td> 472 <td>{{obj.jhlc}}</td>
462 <td>{{obj.sjgl}}</td> 473 <td>{{obj.sjgl}}</td>
@@ -534,7 +545,7 @@ @@ -534,7 +545,7 @@
534 <tr> 545 <tr>
535 {{/if}} 546 {{/if}}
536 <td>{{obj.lpName}}</td> 547 <td>{{obj.lpName}}</td>
537 - <td colspan="2">{{obj.qdzName}}</td> 548 + <td colspan="2" style="word-break: keep-all;white-space:nowrap;">{{obj.qdzName}}</td>
538 <td>{{obj.zdsj}}</td> 549 <td>{{obj.zdsj}}</td>
539 <td>{{obj.zdsjActual}}</td> 550 <td>{{obj.zdsjActual}}</td>
540 <td>{{obj.fast}}</td> 551 <td>{{obj.fast}}</td>
src/main/resources/static/pages/mforms/shifdays/shifday.html
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 <div class="col-md-12"> 27 <div class="col-md-12">
28 <div class="portlet light porttlet-fit bordered"> 28 <div class="portlet light porttlet-fit bordered">
29 <div class="portlet-title"> 29 <div class="portlet-title">
30 - <form class="form-inline" action="" method="post"> 30 + <form class="form-inline" action="" method="get">
31 <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_shif"> 31 <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_shif">
32 <span class="item-label" style="width: 80px;">公司: </span> 32 <span class="item-label" style="width: 80px;">公司: </span>
33 <select class="form-control" name="company" id="gsdmShif" style="width: 140px;"></select> 33 <select class="form-control" name="company" id="gsdmShif" style="width: 140px;"></select>
@@ -104,8 +104,12 @@ $(function(){ @@ -104,8 +104,12 @@ $(function(){
104 format : 'YYYY-MM-DD', 104 format : 'YYYY-MM-DD',
105 locale : 'zh-cn' 105 locale : 'zh-cn'
106 }); 106 });
107 - 107 + var fage=false;
108 var obj = []; 108 var obj = [];
  109 + var xlList;
  110 +
  111 + $.get('/report/lineList',function(result){
  112 + xlList=result;
109 $.get('/user/companyData', function(result){ 113 $.get('/user/companyData', function(result){
110 obj = result; 114 obj = result;
111 var options = ''; 115 var options = '';
@@ -124,7 +128,7 @@ $(function(){ @@ -124,7 +128,7 @@ $(function(){
124 $('#gsdmShif').html(options); 128 $('#gsdmShif').html(options);
125 updateCompany(); 129 updateCompany();
126 }); 130 });
127 - 131 + })
128 $("#gsdmShif").on("change",updateCompany); 132 $("#gsdmShif").on("change",updateCompany);
129 function updateCompany(){ 133 function updateCompany(){
130 var company = $('#gsdmShif').val(); 134 var company = $('#gsdmShif').val();
@@ -138,28 +142,60 @@ $(function(){ @@ -138,28 +142,60 @@ $(function(){
138 } 142 }
139 } 143 }
140 $('#fgsdmShif').html(options); 144 $('#fgsdmShif').html(options);
  145 + initXl();
141 } 146 }
142 147
143 148
144 - $.get('/basic/lineCode2Name',function(result){  
145 - var data=[]; 149 +// $.get('/basic/lineCode2Name',function(result){
  150 +// var data=[];
  151 +
  152 +// for(var code in result){
  153 +// data.push({id: code, text: result[code]});
  154 +// }
  155 +// initPinYinSelect2('#line',data,'');
146 156
147 - for(var code in result){  
148 - data.push({id: code, text: result[code]}); 157 +// })
  158 +
  159 + $("#fgsdmShif").on("change",initXl);
  160 + function initXl(){
  161 + var data=[];
  162 + if(fage){
  163 + $("#line").select2("destroy").html('');
  164 + }
  165 + var fgs=$('#fgsdmShif').val();
  166 + var gs=$('#gsdmShif').val();
  167 + for(var i=0;i<xlList.length;i++){
  168 + if(gs!=""){
  169 + if(fgs!=""){
  170 + if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
  171 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  172 + }
  173 + }else{
  174 + if(xlList[i]["gsbm"]==gs){
  175 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  176 + }
  177 + }
  178 + }
149 } 179 }
150 initPinYinSelect2('#line',data,''); 180 initPinYinSelect2('#line',data,'');
151 -  
152 - }) 181 + fage=true;
  182 + }
  183 +
153 184
154 $("#query").on("click",function(){ 185 $("#query").on("click",function(){
155 var line = $("#line").val(); 186 var line = $("#line").val();
156 var date = $("#date").val(); 187 var date = $("#date").val();
157 var gsdmShif = $("#gsdmShif").val(); 188 var gsdmShif = $("#gsdmShif").val();
158 var fgsdmShif = $("#fgsdmShif").val(); 189 var fgsdmShif = $("#fgsdmShif").val();
  190 + var params = {};
  191 + params.fgsdmShif =fgsdmShif;
  192 + params.date =date;
  193 + params.gsdmShif =gsdmShif;
  194 + params.line =line;
159 if(date=="" || date ==null){ 195 if(date=="" || date ==null){
160 layer.msg('请选择日期.'); 196 layer.msg('请选择日期.');
161 }else{ 197 }else{
162 - $post('/mcy_forms/shifday',{gsdmShif:gsdmShif,fgsdmShif:fgsdmShif, line:line,date:date},function(result){ 198 + $get('/mcy_forms/shifday',params,function(result){
163 $.each(result, function(i, obj) { 199 $.each(result, function(i, obj) {
164 obj.requestType = reqCodeMap[obj.requestType]; 200 obj.requestType = reqCodeMap[obj.requestType];
165 }); 201 });
@@ -175,8 +211,14 @@ $(function(){ @@ -175,8 +211,14 @@ $(function(){
175 var line = $("#line").val(); 211 var line = $("#line").val();
176 var date = $("#date").val(); 212 var date = $("#date").val();
177 var gsdmShif = $("#gsdmShif").val(); 213 var gsdmShif = $("#gsdmShif").val();
178 - var fgsdmShif = $("#fgsdmShif").val();  
179 - $post('/mcy_export/shifdayExport',{gsdmShif:gsdmShif,fgsdmShif:fgsdmShif,line:line,date:date,type:'export'},function(result){ 214 + var fgsdmShif = $("#fgsdmShif").val();
  215 + var params = {};
  216 + params.fgsdmShif =fgsdmShif;
  217 + params.date =date;
  218 + params.gsdmShif =gsdmShif;
  219 + params.line =line;
  220 + params.type='export';
  221 + $get('/mcy_export/shifdayExport',params,function(result){
180 window.open("/downloadFile/download?fileName=班次车辆人员日报表"+moment(date).format("YYYYMMDD")); 222 window.open("/downloadFile/download?fileName=班次车辆人员日报表"+moment(date).format("YYYYMMDD"));
181 }); 223 });
182 }); 224 });
src/main/resources/static/pages/mforms/shiftuehiclemanths/shiftuehiclemanth.html
@@ -53,6 +53,11 @@ @@ -53,6 +53,11 @@
53 </div> 53 </div>
54 <div style="display: inline-block;margin-left: 15px"> 54 <div style="display: inline-block;margin-left: 15px">
55 <span class="item-label" style="width: 150px;">统计: </span> 55 <span class="item-label" style="width: 150px;">统计: </span>
  56 + <select class="form-control" style="width: 136px;" id='empnames'>
  57 + <option value="驾驶员">驾驶员</option>
  58 + <option value="售票员">售票员</option>
  59 + <option value="车辆自编号">车辆自编号</option>
  60 + </select>
56 </div> 61 </div>
57 <div class="form-group"> 62 <div class="form-group">
58 <input class="btn btn-default" type="button" id="query" value="筛选"/> 63 <input class="btn btn-default" type="button" id="query" value="筛选"/>
@@ -66,7 +71,7 @@ @@ -66,7 +71,7 @@
66 <thead> 71 <thead>
67 <tr> 72 <tr>
68 <th>序号</th> 73 <th>序号</th>
69 - <th>驾驶员</th> 74 + <th id='empname'>驾驶员</th>
70 <th>运营里程</th> 75 <th>运营里程</th>
71 <th>空驶里程</th> 76 <th>空驶里程</th>
72 <th>抽减里程</th> 77 <th>抽减里程</th>
@@ -97,8 +102,11 @@ @@ -97,8 +102,11 @@
97 format : 'YYYY-MM-DD', 102 format : 'YYYY-MM-DD',
98 locale : 'zh-cn' 103 locale : 'zh-cn'
99 }); 104 });
100 - 105 + var fage=false;
101 var obj = []; 106 var obj = [];
  107 + var xlList;
  108 + $.get('/report/lineList',function(result){
  109 + xlList=result;
102 $.get('/user/companyData', function(result){ 110 $.get('/user/companyData', function(result){
103 obj = result; 111 obj = result;
104 var options = ''; 112 var options = '';
@@ -117,7 +125,7 @@ @@ -117,7 +125,7 @@
117 $('#gsdmManth').html(options); 125 $('#gsdmManth').html(options);
118 updateCompany(); 126 updateCompany();
119 }); 127 });
120 - 128 + })
121 $("#gsdmManth").on("change",updateCompany); 129 $("#gsdmManth").on("change",updateCompany);
122 function updateCompany(){ 130 function updateCompany(){
123 var company = $('#gsdmManth').val(); 131 var company = $('#gsdmManth').val();
@@ -131,64 +139,43 @@ @@ -131,64 +139,43 @@
131 } 139 }
132 } 140 }
133 $('#fgsdmManth').html(options); 141 $('#fgsdmManth').html(options);
  142 + initXl();
134 } 143 }
135 -  
136 -  
137 - $.get('/basic/lineCode2Name',function(result){ 144 + $("#fgsdmManth").on("change",initXl);
  145 + function initXl(){
138 var data=[]; 146 var data=[];
139 -  
140 - for(var code in result){  
141 - data.push({id: code, text: result[code]}); 147 + if(fage){
  148 + $("#line").select2("destroy").html('');
  149 + }
  150 + var fgs=$('#fgsdmManth').val();
  151 + var gs=$('#gsdmManth').val();
  152 + for(var i=0;i<xlList.length;i++){
  153 + if(gs!=""){
  154 + if(fgs!=""){
  155 + if(xlList[i]["fgsbm"]==fgs && xlList[i]["gsbm"]==gs){
  156 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  157 + }
  158 + }else{
  159 + if(xlList[i]["gsbm"]==gs){
  160 + data.push({id: xlList[i]["xlbm"], text: xlList[i]["xlname"]});
  161 + }
  162 + }
  163 + }
142 } 164 }
143 initPinYinSelect2('#line',data,''); 165 initPinYinSelect2('#line',data,'');
144 -  
145 - })  
146 - $('#lpName').select2({  
147 - ajax: {  
148 - url: '/realSchedule/findLpName',  
149 - type: 'post',  
150 - dataType: 'json',  
151 - delay: 150,  
152 - data: function(params){  
153 - return{lpName: params.term};  
154 - },  
155 - processResults: function (data) {  
156 - return {  
157 - results: data  
158 - };  
159 - },  
160 - cache: true  
161 - },  
162 - templateResult: function(repo){  
163 - if (repo.loading) return repo.text;  
164 - var h = '<span>'+repo.text+'</span>';  
165 - return h;  
166 - },  
167 - escapeMarkup: function (markup) { return markup; },  
168 - minimumInputLength: 1,  
169 - templateSelection: function(repo){  
170 - return repo.text;  
171 - },  
172 - language: {  
173 - noResults: function(){  
174 - return '<span style="color:red;font-size: 12px;">没有搜索到路牌!</span>';  
175 - },  
176 - inputTooShort : function(e) {  
177 - return '<span style="color:gray;font-size: 12px;"><i class="fa fa-search"></i> 输入路牌搜索路牌</span>';  
178 - },  
179 - searching : function() {  
180 - return '<span style="color:gray;font-size: 12px;"> 正在搜索路牌...</span>';  
181 - }  
182 - }  
183 - }); 166 + fage=true;
  167 + }
184 $("#query").on("click",function(){ 168 $("#query").on("click",function(){
185 - var line = $("#line").val();  
186 - var startDate = $("#startDate").val();  
187 - var endDate = $("#endDate").val();  
188 - var lpName = $("#lpName").val();  
189 - var gsdmManth= $("#gsdmManth").val();  
190 - var fgsdmManth= $("#fgsdmManth").val();  
191 - $post("/mcy_forms/shiftuehiclemanth",{gsdmManth:gsdmManth,fgsdmManth:fgsdmManth, line:line,startDate:startDate,endDate:endDate ,lpName:lpName},function(result){ 169 + $("#empname").html($("#empnames").val())
  170 + var params={};
  171 + params.empnames=$("#empnames").val();
  172 + params.line = $("#line").val();
  173 + params.startDate = $("#startDate").val();
  174 + params.endDate = $("#endDate").val();
  175 + params.lpName = $("#lpName").val();
  176 + params.gsdmManth= $("#gsdmManth").val();
  177 + params.fgsdmManth= $("#fgsdmManth").val();
  178 + $get("/mcy_forms/shiftuehiclemanth",params,function(result){
192 $("#sDate").text(startDate); 179 $("#sDate").text(startDate);
193 $("#eDate").text(endDate); 180 $("#eDate").text(endDate);
194 var temp = {}; 181 var temp = {};
@@ -209,18 +196,28 @@ @@ -209,18 +196,28 @@
209 }); 196 });
210 197
211 $("#export").on("click",function(){ 198 $("#export").on("click",function(){
212 - var line = $("#line").val();  
213 - var startDate = $("#startDate").val();  
214 - var endDate = $("#endDate").val();  
215 - var lpName = $("#lpName").val();  
216 - var gsdmManth= $("#gsdmManth").val();  
217 - var fgsdmManth= $("#fgsdmManth").val();  
218 - $post('/mcy_export/shiftuehiclemanthExport',{gsdmManth:gsdmManth,fgsdmManth:fgsdmManth,line:line,startDate:startDate,endDate:endDate,type:'export'},function(result){  
219 - window.open("/downloadFile/download?fileName=班次车辆人员月报表"+moment(startDate).format("YYYYMMDD")); 199 + var params={};
  200 + params.empnames=$("#empnames").val();
  201 + params.line = $("#line").val();
  202 + params.startDate = $("#startDate").val();
  203 + params.endDate = $("#endDate").val();
  204 + params.lpName = $("#lpName").val();
  205 + params.gsdmManth= $("#gsdmManth").val();
  206 + params.fgsdmManth= $("#fgsdmManth").val();
  207 + params.type='export';
  208 + $get('/mcy_export/shiftuehiclemanthExport',params,function(result){
  209 + window.open("/downloadFile/download?fileName=班次车辆人员月报表"+moment($("#startDate").val()).format("YYYYMMDD"));
220 }); 210 });
221 }); 211 });
222 212
223 - }); 213 + });
  214 +
  215 +// $("#empnames").change(function(){
  216 +// $("#empname").html($("#empnames").val())
  217 +// // $("#query").click();
  218 +
  219 +// });
  220 +
224 </script> 221 </script>
225 <script type="text/html" id="list_shiftuehiclemanth"> 222 <script type="text/html" id="list_shiftuehiclemanth">
226 {{each list as obj i}} 223 {{each list as obj i}}
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/edit.html
@@ -96,12 +96,18 @@ @@ -96,12 +96,18 @@
96 <div class="col-md-3"> 96 <div class="col-md-3">
97 <input type="text" class="form-control" 97 <input type="text" class="form-control"
98 name="newDeviceNo" ng-model="ctrl.deviceInfoForSave.newDeviceNo" 98 name="newDeviceNo" ng-model="ctrl.deviceInfoForSave.newDeviceNo"
  99 + remote-Validation
  100 + remotevtype="cars_sbbh"
  101 + remotevparam="{{ {'id_eq': null, 'equipmentCode_eq': ctrl.deviceInfoForSave.newDeviceNo} | json}}"
99 required placeholder="请输入新终端号"/> 102 required placeholder="请输入新终端号"/>
100 </div> 103 </div>
101 <!-- 隐藏块,显示验证信息 --> 104 <!-- 隐藏块,显示验证信息 -->
102 <div class="alert alert-danger well-sm" ng-show="myForm.newDeviceNo.$error.required"> 105 <div class="alert alert-danger well-sm" ng-show="myForm.newDeviceNo.$error.required">
103 新终端号必须填写 106 新终端号必须填写
104 </div> 107 </div>
  108 + <div class="alert alert-danger well-sm" ng-show="myForm.newDeviceNo.$error.remote">
  109 + {{$remote_msg}}
  110 + </div>
105 </div> 111 </div>
106 112
107 <div class="form-group"> 113 <div class="form-group">
src/main/resources/static/pages/scheduleApp/module/basicInfo/deviceInfoManage/form.html
@@ -96,12 +96,18 @@ @@ -96,12 +96,18 @@
96 <div class="col-md-3"> 96 <div class="col-md-3">
97 <input type="text" class="form-control" 97 <input type="text" class="form-control"
98 name="newDeviceNo" ng-model="ctrl.deviceInfoForSave.newDeviceNo" 98 name="newDeviceNo" ng-model="ctrl.deviceInfoForSave.newDeviceNo"
  99 + remote-Validation
  100 + remotevtype="cars_sbbh"
  101 + remotevparam="{{ {'id_eq': null, 'equipmentCode_eq': ctrl.deviceInfoForSave.newDeviceNo} | json}}"
99 required placeholder="请输入新终端号"/> 102 required placeholder="请输入新终端号"/>
100 </div> 103 </div>
101 <!-- 隐藏块,显示验证信息 --> 104 <!-- 隐藏块,显示验证信息 -->
102 <div class="alert alert-danger well-sm" ng-show="myForm.newDeviceNo.$error.required"> 105 <div class="alert alert-danger well-sm" ng-show="myForm.newDeviceNo.$error.required">
103 新终端号必须填写 106 新终端号必须填写
104 </div> 107 </div>
  108 + <div class="alert alert-danger well-sm" ng-show="myForm.newDeviceNo.$error.remote">
  109 + {{$remote_msg}}
  110 + </div>
105 </div> 111 </div>
106 112
107 <div class="form-group"> 113 <div class="form-group">
src/main/resources/static/pages/scheduleApp/module/common/dts2/ttinfotable/new/sa1.js 0 → 100644
  1 +/**
  2 + * saTimeTable指令工具集,创建内部单元格类,及其他操作
  3 + */
  4 +angular.module('ScheduleApp').factory(
  5 + 'SaTimeTableUtils',
  6 + [
  7 + function() {
  8 + /**
  9 + * 表格,单元格头类
  10 + * 如:路牌,出1,青2......进6
  11 + */
  12 + var Cell_Header = function(str) {
  13 + /** 表头数据 */
  14 + this.headStr = str;
  15 + };
  16 + Cell_Header.prototype.setHead = function(str) {
  17 + this.headStr = str || "";
  18 + };
  19 +
  20 + /**
  21 + * 表格,单元格内容类,在表格上只显示时间,但是内部还是保存其他值。
  22 + */
  23 + var Cell_Body_Bc = function() {
  24 + /** 表格单元格显示的信息 */
  25 + this.info = undefined;
  26 +
  27 + this.isSel = false; // 是否被选中
  28 + this.isCanSel = true; // 是否能被选择
  29 + this.isValidInfo = false; // 数据是否有效
  30 +
  31 + this.data = {}; // 内部信息
  32 +
  33 + this.data.ttdid = undefined; // 班次信息Id
  34 + this.data.fcsj = undefined; // 发车时间
  35 + this.data.bcType = undefined; // 班次类型
  36 + this.data.xldir = undefined; // 线路方向
  37 + this.data.isfb = undefined; // 是否分班
  38 + this.data.jhlc = undefined; // 计划里程
  39 + this.data.qdz = null; // 起点站id
  40 + this.data.zdz = null; // 终点站id
  41 + this.data.tcc = null; // 停车场id
  42 +
  43 + this.self.lpId = undefined; // 路牌Id
  44 + this.self.lpName = undefined; // 路牌名字
  45 +
  46 + this.self.fcno = undefined; // 发车序号
  47 + this.self.bcs = undefined; // 班次数
  48 + };
  49 + /**
  50 + * 路牌单元格类。
  51 + */
  52 + var Cell_Body_Lp = function() {
  53 + this.info = undefined;
  54 +
  55 + this.isSel = false; // 是否被选中
  56 + this.isCanSel = false; // 是否能被选择
  57 + this.isValidInfo = false; // 数据是否有效
  58 +
  59 + this.data = {}; // 内部信息
  60 +
  61 + this.data.lpId = undefined; // 路牌Id
  62 + this.data.lpName = undefined; // 路牌名字
  63 + };
  64 + /**
  65 + * 统计单元格类。
  66 + */
  67 + var Cell_Body_Stat = function() {
  68 + this.info = undefined;
  69 +
  70 + this.isSel = false; // 是否被选中
  71 + this.isCanSel = false; // 是否能被选择
  72 + this.isValidInfo = false; // 数据是否有效
  73 +
  74 + this.data = {}; // 内部信息
  75 + };
  76 +
  77 + Cell_Body_Bc.prototype.canSel = function() { // 是否能被选中
  78 + return this.isCanSel;
  79 + };
  80 + Cell_Body_Bc.prototype.canUpdate = function() { // 是否能更新
  81 + return this.isSel && this.data.ttdid;
  82 + };
  83 + Cell_Body_Bc.prototype.canDelete = function() { // 是否能删除
  84 + return this.isSel && this.data.ttdid;
  85 + };
  86 + Cell_Body_Bc.prototype.validInfo = function() { // 验证班次内数据是否正确
  87 + if (this.canSel() && this.data.ttdid) {
  88 + if (this.data.bcType == 'in') {
  89 + this.isValidInfo = this.data.qdz != null && this.data.tcc != null;
  90 + } else if (this.data.bcType == 'out') {
  91 + this.isValidInfo = this.data.tcc != null && this.data.zdz != null;
  92 + } else {
  93 + this.isValidInfo = this.data.qdz != null && this.data.zdz != null;
  94 + }
  95 + } else {
  96 + this.isValidInfo = true;
  97 + }
  98 + return this.isValidInfo;
  99 + };
  100 + Cell_Body_Bc.prototype.where = function(
  101 + xldir, startTime_h_m, endTime_h_m, isInOut
  102 + ) { // 判定班次是否在指定条件内
  103 +
  104 + var fcsj_m_h = [];
  105 + fcsj_m_h[0] = parseInt(this.data.fcsj.split(":")[0]);
  106 + fcsj_m_h[1] = parseInt(this.data.fcsj.split(":")[1]);
  107 +
  108 + var fcsj = new Date(2000,1,1);
  109 + fcsj.setHours(fcsj_m_h[0]);
  110 + fcsj.setMinutes(fcsj_m_h[1]);
  111 +
  112 + var s_temp_date = new Date(2000, 1, 1);
  113 + var e_temp_date = new Date(2000, 1, 1);
  114 +
  115 + if (xldir == 2) { // 上下行
  116 + // 判定是否要进出场班次
  117 + if (isInOut == false && (this.data.bcType == "in" || this.data.bcType == "out")) {
  118 + return false;
  119 + }
  120 +
  121 + if (startTime_h_m) {
  122 + if (endTime_h_m) {
  123 + s_temp_date.setHours(startTime_h_m[0]);
  124 + s_temp_date.setMinutes(startTime_h_m[1]);
  125 + e_temp_date.setHours(endTime_h_m[0]);
  126 + e_temp_date.setMinutes(endTime_h_m[1]);
  127 + return fcsj >= s_temp_date && fcsj <= e_temp_date;
  128 + } else {
  129 + s_temp_date.setHours(startTime_h_m[0]);
  130 + s_temp_date.setMinutes(startTime_h_m[1]);
  131 + return fcsj >= s_temp_date;
  132 + }
  133 + } else {
  134 + if (endTime_h_m) {
  135 + e_temp_date.setHours(endTime_h_m[0]);
  136 + e_temp_date.setMinutes(endTime_h_m[1]);
  137 + return fcsj <= e_temp_date;
  138 + } else {
  139 + return false;
  140 + }
  141 + }
  142 + } else {
  143 + // 判定是否要进出场班次
  144 + if (isInOut == false && (this.data.bcType == "in" || this.data.bcType == "out")) {
  145 + return false;
  146 + }
  147 +
  148 + if (xldir == this.xldir) {
  149 + if (startTime_h_m) {
  150 + if (endTime_h_m) {
  151 + s_temp_date.setHours(startTime_h_m[0]);
  152 + s_temp_date.setMinutes(startTime_h_m[1]);
  153 + e_temp_date.setHours(endTime_h_m[0]);
  154 + e_temp_date.setMinutes(endTime_h_m[1]);
  155 + return fcsj >= s_temp_date && fcsj <= e_temp_date;
  156 + } else {
  157 + s_temp_date.setHours(startTime_h_m[0]);
  158 + s_temp_date.setMinutes(startTime_h_m[1]);
  159 + return fcsj >= s_temp_date;
  160 + }
  161 + } else {
  162 + if (endTime_h_m) {
  163 + e_temp_date.setHours(endTime_h_m[0]);
  164 + e_temp_date.setMinutes(endTime_h_m[1]);
  165 + return fcsj <= e_temp_date;
  166 + } else {
  167 + return true;
  168 + }
  169 + }
  170 + } else {
  171 + return false;
  172 + }
  173 + }
  174 + };
  175 +
  176 + Cell_Body_Lp.prototype.canSel = function() { // 是否能被选中
  177 + return this.isCanSel;
  178 + };
  179 + Cell_Body_Lp.prototype.canUpdate = function() { // 是否能更新
  180 + return this.isSel && this.data.ttdid;
  181 + };
  182 + Cell_Body_Lp.prototype.canDelete = function() { // 是否能删除
  183 + return this.isSel && this.data.ttdid;
  184 + };
  185 +
  186 + Cell_Body_Stat.prototype.canSel = function() { // 是否能被选中
  187 + return this.isCanSel;
  188 + };
  189 + Cell_Body_Stat.prototype.canUpdate = function() { // 是否能更新
  190 + return this.isSel && this.data.ttdid;
  191 + };
  192 + Cell_Body_Stat.prototype.canDelete = function() { // 是否能删除
  193 + return this.isSel && this.data.ttdid;
  194 + };
  195 +
  196 + return {
  197 + // TODO:
  198 + };
  199 + }
  200 + ]
  201 +);
0 \ No newline at end of file 202 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v2/main.html
1 -<div class="uk-modal" id="map-playback2-modal">  
2 - <div class="uk-modal-dialog uk-modal-dialog-blank">  
3 - <button class="uk-modal-close uk-close" type="button"></button>  
4 - <div class="uk-grid uk-flex-middle" data-uk-grid-margin>  
5 - <div class="uk-width-medium-1-10 uk-height-viewport z-depth-viewport">  
6 - <h5 style="color: #868484;text-indent: 5px;">  
7 - 线路配车  
8 - </h5>  
9 - <div class="uk-accordion cc_info_accordion" data-uk-accordion data-uk-observe>  
10 - </div>  
11 -  
12 - </div>  
13 - <div class="uk-width-medium-2-10 uk-height-viewport z-depth-viewport " style="position: relative;">  
14 - <div class="play_back_form_shade uk-animation-scale"></div>  
15 - <form class="uk-form uk-form-horizontal playBackForm">  
16 - <div class="uk-grid">  
17 - <div class="uk-width-1-1">  
18 - <div class="uk-form-row">  
19 - <label class="uk-form-label">车辆编码</label>  
20 - <div class="uk-form-controls">  
21 - <div class="uk-autocomplete uk-form autocomplete-nbbm">  
22 - <div class="uk-autocomplete uk-form autocomplete-nbbm">  
23 - <input name="nbbm" required/>  
24 - </div>  
25 - </div>  
26 - </div>  
27 - </div>  
28 - </div>  
29 - </div>  
30 - <div class="uk-grid">  
31 - <div class="uk-width-2-3">  
32 - <div class="uk-form-row">  
33 - <label class="uk-form-label">开始时间</label>  
34 - <div class="uk-form-controls">  
35 - <input name="sDate" type="date" required/>  
36 - </div>  
37 - </div>  
38 - </div>  
39 - <div class="uk-width-1-3" style="padding-left: 15px;">  
40 - <div class="uk-form-row">  
41 - <div class="uk-form-controls" style="margin-left: 0;">  
42 - <input name="sTime" type="time" required/>  
43 - </div>  
44 - </div>  
45 - </div>  
46 - </div>  
47 - <div class="uk-grid">  
48 - <div class="uk-width-2-3">  
49 - <div class="uk-form-row">  
50 - <label class="uk-form-label">结束时间</label>  
51 - <div class="uk-form-controls">  
52 - <input name="eDate" type="date" required/>  
53 - </div>  
54 - </div>  
55 - </div>  
56 - <div class="uk-width-1-3" style="padding-left: 15px;">  
57 - <div class="uk-form-row">  
58 - <div class="uk-form-controls" style="margin-left: 0;">  
59 - <input name="eTime" type="time" required/>  
60 - </div>  
61 - </div>  
62 - </div>  
63 - </div>  
64 - <div class="uk-grid">  
65 - <button class="uk-button uk-button-large uk-button-primary playBackButton" type="submit"><i  
66 - class="uk-icon-search"> </i> 搜索轨迹  
67 - </button>  
68 - </div>  
69 - </form>  
70 - <!-- 异常警报 -->  
71 - <div class="abnormal_table_wrap">  
72 - <div class="abnormal_table_panel"  
73 - style="height: calc(100% - 15px);margin-top: 15px;overflow: auto;">  
74 - <div class="ct_table abnormal_table" style="height: calc(100% - 30px);">  
75 - <div class="ct_table_head">  
76 - <dl>  
77 - <dt>异常状态</dt>  
78 - <dt>开始时间</dt>  
79 - <dt>结束时间</dt>  
80 - <dt>图像</dt>  
81 - </dl>  
82 - </div>  
83 - <div class="ct_table_body">  
84 - </div>  
85 - </div>  
86 - </div>  
87 - </div>  
88 - <!-- 路段 和 到离站信息 -->  
89 - <div class="uk-margin uk-grid other_info_table_wrap" data-uk-grid-margin>  
90 - <div class="uk-width-medium-1-1" style="padding-left: 0;">  
91 -  
92 - <ul class="uk-tab" data-uk-tab="{connect:'#real_gps_info_tab_content'}"  
93 - style="padding-left: 12px;">  
94 - <li class="uk-active"><a>行车轨迹</a></li>  
95 - <li><a>到离站信息</a></li>  
96 - </ul>  
97 -  
98 - <ul id="real_gps_info_tab_content" class="uk-switcher uk-margin"  
99 - style="height: calc(100% - 44px);margin-top: 7px;">  
100 - <li class="uk-active" style="height: 100%;">  
101 - <div class="road_table_wrap" style="height: 100%;overflow: auto;">  
102 - <div class="ct_table gps-road-info"  
103 - style="height: calc(100% - 30px);">  
104 - <div class="ct_table_head">  
105 - <dl>  
106 - <dt>时间</dt>  
107 - <dt>速度</dt>  
108 - <dt>所在路段</dt>  
109 - </dl>  
110 - </div>  
111 - <div class="ct_table_body">  
112 - </div>  
113 - </div>  
114 - </div>  
115 - </li>  
116 - <!-- 到离站数据 -->  
117 - <li style="height: 100%;">  
118 - <div class="inout_table_wrap" style="height: 100%;overflow: auto;">  
119 - <div class="ct_table" style="height: calc(100% - 30px);">  
120 - <div class="ct_table_head">  
121 - <dl>  
122 - <dt>站点</dt>  
123 - <dt>到站时间</dt>  
124 - <dt>离站时间</dt>  
125 - <dt>上客</dt>  
126 - <dt>下客</dt>  
127 - </dl>  
128 - </div>  
129 - <div class="ct_table_body">  
130 - </div>  
131 - </div>  
132 - </div>  
133 - </li>  
134 - </ul>  
135 -  
136 - </div>  
137 - </div>  
138 - </div>  
139 - <div class="uk-width-medium-7-10 uk-height-viewport map-wrap" style="padding-left: 0;position: relative;">  
140 - <div class="map-wrap-tools uk-animation-slide-top">  
141 - <div class="btns">  
142 - <span class="ct_btn play_btn"></span>  
143 - <span class="ct_btn clock"></span>  
144 - <div class="multi-items">  
145 - <form class="uk-form speed_form">  
146 - <label>  
147 - <input type="radio" name="playSpeed" value="1"> x1  
148 - </label>  
149 - <label>  
150 - <input type="radio" name="playSpeed" value="5"> x5  
151 - </label>  
152 - <label>  
153 - <input type="radio" name="playSpeed" value="10"> x10  
154 - </label>  
155 - <label>  
156 - <input type="radio" name="playSpeed" value="20"> x20  
157 - </label>  
158 - </form>  
159 - </div>  
160 - <div class="multi-items">  
161 - <form class="uk-form buffer_area_form">  
162 - <label>  
163 - <input type="checkbox" name="drawPoint"> 站点  
164 - </label>  
165 - <label>  
166 - <input type="checkbox" name="drawBuffArea"> 缓冲区  
167 - </label>  
168 - <label>  
169 - <input type="checkbox" name="stationName"> 站点名称  
170 - </label>  
171 - <label>  
172 - <a>停车场 <i class="uk-icon-angle-down"></i></a>  
173 - </label>  
174 - </form>  
175 - </div>  
176 - <span class="ct_btn text-panel">  
177 - <span>共约 <span class="sum_mileage"></span> 公里,<span class="count_point"></span> 个GPS点</span><br>  
178 - <a class="export-excel"><i class="uk-icon-file-excel-o"></i> 导出轨迹</a>  
179 - </span>  
180 - </div>  
181 - <div class="ct-progress-bar" >  
182 - <div class="scale"></div>  
183 - </div>  
184 - </div>  
185 - <div class="map-container"></div>  
186 - </div>  
187 - </div>  
188 - </div>  
189 -  
190 - <script id="cc_info_accordion_cont_temp" type="text/html">  
191 - {{each ccInfo as cc i}}  
192 - <h3 class="uk-accordion-title">{{cc.name}}</h3>  
193 - <div class="uk-accordion-content">  
194 - <ul class="uk-list">  
195 - {{each cc.cars as c j}}  
196 - <li>{{c}}</li>  
197 - {{/each}}  
198 - </ul>  
199 - </div>  
200 - {{/each}}  
201 - </script>  
202 -  
203 - <script id="gps_road_info_cont_temp" type="text/html">  
204 - {{each array as gps i}}  
205 - <dl data-code="{{gps.road.road_CODE}}">  
206 - <dd>{{gps.timeStr}}</dd>  
207 - <dd>{{gps.speed}}</dd>  
208 - <dd>{{gps.road.road_NAME}}</dd>  
209 - </dl>  
210 - {{/each}}  
211 - </script>  
212 -  
213 - <script id="multi_inout_info_cont_temp" type="text/html">  
214 - {{each list as item i}}  
215 - <dl data-id="{{item.id}}">  
216 - <dd>{{item.stopName}}</dd>  
217 - <dd>{{item.in_time_str}}</dd>  
218 - <dd>{{item.out_time_str}}</dd>  
219 - <dd></dd>  
220 - <dd></dd>  
221 - </dl>  
222 - {{/each}}  
223 - </script>  
224 -  
225 - <script id="inout_info_cont_temp" type="text/html">  
226 - <dl data-id="{{id}}">  
227 - <dd>{{stopName}}</dd>  
228 - <dd>{{in_time_str}}</dd>  
229 - <dd></dd>  
230 - <dd></dd>  
231 - <dd></dd>  
232 - </dl>  
233 - </script>  
234 -  
235 -  
236 - <script id="abnormal_table_cont_temp" type="text/html">  
237 - {{each array as item i}}  
238 - <dl>  
239 - <dd>  
240 - {{if item.abnormalType == 'speed'}}  
241 - 超速({{item.speed}})  
242 - {{else if item.abnormalType == 'outbound'}}  
243 - 越界  
244 - {{/if}}  
245 - </dd>  
246 - <dd>{{item.st_str}}</dd>  
247 - <dd>{{item.et_str}}</dd>  
248 - <dd></dd>  
249 - </dl>  
250 - {{/each}}  
251 - </script>  
252 - <script>  
253 - (function () {  
254 - var modal = '#map-playback2-modal', gpsArray;  
255 -  
256 - $(modal).on('init', function (e, data) {  
257 - //初始化地图  
258 - mapObj.initMap();  
259 -  
260 - //固定表头  
261 - gb_ct_table.fixedHead($('.road_table_wrap', modal));  
262 - gb_ct_table.fixedHead($('.inout_table_wrap', modal));  
263 - gb_ct_table.fixedHead($('.abnormal_table_panel', modal));  
264 - //线路配车  
265 - ccInfo.init();  
266 -  
267 - //表单初始值  
268 - searchForm.init(data);  
269 -  
270 - //车辆 autocomplete  
271 - $.get('/basic/cars', function (rs) {  
272 - gb_common.carAutocomplete($('.autocomplete-nbbm', modal), rs);  
273 - });  
274 - });  
275 -  
276 - /**  
277 - * 线路配车相关  
278 - */  
279 - var ccInfo = (function () {  
280 -  
281 - function init() {  
282 - $.get('/basic/ccInfo', function (rs) {  
283 - var ccInfo = [], lines = gb_data_basic.codeToLine;  
284 - for (var code in lines) {  
285 - ccInfo.push({  
286 - name: lines[code].name,  
287 - cars: carSort(rs[code])  
288 - });  
289 - }  
290 -  
291 - var htmlStr = template('cc_info_accordion_cont_temp', {ccInfo: ccInfo});  
292 - $('.cc_info_accordion', modal).html(htmlStr)  
293 - .find('.uk-list li').on('click', itemClick);  
294 - });  
295 - }  
296 -  
297 - function carSort(list) {  
298 - if (!list)  
299 - return [];  
300 - return list.sort();  
301 - }  
302 -  
303 - function itemClick() {  
304 - $(this).parent().find('li.active').removeClass('active');  
305 - $(this).addClass('active');  
306 - searchForm.setNbbm($(this).text());  
307 - }  
308 -  
309 - return {  
310 - init: init  
311 - };  
312 - })();  
313 -  
314 - /**  
315 - * 搜索表单相关  
316 - */  
317 - var searchForm = (function () {  
318 -  
319 - var f = $('.playBackForm', modal);  
320 -  
321 - var init = function (data) {  
322 - //设置初始值  
323 - if (data.nbbm)  
324 - $('[name=nbbm]', f).val(data.nbbm);  
325 - var st = moment().subtract(2, 'hour');  
326 - if (data.st)  
327 - st = moment(data.st, 'YYYY-MM-DD HH:mm');  
328 - $('[name=sDate]', f).val(st.format('YYYY-MM-DD'));  
329 - $('[name=sTime]', f).val(st.format('HH:mm'));  
330 - var et = moment();  
331 - if (data.et)  
332 - et = moment(data.et, 'YYYY-MM-DD HH:mm');  
333 - $('[name=eDate]', f).val(et.format('YYYY-MM-DD'));  
334 - $('[name=eTime]', f).val(et.format('HH:mm'));  
335 -  
336 -  
337 - /*$('[name=nbbm]', f).val('W0A-018');  
338 - $('[name=sDate]', f).val('2017-04-06');  
339 - $('[name=sTime]', f).val('04:49');  
340 -  
341 - $('[name=eDate]', f).val('2017-04-06');  
342 - $('[name=eTime]', f).val('09:49');*/  
343 - //搜索事件  
344 - $('button[type=submit]', f).on('click', search);  
345 - };  
346 -  
347 - var setNbbm = function (v) {  
348 - $('[name=nbbm]', f).val(v);  
349 - };  
350 -  
351 - var ONE_DAY = 60 * 60 * 24;  
352 - var MIN_SPACE = 60;  
353 - var search = function (e) {  
354 - e.stopPropagation();  
355 - var data = f.serializeJSON();  
356 -  
357 - //校验时间间隔  
358 - var fs = 'YYYY-MM-DDHH:mm';  
359 - var st = parseInt(moment(data.sDate + data.sTime, fs).format('X'));  
360 - var et = parseInt(moment(data.eDate + data.eTime, fs).format('X'));  
361 -  
362 - if (et < st)  
363 - notify_err('结束时间不能小于开始时间');  
364 - else if ((et - st) > ONE_DAY)  
365 - notify_err('最大间隔24小时!');  
366 - else if ((et - st) < MIN_SPACE)  
367 - notify_err('最小间隔1分钟!');  
368 - else {  
369 - show_wait_modal('搜索数据...');  
370 - $.ajax({  
371 - url: '/gps/history_v2/' + data.nbbm,  
372 - traditional: true,  
373 - data: {st: st, et: et},  
374 - success: function (rs) {  
375 - hide_wait_modal();  
376 - //重置相关对象  
377 - playObj.reset();  
378 - mapObj.reset();  
379 -  
380 - gpsArray = rs.list;  
381 - if (!gpsArray || gpsArray.length == 0) {  
382 - notify_err('没有搜索到轨迹数据!');  
383 - return;  
384 - }  
385 -  
386 - //排序  
387 - gpsArray.sort(function (a, b) {  
388 - return parseInt((a.ts - b.ts) + '' + (a.stop_no - b.stop_no));  
389 - });  
390 - //行车轨迹  
391 - trailTableObj.showInitData(gpsArray);  
392 - //到离站信息  
393 - inOutStationTableObj.showInitData(gpsArray);  
394 - //异常信息  
395 - abnormalTableObj.showInitData(rs['outboundList'], rs['speedList']);  
396 - //show 工具条  
397 - mapTools.show(rs);  
398 - //地图  
399 - mapObj.initData(rs);  
400 - //play 对象  
401 - playObj.init(rs);  
402 - //设置导出文件名称  
403 - mapTools.setExcelName();  
404 - }  
405 - });  
406 - }  
407 - return false;  
408 - };  
409 -  
410 - //遮罩  
411 - var shade = $('.play_back_form_shade', modal);  
412 - var showShade = function () {  
413 - shade.show();  
414 - };  
415 - var hideShade = function () {  
416 - shade.hide();  
417 - };  
418 -  
419 - return {  
420 - init: init,  
421 - setNbbm: setNbbm,  
422 - showShade: showShade,  
423 - hideShade: hideShade  
424 - };  
425 - })();  
426 -  
427 - /**  
428 - * 行车轨迹表格  
429 - */  
430 - var trailTableObj = (function () {  
431 -  
432 - var $tbody = $('.gps-road-info .ct_table_body', modal);  
433 - var $wrap = $('.road_table_wrap', modal);  
434 - var initFlag, gpsArray;  
435 - var showInitData = function (list) {  
436 - var array = [];  
437 - for (var i = 0, gps; gps = list[i++];) {  
438 - //格式化时间  
439 - gps.timeStr = moment(gps.timestamp).format('HH:mm.ss');  
440 - try {  
441 - if (i > 0 && array[array.length - 1].road.road_CODE == gps.road.road_CODE)  
442 - array.pop();  
443 - }  
444 - catch (e) {  
445 - }  
446 -  
447 - if (gps.road)  
448 - array.push(gps);  
449 - }  
450 -  
451 - var htmlStr = template('gps_road_info_cont_temp', {array: array});  
452 - $tbody.html(htmlStr);  
453 - initFlag = true;  
454 - gpsArray = list;  
455 - };  
456 -  
457 - var prev;  
458 - var add = function (gps, i) {  
459 - if(i == 0)  
460 - return;  
461 - if(initFlag){  
462 - //清理初始化的数据  
463 - $tbody.html('');  
464 - initFlag = false;  
465 - }  
466 - if (!gps.road)  
467 - return;  
468 - var code = gps.road.road_CODE;  
469 - if (!prev || code != prev.road.road_CODE) {  
470 - $tbody.append(template('gps_road_info_cont_temp', {array: [gps]}));  
471 - }  
472 - else{  
473 - var dds = $tbody.find('dl[data-code=' + code + ']').last().find('dd');  
474 - $(dds[0]).text(gps.timeStr);  
475 - $(dds[1]).text(gps.speed);  
476 - }  
477 - prev = gps;  
478 - $wrap.scrollTop($wrap[0].scrollHeight);  
479 - };  
480 -  
481 - return {  
482 - showInitData: showInitData,  
483 - add : add,  
484 - gpsArray : function () {  
485 - return gpsArray;  
486 - }  
487 - };  
488 - })();  
489 -  
490 - /**  
491 - * 到离站信息表格  
492 - * @type {{}}  
493 - */  
494 - var inOutStationTableObj = (function () {  
495 -  
496 - var data, f, prev, initFlag;  
497 - var $wrap = $('.inout_table_wrap', modal);  
498 - var $tbody = $('.ct_table_body', $wrap);  
499 - var showInitData = function (list) {  
500 - clear();  
501 - data = [];  
502 - $.each(list, function (i, gps) {  
503 - prev = data[data.length - 1];  
504 - if (gps['inout_stop'] == -1)  
505 - return true;  
506 - if (gps['inout_stop'] == 0 && gps['inout_stop_info']) {  
507 - //连续进站信号,取第一个  
508 - if(prev && prev['out_ts'] == null  
509 - && prev['stopName'] == gps['inout_stop_info'].stopName){  
510 - return true;  
511 - }  
512 - data.push(createIn(gps));  
513 - }  
514 - else if (gps['inout_stop'] == 1) {  
515 - f = matchOut(prev, gps);  
516 - if(f)  
517 - data.push(f);  
518 - }  
519 - });  
520 - //格式化时间  
521 - $.each(data, function (i) {  
522 - if (this.in_ts)  
523 - this.in_time_str = moment(this.in_ts).format('HH:mm.ss');  
524 - if (this.out_ts)  
525 - this.out_time_str = moment(this.out_ts).format('HH:mm.ss');  
526 - //id  
527 - this.id = 'in_out_' + i;  
528 - });  
529 - var htmlStr = template('multi_inout_info_cont_temp', {list: data});  
530 - $tbody.html(htmlStr);  
531 - initFlag = true;  
532 - len = data.length;  
533 - };  
534 -  
535 - var inoutIndex=0, len, item;  
536 - var add = function (gps, i) {  
537 - if(i == 0)  
538 - return;  
539 - if(initFlag)  
540 - clear();  
541 -  
542 - var $dl;  
543 - for(j = inoutIndex; j < len; j++){  
544 - item = data[j];  
545 - $dl = $tbody.find('dl[data-id='+item.id+']');  
546 - if(gps.ts >= item.in_ts && $dl.length==0){  
547 - $tbody.append(template('inout_info_cont_temp', item));  
548 - inoutIndex = j;  
549 - }  
550 -  
551 - if(gps.ts >= item.out_ts){  
552 - var dds = $dl.find('dd');  
553 - if($dl.length==0)  
554 - $tbody.append(template('inout_info_cont_temp', item));  
555 - else  
556 - $(dds[2]).text(item.out_time_str);  
557 - inoutIndex = j;  
558 - }  
559 - else {  
560 - break;  
561 - }  
562 - }  
563 - $wrap.scrollTop($wrap[0].scrollHeight);  
564 - };  
565 -  
566 - var clear = function () {  
567 - $tbody.html('');  
568 - initFlag = false;  
569 - };  
570 -  
571 - var createIn = function (gps) {  
572 - var info = gps['inout_stop_info'];  
573 - return {in_ts: info.ts, stopNo: info.stopNo, stopName: info.stopName}  
574 - };  
575 -  
576 - var matchOut = function (prevInfo, gps) {  
577 - var oi = gps['inout_stop_info'];  
578 - if(!oi)  
579 - return;  
580 - if(prevInfo && prevInfo.stopName == oi.stopName){  
581 - prevInfo['out_ts'] = oi.ts;  
582 - return null;  
583 - }  
584 - else {  
585 - return {out_ts: oi.ts,stopNo: oi.stopNo,stopName: oi.stopName}  
586 - }  
587 - };  
588 -  
589 - return {  
590 - showInitData: showInitData,  
591 - add: add  
592 - };  
593 - })();  
594 -  
595 - /**  
596 - * 异常信息表格  
597 - * @type {{showInitData}}  
598 - */  
599 - var abnormalTableObj = (function () {  
600 -  
601 - var showInitData = function () {  
602 - var array = [];  
603 - for(var i = 0; i < arguments.length; i ++){  
604 - array = array.concat(arguments[i]);  
605 - }  
606 - //格式化时间  
607 - $.each(array, function () {  
608 - if(this.st)  
609 - this.st_str = moment(this.st).format('HH:mm.ss');  
610 - if(this.et)  
611 - this.et_str = moment(this.et).format('HH:mm.ss');  
612 - });  
613 -  
614 - //排序  
615 - array.sort(function (a, b) {  
616 - return a.st - b.st;  
617 - });  
618 -  
619 - var htmlStr = template('abnormal_table_cont_temp', {array: array});  
620 - $('.abnormal_table .ct_table_body', modal).html(htmlStr);  
621 - };  
622 -  
623 - return {  
624 - showInitData: showInitData  
625 - }  
626 - })();  
627 -  
628 - /**  
629 - * 工具条相关  
630 - */  
631 - var mapTools = (function () {  
632 -  
633 - $('.map-wrap-tools .play_btn', modal).on('click', function () {  
634 - if($(this).hasClass('play')){  
635 - //暂停  
636 - $(this).removeClass('play');  
637 - playObj.pause();  
638 - searchForm.hideShade();  
639 - }  
640 - else {  
641 - //播放  
642 - $(this).addClass('play');  
643 - playObj.play();  
644 - playObj.fixedToCenter();  
645 - searchForm.showShade();  
646 - }  
647 - });  
648 -  
649 - //播放速度  
650 - $('.speed_form input[name=playSpeed]', modal).on('click', function () {  
651 - playObj.setConf('playSpeed', $(this).val());  
652 - });  
653 -  
654 - //空间数据  
655 - $('.buffer_area_form input[type=checkbox]', modal).on('click', function () {  
656 - playObj.setConf($(this).attr('name'), $(this)[0].checked);  
657 - mapObj.refreshOverlay();  
658 - });  
659 -  
660 - //进度条  
661 - var step, $scale = $('.ct-progress-bar .scale', modal);  
662 - var upProgressBar = function (i) {  
663 - $scale.css('width', step * (i + 1));  
664 - };  
665 -  
666 - //导出  
667 - $('.export-excel', modal).on('click', function () {  
668 - var base64Str = gb_map_play_back.listToExcel(trailTableObj.gpsArray());  
669 - $(this).attr('href', base64Str);  
670 - });  
671 -  
672 - var setExcelName = function () {  
673 - var f = $('.playBackForm', modal);  
674 - var fileName = ($('[name=nbbm]', f).val() + '轨迹数据' + $('[name=sDate]', f).val() + $('[name=sTime]', f).val() + '至' + $('[name=eDate]', f).val() + $('[name=eTime]', f).val() + '.xls').replace(new RegExp(/-/g),'').replace(new RegExp(/:/g),'');  
675 - $('.export-excel', modal).attr('download', fileName);  
676 - };  
677 -  
678 - var gpsArray;  
679 - var show = function (rs) {  
680 - $('.map-wrap-tools').show();  
681 - $('.map-container', modal).addClass('show_tools');  
682 - //总里程  
683 - $('.text-panel .sum_mileage', modal).text(rs.sumMileage);  
684 -  
685 - var size = rs.list.length;  
686 - $('.text-panel .count_point', modal).text(size);  
687 - step = $('.ct-progress-bar', modal).width() / size;  
688 -  
689 - //console.log('stepstep', step);  
690 - };  
691 -  
692 - return {  
693 - show: show,  
694 - upProgressBar: upProgressBar,  
695 - setExcelName: setExcelName  
696 - }  
697 - })();  
698 -  
699 - /**  
700 - * 地图相关  
701 - */  
702 - var mapObj = (function () {  
703 - var map;  
704 - var initMap = function () {  
705 - //初始化地图  
706 - map = new BMap.Map($('.map-container', modal)[0]);  
707 - //中心点和缩放级别  
708 - map.centerAndZoom(new BMap.Point(gb_map_consts.center_point.lng, gb_map_consts.center_point.lat), 16);  
709 - map.enableScrollWheelZoom();  
710 - }  
711 -  
712 - var storage = window.localStorage;  
713 - var routes;//路段  
714 - var stations;//站点  
715 - var parks;//停车场  
716 -  
717 - var initData = function (rs) {  
718 - var gpsArray = rs.list;  
719 - if(!gpsArray || gpsArray.length==0)  
720 - return;  
721 - var lineCode = gpsArray[0].lineId;  
722 - //从地图模块获取站点数据  
723 - stations = gb_map_spatial_data.getStationArray(lineCode);  
724 - //从地图模块获取停车场数据  
725 - parks = gb_map_spatial_data.carparkArray();  
726 - //从localStorage 获取路段  
727 - routes = JSON.parse(storage.getItem(lineCode + '_route'));  
728 - routes = [routes.up_bd, routes.down_bd];  
729 - };  
730 -  
731 -  
732 - /**  
733 - * 更新车辆位置  
734 - */  
735 - var gpsMarker;  
736 - var updateCar = function (gps) {  
737 - if(!gpsMarker){  
738 - gpsMarker = new BMap.Marker(new BMap.Point(gps.bd_lon, gps.bd_lat));  
739 - var width = gb_map_imap.calcGpsMarkerWidth(gps.nbbm);  
740 - gpsMarker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));  
741 - gpsMarker.disableMassClear();//禁止marker被清除  
742 - gpsMarker.setTop(true);  
743 - map.addOverlay(gpsMarker);  
744 - //居中  
745 - map.panTo(gpsMarker.getPosition());  
746 - }  
747 - else{  
748 - gpsMarker.setPosition(new BMap.Point(gps.bd_lon, gps.bd_lat));  
749 - var width = gb_map_imap.calcGpsMarkerWidth(gps.nbbm);  
750 - gpsMarker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));  
751 - }  
752 -  
753 - //更新路段底图  
754 - if(gps.upDown!=roadUpdown){  
755 - switchPolyline(gps.upDown);  
756 - //清除轨迹线  
757 - trailArray = [];  
758 - }  
759 - };  
760 -  
761 - /**  
762 - * 绘制轨迹线  
763 - */  
764 - var trailArray=[], trailPolyline;  
765 - var updateTrailLine = function () {  
766 - trailArray.push(gpsMarker.getPosition());  
767 - if(!trailPolyline){  
768 - trailPolyline = new BMap.Polyline(trailArray, {strokeWeight: 3, strokeColor: '#000000'});  
769 - trailPolyline.disableMassClear();//禁止trailPolyline被清除  
770 - map.addOverlay(trailPolyline);  
771 - }  
772 - else{  
773 - trailPolyline.setPath(trailArray);  
774 - }  
775 - };  
776 -  
777 - /**  
778 - * 绘制路段底图(包括站点)  
779 - */  
780 - var roadUpdown=-1;  
781 - var switchPolyline = function (upDown) {  
782 - if(typeof(upDown) == "undefined")  
783 - upDown = roadUpdown;  
784 -  
785 - map.clearOverlays();  
786 - //路段  
787 - drawRoadPolyline(upDown);  
788 - //站点  
789 - if(playObj.getConf().drawPoint)  
790 - drawStationPoint(upDown);  
791 - //缓冲区  
792 - if(playObj.getConf().drawBuffArea)  
793 - drawStationBfArea(upDown);  
794 - //站点名称  
795 - if(playObj.getConf().stationName)  
796 - drawStationName(upDown);  
797 - roadUpdown = upDown;  
798 - };  
799 -  
800 - /**  
801 - * 根据走向绘制路段  
802 - */  
803 - var drawRoadPolyline = function (upDown) {  
804 - var colour = gb_map_config.getConfig().section.color;  
805 - var plConfig = {strokeWeight: 12, strokeColor: upDown?colour.down:colour.up, strokeOpacity: .4}, pos;  
806 - $.each(routes[upDown], function (i, item) {  
807 - pos = [];  
808 - $.each(item.split(','), function () {  
809 - temps = this.split(' ');  
810 - pos.push(new BMap.Point(temps[0], temps[1]));  
811 - });  
812 - map.addOverlay(new BMap.Polyline(pos, plConfig));  
813 - });  
814 - };  
815 -  
816 - /**  
817 - * 根据走向绘制站点点位  
818 - */  
819 - var drawStationPoint = function (upDown) {  
820 - var array = stations[upDown], psm;  
821 - $.each(array, function () {  
822 - //坐标转换  
823 - var coord = TransGPS.wgsToBD(this.lat, this.lon);  
824 - this.bd_lat = coord.lat;  
825 - this.bd_lon = coord.lng;  
826 - psm = new BMap.Marker(new BMap.Point(this.bd_lon, this.bd_lat));  
827 - psm.setTitle(this.stationName);  
828 - map.addOverlay(psm);  
829 - psm.setIcon(new BMap.Icon(gb_map_imap.createStationPointIcon(), new BMap.Size(12, 12)));  
830 - });  
831 - };  
832 -  
833 - /**  
834 - * 为站点绘制缓冲区  
835 - */  
836 - var drawStationBfArea = function (upDown) {  
837 - var array = stations[upDown];  
838 - $.each(array, function () {  
839 - if(this.shapesType=='r')  
840 - drawCircle(new BMap.Point(this.bd_lon, this.bd_lat), this.radius);  
841 - else if(this.shapesType=='d')  
842 - drawPolygon(this);  
843 - });  
844 - };  
845 -  
846 - /**  
847 - * 绘制站点名称  
848 - */  
849 - var drawStationName = function (upDown) {  
850 - var style = {backgroundColor: "rgba(255, 255, 255, 0.69)",color : "black", borderColor: "black", fontSize : "12px", height : "16px", lineHeight : "16px", fontFamily:"微软雅黑"}  
851 - var array = stations[upDown];  
852 - $.each(array, function () {  
853 - var width = this.stationName.length * 12;  
854 - var label = new BMap.Label(this.stationName, {  
855 - position:new BMap.Point(this.bd_lon, this.bd_lat),  
856 - offset: new BMap.Size(-(width / 2), -27)  
857 - });  
858 - label.setStyle(style);  
859 - map.addOverlay(label);  
860 - });  
861 - };  
862 - var drawCircle = function (point, radius) {  
863 - var circle = new BMap.Circle(point, radius);  
864 - circle.setStrokeColor('#000000');  
865 - circle.setStrokeWeight(1);  
866 - map.addOverlay(circle);  
867 - };  
868 -  
869 - var drawPolygon = function () {  
870 -  
871 - };  
872 -  
873 - /**  
874 - * 重置  
875 - */  
876 - var reset = function () {  
877 - if(trailPolyline)  
878 - trailPolyline.enableMassClear();  
879 - if(gpsMarker)  
880 - gpsMarker.enableMassClear();  
881 - map.clearOverlays();  
882 - roadUpdown = -1;  
883 - trailArray=[];  
884 - trailPolyline = null;  
885 - gpsMarker = null;  
886 - };  
887 -  
888 - /**  
889 - * 居中车辆,超出边界时  
890 - */  
891 - var toCenterByBounds = function () {  
892 - var markerIsVisible = BMapLib.GeoUtils.isPointInRect(gpsMarker.getPosition(),map.getBounds());  
893 - if(!markerIsVisible)  
894 - map.panTo(gpsMarker.getPosition());  
895 - };  
896 - return {  
897 - initData: initData,  
898 - updateCar: updateCar,  
899 - initMap: initMap,  
900 - updateTrailLine: updateTrailLine,  
901 - refreshOverlay: switchPolyline,  
902 - toCenterByBounds: toCenterByBounds,  
903 - reset: reset  
904 - }  
905 - })();  
906 -  
907 - /**  
908 - * 播放相关  
909 - * @type {{}}  
910 - */  
911 - var playObj = (function () {  
912 - var conf = {  
913 - playSpeed: 1,//播放速度  
914 - drawPoint: 1,//绘制站点  
915 - drawBuffArea: 1 ,//缓冲区  
916 - stationName: 0, //站点名称  
917 - carPark: [] //停车场  
918 - };  
919 -  
920 - var gpsArray;//gps点位集合  
921 - var init = function (rs) {  
922 - gpsArray = rs.list;  
923 - if(!gpsArray || gpsArray.length==0)  
924 - return;  
925 -  
926 - len = gpsArray.length;  
927 - //渲染配置信息  
928 - renderConfig();  
929 - //播放第一个点  
930 - run();  
931 - };  
932 -  
933 - var renderConfig = function () {  
934 - $('.speed_form [name=playSpeed][value='+conf.playSpeed+']', modal)[0].checked = true;  
935 - $('.buffer_area_form input[type=checkbox]', modal).each(function () {  
936 - var name = $(this).attr('name');  
937 - $(this)[0].checked = conf[name];  
938 - });  
939 - };  
940 -  
941 - /**  
942 - * 播放函数  
943 - */  
944 - var runTimer; //播放定时器  
945 - var toCenterTimer;//居中定时器  
946 - var index = 0; //gps下标  
947 - var play = function () {  
948 - if(!run())  
949 - runTimer = setTimeout(play, 1000 / conf.playSpeed);  
950 - };  
951 -  
952 - /**  
953 - * 定时居中  
954 - */  
955 - var fixedToCenter = function () {  
956 - toCenterTimer = setInterval(function () {  
957 - mapObj.toCenterByBounds();  
958 - }, 500);  
959 - };  
960 -  
961 - var pause = function () {  
962 - clearInterval(runTimer);  
963 - runTimer = null;  
964 - clearInterval(toCenterTimer);  
965 - toCenterTimer = null;  
966 - };  
967 -  
968 - var clock = $('.ct_btn.clock', modal), gps, len;  
969 - var run = function () {  
970 - if(index == len){  
971 - $('.map-wrap-tools .play_btn', modal).removeClass('play');  
972 - pause();  
973 - notify_succ('本次轨迹回放已结束!');  
974 - searchForm.hideShade();  
975 - return true;  
976 - }  
977 - gps = gpsArray[index];  
978 - //更新GPS点位  
979 - mapObj.updateCar(gps);  
980 - //绘制轨迹线  
981 - mapObj.updateTrailLine();  
982 - //时间文本  
983 - clock.text(gps.timeStr);  
984 - //输出行车轨迹  
985 - trailTableObj.add(gps, index);  
986 - //输出到离站信息  
987 - inOutStationTableObj.add(gps, index);  
988 - //进度条  
989 - mapTools.upProgressBar(index);  
990 - index ++;  
991 - };  
992 -  
993 - /**  
994 - * 重置  
995 - */  
996 - var reset = function () {  
997 - index = 0;  
998 - gpsArray = null;  
999 - pause();  
1000 - };  
1001 - return {  
1002 - init: init,  
1003 - getConf: function () {  
1004 - return conf;  
1005 - },  
1006 - setConf: function (k, v) {  
1007 - conf[k] = v;  
1008 - },  
1009 - play: play,  
1010 - fixedToCenter: fixedToCenter,  
1011 - pause: pause,  
1012 - reset: reset  
1013 - }  
1014 - })();  
1015 - })();  
1016 - </script> 1 +<div class="uk-modal" id="map-playback2-modal">
  2 + <div class="uk-modal-dialog uk-modal-dialog-blank">
  3 + <button class="uk-modal-close uk-close" type="button"></button>
  4 + <div class="uk-grid uk-flex-middle" data-uk-grid-margin>
  5 + <div class="uk-width-medium-1-10 uk-height-viewport z-depth-viewport">
  6 + <h5 style="color: #868484;text-indent: 5px;">
  7 + 线路配车
  8 + </h5>
  9 + <div class="uk-accordion cc_info_accordion" data-uk-accordion data-uk-observe>
  10 + </div>
  11 +
  12 + </div>
  13 + <div class="uk-width-medium-2-10 uk-height-viewport z-depth-viewport " style="position: relative;">
  14 + <div class="play_back_form_shade uk-animation-scale"></div>
  15 + <form class="uk-form uk-form-horizontal playBackForm">
  16 + <div class="uk-grid">
  17 + <div class="uk-width-1-1">
  18 + <div class="uk-form-row">
  19 + <label class="uk-form-label">车辆编码</label>
  20 + <div class="uk-form-controls">
  21 + <div class="uk-autocomplete uk-form autocomplete-nbbm">
  22 + <div class="uk-autocomplete uk-form autocomplete-nbbm">
  23 + <input name="nbbm" required/>
  24 + </div>
  25 + </div>
  26 + </div>
  27 + </div>
  28 + </div>
  29 + </div>
  30 + <div class="uk-grid">
  31 + <div class="uk-width-2-3">
  32 + <div class="uk-form-row">
  33 + <label class="uk-form-label">开始时间</label>
  34 + <div class="uk-form-controls">
  35 + <input name="sDate" type="date" required/>
  36 + </div>
  37 + </div>
  38 + </div>
  39 + <div class="uk-width-1-3" style="padding-left: 15px;">
  40 + <div class="uk-form-row">
  41 + <div class="uk-form-controls" style="margin-left: 0;">
  42 + <input name="sTime" type="time" required/>
  43 + </div>
  44 + </div>
  45 + </div>
  46 + </div>
  47 + <div class="uk-grid">
  48 + <div class="uk-width-2-3">
  49 + <div class="uk-form-row">
  50 + <label class="uk-form-label">结束时间</label>
  51 + <div class="uk-form-controls">
  52 + <input name="eDate" type="date" required/>
  53 + </div>
  54 + </div>
  55 + </div>
  56 + <div class="uk-width-1-3" style="padding-left: 15px;">
  57 + <div class="uk-form-row">
  58 + <div class="uk-form-controls" style="margin-left: 0;">
  59 + <input name="eTime" type="time" required/>
  60 + </div>
  61 + </div>
  62 + </div>
  63 + </div>
  64 + <div class="uk-grid">
  65 + <button class="uk-button uk-button-large uk-button-primary playBackButton" type="submit"><i
  66 + class="uk-icon-search"> </i> 搜索轨迹
  67 + </button>
  68 + </div>
  69 + </form>
  70 + <!-- 异常警报 -->
  71 + <div class="abnormal_table_wrap">
  72 + <div class="abnormal_table_panel"
  73 + style="height: calc(100% - 15px);margin-top: 15px;overflow: auto;">
  74 + <div class="ct_table abnormal_table" style="height: calc(100% - 30px);">
  75 + <div class="ct_table_head">
  76 + <dl>
  77 + <dt>异常状态</dt>
  78 + <dt>开始时间</dt>
  79 + <dt>结束时间</dt>
  80 + <dt>图像</dt>
  81 + </dl>
  82 + </div>
  83 + <div class="ct_table_body">
  84 + </div>
  85 + </div>
  86 + </div>
  87 + </div>
  88 + <!-- 路段 和 到离站信息 -->
  89 + <div class="uk-margin uk-grid other_info_table_wrap" data-uk-grid-margin>
  90 + <div class="uk-width-medium-1-1" style="padding-left: 0;">
  91 +
  92 + <ul class="uk-tab" data-uk-tab="{connect:'#real_gps_info_tab_content'}"
  93 + style="padding-left: 12px;">
  94 + <li class="uk-active"><a>行车轨迹</a></li>
  95 + <li><a>到离站信息</a></li>
  96 + </ul>
  97 +
  98 + <ul id="real_gps_info_tab_content" class="uk-switcher uk-margin"
  99 + style="height: calc(100% - 44px);margin-top: 7px;">
  100 + <li class="uk-active" style="height: 100%;">
  101 + <div class="road_table_wrap" style="height: 100%;overflow: auto;">
  102 + <div class="ct_table gps-road-info"
  103 + style="height: calc(100% - 30px);">
  104 + <div class="ct_table_head">
  105 + <dl>
  106 + <dt>时间</dt>
  107 + <dt>速度</dt>
  108 + <dt>所在路段</dt>
  109 + </dl>
  110 + </div>
  111 + <div class="ct_table_body">
  112 + </div>
  113 + </div>
  114 + </div>
  115 + </li>
  116 + <!-- 到离站数据 -->
  117 + <li style="height: 100%;">
  118 + <div class="inout_table_wrap" style="height: 100%;overflow: auto;">
  119 + <div class="ct_table" style="height: calc(100% - 30px);">
  120 + <div class="ct_table_head">
  121 + <dl>
  122 + <dt>站点</dt>
  123 + <dt>到站时间</dt>
  124 + <dt>离站时间</dt>
  125 + <dt>上客</dt>
  126 + <dt>下客</dt>
  127 + </dl>
  128 + </div>
  129 + <div class="ct_table_body">
  130 + </div>
  131 + </div>
  132 + </div>
  133 + </li>
  134 + </ul>
  135 +
  136 + </div>
  137 + </div>
  138 + </div>
  139 + <div class="uk-width-medium-7-10 uk-height-viewport map-wrap" style="padding-left: 0;position: relative;">
  140 + <div class="map-wrap-tools uk-animation-slide-top">
  141 + <div class="btns">
  142 + <span class="ct_btn play_btn"></span>
  143 + <span class="ct_btn clock"></span>
  144 + <div class="multi-items">
  145 + <form class="uk-form speed_form">
  146 + <label>
  147 + <input type="radio" name="playSpeed" value="1"> x1
  148 + </label>
  149 + <label>
  150 + <input type="radio" name="playSpeed" value="5"> x5
  151 + </label>
  152 + <label>
  153 + <input type="radio" name="playSpeed" value="10"> x10
  154 + </label>
  155 + <label>
  156 + <input type="radio" name="playSpeed" value="20"> x20
  157 + </label>
  158 + </form>
  159 + </div>
  160 + <div class="multi-items">
  161 + <form class="uk-form buffer_area_form">
  162 + <label>
  163 + <input type="checkbox" name="drawPoint"> 站点
  164 + </label>
  165 + <label>
  166 + <input type="checkbox" name="drawBuffArea"> 缓冲区
  167 + </label>
  168 + <label>
  169 + <input type="checkbox" name="stationName"> 站点名称
  170 + </label>
  171 + <label>
  172 + <a>停车场 <i class="uk-icon-angle-down"></i></a>
  173 + </label>
  174 + </form>
  175 + </div>
  176 + <span class="ct_btn text-panel">
  177 + <span>共约 <span class="sum_mileage"></span> 公里,<span class="count_point"></span> 个GPS点</span><br>
  178 + <a class="export-excel"><i class="uk-icon-file-excel-o"></i> 导出轨迹</a>
  179 + </span>
  180 + </div>
  181 + <div class="ct-progress-bar" >
  182 + <div class="scale"></div>
  183 + </div>
  184 + </div>
  185 + <div class="map-container"></div>
  186 + </div>
  187 + </div>
  188 + </div>
  189 +
  190 + <script id="cc_info_accordion_cont_temp" type="text/html">
  191 + {{each ccInfo as cc i}}
  192 + <h3 class="uk-accordion-title">{{cc.name}}</h3>
  193 + <div class="uk-accordion-content">
  194 + <ul class="uk-list">
  195 + {{each cc.cars as c j}}
  196 + <li>{{c}}</li>
  197 + {{/each}}
  198 + </ul>
  199 + </div>
  200 + {{/each}}
  201 + </script>
  202 +
  203 + <script id="gps_road_info_cont_temp" type="text/html">
  204 + {{each array as gps i}}
  205 + <dl data-code="{{gps.road.road_CODE}}">
  206 + <dd>{{gps.timeStr}}</dd>
  207 + <dd>{{gps.speed}}</dd>
  208 + <dd>{{gps.road.road_NAME}}</dd>
  209 + </dl>
  210 + {{/each}}
  211 + </script>
  212 +
  213 + <script id="multi_inout_info_cont_temp" type="text/html">
  214 + {{each list as item i}}
  215 + <dl data-id="{{item.id}}">
  216 + <dd>{{item.stopName}}</dd>
  217 + <dd>{{item.in_time_str}}</dd>
  218 + <dd>{{item.out_time_str}}</dd>
  219 + <dd></dd>
  220 + <dd></dd>
  221 + </dl>
  222 + {{/each}}
  223 + </script>
  224 +
  225 + <script id="inout_info_cont_temp" type="text/html">
  226 + <dl data-id="{{id}}">
  227 + <dd>{{stopName}}</dd>
  228 + <dd>{{in_time_str}}</dd>
  229 + <dd></dd>
  230 + <dd></dd>
  231 + <dd></dd>
  232 + </dl>
  233 + </script>
  234 +
  235 +
  236 + <script id="abnormal_table_cont_temp" type="text/html">
  237 + {{each array as item i}}
  238 + <dl>
  239 + <dd>
  240 + {{if item.abnormalType == 'speed'}}
  241 + 超速({{item.speed}})
  242 + {{else if item.abnormalType == 'outbound'}}
  243 + 越界
  244 + {{/if}}
  245 + </dd>
  246 + <dd>{{item.st_str}}</dd>
  247 + <dd>{{item.et_str}}</dd>
  248 + <dd></dd>
  249 + </dl>
  250 + {{/each}}
  251 + </script>
  252 + <script>
  253 + (function () {
  254 + var modal = '#map-playback2-modal', gpsArray;
  255 +
  256 + $(modal).on('init', function (e, data) {
  257 + //初始化地图
  258 + mapObj.initMap();
  259 +
  260 + //固定表头
  261 + gb_ct_table.fixedHead($('.road_table_wrap', modal));
  262 + gb_ct_table.fixedHead($('.inout_table_wrap', modal));
  263 + gb_ct_table.fixedHead($('.abnormal_table_panel', modal));
  264 + //线路配车
  265 + ccInfo.init();
  266 +
  267 + //表单初始值
  268 + searchForm.init(data);
  269 +
  270 + //车辆 autocomplete
  271 + $.get('/basic/cars', function (rs) {
  272 + gb_common.carAutocomplete($('.autocomplete-nbbm', modal), rs);
  273 + });
  274 + });
  275 +
  276 + /**
  277 + * 线路配车相关
  278 + */
  279 + var ccInfo = (function () {
  280 +
  281 + function init() {
  282 + $.get('/basic/ccInfo', function (rs) {
  283 + var ccInfo = [], lines = gb_data_basic.codeToLine;
  284 + for (var code in lines) {
  285 + ccInfo.push({
  286 + name: lines[code].name,
  287 + cars: carSort(rs[code])
  288 + });
  289 + }
  290 +
  291 + var htmlStr = template('cc_info_accordion_cont_temp', {ccInfo: ccInfo});
  292 + $('.cc_info_accordion', modal).html(htmlStr)
  293 + .find('.uk-list li').on('click', itemClick);
  294 + });
  295 + }
  296 +
  297 + function carSort(list) {
  298 + if (!list)
  299 + return [];
  300 + return list.sort();
  301 + }
  302 +
  303 + function itemClick() {
  304 + $(this).parent().find('li.active').removeClass('active');
  305 + $(this).addClass('active');
  306 + searchForm.setNbbm($(this).text());
  307 + }
  308 +
  309 + return {
  310 + init: init
  311 + };
  312 + })();
  313 +
  314 + /**
  315 + * 搜索表单相关
  316 + */
  317 + var searchForm = (function () {
  318 +
  319 + var f = $('.playBackForm', modal);
  320 +
  321 + var init = function (data) {
  322 + //设置初始值
  323 + if (data.nbbm)
  324 + $('[name=nbbm]', f).val(data.nbbm);
  325 + var st = moment().subtract(2, 'hour');
  326 + if (data.st)
  327 + st = moment(data.st, 'YYYY-MM-DD HH:mm');
  328 + $('[name=sDate]', f).val(st.format('YYYY-MM-DD'));
  329 + $('[name=sTime]', f).val(st.format('HH:mm'));
  330 + var et = moment();
  331 + if (data.et)
  332 + et = moment(data.et, 'YYYY-MM-DD HH:mm');
  333 + $('[name=eDate]', f).val(et.format('YYYY-MM-DD'));
  334 + $('[name=eTime]', f).val(et.format('HH:mm'));
  335 +
  336 +
  337 + /*$('[name=nbbm]', f).val('W0A-018');
  338 + $('[name=sDate]', f).val('2017-04-06');
  339 + $('[name=sTime]', f).val('04:49');
  340 +
  341 + $('[name=eDate]', f).val('2017-04-06');
  342 + $('[name=eTime]', f).val('09:49');*/
  343 + //搜索事件
  344 + $('button[type=submit]', f).on('click', search);
  345 + };
  346 +
  347 + var setNbbm = function (v) {
  348 + $('[name=nbbm]', f).val(v);
  349 + };
  350 +
  351 + var ONE_DAY = 60 * 60 * 24;
  352 + var MIN_SPACE = 60;
  353 + var search = function (e) {
  354 + e.stopPropagation();
  355 + var data = f.serializeJSON();
  356 +
  357 + //校验时间间隔
  358 + var fs = 'YYYY-MM-DDHH:mm';
  359 + var st = parseInt(moment(data.sDate + data.sTime, fs).format('X'));
  360 + var et = parseInt(moment(data.eDate + data.eTime, fs).format('X'));
  361 +
  362 + if (et < st)
  363 + notify_err('结束时间不能小于开始时间');
  364 + else if ((et - st) > ONE_DAY)
  365 + notify_err('最大间隔24小时!');
  366 + else if ((et - st) < MIN_SPACE)
  367 + notify_err('最小间隔1分钟!');
  368 + else {
  369 + show_wait_modal('搜索数据...');
  370 + $.ajax({
  371 + url: '/gps/history_v2/' + data.nbbm,
  372 + traditional: true,
  373 + data: {st: st, et: et},
  374 + success: function (rs) {
  375 + hide_wait_modal();
  376 + //重置相关对象
  377 + playObj.reset();
  378 + mapObj.reset();
  379 +
  380 + gpsArray = rs.list;
  381 + if (!gpsArray || gpsArray.length == 0) {
  382 + notify_err('没有搜索到轨迹数据!');
  383 + return;
  384 + }
  385 +
  386 + //排序
  387 + gpsArray.sort(function (a, b) {
  388 + return parseInt((a.ts - b.ts) + '' + (a.stop_no - b.stop_no));
  389 + });
  390 + //行车轨迹
  391 + trailTableObj.showInitData(gpsArray);
  392 + //到离站信息
  393 + inOutStationTableObj.showInitData(gpsArray);
  394 + //异常信息
  395 + abnormalTableObj.showInitData(rs['outboundList'], rs['speedList']);
  396 + //show 工具条
  397 + mapTools.show(rs);
  398 + //地图
  399 + mapObj.initData(rs);
  400 + //play 对象
  401 + playObj.init(rs);
  402 + //设置导出文件名称
  403 + mapTools.setExcelName();
  404 + }
  405 + });
  406 + }
  407 + return false;
  408 + };
  409 +
  410 + //遮罩
  411 + var shade = $('.play_back_form_shade', modal);
  412 + var showShade = function () {
  413 + shade.show();
  414 + };
  415 + var hideShade = function () {
  416 + shade.hide();
  417 + };
  418 +
  419 + return {
  420 + init: init,
  421 + setNbbm: setNbbm,
  422 + showShade: showShade,
  423 + hideShade: hideShade
  424 + };
  425 + })();
  426 +
  427 + /**
  428 + * 行车轨迹表格
  429 + */
  430 + var trailTableObj = (function () {
  431 +
  432 + var $tbody = $('.gps-road-info .ct_table_body', modal);
  433 + var $wrap = $('.road_table_wrap', modal);
  434 + var initFlag, gpsArray;
  435 + var showInitData = function (list) {
  436 + var array = [];
  437 + for (var i = 0, gps; gps = list[i++];) {
  438 + //格式化时间
  439 + gps.timeStr = moment(gps.timestamp).format('HH:mm.ss');
  440 + try {
  441 + if (i > 0 && array[array.length - 1].road.road_CODE == gps.road.road_CODE)
  442 + array.pop();
  443 + }
  444 + catch (e) {
  445 + }
  446 +
  447 + if (gps.road)
  448 + array.push(gps);
  449 + }
  450 +
  451 + var htmlStr = template('gps_road_info_cont_temp', {array: array});
  452 + $tbody.html(htmlStr);
  453 + initFlag = true;
  454 + gpsArray = list;
  455 + };
  456 +
  457 + var prev;
  458 + var add = function (gps, i) {
  459 + if(i == 0)
  460 + return;
  461 + if(initFlag){
  462 + //清理初始化的数据
  463 + $tbody.html('');
  464 + initFlag = false;
  465 + }
  466 + if (!gps.road)
  467 + return;
  468 + var code = gps.road.road_CODE;
  469 + if (!prev || code != prev.road.road_CODE) {
  470 + $tbody.append(template('gps_road_info_cont_temp', {array: [gps]}));
  471 + }
  472 + else{
  473 + var dds = $tbody.find('dl[data-code=' + code + ']').last().find('dd');
  474 + $(dds[0]).text(gps.timeStr);
  475 + $(dds[1]).text(gps.speed);
  476 + }
  477 + prev = gps;
  478 + $wrap.scrollTop($wrap[0].scrollHeight);
  479 + };
  480 +
  481 + return {
  482 + showInitData: showInitData,
  483 + add : add,
  484 + gpsArray : function () {
  485 + return gpsArray;
  486 + }
  487 + };
  488 + })();
  489 +
  490 + /**
  491 + * 到离站信息表格
  492 + * @type {{}}
  493 + */
  494 + var inOutStationTableObj = (function () {
  495 +
  496 + var data, f, prev, initFlag;
  497 + var $wrap = $('.inout_table_wrap', modal);
  498 + var $tbody = $('.ct_table_body', $wrap);
  499 + var showInitData = function (list) {
  500 + clear();
  501 + data = [];
  502 + $.each(list, function (i, gps) {
  503 + prev = data[data.length - 1];
  504 + if (gps['inout_stop'] == -1)
  505 + return true;
  506 + if (gps['inout_stop'] == 0 && gps['inout_stop_info']) {
  507 + //连续进站信号,取第一个
  508 + if(prev && prev['out_ts'] == null
  509 + && prev['stopName'] == gps['inout_stop_info'].stopName){
  510 + return true;
  511 + }
  512 + data.push(createIn(gps));
  513 + }
  514 + else if (gps['inout_stop'] == 1) {
  515 + f = matchOut(prev, gps);
  516 + if(f)
  517 + data.push(f);
  518 + }
  519 + });
  520 + //格式化时间
  521 + $.each(data, function (i) {
  522 + if (this.in_ts)
  523 + this.in_time_str = moment(this.in_ts).format('HH:mm.ss');
  524 + if (this.out_ts)
  525 + this.out_time_str = moment(this.out_ts).format('HH:mm.ss');
  526 + //id
  527 + this.id = 'in_out_' + i;
  528 + });
  529 + var htmlStr = template('multi_inout_info_cont_temp', {list: data});
  530 + $tbody.html(htmlStr);
  531 + initFlag = true;
  532 + len = data.length;
  533 + };
  534 +
  535 + var inoutIndex=0, len, item;
  536 + var add = function (gps, i) {
  537 + if(i == 0)
  538 + return;
  539 + if(initFlag)
  540 + clear();
  541 +
  542 + var $dl;
  543 + for(j = inoutIndex; j < len; j++){
  544 + item = data[j];
  545 + $dl = $tbody.find('dl[data-id='+item.id+']');
  546 + if(gps.ts >= item.in_ts && $dl.length==0){
  547 + $tbody.append(template('inout_info_cont_temp', item));
  548 + inoutIndex = j;
  549 + }
  550 +
  551 + if(gps.ts >= item.out_ts){
  552 + var dds = $dl.find('dd');
  553 + if($dl.length==0)
  554 + $tbody.append(template('inout_info_cont_temp', item));
  555 + else
  556 + $(dds[2]).text(item.out_time_str);
  557 + inoutIndex = j;
  558 + }
  559 + else {
  560 + break;
  561 + }
  562 + }
  563 + $wrap.scrollTop($wrap[0].scrollHeight);
  564 + };
  565 +
  566 + var clear = function () {
  567 + $tbody.html('');
  568 + initFlag = false;
  569 + };
  570 +
  571 + var createIn = function (gps) {
  572 + var info = gps['inout_stop_info'];
  573 + return {in_ts: info.ts, stopNo: info.stopNo, stopName: info.stopName}
  574 + };
  575 +
  576 + var matchOut = function (prevInfo, gps) {
  577 + var oi = gps['inout_stop_info'];
  578 + if(!oi)
  579 + return;
  580 + if(prevInfo && prevInfo.stopName == oi.stopName){
  581 + prevInfo['out_ts'] = oi.ts;
  582 + return null;
  583 + }
  584 + else {
  585 + return {out_ts: oi.ts,stopNo: oi.stopNo,stopName: oi.stopName}
  586 + }
  587 + };
  588 +
  589 + return {
  590 + showInitData: showInitData,
  591 + add: add
  592 + };
  593 + })();
  594 +
  595 + /**
  596 + * 异常信息表格
  597 + * @type {{showInitData}}
  598 + */
  599 + var abnormalTableObj = (function () {
  600 +
  601 + var showInitData = function () {
  602 + var array = [];
  603 + for(var i = 0; i < arguments.length; i ++){
  604 + array = array.concat(arguments[i]);
  605 + }
  606 + //格式化时间
  607 + $.each(array, function () {
  608 + if(this.st)
  609 + this.st_str = moment(this.st).format('HH:mm.ss');
  610 + if(this.et)
  611 + this.et_str = moment(this.et).format('HH:mm.ss');
  612 + });
  613 +
  614 + //排序
  615 + array.sort(function (a, b) {
  616 + return a.st - b.st;
  617 + });
  618 +
  619 + var htmlStr = template('abnormal_table_cont_temp', {array: array});
  620 + $('.abnormal_table .ct_table_body', modal).html(htmlStr);
  621 + };
  622 +
  623 + return {
  624 + showInitData: showInitData
  625 + }
  626 + })();
  627 +
  628 + /**
  629 + * 工具条相关
  630 + */
  631 + var mapTools = (function () {
  632 +
  633 + $('.map-wrap-tools .play_btn', modal).on('click', function () {
  634 + if($(this).hasClass('play')){
  635 + //暂停
  636 + $(this).removeClass('play');
  637 + playObj.pause();
  638 + searchForm.hideShade();
  639 + }
  640 + else {
  641 + //播放
  642 + $(this).addClass('play');
  643 + playObj.play();
  644 + playObj.fixedToCenter();
  645 + searchForm.showShade();
  646 + }
  647 + });
  648 +
  649 + //播放速度
  650 + $('.speed_form input[name=playSpeed]', modal).on('click', function () {
  651 + playObj.setConf('playSpeed', $(this).val());
  652 + });
  653 +
  654 + //空间数据
  655 + $('.buffer_area_form input[type=checkbox]', modal).on('click', function () {
  656 + playObj.setConf($(this).attr('name'), $(this)[0].checked);
  657 + mapObj.refreshOverlay();
  658 + });
  659 +
  660 + //进度条
  661 + var step, $scale = $('.ct-progress-bar .scale', modal);
  662 + var upProgressBar = function (i) {
  663 + $scale.css('width', step * (i + 1));
  664 + };
  665 +
  666 + //导出
  667 + $('.export-excel', modal).on('click', function () {
  668 + var base64Str = gb_map_play_back.listToExcel(trailTableObj.gpsArray());
  669 + $(this).attr('href', base64Str);
  670 + });
  671 +
  672 + var setExcelName = function () {
  673 + var f = $('.playBackForm', modal);
  674 + var fileName = ($('[name=nbbm]', f).val() + '轨迹数据' + $('[name=sDate]', f).val() + $('[name=sTime]', f).val() + '至' + $('[name=eDate]', f).val() + $('[name=eTime]', f).val() + '.xls').replace(new RegExp(/-/g),'').replace(new RegExp(/:/g),'');
  675 + $('.export-excel', modal).attr('download', fileName);
  676 + };
  677 +
  678 + var gpsArray;
  679 + var show = function (rs) {
  680 + $('.map-wrap-tools').show();
  681 + $('.map-container', modal).addClass('show_tools');
  682 + //总里程
  683 + $('.text-panel .sum_mileage', modal).text(rs.sumMileage);
  684 +
  685 + var size = rs.list.length;
  686 + $('.text-panel .count_point', modal).text(size);
  687 + step = $('.ct-progress-bar', modal).width() / size;
  688 +
  689 + //console.log('stepstep', step);
  690 + };
  691 +
  692 + return {
  693 + show: show,
  694 + upProgressBar: upProgressBar,
  695 + setExcelName: setExcelName
  696 + }
  697 + })();
  698 +
  699 + /**
  700 + * 地图相关
  701 + */
  702 + var mapObj = (function () {
  703 + var map;
  704 + var initMap = function () {
  705 + //初始化地图
  706 + map = new BMap.Map($('.map-container', modal)[0]);
  707 + //中心点和缩放级别
  708 + map.centerAndZoom(new BMap.Point(gb_map_consts.center_point.lng, gb_map_consts.center_point.lat), 16);
  709 + map.enableScrollWheelZoom();
  710 + }
  711 +
  712 + var storage = window.localStorage;
  713 + var routes;//路段
  714 + var stations;//站点
  715 + var parks;//停车场
  716 +
  717 + var initData = function (rs) {
  718 + var gpsArray = rs.list;
  719 + if(!gpsArray || gpsArray.length==0)
  720 + return;
  721 + var lineCode = gpsArray[0].lineId;
  722 + //从地图模块获取站点数据
  723 + stations = gb_map_spatial_data.getStationArray(lineCode);
  724 + //从地图模块获取停车场数据
  725 + parks = gb_map_spatial_data.carparkArray();
  726 + //从localStorage 获取路段
  727 + routes = JSON.parse(storage.getItem(lineCode + '_route'));
  728 + routes = [routes.up_bd, routes.down_bd];
  729 + };
  730 +
  731 +
  732 + /**
  733 + * 更新车辆位置
  734 + */
  735 + var gpsMarker;
  736 + var updateCar = function (gps) {
  737 + if(!gpsMarker){
  738 + gpsMarker = new BMap.Marker(new BMap.Point(gps.bd_lon, gps.bd_lat));
  739 + var width = gb_map_imap.calcGpsMarkerWidth(gps.nbbm);
  740 + gpsMarker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));
  741 + gpsMarker.disableMassClear();//禁止marker被清除
  742 + gpsMarker.setTop(true);
  743 + map.addOverlay(gpsMarker);
  744 + //居中
  745 + map.panTo(gpsMarker.getPosition());
  746 + }
  747 + else{
  748 + gpsMarker.setPosition(new BMap.Point(gps.bd_lon, gps.bd_lat));
  749 + var width = gb_map_imap.calcGpsMarkerWidth(gps.nbbm);
  750 + gpsMarker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));
  751 + }
  752 +
  753 + //更新路段底图
  754 + if(gps.upDown!=roadUpdown){
  755 + switchPolyline(gps.upDown);
  756 + //清除轨迹线
  757 + trailArray = [];
  758 + }
  759 + };
  760 +
  761 + /**
  762 + * 绘制轨迹线
  763 + */
  764 + var trailArray=[], trailPolyline;
  765 + var updateTrailLine = function () {
  766 + trailArray.push(gpsMarker.getPosition());
  767 + if(!trailPolyline){
  768 + trailPolyline = new BMap.Polyline(trailArray, {strokeWeight: 3, strokeColor: '#000000'});
  769 + trailPolyline.disableMassClear();//禁止trailPolyline被清除
  770 + map.addOverlay(trailPolyline);
  771 + }
  772 + else{
  773 + trailPolyline.setPath(trailArray);
  774 + }
  775 + };
  776 +
  777 + /**
  778 + * 绘制路段底图(包括站点)
  779 + */
  780 + var roadUpdown=-1;
  781 + var switchPolyline = function (upDown) {
  782 + if(typeof(upDown) == "undefined")
  783 + upDown = roadUpdown;
  784 +
  785 + map.clearOverlays();
  786 + //路段
  787 + drawRoadPolyline(upDown);
  788 + //站点
  789 + if(playObj.getConf().drawPoint)
  790 + drawStationPoint(upDown);
  791 + //缓冲区
  792 + if(playObj.getConf().drawBuffArea)
  793 + drawStationBfArea(upDown);
  794 + //站点名称
  795 + if(playObj.getConf().stationName)
  796 + drawStationName(upDown);
  797 + roadUpdown = upDown;
  798 + };
  799 +
  800 + /**
  801 + * 根据走向绘制路段
  802 + */
  803 + var drawRoadPolyline = function (upDown) {
  804 + var colour = gb_map_config.getConfig().section.color;
  805 + var plConfig = {strokeWeight: 12, strokeColor: upDown?colour.down:colour.up, strokeOpacity: .4}, pos;
  806 + $.each(routes[upDown], function (i, item) {
  807 + pos = [];
  808 + $.each(item.split(','), function () {
  809 + temps = this.split(' ');
  810 + pos.push(new BMap.Point(temps[0], temps[1]));
  811 + });
  812 + map.addOverlay(new BMap.Polyline(pos, plConfig));
  813 + });
  814 + };
  815 +
  816 + /**
  817 + * 根据走向绘制站点点位
  818 + */
  819 + var drawStationPoint = function (upDown) {
  820 + var array = stations[upDown], psm;
  821 + $.each(array, function () {
  822 + //坐标转换
  823 + var coord = TransGPS.wgsToBD(this.lat, this.lon);
  824 + this.bd_lat = coord.lat;
  825 + this.bd_lon = coord.lng;
  826 + psm = new BMap.Marker(new BMap.Point(this.bd_lon, this.bd_lat));
  827 + psm.setTitle(this.stationName);
  828 + map.addOverlay(psm);
  829 + psm.setIcon(new BMap.Icon(gb_map_imap.createStationPointIcon(), new BMap.Size(12, 12)));
  830 + });
  831 + };
  832 +
  833 + /**
  834 + * 为站点绘制缓冲区
  835 + */
  836 + var drawStationBfArea = function (upDown) {
  837 + var array = stations[upDown];
  838 + $.each(array, function () {
  839 + if(this.shapesType=='r')
  840 + drawCircle(new BMap.Point(this.bd_lon, this.bd_lat), this.radius);
  841 + else if(this.shapesType=='d')
  842 + drawPolygon(this);
  843 + });
  844 + };
  845 +
  846 + /**
  847 + * 绘制站点名称
  848 + */
  849 + var drawStationName = function (upDown) {
  850 + var style = {backgroundColor: "rgba(255, 255, 255, 0.69)",color : "black", borderColor: "black", fontSize : "12px", height : "16px", lineHeight : "16px", fontFamily:"微软雅黑"}
  851 + var array = stations[upDown];
  852 + $.each(array, function () {
  853 + var width = this.stationName.length * 12;
  854 + var label = new BMap.Label(this.stationName, {
  855 + position:new BMap.Point(this.bd_lon, this.bd_lat),
  856 + offset: new BMap.Size(-(width / 2), -27)
  857 + });
  858 + label.setStyle(style);
  859 + map.addOverlay(label);
  860 + });
  861 + };
  862 + var drawCircle = function (point, radius) {
  863 + var circle = new BMap.Circle(point, radius);
  864 + circle.setStrokeColor('#000000');
  865 + circle.setStrokeWeight(1);
  866 + map.addOverlay(circle);
  867 + };
  868 +
  869 + var drawPolygon = function () {
  870 +
  871 + };
  872 +
  873 + /**
  874 + * 重置
  875 + */
  876 + var reset = function () {
  877 + if(trailPolyline)
  878 + trailPolyline.enableMassClear();
  879 + if(gpsMarker)
  880 + gpsMarker.enableMassClear();
  881 + map.clearOverlays();
  882 + roadUpdown = -1;
  883 + trailArray=[];
  884 + trailPolyline = null;
  885 + gpsMarker = null;
  886 + };
  887 +
  888 + /**
  889 + * 居中车辆,超出边界时
  890 + */
  891 + var toCenterByBounds = function () {
  892 + var markerIsVisible = BMapLib.GeoUtils.isPointInRect(gpsMarker.getPosition(),map.getBounds());
  893 + if(!markerIsVisible)
  894 + map.panTo(gpsMarker.getPosition());
  895 + };
  896 + return {
  897 + initData: initData,
  898 + updateCar: updateCar,
  899 + initMap: initMap,
  900 + updateTrailLine: updateTrailLine,
  901 + refreshOverlay: switchPolyline,
  902 + toCenterByBounds: toCenterByBounds,
  903 + reset: reset
  904 + }
  905 + })();
  906 +
  907 + /**
  908 + * 播放相关
  909 + * @type {{}}
  910 + */
  911 + var playObj = (function () {
  912 + var conf = {
  913 + playSpeed: 1,//播放速度
  914 + drawPoint: 1,//绘制站点
  915 + drawBuffArea: 1 ,//缓冲区
  916 + stationName: 0, //站点名称
  917 + carPark: [] //停车场
  918 + };
  919 +
  920 + var gpsArray;//gps点位集合
  921 + var init = function (rs) {
  922 + gpsArray = rs.list;
  923 + if(!gpsArray || gpsArray.length==0)
  924 + return;
  925 +
  926 + len = gpsArray.length;
  927 + //渲染配置信息
  928 + renderConfig();
  929 + //播放第一个点
  930 + run();
  931 + };
  932 +
  933 + var renderConfig = function () {
  934 + $('.speed_form [name=playSpeed][value='+conf.playSpeed+']', modal)[0].checked = true;
  935 + $('.buffer_area_form input[type=checkbox]', modal).each(function () {
  936 + var name = $(this).attr('name');
  937 + $(this)[0].checked = conf[name];
  938 + });
  939 + };
  940 +
  941 + /**
  942 + * 播放函数
  943 + */
  944 + var runTimer; //播放定时器
  945 + var toCenterTimer;//居中定时器
  946 + var index = 0; //gps下标
  947 + var play = function () {
  948 + if(!run())
  949 + runTimer = setTimeout(play, 1000 / conf.playSpeed);
  950 + };
  951 +
  952 + /**
  953 + * 定时居中
  954 + */
  955 + var fixedToCenter = function () {
  956 + toCenterTimer = setInterval(function () {
  957 + mapObj.toCenterByBounds();
  958 + }, 500);
  959 + };
  960 +
  961 + var pause = function () {
  962 + clearInterval(runTimer);
  963 + runTimer = null;
  964 + clearInterval(toCenterTimer);
  965 + toCenterTimer = null;
  966 + };
  967 +
  968 + var clock = $('.ct_btn.clock', modal), gps, len;
  969 + var run = function () {
  970 + if(index == len){
  971 + $('.map-wrap-tools .play_btn', modal).removeClass('play');
  972 + pause();
  973 + notify_succ('本次轨迹回放已结束!');
  974 + searchForm.hideShade();
  975 + return true;
  976 + }
  977 + gps = gpsArray[index];
  978 + //更新GPS点位
  979 + mapObj.updateCar(gps);
  980 + //绘制轨迹线
  981 + mapObj.updateTrailLine();
  982 + //时间文本
  983 + clock.text(gps.timeStr);
  984 + //输出行车轨迹
  985 + trailTableObj.add(gps, index);
  986 + //输出到离站信息
  987 + inOutStationTableObj.add(gps, index);
  988 + //进度条
  989 + mapTools.upProgressBar(index);
  990 + index ++;
  991 + };
  992 +
  993 + /**
  994 + * 重置
  995 + */
  996 + var reset = function () {
  997 + index = 0;
  998 + gpsArray = null;
  999 + pause();
  1000 + };
  1001 + return {
  1002 + init: init,
  1003 + getConf: function () {
  1004 + return conf;
  1005 + },
  1006 + setConf: function (k, v) {
  1007 + conf[k] = v;
  1008 + },
  1009 + play: play,
  1010 + fixedToCenter: fixedToCenter,
  1011 + pause: pause,
  1012 + reset: reset
  1013 + }
  1014 + })();
  1015 + })();
  1016 + </script>
1017 </div> 1017 </div>
1018 \ No newline at end of file 1018 \ No newline at end of file