Commit 41caf92905e2abffdff7d5f5835357f08f147ba6

Authored by 游瑞烽
2 parents ce313275 08e392a1

Merge branch 'pudong' of 192.168.168.201:panzhaov5/bsth_control into pudong

Showing 43 changed files with 2236 additions and 869 deletions
... ... @@ -194,6 +194,12 @@
194 194 <groupId>net.sourceforge.jexcelapi</groupId>
195 195 <artifactId>jxl</artifactId>
196 196 <version>2.6.12</version>
  197 + <exclusions>
  198 + <exclusion>
  199 + <groupId>log4j</groupId>
  200 + <artifactId>log4j</artifactId>
  201 + </exclusion>
  202 + </exclusions>
197 203 </dependency>
198 204 <dependency>
199 205 <groupId>rhino</groupId>
... ... @@ -320,6 +326,10 @@
320 326 <version>3.4.5</version>
321 327 <exclusions>
322 328 <exclusion>
  329 + <groupId>log4j</groupId>
  330 + <artifactId>log4j</artifactId>
  331 + </exclusion>
  332 + <exclusion>
323 333 <groupId>org.slf4j</groupId>
324 334 <artifactId>slf4j-log4j12</artifactId>
325 335 </exclusion>
... ... @@ -330,6 +340,12 @@
330 340 <groupId>com.101tec</groupId>
331 341 <artifactId>zkclient</artifactId>
332 342 <version>0.3</version>
  343 + <exclusions>
  344 + <exclusion>
  345 + <groupId>log4j</groupId>
  346 + <artifactId>log4j</artifactId>
  347 + </exclusion>
  348 + </exclusions>
333 349 </dependency>
334 350  
335 351 <!-- plan common工程依赖 -->
... ... @@ -360,6 +376,16 @@
360 376 <version>1.7.7</version>
361 377 </dependency>
362 378  
  379 + <!-- web服务依赖 -->
  380 + <dependency>
  381 + <groupId>org.springframework.boot</groupId>
  382 + <artifactId>spring-boot-starter-ws</artifactId>
  383 + </dependency>
  384 + <dependency>
  385 + <groupId>wsdl4j</groupId>
  386 + <artifactId>wsdl4j</artifactId>
  387 + </dependency>
  388 +
363 389 </dependencies>
364 390  
365 391 <dependencyManagement>
... ... @@ -396,6 +422,26 @@
396 422 <groupId>org.springframework.boot</groupId>
397 423 <artifactId>spring-boot-maven-plugin</artifactId>
398 424 </plugin>
  425 + <plugin>
  426 + <groupId>org.codehaus.mojo</groupId>
  427 + <artifactId>jaxb2-maven-plugin</artifactId>
  428 + <version>1.6</version>
  429 + <executions>
  430 + <execution>
  431 + <id>xjc</id>
  432 + <phase>none</phase>
  433 + <goals>
  434 + <goal>xjc</goal>
  435 + </goals>
  436 + </execution>
  437 + </executions>
  438 + <configuration>
  439 + <schemaDirectory>${project.basedir}/src/main/resources/xsd/</schemaDirectory>
  440 + <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
  441 + <clearOutputDir>false</clearOutputDir>
  442 + <encoding>utf-8</encoding>
  443 + </configuration>
  444 + </plugin>
399 445 </plugins>
400 446 <resources>
401 447 <resource>
... ...
src/main/java/com/bsth/common/Constants.java
... ... @@ -23,6 +23,8 @@ public class Constants {
23 23  
24 24 // springboot manage health的检测url
25 25 public static final String ACTUATOR_MANAGEMENT_HEALTH = "/manage/health";
  26 + // web服务url
  27 + public static final String WEBSERVICE_URL = "/ws/**";
26 28  
27 29 //对外的营运数据接口
28 30 public static final String SERVICE_INTERFACE = "/companyService/**";
... ...
src/main/java/com/bsth/data/gpsdata_v2/DataHandleProcess.java
... ... @@ -6,6 +6,7 @@ import com.bsth.data.gpsdata_v2.entity.GpsEntity;
6 6 import com.bsth.data.gpsdata_v2.handlers.*;
7 7 import com.bsth.email.SendEmailController;
8 8 import com.bsth.email.entity.EmailBean;
  9 +import com.fasterxml.jackson.databind.ObjectMapper;
9 10 import com.google.common.collect.ArrayListMultimap;
10 11 import org.apache.commons.lang3.StringUtils;
11 12 import org.slf4j.Logger;
... ... @@ -102,14 +103,15 @@ public class DataHandleProcess {
102 103  
103 104  
104 105 //等待子线程结束
105   - boolean isNormal = count.await(1500, TimeUnit.MILLISECONDS);
  106 + boolean isNormal = count.await(5000, TimeUnit.MILLISECONDS);
106 107 if (!isNormal) {
107 108 try {
108 109 //发送邮件
109 110 EmailBean mail = new EmailBean();
110 111 mail.setSubject("线调GPS处理");
111   - mail.setContent("GPS处理超时,检查线程栈文件信息<br/>");
  112 + mail.setContent("GPS处理超时,检查日志信息<br/>");
112 113 sendEmailController.sendMail("113252620@qq.com", mail);
  114 + logger.info(new ObjectMapper().writeValueAsString(list));
113 115 logger.info("DataHandlerProcess:邮件发送成功!");
114 116 } catch (Exception e){
115 117 logger.error("DataHandlerProcess:邮件发送失败!",e);
... ...
src/main/java/com/bsth/entity/schedule/batch/VehicleDataSync.java 0 → 100644
  1 +package com.bsth.entity.schedule.batch;
  2 +
  3 +import javax.persistence.*;
  4 +import java.io.Serializable;
  5 +import java.util.Date;
  6 +
  7 +/**
  8 + * 车辆数据同步数据。
  9 + */
  10 +@Entity
  11 +@Table(name = "bsth_c_cars_sync")
  12 +public class VehicleDataSync implements Serializable {
  13 + /** 主健Id */
  14 + @Id
  15 + @GeneratedValue
  16 + private Long id;
  17 +
  18 + //--------------- 标识车辆的数据(自编号和车牌号) ---------------//
  19 + /** 自编号/内部编号 */
  20 + private String idenZbh;
  21 + /** 车牌号 */
  22 + private String idenCph;
  23 +
  24 + //--------------- 更新的数据 ------------//
  25 + /** 更新 公司代码 */
  26 + private String updateGsdm;
  27 + /** 更新 公司名称 */
  28 + private String updateGsmc;
  29 + /** 更新 分公司代码 */
  30 + private String updateFgsdm;
  31 + /** 更新 分公司名称 */
  32 + private String updateFgsmc;
  33 + /** 是否报废 */
  34 + private Boolean updateSfbf;
  35 + /** 报废日期 */
  36 + private Date updateBfd;
  37 +
  38 + // TODO:后续再添加
  39 +
  40 + //--------------- 时间,状态数据 ------------//
  41 + /** 创建时间 */
  42 + @Column(nullable = false)
  43 + private Date createDate;
  44 + /** 更新时间 */
  45 + @Column(nullable = false)
  46 + private Date updateDate;
  47 + /** 同步状态 */
  48 + @Column(nullable = false)
  49 + @Convert(converter = VehicleDataSyncStatusEnumConverter.class)
  50 + private VehicleDataSyncStatusEnum status;
  51 +
  52 + public Long getId() {
  53 + return id;
  54 + }
  55 +
  56 + public void setId(Long id) {
  57 + this.id = id;
  58 + }
  59 +
  60 + public String getIdenZbh() {
  61 + return idenZbh;
  62 + }
  63 +
  64 + public void setIdenZbh(String idenZbh) {
  65 + this.idenZbh = idenZbh;
  66 + }
  67 +
  68 + public String getIdenCph() {
  69 + return idenCph;
  70 + }
  71 +
  72 + public void setIdenCph(String idenCph) {
  73 + this.idenCph = idenCph;
  74 + }
  75 +
  76 + public String getUpdateGsdm() {
  77 + return updateGsdm;
  78 + }
  79 +
  80 + public void setUpdateGsdm(String updateGsdm) {
  81 + this.updateGsdm = updateGsdm;
  82 + }
  83 +
  84 + public String getUpdateGsmc() {
  85 + return updateGsmc;
  86 + }
  87 +
  88 + public void setUpdateGsmc(String updateGsmc) {
  89 + this.updateGsmc = updateGsmc;
  90 + }
  91 +
  92 + public Date getCreateDate() {
  93 + return createDate;
  94 + }
  95 +
  96 + public void setCreateDate(Date createDate) {
  97 + this.createDate = createDate;
  98 + }
  99 +
  100 + public Date getUpdateDate() {
  101 + return updateDate;
  102 + }
  103 +
  104 + public void setUpdateDate(Date updateDate) {
  105 + this.updateDate = updateDate;
  106 + }
  107 +
  108 + public VehicleDataSyncStatusEnum getStatus() {
  109 + return status;
  110 + }
  111 +
  112 + public void setStatus(VehicleDataSyncStatusEnum status) {
  113 + this.status = status;
  114 + }
  115 +
  116 + public Boolean getUpdateSfbf() {
  117 + return updateSfbf;
  118 + }
  119 +
  120 + public void setUpdateSfbf(Boolean updateSfbf) {
  121 + this.updateSfbf = updateSfbf;
  122 + }
  123 +
  124 + public Date getUpdateBfd() {
  125 + return updateBfd;
  126 + }
  127 +
  128 + public void setUpdateBfd(Date updateBfd) {
  129 + this.updateBfd = updateBfd;
  130 + }
  131 +
  132 + public String getUpdateFgsdm() {
  133 + return updateFgsdm;
  134 + }
  135 +
  136 + public void setUpdateFgsdm(String updateFgsdm) {
  137 + this.updateFgsdm = updateFgsdm;
  138 + }
  139 +
  140 + public String getUpdateFgsmc() {
  141 + return updateFgsmc;
  142 + }
  143 +
  144 + public void setUpdateFgsmc(String updateFgsmc) {
  145 + this.updateFgsmc = updateFgsmc;
  146 + }
  147 +}
0 148 \ No newline at end of file
... ...
src/main/java/com/bsth/entity/schedule/batch/VehicleDataSyncStat.java 0 → 100644
  1 +package com.bsth.entity.schedule.batch;
  2 +
  3 +import javax.persistence.*;
  4 +import java.io.Serializable;
  5 +import java.util.Date;
  6 +
  7 +/**
  8 + * 车辆数据同步数据统计。
  9 + */
  10 +@Entity
  11 +@Table(name = "bsth_c_cars_sync_stat")
  12 +public class VehicleDataSyncStat implements Serializable {
  13 + /** 主健Id */
  14 + @Id
  15 + @GeneratedValue
  16 + private Long id;
  17 +
  18 + /** job实例Id */
  19 + @Column(nullable = false)
  20 + private Long jobId;
  21 + /** job名字 */
  22 + @Column(nullable = false)
  23 + private String jobName;
  24 + /** job执行Id */
  25 + @Column(nullable = false, unique = true)
  26 + private Long jobExecutionId;
  27 +
  28 + /** 待同步的车辆数据ids(同步状态=SYNCING) */
  29 + @Column(length = 2000)
  30 + private String syncDataPrepareIds;
  31 + /** 待同步的车辆数据自编号s(同步状态=SYNCING) */
  32 + @Column(length = 2000)
  33 + private String syncDataPrepareZbhs;
  34 +
  35 + /** 待同步的车辆count */
  36 + private Integer syncDataPrepareCount;
  37 + /** 同步成功的车辆count */
  38 + private Integer syncDataSuccessCount;
  39 +
  40 + /** 退出step执行Id */
  41 + private Long exitStepExecutionId;
  42 + /** 退出异常stack信息 */
  43 + @Column(length = 2500)
  44 + private String exitStackTrace;
  45 +
  46 + /** 同步状态 */
  47 + @Column(nullable = false)
  48 + @Convert(converter = VehicleDataSyncStatusEnumConverter.class)
  49 + private VehicleDataSyncStatusEnum status;
  50 +
  51 + /** job执行开始时间 */
  52 + @Column(nullable = false)
  53 + private Date startDate;
  54 + /** job执行结束时间 */
  55 + private Date endDate;
  56 +
  57 + public Long getId() {
  58 + return id;
  59 + }
  60 +
  61 + public void setId(Long id) {
  62 + this.id = id;
  63 + }
  64 +
  65 + public Long getJobId() {
  66 + return jobId;
  67 + }
  68 +
  69 + public void setJobId(Long jobId) {
  70 + this.jobId = jobId;
  71 + }
  72 +
  73 + public String getJobName() {
  74 + return jobName;
  75 + }
  76 +
  77 + public void setJobName(String jobName) {
  78 + this.jobName = jobName;
  79 + }
  80 +
  81 + public Long getJobExecutionId() {
  82 + return jobExecutionId;
  83 + }
  84 +
  85 + public void setJobExecutionId(Long jobExecutionId) {
  86 + this.jobExecutionId = jobExecutionId;
  87 + }
  88 +
  89 + public String getSyncDataPrepareIds() {
  90 + return syncDataPrepareIds;
  91 + }
  92 +
  93 + public void setSyncDataPrepareIds(String syncDataPrepareIds) {
  94 + this.syncDataPrepareIds = syncDataPrepareIds;
  95 + }
  96 +
  97 + public String getSyncDataPrepareZbhs() {
  98 + return syncDataPrepareZbhs;
  99 + }
  100 +
  101 + public void setSyncDataPrepareZbhs(String syncDataPrepareZbhs) {
  102 + this.syncDataPrepareZbhs = syncDataPrepareZbhs;
  103 + }
  104 +
  105 + public Integer getSyncDataPrepareCount() {
  106 + return syncDataPrepareCount;
  107 + }
  108 +
  109 + public void setSyncDataPrepareCount(Integer syncDataPrepareCount) {
  110 + this.syncDataPrepareCount = syncDataPrepareCount;
  111 + }
  112 +
  113 + public Integer getSyncDataSuccessCount() {
  114 + return syncDataSuccessCount;
  115 + }
  116 +
  117 + public void setSyncDataSuccessCount(Integer syncDataSuccessCount) {
  118 + this.syncDataSuccessCount = syncDataSuccessCount;
  119 + }
  120 +
  121 + public Long getExitStepExecutionId() {
  122 + return exitStepExecutionId;
  123 + }
  124 +
  125 + public void setExitStepExecutionId(Long exitStepExecutionId) {
  126 + this.exitStepExecutionId = exitStepExecutionId;
  127 + }
  128 +
  129 + public String getExitStackTrace() {
  130 + return exitStackTrace;
  131 + }
  132 +
  133 + public void setExitStackTrace(String exitStackTrace) {
  134 + this.exitStackTrace = exitStackTrace;
  135 + }
  136 +
  137 + public VehicleDataSyncStatusEnum getStatus() {
  138 + return status;
  139 + }
  140 +
  141 + public void setStatus(VehicleDataSyncStatusEnum status) {
  142 + this.status = status;
  143 + }
  144 +
  145 + public Date getStartDate() {
  146 + return startDate;
  147 + }
  148 +
  149 + public void setStartDate(Date startDate) {
  150 + this.startDate = startDate;
  151 + }
  152 +
  153 + public Date getEndDate() {
  154 + return endDate;
  155 + }
  156 +
  157 + public void setEndDate(Date endDate) {
  158 + this.endDate = endDate;
  159 + }
  160 +}
... ...
src/main/java/com/bsth/entity/schedule/batch/VehicleDataSyncStatusEnum.java 0 → 100644
  1 +package com.bsth.entity.schedule.batch;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonCreator;
  4 +import com.fasterxml.jackson.annotation.JsonValue;
  5 +import org.springframework.util.StringUtils;
  6 +
  7 +import java.util.HashMap;
  8 +import java.util.Map;
  9 +
  10 +/**
  11 + * 车辆数据同步状态enum。
  12 + */
  13 +public enum VehicleDataSyncStatusEnum {
  14 + PREPARE("准备"),
  15 + SYNCING("同步中"),
  16 + SUCCESS("成功"),
  17 + FAILURE("失败");
  18 +
  19 + public static Map<String, VehicleDataSyncStatusEnum> enumMap =
  20 + new HashMap<String, VehicleDataSyncStatusEnum>() {{
  21 + put("准备", PREPARE);
  22 + put("同步中", SYNCING);
  23 + put("成功", SUCCESS);
  24 + put("失败", FAILURE);
  25 + }};
  26 +
  27 + /** 字典描述(对应数据库的字典) */
  28 + private String dicDesc;
  29 +
  30 + @JsonCreator
  31 + VehicleDataSyncStatusEnum(String dicDesc) {
  32 + this.dicDesc = dicDesc;
  33 + }
  34 +
  35 + public static VehicleDataSyncStatusEnum fromDicDesc(String dicDesc) {
  36 + if (StringUtils.isEmpty(dicDesc)) {
  37 + throw new RuntimeException("车辆数据同步状态描述不能为空!");
  38 + } else if (enumMap.get(dicDesc) == null) {
  39 + throw new RuntimeException("车辆数据同步状态未定义:" + dicDesc);
  40 + }
  41 + return enumMap.get(dicDesc);
  42 + }
  43 +
  44 + @JsonValue
  45 + public String getDicDesc() {
  46 + return dicDesc;
  47 + }
  48 +
  49 + public void setDicDesc(String dicDesc) {
  50 + this.dicDesc = dicDesc;
  51 + }
  52 +
  53 + @Override
  54 + public String toString() {
  55 + return dicDesc;
  56 + }
  57 +}
... ...
src/main/java/com/bsth/entity/schedule/batch/VehicleDataSyncStatusEnumConverter.java 0 → 100644
  1 +package com.bsth.entity.schedule.batch;
  2 +
  3 +import javax.persistence.AttributeConverter;
  4 +import javax.persistence.Convert;
  5 +
  6 +@Convert
  7 +public class VehicleDataSyncStatusEnumConverter implements AttributeConverter<VehicleDataSyncStatusEnum, String> {
  8 + @Override
  9 + public String convertToDatabaseColumn(VehicleDataSyncStatusEnum vehicleDataSyncStatusEnum) {
  10 + return vehicleDataSyncStatusEnum.getDicDesc();
  11 + }
  12 +
  13 + @Override
  14 + public VehicleDataSyncStatusEnum convertToEntityAttribute(String s) {
  15 + return VehicleDataSyncStatusEnum.fromDicDesc(s);
  16 + }
  17 +}
... ...
src/main/java/com/bsth/filter/BaseFilter.java
... ... @@ -17,7 +17,7 @@ public abstract class BaseFilter implements Filter {
17 17 * 白名单
18 18 */
19 19 private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.SERVICE_INTERFACE,
20   - Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.XD_REAL_GPS, Constants.UP_RFID_URL, Constants.STATION_AND_SECTION_COUNT, Constants.ACTUATOR_MANAGEMENT_HEALTH };
  20 + Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.XD_REAL_GPS, Constants.UP_RFID_URL, Constants.STATION_AND_SECTION_COUNT, Constants.ACTUATOR_MANAGEMENT_HEALTH, Constants.WEBSERVICE_URL };
21 21  
22 22 @Override
23 23 public void destroy() {
... ...
src/main/java/com/bsth/repository/schedule/batch/VehicleDataSyncRepo.java 0 → 100644
  1 +package com.bsth.repository.schedule.batch;
  2 +
  3 +import com.bsth.entity.schedule.batch.VehicleDataSync;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +@Repository
  8 +public interface VehicleDataSyncRepo extends BaseRepository<VehicleDataSync, Long> {
  9 +}
... ...
src/main/java/com/bsth/repository/schedule/batch/VehicleDataSyncStatRepo.java 0 → 100644
  1 +package com.bsth.repository.schedule.batch;
  2 +
  3 +import com.bsth.entity.schedule.batch.VehicleDataSyncStat;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.stereotype.Repository;
  6 +
  7 +@Repository
  8 +public interface VehicleDataSyncStatRepo extends BaseRepository<VehicleDataSyncStat, Long> {
  9 +
  10 +}
... ...
src/main/java/com/bsth/security/filter/LoginInterceptor.java
... ... @@ -33,7 +33,7 @@ public class LoginInterceptor implements Filter {
33 33 * 相比于 BaseFilter,此处对线调GPS请求进行了拦截验证
34 34 */
35 35 private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.SERVICE_INTERFACE,
36   - Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL,Constants.STATION_AND_SECTION_COUNT };
  36 + Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.METRONIC_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL,Constants.STATION_AND_SECTION_COUNT, Constants.WEBSERVICE_URL };
37 37  
38 38  
39 39 @Override
... ...
src/main/java/com/bsth/service/calc/impl/CalcIntervalServiceImpl.java
... ... @@ -13,9 +13,11 @@ import java.util.Comparator;
13 13 import java.util.Date;
14 14 import java.util.GregorianCalendar;
15 15 import java.util.HashMap;
  16 +import java.util.HashSet;
16 17 import java.util.Iterator;
17 18 import java.util.List;
18 19 import java.util.Map;
  20 +import java.util.Set;
19 21  
20 22 import org.apache.commons.lang3.StringUtils;
21 23 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -27,8 +29,6 @@ import com.bsth.data.BasicData;
27 29 import com.bsth.entity.Line;
28 30 import com.bsth.entity.calc.CalcInterval;
29 31 import com.bsth.entity.realcontrol.ScheduleRealInfo;
30   -import com.bsth.entity.sheet.CalcSheet;
31   -import com.bsth.entity.sheet.Sheet;
32 32 import com.bsth.repository.LineRepository;
33 33 import com.bsth.repository.calc.CalcIntervalRepository;
34 34 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
... ... @@ -36,9 +36,7 @@ import com.bsth.service.LineService;
36 36 import com.bsth.service.calc.CalcIntervalService;
37 37 import com.bsth.service.impl.BaseServiceImpl;
38 38 import com.bsth.util.Arith;
39   -import com.bsth.util.ComparableReal;
40 39 import com.bsth.util.ReportUtils;
41   -import com.mysql.fabric.xmlrpc.base.Array;
42 40  
43 41 @Service
44 42 public class CalcIntervalServiceImpl extends BaseServiceImpl<CalcInterval,Integer> implements CalcIntervalService {
... ... @@ -61,6 +59,8 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
61 59 public List<Map<String, Object>> countList(Map<String, Object> map) {
62 60 // TODO Auto-generated method stub
63 61 final DecimalFormat df = new DecimalFormat("0.00");
  62 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  63 +
64 64 List<Map<String, Object>> list=new ArrayList<>();
65 65 String level=map.get("levelType").toString();
66 66 String line=map.get("line").toString().trim();
... ... @@ -69,6 +69,25 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
69 69 String sDate=map.get("date").toString();
70 70 String eDate=map.get("endDate").toString();
71 71 String nature=map.get("nature").toString();
  72 + String week=map.get("week").toString();
  73 + String weekend="";
  74 +
  75 + try {
  76 + if(!("0".equals(week))){
  77 + Date d1 = sdf.parse(sDate);
  78 + Date d2 = sdf.parse(eDate);
  79 + for(;d1.getTime() <= d2.getTime();d1.setTime(d1.getTime() + 1l*1000*60*60*24)){
  80 + if(d1.toString().contains("Sat") || d1.toString().contains("Sun")){
  81 + if(weekend.length() > 0){
  82 + weekend = weekend + ",";
  83 + }
  84 + weekend = weekend + "'" + sdf.format(d1) + "'";
  85 + }
  86 + }
  87 + }
  88 + } catch (Exception e) {
  89 + // TODO: handle exception
  90 + }
72 91  
73 92 //D级线路显示发车准点率
74 93 if(level.equals("D") && false){ //新的计算规则D级也显示大间隔
... ... @@ -136,7 +155,7 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
136 155 // + "SUM(djg_dg) as djgDg,SUM(djg_zgf) as djgZgf,SUM(djg_wgf) as djgWgf,MAX(djg_time) as djgTime "
137 156 // + "from bsth_c_calc_interval where date>= '"+sDate+"' and date<='"+eDate+"' and level <> 'D' ";
138 157 String sql="select gsbm,fgsbm,xl_bm,xl_name,SUM(bcs) as bcs,MAX(id) as id,SUM(djg_all) as djgAll,SUM(djg_gf) as djgGf,"
139   - + "SUM(djg_dg) as djgDg,SUM(djg_zgf) as djgZgf,SUM(djg_wgf) as djgWgf,MAX(djg_time) as djgTime, level "
  158 + + "SUM(djg_dg) as djgDg,SUM(djg_zgf) as djgZgf,SUM(djg_wgf) as djgWgf,MAX(djg_time) as djgTime,substr(level,1,1) level "
140 159 + "from bsth_c_calc_interval where date>= '"+sDate+"' and date<='"+eDate+"' and level like '%"+level+"%' "
141 160 + "and level is not null and level <> '' ";
142 161 if(line.equals("")){
... ... @@ -148,8 +167,13 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
148 167 }else{
149 168 sql +=" and xl_bm ='"+line+"'";
150 169 }
151   - sql += " group by xl_bm,gsbm,fgsbm,xl_name,level"
152   - +" order by xl_bm,level";
  170 + if(weekend.length() > 0 && "1".equals(week)){
  171 + sql +=" and date not in ("+weekend+")";
  172 + } else if(weekend.length() > 0 && "2".equals(week)){
  173 + sql +=" and date in ("+weekend+")";
  174 + }
  175 + sql += " group by xl_bm,gsbm,fgsbm,xl_name,substr(level,1,1)"
  176 + +" order by gsbm,fgsbm,xl_bm,level";
153 177  
154 178 list=jdbcTemplate.query(sql,
155 179 new RowMapper<Map<String,Object>>(){
... ... @@ -171,15 +195,15 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
171 195 }else{
172 196 m.put("fsl", "0.0");
173 197 }
174   - m.put("djgAll", rs.getString("djgAll"));
175   - m.put("djgGf", rs.getString("djgGf"));
176   - m.put("djgZgf", rs.getString("djgZgf"));
177   - m.put("djgWgf", rs.getString("djgWgf"));
178   - m.put("djgDg", rs.getString("djgDg"));
  198 + m.put("djgAll", rs.getString("djgAll")!=null?rs.getString("djgAll"):"");
  199 + m.put("djgGf", rs.getString("djgGf")!=null?rs.getString("djgGf"):"");
  200 + m.put("djgZgf", rs.getString("djgZgf")!=null?rs.getString("djgZgf"):"");
  201 + m.put("djgWgf", rs.getString("djgWgf")!=null?rs.getString("djgWgf"):"");
  202 + m.put("djgDg", rs.getString("djgDg")!=null?rs.getString("djgDg"):"");
179 203 if("0".equals(rs.getString("djgTime")) || "0.0".equals(rs.getString("djgTime"))){
180 204 m.put("djgTime", "");
181 205 } else {
182   - m.put("djgTime", rs.getString("djgTime"));
  206 + m.put("djgTime", rs.getString("djgTime")!=null?rs.getString("djgTime"):"");
183 207 }
184 208 if(rs.getString("level").toString().trim().length() > 1){
185 209 m.put("level", rs.getString("level").trim().substring(0, 1));
... ... @@ -263,15 +287,44 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
263 287 public List<Map<String, Object>> listInterval(Map<String, Object> map) {
264 288 // TODO Auto-generated method stub
265 289 final DecimalFormat df = new DecimalFormat("0.00");
  290 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
266 291  
267 292 String line=map.get("line").toString();
268 293 String date=map.get("date").toString();
269 294 String endDate=map.get("endDate").toString();
270 295 String levelType=map.get("levelType").toString();
  296 + String week=map.get("week").toString();
  297 + Set<String> weekend = new HashSet<String>();
  298 +
  299 + try {
  300 + if(!("0".equals(week))){
  301 + Date d1 = sdf.parse(date);
  302 + Date d2 = sdf.parse(endDate);
  303 + for(;d1.getTime() <= d2.getTime();d1.setTime(d1.getTime() + 1l*1000*60*60*24)){
  304 + if(d1.toString().contains("Sat") || d1.toString().contains("Sun")){
  305 + weekend.add(sdf.format(d1));
  306 + }
  307 + }
  308 + }
  309 + } catch (Exception e) {
  310 + // TODO: handle exception
  311 + }
  312 +
271 313 List<CalcInterval> listAll=calcIntervalRepository.selectByDateAndLine(line, date, endDate, levelType);
272 314 List<Map<String, Object>> tempList = new ArrayList<Map<String, Object>>();
273 315 for (int i = 0; i < listAll.size(); i++) {
274 316 CalcInterval t=listAll.get(i);
  317 +
  318 + if("1".equals(week)){
  319 + if(weekend.contains(t.getDate())){
  320 + continue;
  321 + }
  322 + } else if("2".equals(week)){
  323 + if(!(weekend.contains(t.getDate()))){
  324 + continue;
  325 + }
  326 + }
  327 +
275 328 // if(!t.getLevel().equals("D") && t.getDjgAll()>0){
276 329 if(t.getDjgAll() != null && t.getDjgAll() > 0){
277 330 Map<String, Object> m=new HashMap<>();
... ... @@ -300,7 +353,7 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
300 353 tempList.add(m);
301 354 }
302 355 }
303   - if(map.get("type").equals("export")){
  356 + if(map.get("type").equals("export")){
304 357 List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
305 358 Map<String, Object> m = new HashMap<String, Object>();
306 359 m.put("date", date);
... ... @@ -710,10 +763,29 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
710 763 @Override
711 764 public List<Map<String, Object>> exportDetail(Map<String, Object> map) {
712 765 // TODO Auto-generated method stub
  766 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  767 +
713 768 String line=map.get("line").toString().trim();
714 769 String date=map.get("date").toString();
715 770 String endDate=map.get("endDate").toString();
716 771 String level=map.get("levelType").toString();
  772 + String week=map.get("week").toString();
  773 + Set<String> weekend = new HashSet<String>();
  774 +
  775 + try {
  776 + if(!("0".equals(week))){
  777 + Date d1 = sdf.parse(date);
  778 + Date d2 = sdf.parse(endDate);
  779 + for(;d1.getTime() <= d2.getTime();d1.setTime(d1.getTime() + 1l*1000*60*60*24)){
  780 + if(d1.toString().contains("Sat") || d1.toString().contains("Sun")){
  781 + weekend.add(sdf.format(d1));
  782 + }
  783 + }
  784 + }
  785 + } catch (Exception e) {
  786 + // TODO: handle exception
  787 + }
  788 +
717 789 String nature="0", gs = "", fgs = "";
718 790 if(map.containsKey("nature")){
719 791 nature = map.get("nature").toString().trim();
... ... @@ -735,7 +807,7 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
735 807 + " d.date >= '"+date+"' and d.date <= '"+endDate+"' "
736 808 + " and d.level like '%"+level+"%' "
737 809 + " and d.level is not null and d.level <> '' "
738   - + " order by d.line_code, d.date asc, d.level asc ";
  810 + + " order by i.gsbm, i.fgsbm, d.line_code, d.date asc, d.level asc ";
739 811  
740 812 List<Map<String, Object>> resList=jdbcTemplate.query(sql,
741 813 new RowMapper<Map<String,Object>>(){
... ... @@ -763,6 +835,17 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
763 835 Map<String, Boolean> lineMap=lineService.lineNature();
764 836 for (int i = 0; i < resList.size(); i++) {
765 837 Map<String, Object> m=resList.get(i);
  838 +
  839 + if("1".equals(week)){
  840 + if(weekend.contains(m.get("date"))){
  841 + continue;
  842 + }
  843 + } else if("2".equals(week)){
  844 + if(!(weekend.contains(m.get("date")))){
  845 + continue;
  846 + }
  847 + }
  848 +
766 849 if(null != line && line.length() > 0){
767 850 if(line.equals(m.get("xlBm").toString())){
768 851 list.add(m);
... ... @@ -811,12 +894,33 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
811 894  
812 895 public List<Map<String, Object>> sumInterval(Map<String, Object> map) {
813 896 // TODO Auto-generated method stub
814   - final DecimalFormat df = new DecimalFormat("0.00");
  897 + final DecimalFormat df = new DecimalFormat("0.00");
  898 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  899 +
815 900 String gs=map.get("gs").toString().trim();
816 901 String fgs=map.get("fgs").toString().trim();
817 902 String sDate=map.get("date").toString();
818 903 String eDate=map.get("endDate").toString();
819 904 String nature=map.get("nature").toString();
  905 + String week=map.get("week").toString();
  906 + String weekend="";
  907 +
  908 + try {
  909 + if(!("0".equals(week))){
  910 + Date d1 = sdf.parse(sDate);
  911 + Date d2 = sdf.parse(eDate);
  912 + for(;d1.getTime() <= d2.getTime();d1.setTime(d1.getTime() + 1l*1000*60*60*24)){
  913 + if(d1.toString().contains("Sat") || d1.toString().contains("Sun")){
  914 + if(weekend.length() > 0){
  915 + weekend = weekend + ",";
  916 + }
  917 + weekend = weekend + "'" + sdf.format(d1) + "'";
  918 + }
  919 + }
  920 + }
  921 + } catch (Exception e) {
  922 + // TODO: handle exception
  923 + }
820 924  
821 925 List<Map<String, Object>> listAll=new ArrayList<Map<String, Object>>();
822 926  
... ... @@ -830,6 +934,11 @@ public class CalcIntervalServiceImpl extends BaseServiceImpl&lt;CalcInterval,Intege
830 934 sql +=" and gsbm = '"+gs+"'";
831 935 }
832 936 }
  937 + if(weekend.length() > 0 && "1".equals(week)){
  938 + sql +=" and date not in ("+weekend+")";
  939 + } else if(weekend.length() > 0 && "2".equals(week)){
  940 + sql +=" and date in ("+weekend+")";
  941 + }
833 942 sql += " order by gsbm,fgsbm,level";
834 943  
835 944 List<Map<String, Object>> countList = new ArrayList<Map<String, Object>>();
... ...
src/main/java/com/bsth/service/jdtest/impl/JdtestServiceImpl.java
... ... @@ -119,21 +119,21 @@ public class JdtestServiceImpl implements JdtestService {
119 119 if(map.get("fgsbm")!=null){
120 120 fgsbm=map.get("fgsbm").toString().trim();
121 121 }
122   -
123   - String sql="select r.xl_bm, r.cl_zbh,r.j_gh,r.lp_name "
  122 +
  123 + String sql="select r.xl_bm, r.cl_zbh, r.j_gh, r.lp_name, min(fcsj) mintime "
124 124 + " from bsth_c_s_sp_info_real r where "
125   - + "r.schedule_date_str = '"+map.get("date").toString()+"'";
  125 + + " r.schedule_date_str = '"+map.get("date").toString()+"'";
126 126 if(!gsbm.equals("")){
127   - sql += "and r.gs_bm ='"+gsbm+"'";
128   - }
  127 + sql += " and r.gs_bm ='"+gsbm+"'";
  128 + }
129 129 if(!fgsbm.equals("")){
130   - sql += "and r.fgs_bm='"+fgsbm+"'";
  130 + sql += " and r.fgs_bm='"+fgsbm+"'";
131 131 }
132 132 if(!xlbm.equals("")){
133 133 sql += " and r.xl_bm = '"+xlbm+"'";
134   - }
  134 + }
135 135  
136   - sql += " group by r.xl_bm, r.cl_zbh,r.j_gh,r.lp_name order by r.xl_bm,r.cl_zbh";
  136 + sql += " group by r.xl_bm,r.cl_zbh,r.j_gh,r.lp_name order by r.xl_bm,r.cl_zbh,mintime";
137 137  
138 138 List<Map<String, Object>> list = jdbcTemplate.query(sql, new RowMapper<Map<String, Object>>() {
139 139 @Override
... ...
src/main/java/com/bsth/service/schedule/batch/VehicleDataSyncService.java 0 → 100644
  1 +package com.bsth.service.schedule.batch;
  2 +
  3 +import com.bsth.entity.schedule.batch.VehicleDataSync;
  4 +import com.bsth.service.schedule.BService;
  5 +
  6 +public interface VehicleDataSyncService extends BService<VehicleDataSync, Long> {
  7 +}
... ...
src/main/java/com/bsth/service/schedule/batch/VehicleDataSyncServiceImpl.java 0 → 100644
  1 +package com.bsth.service.schedule.batch;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.exception.PlanModuleException;
  4 +import com.bsth.entity.schedule.batch.VehicleDataSync;
  5 +import com.bsth.service.schedule.impl.BServiceImpl;
  6 +import org.springframework.stereotype.Service;
  7 +
  8 +@Service
  9 +public class VehicleDataSyncServiceImpl extends BServiceImpl<VehicleDataSync, Long> implements VehicleDataSyncService {
  10 + @Override
  11 + public void delete(Long aLong) {
  12 + throw new PlanModuleException("不支持delete方法!");
  13 + }
  14 +}
... ...
src/main/java/com/bsth/service/schedule/batch/VehicleDataSyncStatService.java 0 → 100644
  1 +package com.bsth.service.schedule.batch;
  2 +
  3 +import com.bsth.entity.schedule.batch.VehicleDataSyncStat;
  4 +import com.bsth.service.schedule.BService;
  5 +
  6 +public interface VehicleDataSyncStatService extends BService<VehicleDataSyncStat, Long> {
  7 +}
... ...
src/main/java/com/bsth/service/schedule/batch/VehicleDataSyncStatServiceImpl.java 0 → 100644
  1 +package com.bsth.service.schedule.batch;
  2 +
  3 +import com.bsth.control_v2.plan_module.common.exception.PlanModuleException;
  4 +import com.bsth.entity.schedule.batch.VehicleDataSyncStat;
  5 +import com.bsth.service.schedule.impl.BServiceImpl;
  6 +import org.springframework.stereotype.Service;
  7 +
  8 +@Service
  9 +public class VehicleDataSyncStatServiceImpl extends BServiceImpl<VehicleDataSyncStat, Long> implements VehicleDataSyncStatService {
  10 + @Override
  11 + public VehicleDataSyncStat save(VehicleDataSyncStat vehicleDataSyncStat) {
  12 + throw new PlanModuleException("不支持save方法!");
  13 + }
  14 +
  15 + @Override
  16 + public void delete(Long aLong) {
  17 + throw new PlanModuleException("不支持delete方法!");
  18 + }
  19 +}
... ...
src/main/java/com/bsth/service/schedule/batch/webservice/VehicleSyncEndpoint.java 0 → 100644
  1 +package com.bsth.service.schedule.batch.webservice;
  2 +
  3 +import com.bsth.entity.schedule.batch.VehicleDataSync;
  4 +import com.bsth.entity.schedule.batch.VehicleDataSyncStatusEnum;
  5 +import com.bsth.service.schedule.batch.VehicleDataSyncService;
  6 +import com.bsth.service.schedule.batch.webservice.vehiclesync.AddVehicleDataSyncRequest;
  7 +import com.bsth.service.schedule.batch.webservice.vehiclesync.AddVehicleDataSyncResponse;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.ws.server.endpoint.annotation.Endpoint;
  10 +import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
  11 +import org.springframework.ws.server.endpoint.annotation.RequestPayload;
  12 +import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
  13 +
  14 +import java.util.Date;
  15 +
  16 +@Endpoint
  17 +public class VehicleSyncEndpoint {
  18 + /** 名字空间uri */
  19 + private static final String NAMESPACE_URI = "http://bsth.com/service/schedule/batch/webservice/vehicleSync";
  20 +
  21 + @Autowired
  22 + private VehicleDataSyncService vehicleDataSyncService;
  23 + @PayloadRoot(namespace = NAMESPACE_URI, localPart = "addVehicleDataSyncRequest")
  24 + @ResponsePayload
  25 + public AddVehicleDataSyncResponse addVehicleDataSync(
  26 + @RequestPayload AddVehicleDataSyncRequest addVehicleDataSyncRequest) {
  27 + AddVehicleDataSyncResponse addVehicleDataSyncResponse = new AddVehicleDataSyncResponse();
  28 + try {
  29 + // 创建车辆同步数据
  30 + VehicleDataSync vehicleDataSync = new VehicleDataSync();
  31 + vehicleDataSync.setIdenZbh(addVehicleDataSyncRequest.getIdenZbh());
  32 + vehicleDataSync.setIdenCph(addVehicleDataSyncRequest.getIdenCph());
  33 + vehicleDataSync.setUpdateGsmc(addVehicleDataSyncRequest.getUpdateGsmc());
  34 + vehicleDataSync.setUpdateFgsmc(addVehicleDataSyncRequest.getUpdateFgsmc());
  35 + vehicleDataSync.setUpdateSfbf(addVehicleDataSyncRequest.isUpdateSfbf());
  36 +
  37 + vehicleDataSync.setStatus(VehicleDataSyncStatusEnum.PREPARE);
  38 + vehicleDataSync.setCreateDate(new Date());
  39 + vehicleDataSync.setUpdateDate(new Date());
  40 + vehicleDataSyncService.save(vehicleDataSync);
  41 +
  42 + addVehicleDataSyncResponse.setSuccess(true);
  43 + addVehicleDataSyncResponse.setMessage("OK!");
  44 + } catch (Exception exp) {
  45 + exp.printStackTrace();
  46 + addVehicleDataSyncResponse.setSuccess(false);
  47 + addVehicleDataSyncResponse.setMessage(exp.getMessage());
  48 + }
  49 +
  50 + return addVehicleDataSyncResponse;
  51 + }
  52 +}
... ...
src/main/java/com/bsth/service/schedule/batch/webservice/WebServiceConfig.java 0 → 100644
  1 +package com.bsth.service.schedule.batch.webservice;
  2 +
  3 +import org.springframework.boot.context.embedded.ServletRegistrationBean;
  4 +import org.springframework.context.ApplicationContext;
  5 +import org.springframework.context.annotation.Bean;
  6 +import org.springframework.context.annotation.Configuration;
  7 +import org.springframework.core.io.ClassPathResource;
  8 +import org.springframework.ws.config.annotation.EnableWs;
  9 +import org.springframework.ws.config.annotation.WsConfigurerAdapter;
  10 +import org.springframework.ws.transport.http.MessageDispatcherServlet;
  11 +import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
  12 +import org.springframework.xml.xsd.SimpleXsdSchema;
  13 +import org.springframework.xml.xsd.XsdSchema;
  14 +
  15 +@EnableWs
  16 +@Configuration
  17 +public class WebServiceConfig extends WsConfigurerAdapter {
  18 + @Bean
  19 + public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
  20 + MessageDispatcherServlet servlet = new MessageDispatcherServlet();
  21 + servlet.setApplicationContext(applicationContext);
  22 + servlet.setTransformWsdlLocations(true);
  23 + return new ServletRegistrationBean(servlet, "/ws/*");
  24 + }
  25 +
  26 + @Bean(name="vehicleSync")
  27 + public DefaultWsdl11Definition vehicleSyncWsdl11Definition(XsdSchema vehicleSyncSchema) {
  28 + DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
  29 + wsdl11Definition.setPortTypeName("vehicleSyncPort");
  30 + wsdl11Definition.setLocationUri("/ws");
  31 + wsdl11Definition.setTargetNamespace("http://bsth.com/service/schedule/batch/webservice/vehicleSync");
  32 + wsdl11Definition.setSchema(vehicleSyncSchema);
  33 + return wsdl11Definition;
  34 + }
  35 +
  36 + @Bean
  37 + public XsdSchema vehicleSyncSchema() {
  38 + return new SimpleXsdSchema(new ClassPathResource("/xsd/vehicleSync.xsd"));
  39 + }
  40 +
  41 +
  42 +}
... ...
src/main/java/com/bsth/service/schedule/batch/webservice/vehiclesync/AddVehicleDataSyncRequest.java 0 → 100644
  1 +//
  2 +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.7 生成的
  3 +// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
  4 +// 在重新编译源模式时, 对此文件的所有修改都将丢失。
  5 +// 生成时间: 2020.06.23 时间 03:15:37 PM CST
  6 +//
  7 +
  8 +
  9 +package com.bsth.service.schedule.batch.webservice.vehiclesync;
  10 +
  11 +import javax.xml.bind.annotation.XmlAccessType;
  12 +import javax.xml.bind.annotation.XmlAccessorType;
  13 +import javax.xml.bind.annotation.XmlElement;
  14 +import javax.xml.bind.annotation.XmlRootElement;
  15 +import javax.xml.bind.annotation.XmlType;
  16 +
  17 +
  18 +/**
  19 + * <p>anonymous complex type的 Java 类。
  20 + *
  21 + * <p>以下模式片段指定包含在此类中的预期内容。
  22 + *
  23 + * <pre>
  24 + * &lt;complexType>
  25 + * &lt;complexContent>
  26 + * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
  27 + * &lt;sequence>
  28 + * &lt;element name="idenZbh" type="{http://www.w3.org/2001/XMLSchema}string"/>
  29 + * &lt;element name="idenCph" type="{http://www.w3.org/2001/XMLSchema}string"/>
  30 + * &lt;element name="updateGsmc" type="{http://www.w3.org/2001/XMLSchema}string"/>
  31 + * &lt;element name="updateFgsmc" type="{http://www.w3.org/2001/XMLSchema}string"/>
  32 + * &lt;element name="updateSfbf" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
  33 + * &lt;/sequence>
  34 + * &lt;/restriction>
  35 + * &lt;/complexContent>
  36 + * &lt;/complexType>
  37 + * </pre>
  38 + *
  39 + *
  40 + */
  41 +@XmlAccessorType(XmlAccessType.FIELD)
  42 +@XmlType(name = "", propOrder = {
  43 + "idenZbh",
  44 + "idenCph",
  45 + "updateGsmc",
  46 + "updateFgsmc",
  47 + "updateSfbf"
  48 +})
  49 +@XmlRootElement(name = "addVehicleDataSyncRequest")
  50 +public class AddVehicleDataSyncRequest {
  51 +
  52 + @XmlElement(required = true)
  53 + protected String idenZbh;
  54 + @XmlElement(required = true)
  55 + protected String idenCph;
  56 + @XmlElement(required = true)
  57 + protected String updateGsmc;
  58 + @XmlElement(required = true)
  59 + protected String updateFgsmc;
  60 + protected boolean updateSfbf;
  61 +
  62 + /**
  63 + * 获取idenZbh属性的值。
  64 + *
  65 + * @return
  66 + * possible object is
  67 + * {@link String }
  68 + *
  69 + */
  70 + public String getIdenZbh() {
  71 + return idenZbh;
  72 + }
  73 +
  74 + /**
  75 + * 设置idenZbh属性的值。
  76 + *
  77 + * @param value
  78 + * allowed object is
  79 + * {@link String }
  80 + *
  81 + */
  82 + public void setIdenZbh(String value) {
  83 + this.idenZbh = value;
  84 + }
  85 +
  86 + /**
  87 + * 获取idenCph属性的值。
  88 + *
  89 + * @return
  90 + * possible object is
  91 + * {@link String }
  92 + *
  93 + */
  94 + public String getIdenCph() {
  95 + return idenCph;
  96 + }
  97 +
  98 + /**
  99 + * 设置idenCph属性的值。
  100 + *
  101 + * @param value
  102 + * allowed object is
  103 + * {@link String }
  104 + *
  105 + */
  106 + public void setIdenCph(String value) {
  107 + this.idenCph = value;
  108 + }
  109 +
  110 + /**
  111 + * 获取updateGsmc属性的值。
  112 + *
  113 + * @return
  114 + * possible object is
  115 + * {@link String }
  116 + *
  117 + */
  118 + public String getUpdateGsmc() {
  119 + return updateGsmc;
  120 + }
  121 +
  122 + /**
  123 + * 设置updateGsmc属性的值。
  124 + *
  125 + * @param value
  126 + * allowed object is
  127 + * {@link String }
  128 + *
  129 + */
  130 + public void setUpdateGsmc(String value) {
  131 + this.updateGsmc = value;
  132 + }
  133 +
  134 + /**
  135 + * 获取updateFgsmc属性的值。
  136 + *
  137 + * @return
  138 + * possible object is
  139 + * {@link String }
  140 + *
  141 + */
  142 + public String getUpdateFgsmc() {
  143 + return updateFgsmc;
  144 + }
  145 +
  146 + /**
  147 + * 设置updateFgsmc属性的值。
  148 + *
  149 + * @param value
  150 + * allowed object is
  151 + * {@link String }
  152 + *
  153 + */
  154 + public void setUpdateFgsmc(String value) {
  155 + this.updateFgsmc = value;
  156 + }
  157 +
  158 + /**
  159 + * 获取updateSfbf属性的值。
  160 + *
  161 + */
  162 + public boolean isUpdateSfbf() {
  163 + return updateSfbf;
  164 + }
  165 +
  166 + /**
  167 + * 设置updateSfbf属性的值。
  168 + *
  169 + */
  170 + public void setUpdateSfbf(boolean value) {
  171 + this.updateSfbf = value;
  172 + }
  173 +
  174 +}
... ...
src/main/java/com/bsth/service/schedule/batch/webservice/vehiclesync/AddVehicleDataSyncResponse.java 0 → 100644
  1 +//
  2 +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.7 生成的
  3 +// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
  4 +// 在重新编译源模式时, 对此文件的所有修改都将丢失。
  5 +// 生成时间: 2020.06.23 时间 03:15:37 PM CST
  6 +//
  7 +
  8 +
  9 +package com.bsth.service.schedule.batch.webservice.vehiclesync;
  10 +
  11 +import javax.xml.bind.annotation.XmlAccessType;
  12 +import javax.xml.bind.annotation.XmlAccessorType;
  13 +import javax.xml.bind.annotation.XmlElement;
  14 +import javax.xml.bind.annotation.XmlRootElement;
  15 +import javax.xml.bind.annotation.XmlType;
  16 +
  17 +
  18 +/**
  19 + * <p>anonymous complex type的 Java 类。
  20 + *
  21 + * <p>以下模式片段指定包含在此类中的预期内容。
  22 + *
  23 + * <pre>
  24 + * &lt;complexType>
  25 + * &lt;complexContent>
  26 + * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
  27 + * &lt;sequence>
  28 + * &lt;element name="success" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
  29 + * &lt;element name="message" type="{http://www.w3.org/2001/XMLSchema}string"/>
  30 + * &lt;/sequence>
  31 + * &lt;/restriction>
  32 + * &lt;/complexContent>
  33 + * &lt;/complexType>
  34 + * </pre>
  35 + *
  36 + *
  37 + */
  38 +@XmlAccessorType(XmlAccessType.FIELD)
  39 +@XmlType(name = "", propOrder = {
  40 + "success",
  41 + "message"
  42 +})
  43 +@XmlRootElement(name = "addVehicleDataSyncResponse")
  44 +public class AddVehicleDataSyncResponse {
  45 +
  46 + protected boolean success;
  47 + @XmlElement(required = true)
  48 + protected String message;
  49 +
  50 + /**
  51 + * 获取success属性的值。
  52 + *
  53 + */
  54 + public boolean isSuccess() {
  55 + return success;
  56 + }
  57 +
  58 + /**
  59 + * 设置success属性的值。
  60 + *
  61 + */
  62 + public void setSuccess(boolean value) {
  63 + this.success = value;
  64 + }
  65 +
  66 + /**
  67 + * 获取message属性的值。
  68 + *
  69 + * @return
  70 + * possible object is
  71 + * {@link String }
  72 + *
  73 + */
  74 + public String getMessage() {
  75 + return message;
  76 + }
  77 +
  78 + /**
  79 + * 设置message属性的值。
  80 + *
  81 + * @param value
  82 + * allowed object is
  83 + * {@link String }
  84 + *
  85 + */
  86 + public void setMessage(String value) {
  87 + this.message = value;
  88 + }
  89 +
  90 +}
... ...
src/main/java/com/bsth/service/schedule/batch/webservice/vehiclesync/ObjectFactory.java 0 → 100644
  1 +//
  2 +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.7 生成的
  3 +// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
  4 +// 在重新编译源模式时, 对此文件的所有修改都将丢失。
  5 +// 生成时间: 2020.06.23 时间 03:15:37 PM CST
  6 +//
  7 +
  8 +
  9 +package com.bsth.service.schedule.batch.webservice.vehiclesync;
  10 +
  11 +import javax.xml.bind.annotation.XmlRegistry;
  12 +
  13 +
  14 +/**
  15 + * This object contains factory methods for each
  16 + * Java content interface and Java element interface
  17 + * generated in the com.bsth.service.schedule.batch.webservice.vehiclesync package.
  18 + * <p>An ObjectFactory allows you to programatically
  19 + * construct new instances of the Java representation
  20 + * for XML content. The Java representation of XML
  21 + * content can consist of schema derived interfaces
  22 + * and classes representing the binding of schema
  23 + * type definitions, element declarations and model
  24 + * groups. Factory methods for each of these are
  25 + * provided in this class.
  26 + *
  27 + */
  28 +@XmlRegistry
  29 +public class ObjectFactory {
  30 +
  31 +
  32 + /**
  33 + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.bsth.service.schedule.batch.webservice.vehiclesync
  34 + *
  35 + */
  36 + public ObjectFactory() {
  37 + }
  38 +
  39 + /**
  40 + * Create an instance of {@link AddVehicleDataSyncResponse }
  41 + *
  42 + */
  43 + public AddVehicleDataSyncResponse createAddVehicleDataSyncResponse() {
  44 + return new AddVehicleDataSyncResponse();
  45 + }
  46 +
  47 + /**
  48 + * Create an instance of {@link AddVehicleDataSyncRequest }
  49 + *
  50 + */
  51 + public AddVehicleDataSyncRequest createAddVehicleDataSyncRequest() {
  52 + return new AddVehicleDataSyncRequest();
  53 + }
  54 +
  55 +}
... ...
src/main/java/com/bsth/service/schedule/batch/webservice/vehiclesync/package-info.java 0 → 100644
  1 +//
  2 +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.7 生成的
  3 +// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
  4 +// 在重新编译源模式时, 对此文件的所有修改都将丢失。
  5 +// 生成时间: 2020.06.23 时间 03:15:37 PM CST
  6 +//
  7 +
  8 +@javax.xml.bind.annotation.XmlSchema(namespace = "http://bsth.com/service/schedule/batch/webservice/vehicleSync", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
  9 +package com.bsth.service.schedule.batch.webservice.vehiclesync;
... ...
src/main/resources/dubbo/config-dev.properties
... ... @@ -2,6 +2,9 @@
2 2 spring.dubbo.application.name=bsth_control_v_multi_service
3 3 # zookeeper注册中心地址
4 4 spring.dubbo.registry=zookeeper://127.0.0.1:2181
  5 +# protocol配置
  6 +spring.dubbo.protocol.name=dubbo
  7 +spring.dubbo.protocol.port=30881
5 8  
6 9 #----------- dubbo:consumer 性能调优选项 -------------#
7 10 # 远程服务调用超时时间,单位毫秒,这里设置30分钟
... ...
src/main/resources/dubbo/config-prod.properties
... ... @@ -2,6 +2,9 @@
2 2 spring.dubbo.application.name=bsth_control_v_multi_service
3 3 # zookeeper注册中心地址
4 4 spring.dubbo.registry=zookeeper://127.0.0.1:2181
  5 +# protocol配置
  6 +spring.dubbo.protocol.name=dubbo
  7 +spring.dubbo.protocol.port=30881
5 8  
6 9 #----------- dubbo:consumer 性能调优选项 -------------#
7 10 # 远程服务调用超时时间,单位毫秒,这里设置30分钟
... ...
src/main/resources/dubbo/config-prodtest.properties
... ... @@ -2,6 +2,9 @@
2 2 spring.dubbo.application.name=bsth_control_v2
3 3 # zookeeper注册中心地址
4 4 spring.dubbo.registry=zookeeper://127.0.0.1:2181
  5 +# protocol配置
  6 +spring.dubbo.protocol.name=dubbo
  7 +spring.dubbo.protocol.port=30881
5 8  
6 9 #----------- dubbo:consumer 性能调优选项 -------------#
7 10 # 远程服务调用超时时间,单位毫秒,这里设置30分钟
... ...
src/main/resources/static/pages/forms/calc/calcsingledata.html
1   -<style type="text/css">
  1 +<style type="text/css">
2 2 .table-bordered {
3 3 border: 1px solid; }
4 4 .table-bordered > thead > tr > th,
... ... @@ -40,14 +40,6 @@
40 40 <span class="item-label" style="width: 80px;">线路: </span>
41 41 <select class="form-control" name="line" id="line" style="width: 140px;"></select>
42 42 </div>
43   - <div style="display: inline-block; margin-left: 18px;" id="sfdcDiv">
44   - <span class="item-label" style="width: 80px;">是否电车: </span>
45   - <select class="form-control form-filter " name="sfdc" id="sfdc">
46   - <option value="">请选择...</option>
47   - <option value="0">否</option>
48   - <option value="1">是</option>
49   - </select>
50   - </div>
51 43 <div style="margin-top: 10px"></div>
52 44 <div style="display: inline-block;margin-left: 3px;">
53 45 <span class="item-label" style="width: 140px;">开始时间: </span>
... ... @@ -108,7 +100,6 @@
108 100 if (!$('body').hasClass('page-sidebar-closed'))
109 101 $('.menu-toggler.sidebar-toggler').click();
110 102  
111   -
112 103 var d = new Date();
113 104 d.setTime(d.getTime() - 4*1000*60*60*24);
114 105 var year = d.getFullYear();
... ... @@ -118,20 +109,13 @@
118 109 month = "0" + month;
119 110 if(day < 10)
120 111 day = "0" + day;
121   - var dateTime = year + "-" + month + "-" + day;
122   - $("#startDate").datetimepicker({
123   - format : 'YYYY-MM-DD',
124   - locale : 'zh-cn',
125   - maxDate : dateTime
126   - });
127   - $("#endDate").datetimepicker({
  112 +
  113 + $("#startDate,#endDate").datetimepicker({
128 114 format : 'YYYY-MM-DD',
129 115 locale : 'zh-cn',
130   - maxDate : dateTime
  116 + maxDate : year + "-" + month + "-" + day
131 117 });
132   - $("#startDate").val(dateTime);
133   - $("#endDate").val(dateTime);
134   -
  118 + $("#startDate,#endDate").val(year + "-" + month + "-" + day);
135 119  
136 120 var fage=false;
137 121 var xlList;
... ... @@ -211,8 +195,6 @@
211 195 }
212 196 });
213 197  
214   - $("#sfdcDiv").hide();
215   -
216 198 var cont = "驾驶员", cont1 = "", cont2 = "", cont3 = "";
217 199 $("#tjtype").on("change",function(){
218 200 if(cont == "驾驶员"){
... ... @@ -225,13 +207,10 @@
225 207 cont = $("#tjtype").val();
226 208 if($("#tjtype").val() == "驾驶员"){
227 209 $("#cont").val(cont1);
228   - $("#sfdcDiv").hide();
229 210 } else if($("#tjtype").val() == "售票员"){
230 211 $("#cont").val(cont2);
231   - $("#sfdcDiv").hide();
232 212 } else if($("#tjtype").val() == "车辆自编号"){
233 213 $("#cont").val(cont3);
234   - $("#sfdcDiv").show();
235 214 }
236 215 });
237 216  
... ... @@ -252,10 +231,9 @@
252 231 var fgsdmSing = $("#fgsdmSing").val();
253 232 var tjtype=$("#tjtype").val();
254 233 var cont=$("#cont").val();
255   - var sfdc=$("#sfdc").val();
256 234 var params = {};
257 235 var i = layer.load(2);
258   - $get("/calc_mix/singledatatj",{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont,sfdc:sfdc},function(result){
  236 + $get("/calc_mix/singledatatj",{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont},function(result){
259 237 layer.close(i);
260 238 var singledata = template('singledata',{list:result});
261 239 // 把渲染好的模版html文本追加到表格中
... ... @@ -271,12 +249,11 @@
271 249 var fgsdmSing = $("#fgsdmSing").val();
272 250 var tjtype=$("#tjtype").val();
273 251 var cont=$("#cont").val();
274   - var sfdc=$("#sfdc").val();
275 252 var lineName = $('#line option:selected').text();
276 253 if(lineName == "全部线路")
277 254 lineName = $('#fgsdmSing option:selected').text();
278 255 var i = layer.load(2);
279   - $get('/calc_export/singledataExportTj',{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont,sfdc:sfdc,type:'export',lineName:lineName},function(result){
  256 + $get('/calc_export/singledataExportTj',{gsdmSing:gsdmSing,fgsdmSing:fgsdmSing,line:line,startDate:startDate,endDate:endDate,tjtype:tjtype,cont:cont,type:'export',lineName:lineName},function(result){
280 257 var dateTime = "";
281 258 if(startDate == endDate){
282 259 dateTime = moment(startDate).format("YYYYMMDD");
... ...
src/main/resources/static/pages/forms/calc/statisticsDaily.html
1   -<style type="text/css">
  1 +<style type="text/css">
2 2 .table-bordered {
3 3 border: 1px solid; }
4 4 .table-bordered > thead > tr > th,
... ... @@ -150,7 +150,7 @@
150 150 $('.menu-toggler.sidebar-toggler').click();
151 151  
152 152 var d = new Date();
153   - d.setTime(d.getTime() - 1*1000*60*60*24);
  153 + d.setTime(d.getTime() - 4*1000*60*60*24);
154 154 var year = d.getFullYear();
155 155 var month = d.getMonth() + 1;
156 156 var day = d.getDate();
... ...
src/main/resources/static/pages/forms/mould/waybill_minhang.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/waybill_minhang_dl.xls
No preview for this file type
src/main/resources/static/pages/home.html
1   -<style>
2   - .system_change_log{
3   - background: #fff;
4   - color: #666;
5   - box-shadow: 0 5px 15px rgba(0,0,0,0.08);
6   - height: calc(100% + 10px);
7   - margin-top: -10px;
8   - font-size: 14px;
9   - padding: 10px 0 0 15px;
10   - overflow: auto;
11   - }
12   - .system_change_log>ul{
13   - margin:0px;
14   - list-style:none;
15   - }
16   -
17   - .system_change_log>ul>li.sub_title{
18   - text-indent: 0;
19   - }
20   -
21   - .system_change_log>ul>li.sub_title>h6{
22   - font-size: 12px;
23   - font-family: 微软雅黑;
24   - color: #000;
25   - margin-top: 8px;
26   - margin-bottom: 8px;
27   - }
28   -
29   - .system_change_log>ul>li{
30   - margin: 5px 0;
31   - text-indent: 25px;
32   - }
33   -
34   - .system_change_log .label{
35   - width: 55px;
36   - display: inline-block;
37   - padding: 0 10px;
38   - line-height: 1.5;
39   - font-size: 12px;
40   - color: #fff;
41   - vertical-align: middle;
42   - white-space: nowrap;
43   - border-radius: 2px !important;
44   - text-transform: uppercase;
45   - text-align: center;
46   - text-indent: 3px;
47   - margin-right: 15px;
48   - }
49   - .system_change_log .label.s_c_add{
50   - background-color: #32d296;
51   - }
52   -
53   - .system_change_log .label.s_c_change{
54   - background-color: #1e87f0;
55   - }
56   -
57   - .system_change_log .label.s_c_remove{
58   - background-color: #faa05a;
59   - }
60   -</style>
61   -<div class="system_change_log">
62   - <h2 style="text-indent: 35px;margin: 10px 0 5px;">2020-03-12 更新说明 Changelog</h2>
63   - <br><br>
64   - <ul >
65   - <li class="sub_title"><h6>权限管理</h6></li>
66   - <li><span class="label s_c_change">修改</span>1、密码修改加入密码复杂度校验机制</li>
67   - <li class="sub_title"><h6>线调</h6></li>
68   - <li><span class="label s_c_change">新增</span>1、线调页面新增维修上报功能</li>
69   - </ul>
70   -
71   -</div>
72   -
73   -<script type="text/javascript">
74   - $.ajax({
75   - url: '/eci/validate_get_destroy_info',
76   - dataType: "json",
77   - success: function(rs) {
78   - if (rs && rs.status === "SUCCESS") {
79   - if (rs.data && rs.data.length && rs.data.length > 0) {
80   - swal({
81   - title: "人员配置停用信息",
82   - text: rs.data.join("</br>"),
83   - html: true,
84   - type: "warning",
85   - showCancelButton: true,
86   - confirmButtonColor: "RED",
87   - confirmButtonText: "是",
88   - cancelButtonText: "取消"
89   - });
90   - }
91   - }
92   - }
93   - });
94   -
95   -</script>
  1 +<style>
  2 + .system_change_log{
  3 + background: #fff;
  4 + color: #666;
  5 + box-shadow: 0 5px 15px rgba(0,0,0,0.08);
  6 + height: calc(100% + 10px);
  7 + margin-top: -10px;
  8 + font-size: 14px;
  9 + padding: 10px 0 0 15px;
  10 + overflow: auto;
  11 + }
  12 + .system_change_log>ul{
  13 + margin:0px;
  14 + list-style:none;
  15 + }
  16 +
  17 + .system_change_log>ul>li.sub_title{
  18 + text-indent: 0;
  19 + }
  20 +
  21 + .system_change_log>ul>li.sub_title>h6{
  22 + font-size: 12px;
  23 + font-family: 微软雅黑;
  24 + color: #000;
  25 + margin-top: 8px;
  26 + margin-bottom: 8px;
  27 + }
  28 +
  29 + .system_change_log>ul>li{
  30 + margin: 5px 0;
  31 + text-indent: 25px;
  32 + }
  33 +
  34 + .system_change_log .label{
  35 + width: 55px;
  36 + display: inline-block;
  37 + padding: 0 10px;
  38 + line-height: 1.5;
  39 + font-size: 12px;
  40 + color: #fff;
  41 + vertical-align: middle;
  42 + white-space: nowrap;
  43 + border-radius: 2px !important;
  44 + text-transform: uppercase;
  45 + text-align: center;
  46 + text-indent: 3px;
  47 + margin-right: 15px;
  48 + }
  49 + .system_change_log .label.s_c_add{
  50 + background-color: #32d296;
  51 + }
  52 +
  53 + .system_change_log .label.s_c_change{
  54 + background-color: #1e87f0;
  55 + }
  56 +
  57 + .system_change_log .label.s_c_remove{
  58 + background-color: #faa05a;
  59 + }
  60 +</style>
  61 +<div class="system_change_log">
  62 + <h2 style="text-indent: 35px;margin: 10px 0 5px;">2020-07-30 更新说明 Changelog</h2>
  63 + <br><br>
  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、安全驾驶添加了安全检查类别、接口地址调整</li>
  73 + <li><span class="label s_c_change">新增</span>5、与服务热线系统对接,可在线调页填写服务投诉信息</li>
  74 + <li class="sub_title"><h6>计调</h6></li>
  75 + <li><span class="label s_c_change">新增</span>1、人员停用在home.html做弹出框,后台获取当前用户权限下的线路人员配置停用信息</li>
  76 + <li><span class="label s_c_change">新增</span>2、人员管理添加金蝶工号显示</li>
  77 + <li><span class="label s_c_change">新增</span>3、修改时刻表明细编辑页面,添加班型编辑列,修改相关指令</li>
  78 + <li><span class="label s_c_change">修改</span>4、修复时刻表批量修改问题所在</li>
  79 + <li><span class="label s_c_change">新增</span>5、添加车辆同步接口web服务</li>
  80 + <li><span class="label s_c_change">新增</span>6、调度执勤日报修改人员,车辆时,初始会修改已有车辆人员配置(如套跑某个班次的车辆不一样,初始时会修改)</li>
  81 + <li><span class="label s_c_change">修改</span>7、排班明细修改班次时,修改去除工号的前缀</li>
  82 + <li class="sub_title"><h6>基础信息</h6></li>
  83 + <li><span class="label s_c_change">新增</span>1、添加线路和修改线路时,选择环线或者双向的提示</li>
  84 + <li><span class="label s_c_change">新增</span>2、添加站点行业编码字段</li>
  85 + </ul>
  86 +
  87 +</div>
  88 +
  89 +<script type="text/javascript">
  90 + $.ajax({
  91 + url: '/eci/validate_get_destroy_info',
  92 + dataType: "json",
  93 + success: function(rs) {
  94 + if (rs && rs.status === "SUCCESS") {
  95 + if (rs.data && rs.data.length && rs.data.length > 0) {
  96 + swal({
  97 + title: "人员配置停用信息",
  98 + text: rs.data.join("</br>"),
  99 + html: true,
  100 + type: "warning",
  101 + showCancelButton: true,
  102 + confirmButtonColor: "RED",
  103 + confirmButtonText: "是",
  104 + cancelButtonText: "取消"
  105 + });
  106 + }
  107 + }
  108 + }
  109 + });
  110 +
  111 +</script>
... ...
src/main/resources/static/pages/mforms/turnoutrates/calcTurnoutrate.html
1   -<style type="text/css">
  1 +<style type="text/css">
2 2 .table-bordered {
3 3 border: 1px solid; }
4 4 .table-bordered > thead > tr > th,
... ... @@ -123,7 +123,7 @@
123 123  
124 124  
125 125 var d = new Date();
126   - d.setTime(d.getTime() - 1*1000*60*60*24);
  126 + //d.setTime(d.getTime() - 1*1000*60*60*24);
127 127 var year = d.getFullYear();
128 128 var month = d.getMonth() + 1;
129 129 var day = d.getDate();
... ...
src/main/resources/static/pages/mforms/turnoutrates/calcTurnoutrateZgf.html
1   -<style type="text/css">
  1 +<style type="text/css">
2 2 .table-bordered {
3 3 border: 1px solid; }
4 4 .table-bordered > thead > tr > th,
... ... @@ -113,7 +113,7 @@
113 113  
114 114  
115 115 var d = new Date();
116   - d.setTime(d.getTime() - 1*1000*60*60*24);
  116 + //d.setTime(d.getTime() - 1*1000*60*60*24);
117 117 var year = d.getFullYear();
118 118 var month = d.getMonth() + 1;
119 119 var day = d.getDate();
... ...
src/main/resources/static/pages/permission/user/changePWD.html
1   -<div class="row">
2   -<div class="col-md-12">
3   -<!-- BEGIN VALIDATION STATES-->
4   -<div class="portlet light portlet-fit portlet-form bordered">
5   -<div class="portlet-body">
6   - <form class="form-horizontal" id="changePWDForm">
7   - <div class="alert alert-danger display-hide">
8   - <button class="close" data-close="alert"></button>您的输入有误,请检查下面的输入项
9   - </div>
10   - <div class="form-group" style="margin-top: 60px">
11   - <label class="control-label col-md-5">原始密码:
12   - </label>
13   - <div class="col-md-4">
14   - <div class="input-icon right">
15   - <i class="fa"></i>
16   - <input type="password" class="form-control" name="oldPWD" /> </div>
17   - </div>
18   - </div>
19   - <div class="form-group">
20   - <label class="control-label col-md-5">输入新密码:
21   - </label>
22   - <div class="col-md-4">
23   - <div class="input-icon right">
24   - <i class="fa"></i>
25   - <input type="password" class="form-control" name="newPWD" id="newPWD"/> </div>
26   - </div>
27   - </div>
28   - <div class="form-group">
29   - <label class="control-label col-md-5">确认新密码:
30   - </label>
31   - <div class="col-md-4">
32   - <div class="input-icon right">
33   - <i class="fa"></i>
34   - <input type="password" class="form-control" name="cnewPWD" /> </div>
35   - </div>
36   - </div>
37   - <div class="form-actions">
38   - <div class="row">
39   - <div class="col-md-offset-5 col-md-7">
40   - <button type="submit" id="confirm" class="btn green">确定</button>
41   - <button type="reset" class="btn default">取消</button>
42   - </div>
43   - </div>
44   - </div>
45   - </form>
46   -</div>
47   -</div>
48   -</div>
49   -</div>
50   -
51   -<script>
52   -$(function(){
53   - var form = $('#changePWDForm');
54   - //表单 validate
55   - var error = $('.alert-danger', form);
56   -
57   - $.validator.addMethod("passwordrule", function(value, element) {
58   - //var userblank = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-]).{8,16}$/;
59   - var userblank = /^(?=.*[a-zA-Z])(?=.*\d).{8,16}$/;
60   - return this.optional(element) ||(userblank.test(value));
61   - }, "需包含字母、数字的8-16位字符");
62   -
63   - //表单 validate
64   - form.validate({
65   - errorElement : 'span',
66   - errorClass : 'help-block help-block-error',
67   - focusInvalid : false,
68   - rules : {
69   - 'newPWD' : {
70   - required : true,
71   - minlength: 8,
72   - maxlength: 16,
73   - passwordrule:true
74   - },
75   - 'cnewPWD' : {
76   - equalTo: '#newPWD'
77   - }
78   - },
79   - invalidHandler : function(event, validator) {
80   - error.show();
81   - App.scrollTo(error, -200);
82   - },
83   -
84   - highlight : function(element) {
85   - $(element).closest('.form-group').addClass('has-error');
86   - },
87   -
88   - unhighlight : function(element) {
89   - $(element).closest('.form-group').removeClass('has-error');
90   - },
91   -
92   - success : function(label) {
93   - label.closest('.form-group').removeClass('has-error');
94   - },
95   -
96   - submitHandler : function(f) {
97   - var params = form.serializeJSON();
98   - error.hide();
99   -
100   - var keys;
101   - $.ajax({
102   - url: "/user/login/jCryptionKey?t="+Math.random(),
103   - type: "Get",
104   - async:false,
105   - data: null,
106   - success: function(data) {
107   - keys = data.publickey;
108   - }
109   - });
110   - //RSA加密
111   - var encrypt = new JSEncrypt();
112   - encrypt.setPublicKey(keys);
113   - params.oldPWD = encrypt.encrypt(params.oldPWD);
114   - params.newPWD = encrypt.encrypt(params.newPWD);
115   - params.cnewPWD = encrypt.encrypt(params.cnewPWD);
116   - $.ajax({
117   - url: '/user/changePWD',
118   - type: 'POST',
119   - traditional: true,
120   - data: params,
121   - success: function(msg){
122   - layer.alert(msg);
123   - }
124   - });
125   - }
126   - });
127   -});
  1 +<div class="row">
  2 +<div class="col-md-12">
  3 +<!-- BEGIN VALIDATION STATES-->
  4 +<div class="portlet light portlet-fit portlet-form bordered">
  5 +<div class="portlet-body">
  6 + <form class="form-horizontal" id="changePWDForm">
  7 + <div class="alert alert-danger display-hide">
  8 + <button class="close" data-close="alert"></button>您的输入有误,请检查下面的输入项
  9 + </div>
  10 + <div class="form-group" style="margin-top: 60px">
  11 + <label class="control-label col-md-5">原始密码:
  12 + </label>
  13 + <div class="col-md-4">
  14 + <div class="input-icon right">
  15 + <i class="fa"></i>
  16 + <input type="password" class="form-control" name="oldPWD" /> </div>
  17 + </div>
  18 + </div>
  19 + <div class="form-group">
  20 + <label class="control-label col-md-5">输入新密码:
  21 + </label>
  22 + <div class="col-md-4">
  23 + <div class="input-icon right">
  24 + <i class="fa"></i>
  25 + <input type="password" class="form-control" name="newPWD" id="newPWD"/> </div>
  26 + </div>
  27 + </div>
  28 + <div class="form-group">
  29 + <label class="control-label col-md-5">确认新密码:
  30 + </label>
  31 + <div class="col-md-4">
  32 + <div class="input-icon right">
  33 + <i class="fa"></i>
  34 + <input type="password" class="form-control" name="cnewPWD" /> </div>
  35 + </div>
  36 + </div>
  37 + <div class="form-actions">
  38 + <div class="row">
  39 + <div class="col-md-offset-5 col-md-7">
  40 + <button type="submit" id="confirm" class="btn green">确定</button>
  41 + <button type="reset" class="btn default">取消</button>
  42 + </div>
  43 + </div>
  44 + </div>
  45 + </form>
  46 +</div>
  47 +</div>
  48 +</div>
  49 +</div>
  50 +
  51 +<script>
  52 +$(function(){
  53 + var form = $('#changePWDForm');
  54 + //表单 validate
  55 + var error = $('.alert-danger', form);
  56 +
  57 + $.validator.addMethod("passwordrule", function(value, element) {
  58 + var reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-]).{8,16}$/;
  59 + //var reg = /^(?=.*[a-zA-Z])(?=.*\d).{8,16}$/;
  60 + return this.optional(element) ||(reg.test(value));
  61 + }, "需包含字母、数字的8-16位字符");
  62 +
  63 + //表单 validate
  64 + form.validate({
  65 + errorElement : 'span',
  66 + errorClass : 'help-block help-block-error',
  67 + focusInvalid : false,
  68 + rules : {
  69 + 'newPWD' : {
  70 + required : true,
  71 + minlength: 8,
  72 + maxlength: 16,
  73 + passwordrule:true
  74 + },
  75 + 'cnewPWD' : {
  76 + equalTo: '#newPWD'
  77 + }
  78 + },
  79 + invalidHandler : function(event, validator) {
  80 + error.show();
  81 + App.scrollTo(error, -200);
  82 + },
  83 +
  84 + highlight : function(element) {
  85 + $(element).closest('.form-group').addClass('has-error');
  86 + },
  87 +
  88 + unhighlight : function(element) {
  89 + $(element).closest('.form-group').removeClass('has-error');
  90 + },
  91 +
  92 + success : function(label) {
  93 + label.closest('.form-group').removeClass('has-error');
  94 + },
  95 +
  96 + submitHandler : function(f) {
  97 + var params = form.serializeJSON();
  98 + error.hide();
  99 +
  100 + var keys;
  101 + $.ajax({
  102 + url: "/user/login/jCryptionKey?t="+Math.random(),
  103 + type: "Get",
  104 + async:false,
  105 + data: null,
  106 + success: function(data) {
  107 + keys = data.publickey;
  108 + }
  109 + });
  110 + //RSA加密
  111 + var encrypt = new JSEncrypt();
  112 + encrypt.setPublicKey(keys);
  113 + params.oldPWD = encrypt.encrypt(params.oldPWD);
  114 + params.newPWD = encrypt.encrypt(params.newPWD);
  115 + params.cnewPWD = encrypt.encrypt(params.cnewPWD);
  116 + $.ajax({
  117 + url: '/user/changePWD',
  118 + type: 'POST',
  119 + traditional: true,
  120 + data: params,
  121 + success: function(msg){
  122 + layer.alert(msg);
  123 + }
  124 + });
  125 + }
  126 + });
  127 +});
128 128 </script>
129 129 \ No newline at end of file
... ...
src/main/resources/static/pages/permission/user/forceChangePWD.html 0 → 100644
  1 +<div class="row">
  2 +<div class="col-md-12">
  3 +<!-- BEGIN VALIDATION STATES-->
  4 +<div class="portlet light portlet-fit portlet-form bordered">
  5 +<div class="portlet-body">
  6 + <form class="form-horizontal" id="forceChangePWDForm">
  7 + <div class="alert alert-danger display-hide">
  8 + <button class="close" data-close="alert"></button>您的输入有误,请检查下面的输入项
  9 + </div>
  10 + <div class="form-group" style="margin-top: 60px">
  11 + <label class="control-label col-md-5">原始密码:
  12 + </label>
  13 + <div class="col-md-4">
  14 + <div class="input-icon right">
  15 + <i class="fa"></i>
  16 + <input type="password" class="form-control" name="oldPWD" /> </div>
  17 + </div>
  18 + </div>
  19 + <div class="form-group">
  20 + <label class="control-label col-md-5">输入新密码:
  21 + </label>
  22 + <div class="col-md-4">
  23 + <div class="input-icon right">
  24 + <i class="fa"></i>
  25 + <input type="password" class="form-control" name="newPWD" id="newPWD"/> </div>
  26 + </div>
  27 + </div>
  28 + <div class="form-group">
  29 + <label class="control-label col-md-5">确认新密码:
  30 + </label>
  31 + <div class="col-md-4">
  32 + <div class="input-icon right">
  33 + <i class="fa"></i>
  34 + <input type="password" class="form-control" name="cnewPWD" /> </div>
  35 + </div>
  36 + </div>
  37 + <div class="form-actions">
  38 + <div class="row">
  39 + <div class="col-md-offset-5 col-md-7">
  40 + <button type="submit" id="confirm" class="btn green">确定</button>
  41 + </div>
  42 + </div>
  43 + </div>
  44 + </form>
  45 +</div>
  46 +</div>
  47 +</div>
  48 +</div>
  49 +
  50 +<script>
  51 +$(function(){
  52 + var form = $('#forceChangePWDForm');
  53 + //表单 validate
  54 + var error = $('.alert-danger', form);
  55 +
  56 + $.validator.addMethod("passwordrule", function(value, element) {
  57 + var reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-]).{8,16}$/;
  58 + //var reg = /^(?=.*[a-zA-Z])(?=.*\d).{8,16}$/;
  59 + return this.optional(element) ||(reg.test(value));
  60 + }, "需包含字母、数字的8-16位字符");
  61 +
  62 + //表单 validate
  63 + form.validate({
  64 + errorElement : 'span',
  65 + errorClass : 'help-block help-block-error',
  66 + focusInvalid : false,
  67 + rules : {
  68 + 'newPWD' : {
  69 + required : true,
  70 + minlength: 8,
  71 + maxlength: 16,
  72 + passwordrule:true
  73 + },
  74 + 'cnewPWD' : {
  75 + equalTo: '#newPWD'
  76 + }
  77 + },
  78 + invalidHandler : function(event, validator) {
  79 + error.show();
  80 + App.scrollTo(error, -200);
  81 + },
  82 +
  83 + highlight : function(element) {
  84 + $(element).closest('.form-group').addClass('has-error');
  85 + },
  86 +
  87 + unhighlight : function(element) {
  88 + $(element).closest('.form-group').removeClass('has-error');
  89 + },
  90 +
  91 + success : function(label) {
  92 + label.closest('.form-group').removeClass('has-error');
  93 + },
  94 +
  95 + submitHandler : function(f) {
  96 + var params = form.serializeJSON();
  97 + error.hide();
  98 +
  99 + var keys;
  100 + $.ajax({
  101 + url: "/user/login/jCryptionKey?t="+Math.random(),
  102 + type: "Get",
  103 + async:false,
  104 + data: null,
  105 + success: function(data) {
  106 + keys = data.publickey;
  107 + }
  108 + });
  109 + //RSA加密
  110 + var encrypt = new JSEncrypt();
  111 + encrypt.setPublicKey(keys);
  112 + params.oldPWD = encrypt.encrypt(params.oldPWD);
  113 + params.newPWD = encrypt.encrypt(params.newPWD);
  114 + params.cnewPWD = encrypt.encrypt(params.cnewPWD);
  115 + $.ajax({
  116 + url: '/user/changePWD',
  117 + type: 'POST',
  118 + traditional: true,
  119 + data: params,
  120 + success: function(msg){
  121 + layer.close();
  122 + }
  123 + });
  124 + }
  125 + });
  126 +});
  127 +</script>
0 128 \ No newline at end of file
... ...
src/main/resources/static/pages/report/sheet/intervalCount.html
... ... @@ -27,54 +27,60 @@
27 27 <div class="portlet light porttlet-fit bordered">
28 28 <div class="portlet-title">
29 29 <form class="form-inline" action="">
30   - <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv">
31   - <span class="item-label" style="width: 80px;">公司: </span>
32   - <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select>
33   - </div>
34   - <div style="display: inline-block; margin-left: 28px;" id="fgsdmDiv">
35   - <span class="item-label" style="width: 80px;">分公司: </span>
36   - <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select>
37   - </div>
38   - <div style="display: inline-block;margin-left: 33px;">
39   - <span class="item-label" style="width: 80px;">线路: </span>
40   - <select class="form-control" name="line" id="line" style="width: 180px;"></select>
41   - </div>
42   - <div style="display: inline-block;margin-left: 18px;">
  30 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv">
  31 + <span class="item-label" style="width: 80px;">公司: </span>
  32 + <select class="form-control" name="company" id="gsdm" style="width: 160px;"></select>
  33 + </div>
  34 + <div style="display: inline-block; margin-left: 20px;" id="fgsdmDiv">
  35 + <span class="item-label" style="width: 80px;">分公司: </span>
  36 + <select class="form-control" name="subCompany" id="fgsdm" style="width: 160px;"></select>
  37 + </div>
  38 + <div style="display: inline-block;margin-left: 33px;">
  39 + <span class="item-label" style="width: 80px;">线路: </span>
  40 + <select class="form-control" name="line" id="line" style="width: 160px;"></select>
  41 + </div>
  42 + <div style="display: inline-block;margin-left: 6px;">
43 43 <span class="item-label" style="width: 80px;">线路性质: </span>
44   - <select
45   - class="form-control" name="nature" id="nature"
46   - style="width: 180px;">
  44 + <select class="form-control" name="nature" id="nature" style="width: 160px;">
47 45 <option value="0">全部线路</option>
48 46 <option value="1" selected="selected">营运线路</option>
49 47 <option value="2">非营运线路</option>
50 48 </select>
51   - </div>
52   - <div style="margin-top: 10px">
  49 + </div>
  50 + <div style="display: inline-block;margin-left: 20px;">
  51 + <span class="item-label" style="width: 80px;">日期: </span>
  52 + <select class="form-control" name="week" id="week" style="width: 160px;">
  53 + <option value="0" selected="selected">全部</option>
  54 + <option value="1">周一至周五</option>
  55 + <option value="2">周六日</option>
  56 + </select>
  57 + </div>
  58 + <div style="margin-top: 10px">
53 59 </div>
54 60 <div style="display: inline-block;margin-left: 33px;">
55   - <span class="item-label" style="width: 80px;">等级: </span>
56   - <select class="form-control" style="width: 180px;" id=levelType>
57   - <option id="levelTypeAll" value="">全部</option>
58   - <option value="A" selected="selected">A级线路</option>
59   - <option value="B">B级线路</option>
60   - <option value="C">C级线路</option>
61   - <option value="D">D级线路</option>
62   - <option value="E">E级线路</option>
63   - </select>
  61 + <span class="item-label" style="width: 80px;">等级: </span>
  62 + <select class="form-control" style="width: 160px;" id=levelType>
  63 + <option id="levelTypeAll" value="">全部</option>
  64 + <option value="A" selected="selected">A级线路</option>
  65 + <option value="B">B级线路</option>
  66 + <option value="C">C级线路</option>
  67 + <option value="D">D级线路</option>
  68 + <option value="E">E级线路</option>
  69 + </select>
64 70 </div>
65 71 <div style="display: inline-block;">
66   - <span class="item-label" style="width: 80px;margin-left: 14px;">开始时间: </span>
67   - <input class="form-control" type="text" id="date" style="width: 180px;"/>
  72 + <span class="item-label" style="width: 80px;margin-left: 6px;">开始时间: </span>
  73 + <input class="form-control" type="text" id="date" style="width: 160px;"/>
68 74 </div>
69 75 <div style="display: inline-block;">
70   - <span class="item-label" style="width: 80px;margin-left: 14px;">结束时间: </span>
71   - <input class="form-control" type="text" id="endDate" style="width: 180px;"/>
  76 + <span class="item-label" style="width: 80px;margin-left: 6px;">结束时间: </span>
  77 + <input class="form-control" type="text" id="endDate" style="width: 160px;"/>
72 78 </div>
73 79  
74 80 <div class="form-group">
75 81 <input type="hidden" id="id"/>
76 82 <input type="hidden" id="dataLevel"/>
77   - <input class="btn btn-default" type="button" id="query" value="查询"/>
  83 + <input class="btn btn-default" type="button" id="query" value="查询" style="margin-left: 2px;"/>
78 84 <input class="btn btn-default" type="button" id="export" value="导出" title="导出查询的大间隔情况"/>
79 85 <input class="btn btn-default" type="button" id="export2" value="导出全部详情" title="导出查询的全部线路的大间隔详细"/>
80 86 </div>
... ... @@ -297,8 +303,9 @@
297 303 var gs=$('#gsdm').val();
298 304 var levelType=$('#levelType').val();
299 305 var nature=$("#nature").val();
  306 + var week=$("#week").val();
300 307 var i = layer.load(2);
301   - $get('/calcInterval/countList',{line:line,date:date,endDate:endDate,gs:gs,fgs:fgs,levelType:levelType,nature:nature,type:'query'},function(result){
  308 + $get('/calcInterval/countList',{line:line,date:date,endDate:endDate,gs:gs,fgs:fgs,levelType:levelType,nature:nature,week:week,type:'query'},function(result){
302 309 // if(levelType=="D"){
303 310 // var intervalList_d = template('intervalList_d',{list:result});
304 311 // $('#forms_d tbody').html(intervalList_d);
... ... @@ -334,9 +341,10 @@
334 341 var date = $("#date").val();
335 342 var endDate = $("#endDate").val();
336 343 var levelType=$(this).data('level');
  344 + var week=$("#week").val();
337 345 $("#id").val(id);
338 346 $("#dataLevel").val(levelType);
339   - $get('/calcInterval/listInterval',{line:id,date:date,endDate:endDate,levelType:levelType,type:'query'},function(result){
  347 + $get('/calcInterval/listInterval',{line:id,date:date,endDate:endDate,levelType:levelType,week:week,type:'query'},function(result){
340 348 var intervalList = template('intervalList_1',{list:result});
341 349 $('#forms_1 tbody').html(intervalList);
342 350 $('.btn-intervalList_1').on('click', openIntervalList);
... ... @@ -427,6 +435,7 @@
427 435 var gs=$('#gsdm').val();
428 436 var levelType=$('#levelType').val();
429 437 var nature=$('#nature').val();
  438 + var week=$("#week").val();
430 439 var lineName = $('#line option:selected').text();
431 440 if(lineName == "全部线路")
432 441 lineName = $('#fgsdm option:selected').text();
... ... @@ -434,7 +443,7 @@
434 443 lineName = $('#gsdm option:selected').text();
435 444  
436 445 var i = layer.load(2);
437   - $get('/calcInterval/countList',{line:line,date:date,endDate:endDate,gs:gs,fgs:fgs,levelType:levelType,nature:nature,type:"export",lineName:lineName},function(result){
  446 + $get('/calcInterval/countList',{line:line,date:date,endDate:endDate,gs:gs,fgs:fgs,levelType:levelType,nature:nature,week:week,type:"export",lineName:lineName},function(result){
438 447 var dateTime = "";
439 448 if(date == endDate){
440 449 dateTime = moment(date).format("YYYYMMDD");
... ... @@ -462,9 +471,10 @@
462 471 var nature=$('#nature').val();
463 472 var fgs=$('#fgsdm').val();
464 473 var gs=$('#gsdm').val();
  474 + var week=$("#week").val();
465 475  
466 476 var i = layer.load(2);
467   - $get('/calcInterval/exportDetail',{gs:gs,fgs:fgs,line:id,date:date,endDate:endDate,levelType:levelType,nature:nature,type:'export'},function(result){
  477 + $get('/calcInterval/exportDetail',{gs:gs,fgs:fgs,line:id,date:date,endDate:endDate,levelType:levelType,nature:nature,week:week,type:'export'},function(result){
468 478 window.open("/downloadFile/download?fileName="+moment(date).format("YYYYMMDD")+"-"+moment(endDate).format("YYYYMMDD")+"大间隔详细");
469 479 layer.close(i);
470 480 });
... ... @@ -475,6 +485,7 @@
475 485 var date = $("#date").val();
476 486 var endDate = $("#endDate").val();
477 487 var levelType=$("#dataLevel").val();
  488 + var week=$("#week").val();
478 489 // if(levelType=='D'){
479 490 // var i = layer.load(2);
480 491 // $get('/calcSheet/calcListSheet',{line:id,date:date,endDate:endDate,type:'export'},function(result){
... ... @@ -483,7 +494,7 @@
483 494 // });
484 495 // }else{
485 496 var i = layer.load(2);
486   - $get('/calcInterval/listInterval',{line:id,date:date,endDate:endDate,levelType:levelType,type:'export'},function(result){
  497 + $get('/calcInterval/listInterval',{line:id,date:date,endDate:endDate,levelType:levelType,week:week,type:'export'},function(result){
487 498 window.open("/downloadFile/download?fileName=大间距汇总表"+moment(date).format("YYYYMMDD")+"-"+moment(endDate).format("YYYYMMDD"));
488 499 layer.close(i);
489 500 });
... ... @@ -496,8 +507,9 @@
496 507 var date = $("#date").val();
497 508 var endDate = $("#endDate").val();
498 509 var levelType=$("#dataLevel").val();
  510 + var week=$("#week").val();
499 511 var i = layer.load(2);
500   - $get('/calcInterval/exportDetail',{line:id,date:date,endDate:endDate,levelType:levelType,type:'export'},function(result){
  512 + $get('/calcInterval/exportDetail',{line:id,date:date,endDate:endDate,levelType:levelType,week:week,type:'export'},function(result){
501 513 window.open("/downloadFile/download?fileName="+moment(date).format("YYYYMMDD")+"-"+moment(endDate).format("YYYYMMDD")+"大间隔详细");
502 514 layer.close(i);
503 515 });
... ...
src/main/resources/static/pages/report/sheet/intervalSum.html
... ... @@ -27,24 +27,32 @@
27 27 <div class="portlet light porttlet-fit bordered">
28 28 <div class="portlet-title">
29 29 <form class="form-inline" action="">
30   - <div style="display: inline-block; margin-left: 42px;" id="gsdmDiv">
31   - <span class="item-label" style="width: 80px;">公司: </span>
32   - <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select>
33   - </div>
34   - <div style="display: inline-block; margin-left: 28px;" id="fgsdmDiv">
35   - <span class="item-label" style="width: 80px;">分公司: </span>
36   - <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select>
37   - </div>
38   - <div style="display: inline-block;margin-left: 18px;">
39   - <span class="item-label" style="width: 80px;">线路性质: </span>
40   - <select
41   - class="form-control" name="nature" id="nature"
42   - style="width: 180px;">
43   - <option value="0" selected="selected">全部线路</option>
44   - <option value="1">营运线路</option>
45   - <option value="2">非营运线路</option>
46   - </select>
47   - </div>
  30 + <div style="display: inline-block; margin-left: 42px;" id="gsdmDiv">
  31 + <span class="item-label" style="width: 80px;">公司: </span>
  32 + <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select>
  33 + </div>
  34 + <div style="display: inline-block; margin-left: 28px;" id="fgsdmDiv">
  35 + <span class="item-label" style="width: 80px;">分公司: </span>
  36 + <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select>
  37 + </div>
  38 + <div style="display: inline-block;margin-left: 18px;">
  39 + <span class="item-label" style="width: 80px;">线路性质: </span>
  40 + <select
  41 + class="form-control" name="nature" id="nature"
  42 + style="width: 180px;">
  43 + <option value="0">全部线路</option>
  44 + <option value="1" selected="selected">营运线路</option>
  45 + <option value="2">非营运线路</option>
  46 + </select>
  47 + </div>
  48 + <div style="display: inline-block;margin-left: 20px;">
  49 + <span class="item-label" style="width: 80px;">日期: </span>
  50 + <select class="form-control" name="week" id="week" style="width: 160px;">
  51 + <option value="0" selected="selected">全部</option>
  52 + <option value="1">周一至周五</option>
  53 + <option value="2">周六日</option>
  54 + </select>
  55 + </div>
48 56 <div style="margin-top: 10px">
49 57 </div>
50 58 <div style="display: inline-block;">
... ... @@ -167,8 +175,10 @@
167 175 var fgs=$('#fgsdm').val();
168 176 var gs=$('#gsdm').val();
169 177 var nature=$("#nature").val();
  178 + var week=$("#week").val();
  179 +
170 180 var i = layer.load(2);
171   - $get('/calcInterval/sumInterval',{date:date,endDate:endDate,gs:gs,fgs:fgs,nature:nature,type:'query'},function(result){
  181 + $get('/calcInterval/sumInterval',{date:date,endDate:endDate,gs:gs,fgs:fgs,nature:nature,week:week,type:'query'},function(result){
172 182 var intervalList_sum = template('intervalList_sum',{list:result});
173 183 $('#forms_djg_sum tbody').html(intervalList_sum);
174 184  
... ... @@ -186,12 +196,13 @@
186 196 var fgs=$('#fgsdm').val();
187 197 var gs=$('#gsdm').val();
188 198 var nature=$('#nature').val();
  199 + var week=$("#week").val();
189 200 var lineName = $('#fgsdm option:selected').text();
190 201 if(lineName=="全部分公司")
191 202 lineName = $('#gsdm option:selected').text();
192 203  
193 204 var i = layer.load(2);
194   - $get('/calcInterval/sumInterval',{date:date,endDate:endDate,gs:gs,fgs:fgs,nature:nature,type:"export",lineName:lineName},function(result){
  205 + $get('/calcInterval/sumInterval',{date:date,endDate:endDate,gs:gs,fgs:fgs,nature:nature,week:week,type:"export",lineName:lineName},function(result){
195 206 var dateTime = "";
196 207 if(date == endDate){
197 208 dateTime = moment(date).format("YYYYMMDD");
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoEdit2.js
... ... @@ -57,15 +57,15 @@ angular.module(&#39;ScheduleApp&#39;).directive(
57 57 var new_dddesc = undefined; // 调度描述
58 58  
59 59 // 表单值,被赋值的次数
60   - var form_data_assign_count = {
61   - cl1 : 1,
62   - cl2 : 1,
63   - j1 : 1,
64   - j2 : 1,
65   - j3 : 1,
66   - s1 : 1,
67   - s2 : 1,
68   - s3 : 1
  60 + var form_data_assign_count = { // 大于1表示已经初始化过了
  61 + cl1 : -1,
  62 + cl2 : -1,
  63 + j1 : -1,
  64 + j2 : -1,
  65 + j3 : -1,
  66 + s1 : -1,
  67 + s2 : -1,
  68 + s3 : -1
69 69 };
70 70  
71 71 return {
... ... @@ -348,18 +348,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
348 348 return scope[ctrlAs].fd.cl1;
349 349 },
350 350 function(newValue, oldValue) {
351   - // 初始化new_cl1
352   - if (newValue.id) {
353   - if (newValue.id && newValue.zbh) {
354   - new_cl1 = newValue.id + "_" + newValue.zbh;
  351 + if (form_data_assign_count.cl1 > 2) {
  352 + if (newValue.id) {
  353 + if (newValue.id && newValue.zbh) {
  354 + new_cl1 = newValue.id + "_" + newValue.zbh;
  355 + } else {
  356 + new_cl1 = undefined;
  357 + }
355 358 } else {
356 359 new_cl1 = undefined;
357 360 }
358   - } else {
359   - new_cl1 = undefined;
  361 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
360 362 }
361 363  
362   - scope[ctrlAs].$$internal_refresh_dsdata_cl();
  364 + form_data_assign_count.cl1 ++;
363 365 },
364 366 true
365 367 );
... ... @@ -370,18 +372,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
370 372 return scope[ctrlAs].fd.cl2;
371 373 },
372 374 function(newValue, oldValue) {
373   - // 初始化new_cl2
374   - if (newValue.id) {
375   - if (newValue.id && newValue.zbh) {
376   - new_cl2 = newValue.id + "_" + newValue.zbh;
  375 + if (form_data_assign_count.cl2 > 2) {
  376 + if (newValue.id) {
  377 + if (newValue.id && newValue.zbh) {
  378 + new_cl2 = newValue.id + "_" + newValue.zbh;
  379 + } else {
  380 + new_cl2 = undefined;
  381 + }
377 382 } else {
378 383 new_cl2 = undefined;
379 384 }
380   - } else {
381   - new_cl2 = undefined;
  385 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
382 386 }
383 387  
384   - scope[ctrlAs].$$internal_refresh_dsdata_cl();
  388 + form_data_assign_count.cl2 ++;
385 389 },
386 390 true
387 391 );
... ... @@ -392,19 +396,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
392 396 return scope[ctrlAs].fd.j1;
393 397 },
394 398 function(newValue, oldValue) {
395   - // 初始化j1
396   - if (newValue.id) {
397   - if (newValue.id && newValue.name && newValue.jobCode) {
398   - new_j1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  399 + if (form_data_assign_count.j1 > 2) {
  400 + if (newValue.id) {
  401 + if (newValue.id && newValue.name && newValue.jobCode) {
  402 + new_j1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  403 + } else {
  404 + new_j1 = undefined;
  405 + }
399 406 } else {
400 407 new_j1 = undefined;
401 408 }
402   - } else {
403   - new_j1 = undefined;
  409 +
  410 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  411 + scope[ctrlAs].$$internal_refresh_dsdata_s();
404 412 }
405 413  
406   - scope[ctrlAs].$$internal_refresh_dsdata_j();
407   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  414 + form_data_assign_count.j1 ++;
408 415 },
409 416 true
410 417 );
... ... @@ -415,18 +422,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
415 422 return scope[ctrlAs].fd.s1;
416 423 },
417 424 function(newValue, oldValue) {
418   - // 初始化s1
419   - if (newValue.id) {
420   - if (newValue.id && newValue.name && newValue.jobCode) {
421   - new_s1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  425 + if (form_data_assign_count.s1 > 2) {
  426 + if (newValue.id) {
  427 + if (newValue.id && newValue.name && newValue.jobCode) {
  428 + new_s1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  429 + } else {
  430 + new_s1 = undefined;
  431 + }
422 432 } else {
423 433 new_s1 = undefined;
424 434 }
425   - } else {
426   - new_s1 = undefined;
  435 +
  436 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  437 + scope[ctrlAs].$$internal_refresh_dsdata_s();
427 438 }
428   - scope[ctrlAs].$$internal_refresh_dsdata_j();
429   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  439 +
  440 + form_data_assign_count.s1 ++;
430 441 },
431 442 true
432 443 );
... ... @@ -437,19 +448,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
437 448 return scope[ctrlAs].fd.j2;
438 449 },
439 450 function(newValue, oldValue) {
440   - // 初始化j2
441   - if (newValue.id) {
442   - if (newValue.id && newValue.name && newValue.jobCode) {
443   - new_j2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  451 + if (form_data_assign_count.j2 > 2) {
  452 + if (newValue.id) {
  453 + if (newValue.id && newValue.name && newValue.jobCode) {
  454 + new_j2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  455 + } else {
  456 + new_j2 = undefined;
  457 + }
444 458 } else {
445 459 new_j2 = undefined;
446 460 }
447   - } else {
448   - new_j2 = undefined;
  461 +
  462 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  463 + scope[ctrlAs].$$internal_refresh_dsdata_s();
449 464 }
450 465  
451   - scope[ctrlAs].$$internal_refresh_dsdata_j();
452   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  466 + form_data_assign_count.j2 ++;
453 467 },
454 468 true
455 469 );
... ... @@ -460,19 +474,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
460 474 return scope[ctrlAs].fd.s2;
461 475 },
462 476 function(newValue, oldValue) {
463   - // 初始化s2
464   - if (newValue && newValue.id) {
465   - if (newValue.id && newValue.name && newValue.jobCode) {
466   - new_s2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  477 + if (form_data_assign_count.s2 > 2) {
  478 + if (newValue && newValue.id) {
  479 + if (newValue.id && newValue.name && newValue.jobCode) {
  480 + new_s2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  481 + } else {
  482 + new_s2 = undefined;
  483 + }
467 484 } else {
468 485 new_s2 = undefined;
469 486 }
470   - } else {
471   - new_s2 = undefined;
  487 +
  488 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  489 + scope[ctrlAs].$$internal_refresh_dsdata_s();
472 490 }
473 491  
474   - scope[ctrlAs].$$internal_refresh_dsdata_j();
475   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  492 + form_data_assign_count.s2 ++;
476 493 },
477 494 true
478 495 );
... ... @@ -486,8 +503,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
486 503 if (newValue && newValue.length > 0) {
487 504 var j1 = newValue[0].j;
488 505  
489   - var cl_ids = []; // 车辆ids数组(有顺序)
490   - var j_s_ids = []; // 驾驶员ids,售票员ids,[{j:id,s:id},...](有顺序)
  506 + var cl_idFlags = []; // 车辆idFlags数组(有顺序)
  507 + var j_s_idFlags = []; // 驾驶员idFlags,售票员idFlags,[{j:idFlag,s:idFlag},...](有顺序)
491 508 var addreason = []; // 营运调度的原因
492 509 var adddesc = []; // 营运导读的备注
493 510 var isRepeat = false;
... ... @@ -553,30 +570,30 @@ angular.module(&#39;ScheduleApp&#39;).directive(
553 570 // 车辆处理
554 571 isRepeat = false;
555 572 if (obj.cl) {
556   - for (i = 0; i < cl_ids.length; i++) {
557   - if (cl_ids[i] == obj.cl) {
  573 + for (i = 0; i < cl_idFlags.length; i++) {
  574 + if (cl_idFlags[i] == (obj.cl + "_" + obj.clZbh)) {
558 575 isRepeat = true;
559 576 break;
560 577 }
561 578 }
562 579 if (!isRepeat) {
563   - cl_ids.push(obj.cl);
  580 + cl_idFlags.push(obj.cl + "_" + obj.clZbh);
564 581 }
565 582 }
566 583  
567 584 // 人员处理(以驾驶员id为主,没有的话,售票员不管了)
568 585 isRepeat = false;
569 586 if (obj.j) {
570   - for (i = 0; i < j_s_ids.length; i++) {
571   - if (j_s_ids[i].j == obj.j) {
  587 + for (i = 0; i < j_s_idFlags.length; i++) {
  588 + if (j_s_idFlags[i].j == (obj.j + "_" + obj.jName + "_" + obj.jGh)) {
572 589 isRepeat = true;
573 590 break;
574 591 }
575 592 }
576 593 if (!isRepeat) {
577   - j_s_ids.push({
578   - j: obj.j,
579   - s: !obj.s? undefined: obj.s
  594 + j_s_idFlags.push({
  595 + j: obj.j + "_" + obj.jName + "_" + obj.jGh,
  596 + s: !obj.s? undefined: (obj.s + "_" + obj.sName + "_" + obj.sGh)
580 597 });
581 598 }
582 599 }
... ... @@ -615,25 +632,66 @@ angular.module(&#39;ScheduleApp&#39;).directive(
615 632 old_half_bcs = newValue.length / 2;
616 633  
617 634 // 更新formdata
618   - for (i = 0; i < cl_ids.length; i++) { // 车辆更新前两辆
619   - if (i >= 2) {
  635 + for (i = 0; i < cl_idFlags.length; i++) { // 车辆更新前两辆
  636 + if (i == 0) { // 第一组车
  637 + scope[ctrlAs].fd["cl1"].id = cl_idFlags[i].split("_")[0];
  638 + new_cl1 = cl_idFlags[i];
  639 + } else if (i == 1) { // 第二组车
  640 + scope[ctrlAs].fd["cl2"].id = cl_idFlags[i].split("_")[0];
  641 + new_cl2 = cl_idFlags[i];
  642 + } else { // 第三组及以上车全部忽略
620 643 break;
621   - } else {
622   - form_data_assign_count["cl" + (i + 1)] = 0;
623   - scope[ctrlAs].fd["cl" + (i + 1)].id = cl_ids[i];
624 644 }
625 645 }
626   - for (i = 0; i < j_s_ids.length; i++) { // 人员更新
627   - if (i >= 3) {
  646 + for (i = 0; i < j_s_idFlags.length; i++) { // 人员更新
  647 + if (i == 0) { // 第一组人员
  648 + scope[ctrlAs].fd["j1"].id = j_s_idFlags[i].j.split("_")[0];
  649 + scope[ctrlAs].fd["s1"].id = j_s_idFlags[i].s && j_s_idFlags[i].s.split("_")[0];
  650 + new_j1 = j_s_idFlags[i].j;
  651 + new_s1 = j_s_idFlags[i].s;
  652 +
  653 + } else if (i == 1) { // 第二组人员
  654 + scope[ctrlAs].fd["j2"].id = j_s_idFlags[i].j.split("_")[0];
  655 + scope[ctrlAs].fd["s2"].id = j_s_idFlags[i].s && j_s_idFlags[i].s.split("_")[0];
  656 + new_j2 = j_s_idFlags[i].j;
  657 + new_s2 = j_s_idFlags[i].s;
  658 + } else { // 第三组及以上全部忽律
628 659 break;
629   - } else {
630   - form_data_assign_count["j" + (i + 1)] = 0;
631   - scope[ctrlAs].fd["j" + (i + 1)].id = j_s_ids[i].j;
632   -
633   - form_data_assign_count["s" + (i + 1)] = 0;
634   - scope[ctrlAs].fd["s" + (i + 1)].id = j_s_ids[i].s;
635 660 }
636 661 }
  662 + // 更新form_data_assign_count,有值设置成2,没值设置成3,表示已经从ds处初始化完毕
  663 + if (new_cl1) {
  664 + form_data_assign_count["cl1"] = 2;
  665 + } else {
  666 + form_data_assign_count["cl1"] = 3;
  667 + }
  668 + if (new_cl2) {
  669 + form_data_assign_count["cl2"] = 2;
  670 + } else {
  671 + form_data_assign_count["cl2"] = 3;
  672 + }
  673 + if (new_j1) {
  674 + form_data_assign_count["j1"] = 2;
  675 + } else {
  676 + form_data_assign_count["j1"] = 3;
  677 + }
  678 + if (new_j2) {
  679 + form_data_assign_count["j2"] = 2;
  680 + } else {
  681 + form_data_assign_count["j2"] = 3;
  682 + }
  683 + if (new_s1) {
  684 + form_data_assign_count["s1"] = 2;
  685 + } else {
  686 + form_data_assign_count["s1"] = 3;
  687 + }
  688 + if (new_s2) {
  689 + form_data_assign_count["s2"] = 2;
  690 + } else {
  691 + form_data_assign_count["s2"] = 3;
  692 + }
  693 +
  694 +
637 695 for (i = 0; i < addreason.length; i++) { // 调度原因更新
638 696 if (i > 1) { // 有多个,只更新第一个
639 697 break;
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
... ... @@ -5939,15 +5939,15 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5939 5939 var new_dddesc = undefined; // 调度描述
5940 5940  
5941 5941 // 表单值,被赋值的次数
5942   - var form_data_assign_count = {
5943   - cl1 : 1,
5944   - cl2 : 1,
5945   - j1 : 1,
5946   - j2 : 1,
5947   - j3 : 1,
5948   - s1 : 1,
5949   - s2 : 1,
5950   - s3 : 1
  5942 + var form_data_assign_count = { // 大于1表示已经初始化过了
  5943 + cl1 : -1,
  5944 + cl2 : -1,
  5945 + j1 : -1,
  5946 + j2 : -1,
  5947 + j3 : -1,
  5948 + s1 : -1,
  5949 + s2 : -1,
  5950 + s3 : -1
5951 5951 };
5952 5952  
5953 5953 return {
... ... @@ -6230,18 +6230,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6230 6230 return scope[ctrlAs].fd.cl1;
6231 6231 },
6232 6232 function(newValue, oldValue) {
6233   - // 初始化new_cl1
6234   - if (newValue.id) {
6235   - if (newValue.id && newValue.zbh) {
6236   - new_cl1 = newValue.id + "_" + newValue.zbh;
  6233 + if (form_data_assign_count.cl1 > 2) {
  6234 + if (newValue.id) {
  6235 + if (newValue.id && newValue.zbh) {
  6236 + new_cl1 = newValue.id + "_" + newValue.zbh;
  6237 + } else {
  6238 + new_cl1 = undefined;
  6239 + }
6237 6240 } else {
6238 6241 new_cl1 = undefined;
6239 6242 }
6240   - } else {
6241   - new_cl1 = undefined;
  6243 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
6242 6244 }
6243 6245  
6244   - scope[ctrlAs].$$internal_refresh_dsdata_cl();
  6246 + form_data_assign_count.cl1 ++;
6245 6247 },
6246 6248 true
6247 6249 );
... ... @@ -6252,18 +6254,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6252 6254 return scope[ctrlAs].fd.cl2;
6253 6255 },
6254 6256 function(newValue, oldValue) {
6255   - // 初始化new_cl2
6256   - if (newValue.id) {
6257   - if (newValue.id && newValue.zbh) {
6258   - new_cl2 = newValue.id + "_" + newValue.zbh;
  6257 + if (form_data_assign_count.cl2 > 2) {
  6258 + if (newValue.id) {
  6259 + if (newValue.id && newValue.zbh) {
  6260 + new_cl2 = newValue.id + "_" + newValue.zbh;
  6261 + } else {
  6262 + new_cl2 = undefined;
  6263 + }
6259 6264 } else {
6260 6265 new_cl2 = undefined;
6261 6266 }
6262   - } else {
6263   - new_cl2 = undefined;
  6267 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
6264 6268 }
6265 6269  
6266   - scope[ctrlAs].$$internal_refresh_dsdata_cl();
  6270 + form_data_assign_count.cl2 ++;
6267 6271 },
6268 6272 true
6269 6273 );
... ... @@ -6274,19 +6278,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6274 6278 return scope[ctrlAs].fd.j1;
6275 6279 },
6276 6280 function(newValue, oldValue) {
6277   - // 初始化j1
6278   - if (newValue.id) {
6279   - if (newValue.id && newValue.name && newValue.jobCode) {
6280   - new_j1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6281 + if (form_data_assign_count.j1 > 2) {
  6282 + if (newValue.id) {
  6283 + if (newValue.id && newValue.name && newValue.jobCode) {
  6284 + new_j1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6285 + } else {
  6286 + new_j1 = undefined;
  6287 + }
6281 6288 } else {
6282 6289 new_j1 = undefined;
6283 6290 }
6284   - } else {
6285   - new_j1 = undefined;
  6291 +
  6292 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  6293 + scope[ctrlAs].$$internal_refresh_dsdata_s();
6286 6294 }
6287 6295  
6288   - scope[ctrlAs].$$internal_refresh_dsdata_j();
6289   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  6296 + form_data_assign_count.j1 ++;
6290 6297 },
6291 6298 true
6292 6299 );
... ... @@ -6297,18 +6304,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6297 6304 return scope[ctrlAs].fd.s1;
6298 6305 },
6299 6306 function(newValue, oldValue) {
6300   - // 初始化s1
6301   - if (newValue.id) {
6302   - if (newValue.id && newValue.name && newValue.jobCode) {
6303   - new_s1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6307 + if (form_data_assign_count.s1 > 2) {
  6308 + if (newValue.id) {
  6309 + if (newValue.id && newValue.name && newValue.jobCode) {
  6310 + new_s1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6311 + } else {
  6312 + new_s1 = undefined;
  6313 + }
6304 6314 } else {
6305 6315 new_s1 = undefined;
6306 6316 }
6307   - } else {
6308   - new_s1 = undefined;
  6317 +
  6318 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  6319 + scope[ctrlAs].$$internal_refresh_dsdata_s();
6309 6320 }
6310   - scope[ctrlAs].$$internal_refresh_dsdata_j();
6311   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  6321 +
  6322 + form_data_assign_count.s1 ++;
6312 6323 },
6313 6324 true
6314 6325 );
... ... @@ -6319,19 +6330,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6319 6330 return scope[ctrlAs].fd.j2;
6320 6331 },
6321 6332 function(newValue, oldValue) {
6322   - // 初始化j2
6323   - if (newValue.id) {
6324   - if (newValue.id && newValue.name && newValue.jobCode) {
6325   - new_j2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6333 + if (form_data_assign_count.j2 > 2) {
  6334 + if (newValue.id) {
  6335 + if (newValue.id && newValue.name && newValue.jobCode) {
  6336 + new_j2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6337 + } else {
  6338 + new_j2 = undefined;
  6339 + }
6326 6340 } else {
6327 6341 new_j2 = undefined;
6328 6342 }
6329   - } else {
6330   - new_j2 = undefined;
  6343 +
  6344 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  6345 + scope[ctrlAs].$$internal_refresh_dsdata_s();
6331 6346 }
6332 6347  
6333   - scope[ctrlAs].$$internal_refresh_dsdata_j();
6334   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  6348 + form_data_assign_count.j2 ++;
6335 6349 },
6336 6350 true
6337 6351 );
... ... @@ -6342,19 +6356,22 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6342 6356 return scope[ctrlAs].fd.s2;
6343 6357 },
6344 6358 function(newValue, oldValue) {
6345   - // 初始化s2
6346   - if (newValue && newValue.id) {
6347   - if (newValue.id && newValue.name && newValue.jobCode) {
6348   - new_s2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6359 + if (form_data_assign_count.s2 > 2) {
  6360 + if (newValue && newValue.id) {
  6361 + if (newValue.id && newValue.name && newValue.jobCode) {
  6362 + new_s2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  6363 + } else {
  6364 + new_s2 = undefined;
  6365 + }
6349 6366 } else {
6350 6367 new_s2 = undefined;
6351 6368 }
6352   - } else {
6353   - new_s2 = undefined;
  6369 +
  6370 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  6371 + scope[ctrlAs].$$internal_refresh_dsdata_s();
6354 6372 }
6355 6373  
6356   - scope[ctrlAs].$$internal_refresh_dsdata_j();
6357   - scope[ctrlAs].$$internal_refresh_dsdata_s();
  6374 + form_data_assign_count.s2 ++;
6358 6375 },
6359 6376 true
6360 6377 );
... ... @@ -6368,8 +6385,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6368 6385 if (newValue && newValue.length > 0) {
6369 6386 var j1 = newValue[0].j;
6370 6387  
6371   - var cl_ids = []; // 车辆ids数组(有顺序)
6372   - var j_s_ids = []; // 驾驶员ids,售票员ids,[{j:id,s:id},...](有顺序)
  6388 + var cl_idFlags = []; // 车辆idFlags数组(有顺序)
  6389 + var j_s_idFlags = []; // 驾驶员idFlags,售票员idFlags,[{j:idFlag,s:idFlag},...](有顺序)
6373 6390 var addreason = []; // 营运调度的原因
6374 6391 var adddesc = []; // 营运导读的备注
6375 6392 var isRepeat = false;
... ... @@ -6435,30 +6452,30 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6435 6452 // 车辆处理
6436 6453 isRepeat = false;
6437 6454 if (obj.cl) {
6438   - for (i = 0; i < cl_ids.length; i++) {
6439   - if (cl_ids[i] == obj.cl) {
  6455 + for (i = 0; i < cl_idFlags.length; i++) {
  6456 + if (cl_idFlags[i] == (obj.cl + "_" + obj.clZbh)) {
6440 6457 isRepeat = true;
6441 6458 break;
6442 6459 }
6443 6460 }
6444 6461 if (!isRepeat) {
6445   - cl_ids.push(obj.cl);
  6462 + cl_idFlags.push(obj.cl + "_" + obj.clZbh);
6446 6463 }
6447 6464 }
6448 6465  
6449 6466 // 人员处理(以驾驶员id为主,没有的话,售票员不管了)
6450 6467 isRepeat = false;
6451 6468 if (obj.j) {
6452   - for (i = 0; i < j_s_ids.length; i++) {
6453   - if (j_s_ids[i].j == obj.j) {
  6469 + for (i = 0; i < j_s_idFlags.length; i++) {
  6470 + if (j_s_idFlags[i].j == (obj.j + "_" + obj.jName + "_" + obj.jGh)) {
6454 6471 isRepeat = true;
6455 6472 break;
6456 6473 }
6457 6474 }
6458 6475 if (!isRepeat) {
6459   - j_s_ids.push({
6460   - j: obj.j,
6461   - s: !obj.s? undefined: obj.s
  6476 + j_s_idFlags.push({
  6477 + j: obj.j + "_" + obj.jName + "_" + obj.jGh,
  6478 + s: !obj.s? undefined: (obj.s + "_" + obj.sName + "_" + obj.sGh)
6462 6479 });
6463 6480 }
6464 6481 }
... ... @@ -6497,25 +6514,66 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6497 6514 old_half_bcs = newValue.length / 2;
6498 6515  
6499 6516 // 更新formdata
6500   - for (i = 0; i < cl_ids.length; i++) { // 车辆更新前两辆
6501   - if (i >= 2) {
  6517 + for (i = 0; i < cl_idFlags.length; i++) { // 车辆更新前两辆
  6518 + if (i == 0) { // 第一组车
  6519 + scope[ctrlAs].fd["cl1"].id = cl_idFlags[i].split("_")[0];
  6520 + new_cl1 = cl_idFlags[i];
  6521 + } else if (i == 1) { // 第二组车
  6522 + scope[ctrlAs].fd["cl2"].id = cl_idFlags[i].split("_")[0];
  6523 + new_cl2 = cl_idFlags[i];
  6524 + } else { // 第三组及以上车全部忽略
6502 6525 break;
6503   - } else {
6504   - form_data_assign_count["cl" + (i + 1)] = 0;
6505   - scope[ctrlAs].fd["cl" + (i + 1)].id = cl_ids[i];
6506 6526 }
6507 6527 }
6508   - for (i = 0; i < j_s_ids.length; i++) { // 人员更新
6509   - if (i >= 3) {
  6528 + for (i = 0; i < j_s_idFlags.length; i++) { // 人员更新
  6529 + if (i == 0) { // 第一组人员
  6530 + scope[ctrlAs].fd["j1"].id = j_s_idFlags[i].j.split("_")[0];
  6531 + scope[ctrlAs].fd["s1"].id = j_s_idFlags[i].s && j_s_idFlags[i].s.split("_")[0];
  6532 + new_j1 = j_s_idFlags[i].j;
  6533 + new_s1 = j_s_idFlags[i].s;
  6534 +
  6535 + } else if (i == 1) { // 第二组人员
  6536 + scope[ctrlAs].fd["j2"].id = j_s_idFlags[i].j.split("_")[0];
  6537 + scope[ctrlAs].fd["s2"].id = j_s_idFlags[i].s && j_s_idFlags[i].s.split("_")[0];
  6538 + new_j2 = j_s_idFlags[i].j;
  6539 + new_s2 = j_s_idFlags[i].s;
  6540 + } else { // 第三组及以上全部忽律
6510 6541 break;
6511   - } else {
6512   - form_data_assign_count["j" + (i + 1)] = 0;
6513   - scope[ctrlAs].fd["j" + (i + 1)].id = j_s_ids[i].j;
6514   -
6515   - form_data_assign_count["s" + (i + 1)] = 0;
6516   - scope[ctrlAs].fd["s" + (i + 1)].id = j_s_ids[i].s;
6517 6542 }
6518 6543 }
  6544 + // 更新form_data_assign_count,有值设置成2,没值设置成3,表示已经从ds处初始化完毕
  6545 + if (new_cl1) {
  6546 + form_data_assign_count["cl1"] = 2;
  6547 + } else {
  6548 + form_data_assign_count["cl1"] = 3;
  6549 + }
  6550 + if (new_cl2) {
  6551 + form_data_assign_count["cl2"] = 2;
  6552 + } else {
  6553 + form_data_assign_count["cl2"] = 3;
  6554 + }
  6555 + if (new_j1) {
  6556 + form_data_assign_count["j1"] = 2;
  6557 + } else {
  6558 + form_data_assign_count["j1"] = 3;
  6559 + }
  6560 + if (new_j2) {
  6561 + form_data_assign_count["j2"] = 2;
  6562 + } else {
  6563 + form_data_assign_count["j2"] = 3;
  6564 + }
  6565 + if (new_s1) {
  6566 + form_data_assign_count["s1"] = 2;
  6567 + } else {
  6568 + form_data_assign_count["s1"] = 3;
  6569 + }
  6570 + if (new_s2) {
  6571 + form_data_assign_count["s2"] = 2;
  6572 + } else {
  6573 + form_data_assign_count["s2"] = 3;
  6574 + }
  6575 +
  6576 +
6519 6577 for (i = 0; i < addreason.length; i++) { // 调度原因更新
6520 6578 if (i > 1) { // 有多个,只更新第一个
6521 6579 break;
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/info/module.js
... ... @@ -251,6 +251,19 @@ angular.module(&quot;ScheduleApp&quot;).controller(
251 251 // 提交方法
252 252 self.submit = function() {
253 253 // 保存或者更新
  254 +
  255 + // 修正工号,去除前缀(如:05-001122,05就是前缀,用 - 分割)
  256 + var _jGh = self.schedulePlanInfoForSave.jGh;
  257 + if (_jGh) {
  258 + _jGh = _jGh.indexOf("-") != -1 ? _jGh.split("-")[1] : _jGh;
  259 + self.schedulePlanInfoForSave.jGh = _jGh;
  260 + }
  261 + var _sGh = self.schedulePlanInfoForSave.sGh;
  262 + if (_sGh) {
  263 + _sGh = _sGh.indexOf("-") != -1 ? _sGh.split("-")[1] : _sGh;
  264 + self.schedulePlanInfoForSave.sGh = _sGh;
  265 + }
  266 +
254 267 self.schedulePlanInfoForSave.$save(function() {
255 268 self.toPlanInfoListPage();
256 269 });
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/list.html
... ... @@ -71,7 +71,7 @@
71 71 </tr>
72 72 </thead>
73 73 <tbody>
74   - <tr ng-repeat="info in ctrl.pageInfo.infos"
  74 + <tr ng-repeat="info in ctrl.pageInfo.infos track by info.lpName"
75 75 ng-class="{odd: true, gradeX: true, info: ctrl.isModify(info), 'row-active': ctrl.isModify(info)}" >
76 76 <td>
77 77 <div>
... ... @@ -128,21 +128,21 @@
128 128 </div>
129 129 </td>
130 130 <td>
131   - <div ng-repeat="clzbh in info.clZbhs">
  131 + <div ng-repeat="clzbh in info.clZbhs track by $index">
132 132 <a href="#">
133 133 {{clzbh}}
134 134 </a>
135 135 </div>
136 136 </td>
137 137 <td>
138   - <div ng-repeat="ccsj in info.ccsjs">
  138 + <div ng-repeat="ccsj in info.ccsjs track by $index">
139 139 <a href="#">
140 140 {{ccsj}}
141 141 </a>
142 142 </div>
143 143 </td>
144 144 <td>
145   - <div ng-repeat="jcsj in info.jcsjs">
  145 + <div ng-repeat="jcsj in info.jcsjs track by $index">
146 146 <a href="#">
147 147 {{jcsj}}
148 148 </a>
... ... @@ -151,7 +151,7 @@
151 151 <td class="container-fluid">
152 152 <div class="row">
153 153 <div style="padding-right: 0px;" class="col-md-6">
154   - <div ng-repeat="jsyname in info.jsyNames">
  154 + <div ng-repeat="jsyname in info.jsyNames track by $index">
155 155 <a href="#">
156 156 <i class="fa fa-bus" aria-hidden="true"></i>
157 157 {{jsyname}}
... ... @@ -159,7 +159,7 @@
159 159 </div>
160 160 </div>
161 161 <div style="padding-left: 0px;" class="col-md-6">
162   - <div ng-repeat="jsygh in info.jsyGhs">
  162 + <div ng-repeat="jsygh in info.jsyGhs track by $index">
163 163 <a href="#">
164 164 {{jsygh}}
165 165 </a>
... ... @@ -170,7 +170,7 @@
170 170 <td class="container-fluid">
171 171 <div class="row">
172 172 <div style="padding-right: 0px;" class="col-md-6">
173   - <div ng-repeat="spyname in info.spyNames">
  173 + <div ng-repeat="spyname in info.spyNames track by $index">
174 174 <a href="#">
175 175 <i class="fa fa-ticket" aria-hidden="true"></i>
176 176 {{spyname}}
... ... @@ -178,7 +178,7 @@
178 178 </div>
179 179 </div>
180 180 <div style="padding-left: 0px;" class="col-md-6">
181   - <div ng-repeat="spygh in info.spyGhs">
  181 + <div ng-repeat="spygh in info.spyGhs track by $index">
182 182 <a href="#">
183 183 {{spygh}}
184 184 </a>
... ...
src/main/resources/static/real_control_v2/mapmonitor/js/spatial_data.js
1   -/** 空间数据 */
2   -
3   -var gb_map_spatial_data = (function () {
4   -
5   - var storage = window.localStorage;
6   -
7   - var activeLines = JSON.parse(storage.getItem('lineControlItems'));
8   - var line_idx = (function () {
9   - var str = '';
10   - for (var i = 0, item; item = activeLines[i++];) {
11   - str += (',' + item.lineCode);
12   - }
13   - return str.substr(1);
14   - })();
15   -
16   - var cont = '#spatial-tree-content';
17   - //线路站点路由数据
18   - var lineStationArr;
19   -
20   - //停车场数据
21   - var carparkArr;
22   -
23   - var init = function () {
24   - //加载站点路由数据
25   - gb_common.$get('/realMap/stationVersionSpatialData', {idx: line_idx}, function (rs) {
26   - var list = rs.list;
27   - $.each(list, function () {
28   - this.lat = this.gLaty;
29   - this.lon = this.gLonx;
30   - delete this.gLaty;
31   - delete this.gLonx;
32   - if(this.shapesType=='d'){
33   - var calcRs = calcPolygonArea(this.gPolygonGrid);
34   - this._polygonArea = calcRs._polygonArea;
35   - this._gPoints = calcRs._gPoints;
36   - }
37   - });
38   - //排序
39   - list.sort(function (a, b) {
40   - return a.stationRouteCode - b.stationRouteCode;
41   - });
42   - //按线路分组
43   - lineStationArr = gb_common.groupBy(list, 'lineCode');
44   - //再按上下行分组
45   - for (var lineCode in lineStationArr) {
46   - lineStationArr[lineCode] = gb_common.groupBy(lineStationArr[lineCode], 'directions');
47   - }
48   -
49   - ep.emitLater('station');
50   - });
51   -
52   - //加载停车场数据
53   - gb_common.$get('/realMap/carParkSpatialData', {}, function (rs) {
54   - carparkArr = rs.list;
55   - $.each(carparkArr, function () {
56   - if(this.shapesType=='d'){
57   - var calcRs = calcPolygonArea(this.gParkPoint);
58   - this._polygonArea = calcRs._polygonArea;
59   - this._gPoints = calcRs._gPoints;
60   - }
61   - });
62   - ep.emitLater('carpark');
63   - });
64   -
65   - var ep = EventProxy.create('station', 'carpark', function () {
66   - $(".real_spatial_panel").resizable({
67   - maxHeight: '100%',
68   - minHeight: 18
69   - });
70   -
71   - //绘制站点路由树
72   - $('.station-route-tree', cont)
73   - //state插件 状态恢复完成
74   - .on('state_ready.jstree', function () {
75   - //绑定checkbox状态切换事件
76   - $(this).on('check_node.jstree uncheck_node.jstree', gb_map_overlay_mge.drawStation);
77   - })
78   - .on('activate_node.jstree', function (e, n) {
79   - var node = n.node;
80   - if(node.state.checked)
81   - gb_map_overlay_mge._focus_station(node.data);
82   - })
83   - .jstree({
84   - 'core': {
85   - 'data': get_st_route_tree_data()
86   - },
87   - 'checkbox': {
88   - 'keep_selected_style': false,
89   - 'whole_node': false,
90   - 'tie_selection': false
91   - },
92   - //local storage里的key
93   - 'state': {
94   - 'key': 'jstree_map_station_route'
95   - },
96   - 'plugins': ['checkbox', 'state']
97   - });
98   -
99   -
100   - //停车场
101   - $('.carpark-panel', cont)
102   - .on('state_ready.jstree', function () {
103   - //绑定checkbox状态切换事件
104   - $(this).on('check_node.jstree uncheck_node.jstree', gb_map_overlay_mge.drawCarpark);
105   - })
106   - .on('activate_node.jstree', function (e, n) {
107   - var node = n.node;
108   - if(node.state.checked)
109   - gb_map_overlay_mge._focus_carpark(node.data);
110   - })
111   - .jstree({
112   - 'core': {
113   - 'data': get_st_carpark_tree_data()
114   - },
115   - 'checkbox': {
116   - 'keep_selected_style': false,
117   - 'whole_node': false,
118   - 'tie_selection': false
119   - },
120   - //local storage里的key
121   - 'state': {
122   - 'key': 'jstree_map_carpark'
123   - },
124   - 'plugins': ['checkbox', 'state']
125   - });
126   -
127   - refresh();
128   - });
129   - };
130   -
131   - //计算多边形面积
132   - function calcPolygonArea(polygonStr) {
133   - var pStr = polygonStr.substring(9, polygonStr.length - 2);
134   - var array = pStr.split(',');
135   - var newArr=[];
136   -
137   - //递归去掉闭合的尾
138   - (function () {
139   - var f = arguments.callee;
140   - var end=array.length - 1;
141   - if(array.length > 1 && array[0] == array[end]){
142   - array = array.slice(0, end);
143   - f();
144   - }
145   - })();
146   -
147   - //去掉连续的重复点
148   - var last;
149   - $.each(array, function (i, str) {
150   - if(last){
151   - if(last != str)
152   - newArr.push(str);
153   - }
154   - else
155   - newArr.push(str);
156   - last = str;
157   - });
158   -
159   - var gPoints=[],ts;
160   - $.each(newArr, function (i, c) {
161   - ts=c.split(' ');
162   - gPoints.push({
163   - lat: parseFloat(ts[1]),
164   - lng: parseFloat(ts[0])
165   - });
166   - });
167   -
168   - //用百度geo工具库计算面积
169   - var _polygonArea = BMapLib.GeoUtils.getPolygonArea(gPoints);
170   - return {_polygonArea: _polygonArea.toFixed(2), _gPoints: gPoints};
171   - }
172   -
173   - var refresh = function (type, checked) {
174   - if (!triggerElem())
175   - return;
176   -
177   - if ((type == 'carPark' && checked) || (type == 'station' && !checked)) {
178   - //显示停车场面板
179   - $('.car-park-item', cont).addClass('uk-active');
180   - $('li.cp-tab-btn', '.real_spatial_panel').addClass('uk-active');
181   - $('.carpark-panel', cont).jstree(true).check_all();
182   -
183   - //绘制停车场
184   - gb_map_overlay_mge.drawCarpark();
185   - }
186   - else {
187   - //显示站点路由面板
188   - $('.station-route-item', cont).addClass('uk-active');
189   - $('li.sr-tab-btn', '.real_spatial_panel').addClass('uk-active');
190   -
191   - //选中相关站点路由树
192   - var chs = gb_map_overlay_mge.getCheckedDevice();
193   - var idx = {};
194   - $.each(chs, function () {
195   - idx[this.data.lineId + '_' + this.data.upDown] = 1;
196   - });
197   -
198   - var treeObj = $('.station-route-tree', cont).jstree(true);
199   - for (var id in idx) {
200   - treeObj.check_node(treeObj.get_node(id + '_st'));
201   - }
202   -
203   - //drawStation();
204   - gb_map_overlay_mge.drawStation();
205   - }
206   - }
207   -
208   - var triggerElem = function () {
209   - var config = gb_map_config.getConfig().spatialData;
210   -
211   - if(config.station || config.carPark){
212   - showPanel();
213   - return true;
214   - }
215   - hidePanel();
216   - //gb_map_imap.call('hideAllStationMarker');
217   - //gb_map_imap.call('hideDrawCarpark');
218   - return false;
219   - }
220   -
221   - var animationend = 'webkitAnimationEnd animationend';
222   - var showPanel = function () {
223   - var elem = $('.real_spatial_panel');
224   - var config = gb_map_config.getConfig().spatialData;
225   -
226   - if (config.station && config.carPark) {
227   - anim_show($('.uk-subnav', elem), 'uk-animation-scale-up');
228   - $('.real_spatial_body', elem).addClass('show-tab');
229   - }
230   - else {
231   - $('.uk-subnav', elem).hide();
232   - $('.real_spatial_body', elem).removeClass('show-tab');
233   - }
234   -
235   - $('li.uk-active', elem).removeClass('uk-active');
236   -
237   - if (!elem.is(":hidden"))
238   - return;
239   -
240   - anim_show(elem, 'uk-animation-slide-left');
241   - }
242   -
243   - var hidePanel = function () {
244   - var elem = $('.real_spatial_panel');
245   - elem.hide();
246   - }
247   -
248   - function anim_show(e, anim) {
249   - e.addClass(anim).show().one(animationend, function () {
250   - $(this).removeClass(anim);
251   - });
252   - }
253   -
254   - function getCheckedStation() {
255   - var list = [];
256   - var chs = $('.station-route-tree', cont).jstree(true).get_checked(true);
257   - chs = chs.filter(function (item) {
258   - return item.data;
259   - });
260   - $.each(chs, function () {
261   - list.push(this.data);
262   - });
263   - return list;
264   - }
265   -
266   - function gteCheckedCarpark() {
267   - var list = [];
268   - var chs = $('.carpark-panel', cont).jstree(true).get_checked(true);
269   - $.each(chs, function () {
270   - list.push(this.data);
271   - });
272   - return list;
273   - }
274   -
275   - var get_st_route_tree_data = function () {
276   - var treeData = [];
277   -
278   - for (var lineCode in lineStationArr) {
279   - name = gb_data_basic.codeToLine[lineCode].name;
280   - treeData.push({
281   - 'text': name,
282   - 'open': true,
283   - 'children': [
284   - {
285   - 'text': '上行',
286   - 'children': grabs(lineStationArr[lineCode][0]),
287   - 'id': lineCode + '_0_st'
288   - },
289   - {
290   - 'text': '下行',
291   - 'children': grabs(lineStationArr[lineCode][1]),
292   - 'id': lineCode + '_1_st'
293   - }
294   - ]
295   - })
296   - }
297   - return treeData;
298   - };
299   - var get_st_route_tree_data_version = function () {
300   - var treeData = [];
301   -
302   - for (var lineCode in lineVersionStationArr) {
303   - name = gb_data_basic.codeToLine[lineCode].name;
304   - treeData.push({
305   - 'text': name,
306   - 'open': true,
307   - 'children': [
308   - {
309   - 'text': '上行',
310   - 'children': grabs(lineVersionStationArr[lineCode][0]),
311   - 'id': lineCode + '_0_st'
312   - },
313   - {
314   - 'text': '下行',
315   - 'children': grabs(lineVersionStationArr[lineCode][1]),
316   - 'id': lineCode + '_1_st'
317   - }
318   - ]
319   - })
320   - }
321   - return treeData;
322   - };
323   - var get_st_carpark_tree_data = function () {
324   - var treeData = [];
325   -
326   - $.each(carparkArr, function () {
327   - treeData.push({
328   - 'text': this.parkName,
329   - 'data': this
330   - });
331   - });
332   -
333   - return treeData;
334   - }
335   -
336   - var grabs = function (array) {
337   - if (!array)
338   - return;
339   - var rs = [];
340   - $.each(array, function () {
341   - rs.push({
342   - 'text': this.stationName,
343   - 'data': this,
344   - 'icon': false
345   - });
346   - });
347   - return rs;
348   - }
349   -
350   - return {
351   - refresh: refresh,
352   - init: init,
353   - getCheckedStation:getCheckedStation,
354   - gteCheckedCarpark: gteCheckedCarpark,
355   - getStationArray: function (lineCode) {
356   - return lineStationArr[lineCode];
357   - },
358   - carparkArray: function () {
359   - return carparkArr;
360   - }
361   - };
  1 +/** 空间数据 */
  2 +
  3 +var gb_map_spatial_data = (function () {
  4 +
  5 + var storage = window.localStorage;
  6 +
  7 + var activeLines = JSON.parse(storage.getItem('lineControlItems'));
  8 + var line_idx = (function () {
  9 + var str = '';
  10 + for (var i = 0, item; item = activeLines[i++];) {
  11 + str += (',' + item.lineCode);
  12 + }
  13 + return str.substr(1);
  14 + })();
  15 +
  16 + var cont = '#spatial-tree-content';
  17 + //线路站点路由数据
  18 + var lineStationArr, currentLineStationArr;
  19 +
  20 + //停车场数据
  21 + var carparkArr;
  22 +
  23 + var init = function () {
  24 +
  25 + //加载各线路当前版本站点路由数据
  26 + gb_common.$get('/realMap/stationSpatialData', {idx: line_idx}, function (rs) {
  27 + var list = rs.list;
  28 + $.each(list, function () {
  29 + this.lat = this.gLaty;
  30 + this.lon = this.gLonx;
  31 + delete this.gLaty;
  32 + delete this.gLonx;
  33 + if(this.shapesType=='d'){
  34 + var calcRs = calcPolygonArea(this.gPolygonGrid);
  35 + this._polygonArea = calcRs._polygonArea;
  36 + this._gPoints = calcRs._gPoints;
  37 + }
  38 + });
  39 + //排序
  40 + list.sort(function (a, b) {
  41 + return a.stationRouteCode - b.stationRouteCode;
  42 + });
  43 + //按线路分组
  44 + currentLineStationArr = gb_common.groupBy(list, 'lineCode');
  45 + //再按上下行分组
  46 + for (var lineCode in currentLineStationArr) {
  47 + currentLineStationArr[lineCode] = gb_common.groupBy(currentLineStationArr[lineCode], 'directions');
  48 + }
  49 +
  50 + ep.emitLater('currentstation');
  51 + });
  52 +
  53 + //加载各线路所有版本站点路由数据(轨迹回放时用)
  54 + gb_common.$get('/realMap/stationVersionSpatialData', {idx: line_idx}, function (rs) {
  55 + var list = rs.list;
  56 + $.each(list, function () {
  57 + this.lat = this.gLaty;
  58 + this.lon = this.gLonx;
  59 + delete this.gLaty;
  60 + delete this.gLonx;
  61 + if(this.shapesType=='d'){
  62 + var calcRs = calcPolygonArea(this.gPolygonGrid);
  63 + this._polygonArea = calcRs._polygonArea;
  64 + this._gPoints = calcRs._gPoints;
  65 + }
  66 + });
  67 + //排序
  68 + list.sort(function (a, b) {
  69 + return a.stationRouteCode - b.stationRouteCode;
  70 + });
  71 + //按线路分组
  72 + lineStationArr = gb_common.groupBy(list, 'lineCode');
  73 + //再按上下行分组
  74 + for (var lineCode in lineStationArr) {
  75 + lineStationArr[lineCode] = gb_common.groupBy(lineStationArr[lineCode], 'directions');
  76 + }
  77 +
  78 + ep.emitLater('station');
  79 + });
  80 +
  81 + //加载停车场数据
  82 + gb_common.$get('/realMap/carParkSpatialData', {}, function (rs) {
  83 + carparkArr = rs.list;
  84 + $.each(carparkArr, function () {
  85 + if(this.shapesType=='d'){
  86 + var calcRs = calcPolygonArea(this.gParkPoint);
  87 + this._polygonArea = calcRs._polygonArea;
  88 + this._gPoints = calcRs._gPoints;
  89 + }
  90 + });
  91 + ep.emitLater('carpark');
  92 + });
  93 +
  94 + var ep = EventProxy.create('currentstation', 'station', 'carpark', function () {
  95 + $(".real_spatial_panel").resizable({
  96 + maxHeight: '100%',
  97 + minHeight: 18
  98 + });
  99 +
  100 + //绘制站点路由树
  101 + $('.station-route-tree', cont)
  102 + //state插件 状态恢复完成
  103 + .on('state_ready.jstree', function () {
  104 + //绑定checkbox状态切换事件
  105 + $(this).on('check_node.jstree uncheck_node.jstree', gb_map_overlay_mge.drawStation);
  106 + })
  107 + .on('activate_node.jstree', function (e, n) {
  108 + var node = n.node;
  109 + if(node.state.checked)
  110 + gb_map_overlay_mge._focus_station(node.data);
  111 + })
  112 + .jstree({
  113 + 'core': {
  114 + 'data': get_st_route_tree_data()
  115 + },
  116 + 'checkbox': {
  117 + 'keep_selected_style': false,
  118 + 'whole_node': false,
  119 + 'tie_selection': false
  120 + },
  121 + //local storage里的key
  122 + 'state': {
  123 + 'key': 'jstree_map_station_route'
  124 + },
  125 + 'plugins': ['checkbox', 'state']
  126 + });
  127 +
  128 +
  129 + //停车场
  130 + $('.carpark-panel', cont)
  131 + .on('state_ready.jstree', function () {
  132 + //绑定checkbox状态切换事件
  133 + $(this).on('check_node.jstree uncheck_node.jstree', gb_map_overlay_mge.drawCarpark);
  134 + })
  135 + .on('activate_node.jstree', function (e, n) {
  136 + var node = n.node;
  137 + if(node.state.checked)
  138 + gb_map_overlay_mge._focus_carpark(node.data);
  139 + })
  140 + .jstree({
  141 + 'core': {
  142 + 'data': get_st_carpark_tree_data()
  143 + },
  144 + 'checkbox': {
  145 + 'keep_selected_style': false,
  146 + 'whole_node': false,
  147 + 'tie_selection': false
  148 + },
  149 + //local storage里的key
  150 + 'state': {
  151 + 'key': 'jstree_map_carpark'
  152 + },
  153 + 'plugins': ['checkbox', 'state']
  154 + });
  155 +
  156 + refresh();
  157 + });
  158 + };
  159 +
  160 + //计算多边形面积
  161 + function calcPolygonArea(polygonStr) {
  162 + var pStr = polygonStr.substring(9, polygonStr.length - 2);
  163 + var array = pStr.split(',');
  164 + var newArr=[];
  165 +
  166 + //递归去掉闭合的尾
  167 + (function () {
  168 + var f = arguments.callee;
  169 + var end=array.length - 1;
  170 + if(array.length > 1 && array[0] == array[end]){
  171 + array = array.slice(0, end);
  172 + f();
  173 + }
  174 + })();
  175 +
  176 + //去掉连续的重复点
  177 + var last;
  178 + $.each(array, function (i, str) {
  179 + if(last){
  180 + if(last != str)
  181 + newArr.push(str);
  182 + }
  183 + else
  184 + newArr.push(str);
  185 + last = str;
  186 + });
  187 +
  188 + var gPoints=[],ts;
  189 + $.each(newArr, function (i, c) {
  190 + ts=c.split(' ');
  191 + gPoints.push({
  192 + lat: parseFloat(ts[1]),
  193 + lng: parseFloat(ts[0])
  194 + });
  195 + });
  196 +
  197 + //用百度geo工具库计算面积
  198 + var _polygonArea = BMapLib.GeoUtils.getPolygonArea(gPoints);
  199 + return {_polygonArea: _polygonArea.toFixed(2), _gPoints: gPoints};
  200 + }
  201 +
  202 + var refresh = function (type, checked) {
  203 + if (!triggerElem())
  204 + return;
  205 +
  206 + if ((type == 'carPark' && checked) || (type == 'station' && !checked)) {
  207 + //显示停车场面板
  208 + $('.car-park-item', cont).addClass('uk-active');
  209 + $('li.cp-tab-btn', '.real_spatial_panel').addClass('uk-active');
  210 + $('.carpark-panel', cont).jstree(true).check_all();
  211 +
  212 + //绘制停车场
  213 + gb_map_overlay_mge.drawCarpark();
  214 + }
  215 + else {
  216 + //显示站点路由面板
  217 + $('.station-route-item', cont).addClass('uk-active');
  218 + $('li.sr-tab-btn', '.real_spatial_panel').addClass('uk-active');
  219 +
  220 + //选中相关站点路由树
  221 + var chs = gb_map_overlay_mge.getCheckedDevice();
  222 + var idx = {};
  223 + $.each(chs, function () {
  224 + idx[this.data.lineId + '_' + this.data.upDown] = 1;
  225 + });
  226 +
  227 + var treeObj = $('.station-route-tree', cont).jstree(true);
  228 + for (var id in idx) {
  229 + treeObj.check_node(treeObj.get_node(id + '_st'));
  230 + }
  231 +
  232 + //drawStation();
  233 + gb_map_overlay_mge.drawStation();
  234 + }
  235 + }
  236 +
  237 + var triggerElem = function () {
  238 + var config = gb_map_config.getConfig().spatialData;
  239 +
  240 + if(config.station || config.carPark){
  241 + showPanel();
  242 + return true;
  243 + }
  244 + hidePanel();
  245 + //gb_map_imap.call('hideAllStationMarker');
  246 + //gb_map_imap.call('hideDrawCarpark');
  247 + return false;
  248 + }
  249 +
  250 + var animationend = 'webkitAnimationEnd animationend';
  251 + var showPanel = function () {
  252 + var elem = $('.real_spatial_panel');
  253 + var config = gb_map_config.getConfig().spatialData;
  254 +
  255 + if (config.station && config.carPark) {
  256 + anim_show($('.uk-subnav', elem), 'uk-animation-scale-up');
  257 + $('.real_spatial_body', elem).addClass('show-tab');
  258 + }
  259 + else {
  260 + $('.uk-subnav', elem).hide();
  261 + $('.real_spatial_body', elem).removeClass('show-tab');
  262 + }
  263 +
  264 + $('li.uk-active', elem).removeClass('uk-active');
  265 +
  266 + if (!elem.is(":hidden"))
  267 + return;
  268 +
  269 + anim_show(elem, 'uk-animation-slide-left');
  270 + }
  271 +
  272 + var hidePanel = function () {
  273 + var elem = $('.real_spatial_panel');
  274 + elem.hide();
  275 + }
  276 +
  277 + function anim_show(e, anim) {
  278 + e.addClass(anim).show().one(animationend, function () {
  279 + $(this).removeClass(anim);
  280 + });
  281 + }
  282 +
  283 + function getCheckedStation() {
  284 + var list = [];
  285 + var chs = $('.station-route-tree', cont).jstree(true).get_checked(true);
  286 + chs = chs.filter(function (item) {
  287 + return item.data;
  288 + });
  289 + $.each(chs, function () {
  290 + list.push(this.data);
  291 + });
  292 + return list;
  293 + }
  294 +
  295 + function gteCheckedCarpark() {
  296 + var list = [];
  297 + var chs = $('.carpark-panel', cont).jstree(true).get_checked(true);
  298 + $.each(chs, function () {
  299 + list.push(this.data);
  300 + });
  301 + return list;
  302 + }
  303 +
  304 + var get_st_route_tree_data = function () {
  305 + var treeData = [];
  306 +
  307 + for (var lineCode in currentLineStationArr) {
  308 + name = gb_data_basic.codeToLine[lineCode].name;
  309 + treeData.push({
  310 + 'text': name,
  311 + 'open': true,
  312 + 'children': [
  313 + {
  314 + 'text': '上行',
  315 + 'children': grabs(currentLineStationArr[lineCode][0]),
  316 + 'id': lineCode + '_0_st'
  317 + },
  318 + {
  319 + 'text': '下行',
  320 + 'children': grabs(currentLineStationArr[lineCode][1]),
  321 + 'id': lineCode + '_1_st'
  322 + }
  323 + ]
  324 + })
  325 + }
  326 + return treeData;
  327 + };
  328 + var get_st_route_tree_data_version = function () {
  329 + var treeData = [];
  330 +
  331 + for (var lineCode in lineVersionStationArr) {
  332 + name = gb_data_basic.codeToLine[lineCode].name;
  333 + treeData.push({
  334 + 'text': name,
  335 + 'open': true,
  336 + 'children': [
  337 + {
  338 + 'text': '上行',
  339 + 'children': grabs(lineVersionStationArr[lineCode][0]),
  340 + 'id': lineCode + '_0_st'
  341 + },
  342 + {
  343 + 'text': '下行',
  344 + 'children': grabs(lineVersionStationArr[lineCode][1]),
  345 + 'id': lineCode + '_1_st'
  346 + }
  347 + ]
  348 + })
  349 + }
  350 + return treeData;
  351 + };
  352 + var get_st_carpark_tree_data = function () {
  353 + var treeData = [];
  354 +
  355 + $.each(carparkArr, function () {
  356 + treeData.push({
  357 + 'text': this.parkName,
  358 + 'data': this
  359 + });
  360 + });
  361 +
  362 + return treeData;
  363 + }
  364 +
  365 + var grabs = function (array) {
  366 + if (!array)
  367 + return;
  368 + var rs = [];
  369 + $.each(array, function () {
  370 + rs.push({
  371 + 'text': this.stationName,
  372 + 'data': this,
  373 + 'icon': false
  374 + });
  375 + });
  376 + return rs;
  377 + }
  378 +
  379 + return {
  380 + refresh: refresh,
  381 + init: init,
  382 + getCheckedStation:getCheckedStation,
  383 + gteCheckedCarpark: gteCheckedCarpark,
  384 + getStationArray: function (lineCode) {
  385 + return lineStationArr[lineCode];
  386 + },
  387 + carparkArray: function () {
  388 + return carparkArr;
  389 + }
  390 + };
362 391 })();
363 392 \ No newline at end of file
... ...
src/main/resources/xsd/vehicleSync.xsd 0 → 100644
  1 +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  2 + xmlns:tns="http://bsth.com/service/schedule/batch/webservice/vehicleSync"
  3 + targetNamespace="http://bsth.com/service/schedule/batch/webservice/vehicleSync"
  4 + elementFormDefault="qualified">
  5 +
  6 + <!-- 车辆信息更新请求类型 -->
  7 + <xs:element name="addVehicleDataSyncRequest">
  8 + <xs:complexType>
  9 + <xs:sequence>
  10 + <xs:element name="idenZbh" type="xs:string" />
  11 + <xs:element name="idenCph" type="xs:string" />
  12 + <xs:element name="updateGsmc" type="xs:string" />
  13 + <xs:element name="updateFgsmc" type="xs:string" />
  14 + <xs:element name="updateSfbf" type="xs:boolean" />
  15 + </xs:sequence>
  16 + </xs:complexType>
  17 + </xs:element>
  18 +
  19 + <!-- 车辆信息更新返回类型 -->
  20 + <xs:element name="addVehicleDataSyncResponse">
  21 + <xs:complexType>
  22 + <xs:sequence>
  23 + <xs:element name="success" type="xs:boolean"/>
  24 + <xs:element name="message" type="xs:string"/>
  25 + </xs:sequence>
  26 + </xs:complexType>
  27 + </xs:element>
  28 +
  29 +</xs:schema>
0 30 \ No newline at end of file
... ...