Commit 8a6e4a7572d1c9f869b5324c37fdbd2a87aa2913

Authored by 徐烜
1 parent a5753f0b

1、修改调度值勤日报,添加预览视图可编辑班次信息功能(具体查看相关代码)

Showing 21 changed files with 617 additions and 96 deletions
src/main/java/com/bsth/repository/schedule/SchedulePlanInfoRepository.java
@@ -20,10 +20,13 @@ import org.springframework.stereotype.Repository; @@ -20,10 +20,13 @@ import org.springframework.stereotype.Repository;
20 */ 20 */
21 @Repository 21 @Repository
22 public interface SchedulePlanInfoRepository extends BaseRepository<SchedulePlanInfo, Long> { 22 public interface SchedulePlanInfoRepository extends BaseRepository<SchedulePlanInfo, Long> {
23 - 23 +
  24 + @Query(value = "select max(info.fcno) as mx from bsth_c_s_sp_info info where info.xl =?1 and info.schedule_date =?2", nativeQuery = true)
  25 + Long findMaxFcno(Integer xlid, Date scheduleDate);
  26 +
24 @Query(value = "select s from SchedulePlanInfo s where scheduleDate=?1") 27 @Query(value = "select s from SchedulePlanInfo s where scheduleDate=?1")
25 List<SchedulePlanInfo> findByDate(Date date); 28 List<SchedulePlanInfo> findByDate(Date date);
26 - 29 +
27 @Query(value = "select s from SchedulePlanInfo s where scheduleDate >= ?1 and scheduleDate <= ?2 order by scheduleDate, xl_name, lp_name, bcs") 30 @Query(value = "select s from SchedulePlanInfo s where scheduleDate >= ?1 and scheduleDate <= ?2 order by scheduleDate, xl_name, lp_name, bcs")
28 List<SchedulePlanInfo> findByDates(Date date1, Date date2); 31 List<SchedulePlanInfo> findByDates(Date date1, Date date2);
29 32
@@ -124,7 +127,7 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI @@ -124,7 +127,7 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI
124 @Param("p5") Date scheduleDate, 127 @Param("p5") Date scheduleDate,
125 @Param("p6") String lpName, 128 @Param("p6") String lpName,
126 @Param("p7") Integer spyId_src); 129 @Param("p7") Integer spyId_src);
127 - 130 +
128 @Query(value="select s from SchedulePlanInfo s where DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?1 order by s.xlBm,clZbh,lp,xlDir") 131 @Query(value="select s from SchedulePlanInfo s where DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?1 order by s.xlBm,clZbh,lp,xlDir")
129 List<SchedulePlanInfo> findLineScheduleBc(String scheduleDate); 132 List<SchedulePlanInfo> findLineScheduleBc(String scheduleDate);
130 133
@@ -136,7 +139,7 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI @@ -136,7 +139,7 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI
136 ")a group by schedule_date, gs_bm, xl_bm " + 139 ")a group by schedule_date, gs_bm, xl_bm " +
137 ")b group by gs_bm, xl_bm ", nativeQuery = true) 140 ")b group by gs_bm, xl_bm ", nativeQuery = true)
138 List<Object[]> findPlanGroupCar(Date date1, Date date2); 141 List<Object[]> findPlanGroupCar(Date date1, Date date2);
139 - 142 +
140 @Query(value = " select gs_bm, xl_bm, max(num) num from ( " + 143 @Query(value = " select gs_bm, xl_bm, max(num) num from ( " +
141 "select schedule_date, gs_bm, xl_bm, count(*) num from ( " + 144 "select schedule_date, gs_bm, xl_bm, count(*) num from ( " +
142 "select schedule_date, gs_bm, xl_bm, j_gh from bsth_c_s_sp_info " + 145 "select schedule_date, gs_bm, xl_bm, j_gh from bsth_c_s_sp_info " +
@@ -145,7 +148,7 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI @@ -145,7 +148,7 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI
145 ")a group by schedule_date, gs_bm, xl_bm " + 148 ")a group by schedule_date, gs_bm, xl_bm " +
146 ")b group by gs_bm, xl_bm ", nativeQuery = true) 149 ")b group by gs_bm, xl_bm ", nativeQuery = true)
147 List<Object[]> findPlanGroupDriver(Date date1, Date date2); 150 List<Object[]> findPlanGroupDriver(Date date1, Date date2);
148 - 151 +
149 @Query(value = " select gs_bm, xl_bm, max(num) num from ( " + 152 @Query(value = " select gs_bm, xl_bm, max(num) num from ( " +
150 "select schedule_date, gs_bm, xl_bm, count(*) num from ( " + 153 "select schedule_date, gs_bm, xl_bm, count(*) num from ( " +
151 "select schedule_date, gs_bm, xl_bm, s_gh from bsth_c_s_sp_info " + 154 "select schedule_date, gs_bm, xl_bm, s_gh from bsth_c_s_sp_info " +
@@ -155,16 +158,16 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI @@ -155,16 +158,16 @@ public interface SchedulePlanInfoRepository extends BaseRepository&lt;SchedulePlanI
155 ")a group by schedule_date, gs_bm, xl_bm " + 158 ")a group by schedule_date, gs_bm, xl_bm " +
156 ")b group by gs_bm, xl_bm ", nativeQuery = true) 159 ")b group by gs_bm, xl_bm ", nativeQuery = true)
157 List<Object[]> findPlanGroupBusConductor(Date date1, Date date2); 160 List<Object[]> findPlanGroupBusConductor(Date date1, Date date2);
158 - 161 +
159 @Query(value = " select schedule_date, xl_bm, j_gh, s_gh from bsth_c_s_sp_info " + 162 @Query(value = " select schedule_date, xl_bm, j_gh, s_gh from bsth_c_s_sp_info " +
160 "where schedule_date >= ?1 and schedule_date <= ?2 " + 163 "where schedule_date >= ?1 and schedule_date <= ?2 " +
161 "group by schedule_date, xl_bm, j_gh, s_gh ", nativeQuery = true) 164 "group by schedule_date, xl_bm, j_gh, s_gh ", nativeQuery = true)
162 List<Object[]> findPersonnelSchedule(Date date1, Date date2); 165 List<Object[]> findPersonnelSchedule(Date date1, Date date2);
163 - 166 +
164 @Query(value="select s from SchedulePlanInfo s where s.xlBm = ?1 and s.ttInfo = ?2 " 167 @Query(value="select s from SchedulePlanInfo s where s.xlBm = ?1 and s.ttInfo = ?2 "
165 + "and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?3 order by s.lpName,bcs") 168 + "and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?3 order by s.lpName,bcs")
166 List<SchedulePlanInfo> findPlanByTTinfo(String xlBm, Long ttInfo, String scheduleDate); 169 List<SchedulePlanInfo> findPlanByTTinfo(String xlBm, Long ttInfo, String scheduleDate);
167 - 170 +
168 @Query(value="select s from SchedulePlanInfo s where s.xlBm = ?1 " 171 @Query(value="select s from SchedulePlanInfo s where s.xlBm = ?1 "
169 + "and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by s.lpName,bcs") 172 + "and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 order by s.lpName,bcs")
170 List<SchedulePlanInfo> findPlanByXlAndDate(String xlBm, String scheduleDate); 173 List<SchedulePlanInfo> findPlanByXlAndDate(String xlBm, String scheduleDate);
src/main/java/com/bsth/service/schedule/SchedulePlanInfoService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.schedule.SchedulePlanInfo; 3 import com.bsth.entity.schedule.SchedulePlanInfo;
4 -import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;  
5 import com.bsth.service.schedule.exception.ScheduleException; 4 import com.bsth.service.schedule.exception.ScheduleException;
  5 +import com.bsth.service.schedule.timetable.strategy.TimetableExcelWithPlanInfoViewStrategy;
6 import com.bsth.service.schedule.utils.DataToolsFile; 6 import com.bsth.service.schedule.utils.DataToolsFile;
7 import org.apache.commons.lang3.StringUtils; 7 import org.apache.commons.lang3.StringUtils;
8 import org.joda.time.DateTime; 8 import org.joda.time.DateTime;
@@ -35,7 +35,7 @@ public interface SchedulePlanInfoService extends BService&lt;SchedulePlanInfo, Long @@ -35,7 +35,7 @@ public interface SchedulePlanInfoService extends BService&lt;SchedulePlanInfo, Long
35 * @return 35 * @return
36 * @throws ScheduleException 36 * @throws ScheduleException
37 */ 37 */
38 - TTInfoDetailForEdit.EditInfo getDirectiveDataWithPlanInfo( 38 + TimetableExcelWithPlanInfoViewStrategy.PlanInfoEditInfo getDirectiveDataWithPlanInfo(
39 Integer xlId, Date scheduleDate) throws ScheduleException; 39 Integer xlId, Date scheduleDate) throws ScheduleException;
40 40
41 /** 41 /**
src/main/java/com/bsth/service/schedule/impl/SchedulePlanInfoServiceImpl.java
@@ -4,9 +4,9 @@ import com.bsth.entity.schedule.SchedulePlanInfo; @@ -4,9 +4,9 @@ import com.bsth.entity.schedule.SchedulePlanInfo;
4 import com.bsth.repository.LineRepository; 4 import com.bsth.repository.LineRepository;
5 import com.bsth.repository.schedule.SchedulePlanInfoRepository; 5 import com.bsth.repository.schedule.SchedulePlanInfoRepository;
6 import com.bsth.service.schedule.SchedulePlanInfoService; 6 import com.bsth.service.schedule.SchedulePlanInfoService;
7 -import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;  
8 import com.bsth.service.schedule.exception.ScheduleException; 7 import com.bsth.service.schedule.exception.ScheduleException;
9 import com.bsth.service.schedule.timetable.TimetableExcelData; 8 import com.bsth.service.schedule.timetable.TimetableExcelData;
  9 +import com.bsth.service.schedule.timetable.strategy.TimetableExcelWithPlanInfoViewStrategy;
10 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelWithPlanInfoExportStrategyImpl; 10 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelWithPlanInfoExportStrategyImpl;
11 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelWithPlanInfoViewStrategyImpl; 11 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelWithPlanInfoViewStrategyImpl;
12 import com.bsth.service.schedule.utils.DataToolsFile; 12 import com.bsth.service.schedule.utils.DataToolsFile;
@@ -59,13 +59,14 @@ public class SchedulePlanInfoServiceImpl extends BServiceImpl&lt;SchedulePlanInfo, @@ -59,13 +59,14 @@ public class SchedulePlanInfoServiceImpl extends BServiceImpl&lt;SchedulePlanInfo,
59 } 59 }
60 60
61 @Override 61 @Override
62 - public TTInfoDetailForEdit.EditInfo getDirectiveDataWithPlanInfo(Integer xlId, Date scheduleDate) throws ScheduleException { 62 + public TimetableExcelWithPlanInfoViewStrategy.PlanInfoEditInfo getDirectiveDataWithPlanInfo(Integer xlId, Date scheduleDate) throws ScheduleException {
63 TimetableExcelData timetableExcelData = TimetableExcelData.withPlanInfoExcelViewBuilder() 63 TimetableExcelData timetableExcelData = TimetableExcelData.withPlanInfoExcelViewBuilder()
64 .setXlId(xlId) 64 .setXlId(xlId)
65 .setScheduleDate(scheduleDate) 65 .setScheduleDate(scheduleDate)
66 .setLineRepository(this.lineRepository) 66 .setLineRepository(this.lineRepository)
67 .setDataToolsService(this.dataToolsService) 67 .setDataToolsService(this.dataToolsService)
68 .setDataToolsProperties(this.dataToolsProperties) 68 .setDataToolsProperties(this.dataToolsProperties)
  69 + .setSchedulePlanInfoRepository(this.schedulePlanInfoRepository)
69 .setTimetableExcelWithPlanInfoViewStrategy(new TimetableExcelWithPlanInfoViewStrategyImpl()) 70 .setTimetableExcelWithPlanInfoViewStrategy(new TimetableExcelWithPlanInfoViewStrategyImpl())
70 .build(); 71 .build();
71 return timetableExcelData.doGetDirectiveDataWithPlanInfo(); 72 return timetableExcelData.doGetDirectiveDataWithPlanInfo();
src/main/java/com/bsth/service/schedule/plan/strategy/说明.txt 0 → 100644
  1 +如果后续排班计划的预览视图还要修正的话,
  2 +建议创建一个类 PlanViewData,把TimetableExcelData相关排班信息导出的代码迁移出来
src/main/java/com/bsth/service/schedule/timetable/TimetableExcelData.java
@@ -6,12 +6,12 @@ import com.bsth.entity.schedule.GuideboardInfo; @@ -6,12 +6,12 @@ import com.bsth.entity.schedule.GuideboardInfo;
6 import com.bsth.entity.schedule.TTInfo; 6 import com.bsth.entity.schedule.TTInfo;
7 import com.bsth.entity.schedule.TTInfoDetail; 7 import com.bsth.entity.schedule.TTInfoDetail;
8 import com.bsth.repository.LineRepository; 8 import com.bsth.repository.LineRepository;
  9 +import com.bsth.repository.schedule.SchedulePlanInfoRepository;
9 import com.bsth.repository.schedule.TTInfoDetailRepository; 10 import com.bsth.repository.schedule.TTInfoDetailRepository;
10 import com.bsth.repository.schedule.TTInfoRepository; 11 import com.bsth.repository.schedule.TTInfoRepository;
11 import com.bsth.service.LineService; 12 import com.bsth.service.LineService;
12 import com.bsth.service.LsStationRouteService; 13 import com.bsth.service.LsStationRouteService;
13 import com.bsth.service.schedule.GuideboardInfoService; 14 import com.bsth.service.schedule.GuideboardInfoService;
14 -import com.bsth.service.schedule.datatools.TTInfoDetailForEdit;  
15 import com.bsth.service.schedule.exception.ScheduleException; 15 import com.bsth.service.schedule.exception.ScheduleException;
16 import com.bsth.service.schedule.timetable.strategy.*; 16 import com.bsth.service.schedule.timetable.strategy.*;
17 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelWithPlanInfoViewStrategyImpl; 17 import com.bsth.service.schedule.timetable.strategy.impl.TimetableExcelWithPlanInfoViewStrategyImpl;
@@ -198,17 +198,21 @@ public class TimetableExcelData { @@ -198,17 +198,21 @@ public class TimetableExcelData {
198 * 注意:dataToolsService和dataToolsProperties共用导入相关属性 198 * 注意:dataToolsService和dataToolsProperties共用导入相关属性
199 */ 199 */
200 200
  201 + /** 指定线路,排班日期最大发车顺序号 */
  202 + private Long maxfcno;
  203 +
201 /** 获取显示数据策略 */ 204 /** 获取显示数据策略 */
202 private TimetableExcelWithPlanInfoViewStrategy timetableExcelWithPlanInfoViewStrategy; 205 private TimetableExcelWithPlanInfoViewStrategy timetableExcelWithPlanInfoViewStrategy;
203 /** 206 /**
204 * 获取前端angular指令用数据。 207 * 获取前端angular指令用数据。
205 */ 208 */
206 - public TTInfoDetailForEdit.EditInfo doGetDirectiveDataWithPlanInfo() throws ScheduleException { 209 + public TimetableExcelWithPlanInfoViewStrategy.PlanInfoEditInfo doGetDirectiveDataWithPlanInfo() throws ScheduleException {
207 return this.timetableExcelWithPlanInfoViewStrategy.doGetDirectiveDataWithPlanInfo( 210 return this.timetableExcelWithPlanInfoViewStrategy.doGetDirectiveDataWithPlanInfo(
208 this.line, 211 this.line,
209 this.scheduleDate, 212 this.scheduleDate,
210 this.dataToolsService, 213 this.dataToolsService,
211 - this.dataToolsProperties); 214 + this.dataToolsProperties,
  215 + maxfcno);
212 } 216 }
213 217
214 // ----------- 构造函数 ---------- // 218 // ----------- 构造函数 ---------- //
@@ -274,6 +278,7 @@ public class TimetableExcelData { @@ -274,6 +278,7 @@ public class TimetableExcelData {
274 this.scheduleDate = planInfoExcelViewBuilder.scheduleDate; 278 this.scheduleDate = planInfoExcelViewBuilder.scheduleDate;
275 this.dataToolsService = planInfoExcelViewBuilder.dataToolsService; 279 this.dataToolsService = planInfoExcelViewBuilder.dataToolsService;
276 this.dataToolsProperties = planInfoExcelViewBuilder.dataToolsProperties; 280 this.dataToolsProperties = planInfoExcelViewBuilder.dataToolsProperties;
  281 + this.maxfcno = planInfoExcelViewBuilder.maxfcno;
277 // 获取显示数据策略 282 // 获取显示数据策略
278 this.timetableExcelWithPlanInfoViewStrategy = 283 this.timetableExcelWithPlanInfoViewStrategy =
279 planInfoExcelViewBuilder.timetableExcelWithPlanInfoViewStrategy; 284 planInfoExcelViewBuilder.timetableExcelWithPlanInfoViewStrategy;
@@ -727,6 +732,8 @@ public class TimetableExcelData { @@ -727,6 +732,8 @@ public class TimetableExcelData {
727 private DataToolsService dataToolsService; 732 private DataToolsService dataToolsService;
728 /** 配置数据导入导出用到的配置信息 */ 733 /** 配置数据导入导出用到的配置信息 */
729 private DataToolsProperties dataToolsProperties; 734 private DataToolsProperties dataToolsProperties;
  735 + /** 排班计划明细Repo */
  736 + private SchedulePlanInfoRepository schedulePlanInfoRepository;
730 /** view策略 */ 737 /** view策略 */
731 private TimetableExcelWithPlanInfoViewStrategyImpl timetableExcelWithPlanInfoViewStrategy; 738 private TimetableExcelWithPlanInfoViewStrategyImpl timetableExcelWithPlanInfoViewStrategy;
732 739
@@ -755,6 +762,11 @@ public class TimetableExcelData { @@ -755,6 +762,11 @@ public class TimetableExcelData {
755 return this; 762 return this;
756 } 763 }
757 764
  765 + public PlanInfoExcelViewBuilder setSchedulePlanInfoRepository(SchedulePlanInfoRepository schedulePlanInfoRepository) {
  766 + this.schedulePlanInfoRepository = schedulePlanInfoRepository;
  767 + return this;
  768 + }
  769 +
758 public PlanInfoExcelViewBuilder setTimetableExcelWithPlanInfoViewStrategy(TimetableExcelWithPlanInfoViewStrategyImpl timetableExcelWithPlanInfoViewStrategy) { 770 public PlanInfoExcelViewBuilder setTimetableExcelWithPlanInfoViewStrategy(TimetableExcelWithPlanInfoViewStrategyImpl timetableExcelWithPlanInfoViewStrategy) {
759 this.timetableExcelWithPlanInfoViewStrategy = timetableExcelWithPlanInfoViewStrategy; 771 this.timetableExcelWithPlanInfoViewStrategy = timetableExcelWithPlanInfoViewStrategy;
760 return this; 772 return this;
@@ -763,6 +775,8 @@ public class TimetableExcelData { @@ -763,6 +775,8 @@ public class TimetableExcelData {
763 // ---------------- 内部生成的属性 ---------------- // 775 // ---------------- 内部生成的属性 ---------------- //
764 /** 线路信息 */ 776 /** 线路信息 */
765 private Line line; 777 private Line line;
  778 + /** 指定线路,排班日期最大发车顺序号 */
  779 + private Long maxfcno;
766 780
767 public TimetableExcelData build() { 781 public TimetableExcelData build() {
768 // 1、参数验证 782 // 1、参数验证
@@ -771,12 +785,18 @@ public class TimetableExcelData { @@ -771,12 +785,18 @@ public class TimetableExcelData {
771 Assert.notNull(this.lineRepository, "线路repo为空!"); 785 Assert.notNull(this.lineRepository, "线路repo为空!");
772 Assert.notNull(this.dataToolsService, "数据工具服务为空!"); 786 Assert.notNull(this.dataToolsService, "数据工具服务为空!");
773 Assert.notNull(this.dataToolsProperties, "配置数据导入导出用到的配置信息为空!"); 787 Assert.notNull(this.dataToolsProperties, "配置数据导入导出用到的配置信息为空!");
  788 + Assert.notNull(this.schedulePlanInfoRepository, "排班明细Repo为空!");
774 Assert.notNull(this.timetableExcelWithPlanInfoViewStrategy, "获取显示数据策略为空!"); 789 Assert.notNull(this.timetableExcelWithPlanInfoViewStrategy, "获取显示数据策略为空!");
775 790
776 // 2、获取线路信息 791 // 2、获取线路信息
777 Optional<Line> optionalLine = this.lineRepository.findById(this.xlId); 792 Optional<Line> optionalLine = this.lineRepository.findById(this.xlId);
778 Assert.isTrue(optionalLine.isPresent(), "线路[id=" + this.xlId + "]为空!"); 793 Assert.isTrue(optionalLine.isPresent(), "线路[id=" + this.xlId + "]为空!");
779 this.line = optionalLine.get(); 794 this.line = optionalLine.get();
  795 + // 3、获取maxfcno
  796 + Long maxfcno = this.schedulePlanInfoRepository.findMaxFcno(this.xlId, this.scheduleDate);
  797 + Assert.notNull(maxfcno, "maxfcno为空,排班信息可能为空!");
  798 + Assert.isTrue(maxfcno > 0L, "maxfcno <= 0,排班信息可能为空!");
  799 + this.maxfcno = maxfcno;
780 800
781 return new TimetableExcelData(this); 801 return new TimetableExcelData(this);
782 } 802 }
src/main/java/com/bsth/service/schedule/timetable/strategy/TimetableExcelWithPlanInfoViewStrategy.java
1 package com.bsth.service.schedule.timetable.strategy; 1 package com.bsth.service.schedule.timetable.strategy;
2 2
3 import com.bsth.entity.Line; 3 import com.bsth.entity.Line;
4 -import com.bsth.service.schedule.datatools.TTInfoDetailForEdit; 4 +import com.bsth.entity.schedule.SchedulePlanInfo;
5 import com.bsth.service.schedule.exception.ScheduleException; 5 import com.bsth.service.schedule.exception.ScheduleException;
6 import com.bsth.service.schedule.utils.DataToolsProperties; 6 import com.bsth.service.schedule.utils.DataToolsProperties;
7 import com.bsth.service.schedule.utils.DataToolsService; 7 import com.bsth.service.schedule.utils.DataToolsService;
8 8
  9 +import java.util.ArrayList;
9 import java.util.Date; 10 import java.util.Date;
  11 +import java.util.List;
10 12
11 /** 13 /**
12 * 排班时刻数据(时刻表的格式,附加驾驶员,车牌信息)前端angular指令数据策略接口。 14 * 排班时刻数据(时刻表的格式,附加驾驶员,车牌信息)前端angular指令数据策略接口。
@@ -19,11 +21,39 @@ public interface TimetableExcelWithPlanInfoViewStrategy { @@ -19,11 +21,39 @@ public interface TimetableExcelWithPlanInfoViewStrategy {
19 * @param scheduleDate 排班日期 21 * @param scheduleDate 排班日期
20 * @param dataToolsService dataToolsService 22 * @param dataToolsService dataToolsService
21 * @param dataToolsProperties dataToolsProperties 23 * @param dataToolsProperties dataToolsProperties
  24 + * @param maxfcno 指定线路,排班日期最大发车顺序号
22 */ 25 */
23 - TTInfoDetailForEdit.EditInfo doGetDirectiveDataWithPlanInfo( 26 + PlanInfoEditInfo doGetDirectiveDataWithPlanInfo(
24 Line xl, 27 Line xl,
25 Date scheduleDate, 28 Date scheduleDate,
26 DataToolsService dataToolsService, 29 DataToolsService dataToolsService,
27 - DataToolsProperties dataToolsProperties 30 + DataToolsProperties dataToolsProperties,
  31 + Long maxfcno
28 ) throws ScheduleException; 32 ) throws ScheduleException;
  33 +
  34 + /**
  35 + * 排班信息编辑用的返回数据。
  36 + */
  37 + class PlanInfoEditInfo {
  38 + /** 标题数据 */
  39 + private List<String> header = new ArrayList<>();
  40 + /** 内容数据 */
  41 + private List<List<SchedulePlanInfo>> contents = new ArrayList<>();
  42 +
  43 + public List<String> getHeader() {
  44 + return header;
  45 + }
  46 +
  47 + public void setHeader(List<String> header) {
  48 + this.header = header;
  49 + }
  50 +
  51 + public List<List<SchedulePlanInfo>> getContents() {
  52 + return contents;
  53 + }
  54 +
  55 + public void setContents(List<List<SchedulePlanInfo>> contents) {
  56 + this.contents = contents;
  57 + }
  58 + }
29 } 59 }
src/main/java/com/bsth/service/schedule/timetable/strategy/impl/TimetableExcelWithPlanInfoViewStrategyImpl.java
1 package com.bsth.service.schedule.timetable.strategy.impl; 1 package com.bsth.service.schedule.timetable.strategy.impl;
2 2
3 import com.bsth.entity.Line; 3 import com.bsth.entity.Line;
4 -import com.bsth.service.schedule.datatools.TTInfoDetailForEdit; 4 +import com.bsth.entity.schedule.SchedulePlanInfo;
5 import com.bsth.service.schedule.exception.ScheduleException; 5 import com.bsth.service.schedule.exception.ScheduleException;
6 import com.bsth.service.schedule.timetable.strategy.TimetableExcelWithPlanInfoViewStrategy; 6 import com.bsth.service.schedule.timetable.strategy.TimetableExcelWithPlanInfoViewStrategy;
7 import com.bsth.service.schedule.utils.*; 7 import com.bsth.service.schedule.utils.*;
8 -import org.apache.poi.ss.usermodel.Row; 8 +import org.apache.commons.lang3.StringUtils;
  9 +import org.joda.time.DateTime;
9 import org.slf4j.Logger; 10 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
11 12
@@ -22,11 +23,12 @@ public class TimetableExcelWithPlanInfoViewStrategyImpl implements TimetableExce @@ -22,11 +23,12 @@ public class TimetableExcelWithPlanInfoViewStrategyImpl implements TimetableExce
22 private final static Logger LOG = LoggerFactory.getLogger(TimetableExcelWithPlanInfoViewStrategyImpl.class); 23 private final static Logger LOG = LoggerFactory.getLogger(TimetableExcelWithPlanInfoViewStrategyImpl.class);
23 24
24 @Override 25 @Override
25 - public TTInfoDetailForEdit.EditInfo doGetDirectiveDataWithPlanInfo( 26 + public PlanInfoEditInfo doGetDirectiveDataWithPlanInfo(
26 Line xl, 27 Line xl,
27 Date scheduleDate, 28 Date scheduleDate,
28 DataToolsService dataToolsService, 29 DataToolsService dataToolsService,
29 - DataToolsProperties dataToolsProperties) throws ScheduleException { 30 + DataToolsProperties dataToolsProperties,
  31 + Long maxfcno) throws ScheduleException {
30 32
31 LOG.info("---------------- 开始获取显示数据 线路=[{}],日期=[{}]排班时刻信息... --------------", xl.getName(), scheduleDate); 33 LOG.info("---------------- 开始获取显示数据 线路=[{}],日期=[{}]排班时刻信息... --------------", xl.getName(), scheduleDate);
32 34
@@ -34,31 +36,31 @@ public class TimetableExcelWithPlanInfoViewStrategyImpl implements TimetableExce @@ -34,31 +36,31 @@ public class TimetableExcelWithPlanInfoViewStrategyImpl implements TimetableExce
34 // ---------- 1、ktr生成的导出文件 --------- // 36 // ---------- 1、ktr生成的导出文件 --------- //
35 // ---------- 1-1、创建ktr参数 --------- // 37 // ---------- 1-1、创建ktr参数 --------- //
36 Map<String, Object> ktrParams = new HashMap<>(); 38 Map<String, Object> ktrParams = new HashMap<>();
37 - // 导出用元数据ktr  
38 - File ktrMetaFile = new File(this.getClass().getResource(  
39 - dataToolsProperties.getTtinfodetailPlaninfoMetaoutput()).toURI());  
40 - // 导出ktr 39 + // 导出edit数据ktr
41 File ktrFile = new File(this.getClass().getResource( 40 File ktrFile = new File(this.getClass().getResource(
42 - dataToolsProperties.getTtinfodetailPlaninfoOutput()).toURI()); 41 + dataToolsProperties.getTtinfodetailPlaninfoOutputEdit()).toURI());
43 42
44 // 通用参数,转换文件路径,excel输出文件名 43 // 通用参数,转换文件路径,excel输出文件名
45 - ktrParams.put("transpath", ktrMetaFile.getAbsolutePath());  
46 - ktrParams.put("filename", "排班时刻表导出数据temp"); 44 + ktrParams.put("transpath", ktrFile.getAbsolutePath());
  45 + ktrParams.put("filename", "排班时刻表导出edit数据");
47 // ktr附加命名参数 46 // ktr附加命名参数
48 ktrParams.put("xlid", xl.getId()); // 线路Id 47 ktrParams.put("xlid", xl.getId()); // 线路Id
49 - ktrParams.put("injectktrfile", ktrFile.getAbsolutePath()); // 注入元数据的ktr文件  
50 ktrParams.put("sdate", scheduleDate.toInstant() 48 ktrParams.put("sdate", scheduleDate.toInstant()
51 .atZone(ZoneId.systemDefault()).toLocalDate() 49 .atZone(ZoneId.systemDefault()).toLocalDate()
52 .format(DateTimeFormatter.ISO_DATE)); // 排班日期 50 .format(DateTimeFormatter.ISO_DATE)); // 排班日期
53 51
  52 + String outputFilePath = String.format("schedulePlanInfoForTtinfoDetail_(xlid=%s)_foredit-%s",
  53 + String.valueOf(xl.getId()), new DateTime().toString("yyyyMMddHHmmss"));
  54 + ktrParams.put("filepath", dataToolsProperties.getTransTempdir() + File.separator + outputFilePath); // 数据输出文件路径
  55 +
  56 +
54 // ---------- 1-2、执行ktr --------- // 57 // ---------- 1-2、执行ktr --------- //
55 DataToolsFile exportFile = dataToolsService.exportData(ktrParams); 58 DataToolsFile exportFile = dataToolsService.exportData(ktrParams);
56 59
57 // ---------- 2、处理生成的导出文件 --------- // 60 // ---------- 2、处理生成的导出文件 --------- //
58 - TTInfoDetailForEdit.EditInfo viewData = new TTInfoDetailForEdit.EditInfo(); 61 + PlanInfoEditInfo viewData = new PlanInfoEditInfo();
59 62
60 - // 将导出的数据表头重新处理一遍,祛除->数字  
61 - // poi api,并读取第一行数据 63 + // ---------- 2-1、获取sheet ------------ //
62 org.apache.poi.ss.usermodel.Workbook poi_workbook; 64 org.apache.poi.ss.usermodel.Workbook poi_workbook;
63 org.apache.poi.ss.usermodel.Sheet poi_sheet; 65 org.apache.poi.ss.usermodel.Sheet poi_sheet;
64 if (DataToolsFileType.XLS.isThisType(exportFile.getFile())) { 66 if (DataToolsFileType.XLS.isThisType(exportFile.getFile())) {
@@ -68,35 +70,74 @@ public class TimetableExcelWithPlanInfoViewStrategyImpl implements TimetableExce @@ -68,35 +70,74 @@ public class TimetableExcelWithPlanInfoViewStrategyImpl implements TimetableExce
68 } else { 70 } else {
69 throw new Exception("不是xls xlsx文件!"); 71 throw new Exception("不是xls xlsx文件!");
70 } 72 }
71 - poi_sheet = poi_workbook.getSheet("Sheet1"); 73 + poi_sheet = poi_workbook.getSheetAt(0); // 获取第一个Sheet值
72 if (poi_sheet == null || poi_sheet.getRow(0) == null) { // 空sheet 74 if (poi_sheet == null || poi_sheet.getRow(0) == null) { // 空sheet
73 return viewData; 75 return viewData;
74 } 76 }
75 77
76 - int rownums = poi_sheet.getLastRowNum() + 1;  
77 - int colnums = poi_sheet.getRow(0).getLastCellNum();  
78 - Row firstrow = poi_sheet.getRow(0);  
79 - for (int i = 0; i < colnums; i++) {  
80 - org.apache.poi.ss.usermodel.Cell cell = firstrow.getCell(i);  
81 - viewData.getHeader().add(  
82 - PoiUtils.getStringValueFromCell(cell).trim().replaceAll("(->\\d+)", ""));  
83 - }  
84 -  
85 - for (int i = 1; i < rownums; i++) { // 第二行开始  
86 - List<TTInfoDetailForEdit.FcInfo> fcInfoList = new ArrayList<>();  
87 - for (int j = 0; j < colnums; j++) { 78 + // ---------- 2-2、处理sheet ------------ //
  79 + String[] headarrays = new String[maxfcno.intValue() + 4];
  80 + headarrays[0] = "路牌"; // 第一列
  81 + headarrays[1] = "驾驶员"; // 第二列
  82 + headarrays[2] = "自编号"; // 第三列
  83 + headarrays[3] = "车牌号"; // 第四列
  84 +
  85 + int rows = poi_sheet.getLastRowNum() + 1; // 总行数
  86 + for (int r = 1; r < rows; r++) { // 从第二行开始
  87 + List<SchedulePlanInfo> schedulePlanInfoList = new ArrayList<>();
  88 + for (int c = 0; c < headarrays.length; c++) {
88 // poi读 89 // poi读
89 - String cellContent = PoiUtils.getStringValueFromCell(  
90 - poi_sheet.getRow(i).getCell(j)  
91 - ).replaceAll("\\s*", ""); 90 + String content_str = PoiUtils.getStringValueFromCell(
  91 + poi_sheet.getRow(r).getCell(c)
  92 + );
  93 +
  94 + if (c == 0) { // 路牌列
  95 + SchedulePlanInfo lpCol = new SchedulePlanInfo();
  96 + lpCol.setLpName(content_str);
  97 + schedulePlanInfoList.add(lpCol);
  98 + } else if (c == 1) { // 驾驶员列
  99 + SchedulePlanInfo jsyCol = new SchedulePlanInfo();
  100 + jsyCol.setjName(content_str);
  101 + schedulePlanInfoList.add(jsyCol);
  102 + } else if (c == 2) { // 自编号列
  103 + SchedulePlanInfo zbhCol = new SchedulePlanInfo();
  104 + zbhCol.setClZbh(content_str);
  105 + schedulePlanInfoList.add(zbhCol);
  106 + } else if (c == 3) { // 车牌号列
  107 + SchedulePlanInfo cphCol = new SchedulePlanInfo();
  108 + cphCol.setClZbh(content_str); // 注意:车牌号也放在自编号字段中
  109 + schedulePlanInfoList.add(cphCol);
  110 + } else {
  111 + if (StringUtils.isEmpty(content_str)) {
  112 + // content_str为空,说明当前发车顺序号对应的班次为空,插入一个字段为空的对象
  113 + SchedulePlanInfo emptyCol = new SchedulePlanInfo();
  114 + schedulePlanInfoList.add(emptyCol);
  115 + } else {
  116 + String[] content = content_str.split(",");
  117 +
  118 + SchedulePlanInfo schedulePlanInfo = new SchedulePlanInfo();
  119 + schedulePlanInfo.setId(Long.parseLong(content[0])); // 排班明细Id
  120 + schedulePlanInfo.setXlDir(content[1]); // 上下行
  121 + schedulePlanInfo.setQdzName(content[2]); // 起点站名字
  122 + schedulePlanInfo.setZdzName(content[3]); // 终点站名字
  123 + schedulePlanInfo.setFcsj(content[4]); // 发车时间
  124 + schedulePlanInfo.setJhlc(Double.valueOf(content[5])); // 计划里程
  125 + schedulePlanInfo.setBcsj(Integer.valueOf(content[6])); // 班次时间
  126 + schedulePlanInfo.setBcType(content[7]); // 班次类型
  127 +
  128 + if (headarrays[c] == null) {
  129 + headarrays[c] = content[8]; // 计算的发车站名
  130 + }
  131 +
  132 + schedulePlanInfoList.add(schedulePlanInfo);
  133 + }
  134 +
  135 + }
92 136
93 - TTInfoDetailForEdit.FcInfo fcInfo = new TTInfoDetailForEdit.FcInfo();  
94 - fcInfo.setFcsj(cellContent);  
95 - fcInfoList.add(fcInfo);  
96 } 137 }
97 - viewData.getContents().add(fcInfoList); 138 + viewData.getContents().add(schedulePlanInfoList);
98 } 139 }
99 - 140 + viewData.getHeader().addAll(Arrays.asList(headarrays));
100 141
101 return viewData; 142 return viewData;
102 } catch (Exception exp) { 143 } catch (Exception exp) {
src/main/java/com/bsth/service/schedule/utils/DataToolsProperties.java
@@ -127,6 +127,8 @@ public class DataToolsProperties { @@ -127,6 +127,8 @@ public class DataToolsProperties {
127 @NotNull 127 @NotNull
128 /** 时刻表导出数据(带排班信息)ktr转换 */ 128 /** 时刻表导出数据(带排班信息)ktr转换 */
129 private String ttinfodetailPlaninfoOutput; 129 private String ttinfodetailPlaninfoOutput;
  130 + /** 时刻表导出数据(带排班信息)编辑用ktr转换 */
  131 + private String ttinfodetailPlaninfoOutputEdit;
130 132
131 //------------------------ 数据同步ktr -----------------------// 133 //------------------------ 数据同步ktr -----------------------//
132 @NotNull 134 @NotNull
@@ -425,4 +427,12 @@ public class DataToolsProperties { @@ -425,4 +427,12 @@ public class DataToolsProperties {
425 public void setTtinfodetailPlaninfoOutput(String ttinfodetailPlaninfoOutput) { 427 public void setTtinfodetailPlaninfoOutput(String ttinfodetailPlaninfoOutput) {
426 this.ttinfodetailPlaninfoOutput = ttinfodetailPlaninfoOutput; 428 this.ttinfodetailPlaninfoOutput = ttinfodetailPlaninfoOutput;
427 } 429 }
  430 +
  431 + public String getTtinfodetailPlaninfoOutputEdit() {
  432 + return ttinfodetailPlaninfoOutputEdit;
  433 + }
  434 +
  435 + public void setTtinfodetailPlaninfoOutputEdit(String ttinfodetailPlaninfoOutputEdit) {
  436 + this.ttinfodetailPlaninfoOutputEdit = ttinfodetailPlaninfoOutputEdit;
  437 + }
428 } 438 }
src/main/resources/datatools/config-cloud.properties
@@ -83,6 +83,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr @@ -83,6 +83,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr
83 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr 83 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr
84 # 时刻表导出数据(带排班信息)ktr转换 84 # 时刻表导出数据(带排班信息)ktr转换
85 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr 85 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr
  86 +# 时刻表导出数据(带排班信息)编辑用ktr转换
  87 +datatools.ttinfodetail_planinfo_output_edit=/datatools/ktrs/planWithScheduleTypeOutputForEdit.ktr
86 88
87 ##--------------------------- 数据同步ktr ------------------------## 89 ##--------------------------- 数据同步ktr ------------------------##
88 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr 90 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
src/main/resources/datatools/config-dev.properties
@@ -82,7 +82,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr @@ -82,7 +82,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr
82 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr 82 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr
83 # 时刻表导出数据(带排班信息)ktr转换 83 # 时刻表导出数据(带排班信息)ktr转换
84 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr 84 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr
85 - 85 +# 时刻表导出数据(带排班信息)编辑用ktr转换
  86 +datatools.ttinfodetail_planinfo_output_edit=/datatools/ktrs/planWithScheduleTypeOutputForEdit.ktr
86 87
87 ##--------------------------- 数据同步ktr ------------------------## 88 ##--------------------------- 数据同步ktr ------------------------##
88 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr 89 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
src/main/resources/datatools/config-prod.properties
@@ -83,6 +83,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr @@ -83,6 +83,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr
83 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr 83 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr
84 # 时刻表导出数据(带排班信息)ktr转换 84 # 时刻表导出数据(带排班信息)ktr转换
85 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr 85 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr
  86 +# 时刻表导出数据(带排班信息)编辑用ktr转换
  87 +datatools.ttinfodetail_planinfo_output_edit=/datatools/ktrs/planWithScheduleTypeOutputForEdit.ktr
86 88
87 ##--------------------------- 数据同步ktr ------------------------## 89 ##--------------------------- 数据同步ktr ------------------------##
88 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr 90 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
src/main/resources/datatools/config-test.properties
@@ -83,6 +83,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr @@ -83,6 +83,8 @@ datatools.guideboards_dataoutputktr=/datatools/ktrs/guideboardDataOutput.ktr
83 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr 83 datatools.ttinfodetail_planinfo_metaoutput=/datatools/ktrs/planWithScheduleTypeOutputMetaData.ktr
84 # 时刻表导出数据(带排班信息)ktr转换 84 # 时刻表导出数据(带排班信息)ktr转换
85 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr 85 datatools.ttinfodetail_planinfo_output=/datatools/ktrs/planWithScheduleTypeOutput.ktr
  86 +# 时刻表导出数据(带排班信息)编辑用ktr转换
  87 +datatools.ttinfodetail_planinfo_output_edit=/datatools/ktrs/planWithScheduleTypeOutputForEdit.ktr
86 88
87 ##--------------------------- 数据同步ktr ------------------------## 89 ##--------------------------- 数据同步ktr ------------------------##
88 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr 90 datatools.vehicle_datasyncktr=/datatools/ktrs/vehicleDataSync.ktr
src/main/resources/datatools/ktrs/planWithScheduleTypeOutput.ktr
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <transformation> 2 <transformation>
3 <info> 3 <info>
4 - <name>&#x6392;&#x73ed;&#x8ba1;&#x5212;&#x660e;&#x7ec6;&#xff08;&#x65f6;&#x523b;&#x8868;&#x683c;&#x5f0f;&#xff09;</name> 4 + <name>&#x6392;&#x73ed;&#x8ba1;&#x5212;&#x660e;&#x7ec6;&#xff08;&#x65f6;&#x523b;&#x8868;&#x683c;&#x5f0f;&#xff09;&#x5bfc;&#x51fa;</name>
5 <description/> 5 <description/>
6 <extended_description/> 6 <extended_description/>
7 <trans_version/> 7 <trans_version/>
src/main/resources/static/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoView.js
@@ -12,7 +12,8 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -12,7 +12,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
12 restrict: 'E', 12 restrict: 'E',
13 templateUrl: '/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoViewTemplate.html', 13 templateUrl: '/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoViewTemplate.html',
14 scope: { // 独立作用域 14 scope: { // 独立作用域
15 - ds: "=ngModel" 15 + ds: "=ngModel",
  16 + celldbclickFn: "&celldbclick",
16 }, 17 },
17 controllerAs: "$saPlanInfoViewCtrl", 18 controllerAs: "$saPlanInfoViewCtrl",
18 bindToController: true, 19 bindToController: true,
@@ -34,8 +35,10 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -34,8 +35,10 @@ angular.module(&#39;ScheduleApp&#39;).directive(
34 throw new Error("saPlanInfoView指令 name属性required"); 35 throw new Error("saPlanInfoView指令 name属性required");
35 } 36 }
36 37
  38 + var $attr_celldbclick = tAttrs["celldbclick"]; // 单元格双击事件名
  39 +
37 // 内部controlAs名字 40 // 内部controlAs名字
38 - var ctrlAs = '$saTimeTableCtrl'; 41 + var ctrlAs = '$saPlanInfoViewCtrl';
39 42
40 return { 43 return {
41 pre: function(scope, element, attr) { 44 pre: function(scope, element, attr) {
@@ -44,6 +47,23 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -44,6 +47,23 @@ angular.module(&#39;ScheduleApp&#39;).directive(
44 }, 47 },
45 post: function(scope, element, attr) { 48 post: function(scope, element, attr) {
46 // TODO: 49 // TODO:
  50 +
  51 + // ------------------- dom事件处理function -----------------//
  52 + scope[ctrlAs].$$cell_click = function(rowindex, colindex, cell) {
  53 + console.log("click " + "row=" + rowindex + ",col=" + colindex);
  54 + if (cell.id) { // 有排班明细id的cell才能操作
  55 + cell.sel = !cell.sel; // 是否选中toggle
  56 + }
  57 +
  58 + };
  59 + scope[ctrlAs].$$cell_dbclick = function(rowindex, colindex, cell) {
  60 + if (cell.id) { // 有排班明细id的cell才能操作
  61 + if ($attr_celldbclick) {
  62 + // 注意调用方法
  63 + scope[ctrlAs].celldbclickFn()(rowindex, colindex);
  64 + }
  65 + }
  66 + };
47 } 67 }
48 68
49 }; 69 };
src/main/resources/static/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoViewTemplate.html
@@ -402,14 +402,24 @@ @@ -402,14 +402,24 @@
402 402
403 <dd ng-repeat="cell in info track by $index" 403 <dd ng-repeat="cell in info track by $index"
404 ng-init="colIndex = $index" 404 ng-init="colIndex = $index"
405 - ng-if="$index <= 2" >  
406 - {{cell.fcsj}} 405 + ng-if="$index == 0" >
  406 + {{cell.lpName}}
  407 + </dd>
  408 + <dd ng-repeat="cell in info track by $index"
  409 + ng-init="colIndex = $index"
  410 + ng-if="$index == 1" >
  411 + {{cell.jName}}
  412 + </dd>
  413 + <dd ng-repeat="cell in info track by $index"
  414 + ng-init="colIndex = $index"
  415 + ng-if="$index == 2" >
  416 + {{cell.clZbh}}
407 </dd> 417 </dd>
408 418
409 <dd ng-repeat="cell in info track by $index" 419 <dd ng-repeat="cell in info track by $index"
410 ng-init="colIndex = $index" 420 ng-init="colIndex = $index"
411 ng-if="$index == 3" style="border-right: 2px solid #96b9d7;"> 421 ng-if="$index == 3" style="border-right: 2px solid #96b9d7;">
412 - {{cell.fcsj}} 422 + {{cell.clZbh}}
413 </dd> 423 </dd>
414 424
415 </dl> 425 </dl>
@@ -438,16 +448,18 @@ @@ -438,16 +448,18 @@
438 448
439 <dd ng-repeat="cell in info track by $index" 449 <dd ng-repeat="cell in info track by $index"
440 ng-init="colIndex = $index" 450 ng-init="colIndex = $index"
  451 + ng-click="$saPlanInfoViewCtrl.$$cell_click(rowIndex, colIndex, cell)"
  452 + ng-dblclick="$saPlanInfoViewCtrl.$$cell_dbclick(rowIndex, colIndex, cell)"
441 ng-if="$index > 3" 453 ng-if="$index > 3"
442 ng-class="{ 454 ng-class="{
443 lpName: true, 455 lpName: true,
444 error: false, 456 error: false,
445 - active: false, 457 + active: cell.sel,
446 ists: false, 458 ists: false,
447 region: false, 459 region: false,
448 isfb: false, 460 isfb: false,
449 - outbc: cell.bc_type == 'out',  
450 - inbc: cell.bc_type == 'in' 461 + outbc: cell.bcType == 'out',
  462 + inbc: cell.bcType == 'in'
451 }"> 463 }">
452 {{cell.fcsj}} 464 {{cell.fcsj}}
453 </dd> 465 </dd>
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
@@ -6622,7 +6622,8 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -6622,7 +6622,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6622 restrict: 'E', 6622 restrict: 'E',
6623 templateUrl: '/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoViewTemplate.html', 6623 templateUrl: '/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoViewTemplate.html',
6624 scope: { // 独立作用域 6624 scope: { // 独立作用域
6625 - ds: "=ngModel" 6625 + ds: "=ngModel",
  6626 + celldbclickFn: "&celldbclick",
6626 }, 6627 },
6627 controllerAs: "$saPlanInfoViewCtrl", 6628 controllerAs: "$saPlanInfoViewCtrl",
6628 bindToController: true, 6629 bindToController: true,
@@ -6644,8 +6645,10 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -6644,8 +6645,10 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6644 throw new Error("saPlanInfoView指令 name属性required"); 6645 throw new Error("saPlanInfoView指令 name属性required");
6645 } 6646 }
6646 6647
  6648 + var $attr_celldbclick = tAttrs["celldbclick"]; // 单元格双击事件名
  6649 +
6647 // 内部controlAs名字 6650 // 内部controlAs名字
6648 - var ctrlAs = '$saTimeTableCtrl'; 6651 + var ctrlAs = '$saPlanInfoViewCtrl';
6649 6652
6650 return { 6653 return {
6651 pre: function(scope, element, attr) { 6654 pre: function(scope, element, attr) {
@@ -6654,6 +6657,23 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -6654,6 +6657,23 @@ angular.module(&#39;ScheduleApp&#39;).directive(
6654 }, 6657 },
6655 post: function(scope, element, attr) { 6658 post: function(scope, element, attr) {
6656 // TODO: 6659 // TODO:
  6660 +
  6661 + // ------------------- dom事件处理function -----------------//
  6662 + scope[ctrlAs].$$cell_click = function(rowindex, colindex, cell) {
  6663 + console.log("click " + "row=" + rowindex + ",col=" + colindex);
  6664 + if (cell.id) { // 有排班明细id的cell才能操作
  6665 + cell.sel = !cell.sel; // 是否选中toggle
  6666 + }
  6667 +
  6668 + };
  6669 + scope[ctrlAs].$$cell_dbclick = function(rowindex, colindex, cell) {
  6670 + if (cell.id) { // 有排班明细id的cell才能操作
  6671 + if ($attr_celldbclick) {
  6672 + // 注意调用方法
  6673 + scope[ctrlAs].celldbclickFn()(rowindex, colindex);
  6674 + }
  6675 + }
  6676 + };
6657 } 6677 }
6658 6678
6659 }; 6679 };
src/main/resources/static/pages/scheduleApp/module/common/prj-common-ui-route-state.js
@@ -970,7 +970,7 @@ ScheduleApp.config([ @@ -970,7 +970,7 @@ ScheduleApp.config([
970 }] 970 }]
971 } 971 }
972 }) 972 })
973 - .state("schedulePlanInfoExtFormManage_edit", { // 修改套跑form 973 + .state("schedulePlanInfoExtFormManage_edit", { // 调整路牌班次人员
974 url: '/schedulePlanInfoExtFormManage_edit/:xlId/:xlName/:sd/:lpId/:lpName', 974 url: '/schedulePlanInfoExtFormManage_edit/:xlId/:xlName/:sd/:lpId/:lpName',
975 views: { 975 views: {
976 "": {templateUrl: 'pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html'} 976 "": {templateUrl: 'pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html'}
@@ -988,10 +988,30 @@ ScheduleApp.config([ @@ -988,10 +988,30 @@ ScheduleApp.config([
988 }); 988 });
989 }] 989 }]
990 } 990 }
  991 + })
  992 + .state("schedulePlanReportExtManageListEdit", { // 修改班次信息
  993 + url: '/schedulePlanReportExtManageListEdit/:spInfoId',
  994 + views: {
  995 + "": {templateUrl: 'pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit-detail.html'}
  996 + },
  997 + resolve: {
  998 + deps: ['$ocLazyLoad', function($ocLazyLoad) {
  999 + return $ocLazyLoad.load({
  1000 + name: 'schedulePlanManage_module',
  1001 + insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置
  1002 + files: [
  1003 + "assets/bower_components/angular-ui-select/dist/select.min.css",
  1004 + "assets/bower_components/angular-ui-select/dist/select.min.js",
  1005 + "pages/scheduleApp/module/core/schedulePlanManage/report/ext/module.js"
  1006 + ]
  1007 + });
  1008 + }]
  1009 + }
991 }); 1010 });
992 1011
993 } 1012 }
994 -]); 1013 +]);
  1014 +
995 // ui route 配置 1015 // ui route 配置
996 1016
997 /** 排班规则模块配置route */ 1017 /** 排班规则模块配置route */
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit-detail.html 0 → 100644
  1 +<div ng-controller="SchedulePlanReportExtManageListEditCtrl as ctrl">
  2 + <div class="page-head">
  3 + <div class="page-title">
  4 + <h1>修改班次信息</h1>
  5 + </div>
  6 + </div>
  7 +
  8 + <ul class="page-breadcrumb breadcrumb">
  9 + <li>
  10 + <a href="/pages/home.html" data-pjax>首页</a>
  11 + <i class="fa fa-circle"></i>
  12 + </li>
  13 + <li>
  14 + <span class="active">运营计划管理</span>
  15 + <i class="fa fa-circle"></i>
  16 + </li>
  17 + <li>
  18 + <a ui-sref="schedulePlanReportExtManage">调度值勤日报</a>
  19 + <i class="fa fa-circle"></i>
  20 + </li>
  21 + <li>
  22 + <span class="active">修改班次信息</span>
  23 + </li>
  24 + </ul>
  25 +
  26 + <div class="portlet light bordered">
  27 + <div class="portlet-title">
  28 + <div class="caption caption-subject font-red-sunglo bold uppercase">
  29 + <span ng-bind="ctrl.headInfo.xlName"></span>
  30 + 当前排班日期
  31 + <span ng-bind="ctrl.schedulePlanInfoForSave.scheduleDate | date: 'yyyy年MM月dd日'"></span>
  32 + </div>
  33 + </div>
  34 +
  35 + <div class="portlet-body form">
  36 + <form ng-submit="ctrl.submit()" class="form-horizontal" novalidate name="myForm">
  37 + <div class="form-body">
  38 + <div class="form-group has-success has-feedback">
  39 + <label class="col-md-2 control-label">线路:</label>
  40 + <div class="col-md-3">
  41 + <input type="text" class="form-control"
  42 + ng-value="ctrl.headInfo.xlName"
  43 + readonly/>
  44 + </div>
  45 +
  46 + </div>
  47 + <div class="form-group has-success has-feedback">
  48 + <label class="col-md-2 control-label">路牌:</label>
  49 + <div class="col-md-3">
  50 + <input type="text" class="form-control"
  51 + ng-value="ctrl.headInfo.lpName"
  52 + readonly/>
  53 + </div>
  54 +
  55 + </div>
  56 + <div class="form-group has-success has-feedback">
  57 + <label class="col-md-2 control-label">驾驶员:</label>
  58 + <div class="col-md-3">
  59 + <input type="text" class="form-control"
  60 + ng-value="ctrl.headInfo.jName"
  61 + readonly/>
  62 + </div>
  63 +
  64 + </div>
  65 +
  66 + <div class="form-group has-success has-feedback">
  67 + <label class="col-md-2 control-label">自编号:</label>
  68 + <div class="col-md-3">
  69 + <input type="text" class="form-control"
  70 + ng-value="ctrl.headInfo.clZbh"
  71 + readonly/>
  72 + </div>
  73 +
  74 + </div>
  75 +
  76 + <div class="form-group has-success has-feedback">
  77 + <label class="col-md-2 control-label">车牌号:</label>
  78 + <div class="col-md-3">
  79 + <input type="text" class="form-control"
  80 + ng-value="ctrl.headInfo.clCph"
  81 + readonly/>
  82 + </div>
  83 +
  84 + </div>
  85 +
  86 + <!--<div class="form-group has-success has-feedback">-->
  87 + <!--<label class="col-md-2 control-label">方向*:</label>-->
  88 + <!--<div class="col-md-3">-->
  89 + <!--<sa-Radiogroup model="ctrl.TimeTableDetailForSave.xlDir" dicgroup="LineTrend" name="xlDir" required></sa-Radiogroup>-->
  90 + <!--</div>-->
  91 + <!--&lt;!&ndash; 隐藏块,显示验证信息 &ndash;&gt;-->
  92 + <!--<div class="alert alert-danger well-sm" ng-show="myForm.xlDir.$error.required">-->
  93 + <!--请选择线路上下行-->
  94 + <!--</div>-->
  95 +
  96 + <!--</div>-->
  97 +
  98 + <div class="form-group has-success has-feedback">
  99 + <label class="col-md-2 control-label">起点站:</label>
  100 + <div class="col-md-3">
  101 + <input type="text" class="form-control"
  102 + ng-value="ctrl.schedulePlanInfoForSave.qdzName"
  103 + readonly/>
  104 + </div>
  105 +
  106 + </div>
  107 +
  108 + <div class="form-group has-success has-feedback">
  109 + <label class="col-md-2 control-label">终点站:</label>
  110 + <div class="col-md-3">
  111 + <input type="text" class="form-control"
  112 + ng-value="ctrl.schedulePlanInfoForSave.zdzName"
  113 + readonly/>
  114 + </div>
  115 +
  116 + </div>
  117 +
  118 + <div class="form-group has-success has-feedback">
  119 + <label class="col-md-2 control-label">发车时间*:</label>
  120 + <div class="col-md-3">
  121 + <input type="text" class="form-control" name="fcsj"
  122 + ng-model="ctrl.schedulePlanInfoForSave.fcsj"
  123 + ng-pattern="ctrl.time_regex"
  124 + required />
  125 + </div>
  126 + <!-- 隐藏块,显示验证信息 -->
  127 + <div class="alert alert-danger well-sm" ng-show="myForm.fcsj.$error.required">
  128 + 发车时间必须填写
  129 + </div>
  130 + <div class="alert alert-danger well-sm" ng-show="myForm.fcsj.$error.pattern">
  131 + 时间格式错误,应该是格式hh:mm,如:06:39
  132 + </div>
  133 +
  134 + </div>
  135 +
  136 + <div class="form-group has-success has-feedback">
  137 + <label class="col-md-2 control-label">计划里程*:</label>
  138 + <div class="col-md-3">
  139 + <input type="text" class="form-control" name="jhlc"
  140 + ng-model="ctrl.schedulePlanInfoForSave.jhlc" required ng-pattern="ctrl.float_regex"
  141 + />
  142 + </div>
  143 + <!-- 隐藏块,显示验证信息 -->
  144 + <div class="alert alert-danger well-sm" ng-show="myForm.jhlc.$error.required">
  145 + 计划里程必须填写
  146 + </div>
  147 + <div class="alert alert-danger well-sm" ng-show="myForm.jhlc.$error.pattern">
  148 + 输入数字
  149 + </div>
  150 +
  151 + </div>
  152 + <div class="form-group has-success has-feedback">
  153 + <label class="col-md-2 control-label">班次历时*:</label>
  154 + <div class="col-md-3">
  155 + <input type="text" class="form-control" name="bcsj"
  156 + ng-model="ctrl.schedulePlanInfoForSave.bcsj" required ng-pattern="ctrl.number_regex"
  157 + />
  158 + </div>
  159 + <!-- 隐藏块,显示验证信息 -->
  160 + <div class="alert alert-danger well-sm" ng-show="myForm.bcsj.$error.required">
  161 + 班次时间必须填写
  162 + </div>
  163 + <div class="alert alert-danger well-sm" ng-show="myForm.bcsj.$error.pattern">
  164 + 输入整数
  165 + </div>
  166 +
  167 + </div>
  168 +
  169 + <div class="form-group has-success has-feedback">
  170 + <label class="col-md-2 control-label">班次类型*:</label>
  171 + <div class="col-md-3">
  172 + <sa-Select5 name="bcType"
  173 + model="ctrl.schedulePlanInfoForSave"
  174 + cmaps="{'bcType': 'code'}"
  175 + dcname="bcType"
  176 + icname="code"
  177 + dsparams="{{ {type: 'dic', param: 'ScheduleType' } | json }}"
  178 + iterobjname="item"
  179 + iterobjexp="item.name"
  180 + searchph="请选择班次类型..."
  181 + searchexp="this.name"
  182 + required
  183 + >
  184 + </sa-Select5>
  185 + </div>
  186 + <!-- 隐藏块,显示验证信息 -->
  187 + <div class="alert alert-danger well-sm" ng-show="myForm.bcType.$error.required">
  188 + 班次类型必须选择
  189 + </div>
  190 +
  191 + </div>
  192 +
  193 + </div>
  194 +
  195 + <div class="form-actions">
  196 + <div class="row">
  197 + <div class="col-md-offset-3 col-md-4">
  198 + <button type="submit" class="btn green"
  199 + ng-disabled="!myForm.$valid"><i class="fa fa-check"></i> 提交</button>
  200 + <a type="button" class="btn default"
  201 + href="javascript:" ng-click="ctrl.cancel()" ><i class="fa fa-times"></i> 取消</a>
  202 + </div>
  203 + </div>
  204 + </div>
  205 + </form>
  206 +
  207 + </div>
  208 + </div>
  209 +
  210 +
  211 +
  212 +
  213 +</div>
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/list.html
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 </div> 32 </div>
33 </div> 33 </div>
34 34
35 - <sa-Planinfoview name="saPlanView" ng-model="ctrl.saPlanInfoViewData.infos" ng-model-options="{ getterSetter: true }" > 35 + <sa-Planinfoview name="saPlanView" ng-model="ctrl.saPlanInfoViewData.infos" ng-model-options="{ getterSetter: true }" celldbclick="ctrl.singleEditBcDetail">
36 </sa-Planinfoview> 36 </sa-Planinfoview>
37 </div> 37 </div>
38 38
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/module.js
@@ -9,11 +9,27 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -9,11 +9,27 @@ angular.module(&#39;ScheduleApp&#39;).factory(
9 function(service, service2, $q) { 9 function(service, service2, $q) {
10 /** 当前的查询条件信息 */ 10 /** 当前的查询条件信息 */
11 var currentSearchCondition = {}; 11 var currentSearchCondition = {};
  12 + /** 当前视图Id 0:值勤日报视图 1:预览编辑视图 */
  13 + var viewId = 0;
12 14
13 // 查询对象 15 // 查询对象
14 var queryClass = service.rest; 16 var queryClass = service.rest;
15 17
16 return { 18 return {
  19 + getViewId: function() {
  20 + return viewId;
  21 + },
  22 + // callbackFun回调函数,参数1:上一个视图id,参数2:当前视图Id
  23 + switchView: function(callbackFun) {
  24 + if (viewId === 0) {
  25 + viewId = 1;
  26 + callbackFun(0, 1);
  27 + } else {
  28 + viewId = 0;
  29 + callbackFun(1, 0);
  30 + }
  31 + },
  32 +
17 getQueryClass: function() { 33 getQueryClass: function() {
18 return queryClass; 34 return queryClass;
19 }, 35 },
@@ -290,32 +306,35 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -290,32 +306,35 @@ angular.module(&#39;ScheduleApp&#39;).controller(
290 self.saPlanInfoViewData = { 306 self.saPlanInfoViewData = {
291 infos: {} 307 infos: {}
292 }; 308 };
293 - self.viewId = 0; 309 + self.viewId = service.getViewId();
  310 +
  311 + if (self.viewId === 1) { // 是从其他state转换过来的,数据也需要初始化一次
  312 + service.getSaPlanInfoViewData().then(
  313 + function(rst) {
  314 + self.saPlanInfoViewData.infos = rst;
  315 +
  316 + console.log(self.saPlanInfoViewData.infos);
  317 + },
  318 + function(err) {
  319 +
  320 + }
  321 + );
  322 + }
  323 +
294 self.switchView = function() { 324 self.switchView = function() {
295 - if (self.viewId === 0) {  
296 - self.viewId = 1;  
297 - if (service.getSaPlanInfoViewData() != null) {  
298 - service.getSaPlanInfoViewData().then( 325 + var saPlanInfoViewDataPromise = service.getSaPlanInfoViewData();
  326 + if (saPlanInfoViewDataPromise == null) {
  327 + alert("请选择线路和排班日期!");
  328 + return;
  329 + }
  330 +
  331 + service.switchView(function(preViewId, currentViewId) {
  332 + self.viewId = currentViewId;
  333 + if (currentViewId === 1) {
  334 + saPlanInfoViewDataPromise.then(
299 function(rst) { 335 function(rst) {
300 self.saPlanInfoViewData.infos = rst; 336 self.saPlanInfoViewData.infos = rst;
301 337
302 - /*  
303 - 注意:后台是没有传过来班次类型,这里通过head来判定是否进出场班次  
304 - TODO:如果以后要标识新的班次类型,甚至要修改班次内容,后台可能要大改(可能要改回时刻表编辑的做法)  
305 - TODO:注意,调度执勤日报时刻表视图后台etl用的是导出的etl,所以要加复杂功能的话可能还得拆成2个etl  
306 - */  
307 - var _headers = rst.header;  
308 - for (var i = 0; i < rst.contents.length; i++) {  
309 - for (var j = 0; j < rst.contents[i].length; j++) {  
310 - if (_headers[j].indexOf("出场") >= 0) {  
311 - self.saPlanInfoViewData.infos.contents[i][j].bc_type = "out";  
312 - }  
313 - if (_headers[j].indexOf("进场") >= 0) {  
314 - self.saPlanInfoViewData.infos.contents[i][j].bc_type = "in";  
315 - }  
316 - }  
317 - }  
318 -  
319 console.log(self.saPlanInfoViewData.infos); 338 console.log(self.saPlanInfoViewData.infos);
320 }, 339 },
321 function(err) { 340 function(err) {
@@ -323,19 +342,103 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -323,19 +342,103 @@ angular.module(&#39;ScheduleApp&#39;).controller(
323 } 342 }
324 ); 343 );
325 } 344 }
326 - } else {  
327 - self.viewId = 0;  
328 - } 345 + });
329 }; 346 };
330 347
331 self.ttHeight = 500; // sa-Planinfoview组件的高度 348 self.ttHeight = 500; // sa-Planinfoview组件的高度
332 349
333 350
  351 +
  352 + /**
  353 + * 单独修改班次明细。
  354 + */
  355 + self.singleEditBcDetail = function(rowNum, colNum) {
  356 +
  357 + console.log(rowNum + "," + colNum);
  358 +
  359 + $state.go('schedulePlanReportExtManageListEdit',
  360 + {
  361 + spInfoId: self.saPlanInfoViewData.infos.contents[rowNum][colNum]["id"]
  362 + });
  363 + };
  364 +
334 } 365 }
335 366
336 ] 367 ]
337 ); 368 );
338 369
  370 +// edit.detail页面
  371 +angular.module('ScheduleApp').controller(
  372 + 'SchedulePlanReportExtManageListEditCtrl',
  373 + [
  374 + 'SchedulePlanInfoManageService_g',
  375 + 'BusInfoManageService_g',
  376 + '$stateParams',
  377 + '$state',
  378 + 'SaTimeTableUtils',
  379 + function(spInfoservice, carService, $stateParams, $state, SaTimeTableUtils) {
  380 + var self = this;
  381 +
  382 + console.log($stateParams.spInfoId);
  383 +
  384 + // 其他的显示数据
  385 + self.headInfo = {
  386 + xlName: '', // 线路名称
  387 + lpName: '', // 路牌名称
  388 + jName: '', // 驾驶员
  389 + clZbh: '', // 自编号
  390 + clCph: '', // 车牌号
  391 + };
  392 +
  393 + // 排班明细对象
  394 + var SchedulePlanInfo = spInfoservice.rest;
  395 + // 车辆信息对象
  396 + var Cars = carService.rest;
  397 +
  398 + // 保存的排班明细数据
  399 + self.schedulePlanInfoForSave = {};
  400 + // 获取数据
  401 + SchedulePlanInfo.get({id: $stateParams.spInfoId}, function(value) {
  402 + self.schedulePlanInfoForSave = value;
  403 +
  404 + self.headInfo['xlName'] = value['xlName'];
  405 + self.headInfo['lpName'] = value['lpName'];
  406 + self.headInfo['jName'] = value['jName'];
  407 + self.headInfo['clZbh'] = value['clZbh'];
  408 +
  409 + Cars.get({id: value.cl}, function(value2) {
  410 + self.headInfo['clCph'] = value2['carPlate'];
  411 + });
  412 + });
  413 +
  414 + // 时间正则表达式(格式hh:mm,如:06:39)
  415 + self.time_regex = /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/;
  416 + // 整数
  417 + self.number_regex = /^-?\d+$/;
  418 + // 小数
  419 + self.float_regex = /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/;
  420 +
  421 + // 提交方法
  422 + self.submit = function() {
  423 + self.schedulePlanInfoForSave.$save(function() {
  424 + $state.go("schedulePlanReportExtManage");
  425 + });
  426 + };
  427 + // 取消方法
  428 + self.cancel = function() {
  429 + $state.go("schedulePlanReportExtManage");
  430 + };
  431 +
  432 + }
  433 + ]
  434 +);
  435 +
  436 +
  437 +
  438 +
  439 +
  440 +
  441 +
339 // edit.html页面 442 // edit.html页面
340 angular.module('ScheduleApp').controller( 443 angular.module('ScheduleApp').controller(
341 'ScheduleRuleManageExtFormCtrl', 444 'ScheduleRuleManageExtFormCtrl',
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/route.js
@@ -34,7 +34,7 @@ ScheduleApp.config([ @@ -34,7 +34,7 @@ ScheduleApp.config([
34 }] 34 }]
35 } 35 }
36 }) 36 })
37 - .state("schedulePlanInfoExtFormManage_edit", { // 修改套跑form 37 + .state("schedulePlanInfoExtFormManage_edit", { // 调整路牌班次人员
38 url: '/schedulePlanInfoExtFormManage_edit/:xlId/:xlName/:sd/:lpId/:lpName', 38 url: '/schedulePlanInfoExtFormManage_edit/:xlId/:xlName/:sd/:lpId/:lpName',
39 views: { 39 views: {
40 "": {templateUrl: 'pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html'} 40 "": {templateUrl: 'pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html'}
@@ -52,7 +52,26 @@ ScheduleApp.config([ @@ -52,7 +52,26 @@ ScheduleApp.config([
52 }); 52 });
53 }] 53 }]
54 } 54 }
  55 + })
  56 + .state("schedulePlanReportExtManageListEdit", { // 修改班次信息
  57 + url: '/schedulePlanReportExtManageListEdit/:spInfoId',
  58 + views: {
  59 + "": {templateUrl: 'pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit-detail.html'}
  60 + },
  61 + resolve: {
  62 + deps: ['$ocLazyLoad', function($ocLazyLoad) {
  63 + return $ocLazyLoad.load({
  64 + name: 'schedulePlanManage_module',
  65 + insertBefore: '#ng_load_plugins_before', // 动态载入模块时放置的位置
  66 + files: [
  67 + "assets/bower_components/angular-ui-select/dist/select.min.css",
  68 + "assets/bower_components/angular-ui-select/dist/select.min.js",
  69 + "pages/scheduleApp/module/core/schedulePlanManage/report/ext/module.js"
  70 + ]
  71 + });
  72 + }]
  73 + }
55 }); 74 });
56 75
57 } 76 }
58 -]);  
59 \ No newline at end of file 77 \ No newline at end of file
  78 +]);