Commit 3385ffa4e9c9c913f8254b8ffef7a1dd10bae136
1 parent
e446d8ab
update...
Showing
41 changed files
with
1209 additions
and
312 deletions
src/main/java/com/bsth/controller/realcontrol/ChildTaskPlanController.java
| @@ -27,4 +27,9 @@ public class ChildTaskPlanController extends BaseController<ChildTaskPlan, Long> | @@ -27,4 +27,9 @@ public class ChildTaskPlanController extends BaseController<ChildTaskPlan, Long> | ||
| 27 | public Map<String, Object> delHistory(@PathVariable("id") Long id){ | 27 | public Map<String, Object> delHistory(@PathVariable("id") Long id){ |
| 28 | return childTaskPlanService.delHistory(id); | 28 | return childTaskPlanService.delHistory(id); |
| 29 | } | 29 | } |
| 30 | + | ||
| 31 | + @RequestMapping(value = "update", method = RequestMethod.POST) | ||
| 32 | + public Map<String, Object> update(ChildTaskPlan childTask){ | ||
| 33 | + return childTaskPlanService.update(childTask); | ||
| 34 | + } | ||
| 30 | } | 35 | } |
src/main/java/com/bsth/data/gpsdata_v2/handlers/InStationProcess.java
| @@ -159,7 +159,7 @@ public class InStationProcess { | @@ -159,7 +159,7 @@ public class InStationProcess { | ||
| 159 | logger.info("车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual()); | 159 | logger.info("车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual()); |
| 160 | 160 | ||
| 161 | //清除车辆误点调整监听 | 161 | //清除车辆误点调整监听 |
| 162 | - LateAdjustHandle.remove(nbbm); | 162 | + LateAdjustHandle.remove(sch); |
| 163 | 163 | ||
| 164 | //将gps转换成下一个班次走向的站内信号(应对只有一个站内信号 即 发出时) | 164 | //将gps转换成下一个班次走向的站内信号(应对只有一个站内信号 即 发出时) |
| 165 | transformUpDown(gps, next); | 165 | transformUpDown(gps, next); |
src/main/java/com/bsth/data/gpsdata_v2/handlers/OutStationProcess.java
| @@ -113,7 +113,7 @@ public class OutStationProcess { | @@ -113,7 +113,7 @@ public class OutStationProcess { | ||
| 113 | dayOfSchedule.save(sch); | 113 | dayOfSchedule.save(sch); |
| 114 | 114 | ||
| 115 | //清理应发未发标记 | 115 | //清理应发未发标记 |
| 116 | - LateAdjustHandle.remove(sch.getClZbh()); | 116 | + LateAdjustHandle.remove(sch); |
| 117 | 117 | ||
| 118 | //发车的时候,同步一下状态 | 118 | //发车的时候,同步一下状态 |
| 119 | if (!gps.isService() && !dayOfSchedule.emptyService(sch)) | 119 | if (!gps.isService() && !dayOfSchedule.emptyService(sch)) |
src/main/java/com/bsth/data/line_version/thread/FixedEnableVerionsThread.java
| @@ -14,7 +14,7 @@ import java.util.Map; | @@ -14,7 +14,7 @@ import java.util.Map; | ||
| 14 | * Created by panzhao on 2017/12/28. | 14 | * Created by panzhao on 2017/12/28. |
| 15 | */ | 15 | */ |
| 16 | @Component | 16 | @Component |
| 17 | -public class FixedEnableVerionsThread extends Thread{ | 17 | +public class FixedEnableVerionsThread extends Thread { |
| 18 | 18 | ||
| 19 | @Autowired | 19 | @Autowired |
| 20 | JdbcTemplate jdbcTemplate; | 20 | JdbcTemplate jdbcTemplate; |
| @@ -26,34 +26,39 @@ public class FixedEnableVerionsThread extends Thread{ | @@ -26,34 +26,39 @@ public class FixedEnableVerionsThread extends Thread{ | ||
| 26 | 26 | ||
| 27 | @Override | 27 | @Override |
| 28 | public void run() { | 28 | public void run() { |
| 29 | - try{ | 29 | + try { |
| 30 | 30 | ||
| 31 | String sql = "select * from bsth_c_line_versions where status=2 and start_date<=SYSDATE()"; | 31 | String sql = "select * from bsth_c_line_versions where status=2 and start_date<=SYSDATE()"; |
| 32 | 32 | ||
| 33 | List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); | 33 | List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); |
| 34 | - if(list.size() == 0) | ||
| 35 | - return; | 34 | + if (list.size() > 0) { |
| 35 | + String lineCode; | ||
| 36 | + int version; | ||
| 36 | 37 | ||
| 37 | - String lineCode; | ||
| 38 | - int version; | 38 | + for (Map<String, Object> map : list) { |
| 39 | + lineCode = map.get("line_code").toString(); | ||
| 40 | + version = Integer.parseInt(map.get("versions").toString()); | ||
| 39 | 41 | ||
| 40 | - for(Map<String, Object> map : list){ | ||
| 41 | - lineCode = map.get("line_code").toString(); | ||
| 42 | - version = Integer.parseInt(map.get("versions").toString()); | ||
| 43 | - | ||
| 44 | - enableRouteVersionHandler.enable(lineCode, version); | 42 | + enableRouteVersionHandler.enable(lineCode, version); |
| 43 | + } | ||
| 45 | } | 44 | } |
| 46 | 45 | ||
| 47 | - //要从历史表同步当前表的变更(当前版本) | ||
| 48 | - List<String> syncs = jdbcTemplate.queryForList("SELECT CONCAT(line_code,'_',versions) FROM bsth_c_line_versions WHERE STATUS = 1 AND CONCAT(line_code, '_', versions) IN (SELECT CONCAT(line_code, '_', version) FROM logger_route_synchro)", String.class); | 46 | + |
| 47 | + //自动同步当前启用版本 | ||
| 48 | + long t = System.currentTimeMillis(); | ||
| 49 | + List<String> syncs = jdbcTemplate.queryForList("SELECT CONCAT(line_code,'_',versions) FROM bsth_c_line_versions WHERE STATUS = 1 AND CONCAT(line_code, '_', versions) IN (SELECT CONCAT(line_code, '_', version) FROM logger_route_synchro where t < " + t + ")", String.class); | ||
| 49 | 50 | ||
| 50 | String[] ks; | 51 | String[] ks; |
| 51 | - for(String keys : syncs){ | 52 | + for (String keys : syncs) { |
| 52 | ks = keys.split("_"); | 53 | ks = keys.split("_"); |
| 53 | 54 | ||
| 54 | enableRouteVersionHandler.sync(ks[0], Integer.parseInt(ks[1])); | 55 | enableRouteVersionHandler.sync(ks[0], Integer.parseInt(ks[1])); |
| 56 | + | ||
| 57 | + logger.info("同步线路 " + ks[0] + " 版本:" + ks[1]); | ||
| 55 | } | 58 | } |
| 56 | - }catch (Exception e){ | 59 | + |
| 60 | + jdbcTemplate.update("delete from logger_route_synchro where t < " + t); | ||
| 61 | + } catch (Exception e) { | ||
| 57 | logger.error("", e); | 62 | logger.error("", e); |
| 58 | } | 63 | } |
| 59 | } | 64 | } |
src/main/java/com/bsth/data/schedule/late_adjust/LateAdjustHandle.java
| @@ -117,7 +117,7 @@ public class LateAdjustHandle implements ApplicationContextAware{ | @@ -117,7 +117,7 @@ public class LateAdjustHandle implements ApplicationContextAware{ | ||
| 117 | } | 117 | } |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | - public static void remove(String nbbm){ | 120 | +/* public static void remove(String nbbm){ |
| 121 | if(lateSchMap.containsKey(nbbm)){ | 121 | if(lateSchMap.containsKey(nbbm)){ |
| 122 | ScheduleRealInfo sch = lateSchMap.get(nbbm); | 122 | ScheduleRealInfo sch = lateSchMap.get(nbbm); |
| 123 | sch.setLate2(false); | 123 | sch.setLate2(false); |
| @@ -127,7 +127,7 @@ public class LateAdjustHandle implements ApplicationContextAware{ | @@ -127,7 +127,7 @@ public class LateAdjustHandle implements ApplicationContextAware{ | ||
| 127 | lateSchMap.remove(nbbm); | 127 | lateSchMap.remove(nbbm); |
| 128 | logger.info("移除误点调整 nbbm -" + nbbm); | 128 | logger.info("移除误点调整 nbbm -" + nbbm); |
| 129 | } | 129 | } |
| 130 | - } | 130 | + }*/ |
| 131 | 131 | ||
| 132 | /** | 132 | /** |
| 133 | * 车辆到站 | 133 | * 车辆到站 |
src/main/java/com/bsth/data/schedule/thread/ScheduleRefreshThread.java
| @@ -74,14 +74,6 @@ public class ScheduleRefreshThread extends Thread{ | @@ -74,14 +74,6 @@ public class ScheduleRefreshThread extends Thread{ | ||
| 74 | //重载排班数据 | 74 | //重载排班数据 |
| 75 | dayOfSchedule.reloadSch(lineCode, currSchDate, false); | 75 | dayOfSchedule.reloadSch(lineCode, currSchDate, false); |
| 76 | logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size()); | 76 | logger.info(lineCode + "翻班完成, " + currSchDate + " -班次数量:" + dayOfSchedule.findByLineCode(lineCode).size()); |
| 77 | - | ||
| 78 | - | ||
| 79 | - //校验一下数据库和缓存的数据 | ||
| 80 | - /*int dbCount = dayOfSchedule.dbCount(lineCode, currSchDate); | ||
| 81 | - logger.info(lineCode + " 数据库数量:" + dbCount); | ||
| 82 | - if(dbCount != dayOfSchedule.findByLineCode(lineCode).size()){ | ||
| 83 | - logger.error("异常异常异常,,数据库和缓存数量不一致," + lineCode); | ||
| 84 | - }*/ | ||
| 85 | } | 77 | } |
| 86 | }catch (Exception e){ | 78 | }catch (Exception e){ |
| 87 | logger.error("班次更新失败!! -" + lineCode, e); | 79 | logger.error("班次更新失败!! -" + lineCode, e); |
src/main/java/com/bsth/service/geo_data/impl/GeoDataServiceImpl.java
| @@ -174,14 +174,17 @@ public class GeoDataServiceImpl implements GeoDataService { | @@ -174,14 +174,17 @@ public class GeoDataServiceImpl implements GeoDataService { | ||
| 174 | int id = Integer.parseInt(map.get("id").toString()); | 174 | int id = Integer.parseInt(map.get("id").toString()); |
| 175 | String name = map.get("stationName").toString(); | 175 | String name = map.get("stationName").toString(); |
| 176 | String code = map.get("stationCode").toString(); | 176 | String code = map.get("stationCode").toString(); |
| 177 | - //String lineCode = map.get("lineCode").toString(); | ||
| 178 | - //String stationMark = map.get("stationMark").toString(); | 177 | + String lineCode = map.get("lineCode").toString(); |
| 178 | + String versions = map.get("versions").toString(); | ||
| 179 | 179 | ||
| 180 | //更新历史站点路由 | 180 | //更新历史站点路由 |
| 181 | jdbcTemplate.update("update bsth_c_ls_stationroute set station_name=? where id=?", name, id); | 181 | jdbcTemplate.update("update bsth_c_ls_stationroute set station_name=? where id=?", name, id); |
| 182 | //更新站点 | 182 | //更新站点 |
| 183 | jdbcTemplate.update("update bsth_c_station set station_name=? where station_cod=?", name, code); | 183 | jdbcTemplate.update("update bsth_c_station set station_name=? where station_cod=?", name, code); |
| 184 | 184 | ||
| 185 | + //写一条走向变更记录 | ||
| 186 | + jdbcTemplate.update("insert into logger_route_synchro(t, line_code, version) values(?, ?, ?)", System.currentTimeMillis(), lineCode, versions); | ||
| 187 | + | ||
| 185 | tran.commit(status); | 188 | tran.commit(status); |
| 186 | 189 | ||
| 187 | rs.put("station", findOne(id)); | 190 | rs.put("station", findOne(id)); |
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
| @@ -15,7 +15,6 @@ import com.bsth.repository.CarParkRepository; | @@ -15,7 +15,6 @@ import com.bsth.repository.CarParkRepository; | ||
| 15 | import com.bsth.repository.StationRepository; | 15 | import com.bsth.repository.StationRepository; |
| 16 | import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; | 16 | import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; |
| 17 | import com.bsth.service.gps.entity.*; | 17 | import com.bsth.service.gps.entity.*; |
| 18 | -import com.bsth.util.DateUtils; | ||
| 19 | import com.bsth.util.TransGPS; | 18 | import com.bsth.util.TransGPS; |
| 20 | import com.bsth.util.TransGPS.Location; | 19 | import com.bsth.util.TransGPS.Location; |
| 21 | import com.bsth.util.db.DBUtils_MS; | 20 | import com.bsth.util.db.DBUtils_MS; |
| @@ -32,6 +31,7 @@ import org.slf4j.Logger; | @@ -32,6 +31,7 @@ import org.slf4j.Logger; | ||
| 32 | import org.slf4j.LoggerFactory; | 31 | import org.slf4j.LoggerFactory; |
| 33 | import org.springframework.beans.factory.annotation.Autowired; | 32 | import org.springframework.beans.factory.annotation.Autowired; |
| 34 | import org.springframework.dao.DataAccessException; | 33 | import org.springframework.dao.DataAccessException; |
| 34 | +import org.springframework.jdbc.core.BeanPropertyRowMapper; | ||
| 35 | import org.springframework.jdbc.core.JdbcTemplate; | 35 | import org.springframework.jdbc.core.JdbcTemplate; |
| 36 | import org.springframework.stereotype.Service; | 36 | import org.springframework.stereotype.Service; |
| 37 | 37 | ||
| @@ -164,56 +164,134 @@ public class GpsServiceImpl implements GpsService { | @@ -164,56 +164,134 @@ public class GpsServiceImpl implements GpsService { | ||
| 164 | return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0); | 164 | return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0); |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | + private static DateTimeFormatter fmtyyyy = DateTimeFormat.forPattern("yyyy"); | ||
| 167 | @Override | 168 | @Override |
| 168 | public List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et) { | 169 | public List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et) { |
| 169 | List<Map<String, Object>> list = new ArrayList<>(); | 170 | List<Map<String, Object>> list = new ArrayList<>(); |
| 170 | - // 超过最大查询范围,直接忽略 | ||
| 171 | if (et - st > GPS_RANGE) | 171 | if (et - st > GPS_RANGE) |
| 172 | return list; | 172 | return list; |
| 173 | 173 | ||
| 174 | - // 车辆编码转换成设备号 | ||
| 175 | - String[] devices = new String[nbbmArray.length]; | ||
| 176 | - for (int i = 0; i < nbbmArray.length; i++) { | ||
| 177 | - devices[i] = BasicData.deviceId2NbbmMap.inverse().get(nbbmArray[i]); | ||
| 178 | - } | ||
| 179 | - // day_of_year | 174 | + st = st * 1000; |
| 175 | + et = et * 1000; | ||
| 176 | + // day_of_year 分区字段 | ||
| 180 | Calendar sCal = Calendar.getInstance(); | 177 | Calendar sCal = Calendar.getInstance(); |
| 181 | - sCal.setTime(new Date(st * 1000)); | ||
| 182 | - int sDayOfYear = sCal.get(Calendar.DAY_OF_YEAR)/* 200 */; | ||
| 183 | - | 178 | + sCal.setTime(new Date(st)); |
| 179 | + int sDayOfYear = sCal.get(Calendar.DAY_OF_YEAR); | ||
| 184 | Calendar eCal = Calendar.getInstance(); | 180 | Calendar eCal = Calendar.getInstance(); |
| 185 | - eCal.setTime(new Date(et * 1000)); | ||
| 186 | - int eDayOfYear = eCal.get(Calendar.DAY_OF_YEAR)/* 200 */; | 181 | + eCal.setTime(new Date(et)); |
| 182 | + int eDayOfYear = eCal.get(Calendar.DAY_OF_YEAR); | ||
| 187 | 183 | ||
| 188 | - Calendar weekCal = Calendar.getInstance(); | 184 | + String nbbm = nbbmArray[0]; |
| 189 | 185 | ||
| 190 | - // 如果是同一天 | ||
| 191 | - if (sDayOfYear == eDayOfYear) { | ||
| 192 | - weekCal.setTimeInMillis(st * 1000); | ||
| 193 | - list = findByTs(weekCal.get(Calendar.WEEK_OF_YEAR), sDayOfYear, st, et, devices); | ||
| 194 | - } else { | ||
| 195 | - // 跨天 | ||
| 196 | - Long tempSt = 0L, tempEt = 0L; | ||
| 197 | - for (int i = sDayOfYear; i <= eDayOfYear; i++) { | ||
| 198 | - | ||
| 199 | - if (i == sDayOfYear) { | ||
| 200 | - tempSt = st; | ||
| 201 | - tempEt = DateUtils.getTimesnight(sCal); | ||
| 202 | - } else if (i == eDayOfYear) { | ||
| 203 | - tempSt = DateUtils.getTimesmorning(sCal); | ||
| 204 | - tempEt = et; | ||
| 205 | - } else { | ||
| 206 | - tempSt = DateUtils.getTimesmorning(sCal); | ||
| 207 | - tempEt = DateUtils.getTimesnight(sCal); | ||
| 208 | - } | 186 | + List<DeviceChange> dcs = findDeviceChangeLogs(nbbm, et, st); |
| 187 | + //没有设备变更记录,则参考车辆信息上的设备号 | ||
| 188 | + if(null == dcs || dcs.size() == 0){ | ||
| 189 | + DeviceChange dc = new DeviceChange(); | ||
| 190 | + dc.setNbbm(nbbm); | ||
| 191 | + dc.setDevice(BasicData.deviceId2NbbmMap.inverse().get(nbbm)); | ||
| 192 | + dc.setSt(st); | ||
| 193 | + dc.setEt(et); | ||
| 209 | 194 | ||
| 210 | - weekCal.setTimeInMillis(tempSt * 1000); | ||
| 211 | - list.addAll(findByTs(weekCal.get(Calendar.WEEK_OF_YEAR), i, tempSt, tempEt, devices)); | ||
| 212 | - // 加一天 | ||
| 213 | - sCal.add(Calendar.DATE, 1); | ||
| 214 | - } | 195 | + dcs.add(dc); |
| 215 | } | 196 | } |
| 216 | 197 | ||
| 198 | + //bsth_c_gps_info | ||
| 199 | + String tableName = "bsth_c_gps_info"; | ||
| 200 | + String sYear = fmtyyyy.print(st), | ||
| 201 | + currYear = fmtyyyy.print(System.currentTimeMillis()); | ||
| 202 | + | ||
| 203 | + if(!sYear.equals(currYear)) | ||
| 204 | + tableName += "_" + sYear; | ||
| 205 | + | ||
| 206 | + StringBuilder sql = new StringBuilder(""); | ||
| 207 | + long t1,t2; | ||
| 208 | + DeviceChange dc; | ||
| 209 | + for(int i = 0,len=dcs.size(); i < len; i++){ | ||
| 210 | + t1 = st; | ||
| 211 | + t2 = et; | ||
| 212 | + dc = dcs.get(i); | ||
| 213 | + if(dc.getSt() > st) | ||
| 214 | + t1 = dc.getSt(); | ||
| 215 | + if(dc.getEt() < et) | ||
| 216 | + t2 = dc.getEt(); | ||
| 217 | + | ||
| 218 | + sql.append("select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS,SECTION_CODE from "+tableName+" where days_year in ("+sDayOfYear+","+eDayOfYear+") " + | ||
| 219 | + " and device_id='"+dc.getDevice()+"' and ts > "+t1+" and ts < "+t2+" "); | ||
| 220 | + | ||
| 221 | + if(i == len - 1) | ||
| 222 | + sql.append(" ORDER BY device_id,ts,stop_no"); | ||
| 223 | + else | ||
| 224 | + sql.append(" UNION"); | ||
| 225 | + } | ||
| 226 | + | ||
| 227 | + logger.info("轨迹回放 nbbm: " + nbbm + " -st: " + st + " -et: " + et + " -sql: " + sql.toString()); | ||
| 228 | + | ||
| 229 | + // 查询到离站数据 | ||
| 230 | + Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(st, et, dcs); | ||
| 231 | + | ||
| 232 | + //查询GPS数据 | ||
| 233 | + JdbcTemplate jdbcTemplate_ms = new JdbcTemplate(DBUtils_MS.getDataSource()); | ||
| 234 | + List<Map<String, Object>> dataList = jdbcTemplate_ms.queryForList(sql.toString()); | ||
| 235 | + | ||
| 236 | + Float lon, lat; | ||
| 237 | + Location bdLoc, gdLoc; | ||
| 238 | + int inOutStop; | ||
| 239 | + long serviceState; | ||
| 240 | + ArrivalEntity arrival; | ||
| 241 | + | ||
| 242 | + Map<String, Object> map = null; | ||
| 243 | + for(Map<String, Object> rs : dataList){ | ||
| 244 | + serviceState = map_get_long(rs, "SERVICE_STATE"); | ||
| 245 | + | ||
| 246 | + if(getGpsValid(serviceState) == 1) | ||
| 247 | + continue; | ||
| 248 | + | ||
| 249 | + map = new HashMap<>(); | ||
| 250 | + if(getGpsValid(serviceState) == 1) | ||
| 251 | + continue; | ||
| 252 | + | ||
| 253 | + map = new HashMap<>(); | ||
| 254 | + | ||
| 255 | + lon = map_get_float(rs, "LON"); | ||
| 256 | + lat = map_get_float(rs, "LAT"); | ||
| 257 | + // 高德坐标 | ||
| 258 | + gdLoc = TransGPS.transformFromWGSToGCJ(TransGPS.LocationMake(lon, lat)); | ||
| 259 | + map.put("gcj_lon", gdLoc.getLng()); | ||
| 260 | + map.put("gcj_lat", gdLoc.getLat()); | ||
| 261 | + // 百度坐标 | ||
| 262 | + bdLoc = TransGPS.bd_encrypt(gdLoc); | ||
| 263 | + map.put("bd_lon", bdLoc.getLng()); | ||
| 264 | + map.put("bd_lat", bdLoc.getLat()); | ||
| 265 | + //原始坐标 | ||
| 266 | + map.put("lon", lon); | ||
| 267 | + map.put("lat", lat); | ||
| 268 | + | ||
| 269 | + map.put("deviceId", map_get_str(rs, "DEVICE_ID")); | ||
| 270 | + map.put("ts", map_get_long(rs, "TS")); | ||
| 271 | + map.put("timestamp", map_get_long(rs, "TS")); | ||
| 272 | + map.put("stopNo", map_get_str(rs, "STOP_NO")); | ||
| 273 | + map.put("direction", map_get_float(rs,"DIRECTION")); | ||
| 274 | + | ||
| 275 | + map.put("lineId", map_get_str(rs, "LINE_ID")); | ||
| 276 | + map.put("speed", map_get_float(rs,"SPEED_GPS")); | ||
| 277 | + | ||
| 278 | + inOutStop = Integer.parseInt(rs.get("INOUT_STOP").toString()); | ||
| 279 | + map.put("inout_stop", inOutStop); | ||
| 280 | + | ||
| 281 | + arrival = arrivalMap.get(map_get_str(rs, "DEVICE_ID") + "_" + map_get_long(rs, "TS")); | ||
| 282 | + if (arrival != null) { | ||
| 283 | + map.put("inout_stop_info", arrival); | ||
| 284 | + map.put("inout_stop", arrival.getInOut()); | ||
| 285 | + } | ||
| 286 | + | ||
| 287 | + map.put("nbbm", BasicData.deviceId2NbbmMap.get(map_get_str(rs,"DEVICE_ID"))); | ||
| 288 | + map.put("state", getService(serviceState)); | ||
| 289 | + // 上下行 | ||
| 290 | + map.put("upDown", getUpOrDown(serviceState)); | ||
| 291 | + //路段编码 | ||
| 292 | + map.put("section_code", map_get_str(rs,"SECTION_CODE")); | ||
| 293 | + list.add(map); | ||
| 294 | + } | ||
| 217 | // 按时间排序 | 295 | // 按时间排序 |
| 218 | Collections.sort(list, new Comparator<Map<String, Object>>() { | 296 | Collections.sort(list, new Comparator<Map<String, Object>>() { |
| 219 | 297 | ||
| @@ -225,132 +303,97 @@ public class GpsServiceImpl implements GpsService { | @@ -225,132 +303,97 @@ public class GpsServiceImpl implements GpsService { | ||
| 225 | return list; | 303 | return list; |
| 226 | } | 304 | } |
| 227 | 305 | ||
| 228 | - public List<Map<String, Object>> findByTs(int weekOfYear, int dayOfYear, Long st, Long et, String[] devices) { | ||
| 229 | - List<Map<String, Object>> list = new ArrayList<>(); | ||
| 230 | - Map<String, Object> map = null; | ||
| 231 | - | ||
| 232 | - // 直接拼 in 语句 | ||
| 233 | - String inv = ""; | ||
| 234 | - for (String device : devices) | ||
| 235 | - inv += ("'" + device + "',"); | ||
| 236 | - inv = inv.substring(0, inv.length() - 1); | ||
| 237 | - | ||
| 238 | - // 查询到离站数据 | ||
| 239 | - Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear, st, et, inv); | ||
| 240 | - | ||
| 241 | - String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS,SECTION_CODE from bsth_c_gps_info where days_year=? and device_id in (" | ||
| 242 | - + inv + ") and ts > ? and ts < ? ORDER BY device_id,ts,stop_no"; | ||
| 243 | - try { | ||
| 244 | - conn = DBUtils_MS.getConnection(); | ||
| 245 | - ps = conn.prepareStatement(sql); | ||
| 246 | - ps.setInt(1, dayOfYear); | ||
| 247 | - /* ps.setArray(2, conn.createArrayOf("VARCHAR", devices)); */ | ||
| 248 | - ps.setLong(2, st * 1000); | ||
| 249 | - ps.setLong(3, et * 1000); | 306 | + private String map_get_str(Map<String, Object> map, String key){ |
| 307 | + return map.containsKey(key)?map.get(key).toString():""; | ||
| 308 | + } | ||
| 250 | 309 | ||
| 251 | - rs = ps.executeQuery(); | ||
| 252 | - Float lon, lat; | ||
| 253 | - Location bdLoc, gdLoc; | ||
| 254 | - int inOutStop; | ||
| 255 | - long serviceState; | ||
| 256 | - ArrivalEntity arrival; | ||
| 257 | - while (rs.next()) { | ||
| 258 | - serviceState = rs.getLong("SERVICE_STATE"); | ||
| 259 | - if(getGpsValid(serviceState) == 1) | ||
| 260 | - continue; | 310 | + private Long map_get_long(Map<String, Object> map, String key){ |
| 311 | + return map.containsKey(key)?Long.parseLong(map.get(key).toString()):-1; | ||
| 312 | + } | ||
| 261 | 313 | ||
| 262 | - map = new HashMap<>(); | 314 | + private Float map_get_float(Map<String, Object> map, String key){ |
| 315 | + return map.containsKey(key)?Float.parseFloat(map.get(key).toString()):-1; | ||
| 316 | + } | ||
| 263 | 317 | ||
| 264 | - lon = rs.getFloat("LON"); | ||
| 265 | - lat = rs.getFloat("LAT"); | ||
| 266 | - // 高德坐标 | ||
| 267 | - gdLoc = TransGPS.transformFromWGSToGCJ(TransGPS.LocationMake(lon, lat)); | ||
| 268 | - map.put("gcj_lon", gdLoc.getLng()); | ||
| 269 | - map.put("gcj_lat", gdLoc.getLat()); | ||
| 270 | - // 百度坐标 | ||
| 271 | - bdLoc = TransGPS.bd_encrypt(gdLoc); | ||
| 272 | - map.put("bd_lon", bdLoc.getLng()); | ||
| 273 | - map.put("bd_lat", bdLoc.getLat()); | ||
| 274 | - //原始坐标 | ||
| 275 | - map.put("lon", lon); | ||
| 276 | - map.put("lat", lat); | ||
| 277 | - | ||
| 278 | - map.put("deviceId", rs.getString("DEVICE_ID")); | ||
| 279 | - map.put("ts", rs.getLong("TS")); | ||
| 280 | - map.put("timestamp", rs.getLong("TS")); | ||
| 281 | - map.put("stopNo", rs.getString("STOP_NO")); | ||
| 282 | - map.put("direction", rs.getFloat("DIRECTION")); | 318 | + private List<DeviceChange> findDeviceChangeLogs(String nbbm, long t, long st){ |
| 319 | + List<DeviceChange> dcs = null; | ||
| 320 | + List<DeviceChange> rs = new ArrayList<>(); | ||
| 321 | + try{ | ||
| 283 | 322 | ||
| 284 | - map.put("lineId", rs.getString("LINE_ID")); | ||
| 285 | - map.put("speed", rs.getFloat("SPEED_GPS")); | 323 | + //JdbcTemplate jdbcTemplate_ms = new JdbcTemplate(DBUtils_MS.getDataSource()); |
| 324 | + dcs = jdbcTemplate.query("select cl_zbh as nbbm,new_device_no as device,UNIX_TIMESTAMP(qyrq) * 1000 as st from bsth_c_car_device where cl_zbh='"+nbbm+"' and UNIX_TIMESTAMP(qyrq)<" + (t / 1000) | ||
| 325 | + , BeanPropertyRowMapper.newInstance(DeviceChange.class)); | ||
| 286 | 326 | ||
| 287 | - inOutStop = rs.getInt("INOUT_STOP"); | ||
| 288 | - map.put("inout_stop", inOutStop); | ||
| 289 | 327 | ||
| 290 | - arrival = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS")); | ||
| 291 | - if (arrival != null) { | ||
| 292 | - map.put("inout_stop_info", arrival); | ||
| 293 | - map.put("inout_stop", arrival.getInOut()); | 328 | + Collections.sort(dcs, new Comparator<DeviceChange>() { |
| 329 | + @Override | ||
| 330 | + public int compare(DeviceChange d1, DeviceChange d2) { | ||
| 331 | + return (int) (d1.getSt() - d2.getSt()); | ||
| 294 | } | 332 | } |
| 333 | + }); | ||
| 295 | 334 | ||
| 296 | - map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID"))); | ||
| 297 | - map.put("state", getService(serviceState)); | ||
| 298 | - // 上下行 | ||
| 299 | - map.put("upDown", getUpOrDown(serviceState)); | ||
| 300 | - //路段编码 | ||
| 301 | - map.put("section_code", rs.getString("SECTION_CODE")); | ||
| 302 | - list.add(map); | 335 | + for(int i = 0,len=dcs.size(); i < len - 1; i++){ |
| 336 | + dcs.get(i).setEt(dcs.get(i + 1).getSt()); | ||
| 303 | } | 337 | } |
| 304 | - } catch (Exception e) { | 338 | + |
| 339 | + for(DeviceChange dc : dcs){ | ||
| 340 | + if(dc.getEt() > st) | ||
| 341 | + rs.add(dc); | ||
| 342 | + } | ||
| 343 | + }catch (Exception e){ | ||
| 305 | logger.error("", e); | 344 | logger.error("", e); |
| 306 | - } finally { | ||
| 307 | - DBUtils_MS.close(rs, ps, conn); | ||
| 308 | } | 345 | } |
| 309 | - return list; | 346 | + return rs; |
| 310 | } | 347 | } |
| 311 | 348 | ||
| 312 | public static byte getGpsValid(long serviceState) { | 349 | public static byte getGpsValid(long serviceState) { |
| 313 | return (byte)(((serviceState & 0x80000000) == 0x80000000) ? 1 : 0); | 350 | return (byte)(((serviceState & 0x80000000) == 0x80000000) ? 1 : 0); |
| 314 | } | 351 | } |
| 315 | 352 | ||
| 316 | - public Map<String, ArrivalEntity> findArrivalByTs(int weekOfYear, Long st, Long et, String devicesInSql) { | 353 | + public Map<String, ArrivalEntity> findArrivalByTs(Long st, Long et, List<DeviceChange> dcs) { |
| 317 | Map<String, ArrivalEntity> map = new HashMap<>(); | 354 | Map<String, ArrivalEntity> map = new HashMap<>(); |
| 318 | 355 | ||
| 319 | - String sql = "SELECT DEVICE_ID,LINE_ID,STOP_NO,TS,UP_DOWN,IN_OUT,WEEKS_YEAR,CREATE_DATE FROM bsth_c_arrival_info where weeks_year=? and device_id in (" | ||
| 320 | - + devicesInSql + ") and ts > ? and ts < ?"; | ||
| 321 | - try { | ||
| 322 | - conn = DBUtils_MS.getConnection(); | ||
| 323 | - ps = conn.prepareStatement(sql); | ||
| 324 | - ps.setInt(1, weekOfYear); | ||
| 325 | - ps.setLong(2, st * 1000); | ||
| 326 | - ps.setLong(3, et * 1000); | 356 | + // weeks_year 分区字段 |
| 357 | + Calendar sCal = Calendar.getInstance(); | ||
| 358 | + sCal.setTime(new Date(st * 1000)); | ||
| 359 | + int sWeekOfYear = sCal.get(Calendar.WEEK_OF_YEAR); | ||
| 360 | + Calendar eCal = Calendar.getInstance(); | ||
| 361 | + eCal.setTime(new Date(et * 1000)); | ||
| 362 | + int eWeekOfYear = eCal.get(Calendar.DAY_OF_YEAR); | ||
| 363 | + | ||
| 364 | + StringBuilder sql = new StringBuilder(""); | ||
| 365 | + long t1,t2; | ||
| 366 | + DeviceChange dc; | ||
| 367 | + for(int i = 0,len=dcs.size(); i < len; i++){ | ||
| 368 | + t1 = st; | ||
| 369 | + t2 = et; | ||
| 370 | + dc = dcs.get(i); | ||
| 371 | + if(dc.getSt() > st) | ||
| 372 | + t1 = dc.getSt(); | ||
| 373 | + if(dc.getEt() < et) | ||
| 374 | + t2 = dc.getEt(); | ||
| 375 | + | ||
| 376 | + sql.append("SELECT DEVICE_ID,LINE_ID as LINE_CODE,STOP_NO,TS,UP_DOWN,IN_OUT,WEEKS_YEAR,CREATE_DATE FROM bsth_c_arrival_info " + | ||
| 377 | + " where weeks_year in ("+sWeekOfYear+", "+eWeekOfYear+") and device_id='"+dc.getDevice()+"' and ts > "+t1+" and ts < " + t2); | ||
| 378 | + | ||
| 379 | + if(i == len - 1) | ||
| 380 | + sql.append(" ORDER BY device_id,ts,stop_no"); | ||
| 381 | + else | ||
| 382 | + sql.append(" UNION"); | ||
| 383 | + } | ||
| 327 | 384 | ||
| 328 | - rs = ps.executeQuery(); | ||
| 329 | - ArrivalEntity arr; | ||
| 330 | - int inOut, updown; | ||
| 331 | - String prefix, stationName, lineId; | ||
| 332 | - while (rs.next()) { | ||
| 333 | - lineId = rs.getString("LINE_ID"); | ||
| 334 | - updown = rs.getInt("UP_DOWN"); | ||
| 335 | - prefix = lineId + "_" + updown + "_"; | ||
| 336 | - stationName = BasicData.getStationNameByCode(rs.getString("STOP_NO"), prefix); | 385 | + JdbcTemplate jdbcTemplate_ms = new JdbcTemplate(DBUtils_MS.getDataSource()); |
| 386 | + List<ArrivalEntity> list = jdbcTemplate_ms.query(sql.toString(), BeanPropertyRowMapper.newInstance(ArrivalEntity.class)); | ||
| 337 | 387 | ||
| 338 | - if (StringUtils.isEmpty(stationName)) | ||
| 339 | - continue; | 388 | + String stationName, prefix; |
| 389 | + for(ArrivalEntity arr : list){ | ||
| 390 | + prefix = arr.getLineCode() + "_" + arr.getUpDown() + "_"; | ||
| 391 | + stationName = BasicData.getStationNameByCode(arr.getStopNo(), prefix); | ||
| 340 | 392 | ||
| 341 | - arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), lineId, | ||
| 342 | - updown, rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"), | ||
| 343 | - rs.getInt("WEEKS_YEAR"), stationName); | 393 | + arr.setStopName(stationName); |
| 344 | 394 | ||
| 345 | - // 设备号_时间戳_进出状态 为key | ||
| 346 | - // 反转进出状态 | ||
| 347 | - inOut = arr.getInOut() == 0 ? 1 : 0; | ||
| 348 | - map.put(arr.getDeviceId() + "_" + arr.getTs(), arr); | ||
| 349 | - } | ||
| 350 | - } catch (Exception e) { | ||
| 351 | - logger.error("", e); | ||
| 352 | - } finally { | ||
| 353 | - DBUtils_MS.close(rs, ps, conn); | 395 | + // 反转进出状态 |
| 396 | + map.put(arr.getDeviceId() + "_" + arr.getTs(), arr); | ||
| 354 | } | 397 | } |
| 355 | return map; | 398 | return map; |
| 356 | } | 399 | } |
| @@ -612,14 +655,6 @@ public class GpsServiceImpl implements GpsService { | @@ -612,14 +655,6 @@ public class GpsServiceImpl implements GpsService { | ||
| 612 | //获取历史gps 数据 | 655 | //获取历史gps 数据 |
| 613 | List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete(history(new String[]{nbbm}, st, et)); | 656 | List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete(history(new String[]{nbbm}, st, et)); |
| 614 | if (list != null && list.size() > 0) { | 657 | if (list != null && list.size() > 0) { |
| 615 | - //获取路段信息 | ||
| 616 | - /*String sql = "select ID, ST_AsText(GROAD_VECTOR) as GROAD_VECTOR,ROAD_CODE,ROAD_NAME,SPEED from bsth_c_road where road_code in(select section_code from bsth_c_sectionroute where line_code=? and destroy=0)"; | ||
| 617 | - List<Road_DTO> roads = Road_DTO.craete(jdbcTemplate.queryForList(sql, list.get(0).getLineId())); | ||
| 618 | - | ||
| 619 | - //为GPS数据关联路段信息 | ||
| 620 | - for (HistoryGps_DTOV3 gps : list) { | ||
| 621 | - matchRoadToGps(gps, roads); | ||
| 622 | - }*/ | ||
| 623 | //关联路段名称 | 658 | //关联路段名称 |
| 624 | Map<String, String> sectionCode2Name = GeoCacheData.sectionCode2NameMap(); | 659 | Map<String, String> sectionCode2Name = GeoCacheData.sectionCode2NameMap(); |
| 625 | for(HistoryGps_DTOV3 gps : list){ | 660 | for(HistoryGps_DTOV3 gps : list){ |
src/main/java/com/bsth/service/gps/entity/DeviceChange.java
0 → 100644
| 1 | +package com.bsth.service.gps.entity; | ||
| 2 | + | ||
| 3 | +/** | ||
| 4 | + * 车辆设备变更记录 | ||
| 5 | + * Created by panzhao on 2018/1/16. | ||
| 6 | + */ | ||
| 7 | +public class DeviceChange { | ||
| 8 | + | ||
| 9 | + private String nbbm; | ||
| 10 | + private String device; | ||
| 11 | + private long st; | ||
| 12 | + private long et; | ||
| 13 | + | ||
| 14 | + public String getNbbm() { | ||
| 15 | + return nbbm; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + public void setNbbm(String nbbm) { | ||
| 19 | + this.nbbm = nbbm; | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + public String getDevice() { | ||
| 23 | + return device; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public void setDevice(String device) { | ||
| 27 | + this.device = device; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public long getSt() { | ||
| 31 | + return st; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + public void setSt(long st) { | ||
| 35 | + this.st = st; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public long getEt() { | ||
| 39 | + return et; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + public void setEt(long et) { | ||
| 43 | + this.et = et; | ||
| 44 | + } | ||
| 45 | +} |
src/main/java/com/bsth/service/realcontrol/ChildTaskPlanService.java
| @@ -10,4 +10,6 @@ public interface ChildTaskPlanService extends BaseService<ChildTaskPlan, Long>{ | @@ -10,4 +10,6 @@ public interface ChildTaskPlanService extends BaseService<ChildTaskPlan, Long>{ | ||
| 10 | Map<String,Object> saveHistory(ChildTaskPlan childTask); | 10 | Map<String,Object> saveHistory(ChildTaskPlan childTask); |
| 11 | 11 | ||
| 12 | Map<String,Object> delHistory(Long id); | 12 | Map<String,Object> delHistory(Long id); |
| 13 | + | ||
| 14 | +Map<String,Object> update(ChildTaskPlan childTask); | ||
| 13 | } | 15 | } |
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
| @@ -21,6 +21,7 @@ import javax.transaction.Transactional; | @@ -21,6 +21,7 @@ import javax.transaction.Transactional; | ||
| 21 | import java.util.Date; | 21 | import java.util.Date; |
| 22 | import java.util.HashMap; | 22 | import java.util.HashMap; |
| 23 | import java.util.Map; | 23 | import java.util.Map; |
| 24 | +import java.util.Set; | ||
| 24 | 25 | ||
| 25 | @Service | 26 | @Service |
| 26 | public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService { | 27 | public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService { |
| @@ -131,6 +132,66 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Lon | @@ -131,6 +132,66 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Lon | ||
| 131 | return rs; | 132 | return rs; |
| 132 | } | 133 | } |
| 133 | 134 | ||
| 135 | + @Override | ||
| 136 | + public Map<String, Object> update(ChildTaskPlan t) { | ||
| 137 | + Map<String, Object> rs = new HashMap(); | ||
| 138 | + try { | ||
| 139 | + ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId()); | ||
| 140 | + //保存起终点名称 | ||
| 141 | + if(StringUtils.isEmpty(t.getStartStationName())) | ||
| 142 | + t.setStartStationName(getStationName(sch.getXlBm(), t.getStartStation())); | ||
| 143 | + | ||
| 144 | + if(StringUtils.isEmpty(t.getEndStationName())) | ||
| 145 | + t.setEndStationName(getStationName(sch.getXlBm(), t.getEndStation())); | ||
| 146 | + if(t.getDestroyReason() == null) | ||
| 147 | + t.setDestroyReason(""); | ||
| 148 | + | ||
| 149 | + | ||
| 150 | + //根据id 获取原对象 | ||
| 151 | + ChildTaskPlan task = null; | ||
| 152 | + Set<ChildTaskPlan> set = sch.getcTasks(); | ||
| 153 | + for(ChildTaskPlan obj : set){ | ||
| 154 | + if(obj.getId() == t.getId()){ | ||
| 155 | + task = obj; | ||
| 156 | + break; | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + if(null == task){ | ||
| 161 | + rs.put("status", ResponseCode.ERROR); | ||
| 162 | + rs.put("msg", "失败,服务端无法定位到数据!"); | ||
| 163 | + return rs; | ||
| 164 | + } | ||
| 165 | + //更新字段 | ||
| 166 | + task.setStartStation(t.getStartStation()); | ||
| 167 | + task.setStartStationName(t.getStartStationName()); | ||
| 168 | + task.setEndStation(t.getEndStation()); | ||
| 169 | + task.setEndStationName(t.getEndStationName()); | ||
| 170 | + task.setStartDate(t.getStartDate()); | ||
| 171 | + task.setEndDate(t.getEndDate()); | ||
| 172 | + task.setMileageType(t.getMileageType()); | ||
| 173 | + task.setMileage(t.getMileage()); | ||
| 174 | + task.setDestroy(t.isDestroy()); | ||
| 175 | + task.setDestroyReason(t.getReason()); | ||
| 176 | + task.setReason(t.getReason()); | ||
| 177 | + task.setType1(t.getType1()); | ||
| 178 | + task.setType2(t.getType2()); | ||
| 179 | + task.setNoClerk(t.isNoClerk()); | ||
| 180 | + task.setRemarks(t.getRemarks()); | ||
| 181 | + | ||
| 182 | + //更新数据库 | ||
| 183 | + super.save(task); | ||
| 184 | + | ||
| 185 | + rs.put("status", ResponseCode.SUCCESS); | ||
| 186 | + rs.put("t", sch); | ||
| 187 | + }catch (Exception e){ | ||
| 188 | + logger.error("", e); | ||
| 189 | + rs.put("status", ResponseCode.ERROR); | ||
| 190 | + rs.put("msg", e.getMessage()); | ||
| 191 | + } | ||
| 192 | + return rs; | ||
| 193 | + } | ||
| 194 | + | ||
| 134 | private String getStationName(String lineCode, String stationCode){ | 195 | private String getStationName(String lineCode, String stationCode){ |
| 135 | String name; | 196 | String name; |
| 136 | String prefix1 = lineCode + "_" + 0 + "_", | 197 | String prefix1 = lineCode + "_" + 0 + "_", |
src/main/resources/static/pages/base/geo_data_edit/js/submit.js
| @@ -52,6 +52,8 @@ var gb_data_submit = function () { | @@ -52,6 +52,8 @@ var gb_data_submit = function () { | ||
| 52 | $(document).on('click', '.up_down_route_list .station_route .ul_li_input .save_icon_btn', function (e) { | 52 | $(document).on('click', '.up_down_route_list .station_route .ul_li_input .save_icon_btn', function (e) { |
| 53 | var f = $(this).parents('form'); | 53 | var f = $(this).parents('form'); |
| 54 | var data = f.serializeJSON(); | 54 | var data = f.serializeJSON(); |
| 55 | + data.lineCode = g_line_code; | ||
| 56 | + data.versions = g_version; | ||
| 55 | 57 | ||
| 56 | UIkit.modal.confirm('确定将站点名称修改为【'+data.stationName+'】?').then(function() { | 58 | UIkit.modal.confirm('确定将站点名称修改为【'+data.stationName+'】?').then(function() { |
| 57 | show_run_text('正在保存...'); | 59 | show_run_text('正在保存...'); |
src/main/resources/static/pages/base/geo_data_edit/js/version_manage.js
| @@ -152,6 +152,7 @@ var gb_version_manage = function () { | @@ -152,6 +152,7 @@ var gb_version_manage = function () { | ||
| 152 | var version = $(this).data('version'); | 152 | var version = $(this).data('version'); |
| 153 | 153 | ||
| 154 | storage.setItem("geo_data_edit_line_version" , version); | 154 | storage.setItem("geo_data_edit_line_version" , version); |
| 155 | + g_version = version; | ||
| 155 | $loadPanel.show(); | 156 | $loadPanel.show(); |
| 156 | clearAll(); | 157 | clearAll(); |
| 157 | startup(); | 158 | startup(); |
src/main/resources/static/pages/summary/destory_sch_detail/list.html
| @@ -161,7 +161,7 @@ | @@ -161,7 +161,7 @@ | ||
| 161 | <button class="uk-button uk-button-text export_excel" style="padding: 0 5px;">导出数据</button> | 161 | <button class="uk-button uk-button-text export_excel" style="padding: 0 5px;">导出数据</button> |
| 162 | </div> | 162 | </div> |
| 163 | <div class="ct_field ct_field_bottom"> | 163 | <div class="ct_field ct_field_bottom"> |
| 164 | - <span uk-icon="icon: question" title="不统计进出场和子任务" uk-tooltip="pos: bottom"></span> | 164 | + <span uk-icon="icon: question" title="不统计进出场和2点间空驶" uk-tooltip="pos: bottom"></span> |
| 165 | </div> | 165 | </div> |
| 166 | </form> | 166 | </form> |
| 167 | </div> | 167 | </div> |
src/main/resources/static/real_control_v2/css/line_schedule.css
| @@ -545,7 +545,7 @@ dl.relevance-active.intimity dd:nth-child(n+2) { | @@ -545,7 +545,7 @@ dl.relevance-active.intimity dd:nth-child(n+2) { | ||
| 545 | dl.relevance-active.intimity dd:nth-child(n+2) a { | 545 | dl.relevance-active.intimity dd:nth-child(n+2) a { |
| 546 | color: white !important; | 546 | color: white !important; |
| 547 | } | 547 | } |
| 548 | - | 548 | +/* |
| 549 | dl.relevance-active dd.tl-qrlb, | 549 | dl.relevance-active dd.tl-qrlb, |
| 550 | dl.relevance-active.intimity dd.tl-qrlb{ | 550 | dl.relevance-active.intimity dd.tl-qrlb{ |
| 551 | background: linear-gradient(to right, #a9a911, #808000, #8baabf) !important; | 551 | background: linear-gradient(to right, #a9a911, #808000, #8baabf) !important; |
| @@ -587,7 +587,7 @@ dl.relevance-active.intimity dd.tl-xxrd { | @@ -587,7 +587,7 @@ dl.relevance-active.intimity dd.tl-xxrd { | ||
| 587 | dl.relevance-active dd.tl-xxfc, | 587 | dl.relevance-active dd.tl-xxfc, |
| 588 | dl.relevance-active.intimity dd.tl-xxfc { | 588 | dl.relevance-active.intimity dd.tl-xxfc { |
| 589 | background: linear-gradient(to right, #8baabf, rgb(43, 185, 185), rgb(0,255,255)) !important; | 589 | background: linear-gradient(to right, #8baabf, rgb(43, 185, 185), rgb(0,255,255)) !important; |
| 590 | -} | 590 | +}*/ |
| 591 | 591 | ||
| 592 | dl.relevance-active.intimity dd span.fcsj-diff { | 592 | dl.relevance-active.intimity dd span.fcsj-diff { |
| 593 | color: #616060; | 593 | color: #616060; |
src/main/resources/static/real_control_v2/css/main.css
| @@ -1092,11 +1092,11 @@ dl.intimity span.late-badge{ | @@ -1092,11 +1092,11 @@ dl.intimity span.late-badge{ | ||
| 1092 | } | 1092 | } |
| 1093 | 1093 | ||
| 1094 | .qtip.sch-badge-tip{ | 1094 | .qtip.sch-badge-tip{ |
| 1095 | - max-width: 500px; | 1095 | + max-width: 700px; |
| 1096 | } | 1096 | } |
| 1097 | 1097 | ||
| 1098 | .tip_task_list { | 1098 | .tip_task_list { |
| 1099 | - width: 460px; | 1099 | + width: 530px; |
| 1100 | margin-bottom: -10px; | 1100 | margin-bottom: -10px; |
| 1101 | } | 1101 | } |
| 1102 | .tip_task_list dl{ | 1102 | .tip_task_list dl{ |
| @@ -1119,19 +1119,30 @@ dl.intimity span.late-badge{ | @@ -1119,19 +1119,30 @@ dl.intimity span.late-badge{ | ||
| 1119 | } | 1119 | } |
| 1120 | 1120 | ||
| 1121 | .tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1){ | 1121 | .tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1){ |
| 1122 | - width: 19%; | 1122 | + width: 38px; |
| 1123 | + border-right: 1px solid #c8c8c8; | ||
| 1123 | } | 1124 | } |
| 1124 | .tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2){ | 1125 | .tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2){ |
| 1125 | - width: 12%; | 1126 | + width: 18%; |
| 1127 | + text-indent: 5px; | ||
| 1126 | } | 1128 | } |
| 1127 | .tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3){ | 1129 | .tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3){ |
| 1128 | - width: 28%; | 1130 | + width: 11%; |
| 1129 | } | 1131 | } |
| 1130 | .tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4){ | 1132 | .tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4){ |
| 1131 | - width: 28%; | 1133 | + width: 25%; |
| 1132 | } | 1134 | } |
| 1133 | .tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5){ | 1135 | .tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5){ |
| 1134 | - width: 13%; | 1136 | + width: 25%; |
| 1137 | +} | ||
| 1138 | +.tip_task_list dl dt:nth-of-type(6), .tip_task_list dl dd:nth-of-type(6){ | ||
| 1139 | + | ||
| 1140 | +} | ||
| 1141 | + | ||
| 1142 | +.tip_task_list dl dd:nth-of-type(1) a{ | ||
| 1143 | + color: #3c3c3c; | ||
| 1144 | + text-decoration: underline; | ||
| 1145 | + font-size: 12px; | ||
| 1135 | } | 1146 | } |
| 1136 | 1147 | ||
| 1137 | .tip_task_list dl.service{ | 1148 | .tip_task_list dl.service{ |
| @@ -1335,7 +1346,7 @@ ul.left_tabs_lg li{ | @@ -1335,7 +1346,7 @@ ul.left_tabs_lg li{ | ||
| 1335 | } | 1346 | } |
| 1336 | 1347 | ||
| 1337 | #add-sub-task-main-modal .forms{ | 1348 | #add-sub-task-main-modal .forms{ |
| 1338 | - max-height: 488px; | 1349 | + max-height: 642px; |
| 1339 | overflow-y: auto; | 1350 | overflow-y: auto; |
| 1340 | overflow-x: hidden; | 1351 | overflow-x: hidden; |
| 1341 | padding: 8px 8px 0 0; | 1352 | padding: 8px 8px 0 0; |
| @@ -1800,4 +1811,109 @@ dl.active>dd.disabled{ | @@ -1800,4 +1811,109 @@ dl.active>dd.disabled{ | ||
| 1800 | 1811 | ||
| 1801 | .c_b_item>span.c_b_over{ | 1812 | .c_b_item>span.c_b_over{ |
| 1802 | float: right; | 1813 | float: right; |
| 1814 | +} | ||
| 1815 | + | ||
| 1816 | +.mileage_elec_panel{ | ||
| 1817 | + position: absolute; | ||
| 1818 | + width: 100%; | ||
| 1819 | + /*height: 90px;*/ | ||
| 1820 | + z-index: 1; | ||
| 1821 | + background: white; | ||
| 1822 | + bottom: 0px; | ||
| 1823 | + box-shadow: 1px 0px 15px rgba(90, 90, 90, 0.48); | ||
| 1824 | + padding: 9px 15px; | ||
| 1825 | + border-radius: 0 5px; | ||
| 1826 | + color: #000; | ||
| 1827 | + | ||
| 1828 | + display: none; | ||
| 1829 | +} | ||
| 1830 | + | ||
| 1831 | +.mileage_elec_panel ._title{ | ||
| 1832 | + margin: 5px 3px; | ||
| 1833 | + font-size: 15px; | ||
| 1834 | +} | ||
| 1835 | + | ||
| 1836 | +.mileage_elec_panel .LD_item{ | ||
| 1837 | + margin: 5px 0; | ||
| 1838 | + font-family: 微软雅黑; | ||
| 1839 | +} | ||
| 1840 | + | ||
| 1841 | +.mileage_elec_panel .LD_item>span{ | ||
| 1842 | + padding: 3px; | ||
| 1843 | + display: inline-block; | ||
| 1844 | + width: 85px; | ||
| 1845 | +} | ||
| 1846 | + | ||
| 1847 | +.mileage_elec_panel .lp_name{ | ||
| 1848 | + padding: 0 5px; | ||
| 1849 | + background: #f2f2f2; | ||
| 1850 | + border-radius: 15px | ||
| 1851 | +} | ||
| 1852 | + | ||
| 1853 | +.mileage_elec_panel .LD_item>span>a{ | ||
| 1854 | + color: #000; | ||
| 1855 | +} | ||
| 1856 | + | ||
| 1857 | +.mileage_elec_panel .LD_item>span:nth-of-type(1)>a{ | ||
| 1858 | + color: blue; | ||
| 1859 | +} | ||
| 1860 | + | ||
| 1861 | +/*.mileage_elec_panel .LD_item>span:nth-of-type(2)>a{ | ||
| 1862 | + color: #fa3a2c; | ||
| 1863 | +} | ||
| 1864 | + | ||
| 1865 | +.mileage_elec_panel .LD_item>span:nth-of-type(3)>a{ | ||
| 1866 | + color: #515151; | ||
| 1867 | +}*/ | ||
| 1868 | + | ||
| 1869 | +.mileage_elec_panel hr{ | ||
| 1870 | + height:1px;border:none;border-top:1px dashed #b5b5b5; | ||
| 1871 | +} | ||
| 1872 | + | ||
| 1873 | +#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-label { | ||
| 1874 | + width: 70px; | ||
| 1875 | +} | ||
| 1876 | + | ||
| 1877 | +#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-controls { | ||
| 1878 | + margin-left: 75px; | ||
| 1879 | +} | ||
| 1880 | + | ||
| 1881 | +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid+.uk-grid, | ||
| 1882 | +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid-margin, | ||
| 1883 | +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid>*>.uk-panel+.uk-panel{ | ||
| 1884 | + margin-top: 22px; | ||
| 1885 | +} | ||
| 1886 | + | ||
| 1887 | +.c_task_mileage_abnormal, | ||
| 1888 | +.c_task_mileage_abnormal .ct_table>.ct_table_head dl, | ||
| 1889 | +.c_task_mileage_abnormal .ct_table dl{ | ||
| 1890 | + background: #ffe7e7 !important; | ||
| 1891 | +} | ||
| 1892 | + | ||
| 1893 | +.tip_task_count_dl{ | ||
| 1894 | + width: calc(100% + 22px) !important; | ||
| 1895 | + margin-left: -11px !important; | ||
| 1896 | + border-top: 1px solid #e6e6e6 !important; | ||
| 1897 | +} | ||
| 1898 | + | ||
| 1899 | +.tip_task_count_dl>dd{ | ||
| 1900 | + width: 100% !important; | ||
| 1901 | + border-right: 0 !important; | ||
| 1902 | + height: 35px !important; | ||
| 1903 | + background: #f3f3f3; | ||
| 1904 | + margin-bottom: -3px; | ||
| 1905 | +} | ||
| 1906 | + | ||
| 1907 | +.tip_task_count_dl>dd>span{ | ||
| 1908 | + font-size: 13px; | ||
| 1909 | + color: #000; | ||
| 1910 | + height: 55px; | ||
| 1911 | + display: inline-block; | ||
| 1912 | + padding: 7px 0; | ||
| 1913 | + border-radius: 0; | ||
| 1914 | + text-indent: 12px; | ||
| 1915 | +} | ||
| 1916 | + | ||
| 1917 | +.tip_task_list>dl:nth-last-child(2){ | ||
| 1918 | + border-bottom: 0 !important; | ||
| 1803 | } | 1919 | } |
| 1804 | \ No newline at end of file | 1920 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/line_schedule/badge_tooltip.html
| @@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
| 3 | <div class="tl-tip-panel"> | 3 | <div class="tl-tip-panel"> |
| 4 | <div class="tip_task_list"> | 4 | <div class="tip_task_list"> |
| 5 | <dl> | 5 | <dl> |
| 6 | + <dt>操作</dt> | ||
| 6 | <dt>类型</dt> | 7 | <dt>类型</dt> |
| 7 | <dt>里程</dt> | 8 | <dt>里程</dt> |
| 8 | <dt>起点</dt> | 9 | <dt>起点</dt> |
| @@ -11,6 +12,7 @@ | @@ -11,6 +12,7 @@ | ||
| 11 | </dl> | 12 | </dl> |
| 12 | {{each tasks as t i}} | 13 | {{each tasks as t i}} |
| 13 | <dl class="{{t.mileageType}} {{if t.destroy}}destroy{{/if}} {{if t.type1=='临加'}}temp_add{{/if}}"> | 14 | <dl class="{{t.mileageType}} {{if t.destroy}}destroy{{/if}} {{if t.type1=='临加'}}temp_add{{/if}}"> |
| 15 | + <dd><a data-line="{{lineCode}}" data-id="{{t.id}}" data-schid="{{sch_id}}" class="tip_task_edit_link">编辑</a></dd> | ||
| 14 | <dd> | 16 | <dd> |
| 15 | {{if t.mileageType=="service"}} | 17 | {{if t.mileageType=="service"}} |
| 16 | 营运 | 18 | 营运 |
| @@ -35,6 +37,13 @@ | @@ -35,6 +37,13 @@ | ||
| 35 | <dd title="{{t.remarks}}">{{t.remarks}}</dd> | 37 | <dd title="{{t.remarks}}">{{t.remarks}}</dd> |
| 36 | </dl> | 38 | </dl> |
| 37 | {{/each}} | 39 | {{/each}} |
| 40 | + <dl class="tip_task_count_dl" > | ||
| 41 | + <dd> | ||
| 42 | + <span>计划:{{jhlc}}</span> | ||
| 43 | + <span>营运+烂班:{{serviceCount}}</span> | ||
| 44 | + <span>空驶:{{emptyCount}}</span> | ||
| 45 | + </dd> | ||
| 46 | + </dl> | ||
| 38 | </div> | 47 | </div> |
| 39 | </div> | 48 | </div> |
| 40 | </script> | 49 | </script> |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/fcxxwt.html
| @@ -205,29 +205,6 @@ | @@ -205,29 +205,6 @@ | ||
| 205 | notify_err("当前操作需要选择调整原因!"); | 205 | notify_err("当前操作需要选择调整原因!"); |
| 206 | return; | 206 | return; |
| 207 | } | 207 | } |
| 208 | - | ||
| 209 | - //里程有修改 | ||
| 210 | - //if(data.jhlc != sch.jhlc && data.jhlc != 0){ | ||
| 211 | - | ||
| 212 | - /*var confHtml = '<h4 style="color: #c04c4c;margin-bottom: 9px;">确认要将班次里程由'+sch.jhlc+' 修改为'+data.jhlc+' </h4><small>备注:</small>'; | ||
| 213 | - UIkit.modal.prompt(confHtml, data.remarks, function(remarks){ | ||
| 214 | - if(remarks){ | ||
| 215 | - //在这里写操作日志 | ||
| 216 | - | ||
| 217 | - //提交 | ||
| 218 | - postData(data); | ||
| 219 | - } | ||
| 220 | - else{ | ||
| 221 | - notify_err('失败,你必须填写备注!'); | ||
| 222 | - } | ||
| 223 | - }, { | ||
| 224 | - labels: { | ||
| 225 | - Ok: '确定修改公里并保存', | ||
| 226 | - Cancel: '取消' | ||
| 227 | - } | ||
| 228 | - });*/ | ||
| 229 | - //} | ||
| 230 | - //else | ||
| 231 | postData(data); | 208 | postData(data); |
| 232 | }); | 209 | }); |
| 233 | 210 | ||
| @@ -238,6 +215,8 @@ | @@ -238,6 +215,8 @@ | ||
| 238 | notify_succ('操作成功!'); | 215 | notify_succ('操作成功!'); |
| 239 | //计算应发未发 | 216 | //计算应发未发 |
| 240 | gb_schedule_table.calc_yfwf_num(sch.xlBm); | 217 | gb_schedule_table.calc_yfwf_num(sch.xlBm); |
| 218 | + //更新路牌公里统计面板 | ||
| 219 | + gb_schedule_table.showLpMileageTipBySch(sch); | ||
| 241 | }); | 220 | }); |
| 242 | }; | 221 | }; |
| 243 | 222 |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
| @@ -153,13 +153,13 @@ | @@ -153,13 +153,13 @@ | ||
| 153 | </script> | 153 | </script> |
| 154 | 154 | ||
| 155 | <script id="sub_task-fail-status-temp" type="text/html"> | 155 | <script id="sub_task-fail-status-temp" type="text/html"> |
| 156 | - <div class="child-task-status fail"><i class="uk-icon-times-circle"></i> 营运里程 与主任务不符,请检查子任务 | 156 | + <div class="child-task-status fail"><i class="uk-icon-times-circle"></i> 子任务营运公里与计划不平 |
| 157 | <span class="calc-detail">{{calcs}}</span></div> | 157 | <span class="calc-detail">{{calcs}}</span></div> |
| 158 | </script> | 158 | </script> |
| 159 | 159 | ||
| 160 | <script> | 160 | <script> |
| 161 | (function () { | 161 | (function () { |
| 162 | - var modal_opts = {center: false, bgclose: false, modal: false} | 162 | + var modal_opts = {center: false, bgclose: false, modal: false}; |
| 163 | var modal = '#schedule-lj_zrw-modal', | 163 | var modal = '#schedule-lj_zrw-modal', |
| 164 | f, | 164 | f, |
| 165 | m_t_body = '.main-schedule-table .ct_table_body', | 165 | m_t_body = '.main-schedule-table .ct_table_body', |
| @@ -277,7 +277,7 @@ | @@ -277,7 +277,7 @@ | ||
| 277 | var i = 0; | 277 | var i = 0; |
| 278 | if (sch.cTasks.length == 0) | 278 | if (sch.cTasks.length == 0) |
| 279 | return; | 279 | return; |
| 280 | - var sum = 0, calcs = ''; | 280 | + var sum = 0, calcs = ' '; |
| 281 | $.each(sch.cTasks, function () { | 281 | $.each(sch.cTasks, function () { |
| 282 | if (this.mileageType == 'service') { | 282 | if (this.mileageType == 'service') { |
| 283 | sum = gb_common.accAdd(sum, this.mileage); | 283 | sum = gb_common.accAdd(sum, this.mileage); |
| @@ -287,13 +287,16 @@ | @@ -287,13 +287,16 @@ | ||
| 287 | }); | 287 | }); |
| 288 | //公里与主任务不符合 | 288 | //公里与主任务不符合 |
| 289 | if (sum != sch.jhlcOrig) { | 289 | if (sum != sch.jhlcOrig) { |
| 290 | - if (i > 1) | ||
| 291 | - calcs += ('=' + sum); | 290 | + $('.uk-panel-box-secondary', modal).addClass('c_task_mileage_abnormal'); |
| 291 | + /*if (i > 1) | ||
| 292 | + calcs += ('=' + sum);*/ | ||
| 292 | calcs += (' ≠ ' + sch.jhlcOrig); | 293 | calcs += (' ≠ ' + sch.jhlcOrig); |
| 293 | calcs = calcs.substr(3); | 294 | calcs = calcs.substr(3); |
| 294 | var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs}); | 295 | var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs}); |
| 295 | $('#childTaskTitle', modal).append(htmlStr); | 296 | $('#childTaskTitle', modal).append(htmlStr); |
| 296 | } | 297 | } |
| 298 | + else | ||
| 299 | + $('.uk-panel-box-secondary', modal).removeClass('c_task_mileage_abnormal'); | ||
| 297 | }; | 300 | }; |
| 298 | 301 | ||
| 299 | //新增临加 | 302 | //新增临加 |
| @@ -323,10 +326,12 @@ | @@ -323,10 +326,12 @@ | ||
| 323 | gb_schedule_table.updateSchedule(rs.ts); | 326 | gb_schedule_table.updateSchedule(rs.ts); |
| 324 | gb_schedule_table.deheteSchedule(rs.delete); | 327 | gb_schedule_table.deheteSchedule(rs.delete); |
| 325 | $('.main-schedule-table', modal).trigger('refresh'); | 328 | $('.main-schedule-table', modal).trigger('refresh'); |
| 329 | + //更新路牌公里统计面板 | ||
| 330 | + gb_schedule_table.showLpMileageTipBySch(sch); | ||
| 326 | }); | 331 | }); |
| 327 | }, '确定删除'); | 332 | }, '确定删除'); |
| 328 | }; | 333 | }; |
| 329 | - //添加自定义子任务 | 334 | + /* //添加自定义子任务 |
| 330 | var add_sub_task_other = function () { | 335 | var add_sub_task_other = function () { |
| 331 | var sch = getActiveSch(); | 336 | var sch = getActiveSch(); |
| 332 | if (!sch) | 337 | if (!sch) |
| @@ -376,8 +381,32 @@ | @@ -376,8 +381,32 @@ | ||
| 376 | open_modal(folder + '/sub_task/add_sub_task_range_turn.html', { | 381 | open_modal(folder + '/sub_task/add_sub_task_range_turn.html', { |
| 377 | sch: sch | 382 | sch: sch |
| 378 | }, modal_opts); | 383 | }, modal_opts); |
| 379 | - }; | 384 | + };*/ |
| 385 | + | ||
| 386 | + //修改子任务 | ||
| 387 | + var edit_sub_task = function () { | ||
| 388 | + var sch = getActiveSch(); | ||
| 389 | + if (!sch) | ||
| 390 | + return notify_err('无法获取到主任务信息!'); | ||
| 391 | + var activeDl = $(s_t_body, modal).find('dl.context-menu-active'); | ||
| 392 | + if (activeDl.length == 0) | ||
| 393 | + return; | ||
| 394 | + var id = activeDl.data('id'); | ||
| 380 | 395 | ||
| 396 | + var cTask; | ||
| 397 | + for(var i=0,obj;obj=sch.cTasks[i++];){ | ||
| 398 | + if(obj.id==id){ | ||
| 399 | + cTask = obj; | ||
| 400 | + break; | ||
| 401 | + } | ||
| 402 | + } | ||
| 403 | + //打开子任务修改modal | ||
| 404 | + open_modal(folder + '/sub_task_v2/edit.html', { | ||
| 405 | + sch: sch, | ||
| 406 | + cTask: cTask | ||
| 407 | + }, modal_opts); | ||
| 408 | + }; | ||
| 409 | + | ||
| 381 | //删除子任务 | 410 | //删除子任务 |
| 382 | var remove_sub_task = function () { | 411 | var remove_sub_task = function () { |
| 383 | var activeDl = $(s_t_body, modal).find('dl.context-menu-active'); | 412 | var activeDl = $(s_t_body, modal).find('dl.context-menu-active'); |
| @@ -396,10 +425,12 @@ | @@ -396,10 +425,12 @@ | ||
| 396 | //选中班次 | 425 | //选中班次 |
| 397 | selectedDl(rs.t); | 426 | selectedDl(rs.t); |
| 398 | }, 300); | 427 | }, 300); |
| 428 | + //更新路牌公里统计面板 | ||
| 429 | + gb_schedule_table.showLpMileageTipBySch(rs.t); | ||
| 399 | }); | 430 | }); |
| 400 | }, '确定删除'); | 431 | }, '确定删除'); |
| 401 | }; | 432 | }; |
| 402 | - //加油 | 433 | + /*//加油 |
| 403 | var add_oil = function () { | 434 | var add_oil = function () { |
| 404 | var sch = getActiveSch(); | 435 | var sch = getActiveSch(); |
| 405 | if (!sch) | 436 | if (!sch) |
| @@ -412,7 +443,7 @@ | @@ -412,7 +443,7 @@ | ||
| 412 | open_modal(folder + '/sub_task/add_sub_task_oil.html', { | 443 | open_modal(folder + '/sub_task/add_sub_task_oil.html', { |
| 413 | sch: sch | 444 | sch: sch |
| 414 | }, modal_opts); | 445 | }, modal_opts); |
| 415 | - }; | 446 | + };*/ |
| 416 | 447 | ||
| 417 | var add_sub_task = function () { | 448 | var add_sub_task = function () { |
| 418 | var sch = getActiveSch(); | 449 | var sch = getActiveSch(); |
| @@ -429,14 +460,15 @@ | @@ -429,14 +460,15 @@ | ||
| 429 | var callbackHandler = { | 460 | var callbackHandler = { |
| 430 | add_temp_sch: add_temp_sch, | 461 | add_temp_sch: add_temp_sch, |
| 431 | remove_sch: remove_sch, | 462 | remove_sch: remove_sch, |
| 432 | - add_sub_task_other: add_sub_task_other, | ||
| 433 | - add_sub_task_in: add_sub_task_in, | 463 | + //add_sub_task_other: add_sub_task_other, |
| 464 | + //add_sub_task_in: add_sub_task_in, | ||
| 434 | remove_sub_task: remove_sub_task, | 465 | remove_sub_task: remove_sub_task, |
| 435 | - add_sub_task_out: add_sub_task_out, | ||
| 436 | - add_sub_task_range_turn: add_sub_task_range_turn, | ||
| 437 | - add_oil: add_oil, | 466 | + //add_sub_task_out: add_sub_task_out, |
| 467 | + //add_sub_task_range_turn: add_sub_task_range_turn, | ||
| 468 | + //add_oil: add_oil, | ||
| 438 | 469 | ||
| 439 | - add_sub_task: add_sub_task | 470 | + add_sub_task: add_sub_task, |
| 471 | + edit_sub_task: edit_sub_task | ||
| 440 | }; | 472 | }; |
| 441 | 473 | ||
| 442 | //右键菜单 | 474 | //右键菜单 |
| @@ -451,24 +483,7 @@ | @@ -451,24 +483,7 @@ | ||
| 451 | name: "临加班次" | 483 | name: "临加班次" |
| 452 | }, | 484 | }, |
| 453 | "add_sub_task": { | 485 | "add_sub_task": { |
| 454 | - name: "添加子任务"/*, | ||
| 455 | - items: { | ||
| 456 | - 'add_oil':{ | ||
| 457 | - name: '空驶进出场' | ||
| 458 | - }, | ||
| 459 | - 'add_sub_task_in': { | ||
| 460 | - name: '进场' | ||
| 461 | - }, | ||
| 462 | - 'add_sub_task_out': { | ||
| 463 | - name: '出场' | ||
| 464 | - }, | ||
| 465 | - 'add_sub_task_range_turn': { | ||
| 466 | - name: '区间调头' | ||
| 467 | - }, | ||
| 468 | - 'add_sub_task_other': { | ||
| 469 | - name: '自定义' | ||
| 470 | - } | ||
| 471 | - }*/ | 486 | + name: "添加子任务" |
| 472 | }, | 487 | }, |
| 473 | 'remove_sch': { | 488 | 'remove_sch': { |
| 474 | name: '删除' | 489 | name: '删除' |
| @@ -484,6 +499,10 @@ | @@ -484,6 +499,10 @@ | ||
| 484 | callbackHandler[key] && callbackHandler[key](); | 499 | callbackHandler[key] && callbackHandler[key](); |
| 485 | }, | 500 | }, |
| 486 | items: { | 501 | items: { |
| 502 | + "edit_sub_task":{ | ||
| 503 | + name: '修改子任务', | ||
| 504 | + icon: 'edit' | ||
| 505 | + }, | ||
| 487 | "remove_sub_task": { | 506 | "remove_sub_task": { |
| 488 | name: "删除子任务" | 507 | name: "删除子任务" |
| 489 | , icon: "delete" | 508 | , icon: "delete" |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_custom.html
| @@ -44,7 +44,7 @@ | @@ -44,7 +44,7 @@ | ||
| 44 | 44 | ||
| 45 | //班次类型切换 | 45 | //班次类型切换 |
| 46 | if(bcTypeMap[sch.bcType]) | 46 | if(bcTypeMap[sch.bcType]) |
| 47 | - $('[name=type2]', f).val(bcTypeMap[sch.bcType]) | 47 | + $('[name=type2]', f).val(bcTypeMap[sch.bcType]); |
| 48 | $('[name=type2]', f).trigger('change'); | 48 | $('[name=type2]', f).trigger('change'); |
| 49 | 49 | ||
| 50 | //滚动条到底 | 50 | //滚动条到底 |
| @@ -89,6 +89,9 @@ | @@ -89,6 +89,9 @@ | ||
| 89 | UIkit.modal('#add-sub-task-main-modal').hide(); | 89 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 90 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); | 90 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 91 | gb_data_basic.reload_stat_park_data(); | 91 | gb_data_basic.reload_stat_park_data(); |
| 92 | + | ||
| 93 | + //更新路牌公里统计面板 | ||
| 94 | + gb_schedule_table.showLpMileageTipBySch(sch); | ||
| 92 | return; | 95 | return; |
| 93 | } | 96 | } |
| 94 | var data = dataArray[i]; | 97 | var data = dataArray[i]; |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_in_out.html
| @@ -289,6 +289,9 @@ | @@ -289,6 +289,9 @@ | ||
| 289 | UIkit.modal('#add-sub-task-main-modal').hide(); | 289 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 290 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); | 290 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 291 | gb_data_basic.reload_stat_park_data(); | 291 | gb_data_basic.reload_stat_park_data(); |
| 292 | + | ||
| 293 | + //更新路牌公里统计面板 | ||
| 294 | + gb_schedule_table.showLpMileageTipBySch(sch); | ||
| 292 | return; | 295 | return; |
| 293 | } | 296 | } |
| 294 | var data = dataArray[i]; | 297 | var data = dataArray[i]; |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_range_normal.html
| @@ -127,6 +127,9 @@ | @@ -127,6 +127,9 @@ | ||
| 127 | if (i >= dataArray.length) { | 127 | if (i >= dataArray.length) { |
| 128 | UIkit.modal('#add-sub-task-main-modal').hide(); | 128 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 129 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); | 129 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 130 | + | ||
| 131 | + //更新路牌公里统计面板 | ||
| 132 | + gb_schedule_table.showLpMileageTipBySch(sch); | ||
| 130 | return; | 133 | return; |
| 131 | } | 134 | } |
| 132 | var data = dataArray[i]; | 135 | var data = dataArray[i]; |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_range_turn.html
| @@ -263,6 +263,9 @@ | @@ -263,6 +263,9 @@ | ||
| 263 | UIkit.modal('#add-sub-task-main-modal').hide(); | 263 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 264 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); | 264 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 265 | gb_data_basic.reload_stat_park_data(); | 265 | gb_data_basic.reload_stat_park_data(); |
| 266 | + | ||
| 267 | + //更新路牌公里统计面板 | ||
| 268 | + gb_schedule_table.showLpMileageTipBySch(sch); | ||
| 266 | return; | 269 | return; |
| 267 | } | 270 | } |
| 268 | var data = dataArray[i]; | 271 | var data = dataArray[i]; |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/edit.html
0 → 100644
| 1 | +<div class="uk-modal ct_move_modal" id="edit-sub-task-main-modal"> | ||
| 2 | + <div class="uk-modal-dialog" style="width: 800px;"> | ||
| 3 | + <a href="" class="uk-modal-close uk-close"></a> | ||
| 4 | + <div class="uk-modal-header"> | ||
| 5 | + <h2>编辑子任务</h2></div> | ||
| 6 | + | ||
| 7 | + <div class="forms"> | ||
| 8 | + | ||
| 9 | + </div> | ||
| 10 | + | ||
| 11 | + <div class="uk-modal-footer uk-text-right" style="margin-top: 5px;"> | ||
| 12 | + <button type="button" class="uk-button uk-modal-close">取消</button> | ||
| 13 | + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> 保存</button> | ||
| 14 | + </div> | ||
| 15 | + </div> | ||
| 16 | + | ||
| 17 | + <script id="sub-task-v2-edit-form-temp" type="text/html"> | ||
| 18 | + <form class="uk-form uk-form-horizontal sub_task_form_v2" style="background:#fff;"> | ||
| 19 | + <input type="hidden" value="{{sch.id}}" name="schedule.id" sch_id_inp> | ||
| 20 | + <input type="hidden" value="正常" name="type1"> | ||
| 21 | + <input type="hidden" value="{{cTask.id}}" name="id"> | ||
| 22 | + <div class="uk-grid"> | ||
| 23 | + <div class="uk-width-1-3"> | ||
| 24 | + <div class="uk-form-row"> | ||
| 25 | + <label class="uk-form-label">班次类型</label> | ||
| 26 | + <div class="uk-form-controls"> | ||
| 27 | + <select class="form-control nt-dictionary" data-code="-100" name="type2" | ||
| 28 | + data-group=ChildTaskType></select> | ||
| 29 | + </div> | ||
| 30 | + </div> | ||
| 31 | + </div> | ||
| 32 | + <div class="uk-width-1-3"> | ||
| 33 | + <div class="uk-form-row"> | ||
| 34 | + <label class="uk-form-label">起点 </label> | ||
| 35 | + <div class="uk-form-controls"> | ||
| 36 | + <select name="startStation" required></select> | ||
| 37 | + </div> | ||
| 38 | + </div> | ||
| 39 | + </div> | ||
| 40 | + <div class="uk-width-1-3"> | ||
| 41 | + <div class="uk-form-row"> | ||
| 42 | + <label class="uk-form-label">终点</label> | ||
| 43 | + <div class="uk-form-controls"> | ||
| 44 | + <select name="endStation" required></select> | ||
| 45 | + </div> | ||
| 46 | + </div> | ||
| 47 | + </div> | ||
| 48 | + </div> | ||
| 49 | + | ||
| 50 | + <div class="uk-grid"> | ||
| 51 | + <div class="uk-width-1-3"> | ||
| 52 | + <div class="uk-form-row"> | ||
| 53 | + <label class="uk-form-label">开始时间</label> | ||
| 54 | + <div class="uk-form-controls"> | ||
| 55 | + <input name="startDate" value="{{cTask.startDate}}" type="time" | ||
| 56 | + required> | ||
| 57 | + </div> | ||
| 58 | + </div> | ||
| 59 | + </div> | ||
| 60 | + <div class="uk-width-1-3"> | ||
| 61 | + <div class="uk-form-row"> | ||
| 62 | + <label class="uk-form-label">结束时间</label> | ||
| 63 | + <div class="uk-form-controls"> | ||
| 64 | + <input name="endDate" value="{{cTask.endDate}}" type="time" required> | ||
| 65 | + </div> | ||
| 66 | + </div> | ||
| 67 | + </div> | ||
| 68 | + <div class="uk-width-1-3"> | ||
| 69 | + <div class="uk-form-row"> | ||
| 70 | + <label class="uk-form-label">公里</label> | ||
| 71 | + <div class="uk-form-controls"> | ||
| 72 | + <input class="form-control" name="mileage" max=222 data-fv-lessthan-inclusive="false" | ||
| 73 | + required style="width: 42%;" value="{{cTask.mileage}}"> | ||
| 74 | + <select class="form-control nt-dictionary" required name="mileageType" | ||
| 75 | + data-group="MileageType" style="width: 52%;"></select> | ||
| 76 | + </div> | ||
| 77 | + </div> | ||
| 78 | + </div> | ||
| 79 | + </div> | ||
| 80 | + | ||
| 81 | + <div class="uk-grid"> | ||
| 82 | + <div class="uk-width-2-3 domains"></div> | ||
| 83 | + <div class="uk-width-1-3"> | ||
| 84 | + <div class="uk-form-row"> | ||
| 85 | + <label class="uk-form-label">备注</label> | ||
| 86 | + <div class="uk-form-controls"> | ||
| 87 | + <!--<select class="form-control nt-dictionary" required name="remarks"></select>--> | ||
| 88 | + <input class="form-control" value="{{cTask.remarks}}" name="remarks" data-fv-stringlength-max="50" data-fv-stringlength="true"> | ||
| 89 | + </div> | ||
| 90 | + </div> | ||
| 91 | + </div> | ||
| 92 | + </div> | ||
| 93 | + </form> | ||
| 94 | + </script> | ||
| 95 | + | ||
| 96 | + <script id="st-edit-domains-inout-form-temp" type="text/html"> | ||
| 97 | + <div class="uk-grid"> | ||
| 98 | + <div class="uk-width-1-2"> | ||
| 99 | + <div class="uk-form-row" style="padding-top: 5px;"> | ||
| 100 | + <label class="uk-form-label"></label> | ||
| 101 | + <div class="uk-form-controls"> | ||
| 102 | + <label data-uk-tooltip title="无人售票线路,请忽略这个选项"> | ||
| 103 | + <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员 | ||
| 104 | + </label> | ||
| 105 | + </div> | ||
| 106 | + </div> | ||
| 107 | + </div> | ||
| 108 | + <div class="uk-width-1-2 destroy_reason_wrap"> | ||
| 109 | + <div class="uk-form-row"> | ||
| 110 | + <label class="uk-form-label">进出场原因</label> | ||
| 111 | + <div class="uk-form-controls"> | ||
| 112 | + <select class="form-control" name="reason" required> | ||
| 113 | + <option value="">请选择...</option> | ||
| 114 | + {{each inOutExps as exp i}} | ||
| 115 | + <option value="{{exp}}">{{exp}}</option> | ||
| 116 | + {{/each}} | ||
| 117 | + </select> | ||
| 118 | + </div> | ||
| 119 | + </div> | ||
| 120 | + </div> | ||
| 121 | + </div> | ||
| 122 | + </script> | ||
| 123 | + | ||
| 124 | + <script id="st-edit-domains-service-form-temp" type="text/html"> | ||
| 125 | + <div class="uk-grid"> | ||
| 126 | + <div class="uk-width-1-2"> | ||
| 127 | + <div class="uk-form-row" style="padding-top: 5px;"> | ||
| 128 | + <label class="uk-form-label"></label> | ||
| 129 | + <div class="uk-form-controls"> | ||
| 130 | + <label> | ||
| 131 | + <input type="checkbox" value=1 name="destroy" class="i-cbox"> 是否烂班 | ||
| 132 | + </label> | ||
| 133 | + </div> | ||
| 134 | + </div> | ||
| 135 | + </div> | ||
| 136 | + <div class="uk-width-1-2 destroy_reason_wrap" style="display: none;"> | ||
| 137 | + <div class="uk-form-row"> | ||
| 138 | + <label class="uk-form-label">烂班原因</label> | ||
| 139 | + <div class="uk-form-controls"> | ||
| 140 | + <select class="form-control" name="reason" required> | ||
| 141 | + <option value="">请选择...</option> | ||
| 142 | + {{each adjustExps as exp i}} | ||
| 143 | + <option value="{{exp}}">{{exp}}</option> | ||
| 144 | + {{/each}} | ||
| 145 | + </select> | ||
| 146 | + </div> | ||
| 147 | + </div> | ||
| 148 | + </div> | ||
| 149 | + </div> | ||
| 150 | + </script> | ||
| 151 | + <script> | ||
| 152 | + (function () { | ||
| 153 | + var modal = '#edit-sub-task-main-modal', sch, cTask, | ||
| 154 | + stationRoutes, | ||
| 155 | + parks, | ||
| 156 | + information, | ||
| 157 | + st_park_data; | ||
| 158 | + | ||
| 159 | + $(modal).on('init', function (e, data) { | ||
| 160 | + e.stopPropagation(); | ||
| 161 | + sch = data.sch; | ||
| 162 | + cTask = data.cTask; | ||
| 163 | + | ||
| 164 | + //站到场数据 | ||
| 165 | + st_park_data = gb_data_basic.get_stat_park_data()[sch.xlBm]; | ||
| 166 | + //站点路由 | ||
| 167 | + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) { | ||
| 168 | + return a.stationRouteCode - b.stationRouteCode; | ||
| 169 | + }), 'directions'); | ||
| 170 | + //停车场 | ||
| 171 | + parks = gb_data_basic.simpleParksArray(); | ||
| 172 | + //线路标准 | ||
| 173 | + information = gb_data_basic.getLineInformation(sch.xlBm); | ||
| 174 | + //停车场排序,常用的放前面 | ||
| 175 | + parks = sort_parks(parks, information, st_park_data); | ||
| 176 | + | ||
| 177 | + var htmlStr = template('sub-task-v2-edit-form-temp', {sch: sch, cTask: cTask}); | ||
| 178 | + var f = $(htmlStr); | ||
| 179 | + $('.forms', modal).append(f); | ||
| 180 | + //字典转换 | ||
| 181 | + dictionaryUtils.transformDom($('.nt-dictionary', f)); | ||
| 182 | + | ||
| 183 | + //设置下拉框默认值 | ||
| 184 | + $f('type2', f).val(cTask.type2).trigger('change');//班次类型 | ||
| 185 | + $f('startStation', f).val(cTask.startStation);//起点站 | ||
| 186 | + $f('endStation', f).val(cTask.endStation);//终点站 | ||
| 187 | + $f('mileageType', f).val(cTask.mileageType);//里程类型 | ||
| 188 | + if(cTask.destroy) | ||
| 189 | + $f('destroy', f).trigger('click');//烂班 | ||
| 190 | + if(cTask.reason) | ||
| 191 | + $f('reason', f).val(cTask.reason);//原因 | ||
| 192 | + if(cTask.noClerk) | ||
| 193 | + $f('noClerk', f).trigger('click');//无售票员 | ||
| 194 | + | ||
| 195 | + f.formValidation({ | ||
| 196 | + framework: 'uikit', | ||
| 197 | + locale: 'zh_CN' | ||
| 198 | + }); | ||
| 199 | + $('button[type=submit]', modal).on('click', function () { | ||
| 200 | + f.formValidation('validate'); | ||
| 201 | + }); | ||
| 202 | + | ||
| 203 | + //提交 | ||
| 204 | + f.on('success.form.fv', function (e) { | ||
| 205 | + e.preventDefault(); | ||
| 206 | + $('button[type=submit]', modal).attr('disabled', 'disabled'); | ||
| 207 | + | ||
| 208 | + var data=$.extend(f.serializeJSON(), gb_common.getDisabledVal(f)); | ||
| 209 | + | ||
| 210 | + gb_common.$post('/childTask/update', data, function (rs) { | ||
| 211 | + notify_succ('修改成功!'); | ||
| 212 | + gb_schedule_table.updateSchedule(rs.t); | ||
| 213 | + | ||
| 214 | + UIkit.modal(modal).hide(); | ||
| 215 | + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); | ||
| 216 | + | ||
| 217 | + //更新路牌公里统计面板 | ||
| 218 | + gb_schedule_table.showLpMileageTipBySch(rs.t); | ||
| 219 | + }); | ||
| 220 | + }); | ||
| 221 | + | ||
| 222 | + f.on('err.field.fv', function () { | ||
| 223 | + $('button[type=submit]', modal).removeClass('disabled').removeAttr('disabled'); | ||
| 224 | + }); | ||
| 225 | + }); | ||
| 226 | + | ||
| 227 | + //班次类型切换事件 | ||
| 228 | + $(modal).on('change', 'select[name=type2]', reCalcInputs_type); | ||
| 229 | + //烂班选项点击事件 | ||
| 230 | + $(modal).on('change', 'input[name=destroy]', destroyClick); | ||
| 231 | + //进出场原因切换 | ||
| 232 | + $(modal).on('change', 'select[name=reason]', reSynchroReason); | ||
| 233 | + | ||
| 234 | + /** | ||
| 235 | + * 根据班次类型切换起终点下拉框 | ||
| 236 | + */ | ||
| 237 | + function reCalcInputs_type() { | ||
| 238 | + var f = $(this).parents('.sub_task_form_v2'); | ||
| 239 | + var upDown = sch.xlDir; | ||
| 240 | + if($('[name=upDown]', f).length>0) | ||
| 241 | + upDown = $('[name=upDown]', f).val(); | ||
| 242 | + var routes = stationRoutes[upDown] | ||
| 243 | + , lastCode = routes[routes.length - 1].stationCode | ||
| 244 | + , opts = '', park_opts = ''; | ||
| 245 | + //station options | ||
| 246 | + $.each(routes, function () { | ||
| 247 | + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>' | ||
| 248 | + }); | ||
| 249 | + //park options | ||
| 250 | + for(var i=0,p;p=parks[i++];) | ||
| 251 | + park_opts += '<option value="' + p.code + '">' + p.name + '</option>'; | ||
| 252 | + /*for (var code in parks) | ||
| 253 | + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';*/ | ||
| 254 | + | ||
| 255 | + var qdz = $f('startStation', f), zdz = $f('endStation', f), mType = $f('mileageType', f); | ||
| 256 | + var domainsTemp; | ||
| 257 | + switch ($(this).val()) { | ||
| 258 | + case '3'://出场 | ||
| 259 | + qdz.html(park_opts).val(information.carPark); | ||
| 260 | + zdz.html(opts).trigger('change'); | ||
| 261 | + mType.val('empty').attr('disabled', 'disabled').trigger('change'); | ||
| 262 | + domainsTemp = 'st-edit-domains-inout-form-temp'; | ||
| 263 | + break; | ||
| 264 | + case '2'://进场 | ||
| 265 | + qdz.html(opts); | ||
| 266 | + zdz.html(park_opts).val(information.carPark).trigger('change'); | ||
| 267 | + mType.val('empty').attr('disabled', 'disabled').trigger('change'); | ||
| 268 | + domainsTemp = 'st-edit-domains-inout-form-temp'; | ||
| 269 | + break; | ||
| 270 | + default: | ||
| 271 | + qdz.html(opts); | ||
| 272 | + zdz.html(opts).val(lastCode).trigger('change'); | ||
| 273 | + mType.val('service').removeAttr('disabled').trigger('change'); | ||
| 274 | + domainsTemp = 'st-edit-domains-service-form-temp'; | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + //可变选项区域 | ||
| 278 | + $('.domains', f).html(template(domainsTemp, { | ||
| 279 | + adjustExps: gb_common.adjustExps, | ||
| 280 | + inOutExps: gb_common.inOutExps | ||
| 281 | + })); | ||
| 282 | + | ||
| 283 | + //校验reason | ||
| 284 | + f.trigger('add_reason_field'); | ||
| 285 | + } | ||
| 286 | + | ||
| 287 | + | ||
| 288 | + function $f(name, f) { | ||
| 289 | + return $('[name=' + name + ']', f); | ||
| 290 | + } | ||
| 291 | + | ||
| 292 | + /** | ||
| 293 | + * 停车场排序 | ||
| 294 | + * @param parks 停车场 code 2 name | ||
| 295 | + * @param information 线路标准 | ||
| 296 | + * @param st_park_data 站到场 | ||
| 297 | + */ | ||
| 298 | + function sort_parks(parks, information, st_park_data) { | ||
| 299 | + var array = [], names=[]; | ||
| 300 | + for(var code in parks){ | ||
| 301 | + array.push({code: code, name: parks[code]}); | ||
| 302 | + } | ||
| 303 | + | ||
| 304 | + if(st_park_data && st_park_data.length > 0){ | ||
| 305 | + $.each(st_park_data, function () { | ||
| 306 | + names.push(this.parkName); | ||
| 307 | + }); | ||
| 308 | + } | ||
| 309 | + | ||
| 310 | + //debugger | ||
| 311 | + array.sort(function (a, b) { | ||
| 312 | + if(a.code==information.carPark) | ||
| 313 | + return -1; | ||
| 314 | + if(b.code==information.carPark) | ||
| 315 | + return 1; | ||
| 316 | + | ||
| 317 | + var ai = names.indexOf(a.name), | ||
| 318 | + bi = names.indexOf(b.name); | ||
| 319 | + | ||
| 320 | + if(ai!=-1 && bi==-1) | ||
| 321 | + return -1; | ||
| 322 | + else if(ai==-1 && bi!=-1) | ||
| 323 | + return 1; | ||
| 324 | + else | ||
| 325 | + return a.name.localeCompare(b.name); | ||
| 326 | + }); | ||
| 327 | + return array; | ||
| 328 | + } | ||
| 329 | + | ||
| 330 | + function destroyClick() { | ||
| 331 | + var f = $(this).parents('.sub_task_form_v2'); | ||
| 332 | + if (this.checked) { | ||
| 333 | + $('.destroy_reason_wrap', f).show(); | ||
| 334 | + f.attr('destroy', true);//.addClass('destroy_form'); | ||
| 335 | + } | ||
| 336 | + else { | ||
| 337 | + $('.destroy_reason_wrap', f).hide(); | ||
| 338 | + f.removeAttr('destroy');//.removeClass('destroy_form'); | ||
| 339 | + } | ||
| 340 | + //reCalcMileageCount(); | ||
| 341 | + } | ||
| 342 | + | ||
| 343 | + /** | ||
| 344 | + * 切换原因 | ||
| 345 | + */ | ||
| 346 | + function reSynchroReason() { | ||
| 347 | + var f = $(this).parents('.sub_task_form_v2'), | ||
| 348 | + reason = $(this).val(), | ||
| 349 | + remInput = $('[name=remarks]', f); | ||
| 350 | + | ||
| 351 | + if(remInput.val()==reason + ',') | ||
| 352 | + return; | ||
| 353 | + remInput.val(remInput.val() + reason + ','); | ||
| 354 | + } | ||
| 355 | + })(); | ||
| 356 | + </script> | ||
| 357 | +</div> | ||
| 0 | \ No newline at end of file | 358 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/main.html
| @@ -155,7 +155,7 @@ | @@ -155,7 +155,7 @@ | ||
| 155 | <div class="uk-form-row" style="padding-top: 5px;"> | 155 | <div class="uk-form-row" style="padding-top: 5px;"> |
| 156 | <label class="uk-form-label"></label> | 156 | <label class="uk-form-label"></label> |
| 157 | <div class="uk-form-controls"> | 157 | <div class="uk-form-controls"> |
| 158 | - <label data-uk-tooltip title="如是无人售票线路,忽略这个选项"> | 158 | + <label data-uk-tooltip title="无人售票线路,请忽略这个选项"> |
| 159 | <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员 | 159 | <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员 |
| 160 | </label> | 160 | </label> |
| 161 | </div> | 161 | </div> |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_normal.html
| @@ -150,6 +150,10 @@ | @@ -150,6 +150,10 @@ | ||
| 150 | }catch (e){ | 150 | }catch (e){ |
| 151 | console.log(e);} | 151 | console.log(e);} |
| 152 | UIkit.modal('#schedule-addsch-modal').hide(); | 152 | UIkit.modal('#schedule-addsch-modal').hide(); |
| 153 | + //更新路牌公里统计面板 | ||
| 154 | + gb_schedule_table.showLpMileageTipBySch(rs.t); | ||
| 155 | + }, function () { | ||
| 156 | + enable_submit_btn(nf); | ||
| 153 | }); | 157 | }); |
| 154 | }); | 158 | }); |
| 155 | $('.ct_line_lp_badge', nf).html(sch.xlName + ', '+sch.lpName); | 159 | $('.ct_line_lp_badge', nf).html(sch.xlName + ', '+sch.lpName); |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_park_to_park.html
| @@ -154,6 +154,10 @@ | @@ -154,6 +154,10 @@ | ||
| 154 | }catch (e){ | 154 | }catch (e){ |
| 155 | console.log(e);} | 155 | console.log(e);} |
| 156 | UIkit.modal('#schedule-addsch-modal').hide(); | 156 | UIkit.modal('#schedule-addsch-modal').hide(); |
| 157 | + //更新路牌公里统计面板 | ||
| 158 | + gb_schedule_table.showLpMileageTipBySch(rs.t); | ||
| 159 | + }, function () { | ||
| 160 | + enable_submit_btn(nf); | ||
| 157 | }); | 161 | }); |
| 158 | }); | 162 | }); |
| 159 | $('.ct_line_lp_badge', nf).html(sch.xlName + ', '+sch.lpName); | 163 | $('.ct_line_lp_badge', nf).html(sch.xlName + ', '+sch.lpName); |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_two_way.html
| @@ -315,6 +315,8 @@ | @@ -315,6 +315,8 @@ | ||
| 315 | }catch (e){ | 315 | }catch (e){ |
| 316 | console.log(e);} | 316 | console.log(e);} |
| 317 | UIkit.modal('#schedule-addsch-modal').hide(); | 317 | UIkit.modal('#schedule-addsch-modal').hide(); |
| 318 | + //更新路牌公里统计面板 | ||
| 319 | + gb_schedule_table.showLpMileageTipBySch(last); | ||
| 318 | return; | 320 | return; |
| 319 | } | 321 | } |
| 320 | submitFun(dataArray[i], function (rs) { | 322 | submitFun(dataArray[i], function (rs) { |
| @@ -323,6 +325,8 @@ | @@ -323,6 +325,8 @@ | ||
| 323 | upArr.push(rs.t); | 325 | upArr.push(rs.t); |
| 324 | i++; | 326 | i++; |
| 325 | f(); | 327 | f(); |
| 328 | + }, function () { | ||
| 329 | + $('[type=submit]', wrap).removeClass('disabled').removeAttr('disabled'); | ||
| 326 | }); | 330 | }); |
| 327 | })(); | 331 | })(); |
| 328 | } | 332 | } |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/main.html
| @@ -310,7 +310,7 @@ | @@ -310,7 +310,7 @@ | ||
| 310 | /** | 310 | /** |
| 311 | * 提交表单 | 311 | * 提交表单 |
| 312 | */ | 312 | */ |
| 313 | - function submit_temp_schedule_form(data, cb) { | 313 | + function submit_temp_schedule_form(data, cb, err) { |
| 314 | data.xlBm = sch.xlBm; | 314 | data.xlBm = sch.xlBm; |
| 315 | data.xlName = sch.xlName; | 315 | data.xlName = sch.xlName; |
| 316 | data.lpName = sch.lpName; | 316 | data.lpName = sch.lpName; |
| @@ -336,7 +336,7 @@ | @@ -336,7 +336,7 @@ | ||
| 336 | gb_common.$post('/realSchedule', data, function (rs) { | 336 | gb_common.$post('/realSchedule', data, function (rs) { |
| 337 | notify_succ('新增临加班次成功'); | 337 | notify_succ('新增临加班次成功'); |
| 338 | cb && cb(rs); | 338 | cb && cb(rs); |
| 339 | - }); | 339 | + }, err); |
| 340 | } | 340 | } |
| 341 | })(); | 341 | })(); |
| 342 | </script> | 342 | </script> |
src/main/resources/static/real_control_v2/fragments/line_schedule/layout.html
| @@ -11,9 +11,11 @@ | @@ -11,9 +11,11 @@ | ||
| 11 | <div class="card-panel"></div> | 11 | <div class="card-panel"></div> |
| 12 | </div> | 12 | </div> |
| 13 | </div> | 13 | </div> |
| 14 | - <div class="uk-width-1-6" style="height: calc(100% - 1px);"> | 14 | + <div class="uk-width-1-6" style="height: calc(100% - 1px);position: relative;"> |
| 15 | <div class="card-panel sys-mailbox" style="overflow: auto;"> | 15 | <div class="card-panel sys-mailbox" style="overflow: auto;"> |
| 16 | </div> | 16 | </div> |
| 17 | + <div class="mileage_elec_panel"> | ||
| 18 | + </div> | ||
| 17 | </div> | 19 | </div> |
| 18 | </div> | 20 | </div> |
| 19 | 21 |
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
| @@ -182,4 +182,17 @@ | @@ -182,4 +182,17 @@ | ||
| 182 | <span class="_badge">{{zdsj}}/{{zdsjActual}}</span> | 182 | <span class="_badge">{{zdsj}}/{{zdsjActual}}</span> |
| 183 | </div> | 183 | </div> |
| 184 | </script> | 184 | </script> |
| 185 | + | ||
| 186 | + <script id="sch-lp-mileage-tip-temp" type="text/html"> | ||
| 187 | + {{each data as obj i}} | ||
| 188 | + {{if i > 0}}<hr>{{/if}} | ||
| 189 | + | ||
| 190 | + <h5 class="_title"> <span class="lp_name">{{lpName}}</span> <a>{{obj.key}}</a></h5> | ||
| 191 | + <div class="LD_item"> | ||
| 192 | + <span>营运:<a>{{obj.serviceMileage}}</a></span> | ||
| 193 | + <span>烂班:<a>{{obj.destroyMileage}}</a></span> | ||
| 194 | + <span>空驶:<a>{{obj.emptyMileage}}</a></span> | ||
| 195 | + </div> | ||
| 196 | + {{/each}} | ||
| 197 | + </script> | ||
| 185 | </div> | 198 | </div> |
src/main/resources/static/real_control_v2/js/common.js
| @@ -95,13 +95,13 @@ var gb_common = (function () { | @@ -95,13 +95,13 @@ var gb_common = (function () { | ||
| 95 | }); | 95 | }); |
| 96 | }; | 96 | }; |
| 97 | 97 | ||
| 98 | - var $post = function (url, data, successFun) { | 98 | + var $post = function (url, data, successFun, errFun) { |
| 99 | $.ajax({ | 99 | $.ajax({ |
| 100 | url: url, | 100 | url: url, |
| 101 | method: 'POST', | 101 | method: 'POST', |
| 102 | data: data, | 102 | data: data, |
| 103 | complete: function (xhr, ts) { | 103 | complete: function (xhr, ts) { |
| 104 | - ajaxComplete(xhr, ts, successFun); | 104 | + ajaxComplete(xhr, ts, successFun, errFun); |
| 105 | } | 105 | } |
| 106 | }); | 106 | }); |
| 107 | }; | 107 | }; |
| @@ -126,7 +126,7 @@ var gb_common = (function () { | @@ -126,7 +126,7 @@ var gb_common = (function () { | ||
| 126 | 126 | ||
| 127 | var errorHead = '<span style="color:red;">异常:</span>'; | 127 | var errorHead = '<span style="color:red;">异常:</span>'; |
| 128 | 128 | ||
| 129 | - function successHandle(json, handle) { | 129 | + function successHandle(json, handle, err) { |
| 130 | var status = json.status; | 130 | var status = json.status; |
| 131 | if (status == 407) { | 131 | if (status == 407) { |
| 132 | location.href = '/login.html'; | 132 | location.href = '/login.html'; |
| @@ -142,18 +142,20 @@ var gb_common = (function () { | @@ -142,18 +142,20 @@ var gb_common = (function () { | ||
| 142 | UIkit.modal.alert(errorHead + (json.msg ? json.msg : '未知异常'), {labels: {Ok: '确定'}}); | 142 | UIkit.modal.alert(errorHead + (json.msg ? json.msg : '未知异常'), {labels: {Ok: '确定'}}); |
| 143 | //关闭wait窗口 | 143 | //关闭wait窗口 |
| 144 | hide_wait_modal(); | 144 | hide_wait_modal(); |
| 145 | + err && err(); | ||
| 145 | } | 146 | } |
| 146 | else | 147 | else |
| 147 | handle && handle(json); | 148 | handle && handle(json); |
| 148 | } | 149 | } |
| 149 | 150 | ||
| 150 | - function ajaxComplete(xhr, ts, succ) { | 151 | + function ajaxComplete(xhr, ts, succ, err) { |
| 151 | if (ts == 'success') { | 152 | if (ts == 'success') { |
| 152 | - successHandle(JSON.parse(xhr.responseText), succ); | 153 | + successHandle(JSON.parse(xhr.responseText), succ, err); |
| 153 | } else if (ts == 'error') { | 154 | } else if (ts == 'error') { |
| 154 | UIkit.modal.alert(errorHead + xhr.responseText, {labels: {Ok: '确定'}}); | 155 | UIkit.modal.alert(errorHead + xhr.responseText, {labels: {Ok: '确定'}}); |
| 155 | //关闭wait窗口 | 156 | //关闭wait窗口 |
| 156 | hide_wait_modal(); | 157 | hide_wait_modal(); |
| 158 | + err && err(); | ||
| 157 | } | 159 | } |
| 158 | } | 160 | } |
| 159 | 161 |
src/main/resources/static/real_control_v2/js/line_schedule/badge_tooltip.js
| @@ -44,25 +44,33 @@ var gb_schedule_badge_tootip = (function () { | @@ -44,25 +44,33 @@ var gb_schedule_badge_tootip = (function () { | ||
| 44 | show: _opts.show, | 44 | show: _opts.show, |
| 45 | content: { | 45 | content: { |
| 46 | text: function() { | 46 | text: function() { |
| 47 | - var sch = getSch(this); | 47 | + var sch = getSch(this), |
| 48 | + serviceCount=0, | ||
| 49 | + emptyCount=0; | ||
| 48 | //子任务排序 | 50 | //子任务排序 |
| 49 | $.each(sch.cTasks, function () { | 51 | $.each(sch.cTasks, function () { |
| 50 | if(this.mileageType=='service'){ | 52 | if(this.mileageType=='service'){ |
| 53 | + serviceCount = gb_common.accAdd(serviceCount, this.mileage); | ||
| 51 | if(this.type1=='正常') | 54 | if(this.type1=='正常') |
| 52 | this.order_no=0; | 55 | this.order_no=0; |
| 53 | else | 56 | else |
| 54 | this.order_no=1; | 57 | this.order_no=1; |
| 55 | 58 | ||
| 56 | - if(this.destroy) | 59 | + if(this.destroy){ |
| 57 | this.order_no=2; | 60 | this.order_no=2; |
| 61 | + } | ||
| 58 | } | 62 | } |
| 59 | - else | 63 | + else{ |
| 60 | this.order_no=this.type2 + 1; | 64 | this.order_no=this.type2 + 1; |
| 65 | + emptyCount = gb_common.accAdd(emptyCount, this.mileage); | ||
| 66 | + } | ||
| 61 | }); | 67 | }); |
| 62 | var array = sch.cTasks.sort(function (a, b) { | 68 | var array = sch.cTasks.sort(function (a, b) { |
| 63 | return a.order_no - b.order_no; | 69 | return a.order_no - b.order_no; |
| 64 | }); | 70 | }); |
| 65 | - return temps['sch-table-task-tootip-temp']({tasks: array}); | 71 | + return temps['sch-table-task-tootip-temp']( |
| 72 | + {tasks: array, sch_id: sch.id, lineCode: sch.xlBm, jhlc: sch.jhlc, | ||
| 73 | + serviceCount: serviceCount, emptyCount: emptyCount}); | ||
| 66 | } | 74 | } |
| 67 | }, | 75 | }, |
| 68 | position: _opts.position, | 76 | position: _opts.position, |
| @@ -74,6 +82,31 @@ var gb_schedule_badge_tootip = (function () { | @@ -74,6 +82,31 @@ var gb_schedule_badge_tootip = (function () { | ||
| 74 | }); | 82 | }); |
| 75 | }); | 83 | }); |
| 76 | 84 | ||
| 85 | + /** | ||
| 86 | + * 子任务编辑 | ||
| 87 | + */ | ||
| 88 | + $(document).on('click', 'a.tip_task_edit_link', function () { | ||
| 89 | + var schId = $(this).data('schid'), | ||
| 90 | + taskId = $(this).data('id'), | ||
| 91 | + lineCode = $(this).data('line'); | ||
| 92 | + | ||
| 93 | + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId]; | ||
| 94 | + | ||
| 95 | + var cTask; | ||
| 96 | + for(var i=0,obj;obj=sch.cTasks[i++];){ | ||
| 97 | + if(obj.id==taskId){ | ||
| 98 | + cTask = obj; | ||
| 99 | + break; | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + //打开子任务修改modal | ||
| 104 | + open_modal('/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/edit.html', { | ||
| 105 | + sch: sch, | ||
| 106 | + cTask: cTask | ||
| 107 | + }, {center: false, bgclose: false, modal: false}); | ||
| 108 | + }); | ||
| 109 | + | ||
| 77 | //区间 tootip | 110 | //区间 tootip |
| 78 | $(document).on('mouseenter', _badge+'.sch_region', function() { | 111 | $(document).on('mouseenter', _badge+'.sch_region', function() { |
| 79 | $(this).qtip({ | 112 | $(this).qtip({ |
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
| @@ -319,15 +319,15 @@ var gb_schedule_context_menu = (function () { | @@ -319,15 +319,15 @@ var gb_schedule_context_menu = (function () { | ||
| 319 | 'fcxxwt': { | 319 | 'fcxxwt': { |
| 320 | name: '发车信息微调' | 320 | name: '发车信息微调' |
| 321 | }, | 321 | }, |
| 322 | + 'sep3': '---------', | ||
| 322 | 'lj_zrw': { | 323 | 'lj_zrw': { |
| 323 | name: '临加/子任务' | 324 | name: '临加/子任务' |
| 324 | }, | 325 | }, |
| 325 | - 'sep3': '---------', | ||
| 326 | 'add_temp_sch': { | 326 | 'add_temp_sch': { |
| 327 | - name: '添加临加班次' | 327 | + name: '新增临加班次' |
| 328 | }, | 328 | }, |
| 329 | 'add_sub_task': { | 329 | 'add_sub_task': { |
| 330 | - name: '添加子任务' | 330 | + name: '新增子任务' |
| 331 | }, | 331 | }, |
| 332 | 'sep4': '---------', | 332 | 'sep4': '---------', |
| 333 | 'tzrc': { | 333 | 'tzrc': { |
src/main/resources/static/real_control_v2/js/line_schedule/mileage_count.js
0 → 100644
| 1 | + | ||
| 2 | +/** | ||
| 3 | + * 统计班次公里 | ||
| 4 | + * @type {{}} | ||
| 5 | + */ | ||
| 6 | +var gb_sch_mileage_count = (function () { | ||
| 7 | + | ||
| 8 | + | ||
| 9 | + var isInOut = function (sch) { | ||
| 10 | + return sch.bcType=='out' || sch.bcType=='in'; | ||
| 11 | + }; | ||
| 12 | + | ||
| 13 | + return { | ||
| 14 | + serviceMileage: function (array) { | ||
| 15 | + var sum = 0; | ||
| 16 | + var cts; | ||
| 17 | + | ||
| 18 | + for(var i=0,sch;sch=array[i++];){ | ||
| 19 | + if (sch.status == -1) | ||
| 20 | + continue; | ||
| 21 | + | ||
| 22 | + if (isInOut(sch) || sch.bcType=='ldks') | ||
| 23 | + continue; | ||
| 24 | + | ||
| 25 | + cts = sch['cTasks']; | ||
| 26 | + | ||
| 27 | + //有子任务 | ||
| 28 | + if (cts && cts.length > 0) { | ||
| 29 | + for(var j=0,ct;ct=cts[j++];){ | ||
| 30 | + if (ct.mileageType=="service" && !ct.destroy) | ||
| 31 | + sum = gb_common.accAdd(sum, ct.mileage); | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | + else if(!sch.fcsjActual || !sch.zdsjActual) | ||
| 35 | + continue; | ||
| 36 | + else | ||
| 37 | + sum = gb_common.accAdd(sum, sch.jhlc); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + return sum; | ||
| 41 | + }, | ||
| 42 | + destroyMileage: function (array) { | ||
| 43 | + var sum = 0; | ||
| 44 | + var cts; | ||
| 45 | + | ||
| 46 | + for(var i=0,sch;sch=array[i++];){ | ||
| 47 | + if (isInOut(sch) || sch.bcType=='ldks' || sch.sflj) | ||
| 48 | + continue; | ||
| 49 | + | ||
| 50 | + cts = sch['cTasks']; | ||
| 51 | + | ||
| 52 | + //有子任务 | ||
| 53 | + if (cts && cts.length > 0) { | ||
| 54 | + for(var j=0,ct;ct=cts[j++];){ | ||
| 55 | + if (ct.destroy && ct.mileageType=="service") | ||
| 56 | + sum = gb_common.accAdd(sum, ct.mileage); | ||
| 57 | + } | ||
| 58 | + }else if (sch.status == -1) | ||
| 59 | + sum = gb_common.accAdd(sum, sch.jhlcOrig); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + return sum; | ||
| 63 | + }, | ||
| 64 | + emptyMileage: function (array) { | ||
| 65 | + var sum = 0; | ||
| 66 | + var cts; | ||
| 67 | + | ||
| 68 | + for(var i=0,sch;sch=array[i++];){ | ||
| 69 | + | ||
| 70 | + cts = sch['cTasks']; | ||
| 71 | + | ||
| 72 | + //有子任务 | ||
| 73 | + if (cts && cts.length > 0) { | ||
| 74 | + for(var j=0,ct;ct=cts[j++];){ | ||
| 75 | + if (!ct.destroy && ct.mileageType=="empty") | ||
| 76 | + sum = gb_common.accAdd(sum, ct.mileage); | ||
| 77 | + } | ||
| 78 | + } | ||
| 79 | + else if(!sch.fcsjActual || !sch.zdsjActual) | ||
| 80 | + continue; | ||
| 81 | + else if ((isInOut(sch) || sch.bcType=="ldks") && sch.status != -1) | ||
| 82 | + sum = gb_common.accAdd(sum, sch.jhlc); | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + return sum; | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | +})(); | ||
| 0 | \ No newline at end of file | 89 | \ No newline at end of file |
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
| @@ -461,9 +461,106 @@ var gb_schedule_table = (function () { | @@ -461,9 +461,106 @@ var gb_schedule_table = (function () { | ||
| 461 | $('dl[data-id=' + this.id + ']', contWrap).addClass('relevance-active intimity'); | 461 | $('dl[data-id=' + this.id + ']', contWrap).addClass('relevance-active intimity'); |
| 462 | }); | 462 | }); |
| 463 | 463 | ||
| 464 | - notify_succ('高亮路牌 ' + sch.lpName); | 464 | + //notify_succ('高亮路牌 ' + sch.lpName); |
| 465 | + showLpMileageTip(lineCode, sch.lpName, schArr); | ||
| 465 | }); | 466 | }); |
| 466 | 467 | ||
| 468 | + var showLpMileageTipBySch = function (sch) { | ||
| 469 | + if(!$('.mileage_elec_panel', $('.line_schedule[data-id='+sch.xlBm+']')).is(':visible')) | ||
| 470 | + return; | ||
| 471 | + | ||
| 472 | + var schArr = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (item) { | ||
| 473 | + return item.lpName == sch.lpName; | ||
| 474 | + }).sort(schedule_sort); | ||
| 475 | + | ||
| 476 | + showLpMileageTip(sch.xlBm, sch.lpName, schArr); | ||
| 477 | + }; | ||
| 478 | + /** | ||
| 479 | + * 弹出路牌公里统计tip | ||
| 480 | + * @param lineCode | ||
| 481 | + * @param lpName | ||
| 482 | + * @param array | ||
| 483 | + */ | ||
| 484 | + var showLpMileageTip = function (lineCode, lpName, array) { | ||
| 485 | + var wrap = $('.line_schedule[data-id='+lineCode+']'); | ||
| 486 | + //按驾驶员&车辆分组统计 | ||
| 487 | + var data=mileageTipGroupData(array); | ||
| 488 | + //统计公里 | ||
| 489 | + var list=[]; | ||
| 490 | + for(var key in data){ | ||
| 491 | + list.push({ | ||
| 492 | + key : key, | ||
| 493 | + serviceMileage: gb_sch_mileage_count.serviceMileage(data[key]), | ||
| 494 | + destroyMileage: gb_sch_mileage_count.destroyMileage(data[key]), | ||
| 495 | + emptyMileage: gb_sch_mileage_count.emptyMileage(data[key]) | ||
| 496 | + }) | ||
| 497 | + } | ||
| 498 | + var htmlStr = temps['sch-lp-mileage-tip-temp']({data: list, lpName:lpName}); | ||
| 499 | + $('.mileage_elec_panel', wrap).html(htmlStr).addClass('uk-animation-slide-bottom').show() | ||
| 500 | + .one('animationEnd', function () { | ||
| 501 | + $(this).removeClass('uk-animation-slide-bottom'); | ||
| 502 | + }); | ||
| 503 | + }; | ||
| 504 | + | ||
| 505 | + /** | ||
| 506 | + * 分组数据,处理子任务里的中途换车 | ||
| 507 | + * @param array | ||
| 508 | + */ | ||
| 509 | + var mileageTipGroupData = function (arr) { | ||
| 510 | + var list = JSON.parse(JSON.stringify(arr)); | ||
| 511 | + var cts; | ||
| 512 | + var zthcArray=[]; | ||
| 513 | + var sch; | ||
| 514 | + for(var i=0,len=list.length;i<len;i++){ | ||
| 515 | + sch = list[i]; | ||
| 516 | + cts = sch['cTasks']; | ||
| 517 | + if(!cts || cts.length==0) | ||
| 518 | + continue; | ||
| 519 | + | ||
| 520 | + sch['cTasks'] = []; | ||
| 521 | + //有子任务 | ||
| 522 | + for(var j=0,ct;ct=cts[j++];){ | ||
| 523 | + if(!ct.nbbm || ct.nbbm==sch.clZbh){ | ||
| 524 | + sch['cTasks'].push(ct); | ||
| 525 | + continue; | ||
| 526 | + } | ||
| 527 | + | ||
| 528 | + zthcArray.push(cloneByCTask(sch, ct)); | ||
| 529 | + } | ||
| 530 | + } | ||
| 531 | + | ||
| 532 | + if(zthcArray.length > 0) | ||
| 533 | + list = list.concat(zthcArray); | ||
| 534 | + | ||
| 535 | + var data={},key; | ||
| 536 | + for(var i=0,len=list.length;i<len;i++){ | ||
| 537 | + key = list[i].clZbh+'/'+list[i].jGh+'('+list[i].jName+')'; | ||
| 538 | + if(!data[key]) | ||
| 539 | + data[key] = []; | ||
| 540 | + data[key].push(list[i]); | ||
| 541 | + } | ||
| 542 | + return data; | ||
| 543 | + }; | ||
| 544 | + | ||
| 545 | + var cloneByCTask = function (sch, ct) { | ||
| 546 | + var newObj = JSON.parse(JSON.stringify(sch)); | ||
| 547 | + newObj['cTasks']=[]; | ||
| 548 | + newObj.clZbh = ct.nbbm; | ||
| 549 | + newObj.fcsjActual = ct.startDate; | ||
| 550 | + newObj.zdsjActual = ct.endDate; | ||
| 551 | + newObj.jhlc = ct.mileage; | ||
| 552 | + newObj.jhlcOrig = ct.mileage; | ||
| 553 | + | ||
| 554 | + if(ct.type2=='1') | ||
| 555 | + newObj.bcType='normal'; | ||
| 556 | + else if(ct.type2=='2'){ | ||
| 557 | + newObj.bcType='in'; | ||
| 558 | + }else if(ct.type2=='3') | ||
| 559 | + newObj.bcType='out'; | ||
| 560 | + | ||
| 561 | + return newObj; | ||
| 562 | + }; | ||
| 563 | + | ||
| 467 | //头部点击去掉选中光标 | 564 | //头部点击去掉选中光标 |
| 468 | $(document).on('click', '.header-title', function () { | 565 | $(document).on('click', '.header-title', function () { |
| 469 | reset_drag_active_all(this); | 566 | reset_drag_active_all(this); |
| @@ -487,6 +584,8 @@ var gb_schedule_table = (function () { | @@ -487,6 +584,8 @@ var gb_schedule_table = (function () { | ||
| 487 | var reset_drag_active_all = function (dd) { | 584 | var reset_drag_active_all = function (dd) { |
| 488 | $(dd).parents('.schedule-wrap').find('dl.drag-active').removeClass('drag-active'); | 585 | $(dd).parents('.schedule-wrap').find('dl.drag-active').removeClass('drag-active'); |
| 489 | reset_relevance_active(dd); | 586 | reset_relevance_active(dd); |
| 587 | + | ||
| 588 | + $('.mileage_elec_panel', $(dd).parents('.top-container')).hide().remove('uk-animation-slide-bottom'); | ||
| 490 | }; | 589 | }; |
| 491 | 590 | ||
| 492 | var reset_relevance_active = function (dd) { | 591 | var reset_relevance_active = function (dd) { |
| @@ -685,6 +784,7 @@ var gb_schedule_table = (function () { | @@ -685,6 +784,7 @@ var gb_schedule_table = (function () { | ||
| 685 | cancelLateBadge: cancelLateBadge, | 784 | cancelLateBadge: cancelLateBadge, |
| 686 | refreshAll: refreshAll, | 785 | refreshAll: refreshAll, |
| 687 | getNextNormalSch: getNextNormalSch, | 786 | getNextNormalSch: getNextNormalSch, |
| 688 | - findNbbmByLineCode:findNbbmByLineCode | 787 | + findNbbmByLineCode:findNbbmByLineCode, |
| 788 | + showLpMileageTipBySch: showLpMileageTipBySch | ||
| 689 | }; | 789 | }; |
| 690 | })(); | 790 | })(); |
src/main/resources/static/real_control_v2/js/modal_extend.js
| @@ -97,12 +97,12 @@ var modal_move = function (m_header) { | @@ -97,12 +97,12 @@ var modal_move = function (m_header) { | ||
| 97 | dict.stY = win.scrollTop(); | 97 | dict.stY = win.scrollTop(); |
| 98 | 98 | ||
| 99 | //控制元素不被拖出窗口外 | 99 | //控制元素不被拖出窗口外 |
| 100 | - var setRig = win.width() - _moveObj.outerWidth() + dict.stX | 100 | + /*var setRig = win.width() - _moveObj.outerWidth() + dict.stX |
| 101 | ,setBot = win.height() - _moveObj.outerHeight() + dict.stY; | 101 | ,setBot = win.height() - _moveObj.outerHeight() + dict.stY; |
| 102 | X < dict.stX && (X = dict.stX); | 102 | X < dict.stX && (X = dict.stX); |
| 103 | X > setRig && (X = setRig); | 103 | X > setRig && (X = setRig); |
| 104 | Y < dict.stY && (Y = dict.stY); | 104 | Y < dict.stY && (Y = dict.stY); |
| 105 | - Y > setBot && (Y = setBot); | 105 | + Y > setBot && (Y = setBot);*/ |
| 106 | 106 | ||
| 107 | _moveObj.css({ | 107 | _moveObj.css({ |
| 108 | left: X | 108 | left: X |
src/main/resources/static/real_control_v2/js/safe_driv/call_phone.js
| @@ -4,51 +4,51 @@ var gb_call_phone = function () { | @@ -4,51 +4,51 @@ var gb_call_phone = function () { | ||
| 4 | var wsUri = "ws://180.168.57.114:21892/"; | 4 | var wsUri = "ws://180.168.57.114:21892/"; |
| 5 | 5 | ||
| 6 | var nbbm2tel = { | 6 | var nbbm2tel = { |
| 7 | - "S0E-178": "915618938041", | ||
| 8 | - "S0E-179": "915618937546", | ||
| 9 | - "S0E-182": "915618938047", | ||
| 10 | - "S0E-183": "915618937940", | ||
| 11 | - "S0E-186": "915601997470", | ||
| 12 | - "S0E-187": "915618846405", | ||
| 13 | - "S0E-043": "915618847457", | ||
| 14 | - "S0E-044": "915618845487", | ||
| 15 | - "S2F-070": "915618846479", | ||
| 16 | - "S2F-071": "915618820024", | ||
| 17 | - "S2F-072": "915618937945", | ||
| 18 | - "S2F-073": "915618937845", | ||
| 19 | - "S2F-075": "915618847416", | ||
| 20 | - "S2F-076": "915618847410", | ||
| 21 | - "S2F-077": "915618847413", | ||
| 22 | - "S2F-078": "915618847415", | ||
| 23 | - "S2F-079": "915618847417", | ||
| 24 | - "S2F-080": "915618847418", | ||
| 25 | - "S2F-083": "915618847420", | ||
| 26 | - "S2F-119": "915618951184", | ||
| 27 | - "W0F-018": "915618209534", | ||
| 28 | - "W0F-019": "915618951364", | ||
| 29 | - "W0F-020": "915618278604", | ||
| 30 | - "W0F-021": "915618278614", | ||
| 31 | - "W0F-022": "915618012546", | ||
| 32 | - "W0F-023": "915618278704", | ||
| 33 | - "W0F-024": "915618278594", | ||
| 34 | - "W0F-025": "915601989450", | ||
| 35 | - "W0F-026": "915618209194", | ||
| 36 | - "W0F-027": "915618208724", | ||
| 37 | - "W0F-028": "915618278624", | ||
| 38 | - "W0F-029": "915601988491", | ||
| 39 | - "W0F-030": "915618209324", | ||
| 40 | - "W0F-031": "915618928940", | ||
| 41 | - "W0F-069": "915618011142", | ||
| 42 | - "W0F-070": "915618279534", | ||
| 43 | - "W0F-071": "915618847426", | ||
| 44 | - "W0F-072": "915618011245", | ||
| 45 | - "W0F-073": "915618010242", | ||
| 46 | - "W0F-074": "915618279594", | ||
| 47 | - "W0F-075": "915618588143", | ||
| 48 | - "W0F-089": "915618011747", | ||
| 49 | - "W0F-090": "915618279574", | ||
| 50 | - "S2F-069": "915618938143", | ||
| 51 | - "S2F-081": "915618950034" | 7 | + "S0E-178":"915618938041", |
| 8 | + "S0E-179":"915618937546", | ||
| 9 | + "S0E-182":"915618938047", | ||
| 10 | + "S0E-183":"915618937940", | ||
| 11 | + "S0E-186":"915601989452", | ||
| 12 | + "S0E-187":"915618846405", | ||
| 13 | + "S0E-043":"915618847457", | ||
| 14 | + "S0E-044":"915618845487", | ||
| 15 | + "S2F-070":"915618846479", | ||
| 16 | + "S2F-071":"915601989461", | ||
| 17 | + "S2F-072":"915618937945", | ||
| 18 | + "S2F-073":"915618937845", | ||
| 19 | + "S2F-075":"915618847416", | ||
| 20 | + "S2F-076":"915618847410", | ||
| 21 | + "S2F-077":"915618847413", | ||
| 22 | + "S2F-078":"915618847415", | ||
| 23 | + "S2F-079":"915618847417", | ||
| 24 | + "S2F-080":"915618847418", | ||
| 25 | + "S2F-083":"915618847420", | ||
| 26 | + "S2F-119":"915601987406", | ||
| 27 | + "W0F-018":"915618209534", | ||
| 28 | + "W0F-019":"915601987405", | ||
| 29 | + "W0F-020":"915618278604", | ||
| 30 | + "W0F-021":"915618278614", | ||
| 31 | + "W0F-022":"915618012546", | ||
| 32 | + "W0F-023":"915618278704", | ||
| 33 | + "W0F-024":"915618278594", | ||
| 34 | + "W0F-025":"915601989450", | ||
| 35 | + "W0F-026":"915618209194", | ||
| 36 | + "W0F-027":"915618208724", | ||
| 37 | + "W0F-028":"915618278624", | ||
| 38 | + "W0F-029":"915601988491", | ||
| 39 | + "W0F-030":"915618936848", | ||
| 40 | + "W0F-031":"915618928940", | ||
| 41 | + "W0F-069":"915618011142", | ||
| 42 | + "W0F-070":"915618279534", | ||
| 43 | + "W0F-071":"915601989439", | ||
| 44 | + "W0F-072":"915618011245", | ||
| 45 | + "W0F-073":"915618010242", | ||
| 46 | + "W0F-074":"915618279594", | ||
| 47 | + "W0F-075":"915618010947", | ||
| 48 | + "W0F-089":"915618011747", | ||
| 49 | + "W0F-090":"915618279574", | ||
| 50 | + "S2F-069":"915618938143", | ||
| 51 | + "S2F-081":"915601986481" | ||
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | var locData = window.localStorage.getItem('test_nbbm2tel_json'); | 54 | var locData = window.localStorage.getItem('test_nbbm2tel_json'); |
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
| @@ -151,6 +151,8 @@ var gb_sch_websocket = (function () { | @@ -151,6 +151,8 @@ var gb_sch_websocket = (function () { | ||
| 151 | gb_tts.speak(ttsMsg, msg.t.xlBm); | 151 | gb_tts.speak(ttsMsg, msg.t.xlBm); |
| 152 | 152 | ||
| 153 | calcUntreated(msg.t.xlBm); | 153 | calcUntreated(msg.t.xlBm); |
| 154 | + //更新路牌公里统计面板 | ||
| 155 | + gb_schedule_table.showLpMileageTipBySch(msg.t); | ||
| 154 | }; | 156 | }; |
| 155 | 157 | ||
| 156 | //服务器通知刷新班次 | 158 | //服务器通知刷新班次 |
src/main/resources/static/real_control_v2/main.html
| @@ -55,7 +55,7 @@ | @@ -55,7 +55,7 @@ | ||
| 55 | <div class="uk-width-4-10"> | 55 | <div class="uk-width-4-10"> |
| 56 | <div class="uk-panel"> | 56 | <div class="uk-panel"> |
| 57 | <h2 class="north-logo"> | 57 | <h2 class="north-logo"> |
| 58 | - <i class="uk-icon-life-ring"></i> 浦东公交线路调度 | 58 | + <!--<i class="uk-icon-life-ring"></i>--> 浦东公交线路调度 |
| 59 | </h2> | 59 | </h2> |
| 60 | </div> | 60 | </div> |
| 61 | </div> | 61 | </div> |
| @@ -199,6 +199,7 @@ | @@ -199,6 +199,7 @@ | ||
| 199 | <script src="/real_control_v2/js/line_schedule/dbclick.js" merge="custom_js"></script> | 199 | <script src="/real_control_v2/js/line_schedule/dbclick.js" merge="custom_js"></script> |
| 200 | <script src="/real_control_v2/js/line_schedule/search.js" merge="custom_js"></script> | 200 | <script src="/real_control_v2/js/line_schedule/search.js" merge="custom_js"></script> |
| 201 | <script src="/real_control_v2/js/line_schedule/badge_tooltip.js" merge="custom_js"></script> | 201 | <script src="/real_control_v2/js/line_schedule/badge_tooltip.js" merge="custom_js"></script> |
| 202 | +<script src="/real_control_v2/js/line_schedule/mileage_count.js" merge="custom_js"></script> | ||
| 202 | 203 | ||
| 203 | <!-- 字典相关 --> | 204 | <!-- 字典相关 --> |
| 204 | <script src="/assets/js/dictionary.js" merge="custom_js"></script> | 205 | <script src="/assets/js/dictionary.js" merge="custom_js"></script> |
src/main/resources/static/real_control_v2/mapmonitor/js/playback.js
| @@ -26,6 +26,7 @@ var gb_map_play_back = (function () { | @@ -26,6 +26,7 @@ var gb_map_play_back = (function () { | ||
| 26 | title: '<i class="uk-icon-play-circle"></i> 轨迹回放', | 26 | title: '<i class="uk-icon-play-circle"></i> 轨迹回放', |
| 27 | shadeClose: true, | 27 | shadeClose: true, |
| 28 | shade: false, | 28 | shade: false, |
| 29 | + moveOut: true, | ||
| 29 | maxmin: true, //开启最大化最小化按钮 | 30 | maxmin: true, //开启最大化最小化按钮 |
| 30 | area: ['1299px', '754px'], | 31 | area: ['1299px', '754px'], |
| 31 | //moveOut: true, | 32 | //moveOut: true, |