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 | 27 | public Map<String, Object> delHistory(@PathVariable("id") Long id){ |
| 28 | 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 | 159 | logger.info("车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual()); |
| 160 | 160 | |
| 161 | 161 | //清除车辆误点调整监听 |
| 162 | - LateAdjustHandle.remove(nbbm); | |
| 162 | + LateAdjustHandle.remove(sch); | |
| 163 | 163 | |
| 164 | 164 | //将gps转换成下一个班次走向的站内信号(应对只有一个站内信号 即 发出时) |
| 165 | 165 | transformUpDown(gps, next); | ... | ... |
src/main/java/com/bsth/data/gpsdata_v2/handlers/OutStationProcess.java
| ... | ... | @@ -113,7 +113,7 @@ public class OutStationProcess { |
| 113 | 113 | dayOfSchedule.save(sch); |
| 114 | 114 | |
| 115 | 115 | //清理应发未发标记 |
| 116 | - LateAdjustHandle.remove(sch.getClZbh()); | |
| 116 | + LateAdjustHandle.remove(sch); | |
| 117 | 117 | |
| 118 | 118 | //发车的时候,同步一下状态 |
| 119 | 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 | 14 | * Created by panzhao on 2017/12/28. |
| 15 | 15 | */ |
| 16 | 16 | @Component |
| 17 | -public class FixedEnableVerionsThread extends Thread{ | |
| 17 | +public class FixedEnableVerionsThread extends Thread { | |
| 18 | 18 | |
| 19 | 19 | @Autowired |
| 20 | 20 | JdbcTemplate jdbcTemplate; |
| ... | ... | @@ -26,34 +26,39 @@ public class FixedEnableVerionsThread extends Thread{ |
| 26 | 26 | |
| 27 | 27 | @Override |
| 28 | 28 | public void run() { |
| 29 | - try{ | |
| 29 | + try { | |
| 30 | 30 | |
| 31 | 31 | String sql = "select * from bsth_c_line_versions where status=2 and start_date<=SYSDATE()"; |
| 32 | 32 | |
| 33 | 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 | 51 | String[] ks; |
| 51 | - for(String keys : syncs){ | |
| 52 | + for (String keys : syncs) { | |
| 52 | 53 | ks = keys.split("_"); |
| 53 | 54 | |
| 54 | 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 | 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 | 117 | } |
| 118 | 118 | } |
| 119 | 119 | |
| 120 | - public static void remove(String nbbm){ | |
| 120 | +/* public static void remove(String nbbm){ | |
| 121 | 121 | if(lateSchMap.containsKey(nbbm)){ |
| 122 | 122 | ScheduleRealInfo sch = lateSchMap.get(nbbm); |
| 123 | 123 | sch.setLate2(false); |
| ... | ... | @@ -127,7 +127,7 @@ public class LateAdjustHandle implements ApplicationContextAware{ |
| 127 | 127 | lateSchMap.remove(nbbm); |
| 128 | 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 | 74 | //重载排班数据 |
| 75 | 75 | dayOfSchedule.reloadSch(lineCode, currSchDate, false); |
| 76 | 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 | 78 | }catch (Exception e){ |
| 87 | 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 | 174 | int id = Integer.parseInt(map.get("id").toString()); |
| 175 | 175 | String name = map.get("stationName").toString(); |
| 176 | 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 | 181 | jdbcTemplate.update("update bsth_c_ls_stationroute set station_name=? where id=?", name, id); |
| 182 | 182 | //更新站点 |
| 183 | 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 | 188 | tran.commit(status); |
| 186 | 189 | |
| 187 | 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 | 15 | import com.bsth.repository.StationRepository; |
| 16 | 16 | import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; |
| 17 | 17 | import com.bsth.service.gps.entity.*; |
| 18 | -import com.bsth.util.DateUtils; | |
| 19 | 18 | import com.bsth.util.TransGPS; |
| 20 | 19 | import com.bsth.util.TransGPS.Location; |
| 21 | 20 | import com.bsth.util.db.DBUtils_MS; |
| ... | ... | @@ -32,6 +31,7 @@ import org.slf4j.Logger; |
| 32 | 31 | import org.slf4j.LoggerFactory; |
| 33 | 32 | import org.springframework.beans.factory.annotation.Autowired; |
| 34 | 33 | import org.springframework.dao.DataAccessException; |
| 34 | +import org.springframework.jdbc.core.BeanPropertyRowMapper; | |
| 35 | 35 | import org.springframework.jdbc.core.JdbcTemplate; |
| 36 | 36 | import org.springframework.stereotype.Service; |
| 37 | 37 | |
| ... | ... | @@ -164,56 +164,134 @@ public class GpsServiceImpl implements GpsService { |
| 164 | 164 | return (byte) (((serviceState & 0x02000000) == 0x02000000) ? 1 : 0); |
| 165 | 165 | } |
| 166 | 166 | |
| 167 | + private static DateTimeFormatter fmtyyyy = DateTimeFormat.forPattern("yyyy"); | |
| 167 | 168 | @Override |
| 168 | 169 | public List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et) { |
| 169 | 170 | List<Map<String, Object>> list = new ArrayList<>(); |
| 170 | - // 超过最大查询范围,直接忽略 | |
| 171 | 171 | if (et - st > GPS_RANGE) |
| 172 | 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 | 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 | 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 | 296 | Collections.sort(list, new Comparator<Map<String, Object>>() { |
| 219 | 297 | |
| ... | ... | @@ -225,132 +303,97 @@ public class GpsServiceImpl implements GpsService { |
| 225 | 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 | 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 | 349 | public static byte getGpsValid(long serviceState) { |
| 313 | 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 | 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 | 398 | return map; |
| 356 | 399 | } |
| ... | ... | @@ -612,14 +655,6 @@ public class GpsServiceImpl implements GpsService { |
| 612 | 655 | //获取历史gps 数据 |
| 613 | 656 | List<HistoryGps_DTOV3> list = HistoryGps_DTOV3.craete(history(new String[]{nbbm}, st, et)); |
| 614 | 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 | 659 | Map<String, String> sectionCode2Name = GeoCacheData.sectionCode2NameMap(); |
| 625 | 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 | 10 | Map<String,Object> saveHistory(ChildTaskPlan childTask); |
| 11 | 11 | |
| 12 | 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 | 21 | import java.util.Date; |
| 22 | 22 | import java.util.HashMap; |
| 23 | 23 | import java.util.Map; |
| 24 | +import java.util.Set; | |
| 24 | 25 | |
| 25 | 26 | @Service |
| 26 | 27 | public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService { |
| ... | ... | @@ -131,6 +132,66 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Lon |
| 131 | 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 | 195 | private String getStationName(String lineCode, String stationCode){ |
| 135 | 196 | String name; |
| 136 | 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 | 52 | $(document).on('click', '.up_down_route_list .station_route .ul_li_input .save_icon_btn', function (e) { |
| 53 | 53 | var f = $(this).parents('form'); |
| 54 | 54 | var data = f.serializeJSON(); |
| 55 | + data.lineCode = g_line_code; | |
| 56 | + data.versions = g_version; | |
| 55 | 57 | |
| 56 | 58 | UIkit.modal.confirm('确定将站点名称修改为【'+data.stationName+'】?').then(function() { |
| 57 | 59 | show_run_text('正在保存...'); | ... | ... |
src/main/resources/static/pages/base/geo_data_edit/js/version_manage.js
src/main/resources/static/pages/summary/destory_sch_detail/list.html
| ... | ... | @@ -161,7 +161,7 @@ |
| 161 | 161 | <button class="uk-button uk-button-text export_excel" style="padding: 0 5px;">导出数据</button> |
| 162 | 162 | </div> |
| 163 | 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 | 165 | </div> |
| 166 | 166 | </form> |
| 167 | 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 | 545 | dl.relevance-active.intimity dd:nth-child(n+2) a { |
| 546 | 546 | color: white !important; |
| 547 | 547 | } |
| 548 | - | |
| 548 | +/* | |
| 549 | 549 | dl.relevance-active dd.tl-qrlb, |
| 550 | 550 | dl.relevance-active.intimity dd.tl-qrlb{ |
| 551 | 551 | background: linear-gradient(to right, #a9a911, #808000, #8baabf) !important; |
| ... | ... | @@ -587,7 +587,7 @@ dl.relevance-active.intimity dd.tl-xxrd { |
| 587 | 587 | dl.relevance-active dd.tl-xxfc, |
| 588 | 588 | dl.relevance-active.intimity dd.tl-xxfc { |
| 589 | 589 | background: linear-gradient(to right, #8baabf, rgb(43, 185, 185), rgb(0,255,255)) !important; |
| 590 | -} | |
| 590 | +}*/ | |
| 591 | 591 | |
| 592 | 592 | dl.relevance-active.intimity dd span.fcsj-diff { |
| 593 | 593 | color: #616060; | ... | ... |
src/main/resources/static/real_control_v2/css/main.css
| ... | ... | @@ -1092,11 +1092,11 @@ dl.intimity span.late-badge{ |
| 1092 | 1092 | } |
| 1093 | 1093 | |
| 1094 | 1094 | .qtip.sch-badge-tip{ |
| 1095 | - max-width: 500px; | |
| 1095 | + max-width: 700px; | |
| 1096 | 1096 | } |
| 1097 | 1097 | |
| 1098 | 1098 | .tip_task_list { |
| 1099 | - width: 460px; | |
| 1099 | + width: 530px; | |
| 1100 | 1100 | margin-bottom: -10px; |
| 1101 | 1101 | } |
| 1102 | 1102 | .tip_task_list dl{ |
| ... | ... | @@ -1119,19 +1119,30 @@ dl.intimity span.late-badge{ |
| 1119 | 1119 | } |
| 1120 | 1120 | |
| 1121 | 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 | 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 | 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 | 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 | 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 | 1148 | .tip_task_list dl.service{ |
| ... | ... | @@ -1335,7 +1346,7 @@ ul.left_tabs_lg li{ |
| 1335 | 1346 | } |
| 1336 | 1347 | |
| 1337 | 1348 | #add-sub-task-main-modal .forms{ |
| 1338 | - max-height: 488px; | |
| 1349 | + max-height: 642px; | |
| 1339 | 1350 | overflow-y: auto; |
| 1340 | 1351 | overflow-x: hidden; |
| 1341 | 1352 | padding: 8px 8px 0 0; |
| ... | ... | @@ -1800,4 +1811,109 @@ dl.active>dd.disabled{ |
| 1800 | 1811 | |
| 1801 | 1812 | .c_b_item>span.c_b_over{ |
| 1802 | 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 | 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 | 3 | <div class="tl-tip-panel"> |
| 4 | 4 | <div class="tip_task_list"> |
| 5 | 5 | <dl> |
| 6 | + <dt>操作</dt> | |
| 6 | 7 | <dt>类型</dt> |
| 7 | 8 | <dt>里程</dt> |
| 8 | 9 | <dt>起点</dt> |
| ... | ... | @@ -11,6 +12,7 @@ |
| 11 | 12 | </dl> |
| 12 | 13 | {{each tasks as t i}} |
| 13 | 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 | 16 | <dd> |
| 15 | 17 | {{if t.mileageType=="service"}} |
| 16 | 18 | 营运 |
| ... | ... | @@ -35,6 +37,13 @@ |
| 35 | 37 | <dd title="{{t.remarks}}">{{t.remarks}}</dd> |
| 36 | 38 | </dl> |
| 37 | 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 | 47 | </div> |
| 39 | 48 | </div> |
| 40 | 49 | </script> | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/fcxxwt.html
| ... | ... | @@ -205,29 +205,6 @@ |
| 205 | 205 | notify_err("当前操作需要选择调整原因!"); |
| 206 | 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 | 208 | postData(data); |
| 232 | 209 | }); |
| 233 | 210 | |
| ... | ... | @@ -238,6 +215,8 @@ |
| 238 | 215 | notify_succ('操作成功!'); |
| 239 | 216 | //计算应发未发 |
| 240 | 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 | 153 | </script> |
| 154 | 154 | |
| 155 | 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 | 157 | <span class="calc-detail">{{calcs}}</span></div> |
| 158 | 158 | </script> |
| 159 | 159 | |
| 160 | 160 | <script> |
| 161 | 161 | (function () { |
| 162 | - var modal_opts = {center: false, bgclose: false, modal: false} | |
| 162 | + var modal_opts = {center: false, bgclose: false, modal: false}; | |
| 163 | 163 | var modal = '#schedule-lj_zrw-modal', |
| 164 | 164 | f, |
| 165 | 165 | m_t_body = '.main-schedule-table .ct_table_body', |
| ... | ... | @@ -277,7 +277,7 @@ |
| 277 | 277 | var i = 0; |
| 278 | 278 | if (sch.cTasks.length == 0) |
| 279 | 279 | return; |
| 280 | - var sum = 0, calcs = ''; | |
| 280 | + var sum = 0, calcs = ' '; | |
| 281 | 281 | $.each(sch.cTasks, function () { |
| 282 | 282 | if (this.mileageType == 'service') { |
| 283 | 283 | sum = gb_common.accAdd(sum, this.mileage); |
| ... | ... | @@ -287,13 +287,16 @@ |
| 287 | 287 | }); |
| 288 | 288 | //公里与主任务不符合 |
| 289 | 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 | 293 | calcs += (' ≠ ' + sch.jhlcOrig); |
| 293 | 294 | calcs = calcs.substr(3); |
| 294 | 295 | var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs}); |
| 295 | 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 | 326 | gb_schedule_table.updateSchedule(rs.ts); |
| 324 | 327 | gb_schedule_table.deheteSchedule(rs.delete); |
| 325 | 328 | $('.main-schedule-table', modal).trigger('refresh'); |
| 329 | + //更新路牌公里统计面板 | |
| 330 | + gb_schedule_table.showLpMileageTipBySch(sch); | |
| 326 | 331 | }); |
| 327 | 332 | }, '确定删除'); |
| 328 | 333 | }; |
| 329 | - //添加自定义子任务 | |
| 334 | + /* //添加自定义子任务 | |
| 330 | 335 | var add_sub_task_other = function () { |
| 331 | 336 | var sch = getActiveSch(); |
| 332 | 337 | if (!sch) |
| ... | ... | @@ -376,8 +381,32 @@ |
| 376 | 381 | open_modal(folder + '/sub_task/add_sub_task_range_turn.html', { |
| 377 | 382 | sch: sch |
| 378 | 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 | 411 | var remove_sub_task = function () { |
| 383 | 412 | var activeDl = $(s_t_body, modal).find('dl.context-menu-active'); |
| ... | ... | @@ -396,10 +425,12 @@ |
| 396 | 425 | //选中班次 |
| 397 | 426 | selectedDl(rs.t); |
| 398 | 427 | }, 300); |
| 428 | + //更新路牌公里统计面板 | |
| 429 | + gb_schedule_table.showLpMileageTipBySch(rs.t); | |
| 399 | 430 | }); |
| 400 | 431 | }, '确定删除'); |
| 401 | 432 | }; |
| 402 | - //加油 | |
| 433 | + /*//加油 | |
| 403 | 434 | var add_oil = function () { |
| 404 | 435 | var sch = getActiveSch(); |
| 405 | 436 | if (!sch) |
| ... | ... | @@ -412,7 +443,7 @@ |
| 412 | 443 | open_modal(folder + '/sub_task/add_sub_task_oil.html', { |
| 413 | 444 | sch: sch |
| 414 | 445 | }, modal_opts); |
| 415 | - }; | |
| 446 | + };*/ | |
| 416 | 447 | |
| 417 | 448 | var add_sub_task = function () { |
| 418 | 449 | var sch = getActiveSch(); |
| ... | ... | @@ -429,14 +460,15 @@ |
| 429 | 460 | var callbackHandler = { |
| 430 | 461 | add_temp_sch: add_temp_sch, |
| 431 | 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 | 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 | 483 | name: "临加班次" |
| 452 | 484 | }, |
| 453 | 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 | 488 | 'remove_sch': { |
| 474 | 489 | name: '删除' |
| ... | ... | @@ -484,6 +499,10 @@ |
| 484 | 499 | callbackHandler[key] && callbackHandler[key](); |
| 485 | 500 | }, |
| 486 | 501 | items: { |
| 502 | + "edit_sub_task":{ | |
| 503 | + name: '修改子任务', | |
| 504 | + icon: 'edit' | |
| 505 | + }, | |
| 487 | 506 | "remove_sub_task": { |
| 488 | 507 | name: "删除子任务" |
| 489 | 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 | 44 | |
| 45 | 45 | //班次类型切换 |
| 46 | 46 | if(bcTypeMap[sch.bcType]) |
| 47 | - $('[name=type2]', f).val(bcTypeMap[sch.bcType]) | |
| 47 | + $('[name=type2]', f).val(bcTypeMap[sch.bcType]); | |
| 48 | 48 | $('[name=type2]', f).trigger('change'); |
| 49 | 49 | |
| 50 | 50 | //滚动条到底 |
| ... | ... | @@ -89,6 +89,9 @@ |
| 89 | 89 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 90 | 90 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 91 | 91 | gb_data_basic.reload_stat_park_data(); |
| 92 | + | |
| 93 | + //更新路牌公里统计面板 | |
| 94 | + gb_schedule_table.showLpMileageTipBySch(sch); | |
| 92 | 95 | return; |
| 93 | 96 | } |
| 94 | 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 | 289 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 290 | 290 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 291 | 291 | gb_data_basic.reload_stat_park_data(); |
| 292 | + | |
| 293 | + //更新路牌公里统计面板 | |
| 294 | + gb_schedule_table.showLpMileageTipBySch(sch); | |
| 292 | 295 | return; |
| 293 | 296 | } |
| 294 | 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 | 127 | if (i >= dataArray.length) { |
| 128 | 128 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 129 | 129 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 130 | + | |
| 131 | + //更新路牌公里统计面板 | |
| 132 | + gb_schedule_table.showLpMileageTipBySch(sch); | |
| 130 | 133 | return; |
| 131 | 134 | } |
| 132 | 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 | 263 | UIkit.modal('#add-sub-task-main-modal').hide(); |
| 264 | 264 | $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch}); |
| 265 | 265 | gb_data_basic.reload_stat_park_data(); |
| 266 | + | |
| 267 | + //更新路牌公里统计面板 | |
| 268 | + gb_schedule_table.showLpMileageTipBySch(sch); | |
| 266 | 269 | return; |
| 267 | 270 | } |
| 268 | 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 | 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 | 155 | <div class="uk-form-row" style="padding-top: 5px;"> |
| 156 | 156 | <label class="uk-form-label"></label> |
| 157 | 157 | <div class="uk-form-controls"> |
| 158 | - <label data-uk-tooltip title="如是无人售票线路,忽略这个选项"> | |
| 158 | + <label data-uk-tooltip title="无人售票线路,请忽略这个选项"> | |
| 159 | 159 | <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员 |
| 160 | 160 | </label> |
| 161 | 161 | </div> | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_normal.html
| ... | ... | @@ -150,6 +150,10 @@ |
| 150 | 150 | }catch (e){ |
| 151 | 151 | console.log(e);} |
| 152 | 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 | 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 | 154 | }catch (e){ |
| 155 | 155 | console.log(e);} |
| 156 | 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 | 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 | 315 | }catch (e){ |
| 316 | 316 | console.log(e);} |
| 317 | 317 | UIkit.modal('#schedule-addsch-modal').hide(); |
| 318 | + //更新路牌公里统计面板 | |
| 319 | + gb_schedule_table.showLpMileageTipBySch(last); | |
| 318 | 320 | return; |
| 319 | 321 | } |
| 320 | 322 | submitFun(dataArray[i], function (rs) { |
| ... | ... | @@ -323,6 +325,8 @@ |
| 323 | 325 | upArr.push(rs.t); |
| 324 | 326 | i++; |
| 325 | 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 | 310 | /** |
| 311 | 311 | * 提交表单 |
| 312 | 312 | */ |
| 313 | - function submit_temp_schedule_form(data, cb) { | |
| 313 | + function submit_temp_schedule_form(data, cb, err) { | |
| 314 | 314 | data.xlBm = sch.xlBm; |
| 315 | 315 | data.xlName = sch.xlName; |
| 316 | 316 | data.lpName = sch.lpName; |
| ... | ... | @@ -336,7 +336,7 @@ |
| 336 | 336 | gb_common.$post('/realSchedule', data, function (rs) { |
| 337 | 337 | notify_succ('新增临加班次成功'); |
| 338 | 338 | cb && cb(rs); |
| 339 | - }); | |
| 339 | + }, err); | |
| 340 | 340 | } |
| 341 | 341 | })(); |
| 342 | 342 | </script> | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/layout.html
| ... | ... | @@ -11,9 +11,11 @@ |
| 11 | 11 | <div class="card-panel"></div> |
| 12 | 12 | </div> |
| 13 | 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 | 15 | <div class="card-panel sys-mailbox" style="overflow: auto;"> |
| 16 | 16 | </div> |
| 17 | + <div class="mileage_elec_panel"> | |
| 18 | + </div> | |
| 17 | 19 | </div> |
| 18 | 20 | </div> |
| 19 | 21 | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
| ... | ... | @@ -182,4 +182,17 @@ |
| 182 | 182 | <span class="_badge">{{zdsj}}/{{zdsjActual}}</span> |
| 183 | 183 | </div> |
| 184 | 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 | 198 | </div> | ... | ... |
src/main/resources/static/real_control_v2/js/common.js
| ... | ... | @@ -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 | 99 | $.ajax({ |
| 100 | 100 | url: url, |
| 101 | 101 | method: 'POST', |
| 102 | 102 | data: data, |
| 103 | 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 | 126 | |
| 127 | 127 | var errorHead = '<span style="color:red;">异常:</span>'; |
| 128 | 128 | |
| 129 | - function successHandle(json, handle) { | |
| 129 | + function successHandle(json, handle, err) { | |
| 130 | 130 | var status = json.status; |
| 131 | 131 | if (status == 407) { |
| 132 | 132 | location.href = '/login.html'; |
| ... | ... | @@ -142,18 +142,20 @@ var gb_common = (function () { |
| 142 | 142 | UIkit.modal.alert(errorHead + (json.msg ? json.msg : '未知异常'), {labels: {Ok: '确定'}}); |
| 143 | 143 | //关闭wait窗口 |
| 144 | 144 | hide_wait_modal(); |
| 145 | + err && err(); | |
| 145 | 146 | } |
| 146 | 147 | else |
| 147 | 148 | handle && handle(json); |
| 148 | 149 | } |
| 149 | 150 | |
| 150 | - function ajaxComplete(xhr, ts, succ) { | |
| 151 | + function ajaxComplete(xhr, ts, succ, err) { | |
| 151 | 152 | if (ts == 'success') { |
| 152 | - successHandle(JSON.parse(xhr.responseText), succ); | |
| 153 | + successHandle(JSON.parse(xhr.responseText), succ, err); | |
| 153 | 154 | } else if (ts == 'error') { |
| 154 | 155 | UIkit.modal.alert(errorHead + xhr.responseText, {labels: {Ok: '确定'}}); |
| 155 | 156 | //关闭wait窗口 |
| 156 | 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 | 44 | show: _opts.show, |
| 45 | 45 | content: { |
| 46 | 46 | text: function() { |
| 47 | - var sch = getSch(this); | |
| 47 | + var sch = getSch(this), | |
| 48 | + serviceCount=0, | |
| 49 | + emptyCount=0; | |
| 48 | 50 | //子任务排序 |
| 49 | 51 | $.each(sch.cTasks, function () { |
| 50 | 52 | if(this.mileageType=='service'){ |
| 53 | + serviceCount = gb_common.accAdd(serviceCount, this.mileage); | |
| 51 | 54 | if(this.type1=='正常') |
| 52 | 55 | this.order_no=0; |
| 53 | 56 | else |
| 54 | 57 | this.order_no=1; |
| 55 | 58 | |
| 56 | - if(this.destroy) | |
| 59 | + if(this.destroy){ | |
| 57 | 60 | this.order_no=2; |
| 61 | + } | |
| 58 | 62 | } |
| 59 | - else | |
| 63 | + else{ | |
| 60 | 64 | this.order_no=this.type2 + 1; |
| 65 | + emptyCount = gb_common.accAdd(emptyCount, this.mileage); | |
| 66 | + } | |
| 61 | 67 | }); |
| 62 | 68 | var array = sch.cTasks.sort(function (a, b) { |
| 63 | 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 | 76 | position: _opts.position, |
| ... | ... | @@ -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 | 110 | //区间 tootip |
| 78 | 111 | $(document).on('mouseenter', _badge+'.sch_region', function() { |
| 79 | 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 | 319 | 'fcxxwt': { |
| 320 | 320 | name: '发车信息微调' |
| 321 | 321 | }, |
| 322 | + 'sep3': '---------', | |
| 322 | 323 | 'lj_zrw': { |
| 323 | 324 | name: '临加/子任务' |
| 324 | 325 | }, |
| 325 | - 'sep3': '---------', | |
| 326 | 326 | 'add_temp_sch': { |
| 327 | - name: '添加临加班次' | |
| 327 | + name: '新增临加班次' | |
| 328 | 328 | }, |
| 329 | 329 | 'add_sub_task': { |
| 330 | - name: '添加子任务' | |
| 330 | + name: '新增子任务' | |
| 331 | 331 | }, |
| 332 | 332 | 'sep4': '---------', |
| 333 | 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 | 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 | 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 | 565 | $(document).on('click', '.header-title', function () { |
| 469 | 566 | reset_drag_active_all(this); |
| ... | ... | @@ -487,6 +584,8 @@ var gb_schedule_table = (function () { |
| 487 | 584 | var reset_drag_active_all = function (dd) { |
| 488 | 585 | $(dd).parents('.schedule-wrap').find('dl.drag-active').removeClass('drag-active'); |
| 489 | 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 | 591 | var reset_relevance_active = function (dd) { |
| ... | ... | @@ -685,6 +784,7 @@ var gb_schedule_table = (function () { |
| 685 | 784 | cancelLateBadge: cancelLateBadge, |
| 686 | 785 | refreshAll: refreshAll, |
| 687 | 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 | 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 | 101 | ,setBot = win.height() - _moveObj.outerHeight() + dict.stY; |
| 102 | 102 | X < dict.stX && (X = dict.stX); |
| 103 | 103 | X > setRig && (X = setRig); |
| 104 | 104 | Y < dict.stY && (Y = dict.stY); |
| 105 | - Y > setBot && (Y = setBot); | |
| 105 | + Y > setBot && (Y = setBot);*/ | |
| 106 | 106 | |
| 107 | 107 | _moveObj.css({ |
| 108 | 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 | 4 | var wsUri = "ws://180.168.57.114:21892/"; |
| 5 | 5 | |
| 6 | 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 | 54 | var locData = window.localStorage.getItem('test_nbbm2tel_json'); | ... | ... |
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
src/main/resources/static/real_control_v2/main.html
| ... | ... | @@ -55,7 +55,7 @@ |
| 55 | 55 | <div class="uk-width-4-10"> |
| 56 | 56 | <div class="uk-panel"> |
| 57 | 57 | <h2 class="north-logo"> |
| 58 | - <i class="uk-icon-life-ring"></i> 浦东公交线路调度 | |
| 58 | + <!--<i class="uk-icon-life-ring"></i>--> 浦东公交线路调度 | |
| 59 | 59 | </h2> |
| 60 | 60 | </div> |
| 61 | 61 | </div> |
| ... | ... | @@ -199,6 +199,7 @@ |
| 199 | 199 | <script src="/real_control_v2/js/line_schedule/dbclick.js" merge="custom_js"></script> |
| 200 | 200 | <script src="/real_control_v2/js/line_schedule/search.js" merge="custom_js"></script> |
| 201 | 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 | 205 | <script src="/assets/js/dictionary.js" merge="custom_js"></script> | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/js/playback.js