Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
traffic-signal-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
signal
traffic-signal-platform
Commits
dbf5d81c
Commit
dbf5d81c
authored
Mar 24, 2025
by
杜伟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化代码
parent
db6b6365
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
271 additions
and
33 deletions
+271
-33
TrendServiceImpl.java
...ain/java/net/wanji/opt/service/impl/TrendServiceImpl.java
+142
-7
CommonCrossIdDateTimeVO.java
...c/main/java/net/wanji/opt/vo/CommonCrossIdDateTimeVO.java
+5
-0
logback-spring.xml
...al-optimize-service/src/main/resources/logback-spring.xml
+1
-1
CrossLaneDataHistMapper.java
...net/wanji/databus/dao/mapper/CrossLaneDataHistMapper.java
+11
-0
CrossLaneDataHistVOExt.java
...ain/java/net/wanji/databus/vo/CrossLaneDataHistVOExt.java
+19
-0
CrossLaneDataHistMapper.xml
...bus/src/main/resources/mapper/CrossLaneDataHistMapper.xml
+67
-0
CrossTurnDataHistMapper.xml
...bus/src/main/resources/mapper/CrossTurnDataHistMapper.xml
+26
-25
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/TrendServiceImpl.java
View file @
dbf5d81c
...
@@ -18,11 +18,7 @@ import net.wanji.databus.dao.entity.*;
...
@@ -18,11 +18,7 @@ import net.wanji.databus.dao.entity.*;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.po.*
;
import
net.wanji.databus.po.*
;
import
net.wanji.databus.vo.AbnormalCrossListVO
;
import
net.wanji.databus.vo.*
;
import
net.wanji.databus.vo.CrossDataHistVO
;
import
net.wanji.databus.vo.CrossDirDataHistVO
;
import
net.wanji.databus.vo.CrossTurnDataHistVO
;
import
net.wanji.databus.vo.GreenwaveListVO
;
import
net.wanji.opt.bo.*
;
import
net.wanji.opt.bo.*
;
import
net.wanji.opt.cache.BaseCrossInfoCache
;
import
net.wanji.opt.cache.BaseCrossInfoCache
;
import
net.wanji.opt.common.ExcelExportUtils
;
import
net.wanji.opt.common.ExcelExportUtils
;
...
@@ -1511,6 +1507,132 @@ public class TrendServiceImpl implements TrendService {
...
@@ -1511,6 +1507,132 @@ public class TrendServiceImpl implements TrendService {
return
sortedRes
;
return
sortedRes
;
}
}
/**
* 构建车道级数据
* @param crossId
* @param poExtList
* @return
*/
private
List
<
TableQueryVO
.
CycleDataElement
>
buildLaneCycleData
(
String
crossId
,
List
<
CrossLaneDataHistVOExt
>
poExtList
)
{
List
<
TableQueryVO
.
CycleDataElement
>
res
=
new
ArrayList
<>();
// int pedFlow = 0;
for
(
CrossLaneDataHistVOExt
po
:
poExtList
)
{
TableQueryVO
.
CycleDataElement
vo
=
new
TableQueryVO
.
CycleDataElement
();
vo
.
setTime
(
po
.
getStartTime
());
vo
.
setDir
(
po
.
getDir
());
vo
.
setDirName
(
BaseEnum
.
SignalDirectionEnum
.
getNameByCode
(
po
.
getDir
()));
String
dirName
=
BaseEnum
.
SignalDirectionEnum
.
getNameByCode
(
po
.
getDir
());
String
turnName
=
TurnConvertEnum
.
getDescByKey
(
po
.
getTurn
());
vo
.
setLaneSort
(
String
.
join
(
"-"
,
dirName
,
turnName
,
String
.
valueOf
(
po
.
getSort
())));
vo
.
setPedFlow
(
po
.
getFlow
());
vo
.
setTrafficFlowA
(
po
.
getTrafficFlowA
());
vo
.
setTrafficFlowB
(
po
.
getTrafficFlowB
());
vo
.
setTrafficFlowC
(
po
.
getTrafficFlowC
());
vo
.
setNonMotorFlow
(
po
.
getNonMotorFlow
());
Double
speed
=
po
.
getSpeed
();
vo
.
setSpeed
((
int
)
Math
.
round
(
speed
));
vo
.
setFlow
(
po
.
getFlow
());
vo
.
setAllFlow
(
po
.
getFlow
()
+
po
.
getNonMotorFlow
()
+
po
.
getFlow
());
//----------------------------
// if (po.getId().contains(crossId.concat(Constants.SystemParam.SEPARATOR_MINUS))) {
// pedFlow += po.getFlow();
// }
Integer
batchTime
=
po
.
getBatchTime
();
// 将10位时间戳转换为毫秒
long
millis
=
batchTime
*
1000L
;
// 使用毫秒值创建Date对象
// Date dateFromTimestamp = new Date(millis);
Double
queueLength
=
po
.
getQueueLength
();
vo
.
setQueueLength
((
int
)
Math
.
round
(
queueLength
));
Integer
delayTime
=
po
.
getDelayTime
();
vo
.
setDelayTime
(
delayTime
);
//路口效率指数
vo
.
setEfficiencyIndex
(
0.0
);
//效率评价等级
vo
.
setEfficiencyEvaluateLevel
(
0.0
);
Double
stopTimes
=
po
.
getStopTimes
();
vo
.
setStopTimes
((
int
)
Math
.
round
(
stopTimes
));
Double
vehheadTime
=
po
.
getVehheadTime
();
vo
.
setVehheadTime
((
int
)
Math
.
round
(
vehheadTime
));
//饱和度
vo
.
setSaturation
(
0.0
);
//po.getSaturation()
//拥堵指数
vo
.
setCongestionIndex
(
0.0
);
//溢出指数
vo
.
setOverflowIndex
(
0.0
);
//失衡指数
vo
.
setImbalanceIndex
(
0.0
);
//拥堵次数
vo
.
setCongestionTimes
(
0
);
//溢出次数
vo
.
setOverflowTimes
(
0
);
//失衡次数
vo
.
setImbalanceTimes
(
0
);
//空放次数
vo
.
setFreeFlowTimes
(
0
);
//溢流率
vo
.
setOverflowRate
(
0.0
);
//冲突点
vo
.
setConflictPoint
(
0
);
Double
timeOccupancyDouble
=
po
.
getTimeOccupancy
();
if
(
timeOccupancyDouble
!=
null
)
{
vo
.
setTimeOccupancy
((
int
)
Math
.
round
(
timeOccupancyDouble
*
100
));
}
Double
vehicleLengthRatioMean
=
po
.
getVehicleLengthRatioMean
();
if
(
vehicleLengthRatioMean
!=
null
)
{
vo
.
setVehicleNumsRatioMean
((
int
)
Math
.
round
(
vehicleLengthRatioMean
*
100
));
}
//路口服务水平
vo
.
setServiceLevel
(
0
);
//路口安全系数
vo
.
setSafetyCoefficient
(
0.0
);
//安全评价等级
vo
.
setSafetyEvaluateLevel
(
0
);
//交通事件数
vo
.
setTrafficEventNum
(
0
);
//交通事故数
vo
.
setTrafficAccidentNum
(
0
);
//不停车通过率
vo
.
setNoStopPassRate
(
0
);
//一次停车通过率
vo
.
setOneStopPassRate
(
0
);
//二次停车通过率
vo
.
setTwoStopPassRate
(
0
);
//路口未清空率
vo
.
setCrossNoClearRate
(
0
);
//平均排队长度
vo
.
setAvgQueueLength
(
0.0
);
//绿灯有效利用率
vo
.
setGreenLightEfficiency
(
0.0
);
//行人平均通过时间
vo
.
setPedAvgPassTime
(
0.0
);
//行人闯红灯率
vo
.
setPedCrossRedLightRate
(
0.0
);
vo
.
setVehheadDist
(
po
.
getVehheadDist
());
vo
.
setV85
(
Math
.
round
(
po
.
getV85
()
*
100
)
/
100
);
vo
.
setAllVehiceleFlow
(
po
.
getFlow
()
+
po
.
getNonMotorFlow
());
vo
.
setTurn
(
po
.
getTurn
());
res
.
add
(
vo
);
}
List
<
TableQueryVO
.
CycleDataElement
>
sortedRes
=
res
.
stream
()
.
sorted
(
Comparator
.
comparing
(
TableQueryVO
.
CycleDataElement
::
getTime
).
reversed
())
.
collect
(
Collectors
.
toList
());
return
sortedRes
;
}
/**
/**
* 构建转向级
* 构建转向级
* @param crossId
* @param crossId
...
@@ -2408,10 +2530,23 @@ public class TrendServiceImpl implements TrendService {
...
@@ -2408,10 +2530,23 @@ public class TrendServiceImpl implements TrendService {
String
crossId
=
crossIdDateTimeVO
.
getCrossId
();
String
crossId
=
crossIdDateTimeVO
.
getCrossId
();
int
start
=
(
int
)
(
crossIdDateTimeVO
.
getStart
().
getTime
()
/
1000
);
int
start
=
(
int
)
(
crossIdDateTimeVO
.
getStart
().
getTime
()
/
1000
);
int
end
=
(
int
)
(
crossIdDateTimeVO
.
getEnd
().
getTime
()
/
1000
);
int
end
=
(
int
)
(
crossIdDateTimeVO
.
getEnd
().
getTime
()
/
1000
);
String
ids
=
crossIdDateTimeVO
.
getIds
();
List
<
String
>
idsList
=
null
;
if
(!
StringUtils
.
isBlank
(
ids
))
{
idsList
=
Arrays
.
asList
(
ids
.
split
(
","
));
}
//分析粒度【5m:五分钟 10m:10分钟 30m:30分钟 1h:一小时】
String
granularity
=
crossIdDateTimeVO
.
getGranularity
();
if
(
StringUtils
.
isBlank
(
granularity
))
{
granularity
=
"5"
;
}
else
{
granularity
=
granularity
.
replace
(
"m"
,
""
).
replace
(
"h"
,
""
);;
}
// 查询周期数据
// 查询周期数据
List
<
CrossLaneDataHist
POExt
>
poExtList
=
crossLaneDataHistMapper
.
selectByCrossIdAndTimeSpan
(
crossId
,
start
,
end
);
List
<
CrossLaneDataHist
VOExt
>
poExtList
=
crossLaneDataHistMapper
.
selectByCrossIdAndTimeIds
(
crossId
,
start
,
end
,
granularity
,
idsList
);
return
buildCycleData
(
crossId
,
poExtList
);
return
build
Lane
CycleData
(
crossId
,
poExtList
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"车道数据查询异常:"
,
e
);
log
.
error
(
"车道数据查询异常:"
,
e
);
throw
new
OptServiceException
(
e
);
throw
new
OptServiceException
(
e
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/CommonCrossIdDateTimeVO.java
View file @
dbf5d81c
...
@@ -18,9 +18,14 @@ import java.util.Date;
...
@@ -18,9 +18,14 @@ import java.util.Date;
@NoArgsConstructor
@NoArgsConstructor
@ApiModel
(
value
=
"CommonCrossIdDateTimeVO"
)
@ApiModel
(
value
=
"CommonCrossIdDateTimeVO"
)
public
class
CommonCrossIdDateTimeVO
{
public
class
CommonCrossIdDateTimeVO
{
@ApiModelProperty
(
value
=
"分析粒度【5m:五分钟 10m:10分钟 30m:30分钟 1h:一小时】"
)
private
String
granularity
;
@ApiModelProperty
(
value
=
"路口ID"
)
@ApiModelProperty
(
value
=
"路口ID"
)
@NotBlank
(
message
=
"路口编号不能为空"
)
@NotBlank
(
message
=
"路口编号不能为空"
)
private
String
crossId
;
private
String
crossId
;
@ApiModelProperty
(
value
=
"车道IDs"
)
@NotBlank
(
message
=
"车道ids不能为空"
)
private
String
ids
;
@ApiModelProperty
(
value
=
"开始时间"
)
@ApiModelProperty
(
value
=
"开始时间"
)
@NotNull
(
message
=
"开始日期不能为空"
)
@NotNull
(
message
=
"开始日期不能为空"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
...
...
signal-optimize-service/src/main/resources/logback-spring.xml
View file @
dbf5d81c
...
@@ -68,7 +68,7 @@
...
@@ -68,7 +68,7 @@
</rollingPolicy>
</rollingPolicy>
</appender>
</appender>
<root
level=
"
INFO
"
>
<root
level=
"
debug
"
>
<appender-ref
ref=
"consoleLog"
/>
<appender-ref
ref=
"consoleLog"
/>
<appender-ref
ref=
"fileInfoLog"
/>
<appender-ref
ref=
"fileInfoLog"
/>
<appender-ref
ref=
"fileErrorLog"
/>
<appender-ref
ref=
"fileErrorLog"
/>
...
...
wj-databus/src/main/java/net/wanji/databus/dao/mapper/CrossLaneDataHistMapper.java
View file @
dbf5d81c
...
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
...
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.po.CrossLaneDataHistPO
;
import
net.wanji.databus.po.CrossLaneDataHistPO
;
import
net.wanji.databus.po.CrossLaneDataHistPOExt
;
import
net.wanji.databus.po.CrossLaneDataHistPOExt
;
import
net.wanji.databus.vo.CrossLaneDataHistVOExt
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
...
@@ -26,4 +27,14 @@ public interface CrossLaneDataHistMapper extends BaseMapper<CrossLaneDataHistPO>
...
@@ -26,4 +27,14 @@ public interface CrossLaneDataHistMapper extends BaseMapper<CrossLaneDataHistPO>
Integer
selectCountByCrossIdAndTimeSpan
(
String
crossId
,
int
startTimeStamp
,
int
endTimeStamp
);
Integer
selectCountByCrossIdAndTimeSpan
(
String
crossId
,
int
startTimeStamp
,
int
endTimeStamp
);
List
<
CrossLaneDataHistPOExt
>
selectByCrossIdAndTimeSpan
(
String
crossId
,
int
startTimeStamp
,
int
endTimeStamp
);
List
<
CrossLaneDataHistPOExt
>
selectByCrossIdAndTimeSpan
(
String
crossId
,
int
startTimeStamp
,
int
endTimeStamp
);
/**
* 车道级查询
* @param crossId 路口id
* @param startStamp
* @param endStamp
* @param ids 车道id集合
* @return
*/
List
<
CrossLaneDataHistVOExt
>
selectByCrossIdAndTimeIds
(
String
crossId
,
int
startStamp
,
int
endStamp
,
String
granularity
,
List
<
String
>
ids
);
}
}
wj-databus/src/main/java/net/wanji/databus/vo/CrossLaneDataHistVOExt.java
0 → 100644
View file @
dbf5d81c
package
net
.
wanji
.
databus
.
vo
;
import
lombok.Data
;
import
net.wanji.databus.po.CrossLaneDataRealTimePO
;
/**
* @author duanruiming
* @date 2023/03/12 20:53
*/
@Data
public
class
CrossLaneDataHistVOExt
extends
CrossLaneDataRealTimePO
{
// 方向
private
Integer
dir
;
// 车道序号,从左车道开始编号11、12、13...
private
Integer
sort
;
// 转向
private
Integer
turn
;
}
wj-databus/src/main/resources/mapper/CrossLaneDataHistMapper.xml
View file @
dbf5d81c
...
@@ -113,4 +113,71 @@
...
@@ -113,4 +113,71 @@
and batch_time
<![CDATA[ >= ]]>
#{startTimeStamp}
and batch_time
<![CDATA[ >= ]]>
#{startTimeStamp}
and batch_time
<![CDATA[ <= ]]>
#{endTimeStamp};
and batch_time
<![CDATA[ <= ]]>
#{endTimeStamp};
</select>
</select>
<!-- 车道级查询 -->
<select
id=
"selectByCrossIdAndTimeIds"
resultType=
"net.wanji.databus.vo.CrossLaneDataHistVOExt"
>
SELECT
t1.id AS id,
t2.dir AS dir,
t2.turn AS turn,
t2.sort AS sort,
<choose>
<!-- 小时 -->
<when
test=
"granularity==1"
>
DATE_FORMAT(start_time, '%Y-%m-%d %H:00:00') AS startTime,
</when>
<!-- 分钟 -->
<otherwise>
DATE_FORMAT(
CONCAT( DATE ( t1.start_time ), ' ', HOUR ( t1.start_time ), ':', FLOOR( MINUTE ( t1.start_time ) / #{granularity} ) * #{granularity} ),
'%Y-%m-%d %H:%i:00'
) AS startTime,
</otherwise>
</choose>
sum( t1.flow ) AS flow,
sum( t1.traffic_flow_C ) AS trafficFlowC,
sum( t1.traffic_flow_B ) AS trafficFlowB,
sum( t1.traffic_flow_A ) AS trafficFlowA,
avg( t1.speed ) AS speed,
avg( t1.vehhead_dist ) AS vehheadDist,
avg( t1.vehhead_time ) AS vehheadTime,
t1.queue_length,
t1.delay_time,
t1.stop_times,
t1.vehhead_time,
t1.vehhead_dist,
t1.batch_time,
t1.time_occupancy,
t1.vehicle_nums_ratio_mean,
t1.start_time,
t1.v_85,
t1.non_motor_flow,
t1.time_occupancy,
t1.vehicle_length_ratio_mean
FROM
t_base_lane_info t2
LEFT JOIN t_lane_data_hist t1 ON t1.id = t2.id
WHERE
1 = 1
<if
test=
"crossId != null"
>
AND t2.cross_id = #{crossId}
</if>
<if
test=
"ids != null"
>
AND t2.id IN
<foreach
item=
"id"
index=
"index"
collection=
"ids"
open=
"("
separator=
","
close=
")"
>
#{id}
</foreach>
</if>
and t1.batch_time
<![CDATA[ >= ]]>
#{startStamp}
and t1.batch_time
<![CDATA[ <= ]]>
#{endStamp}
GROUP BY
t2.dir,
t2.turn,
t2.sort
ORDER BY
t1.start_time DESC,
t2.dir
</select>
</mapper>
</mapper>
\ No newline at end of file
wj-databus/src/main/resources/mapper/CrossTurnDataHistMapper.xml
View file @
dbf5d81c
...
@@ -80,63 +80,64 @@
...
@@ -80,63 +80,64 @@
<!-- 交通指标转向级统计查询:条件:路口id、时间、驶入方向、转向 -->
<!-- 交通指标转向级统计查询:条件:路口id、时间、驶入方向、转向 -->
<select
id=
"selectByCrossIdTurn"
resultType=
"net.wanji.databus.vo.CrossTurnDataHistVO"
>
<select
id=
"selectByCrossIdTurn"
resultType=
"net.wanji.databus.vo.CrossTurnDataHistVO"
>
SELECT
SELECT
cross_id AS crossId,
t1.
cross_id AS crossId,
in_dir AS inDir,
t1.
in_dir AS inDir,
turn_type AS turnType,
t
1.t
urn_type AS turnType,
<choose>
<choose>
<!-- 小时 -->
<!-- 小时 -->
<when
test=
"granularity==1"
>
<when
test=
"granularity==1"
>
DATE_FORMAT(start_time, '%Y-%m-%d %H:00:00') AS startTime,
DATE_FORMAT(
t2.
start_time, '%Y-%m-%d %H:00:00') AS startTime,
</when>
</when>
<!-- 分钟 -->
<!-- 分钟 -->
<otherwise>
<otherwise>
DATE_FORMAT(
DATE_FORMAT(
CONCAT( DATE (
start_time ), ' ', HOUR ( start_time ), ':', FLOOR( MINUTE (
start_time ) / #{granularity} ) * #{granularity} ),
CONCAT( DATE (
t2.start_time ), ' ', HOUR ( t2.start_time ), ':', FLOOR( MINUTE ( t2.
start_time ) / #{granularity} ) * #{granularity} ),
'%Y-%m-%d %H:%i:00'
'%Y-%m-%d %H:%i:00'
) AS startTime,
) AS startTime,
</otherwise>
</otherwise>
</choose>
</choose>
SUM( flow ) AS flow,
SUM(
t2.
flow ) AS flow,
avg( traffic_flow_C
) AS trafficFlowC,
COALESCE(sum( t2.traffic_flow_C ), 0
) AS trafficFlowC,
avg( traffic_flow_B
) AS trafficFlowB,
COALESCE(sum( t2.traffic_flow_B ), 0
) AS trafficFlowB,
avg( traffic_flow_A
) AS trafficFlowA,
COALESCE(sum( t2.traffic_flow_A ), 0
) AS trafficFlowA,
avg( speed ) AS speed,
avg(
t2.
speed ) AS speed,
MAX( queue_length ) AS queueLength,
MAX(
t2.
queue_length ) AS queueLength,
AVG( stop_times ) AS stopTimes
AVG(
t2.
stop_times ) AS stopTimes
FROM
FROM
t_cross_turn_data_hist
t_base_cross_turn_info t1
LEFT JOIN t_cross_turn_data_hist t2 ON t1.id = t2.id
WHERE
WHERE
1 = 1
1 = 1
<if
test=
"crossId != null"
>
<if
test=
"crossId != null"
>
AND cross_id = #{crossId}
AND
t1.
cross_id = #{crossId}
</if>
</if>
<if
test=
"inDirList != null"
>
<if
test=
"inDirList != null"
>
AND in_dir IN
AND
t1.
in_dir IN
<foreach
item=
"inDir"
index=
"index"
collection=
"inDirList"
<foreach
item=
"inDir"
index=
"index"
collection=
"inDirList"
open=
"("
separator=
","
close=
")"
>
open=
"("
separator=
","
close=
")"
>
#{inDir}
#{inDir}
</foreach>
</foreach>
</if>
</if>
<if
test=
"turnTypeList != null"
>
<if
test=
"turnTypeList != null"
>
AND turn_type IN
AND t
1.t
urn_type IN
<foreach
item=
"turnType"
index=
"index"
collection=
"turnTypeList"
<foreach
item=
"turnType"
index=
"index"
collection=
"turnTypeList"
open=
"("
separator=
","
close=
")"
>
open=
"("
separator=
","
close=
")"
>
#{turnType}
#{turnType}
</foreach>
</foreach>
</if>
</if>
and batch_time
<![CDATA[ >= ]]>
#{startStamp}
and
t2.
batch_time
<![CDATA[ >= ]]>
#{startStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
and
t2.
batch_time
<![CDATA[ <= ]]>
#{endStamp}
GROUP BY
GROUP BY
cross_id,
t1.
cross_id,
in_dir,
t1.
in_dir,
turn_type,
t
1.t
urn_type,
startT
ime
t2.start_t
ime
ORDER BY
ORDER BY
startT
ime DESC,
t2.start_t
ime DESC,
in_dir,
t1.
in_dir,
turn_type
t
1.t
urn_type
</select>
</select>
<select
id=
"selectMetricHistDTO"
resultType=
"net.wanji.databus.dto.MetricHistDTO"
>
<select
id=
"selectMetricHistDTO"
resultType=
"net.wanji.databus.dto.MetricHistDTO"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment