Commit 1146232f3d202fe9a7458a02379daada380ca65b
Merge branch 'minhang' into pudong
Showing
37 changed files
with
2090 additions
and
325 deletions
pom.xml
| ... | ... | @@ -292,6 +292,13 @@ |
| 292 | 292 | <artifactId>mina-core</artifactId> |
| 293 | 293 | <version>2.0.13</version> |
| 294 | 294 | </dependency> |
| 295 | + | |
| 296 | + <dependency> | |
| 297 | + <groupId>com.google.protobuf</groupId> | |
| 298 | + <artifactId>protobuf-java</artifactId> | |
| 299 | + <version>3.3.0</version> | |
| 300 | + </dependency> | |
| 301 | + | |
| 295 | 302 | </dependencies> |
| 296 | 303 | |
| 297 | 304 | <dependencyManagement> | ... | ... |
src/main/java/com/bsth/Application.java
| ... | ... | @@ -10,6 +10,8 @@ import org.springframework.context.annotation.Bean; |
| 10 | 10 | import org.springframework.context.annotation.Primary; |
| 11 | 11 | import org.springframework.transaction.annotation.EnableTransactionManagement; |
| 12 | 12 | |
| 13 | +import java.util.Calendar; | |
| 14 | +import java.util.Date; | |
| 13 | 15 | import java.util.concurrent.Executors; |
| 14 | 16 | import java.util.concurrent.ScheduledExecutorService; |
| 15 | 17 | ... | ... |
src/main/java/com/bsth/XDApplication.java
| ... | ... | @@ -125,7 +125,7 @@ public class XDApplication implements CommandLineRunner { |
| 125 | 125 | //检查班次误点 |
| 126 | 126 | sexec.scheduleWithFixedDelay(scheduleLateThread, 60, 30, TimeUnit.SECONDS); |
| 127 | 127 | //调度指令延迟入库 |
| 128 | - sexec.scheduleWithFixedDelay(directivesPstThread, 180, 180, TimeUnit.SECONDS); | |
| 128 | + sexec.scheduleWithFixedDelay(directivesPstThread, 180, 100, TimeUnit.SECONDS); | |
| 129 | 129 | |
| 130 | 130 | //运管处静态数据提交 |
| 131 | 131 | log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处"); | ... | ... |
src/main/java/com/bsth/controller/gps/GpsController.java
| ... | ... | @@ -4,11 +4,15 @@ import com.bsth.data.BasicData; |
| 4 | 4 | import com.bsth.data.gpsdata.GpsEntity; |
| 5 | 5 | import com.bsth.data.gpsdata.GpsRealData; |
| 6 | 6 | import com.bsth.service.gps.GpsService; |
| 7 | +import com.bsth.service.gps.entity.GpsSpeed; | |
| 7 | 8 | import com.google.common.base.Splitter; |
| 8 | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 10 | import org.springframework.web.bind.annotation.*; |
| 10 | 11 | |
| 11 | 12 | import javax.servlet.http.HttpServletResponse; |
| 13 | + | |
| 14 | +import java.text.ParseException; | |
| 15 | +import java.util.ArrayList; | |
| 12 | 16 | import java.util.List; |
| 13 | 17 | import java.util.Map; |
| 14 | 18 | |
| ... | ... | @@ -179,4 +183,13 @@ public class GpsController { |
| 179 | 183 | @RequestParam(defaultValue = "DESC") String direction){ |
| 180 | 184 | return gpsService.safeDrivList(map , page, size, order, direction); |
| 181 | 185 | } |
| 186 | + | |
| 187 | + @RequestMapping(value = "/findPosition", method = RequestMethod.GET) | |
| 188 | + public List<GpsSpeed> findPosition(@RequestParam String vehicle,@RequestParam String startdate,@RequestParam String enddate) throws ParseException { | |
| 189 | + String deviceid = BasicData.deviceId2NbbmMap.inverse().get(vehicle); | |
| 190 | + List<GpsSpeed> listGpsSpeed = new ArrayList<GpsSpeed>(); | |
| 191 | + listGpsSpeed = gpsService.findPosition(deviceid,startdate,enddate); | |
| 192 | + return listGpsSpeed; | |
| 193 | + } | |
| 194 | + | |
| 182 | 195 | } | ... | ... |
src/main/java/com/bsth/controller/sys/IntervalController.java
0 → 100644
| 1 | +package com.bsth.controller.sys; | |
| 2 | + | |
| 3 | +import java.util.Map; | |
| 4 | + | |
| 5 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 6 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 7 | +import org.springframework.web.bind.annotation.RequestMethod; | |
| 8 | +import org.springframework.web.bind.annotation.RequestParam; | |
| 9 | +import org.springframework.web.bind.annotation.RestController; | |
| 10 | + | |
| 11 | +import com.alibaba.fastjson.JSON; | |
| 12 | +import com.bsth.entity.sys.Interval; | |
| 13 | +import com.bsth.service.sys.IntervalService; | |
| 14 | + | |
| 15 | +@RestController | |
| 16 | +@RequestMapping("interval") | |
| 17 | +public class IntervalController { | |
| 18 | + | |
| 19 | + @Autowired | |
| 20 | + IntervalService intervalService; | |
| 21 | + | |
| 22 | + @RequestMapping(value = "/save", method = RequestMethod.POST) | |
| 23 | + public Map<String, Object> save(@RequestParam String array){ | |
| 24 | + return intervalService.saveList(JSON.parseArray(array, Interval.class)); | |
| 25 | + } | |
| 26 | +} | ... | ... |
src/main/java/com/bsth/data/Station2ParkBuffer.java
| ... | ... | @@ -2,6 +2,7 @@ package com.bsth.data; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.common.ResponseCode; |
| 4 | 4 | import com.bsth.entity.realcontrol.ChildTaskPlan; |
| 5 | +import com.bsth.entity.realcontrol.ScheduleRealInfo; | |
| 5 | 6 | import com.bsth.entity.realcontrol.StationToPark; |
| 6 | 7 | import com.bsth.repository.realcontrol.StationToParkRepository; |
| 7 | 8 | import com.bsth.util.Arith; |
| ... | ... | @@ -28,14 +29,13 @@ public class Station2ParkBuffer implements CommandLineRunner { |
| 28 | 29 | |
| 29 | 30 | private static ArrayListMultimap listMultimap; |
| 30 | 31 | |
| 31 | - private static Set<StationToPark> pstBuff; | |
| 32 | + private static Set<StationToPark> pstBuff = new HashSet<>(); | |
| 32 | 33 | |
| 33 | 34 | static Logger log = LoggerFactory.getLogger(Station2ParkBuffer.class); |
| 34 | 35 | |
| 35 | 36 | @Override |
| 36 | 37 | public void run(String... strings) throws Exception { |
| 37 | 38 | listMultimap = ArrayListMultimap.create(); |
| 38 | - pstBuff = new HashSet<>(); | |
| 39 | 39 | Iterator<StationToPark> iterator = stationToParkRepository.findAll().iterator(); |
| 40 | 40 | StationToPark stp; |
| 41 | 41 | while (iterator.hasNext()) { |
| ... | ... | @@ -102,6 +102,47 @@ public class Station2ParkBuffer implements CommandLineRunner { |
| 102 | 102 | } |
| 103 | 103 | } |
| 104 | 104 | |
| 105 | + public static void put(ScheduleRealInfo sch){ | |
| 106 | + try{ | |
| 107 | + String type = sch.getBcType(); | |
| 108 | + String lineCode = sch.getXlBm(), sName, eName; | |
| 109 | + | |
| 110 | + if (type.equals("in")) { | |
| 111 | + sName = sch.getQdzName(); | |
| 112 | + eName = sch.getZdzName(); | |
| 113 | + } else if (type.equals("out")) { | |
| 114 | + eName = sch.getQdzName(); | |
| 115 | + sName = sch.getZdzName(); | |
| 116 | + } else | |
| 117 | + return; | |
| 118 | + | |
| 119 | + long dt = sch.getZdsjT() - sch.getDfsjT(); | |
| 120 | + Float time = Float.parseFloat(String.valueOf(Arith.div(Arith.div(dt, 1000), 60))); | |
| 121 | + Float mileage = Float.parseFloat(sch.getJhlc().toString()); | |
| 122 | + | |
| 123 | + StationToPark stp = get(lineCode, sName, eName); | |
| 124 | + if (stp == null) { | |
| 125 | + stp = new StationToPark(); | |
| 126 | + stp.setLineCode(lineCode); | |
| 127 | + stp.setStationName(sName); | |
| 128 | + stp.setParkName(eName); | |
| 129 | + listMultimap.put(lineCode, stp); | |
| 130 | + } | |
| 131 | + | |
| 132 | + if (type.equals("in")) { | |
| 133 | + stp.setTime1(time); | |
| 134 | + stp.setMileage1(mileage); | |
| 135 | + } else { | |
| 136 | + stp.setTime2(time); | |
| 137 | + stp.setMileage2(mileage); | |
| 138 | + } | |
| 139 | + | |
| 140 | + pstBuff.add(stp); | |
| 141 | + }catch (Exception e){ | |
| 142 | + log.error("", e); | |
| 143 | + } | |
| 144 | + } | |
| 145 | + | |
| 105 | 146 | public static Float calcMinute(ChildTaskPlan ctask) { |
| 106 | 147 | long t = 0; |
| 107 | 148 | ... | ... |
src/main/java/com/bsth/data/directive/DirectiveCreator.java
| ... | ... | @@ -42,7 +42,7 @@ public class DirectiveCreator { |
| 42 | 42 | * @return Directive60 返回类型 |
| 43 | 43 | * @throws |
| 44 | 44 | */ |
| 45 | - public D60 createD60(String nbbm, String text, Short dispatchInstruct, int upDown, int state) { | |
| 45 | + public D60 createD60(String nbbm, String text, Short dispatchInstruct, int upDown, int state,String lineCode) { | |
| 46 | 46 | Long timestamp = System.currentTimeMillis(); |
| 47 | 47 | |
| 48 | 48 | Short company = Short.parseShort(BasicData.nbbm2CompanyCodeMap.get(nbbm)); |
| ... | ... | @@ -66,6 +66,7 @@ public class DirectiveCreator { |
| 66 | 66 | data.setCompanyCode(company); |
| 67 | 67 | data.setMsgId(msgId); |
| 68 | 68 | directive.setData(data); |
| 69 | + directive.setLineCode(lineCode); | |
| 69 | 70 | long serviceState; |
| 70 | 71 | try { |
| 71 | 72 | serviceState = Consts.SERVICE_STATE[upDown][state]; | ... | ... |
src/main/java/com/bsth/data/directive/DirectivesPstThread.java
| ... | ... | @@ -47,6 +47,10 @@ public class DirectivesPstThread extends Thread { |
| 47 | 47 | if(d60.isDispatch()){ |
| 48 | 48 | ScheduleRealInfo sch = d60.getSch(); |
| 49 | 49 | //如果关联的班次已经不存在了,放弃入库 |
| 50 | + if(sch.isDeleted()){ | |
| 51 | + logger.warn("save 指令,发现 deleted=true 的班次,id=" + sch.getId()); | |
| 52 | + continue; | |
| 53 | + } | |
| 50 | 54 | if(dayOfSchedule.get(sch.getId()) == null){ |
| 51 | 55 | logger.warn("班次:" + sch.getId() + "不存在了,调度指令放弃入库。"); |
| 52 | 56 | continue; | ... | ... |
src/main/java/com/bsth/data/pilot80/PilotReport.java
| ... | ... | @@ -189,7 +189,7 @@ public class PilotReport { |
| 189 | 189 | } |
| 190 | 190 | |
| 191 | 191 | public boolean isEmpty(Double v) { |
| 192 | - return v == null || v.equals(0); | |
| 192 | + return v == null || v.equals(0.0); | |
| 193 | 193 | } |
| 194 | 194 | |
| 195 | 195 | public void defaultReply(String nbbm, short requestCode, boolean agree) { | ... | ... |
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
| ... | ... | @@ -944,8 +944,11 @@ public class DayOfSchedule { |
| 944 | 944 | ScheduleRealInfo sch = schAttrCalculator.calcCurrentExecSch(list); |
| 945 | 945 | carExecutePlanMap.put(nbbm, sch); |
| 946 | 946 | |
| 947 | - if(sch==null) | |
| 947 | + if(sch==null){ | |
| 948 | + logger.info("车辆" + nbbm + "无可执行任务,切换至非营运状态"); | |
| 949 | + DirectivePushQueue.put6003(nbbm, 1, Integer.parseInt(sch.getXlDir()), null, "系统"); | |
| 948 | 950 | return; |
| 951 | + } | |
| 949 | 952 | try { |
| 950 | 953 | GpsEntity gps = gpsRealData.get(BasicData.deviceId2NbbmMap.inverse().get(nbbm)); |
| 951 | 954 | if(gps != null && gps.isOnline()){ | ... | ... |
src/main/java/com/bsth/data/schedule/thread/SchedulePstThread.java
| ... | ... | @@ -36,6 +36,11 @@ public class SchedulePstThread extends Thread { |
| 36 | 36 | if (null == schedule) |
| 37 | 37 | break; |
| 38 | 38 | |
| 39 | + if(schedule.isDeleted()){ | |
| 40 | + logger.error("save 发现 deleted=true 的班次,id: " + schedule.getId()); | |
| 41 | + continue; | |
| 42 | + } | |
| 43 | + | |
| 39 | 44 | try { |
| 40 | 45 | scheduleRepository.save(schedule); |
| 41 | 46 | } | ... | ... |
src/main/java/com/bsth/entity/directive/D60.java
| ... | ... | @@ -62,6 +62,11 @@ public class D60 extends Directive { |
| 62 | 62 | private boolean isDispatch; |
| 63 | 63 | |
| 64 | 64 | /** |
| 65 | + * 线路编码 | |
| 66 | + */ | |
| 67 | + private String lineCode; | |
| 68 | + | |
| 69 | + /** | |
| 65 | 70 | * 相关联的班次 |
| 66 | 71 | */ |
| 67 | 72 | @JsonIgnore |
| ... | ... | @@ -84,6 +89,14 @@ public class D60 extends Directive { |
| 84 | 89 | this.reply47Time = reply47Time; |
| 85 | 90 | } |
| 86 | 91 | |
| 92 | + public String getLineCode() { | |
| 93 | + return lineCode; | |
| 94 | + } | |
| 95 | + | |
| 96 | + public void setLineCode(String lineCode) { | |
| 97 | + this.lineCode = lineCode; | |
| 98 | + } | |
| 99 | + | |
| 87 | 100 | @Embeddable |
| 88 | 101 | public static class D60Data { |
| 89 | 102 | // 公司代码 | ... | ... |
src/main/java/com/bsth/entity/excep/Speeding.java
| ... | ... | @@ -52,6 +52,33 @@ public class Speeding { |
| 52 | 52 | private Float lat; |
| 53 | 53 | |
| 54 | 54 | /** |
| 55 | + * 超速结束时的经度 | |
| 56 | + */ | |
| 57 | + private Float endlon; | |
| 58 | + | |
| 59 | + public Float getEndlon() { | |
| 60 | + return endlon; | |
| 61 | + } | |
| 62 | + | |
| 63 | + public void setEndlon(Float endlon) { | |
| 64 | + this.endlon = endlon; | |
| 65 | + } | |
| 66 | + | |
| 67 | + public Float getEndlat() { | |
| 68 | + return endlat; | |
| 69 | + } | |
| 70 | + | |
| 71 | + public void setEndlat(Float endlat) { | |
| 72 | + this.endlat = endlat; | |
| 73 | + } | |
| 74 | + | |
| 75 | + /** | |
| 76 | + * 超速结束时的纬度 | |
| 77 | + */ | |
| 78 | + private Float endlat; | |
| 79 | + | |
| 80 | + | |
| 81 | + /** | |
| 55 | 82 | * 速度 |
| 56 | 83 | */ |
| 57 | 84 | private Float speed; | ... | ... |
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
| ... | ... | @@ -204,6 +204,11 @@ public class ScheduleRealInfo { |
| 204 | 204 | @Transient |
| 205 | 205 | private int fcpSn; |
| 206 | 206 | |
| 207 | + /** 标记班次已被删除 */ | |
| 208 | + @Transient | |
| 209 | + @JsonIgnore | |
| 210 | + private boolean deleted; | |
| 211 | + | |
| 207 | 212 | public boolean isDfAuto() { |
| 208 | 213 | return dfAuto; |
| 209 | 214 | } |
| ... | ... | @@ -912,4 +917,12 @@ public class ScheduleRealInfo { |
| 912 | 917 | public boolean _isInout(){ |
| 913 | 918 | return this.getBcType().equals("out") || this.getBcType().equals("in"); |
| 914 | 919 | } |
| 920 | + | |
| 921 | + public boolean isDeleted() { | |
| 922 | + return deleted; | |
| 923 | + } | |
| 924 | + | |
| 925 | + public void setDeleted(boolean deleted) { | |
| 926 | + this.deleted = deleted; | |
| 927 | + } | |
| 915 | 928 | } | ... | ... |
src/main/java/com/bsth/entity/sys/Interval.java
0 → 100644
| 1 | +package com.bsth.entity.sys; | |
| 2 | + | |
| 3 | +import java.util.Date; | |
| 4 | + | |
| 5 | +import javax.persistence.Column; | |
| 6 | +import javax.persistence.Entity; | |
| 7 | +import javax.persistence.GeneratedValue; | |
| 8 | +import javax.persistence.GenerationType; | |
| 9 | +import javax.persistence.Id; | |
| 10 | +import javax.persistence.Table; | |
| 11 | + | |
| 12 | + | |
| 13 | +@Entity | |
| 14 | +@Table(name = "bsth_c_interval") | |
| 15 | +public class Interval { | |
| 16 | + | |
| 17 | + @Id | |
| 18 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
| 19 | + private Integer id; | |
| 20 | + | |
| 21 | + /** 大间隔等级 */ | |
| 22 | + private String level; | |
| 23 | + /** 高峰*/ | |
| 24 | + private Integer peak; | |
| 25 | + public Integer getPeak() { | |
| 26 | + return peak; | |
| 27 | + } | |
| 28 | + | |
| 29 | + public void setPeak(Integer peak) { | |
| 30 | + this.peak = peak; | |
| 31 | + } | |
| 32 | + | |
| 33 | + public Integer getTrough() { | |
| 34 | + return trough; | |
| 35 | + } | |
| 36 | + | |
| 37 | + public void setTrough(Integer trough) { | |
| 38 | + this.trough = trough; | |
| 39 | + } | |
| 40 | + | |
| 41 | + | |
| 42 | + public Integer getCreateBy() { | |
| 43 | + return createBy; | |
| 44 | + } | |
| 45 | + | |
| 46 | + public void setCreateBy(Integer createBy) { | |
| 47 | + this.createBy = createBy; | |
| 48 | + } | |
| 49 | + | |
| 50 | + public Date getCreateDate() { | |
| 51 | + return createDate; | |
| 52 | + } | |
| 53 | + | |
| 54 | + public void setCreateDate(Date createDate) { | |
| 55 | + this.createDate = createDate; | |
| 56 | + } | |
| 57 | + | |
| 58 | + public Integer getUpdateBy() { | |
| 59 | + return updateBy; | |
| 60 | + } | |
| 61 | + | |
| 62 | + public void setUpdateBy(Integer updateBy) { | |
| 63 | + this.updateBy = updateBy; | |
| 64 | + } | |
| 65 | + | |
| 66 | + public Date getUpdateDate() { | |
| 67 | + return updateDate; | |
| 68 | + } | |
| 69 | + | |
| 70 | + public void setUpdateDate(Date updateDate) { | |
| 71 | + this.updateDate = updateDate; | |
| 72 | + } | |
| 73 | + | |
| 74 | + /** 低谷 */ | |
| 75 | + private Integer trough; | |
| 76 | + | |
| 77 | + @Column(name = "create_by") | |
| 78 | + private Integer createBy; | |
| 79 | + | |
| 80 | + @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") | |
| 81 | + private Date createDate; | |
| 82 | + | |
| 83 | + @Column(name = "update_by") | |
| 84 | + private Integer updateBy; | |
| 85 | + | |
| 86 | + @Column(name = "update_date", columnDefinition = "timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") | |
| 87 | + private Date updateDate; | |
| 88 | + | |
| 89 | + public Integer getId() { | |
| 90 | + return id; | |
| 91 | + } | |
| 92 | + | |
| 93 | + public void setId(Integer id) { | |
| 94 | + this.id = id; | |
| 95 | + } | |
| 96 | + | |
| 97 | + public String getLevel() { | |
| 98 | + return level; | |
| 99 | + } | |
| 100 | + | |
| 101 | + public void setLevel(String level) { | |
| 102 | + this.level = level; | |
| 103 | + } | |
| 104 | + | |
| 105 | +} | ... | ... |
src/main/java/com/bsth/repository/sys/IntervalRepository.java
0 → 100644
| 1 | +package com.bsth.repository.sys; | |
| 2 | + | |
| 3 | + | |
| 4 | +import org.springframework.stereotype.Repository; | |
| 5 | +import com.bsth.entity.sys.Interval; | |
| 6 | +import com.bsth.repository.BaseRepository; | |
| 7 | + | |
| 8 | +@Repository | |
| 9 | +public interface IntervalRepository extends BaseRepository<Interval, Integer> { | |
| 10 | + | |
| 11 | +} | ... | ... |
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
| ... | ... | @@ -119,6 +119,8 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen |
| 119 | 119 | |
| 120 | 120 | d60 = new DirectiveCreator().createD60_01(sch.getClZbh(), text, Integer.parseInt(sch.getXlDir()) |
| 121 | 121 | , 0, new Date(alarmTime)); |
| 122 | + | |
| 123 | + d60.setLineCode(sch.getXlBm()); | |
| 122 | 124 | } catch (Exception e) { |
| 123 | 125 | logger.error("生成调度指令时出现异常", e); |
| 124 | 126 | return -1; |
| ... | ... | @@ -190,7 +192,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen |
| 190 | 192 | logger.info("切换运营状态, nbbm: " + nbbm + " ,state: " + state + " ,upDown:" + upDown); |
| 191 | 193 | |
| 192 | 194 | String text = "切换为 " + (upDown == 0 ? "上行" : "下行") + (state == 0 ? "营运" : "未营运"); |
| 193 | - D60 d60 = new DirectiveCreator().createD60(nbbm, text, (short) 0x03, upDown, state); | |
| 195 | + D60 d60 = new DirectiveCreator().createD60(nbbm, text, (short) 0x03, upDown, state, null); | |
| 194 | 196 | |
| 195 | 197 | if (null == d60) |
| 196 | 198 | return -1; |
| ... | ... | @@ -257,6 +259,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen |
| 257 | 259 | public D60 create60Data(String nbbm, String text, Short dispatchInstruct, ScheduleRealInfo sch) { |
| 258 | 260 | |
| 259 | 261 | String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm); |
| 262 | + String lineCode = null; | |
| 260 | 263 | if (null == deviceId) { |
| 261 | 264 | logger.error("没有设备号对照的车辆:" + nbbm); |
| 262 | 265 | return null; |
| ... | ... | @@ -281,13 +284,14 @@ public class DirectiveServiceImpl extends BaseServiceImpl<D60, Integer> implemen |
| 281 | 284 | } else { |
| 282 | 285 | upDown = gpsData.getUpDown(); |
| 283 | 286 | state = gpsData.getState(); |
| 287 | + lineCode = gpsData.getLineId(); | |
| 284 | 288 | } |
| 285 | 289 | } else { |
| 286 | 290 | upDown = Byte.parseByte(sch.getXlDir()); |
| 287 | 291 | state = 0; |
| 288 | 292 | } |
| 289 | 293 | |
| 290 | - return new DirectiveCreator().createD60(nbbm, text, dispatchInstruct, upDown, state); | |
| 294 | + return new DirectiveCreator().createD60(nbbm, text, dispatchInstruct, upDown, state, lineCode); | |
| 291 | 295 | } |
| 292 | 296 | |
| 293 | 297 | @Override | ... | ... |
src/main/java/com/bsth/service/excep/impl/SpeedingServiceImpl.java
| ... | ... | @@ -9,6 +9,7 @@ import java.text.SimpleDateFormat; |
| 9 | 9 | import java.util.ArrayList; |
| 10 | 10 | import java.util.Date; |
| 11 | 11 | import java.util.HashMap; |
| 12 | +import java.util.Iterator; | |
| 12 | 13 | import java.util.List; |
| 13 | 14 | import java.util.Map; |
| 14 | 15 | |
| ... | ... | @@ -24,6 +25,8 @@ import com.bsth.service.excep.SpeedingService; |
| 24 | 25 | import com.bsth.util.EchartConver; |
| 25 | 26 | import com.bsth.util.PageHelper; |
| 26 | 27 | import com.bsth.util.PageObject; |
| 28 | +import com.bsth.util.TransGPS; | |
| 29 | +import com.bsth.util.TransGPS.Location; | |
| 27 | 30 | import com.bsth.util.db.DBUtils_MS; |
| 28 | 31 | import com.github.abel533.echarts.Option; |
| 29 | 32 | import com.google.gson.Gson; |
| ... | ... | @@ -39,7 +42,7 @@ public class SpeedingServiceImpl implements SpeedingService { |
| 39 | 42 | ResultSet rs = null; |
| 40 | 43 | int page=Integer.parseInt(map.get("page").toString()); |
| 41 | 44 | List<Speeding> list=new ArrayList<Speeding>(); |
| 42 | - String sql="select * from bsth_c_speeding where 1=1 "; | |
| 45 | + String sql="select * from bsth_c_speeding where speed > 60 "; | |
| 43 | 46 | Object line=map.get("line"); |
| 44 | 47 | Object nbbm=map.get("nbbm"); |
| 45 | 48 | Object updown=map.get("updown"); |
| ... | ... | @@ -83,7 +86,6 @@ public class SpeedingServiceImpl implements SpeedingService { |
| 83 | 86 | |
| 84 | 87 | } |
| 85 | 88 | |
| 86 | - | |
| 87 | 89 | /*sql +=" order by id limit ?,?";*/ |
| 88 | 90 | |
| 89 | 91 | |
| ... | ... | @@ -104,17 +106,23 @@ public class SpeedingServiceImpl implements SpeedingService { |
| 104 | 106 | } |
| 105 | 107 | |
| 106 | 108 | static List<Speeding> resultSet2Set(ResultSet rs) throws SQLException{ |
| 107 | - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); | |
| 109 | + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |
| 108 | 110 | List<Speeding> list=new ArrayList<Speeding>(); |
| 109 | 111 | Speeding speeding; |
| 112 | + Float lon, lat; | |
| 113 | + Location location; | |
| 110 | 114 | while(rs.next()){ |
| 115 | + lon = rs.getFloat("lon"); | |
| 116 | + lat = rs.getFloat("lat"); | |
| 117 | + location = TransGPS.LocationMake(lon, lat); | |
| 118 | + location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(location)); | |
| 111 | 119 | speeding=new Speeding(); |
| 112 | 120 | speeding.setId(Integer.valueOf(rs.getObject("id").toString())); |
| 113 | - speeding.setLat(Float.valueOf(rs.getObject("lat").toString())); | |
| 121 | + speeding.setLon((float)location.getLng()); | |
| 122 | + speeding.setLat((float)location.getLat()); | |
| 114 | 123 | speeding.setLine(Integer.valueOf(rs.getObject("line").toString())); |
| 115 | 124 | //run 时注解 |
| 116 | 125 | speeding.setLineName(BasicData.lineCode2NameMap.get(speeding.getLine().toString())); |
| 117 | - speeding.setLon(Float.valueOf(rs.getObject("lon").toString())); | |
| 118 | 126 | speeding.setSpeed(Float.valueOf(rs.getObject("speed").toString())); |
| 119 | 127 | speeding.setTimestamp((Long.valueOf(rs.getObject("timestamp").toString()))); |
| 120 | 128 | speeding.setTimestampDate(sdf.format(new Date(speeding.getTimestamp()))); |
| ... | ... | @@ -127,14 +135,12 @@ public class SpeedingServiceImpl implements SpeedingService { |
| 127 | 135 | |
| 128 | 136 | @Override |
| 129 | 137 | public PageObject<Speeding> Pagequery(Map<String, Object> map) { |
| 130 | - String sql="select count(*) record from bsth_c_speeding where 1=1 "; | |
| 138 | +/* String sql="select count(*) record from bsth_c_speeding where 1=1 "; | |
| 131 | 139 | Object line=map.get("line"); |
| 132 | 140 | Object nbbm=map.get("nbbm"); |
| 133 | 141 | Object updown=map.get("updown"); |
| 134 | 142 | Object startDate=map.get("startDate"); |
| 135 | 143 | Object endDate=map.get("endDate"); |
| 136 | - //时间转换 | |
| 137 | - SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |
| 138 | 144 | |
| 139 | 145 | if(line!=null){ |
| 140 | 146 | sql +=" and line like'%"+line.toString().trim()+"%'"; |
| ... | ... | @@ -186,14 +192,17 @@ public class SpeedingServiceImpl implements SpeedingService { |
| 186 | 192 | e.printStackTrace(); |
| 187 | 193 | }finally { |
| 188 | 194 | DBUtils_MS.close(rs, ps, conn); |
| 189 | - } | |
| 195 | + }*/ | |
| 190 | 196 | |
| 197 | + //时间转换 | |
| 198 | + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |
| 191 | 199 | List<Speeding> list=findAll(map); |
| 192 | 200 | List<Speeding> listResult = new ArrayList<Speeding>(); |
| 193 | 201 | int curPage;//页码 |
| 194 | 202 | int pageData;//每页的记录条数 |
| 195 | 203 | int start;//起始数据下标 |
| 196 | 204 | int totalPage;//总页数 |
| 205 | + int totalData = 0; | |
| 197 | 206 | if(list.size()>1){ |
| 198 | 207 | Speeding speedingNow;//下标为i的车 |
| 199 | 208 | Speeding speedingLast;//下标为i-1的车 |
| ... | ... | @@ -206,11 +215,20 @@ public class SpeedingServiceImpl implements SpeedingService { |
| 206 | 215 | strLast = speedingLast.getVehicle()+speedingLast.getLine()+speedingLast.getUpDown(); |
| 207 | 216 | //同一车辆同一线路同一方向并且该记录的超速的开始时间减去上一条超速记录的结束时间小于等于10s,证明该车超速。//PS:祛除数据库中的重复发送数据 |
| 208 | 217 | if(strNow.equals(strLast) && Math.abs(speedingNow.getTimestamp()-speedingLast.getTimestamp())<=10*1000 && (speedingNow.getTimestamp()-speedingLast.getTimestamp()!=0)){ |
| 209 | - speedingLast.setEndtimestamp(speedingNow.getTimestamp()); | |
| 218 | + speedingLast.setEndtimestamp(speedingNow.getTimestamp());//设置结束时间时间戳 | |
| 210 | 219 | speedingLast.setEndtimestampDate(sdf.format(new Date(speedingNow.getTimestamp())));//设置结束时间 |
| 220 | + speedingLast.setEndlon(speedingNow.getLon());//设置结束时的经度 | |
| 221 | + speedingLast.setEndlat(speedingNow.getLat());//设置结束时的纬度 | |
| 211 | 222 | listResult.add(speedingLast); |
| 212 | 223 | } |
| 213 | 224 | } |
| 225 | + Iterator<Speeding> speedIt = listResult.iterator(); | |
| 226 | + while(speedIt.hasNext()){ | |
| 227 | + Speeding speeding = speedIt.next(); | |
| 228 | + if(speeding.getEndtimestamp()-speeding.getTimestamp()<=1000){ | |
| 229 | + speedIt.remove(); | |
| 230 | + } | |
| 231 | + } | |
| 214 | 232 | |
| 215 | 233 | totalData = listResult.size();//总记录条数。 |
| 216 | 234 | if(map.get("curPage") == null || map.get("curPage").equals("0")){ | ... | ... |
src/main/java/com/bsth/service/gps/GpsService.java
| 1 | 1 | package com.bsth.service.gps; |
| 2 | 2 | |
| 3 | +import com.bsth.data.gpsdata.GpsEntity; | |
| 3 | 4 | import com.bsth.service.gps.entity.GpsOutbound_DTO; |
| 5 | +import com.bsth.service.gps.entity.GpsSpeed; | |
| 4 | 6 | import com.bsth.service.gps.entity.GpsSpeed_DTO; |
| 5 | 7 | |
| 6 | 8 | import javax.servlet.http.HttpServletResponse; |
| 9 | + | |
| 10 | +import java.text.ParseException; | |
| 7 | 11 | import java.util.List; |
| 8 | 12 | import java.util.Map; |
| 9 | 13 | |
| ... | ... | @@ -38,4 +42,7 @@ public interface GpsService { |
| 38 | 42 | void abnormalExcel(String nbbm, long st, long et, HttpServletResponse resp); |
| 39 | 43 | |
| 40 | 44 | void arrivalExcel(String nbbm, long st, long et, HttpServletResponse resp); |
| 45 | + | |
| 46 | + List<GpsSpeed> findPosition(String deviceid, String startdate, | |
| 47 | + String enddate) throws ParseException; | |
| 41 | 48 | } | ... | ... |
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
| ... | ... | @@ -45,6 +45,8 @@ import java.sql.Connection; |
| 45 | 45 | import java.sql.PreparedStatement; |
| 46 | 46 | import java.sql.ResultSet; |
| 47 | 47 | import java.text.DecimalFormat; |
| 48 | +import java.text.ParseException; | |
| 49 | +import java.text.SimpleDateFormat; | |
| 48 | 50 | import java.util.*; |
| 49 | 51 | |
| 50 | 52 | @Service |
| ... | ... | @@ -981,4 +983,57 @@ public class GpsServiceImpl implements GpsService { |
| 981 | 983 | } |
| 982 | 984 | return true; |
| 983 | 985 | } |
| 986 | + | |
| 987 | + @Override | |
| 988 | + public List<GpsSpeed> findPosition(String deviceid, String startdate, | |
| 989 | + String enddate) throws ParseException{ | |
| 990 | + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |
| 991 | + Calendar c = Calendar.getInstance(); | |
| 992 | + Date date = sdf.parse(startdate); | |
| 993 | + c.setTime(date); | |
| 994 | + int daysYear = c.get(Calendar.DAY_OF_YEAR);//获取当前是今年的第几天。 | |
| 995 | + | |
| 996 | + long startTime = sdf.parse(startdate).getTime(); | |
| 997 | + long endTime = sdf.parse(enddate).getTime(); | |
| 998 | + | |
| 999 | + String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,speed_gps from bsth_c_gps_info where days_year=? and device_id=? and ts >= ? and ts <= ?" + | |
| 1000 | + " ORDER BY TS "; | |
| 1001 | + Connection conn = null; | |
| 1002 | + PreparedStatement ps = null; | |
| 1003 | + ResultSet rs = null; | |
| 1004 | + List<GpsSpeed> listResult = new ArrayList<GpsSpeed>(); | |
| 1005 | + GpsSpeed gpsSpeed = null; | |
| 1006 | + try { | |
| 1007 | + conn = DBUtils_MS.getConnection(); | |
| 1008 | + ps = conn.prepareStatement(sql); | |
| 1009 | + ps.setInt(1, daysYear); | |
| 1010 | + ps.setString(2, deviceid); | |
| 1011 | + ps.setLong(3,startTime); | |
| 1012 | + ps.setLong(4,endTime); | |
| 1013 | + rs = ps.executeQuery(); | |
| 1014 | + Float lon, lat; | |
| 1015 | + Location location; | |
| 1016 | + while (rs.next()) { | |
| 1017 | + gpsSpeed = new GpsSpeed(); | |
| 1018 | + // to 百度坐标 | |
| 1019 | + lon = rs.getFloat("LON"); | |
| 1020 | + lat = rs.getFloat("LAT"); | |
| 1021 | + location = TransGPS.LocationMake(lon, lat); | |
| 1022 | + location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(location)); | |
| 1023 | + gpsSpeed.setVehicle(rs.getString("device_id")); | |
| 1024 | + gpsSpeed.setLon((float)location.getLng()); | |
| 1025 | + gpsSpeed.setLat((float)location.getLat()); | |
| 1026 | + gpsSpeed.setSpeed(rs.getFloat("speed_gps")); | |
| 1027 | + gpsSpeed.setTimestamp(rs.getLong("TS")); | |
| 1028 | + // 上下行 | |
| 1029 | + listResult.add(gpsSpeed); | |
| 1030 | + } | |
| 1031 | + } catch (Exception e) { | |
| 1032 | + e.printStackTrace(); | |
| 1033 | + } finally { | |
| 1034 | + DBUtils_MS.close(rs, ps, conn); | |
| 1035 | + } | |
| 1036 | + return listResult; | |
| 1037 | + | |
| 1038 | + } | |
| 984 | 1039 | } | ... | ... |
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| ... | ... | @@ -10,6 +10,7 @@ import com.bsth.controller.realcontrol.dto.DfsjChange; |
| 10 | 10 | import com.bsth.controller.realcontrol.dto.LpData; |
| 11 | 11 | import com.bsth.data.BasicData; |
| 12 | 12 | import com.bsth.data.LineConfigData; |
| 13 | +import com.bsth.data.Station2ParkBuffer; | |
| 13 | 14 | import com.bsth.data.schedule.DayOfSchedule; |
| 14 | 15 | import com.bsth.data.schedule.SchAttrCalculator; |
| 15 | 16 | import com.bsth.data.schedule.ScheduleComparator; |
| ... | ... | @@ -590,6 +591,8 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 590 | 591 | //重新计算车辆当前执行班次 |
| 591 | 592 | dayOfSchedule.reCalcExecPlan(t.getClZbh()); |
| 592 | 593 | |
| 594 | + //记录站到场历时数据 | |
| 595 | + Station2ParkBuffer.put(t); | |
| 593 | 596 | |
| 594 | 597 | rs.put("ts", ts); |
| 595 | 598 | rs.put("t", t); |
| ... | ... | @@ -640,8 +643,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 640 | 643 | Map<String, Object> rs = new HashMap<>(); |
| 641 | 644 | rs.put("status", ResponseCode.ERROR); |
| 642 | 645 | |
| 646 | + ScheduleRealInfo sch = null; | |
| 643 | 647 | try { |
| 644 | - ScheduleRealInfo sch = dayOfSchedule.get(id); | |
| 648 | + sch = dayOfSchedule.get(id); | |
| 645 | 649 | if (sch == null) { |
| 646 | 650 | rs.put("msg", "无效的id号"); |
| 647 | 651 | return rs; |
| ... | ... | @@ -652,6 +656,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 652 | 656 | return rs; |
| 653 | 657 | } |
| 654 | 658 | |
| 659 | + sch.setDeleted(true); | |
| 655 | 660 | //解除和调度指令的外键约束 |
| 656 | 661 | jdbcTemplate.update(Constants.REMOVE_DIRECTIVE_SCH_FK, id); |
| 657 | 662 | |
| ... | ... | @@ -671,9 +676,12 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 671 | 676 | rs.put("ts", ts); |
| 672 | 677 | rs.put("delete", sch); |
| 673 | 678 | } |
| 679 | + else | |
| 680 | + sch.setDeleted(false); | |
| 674 | 681 | }catch (Exception e){ |
| 675 | 682 | logger.error("", e); |
| 676 | 683 | rs.put("msg", e.getMessage()); |
| 684 | + sch.setDeleted(false); | |
| 677 | 685 | } |
| 678 | 686 | |
| 679 | 687 | return rs; | ... | ... |
src/main/java/com/bsth/service/schedule/impl/TTInfoDetailServiceImpl.java
| ... | ... | @@ -157,7 +157,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl<TTInfoDetail, Long> im |
| 157 | 157 | } else { |
| 158 | 158 | Cell[] cells = sheet.getRow(0); // 获取第一行数据列 |
| 159 | 159 | for (int i = 0; i < cells.length; i++) { |
| 160 | - String cell_con = cells[i].getContents(); | |
| 160 | + String cell_con = StringUtils.trimToEmpty(cells[i].getContents()); // trimToEmpty | |
| 161 | 161 | |
| 162 | 162 | if (StringUtils.isEmpty(cell_con)) { |
| 163 | 163 | throw new Exception(String.format("第1行,第%d列数据不能为空", i + 1)); |
| ... | ... | @@ -199,7 +199,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl<TTInfoDetail, Long> im |
| 199 | 199 | Map<String, Integer> gbindexmap = new HashMap<>(); // 记录每个路牌在第几行 |
| 200 | 200 | for (int i = 1; i < sheet.getRows(); i++) { // 从第2行开始验证数据 |
| 201 | 201 | Cell bcell = sheet.getRow(i)[0]; // 获取第1列 |
| 202 | - String bcell_con = bcell.getContents(); | |
| 202 | + String bcell_con = StringUtils.trimToEmpty(bcell.getContents()); // trimToEmpty | |
| 203 | 203 | if (StringUtils.isEmpty(bcell_con)) { |
| 204 | 204 | throw new Exception(String.format("第%d行,第1列路牌无数据", i + 1)); |
| 205 | 205 | } else if (gbindexmap.get(bcell_con.trim()) != null) { |
| ... | ... | @@ -233,7 +233,7 @@ public class TTInfoDetailServiceImpl extends BServiceImpl<TTInfoDetail, Long> im |
| 233 | 233 | for (int i = 1; i < sheet.getRows(); i++) { // 从第2行开始验证数据 |
| 234 | 234 | Cell[] bcells = sheet.getRow(i); |
| 235 | 235 | for (int j = 1; j < bcells.length; j++) { // 从第2列开始 |
| 236 | - String bcell_con = bcells[j].getContents(); | |
| 236 | + String bcell_con = StringUtils.trimToEmpty(bcells[j].getContents()); // trimToEmpty | |
| 237 | 237 | if (StringUtils.isNotEmpty(bcell_con)) { |
| 238 | 238 | Matcher m1 = p1.matcher(bcell_con.trim()); |
| 239 | 239 | Matcher m2 = p2.matcher(bcell_con.trim()); | ... | ... |
src/main/java/com/bsth/service/sys/IntervalService.java
0 → 100644
| 1 | +package com.bsth.service.sys; | |
| 2 | + | |
| 3 | +import java.util.List; | |
| 4 | +import java.util.Map; | |
| 5 | + | |
| 6 | +import com.bsth.entity.sys.Interval; | |
| 7 | +import com.bsth.service.BaseService; | |
| 8 | + | |
| 9 | +public interface IntervalService extends BaseService<Interval, Integer> { | |
| 10 | + | |
| 11 | + Map<String, Object> saveList(List<Interval> parseArray); | |
| 12 | + | |
| 13 | +} | ... | ... |
src/main/java/com/bsth/service/sys/impl/IntervalServiceImpl.java
0 → 100644
| 1 | +package com.bsth.service.sys.impl; | |
| 2 | + | |
| 3 | +import java.util.HashMap; | |
| 4 | +import java.util.List; | |
| 5 | +import java.util.Map; | |
| 6 | + | |
| 7 | +import org.slf4j.Logger; | |
| 8 | +import org.slf4j.LoggerFactory; | |
| 9 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 10 | +import org.springframework.stereotype.Service; | |
| 11 | + | |
| 12 | +import com.bsth.common.ResponseCode; | |
| 13 | +import com.bsth.entity.sys.Interval; | |
| 14 | +import com.bsth.repository.sys.IntervalRepository; | |
| 15 | +import com.bsth.service.impl.BaseServiceImpl; | |
| 16 | +import com.bsth.service.sys.IntervalService; | |
| 17 | + | |
| 18 | +@Service | |
| 19 | +public class IntervalServiceImpl extends BaseServiceImpl<Interval, Integer> implements IntervalService { | |
| 20 | + | |
| 21 | + @Autowired | |
| 22 | + IntervalRepository intervalRepository; | |
| 23 | + | |
| 24 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | |
| 25 | + | |
| 26 | + @Override | |
| 27 | + public Map<String, Object> saveList(List<Interval> parseArray) { | |
| 28 | + Map<String, Object> map = new HashMap<>(); | |
| 29 | + try{ | |
| 30 | + intervalRepository.save(parseArray); | |
| 31 | + map.put("status", ResponseCode.SUCCESS); | |
| 32 | + }catch(Exception e){ | |
| 33 | + map.put("status", ResponseCode.ERROR); | |
| 34 | + logger.error("", e); | |
| 35 | + } | |
| 36 | + return map; | |
| 37 | + } | |
| 38 | + | |
| 39 | +} | ... | ... |
src/main/resources/static/pages/base/interval/list.html
0 → 100644
| 1 | +<!-- <link href="/pages/base/line/css/animate.css" rel="stylesheet" type="text/css" /> | |
| 2 | +<link href="/pages/base/line/css/tipso.css" rel="stylesheet" type="text/css" /> --> | |
| 3 | +<!-- 片段标题 START --> | |
| 4 | +<div class="page-head"> | |
| 5 | + <div class="page-title"> | |
| 6 | + <h1>大间隔信息</h1> | |
| 7 | + </div> | |
| 8 | +</div> | |
| 9 | +<!-- 片段标题 END --> | |
| 10 | + | |
| 11 | +<!-- 线路信息导航栏组件 START --> | |
| 12 | +<ul class="page-breadcrumb breadcrumb"> | |
| 13 | + <li><a href="/pages/home.html" data-pjax>首页</a> <i class="fa fa-circle"></i></li> | |
| 14 | + <li><span class="active">基础信息</span> <i class="fa fa-circle"></i></li> | |
| 15 | + <li><span class="active">大间隔信息</span></li> | |
| 16 | +</ul> | |
| 17 | +<!-- 线路信息导航栏组件 END --> | |
| 18 | + | |
| 19 | +<div class="row"> | |
| 20 | + <div class="col-md-12"> | |
| 21 | + <div class="portlet light porttlet-fit bordered"> | |
| 22 | + <div class="portlet-title"> | |
| 23 | + <div class="tipso-animation"> | |
| 24 | + </div> | |
| 25 | + <div class="caption"> | |
| 26 | + <i class="fa fa-info-circle font-dark"></i> | |
| 27 | + <span class="caption-subject font-dark sbold uppercase">线路信息</span> | |
| 28 | + </div> | |
| 29 | + <div class="actions"> | |
| 30 | + <div class="btn-group btn-group-devided" data-toggle="buttons"> | |
| 31 | + <a class="btn btn-circle blue" href="add.html" data-pjax><i class="fa fa-plus"></i> 添加线路</a> | |
| 32 | + </div> | |
| 33 | + </div> | |
| 34 | + </div> | |
| 35 | + <div class="portlet-body"> | |
| 36 | + <div class="table-container" style="margin-top: 10px"> | |
| 37 | + <table class="table table-striped table-bordered table-hover table-checkable" id="datatable_line"> | |
| 38 | + <thead> | |
| 39 | + <tr role="row" class="heading"> | |
| 40 | + <th >#</th> | |
| 41 | + <th >序号</th> | |
| 42 | + <th >大间隔ID</th> | |
| 43 | + <th >大间隔等级</th> | |
| 44 | + <th >高峰间隔时间</th> | |
| 45 | + <th >低谷间隔时间</th> | |
| 46 | + <th >操作</th> | |
| 47 | + </tr> | |
| 48 | + <tr role="row" class="filter"> | |
| 49 | + <td>#</td> | |
| 50 | + <td></td> | |
| 51 | + <td></td> | |
| 52 | + <td></td> | |
| 53 | + <td></td> | |
| 54 | + <td></td> | |
| 55 | + <td> | |
| 56 | + <button class="btn btn-sm green btn-outline filter-submit margin-bottom" > | |
| 57 | + <i class="fa fa-search"></i> 搜索 | |
| 58 | + </button> | |
| 59 | + | |
| 60 | + <button class="btn btn-sm red btn-outline filter-cancel" id="notification-trigger"> | |
| 61 | + <i class="fa fa-times"></i> 重置 | |
| 62 | + </button> | |
| 63 | + </td> | |
| 64 | + </tr> | |
| 65 | + </thead> | |
| 66 | + <tbody></tbody> | |
| 67 | + </table> | |
| 68 | + <div style="text-align: right;"> | |
| 69 | + <ul id="pagination" class="pagination"></ul> | |
| 70 | + </div> | |
| 71 | + </div> | |
| 72 | + </div> | |
| 73 | + </div> | |
| 74 | + </div> | |
| 75 | +</div> | |
| 76 | +<script type="text/html" id="line_list_temp"> | |
| 77 | + {{each list as obj i }} | |
| 78 | + <tr> | |
| 79 | + <td style="vertical-align: middle;"> | |
| 80 | + <input type="checkbox" class="group-checkable icheck" value="{{obj.name}}" id="{{obj.id}}" data-id="{{obj.id}}" data-lineName="{{obj.name}}"> | |
| 81 | + </td> | |
| 82 | + <td style="vertical-align: middle;"> | |
| 83 | + {{(list.page*10)+(i+1)}} | |
| 84 | + </td> | |
| 85 | + <td> | |
| 86 | + {{obj.lineCode}} | |
| 87 | + </td> | |
| 88 | + <td> | |
| 89 | + {{obj.name}} | |
| 90 | + </td> | |
| 91 | + <td> | |
| 92 | + {{if obj.nature == 'lj'}} | |
| 93 | + 路救 | |
| 94 | + {{else if obj.nature == 'bc'}} | |
| 95 | + 备车 | |
| 96 | + {{else if obj.nature == 'dbc'}} | |
| 97 | + 定班车 | |
| 98 | + {{else if obj.nature == 'yxl'}} | |
| 99 | + 夜宵路 | |
| 100 | + {{else if obj.nature == 'cgxl'}} | |
| 101 | + 常规线路 | |
| 102 | + {{else if obj.nature == 'gjxl'}} | |
| 103 | + 过江线路 | |
| 104 | + {{else if obj.nature == 'csbs'}} | |
| 105 | + 穿梭巴士 | |
| 106 | + {{else if obj.nature == 'tyxl'}} | |
| 107 | + 特约线路 | |
| 108 | + {{else if obj.nature == 'qt'}} | |
| 109 | + 其他 | |
| 110 | + {{else if obj.nature == 'cctxl'}} | |
| 111 | + 村村通线路 | |
| 112 | + {{/if}} | |
| 113 | + </td> | |
| 114 | + <td> | |
| 115 | + {{if obj.level == '1'}} | |
| 116 | + 一级线路 | |
| 117 | + {{else if obj.level == '2'}} | |
| 118 | + 二级线路 | |
| 119 | + {{else if obj.level == '0'}} | |
| 120 | + 未知等级 | |
| 121 | + {{/if}} | |
| 122 | + </td> | |
| 123 | + <td> | |
| 124 | + {{obj.shanghaiLinecode}} | |
| 125 | + </td> | |
| 126 | + <td> | |
| 127 | + {{if obj.destroy == 1}} | |
| 128 | + <span style="font-weight: bold; color: red; padding: 5px; background-color: #FFE4E1; margin: 5px; font-size: 9px;border-radius: 4px;">撤销</span> | |
| 129 | + {{else if obj.destroy == 0}} | |
| 130 | + <span style="font-weight: bold; color: #07824e; padding: 5px; background-color: #FFE4E1; margin: 5px; font-size: 9px;border-radius: 4px;">运营</span> | |
| 131 | + {{/if}} | |
| 132 | + </td> | |
| 133 | + <td> | |
| 134 | + <a href="/pages/base/lineinformation/list.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 查看 </a> | |
| 135 | + </td> | |
| 136 | + <td> | |
| 137 | + <a href="/pages/base/stationroute/list.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 查看 </a> | |
| 138 | + </td> | |
| 139 | + <td> | |
| 140 | + <a href="details.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 详细 </a> | |
| 141 | + <a href="edit.html?no={{obj.id}}" class="btn default blue-stripe btn-sm" data-pjax> 修改 </a> | |
| 142 | + </td> | |
| 143 | + </tr> | |
| 144 | + {{/each}} | |
| 145 | + {{if list.length == 0}} | |
| 146 | + <tr> | |
| 147 | + <td colspan=13><h6 class="muted">没有找到相关数据</h6></td> | |
| 148 | + </tr> | |
| 149 | + {{/if}} | |
| 150 | +</script> | |
| 151 | +<!-- <script src="/pages/base/line/js/tipso.js"></script> --> | |
| 152 | +<!-- 线路信息片段JS模块 --> | |
| 153 | +<script src="/pages/base/line/js/line-list-table.js"></script> | |
| 0 | 154 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/excep/js/outboundmap-load.js
src/main/resources/static/pages/excep/js/speeding-map.js
0 → 100644
| 1 | +/** | |
| 2 | + * 百度地图 | |
| 3 | + * | |
| 4 | + * - - - - - -》init:地图初始化 | |
| 5 | + * | |
| 6 | + * - - - - - -》lineInfoPanl:从百度地图抓去站点与路段数据 | |
| 7 | + * | |
| 8 | + * - - - - - -》getDistanceAndDuration:获取距离与时间 | |
| 9 | + * | |
| 10 | + * - - - - - -》pointsPolygon:地图画多边行 | |
| 11 | + * | |
| 12 | + * - - - - - -》pointsCircle:画圆 | |
| 13 | + * | |
| 14 | + * - - - - - -》localSearchFromAdreesToPoint:根据地理名称获取百度经纬度坐标 | |
| 15 | + * | |
| 16 | + * - - - - - -》drawingUpline:在地图上画出上行线路走向 | |
| 17 | + * | |
| 18 | + * - - - - - -》stationsNameToPoints:站点名称获取百度坐标(手动规划) | |
| 19 | + * | |
| 20 | + * - - - - - -》getDistanceAndTotime:根据坐标点获取两点之间的时间与距离(手动规划) | |
| 21 | + * | |
| 22 | + * - - - - - -》getSectionListPlonly:根据坐标点获取两点之间的折线路段(手动规划) | |
| 23 | + */ | |
| 24 | + | |
| 25 | +var SpeedingMap = function () { | |
| 26 | + | |
| 27 | + /** WorldsBMap 全局变量定义 mapBValue:地图对象;polygon:多边形;polyUpline:走向折线;circle:圆 *//* | |
| 28 | + var mapBValue = '';polygon='',polyUpline='',circle='',iseditStatus = false;*/ | |
| 29 | + | |
| 30 | + var Bmap = { | |
| 31 | + | |
| 32 | + init : function() { | |
| 33 | + // 设置中心点, | |
| 34 | + var CENTER_POINT = {lng : 121.528733,lat : 31.237425}; | |
| 35 | + | |
| 36 | + // 百度API Key | |
| 37 | + var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT'; | |
| 38 | + | |
| 39 | + // 初始化百度地图 | |
| 40 | + mapBValue = new BMap.Map("speedingMap"); | |
| 41 | + | |
| 42 | + //中心点和缩放级别 | |
| 43 | + mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15); | |
| 44 | + | |
| 45 | + //启用地图拖拽事件,默认启用(可不写) | |
| 46 | + mapBValue.enableDragging(); | |
| 47 | + | |
| 48 | + //启用地图滚轮放大缩小 | |
| 49 | + mapBValue.enableScrollWheelZoom(); | |
| 50 | + | |
| 51 | + //禁用鼠标双击放大 | |
| 52 | + mapBValue.disableDoubleClickZoom(); | |
| 53 | + | |
| 54 | + //启用键盘上下左右键移动地图 | |
| 55 | + mapBValue.enableKeyboard(); | |
| 56 | + | |
| 57 | + return mapBValue; | |
| 58 | + }, | |
| 59 | + | |
| 60 | + /** 获取地图对象 @return 地图对象map */ | |
| 61 | + getmapBValue : function() { | |
| 62 | + | |
| 63 | + return mapBValue; | |
| 64 | + | |
| 65 | + }, | |
| 66 | + | |
| 67 | + /* drawTravelRoute:function(data){ | |
| 68 | + var driving = Bmap.DrivingRoute(map, {renderOptions:{map: map}}) | |
| 69 | + | |
| 70 | + }*/ | |
| 71 | + | |
| 72 | + } | |
| 73 | + | |
| 74 | + return Bmap; | |
| 75 | + | |
| 76 | +}(); | |
| 0 | 77 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/excep/speedingListmh.html
| ... | ... | @@ -146,7 +146,10 @@ |
| 146 | 146 | {{(obj.endtimestamp-obj.timestamp)/1000}}秒 |
| 147 | 147 | </td> |
| 148 | 148 | <td> |
| 149 | - <a class="btn default blue-stripe btn-sm lookTrajectory" data-pjax> | |
| 149 | + <a class="btn default blue-stripe btn-sm lookTrajectory" data-vehicle ="{{obj.vehicle}}" | |
| 150 | + data-startdate="{{obj.timestampDate}}" data-enddate="{{obj.endtimestampDate}}" | |
| 151 | + data-lon="{{obj.lon}}" data-lat="{{obj.lat}}" | |
| 152 | + data-endlon="{{obj.endlon}}" data-endlat="{{obj.endlat}}" > | |
| 150 | 153 | 查看轨迹 |
| 151 | 154 | </a> |
| 152 | 155 | </td> |
| ... | ... | @@ -162,6 +165,8 @@ |
| 162 | 165 | {{/if}} |
| 163 | 166 | </script> |
| 164 | 167 | |
| 168 | +<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script> | |
| 169 | + | |
| 165 | 170 | <script> |
| 166 | 171 | $(function(){ |
| 167 | 172 | var page = 0, initPagination; |
| ... | ... | @@ -185,7 +190,20 @@ $(function(){ |
| 185 | 190 | var parameter = new Object(); |
| 186 | 191 | parameter.endDate = $("input[name='endDate']")[0].value; |
| 187 | 192 | parameter.startDate = $("input[name='startDate']")[0].value; |
| 188 | - jsDoQuery(parameter,true); | |
| 193 | + | |
| 194 | + //搜索线路 | |
| 195 | + $.get('/basic/lineCode2Name',function(result){ | |
| 196 | + var data=[]; | |
| 197 | + data.push({id: " ", text: "全部线路"}); | |
| 198 | + for(var code in result){ | |
| 199 | + data.push({id: code, text: result[code]}); | |
| 200 | + } | |
| 201 | + initPinYinSelect2($('#line'),data,function(ldmcSelector) { | |
| 202 | + ldmcSelector.select2("val",data[1].id);//因为数据量太大,所以默认一条线路作为查询参数 | |
| 203 | + }); | |
| 204 | + parameter.line = data[1].id; | |
| 205 | + jsDoQuery(parameter,true); | |
| 206 | + }); | |
| 189 | 207 | |
| 190 | 208 | //时间戳转换为年月日 |
| 191 | 209 | function timeToData(time){ |
| ... | ... | @@ -223,7 +241,7 @@ $(function(){ |
| 223 | 241 | /* |
| 224 | 242 | * 获取数据 p: 要提交的参数, pagination: 是否重新分页 |
| 225 | 243 | */ |
| 226 | - function jsDoQuery(p, pagination){ | |
| 244 | + function jsDoQuery(p, pagination){ | |
| 227 | 245 | var params = {}; |
| 228 | 246 | if(p) |
| 229 | 247 | params = p; |
| ... | ... | @@ -243,7 +261,27 @@ $(function(){ |
| 243 | 261 | } |
| 244 | 262 | layer.close(i); |
| 245 | 263 | $(".lookTrajectory").click(function(){ |
| 246 | - layer.alert("暂未开放此功能!"); | |
| 264 | + var vehicle = $(this).data('vehicle'); | |
| 265 | + var startDate = $(this).data('startdate'); | |
| 266 | + var endDate = $(this).data('enddate'); | |
| 267 | + var lon = $(this).data('lon'); | |
| 268 | + var lat = $(this).data('lat'); | |
| 269 | + var endLon = $(this).data('endlon'); | |
| 270 | + var endLat = $(this).data('endlat'); | |
| 271 | + var storage = window.localStorage; | |
| 272 | + storage.setItem("zbhAndDate",vehicle+","+startDate+","+endDate+","+lon+","+lat+","+endLon+","+endLat); | |
| 273 | + $.get('/pages/excep/speedingMap.html?',function (result) { | |
| 274 | + layer.open({ | |
| 275 | + type: 1, | |
| 276 | + title:'<i class="uk-icon-play-circle"></i>轨迹回放', | |
| 277 | + shadeClose: true, | |
| 278 | + shade: true, | |
| 279 | + scrollbar: false, | |
| 280 | + maxmin: false, //开启最大化最小化按钮 | |
| 281 | + area: ['100%', '100%'], | |
| 282 | + content:result,//内容 | |
| 283 | + }); | |
| 284 | + }); | |
| 247 | 285 | }) |
| 248 | 286 | }); |
| 249 | 287 | } |
| ... | ... | @@ -307,17 +345,6 @@ $(function(){ |
| 307 | 345 | $('tr.filter .filter-submit').click(); |
| 308 | 346 | }); |
| 309 | 347 | }); |
| 310 | - | |
| 311 | - //搜索线路 | |
| 312 | - $.get('/basic/lineCode2Name',function(result){ | |
| 313 | - var data=[]; | |
| 314 | - data.push({id: " ", text: "全部线路"}); | |
| 315 | - for(var code in result){ | |
| 316 | - data.push({id: code, text: result[code]}); | |
| 317 | - } | |
| 318 | - initPinYinSelect2('#line',data,''); | |
| 319 | - | |
| 320 | - }); | |
| 321 | 348 | |
| 322 | 349 | $("#line").on("change",initXl); |
| 323 | 350 | function initXl(){ |
| ... | ... | @@ -334,6 +361,7 @@ $('#nbbm').select2({ |
| 334 | 361 | xlbm:$('#line').val()}; |
| 335 | 362 | }, |
| 336 | 363 | processResults: function (data) { |
| 364 | + console.log(data); | |
| 337 | 365 | return { |
| 338 | 366 | results: data |
| 339 | 367 | }; |
| ... | ... | @@ -370,7 +398,6 @@ $('#nbbm').select2({ |
| 370 | 398 | |
| 371 | 399 | //改变状态 |
| 372 | 400 | function changeEnabled(id,enabled){ |
| 373 | - debugger | |
| 374 | 401 | $get('/user/changeEnabled',{id:id,enabled:enabled},function(result){ |
| 375 | 402 | jsDoQuery(null, true); |
| 376 | 403 | }) | ... | ... |
src/main/resources/static/pages/excep/speedingMap.html
0 → 100644
| 1 | +<style> | |
| 2 | + .play_back-layer .layui-layer-title{ | |
| 3 | + height: 36px; | |
| 4 | + border-bottom: none; | |
| 5 | + } | |
| 6 | +</style> | |
| 7 | + | |
| 8 | +<div id="titleMap"> | |
| 9 | +<button id="run" style="margin-left:10px" class="btn btn-sm green btn-outline filter-submit margin-bottom">运行</button> | |
| 10 | +</div> | |
| 11 | +<div id="speedingMap"> | |
| 12 | +</div> | |
| 13 | +<style type="text/css"> | |
| 14 | + | |
| 15 | +#speedingMap{ | |
| 16 | + width: 100%; | |
| 17 | + border: 2px solid #fdfdfd; | |
| 18 | + height: calc(100% - 30px); | |
| 19 | + overflow: hidden; | |
| 20 | +} | |
| 21 | +</style> | |
| 22 | +<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script> | |
| 23 | +<script type="text/javascript" src="/pages/excep/js/speeding-map.js"></script> | |
| 24 | +<script type="text/javascript"> | |
| 25 | +$(function(){ | |
| 26 | + var dataArr = window.localStorage.zbhAndDate.split(",");//获取页面传递过来的车辆自编号以及超速起始时间和超速结束时间 | |
| 27 | + var vehicle = dataArr[0]; | |
| 28 | + var startdate = dataArr[1]; | |
| 29 | + var enddate = dataArr[2]; | |
| 30 | + var lon = dataArr[3];//起点经度 | |
| 31 | + var lat = dataArr[4];//起点纬度 | |
| 32 | + var endLon = dataArr[5];//终点经度 | |
| 33 | + var endLat = dataArr[6];//终点纬度 | |
| 34 | + var Points = []; | |
| 35 | + $.ajax({ | |
| 36 | + type: "GET", | |
| 37 | + async:false, | |
| 38 | + url: '/gps/findPosition', | |
| 39 | + data: {vehicle:vehicle,startdate:startdate,enddate:enddate}, | |
| 40 | + success: function(data){ | |
| 41 | + console.log("123"+data); | |
| 42 | + $.each(data,function(i,item){ | |
| 43 | + console.log(item); | |
| 44 | + if(item.lon>1 && item.lat>1){ | |
| 45 | + var point = new BMap.Point(item.lon,item.lat); | |
| 46 | + Points.push(point); | |
| 47 | + } | |
| 48 | + }); | |
| 49 | + } | |
| 50 | + }); | |
| 51 | + setTimeout(function(){ | |
| 52 | + var map = SpeedingMap.init();//创建地图 | |
| 53 | + var myP1 = new BMap.Point(lon,lat); //起点 | |
| 54 | + var myP2 = new BMap.Point(endLon,endLat); //终点 | |
| 55 | + map.centerAndZoom(myP1,18);//地图中心点坐标 | |
| 56 | + console.log(Points); | |
| 57 | + var polyline = new BMap.Polyline(Points, {strokeColor:"blue", strokeWeight:5, strokeOpacity:0.5}); //创建折线 | |
| 58 | + var myIcon = new BMap.Icon("/pages/excep/img/bus.png", new BMap.Size(32, 70), {//小车图片 | |
| 59 | + imageOffset: new BMap.Size(5,20) //图片的偏移量。为了是图片底部中心对准坐标点。 | |
| 60 | + }); | |
| 61 | + $(document).on('click', '#run', function() { | |
| 62 | + map.clearOverlays();//清空上一次的轨迹 | |
| 63 | + map.addOverlay(polyline);//增加折线 | |
| 64 | + var paths = Points.length;//获得有几个点 | |
| 65 | + var carMk = new BMap.Marker(Points[0],{icon:myIcon}); | |
| 66 | + map.addOverlay(carMk); | |
| 67 | + i=0; | |
| 68 | + function resetMkPoint(i){ | |
| 69 | + carMk.setPosition(Points[i]); | |
| 70 | + if(i < paths){ | |
| 71 | + setTimeout(function(){ | |
| 72 | + i++; | |
| 73 | + resetMkPoint(i); | |
| 74 | + },100); | |
| 75 | + } | |
| 76 | + } | |
| 77 | + setTimeout(function(){ | |
| 78 | + resetMkPoint(0); | |
| 79 | + },100) | |
| 80 | + }); | |
| 81 | + }); | |
| 82 | +}, 100); | |
| 83 | +</script> | |
| 84 | + | |
| 85 | + | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/add_temp_sch.html
| ... | ... | @@ -30,7 +30,7 @@ |
| 30 | 30 | <div class="uk-form-row"> |
| 31 | 31 | <label class="uk-form-label">班次类型</label> |
| 32 | 32 | <div class="uk-form-controls"> |
| 33 | - <select class="form-control nt-dictionary" required name="bcType" data-code="{{bcType}}" | |
| 33 | + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" | |
| 34 | 34 | data-group=ScheduleType></select> |
| 35 | 35 | </div> |
| 36 | 36 | </div> |
| ... | ... | @@ -52,7 +52,7 @@ |
| 52 | 52 | <div class="uk-form-row"> |
| 53 | 53 | <label class="uk-form-label">起点站</label> |
| 54 | 54 | <div class="uk-form-controls"> |
| 55 | - <select name="qdzCode" required> | |
| 55 | + <select name="qdzCode" > | |
| 56 | 56 | </select> |
| 57 | 57 | </div> |
| 58 | 58 | </div> |
| ... | ... | @@ -61,7 +61,7 @@ |
| 61 | 61 | <div class="uk-form-row"> |
| 62 | 62 | <label class="uk-form-label">终点站</label> |
| 63 | 63 | <div class="uk-form-controls"> |
| 64 | - <select name="zdzCode" required> | |
| 64 | + <select name="zdzCode" > | |
| 65 | 65 | </select> |
| 66 | 66 | </div> |
| 67 | 67 | </div> |
| ... | ... | @@ -156,7 +156,7 @@ |
| 156 | 156 | <div class="uk-form-row"> |
| 157 | 157 | <label class="uk-form-label">班次类型</label> |
| 158 | 158 | <div class="uk-form-controls"> |
| 159 | - <select class="form-control nt-dictionary" name="bcType" required data-code="{{bcType}}" | |
| 159 | + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" | |
| 160 | 160 | data-group=ScheduleType></select> |
| 161 | 161 | </div> |
| 162 | 162 | </div> |
| ... | ... | @@ -178,7 +178,7 @@ |
| 178 | 178 | <div class="uk-form-row"> |
| 179 | 179 | <label class="uk-form-label">起点站</label> |
| 180 | 180 | <div class="uk-form-controls"> |
| 181 | - <select name="qdzCode" required> | |
| 181 | + <select name="qdzCode" > | |
| 182 | 182 | </select> |
| 183 | 183 | </div> |
| 184 | 184 | </div> |
| ... | ... | @@ -187,7 +187,7 @@ |
| 187 | 187 | <div class="uk-form-row"> |
| 188 | 188 | <label class="uk-form-label">终点站</label> |
| 189 | 189 | <div class="uk-form-controls"> |
| 190 | - <select name="zdzCode" required> | |
| 190 | + <select name="zdzCode" > | |
| 191 | 191 | </select> |
| 192 | 192 | </div> |
| 193 | 193 | </div> |
| ... | ... | @@ -274,7 +274,7 @@ |
| 274 | 274 | <div class="uk-form-row"> |
| 275 | 275 | <label class="uk-form-label">班次类型</label> |
| 276 | 276 | <div class="uk-form-controls"> |
| 277 | - <select class="form-control nt-dictionary" name="bcType" required data-code="{{bcType}}" | |
| 277 | + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" | |
| 278 | 278 | data-group=ScheduleType></select> |
| 279 | 279 | </div> |
| 280 | 280 | </div> |
| ... | ... | @@ -296,7 +296,7 @@ |
| 296 | 296 | <div class="uk-form-row"> |
| 297 | 297 | <label class="uk-form-label">起点站</label> |
| 298 | 298 | <div class="uk-form-controls"> |
| 299 | - <select name="qdzCode" required> | |
| 299 | + <select name="qdzCode" > | |
| 300 | 300 | </select> |
| 301 | 301 | </div> |
| 302 | 302 | </div> |
| ... | ... | @@ -305,7 +305,7 @@ |
| 305 | 305 | <div class="uk-form-row"> |
| 306 | 306 | <label class="uk-form-label">终点站</label> |
| 307 | 307 | <div class="uk-form-controls"> |
| 308 | - <select name="zdzCode" required> | |
| 308 | + <select name="zdzCode" > | |
| 309 | 309 | </select> |
| 310 | 310 | </div> |
| 311 | 311 | </div> |
| ... | ... | @@ -425,7 +425,7 @@ |
| 425 | 425 | <div class="uk-form-row"> |
| 426 | 426 | <label class="uk-form-label">起点站</label> |
| 427 | 427 | <div class="uk-form-controls"> |
| 428 | - <select name="qdzCode" required> | |
| 428 | + <select name="qdzCode" > | |
| 429 | 429 | </select> |
| 430 | 430 | </div> |
| 431 | 431 | </div> |
| ... | ... | @@ -434,7 +434,7 @@ |
| 434 | 434 | <div class="uk-form-row"> |
| 435 | 435 | <label class="uk-form-label">终点站</label> |
| 436 | 436 | <div class="uk-form-controls"> |
| 437 | - <select name="zdzCode" required> | |
| 437 | + <select name="zdzCode" > | |
| 438 | 438 | </select> |
| 439 | 439 | </div> |
| 440 | 440 | </div> |
| ... | ... | @@ -524,11 +524,14 @@ |
| 524 | 524 | <script> |
| 525 | 525 | (function () { |
| 526 | 526 | var modal = '#schedule-addsch-modal', |
| 527 | - sch, stationRoutes, parks, information,carsArray; | |
| 527 | + sch, stationRoutes, parks, information,carsArray, st_park_data; | |
| 528 | 528 | |
| 529 | 529 | $(modal).on('init', function (e, data) { |
| 530 | 530 | e.stopPropagation(); |
| 531 | 531 | sch = data.sch; |
| 532 | + | |
| 533 | + //站到场数据 | |
| 534 | + st_park_data = gb_data_basic.get_stat_park_data()[sch.xlBm]; | |
| 532 | 535 | //站点路由 |
| 533 | 536 | stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) { |
| 534 | 537 | return a.stationRouteCode - b.stationRouteCode; |
| ... | ... | @@ -537,6 +540,8 @@ |
| 537 | 540 | parks = gb_data_basic.simpleParksArray(); |
| 538 | 541 | //线路标准 |
| 539 | 542 | information = gb_data_basic.getLineInformation(sch.xlBm); |
| 543 | + //停车场排序,常用的放前面 | |
| 544 | + parks = sort_parks(parks, information, st_park_data); | |
| 540 | 545 | //车辆信息 |
| 541 | 546 | carsArray = gb_data_basic.carsArray(); |
| 542 | 547 | |
| ... | ... | @@ -579,8 +584,10 @@ |
| 579 | 584 | opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>' |
| 580 | 585 | }); |
| 581 | 586 | //park options |
| 582 | - for (var code in parks) | |
| 583 | - park_opts += '<option value="' + code + '">' + parks[code] + '</option>'; | |
| 587 | + for(var i=0,p;p=parks[i++];) | |
| 588 | + park_opts += '<option value="' + p.code + '">' + p.name + '</option>'; | |
| 589 | + /*for (var code in parks) | |
| 590 | + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';*/ | |
| 584 | 591 | |
| 585 | 592 | var qdz = $('[name=qdzCode]', f), zdz = $('[name=zdzCode]', f); |
| 586 | 593 | var time, mileage; |
| ... | ... | @@ -922,8 +929,10 @@ |
| 922 | 929 | |
| 923 | 930 | //park options |
| 924 | 931 | var park_opts; |
| 925 | - for (var code in parks) | |
| 926 | - park_opts += '<option value="' + code + '">' + parks[code] + '</option>'; | |
| 932 | + for(var i=0,p;p=parks[i++];) | |
| 933 | + park_opts += '<option value="' + p.code + '">' + p.name + '</option>'; | |
| 934 | + /*for (var code in parks) | |
| 935 | + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';*/ | |
| 927 | 936 | $('[name=qdzCode]', f).html(park_opts); |
| 928 | 937 | $('[name=zdzCode]', f).html(park_opts); |
| 929 | 938 | if(sch.bcType=='in'){ |
| ... | ... | @@ -981,6 +990,44 @@ |
| 981 | 990 | } |
| 982 | 991 | } |
| 983 | 992 | |
| 993 | + | |
| 994 | + /** | |
| 995 | + * 停车场排序 | |
| 996 | + * @param parks 停车场 code 2 name | |
| 997 | + * @param information 线路标准 | |
| 998 | + * @param st_park_data 站到场 | |
| 999 | + */ | |
| 1000 | + function sort_parks(parks, information, st_park_data) { | |
| 1001 | + var array = [], names=[]; | |
| 1002 | + for(var code in parks){ | |
| 1003 | + array.push({code: code, name: parks[code]}); | |
| 1004 | + } | |
| 1005 | + | |
| 1006 | + if(st_park_data && st_park_data.length > 0){ | |
| 1007 | + $.each(st_park_data, function () { | |
| 1008 | + names.push(this.parkName); | |
| 1009 | + }); | |
| 1010 | + } | |
| 1011 | + | |
| 1012 | + //debugger | |
| 1013 | + array.sort(function (a, b) { | |
| 1014 | + if(a.code==information.carPark) | |
| 1015 | + return -1; | |
| 1016 | + if(b.code==information.carPark) | |
| 1017 | + return 1; | |
| 1018 | + | |
| 1019 | + var ai = names.indexOf(a.name), | |
| 1020 | + bi = names.indexOf(b.name); | |
| 1021 | + | |
| 1022 | + if(ai!=-1 && bi==-1) | |
| 1023 | + return -1; | |
| 1024 | + else if(ai==-1 && bi!=-1) | |
| 1025 | + return 1; | |
| 1026 | + else | |
| 1027 | + return a.name.localeCompare(b.name); | |
| 1028 | + }); | |
| 1029 | + return array; | |
| 1030 | + } | |
| 984 | 1031 | })(); |
| 985 | 1032 | </script> |
| 986 | 1033 | </div> | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
| ... | ... | @@ -303,10 +303,10 @@ |
| 303 | 303 | var xlBm = $('[name=lineSelect]', f).val(); |
| 304 | 304 | var xlName = $('[name=lineSelect]', f).find("option:selected").text(); |
| 305 | 305 | var lpName = $('[name=lpName]', f).val(); |
| 306 | - sch = {xlBm: xlBm,xlName: xlName, lpName: lpName}; | |
| 306 | + sch = {xlBm: xlBm,xlName: xlName, lpName: lpName, zdsj: moment().format('HH:mm')}; | |
| 307 | 307 | } |
| 308 | 308 | |
| 309 | - open_modal(folder + '/add_temp_sch.html', { | |
| 309 | + open_modal(folder + '/temp_sch/main.html', { | |
| 310 | 310 | sch: sch |
| 311 | 311 | }, modal_opts); |
| 312 | 312 | }; | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/add_temp_sch_old.html renamed to src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_normal.html
| 1 | -<div class="uk-modal ct-form-modal ct_move_modal" id="schedule-addsch-modal"> | |
| 2 | - <div class="uk-modal-dialog"> | |
| 3 | - <a href="" class="uk-modal-close uk-close"></a> | |
| 4 | - <div class="uk-modal-header"> | |
| 5 | - <h2>新增临加班次</h2></div> | |
| 6 | - <form class="uk-form uk-form-horizontal"> | |
| 7 | - </form> | |
| 8 | - </div> | |
| 9 | - | |
| 10 | - <script id="schedule-addsch-form-temp" type="text/html"> | |
| 11 | - <div class="uk-grid"> | |
| 12 | - <div class="uk-width-1-2"> | |
| 13 | - <div class="uk-form-row"> | |
| 14 | - <label class="uk-form-label">班次类型</label> | |
| 15 | - <div class="uk-form-controls"> | |
| 16 | - <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" | |
| 17 | - data-group=ScheduleType></select> | |
| 18 | - </div> | |
| 19 | - </div> | |
| 20 | - </div> | |
| 21 | - <div class="uk-width-1-2"> | |
| 22 | - <div class="uk-form-row"> | |
| 23 | - <label class="uk-form-label">上下行</label> | |
| 24 | - <div class="uk-form-controls"> | |
| 25 | - <select name="xlDir"> | |
| 26 | - <option value="0">上行</option> | |
| 27 | - <option value="1">下行</option> | |
| 28 | - </select> | |
| 29 | - </div> | |
| 30 | - </div> | |
| 31 | - </div> | |
| 32 | - </div> | |
| 33 | - <div class="uk-grid"> | |
| 34 | - <div class="uk-width-1-2"> | |
| 35 | - <div class="uk-form-row"> | |
| 36 | - <label class="uk-form-label">起点站</label> | |
| 37 | - <div class="uk-form-controls"> | |
| 38 | - <select name="qdzCode" required> | |
| 39 | - </select> | |
| 40 | - </div> | |
| 41 | - </div> | |
| 42 | - </div> | |
| 43 | - <div class="uk-width-1-2"> | |
| 44 | - <div class="uk-form-row"> | |
| 45 | - <label class="uk-form-label">终点站</label> | |
| 46 | - <div class="uk-form-controls"> | |
| 47 | - <select name="zdzCode" required> | |
| 48 | - </select> | |
| 49 | - </div> | |
| 50 | - </div> | |
| 51 | - </div> | |
| 52 | - </div> | |
| 53 | - <div class="uk-grid"> | |
| 54 | - <div class="uk-width-1-2"> | |
| 55 | - <div class="uk-form-row"> | |
| 56 | - <label class="uk-form-label">开始时间</label> | |
| 57 | - <div class="uk-form-controls"> | |
| 58 | - <input type="time" value="{{zdsj}}" name="fcsj" required> | |
| 59 | - </div> | |
| 60 | - </div> | |
| 61 | - </div> | |
| 62 | - <div class="uk-width-1-2"> | |
| 63 | - <div class="uk-form-row"> | |
| 64 | - <label class="uk-form-label">结束时间</label> | |
| 65 | - <div class="uk-form-controls"> | |
| 66 | - <input type="time" name="zdsj" required> | |
| 67 | - </div> | |
| 68 | - </div> | |
| 69 | - </div> | |
| 70 | - </div> | |
| 71 | - <div class="uk-grid"> | |
| 72 | - <div class="uk-width-1-2"> | |
| 73 | - <div class="uk-form-row"> | |
| 74 | - <label class="uk-form-label">车辆</label> | |
| 75 | - <div class="uk-form-controls"> | |
| 76 | - <div class="uk-autocomplete uk-form car-autocom"> | |
| 77 | - <input type="text" value="{{clZbh}}" name="clZbh" required> | |
| 78 | - </div> | |
| 79 | - </div> | |
| 80 | - </div> | |
| 81 | - </div> | |
| 82 | - <div class="uk-width-1-2"> | |
| 83 | - <div class="uk-form-row"> | |
| 84 | - <label class="uk-form-label">里程</label> | |
| 85 | - <div class="uk-form-controls"> | |
| 86 | - <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false" | |
| 87 | - required> | |
| 88 | - </div> | |
| 89 | - </div> | |
| 90 | - </div> | |
| 91 | - </div> | |
| 92 | - <div class="uk-grid"> | |
| 93 | - <div class="uk-width-1-2"> | |
| 94 | - <div class="uk-form-row"> | |
| 95 | - <label class="uk-form-label">驾驶员 | |
| 96 | - <!--<i class="uk-icon-question-circle" data-uk-tooltip title="如果有驾驶员未提示,请至后台“基础信息 -人员信息”里纠正该员工的“工种”类别 "></i>--></label> | |
| 97 | - <div class="uk-form-controls"> | |
| 98 | - <div class="uk-autocomplete uk-form jsy-autocom"> | |
| 99 | - <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required> | |
| 100 | - </div> | |
| 101 | - </div> | |
| 102 | - </div> | |
| 103 | - </div> | |
| 104 | - <div class="uk-width-1-2"> | |
| 105 | - <div class="uk-form-row"> | |
| 106 | - <label class="uk-form-label">售票员</label> | |
| 107 | - <div class="uk-form-controls"> | |
| 108 | - <div class="uk-autocomplete uk-form spy-autocom"> | |
| 109 | - <input type="text" name="spy" value="{{sGh}}/{{sName}}"> | |
| 110 | - </div> | |
| 111 | - </div> | |
| 112 | - </div> | |
| 113 | - </div> | |
| 114 | - </div> | |
| 115 | - <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;"> | |
| 116 | - <button type="button" class="uk-button uk-modal-close">取消</button> | |
| 117 | - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> 保存</button> | |
| 118 | - </div> | |
| 119 | - </script> | |
| 120 | - | |
| 121 | - <script> | |
| 122 | - (function () { | |
| 123 | - var modal = '#schedule-addsch-modal', | |
| 124 | - sch, stationRoutes, parks, information; | |
| 125 | - | |
| 126 | - var normalInfo = []; | |
| 127 | - $(modal).on('init', function (e, data) { | |
| 128 | - e.stopPropagation(); | |
| 129 | - sch = data.sch; | |
| 130 | - //normal 班次里程和耗时 | |
| 131 | - var list = gb_common.get_vals(gb_schedule_table.findScheduleByLine(sch.xlBm)); | |
| 132 | - var upPlan = getNormalSch(list, 0) | |
| 133 | - , downPlan = getNormalSch(list, 1); | |
| 134 | - normalInfo[0] = {time: upPlan.bcsj, mileage: upPlan.jhlc}; | |
| 135 | - normalInfo[1] = {time: downPlan.bcsj, mileage: downPlan.jhlc}; | |
| 136 | - | |
| 137 | - | |
| 138 | - var formHtml = template('schedule-addsch-form-temp', sch); | |
| 139 | - $('form', modal).html(formHtml); | |
| 140 | - //字典转换 | |
| 141 | - dictionaryUtils.transformDom($('.nt-dictionary', modal)); | |
| 142 | - | |
| 143 | - //----------- Autocomplete -------------- | |
| 144 | - $.get('/basic/cars', function (rs) { | |
| 145 | - //车辆 | |
| 146 | - gb_common.carAutocomplete($('.car-autocom', modal), rs); | |
| 147 | - }); | |
| 148 | - //驾驶员 | |
| 149 | - gb_common.personAutocomplete($('.jsy-autocom', modal)); | |
| 150 | - | |
| 151 | - //售票员 | |
| 152 | - gb_common.personAutocomplete($('.spy-autocom', modal)); | |
| 153 | - | |
| 154 | - //站点路由 | |
| 155 | - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) { | |
| 156 | - return a.stationRouteCode - b.stationRouteCode; | |
| 157 | - }), 'directions'); | |
| 158 | - //停车场 | |
| 159 | - $.get('/basic/parks', function (rs) { | |
| 160 | - parks = rs; | |
| 161 | - }); | |
| 162 | - //线路标准 | |
| 163 | - information = gb_data_basic.getLineInformation(sch.xlBm); | |
| 164 | - | |
| 165 | - //submit | |
| 166 | - var f = $('form', modal).formValidation(gb_form_validation_opts); | |
| 167 | - f.on('success.form.fv', function (e) { | |
| 168 | - disabled_submit_btn(this); | |
| 169 | - e.preventDefault(); | |
| 170 | - var data = $(this).serializeJSON(); | |
| 171 | - data.xlBm = sch.xlBm; | |
| 172 | - data.xlName = sch.xlName; | |
| 173 | - data.lpName = sch.lpName; | |
| 174 | - //拆分驾驶员工号和姓名 | |
| 175 | - data.jGh = data.jsy.split('/')[0]; | |
| 176 | - data.jName = data.jsy.split('/')[1]; | |
| 177 | - delete data.jsy; | |
| 178 | - //拆分售票员工号和姓名 | |
| 179 | - if (data.sGh != null) { | |
| 180 | - data.sGh = data.spy.split('/')[0]; | |
| 181 | - data.sName = data.spy.split('/')[1]; | |
| 182 | - delete data.spy; | |
| 183 | - } | |
| 184 | - | |
| 185 | - //公司信息 | |
| 186 | - var line = gb_data_basic.findLineByCodes([data.xlBm]); | |
| 187 | - if(line && line.length > 0){ | |
| 188 | - line = line[0]; | |
| 189 | - data.gsBm = line.company; | |
| 190 | - data.fgsBm = line.brancheCompany; | |
| 191 | - } | |
| 192 | - | |
| 193 | - gb_common.$post('/realSchedule', data, function (rs) { | |
| 194 | - //插入 | |
| 195 | - gb_schedule_table.insertSchedule(rs.t, rs.ts); | |
| 196 | - $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t}); | |
| 197 | - UIkit.modal(modal).hide(); | |
| 198 | - notify_succ('新增临加班次成功'); | |
| 199 | - }); | |
| 200 | - }); | |
| 201 | - | |
| 202 | - //班次类型 和 上下行切换 | |
| 203 | - $('[name=bcType],[name=xlDir]', f).on('change', function () { | |
| 204 | - var bcType_e = $('[name=bcType]', f) | |
| 205 | - , xlDir_e = $('[name=xlDir]', f); | |
| 206 | - | |
| 207 | - var routes = stationRoutes[xlDir_e.val()] | |
| 208 | - , lastCode = routes[routes.length - 1].stationCode | |
| 209 | - , opts = '', park_opts = ''; | |
| 210 | - //station options | |
| 211 | - $.each(routes, function () { | |
| 212 | - opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>' | |
| 213 | - }); | |
| 214 | - //park options | |
| 215 | - for (var code in parks) | |
| 216 | - park_opts += '<option value="' + code + '">' + parks[code] + '</option>'; | |
| 217 | - | |
| 218 | - var qdz = $('[name=qdzCode]', f), zdz = $('[name=zdzCode]', f); | |
| 219 | - var time, mileage; | |
| 220 | - switch (bcType_e.val()) { | |
| 221 | - case 'out': | |
| 222 | - qdz.html(park_opts).val(information.carPark); | |
| 223 | - zdz.html(opts); | |
| 224 | - //出场结束时间 | |
| 225 | - time = xlDir_e.val() == 0 ? information.upOutTimer : information.downOutTimer; | |
| 226 | - mileage = xlDir_e.val() == 0 ? information.upOutMileage : information.downOutMileage; | |
| 227 | - break; | |
| 228 | - case 'in': | |
| 229 | - qdz.html(opts); | |
| 230 | - zdz.html(park_opts).val(information.carPark); | |
| 231 | - //进场结束时间 | |
| 232 | - time = xlDir_e.val() == 0 ? information.upInTimer : information.downInTimer; | |
| 233 | - mileage = xlDir_e.val() == 0 ? information.upInMileage : information.downInMileage; | |
| 234 | - break; | |
| 235 | - default: | |
| 236 | - qdz.html(opts); | |
| 237 | - zdz.html(opts).val(lastCode); | |
| 238 | - time = xlDir_e.val() == 0?normalInfo[0].time:normalInfo[1].time; | |
| 239 | - mileage = xlDir_e.val() == 0?normalInfo[0].mileage:normalInfo[1].mileage; | |
| 240 | - } | |
| 241 | - | |
| 242 | - setEndTime(time); | |
| 243 | - $('[name=jhlc]', f).val(mileage); | |
| 244 | - }).trigger('change'); | |
| 245 | - | |
| 246 | - | |
| 247 | - function setEndTime(diff) { | |
| 248 | - var et = moment($('[name=fcsj]', f).val(), 'HH:mm').add(diff, 'minutes').format('HH:mm'); | |
| 249 | - $('[name=zdsj]', f).val(et); | |
| 250 | - } | |
| 251 | - }); | |
| 252 | - | |
| 253 | - function getNormalSch(list, updown) { | |
| 254 | - var sch; | |
| 255 | - $.each(list, function () { | |
| 256 | - if (this.bcType == 'normal' && this.xlDir == updown) { | |
| 257 | - sch = this; | |
| 258 | - return false; | |
| 259 | - } | |
| 260 | - }); | |
| 261 | - | |
| 262 | - return sch; | |
| 263 | - } | |
| 264 | - })(); | |
| 265 | - </script> | |
| 266 | -</div> | |
| 1 | +<!-- 临加班次form --> | |
| 2 | +<script id="add_normal_sch-form-temp" type="text/html"> | |
| 3 | + <form class="uk-form uk-form-horizontal add-sch-form"> | |
| 4 | + <div class="uk-grid"> | |
| 5 | + <div class="uk-width-1-2"> | |
| 6 | + <div class="uk-form-row"> | |
| 7 | + <label class="uk-form-label">班次类型</label> | |
| 8 | + <div class="uk-form-controls"> | |
| 9 | + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" | |
| 10 | + data-group=ScheduleType></select> | |
| 11 | + </div> | |
| 12 | + </div> | |
| 13 | + </div> | |
| 14 | + <div class="uk-width-1-2"> | |
| 15 | + <div class="uk-form-row"> | |
| 16 | + <label class="uk-form-label">上下行</label> | |
| 17 | + <div class="uk-form-controls"> | |
| 18 | + <select name="xlDir"> | |
| 19 | + <option value="0">上行</option> | |
| 20 | + <option value="1">下行</option> | |
| 21 | + </select> | |
| 22 | + </div> | |
| 23 | + </div> | |
| 24 | + </div> | |
| 25 | + </div> | |
| 26 | + <div class="uk-grid"> | |
| 27 | + <div class="uk-width-1-2"> | |
| 28 | + <div class="uk-form-row"> | |
| 29 | + <label class="uk-form-label">起点站</label> | |
| 30 | + <div class="uk-form-controls"> | |
| 31 | + <select name="qdzCode"> | |
| 32 | + </select> | |
| 33 | + </div> | |
| 34 | + </div> | |
| 35 | + </div> | |
| 36 | + <div class="uk-width-1-2"> | |
| 37 | + <div class="uk-form-row"> | |
| 38 | + <label class="uk-form-label">终点站</label> | |
| 39 | + <div class="uk-form-controls"> | |
| 40 | + <select name="zdzCode"> | |
| 41 | + </select> | |
| 42 | + </div> | |
| 43 | + </div> | |
| 44 | + </div> | |
| 45 | + </div> | |
| 46 | + <div class="uk-grid"> | |
| 47 | + <div class="uk-width-1-2"> | |
| 48 | + <div class="uk-form-row"> | |
| 49 | + <label class="uk-form-label">开始时间</label> | |
| 50 | + <div class="uk-form-controls"> | |
| 51 | + <input type="time" value="{{zdsjActual==null?zdsj:zdsjActual}}" name="fcsj" required> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div class="uk-width-1-2"> | |
| 56 | + <div class="uk-form-row"> | |
| 57 | + <label class="uk-form-label">结束时间</label> | |
| 58 | + <div class="uk-form-controls"> | |
| 59 | + <input type="time" name="zdsj" required> | |
| 60 | + </div> | |
| 61 | + </div> | |
| 62 | + </div> | |
| 63 | + </div> | |
| 64 | + <div class="uk-grid"> | |
| 65 | + <div class="uk-width-1-2"> | |
| 66 | + <div class="uk-form-row"> | |
| 67 | + <label class="uk-form-label">车辆</label> | |
| 68 | + <div class="uk-form-controls"> | |
| 69 | + <div class="uk-autocomplete uk-form car-autocom"> | |
| 70 | + <input type="text" value="{{clZbh}}" name="clZbh" required> | |
| 71 | + </div> | |
| 72 | + </div> | |
| 73 | + </div> | |
| 74 | + </div> | |
| 75 | + <div class="uk-width-1-2"> | |
| 76 | + <div class="uk-form-row"> | |
| 77 | + <label class="uk-form-label">里程</label> | |
| 78 | + <div class="uk-form-controls"> | |
| 79 | + <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false" | |
| 80 | + required> | |
| 81 | + </div> | |
| 82 | + </div> | |
| 83 | + </div> | |
| 84 | + </div> | |
| 85 | + <div class="uk-grid"> | |
| 86 | + <div class="uk-width-1-2"> | |
| 87 | + <div class="uk-form-row"> | |
| 88 | + <label class="uk-form-label">驾驶员</label> | |
| 89 | + <div class="uk-form-controls"> | |
| 90 | + <div class="uk-autocomplete uk-form jsy-autocom"> | |
| 91 | + <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required> | |
| 92 | + </div> | |
| 93 | + </div> | |
| 94 | + </div> | |
| 95 | + </div> | |
| 96 | + <div class="uk-width-1-2"> | |
| 97 | + <div class="uk-form-row"> | |
| 98 | + <label class="uk-form-label">售票员</label> | |
| 99 | + <div class="uk-form-controls"> | |
| 100 | + <div class="uk-autocomplete uk-form spy-autocom"> | |
| 101 | + <input type="text" name="spy" value="{{sGh}}/{{sName}}"> | |
| 102 | + </div> | |
| 103 | + </div> | |
| 104 | + </div> | |
| 105 | + </div> | |
| 106 | + </div> | |
| 107 | + <div class="uk-grid"> | |
| 108 | + <div class="uk-width-1-1"> | |
| 109 | + <div class="uk-form-row"> | |
| 110 | + <label class="uk-form-label">备注</label> | |
| 111 | + <div class="uk-form-controls"> | |
| 112 | + <div class="uk-autocomplete uk-form remarks-autocom"> | |
| 113 | + <input type="text" name="remarks"> | |
| 114 | + </div> | |
| 115 | + </div> | |
| 116 | + </div> | |
| 117 | + </div> | |
| 118 | + </div> | |
| 119 | + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;"> | |
| 120 | + <span class="ct_line_lp_badge"></span> | |
| 121 | + <button type="button" class="uk-button uk-modal-close">取消</button> | |
| 122 | + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> 保存 | |
| 123 | + </button> | |
| 124 | + </div> | |
| 125 | + </form> | |
| 126 | +</script> | |
| 127 | +<script> | |
| 128 | + (function () { | |
| 129 | + var wrap = '#schedule-addsch-modal .normalCont', sch, nf, submitFun; | |
| 130 | + | |
| 131 | + $(wrap).on('init', function (e, data) { | |
| 132 | + e.stopPropagation(); | |
| 133 | + sch = data.sch; | |
| 134 | + submitFun = data.submitFun; | |
| 135 | + | |
| 136 | + nf = addForm(); | |
| 137 | + //提交 | |
| 138 | + nf.on('success.form.fv', function (e) { | |
| 139 | + e.preventDefault(); | |
| 140 | + | |
| 141 | + disabled_submit_btn(nf); | |
| 142 | + var data = nf.serializeJSON(); | |
| 143 | + submitFun(data, function (rs) { | |
| 144 | + //前端数据更新 | |
| 145 | + gb_schedule_table.insertSchedule(rs.t, rs.ts); | |
| 146 | + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t}); | |
| 147 | + try { | |
| 148 | + if(rs.t.bcType=='in' || rs.t.bcType=='out') | |
| 149 | + gb_data_basic.reload_stat_park_data(); | |
| 150 | + }catch (e){ | |
| 151 | + console.log(e);} | |
| 152 | + UIkit.modal('#schedule-addsch-modal').hide(); | |
| 153 | + }); | |
| 154 | + }); | |
| 155 | + $('.ct_line_lp_badge', nf).html(sch.xlName + ', '+sch.lpName); | |
| 156 | + }); | |
| 157 | + | |
| 158 | + function addForm() { | |
| 159 | + var htmlStr = template('add_normal_sch-form-temp', sch); | |
| 160 | + var f = $(htmlStr); | |
| 161 | + $(wrap).append(f); | |
| 162 | + //字典转换 | |
| 163 | + dictionaryUtils.transformDom($('.nt-dictionary', f)); | |
| 164 | + //validation | |
| 165 | + f.formValidation({framework: 'uikit', locale: 'zh_CN'}); | |
| 166 | + //autocomp | |
| 167 | + f.trigger('init-autoCom'); | |
| 168 | + | |
| 169 | + $f('bcType', f).trigger('change'); | |
| 170 | + return f; | |
| 171 | + } | |
| 172 | + | |
| 173 | + function $f(name, f) { | |
| 174 | + return $('[name=' + name + ']', f); | |
| 175 | + } | |
| 176 | + })(); | |
| 177 | +</script> | |
| 267 | 178 | \ No newline at end of file | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_park_to_park.html
0 → 100644
| 1 | +<!-- 临加场到场班次form --> | |
| 2 | +<script id="add_park_to_park_sch-form-temp" type="text/html"> | |
| 3 | + <form class="uk-form uk-form-horizontal"> | |
| 4 | + <div class="uk-grid"> | |
| 5 | + <div class="uk-width-1-2"> | |
| 6 | + <div class="uk-form-row"> | |
| 7 | + <label class="uk-form-label">班次类型</label> | |
| 8 | + <div class="uk-form-controls"> | |
| 9 | + <select class="form-control" name="bcType"> | |
| 10 | + <option value="in">进场</option> | |
| 11 | + </select> | |
| 12 | + </div> | |
| 13 | + </div> | |
| 14 | + </div> | |
| 15 | + <div class="uk-width-1-2"> | |
| 16 | + <div class="uk-form-row"> | |
| 17 | + <label class="uk-form-label">上下行</label> | |
| 18 | + <div class="uk-form-controls"> | |
| 19 | + <select name="xlDir"> | |
| 20 | + <option value="0">上行</option> | |
| 21 | + <option value="1">下行</option> | |
| 22 | + </select> | |
| 23 | + </div> | |
| 24 | + </div> | |
| 25 | + </div> | |
| 26 | + </div> | |
| 27 | + <div class="uk-grid"> | |
| 28 | + <div class="uk-width-1-2"> | |
| 29 | + <div class="uk-form-row"> | |
| 30 | + <label class="uk-form-label">起点站</label> | |
| 31 | + <div class="uk-form-controls"> | |
| 32 | + <select name="qdzCode"> | |
| 33 | + </select> | |
| 34 | + </div> | |
| 35 | + </div> | |
| 36 | + </div> | |
| 37 | + <div class="uk-width-1-2"> | |
| 38 | + <div class="uk-form-row"> | |
| 39 | + <label class="uk-form-label">终点站</label> | |
| 40 | + <div class="uk-form-controls"> | |
| 41 | + <select name="zdzCode"> | |
| 42 | + </select> | |
| 43 | + </div> | |
| 44 | + </div> | |
| 45 | + </div> | |
| 46 | + </div> | |
| 47 | + <div class="uk-grid"> | |
| 48 | + <div class="uk-width-1-2"> | |
| 49 | + <div class="uk-form-row"> | |
| 50 | + <label class="uk-form-label">开始时间</label> | |
| 51 | + <div class="uk-form-controls"> | |
| 52 | + <input type="time" value="{{zdsjActual==null?zdsj:zdsjActual}}" name="fcsj" required> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + </div> | |
| 56 | + <div class="uk-width-1-2"> | |
| 57 | + <div class="uk-form-row"> | |
| 58 | + <label class="uk-form-label">结束时间</label> | |
| 59 | + <div class="uk-form-controls"> | |
| 60 | + <input type="time" name="zdsj" required> | |
| 61 | + </div> | |
| 62 | + </div> | |
| 63 | + </div> | |
| 64 | + </div> | |
| 65 | + <div class="uk-grid"> | |
| 66 | + <div class="uk-width-1-2"> | |
| 67 | + <div class="uk-form-row"> | |
| 68 | + <label class="uk-form-label">车辆</label> | |
| 69 | + <div class="uk-form-controls"> | |
| 70 | + <div class="uk-autocomplete uk-form car-autocom"> | |
| 71 | + <input type="text" value="{{clZbh}}" name="clZbh" required> | |
| 72 | + </div> | |
| 73 | + </div> | |
| 74 | + </div> | |
| 75 | + </div> | |
| 76 | + <div class="uk-width-1-2"> | |
| 77 | + <div class="uk-form-row"> | |
| 78 | + <label class="uk-form-label">里程</label> | |
| 79 | + <div class="uk-form-controls"> | |
| 80 | + <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false" | |
| 81 | + required> | |
| 82 | + </div> | |
| 83 | + </div> | |
| 84 | + </div> | |
| 85 | + </div> | |
| 86 | + <div class="uk-grid"> | |
| 87 | + <div class="uk-width-1-2"> | |
| 88 | + <div class="uk-form-row"> | |
| 89 | + <label class="uk-form-label">驾驶员</label> | |
| 90 | + <div class="uk-form-controls"> | |
| 91 | + <div class="uk-autocomplete uk-form jsy-autocom"> | |
| 92 | + <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required> | |
| 93 | + </div> | |
| 94 | + </div> | |
| 95 | + </div> | |
| 96 | + </div> | |
| 97 | + <div class="uk-width-1-2"> | |
| 98 | + <div class="uk-form-row"> | |
| 99 | + <label class="uk-form-label">售票员</label> | |
| 100 | + <div class="uk-form-controls"> | |
| 101 | + <div class="uk-autocomplete uk-form spy-autocom"> | |
| 102 | + <input type="text" name="spy" value="{{sGh}}/{{sName}}"> | |
| 103 | + </div> | |
| 104 | + </div> | |
| 105 | + </div> | |
| 106 | + </div> | |
| 107 | + </div> | |
| 108 | + <div class="uk-grid"> | |
| 109 | + <div class="uk-width-1-1"> | |
| 110 | + <div class="uk-form-row"> | |
| 111 | + <label class="uk-form-label">备注</label> | |
| 112 | + <div class="uk-form-controls"> | |
| 113 | + <div class="uk-autocomplete uk-form remarks-autocom"> | |
| 114 | + <input type="text" name="remarks"> | |
| 115 | + </div> | |
| 116 | + </div> | |
| 117 | + </div> | |
| 118 | + </div> | |
| 119 | + </div> | |
| 120 | + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;"> | |
| 121 | + <span class="ct_line_lp_badge"></span> | |
| 122 | + <button type="button" class="uk-button uk-modal-close">取消</button> | |
| 123 | + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> 保存 | |
| 124 | + </button> | |
| 125 | + </div> | |
| 126 | + </form> | |
| 127 | +</script> | |
| 128 | + | |
| 129 | +<script> | |
| 130 | + (function () { | |
| 131 | + var wrap = '#schedule-addsch-modal .parkToParkCont', sch, nf, submitFun,parks,carsArray; | |
| 132 | + | |
| 133 | + $(wrap).on('init', function (e, data) { | |
| 134 | + e.stopPropagation(); | |
| 135 | + sch = data.sch; | |
| 136 | + submitFun = data.submitFun; | |
| 137 | + parks = data.parks; | |
| 138 | + carsArray = data.carsArray; | |
| 139 | + | |
| 140 | + nf = addForm(); | |
| 141 | + //提交 | |
| 142 | + nf.on('success.form.fv', function (e) { | |
| 143 | + e.preventDefault(); | |
| 144 | + | |
| 145 | + disabled_submit_btn(nf); | |
| 146 | + var data = nf.serializeJSON(); | |
| 147 | + submitFun(data, function (rs) { | |
| 148 | + //前端数据更新 | |
| 149 | + gb_schedule_table.insertSchedule(rs.t, rs.ts); | |
| 150 | + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t}); | |
| 151 | + try { | |
| 152 | + if(rs.t.bcType=='in' || rs.t.bcType=='out') | |
| 153 | + gb_data_basic.reload_stat_park_data(); | |
| 154 | + }catch (e){ | |
| 155 | + console.log(e);} | |
| 156 | + UIkit.modal('#schedule-addsch-modal').hide(); | |
| 157 | + }); | |
| 158 | + }); | |
| 159 | + $('.ct_line_lp_badge', nf).html(sch.xlName + ', '+sch.lpName); | |
| 160 | + $f('zdzCode',nf).trigger('change'); | |
| 161 | + }); | |
| 162 | + | |
| 163 | + function addForm() { | |
| 164 | + var htmlStr = template('add_park_to_park_sch-form-temp', sch); | |
| 165 | + var f = $(htmlStr); | |
| 166 | + $(wrap).append(f); | |
| 167 | + //字典转换 | |
| 168 | + dictionaryUtils.transformDom($('.nt-dictionary', f)); | |
| 169 | + //validation | |
| 170 | + f.formValidation({framework: 'uikit', locale: 'zh_CN'}); | |
| 171 | + //autocomp | |
| 172 | + initAutoComp(f); | |
| 173 | + | |
| 174 | + //起终点都是停车场 | |
| 175 | + var park_opts; | |
| 176 | + for(var i=0,p;p=parks[i++];) | |
| 177 | + park_opts += '<option value="' + p.code + '">' + p.name + '</option>'; | |
| 178 | + $f('qdzCode', f).html(park_opts); | |
| 179 | + $f('zdzCode', f).html(park_opts); | |
| 180 | + | |
| 181 | + if(sch.bcType=='in'){ | |
| 182 | + $f('qdzCode', f).val(sch.zdzCode); | |
| 183 | + //选中的也是场到场班次 | |
| 184 | + if(gb_data_basic.getCarparkByCode(sch.qdzCode) != null){ | |
| 185 | + //默认做返程 | |
| 186 | + $f('zdzCode', f).val(sch.qdzCode); | |
| 187 | + $f('remarks', f).val(sch.remarks); | |
| 188 | + $f('jhlc', f).val(sch.jhlc); | |
| 189 | + //时间 | |
| 190 | + var zdsj = moment(sch.zdsj, 'HH:mm').add('minutes', sch.bcsj).format('HH:mm'); | |
| 191 | + $f('zdsj', f).val(zdsj); | |
| 192 | + } | |
| 193 | + } | |
| 194 | + return f; | |
| 195 | + } | |
| 196 | + | |
| 197 | + function $f(name, f) { | |
| 198 | + return $('[name=' + name + ']', f); | |
| 199 | + } | |
| 200 | + | |
| 201 | + function initAutoComp(f) { | |
| 202 | + //车辆 | |
| 203 | + if(carsArray) | |
| 204 | + gb_common.carAutocomplete($('.car-autocom', f), carsArray); | |
| 205 | + //驾驶员 | |
| 206 | + gb_common.personAutocomplete($('.jsy-autocom', f)); | |
| 207 | + //售票员 | |
| 208 | + gb_common.personAutocomplete($('.spy-autocom', f)); | |
| 209 | + //备注补全 | |
| 210 | + gb_common.remarksAutocomplete($('.remarks-autocom', f)); | |
| 211 | + } | |
| 212 | + | |
| 213 | + })(); | |
| 214 | +</script> | |
| 0 | 215 | \ No newline at end of file | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/add_two_way.html
0 → 100644
| 1 | +<!-- 线路上往返临加班次 --> | |
| 2 | +<script id="add_toAndFro_sch-form-temp" type="text/html"> | |
| 3 | + <form class="uk-form uk-form-horizontal add-sch-form one_form"> | |
| 4 | + <div class="uk-grid"> | |
| 5 | + <div class="uk-width-1-2"> | |
| 6 | + <div class="uk-form-row"> | |
| 7 | + <label class="uk-form-label">班次类型</label> | |
| 8 | + <div class="uk-form-controls"> | |
| 9 | + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" | |
| 10 | + data-group=ScheduleType></select> | |
| 11 | + </div> | |
| 12 | + </div> | |
| 13 | + </div> | |
| 14 | + <div class="uk-width-1-2"> | |
| 15 | + <div class="uk-form-row"> | |
| 16 | + <label class="uk-form-label">上下行</label> | |
| 17 | + <div class="uk-form-controls"> | |
| 18 | + <select name="xlDir"> | |
| 19 | + <option value="0">上行</option> | |
| 20 | + <option value="1">下行</option> | |
| 21 | + </select> | |
| 22 | + </div> | |
| 23 | + </div> | |
| 24 | + </div> | |
| 25 | + </div> | |
| 26 | + <div class="uk-grid"> | |
| 27 | + <div class="uk-width-1-2"> | |
| 28 | + <div class="uk-form-row"> | |
| 29 | + <label class="uk-form-label">起点站</label> | |
| 30 | + <div class="uk-form-controls"> | |
| 31 | + <select name="qdzCode" > | |
| 32 | + </select> | |
| 33 | + </div> | |
| 34 | + </div> | |
| 35 | + </div> | |
| 36 | + <div class="uk-width-1-2"> | |
| 37 | + <div class="uk-form-row"> | |
| 38 | + <label class="uk-form-label">终点站</label> | |
| 39 | + <div class="uk-form-controls"> | |
| 40 | + <select name="zdzCode" > | |
| 41 | + </select> | |
| 42 | + </div> | |
| 43 | + </div> | |
| 44 | + </div> | |
| 45 | + </div> | |
| 46 | + <div class="uk-grid"> | |
| 47 | + <div class="uk-width-1-2"> | |
| 48 | + <div class="uk-form-row"> | |
| 49 | + <label class="uk-form-label">开始时间</label> | |
| 50 | + <div class="uk-form-controls"> | |
| 51 | + <input type="time" value="{{zdsj}}" name="fcsj" required> | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + <div class="uk-width-1-2"> | |
| 56 | + <div class="uk-form-row"> | |
| 57 | + <label class="uk-form-label">结束时间</label> | |
| 58 | + <div class="uk-form-controls"> | |
| 59 | + <input type="time" name="zdsj" required> | |
| 60 | + </div> | |
| 61 | + </div> | |
| 62 | + </div> | |
| 63 | + </div> | |
| 64 | + <div class="uk-grid"> | |
| 65 | + <div class="uk-width-1-2"> | |
| 66 | + <div class="uk-form-row"> | |
| 67 | + <label class="uk-form-label">车辆</label> | |
| 68 | + <div class="uk-form-controls"> | |
| 69 | + <div class="uk-autocomplete uk-form car-autocom"> | |
| 70 | + <input type="text" value="{{clZbh}}" name="clZbh" required> | |
| 71 | + </div> | |
| 72 | + </div> | |
| 73 | + </div> | |
| 74 | + </div> | |
| 75 | + <div class="uk-width-1-2"> | |
| 76 | + <div class="uk-form-row"> | |
| 77 | + <label class="uk-form-label">里程</label> | |
| 78 | + <div class="uk-form-controls"> | |
| 79 | + <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false" | |
| 80 | + required> | |
| 81 | + </div> | |
| 82 | + </div> | |
| 83 | + </div> | |
| 84 | + </div> | |
| 85 | + <div class="uk-grid"> | |
| 86 | + <div class="uk-width-1-2"> | |
| 87 | + <div class="uk-form-row"> | |
| 88 | + <label class="uk-form-label">驾驶员</label> | |
| 89 | + <div class="uk-form-controls"> | |
| 90 | + <div class="uk-autocomplete uk-form jsy-autocom"> | |
| 91 | + <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required> | |
| 92 | + </div> | |
| 93 | + </div> | |
| 94 | + </div> | |
| 95 | + </div> | |
| 96 | + <div class="uk-width-1-2"> | |
| 97 | + <div class="uk-form-row"> | |
| 98 | + <label class="uk-form-label">售票员</label> | |
| 99 | + <div class="uk-form-controls"> | |
| 100 | + <div class="uk-autocomplete uk-form spy-autocom"> | |
| 101 | + <input type="text" name="spy" value="{{sGh}}/{{sName}}"> | |
| 102 | + </div> | |
| 103 | + </div> | |
| 104 | + </div> | |
| 105 | + </div> | |
| 106 | + </div> | |
| 107 | + <div class="uk-grid"> | |
| 108 | + <div class="uk-width-1-1"> | |
| 109 | + <div class="uk-form-row"> | |
| 110 | + <label class="uk-form-label">备注</label> | |
| 111 | + <div class="uk-form-controls"> | |
| 112 | + <div class="uk-autocomplete uk-form remarks-autocom"> | |
| 113 | + <input type="text" name="remarks"> | |
| 114 | + </div> | |
| 115 | + </div> | |
| 116 | + </div> | |
| 117 | + </div> | |
| 118 | + </div> | |
| 119 | + </form> | |
| 120 | + <hr style="margin-top: 35px;"> | |
| 121 | + <form class="uk-form uk-form-horizontal add-sch-form two_form"> | |
| 122 | + <div class="uk-grid"> | |
| 123 | + <div class="uk-width-1-2"> | |
| 124 | + <div class="uk-form-row"> | |
| 125 | + <label class="uk-form-label">班次类型</label> | |
| 126 | + <div class="uk-form-controls"> | |
| 127 | + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" | |
| 128 | + data-group=ScheduleType></select> | |
| 129 | + </div> | |
| 130 | + </div> | |
| 131 | + </div> | |
| 132 | + <div class="uk-width-1-2"> | |
| 133 | + <div class="uk-form-row"> | |
| 134 | + <label class="uk-form-label">上下行</label> | |
| 135 | + <div class="uk-form-controls"> | |
| 136 | + <select name="xlDir"> | |
| 137 | + <option value="0">上行</option> | |
| 138 | + <option value="1">下行</option> | |
| 139 | + </select> | |
| 140 | + </div> | |
| 141 | + </div> | |
| 142 | + </div> | |
| 143 | + </div> | |
| 144 | + <div class="uk-grid"> | |
| 145 | + <div class="uk-width-1-2"> | |
| 146 | + <div class="uk-form-row"> | |
| 147 | + <label class="uk-form-label">起点站</label> | |
| 148 | + <div class="uk-form-controls"> | |
| 149 | + <select name="qdzCode" > | |
| 150 | + </select> | |
| 151 | + </div> | |
| 152 | + </div> | |
| 153 | + </div> | |
| 154 | + <div class="uk-width-1-2"> | |
| 155 | + <div class="uk-form-row"> | |
| 156 | + <label class="uk-form-label">终点站</label> | |
| 157 | + <div class="uk-form-controls"> | |
| 158 | + <select name="zdzCode" > | |
| 159 | + </select> | |
| 160 | + </div> | |
| 161 | + </div> | |
| 162 | + </div> | |
| 163 | + </div> | |
| 164 | + <div class="uk-grid"> | |
| 165 | + <div class="uk-width-1-2"> | |
| 166 | + <div class="uk-form-row"> | |
| 167 | + <label class="uk-form-label">开始时间</label> | |
| 168 | + <div class="uk-form-controls"> | |
| 169 | + <input type="time" value="{{zdsj}}" name="fcsj" required> | |
| 170 | + </div> | |
| 171 | + </div> | |
| 172 | + </div> | |
| 173 | + <div class="uk-width-1-2"> | |
| 174 | + <div class="uk-form-row"> | |
| 175 | + <label class="uk-form-label">结束时间</label> | |
| 176 | + <div class="uk-form-controls"> | |
| 177 | + <input type="time" name="zdsj" required> | |
| 178 | + </div> | |
| 179 | + </div> | |
| 180 | + </div> | |
| 181 | + </div> | |
| 182 | + <div class="uk-grid"> | |
| 183 | + <div class="uk-width-1-2"> | |
| 184 | + <div class="uk-form-row"> | |
| 185 | + <label class="uk-form-label">车辆</label> | |
| 186 | + <div class="uk-form-controls"> | |
| 187 | + <div class="uk-autocomplete uk-form car-autocom"> | |
| 188 | + <input type="text" value="{{clZbh}}" name="clZbh" required> | |
| 189 | + </div> | |
| 190 | + </div> | |
| 191 | + </div> | |
| 192 | + </div> | |
| 193 | + <div class="uk-width-1-2"> | |
| 194 | + <div class="uk-form-row"> | |
| 195 | + <label class="uk-form-label">里程</label> | |
| 196 | + <div class="uk-form-controls"> | |
| 197 | + <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false" | |
| 198 | + required> | |
| 199 | + </div> | |
| 200 | + </div> | |
| 201 | + </div> | |
| 202 | + </div> | |
| 203 | + <div class="uk-grid"> | |
| 204 | + <div class="uk-width-1-2"> | |
| 205 | + <div class="uk-form-row"> | |
| 206 | + <label class="uk-form-label">驾驶员</label> | |
| 207 | + <div class="uk-form-controls"> | |
| 208 | + <div class="uk-autocomplete uk-form jsy-autocom"> | |
| 209 | + <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required> | |
| 210 | + </div> | |
| 211 | + </div> | |
| 212 | + </div> | |
| 213 | + </div> | |
| 214 | + <div class="uk-width-1-2"> | |
| 215 | + <div class="uk-form-row"> | |
| 216 | + <label class="uk-form-label">售票员</label> | |
| 217 | + <div class="uk-form-controls"> | |
| 218 | + <div class="uk-autocomplete uk-form spy-autocom"> | |
| 219 | + <input type="text" name="spy" value="{{sGh}}/{{sName}}"> | |
| 220 | + </div> | |
| 221 | + </div> | |
| 222 | + </div> | |
| 223 | + </div> | |
| 224 | + </div> | |
| 225 | + <div class="uk-grid"> | |
| 226 | + <div class="uk-width-1-1"> | |
| 227 | + <div class="uk-form-row"> | |
| 228 | + <label class="uk-form-label">备注</label> | |
| 229 | + <div class="uk-form-controls"> | |
| 230 | + <div class="uk-autocomplete uk-form remarks-autocom"> | |
| 231 | + <input type="text" name="remarks"> | |
| 232 | + </div> | |
| 233 | + </div> | |
| 234 | + </div> | |
| 235 | + </div> | |
| 236 | + </div> | |
| 237 | + </form> | |
| 238 | + | |
| 239 | + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;"> | |
| 240 | + <span class="ct_line_lp_badge" ></span> | |
| 241 | + <button type="button" class="uk-button uk-modal-close">取消</button> | |
| 242 | + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> 保存</button> | |
| 243 | + </div> | |
| 244 | +</script> | |
| 245 | + | |
| 246 | +<script> | |
| 247 | + (function () { | |
| 248 | + var wrap = '#schedule-addsch-modal .toAndFroCont', sch, f1, f2, submitFun, stationRoutes; | |
| 249 | + | |
| 250 | + $(wrap).on('init', function (e, data) { | |
| 251 | + e.stopPropagation(); | |
| 252 | + sch = data.sch; | |
| 253 | + submitFun = data.submitFun; | |
| 254 | + stationRoutes = data.stationRoutes; | |
| 255 | + | |
| 256 | + var htmlStr = template('add_toAndFro_sch-form-temp', sch); | |
| 257 | + $(wrap).append(htmlStr); | |
| 258 | + //字典转换 | |
| 259 | + dictionaryUtils.transformDom($('.nt-dictionary', wrap)); | |
| 260 | + //validation | |
| 261 | + $('.add-sch-form', wrap).formValidation({framework: 'uikit', locale: 'zh_CN'}).trigger('init-autoCom'); | |
| 262 | + $('.add-sch-form [name=bcType]', wrap).trigger('change'); | |
| 263 | + | |
| 264 | + f1 = $('.add-sch-form.one_form', wrap); | |
| 265 | + f2 = $('.add-sch-form.two_form', wrap); | |
| 266 | + | |
| 267 | + //默认1备注同步到2 | |
| 268 | + $f('remarks', f1).on('input', function () { | |
| 269 | + $f('remarks', f2).val($(this).val()); | |
| 270 | + }); | |
| 271 | + //默认1备注同步到2 | |
| 272 | + $('.remarks-autocom', f1).on('selectitem.uk.autocomplete', function (e, data, acobject) { | |
| 273 | + $f('remarks', f2).val(data.value); | |
| 274 | + }); | |
| 275 | + //表单同步 | |
| 276 | + $(f1).on('ct_callback', synchroFormData).trigger('ct_callback'); | |
| 277 | + //修改1结束时间 | |
| 278 | + $f('zdsj',f1).on('input', synchroFormData); | |
| 279 | + $('.ct_line_lp_badge', wrap).html(sch.xlName + ', '+sch.lpName); | |
| 280 | + | |
| 281 | + //表单校验提交相关 | |
| 282 | + var dataArray; | |
| 283 | + var fs = $('.add-sch-form', wrap); | |
| 284 | + fs.on('success.form.fv', function (e) { | |
| 285 | + e.preventDefault(); | |
| 286 | + dataArray.push($(this).serializeJSON()); | |
| 287 | + $(this).data('valid', true); | |
| 288 | + if (allValidSuccess()) { | |
| 289 | + //开始post | |
| 290 | + var i = 0; | |
| 291 | + var inArr = []; | |
| 292 | + var upArr = []; | |
| 293 | + (function () { | |
| 294 | + var f = arguments.callee; | |
| 295 | + if (i >= dataArray.length) { | |
| 296 | + //前端数据更新 | |
| 297 | + var last = inArr.pop(); | |
| 298 | + gb_schedule_table.insertSchedule(last, upArr); | |
| 299 | + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: last}); | |
| 300 | + | |
| 301 | + try { | |
| 302 | + if(last.bcType=='in' || last.bcType=='out') | |
| 303 | + gb_data_basic.reload_stat_park_data(); | |
| 304 | + }catch (e){ | |
| 305 | + console.log(e);} | |
| 306 | + UIkit.modal('#schedule-addsch-modal').hide(); | |
| 307 | + return; | |
| 308 | + } | |
| 309 | + submitFun(dataArray[i], function (rs) { | |
| 310 | + inArr.push(rs.t); | |
| 311 | + upArr = upArr.concat(rs.ts); | |
| 312 | + upArr.push(rs.t); | |
| 313 | + i++; | |
| 314 | + f(); | |
| 315 | + }); | |
| 316 | + })(); | |
| 317 | + } | |
| 318 | + }); | |
| 319 | + //提交 | |
| 320 | + $('[type=submit]', wrap).on('click', function () { | |
| 321 | + $(this).addClass('disabled').attr('disabled', 'disabled'); | |
| 322 | + dataArray = []; | |
| 323 | + fs.data('valid', false); | |
| 324 | + fs.formValidation('validate'); | |
| 325 | + }); | |
| 326 | + }); | |
| 327 | + | |
| 328 | + function $f(name, f) { | |
| 329 | + return $('[name=' + name + ']', f); | |
| 330 | + } | |
| 331 | + | |
| 332 | + function allValidSuccess() { | |
| 333 | + var flag = true; | |
| 334 | + $('form.add-sch-form:visible', wrap).each(function (i, f) { | |
| 335 | + if (!$(f).data('valid')) { | |
| 336 | + flag = false; | |
| 337 | + return false; | |
| 338 | + } | |
| 339 | + }); | |
| 340 | + return flag; | |
| 341 | + } | |
| 342 | + | |
| 343 | + /** | |
| 344 | + * 同步2个表单的数据 | |
| 345 | + */ | |
| 346 | + var bcTypes = {'normal': 'normal', 'region': 'region', 'out': 'in', 'in': 'out'}; | |
| 347 | + var synchroFormData = function () { | |
| 348 | + //同步班次类型 | |
| 349 | + var type = $f('bcType', f1).val(); | |
| 350 | + if (bcTypes[type]) | |
| 351 | + $f('bcType', f2).val(bcTypes[type]).trigger('change'); | |
| 352 | + var updown = $f('xlDir', f1).val(); | |
| 353 | + | |
| 354 | + //1 结束时间 = 2 开始时间 | |
| 355 | + $f('fcsj', f2).val($f('zdsj', f1).val()); | |
| 356 | + if (type != 'out' && type != 'in') { | |
| 357 | + //走向 | |
| 358 | + $f('xlDir', f2).val(updown == 0 ? 1 : 0).trigger('change'); | |
| 359 | + | |
| 360 | + //第一个表单终点 = 第二个起点 | |
| 361 | + var oneZdName = $('[name=zdzCode] option:selected', f1).text(); | |
| 362 | + $f('qdzCode', f2).val(searchParallelStation(oneZdName, updown == 0 ? 1 : 0)); | |
| 363 | + //第一个表单起点 = 第二个终点 | |
| 364 | + var oneQdName = $('[name=qdzCode] option:selected', f1).text(); | |
| 365 | + $f('zdzCode', f2).val(searchParallelStation(oneQdName, updown == 0 ? 1 : 0)).trigger('change'); | |
| 366 | + } | |
| 367 | + else { | |
| 368 | + //进出场走向相同 | |
| 369 | + $f('xlDir', f2).val(updown).trigger('change'); | |
| 370 | + //第一个表单终点 = 第二个起点 | |
| 371 | + $f('qdzCode', f2).val($f('zdzCode', f1).val()); | |
| 372 | + //第一个表单起点 = 第二个终点 | |
| 373 | + $f('zdzCode', f2).val($f('qdzCode', f1).val()).trigger('change'); | |
| 374 | + } | |
| 375 | + }; | |
| 376 | + | |
| 377 | + | |
| 378 | + //返回另一个走向对应的站点 | |
| 379 | + function searchParallelStation(stationName, updown) { | |
| 380 | + var routes = stationRoutes[updown] | |
| 381 | + , len = routes.length; | |
| 382 | + | |
| 383 | + for (var i = 0; i < len; i++) { | |
| 384 | + if (routes[i].stationName == stationName) | |
| 385 | + return routes[i].stationCode; | |
| 386 | + } | |
| 387 | + } | |
| 388 | + })(); | |
| 389 | +</script> | |
| 0 | 390 | \ No newline at end of file | ... | ... |
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/temp_sch/main.html
0 → 100644
| 1 | +<div class="uk-modal ct-form-modal ct_move_modal" id="schedule-addsch-modal"> | |
| 2 | + <div class="uk-modal-dialog" style="width: 800px;"> | |
| 3 | + <a href="" class="uk-modal-close uk-close"></a> | |
| 4 | + <div class="uk-modal-header"> | |
| 5 | + <h2>新增临加班次</h2></div> | |
| 6 | + | |
| 7 | + <div class="uk-grid"> | |
| 8 | + <div class="uk-width-1-4"> | |
| 9 | + <ul data-uk-switcher="{connect:'#tempScheduleContent'}" class="uk-nav uk-nav-side left_tabs_lg"> | |
| 10 | + <li data-handle="normal"><a>1、临加班次</a></li> | |
| 11 | + <li data-handle="toAndFro"><a>2、往返</a></li> | |
| 12 | + <li data-handle="parkToPark"><a>3、场到场</a></li> | |
| 13 | + </ul> | |
| 14 | + </div> | |
| 15 | + <div class="uk-width-3-4"> | |
| 16 | + <ul id="tempScheduleContent" class="uk-switcher"> | |
| 17 | + <li class="normalCont"></li> | |
| 18 | + <li class="toAndFroCont"></li> | |
| 19 | + <li class="parkToParkCont"></li> | |
| 20 | + </ul> | |
| 21 | + </div> | |
| 22 | + </div> | |
| 23 | + </div> | |
| 24 | + | |
| 25 | + <script> | |
| 26 | + (function () { | |
| 27 | + var modal = '#schedule-addsch-modal', | |
| 28 | + sch, stationRoutes, parks, information, carsArray, st_park_data; | |
| 29 | + | |
| 30 | + $(modal).on('init', function (e, data) { | |
| 31 | + e.stopPropagation(); | |
| 32 | + sch = data.sch; | |
| 33 | + //站到场数据 | |
| 34 | + st_park_data = gb_data_basic.get_stat_park_data()[sch.xlBm]; | |
| 35 | + //站点路由 | |
| 36 | + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) { | |
| 37 | + return a.stationRouteCode - b.stationRouteCode; | |
| 38 | + }), 'directions'); | |
| 39 | + //停车场 | |
| 40 | + parks = gb_data_basic.simpleParksArray(); | |
| 41 | + //线路标准 | |
| 42 | + information = gb_data_basic.getLineInformation(sch.xlBm); | |
| 43 | + //停车场排序,常用的放前面 | |
| 44 | + parks = sort_parks(parks, information, st_park_data); | |
| 45 | + //车辆信息 | |
| 46 | + carsArray = gb_data_basic.carsArray(); | |
| 47 | + | |
| 48 | + var st_doms = gb_schedule_context_menu.get_add_sch_doms(); | |
| 49 | + //normal | |
| 50 | + $('.normalCont', modal).html(st_doms.normal_dom) | |
| 51 | + .trigger('init', {sch: sch, submitFun: submit_temp_schedule_form}); | |
| 52 | + | |
| 53 | + //to and fro | |
| 54 | + $('.toAndFroCont', modal).html(st_doms.two_way_dom) | |
| 55 | + .trigger('init', {sch: sch, submitFun: submit_temp_schedule_form, stationRoutes: stationRoutes}); | |
| 56 | + | |
| 57 | + //park to park | |
| 58 | + $('.parkToParkCont', modal).html(st_doms.park_to_park_dom) | |
| 59 | + .trigger('init', {sch: sch, submitFun: submit_temp_schedule_form, parks: parks, carsArray: carsArray}); | |
| 60 | + }); | |
| 61 | + | |
| 62 | + //init-autoCom | |
| 63 | + $(modal).on('init-autoCom', '.add-sch-form', function () { | |
| 64 | + //车辆 | |
| 65 | + if(carsArray) | |
| 66 | + gb_common.carAutocomplete($('.car-autocom', this), carsArray); | |
| 67 | + //驾驶员 | |
| 68 | + gb_common.personAutocomplete($('.jsy-autocom', this)); | |
| 69 | + //售票员 | |
| 70 | + gb_common.personAutocomplete($('.spy-autocom', this)); | |
| 71 | + //备注补全 | |
| 72 | + gb_common.remarksAutocomplete($('.remarks-autocom', this)); | |
| 73 | + }); | |
| 74 | + | |
| 75 | + //班次类型 和 上下行 切换事件 | |
| 76 | + $(modal).on('change', '.add-sch-form [name=bcType],.add-sch-form [name=xlDir]', reCalcInputs_type); | |
| 77 | + //起终点站改变事件 | |
| 78 | + $(modal).on('change', '[name=qdzCode],[name=zdzCode]', reCalcInputs_station); | |
| 79 | + //开始时间和公里改变 | |
| 80 | + $(modal).on('input', '.add-sch-form [name=fcsj],.add-sch-form [name=jhlc]', reCalcEndTime); | |
| 81 | + | |
| 82 | + | |
| 83 | + function reCalcInputs_type() { | |
| 84 | + var f = $(this).parents('.add-sch-form'); | |
| 85 | + var bcType_e = $('[name=bcType]', f) | |
| 86 | + , xlDir_e = $('[name=xlDir]', f); | |
| 87 | + | |
| 88 | + var routes = stationRoutes[xlDir_e.val()] | |
| 89 | + , lastCode = routes[routes.length - 1].stationCode | |
| 90 | + , opts = '', park_opts = ''; | |
| 91 | + //station options | |
| 92 | + $.each(routes, function () { | |
| 93 | + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>' | |
| 94 | + }); | |
| 95 | + //park options | |
| 96 | + for(var i=0,p;p=parks[i++];) | |
| 97 | + park_opts += '<option value="' + p.code + '">' + p.name + '</option>'; | |
| 98 | + | |
| 99 | + var qdz = $('[name=qdzCode]', f), zdz = $('[name=zdzCode]', f); | |
| 100 | + //var time, mileage; | |
| 101 | + switch (bcType_e.val()) { | |
| 102 | + case 'out': | |
| 103 | + qdz.html(park_opts).val(information.carPark); | |
| 104 | + zdz.html(opts); | |
| 105 | + break; | |
| 106 | + case 'in': | |
| 107 | + qdz.html(opts); | |
| 108 | + zdz.html(park_opts).val(information.carPark); | |
| 109 | + break; | |
| 110 | + default: | |
| 111 | + qdz.html(opts); | |
| 112 | + zdz.html(opts).val(lastCode); | |
| 113 | + } | |
| 114 | + | |
| 115 | + zdz.trigger('change'); | |
| 116 | + f.trigger('ct_callback'); | |
| 117 | + } | |
| 118 | + | |
| 119 | + function reCalcInputs_station() { | |
| 120 | + var f = $(this).parents('form'), | |
| 121 | + bcType = $('[name=bcType]', f).val(), | |
| 122 | + qdzCode = $('[name=qdzCode]', f).val(), | |
| 123 | + zdzCode =$('[name=zdzCode]', f).val(), | |
| 124 | + startDate = $('[name=fcsj]', f).val(), | |
| 125 | + upDown = $('[name=xlDir]', f).val(), mileage, time; | |
| 126 | + | |
| 127 | + //从站到场里获取数据 | |
| 128 | + var stp = search_st_park(f); | |
| 129 | + if(stp){ | |
| 130 | + mileage=bcType=='in'?stp['mileage1']:stp['mileage2']; | |
| 131 | + time=bcType=='in'?stp['time1']:stp['time2']; | |
| 132 | + } | |
| 133 | + else{ | |
| 134 | + switch (upDown + '_' + bcType) { | |
| 135 | + case '0_out'://上行出场 | |
| 136 | + mileage = information.upOutMileage; | |
| 137 | + time = information.upOutTimer; | |
| 138 | + break; | |
| 139 | + case '1_out'://下行出场 | |
| 140 | + mileage = information.downOutMileage; | |
| 141 | + time = information.downOutTimer; | |
| 142 | + break; | |
| 143 | + case '0_in'://上行进场 | |
| 144 | + mileage = information.upInMileage; | |
| 145 | + time = information.upInTimer; | |
| 146 | + break; | |
| 147 | + case '1_in'://下行进场 | |
| 148 | + mileage = information.downInMileage; | |
| 149 | + time = information.downInTimer; | |
| 150 | + break; | |
| 151 | + default: | |
| 152 | + | |
| 153 | + var qc_time=upDown==0?information.upTravelTime:information.downTravelTime, | |
| 154 | + qc_mileage=upDown==0?information.upMileage:information.downMileage; | |
| 155 | + if(is_normal_sch(f)){ | |
| 156 | + bcType='normal'; | |
| 157 | + mileage=qc_mileage; | |
| 158 | + } | |
| 159 | + else{ | |
| 160 | + bcType='region'; | |
| 161 | + mileage = calcMileage(stationRoutes[upDown], qdzCode, zdzCode); | |
| 162 | + } | |
| 163 | + | |
| 164 | + time = gb_common.mul(gb_common.accDiv(qc_time, qc_mileage), mileage); | |
| 165 | + $('[name=bcType]', f).val(bcType); | |
| 166 | + } | |
| 167 | + } | |
| 168 | + | |
| 169 | + $('[name=jhlc]', f).val(mileage); | |
| 170 | + var et = moment(startDate, 'HH:mm').add(time, 'minutes'); | |
| 171 | + $f('zdsj', f).val(et.format('HH:mm')); | |
| 172 | + f.trigger('ct_callback'); | |
| 173 | + } | |
| 174 | + | |
| 175 | + | |
| 176 | + function reCalcEndTime() { | |
| 177 | + var f = $(this).parents('.add-sch-form') | |
| 178 | + , startDate = $f('fcsj', f).val()//开始时间 | |
| 179 | + , mileage = $f('jhlc', f).val()//公里 | |
| 180 | + , type2 = $f('bcType', f).val(),//班次类型 | |
| 181 | + upDown = $('[name=xlDir]', f).val(); | |
| 182 | + if (!startDate || !mileage) | |
| 183 | + return; | |
| 184 | + | |
| 185 | + var time; | |
| 186 | + //从站到场里获取数据 | |
| 187 | + var stp = search_st_park(f); | |
| 188 | + if(stp){ | |
| 189 | + time=type2=='in'?stp['time1']:stp['time2']; | |
| 190 | + } | |
| 191 | + else{ | |
| 192 | + if (type2 == 'in') | |
| 193 | + time = upDown == 0 ? information.upInTimer : information.downInTimer; | |
| 194 | + else if (type2 == 'out') | |
| 195 | + time = upDown == 0 ? information.upOutTimer : information.downOutTimer; | |
| 196 | + else{ | |
| 197 | + var qc_time=upDown==0?information.upTravelTime:information.downTravelTime, | |
| 198 | + qc_mileage=upDown==0?information.upMileage:information.downMileage; | |
| 199 | + | |
| 200 | + time = gb_common.mul(gb_common.accDiv(qc_time, qc_mileage), mileage); | |
| 201 | + } | |
| 202 | + } | |
| 203 | + | |
| 204 | + var et = moment(startDate, 'HH:mm').add(time, 'minutes'); | |
| 205 | + $f('zdsj', f).val(et.format('HH:mm')); | |
| 206 | + f.trigger('ct_callback'); | |
| 207 | + } | |
| 208 | + | |
| 209 | + function is_normal_sch(f) { | |
| 210 | + var qdzCode = $('[name=qdzCode]', f).val(), | |
| 211 | + zdzCode =$('[name=zdzCode]', f).val(), | |
| 212 | + upDown = $('[name=xlDir]', f).val(), | |
| 213 | + rts = stationRoutes[upDown]; | |
| 214 | + | |
| 215 | + if(rts[0].stationCode == qdzCode | |
| 216 | + && rts[rts.length - 1].stationCode == zdzCode) | |
| 217 | + return true; | |
| 218 | + else | |
| 219 | + return false; | |
| 220 | + } | |
| 221 | + | |
| 222 | + function isInOut(bcType) { | |
| 223 | + return bcType=='in' || bcType=='out'; | |
| 224 | + } | |
| 225 | + | |
| 226 | + /** | |
| 227 | + * 计算线路上站点间公里 | |
| 228 | + */ | |
| 229 | + function calcMileage(rts, s, e) { | |
| 230 | + var mileage = 0, flag, code; | |
| 231 | + $.each(rts, function () { | |
| 232 | + code = this['stationCode']; | |
| 233 | + if (flag) | |
| 234 | + mileage = gb_common.accAdd(mileage, this.distances); | |
| 235 | + if (code == s) | |
| 236 | + flag = true; | |
| 237 | + if (code == e) | |
| 238 | + return false; | |
| 239 | + }); | |
| 240 | + return mileage; | |
| 241 | + } | |
| 242 | + | |
| 243 | + function search_st_park(f) { | |
| 244 | + if(!st_park_data) | |
| 245 | + return; | |
| 246 | + var stp; | |
| 247 | + var qdSelect=$f('qdzCode', f)[0],zdSelect=$f('zdzCode', f)[0]; | |
| 248 | + | |
| 249 | + var qdzName=qdSelect.options[qdSelect.options.selectedIndex].text, | |
| 250 | + zdzName=zdSelect.options[zdSelect.options.selectedIndex].text, | |
| 251 | + type2 = $f('bcType', f).val(); | |
| 252 | + | |
| 253 | + if(!isInOut(type2)) | |
| 254 | + return; | |
| 255 | + | |
| 256 | + $.each(st_park_data, function () { | |
| 257 | + if((type2=='in' && this.stationName==qdzName && this.parkName==zdzName) | |
| 258 | + || (type2=='out' && this.stationName==zdzName && this.parkName==qdzName)){ | |
| 259 | + stp = this; | |
| 260 | + return false; | |
| 261 | + } | |
| 262 | + }); | |
| 263 | + | |
| 264 | + return stp; | |
| 265 | + } | |
| 266 | + | |
| 267 | + /** | |
| 268 | + * 停车场排序 | |
| 269 | + * @param parks 停车场 code 2 name | |
| 270 | + * @param information 线路标准 | |
| 271 | + * @param st_park_data 站到场 | |
| 272 | + */ | |
| 273 | + function sort_parks(parks, information, st_park_data) { | |
| 274 | + var array = [], names=[]; | |
| 275 | + for(var code in parks){ | |
| 276 | + array.push({code: code, name: parks[code]}); | |
| 277 | + } | |
| 278 | + | |
| 279 | + if(st_park_data && st_park_data.length > 0){ | |
| 280 | + $.each(st_park_data, function () { | |
| 281 | + names.push(this.parkName); | |
| 282 | + }); | |
| 283 | + } | |
| 284 | + | |
| 285 | + //debugger | |
| 286 | + array.sort(function (a, b) { | |
| 287 | + if(a.code==information.carPark) | |
| 288 | + return -1; | |
| 289 | + if(b.code==information.carPark) | |
| 290 | + return 1; | |
| 291 | + | |
| 292 | + var ai = names.indexOf(a.name), | |
| 293 | + bi = names.indexOf(b.name); | |
| 294 | + | |
| 295 | + if(ai!=-1 && bi==-1) | |
| 296 | + return -1; | |
| 297 | + else if(ai==-1 && bi!=-1) | |
| 298 | + return 1; | |
| 299 | + else | |
| 300 | + return a.name.localeCompare(b.name); | |
| 301 | + }); | |
| 302 | + return array; | |
| 303 | + } | |
| 304 | + | |
| 305 | + function $f(name, f) { | |
| 306 | + return $('[name=' + name + ']', f); | |
| 307 | + } | |
| 308 | + | |
| 309 | + /** | |
| 310 | + * 提交表单 | |
| 311 | + */ | |
| 312 | + function submit_temp_schedule_form(data, cb) { | |
| 313 | + data.xlBm = sch.xlBm; | |
| 314 | + data.xlName = sch.xlName; | |
| 315 | + data.lpName = sch.lpName; | |
| 316 | + //拆分驾驶员工号和姓名 | |
| 317 | + data.jGh = data.jsy.split('/')[0]; | |
| 318 | + data.jName = data.jsy.split('/')[1]; | |
| 319 | + delete data.jsy; | |
| 320 | + //拆分售票员工号和姓名 | |
| 321 | + if (data.spy != '') { | |
| 322 | + data.sGh = data.spy.split('/')[0]; | |
| 323 | + data.sName = data.spy.split('/')[1]; | |
| 324 | + delete data.spy; | |
| 325 | + } | |
| 326 | + | |
| 327 | + //公司信息 | |
| 328 | + var line = gb_data_basic.findLineByCodes([data.xlBm]); | |
| 329 | + if(line && line.length > 0){ | |
| 330 | + line = line[0]; | |
| 331 | + data.gsBm = line.company; | |
| 332 | + data.fgsBm = line.brancheCompany; | |
| 333 | + } | |
| 334 | + | |
| 335 | + gb_common.$post('/realSchedule', data, function (rs) { | |
| 336 | + notify_succ('新增临加班次成功'); | |
| 337 | + cb && cb(rs); | |
| 338 | + }); | |
| 339 | + } | |
| 340 | + })(); | |
| 341 | + </script> | |
| 342 | +</div> | ... | ... |
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
| ... | ... | @@ -19,10 +19,25 @@ var gb_schedule_context_menu = (function () { |
| 19 | 19 | $.get(folder + '/sub_task_v2/add_range_turn.html', function (dom) { |
| 20 | 20 | st_doms.range_dom=dom; |
| 21 | 21 | }); |
| 22 | + //提前缓存临加的片段页面 | |
| 23 | + var add_sch_doms={}; | |
| 24 | + $.get(folder + '/temp_sch/add_normal.html', function (dom) { | |
| 25 | + add_sch_doms.normal_dom=dom; | |
| 26 | + }); | |
| 27 | + $.get(folder + '/temp_sch/add_two_way.html', function (dom) { | |
| 28 | + add_sch_doms.two_way_dom=dom; | |
| 29 | + }); | |
| 30 | + $.get(folder + '/temp_sch/add_park_to_park.html', function (dom) { | |
| 31 | + add_sch_doms.park_to_park_dom=dom; | |
| 32 | + }); | |
| 33 | + | |
| 22 | 34 | |
| 23 | 35 | var callbackHandler = { |
| 24 | 36 | get_st_doms: function () { |
| 25 | - return st_doms; | |
| 37 | + return st_doms; | |
| 38 | + }, | |
| 39 | + get_add_sch_doms: function () { | |
| 40 | + return add_sch_doms; | |
| 26 | 41 | }, |
| 27 | 42 | dftz: function (sch) { |
| 28 | 43 | open_modal(folder + '/dftz.html', { |
| ... | ... | @@ -247,7 +262,7 @@ var gb_schedule_context_menu = (function () { |
| 247 | 262 | }); |
| 248 | 263 | }, |
| 249 | 264 | add_temp_sch: function (sch) { |
| 250 | - open_modal(folder + '/add_temp_sch.html', { | |
| 265 | + open_modal(folder + '/temp_sch/main.html', { | |
| 251 | 266 | sch: sch |
| 252 | 267 | }, modal_opts); |
| 253 | 268 | }, | ... | ... |
src/main/resources/timetable.proto
0 → 100644
| 1 | +syntax = "proto3"; | |
| 2 | + | |
| 3 | +package timetable; | |
| 4 | + | |
| 5 | +option java_package = "com.bsth.service.schedule.utils"; | |
| 6 | +option java_outer_classname = "TimeTableProto"; | |
| 7 | + | |
| 8 | + | |
| 9 | +// 描述时刻表的google的二进制protobuf描述 | |
| 10 | +// 目前用在备份时刻表的信息 | |
| 11 | +// 备份的时刻表表(TODO:) | |
| 12 | + | |
| 13 | +message TTInfo { | |
| 14 | + uint64 id = 1; // 时刻表id | |
| 15 | + string name = 2; // 时刻表名字 | |
| 16 | + | |
| 17 | + uint32 xl = 3; // 线路id | |
| 18 | + string xlName = 4; // 线路名称 | |
| 19 | + string xlDir = 5; // 线路上下行 | |
| 20 | + | |
| 21 | + uint64 qyrq = 6; // 启用日期 | |
| 22 | + bool isEnableDisTemplate = 7; // 是否启用调度模版 | |
| 23 | + bool isCancel = 8; // 是否删除(标记) | |
| 24 | + | |
| 25 | + string ruleDays = 9; // 常规有效日(1-7表示星期一到星期日,多个用逗号隔开) | |
| 26 | + string specialDays = 10; // 特殊有效日期(格式:2001-01-01,多个用逗号隔开) | |
| 27 | + | |
| 28 | + uint32 createUser = 11; // 创建用户id | |
| 29 | + string createUserName = 12; // 创建用户姓名 | |
| 30 | + uint32 updateUser = 13; // 更新用户id | |
| 31 | + string updateUserName = 14; // 更新用户姓名 | |
| 32 | + uint64 createDate = 15; // 创建日期 | |
| 33 | + uint64 updateDate = 16; // 更新日期 | |
| 34 | + | |
| 35 | + // list | |
| 36 | + repeated TTInfoDetail bcInfo = 17; | |
| 37 | +} | |
| 38 | + | |
| 39 | +message TTInfoDetail { | |
| 40 | + uint64 id = 1; // 班次明细id | |
| 41 | + // TODO:时刻表主对象关联 | |
| 42 | + uint32 xl = 2; // 线路id | |
| 43 | + string xlName = 3; // 线路名字 | |
| 44 | + | |
| 45 | + uint64 lp = 4; // 路牌id | |
| 46 | + string lpName = 5; // 路牌名字 | |
| 47 | + | |
| 48 | + uint32 fcno = 6; // 发车顺序号 | |
| 49 | + string xlDir = 7; // 线路方向 | |
| 50 | + | |
| 51 | + string qdzCode = 8; // 起站点代码(bsth_c_station,bsth_c_car_park 里的编码) | |
| 52 | + string qdzName = 9; // 起站点名字(bsth_c_stationroute,bsth_c_car_park里的名字) | |
| 53 | + string zdzCode = 10; // 终点站代码(bsth_c_station,bsth_c_car_park 里的编码) | |
| 54 | + string zdzName = 11; // 终点站名字(bsth_c_stationroute,bsth_c_car_park里的名字) | |
| 55 | + | |
| 56 | + string fcsj = 12; // 发车时间(格式 HH:mm) | |
| 57 | + uint32 bcs = 13; // 对应班次数 | |
| 58 | + double jhlc = 14; // 计划里程 | |
| 59 | + uint32 bcsj = 15; // 班次历时 | |
| 60 | + | |
| 61 | + string bcType = 16; // 班次类型 字典type=ScheduleType | |
| 62 | + | |
| 63 | + bool isFB = 17; // 是否分班(表示这个班次是否是晚班班次,就是换另外一个驾驶员开) | |
| 64 | + bool isTS = 18; // 是否停驶(表示此班次执行完成,停在终点站,不进场) | |
| 65 | + string remark = 19; // 备注 | |
| 66 | + | |
| 67 | +} | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | ... | ... |