SchAttrCalculator.java
3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.bsth.data.schedule;
import java.text.ParseException;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.bsth.data.LineConfigData;
import com.bsth.entity.realcontrol.LineConfig;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.util.DateUtils;
/**
*
* @ClassName: SchAttrCalculator
* @Description: TODO(班次相关属性计算器)
* @author PanZhao
* @date 2016年8月15日 下午4:40:26
*
*/
@Component
public class SchAttrCalculator {
@Autowired
LineConfigData lineConfigData;
private final static long DAY_TIME = 1000 * 60 * 60 * 24L;
Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* @Title: calcRealDate
* @Description: TODO(计算班次的真实执行日期)
*/
public SchAttrCalculator calcRealDate(ScheduleRealInfo sch) {
LineConfig conf = lineConfigData.get(sch.getXlBm());
try {
if (null == sch.getFcsjT())
calcFcsjTime(sch);
// 早于班次运营时间的 加一天
if (conf.getCurrStartTime() > sch.getFcsjT())
sch.setFcsjAll(sch.getFcsjT() + DAY_TIME);
sch.setRealExecDate(DateUtils.sdfyyyyMMdd.format(new Date(sch.getFcsjT())));
} catch (Exception e) {
logger.error("", e);
}
return this;
}
/**
*
* @Title: calcAllTimeByFcsj
* @Description: TODO(根据发车时间字符串计算 (计发时间,终点时间,待发时间))
*/
public SchAttrCalculator calcAllTimeByFcsj(ScheduleRealInfo sch) {
try {
// 生成时间戳
calcTimestamp(sch);
// 计划终点时间
if (sch.getBcsj() != null) {
Date zdDate = new Date(sch.getDfsjT() + (sch.getBcsj() * 60 * 1000));
sch.setZdsjT(zdDate.getTime());
sch.setZdsj(DateUtils.sdfHHmm.format(zdDate));
}
} catch (ParseException e) {
logger.error("", e);
}
return this;
}
/**
*
* @Title: calcQdzTimePlan
* @Description: TODO(计算班次的起点应到时间,list 必须是同一辆车的班次)
*/
public void calcQdzTimePlan(List<ScheduleRealInfo> list){
Collections.sort(list, new ScheduleComparator.FCSJ());
int len = list.size();
if(len == 0)
return;
ScheduleRealInfo prve = list.get(0), curr;
for(int i = 1; i < len; i ++){
curr = list.get(i);
if(prve.getZdzName().equals(curr.getQdzName()))
curr.setQdzArrDateJH(prve.getZdsj());
prve = curr;
}
}
public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException {
sch.setFcsjT(DateUtils.sdfyyyyMMddHHmm.parse(sch.getRealExecDate() + sch.getFcsj()).getTime());
return this;
}
public void calcTimestamp(ScheduleRealInfo sch) throws ParseException{
//计发时间
if(sch.getFcsjT() == null)
calcFcsjTime(sch);
//待发时间
if(sch.getDfsj() == null)
sch.setDfsjAll(sch.getFcsjT());
if(sch.getDfsjT() == null)
sch.setDfsjAll(sch.getDfsj());
//实发时间戳
if(sch.getFcsjActualTime() == null && sch.getFcsjActual() != null)
sch.setFcsjActualAll(sch.getFcsjActual());
//实达时间戳
if(sch.getZdsjActualTime() == null && sch.getZdsjActual() != null)
sch.setZdsjActualAll(sch.getZdsjActual());
}
}