Commit c7a26d415ad0b511a22ce91c9483119e14669899

Authored by 廖磊
2 parents c0455ff7 d559b01b

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
Showing 27 changed files with 1651 additions and 975 deletions
src/main/java/com/bsth/controller/LineController.java
... ... @@ -90,7 +90,7 @@ public class LineController extends BaseController<Line, Integer> {
90 90 map.put("status", ResponseCode.ERROR);
91 91 return map;
92 92 }
93   - return service.save(l);
  93 + return service.update(l);
94 94 }
95 95  
96 96 @RequestMapping(value ="/findById" , method = RequestMethod.GET)
... ...
src/main/java/com/bsth/controller/schedule/TrafficManageController.java
... ... @@ -51,7 +51,7 @@ public class TrafficManageController {
51 51 @RequestMapping(value = "/setLD", method = RequestMethod.GET)
52 52 public String setLD() throws Exception {
53 53 try {
54   - return trManageService.setLD(null);
  54 + return trManageService.setLD();
55 55 } catch (Exception exp) {
56 56 throw new Exception(exp.getCause());
57 57 }
... ...
src/main/java/com/bsth/data/summary/service/impl/FastAndSlowServiceImpl.java
... ... @@ -41,7 +41,7 @@ public class FastAndSlowServiceImpl extends BaseServiceImpl<FastAndSlow, Long> i
41 41 try {
42 42 //最多5天
43 43 map.put("rq_le", maxEndTime(map.get("rq_ge").toString()
44   - , map.get("rq_le").toString(), 5));
  44 + , map.get("rq_le").toString(), 4));
45 45  
46 46 List<FastAndSlow> list = (List) super.list(map);
47 47 String type = String.valueOf(map.get("type"));
... ... @@ -95,7 +95,7 @@ public class FastAndSlowServiceImpl extends BaseServiceImpl&lt;FastAndSlow, Long&gt; i
95 95 wb.setSheetName(i, ks.get(i));
96 96 }
97 97 //删除多余的sheet
98   - for(int i = ks.size(); i <31; i++){
  98 + for(int i = ks.size(); i <32; i++){
99 99 wb.removeSheetAt(ks.size());
100 100 }
101 101  
... ...
src/main/java/com/bsth/repository/LineRepository.java
1 1 package com.bsth.repository;
2 2  
  3 +import java.util.Date;
3 4 import java.util.List;
  5 +import java.util.Map;
4 6  
  7 +import org.springframework.data.jpa.repository.Modifying;
5 8 import org.springframework.data.jpa.repository.Query;
6 9 import org.springframework.stereotype.Repository;
  10 +import org.springframework.transaction.annotation.Transactional;
7 11  
8 12 import com.bsth.entity.Line;
9 13  
... ... @@ -24,8 +28,7 @@ import com.bsth.entity.Line;
24 28 */
25 29 @Repository
26 30 public interface LineRepository extends BaseRepository<Line, Integer> {
27   -
28   -
  31 +
29 32 /**
30 33 * 获取线路编码
31 34 *
... ... @@ -33,15 +36,31 @@ public interface LineRepository extends BaseRepository&lt;Line, Integer&gt; {
33 36 */
34 37 @Query(value = " SELECT IFNULL(num,0) as maxId from (SELECT MAX(id) as num FROM bsth_c_line) k ", nativeQuery = true)
35 38 public long selectMaxIdToLineCode();
36   -
  39 +
37 40 @Query(value = " SELECT l FROM Line l where l.name like ?1")
38 41 List<Line> findLine(String line);
39   -
  42 +
40 43 public Line findByLineCode(String string);
41   -
  44 +
42 45 @Query(value = " SELECT l FROM Line l where l.company like %?1% and l.brancheCompany like %?2% and l.lineCode like ?3")
43 46 public List<Line> findLineBygsBm(String gsBm, String fgsBm, String line);
44 47  
45 48 @Query("SELECT L FROM Line L where L.destroy=0")
46 49 List<Line> findAllService();
  50 +
  51 +
  52 + @Modifying
  53 + @Query(value = "UPDATE Line l set l.name=?1 , l.company=?2, l.brancheCompany=?3, "
  54 + + "l.level=?4, l.nature=?5, l.startStationName=?6, l.endStationName=?7, l.startStationFirstTime=?8, "
  55 + + "l.startStationEndTime=?9, l.endStationFirstTime=?10, l.endStationEndTime=?11, l.linePlayType=?12, "
  56 + + "l.openDate=?13, l.es=?14, l.shortName=?15, l.shanghaiLinecode=?16, l.eqLinecode=?17, l.startPhone=?18, "
  57 + + "l.endPhone=?19, l.carSumNumber=?20, l.hvacCarNumber=?21, l.ordCarNumber=?22, l.history=?23, "
  58 + + "l.descriptions=?24, l.destroy=?25, l.supperLine=?26, l.spacGrade=?27, l.warrantCar=?28 where "
  59 + + "l.lineCode=?29 ")
  60 + public int update(String name, String company, String brancheCompany, String level, String nature,
  61 + String startStationName, String endStationName, String startStationFirstTime, String startStationEndTime,
  62 + String endStationFirstTime, String endStationEndTime, Integer linePlayType, Date openDate, String es,
  63 + String shortName, String shanghaiLinecode, String eqLinecode, String startPhone, String endPhone,
  64 + Integer carSumNumber, Integer hvacCarNumber, Integer ordCarNumber, String history, String descriptions,
  65 + Integer destroy, Integer supperLine, Integer spacGrade, Integer warrantCar, String lineCode);
47 66 }
... ...
src/main/java/com/bsth/service/LineService.java
... ... @@ -36,4 +36,6 @@ public interface LineService extends BaseService&lt;Line, Integer&gt; {
36 36 Line findById(Integer id);
37 37  
38 38 String lineCodeVerification(String lineCode);
  39 +
  40 + Map<String, Object> update(Line l);
39 41 }
... ...
src/main/java/com/bsth/service/impl/LineServiceImpl.java
... ... @@ -5,7 +5,9 @@ import java.util.Map;
5 5  
6 6 import org.springframework.beans.factory.annotation.Autowired;
7 7 import org.springframework.stereotype.Service;
  8 +import org.springframework.transaction.annotation.Transactional;
8 9  
  10 +import com.bsth.common.ResponseCode;
9 11 import com.bsth.entity.Line;
10 12 import com.bsth.repository.LineRepository;
11 13 import com.bsth.service.LineService;
... ... @@ -27,11 +29,11 @@ import com.bsth.service.LineService;
27 29 */
28 30  
29 31 @Service
30   -public class LineServiceImpl extends BaseServiceImpl<Line, Integer> implements LineService{
31   -
  32 +public class LineServiceImpl extends BaseServiceImpl<Line, Integer> implements LineService {
  33 +
32 34 @Autowired
33 35 private LineRepository repository;
34   -
  36 +
35 37 /**
36 38 * 获取线路编码
37 39 *
... ... @@ -41,7 +43,7 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L
41 43 // TODO Auto-generated method stub
42 44 return repository.selectMaxIdToLineCode();
43 45 }
44   -
  46 +
45 47 @Override
46 48 public Line findByLineCode(String lineCode) {
47 49 return repository.findByLineCode(lineCode);
... ... @@ -57,10 +59,31 @@ public class LineServiceImpl extends BaseServiceImpl&lt;Line, Integer&gt; implements L
57 59 public String lineCodeVerification(String lineCode) {
58 60 String state = "true";
59 61 Line line = repository.findByLineCode(lineCode);
60   - if(line != null){
  62 + if (line != null) {
61 63 state = "false";
62 64 }
63 65 return state;
64 66 }
  67 +
  68 + @Transactional
  69 + @Override
  70 + public Map<String, Object> update(Line l) {
  71 + Map<String, Object> map = new HashMap<>();
  72 +
  73 + int status = repository.update(l.getName(), l.getCompany(), l.getBrancheCompany(), l.getLevel(), l.getNature(),
  74 + l.getStartStationName(), l.getEndStationName(), l.getStartStationFirstTime(),
  75 + l.getStartStationEndTime(), l.getEndStationFirstTime(), l.getEndStationEndTime(), l.getLinePlayType(),
  76 + l.getOpenDate(), l.getEs(), l.getShortName(), l.getShanghaiLinecode(), l.getEqLinecode(),
  77 + l.getStartPhone(), l.getEndPhone(), l.getCarSumNumber(), l.getHvacCarNumber(), l.getOrdCarNumber(),
  78 + l.getHistory(), l.getDescriptions(), l.getDestroy(), l.getSupperLine(), l.getSpacGrade(),
  79 + l.getWarrantCar(), l.getLineCode());
  80 + if (status==1) {
  81 + map.put("status", ResponseCode.SUCCESS);
  82 + } else {
  83 + map.put("status", ResponseCode.ERROR);
  84 + }
  85 +
  86 + return map;
  87 + }
65 88  
66 89 }
... ...
src/main/resources/datatools/ktrs/employeesConfigDataInput.ktr
... ... @@ -107,6 +107,30 @@
107 107 </notepad>
108 108 </notepads>
109 109 <connection>
  110 + <name>192.168.168.1_jwgl_dw</name>
  111 + <server>192.168.168.1</server>
  112 + <type>ORACLE</type>
  113 + <access>Native</access>
  114 + <database>orcl</database>
  115 + <port>1521</port>
  116 + <username>jwgl_dw</username>
  117 + <password>Encrypted 2be98afc86aa7f2e4cb13b977d2adabcd</password>
  118 + <servername/>
  119 + <data_tablespace/>
  120 + <index_tablespace/>
  121 + <attributes>
  122 + <attribute><code>FORCE_IDENTIFIERS_TO_LOWERCASE</code><attribute>N</attribute></attribute>
  123 + <attribute><code>FORCE_IDENTIFIERS_TO_UPPERCASE</code><attribute>N</attribute></attribute>
  124 + <attribute><code>IS_CLUSTERED</code><attribute>N</attribute></attribute>
  125 + <attribute><code>PORT_NUMBER</code><attribute>1521</attribute></attribute>
  126 + <attribute><code>PRESERVE_RESERVED_WORD_CASE</code><attribute>N</attribute></attribute>
  127 + <attribute><code>QUOTE_ALL_FIELDS</code><attribute>N</attribute></attribute>
  128 + <attribute><code>SUPPORTS_BOOLEAN_DATA_TYPE</code><attribute>Y</attribute></attribute>
  129 + <attribute><code>SUPPORTS_TIMESTAMP_DATA_TYPE</code><attribute>Y</attribute></attribute>
  130 + <attribute><code>USE_POOLING</code><attribute>N</attribute></attribute>
  131 + </attributes>
  132 + </connection>
  133 + <connection>
110 134 <name>bus_control_variable</name>
111 135 <server>&#x24;&#x7b;v_db_ip&#x7d;</server>
112 136 <type>MYSQL</type>
... ... @@ -276,8 +300,7 @@
276 300 <hop> <from>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</from><to>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</to><enabled>Y</enabled> </hop>
277 301 <hop> <from>&#x8fc7;&#x6ee4;&#x9a7e;&#x9a76;&#x5458;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
278 302 <hop> <from>&#x552e;&#x7968;&#x5458;id&#x67e5;&#x627e;</from><to>&#x63d2;&#x5165;&#x2f;&#x66f4;&#x65b0;bsth_c_s_ecinfo</to><enabled>Y</enabled> </hop>
279   - <hop> <from>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x5de5;&#x53f7;&#x6570;&#x636e;&#x5904;&#x7406;</to><enabled>Y</enabled> </hop>
280   - <hop> <from>&#x5de5;&#x53f7;&#x6570;&#x636e;&#x5904;&#x7406;</from><to>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
  303 + <hop> <from>&#x8fc7;&#x6ee4;&#x7ebf;&#x8def;id&#x4e3a;&#x7a7a;&#x8bb0;&#x5f55;</from><to>&#x9a7e;&#x9a76;&#x5458;id&#x67e5;&#x627e;</to><enabled>Y</enabled> </hop>
281 304 </order>
282 305 <step>
283 306 <name>&#x539f;&#x59cb;&#x7cfb;&#x7edf;&#x5bfc;&#x51fa;&#x7684;Excel&#x8f93;&#x5165;</name>
... ... @@ -465,12 +488,12 @@
465 488 </partitioning>
466 489 <connection>bus_control_variable</connection>
467 490 <rowlimit>1</rowlimit>
468   - <sql>select id as sid from bsth_c_personnel&#xa;where job_code like &#x3f; and personnel_name &#x3d; &#x3f;</sql>
  491 + <sql>select id as sid from bsth_c_personnel&#xa;where job_codeori &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>
469 492 <outer_join>Y</outer_join>
470 493 <replace_vars>N</replace_vars>
471 494 <parameter>
472 495 <field>
473   - <name>sgh_temp</name>
  496 + <name>&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;</name>
474 497 <type>String</type>
475 498 </field>
476 499 <field>
... ... @@ -524,27 +547,27 @@
524 547 <value>
525 548 <name>xl</name>
526 549 <rename>xlid</rename>
527   - <update>N</update>
  550 + <update>Y</update>
528 551 </value>
529 552 <value>
530 553 <name>dbbm</name>
531 554 <rename>&#x642d;&#x73ed;&#x7f16;&#x7801;</rename>
532   - <update>N</update>
  555 + <update>Y</update>
533 556 </value>
534 557 <value>
535 558 <name>jsy</name>
536 559 <rename>jid</rename>
537   - <update>N</update>
  560 + <update>Y</update>
538 561 </value>
539 562 <value>
540 563 <name>spy</name>
541 564 <rename>sid</rename>
542   - <update>N</update>
  565 + <update>Y</update>
543 566 </value>
544 567 <value>
545 568 <name>is_cancel</name>
546 569 <rename>isCancel</rename>
547   - <update>N</update>
  570 + <update>Y</update>
548 571 </value>
549 572 </lookup>
550 573 <cluster_schema/>
... ... @@ -700,8 +723,8 @@
700 723 </compare>
701 724 <cluster_schema/>
702 725 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
703   - <xloc>695</xloc>
704   - <yloc>45</yloc>
  726 + <xloc>604</xloc>
  727 + <yloc>46</yloc>
705 728 <draw>Y</draw>
706 729 </GUI>
707 730 </step>
... ... @@ -856,12 +879,12 @@
856 879 </partitioning>
857 880 <connection>bus_control_variable</connection>
858 881 <rowlimit>1</rowlimit>
859   - <sql>select id as jid from bsth_c_personnel&#xa;where job_code like &#x3f; and personnel_name &#x3d; &#x3f;</sql>
  882 + <sql>select id as jid from bsth_c_personnel&#xa;where job_codeori &#x3d; &#x3f; and personnel_name &#x3d; &#x3f;</sql>
860 883 <outer_join>Y</outer_join>
861 884 <replace_vars>N</replace_vars>
862 885 <parameter>
863 886 <field>
864   - <name>jgh_temp</name>
  887 + <name>&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;</name>
865 888 <type>String</type>
866 889 </field>
867 890 <field>
... ... @@ -871,44 +894,8 @@
871 894 </parameter>
872 895 <cluster_schema/>
873 896 <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
874   - <xloc>694</xloc>
875   - <yloc>141</yloc>
876   - <draw>Y</draw>
877   - </GUI>
878   - </step>
879   -
880   - <step>
881   - <name>&#x5de5;&#x53f7;&#x6570;&#x636e;&#x5904;&#x7406;</name>
882   - <type>ScriptValueMod</type>
883   - <description/>
884   - <distribute>Y</distribute>
885   - <custom_distribution/>
886   - <copies>1</copies>
887   - <partitioning>
888   - <method>none</method>
889   - <schema_name/>
890   - </partitioning>
891   - <compatible>N</compatible>
892   - <optimizationLevel>9</optimizationLevel>
893   - <jsScripts> <jsScript> <jsScript_type>0</jsScript_type>
894   - <jsScript_name>Script 1</jsScript_name>
895   - <jsScript_script>&#x2f;&#x2f; &#x56e0;&#x4e3a;&#x6570;&#x636e;&#x5e93;&#x4e2d;&#x7684;&#x6570;&#x636e;&#x5de5;&#x53f7;&#x53ef;&#x80fd;&#x5e26;suffix&#xff0c;&#x5982;55-12345678&#xa;&#x2f;&#x2f; &#x6240;&#x4ee5;&#x4e4b;&#x540e;&#x7684;&#x5339;&#x914d;&#x4f7f;&#x7528;like&#xff0c;&#x5219;&#x5143;&#x6570;&#x636e;&#x9700;&#x8981;&#x52a0;&#x4e0a;&#x25; &#x25;&#x7b26;&#x53f7;&#xa;&#xa;var jgh_temp&#x3b;&#xa;var sgh_temp&#x3b;&#xa;&#xa;if &#x28;&#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;&#x29; &#x7b;&#xa; jgh_temp &#x3d; &#x27;&#x25;&#x27; &#x2b; &#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7; &#x2b; &#x27;&#x25;&#x27;&#x3b;&#xa;&#x7d; else &#x7b;&#xa; jgh_temp &#x3d; &#x9a7e;&#x9a76;&#x5458;&#x5de5;&#x53f7;&#x3b;&#xa;&#x7d;&#xa;&#xa;if &#x28;&#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;&#x29; &#x7b;&#xa; sgh_temp &#x3d; &#x27;&#x25;&#x27; &#x2b; &#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7; &#x2b; &#x27;&#x25;&#x27;&#x3b;&#xa;&#x7d; else &#x7b;&#xa; sgh_temp &#x3d; &#x552e;&#x7968;&#x5458;&#x5de5;&#x53f7;&#x3b;&#xa;&#x7d;</jsScript_script>
896   - </jsScript> </jsScripts> <fields> <field> <name>jgh_temp</name>
897   - <rename>jgh_temp</rename>
898   - <type>String</type>
899   - <length>-1</length>
900   - <precision>-1</precision>
901   - <replace>N</replace>
902   - </field> <field> <name>sgh_temp</name>
903   - <rename>sgh_temp</rename>
904   - <type>String</type>
905   - <length>-1</length>
906   - <precision>-1</precision>
907   - <replace>N</replace>
908   - </field> </fields> <cluster_schema/>
909   - <remotesteps> <input> </input> <output> </output> </remotesteps> <GUI>
910   - <xloc>548</xloc>
911   - <yloc>47</yloc>
  897 + <xloc>603</xloc>
  898 + <yloc>142</yloc>
912 899 <draw>Y</draw>
913 900 </GUI>
914 901 </step>
... ...
src/main/resources/datatools/ktrs/employeesConfigDataOutput.ktr
... ... @@ -435,7 +435,7 @@
435 435 </partitioning>
436 436 <connection>bus_control_variable</connection>
437 437 <rowlimit>1</rowlimit>
438   - <sql>select job_code as scode, personnel_name as sname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>
  438 + <sql>select job_codeori as scode, personnel_name as sname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>
439 439 <outer_join>Y</outer_join>
440 440 <replace_vars>N</replace_vars>
441 441 <parameter>
... ... @@ -591,7 +591,7 @@
591 591 </partitioning>
592 592 <connection>bus_control_variable</connection>
593 593 <rowlimit>1</rowlimit>
594   - <sql>select job_code as jcode, personnel_name as jname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>
  594 + <sql>select job_codeori as jcode, personnel_name as jname from bsth_c_personnel&#xa;where id &#x3d; &#x3f;</sql>
595 595 <outer_join>Y</outer_join>
596 596 <replace_vars>N</replace_vars>
597 597 <parameter>
... ...
src/main/resources/static/pages/base/line/js/line-edit-form.js
... ... @@ -9,7 +9,8 @@
9 9  
10 10  
11 11 !function(){
12   -
  12 + // 关闭左侧栏
  13 + if (!$('body').hasClass('page-sidebar-closed')) {$('.menu-toggler.sidebar-toggler').click();}
13 14 /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */
14 15 $('#openDateInput').datetimepicker({format : 'YYYY-MM-DD', locale: 'zh-cn'});
15 16 /** 起始站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */
... ...
src/main/resources/static/pages/base/station/js/station-list-edit.js
... ... @@ -16,9 +16,6 @@
16 16 $('#lineNameInput').val(no[1]);
17 17 // 获取站点对象信息
18 18 var editStation = {};
19   - /*PositionsPublicFunctions.getStationRouteInfo(id,function(r) {
20   - editStation = r;
21   - });*/
22 19 $.ajax({
23 20 url: "/stationroute/findStationRouteInfo", //请求地址
24 21 type: "Get",
... ... @@ -29,74 +26,77 @@
29 26 editStation = result[0];
30 27 }
31 28 });
32   - // 初始化表单值
33   - PositionsPublicFunctions.setListEditFrom(editStation);
34   - var initzdlyP = {'lineCode_eq':editStation.stationRouteLIneCode,'destroy_eq':0,'directions_eq':editStation.stationRoutedirections};
35   - initSelect(initzdlyP);
  29 + setTimeout(function(){
  30 + // 初始化表单值
  31 + PositionsPublicFunctions.setListEditFrom(editStation);
  32 +
  33 + var initzdlyP = {'lineCode_eq':editStation.stationRouteLIneCode,'destroy_eq':0,'directions_eq':editStation.stationRoutedirections};
  34 + initSelect(initzdlyP);
  35 +
  36 + // 编辑表单元素
  37 + var form = $('#list_edit_station_form');
  38 + // 获取错误提示元素
  39 + var error = $('.alert-danger', form);
  40 + // 提交数据按钮事件
  41 + $('#editStationButton').on('click', function() {
  42 + // 表单提交
  43 + form.submit();
  44 + });
  45 + // 表单验证
  46 + form.validate({
  47 + errorElement : 'span',
  48 + errorClass : 'help-block help-block-error',
  49 + focusInvalid : false,
  50 + rules : {
  51 + 'stationName' : {required : true},// 站点路由名称 必填项
  52 + 'stationCod': {required : true,},// 站点编码 必填项
  53 + 'directions' : {required : true,dirIs : true},// 站点方向 必填项 必填项
  54 + 'stationRouteCode' : {isStart : true},// 站点序号
  55 + 'bJwpoints' : {required : true},// 经纬度坐标点 必填项
  56 + 'shapesType' : {required : true},// 几何图形类型 必填项
  57 + 'radius' : {required : true},// 圆形半径 必填项
  58 + 'destroy' : {required : true},// 是否撤销 必填项
  59 + 'toTime' : {number : true},// 到站时间 必须输入合法的数字(负数,小数)。
  60 + 'distances' : {number : true},// 到站距离 // 到站距离
  61 + 'descriptions' : {maxlength: 150}// 描述与说明 最大长度
  62 + },
  63 + invalidHandler : function(event, validator) {
  64 + error.show();
  65 + App.scrollTo(error, -200);
  66 + },
  67 + highlight : function(element) {
  68 + $(element).closest('.form-group').addClass('has-error');
  69 + },
  70 + unhighlight : function(element) {
  71 + $(element).closest('.form-group').removeClass('has-error');
  72 + },
  73 + success : function(label) {
  74 + label.closest('.form-group').removeClass('has-error');
  75 + },
  76 + submitHandler : function(f) {
  77 + error.hide();
  78 + var params = form.serializeJSON();
  79 + /*if(params.shapesType=='圆形')
  80 + params.shapesType = 'r';
  81 + else if(params.shapesType=='多边形')
  82 + params.shapesType = 'd';*/
  83 + if(params.stationRouteCode=='请选择...')
  84 + params.stationRouteCode='';
  85 + PositionsPublicFunctions.stationUpdate(params,function(resuntDate) {
  86 + if(resuntDate.status=='SUCCESS') {
  87 + // 弹出添加成功提示消息
  88 + layer.msg('修改成功...');
  89 + }else {
  90 + // 弹出添加失败提示消息
  91 + layer.msg('修改失败...');
  92 + }
  93 + //返回站点信息页面
  94 + loadPage('list.html');
  95 + });
  96 + }
  97 + });
  98 + },500);
36 99  
37   - // 编辑表单元素
38   - var form = $('#list_edit_station_form');
39   - // 获取错误提示元素
40   - var error = $('.alert-danger', form);
41   - // 提交数据按钮事件
42   - $('#editStationButton').on('click', function() {
43   - // 表单提交
44   - form.submit();
45   - });
46   - // 表单验证
47   - form.validate({
48   - errorElement : 'span',
49   - errorClass : 'help-block help-block-error',
50   - focusInvalid : false,
51   - rules : {
52   - 'stationName' : {required : true},// 站点路由名称 必填项
53   - 'stationCod': {required : true,},// 站点编码 必填项
54   - 'directions' : {required : true,dirIs : true},// 站点方向 必填项 必填项
55   - 'stationRouteCode' : {isStart : true},// 站点序号
56   - 'stationMark' : {required : true},// 站点类型 必填项
57   - 'bJwpoints' : {required : true},// 经纬度坐标点 必填项
58   - 'shapesType' : {required : true},// 几何图形类型 必填项
59   - 'radius' : {required : true},// 圆形半径 必填项
60   - 'destroy' : {required : true},// 是否撤销 必填项
61   - 'toTime' : {number : true},// 到站时间 必须输入合法的数字(负数,小数)。
62   - 'distances' : {number : true},// 到站距离 // 到站距离
63   - 'descriptions' : {maxlength: 150}// 描述与说明 最大长度
64   - },
65   - invalidHandler : function(event, validator) {
66   - error.show();
67   - App.scrollTo(error, -200);
68   - },
69   - highlight : function(element) {
70   - $(element).closest('.form-group').addClass('has-error');
71   - },
72   - unhighlight : function(element) {
73   - $(element).closest('.form-group').removeClass('has-error');
74   - },
75   - success : function(label) {
76   - label.closest('.form-group').removeClass('has-error');
77   - },
78   - submitHandler : function(f) {
79   - error.hide();
80   - var params = form.serializeJSON();
81   - /*if(params.shapesType=='圆形')
82   - params.shapesType = 'r';
83   - else if(params.shapesType=='多边形')
84   - params.shapesType = 'd';*/
85   - if(params.stationRouteCode=='请选择...')
86   - params.stationRouteCode='';
87   - PositionsPublicFunctions.stationUpdate(params,function(resuntDate) {
88   - if(resuntDate.status=='SUCCESS') {
89   - // 弹出添加成功提示消息
90   - layer.msg('修改成功...');
91   - }else {
92   - // 弹出添加失败提示消息
93   - layer.msg('修改失败...');
94   - }
95   - //返回站点信息页面
96   - loadPage('list.html');
97   - });
98   - }
99   - });
100 100 // 站点序号值改变事件
101 101 $('#stationrouteSelect').on('change',function() {
102 102 var stationRValue = $('#stationrouteSelect').val();
... ...
src/main/resources/static/pages/base/station/js/station-positions-function.js
... ... @@ -154,12 +154,12 @@ var PositionsPublicFunctions = function () {
154 154 $('#descriptionsTextarea').val(stationObj.stationRouteDescriptions);
155 155 },
156 156 setListEditFrom : function(stationObj) {
157   - // 图形坐标点集合(百度坐标)
  157 + // WGS坐标点图形集合
158 158 $('#bPolygonGridInput').val(stationObj.stationBPolyonGrid);
159 159 // 百度地图经纬度坐标中心点
160 160 $('#bJwpointsInput').val(stationObj.stationJwpoints);
161   - // WGS坐标点图形集合
162   - $('#bPolygonGridInput').val(stationObj.stationGPloyonGrid);
  161 + // 图形坐标点集合(百度坐标)
  162 +// $('#bPolygonGridInput').val(stationObj.stationGPloyonGrid);
163 163 // 城建坐标x
164 164 $('#xInput').val(stationObj.stationGlonx);
165 165 // 城建坐标y
... ... @@ -169,14 +169,11 @@ var PositionsPublicFunctions = function () {
169 169 // 获取半径元素,并添加值
170 170 $('#radiusInput').val(stationObj.stationRadius);
171 171 // 线路ID
172   - $('#stationRouteLineInput').val(stationObj.stationRouteLIneCode);
  172 + $('#stationRouteLineInput').val(stationObj.stationRouteLine);
173 173 // 站点编码
174 174 $('#stationCodInput').val(stationObj.stationCode);
175   -
176 175 // 线路编码
177   - $('#lineCodeInput').val(stationObj.stationRouteCode);
178   - /*// 线路名称
179   - $('#lineNameInput').val();*/
  176 + $('#lineCodeInput').val(stationObj.stationRouteLIneCode);
180 177 // 站点ID
181 178 $('#StationCodeInput').val(stationObj.stationRouteStation);
182 179 // 站点路由ID
... ...
src/main/resources/static/pages/base/station/list_edit.html
... ... @@ -81,7 +81,6 @@
81 81 </label>
82 82 <div class="col-md-4">
83 83 <input type="text" class="form-control" name="lineName" id="lineNameInput" placeholder="线路名称" readonly="readonly" />
84   - <span class="help-block"> 例如 :浦东88路 </span>
85 84 </div>
86 85 </div>
87 86 <!-- 线路名称 (* 必填项) END -->
... ... @@ -157,7 +156,7 @@
157 156 <!-- 站点序号 -->
158 157 <div class="col-md-6">
159 158 <label class="control-label col-md-5">
160   - <span class="required"> * </span>上一站点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
  159 + <span class="required"> </span>上一站点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
161 160 </label>
162 161 <div class="col-md-4">
163 162 <select name="stationRouteCode" class="form-control" id="stationrouteSelect" style="width:100%"></select>
... ... @@ -205,7 +204,7 @@
205 204 <div class="form-group">
206 205 <!-- 道路编码-->
207 206 <div class="col-md-6">
208   - <label class="control-label col-md-5"><span class="required"> * </span>
  207 + <label class="control-label col-md-5"><span class="required"> </span>
209 208 道路编码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
210 209 </label>
211 210 <div class="col-md-4">
... ... @@ -215,7 +214,7 @@
215 214  
216 215 <!-- 到站时间 -->
217 216 <div class="col-md-6">
218   - <label class="control-label col-md-5"><span class="required"> * </span>
  217 + <label class="control-label col-md-5"><span class="required"></span>
219 218 到站时间 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </label>
220 219 <div class="col-md-4">
221 220 <input type="text" class="form-control" name="toTime" id="toTimeInput" placeholder="到站时间">
... ... @@ -229,7 +228,7 @@
229 228 <div class="form-group">
230 229 <!-- 到站距离 -->
231 230 <div class="col-md-6">
232   - <label class="control-label col-md-5"><span class="required"> * </span>
  231 + <label class="control-label col-md-5"><span class="required"> </span>
233 232 到站距离&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label>
234 233 <div class="col-md-4">
235 234 <input type="text" class="form-control" name="distances" id="distancesInput" placeholder="到站距离">
... ... @@ -239,10 +238,10 @@
239 238  
240 239 <!-- 版本号 -->
241 240 <div class="col-md-6">
242   - <label class="control-label col-md-5"><span class="required"> * </span> 版本号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
  241 + <label class="control-label col-md-5"><span class="required"> </span> 版本号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
243 242 </label>
244 243 <div class="col-md-4">
245   - <input type="text" class="form-control" name="versions" value='1' Readonly>
  244 + <input type="text" class="form-control" name="versions" >
246 245 </div>
247 246 </div>
248 247 </div>
... ... @@ -252,7 +251,7 @@
252 251 <div class="form-group">
253 252 <!-- 描述/说明 -->
254 253 <div class="col-md-6">
255   - <label class="control-label col-md-5"><span class="required"> * </span>描述/说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
  254 + <label class="control-label col-md-5"><span class="required"></span>描述/说明&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
256 255 </label>
257 256 <div class="col-md-4">
258 257 <textarea class="form-control" rows="3" name="descriptions" id="descriptionsTextarea" placeholder="描述/说明"></textarea>
... ...
src/main/resources/static/pages/base/timesmodel/gantt.html
... ... @@ -119,8 +119,9 @@
119 119 <script src="/pages/base/timesmodel/js/raty/lib/jquery.raty.js"></script>
120 120 <script src="/pages/base/timesmodel/js/ContextJS/js/context.js"></script>
121 121 <script src="/pages/base/timesmodel/js/base-fun.js"></script>
122   -<script src="/pages/base/timesmodel/js/strategy/strategy-paramter.js"></script>
123   -<script src="/pages/base/timesmodel/js/strategy/strategy-util.js"></script>
  122 +<script src="/pages/base/timesmodel/js/strategy/StrategyUtils.js"></script>
  123 +<script src="/pages/base/timesmodel/js/strategy/BcObj.js"></script>
  124 +<script src="/pages/base/timesmodel/js/strategy/ParameterObj.js"></script>
124 125 <script src="/pages/base/timesmodel/js/strategy/strategy-headway.js"></script>
125 126 <script src="/pages/base/timesmodel/js/d3.relationshipgraph.js"></script>
126 127 <script src="/pages/base/timesmodel/js/errorinfo.js"></script>
... ...
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
... ... @@ -524,7 +524,8 @@ var SKBFormWizard = function() {
524 524 // 发车间隙分析用参数
525 525 'fcjx': {required: true}, // 时段发车间隙,TODO:貌似没发启用form验证
526 526 'stt': {required: true}, // 停站类型,TODO:貌似没发启用form验证
527   - 'gfjypcs': {required : true,number : true,digits: true} // 高峰建议配车数
  527 + 'gfjypcs': {required : true,number : true,digits: true}, // 高峰建议配车数
  528 + 'jblps': {required : true,number : true,digits: true} // 加班车路牌数
528 529 },
529 530  
530 531 /**
... ...
src/main/resources/static/pages/base/timesmodel/js/gantt.js
... ... @@ -48,6 +48,10 @@
48 48 var dataMap = argsMap(map,dirA,bcTypeArr,seMap);
49 49 // 8、定义最大车辆数与停站时间.
50 50 var CSMap = null,data = null;
  51 +
  52 + // 创建ParameterObj
  53 + var _paramObj = StrategyUtils.getFactory().createParameterObj(map, dataMap);
  54 +
51 55 if(map.baseRes== '0') {
52 56 CSMap = getMaxCarAndStopSpace0(map,seMap);
53 57 // 发车间隙
... ... @@ -58,7 +62,7 @@
58 62 map.fcjx = CSMap.fcjx;
59 63 }else if (map.baseRes == '2') {
60 64 // TODO:之后可能有新的参数加入
61   - map.clzs = map.gfjypcs // 使用高峰建议配车数作为车辆总数
  65 + map.clzs = StrategyUtils.calcuClzx(_paramObj);
62 66 CSMap = getMaxCarAndStopSpace1(map);
63 67  
64 68 }
... ... @@ -78,7 +82,7 @@
78 82 // TODO:绘制gantt图表
79 83 // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置
80 84 // TODO:CSMap.maxCar 之后要设定一下的
81   - data = StrategyHeadway.BXPplaceClassesTime03(stopAraay,CSMap.maxCar,map,seMap,dataMap);
  85 + data = StrategyHeadway.BXPplaceClassesTime03(_paramObj, CSMap.maxCar);
82 86 }
83 87  
84 88 }else {
... ...
src/main/resources/static/pages/base/timesmodel/js/strategy/BcObj.js 0 → 100644
  1 +/**
  2 + * 班次类型对象(最后转换成显示用bc对象)
  3 + * @param bcType
  4 + * @param isUp
  5 + * @param lp
  6 + * @param fcno
  7 + * @param fcTimeObj
  8 + * @param paramObj
  9 + * @returns {{}}
  10 + * @constructor
  11 + */
  12 +var BcObj = function(bcType, isUp, lp, fcno, fcTimeObj, paramObj) {
  13 +
  14 + //---------- 内部属性 ----------//
  15 + var _bcType = bcType; // 班次类型(normal,in,out等)
  16 + var _isUp = isUp; // true表示上行,false表示下行
  17 + var _lp = lp; // 路牌
  18 + var _fcno = fcno; // 发车顺序号
  19 +
  20 + // 计算的属性,TODO:还有其他属性
  21 + // 上标线里属于第几圈(本班次方向和标线方向一致,才有意义)
  22 + var qCount;
  23 +
  24 + // 班次里程
  25 + var _bclc = StrategyUtils.calcuTravelLcNumber(_isUp, _bcType, paramObj);
  26 + // 发车时间
  27 + var _fcsjObj = moment(fcTimeObj);
  28 + // 班次时间
  29 + var _bcsj = StrategyUtils.calcuTravelTime(_fcsjObj, _isUp, paramObj);
  30 + // 到达时间
  31 + var _arrsj = StrategyUtils.addMinute(_fcsjObj, _bcsj);
  32 + // 到达后的停站时间(使用到达时间判定)
  33 + var _stopTime = StrategyUtils.calcuFixedStopNumber(_arrsj, !_isUp, paramObj);
  34 +
  35 + return {
  36 + /**
  37 + * 是否上行。
  38 + * @returns boolean
  39 + */
  40 + isUp: function() {
  41 + return _isUp;
  42 + },
  43 + /**
  44 + * 获取发车时间。
  45 + * @returns {*|moment.Moment}
  46 + */
  47 + getFcTimeObj: function() {
  48 + return _fcsjObj;
  49 + },
  50 + /**
  51 + * 获取班次时间。
  52 + */
  53 + getBcTime: function() {
  54 + return _bcsj;
  55 + },
  56 + /**
  57 + * 获取停站时间。
  58 + * @returns {*}
  59 + */
  60 + getStopTime: function() {
  61 + return _stopTime;
  62 + },
  63 +
  64 + /**
  65 + * 转换成显示用班次对象。
  66 + */
  67 + toGanttBcObj: function() {
  68 + var _bcObj = {
  69 + parent: _lp,
  70 + lpNo: _lp,
  71 + lp: null,
  72 + lpName: _lp,
  73 + lpType: '普通路牌',
  74 + bcType: _bcType,
  75 + fcno: _fcno,
  76 + isfb: 0,
  77 + isSwitchXl: null,
  78 + bz: null
  79 + };
  80 +
  81 + // 线路上下行
  82 + _bcObj.xlDir = _isUp ? "relationshipGraph-up" : "relationshipGraph-down";
  83 +
  84 + // 里程
  85 + _bcObj.jhlc = _bclc;
  86 +
  87 + // 停车场
  88 + _bcObj.tcc = paramObj.getTccId();
  89 +
  90 + // 时刻表
  91 + _bcObj.ttinfo = paramObj.getTTinfoId();
  92 +
  93 + // 线路
  94 + _bcObj.xl = paramObj.getXlId();
  95 +
  96 + // 起点站、终点站
  97 + _bcObj.qdz = _isUp ? paramObj.getUpQdzObj().id : paramObj.getDownQdzObj().id;
  98 + _bcObj.zdz = _isUp ? paramObj.getUpZdzObj().id : paramObj.getDownZdzObj().id;
  99 +
  100 + // 发车时间,行驶时间,到达时间,停站时间
  101 + _bcObj.fcsj = _fcsjObj.format("HH:mm");
  102 + _bcObj.bcsj = _bcsj;
  103 + _bcObj.ARRIVALTIME = _arrsj.format("HH:mm");
  104 + _bcObj.STOPTIME = _stopTime;
  105 +
  106 + return _bcObj;
  107 + }
  108 + };
  109 +};
0 110 \ No newline at end of file
... ...
src/main/resources/static/pages/base/timesmodel/js/strategy/ParameterObj.js 0 → 100644
  1 +/**
  2 + * 包装表单参数为内部参数对象。
  3 + * @param formMap 表单form参数map
  4 + * @param dataMap
  5 + * @constructor
  6 + *
  7 + * 注意:moment是mutable,所有的moment操作都会改变原有对象的值,
  8 + * 所以所有的操作都要小心处理。
  9 + */
  10 +var ParameterObj = function(formMap, dataMap) {
  11 + // 内部保存的form参数
  12 + var _formMap = formMap;
  13 + // 计算行驶时间对象
  14 + var _travelTimeObj_fun = function() {
  15 + var upMoningPeakTravelTime =
  16 + isNaN(_formMap.earlyUpTime) ?
  17 + parseInt(_formMap.upTravelTime) :
  18 + parseInt(_formMap.earlyUpTime);
  19 + var downMoningPeakTravelTime =
  20 + isNaN(_formMap.earlyDownTime) ?
  21 + parseInt(_formMap.downTravelTime) :
  22 + parseInt(_formMap.earlyDownTime);
  23 + var upEveningPeakTravelTime =
  24 + isNaN(_formMap.lateUpTime) ?
  25 + parseInt(_formMap.upTravelTime) :
  26 + parseInt(_formMap.lateUpTime);
  27 + var downEveningPeakTravelTime =
  28 + isNaN(_formMap.lateDownTime) ?
  29 + parseInt(_formMap.downTravelTime) :
  30 + parseInt(_formMap.lateDownTime);
  31 + var upTroughTravelTime =
  32 + isNaN(_formMap.troughUpTime) ?
  33 + parseInt(_formMap.upTravelTime) :
  34 + parseInt(_formMap.troughUpTime);
  35 + var downTroughTravelTime =
  36 + isNaN(_formMap.troughDownTime) ?
  37 + parseInt(_formMap.downTravelTime) :
  38 + parseInt(_formMap.troughDownTime);
  39 +
  40 + return { // TODO:暂时获取标准信息,之后改成历史数据,可能需要使用promise封装
  41 + "moningpeak": [
  42 + upMoningPeakTravelTime,
  43 + downMoningPeakTravelTime
  44 + ],
  45 + "eveningpeak": [
  46 + upEveningPeakTravelTime,
  47 + downEveningPeakTravelTime
  48 + ],
  49 + "trough": [
  50 + upTroughTravelTime,
  51 + downTroughTravelTime
  52 + ]
  53 + }
  54 + };
  55 + var _travelTimeObj = _travelTimeObj_fun();
  56 +
  57 + // 计算行驶里程对象
  58 + var _travelLcObj_fun = function() {
  59 + return [
  60 + { // 上行里程
  61 + "normalLc": isNaN(_formMap.upMileage) ? 0 : parseFloat(_formMap.upMileage),
  62 + "inLc": isNaN(_formMap.upInMileage) ? 0 : parseFloat(_formMap.upInMileage),
  63 + "outLc": isNaN(_formMap.upOutMileage) ? 0 : parseFloat(_formMap.upOutMileage)
  64 + },
  65 + { // 下行里程
  66 + "normalLc": isNaN(_formMap.downMileage) ? 0 : parseFloat(_formMap.downMileage),
  67 + "inLc": isNaN(_formMap.downInMileage) ? 0 : parseFloat(_formMap.downInMileage),
  68 + "outLc": isNaN(_formMap.downOutMileage) ? 0 : parseFloat(_formMap.downOutMileage)
  69 + }
  70 + ];
  71 + };
  72 + var _travelLcObj = _travelLcObj_fun();
  73 +
  74 + // 计算首班车,末班车行驶时间字符串
  75 + var _firstLastDepartureTimeStrObj_fun = function() {
  76 + return {
  77 + up: { // 上行
  78 + firstVehicleDepartureTimeStr: _formMap.startStationFirstTime,
  79 + lastVehicleDepartureTimeStr: _formMap.startStationEndTime
  80 + },
  81 + down: { // 下行
  82 + firstVehicleDepartureTimeStr: _formMap.endStationFirstTime,
  83 + lastVehicleDepartureTimeStr: _formMap.endStationEndTime
  84 + }
  85 + };
  86 + };
  87 + var _firstLastDepartureTimeStrObj = _firstLastDepartureTimeStrObj_fun();
  88 +
  89 + // 计算时间段划分对象
  90 + var _timeIntervalObj_fun = function() {
  91 + return {
  92 + moningPeakTimeStrs: {
  93 + start: _formMap.earlyStartTime,
  94 + end: _formMap.earlyEndTime
  95 + },
  96 + eveningPeakTimeStrs: {
  97 + start: _formMap.lateStartTime,
  98 + end: _formMap.lateEndTime
  99 + }
  100 +
  101 + // TODO:其他时间段以后再加
  102 + };
  103 + };
  104 + var _timeIntervalObj = _timeIntervalObj_fun();
  105 +
  106 + // 计算各个时段的发车间隙
  107 + var _fcjxIntervalObj_fun = function() {
  108 + var _fcjxes = _formMap.fcjx.split(",");
  109 + var _rtn = {
  110 + mpeakfcjx : {}, // 早高峰
  111 + epeakfcjx : {}, // 晚高峰
  112 + troughfcjx: {} //低谷
  113 + };
  114 + var _fcjx = [];
  115 + var i = 0;
  116 +
  117 + // TODO:这里按照顺序判定发车间隔
  118 + // 1、早高峰间隙
  119 + // 2、晚高峰间隙
  120 + // 3、早低谷
  121 + // 4、平峰
  122 + // 5、晚低谷
  123 +
  124 + // 至少3个,系统暂时使用3个,有最小间隔,有最大间隔
  125 + if (_fcjxes.length < 3) {
  126 + alert("发车间隙至少3个(早高峰,晚高峰,低谷)");
  127 + throw "发车间隙至少3个(早高峰,晚高峰,低谷)";
  128 + } else {
  129 + for (i = 0; i < 3; i++) {
  130 + _fcjx = _fcjxes[i].split("/");
  131 + if (i == 0) {
  132 + _rtn.mpeakfcjx.min = parseInt(_fcjx[2].split("-")[0]);
  133 + _rtn.mpeakfcjx.max = parseInt(_fcjx[2].split("-")[1]);
  134 + } else if (i == 1) {
  135 + _rtn.epeakfcjx.min = parseInt(_fcjx[2].split("-")[0]);
  136 + _rtn.epeakfcjx.max = parseInt(_fcjx[2].split("-")[1]);
  137 + } else {
  138 + _rtn.troughfcjx.min = parseInt(_fcjx[2].split("-")[0]);
  139 + _rtn.troughfcjx.max = parseInt(_fcjx[2].split("-")[1]);
  140 + }
  141 + }
  142 + }
  143 +
  144 + return _rtn;
  145 + };
  146 + var _fcjxIntervalObj = _fcjxIntervalObj_fun();
  147 +
  148 + // 获取停站类型
  149 + var _stopTypeObj_fun = function() {
  150 + var isMasterStop = false; // 是否主站停
  151 + var isMasterUpStop = false; // 主站停是否上行站点
  152 + if (_formMap) {
  153 + var fm_temp = _formMap.stt.split("/");
  154 + if (fm_temp.length == 1) { // 双向停站
  155 + isMasterStop = false;
  156 + } else {
  157 + isMasterStop = true;
  158 + if (fm_temp[1] == "0") {
  159 + isMasterUpStop = true;
  160 + } else {
  161 + isMasterUpStop = false;
  162 + }
  163 + }
  164 + } else {
  165 + throw "停站类型没有选择!";
  166 + }
  167 +
  168 + return {
  169 + isMasterStop: isMasterStop,
  170 + isMasterUpStop: isMasterUpStop
  171 + }
  172 + };
  173 + var _stopTypeObj = _stopTypeObj_fun();
  174 +
  175 + // 计算线路对象
  176 + var _xlObj_fun = function() {
  177 + return { // TODO:其他属性再议
  178 + xl: {
  179 + id: _formMap.lineName.split('_')[0]
  180 + }
  181 + };
  182 + };
  183 + var _xlObj = _xlObj_fun();
  184 +
  185 + // 计算停车场对象
  186 + var _parkObj_fun = function() {
  187 + return { // TODO:其他属性再议
  188 + park: {
  189 + id: _formMap.tcc_id
  190 + }
  191 + };
  192 + };
  193 + var _parkObj = _parkObj_fun();
  194 +
  195 + // 计算时刻表对象
  196 + var _ttInfoObj_fun = function() {
  197 + return { // TODO:其他属性再议
  198 + ttinfo: {
  199 + id: _formMap.skbName
  200 + }
  201 + };
  202 + };
  203 + var _ttInfoObj = _ttInfoObj_fun();
  204 +
  205 + // 计算起点站终点站对象
  206 + var _startEndStopObj_fun = function() {
  207 + return { // TODO:其他属性再议
  208 + up: {
  209 + qdz: { // 起点站
  210 + id: dataMap.qdzArr[0]
  211 + },
  212 + zdz: { // 终点站
  213 + id: dataMap.zdzArr[0]
  214 + }
  215 + },
  216 + down: {
  217 + qdz: { // 起点站
  218 + id: dataMap.qdzArr[1]
  219 + },
  220 + zdz: { // 终点站
  221 + id: dataMap.zdzArr[1]
  222 + }
  223 + }
  224 +
  225 + };
  226 + };
  227 + var _startEndStopObj = _startEndStopObj_fun();
  228 +
  229 + return {
  230 + /**
  231 + * 重置内部form参数。
  232 + * @param formMap
  233 + */
  234 + reset: function(formMap) {
  235 + _formMap = formMap;
  236 +
  237 + // 首班车,末班车行驶时间字符串
  238 + _firstLastDepartureTimeStrObj = _firstLastDepartureTimeStrObj_fun();
  239 + // 行驶时间对象
  240 + _travelTimeObj = _travelTimeObj_fun();
  241 + // 行驶里程对象
  242 + _travelLcObj = _travelLcObj_fun();
  243 + // 时间段划分对象
  244 + _timeIntervalObj = _timeIntervalObj_fun();
  245 + // 各个时段的发车间隙
  246 + _fcjxIntervalObj = _fcjxIntervalObj_fun();
  247 + // 停站类型
  248 + _stopTypeObj = _stopTypeObj_fun();
  249 + // 线路对象
  250 + _xlObj = _xlObj_fun();
  251 + // 停车场对象
  252 + _parkObj = _parkObj_fun();
  253 + // 时刻表对象
  254 + _ttInfoObj = _ttInfoObj_fun();
  255 + // 起点站终点站对象
  256 + _startEndStopObj = _startEndStopObj_fun();
  257 +
  258 + // TODO:其他再议
  259 + },
  260 +
  261 + //------------ 获取首班末班时间 ------------//
  262 + /**
  263 + * 获取上行首班时间对象。
  264 + * @return moment obj
  265 + */
  266 + getUpFirstDTimeObj: function() {
  267 + return StrategyUtils.toTimeObj(
  268 + _firstLastDepartureTimeStrObj.up.firstVehicleDepartureTimeStr
  269 + );
  270 + },
  271 + /**
  272 + * 获取上行末班时间对象。
  273 + * @return moment obj
  274 + */
  275 + getUpLastDtimeObj: function() {
  276 + return StrategyUtils.toTimeObj(
  277 + _firstLastDepartureTimeStrObj.up.lastVehicleDepartureTimeStr
  278 + );
  279 + },
  280 + /**
  281 + * 获取下行首班时间对象。
  282 + * @return moment obj
  283 + */
  284 + getDownFirstDTimeObj: function() {
  285 + return StrategyUtils.toTimeObj(
  286 + _firstLastDepartureTimeStrObj.down.firstVehicleDepartureTimeStr
  287 + );
  288 + },
  289 + /**
  290 + * 获取下行末班时间对象。
  291 + * @return moment obj
  292 + */
  293 + getDownLastDTimeObj: function() {
  294 + return StrategyUtils.toTimeObj(
  295 + _firstLastDepartureTimeStrObj.down.lastVehicleDepartureTimeStr
  296 + );
  297 + },
  298 +
  299 + //-------------- 获取行驶时间 ----------------//
  300 + /**
  301 + * 获取上行早高峰行驶时间。
  302 + * @returns int number
  303 + */
  304 + getUpMPeakTime: function() {
  305 + return _travelTimeObj.moningpeak[0];
  306 + },
  307 + /**
  308 + * 获取上行晚高峰行驶时间。
  309 + * @returns int number
  310 + */
  311 + getUpEPeakTime: function() {
  312 + return _travelTimeObj.eveningpeak[0];
  313 + },
  314 + /**
  315 + * 获取上行低谷行驶时间。
  316 + * @returns int number
  317 + */
  318 + getUpTroughTime: function() {
  319 + return _travelTimeObj.trough[0];
  320 + },
  321 + /**
  322 + * 获取下行早高峰行驶时间。
  323 + * @returns int number
  324 + */
  325 + getDownMPeakTime: function() {
  326 + return _travelTimeObj.moningpeak[1];
  327 + },
  328 + /**
  329 + * 获取下行晚高峰行驶时间。
  330 + * @returns int number
  331 + */
  332 + getDownEPeakTime: function() {
  333 + return _travelTimeObj.eveningpeak[1];
  334 + },
  335 + /**
  336 + * 获取下行低谷行驶时间。
  337 + * @returns int number
  338 + */
  339 + getDownTroughTime: function() {
  340 + return _travelTimeObj.trough[1];
  341 + },
  342 +
  343 + //---------------- 获取行驶里程 -----------------//
  344 + /**
  345 + * 获取上行normal班次里程。
  346 + * @returns number
  347 + */
  348 + getUpNormalLc: function() {
  349 + return _travelLcObj[0].normalLc;
  350 + },
  351 + /**
  352 + * 获取上行进场班次类型。
  353 + * @returns number
  354 + */
  355 + getUpInLc: function() {
  356 + return _travelLcObj[0].inLc;
  357 + },
  358 + /**
  359 + * 获取上行出场班次类型。
  360 + * @returns number
  361 + */
  362 + getUpOutLc: function() {
  363 + return _travelLcObj[0].outLc;
  364 + },
  365 + /**
  366 + * 获取下行normal班次类型。
  367 + * @returns number
  368 + */
  369 + getDownNormalLc: function() {
  370 + return _travelLcObj[1].normalLc;
  371 + },
  372 + /**
  373 + * 获取下行进场班次类型。
  374 + * @returns number
  375 + */
  376 + getDownInLc: function() {
  377 + return _travelLcObj[1].inLc;
  378 + },
  379 + /**
  380 + * 获取下行出场班次类型。
  381 + * @returns number
  382 + */
  383 + getDownOutLc: function() {
  384 + return _travelLcObj[1].outLc;
  385 + },
  386 +
  387 + //---------------- 获取时间段信息 --------------//
  388 + /**
  389 + * 获取早高峰开始时间对象。
  390 + * @returns moment obj
  391 + */
  392 + getMPeakStartTimeObj: function() {
  393 + return StrategyUtils.toTimeObj(
  394 + _timeIntervalObj.moningPeakTimeStrs.start
  395 + );
  396 + },
  397 + /**
  398 + * 获取早高峰结束时间对象。
  399 + * @returns moment obj
  400 + */
  401 + getMPeakEndTimeObj: function() {
  402 + return StrategyUtils.toTimeObj(
  403 + _timeIntervalObj.moningPeakTimeStrs.end
  404 + );
  405 + },
  406 + /**
  407 + * 获取晚高峰开始时间对象。
  408 + * @returns moment obj
  409 + */
  410 + getEPeakStartTimeObj: function() {
  411 + return StrategyUtils.toTimeObj(
  412 + _timeIntervalObj.eveningPeakTimeStrs.start
  413 + );
  414 + },
  415 + /**
  416 + * 获取晚高峰结束时间对象。
  417 + * @returns moment obj
  418 + */
  419 + getEPeakEndTimeObj: function() {
  420 + return StrategyUtils.toTimeObj(
  421 + _timeIntervalObj.eveningPeakTimeStrs.end
  422 + );
  423 + },
  424 +
  425 + //----------------- 获取发车间隙(TODO:以后通过客流估算)-----------------//
  426 + /**
  427 + * 获取早高峰最小发车间隙。
  428 + * @returns int
  429 + */
  430 + getMPeakMinFcjx: function() {
  431 + return _fcjxIntervalObj.mpeakfcjx.min;
  432 + },
  433 + /**
  434 + * 获取早高峰最大发车间隙。
  435 + * @returns int
  436 + */
  437 + getMPeakMaxFcjx: function() {
  438 + return _fcjxIntervalObj.mpeakfcjx.max;
  439 + },
  440 + /**
  441 + * 获取晚高峰最小发车间隙。
  442 + * @returns int
  443 + */
  444 + getEPeakMinFcjx: function() {
  445 + return _fcjxIntervalObj.epeakfcjx.min;
  446 + },
  447 + /**
  448 + * 获取晚高峰最小发车间隙。
  449 + * @returns int
  450 + */
  451 + getEPeakMaxFcjx: function() {
  452 + return _fcjxIntervalObj.epeakfcjx.max;
  453 + },
  454 + /**
  455 + * 获取低谷最小发车间隙。
  456 + * @returns int
  457 + */
  458 + getTroughMinFcjx: function() {
  459 + return _fcjxIntervalObj.troughfcjx.min;
  460 + },
  461 + /**
  462 + * 获取低谷最大发车间隙。
  463 + * @returns int
  464 + */
  465 + getTroughMaxFcjx: function() {
  466 + return _fcjxIntervalObj.troughfcjx.max;
  467 + },
  468 +
  469 + //----------------- 获取停站方式 -------------------//
  470 + /**
  471 + * 是否双向停站。
  472 + * @returns {boolean}
  473 + */
  474 + isTwoWayStop: function() {
  475 + return !_stopTypeObj.isMasterStop;
  476 + },
  477 + /**
  478 + * 是否上行单向停站。
  479 + * @returns {boolean}
  480 + */
  481 + isUpOneWayStop: function() {
  482 + return _stopTypeObj.isMasterStop && _stopTypeObj.isMasterUpStop;
  483 + },
  484 + /**
  485 + * 是否下行单向停站。
  486 + * @returns {boolean}
  487 + */
  488 + isDownOneWayStop: function() {
  489 + return _stopTypeObj.isMasterStop && (!_stopTypeObj.isMasterUpStop);
  490 + },
  491 +
  492 + //----------------- 获取高峰配车数、加班路牌数 ----------------//
  493 + /**
  494 + * 获取高峰建议配车数(TODO:参照一下)。
  495 + * @returns {Number|*}
  496 + */
  497 + getAdvicePeakClzs: function() {
  498 + return parseInt(_formMap.gfjypcs);
  499 + },
  500 + /**
  501 + * 获取加班路牌数(5休2路牌的个数)。
  502 + * @returns {Number|*}
  503 + */
  504 + getJBLpes: function() {
  505 + return parseInt(_formMap.jblps);
  506 + },
  507 +
  508 + //----------------- 获取关联数据信息 -----------------//
  509 + /**
  510 + * 获取线路id。
  511 + */
  512 + getXlId: function() {
  513 + return _xlObj.xl.id;
  514 + },
  515 + /**
  516 + * 获取停车场id。
  517 + */
  518 + getTccId: function() {
  519 + return _parkObj.park.id;
  520 + },
  521 + /**
  522 + * 获取时刻表id。
  523 + */
  524 + getTTinfoId: function() {
  525 + return _ttInfoObj.ttinfo.id;
  526 + },
  527 + /**
  528 + * 获取上行起点站对象。
  529 + * @returns {{id: *}}
  530 + */
  531 + getUpQdzObj: function() {
  532 + return {
  533 + id: _startEndStopObj.up.qdz.id
  534 + };
  535 + },
  536 + /**
  537 + * 获取上行终点站对象。
  538 + * @returns {{id: *}}
  539 + */
  540 + getUpZdzObj: function() {
  541 + return {
  542 + id: _startEndStopObj.up.zdz.id
  543 + };
  544 + },
  545 + /**
  546 + * 获取下行起点站对象。
  547 + * @returns {{id: *}}
  548 + */
  549 + getDownQdzObj: function() {
  550 + return {
  551 + id: _startEndStopObj.down.qdz.id
  552 + };
  553 + },
  554 + /**
  555 + * 获取下行终点站对象。
  556 + * @returns {{id: *}}
  557 + */
  558 + getDownZdzObj: function() {
  559 + return {
  560 + id: _startEndStopObj.down.zdz.id
  561 + };
  562 + }
  563 +
  564 +
  565 + };
  566 +};
0 567 \ No newline at end of file
... ...
src/main/resources/static/pages/base/timesmodel/js/strategy/StrategyUtils.js 0 → 100644
  1 +/**
  2 + * 工具类。
  3 + * 注意:moment是mutable,所有的moment操作都会改变原有对象的值,
  4 + * 所以所有的操作都要小心处理。
  5 + */
  6 +var StrategyUtils = function() {
  7 + var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀
  8 + var date_wrap_format = "YYYY-MM-DD HH:mm"; // 日期格式
  9 + /**
  10 + * 将时间包装成日期,方便计算。
  11 + * @param timeStr 时间格式,如 06:30
  12 + * @returns moment对象
  13 + */
  14 + var _wrapTimeFun = function(timeStr) {
  15 + return moment(
  16 + date_wrap_prefix + timeStr,
  17 + date_wrap_format
  18 + );
  19 + };
  20 + /**
  21 + * 添加时间(注意,返回一个新的moment对象,此方法是immutable)
  22 + * @param timeObj moment 对象
  23 + * @param time 时间
  24 + * @param type 时间单位
  25 + * @returns 重新创建一个moment返回
  26 + */
  27 + var _addTimeFun = function(timeObj, time, type) {
  28 + var _timeObj = moment(timeObj); // clone
  29 + _timeObj.add(time, type);
  30 + return _timeObj;
  31 + };
  32 +
  33 + // 内部工厂类
  34 + var _factoryFun = function() {
  35 + return {
  36 + // 创建参数
  37 + createParameterObj: function(formMap, dataMap) {
  38 + return ParameterObj(formMap, dataMap);
  39 + },
  40 + // 创建班次对象
  41 + createBcObj: function(bcType, isUp, lp, fcno, fcTimeObj, paramObj) {
  42 + return BcObj(bcType, isUp, lp, fcno, fcTimeObj, paramObj);
  43 + }
  44 + };
  45 + };
  46 +
  47 + return {
  48 + /**
  49 + * 工厂对象,创建不同的对象。
  50 + * @returns {{createParameterObj, createBcObj}}
  51 + */
  52 + getFactory: function() {
  53 + return _factoryFun();
  54 + },
  55 +
  56 + //-------------- 时间操作 ------------//
  57 + /**
  58 + * 通过字符串创建时间对象。
  59 + * @param timeStr 时间字符串
  60 + * @returns {moment对象}
  61 + */
  62 + toTimeObj: function(timeStr) {
  63 + return _wrapTimeFun(timeStr);
  64 + },
  65 + /**
  66 + * 增加分钟。
  67 + * @param timeObj 时间对象
  68 + * @param minute 分钟
  69 + * @returns {重新创建一个moment返回}
  70 + */
  71 + addMinute: function(timeObj, minute) {
  72 + return _addTimeFun(timeObj, minute, "m");
  73 + },
  74 +
  75 + //-------------- 时间业务操作 ------------//
  76 + /**
  77 + * 判定某个班次是否是早高峰班次。
  78 + * @param timeObj 班次时间
  79 + * @param paramObj 参数对象
  80 + * @returns true false
  81 + */
  82 + isMPeakBc: function(timeObj, paramObj) {
  83 + // 早高峰开始时间
  84 + var st = paramObj.getMPeakStartTimeObj();
  85 + // 早高峰结束时间
  86 + var et = paramObj.getMPeakEndTimeObj();
  87 + // 包装日期
  88 + return timeObj.isBetween(st, et, null, "[]");
  89 + },
  90 + /**
  91 + * 判定某个班次是否是晚高峰班次。
  92 + * @param timeObj 班次时间
  93 + * @param paramObj 参数对象
  94 + * @returns true false
  95 + */
  96 + isEPeakBc: function(timeObj, paramObj) {
  97 + // 晚高峰开始时间
  98 + var st = paramObj.getEPeakStartTimeObj();
  99 + // 晚高峰结束时间
  100 + var et = paramObj.getEPeakEndTimeObj();
  101 + // 包装日期
  102 + return timeObj.isBetween(st, et, null, "[]");
  103 + },
  104 + /**
  105 + * 判定某个班次是否是低谷班次。
  106 + * @param timeObj 班次时间
  107 + * @param paramObj 参数对象
  108 + * @returns true false
  109 + */
  110 + isTroughBc: function(timeObj, paramObj) {
  111 + return (
  112 + !this.isMPeakBc(timeObj, paramObj) &&
  113 + !this.isEPeakBc(timeObj, paramObj)
  114 + );
  115 + },
  116 + /**
  117 + * 判定某个低谷班次是否在早高峰开始之前。
  118 + * @param timeObj 班次时间
  119 + * @param paramObj 参数对象
  120 + * @returns true false
  121 + */
  122 + isTroughBeforMPeakStartBc: function(timeObj, paramObj) {
  123 + // 早高峰开始时间
  124 + var st = paramObj.getMPeakStartTimeObj();
  125 + // 包装日期
  126 + return timeObj.isBefore(st);
  127 + },
  128 + /**
  129 + * 判定某个低谷班次是否在晚高峰结束之后。
  130 + * @param timeObj 班次时间
  131 + * @param paramObj 参数对象
  132 + * @returns true false
  133 + */
  134 + isTroughAfterEPeakEndBc: function(timeObj, paramObj) {
  135 + // 晚高峰结束时间
  136 + var et = paramObj.getEPeakEndTimeObj();
  137 + // 包装日期
  138 + return timeObj.isAfter(et);
  139 + },
  140 +
  141 + /**
  142 + * 获取固定的停站时间(固定停站时间都是选的最大值)
  143 + * @param timeObj 时间对象
  144 + * @param isUp 是否上行
  145 + * @param paramObj 参数对象
  146 + * @returns number
  147 + */
  148 + calcuFixedStopNumber: function(timeObj, isUp, paramObj) {
  149 + var peakStopTime; // 高峰停站时间
  150 + var troughStopTime; // 低谷停站时间
  151 + var secondaryStopTime; // 副站停站时间
  152 +
  153 + // 双向停站
  154 + if (paramObj.isTwoWayStop()) {
  155 + if (isUp) { // 上行
  156 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  157 + peakStopTime = Math.floor(paramObj.getUpMPeakTime() * 0.1); // 行驶时间的10%
  158 + if (peakStopTime < 3) { // 不少于3分钟
  159 + peakStopTime = 3;
  160 + }
  161 + return peakStopTime;
  162 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  163 + peakStopTime = Math.floor(paramObj.getUpEPeakTime() * 0.1); // 行驶时间的10%
  164 + if (peakStopTime < 3) { // 不少于3分钟
  165 + peakStopTime = 3;
  166 + }
  167 + return peakStopTime;
  168 + } else { // 低谷
  169 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  170 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  171 + if (troughStopTime < 10) { // 不少于10分钟
  172 + troughStopTime = 10;
  173 + }
  174 + return troughStopTime;
  175 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  176 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  177 + if (troughStopTime < 10) { // 不少于10分钟
  178 + troughStopTime = 10;
  179 + }
  180 + return troughStopTime;
  181 + } else { // 早高峰,晚高峰之间
  182 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.15); // 行驶时间15%
  183 + if (troughStopTime < 10) { // 不少于10分钟
  184 + troughStopTime = 10;
  185 + }
  186 + return troughStopTime;
  187 + }
  188 + }
  189 + } else { // 下行
  190 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  191 + peakStopTime = Math.floor(paramObj.getDownMPeakTime() * 0.1); // 行驶时间的10%
  192 + if (peakStopTime < 3) { // 不少于3分钟
  193 + peakStopTime = 3;
  194 + }
  195 + return peakStopTime;
  196 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  197 + peakStopTime = Math.floor(paramObj.getDownEPeakTime() * 0.1); // 行驶时间的10%
  198 + if (peakStopTime < 3) { // 不少于3分钟
  199 + peakStopTime = 3;
  200 + }
  201 + return peakStopTime;
  202 + } else { // 低谷
  203 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  204 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  205 + if (troughStopTime < 10) { // 不少于10分钟
  206 + troughStopTime = 10;
  207 + }
  208 + return troughStopTime;
  209 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  210 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  211 + if (troughStopTime < 10) { // 不少于10分钟
  212 + troughStopTime = 10;
  213 + }
  214 + return troughStopTime;
  215 + } else { // 早高峰,晚高峰之间
  216 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.15); // 行驶时间15%
  217 + if (troughStopTime < 10) { // 不少于10分钟
  218 + troughStopTime = 10;
  219 + }
  220 + return troughStopTime;
  221 + }
  222 + }
  223 + }
  224 + } else { // 主站停站
  225 + if (isUp == paramObj.isUpOneWayStop()) {
  226 + if (isUp) { // 上行
  227 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  228 + peakStopTime = Math.floor(paramObj.getUpMPeakTime() * 0.1); // 行驶时间的10%
  229 + if (peakStopTime < 3) { // 不少于3分钟
  230 + peakStopTime = 3;
  231 + }
  232 + return peakStopTime;
  233 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  234 + peakStopTime = Math.floor(paramObj.getUpEPeakTime() * 0.1); // 行驶时间的10%
  235 + if (peakStopTime < 3) { // 不少于3分钟
  236 + peakStopTime = 3;
  237 + }
  238 + return peakStopTime;
  239 + } else { // 低谷
  240 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  241 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  242 + if (troughStopTime < 10) { // 不少于10分钟
  243 + troughStopTime = 10;
  244 + }
  245 + return troughStopTime;
  246 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  247 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.2); // 行驶时间20%
  248 + if (troughStopTime < 10) { // 不少于10分钟
  249 + troughStopTime = 10;
  250 + }
  251 + return troughStopTime;
  252 + } else { // 早高峰,晚高峰之间
  253 + troughStopTime = Math.floor(paramObj.getUpTroughTime() * 0.15); // 行驶时间15%
  254 + if (troughStopTime < 10) { // 不少于10分钟
  255 + troughStopTime = 10;
  256 + }
  257 + return troughStopTime;
  258 + }
  259 + }
  260 + } else { // 下行
  261 + if (this.isMPeakBc(timeObj, paramObj)) { // 早高峰
  262 + peakStopTime = Math.floor(paramObj.getDownMPeakTime() * 0.1); // 行驶时间的10%
  263 + if (peakStopTime < 3) { // 不少于3分钟
  264 + peakStopTime = 3;
  265 + }
  266 + return peakStopTime;
  267 + } else if (this.isEPeakBc(timeObj, paramObj)) { // 晚高峰
  268 + peakStopTime = Math.floor(paramObj.getDownEPeakTime() * 0.1); // 行驶时间的10%
  269 + if (peakStopTime < 3) { // 不少于3分钟
  270 + peakStopTime = 3;
  271 + }
  272 + return peakStopTime;
  273 + } else { // 低谷
  274 + if (this.isTroughBeforMPeakStartBc(timeObj, paramObj)) { // 早高峰开始前
  275 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  276 + if (troughStopTime < 10) { // 不少于10分钟
  277 + troughStopTime = 10;
  278 + }
  279 + return troughStopTime;
  280 + } else if (this.isTroughAfterEPeakEndBc(timeObj, paramObj)) { // 晚高峰结束后
  281 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.2); // 行驶时间20%
  282 + if (troughStopTime < 10) { // 不少于10分钟
  283 + troughStopTime = 10;
  284 + }
  285 + return troughStopTime;
  286 + } else { // 早高峰,晚高峰之间
  287 + troughStopTime = Math.floor(paramObj.getDownTroughTime() * 0.15); // 行驶时间15%
  288 + if (troughStopTime < 10) { // 不少于10分钟
  289 + troughStopTime = 10;
  290 + }
  291 + return troughStopTime;
  292 + }
  293 + }
  294 + }
  295 + } else { // 副站停战,2到3分钟
  296 + secondaryStopTime = 3;
  297 + return secondaryStopTime; // 直接返回3分钟
  298 + }
  299 + }
  300 +
  301 + },
  302 +
  303 + /**
  304 + * 获取行驶时间。
  305 + * @param timeObj 班次时间字符串
  306 + * @param isUp 是否上行
  307 + * @param paramObj 参数对象
  308 + */
  309 + calcuTravelTime: function(timeObj, isUp, paramObj) {
  310 + if (isUp) {
  311 + if (this.isMPeakBc(timeObj, paramObj)) {
  312 + return paramObj.getUpMPeakTime();
  313 + } else if (this.isEPeakBc(timeObj, paramObj)) {
  314 + return paramObj.getUpEPeakTime();
  315 + } else {
  316 + return paramObj.getUpTroughTime();
  317 + }
  318 + } else {
  319 + if (this.isMPeakBc(timeObj, paramObj)) {
  320 + return paramObj.getDownMPeakTime();
  321 + } else if (this.isEPeakBc(timeObj, paramObj)) {
  322 + return paramObj.getDownEPeakTime();
  323 + } else {
  324 + return paramObj.getDownTroughTime();
  325 + }
  326 + }
  327 + },
  328 +
  329 + /**
  330 + * 获取行驶里程。
  331 + * @param isUp 是否上行
  332 + * @param bcType 班次类型
  333 + * @param paramObj 参数对象
  334 + */
  335 + calcuTravelLcNumber: function(isUp, bcType, paramObj) {
  336 + if (isUp) {
  337 + if (bcType == "in") {
  338 + return paramObj.getUpInLc();
  339 + } else if (bcType == "out") {
  340 + return paramObj.getUpOutLc();
  341 + } else {
  342 + // 基本班次类型,暂时不考虑区间等其他班次类型
  343 + // 暂时不考虑高峰低谷里程的区分
  344 + return paramObj.getUpNormalLc();
  345 + }
  346 + } else {
  347 + if (bcType == "in") {
  348 + return paramObj.getDownInLc();
  349 + } else if (bcType == "out") {
  350 + return paramObj.getDownOutLc();
  351 + } else {
  352 + // 基本班次类型,暂时不考虑区间等其他班次类型
  353 + // 暂时不考虑高峰低谷里程的区分
  354 + return paramObj.getDownNormalLc();
  355 + }
  356 + }
  357 + },
  358 +
  359 + /**
  360 + * 计算高峰周转时间。
  361 + * @param paramObj 参数对象
  362 + * @returns 周转时间
  363 + */
  364 + calcuPeakZzsj: function(paramObj) {
  365 + // 使用早高峰的周转时间
  366 + var _time = paramObj.getMPeakStartTimeObj();
  367 + var _zzsj = // 早高峰上行行驶时间+停站时间+早高峰下行行驶时间+停站时间
  368 + this.calcuTravelTime(_time, true, paramObj) +
  369 + this.calcuFixedStopNumber(_time, true, paramObj) +
  370 + this.calcuTravelTime(_time, false, paramObj) +
  371 + this.calcuFixedStopNumber(_time, false, paramObj);
  372 + return _zzsj;
  373 + },
  374 +
  375 + /**
  376 + * 计算低谷周转时间。
  377 + * @param paramObj 参数对象
  378 + * @returns 周转时间
  379 + */
  380 + calcuTroughZzsj: function(paramObj) {
  381 + // 使用低谷的周转时间
  382 + var _time = this.addMinute(paramObj.getMPeakStartTimeObj(), -1); // 使用任意一个低谷时间
  383 + var _zzsj = // 低谷上行行驶时间+停站时间+低谷下行行驶时间+停站时间
  384 + this.calcuTravelTime(_time, true, paramObj) +
  385 + this.calcuFixedStopNumber(_time, true, paramObj) +
  386 + this.calcuTravelTime(_time, false, paramObj) +
  387 + this.calcuFixedStopNumber(_time, false, paramObj);
  388 +
  389 + return _zzsj;
  390 + },
  391 +
  392 + /**
  393 + * 计算车辆总数。
  394 + * @param paramObj 参数对象
  395 + * @returns 车辆数
  396 + */
  397 + calcuClzx: function(paramObj) {
  398 + // 使用早高峰平均间隔
  399 + var _fcjx_avg = Math.floor((paramObj.getMPeakMinFcjx() + paramObj.getMPeakMaxFcjx()) / 2);
  400 + return Math.round(this.calcuPeakZzsj(paramObj) / _fcjx_avg);
  401 + }
  402 +
  403 + };
  404 +}();
0 405 \ No newline at end of file
... ...
src/main/resources/static/pages/base/timesmodel/js/strategy/strategy-headway.js
... ... @@ -17,27 +17,36 @@ var StrategyHeadway = function() {
17 17 {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43', 'qcount': 0, 'avertime': 0}
18 18 ];
19 19  
  20 + // 重要数据结构,二维数组的形式保存班次信息
  21 + // 行表示几个路牌,列表示几圈,每个元素表示一圈包含两个班次对象(一个也有可能)
  22 + // TODO:之后会把这个结构定义成一个类
  23 + var _headWayBcArray = [];
  24 +
20 25 var headWayF = {
21 26 /**
22 27 * 使用发车间隔策略生成时刻表。
23   - * @param saa
24   - * @param cara
25   - * @param map
26   - * @param seMap
27   - * @param dataMap
  28 + * @param paramObj 参数对象
  29 + * @param lpArray 路牌数组
28 30 * @constructor
29 31 */
30   - BXPplaceClassesTime03 : function(saa , cara, map , seMap , dataMap) {
31   - console.log(saa);
32   - console.log(map);
33   - console.log(seMap);
34   - console.log(dataMap);
  32 + BXPplaceClassesTime03 : function(paramObj, lpArray) {
  33 + //console.log(lpArray);
  34 +
  35 + _paramObj = paramObj;
35 36  
36 37 var i = 0;
  38 + var j = 0;
37 39 var data = [];
38 40  
39   - // 封装参数对象
40   - _paramObj = StrategyUtils.getFactory().creatParamterObj(saa , cara, map , seMap , dataMap);
  41 + // 第一步,计算标准线,计算所有班型工时,创建二维班次结构,并把标准线数据作为第一个路牌的班次数据
  42 + this._01_buildBasicLine(lpArray);
  43 + // 第二步,构造所有高峰班次
  44 + this._02_buildAllGfbc(lpArray);
  45 + // 第三步,计算班型类型(每个路牌的班型)
  46 + this._03_calcuBxtype();
  47 + // 第四步,根据每个路牌的班型构造所有班次
  48 + this._04_buildAllOtherBc(lpArray);
  49 +
41 50  
42 51 // TODO:先定死参数
43 52 // 早高峰间隔时间 7分钟
... ... @@ -47,95 +56,99 @@ var StrategyHeadway = function() {
47 56 // 晚高峰之后 20分钟
48 57  
49 58 // 做5休2路牌数目 6
50   -
51   - // TODO:计算基准线,不画,使用下行,以后根据哪个首班早,用哪个方向
52   - this._buildNormalLine(false, 1);
53   - console.log(_bxDesc);
54   -
55   - // TODO:按照早高峰开始时间,以及间隔时间从头创建班次
56   - var avertime = _bxDesc.avertime; // 平均周转时间
57   - var maxgftime = 75 + 80 + 7 + 8; // 高峰最大周转时间
58   - var data1 = this._buildAllGfBc(false);
59   - console.log(data1);
60   -
61   - // TODO:分割路牌,选出正路牌,从早高峰班次开始添加到晚高峰结束
62   - // TODO:写死,使用奇数路牌添加正路牌
63   - // TODO:按照做一休一来,4.5圈
64   - var maxdgtime = 75 + 75 + 15 + 15; // 低谷最大周转时间
65   - var zlp = [1, 4, 7, 10, 13, 16, 19, 22, 23]; // 9个正路牌,使用低谷最小配车数
66   - var xldir_z = true;
67   - var bc_index = 1;
68   - var bc_obj;
69   - var kssj_gfstart;
70   - for (i = 0; i < zlp.length; i++) {
71   - // TODO:删除正路牌的bcWgf
72   - delete data1[zlp[i]].bcWgf;
73   -
74   - kssj_gfstart = StrategyUtils.toWrapTime(data1[zlp[i]].bcZgf.fcsj);
75   - kssj_gfstart = kssj_gfstart.add(data1[zlp[i]].bcZgf.bcsj, "m").add(data1[zlp[i]].bcZgf.STOPTIME, "m");
76   - for (bc_index = 1; bc_index <= 9; bc_index++) {
77   - bc_obj = StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
78   - "normal",
79   - xldir_z, zlp[i], 3,
80   - kssj_gfstart.format("HH:mm"),
81   - _paramObj
82   - );
83   - data.push(bc_obj);
84   -
85   - xldir_z = !xldir_z;
86   - kssj_gfstart = StrategyUtils.toWrapTime(bc_obj.ARRIVALTIME).add(bc_obj.STOPTIME, "m");
87   - }
88   -
89   - bc_index = 1;
90   - xldir_z = true;
91   - }
92   -
93   - // TODO:修正bcWgf
94   - for (var key in data1) {
95   - if (data1[key].bcWgf) {
96   - // TODO:第一块正路牌的bcWgf晚了18分钟,分班路牌的bcWgf向后移动18分钟
97   - // TODO:还要改成上行
98   - data1[key].bcWgf = StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
99   - "normal",
100   - true, key, 3,
101   - StrategyUtils.toWrapTime(data1[key].bcWgf.fcsj).add(18, "m").format("HH:mm"),
102   - _paramObj
103   - );
104   - }
105   -
106   - }
107   -
108   - // TODO:6个做5休二,大致3圈
109   - // TODO:暂时写死路牌分割位置,然后以bcZgf,bcWgf为基准向左右两侧各加2各班次
110   - var _5_2_lp = [5, 8, 11, 14, 17, 20];
111   - for (i = 0; i < _5_2_lp.length; i++) {
112   - // TODO:先向后加一个班次
113   - data.push(StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
114   - "normal",
115   - "relationshipGraph-down", _5_2_lp[i], 3,
116   - StrategyUtils.toWrapTime(data1[_5_2_lp[i]].bcZgf.ARRIVALTIME).add(data1[_5_2_lp[i]].bcZgf.STOPTIME, "m").format("HH:mm"),
117   - _paramObj
118   - ));
119   - data.push(StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
120   - "normal",
121   - "relationshipGraph-up", _5_2_lp[i], 3,
122   - StrategyUtils.toWrapTime(data1[_5_2_lp[i]].bcWgf.ARRIVALTIME).add(data1[_5_2_lp[i]].bcWgf.STOPTIME, "m").format("HH:mm"),
123   - _paramObj
124   - ));
125   - }
  59 + //var data1 = {};
  60 + //
  61 + //// TODO:计算基准线,不画,使用下行,以后根据哪个首班早,用哪个方向
  62 + //data = data.concat(this._buildNormalLine(false, 12));
  63 + //data = data.concat(this._01_buildBasicLine(lpArray));
  64 + //console.log(_bxDesc);
  65 +
  66 + //// TODO:按照早高峰开始时间,以及间隔时间从头创建班次
  67 + //var avertime = _bxDesc.avertime; // 平均周转时间
  68 + //var maxgftime = 75 + 80 + 7 + 8; // 高峰最大周转时间
  69 + //var data1 = this._buildAllGfBc(false);
  70 + //console.log(data1);
  71 + //
  72 + //// TODO:分割路牌,选出正路牌,从早高峰班次开始添加到晚高峰结束
  73 + //// TODO:写死,使用奇数路牌添加正路牌
  74 + //// TODO:按照做一休一来,4.5圈
  75 + //var maxdgtime = 75 + 75 + 15 + 15; // 低谷最大周转时间
  76 + //var zlp = [1, 4, 7, 10, 13, 16, 19, 22, 23]; // 9个正路牌,使用低谷最小配车数
  77 + //var xldir_z = true;
  78 + //var bc_index = 1;
  79 + //var bc_obj;
  80 + //var kssj_gfstart;
  81 + //for (i = 0; i < zlp.length; i++) {
  82 + // // TODO:删除正路牌的bcWgf
  83 + // delete data1[zlp[i]].bcWgf;
  84 + //
  85 + // kssj_gfstart = StrategyUtils.toWrapTime(data1[zlp[i]].bcZgf.fcsj);
  86 + // kssj_gfstart = kssj_gfstart.add(data1[zlp[i]].bcZgf.bcsj, "m").add(data1[zlp[i]].bcZgf.STOPTIME, "m");
  87 + // for (bc_index = 1; bc_index <= 9; bc_index++) {
  88 + // bc_obj = StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
  89 + // "normal",
  90 + // xldir_z, zlp[i], 3,
  91 + // kssj_gfstart.format("HH:mm"),
  92 + // _paramObj
  93 + // );
  94 + // data.push(bc_obj);
  95 + //
  96 + // xldir_z = !xldir_z;
  97 + // kssj_gfstart = StrategyUtils.toWrapTime(bc_obj.ARRIVALTIME).add(bc_obj.STOPTIME, "m");
  98 + // }
  99 + //
  100 + // bc_index = 1;
  101 + // xldir_z = true;
  102 + //}
  103 + //
  104 + //// TODO:修正bcWgf
  105 + //for (var key in data1) {
  106 + // if (data1[key].bcWgf) {
  107 + // // TODO:第一块正路牌的bcWgf晚了18分钟,分班路牌的bcWgf向后移动18分钟
  108 + // // TODO:还要改成上行
  109 + // data1[key].bcWgf = StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
  110 + // "normal",
  111 + // true, key, 3,
  112 + // StrategyUtils.toWrapTime(data1[key].bcWgf.fcsj).add(18, "m").format("HH:mm"),
  113 + // _paramObj
  114 + // );
  115 + // }
  116 + //
  117 + //}
  118 + //
  119 + //// TODO:6个做5休二,大致3圈
  120 + //// TODO:暂时写死路牌分割位置,然后以bcZgf,bcWgf为基准向左右两侧各加2各班次
  121 + //var _5_2_lp = [5, 8, 11, 14, 17, 20];
  122 + //for (i = 0; i < _5_2_lp.length; i++) {
  123 + // // TODO:先向后加一个班次
  124 + // data.push(StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
  125 + // "normal",
  126 + // "relationshipGraph-down", _5_2_lp[i], 3,
  127 + // StrategyUtils.toWrapTime(data1[_5_2_lp[i]].bcZgf.ARRIVALTIME).add(data1[_5_2_lp[i]].bcZgf.STOPTIME, "m").format("HH:mm"),
  128 + // _paramObj
  129 + // ));
  130 + // data.push(StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
  131 + // "normal",
  132 + // "relationshipGraph-up", _5_2_lp[i], 3,
  133 + // StrategyUtils.toWrapTime(data1[_5_2_lp[i]].bcWgf.ARRIVALTIME).add(data1[_5_2_lp[i]].bcWgf.STOPTIME, "m").format("HH:mm"),
  134 + // _paramObj
  135 + // ));
  136 + //}
126 137  
127 138  
128 139 // TODO:8个其他形式分班
129 140  
130 141  
131   - // TODO:添加班次
132   - for (var key in data1) {
133   - if (data1[key].bcZgf)
134   - data.push(data1[key].bcZgf);
135   - if (data1[key].bcWgf) {
136   - data.push(data1[key].bcWgf);
  142 + // final: 添加班次
  143 + for (i = 0; i < _headWayBcArray.length; i++) {
  144 + for (j = 0; j < _headWayBcArray[i]["qObj"].length; j++) {
  145 + if (_headWayBcArray[i]["qObj"][j].hasBc1) {
  146 + data.push(_headWayBcArray[i]["qObj"][j]["_bc1_"].toGanttBcObj());
  147 + }
  148 + if (_headWayBcArray[i]["qObj"][j].hasBc2) {
  149 + data.push(_headWayBcArray[i]["qObj"][j]["_bc2_"].toGanttBcObj());
  150 + }
137 151 }
138   -
139 152 }
140 153  
141 154 return {'json':data,'bxrcgs':null};
... ... @@ -213,50 +226,81 @@ var StrategyHeadway = function() {
213 226 return data1;
214 227 },
215 228  
216   - // TODO:计算基准线,并计算每个班型对应的圈数
217   - _buildNormalLine: function(isUp, lp) {
218   - var data = [];
219   - var bcObj;
220   -
221   - var _firstLastDepartureTimeStrObj =
222   - _paramObj.getFirstLastDepartureTimeStrObj();
  229 + /**
  230 + * 第一步,创建标准线,并放置在第一个路牌上。
  231 + * @param lpArray 路牌列表
  232 + */
  233 + _01_buildBasicLine: function(lpArray) {
  234 + // TODO:放置上标线,中标线在议
223 235  
224   - var firstTime = isUp ?
225   - StrategyUtils.toWrapTime(_firstLastDepartureTimeStrObj.up.firstVehicleDepartureTimeStr) :
226   - StrategyUtils.toWrapTime(_firstLastDepartureTimeStrObj.down.firstVehicleDepartureTimeStr);
227   - var downTime = isUp ?
228   - StrategyUtils.toWrapTime(_firstLastDepartureTimeStrObj.up.lastVehicleDepartureTimeStr) :
229   - StrategyUtils.toWrapTime(_firstLastDepartureTimeStrObj.down.lastVehicleDepartureTimeStr);
  236 + // 确定使用上行还是下行首班车作为上标线开始
  237 + var _isUp = _paramObj.getUpFirstDTimeObj().isBefore(_paramObj.getDownFirstDTimeObj()) ? false : true;
  238 + var firstTime = _isUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj();
  239 + var downTime = _isUp ? _paramObj.getUpLastDtimeObj() : _paramObj.getDownLastDTimeObj();
230 240  
  241 + var data = [];
  242 + var bcObj;
231 243 var kssj = firstTime;
232   - var fcno = 3; // 发车顺序号
  244 + var fcno = 1; // 发车顺序号
233 245 var qBcCount = 1; // 班次数
234   - var qArray = [isUp, !isUp]; // 圈的方向(true:上行,false:下行)
  246 + var qArray = [_isUp, !_isUp]; // 圈的方向(true:上行,false:下行)
235 247 var qIndex = 0;
236 248 do {
237   - bcObj = StrategyUtils.getFactory().creatBcObjWithFixedStopTime(
238   - "normal",
239   - qArray[qIndex], lp, fcno,
240   - kssj.format("HH:mm"),
241   - _paramObj
242   - );
243   -
244   - kssj = kssj.add(bcObj.bcsj, "m").add(bcObj.STOPTIME, "m");
  249 + bcObj = StrategyUtils.getFactory().createBcObj(
  250 + "normal", qArray[qIndex], lpArray[0].lpNo, fcno, kssj, _paramObj);
  251 + kssj = StrategyUtils.addMinute(kssj, bcObj.getBcTime() + bcObj.getStopTime());
245 252 fcno ++;
246 253 qBcCount ++;
247 254 qIndex = (qBcCount - 1) % 2;
248 255 data.push(bcObj);
249 256 } while(kssj.isBefore(downTime));
  257 + qBcCount = data.length;
250 258  
251   - // 计算每种班型在基准线下对应的大致圈数(1表示1圈2个班次,.5表示半圈1个班次)
  259 + // 根据圈数,初始化
252 260 var i = 0;
  261 + var j = 0;
  262 + var n = 0;
  263 + for (i = 0; i < lpArray.length; i++) {
  264 + // 前后都预留一圈
  265 + n = 1 + (Math.floor(qBcCount / 2) + qBcCount % 2) + 1;
  266 + _headWayBcArray[i] = {
  267 + "bxIndex" : 6, // 默认做五休二
  268 + "qObj" : new Array(n) // 圈数
  269 + };
  270 +
  271 + for (j = 0; j < n; j++) {
  272 + _headWayBcArray[i]["qObj"][j] = {
  273 + "hasBc1" : false, // 是否有第一个班次
  274 + "hasBc2" : false, // 是否有第二个班次
  275 + "_bc1_" : {}, // 第一个班次
  276 + "_bc2_" : {} // 第二个班次
  277 +
  278 + // TODO:其他参数再议
  279 + };
  280 + }
  281 + }
  282 + for (i = 1; i <= Math.floor(qBcCount / 2); i++) {
  283 + _headWayBcArray[0]["qObj"][i]["hasBc1"] = true;
  284 + _headWayBcArray[0]["qObj"][i]["_bc1_"] = data[(i - 1) * 2];
  285 + _headWayBcArray[0]["qObj"][i]["hasBc2"] = true;
  286 + _headWayBcArray[0]["qObj"][i]["_bc2_"] = data[(i - 1) * 2 + 1];
  287 + }
  288 + if (qBcCount % 2 != 0) {
  289 + _headWayBcArray[0]["qObj"][Math.floor(qBcCount / 2) + 1]["hasBc1"] = true;
  290 + _headWayBcArray[0]["qObj"][Math.floor(qBcCount / 2) + 1]["_bc1_"] = data[qBcCount - 1];
  291 + }
  292 +
  293 + //console.log(_headWayBcArray);
  294 +
  295 + // 计算每种班型在基准线下对应的大致圈数(1表示1圈2个班次,.5表示半圈1个班次)
  296 + i = 0;
253 297 var avertime = 0;
254 298 var sum = 0;
255   - var size_sub = qBcCount % 2;
  299 + var size_sub = qBcCount % 2; // 剩下的班次
256 300 if (qBcCount > 1) {
257 301 // 计算平均周转时间
258 302 for (i = 0; i < data.length - size_sub; i ++) {
259   - sum += data[i].bcsj + data[i].STOPTIME;
  303 + sum += data[i].getBcTime() + data[i].getStopTime();
260 304 }
261 305 avertime = sum / ((qBcCount - size_sub) / 2);
262 306 // 计算班型圈数
... ... @@ -266,7 +310,188 @@ var StrategyHeadway = function() {
266 310 }
267 311 }
268 312  
269   - return data;
  313 + console.log(_headWayBcArray);
  314 + console.log(_bxDesc);
  315 +
  316 + },
  317 +
  318 + /**
  319 + * 第二步,构造所有高峰班次。
  320 + */
  321 + _02_buildAllGfbc: function(lpArray) {
  322 + // TODO:先设定死,以标准线为起点从哪个班次出来,以后再用算法确定
  323 + // 早高峰,从第一圈,第一个班次全部出来
  324 + // 晚高峰,从第四圈,第二个班次全部出来
  325 +
  326 + var _kssj;
  327 + var _zzsj;
  328 + var _clCount = StrategyUtils.calcuClzx(_paramObj);;
  329 + var _c1;
  330 + var _c2;
  331 + var i;
  332 + var _bc1_;
  333 + var _bc2_;
  334 +
  335 + // 计算早高峰
  336 + _bc1_ = _headWayBcArray[0]["qObj"][1]["_bc1_"];
  337 + _bc2_ = _headWayBcArray[0]["qObj"][1]["_bc2_"];
  338 + _zzsj = _bc1_.getBcTime() + _bc1_.getStopTime() +
  339 + _bc2_.getBcTime() + _bc2_.getStopTime();
  340 + _c1 = Math.floor(_zzsj / _clCount);
  341 + _c2 = _zzsj % _clCount;
  342 + _kssj = _bc1_.getFcTimeObj();
  343 +
  344 + for (i = 2; i <= _clCount - _c2; i++) {
  345 + _kssj = StrategyUtils.addMinute(_kssj, _c1);
  346 + _headWayBcArray[i - 1]["qObj"][1]["hasBc1"] = true;
  347 + _headWayBcArray[i - 1]["qObj"][1]["_bc1_"] =
  348 + StrategyUtils.getFactory().createBcObj(
  349 + "normal", true, lpArray[i - 1].lpNo,
  350 + 3, _kssj, _paramObj);
  351 + }
  352 + for (i = 1; i <= _c2; i++) {
  353 + _kssj = StrategyUtils.addMinute(_kssj, _c1 + 1);
  354 + _headWayBcArray[_clCount - _c2 + i - 1]["qObj"][1]["hasBc1"] = true;
  355 + _headWayBcArray[_clCount - _c2 + i - 1]["qObj"][1]["_bc1_"] =
  356 + StrategyUtils.getFactory().createBcObj(
  357 + "normal", true, lpArray[_clCount - _c2 + i - 1].lpNo,
  358 + 3, _kssj, _paramObj);
  359 + }
  360 +
  361 + // 计算晚高峰
  362 + _bc1_ = _headWayBcArray[0]["qObj"][4]["_bc2_"];
  363 + _bc2_ = _headWayBcArray[0]["qObj"][5]["_bc1_"];
  364 + _zzsj = _bc1_.getBcTime() + _bc1_.getStopTime() +
  365 + _bc2_.getBcTime() + _bc2_.getStopTime();
  366 + _c1 = Math.floor(_zzsj / _clCount);
  367 + _c2 = _zzsj % _clCount;
  368 + _kssj = _bc1_.getFcTimeObj();
  369 +
  370 + for (i = 2; i <= _clCount - _c2; i++) {
  371 + _kssj = StrategyUtils.addMinute(_kssj, _c1);
  372 + _headWayBcArray[i - 1]["qObj"][4]["hasBc1"] = true;
  373 + _headWayBcArray[i - 1]["qObj"][4]["_bc1_"] =
  374 + StrategyUtils.getFactory().createBcObj(
  375 + "normal", false, lpArray[i - 1].lpNo,
  376 + 3, _kssj, _paramObj);
  377 + }
  378 + for (i = 1; i <= _c2; i++) {
  379 + _kssj = StrategyUtils.addMinute(_kssj, _c1 + 1);
  380 + _headWayBcArray[_clCount - _c2 + i - 1]["qObj"][4]["hasBc1"] = true;
  381 + _headWayBcArray[_clCount - _c2 + i - 1]["qObj"][4]["_bc1_"] =
  382 + StrategyUtils.getFactory().createBcObj(
  383 + "normal", false, lpArray[_clCount - _c2 + i - 1].lpNo,
  384 + 3, _kssj, _paramObj);
  385 + }
  386 +
  387 +
  388 +
  389 +
  390 + },
  391 +
  392 + /**
  393 + * 第三步,计算班型类型(每个路牌的班型)。
  394 + */
  395 + _03_calcuBxtype: function() {
  396 + // 路牌数和车辆数是一致的
  397 +
  398 + // 总共车辆数(高峰最大车辆数)
  399 + var cls = StrategyUtils.calcuClzx(_paramObj);
  400 + // 低谷最少配车
  401 + var dgminpc = Math.round(StrategyUtils.calcuTroughZzsj(_paramObj) / _paramObj.getTroughMaxFcjx());
  402 + // 加班车路牌数(做5休2的路牌数)
  403 + var _5_2_lpes = _paramObj.getJBLpes();
  404 +
  405 + // 做些简单的验证
  406 + if (cls < dgminpc) {
  407 + alert("总配车数小于低谷最小配车");
  408 + throw "总配车数小于低谷最小配车";
  409 + }
  410 + if (cls - dgminpc < _5_2_lpes) {
  411 + alert("总分班路牌数小于加班路牌数");
  412 + throw "总分班路牌数小于加班路牌数";
  413 + }
  414 +
  415 + // 早高峰间隔时间 7分钟
  416 + // 晚高峰间隔时间 7分钟
  417 + // 早高峰之前 15分钟
  418 + // 早高峰结束,晚高峰开始之前 15分钟
  419 + // 晚高峰之后 20分钟
  420 +
  421 + // 做5休2路牌数目 6
  422 +
  423 +
  424 +
  425 + // TODO:不用间隔法,直接拉,先正路牌,再分班
  426 + var _zlpCount = dgminpc;
  427 + var _5_2_Count = _5_2_lpes;
  428 + var _otherfb_ = cls - dgminpc - _5_2_lpes;
  429 + var i = 0;
  430 + for (i = 0; i < _zlpCount; i++) {
  431 + _headWayBcArray[i].bxIndex = 5; // 做一休一
  432 + }
  433 + for (i = _zlpCount; i < _5_2_Count; i++) {
  434 + _headWayBcArray[i].bxIndex = 6; // 做五休二
  435 + }
  436 + for (i = _zlpCount + _5_2_Count; i < _otherfb_; i++) {
  437 + _headWayBcArray[i].bxIndex = 3; // 做三休一
  438 + }
  439 +
  440 + },
  441 +
  442 + /**
  443 + * 第四步,根据每个路牌的班型构造所有班次。
  444 + */
  445 + _04_buildAllOtherBc: function(lpArray) {
  446 + var _bcCount;
  447 + var _qArray;
  448 + var i;
  449 + var j;
  450 + var z;
  451 + var _kssj;
  452 +
  453 + // 构造正路牌,从早高峰一直加到晚高峰,不够晚高峰后再加
  454 + _bcCount = Math.floor(_bxDesc[_headWayBcArray[0].bxIndex].qcount * 2);
  455 + // TODO:都是从第一圈第一个班次开始
  456 + for (i = 1; i < _headWayBcArray.length; i++) {
  457 + _qArray = _headWayBcArray[i].qObj;
  458 +
  459 + j = 1;
  460 + _kssj = StrategyUtils.addMinute(
  461 + _qArray[1]._bc1_.getFcTimeObj(),
  462 + _qArray[1]._bc1_.getBcTime() +
  463 + _qArray[1]._bc1_.getStopTime()
  464 + );
  465 + // TODO:向后拉6个班次
  466 + _qArray[1].hasBc2 = true;
  467 + _qArray[1]._bc2_ =
  468 + StrategyUtils.getFactory().createBcObj(
  469 + "normal", false, lpArray[i].lpNo,
  470 + 3, _kssj, _paramObj);
  471 + _kssj = StrategyUtils.addMinute(
  472 + _qArray[1]._bc2_.getFcTimeObj(),
  473 + _qArray[1]._bc2_.getBcTime() +
  474 + _qArray[1]._bc2_.getStopTime()
  475 + );
  476 +
  477 + _qArray[2].hasBc1 = true;
  478 + _qArray[2]._bc1_ =
  479 + StrategyUtils.getFactory().createBcObj(
  480 + "normal", true, lpArray[i].lpNo,
  481 + 3, _kssj, _paramObj);
  482 + _kssj = StrategyUtils.addMinute(
  483 + _qArray[2]._bc1_.getFcTimeObj(),
  484 + _qArray[2]._bc1_.getBcTime() +
  485 + _qArray[2]._bc1_.getStopTime()
  486 + );
  487 + _qArray[2].hasBc2 = true;
  488 + _qArray[2]._bc2_ =
  489 + StrategyUtils.getFactory().createBcObj(
  490 + "normal", false, lpArray[i].lpNo,
  491 + 3, _kssj, _paramObj);
  492 +
  493 +
  494 + }
270 495  
271 496 }
272 497  
... ... @@ -275,4 +500,5 @@ var StrategyHeadway = function() {
275 500 };
276 501  
277 502 return headWayF;
  503 +
278 504 }();
279 505 \ No newline at end of file
... ...
src/main/resources/static/pages/base/timesmodel/js/strategy/strategy-paramter.js deleted 100644 → 0
1   -/**
2   - * 策略参数,包装form表单参数及其他参数。
3   - * @param saa todo
4   - * @param cara todo
5   - * @param map 原始表单参数
6   - * @param seMap todo
7   - * @param dataMap todo
8   - * @constructor
9   - */
10   -var StrategyParamter = function(saa , cara, map , seMap , dataMap) {
11   - var _formMap = map; // 表单参数
12   - var _travelTimeObj_fun = function() { // 计算行驶时间对象
13   - var upMoningPeakTravelTime =
14   - isNaN(_formMap.earlyUpTime) ?
15   - parseInt(_formMap.upTravelTime) :
16   - parseInt(_formMap.earlyUpTime);
17   - var downMoningPeakTravelTime =
18   - isNaN(_formMap.earlyDownTime) ?
19   - parseInt(_formMap.downTravelTime) :
20   - parseInt(_formMap.earlyDownTime);
21   - var upEveningPeakTravelTime =
22   - isNaN(_formMap.lateUpTime) ?
23   - parseInt(_formMap.upTravelTime) :
24   - parseInt(_formMap.lateUpTime);
25   - var downEveningPeakTravelTime =
26   - isNaN(_formMap.lateDownTime) ?
27   - parseInt(_formMap.downTravelTime) :
28   - parseInt(_formMap.lateDownTime);
29   - var upTroughTravelTime =
30   - isNaN(_formMap.troughUpTime) ?
31   - parseInt(_formMap.upTravelTime) :
32   - parseInt(_formMap.troughUpTime);
33   - var downTroughTravelTime =
34   - isNaN(_formMap.troughDownTime) ?
35   - parseInt(_formMap.downTravelTime) :
36   - parseInt(_formMap.troughDownTime);
37   -
38   - return { // TODO:暂时获取标准信息,之后改成历史数据,可能需要使用promise封装
39   - "moningpeak": [
40   - upMoningPeakTravelTime,
41   - downMoningPeakTravelTime
42   - ],
43   - "eveningpeak": [
44   - upEveningPeakTravelTime,
45   - downEveningPeakTravelTime
46   - ],
47   - "trough": [
48   - upTroughTravelTime,
49   - downTroughTravelTime
50   - ]
51   - }
52   - };
53   - var _travelTimeObj = _travelTimeObj_fun(); // 行驶时间对象
54   -
55   - var _travelLcObj_fun = function() { // 计算行驶里程对象
56   - return [
57   - { // 上行里程
58   - "normalLc": _formMap.upMileage,
59   - "inLc": _formMap.upInMileage,
60   - "outLc": _formMap.upOutMileage
61   - },
62   - { // 下行里程
63   - "normalLc": _formMap.downMileage,
64   - "inLc": _formMap.downInMileage,
65   - "outLc": _formMap.downOutMileage
66   - }
67   - ];
68   - };
69   - var _travelLcObj = _travelLcObj_fun(); // 行驶里程对象
70   -
71   - var _stopTypeObj_fun = function() { // 获取停站类型
72   - var isMasterStop = false; // 是否主站停
73   - var isMasterUpStop = false; // 主站停是否上行站点
74   - if (_formMap) {
75   - var fm_temp = _formMap.stt.split("/");
76   - if (fm_temp.length == 1) { // 双向停站
77   - isMasterStop = false;
78   - } else {
79   - isMasterStop = true;
80   - if (fm_temp[1] == "0") {
81   - isMasterUpStop = true;
82   - } else {
83   - isMasterUpStop = false;
84   - }
85   - }
86   - } else {
87   - throw "停站类型没有选择!";
88   - }
89   -
90   - return {
91   - isMasterStop: isMasterStop,
92   - isMasterUpStop: isMasterUpStop
93   - }
94   - };
95   - var _stopTypeObj = _stopTypeObj_fun(); // 停站类型
96   -
97   -
98   - var _firstLastDepartureTimeStrObj_fun = function() { // 计算首班车,末班车行驶时间字符串
99   - return {
100   - up: { // 上行
101   - firstVehicleDepartureTimeStr: _formMap.startStationFirstTime,
102   - lastVehicleDepartureTimeStr: _formMap.startStationEndTime
103   - },
104   - down: { // 下行
105   - firstVehicleDepartureTimeStr: _formMap.endStationFirstTime,
106   - lastVehicleDepartureTimeStr: _formMap.endStationEndTime
107   - }
108   - };
109   - };
110   - var _firstLastDepartureTimeStrObj = _firstLastDepartureTimeStrObj_fun(); // 首班车,末班车行驶时间字符串
111   -
112   - var _timeIntervalObj_fun = function() { // 计算时间段划分对象
113   - return {
114   - moningPeakTimeStrs: {
115   - start: _formMap.earlyStartTime,
116   - end: _formMap.earlyEndTime
117   - },
118   - eveningPeakTimeStrs: {
119   - start: _formMap.lateStartTime,
120   - end: _formMap.lateEndTime
121   - }
122   -
123   - // TODO:其他时间段以后再加
124   - };
125   - };
126   - var _timeIntervalObj = _timeIntervalObj_fun(); // 时间段划分对象
127   -
128   - var _startEndStopObj_fun = function() { // 计算起点站终点站对象
129   - return {
130   - up: {
131   - qdz: { // 起点站
132   - id: dataMap.qdzArr[0]
133   - },
134   - zdz: { // 终点站
135   - id: dataMap.zdzArr[0]
136   - }
137   - },
138   - down: {
139   - qdz: { // 起点站
140   - id: dataMap.qdzArr[1]
141   - },
142   - zdz: { // 终点站
143   - id: dataMap.zdzArr[1]
144   - }
145   - }
146   -
147   - };
148   - };
149   - var _startEndStopObj = _startEndStopObj_fun(); // 起点站终点站对象
150   -
151   - var _xlObj_fun = function() { // 计算线路对象
152   - return {
153   - xl: {
154   - id: _formMap.lineName.split('_')[0]
155   - }
156   - };
157   - };
158   - var _xlObj = _xlObj_fun();
159   -
160   - var _parkObj_fun = function() { // 计算停车场对象
161   - return {
162   - park: {
163   - id: _formMap.tcc_id
164   - }
165   - };
166   - };
167   - var _parkObj = _parkObj_fun(); // 停车场对象
168   -
169   - var _ttInfoObj_fun = function() { // 计算时刻表对象
170   - return {
171   - ttinfo: {
172   - id: _formMap.skbName
173   - }
174   - };
175   - };
176   - var _ttInfoObj = _ttInfoObj_fun(); // 时刻表对象
177   -
178   - var _xlDirObj_fun = function() { // 计算线路上下行对象
179   - return {
180   - up: {
181   - code: 0,
182   - gdesc: 'relationshipGraph-up'
183   - },
184   - down: {
185   - code: 1,
186   - gdesc: 'relationshipGraph-down'
187   - }
188   - }
189   - };
190   - var _xlDirObj = _xlDirObj_fun(); // 线路上下行对象
191   -
192   - return {
193   - // 重置参数内容,参数同构造函数
194   - reset: function(saa , cara, map , seMap , dataMap) {
195   - _formMap = map; // 表单参数
196   - _travelTimeObj = _travelTimeObj_fun(); // 行驶时间对象
197   - _travelLcObj = _travelLcObj_fun(); // 行驶里程对象
198   - _stopTypeObj = _stopTypeObj_fun(); // 停站类型
199   - _firstLastDepartureTimeStrObj = _firstLastDepartureTimeStrObj_fun(); // 首班车,末班车行驶时间字符串
200   - _timeIntervalObj = _timeIntervalObj_fun(); // 时间段划分对象
201   - _startEndStopObj = _startEndStopObj_fun(); // 起点站终点站对象
202   - _xlObj = _xlObj_fun(); // 线路对象
203   - _parkObj = _parkObj_fun(); // 停车场对象
204   - _ttInfoObj = _ttInfoObj_fun(); // 时刻表对象
205   - _xlDirObj = _xlDirObj_fun(); // 线路上下行对象
206   -
207   - // TODO:还有其他参数
208   - },
209   -
210   - /**
211   - * 获取停站类型对象。
212   - * @returns {{isMasterStop, isMasterUpStop}}
213   - */
214   - getStopTypeObj: function() {
215   - return _stopTypeObj;
216   - },
217   - /**
218   - * 获取行驶时间对象。
219   - * @returns {{moningpeak, eveningpeak, trough}}
220   - */
221   - getTravelTimeObj: function() {
222   - return _travelTimeObj;
223   - },
224   - /**
225   - * 获取行驶里程对象。
226   - */
227   - getTravelLcObj: function() {
228   - return _travelLcObj;
229   - },
230   - /**
231   - * 获取首班车发车时间字符串对象(格式:如 12:01,数组0代表上行,数组1代表下行)。
232   - * @returns {{up, down}}
233   - */
234   - getFirstLastDepartureTimeStrObj: function() {
235   - return _firstLastDepartureTimeStrObj;
236   - },
237   - /**
238   - * 获取时间段划分对象。
239   - * @returns {{moningPeakTimeStrs, eveningPeakTimeStrs}}
240   - */
241   - getTimeIntervalObj: function() {
242   - return _timeIntervalObj;
243   - },
244   - /**
245   - * 获取起点站终点站对象。
246   - * @returns {{up, down}}
247   - */
248   - getStartEndStopObj: function() {
249   - return _startEndStopObj;
250   - },
251   - /**
252   - * 获取线路对象。
253   - * @returns {{xl}}
254   - */
255   - getXlObj: function() {
256   - return _xlObj;
257   - },
258   - /**
259   - * 获取停车场对象。
260   - * @returns {{park}}
261   - */
262   - getParkObj: function() {
263   - return _parkObj;
264   - },
265   - /**
266   - * 获取时刻表对象。
267   - * @returns {{ttinfo}}
268   - */
269   - getTTInfoObj: function() {
270   - return _ttInfoObj;
271   - },
272   - /**
273   - * 获取线路上下行对象。
274   - * @returns {{up, down}|*}
275   - */
276   - getXlDirObj: function() {
277   - return _xlDirObj;
278   - },
279   - /**
280   - * 获取车辆总数。
281   - */
282   - getClzs: function() {
283   - return parseInt(_formMap.clzs);
284   - }
285   -
286   - };
287   -};
288 0 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/strategy/strategy-util.js deleted 100644 → 0
1   -/**
2   - * 策略工具类。
3   - *
4   - * TODO:所有的时间使用moment.js计算,需要验证
5   - */
6   -var StrategyUtils = function() {
7   - var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀
8   - var date_wrap_format = "YYYY-MM-DD HH:mm"; // 日期格式
9   - /**
10   - * 将时间包装成日期,方便计算。
11   - * @param timeStr 时间格式,如 06:30
12   - */
13   - var wrapTime = function(timeStr) {
14   - return moment(
15   - date_wrap_prefix + timeStr,
16   - date_wrap_format
17   - );
18   - };
19   -
20   - // 工厂类
21   - var _factoryFun = function() {
22   - return {
23   - // 参数对象创建
24   - creatParamterObj: function(saa , cara, map , seMap , dataMap) {
25   - return StrategyParamter(saa , cara, map , seMap , dataMap);
26   - },
27   - // 创建班次对象(使用的是固定停站时间,浮动需要在外面重新计算)
28   - creatBcObjWithFixedStopTime: function(bcType, isUp, lp, fcno, fcTimeStart, paramObj) {
29   - var _bcObj = {
30   - parent: lp,
31   - lpNo: lp,
32   - lp: null,
33   - lpName: lp,
34   - lpType: '普通路牌',
35   - bcType: bcType,
36   - fcno: fcno,
37   - isfb: 0,
38   - isSwitchXl: null,
39   - bz: null
40   - };
41   -
42   - // 线路上下行
43   - var _xlDirObj = paramObj.getXlDirObj();
44   - _bcObj.xlDir = isUp ? _xlDirObj.up.gdesc : _xlDirObj.down.gdesc;
45   -
46   - // 里程
47   - _bcObj.jhlc = StrategyUtils.getTravelLcNumber(fcTimeStart, isUp, bcType, paramObj);
48   -
49   - // 停车场
50   - var _parkObj = paramObj.getParkObj();
51   - _bcObj.tcc = _parkObj.park.id;
52   -
53   - // 时刻表
54   - var _ttInfoObj = paramObj.getTTInfoObj();
55   - _bcObj.ttinfo = _ttInfoObj.ttinfo.id;
56   -
57   - // 线路
58   - var _xlObj = paramObj.getXlObj();
59   - _bcObj.xl = _xlObj.xl.id;
60   -
61   - // 起点站、终点站
62   - var _startEndStopObj = paramObj.getStartEndStopObj();
63   - _bcObj.qdz = isUp ? _startEndStopObj.up.qdz.id : _startEndStopObj.down.qdz.id;
64   - _bcObj.zdz = isUp ? _startEndStopObj.down.zdz.id : _startEndStopObj.down.zdz.id;
65   -
66   - // 发车时间,行驶时间,到达时间,停站时间
67   - var wrap_fctime = wrapTime(fcTimeStart);
68   - _bcObj.fcsj = fcTimeStart;
69   - _bcObj.bcsj = StrategyUtils.getTravelTimeNumber(fcTimeStart, isUp, paramObj);
70   - _bcObj.ARRIVALTIME = wrap_fctime.add(_bcObj.bcsj, 'm').format('HH:mm');
71   - _bcObj.STOPTIME = StrategyUtils.getFixedStopNumber(_bcObj.ARRIVALTIME, isUp, paramObj);
72   -
73   - return _bcObj;
74   - }
75   - }
76   - };
77   -
78   - return {
79   - getFactory: function() { // 工厂对象创建
80   - return _factoryFun();
81   - },
82   -
83   - toWrapTime: function(timeStr) { // 包装日期
84   - return wrapTime(timeStr);
85   - },
86   -
87   - /**
88   - * 判定某个班次是否是早高峰班次。
89   - * @param timeStr 班次时间字符串
90   - * @param paramObj 参数对象
91   - */
92   - isMoningPeakVehicleBc: function(timeStr, paramObj) {
93   - var _timeIntervalObj = paramObj.getTimeIntervalObj();
94   -
95   - // 早高峰开始时间
96   - var st = wrapTime(
97   - _timeIntervalObj.moningPeakTimeStrs.start
98   - );
99   - // 早高峰结束时间
100   - var et = wrapTime(
101   - _timeIntervalObj.moningPeakTimeStrs.end
102   - );
103   - // 包装日期
104   - var wt = wrapTime(timeStr);
105   - return wt.isBetween(st, et, null, "[]");
106   - },
107   -
108   - /**
109   - * 判定某个班次是否是晚高峰班次。
110   - * @param timeStr 班次时间字符串
111   - * @param paramObj 参数对象
112   - */
113   - isEveningPeakVehicleBc: function(timeStr, paramObj) {
114   - var _timeIntervalObj = paramObj.getTimeIntervalObj();
115   -
116   - // 晚高峰开始时间
117   - var st = wrapTime(
118   - _timeIntervalObj.eveningPeakTimeStrs.start
119   - );
120   - // 晚高峰结束时间
121   - var et = wrapTime(
122   - _timeIntervalObj.eveningPeakTimeStrs.end
123   - );
124   - // 包装日期
125   - var wt = wrapTime(timeStr);
126   - return wt.isBetween(st, et, null, "[]");
127   - },
128   -
129   - /**
130   - * 判定某个班次是否是低谷班次。
131   - * @param timeStr 班次时间字符串
132   - * @param paramObj 参数对象
133   - */
134   - isTroughVehicleBc: function(timeStr, paramObj) {
135   - return (
136   - !this.isMoningPeakVehicleBc(timeStr, paramObj) &&
137   - !this.isEveningPeakVehicleBc(timeStr, paramObj)
138   - );
139   - },
140   - /**
141   - * 判定某个低谷班次是否在早高峰开始之前。
142   - * @param timeStr 班次时间字符串
143   - * @param paramObj 参数对象
144   - */
145   - isTroughBeforMoningPeakStartVehicleBc: function(timeStr, paramObj) {
146   - var _timeIntervalObj = paramObj.getTimeIntervalObj();
147   -
148   - // 早高峰开始时间
149   - var st = wrapTime(
150   - _timeIntervalObj.moningPeakTimeStrs.start
151   - );
152   - // 包装日期
153   - var wt = wrapTime(timeStr);
154   - return wt.isBefore(st);
155   - },
156   - /**
157   - * 判定某个低谷班次是否在晚高峰结束之后。
158   - * @param timeStr 班次时间字符串
159   - * @param paramObj 参数对象
160   - */
161   - isTroughAfterEveningPeakEndVehicleBc: function(timeStr, paramObj) {
162   - var _timeIntervalObj = paramObj.getTimeIntervalObj();
163   -
164   - // 晚高峰结束时间
165   - var et = wrapTime(
166   - _timeIntervalObj.eveningPeakTimeStrs.end
167   - );
168   - // 包装日期
169   - var wt = wrapTime(timeStr);
170   - return wt.isAfter(et);
171   - },
172   -
173   - /**
174   - * 获取固定的停站时间(固定停站时间都是选的最大值)
175   - * @param timeStr 班次时间字符串
176   - * @param isUp 是否上行
177   - * @param paramObj 参数对象
178   - */
179   - getFixedStopNumber: function(timeStr, isUp, paramObj) {
180   - var peakStopTime; // 高峰停站时间
181   - var troughStopTime; // 低谷停站时间
182   - var secondaryStopTime; // 副站停站时间
183   -
184   - var _stopTypeObj = paramObj.getStopTypeObj();
185   - var _travelTimeObj = paramObj.getTravelTimeObj();
186   -
187   - if (_stopTypeObj.isMasterStop) { // 主站停站
188   - if (isUp == _stopTypeObj.isMasterUpStop) {
189   - if (isUp) { // 上行
190   - if (this.isMoningPeakVehicleBc(timeStr, paramObj)) { // 早高峰
191   - peakStopTime = Math.floor(_travelTimeObj.moningpeak[0] * 0.1); // 行驶时间的10%
192   - if (peakStopTime < 3) { // 不少于3分钟
193   - peakStopTime = 3;
194   - }
195   - return peakStopTime;
196   - } else if (this.isEveningPeakVehicleBc(timeStr, paramObj)) { // 晚高峰
197   - peakStopTime = Math.floor(_travelTimeObj.eveningpeak[0] * 0.1); // 行驶时间的10%
198   - if (peakStopTime < 3) { // 不少于3分钟
199   - peakStopTime = 3;
200   - }
201   - return peakStopTime;
202   - } else { // 低谷
203   - if (this.isTroughBeforMoningPeakStartVehicleBc(timeStr, paramObj)) { // 早高峰开始前
204   - troughStopTime = Math.floor(_travelTimeObj.trough[0] * 0.2); // 行驶时间20%
205   - if (troughStopTime < 10) { // 不少于10分钟
206   - troughStopTime = 10;
207   - }
208   - return troughStopTime;
209   - } else if (this.isTroughAfterEveningPeakEndVehicleBc(timeStr, paramObj)) { // 晚高峰结束后
210   - troughStopTime = Math.floor(_travelTimeObj.trough[0] * 0.2); // 行驶时间20%
211   - if (troughStopTime < 10) { // 不少于10分钟
212   - troughStopTime = 10;
213   - }
214   - return troughStopTime;
215   - } else { // 早高峰,晚高峰之间
216   - troughStopTime = Math.floor(_travelTimeObj.trough[0] * 0.15); // 行驶时间15%
217   - if (troughStopTime < 10) { // 不少于10分钟
218   - troughStopTime = 10;
219   - }
220   - return troughStopTime;
221   - }
222   - }
223   - } else { // 下行
224   - if (this.isMoningPeakVehicleBc(timeStr, paramObj)) { // 早高峰
225   - peakStopTime = Math.floor(_travelTimeObj.moningpeak[1] * 0.1); // 行驶时间的10%
226   - if (peakStopTime < 3) { // 不少于3分钟
227   - peakStopTime = 3;
228   - }
229   - return peakStopTime;
230   - } else if (this.isEveningPeakVehicleBc(timeStr, paramObj)) { // 晚高峰
231   - peakStopTime = Math.floor(_travelTimeObj.eveningpeak[1] * 0.1); // 行驶时间的10%
232   - if (peakStopTime < 3) { // 不少于3分钟
233   - peakStopTime = 3;
234   - }
235   - return peakStopTime;
236   - } else { // 低谷
237   - if (this.isTroughBeforMoningPeakStartVehicleBc(timeStr, paramObj)) { // 早高峰开始前
238   - troughStopTime = Math.floor(_travelTimeObj.trough[1] * 0.2); // 行驶时间20%
239   - if (troughStopTime < 10) { // 不少于10分钟
240   - troughStopTime = 10;
241   - }
242   - return troughStopTime;
243   - } else if (this.isTroughAfterEveningPeakEndVehicleBc(timeStr, paramObj)) { // 晚高峰结束后
244   - troughStopTime = Math.floor(_travelTimeObj.trough[1] * 0.2); // 行驶时间20%
245   - if (troughStopTime < 10) { // 不少于10分钟
246   - troughStopTime = 10;
247   - }
248   - return troughStopTime;
249   - } else { // 早高峰,晚高峰之间
250   - troughStopTime = Math.floor(_travelTimeObj.trough[1] * 0.15); // 行驶时间15%
251   - if (troughStopTime < 10) { // 不少于10分钟
252   - troughStopTime = 10;
253   - }
254   - return troughStopTime;
255   - }
256   - }
257   - }
258   - } else { // 副站停战,2到3分钟
259   - secondaryStopTime = 3;
260   - return secondaryStopTime; // 直接返回3分钟
261   - }
262   - } else { // 双向停站
263   - if (isUp) { // 上行
264   - if (this.isMoningPeakVehicleBc(timeStr, paramObj)) { // 早高峰
265   - peakStopTime = Math.floor(_travelTimeObj.moningpeak[0] * 0.1); // 行驶时间的10%
266   - if (peakStopTime < 3) { // 不少于3分钟
267   - peakStopTime = 3;
268   - }
269   - return peakStopTime;
270   - } else if (this.isEveningPeakVehicleBc(timeStr, paramObj)) { // 晚高峰
271   - peakStopTime = Math.floor(_travelTimeObj.eveningpeak[0] * 0.1); // 行驶时间的10%
272   - if (peakStopTime < 3) { // 不少于3分钟
273   - peakStopTime = 3;
274   - }
275   - return peakStopTime;
276   - } else { // 低谷
277   - if (this.isTroughBeforMoningPeakStartVehicleBc(timeStr, paramObj)) { // 早高峰开始前
278   - troughStopTime = Math.floor(_travelTimeObj.trough[0] * 0.2); // 行驶时间20%
279   - if (troughStopTime < 10) { // 不少于10分钟
280   - troughStopTime = 10;
281   - }
282   - return troughStopTime;
283   - } else if (this.isTroughAfterEveningPeakEndVehicleBc(timeStr, paramObj)) { // 晚高峰结束后
284   - troughStopTime = Math.floor(_travelTimeObj.trough[0] * 0.2); // 行驶时间20%
285   - if (troughStopTime < 10) { // 不少于10分钟
286   - troughStopTime = 10;
287   - }
288   - return troughStopTime;
289   - } else { // 早高峰,晚高峰之间
290   - troughStopTime = Math.floor(_travelTimeObj.trough[0] * 0.15); // 行驶时间15%
291   - if (troughStopTime < 10) { // 不少于10分钟
292   - troughStopTime = 10;
293   - }
294   - return troughStopTime;
295   - }
296   - }
297   - } else { // 下行
298   - if (this.isMoningPeakVehicleBc(timeStr, paramObj)) { // 早高峰
299   - peakStopTime = Math.floor(_travelTimeObj.moningpeak[1] * 0.1); // 行驶时间的10%
300   - if (peakStopTime < 3) { // 不少于3分钟
301   - peakStopTime = 3;
302   - }
303   - return peakStopTime;
304   - } else if (this.isEveningPeakVehicleBc(timeStr, paramObj)) { // 晚高峰
305   - peakStopTime = Math.floor(_travelTimeObj.eveningpeak[1] * 0.1); // 行驶时间的10%
306   - if (peakStopTime < 3) { // 不少于3分钟
307   - peakStopTime = 3;
308   - }
309   - return peakStopTime;
310   - } else { // 低谷
311   - if (this.isTroughBeforMoningPeakStartVehicleBc(timeStr, paramObj)) { // 早高峰开始前
312   - troughStopTime = Math.floor(_travelTimeObj.trough[1] * 0.2); // 行驶时间20%
313   - if (troughStopTime < 10) { // 不少于10分钟
314   - troughStopTime = 10;
315   - }
316   - return troughStopTime;
317   - } else if (this.isTroughAfterEveningPeakEndVehicleBc(timeStr, paramObj)) { // 晚高峰结束后
318   - troughStopTime = Math.floor(_travelTimeObj.trough[1] * 0.2); // 行驶时间20%
319   - if (troughStopTime < 10) { // 不少于10分钟
320   - troughStopTime = 10;
321   - }
322   - return troughStopTime;
323   - } else { // 早高峰,晚高峰之间
324   - troughStopTime = Math.floor(_travelTimeObj.trough[1] * 0.15); // 行驶时间15%
325   - if (troughStopTime < 10) { // 不少于10分钟
326   - troughStopTime = 10;
327   - }
328   - return troughStopTime;
329   - }
330   - }
331   - }
332   - }
333   -
334   - },
335   -
336   - /**
337   - * 获取行驶时间。
338   - * @param timeStr 班次时间字符串
339   - * @param isUp 是否上行
340   - * @param paramObj 参数对象
341   - */
342   - getTravelTimeNumber: function(timeStr, isUp, paramObj) {
343   - var _travelTimeObj = paramObj.getTravelTimeObj();
344   -
345   - if (isUp) {
346   - if (this.isMoningPeakVehicleBc(timeStr, paramObj)) {
347   - return _travelTimeObj.moningpeak[0];
348   - } else if (this.isEveningPeakVehicleBc(timeStr, paramObj)) {
349   - return _travelTimeObj.eveningpeak[0];
350   - } else {
351   - return _travelTimeObj.trough[0];
352   - }
353   - } else {
354   - if (this.isMoningPeakVehicleBc(timeStr, paramObj)) {
355   - return _travelTimeObj.moningpeak[1];
356   - } else if (this.isEveningPeakVehicleBc(timeStr, paramObj)) {
357   - return _travelTimeObj.eveningpeak[1];
358   - } else {
359   - return _travelTimeObj.trough[1];
360   - }
361   - }
362   - },
363   -
364   - /**
365   - * 获取行驶里程。
366   - * @param timeStr 班次时间字符串
367   - * @param isUp 是否上行
368   - * @param bcType 班次类型
369   - * @param paramObj 参数对象
370   - */
371   - getTravelLcNumber: function(timeStr, isUp, bcType, paramObj) {
372   - var _travelLcObj = paramObj.getTravelLcObj();
373   - if (isUp) {
374   - if (bcType == "in") {
375   - return _travelLcObj[0].inLc;
376   - } else if (bcType == "out") {
377   - return _travelLcObj[0].outLc;
378   - } else {
379   - // 基本班次类型,暂时不考虑区间等其他班次类型
380   - // 暂时不考虑高峰低谷里程的区分
381   - return _travelLcObj[0].normalLc;
382   - }
383   - } else {
384   - if (bcType == "in") {
385   - return _travelLcObj[1].inLc;
386   - } else if (bcType == "out") {
387   - return _travelLcObj[1].outLc;
388   - } else {
389   - // 基本班次类型,暂时不考虑区间等其他班次类型
390   - // 暂时不考虑高峰低谷里程的区分
391   - return _travelLcObj[1].normalLc;
392   - }
393   - }
394   - }
395   -
396   - };
397   -
398   -}();
399 0 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/tepms/fcjx_temp.html
... ... @@ -228,6 +228,15 @@
228 228 <input type="text" class="form-control" placeholder="车辆数" name="gfjypcs" id="gfjypcsInput" min="1">
229 229 </div>
230 230 </div>
  231 +
  232 + <div class="col-md-6">
  233 + <label class="control-label col-md-5">
  234 + <span class="required"> * </span> 加班车路牌数 :</label>
  235 + <div class="col-md-5">
  236 + <input type="text" class="form-control" placeholder="加班路牌数" name="jblps" id="jblpsInput" min="1">
  237 + </div>
  238 + </div>
  239 +
231 240 </div>
232 241  
233 242 <!-- 隐藏字段-时间 -->
... ... @@ -428,6 +437,12 @@
428 437 <p class="form-control-static" data-display="gfjypcs"> </p>
429 438 </div>
430 439 </div>
  440 + <div class="col-md-6">
  441 + <label class="control-label col-md-5"> 加班车路牌数 : </label>
  442 + <div class="col-md-4">
  443 + <p class="form-control-static" data-display="jblps"> </p>
  444 + </div>
  445 + </div>
431 446  
432 447 </div>
433 448  
... ...
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/detail.html
... ... @@ -49,7 +49,7 @@
49 49 </div>
50 50 </div>
51 51 <div class="form-group has-success has-feedback">
52   - <label class="col-md-2 control-label">号*:</label>
  52 + <label class="col-md-2 control-label">号*:</label>
53 53 <div class="col-md-3">
54 54 <input type="text" class="form-control" name="jobCode"
55 55 ng-model="ctrl.employeeInfoForDetail.jobCode" readonly/>
... ...
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/list.html
... ... @@ -6,7 +6,8 @@
6 6 <tr role="row" class="heading">
7 7 <th style="width:70px;">序号</th>
8 8 <th style="width: 130px;">姓名</th>
9   - <th style="width: 130px;">员工编号</th>
  9 + <th style="width: 100px;">编号</th>
  10 + <th style="width: 100px;">工号</th>
10 11 <th style="width: 5%;">性别</th>
11 12 <th style="width: 15%;">所在公司</th>
12 13 <th >分公司</th>
... ... @@ -20,7 +21,10 @@
20 21 <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().personnelName_like" placeholder="输入姓名..."/>
21 22 </td>
22 23 <td>
23   - <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jobCode_like" placeholder="输入工号..."/>
  24 + <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jobCode_like" placeholder="输入编号..."/>
  25 + </td>
  26 + <td>
  27 + <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jobCodeori_like" placeholder="输入工号..."/>
24 28 </td>
25 29 <td>
26 30 </td>
... ... @@ -106,6 +110,9 @@
106 110 <span ng-bind="info.jobCode"></span>
107 111 </td>
108 112 <td>
  113 + <span ng-bind="info.jobCodeori"></span>
  114 + </td>
  115 + <td>
109 116 <span ng-bind="info.personnelType | dict:'sexType':'未知'"></span>
110 117  
111 118 <!--<div ng-if="info.personnelType == '1'">-->
... ...
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/detail.html
... ... @@ -68,7 +68,7 @@
68 68 <label class="col-md-2 control-label">驾驶员工号*:</label>
69 69 <div class="col-md-3">
70 70 <input type="text" class="form-control" name="jsy_code"
71   - ng-model="ctrl.employeeConfigForDetail.jsy.jobCode" readonly/>
  71 + ng-model="ctrl.employeeConfigForDetail.jsy.jobCodeori" readonly/>
72 72 </div>
73 73 </div>
74 74  
... ... @@ -84,7 +84,7 @@
84 84 <label class="col-md-2 control-label">售票员工号:</label>
85 85 <div class="col-md-3">
86 86 <input type="text" class="form-control" name="spy_code"
87   - ng-model="ctrl.employeeConfigForDetail.spy.jobCode" readonly/>
  87 + ng-model="ctrl.employeeConfigForDetail.spy.jobCodeori" readonly/>
88 88 </div>
89 89 </div>
90 90  
... ...
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/list.html
... ... @@ -34,13 +34,13 @@
34 34 </td>
35 35 <td></td>
36 36 <td>
37   - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition()['jsy.jobCode_like']" placeholder="输入工号..."/>
  37 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition()['jsy.jobCodeori_like']" placeholder="输入工号..."/>
38 38 </td>
39 39 <td>
40 40 <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition()['jsy.personnelName_like']" placeholder="输入姓名..."/>
41 41 </td>
42 42 <td>
43   - <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition()['spy.jobCode_like']" placeholder="输入工号..."/>
  43 + <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition()['spy.jobCodeori_like']" placeholder="输入工号..."/>
44 44 </td>
45 45 <td>
46 46 <input type="text" class="form-control form-filter input-sm" ng-model="ctrl.searchCondition()['spy.personnelName_like']" placeholder="输入姓名..."/>
... ... @@ -80,13 +80,13 @@
80 80 <span ng-bind="info.dbbm"></span>
81 81 </td>
82 82 <td>
83   - <span ng-bind="info.jsy.jobCode"></span>
  83 + <span ng-bind="info.jsy.jobCodeori"></span>
84 84 </td>
85 85 <td>
86 86 <span ng-bind="info.jsy.personnelName"></span>
87 87 </td>
88 88 <td>
89   - <span ng-bind="info.spy.jobCode"></span>
  89 + <span ng-bind="info.spy.jobCodeori"></span>
90 90 </td>
91 91 <td>
92 92 <span ng-bind="info.spy.personnelName"></span>
... ...
src/main/resources/static/pages/summary/excel/快慢误点报表.xls
No preview for this file type