Commit eda9a5c463952d5665b646980cdf35ecc657ee97

Authored by 徐烜
1 parent 8dfecfae

调度值勤日报、调度计划详细修正v1

1、调度计划里的详细修改单个班次里添加线路版本
2、添加调度值勤日报修正营运状态和备注信息保存功能
   修改SchedulePlanInfo,添加新的字段,修改次数,修改原因编号,修改描述
   修改SchedulePlanInfoService,修改查询语句带备注和状态数据
   修改SchedulePlanInfoServiceImpl,修改保存功能,每次保存都修改修改次数的新字段
   修改saPlanInfoEdit2指令,添加保存营运原因和描述的逻辑
   修改saSelect5指令,修改local数据源读取和搜索的逻辑
   修改调度值勤日报的list.html显示
src/main/java/com/bsth/entity/schedule/SchedulePlanInfo.java
... ... @@ -136,6 +136,14 @@ public class SchedulePlanInfo extends BEntity {
136 136 /** 时刻表的明细备注 */
137 137 private String remark;
138 138  
  139 + //---------------- 修改时使用的字段 -----------------//
  140 + /** 调整原因(在调度执勤日报页面中修改,选择营运状态) */
  141 + private Integer modifyReason;
  142 + /** 调整的备注(在调度执勤日报页面中修改,与时刻表的班次备注区分开) */
  143 + private String modifyRemark;
  144 + /** 调整的次数(在调度执勤日报页面,排班计划明细里,改的话都会增加) */
  145 + private Integer modifyCount;
  146 +
139 147  
140 148 // @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
141 149 // @JoinTable(
... ... @@ -761,4 +769,28 @@ public class SchedulePlanInfo extends BEntity {
761 769 public void setSchedulePlan(SchedulePlan schedulePlan) {
762 770 this.schedulePlan = schedulePlan;
763 771 }
  772 +
  773 + public Integer getModifyReason() {
  774 + return modifyReason;
  775 + }
  776 +
  777 + public void setModifyReason(Integer modifyReason) {
  778 + this.modifyReason = modifyReason;
  779 + }
  780 +
  781 + public String getModifyRemark() {
  782 + return modifyRemark;
  783 + }
  784 +
  785 + public void setModifyRemark(String modifyRemark) {
  786 + this.modifyRemark = modifyRemark;
  787 + }
  788 +
  789 + public Integer getModifyCount() {
  790 + return modifyCount;
  791 + }
  792 +
  793 + public void setModifyCount(Integer modifyCount) {
  794 + this.modifyCount = modifyCount;
  795 + }
764 796 }
... ...
src/main/java/com/bsth/service/schedule/SchedulePlanInfoService.java
... ... @@ -63,6 +63,8 @@ public interface SchedulePlanInfoService extends BService<SchedulePlanInfo, Long
63 63 /** 售票员工号s */
64 64 private List<String> spyGhs;
65 65  
  66 + /** 创建时间 */
  67 + private Date createDate;
66 68 /** 修改时间 */
67 69 private Date updateDate;
68 70 /** 修改人名 */
... ... @@ -70,6 +72,14 @@ public interface SchedulePlanInfoService extends BService&lt;SchedulePlanInfo, Long
70 72 /** 时刻表名字 */
71 73 private String ttInfoName;
72 74  
  75 + //------------------- 修改yuan原因,描述,次数 ------------------------//
  76 + // 修改次数
  77 + private Integer m_count;
  78 + // 修改原因
  79 + private Integer m_reason;
  80 + // 修改描述
  81 + private String m_desc;
  82 +
73 83 @Override
74 84 public int compareTo(SchedulePlanGroupInfo o) {
75 85 // 路牌名字排序,数字路牌名在前,非数字在后
... ... @@ -104,9 +114,13 @@ public interface SchedulePlanInfoService extends BService&lt;SchedulePlanInfo, Long
104 114 ", GROUP_CONCAT(distinct info.j_gh order by info.fcno) as jsyGhs " +
105 115 ", GROUP_CONCAT(distinct info.s_name order by info.fcno) as spyNames " +
106 116 ", GROUP_CONCAT(distinct info.s_gh order by info.fcno) as spyGhs " +
  117 + ", max(info.create_date) as createDate " +
107 118 ", max(info.update_date) as updateDate " +
108 119 ", max(user.user_name) as updateUserName " +
109 120 ", max(info.tt_info_name) as ttInfoName " +
  121 + ", max(info.modify_count) as m_count " +
  122 + ", max(info.modify_reason) as m_reason " +
  123 + ", max(info.modify_remark) as m_desc " +
110 124 "from bsth_c_s_sp_info info left join bsth_c_sys_user user on info.update_by = user.id " +
111 125 "left join bsth_c_s_gbi gbi on info.lp = gbi.id " +
112 126 "where info.xl = ? and info.schedule_date = ? " +
... ... @@ -171,10 +185,15 @@ public interface SchedulePlanInfoService extends BService&lt;SchedulePlanInfo, Long
171 185 this.spyGhs.addAll(Arrays.asList(spyGhs_temp.split(",")));
172 186 }
173 187  
  188 + this.createDate = new Date(rs.getTimestamp("createDate").getTime());
174 189 this.updateDate = new Date(rs.getTimestamp("updateDate").getTime());
175 190 this.updateByName = rs.getString("updateUserName");
176 191 this.ttInfoName = rs.getString("ttInfoName");
177 192  
  193 + this.m_count = rs.getInt("m_count");
  194 + this.m_reason = rs.getInt("m_reason");
  195 + this.m_desc = rs.getString("m_desc");
  196 +
178 197 }
179 198  
180 199 public Integer getXlId() {
... ... @@ -296,6 +315,38 @@ public interface SchedulePlanInfoService extends BService&lt;SchedulePlanInfo, Long
296 315 public void setTtInfoName(String ttInfoName) {
297 316 this.ttInfoName = ttInfoName;
298 317 }
  318 +
  319 + public Integer getM_count() {
  320 + return m_count;
  321 + }
  322 +
  323 + public void setM_count(Integer m_count) {
  324 + this.m_count = m_count;
  325 + }
  326 +
  327 + public Integer getM_reason() {
  328 + return m_reason;
  329 + }
  330 +
  331 + public void setM_reason(Integer m_reason) {
  332 + this.m_reason = m_reason;
  333 + }
  334 +
  335 + public String getM_desc() {
  336 + return m_desc;
  337 + }
  338 +
  339 + public void setM_desc(String m_desc) {
  340 + this.m_desc = m_desc;
  341 + }
  342 +
  343 + public Date getCreateDate() {
  344 + return createDate;
  345 + }
  346 +
  347 + public void setCreateDate(Date createDate) {
  348 + this.createDate = createDate;
  349 + }
299 350 }
300 351  
301 352 //---------------------------- 以下是过去版本 -------------------------------//
... ...
src/main/java/com/bsth/service/schedule/impl/SchedulePlanInfoServiceImpl.java
... ... @@ -26,6 +26,17 @@ public class SchedulePlanInfoServiceImpl extends BServiceImpl&lt;SchedulePlanInfo,
26 26 private JdbcTemplate jdbcTemplate;
27 27  
28 28 @Override
  29 + public SchedulePlanInfo save(SchedulePlanInfo schedulePlanInfo) {
  30 + // 生成计划不是save,使用的是spring batch插入的
  31 + // 这里是单独修改的时候,需要记录修改次数,用于标识被修改过
  32 +
  33 + Integer currentModifyCount = schedulePlanInfo.getModifyCount();
  34 + schedulePlanInfo.setModifyCount(currentModifyCount == null ? 1 : ++ currentModifyCount);
  35 +
  36 + return super.save(schedulePlanInfo);
  37 + }
  38 +
  39 + @Override
29 40 public List<Date> findLastestPlanDate(Integer xlId) {
30 41 String sql = "select max(schedule_date) as sd from bsth_c_s_sp_info " +
31 42 "where xl = ?";
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect5.js
... ... @@ -396,14 +396,30 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
396 396 // 本地动态数据直接显示,暂时不优化
397 397 var ldata = DataStore.getData(type);
398 398 for (var i = 0; i < ldata.length; i++) {
399   - scope[ctrlAs].$$data_real.push(ldata[i]);
  399 + // 闭包绑定返回最终查询的值
  400 + var calcu_str = scope[ctrlAs].$$internal_match_str(ldata[i]);
  401 + if (calcu_str) {
  402 + // 全拼
  403 + if (!ldata[i]["$fullChars"]) {
  404 + ldata[i]["$fullChars"] = pinyin.getFullChars(calcu_str);
  405 + }
  406 + // 简拼
  407 + if (!ldata[i]["$camelChars"]) {
  408 + ldata[i]["$camelChars"] = pinyin.getCamelChars(calcu_str);
  409 + }
  410 + // 原值
  411 + if (!ldata[i]["$calcu_str"]) {
  412 + ldata[i]["$calcu_str"] = calcu_str;
  413 + }
400 414  
  415 + scope[ctrlAs].$$data_real.push(ldata[i]);
  416 + }
401 417 }
402 418  
403 419 // 重新创建内部ui-select显示用数据,默认取10条记录显示
404 420 scope[ctrlAs].$$data = [];
405 421 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
406   - if (scope[ctrlAs].$$data.length < 10) {
  422 + if (scope[ctrlAs].$$data.length < 50) {
407 423 scope[ctrlAs].$$data.push(scope[ctrlAs].$$data_real[k]);
408 424 } else {
409 425 break;
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoEdit2.js
... ... @@ -43,6 +43,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
43 43 var old_max_fcno = 0; // 最大发车顺序号
44 44 var old_firstJCBCFcno = 0; // 第一个进场班次发车顺序号
45 45 var old_half_bcs = 0; // 一般的班次数量
  46 + var old_ddreason = {}; // key:{调度原因}, value:所在list下标数组
  47 + var old_dddesc = {}; // key:{调度描述}, value:所在list下标数组
46 48  
47 49 // 内部变量,变更的车辆,变更的人员
48 50 var new_cl1 = undefined; // 新的车辆1(车辆id_车辆自编号)
... ... @@ -51,7 +53,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
51 53 var new_j2 = undefined; // 新的驾驶员2(驾驶员id_姓名_工号)
52 54 var new_s1 = undefined; // 新的售票员1(售票员id_姓名_工号)
53 55 var new_s2 = undefined; // 新的售票员2(售票员id_姓名_工号)
54   -
  56 + var new_ddreason = undefined; // 调度原因
  57 + var new_dddesc = undefined; // 调度描述
55 58  
56 59 // 表单值,被赋值的次数
57 60 var form_data_assign_count = {
... ... @@ -72,6 +75,42 @@ angular.module(&#39;ScheduleApp&#39;).directive(
72 75 post: function(scope, element, attr) {
73 76  
74 77 /**
  78 + * 刷新调度原因数据。
  79 + */
  80 + scope[ctrlAs].$$internal_refresh_dsdata_ddreason = function() {
  81 + if (new_ddreason) {
  82 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  83 + obj.modifyReason = new_ddreason;
  84 + });
  85 + } else {
  86 + // 清空,不使用旧的
  87 + angular.forEach(old_ddreason, function(value, key) {
  88 + angular.forEach(value, function(i) {
  89 + scope[ctrlAs].ds[i].modifyReason = undefined;
  90 + });
  91 + });
  92 + }
  93 + };
  94 +
  95 + /**
  96 + * 刷新调度描述数据。
  97 + */
  98 + scope[ctrlAs].$$internal_refresh_dsdata_dddesc = function() {
  99 + if (new_dddesc) {
  100 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  101 + obj.modifyRemark = new_dddesc;
  102 + });
  103 + } else {
  104 + // 清空,不使用旧的
  105 + angular.forEach(old_dddesc, function(value, key) {
  106 + angular.forEach(value, function(i) {
  107 + scope[ctrlAs].ds[i].modifyRemark = undefined;
  108 + });
  109 + });
  110 + }
  111 + };
  112 +
  113 + /**
75 114 * 刷新车辆数据。
76 115 */
77 116 scope[ctrlAs].$$internal_refresh_dsdata_cl = function() {
... ... @@ -274,6 +313,34 @@ angular.module(&#39;ScheduleApp&#39;).directive(
274 313 }
275 314 };
276 315  
  316 + //-------------- 监控调度原因的变化 ----------------//
  317 + scope.$watch(
  318 + function() {
  319 + return scope[ctrlAs].fd.ddr;
  320 + },
  321 + function(newValue, oldValue) {
  322 + if (newValue || newValue == 0) {
  323 + new_ddreason = newValue;
  324 + }
  325 + scope[ctrlAs].$$internal_refresh_dsdata_ddreason();
  326 + },
  327 + true
  328 + );
  329 +
  330 + //-------------- 监控调度描述的变化 ----------------//
  331 + scope.$watch(
  332 + function() {
  333 + return scope[ctrlAs].fd.ddrdesc;
  334 + },
  335 + function(newValue, oldValue) {
  336 + if (newValue || newValue == 0) {
  337 + new_dddesc = newValue;
  338 + }
  339 + scope[ctrlAs].$$internal_refresh_dsdata_dddesc();
  340 + },
  341 + true
  342 + );
  343 +
277 344  
278 345 //-------------- 监控表单车辆1的变化 ----------------//
279 346 scope.$watch(
... ... @@ -421,6 +488,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
421 488  
422 489 var cl_ids = []; // 车辆ids数组(有顺序)
423 490 var j_s_ids = []; // 驾驶员ids,售票员ids,[{j:id,s:id},...](有顺序)
  491 + var addreason = []; // 营运调度的原因
  492 + var adddesc = []; // 营运导读的备注
424 493 var isRepeat = false;
425 494 var i = 0;
426 495  
... ... @@ -439,6 +508,18 @@ angular.module(&#39;ScheduleApp&#39;).directive(
439 508 old_s[k3] = [];
440 509 }
441 510  
  511 + var dd4 = obj.modifyReason == null || obj.modifyReason == undefined ? undefined :
  512 + obj.modifyReason;
  513 + var dd5 = obj.modifyRemark == null || obj.modifyRemark == undefined ? undefined :
  514 + obj.modifyRemark;
  515 +
  516 + if (!old_ddreason[dd4] && dd4) {
  517 + old_ddreason[dd4] = [];
  518 + }
  519 + if (!old_dddesc[dd5] && dd5) {
  520 + old_dddesc[dd5] = [];
  521 + }
  522 +
442 523 // 闭包
443 524 (function(i) {
444 525 old_cl[k1].push(i);
... ... @@ -448,6 +529,12 @@ angular.module(&#39;ScheduleApp&#39;).directive(
448 529 if (k3) {
449 530 old_s[k3].push(i);
450 531 }
  532 + if (dd4) {
  533 + old_ddreason[dd4].push(i);
  534 + }
  535 + if (dd5) {
  536 + old_dddesc[dd5].push(i);
  537 + }
451 538 })(index);
452 539  
453 540 // 判断是否分班
... ... @@ -493,6 +580,35 @@ angular.module(&#39;ScheduleApp&#39;).directive(
493 580 });
494 581 }
495 582 }
  583 +
  584 + // 调度原因处理
  585 + isRepeat = false;
  586 + if (obj.modifyReason || obj.modifyReason == 0) {
  587 + for (i = 0; i < addreason.length; i++) {
  588 + if (addreason[i] == obj.modifyReason) {
  589 + isRepeat = true;
  590 + break;
  591 + }
  592 + }
  593 + if (!isRepeat) {
  594 + addreason.push(obj.modifyReason);
  595 + }
  596 + }
  597 +
  598 + // 调整备注处理
  599 + isRepeat = false;
  600 + if (obj.modifyRemark && obj.modifyRemark != "") {
  601 + for (i = 0; i < adddesc.length; i++) {
  602 + if (adddesc[i] == obj.modifyRemark) {
  603 + isRepeat = true;
  604 + break;
  605 + }
  606 + }
  607 + if (!isRepeat) {
  608 + adddesc.push(obj.modifyRemark);
  609 + }
  610 + }
  611 +
496 612 });
497 613  
498 614 old_max_fcno = newValue[newValue.length - 1].fcno;
... ... @@ -518,6 +634,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
518 634 scope[ctrlAs].fd["s" + (i + 1)].id = j_s_ids[i].s;
519 635 }
520 636 }
  637 + for (i = 0; i < addreason.length; i++) { // 调度原因更新
  638 + if (i > 1) { // 有多个,只更新第一个
  639 + break;
  640 + } else {
  641 + scope[ctrlAs].fd.ddr = addreason[i];
  642 + }
  643 + }
  644 + for (i = 0; i < adddesc.length; i++) {
  645 + if (i > 1) { // 有多个,只更新第一个
  646 + break;
  647 + } else {
  648 + scope[ctrlAs].fd.ddrdesc = adddesc[i];
  649 + }
  650 + }
521 651 }
522 652 }
523 653 );
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
... ... @@ -1816,14 +1816,30 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1816 1816 // 本地动态数据直接显示,暂时不优化
1817 1817 var ldata = DataStore.getData(type);
1818 1818 for (var i = 0; i < ldata.length; i++) {
1819   - scope[ctrlAs].$$data_real.push(ldata[i]);
  1819 + // 闭包绑定返回最终查询的值
  1820 + var calcu_str = scope[ctrlAs].$$internal_match_str(ldata[i]);
  1821 + if (calcu_str) {
  1822 + // 全拼
  1823 + if (!ldata[i]["$fullChars"]) {
  1824 + ldata[i]["$fullChars"] = pinyin.getFullChars(calcu_str);
  1825 + }
  1826 + // 简拼
  1827 + if (!ldata[i]["$camelChars"]) {
  1828 + ldata[i]["$camelChars"] = pinyin.getCamelChars(calcu_str);
  1829 + }
  1830 + // 原值
  1831 + if (!ldata[i]["$calcu_str"]) {
  1832 + ldata[i]["$calcu_str"] = calcu_str;
  1833 + }
1820 1834  
  1835 + scope[ctrlAs].$$data_real.push(ldata[i]);
  1836 + }
1821 1837 }
1822 1838  
1823 1839 // 重新创建内部ui-select显示用数据,默认取10条记录显示
1824 1840 scope[ctrlAs].$$data = [];
1825 1841 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
1826   - if (scope[ctrlAs].$$data.length < 10) {
  1842 + if (scope[ctrlAs].$$data.length < 50) {
1827 1843 scope[ctrlAs].$$data.push(scope[ctrlAs].$$data_real[k]);
1828 1844 } else {
1829 1845 break;
... ... @@ -5151,6 +5167,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5151 5167 var old_max_fcno = 0; // 最大发车顺序号
5152 5168 var old_firstJCBCFcno = 0; // 第一个进场班次发车顺序号
5153 5169 var old_half_bcs = 0; // 一般的班次数量
  5170 + var old_ddreason = {}; // key:{调度原因}, value:所在list下标数组
  5171 + var old_dddesc = {}; // key:{调度描述}, value:所在list下标数组
5154 5172  
5155 5173 // 内部变量,变更的车辆,变更的人员
5156 5174 var new_cl1 = undefined; // 新的车辆1(车辆id_车辆自编号)
... ... @@ -5159,7 +5177,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5159 5177 var new_j2 = undefined; // 新的驾驶员2(驾驶员id_姓名_工号)
5160 5178 var new_s1 = undefined; // 新的售票员1(售票员id_姓名_工号)
5161 5179 var new_s2 = undefined; // 新的售票员2(售票员id_姓名_工号)
5162   -
  5180 + var new_ddreason = undefined; // 调度原因
  5181 + var new_dddesc = undefined; // 调度描述
5163 5182  
5164 5183 // 表单值,被赋值的次数
5165 5184 var form_data_assign_count = {
... ... @@ -5180,6 +5199,42 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5180 5199 post: function(scope, element, attr) {
5181 5200  
5182 5201 /**
  5202 + * 刷新调度原因数据。
  5203 + */
  5204 + scope[ctrlAs].$$internal_refresh_dsdata_ddreason = function() {
  5205 + if (new_ddreason) {
  5206 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  5207 + obj.modifyReason = new_ddreason;
  5208 + });
  5209 + } else {
  5210 + // 清空,不使用旧的
  5211 + angular.forEach(old_ddreason, function(value, key) {
  5212 + angular.forEach(value, function(i) {
  5213 + scope[ctrlAs].ds[i].modifyReason = undefined;
  5214 + });
  5215 + });
  5216 + }
  5217 + };
  5218 +
  5219 + /**
  5220 + * 刷新调度描述数据。
  5221 + */
  5222 + scope[ctrlAs].$$internal_refresh_dsdata_dddesc = function() {
  5223 + if (new_dddesc) {
  5224 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  5225 + obj.modifyRemark = new_dddesc;
  5226 + });
  5227 + } else {
  5228 + // 清空,不使用旧的
  5229 + angular.forEach(old_dddesc, function(value, key) {
  5230 + angular.forEach(value, function(i) {
  5231 + scope[ctrlAs].ds[i].modifyRemark = undefined;
  5232 + });
  5233 + });
  5234 + }
  5235 + };
  5236 +
  5237 + /**
5183 5238 * 刷新车辆数据。
5184 5239 */
5185 5240 scope[ctrlAs].$$internal_refresh_dsdata_cl = function() {
... ... @@ -5382,6 +5437,34 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5382 5437 }
5383 5438 };
5384 5439  
  5440 + //-------------- 监控调度原因的变化 ----------------//
  5441 + scope.$watch(
  5442 + function() {
  5443 + return scope[ctrlAs].fd.ddr;
  5444 + },
  5445 + function(newValue, oldValue) {
  5446 + if (newValue || newValue == 0) {
  5447 + new_ddreason = newValue;
  5448 + }
  5449 + scope[ctrlAs].$$internal_refresh_dsdata_ddreason();
  5450 + },
  5451 + true
  5452 + );
  5453 +
  5454 + //-------------- 监控调度描述的变化 ----------------//
  5455 + scope.$watch(
  5456 + function() {
  5457 + return scope[ctrlAs].fd.ddrdesc;
  5458 + },
  5459 + function(newValue, oldValue) {
  5460 + if (newValue || newValue == 0) {
  5461 + new_dddesc = newValue;
  5462 + }
  5463 + scope[ctrlAs].$$internal_refresh_dsdata_dddesc();
  5464 + },
  5465 + true
  5466 + );
  5467 +
5385 5468  
5386 5469 //-------------- 监控表单车辆1的变化 ----------------//
5387 5470 scope.$watch(
... ... @@ -5529,6 +5612,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5529 5612  
5530 5613 var cl_ids = []; // 车辆ids数组(有顺序)
5531 5614 var j_s_ids = []; // 驾驶员ids,售票员ids,[{j:id,s:id},...](有顺序)
  5615 + var addreason = []; // 营运调度的原因
  5616 + var adddesc = []; // 营运导读的备注
5532 5617 var isRepeat = false;
5533 5618 var i = 0;
5534 5619  
... ... @@ -5547,6 +5632,18 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5547 5632 old_s[k3] = [];
5548 5633 }
5549 5634  
  5635 + var dd4 = obj.modifyReason == null || obj.modifyReason == undefined ? undefined :
  5636 + obj.modifyReason;
  5637 + var dd5 = obj.modifyRemark == null || obj.modifyRemark == undefined ? undefined :
  5638 + obj.modifyRemark;
  5639 +
  5640 + if (!old_ddreason[dd4] && dd4) {
  5641 + old_ddreason[dd4] = [];
  5642 + }
  5643 + if (!old_dddesc[dd5] && dd5) {
  5644 + old_dddesc[dd5] = [];
  5645 + }
  5646 +
5550 5647 // 闭包
5551 5648 (function(i) {
5552 5649 old_cl[k1].push(i);
... ... @@ -5556,6 +5653,12 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5556 5653 if (k3) {
5557 5654 old_s[k3].push(i);
5558 5655 }
  5656 + if (dd4) {
  5657 + old_ddreason[dd4].push(i);
  5658 + }
  5659 + if (dd5) {
  5660 + old_dddesc[dd5].push(i);
  5661 + }
5559 5662 })(index);
5560 5663  
5561 5664 // 判断是否分班
... ... @@ -5601,6 +5704,35 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5601 5704 });
5602 5705 }
5603 5706 }
  5707 +
  5708 + // 调度原因处理
  5709 + isRepeat = false;
  5710 + if (obj.modifyReason || obj.modifyReason == 0) {
  5711 + for (i = 0; i < addreason.length; i++) {
  5712 + if (addreason[i] == obj.modifyReason) {
  5713 + isRepeat = true;
  5714 + break;
  5715 + }
  5716 + }
  5717 + if (!isRepeat) {
  5718 + addreason.push(obj.modifyReason);
  5719 + }
  5720 + }
  5721 +
  5722 + // 调整备注处理
  5723 + isRepeat = false;
  5724 + if (obj.modifyRemark && obj.modifyRemark != "") {
  5725 + for (i = 0; i < adddesc.length; i++) {
  5726 + if (adddesc[i] == obj.modifyRemark) {
  5727 + isRepeat = true;
  5728 + break;
  5729 + }
  5730 + }
  5731 + if (!isRepeat) {
  5732 + adddesc.push(obj.modifyRemark);
  5733 + }
  5734 + }
  5735 +
5604 5736 });
5605 5737  
5606 5738 old_max_fcno = newValue[newValue.length - 1].fcno;
... ... @@ -5626,6 +5758,20 @@ angular.module(&#39;ScheduleApp&#39;).directive(
5626 5758 scope[ctrlAs].fd["s" + (i + 1)].id = j_s_ids[i].s;
5627 5759 }
5628 5760 }
  5761 + for (i = 0; i < addreason.length; i++) { // 调度原因更新
  5762 + if (i > 1) { // 有多个,只更新第一个
  5763 + break;
  5764 + } else {
  5765 + scope[ctrlAs].fd.ddr = addreason[i];
  5766 + }
  5767 + }
  5768 + for (i = 0; i < adddesc.length; i++) {
  5769 + if (i > 1) { // 有多个,只更新第一个
  5770 + break;
  5771 + } else {
  5772 + scope[ctrlAs].fd.ddrdesc = adddesc[i];
  5773 + }
  5774 + }
5629 5775 }
5630 5776 }
5631 5777 );
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/info/edit.html
... ... @@ -19,7 +19,7 @@
19 19 <i class="fa fa-circle"></i>
20 20 </li>
21 21 <li>
22   - <a href="javascript:" ng-click="ctrl.toPlanInfoListPage()">排班计划管理</a>
  22 + <a href="javascript:" ng-click="ctrl.toPlanInfoListPage()">{{ctrl.schedulePlanInfoForSave.xlName}}排班计划</a>
23 23 <i class="fa fa-circle"></i>
24 24 </li>
25 25 <li>
... ... @@ -30,15 +30,22 @@
30 30 <div class="portlet light bordered">
31 31 <div class="portlet-title">
32 32 <div class="caption">
33   - <i class="icon-equalizer font-red-sunglo"></i>
34   - <span class="caption-subject font-red-sunglo bold uppercase">
  33 + <div>
  34 + <i class="icon-equalizer font-red-sunglo"></i>
  35 + <span class="caption-subject font-red-sunglo bold uppercase">
35 36 {{ctrl.schedulePlanInfoForSave.xlName}}
36 37 {{ctrl.schedulePlanInfoForSave.ttInfoName}}
37 38 {{"路牌" + ctrl.schedulePlanInfoForSave.lpName}}
38   - <span ng-bind="ctrl.schedulePlanInfoForSave.scheduleDate | date: 'yyyy-MM-dd ' "></span>
39   - <span>计划班次信息</span>
40   - </span>
  39 + <span ng-bind="ctrl.schedulePlanInfoForSave.scheduleDate | date: 'yyyy-MM-dd ' "></span>
  40 + <span>计划班次信息</span>
  41 + </span>
  42 + </div>
  43 + <div style="padding-top: 10px;">
  44 + <i class="icon-equalizer font-red-sunglo"></i>
  45 + <span class="caption-subject font-red-sunglo bold uppercase" ng-bind="ctrl.title_tip"></span>
  46 + </div>
41 47 </div>
  48 +
42 49 </div>
43 50  
44 51 <div class="portlet-body form">
... ... @@ -109,7 +116,7 @@
109 116 cmaps="{'qdzCode' : 'zcode', 'qdzName': 'zname'}"
110 117 dcname="qdzCode"
111 118 icname="zcode"
112   - dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.schedulePlanInfoForSave.xl, 'xldir': ctrl.schedulePlanInfoForSave.xlDir}, atype:'zd_tcc' } | json }}"
  119 + dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.schedulePlanInfoForSave.xl, 'xldir': ctrl.schedulePlanInfoForSave.xlDir, 'lineversion': ctrl.lineversion}, atype:'zd_tcc' } | json }}"
113 120 iterobjname="item"
114 121 iterobjexp="item.aname"
115 122 searchph="请输拼音..."
... ... @@ -130,7 +137,7 @@
130 137 cmaps="{'zdzCode' : 'zcode', 'zdzName': 'zname'}"
131 138 dcname="zdzCode"
132 139 icname="zcode"
133   - dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.schedulePlanInfoForSave.xl, 'xldir': ctrl.schedulePlanInfoForSave.xlDir}, atype:'zd_tcc' } | json }}"
  140 + dsparams="{{ {type: 'ajax', param:{'lineid': ctrl.schedulePlanInfoForSave.xl, 'xldir': ctrl.schedulePlanInfoForSave.xlDir, 'lineversion': ctrl.lineversion}, atype:'zd_tcc' } | json }}"
134 141 iterobjname="item"
135 142 iterobjexp="item.aname"
136 143 searchph="请输拼音..."
... ... @@ -208,8 +215,6 @@
208 215 </div>
209 216 </div>
210 217  
211   -
212   -
213 218 </div>
214 219  
215 220 <div class="form-actions">
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/info/list_info.html
... ... @@ -73,7 +73,8 @@
73 73 </tr>
74 74 </thead>
75 75 <tbody>
76   - <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX">
  76 + <tr ng-repeat="info in ctrl.page()['content']"
  77 + ng-class="{odd: true, gradeX: true, info: ctrl.isModify(info), 'row-active': ctrl.isModify(info)}">>
77 78 <td>
78 79 <div>
79 80 <a href="#">
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/info/module.js
... ... @@ -3,7 +3,9 @@ angular.module(&#39;ScheduleApp&#39;).factory(
3 3 'SchedulePlanInfoManageService',
4 4 [
5 5 'SchedulePlanInfoManageService_g',
6   - function(service) {
  6 + 'TTInfoManageService_g',
  7 + '$q',
  8 + function(service, service2, $q) {
7 9 /** 当前的查询条件信息 */
8 10 var currentSearchCondition = {};
9 11  
... ... @@ -53,7 +55,29 @@ angular.module(&#39;ScheduleApp&#39;).factory(
53 55 uiFromRecord: 0,
54 56 uiToRecord: 0
55 57 };
  58 + },
  59 + lineversiondesc: function(xlid, tid) {
  60 + var deferred = $q.defer();
  61 +
  62 + service2.rest.get({id: tid}, function(rs) {
  63 + // alert("rsrsrs");
  64 + service2.versiondesc.do(
  65 + {lineId: xlid, version: rs.lineVersion}, function(result) {
  66 + // alert("线路版本(" + result.desc + ")");
  67 + deferred.resolve({
  68 + lineversion: rs.lineVersion,
  69 + desc: "线路版本(" + result.desc + ")"
  70 + });
  71 + }, function() {
  72 + deferred.reject();
  73 + });
  74 + }, function() {
  75 + deferred.reject();
  76 + });
  77 +
  78 + return deferred.promise;
56 79 }
  80 +
57 81 };
58 82  
59 83 }
... ... @@ -169,6 +193,15 @@ angular.module(&#39;ScheduleApp&#39;).controller(
169 193 true
170 194 );
171 195  
  196 + // 判定是否被修改过
  197 + self.isModify = function(spinfo) {
  198 + if (spinfo.modifyCount > 0) {
  199 + return true;
  200 + } else {
  201 + return false;
  202 + }
  203 + }
  204 +
172 205 }
173 206 ]
174 207 );
... ... @@ -197,11 +230,22 @@ angular.module(&quot;ScheduleApp&quot;).controller(
197 230 $state.go("schedulePlanInfoManage", $stateParams);
198 231 };
199 232  
  233 + // 线路版本描述
  234 + self.title_tip = "版本加载中...";
  235 +
200 236 // 获取数据
201 237 SchedulePlanInfo.get({id: spinfoid}, function(value) {
202 238 self.schedulePlanInfoForSave = value;
  239 + // 线路版本
  240 + self.lineversion = 1;
  241 +
  242 + service.lineversiondesc(value.xl, value.ttInfo).then(
  243 + function(rs) {
  244 + self.title_tip = rs.desc;
  245 + self.lineversion = rs.lineversion;
  246 + }
  247 + );
203 248  
204   - // TODO
205 249 });
206 250  
207 251 // 提交方法
... ... @@ -216,7 +260,6 @@ angular.module(&quot;ScheduleApp&quot;).controller(
216 260 self.toPlanInfoListPage();
217 261 };
218 262  
219   -
220 263 }
221 264 ]
222 265 );
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html
... ... @@ -46,10 +46,10 @@
46 46 <div class="form-body">
47 47 <div class="form-group">
48 48 <div class="col-md-5">
49   - <div class="form-group">
50   - <label class="col-md-5 control-label">营运状态:</label>
  49 + <div class="form-group has-success has-feedback">
  50 + <label class="col-md-5 control-label">营运状态*:</label>
51 51 <div class="col-md-7">
52   - <sa-Select5 name="cl2"
  52 + <sa-Select5 name="ddr"
53 53 model="ctrl.formData"
54 54 cmaps="{'ddr': 'code'}"
55 55 dcname="ddr"
... ... @@ -59,9 +59,14 @@
59 59 iterobjexp="item.name"
60 60 searchph="请输拼音..."
61 61 searchexp="this.name"
  62 + required
62 63 >
63 64 </sa-Select5>
64 65 </div>
  66 + <!-- 隐藏块,显示验证信息 -->
  67 + <div class="alert alert-danger well-sm" ng-show="myForm.ddr.$error.required">
  68 + 调度原因必须选择
  69 + </div>
65 70 </div>
66 71 <div class="form-group has-success has-feedback">
67 72 <label class="col-md-5 control-label">车辆1*:</label>
... ... @@ -215,6 +220,22 @@
215 220 </sa-Select5>
216 221 </div>
217 222 </div>
  223 +
  224 + <div class="form-group">
  225 + <label class="col-md-5 control-label">备注:</label>
  226 + <div class="col-md-7">
  227 + <textarea name="ddrdesc"
  228 + class="form-control"
  229 + placeholder="营运调度备注(100字以内)"
  230 + ng-model="ctrl.formData.ddrdesc"
  231 + ng-maxlength="100" >
  232 + </textarea>
  233 + </div>
  234 + <!-- 隐藏块,显示验证信息 -->
  235 + <div class="alert alert-danger well-sm" ng-show="myForm.ddrdesc.$error.maxlength">
  236 + 最大100个字
  237 + </div>
  238 + </div>
218 239 </div>
219 240  
220 241 <div class="col-md-7">
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/list.html
... ... @@ -18,6 +18,7 @@
18 18 <tr role="row" class="heading">
19 19 <th style="width: 70px;">序号</th>
20 20 <th style="width: 80px;">操作</th>
  21 + <th style="width: 170px;">操作人/操作时间</th>
21 22 <th style="width: 180px;">线路</th>
22 23 <th style="width: 180px">日期</th>
23 24 <th style="width: 50px">路牌</th>
... ... @@ -26,13 +27,12 @@
26 27 <th style="width: 80px;">进场时间</th>
27 28 <th style="width: 150px;">驾驶员</th>
28 29 <th style="width: 150px;">售票员</th>
29   - <th>时刻表</th>
30   - <th style="width: 150px;">修改时间</th>
31   - <th style="width: 100px;">修改人</th>
  30 + <th>关联时刻表</th>
32 31 </tr>
33 32 <tr role="row" class="filter">
34 33 <td></td>
35 34 <td></td>
  35 + <td></td>
36 36 <td>
37 37 <sa-Select5 name="xl"
38 38 model="ctrl.searchCondition()"
... ... @@ -68,12 +68,11 @@
68 68 <td></td>
69 69 <td></td>
70 70 <td></td>
71   - <td></td>
72   - <td></td>
73 71 </tr>
74 72 </thead>
75 73 <tbody>
76   - <tr ng-repeat="info in ctrl.pageInfo.infos" class="odd gradeX">
  74 + <tr ng-repeat="info in ctrl.pageInfo.infos"
  75 + ng-class="{odd: true, gradeX: true, info: ctrl.isModify(info), 'row-active': ctrl.isModify(info)}" >
77 76 <td>
78 77 <div>
79 78 <a href="#">
... ... @@ -86,13 +85,47 @@
86 85 <a ui-sref="schedulePlanInfoExtFormManage_edit({xlId: info.xlId, xlName: info.xlName, sd: info.scheduleDate, lpId: info.lpId, lpName: info.lpName})" class="btn btn-info btn-sm" > 修改 </a>
87 86 </td>
88 87 <td>
  88 + <div>
  89 + <a href="#">
  90 + <i class="fa fa-user"></i>
  91 + <span ng-bind="info.updateByName"></span>
  92 + </a>
  93 + </div>
  94 + <div>
  95 + <a href="#"
  96 + tooltip-animation="false"
  97 + tooltip-placement="top"
  98 + uib-tooltip="创建时间:{{info.createDate | date: 'yyyy-MM-dd HH:mm:ss' }}"
  99 + tooltip-class="headClass">
  100 + 创建日期
  101 + <span ng-bind="(info.createDate | date: 'yyyy-MM-dd')"></span>
  102 + </a>
  103 + </div>
  104 + <div>
  105 + <a href="#"
  106 + tooltip-animation="false"
  107 + tooltip-placement="top"
  108 + uib-tooltip="修改时间:{{info.updateDate | date: 'yyyy-MM-dd HH:mm:ss' }}"
  109 + tooltip-class="headClass">
  110 + 修改日期
  111 + <span ng-bind="(info.updateDate | date: 'yyyy-MM-dd')"></span>
  112 + </a>
  113 + </div>
  114 +
  115 + </td>
  116 + <td>
89 117 <span ng-bind="info.xlName"></span>
90 118 </td>
91 119 <td>
92 120 <span ng-bind="info.scheduleDate | date: 'yyyy-MM-dd'"></span>
93 121 </td>
94 122 <td>
95   - <span ng-bind="info.lpName"></span>
  123 + <div>
  124 + <i class="fa fa-map-signs" aria-hidden="true"></i>
  125 + </div>
  126 + <div>
  127 + <span ng-bind="info.lpName"></span>
  128 + </div>
96 129 </td>
97 130 <td>
98 131 <div ng-repeat="clzbh in info.clZbhs">
... ... @@ -157,12 +190,6 @@
157 190 <td>
158 191 <span ng-bind="info.ttInfoName"></span>
159 192 </td>
160   - <td>
161   - <span ng-bind="info.updateDate | date: 'yyyy-MM-dd HH:mm:ss'"></span>
162   - </td>
163   - <td>
164   - <span ng-bind="info.updateByName"></span>
165   - </td>
166 193  
167 194 </tr>
168 195 </tbody>
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/module.js
... ... @@ -210,6 +210,15 @@ angular.module(&#39;ScheduleApp&#39;).controller(
210 210 true
211 211 );
212 212  
  213 + // 判定是否被修改过
  214 + self.isModify = function(info) {
  215 + if (info.m_count > 0) {
  216 + return true;
  217 + } else {
  218 + return false;
  219 + }
  220 + };
  221 +
213 222  
214 223  
215 224 ///**
... ... @@ -265,6 +274,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
265 274 self.formData.s3 = {}; // 售票员3
266 275  
267 276 self.formData.ddr = "0"; // 调度原因,默认0-营运
  277 + self.formData.ddrdesc = ""; // 调度原因描述
268 278  
269 279 self.planInfos = undefined; // 排班明细
270 280  
... ...