Commit e6d7132267064de6c99a034811ba954732442e45

Authored by 廖磊
2 parents 42a8143b 7c044cb7

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

into pudong
Showing 24 changed files with 994 additions and 315 deletions
@@ -295,6 +295,13 @@ @@ -295,6 +295,13 @@
295 <artifactId>jpinyin</artifactId> 295 <artifactId>jpinyin</artifactId>
296 <version>1.1.8</version> 296 <version>1.1.8</version>
297 </dependency> 297 </dependency>
  298 +
  299 + <!-- plan common工程依赖 -->
  300 + <dependency>
  301 + <groupId>com.bsth.control_v2</groupId>
  302 + <artifactId>plan_module-common</artifactId>
  303 + <version>1.0-SNAPSHOT</version>
  304 + </dependency>
298 </dependencies> 305 </dependencies>
299 306
300 <dependencyManagement> 307 <dependencyManagement>
src/main/java/com/bsth/entity/schedule/log/ModuleOperatorLog.java 0 → 100644
  1 +package com.bsth.entity.schedule.log;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.enums.log.ModuleOperatorType;
  4 +import com.bsth.control_v2.plan_module.common.enums.log.ModuleType;
  5 +import com.bsth.control_v2.plan_module.common.enums.log.OperatorType;
  6 +import com.bsth.entity.schedule.log.convert.ModuleOperatorTypeConverter;
  7 +import com.bsth.entity.schedule.log.convert.ModuleTypeConverter;
  8 +import com.bsth.entity.schedule.log.convert.OperatorTypeConverter;
  9 +
  10 +import javax.persistence.*;
  11 +import java.io.Serializable;
  12 +import java.util.Date;
  13 +
  14 +/**
  15 + * 模块业务操作日志。
  16 + */
  17 +@Entity
  18 +@Table(name = "bsth_c_s_op_log")
  19 +public class ModuleOperatorLog implements Serializable {
  20 +
  21 + /** 主键Id */
  22 + @Id
  23 + @GeneratedValue
  24 + private Long id;
  25 +
  26 + /** 日志插入时间 */
  27 + @Column(nullable = false)
  28 + private Long timestmp;
  29 +
  30 + /** 模块类型 */
  31 + @Column(nullable = false)
  32 + @Convert(converter = ModuleTypeConverter.class)
  33 + private ModuleType moduleType;
  34 +
  35 + @Column(nullable = false)
  36 + @Convert(converter = OperatorTypeConverter.class)
  37 + private OperatorType operatorType;
  38 +
  39 + /** 模块操作类型 */
  40 + @Column(nullable = false)
  41 + @Convert(converter = ModuleOperatorTypeConverter.class)
  42 + private ModuleOperatorType moduleOperatorType;
  43 +
  44 + /** 日志描述 */
  45 + @Column(nullable = false)
  46 + private String message;
  47 +
  48 + /** 日志级别 */
  49 + @Column(nullable = false)
  50 + private String levelName;
  51 + /** 模块业务操作开始时间 */
  52 + @Column(nullable = false)
  53 + private Date opStartTime;
  54 + /** 模块业务操作结束时间 */
  55 + @Column(nullable = false)
  56 + private Date opEndTime;
  57 + /** 模块业务操作人姓名 */
  58 + @Column(nullable = false)
  59 + private String opUserName;
  60 + /** 模块业务操作人工号 */
  61 + @Column(nullable = false)
  62 + private String opUserCode;
  63 + /** 关联的实体class名 */
  64 + @Column(nullable = false)
  65 + private String opEntityClass;
  66 + /** 操作前的实体json */
  67 + @Column(nullable = false)
  68 + private String opBeforeJson;
  69 + /** 操作后的实体json */
  70 + @Column(nullable = false)
  71 + private String opAfterJson;
  72 +
  73 + /** 备用-可选参数1 */
  74 + private String optArg1;
  75 + /** 备用-可选参数2 */
  76 + private String optArg2;
  77 + /** 备用-可选参数3 */
  78 + private String optArg3;
  79 +
  80 + //------------- 客户端信息 -------------//
  81 + /** 客户端Ip */
  82 + private String clientIp;
  83 + /** 客户端游览器 */
  84 + private String clientBowser;
  85 + /** 客户端主机信息 */
  86 + private String clientSystem;
  87 + /** 获取mac地址 */
  88 + private String clientMacAddress;
  89 +
  90 + public Long getId() {
  91 + return id;
  92 + }
  93 +
  94 + public void setId(Long id) {
  95 + this.id = id;
  96 + }
  97 +
  98 + public Long getTimestmp() {
  99 + return timestmp;
  100 + }
  101 +
  102 + public void setTimestmp(Long timestmp) {
  103 + this.timestmp = timestmp;
  104 + }
  105 +
  106 + public ModuleType getModuleType() {
  107 + return moduleType;
  108 + }
  109 +
  110 + public void setModuleType(ModuleType moduleType) {
  111 + this.moduleType = moduleType;
  112 + }
  113 +
  114 + public OperatorType getOperatorType() {
  115 + return operatorType;
  116 + }
  117 +
  118 + public void setOperatorType(OperatorType operatorType) {
  119 + this.operatorType = operatorType;
  120 + }
  121 +
  122 + public ModuleOperatorType getModuleOperatorType() {
  123 + return moduleOperatorType;
  124 + }
  125 +
  126 + public void setModuleOperatorType(ModuleOperatorType moduleOperatorType) {
  127 + this.moduleOperatorType = moduleOperatorType;
  128 + }
  129 +
  130 + public String getMessage() {
  131 + return message;
  132 + }
  133 +
  134 + public void setMessage(String message) {
  135 + this.message = message;
  136 + }
  137 +
  138 + public String getLevelName() {
  139 + return levelName;
  140 + }
  141 +
  142 + public void setLevelName(String levelName) {
  143 + this.levelName = levelName;
  144 + }
  145 +
  146 + public Date getOpStartTime() {
  147 + return opStartTime;
  148 + }
  149 +
  150 + public void setOpStartTime(Date opStartTime) {
  151 + this.opStartTime = opStartTime;
  152 + }
  153 +
  154 + public Date getOpEndTime() {
  155 + return opEndTime;
  156 + }
  157 +
  158 + public void setOpEndTime(Date opEndTime) {
  159 + this.opEndTime = opEndTime;
  160 + }
  161 +
  162 + public String getOpUserName() {
  163 + return opUserName;
  164 + }
  165 +
  166 + public void setOpUserName(String opUserName) {
  167 + this.opUserName = opUserName;
  168 + }
  169 +
  170 + public String getOpUserCode() {
  171 + return opUserCode;
  172 + }
  173 +
  174 + public void setOpUserCode(String opUserCode) {
  175 + this.opUserCode = opUserCode;
  176 + }
  177 +
  178 + public String getOpEntityClass() {
  179 + return opEntityClass;
  180 + }
  181 +
  182 + public void setOpEntityClass(String opEntityClass) {
  183 + this.opEntityClass = opEntityClass;
  184 + }
  185 +
  186 + public String getOpBeforeJson() {
  187 + return opBeforeJson;
  188 + }
  189 +
  190 + public void setOpBeforeJson(String opBeforeJson) {
  191 + this.opBeforeJson = opBeforeJson;
  192 + }
  193 +
  194 + public String getOpAfterJson() {
  195 + return opAfterJson;
  196 + }
  197 +
  198 + public void setOpAfterJson(String opAfterJson) {
  199 + this.opAfterJson = opAfterJson;
  200 + }
  201 +
  202 + public String getOptArg1() {
  203 + return optArg1;
  204 + }
  205 +
  206 + public void setOptArg1(String optArg1) {
  207 + this.optArg1 = optArg1;
  208 + }
  209 +
  210 + public String getOptArg2() {
  211 + return optArg2;
  212 + }
  213 +
  214 + public void setOptArg2(String optArg2) {
  215 + this.optArg2 = optArg2;
  216 + }
  217 +
  218 + public String getOptArg3() {
  219 + return optArg3;
  220 + }
  221 +
  222 + public void setOptArg3(String optArg3) {
  223 + this.optArg3 = optArg3;
  224 + }
  225 +
  226 + public String getClientIp() {
  227 + return clientIp;
  228 + }
  229 +
  230 + public void setClientIp(String clientIp) {
  231 + this.clientIp = clientIp;
  232 + }
  233 +
  234 + public String getClientBowser() {
  235 + return clientBowser;
  236 + }
  237 +
  238 + public void setClientBowser(String clientBowser) {
  239 + this.clientBowser = clientBowser;
  240 + }
  241 +
  242 + public String getClientSystem() {
  243 + return clientSystem;
  244 + }
  245 +
  246 + public void setClientSystem(String clientSystem) {
  247 + this.clientSystem = clientSystem;
  248 + }
  249 +
  250 + public String getClientMacAddress() {
  251 + return clientMacAddress;
  252 + }
  253 +
  254 + public void setClientMacAddress(String clientMacAddress) {
  255 + this.clientMacAddress = clientMacAddress;
  256 + }
  257 +}
src/main/java/com/bsth/entity/schedule/log/convert/ModuleOperatorTypeConverter.java 0 → 100644
  1 +package com.bsth.entity.schedule.log.convert;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.enums.log.ModuleOperatorType;
  4 +
  5 +import javax.persistence.AttributeConverter;
  6 +import javax.persistence.Convert;
  7 +
  8 +@Convert
  9 +public class ModuleOperatorTypeConverter implements AttributeConverter<ModuleOperatorType, String> {
  10 + @Override
  11 + public String convertToDatabaseColumn(ModuleOperatorType attribute) {
  12 + return attribute.getDicDesc();
  13 + }
  14 +
  15 + @Override
  16 + public ModuleOperatorType convertToEntityAttribute(String dbData) {
  17 + return ModuleOperatorType.fromDicDesc(dbData);
  18 + }
  19 +}
src/main/java/com/bsth/entity/schedule/log/convert/ModuleTypeConverter.java 0 → 100644
  1 +package com.bsth.entity.schedule.log.convert;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.enums.log.ModuleType;
  4 +
  5 +import javax.persistence.AttributeConverter;
  6 +import javax.persistence.Convert;
  7 +
  8 +@Convert
  9 +public class ModuleTypeConverter implements AttributeConverter<ModuleType, String> {
  10 + @Override
  11 + public String convertToDatabaseColumn(ModuleType attribute) {
  12 + return attribute.getDicDesc();
  13 + }
  14 +
  15 + @Override
  16 + public ModuleType convertToEntityAttribute(String dbData) {
  17 + return ModuleType.fromDicDesc(dbData);
  18 + }
  19 +}
src/main/java/com/bsth/entity/schedule/log/convert/OperatorTypeConverter.java 0 → 100644
  1 +package com.bsth.entity.schedule.log.convert;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.enums.log.OperatorType;
  4 +
  5 +import javax.persistence.AttributeConverter;
  6 +import javax.persistence.Convert;
  7 +
  8 +@Convert
  9 +public class OperatorTypeConverter implements AttributeConverter<OperatorType, String> {
  10 + @Override
  11 + public String convertToDatabaseColumn(OperatorType attribute) {
  12 + return attribute.getDicDesc();
  13 + }
  14 +
  15 + @Override
  16 + public OperatorType convertToEntityAttribute(String dbData) {
  17 + return OperatorType.fromDicDesc(dbData);
  18 + }
  19 +}
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -12,6 +12,7 @@ import com.bsth.data.pilot80.PilotReport; @@ -12,6 +12,7 @@ import com.bsth.data.pilot80.PilotReport;
12 import com.bsth.data.safe_driv.SafeDriv; 12 import com.bsth.data.safe_driv.SafeDriv;
13 import com.bsth.data.safe_driv.SafeDrivCenter; 13 import com.bsth.data.safe_driv.SafeDrivCenter;
14 import com.bsth.data.schedule.DayOfSchedule; 14 import com.bsth.data.schedule.DayOfSchedule;
  15 +import com.bsth.entity.Line;
15 import com.bsth.entity.LineVersions; 16 import com.bsth.entity.LineVersions;
16 import com.bsth.entity.directive.D80; 17 import com.bsth.entity.directive.D80;
17 import com.bsth.entity.realcontrol.ScheduleRealInfo; 18 import com.bsth.entity.realcontrol.ScheduleRealInfo;
@@ -252,14 +253,19 @@ public class GpsServiceImpl implements GpsService { @@ -252,14 +253,19 @@ public class GpsServiceImpl implements GpsService {
252 for(Map<String, Object> rs : dataList){ 253 for(Map<String, Object> rs : dataList){
253 int index=dataList.indexOf(rs); 254 int index=dataList.indexOf(rs);
254 if (index< dataList.size()-1&&!map_get_str( rs,"LINE_ID").equals(map_get_str( dataList.get(index+1),"LINE_ID"))){ 255 if (index< dataList.size()-1&&!map_get_str( rs,"LINE_ID").equals(map_get_str( dataList.get(index+1),"LINE_ID"))){
  256 +
  257 + Line cLine =lineRepository.findOne(Integer.valueOf(map_get_str( rs,"LINE_ID")));
  258 + Line nextLine =lineRepository.findOne(Integer.valueOf(map_get_str( dataList.get(index+1),"LINE_ID")));
  259 + if (cLine!=null&&nextLine!=null){
255 Map<String,Object> LSmap=new HashMap<>(); 260 Map<String,Object> LSmap=new HashMap<>();
256 - String name=lineRepository.findOne(Integer.valueOf(map_get_str( rs,"LINE_ID"))).getName();  
257 - String NextName=lineRepository.findOne(Integer.valueOf(map_get_str( dataList.get(index+1),"LINE_ID"))).getName(); 261 + String name=cLine.getName();
  262 + String NextName=nextLine.getName();
258 LSmap.put("abnormalType","linesSwitch"); 263 LSmap.put("abnormalType","linesSwitch");
259 LSmap.put("line_line",name+"-->"+NextName); 264 LSmap.put("line_line",name+"-->"+NextName);
260 LSmap.put("st",map_get_long(rs, "TS")); 265 LSmap.put("st",map_get_long(rs, "TS"));
261 LSmap.put("et",index== dataList.size()-1?map_get_long(rs, "TS"):map_get_long( dataList.get(index+1), "TS")); 266 LSmap.put("et",index== dataList.size()-1?map_get_long(rs, "TS"):map_get_long( dataList.get(index+1), "TS"));
262 lineSwitch.add(LSmap); 267 lineSwitch.add(LSmap);
  268 + }
263 } 269 }
264 serviceState = map_get_long(rs, "SERVICE_STATE"); 270 serviceState = map_get_long(rs, "SERVICE_STATE");
265 if(getGpsValid(serviceState) == 1){ 271 if(getGpsValid(serviceState) == 1){
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -590,6 +590,11 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -590,6 +590,11 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
590 590
591 //计算班次实际执行时间 591 //计算班次实际执行时间
592 schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t); 592 schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
  593 + //处理计达跨24点
  594 + LineConfig conf = lineConfigData.get(t.getXlBm());
  595 + if (t.getZdsj().compareTo(conf.getStartOpt()) < 0) {
  596 + t.setZdsjT(sdfyyyyMMddHHmm.parse(t.getScheduleDateStr() + t.getZdsj()).getTime() + (1000 * 60 * 60 * 24));
  597 + }
593 if (t.getZdsjT() < t.getFcsjT()) { 598 if (t.getZdsjT() < t.getFcsjT()) {
594 rs.put("status", ResponseCode.ERROR); 599 rs.put("status", ResponseCode.ERROR);
595 rs.put("msg", "起终点时间异常!"); 600 rs.put("msg", "起终点时间异常!");
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
@@ -454,6 +454,19 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -454,6 +454,19 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
454 454
455 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1()); 455 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1());
456 StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2()); 456 StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2());
  457 +
  458 + // TODO
  459 + Map<String, Object> param = new HashMap<>();
  460 + param.put("station.id_eq", null);
  461 + if (station1 == null) {
  462 + param.put("station.id_eq", lpObjList.get(0).getStationRouteId1());
  463 + station1 = ((List<StationRoute>) stationRouteService.list(param)).get(0);
  464 + }
  465 + if (station2 == null) {
  466 + param.put("station.id_eq", lpObjList.get(0).getStationRouteId2());
  467 + station2 = ((List<StationRoute>) stationRouteService.list(param)).get(0);
  468 + }
  469 +
457 for (int i = 0; i < groupCount; i++) { 470 for (int i = 0; i < groupCount; i++) {
458 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 1), station1.getStationName(), new Color(0x96b9d7)); 471 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 1), station1.getStationName(), new Color(0x96b9d7));
459 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 2), station2.getStationName(), new Color(0x96b9d7)); 472 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 2), station2.getStationName(), new Color(0x96b9d7));
@@ -566,6 +579,19 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -566,6 +579,19 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
566 579
567 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1()); 580 StationRoute station1 = stationRouteService.findById(lpObjList.get(0).getStationRouteId1());
568 StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2()); 581 StationRoute station2 = stationRouteService.findById(lpObjList.get(1).getStationRouteId2());
  582 +
  583 + // TODO
  584 + Map<String, Object> param = new HashMap<>();
  585 + param.put("station.id_eq", null);
  586 + if (station1 == null) {
  587 + param.put("station.id_eq", lpObjList.get(0).getStationRouteId1());
  588 + station1 = ((List<StationRoute>) stationRouteService.list(param)).get(0);
  589 + }
  590 + if (station2 == null) {
  591 + param.put("station.id_eq", lpObjList.get(0).getStationRouteId2());
  592 + station2 = ((List<StationRoute>) stationRouteService.list(param)).get(0);
  593 + }
  594 +
569 for (int i = 1; i <= groupCount; i++) { 595 for (int i = 1; i <= groupCount; i++) {
570 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 1), station1.getStationName(), new Color(0x96b9d7)); 596 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 1), station1.getStationName(), new Color(0x96b9d7));
571 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 2), station2.getStationName(), new Color(0x96b9d7)); 597 excelPoiOperator.createStringCell(wb, lpHeadRow, (short) (i * 2 + 2), station2.getStationName(), new Color(0x96b9d7));
@@ -644,7 +670,9 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail @@ -644,7 +670,9 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
644 cell.setCellValue(bcObj.getFcsj() + "X"); 670 cell.setCellValue(bcObj.getFcsj() + "X");
645 } else { // 一个车次链 671 } else { // 一个车次链
646 cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3)); 672 cell = lpRow.getCell((short) (bcObj.getGroupNo() * 2 + bcObj.getGroupBcNo() + 3));
647 - cell.setCellValue(bcObj.getFcsj() + "X"); 673 + if (cell != null) {
  674 + cell.setCellValue(bcObj.getFcsj() + "X");
  675 + }
648 } 676 }
649 break; 677 break;
650 case LC: 678 case LC:
src/main/java/com/bsth/service/schedule/log/ModuleOperatorDbAppender.java 0 → 100644
  1 +package com.bsth.service.schedule.log;
  2 +
  3 +import ch.qos.logback.classic.spi.ILoggingEvent;
  4 +import ch.qos.logback.core.db.DBAppenderBase;
  5 +import ch.qos.logback.core.db.DBHelper;
  6 +import com.bsth.control_v2.plan_module.common.exception.PlanModuleException;
  7 +import com.bsth.entity.schedule.log.ModuleOperatorLog;
  8 +
  9 +import java.lang.reflect.Method;
  10 +import java.sql.Connection;
  11 +import java.sql.Date;
  12 +import java.sql.PreparedStatement;
  13 +
  14 +/**
  15 + * 自定义模块业务操作日志logback自定义appender。
  16 + */
  17 +public class ModuleOperatorDbAppender extends DBAppenderBase<ILoggingEvent> {
  18 + /** JDBC3.0中的绑定表自增的主键值,获取result需要此方法 */
  19 + protected static final Method GET_GENERATED_KEYS_METHOD;
  20 + /** 插入日志sql */
  21 + protected static final String INSERT_SQL;
  22 +
  23 + @Override
  24 + public void start() {
  25 + super.start();
  26 + }
  27 +
  28 + @Override
  29 + protected Method getGeneratedKeysMethod() {
  30 + return GET_GENERATED_KEYS_METHOD;
  31 + }
  32 +
  33 + @Override
  34 + protected String getInsertSQL() {
  35 + return INSERT_SQL;
  36 + }
  37 +
  38 + @Override
  39 + protected void subAppend(ILoggingEvent iLoggingEvent, Connection connection, PreparedStatement insertStatement) throws Throwable {
  40 + // 参数判定,第一个参数必须是ModuleOperatorLog,后续的参数最多取3个
  41 + if (iLoggingEvent.getArgumentArray().length == 0) {
  42 + throw new PlanModuleException(iLoggingEvent.getLoggerName() + "日志参数必须大于1");
  43 + } else {
  44 + Object arg1 = iLoggingEvent.getArgumentArray()[0];
  45 + if (!(arg1 instanceof ModuleOperatorLog)) {
  46 + throw new PlanModuleException(iLoggingEvent.getLoggerName() + "日志第一个参数必须是ModuleOperatorLog类型");
  47 + } else {
  48 + ModuleOperatorLog arg1_log = (ModuleOperatorLog) arg1;
  49 + // insertStatement设定ModuleOperatorLog关联数据
  50 + insertStatement.setLong(1, iLoggingEvent.getTimeStamp());
  51 + insertStatement.setString(2, arg1_log.getModuleType().getDicDesc());
  52 + insertStatement.setString(3, arg1_log.getOperatorType().getDicDesc());
  53 + insertStatement.setString(4, arg1_log.getModuleOperatorType().getDicDesc());
  54 + insertStatement.setString(5, arg1_log.getMessage());
  55 + insertStatement.setString(6, iLoggingEvent.getLevel().levelStr);
  56 + insertStatement.setDate(7, new Date(arg1_log.getOpStartTime().getTime()));
  57 + insertStatement.setDate(8, new Date(arg1_log.getOpEndTime().getTime()));
  58 + insertStatement.setString(9, arg1_log.getOpUserName());
  59 + insertStatement.setString(10, arg1_log.getOpUserCode());
  60 + insertStatement.setString(11, arg1_log.getOpEntityClass());
  61 + insertStatement.setString(12, arg1_log.getOpBeforeJson());
  62 + insertStatement.setString(13, arg1_log.getOpAfterJson());
  63 + insertStatement.setString(14, "");
  64 + insertStatement.setString(15, "");
  65 + insertStatement.setString(16, "");
  66 +
  67 + for (int i = 1; i < iLoggingEvent.getArgumentArray().length; i++) {
  68 + if (i == 1) {
  69 + insertStatement.setString(14, iLoggingEvent.getArgumentArray()[i].toString());
  70 + } else if (i == 2) {
  71 + insertStatement.setString(15, iLoggingEvent.getArgumentArray()[i].toString());
  72 + } else if (i == 3) {
  73 + insertStatement.setString(16, iLoggingEvent.getArgumentArray()[i].toString());
  74 + } else {
  75 + break;
  76 + }
  77 + }
  78 +
  79 + int updateCount = insertStatement.executeUpdate();
  80 + if (updateCount != 1) {
  81 + addWarn("Failed to insert loggingEvent");
  82 + }
  83 + }
  84 + }
  85 +
  86 + }
  87 +
  88 + @Override
  89 + protected void secondarySubAppend(ILoggingEvent iLoggingEvent, Connection connection, long l) throws Throwable {
  90 + // TODO:
  91 + }
  92 +
  93 + @Override
  94 + public void append(ILoggingEvent eventObject) {
  95 + Connection connection = null;
  96 + PreparedStatement insertStatement = null;
  97 + try {
  98 + connection = this.connectionSource.getConnection();
  99 + connection.setAutoCommit(false);
  100 + insertStatement = connection.prepareStatement(INSERT_SQL);
  101 + synchronized (this) {
  102 + subAppend(eventObject, connection, insertStatement);
  103 + }
  104 + // TODO:可能以后需要secondarySubAppend
  105 +
  106 + connection.commit();
  107 + } catch (Throwable exp) {
  108 + exp.printStackTrace();
  109 + this.addError("problem appending event", exp);
  110 + } finally {
  111 + DBHelper.closeStatement(insertStatement);
  112 + DBHelper.closeConnection(connection);
  113 + }
  114 + }
  115 +
  116 + static {
  117 + StringBuilder sql = new StringBuilder();
  118 + sql.append("insert into bsth_c_s_op_log (");
  119 + sql.append("timestmp, ");
  120 + sql.append("module_type, ");
  121 + sql.append("operator_type, ");
  122 + sql.append("module_operator_type, ");
  123 + sql.append("message, ");
  124 + sql.append("level_name, ");
  125 + sql.append("op_start_time, ");
  126 + sql.append("op_end_time, ");
  127 + sql.append("op_user_name, ");
  128 + sql.append("op_user_code, ");
  129 + sql.append("op_entity_class, ");
  130 + sql.append("op_before_json, ");
  131 + sql.append("op_after_json, ");
  132 + sql.append("opt_arg1, ");
  133 + sql.append("opt_arg2, ");
  134 + sql.append("opt_arg3) ");
  135 + sql.append(" values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
  136 + INSERT_SQL = sql.toString();
  137 +
  138 + Method getGeneratedKeysMethod;
  139 + try {
  140 + getGeneratedKeysMethod = PreparedStatement.class.getMethod("getGeneratedKeys", (Class[])null);
  141 + } catch (Exception exp) {
  142 + getGeneratedKeysMethod = null;
  143 + }
  144 +
  145 + GET_GENERATED_KEYS_METHOD = getGeneratedKeysMethod;
  146 + }
  147 +}
src/main/java/com/bsth/service/schedule/log/PlanLogger.java 0 → 100644
  1 +package com.bsth.service.schedule.log;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.dto.schedule.PlanInfoDto;
  4 +import com.bsth.control_v2.plan_module.common.enums.log.ModuleOperatorType;
  5 +import com.bsth.control_v2.plan_module.common.enums.log.ModuleType;
  6 +import com.bsth.control_v2.plan_module.common.enums.log.OperatorType;
  7 +import com.bsth.entity.schedule.SchedulePlan;
  8 +import com.bsth.entity.schedule.log.ModuleOperatorLog;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +import org.springframework.stereotype.Service;
  12 +
  13 +import java.util.Date;
  14 +
  15 +/**
  16 + * 排班计划日志。
  17 + */
  18 +@Service
  19 +public class PlanLogger {
  20 + /** 日志记录器 */
  21 + private static final Logger LOGGER = LoggerFactory.getLogger(PlanLogger.class);
  22 +
  23 + /**
  24 + * 生成排班计划日志。
  25 + * @param startTime 操作开始时间
  26 + * @param endTime 操作结束时间
  27 + */
  28 + public void createLog(Date startTime, Date endTime) {
  29 + ModuleOperatorLog moduleOperatorLog = new ModuleOperatorLog();
  30 + moduleOperatorLog.setMessage("排班生成!");
  31 + moduleOperatorLog.setModuleType(ModuleType.SCHEDULE);
  32 + moduleOperatorLog.setOperatorType(OperatorType.NEW);
  33 + moduleOperatorLog.setModuleOperatorType(ModuleOperatorType.SCHEDULE_NEW);
  34 + moduleOperatorLog.setOpStartTime(startTime);
  35 + moduleOperatorLog.setOpEndTime(endTime);
  36 + moduleOperatorLog.setOpUserName("root");
  37 + moduleOperatorLog.setOpUserCode("root");
  38 + moduleOperatorLog.setOpEntityClass(SchedulePlan.class.getName());
  39 + moduleOperatorLog.setOpBeforeJson("{}");
  40 + moduleOperatorLog.setOpAfterJson("{}");
  41 +
  42 + // 如果需要opArg1,opArg2,opArg3,从第2个参数加起,如:LOGGER.info("", {moduleOperatorLog}, {opArg1}, {opArg2})
  43 + LOGGER.info("排班计划生成日志:{}", moduleOperatorLog);
  44 + }
  45 +
  46 + /**
  47 + * 修改排班计划明细日志。
  48 + * @param startTime 操作开始时间
  49 + * @param beforeData 修改前数据
  50 + * @param endTime 操作结束时间
  51 + * @param afterData 修改后数据
  52 + */
  53 + public void modifyInfoLog(Date startTime, PlanInfoDto beforeData, Date endTime, PlanInfoDto afterData) {
  54 + // TODO:
  55 + }
  56 +}
src/main/java/com/bsth/service/schedule/log/TimetableLogger.java 0 → 100644
  1 +package com.bsth.service.schedule.log;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.dto.schedule.timetable.TTInfoDetailDto;
  4 +import com.bsth.control_v2.plan_module.common.dto.schedule.timetable.TTInfoDto;
  5 +import org.slf4j.Logger;
  6 +import org.slf4j.LoggerFactory;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +import java.util.Date;
  10 +
  11 +/**
  12 + * 时刻表日志。
  13 + */
  14 +@Service
  15 +public class TimetableLogger {
  16 + /** 日志记录器 */
  17 + private static final Logger LOGGER = LoggerFactory.getLogger(TimetableLogger.class);
  18 +
  19 + /**
  20 + * 生成时刻表模版日志。
  21 + * @param startTime 操作开始时间
  22 + * @param endTime 操作结束时间
  23 + */
  24 + public void createTTLog(Date startTime, Date endTime) {
  25 + // TODO:
  26 + }
  27 +
  28 + /**
  29 + * 修改时刻表模版日志。
  30 + * @param startTime 操作开始时间
  31 + * @param beforeData 修改前数据
  32 + * @param endTime 操作结束时间
  33 + * @param afterData 修改后数据
  34 + */
  35 + public void modifyTTLog(Date startTime, TTInfoDto beforeData, Date endTime, TTInfoDto afterData) {
  36 + // TODO:
  37 + }
  38 +
  39 + /**
  40 + * 导入时刻表明细日志。
  41 + * @param startTime 操作开始时间
  42 + * @param endTime 操作结束时间
  43 + */
  44 + public void importTTDLog(Date startTime, Date endTime) {
  45 + // TODO:导入前备份一次,导入后备份一次,备份前后的id放入before和after中
  46 + }
  47 +
  48 + /**
  49 + * 修改时刻表明细日志。
  50 + * @param startTime 操作开始时间
  51 + * @param beforeData 修改前数据
  52 + * @param endTime 操作结束时间
  53 + * @param afterData 修改后数据
  54 + */
  55 + public void modifyTTDLog(Date startTime, TTInfoDetailDto beforeData, Date endTime, TTInfoDetailDto afterData) {
  56 + // TODO:
  57 + }
  58 +}
src/main/resources/fatso/start.js
@@ -16,7 +16,7 @@ var platform = process.platform; @@ -16,7 +16,7 @@ var platform = process.platform;
16 var iswin = platform == 'win32'; 16 var iswin = platform == 'win32';
17 var sp = platform == 'win32' ? '\\' : '/'; 17 var sp = platform == 'win32' ? '\\' : '/';
18 //不参与的目录 18 //不参与的目录
19 -var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission' + sp + 'authorize_all', 'summary', 'history_sch', 'report' + sp + 'oil', 'base' + sp + 'geo_data_edit', 'base' + sp + 'carpark', 'forms', 'mforms', 'report', 'punctual', 'base' + sp + 'timesmodel'] 19 +var excludes = ['scheduleApp', 'trafficManage', 'control', 'permission' + sp + 'authorize_all','permission' + sp + 'user', 'summary', 'history_sch', 'report' + sp + 'oil', 'base' + sp + 'geo_data_edit', 'base' + sp + 'carpark', 'forms', 'mforms', 'report', 'punctual', 'base' + sp + 'timesmodel']
20 , ep = new EventProxy() 20 , ep = new EventProxy()
21 , pName = 'bsth_control' 21 , pName = 'bsth_control'
22 , path = process.cwd() 22 , path = process.cwd()
src/main/resources/logback.xml
@@ -160,6 +160,46 @@ @@ -160,6 +160,46 @@
160 </logger> 160 </logger>
161 161
162 162
  163 + <!-- 时刻表,排班计划业务修改日志 -->
  164 + <!--<springProfile name="dev">-->
  165 + <!--<appender name="MYDB" class="com.bsth.service.schedule.log.ModuleOperatorDbAppender">-->
  166 + <!--<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">-->
  167 + <!--<dataSource class="org.apache.commons.dbcp.BasicDataSource">-->
  168 + <!--<driverClassName>com.mysql.jdbc.Driver</driverClassName>-->
  169 + <!--<url>-->
  170 + <!--<![CDATA[-->
  171 + <!--jdbc:mysql://127.0.0.1/test_control?useUnicode=true&characterEncoding=utf-8&useSSL=false-->
  172 + <!--]]>-->
  173 + <!--</url>-->
  174 + <!--<username>root</username>-->
  175 + <!--<password></password>-->
  176 + <!--<testOnBorrow>true</testOnBorrow>-->
  177 + <!--<validationQuery>-->
  178 + <!--<![CDATA[-->
  179 + <!--SELECT 1-->
  180 + <!--]]>-->
  181 + <!--</validationQuery>-->
  182 + <!--</dataSource>-->
  183 + <!--</connectionSource>-->
  184 + <!--</appender>-->
  185 + <!--</springProfile>-->
  186 +
  187 + <!--<appender name="ASYNC_MYDB" class="ch.qos.logback.classic.AsyncAppender">-->
  188 + <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
  189 + <!--<discardingThreshold >0</discardingThreshold>-->
  190 + <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为256 &ndash;&gt;-->
  191 + <!--<queueSize>512</queueSize>-->
  192 + <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
  193 + <!--<appender-ref ref ="MYDB"/>-->
  194 + <!--</appender>-->
  195 +
  196 + <!--<logger name="com.bsth.service.schedule.log.PlanLogger"-->
  197 + <!--level="INFO" additivity="false">-->
  198 + <!--<appender-ref ref="ASYNC_MYDB" />-->
  199 + <!--</logger>-->
  200 +
  201 + <!-- TODO -->
  202 +
163 <!-- gps --> 203 <!-- gps -->
164 <appender name="GPS_COUNT" 204 <appender name="GPS_COUNT"
165 class="ch.qos.logback.core.rolling.RollingFileAppender"> 205 class="ch.qos.logback.core.rolling.RollingFileAppender">
src/main/resources/static/pages/base/timesmodel/js/add-form-reload.js
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 if (!$('body').hasClass('page-sidebar-closed')) { 3 if (!$('body').hasClass('page-sidebar-closed')) {
4 $('.menu-toggler.sidebar-toggler').click(); 4 $('.menu-toggler.sidebar-toggler').click();
5 } 5 }
6 - 6 +
7 $('.openHaveSkb').on('click',function() { 7 $('.openHaveSkb').on('click',function() {
8 var skbId = $("#skbNameSelect").val(); 8 var skbId = $("#skbNameSelect").val();
9 var argus = { 9 var argus = {
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -66,6 +66,8 @@ @@ -66,6 +66,8 @@
66 CSMap = getMaxCarAndStopSpace0(map,seMap); 66 CSMap = getMaxCarAndStopSpace0(map,seMap);
67 // 发车间隙 67 // 发车间隙
68 map.fcjx = CSMap.fcjx; 68 map.fcjx = CSMap.fcjx;
  69 + map.stt = "1";
  70 + _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap);
69 }else if(map.baseRes== '1') { 71 }else if(map.baseRes== '1') {
70 CSMap = getMaxCarAndStopSpace1(map); 72 CSMap = getMaxCarAndStopSpace1(map);
71 // 发车间隙 73 // 发车间隙
@@ -144,7 +146,7 @@ @@ -144,7 +146,7 @@
144 // // 初始化右键菜单. 146 // // 初始化右键菜单.
145 // contextInit(graph); 147 // contextInit(graph);
146 148
147 - if (map.baseRes == '3' || map.baseRes == '1') { 149 + if (map.baseRes == '3' || map.baseRes == '1' || map.baseRes == '0') {
148 // 导入导出设置 150 // 导入导出设置
149 // Main_v2_2.exportExcelConfig($_GlobalGraph.getDataArray); 151 // Main_v2_2.exportExcelConfig($_GlobalGraph.getDataArray);
150 152
src/main/resources/static/pages/base/timesmodel/js/v2_2/Main_v2_2_ExcelObj.js
@@ -581,10 +581,10 @@ var Main_v2_2_ExcelObj = (function() { @@ -581,10 +581,10 @@ var Main_v2_2_ExcelObj = (function() {
581 "zdzid": oGanttBc.zdz, // 终点站id 581 "zdzid": oGanttBc.zdz, // 终点站id
582 582
583 "isUp": bIsUp, // 是否上行 583 "isUp": bIsUp, // 是否上行
584 - "isFb": null, // 是否分班(_resetBdOutInLcBcGroup方法修正) 584 + "isFb": false, // 是否分班(_resetBdOutInLcBcGroup方法修正)
585 585
586 "bcType": oGanttBc.bcType, // 班次类型(bc、out、in、lc) 586 "bcType": oGanttBc.bcType, // 班次类型(bc、out、in、lc)
587 - "fcsj": oGanttBc.fcsj, // 发车时间描述 587 + "fcsj": (oGanttBc.fcsj == null ? "" : oGanttBc.fcsj), // 发车时间描述
588 588
589 "groupNo": -99, // 第几圈(_resetBdOutInLcBcGroup方法修正) 589 "groupNo": -99, // 第几圈(_resetBdOutInLcBcGroup方法修正)
590 "groupBcNo": -99, // 圈里第几个班次(_resetBdOutInLcBcGroup方法修正) 590 "groupBcNo": -99, // 圈里第几个班次(_resetBdOutInLcBcGroup方法修正)
src/main/resources/static/pages/base/timesmodel/js/v2_2/main_v2_2.js
@@ -43,7 +43,7 @@ var Main_v2_2 = function() { @@ -43,7 +43,7 @@ var Main_v2_2 = function() {
43 schedule.fnAdjustHeadway(); 43 schedule.fnAdjustHeadway();
44 // 4、计算吃饭班次 44 // 4、计算吃饭班次
45 schedule.fnCalcuEatBc(); 45 schedule.fnCalcuEatBc();
46 - // // 6、计算末班车 46 + // // 6、计算末班车(TODO:这里家里末班车,貌似导出Excel会报错,待修正)
47 // schedule.fnCalcuLastBc(); 47 // schedule.fnCalcuLastBc();
48 // 7、重新设置停站时间 48 // 7、重新设置停站时间
49 schedule.fnReSetLayoverTime(); 49 schedule.fnReSetLayoverTime();
@@ -64,8 +64,8 @@ var Main_v2_2 = function() { @@ -64,8 +64,8 @@ var Main_v2_2 = function() {
64 * 导出时刻表配置。 64 * 导出时刻表配置。
65 * @param fnGetGanttBc 获取gantt班次方法 65 * @param fnGetGanttBc 获取gantt班次方法
66 */ 66 */
67 - exportExcelConfig: function(fnGetGanttBc) {  
68 - var oExcel = new Main_v2_2_ExcelObj(_paramObj, fnGetGanttBc); 67 + exportExcelConfig: function(paramobj, fnGetGanttBc) {
  68 + var oExcel = new Main_v2_2_ExcelObj(paramobj, fnGetGanttBc);
69 69
70 $('.exportAddXls').off('click'); 70 $('.exportAddXls').off('click');
71 $('.exportAddXlsx').off('click'); 71 $('.exportAddXlsx').off('click');
src/main/resources/static/pages/home.html
@@ -59,26 +59,40 @@ @@ -59,26 +59,40 @@
59 } 59 }
60 </style> 60 </style>
61 <div class="system_change_log"> 61 <div class="system_change_log">
62 - <h2 style="text-indent: 35px;margin: 10px 0 5px;">2018-08-23 更新说明 Changelog</h2> 62 + <h2 style="text-indent: 35px;margin: 10px 0 5px;">2019-04-11 更新说明 Changelog</h2>
63 <br><br> 63 <br><br>
64 <ul > 64 <ul >
  65 + <li class="sub_title"><h6>权限管理</h6></li>
  66 + <li><span class="label s_c_change">修复</span>1、编辑某一个员工,用户、角色和授权管理设置在同一界面。</li>
  67 + <li><span class="label s_c_change">新增</span>2、用户增加一项状态,显示主调、监控和作废。</li>
  68 + <li class="sub_title"><h6>线调</h6></li>
  69 + <li><span class="label s_c_change">新增</span>1、少量班次对换完成用颜色标记为已换。</li>
  70 + <li><span class="label s_c_change">新增</span>2、子任务可最小化。</li>
  71 + <li><span class="label s_c_change">修复</span>3、修正子任务一个备注栏原因选择后其他子任务都会同步备注此原因。</li>
  72 + <li><span class="label s_c_change">修复</span>4、轨迹回放只显示当前一段时间内的gps走向,已轨迹回放的走向自动不显示(只显示当前上下行的gps走向)。</li>
  73 + <li><span class="label s_c_change">修复</span>5、轨迹回放播放速度添加更多倍速播放可选。</li>
  74 + <li><span class="label s_c_change">新增</span>6、"线路配置"分割成"线路配置"、"翻班与自动执行",可独立授权。</li>
  75 + <li><span class="label s_c_change">新增</span>7、添加设置,选择是否显示应到实到误差时间。</li>
  76 + <li><span class="label s_c_change">修复</span>8、无发有到时间 为紫色完成状态,改为显眼颜色区分,用橙色区分。</li>
  77 + <li><span class="label s_c_change">修复</span>9、轨迹回放中根据时间点切换线路版本信息。</li>
  78 + <li><span class="label s_c_change">修复</span>10、路牌对调连续请求造成数据不一致,翻班时无法清楚前日的排班数据。</li>
65 <li class="sub_title"><h6>计划调度</h6></li> 79 <li class="sub_title"><h6>计划调度</h6></li>
66 - <li><span class="label s_c_change">修复</span>1、添加新的排班验证规则,如果当天的时刻表有的路牌在排班数据中没有,提示错误。</li>  
67 - <li><span class="label s_c_change">修复</span>2、修改车辆(或人员)时,判定是否属于当前用户所属分公司中,不属于提示错误,允许继续保存。</li>  
68 - <li><span class="label s_c_change">修复</span>3、修改车辆时(或人员)时,判定是否属于当前用户所属公司中,不属于显示警告信息,不能保存。</li>  
69 - <li class="sub_title"><h6>运管处平台</h6></li>  
70 - <li><span class="label s_c_change">修复</span>1、上传时刻表时,记录时刻表对应的版本号以及该版本对应的历史站点路由信息。</li>  
71 - <li><span class="label s_c_change">修复</span>2、上传时刻表时,针对线路编码、时刻表执行时间、首末站点名称,首末站点序号这几个要素做出判断,不符合要求的要素做出相应的提示。</li> 80 + <li><span class="label s_c_change">修复</span>1、车辆报废,释放设备编号后在设备管理里添加一条设备替换记录。</li>
  81 + <li><span class="label s_c_change">修复</span>2、线路值勤日报,修改班次时,跨线路修改班次车提示报警。</li>
  82 + <li><span class="label s_c_change">修复</span>3、增加公司,分公司查询条件,公司,分公司,线路都是跟登录用户权限的,导出的数据和查询条件一致。</li>
  83 + <li><span class="label s_c_change">修复</span>4、排班时,页面添加规则逻辑判定。</li>
  84 + <li><span class="label s_c_change">修复</span>5、车辆导出修正,导出内容和权限匹配,和搜索条件匹配。</li>
  85 + <li><span class="label s_c_change">新增</span>6、所有的页面搜索添加排序选项功能。</li>
  86 + <li><span class="label s_c_change">新增</span>7、新增计划排班预览功能。</li>
72 <li class="sub_title"><h6>统计报表</h6></li> 87 <li class="sub_title"><h6>统计报表</h6></li>
73 - <li><span class="label s_c_change">修复</span>1、对集群调度系统“报表管理”中各类统计报表(只提供单线汇总统计的报表除外),增设线路性质区分统计功能选项,按“全部线路”、“营运线路”、“非营运线路”进行区分,且默认选项为“营运线路”)。</li>  
74 - <li><span class="label s_c_change">修复</span>2、对集群调度系统“报表管理”中各类统计报表(只提供单线汇总统计的报表除外),增设四家直属公司统计选项。</li>  
75 - <li><span class="label s_c_change">修复</span>3、在“营运线路出车率统计表”中,增加早高峰出车率统计项,计算公式:早高峰实际出车数/线路计划配车数。</li>  
76 - <li><span class="label s_c_change">修复</span>4、发车准点率中加入到站准点率,统计班次为首站发车为起点站的班次。</li>  
77 - <li><span class="label s_c_change">修复</span>5、统计日报调度日报烂班详细统计标准以“调度日报”为准。</li>  
78 - <li class="sub_title"><h6>线调</h6></li>  
79 - <li><span class="label s_c_change">修复</span>1、修正一个线调bug,这个bug导致部分套跑班车的车辆,一定几率会出现车载线路无法正常切换问题。</li> 88 + <li><span class="label s_c_change">新增</span>1、新增早高峰出车报表。</li>
  89 + <li><span class="label s_c_change">新增</span>2、新增调度日报(待发对比) 报表。</li>
  90 + <li><span class="label s_c_change">新增</span>3、新增路单数据统计报表。</li>
  91 + <li><span class="label s_c_change">修复</span>4、修正班次车辆人员日报表中的售票员统计。</li>
80 <li class="sub_title"><h6>基础信息</h6></li> 92 <li class="sub_title"><h6>基础信息</h6></li>
81 - <li><span class="label s_c_change">修复</span>1、车辆设备管理,只有新增,没有修改、作废,启用日期使用保存的时间。</li>  
82 - <li><span class="label s_c_change">修复</span>2、线路相关问题优化(站点缓冲区修改多边形中心点可拖动,可以修改为圆形、修改后定位、线路文件上传可填写版本)。</li> 93 + <li><span class="label s_c_change">修复</span>1、线路版本:待更新状态增加删除功能,历史版本取消修改功能。</li>
  94 + <li><span class="label s_c_change">修复</span>2、线路信息-站点详情列-详情页面-站点修改功能:站点修改多边形功能修改,站点中心点可以移动。</li>
  95 + <li class="sub_title"><h6>用油管理</h6></li>
  96 + <li><span class="label s_c_change">修复</span>1、修正加油人员不符保存后不在显示。</li>
83 </ul> 97 </ul>
84 </div> 98 </div>
src/main/resources/static/pages/permission/user/authorize.html
1 -<!DOCTYPE html> 1 +<!--<!DOCTYPE html>-->
2 <html lang="zh-cn"> 2 <html lang="zh-cn">
3 3
4 <head> 4 <head>
5 <meta charset="UTF-8"> 5 <meta charset="UTF-8">
  6 + <script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
  7 + <script src="/assets/js/common.js"></script>
  8 + <script src="/assets/plugins/uk3.0/uikit.min.js"></script>
  9 + <script src="/assets/plugins/uk3.0/uikit-icons.min.js"></script>
  10 + <script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js"></script>
  11 + <!-- EventProxy -->
  12 + <script src="/assets/js/eventproxy.js"></script>
  13 + <!-- art-template 模版引擎 -->
  14 + <script src="/assets/plugins/template.js"></script>
  15 + <script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>
  16 + <script src="/assets/plugins/ztree_v3/js/jquery.ztree.core.min.js"></script>
  17 + <script src="/assets/plugins/ztree_v3/js/jquery.ztree.excheck.min.js"></script>
6 <link rel="stylesheet" href="/assets/plugins/uk3.0/uikit.min.css"/> 18 <link rel="stylesheet" href="/assets/plugins/uk3.0/uikit.min.css"/>
7 <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" /> 19 <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" />
8 <link rel="stylesheet" href="/assets/plugins/ztree_v3/css/zTreeStyle/zTreeStyle.css" /> 20 <link rel="stylesheet" href="/assets/plugins/ztree_v3/css/zTreeStyle/zTreeStyle.css" />
9 <style> 21 <style>
10 - html,body{  
11 - height: 100%;  
12 - }  
13 - .ct_page{  
14 - padding: 25px 15px;  
15 - height: 100%;  
16 - height: calc(100% - 50px);  
17 - } 22 + html,body{
  23 + height: 100%;
  24 + }
  25 + .ct_page{
  26 + padding: 25px 15px;
  27 + height: 100%;
  28 + height: calc(100% - 50px);
  29 + }
18 30
19 - .ct_cont{  
20 - height: calc(100% - 41px);  
21 - } 31 + .ct_cont{
  32 + height: calc(100% - 41px);
  33 + }
22 34
23 - .ct_cont>div>div.uk-card{  
24 - height: 99%;  
25 - } 35 + .ct_cont>div>div.uk-card{
  36 + height: 99%;
  37 + }
26 38
27 - form .uk-inline{  
28 - width: calc(100% - 4px);  
29 - margin-left: 2px;  
30 - } 39 + form .uk-inline{
  40 + width: calc(100% - 4px);
  41 + margin-left: 2px;
  42 + }
31 43
32 - .ct-card-body{  
33 - overflow: auto;  
34 - padding: 1px 1px 0 2px;  
35 - height: calc(100% - 54px);  
36 - position: relative;  
37 - margin-top: -12px;  
38 - } 44 + .ct-card-body{
  45 + overflow: auto;
  46 + padding: 1px 1px 0 2px;
  47 + height: calc(100% - 54px);
  48 + position: relative;
  49 + margin-top: -12px;
  50 + }
39 51
40 - .ct_li_desc{  
41 - color: #a8a8a8;  
42 - font-size: 13px;  
43 - } 52 + .ct_li_desc{
  53 + color: #a8a8a8;
  54 + font-size: 13px;
  55 + }
44 56
45 - .ct-card-body .uk-list-large{  
46 - font-size: 14px;  
47 - } 57 + .ct-card-body .uk-list-large{
  58 + font-size: 14px;
  59 + }
48 60
49 - .ct-card-body .uk-list-large>li{  
50 - cursor: default;  
51 - padding-left: 20px;  
52 - margin-top: 2px !important;  
53 - padding-top: 17px !important;  
54 - position: relative;  
55 - } 61 + .ct-card-body .uk-list-large>li{
  62 + cursor: default;
  63 + padding-left: 20px;
  64 + margin-top: 2px !important;
  65 + padding-top: 17px !important;
  66 + position: relative;
  67 + }
56 68
57 - .ct-card-body .uk-list-large>li:hover{  
58 - background: #edecec;  
59 - } 69 + .ct-card-body .uk-list-large>li:hover{
  70 + background: #edecec;
  71 + }
60 72
61 - .ct-card-body .uk-list-large>li.active{  
62 - background: #1e87f0 !important;  
63 - color: white;  
64 - } 73 + .ct-card-body .uk-list-large>li.active{
  74 + background: #1e87f0 !important;
  75 + color: white;
  76 + }
65 77
66 - .ct-card-body .uk-list-large>li.active>span.role-code{  
67 - color: #ffffff;  
68 - } 78 + .ct-card-body .uk-list-large>li.active>span.role-code{
  79 + color: #ffffff;
  80 + }
69 81
70 - .ct-card-body .uk-list-large.role-list>li:hover{  
71 - background: #fff494;  
72 - } 82 + .ct-card-body .uk-list-large.role-list>li:hover{
  83 + background: #fff494;
  84 + }
73 85
74 - .ct-card-body .uk-list-large>li.active .ct_li_desc{  
75 - color: #e6e6e6;  
76 - } 86 + .ct-card-body .uk-list-large>li.active .ct_li_desc{
  87 + color: #e6e6e6;
  88 + }
77 89
78 - .ct-card-body .uk-list-large>li>span.uk-badge{  
79 - position: absolute;  
80 - top: 17px;  
81 - right: 25px;  
82 - } 90 + .ct-card-body .uk-list-large>li>span.uk-badge{
  91 + position: absolute;
  92 + top: 17px;
  93 + right: 25px;
  94 + }
83 95
84 - .ct-card-body .uk-list-large>li>span.role-code{  
85 - padding: 4px 6px;  
86 - color: #a8a8a8;  
87 - margin-left: 5px;  
88 - } 96 + .ct-card-body .uk-list-large>li>span.role-code{
  97 + padding: 4px 6px;
  98 + color: #a8a8a8;
  99 + margin-left: 5px;
  100 + }
89 101
90 - .top_title{  
91 - padding: 9px 0 5px 15px;  
92 - border-bottom: 1px solid #ededed;  
93 - border-left: 5px solid #FFC107;  
94 - } 102 + .top_title{
  103 + padding: 9px 0 5px 15px;
  104 + border-bottom: 1px solid #ededed;
  105 + border-left: 5px solid #FFC107;
  106 + }
95 107
96 - .top_title>.desc{  
97 - font-size: 13px;  
98 - color: grey;  
99 - margin-top: 3px;  
100 - } 108 + .top_title>.desc{
  109 + font-size: 13px;
  110 + color: grey;
  111 + margin-top: 3px;
  112 + }
101 113
102 - .left_menu_list{  
103 - overflow: auto;  
104 - position: relative;  
105 - } 114 + .left_menu_list{
  115 + overflow: auto;
  116 + position: relative;
  117 + }
106 118
107 - .left_menu_list .ps-container > .ps-scrollbar-x-rail, .ps-container > .ps-scrollbar-y-rail{  
108 - opacity: 0.6 !important;  
109 - padding: 0 !important;  
110 - } 119 + .left_menu_list .ps-container > .ps-scrollbar-x-rail, .ps-container > .ps-scrollbar-y-rail{
  120 + opacity: 0.6 !important;
  121 + padding: 0 !important;
  122 + }
111 123
112 - ._company{  
113 - margin: 15px 0px;  
114 - }  
115 - ._company>h5{  
116 - margin-bottom: 10px;  
117 - font-size: 15px;  
118 - color: #6b6b6b;  
119 - text-indent: 12px;  
120 - }  
121 - ._company>._fgs>label{  
122 - padding: 3px 12px 3px 10px;  
123 - display: inline-block;  
124 - border: 1px solid gainsboro;  
125 - border-radius: 2px;  
126 - margin: 5px;  
127 - font-size: 14px;  
128 - }  
129 - ._company>._fgs>label.active{  
130 - background: #1e87f0;  
131 - color: #fff;  
132 - }  
133 - ._company .uk-checkbox:checked:focus,  
134 - .line_checkbox_list .uk-checkbox:checked:focus{  
135 - background-color: #1e87f0 !important;  
136 - }  
137 - .save_icon{  
138 - position: absolute;  
139 - right: 2px;  
140 - background: #bec4c9;  
141 - font-size: 12px;  
142 - padding: 2px 15px;  
143 - color: #fff;  
144 - box-shadow: 0 5px 15px rgba(0,0,0,0.08);  
145 - cursor: pointer;  
146 - }  
147 - .save_icon:hover{  
148 - background: #FFC107;  
149 - }  
150 - .data_auth_list{  
151 - position: relative;  
152 - }  
153 - #user_authorize_wrap .top_title{  
154 - border-left: 5px solid #cacac8;  
155 - }  
156 - .xd_line_list{  
157 - height: 37%;  
158 - padding: 7px;  
159 - border-bottom: 1px solid #f2f2f2;  
160 - overflow: auto;  
161 - position: relative;  
162 - }  
163 - .xd_line_list>h5{  
164 - color: #858585;  
165 - margin: 5px 5px 5px 0;  
166 - font-size: 14px;  
167 - }  
168 - .sub_lines{  
169 - padding-left: 15px;  
170 - }  
171 - .sub_lines>span.line_btn {  
172 - background: #00BCD4;  
173 - color: #fff;  
174 - padding: 4px 9px;  
175 - display: inline-block;  
176 - min-width: 68px;  
177 - text-align: center;  
178 - margin: 5px 2px;  
179 - box-shadow: 0 5px 9px rgba(0,0,0,0.08);  
180 - cursor: pointer;  
181 - font-size: 14px;  
182 - font-family: 微软雅黑;  
183 - } 124 + ._company{
  125 + margin: 15px 0px;
  126 + }
  127 + ._company>h5{
  128 + margin-bottom: 10px;
  129 + font-size: 15px;
  130 + color: #6b6b6b;
  131 + text-indent: 12px;
  132 + }
  133 + ._company>._fgs>label{
  134 + padding: 3px 12px 3px 10px;
  135 + display: inline-block;
  136 + border: 1px solid gainsboro;
  137 + border-radius: 2px;
  138 + margin: 5px;
  139 + font-size: 14px;
  140 + }
  141 + ._company>._fgs>label.active{
  142 + background: #1e87f0;
  143 + color: #fff;
  144 + }
  145 + ._company .uk-checkbox:checked:focus,
  146 + .line_checkbox_list .uk-checkbox:checked:focus{
  147 + background-color: #1e87f0 !important;
  148 + }
  149 + .save_icon{
  150 + position: absolute;
  151 + right: 2px;
  152 + background: #bec4c9;
  153 + font-size: 12px;
  154 + padding: 2px 15px;
  155 + color: #fff;
  156 + box-shadow: 0 5px 15px rgba(0,0,0,0.08);
  157 + cursor: pointer;
  158 + }
  159 + .save_icon:hover{
  160 + background: #FFC107;
  161 + }
  162 + .data_auth_list{
  163 + position: relative;
  164 + }
  165 + #user_authorize_wrap .top_title{
  166 + border-left: 5px solid #cacac8;
  167 + }
  168 + .xd_line_list{
  169 + height: 37%;
  170 + padding: 7px;
  171 + border-bottom: 1px solid #f2f2f2;
  172 + overflow: auto;
  173 + position: relative;
  174 + }
  175 + .xd_line_list>h5{
  176 + color: #858585;
  177 + margin: 5px 5px 5px 0;
  178 + font-size: 14px;
  179 + }
  180 + .sub_lines{
  181 + padding-left: 15px;
  182 + }
  183 + .sub_lines>span.line_btn {
  184 + background: #00BCD4;
  185 + color: #fff;
  186 + padding: 4px 9px;
  187 + display: inline-block;
  188 + min-width: 68px;
  189 + text-align: center;
  190 + margin: 5px 2px;
  191 + box-shadow: 0 5px 9px rgba(0,0,0,0.08);
  192 + cursor: pointer;
  193 + font-size: 14px;
  194 + font-family: 微软雅黑;
  195 + }
184 196
185 - .sub_lines>span.line_btn.destroy{  
186 - background: #ff5c5c;  
187 - } 197 + .sub_lines>span.line_btn.destroy{
  198 + background: #ff5c5c;
  199 + }
188 200
189 - .sub_lines>span.line_btn.destroy:hover{  
190 - background: #ff7373;  
191 - } 201 + .sub_lines>span.line_btn.destroy:hover{
  202 + background: #ff7373;
  203 + }
192 204
193 - .sub_lines>span.line_btn:hover{  
194 - background: #2dd7ed;  
195 - }  
196 - .add_line_icon{  
197 - cursor: pointer;  
198 - padding: 2px 5px;  
199 - border-radius: 5px;  
200 - display: inline-block;  
201 - }  
202 - .add_line_icon>i{  
203 - vertical-align: top;  
204 - margin-top: 3px;  
205 - }  
206 - .add_line_icon:hover{  
207 - background: #ededed;  
208 - }  
209 - .ct_pattern_form{  
210 - display: inline-block;  
211 - }  
212 - .xd_menu_grid{  
213 - padding: 25px 25px 0 25px;  
214 - height: calc(63% - 91px);  
215 - }  
216 - .xd_menu_grid .uk-list{  
217 - border: 1px solid #ededed;  
218 - height: calc(100% - 70px);  
219 - overflow: auto;  
220 - position: relative;  
221 - } 205 + .sub_lines>span.line_btn:hover{
  206 + background: #2dd7ed;
  207 + }
  208 + .add_line_icon{
  209 + cursor: pointer;
  210 + padding: 2px 5px;
  211 + border-radius: 5px;
  212 + display: inline-block;
  213 + }
  214 + .add_line_icon>i{
  215 + vertical-align: top;
  216 + margin-top: 3px;
  217 + }
  218 + .add_line_icon:hover{
  219 + background: #ededed;
  220 + }
  221 + .ct_pattern_form{
  222 + display: inline-block;
  223 + }
  224 + .xd_menu_grid{
  225 + padding: 25px 25px 0 25px;
  226 + height: calc(63% - 91px);
  227 + }
  228 + .xd_menu_grid .uk-list{
  229 + border: 1px solid #ededed;
  230 + height: calc(100% - 70px);
  231 + overflow: auto;
  232 + position: relative;
  233 + }
222 234
223 - .xd_menu_grid .uk-list>li{  
224 - margin: 5px 0 !important;  
225 - padding: 10px 0 0 10px !important;  
226 - font-size: 14px;  
227 - }  
228 - .top_tools{  
229 - position: absolute;  
230 - top: 15px;  
231 - right: 25px;  
232 - }  
233 - .ct_field {  
234 - display: inline-block;  
235 - width: 240px;  
236 - }  
237 - .ct_field>select,.ct_field>input{  
238 - width: calc(100% - 60px);  
239 - }  
240 - .line_checkbox_list{  
241 - margin-top: 15px;  
242 - }  
243 - .line_checkbox_list>.btn{  
244 - padding: 5px 7px;  
245 - border-radius: 2px;  
246 - display: inline-block;  
247 - margin: 4px 9px;  
248 - font-size: 14px;  
249 - font-family: 微软雅黑;  
250 - border: 1px solid #d9d9d9;  
251 - width: 100px;  
252 - overflow: hidden;  
253 - text-overflow: ellipsis;  
254 - white-space: nowrap;  
255 - }  
256 - .line_checkbox_list>.btn>input{  
257 - margin-right: 5px;  
258 - }  
259 - .line_checkbox_list>.btn.active{  
260 - background: #1e87f0;  
261 - color: #fff;  
262 - } 235 + .xd_menu_grid .uk-list>li{
  236 + margin: 5px 0 !important;
  237 + padding: 10px 0 0 10px !important;
  238 + font-size: 14px;
  239 + }
  240 + .top_tools{
  241 + position: absolute;
  242 + top: 15px;
  243 + right: 25px;
  244 + }
  245 + .ct_field {
  246 + display: inline-block;
  247 + width: 240px;
  248 + }
  249 + .ct_field>select,.ct_field>input{
  250 + width: calc(100% - 60px);
  251 + }
  252 + .line_checkbox_list{
  253 + margin-top: 15px;
  254 + }
  255 + .line_checkbox_list>.btn{
  256 + padding: 5px 7px;
  257 + border-radius: 2px;
  258 + display: inline-block;
  259 + margin: 4px 9px;
  260 + font-size: 14px;
  261 + font-family: 微软雅黑;
  262 + border: 1px solid #d9d9d9;
  263 + width: 100px;
  264 + overflow: hidden;
  265 + text-overflow: ellipsis;
  266 + white-space: nowrap;
  267 + }
  268 + .line_checkbox_list>.btn>input{
  269 + margin-right: 5px;
  270 + }
  271 + .line_checkbox_list>.btn.active{
  272 + background: #1e87f0;
  273 + color: #fff;
  274 + }
263 275
264 - .line_checkbox_list>.btn.destroy,  
265 - .line_checkbox_list>.btn.destroy>input{  
266 - border-color: #ff9595;  
267 - color: #ff5c5c;  
268 - } 276 + .line_checkbox_list>.btn.destroy,
  277 + .line_checkbox_list>.btn.destroy>input{
  278 + border-color: #ff9595;
  279 + color: #ff5c5c;
  280 + }
269 281
270 - .line_checkbox_list>.btn.destroy.active{  
271 - background: #ff5c5c;  
272 - color: #fff;  
273 - } 282 + .line_checkbox_list>.btn.destroy.active{
  283 + background: #ff5c5c;
  284 + color: #fff;
  285 + }
274 286
275 - .line_checkbox_list>.btn.destroy.active>input{  
276 - background-color: #ff5c5c !important;  
277 - border-color: #ff5c5c !important;  
278 - } 287 + .line_checkbox_list>.btn.destroy.active>input{
  288 + background-color: #ff5c5c !important;
  289 + border-color: #ff5c5c !important;
  290 + }
279 291
280 - #role_authorize_wrap .ztree *{  
281 - font-size: 14px;  
282 - }  
283 - #role_authorize_wrap .ztree li{  
284 - line-height: 21px;  
285 - }  
286 - .loading{  
287 - height: 100%;  
288 - text-align: center;  
289 - }  
290 - .loading .uk-spinner{  
291 - margin-top: 200px;  
292 - }  
293 - .loading circle{  
294 - stroke: red;  
295 - } 292 + #role_authorize_wrap .ztree *{
  293 + font-size: 14px;
  294 + }
  295 + #role_authorize_wrap .ztree li{
  296 + line-height: 21px;
  297 + }
  298 + .loading{
  299 + height: 100%;
  300 + text-align: center;
  301 + }
  302 + .loading .uk-spinner{
  303 + margin-top: 200px;
  304 + }
  305 + .loading circle{
  306 + stroke: red;
  307 + }
296 308
297 - #select_line_modal .uk-checkbox:checked {  
298 - background-color: #1e87f0;  
299 - } 309 + #select_line_modal .uk-checkbox:checked {
  310 + background-color: #1e87f0;
  311 + }
300 </style> 312 </style>
  313 +
301 </head> 314 </head>
302 315
303 <body> 316 <body>
@@ -342,6 +355,7 @@ @@ -342,6 +355,7 @@
342 355
343 </div> 356 </div>
344 </div> 357 </div>
  358 +
345 </div> 359 </div>
346 </div> 360 </div>
347 361
@@ -359,18 +373,6 @@ @@ -359,18 +373,6 @@
359 <li class="uk-animation-fade uk-animation-fast" data-name="{{u.name}}" data-code="{{u.userNameUp}}" data-id="{{u.id}}">{{u.name}}<span class="role-code">{{u.userName}}</span></li> 373 <li class="uk-animation-fade uk-animation-fast" data-name="{{u.name}}" data-code="{{u.userNameUp}}" data-id="{{u.id}}">{{u.name}}<span class="role-code">{{u.userName}}</span></li>
360 {{/each}} 374 {{/each}}
361 </script> 375 </script>
362 -<script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>  
363 -<script src="/assets/js/common.js"></script>  
364 -<script src="/assets/plugins/uk3.0/uikit.min.js"></script>  
365 -<script src="/assets/plugins/uk3.0/uikit-icons.min.js"></script>  
366 -<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" ></script>  
367 -<!-- EventProxy -->  
368 -<script src="/assets/js/eventproxy.js"></script>  
369 -<!-- art-template 模版引擎 -->  
370 -<script src="/assets/plugins/template.js"></script>  
371 -<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>  
372 -<script src="/assets/plugins/ztree_v3/js/jquery.ztree.core.min.js"></script>  
373 -<script src="/assets/plugins/ztree_v3/js/jquery.ztree.excheck.min.js"></script>  
374 <script> 376 <script>
375 var storage = window.localStorage; 377 var storage = window.localStorage;
376 378
@@ -464,8 +466,6 @@ @@ -464,8 +466,6 @@
464 paramsRole['codeName'] = 'ROLE_ADMIN'; 466 paramsRole['codeName'] = 'ROLE_ADMIN';
465 var userId=storage.getItem("editUser"); 467 var userId=storage.getItem("editUser");
466 $get('/user',{id_eq:userId}, function (rs) { 468 $get('/user',{id_eq:userId}, function (rs) {
467 - debugger  
468 - //if (rs)  
469 ep.emit('query_roles', rs.content[0].roles); 469 ep.emit('query_roles', rs.content[0].roles);
470 }); 470 });
471 471
src/main/resources/static/pages/permission/user/main.html
1 -<iframe src="authorize.html?origin=real_control_iframe" frameborder="0" style="height: 90%;width: 100%;"></iframe> 1 +<iframe src="/pages/permission/user/authorize.html?origin=real_control_iframe" frameborder="0" style="height: 90%;width: 100%;"></iframe>
2 <div class="form-actions"> 2 <div class="form-actions">
3 <div class="row"> 3 <div class="row">
4 <div class="col-md-offset-3 col-md-4"> 4 <div class="col-md-offset-3 col-md-4">
5 - <!--<a href="main.html" class="btn green" ><i class="fa fa-check"></i> 上一步</a>-->  
6 - <!--<button type="submit" class="btn green" ><i class="fa fa-check"></i> 提交</button>-->  
7 - <!--<a type="button" class="btn default" href="list.html" data-pjax><i class="fa fa-times"></i> 取消</a>-->  
8 </div> 5 </div>
9 </div> 6 </div>
10 </div> 7 </div>
11 \ No newline at end of file 8 \ No newline at end of file
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -566,6 +566,12 @@ dl.relevance-active.intimity dd.tl-qrlb{ @@ -566,6 +566,12 @@ dl.relevance-active.intimity dd.tl-qrlb{
566 color: #f8e9cd; 566 color: #f8e9cd;
567 } 567 }
568 568
  569 +dl.relevance-active dd.tl-wfyd,
  570 +dl.relevance-active.intimity dd.tl-wfyd{
  571 + background: linear-gradient(to right, rgb( 246,193,10), rgb(226, 226, 168), #8baabf) !important;
  572 + color: #f8e9cd;
  573 +}
  574 +
569 dl.relevance-active dd.tl-wd, 575 dl.relevance-active dd.tl-wd,
570 dl.relevance-active.intimity dd.tl-wd{ 576 dl.relevance-active.intimity dd.tl-wd{
571 background: linear-gradient(to right, #ffff00, rgb(226, 226, 168), rgb(139, 170, 191)) !important; 577 background: linear-gradient(to right, #ffff00, rgb(226, 226, 168), rgb(139, 170, 191)) !important;
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lp_change.html
@@ -389,21 +389,20 @@ @@ -389,21 +389,20 @@
389 rightIdx = rightIdx.substr(0, rightIdx.length - 1); 389 rightIdx = rightIdx.substr(0, rightIdx.length - 1);
390 390
391 var type = $(this).data('type'); 391 var type = $(this).data('type');
  392 + reLoadCurrPageData();
392 gb_common.$post('/realSchedule/lpChangeMulti', {leftIdx: leftIdx, rightIdx: rightIdx, type: type}, function (rs) { 393 gb_common.$post('/realSchedule/lpChangeMulti', {leftIdx: leftIdx, rightIdx: rightIdx, type: type}, function (rs) {
393 console.log('rs', rs); 394 console.log('rs', rs);
394 - debugger  
395 notify_succ("操作成功!!"); 395 notify_succ("操作成功!!");
396 if(rs.ts) 396 if(rs.ts)
397 gb_schedule_table.updateSchedule(rs.ts); 397 gb_schedule_table.updateSchedule(rs.ts);
398 398
399 - reLoadCurrPageData(); 399 +
400 400
401 }); 401 });
402 }); 402 });
403 403
404 404
405 function reLoadCurrPageData(){ 405 function reLoadCurrPageData(){
406 - debugger  
407 $('[name=lineSelect]', modal).each(function () { 406 $('[name=lineSelect]', modal).each(function () {
408 var array = gb_common.get_vals(gb_schedule_table.findScheduleByLine($(this).val())).sort(gb_schedule_table.schedule_sort); 407 var array = gb_common.get_vals(gb_schedule_table.findScheduleByLine($(this).val())).sort(gb_schedule_table.schedule_sort);
409 //按路牌分组 408 //按路牌分组
src/main/resources/static/real_control_v2/fragments/line_schedule/layout.html
@@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
39 <span class="tl-xxfc">消息发出</span> 39 <span class="tl-xxfc">消息发出</span>
40 <span class="tl-xxsd">消息收到</span> 40 <span class="tl-xxsd">消息收到</span>
41 <span class="tl-xxrd">消息阅读</span> 41 <span class="tl-xxrd">消息阅读</span>
  42 + <span class="tl-wfyd">无发有到</span>
42 </div> 43 </div>
43 </div> 44 </div>
44 </script> 45 </script>
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
@@ -186,7 +186,7 @@ var gb_schedule_table = (function () { @@ -186,7 +186,7 @@ var gb_schedule_table = (function () {
186 }; 186 };
187 //无发有到时间 187 //无发有到时间
188 var wfydcolor=function (sch) { 188 var wfydcolor=function (sch) {
189 - if (sch.qdzArrDatesj!=''&&sch.qdzArrDatesj!=null&&sch.fcsjActual==null) { 189 + if (sch.fcsjActual==null&&sch.zdsjActual!=null&&sch.zdsjActual!=''&&sch.status!=-1) {//sch.qdzArrDatesj!=''&&sch.qdzArrDatesj!=null&&
190 sch.status=4; 190 sch.status=4;
191 } 191 }
192 } 192 }
@@ -274,7 +274,6 @@ var gb_schedule_table = (function () { @@ -274,7 +274,6 @@ var gb_schedule_table = (function () {
274 * @param lineCode 274 * @param lineCode
275 */ 275 */
276 var reLoadAndRefresh = function (lineCode) { 276 var reLoadAndRefresh = function (lineCode) {
277 - debugger  
278 $.get('/realSchedule/lines', { 277 $.get('/realSchedule/lines', {
279 lines: lineCode + ',' 278 lines: lineCode + ','
280 }, function (rs) { 279 }, function (rs) {
@@ -387,8 +386,8 @@ var gb_schedule_table = (function () { @@ -387,8 +386,8 @@ var gb_schedule_table = (function () {
387 else 386 else
388 $(dds[8]).html(''); 387 $(dds[8]).html('');
389 if (sch.lpChange==1) { 388 if (sch.lpChange==1) {
390 - var d8html=$(dds[8]).html();  
391 - $(dds[8]).html(d8html+'<span class="uk-badge uk-badge-success out">换</span>'); 389 + var d8html=$(dds[5]).html();
  390 + $(dds[5]).html(d8html+'<span class="uk-badge uk-badge-success out">换</span>');
392 } 391 }
393 392
394 //信号状态标记 393 //信号状态标记