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
44654fad
Commit
44654fad
authored
Nov 25, 2022
by
wuxiaokai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
控制指令接口-优化
parent
f1afad27
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
546 additions
and
686 deletions
+546
-686
HttpRequest.java
...n/java/net/wanji/utc/common/commonentity/HttpRequest.java
+4
-4
ControlCommandController.java
...va/net/wanji/utc/controller/ControlCommandController.java
+57
-166
HkGetSignalMethodService.java
.../java/net/wanji/utc/service/HkGetSignalMethodService.java
+0
-24
ControlCommandService.java
.../net/wanji/utc/service/control/ControlCommandService.java
+94
-0
HKControlCommandServiceImpl.java
...t/wanji/utc/service/impl/HKControlCommandServiceImpl.java
+276
-232
HkGetSignalMethodServiceImpl.java
.../wanji/utc/service/impl/HkGetSignalMethodServiceImpl.java
+0
-258
FieldUtil.java
...c-service/src/main/java/net/wanji/utc/util/FieldUtil.java
+44
-0
PhaseLockVO.java
...c-service/src/main/java/net/wanji/utc/vo/PhaseLockVO.java
+2
-1
PlanSendVO.java
...tc-service/src/main/java/net/wanji/utc/vo/PlanSendVO.java
+40
-0
ScheduleSendVO.java
...in/java/net/wanji/utc/vo/schedulesend/ScheduleSendVO.java
+28
-0
CrossInfoMapper.xml
...utc-service/src/main/resources/mapper/CrossInfoMapper.xml
+1
-1
No files found.
signal-utc-service/src/main/java/net/wanji/utc/common/commonentity/HttpRequest.java
View file @
44654fad
...
...
@@ -23,13 +23,13 @@ public class HttpRequest {
public
HttpRequest
(
String
manufacturerAbbr
,
String
apiCode
)
{
// 获取请求地址
ApiInfoPO
apiInfoP
O
=
Constants
.
getManufacturerUrlMap
(
manufacturerAbbr
+
ApiInfoPO
apiInfoP
o
=
Constants
.
getManufacturerUrlMap
(
manufacturerAbbr
+
Constants
.
SEPARATOR_UNDER_LINE
+
apiCode
);
if
(
apiInfoP
O
==
null
)
{
if
(
apiInfoP
o
==
null
)
{
throw
new
NoSuchApiException
(
"没有此接口信息,请在t_manufacturer_api_info表中添加"
);
}
url
=
apiInfoP
O
.
getAddress
();
httpMethod
=
HttpMethod
.
valueOf
(
apiInfoP
O
.
getMethod
());
url
=
apiInfoP
o
.
getAddress
();
httpMethod
=
HttpMethod
.
valueOf
(
apiInfoP
o
.
getMethod
());
headers
=
buildHeader
();
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/controller/ControlCommandController.java
View file @
44654fad
...
...
@@ -4,25 +4,18 @@ import io.swagger.annotations.Api;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.utc.common.Result
;
import
net.wanji.utc.common.exception.ControlException
;
import
net.wanji.utc.common.typeenum.BasicEnum
;
import
net.wanji.utc.mapper.CrossInfoMapper
;
import
net.wanji.utc.po.CrossInfoPO
;
import
net.wanji.utc.service.ControlCommandService
;
import
net.wanji.utc.util.ListUtil
;
import
net.wanji.utc.service.control.ControlCommandService
;
import
net.wanji.utc.vo.PhaseLockVO
;
import
net.wanji.utc.vo.plansend.PlanSendVO
;
import
net.wanji.utc.vo.PlanSendVO
;
import
net.wanji.utc.vo.schedulesend.ScheduleSendVO
;
import
net.wanji.utc.vo.timeplan.TimePlanVO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.Date
;
import
java.util.List
;
import
static
net
.
wanji
.
utc
.
common
.
ResultEnum
.
BODY_NOT_MATCH
;
import
static
net
.
wanji
.
utc
.
common
.
constant
.
Constants
.*
;
/**
* 控制指令接口
...
...
@@ -39,241 +32,139 @@ public class ControlCommandController {
@Value
(
"${signal.mock}"
)
private
boolean
mock
;
@Resource
private
CrossInfoMapper
crossInfoMapper
;
@Autowired
private
ControlCommandService
hkControlCommandService
;
/**
* 信号机方案下发
*
* @param planSendVO 方案下发VO
* @return {@link Result}<{@link T}>
*/
@ApiOperation
(
value
=
"方案下发-基础方案下发"
,
notes
=
"方案下发-基础方案下发"
)
@PostMapping
(
"/schemeSend"
)
public
<
T
>
Result
<
T
>
schemeSend
(
@RequestParam
String
signalId
,
@RequestParam
Integer
command
)
{
if
(
mock
)
{
return
Result
.
success
();
}
Integer
manufacturerId
=
check
(
signalId
);
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
allRedControl
(
signalId
,
null
,
null
,
command
);
}
else
{
// todo else
return
null
;
}
public
<
T
>
Result
<
T
>
schemeSend
(
@RequestBody
PlanSendVO
planSendVO
)
throws
Exception
{
return
hkControlCommandService
.
planSend
(
planSendVO
);
}
/**
* 相位配时下发
* todo
* 相位配时下发?
* 下发信号机方案?
*
* @param
signalId 信号
id
* @param
code 信号机
id
* @param timePlans 配时方案实体类
* @return {@link Result}<{@link T}>
* @throws InterruptedException 中断异常
*/
@ApiOperation
(
value
=
"相位配时下发-相位的绿灯、绿闪、行闪、黄灯、红灯配时下发"
,
notes
=
"相位配时下发-相位的绿灯、绿闪、行闪、黄灯、红灯配时下发"
)
@PostMapping
(
"/phaseTimingSend"
)
public
<
T
>
Result
<
T
>
phaseTimingSend
(
@RequestParam
String
signalId
,
@RequestBody
List
<
TimePlanVO
>
timePlans
)
{
if
(
mock
)
{
return
Result
.
success
();
}
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
signalId
);
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
if
(
ListUtil
.
isEmpty
(
timePlans
))
{
throw
new
ControlException
(
"参数错误,下发方案信息为空。"
);
}
//开启适配服务
for
(
TimePlanVO
timePlanVo
:
timePlans
)
{
timePlanVo
.
setCode
(
crossInfoPo
.
getCode
());
timePlanVo
.
setManufacturerAbbr
(
crossInfoPo
.
getManufacturerId
()
+
""
);
}
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
phaseTimingSend
(
timePlans
);
}
else
{
// todo else
return
null
;
}
public
<
T
>
Result
<
T
>
phaseTimingSend
(
@RequestParam
String
code
,
@RequestBody
List
<
TimePlanVO
>
timePlans
)
throws
InterruptedException
{
return
hkControlCommandService
.
phaseTimingSend
(
code
,
timePlans
);
}
/**
*
计划下发
*
下发信号机计划
*
* @param signalId 信号id
* @param planSendVO 计划下发VO
* @return {@link Result}<{@link T}>
*/
@ApiOperation
(
value
=
"计划下发-计划信息、时段信息"
,
notes
=
"计划下发-计划信息、时段信息"
)
@PostMapping
(
"/planSend"
)
public
<
T
>
Result
<
T
>
planSend
(
@RequestParam
String
signalId
,
@RequestBody
PlanSendVO
planSendVO
)
{
if
(
mock
)
{
return
Result
.
success
();
}
try
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
signalId
);
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
planSendVO
.
setCode
(
crossInfoPo
.
getCode
());
planSendVO
.
setManufacturerAbbr
(
crossInfoPo
.
getManufacturerId
()
+
""
);
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
planSend
(
planSendVO
);
}
else
{
// todo else
return
null
;
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"计划下发-计划信息、时段信息异常:{}"
,
ex
.
getMessage
());
throw
new
ControlException
(
"计划下发-计划信息、时段信息异常"
);
}
public
<
T
>
Result
<
T
>
planSend
(
@RequestBody
PlanSendVO
planSendVO
)
throws
Exception
{
return
hkControlCommandService
.
planSend
(
planSendVO
);
}
/**
* 全红控制
*
* @param
signalId
信号机id
* @param command
指令
* @param
code
信号机id
* @param command 指令
* @return {@link Result}<{@link T}>
*/
@ApiOperation
(
value
=
"全红控制-路口全红控制/恢复"
,
notes
=
"全红控制-路口全红控制/恢复"
)
@PostMapping
(
"/allRedControl"
)
public
<
T
>
Result
<
T
>
allRedControl
(
@RequestParam
String
signalId
,
@RequestParam
Integer
command
)
{
if
(
mock
)
{
return
Result
.
success
();
}
Integer
manufacturerId
=
check
(
signalId
);
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
allRedControl
(
signalId
,
null
,
null
,
command
);
}
else
{
// todo else
return
null
;
}
public
<
T
>
Result
<
T
>
allRedControl
(
@RequestParam
String
code
,
@RequestParam
Integer
command
)
throws
Exception
{
return
hkControlCommandService
.
setSignalControl
(
code
,
command
,
ALL_RED_CONTROL
);
}
/**
* 黄闪控制
*
* @param
signalId
信号id
* @param command
命令
* @param
code
信号id
* @param command 命令
* @return {@link Result}<{@link T}>
*/
@ApiOperation
(
value
=
"黄闪控制-路口黄闪控制/恢复"
,
notes
=
"黄闪控制-路口黄闪控制/恢复"
)
@PostMapping
(
"/yellowLightControl"
)
public
<
T
>
Result
<
T
>
yellowLightControl
(
@RequestParam
String
signalId
,
@RequestParam
Integer
command
)
{
if
(
mock
)
{
return
Result
.
success
();
}
Integer
manufacturerId
=
check
(
signalId
);
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
yellowLightControl
(
signalId
,
null
,
null
,
command
);
}
else
{
// todo else
return
null
;
}
public
<
T
>
Result
<
T
>
yellowLightControl
(
@RequestParam
String
code
,
@RequestParam
Integer
command
)
throws
Exception
{
return
hkControlCommandService
.
setSignalControl
(
code
,
command
,
YELLOW_LIGHT_CONTROL
);
}
/**
* 关灯控制
*
* @param
signalId
信号id
* @param command
命令
* @param
code
信号id
* @param command 命令
* @return {@link Result}<{@link T}>
*/
@ApiOperation
(
value
=
"关灯控制-路口关灯控制/开灯"
,
notes
=
"关灯控制-路口关灯控制/开灯"
)
@PostMapping
(
"/closeLightControl"
)
public
<
T
>
Result
<
T
>
closeLightControl
(
@RequestParam
String
signalId
,
@RequestParam
Integer
command
)
{
if
(
mock
)
{
return
Result
.
success
();
}
Integer
manufacturerId
=
check
(
signalId
);
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
closeLightControl
(
signalId
,
null
,
null
,
command
);
}
else
{
// todo else
return
null
;
}
public
<
T
>
Result
<
T
>
closeLightControl
(
@RequestParam
String
code
,
@RequestParam
Integer
command
)
throws
Exception
{
return
hkControlCommandService
.
setSignalControl
(
code
,
command
,
CLOSE_LIGHT_CONTROL
);
}
/**
* 步进控制
*
* @param
signalId
信号id
* @param command
命令
* @param stepNum
一步num
* @param
code
信号id
* @param command 命令
* @param stepNum 一步num
* @return {@link Result}<{@link T}>
*/
@ApiOperation
(
value
=
"步进控制-步进控制/恢复"
,
notes
=
"步进控制-步进控制/恢复"
)
@PostMapping
(
"/stepControl"
)
public
<
T
>
Result
<
T
>
stepControl
(
@RequestParam
String
signalId
,
public
<
T
>
Result
<
T
>
stepControl
(
@RequestParam
String
code
,
@RequestParam
Integer
command
,
@RequestParam
int
stepNum
)
{
if
(
mock
)
{
return
Result
.
success
();
}
Integer
manufacturerId
=
check
(
signalId
);
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
stepControl
(
signalId
,
null
,
null
,
command
,
stepNum
);
}
else
{
// todo else
return
null
;
}
@RequestParam
int
stepNum
)
throws
Exception
{
return
hkControlCommandService
.
stepControl
(
code
,
command
,
stepNum
);
}
/**
* 恢复时间表
*
* @param
signalId
信号id
* @param
code
信号id
* @return {@link Result}<{@link T}>
*/
@ApiOperation
(
value
=
"恢复时间表-恢复路口时间表执行"
,
notes
=
"恢复时间表-恢复路口时间表执行"
)
@PostMapping
(
"/recoverSchedule"
)
public
<
T
>
Result
<
T
>
recoverSchedule
(
@RequestParam
String
code
)
throws
Exception
{
return
hkControlCommandService
.
recoverSchedule
(
code
);
}
/**
* 时间表下发
*
* @param scheduleSendVO 时间表下发VO
* @return {@link Result}<{@link T}>
* @throws Exception 异常
*/
@ApiOperation
(
value
=
"时间表下发-时间表信息"
,
notes
=
"时间表下发-时间表信息"
)
@PostMapping
(
"/scheduleSend"
)
public
<
T
>
Result
<
T
>
scheduleSend
(
@RequestParam
String
signalId
)
{
if
(
mock
)
{
return
Result
.
success
();
}
Integer
manufacturerId
=
check
(
signalId
);
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
scheduleSend
(
signalId
,
null
,
null
,
null
);
}
else
{
// todo else
return
null
;
}
public
<
T
>
Result
<
T
>
scheduleSend
(
@RequestBody
ScheduleSendVO
scheduleSendVO
)
throws
Exception
{
return
hkControlCommandService
.
scheduleSend
(
scheduleSendVO
);
}
/**
* 锁定控制
*
* @param
signalId 信号id
* @param
phaseLock 相位锁定实体类
* @return {@link Result}<{@link T}>
* @throws Exception 异常
*/
@ApiOperation
(
value
=
"锁定控制-相位锁定/解锁"
,
notes
=
"锁定控制-相位锁定/解锁"
)
@PostMapping
(
"/lockControl"
)
public
<
T
>
Result
<
T
>
lockControl
(
@RequestParam
String
signalId
,
@RequestBody
PhaseLockVO
phaseLock
)
{
if
(
mock
)
{
return
Result
.
success
();
}
try
{
Integer
manufacturerId
=
check
(
signalId
);
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
hkControlCommandService
.
lockControl
(
signalId
,
phaseLock
);
}
else
{
// todo else
return
null
;
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"锁定控制-相位锁定/解锁异常:{}"
,
ex
.
getMessage
());
throw
new
ControlException
(
"锁定控制-相位锁定/解锁异常"
);
}
}
private
Integer
check
(
String
signalId
)
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
signalId
);
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
return
crossInfoPo
.
getManufacturerId
();
public
<
T
>
Result
<
T
>
lockControl
(
@RequestBody
PhaseLockVO
phaseLock
)
throws
Exception
{
return
hkControlCommandService
.
lockControl
(
phaseLock
);
}
}
signal-utc-service/src/main/java/net/wanji/utc/service/HkGetSignalMethodService.java
deleted
100644 → 0
View file @
f1afad27
package
net
.
wanji
.
utc
.
service
;
import
net.wanji.utc.common.baseentity.BaseCrossInfo
;
import
net.wanji.utc.vo.signal.SignalLightStateVo
;
import
java.util.List
;
/**
* @author meng.wang
* @version 1.0
* Created on 2020/09/10
* @description: [海康信号灯厂商接口service]
*/
public
interface
HkGetSignalMethodService
{
/**
* @description: 获取路口信号机的实时灯态数据
* @param baseSignals 信号机列表
* @return SignalInfoVo 信号机状态
* @author meng.wang
* @date 2020/09/10
*/
List
<
SignalLightStateVo
>
queryHkSignalInfo
(
List
<
BaseCrossInfo
>
baseSignals
);
}
signal-utc-service/src/main/java/net/wanji/utc/service/ControlCommandService.java
→
signal-utc-service/src/main/java/net/wanji/utc/service/
control/
ControlCommandService.java
View file @
44654fad
package
net
.
wanji
.
utc
.
service
;
package
net
.
wanji
.
utc
.
service
.
control
;
import
net.wanji.utc.common.Result
;
import
net.wanji.utc.vo.PhaseLockVO
;
import
net.wanji.utc.vo.plansend.PlanSendVO
;
import
net.wanji.utc.vo.PlanSendVO
;
import
net.wanji.utc.vo.schedulesend.ScheduleSendVO
;
import
net.wanji.utc.vo.timeplan.TimePlanVO
;
import
java.util.List
;
...
...
@@ -25,87 +26,65 @@ public interface ControlCommandService {
*
* @param planSendVO 计划下发VO
* @return {@link Result}<{@link T}>
* @throws Exception 异常
*/
<
T
>
Result
<
T
>
planSend
(
PlanSendVO
planSendVO
)
throws
Exception
;
/**
* 时间表下发
*
* @param scheduleSendVO 时间表下发VO
* @return {@link Result}<{@link T}>
*/
<
T
>
Result
<
T
>
scheduleSend
(
S
tring
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
;
<
T
>
Result
<
T
>
scheduleSend
(
S
cheduleSendVO
scheduleSendVO
)
throws
Exception
;
/**
* 锁定控制
*
* @param signalId 信号机编号
* @param phaseLock 相位锁定实体类
* @return {@link Result}<{@link T}>
* @throws Exception 异常
*/
<
T
>
Result
<
T
>
lockControl
(
String
signalId
,
PhaseLockVO
phaseLock
)
throws
Exception
;
<
T
>
Result
<
T
>
lockControl
(
PhaseLockVO
phaseLock
)
throws
Exception
;
/**
* 步进控制
*
* @param signalId 信号机编号
* @param sourceType 厂家简称 QS/SCATS/HS/HK
* @param signalType 信号机类型 QS/SCATS/HS/HK
* @param command 1 开始步进 0 取消步进
* @param stepNum 0 顺序步进 n 跳过n个相位
* @return {@link Result}<{@link T}>
*/
<
T
>
Result
<
T
>
stepControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
,
Integer
stepNum
);
/**
* 全红控制
*
* @param signalId 信号机编号
* @param sourceType 厂家简称
* @param signalType 信号机类型
* @param command 1 全红控制 0 取消全红
* @return {@link Result}<{@link T}>
*/
<
T
>
Result
<
T
>
allRedControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
);
/**
* 黄闪控制
*
* @param signalId 信号机编号
* @param sourceType 厂家简称
* @param signalType 信号机类型
* @param command 1 黄闪控制 0 取消黄闪
* @param code 信号机编号
* @param command 1 开始步进 0 取消步进
* @param stepNum 0 顺序步进 n 跳过n个相位
* @return {@link Result}<{@link T}>
* @throws Exception 异常
*/
<
T
>
Result
<
T
>
yellowLightControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
;
<
T
>
Result
<
T
>
stepControl
(
String
code
,
Integer
command
,
Integer
stepNum
)
throws
Exception
;
/**
*
关灯控制
*
设置信号机控制模式
*
* @param signalId 信号机编号
* @param sourceType 厂家简称
* @param signalType 信号机类型
* @param command 1 开灯 0 关灯
* @param code 信号机编号
* @param command 指令 1 开 0 关
* @param commandType 命令类型
* @return {@link Result}<{@link T}>
* @throws Exception 异常
*/
<
T
>
Result
<
T
>
closeLightControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
;
<
T
>
Result
<
T
>
setSignalControl
(
String
code
,
Integer
command
,
Integer
commandType
)
throws
Exception
;
/**
* 恢复时间表
*
* @param signalId 信号机编号
* @param sourceType 厂家简称 QS/SCATS/HS/HK
* @param signalType 信号机类型 QS/SCATS/HS/HK
* @param command 1 恢复
* @param code 信号机编号
* @return {@link Result}<{@link T}>
*/
<
T
>
Result
<
T
>
recoverSchedule
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
;
<
T
>
Result
<
T
>
recoverSchedule
(
String
code
)
throws
Exception
;
/**
* 相位配时下发
*
* @param code 信号机id
* @param timePlans 批量下发的配时数据
* @return {@link Result}<{@link T}>
* @throws InterruptedException 中断异常
*/
<
T
>
Result
<
T
>
phaseTimingSend
(
List
<
TimePlanVO
>
timePlans
)
;
<
T
>
Result
<
T
>
phaseTimingSend
(
String
code
,
List
<
TimePlanVO
>
timePlans
)
throws
InterruptedException
;
/**
* 相位差下发
...
...
signal-utc-service/src/main/java/net/wanji/utc/service/impl/HKControlCommandServiceImpl.java
View file @
44654fad
...
...
@@ -10,16 +10,19 @@ import net.wanji.utc.common.Result;
import
net.wanji.utc.common.baseentity.BaseCrossInfo
;
import
net.wanji.utc.common.exception.ControlException
;
import
net.wanji.utc.common.typeenum.BasicEnum
;
import
net.wanji.utc.entity.SignalRunring
;
import
net.wanji.utc.mapper.CrossInfoMapper
;
import
net.wanji.utc.mapper.CrossPhaseMapper
;
import
net.wanji.utc.po.CrossInfoPO
;
import
net.wanji.utc.po.CrossPhasePO
;
import
net.wanji.utc.service.ControlCommandService
;
import
net.wanji.utc.service.HkGetSignalMethodService
;
import
net.wanji.utc.service.control.ControlCommandService
;
import
net.wanji.utc.service.runninginfo.HkLightsStatusService
;
import
net.wanji.utc.util.FieldUtil
;
import
net.wanji.utc.util.ListUtil
;
import
net.wanji.utc.vo.LightsStatusVO
;
import
net.wanji.utc.vo.PhaseLockVO
;
import
net.wanji.utc.vo.plansend.PlanSendVO
;
import
net.wanji.utc.vo.plansend.SectionPlan
;
import
net.wanji.utc.vo.plansend.TimeSlice
;
import
net.wanji.utc.vo.signal.SignalLightStateVo
;
import
net.wanji.utc.vo.signal.SignalRingVo
;
import
net.wanji.utc.vo.PlanSendVO
;
import
net.wanji.utc.vo.schedulesend.ScheduleSendVO
;
import
net.wanji.utc.vo.timeplan.Phase
;
import
net.wanji.utc.vo.timeplan.Ring
;
import
net.wanji.utc.vo.timeplan.TimePlanVO
;
...
...
@@ -29,6 +32,7 @@ import javax.annotation.Resource;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
static
net
.
wanji
.
utc
.
common
.
ResultEnum
.
BODY_NOT_MATCH
;
import
static
net
.
wanji
.
utc
.
common
.
constant
.
Constants
.*;
/**
...
...
@@ -40,7 +44,7 @@ import static net.wanji.utc.common.constant.Constants.*;
public
class
HKControlCommandServiceImpl
implements
ControlCommandService
{
@Resource
private
Hk
GetSignalMethodService
hkGetSignalMethod
Service
;
private
Hk
LightsStatusService
hkLightsStatus
Service
;
@Resource
private
ArtemisConfig
artemisConfig
;
...
...
@@ -48,6 +52,9 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
@Resource
private
CrossPhaseMapper
crossPhaseMapper
;
@Resource
private
CrossInfoMapper
crossInfoMapper
;
@Override
public
<
T
>
Result
<
T
>
schemeSend
()
{
return
null
;
...
...
@@ -55,54 +62,170 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
@Override
public
<
T
>
Result
<
T
>
planSend
(
PlanSendVO
planSendVO
)
throws
Exception
{
if
(
sendPlanInfo
(
planSendVO
))
{
if
(
sendTimeInfo
(
planSendVO
))
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
planSendVO
.
getCode
());
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
// 厂商ID
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
Map
<
String
,
Object
>
fieldMap
=
FieldUtil
.
fieldMethod
(
planSendVO
);
// 下发时段方案
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"downloadTimeSpands"
),
JSON
.
toJSONString
(
fieldMap
),
null
,
null
,
"application/json"
,
null
);
JSONObject
obj
=
JSON
.
parseObject
(
strResult
);
if
(
obj
.
getInteger
(
HK_CODE_KEY
).
equals
(
HK_SUCCESS_CODE
))
{
return
Result
.
success
();
}
return
Result
.
error
(
"下发指令失败"
);
}
else
{
// todo else
return
null
;
}
return
Result
.
error
(
"下发指令失败"
);
}
@Override
public
<
T
>
Result
<
T
>
scheduleSend
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
{
return
controlSignal
(
signalId
,
NORMAL_RUNNING_CONTROL
);
public
<
T
>
Result
<
T
>
scheduleSend
(
ScheduleSendVO
param
)
throws
Exception
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
param
.
getCode
());
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
param
.
setManufacturerAbbr
(
String
.
valueOf
(
manufacturerId
));
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
downloadSchedule
(
param
);
}
else
{
// todo else
return
null
;
}
}
@Override
public
<
T
>
Result
<
T
>
lockControl
(
String
signalId
,
PhaseLockVO
phaseLock
)
throws
Exception
{
if
(
phaseLock
.
getCommand
().
equals
(
TRUE
))
{
return
updateManualLock
(
signalId
,
phaseLock
.
getLockTime
());
}
else
{
return
controlSignal
(
signalId
,
UNLOCK_RUNNING_CONTROL
);
private
<
T
>
Result
<
T
>
downloadSchedule
(
ScheduleSendVO
param
)
throws
Exception
{
JSONArray
jsonBody
=
new
JSONArray
();
jsonBody
.
add
(
param
.
getCode
());
// 通过获取当前运行的日期数据,获取最新的日期方案id
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"uploadDate"
),
jsonBody
.
toString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
obj
=
JSON
.
parseObject
(
strResult
);
//日期 id
int
id
=
0
;
if
(
obj
.
getInteger
(
HK_CODE_KEY
).
equals
(
HK_SUCCESS_CODE
))
{
// 获取日期列表
JSONArray
schedulesArray
=
obj
.
getJSONArray
(
"data"
).
getJSONObject
(
0
).
getJSONArray
(
"schedules"
);
JSONObject
scheduleObj
=
schedulesArray
.
getJSONObject
(
schedulesArray
.
size
()
-
1
);
id
=
scheduleObj
.
getInteger
(
"id"
);
}
//拼接参数
JSONArray
schedulesArrayParam
=
new
JSONArray
();
// 获取传入的星期数组
JSONArray
weeks
=
JSON
.
parseArray
(
JSON
.
toJSONString
(
param
.
getWeeks
()));
// 获取传入的特殊日期数组
JSONArray
specialDays
=
JSON
.
parseArray
(
JSON
.
toJSONString
(
param
.
getSpecialDays
()));
if
(
null
!=
weeks
)
{
//去重,获取所有的运行方案号
Set
<
String
>
set
=
new
HashSet
<>();
for
(
int
i
=
0
;
i
<
weeks
.
size
();
i
++)
{
String
sectionPlanId
=
weeks
.
getJSONObject
(
i
).
getString
(
"sectionplanid"
);
set
.
add
(
sectionPlanId
);
}
if
(
null
!=
specialDays
)
{
for
(
int
i
=
0
;
i
<
specialDays
.
size
();
i
++)
{
String
sectionPlanId
=
specialDays
.
getJSONObject
(
i
).
getString
(
"sectionplanid"
);
set
.
add
(
sectionPlanId
);
}
}
int
num
=
0
;
for
(
String
planNo
:
set
)
{
JSONObject
schedulesObjectParam
=
new
JSONObject
();
List
<
Integer
>
weeksListParam
=
new
ArrayList
<>();
// 遍历星期列表,拼接星期集合参数
for
(
int
i
=
0
;
i
<
weeks
.
size
();
i
++)
{
JSONObject
week
=
weeks
.
getJSONObject
(
i
);
String
weekNum
=
week
.
getString
(
"weeknum"
);
String
sectionplanid
=
week
.
getString
(
"sectionplanid"
);
if
(
planNo
.
equals
(
sectionplanid
))
{
weeksListParam
.
add
(
Integer
.
valueOf
(
weekNum
));
}
}
// 遍历特殊日期列表,拼接特殊日期集合参数
if
(
null
!=
specialDays
)
{
List
<
String
>
specialDaysListParam
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
specialDays
.
size
();
i
++)
{
JSONObject
specialDay
=
specialDays
.
getJSONObject
(
i
);
String
datestr
=
specialDay
.
getString
(
"datestr"
);
String
sectionplanid
=
specialDay
.
getString
(
"sectionplanid"
);
if
(
planNo
.
equals
(
sectionplanid
))
{
specialDaysListParam
.
add
(
datestr
);
}
}
schedulesObjectParam
.
put
(
"dates"
,
specialDaysListParam
);
//0 说明 dates 内的日期是日期集合,1 说明是dates 内的数据是日期范围
schedulesObjectParam
.
put
(
"isPeriod"
,
0
);
}
//scheduleNo 日期号 ,支持返回【1~128】
if
(
id
+
set
.
size
()
>
128
)
{
schedulesObjectParam
.
put
(
"scheduleNo"
,
128
-
set
.
size
()
-
(++
num
));
}
else
{
schedulesObjectParam
.
put
(
"scheduleNo"
,
id
+
(++
num
));
}
schedulesObjectParam
.
put
(
"planNo"
,
planNo
);
schedulesObjectParam
.
put
(
"weeks"
,
weeksListParam
);
schedulesArrayParam
.
add
(
schedulesObjectParam
);
}
}
JSONObject
bodyObjectParam
=
new
JSONObject
();
bodyObjectParam
.
put
(
"crossCode"
,
param
.
getCode
());
bodyObjectParam
.
put
(
"schedules"
,
schedulesArrayParam
);
// 下发路口运行计划方案
String
updateResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"downloadSchedule"
),
bodyObjectParam
.
toJSONString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
updateObject
=
JSON
.
parseObject
(
updateResult
);
if
(
updateObject
.
getInteger
(
HK_CODE_KEY
).
equals
(
HK_SUCCESS_CODE
))
{
return
Result
.
success
();
}
return
Result
.
error
(
"下发指令失败"
);
}
private
<
T
>
Result
<
T
>
updateManualLock
(
String
signalId
,
Integer
lockTime
)
throws
Exception
{
JSONObject
param
=
new
JSONObject
();
param
.
put
(
"crossCode"
,
signalId
);
param
.
put
(
"controlType"
,
LOCK_RUNNING_CONTROL
);
setSignalControlLaneInfos
(
signalId
,
param
);
param
.
put
(
"controlNo"
,
0
);
//控制时长,单位 s,0 则持续控制
param
.
put
(
"duration"
,
lockTime
*
60
);
return
setSignalControl
(
param
);
@Override
public
<
T
>
Result
<
T
>
lockControl
(
PhaseLockVO
phaseLock
)
throws
Exception
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
phaseLock
.
getCode
());
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
if
(
phaseLock
.
getCommand
().
equals
(
TRUE
))
{
return
updateManualLock
(
phaseLock
.
getCode
(),
phaseLock
.
getLockTime
());
}
else
{
return
controlSignal
(
phaseLock
.
getCode
(),
UNLOCK_RUNNING_CONTROL
);
}
}
else
{
// todo else
return
null
;
}
}
/**
* 控制命令为灯态锁定时,设置相关车道参数信息
*
* @param signalId, 信号机id
*/
private
void
setSignalControlLaneInfos
(
String
signalId
,
JSONObject
obj
)
throws
Exception
{
//获取当前运行方案的相位id
List
<
SignalLightStateVo
>
signalInfos
=
getSignalInfoVos
(
signalId
);
List
<
SignalRingVo
>
runrings
=
signalInfos
.
get
(
0
).
getRings
();
private
<
T
>
Result
<
T
>
updateManualLock
(
String
code
,
Integer
lockTime
)
throws
Exception
{
Map
<
String
,
Object
>
param
=
new
HashMap
<
String
,
Object
>()
{{
put
(
"crossCode"
,
code
);
put
(
"controlType"
,
LOCK_RUNNING_CONTROL
);
}};
// 控制命令为灯态锁定时,设置相关车道参数信息
// 获取当前运行方案的相位id
List
<
SignalRunring
>
runrings
=
getSignalInfoVos
(
code
).
get
(
0
).
getRunrings
();
//HK 为单环
Integer
phaseId
=
Integer
.
valueOf
(
runrings
.
get
(
0
).
getPhaseId
());
//获取某一路口下海康相位和车道关系
Map
<
Integer
,
JSONArray
>
laneArrayMap
=
new
HashMap
<>();
getPhaseRelationLanes
(
signalId
,
laneArrayMap
,
new
HashMap
<>());
obj
.
put
(
"laneInfos"
,
laneArrayMap
.
get
(
phaseId
));
getPhaseRelationLanes
(
code
,
laneArrayMap
,
new
HashMap
<>());
param
.
put
(
"laneInfos"
,
laneArrayMap
.
get
(
phaseId
));
param
.
put
(
"controlNo"
,
0
);
//控制时长,单位 s,0 则持续控制
param
.
put
(
"duration"
,
lockTime
*
60
);
return
setSignalControl
(
param
);
}
/**
...
...
@@ -127,64 +250,97 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
JSONArray
laneList
=
lanesObject
.
getJSONArray
(
"lanes"
);
// 存入相位与车道集合
laneArrayMap
.
put
(
phaseNo
,
laneList
);
for
(
int
j
=
0
;
j
<
laneList
.
size
();
j
++)
{
/*
for (int j = 0; j < laneList.size(); j++) {
JSONObject laneObject = laneList.getJSONObject(j);
String key = laneObject.getString("direction") + SEPARATOR_UNDER_LINE + laneObject.getString("turn");
// 存入方向和转向对应的车道编号
laneNoMap.put(key, laneObject.getInteger("laneNo"));
}
}
*/
}
}
}
@Override
public
<
T
>
Result
<
T
>
stepControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
,
Integer
stepNum
)
{
if
(
command
.
equals
(
TRUE
))
{
return
updateManualStep
(
signalId
,
stepNum
);
public
<
T
>
Result
<
T
>
stepControl
(
String
code
,
Integer
command
,
Integer
stepNum
)
throws
Exception
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
code
);
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
if
(
command
.
equals
(
TRUE
))
{
return
updateManualStep
(
code
,
stepNum
);
}
else
{
return
controlSignal
(
code
,
CANCEL_STEP_CONTROL
);
}
}
else
{
return
controlSignal
(
signalId
,
CANCEL_STEP_CONTROL
);
// todo else
return
null
;
}
}
@Override
public
<
T
>
Result
<
T
>
allRedControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
{
Integer
runningMode
=
command
.
equals
(
TRUE
)
?
ALL_RED_CONTROL
:
NORMAL_RUNNING_CONTROL
;
return
controlSignal
(
signalId
,
runningMode
);
}
@Override
public
<
T
>
Result
<
T
>
yellowLightControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
{
Integer
runningMode
=
command
.
equals
(
TRUE
)
?
YELLOW_LIGHT_CONTROL
:
NORMAL_RUNNING_CONTROL
;
return
controlSignal
(
signalId
,
runningMode
);
}
@Override
public
<
T
>
Result
<
T
>
closeLightControl
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
{
Integer
runningMode
=
command
.
equals
(
TRUE
)
?
CLOSE_LIGHT_CONTROL
:
NORMAL_RUNNING_CONTROL
;
return
controlSignal
(
signalId
,
runningMode
);
public
<
T
>
Result
<
T
>
setSignalControl
(
String
code
,
Integer
command
,
Integer
commandType
)
throws
Exception
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
code
);
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
Integer
runningMode
=
command
.
equals
(
TRUE
)
?
commandType
:
NORMAL_RUNNING_CONTROL
;
return
controlSignal
(
code
,
runningMode
);
}
else
{
// todo else
return
null
;
}
}
@Override
public
<
T
>
Result
<
T
>
recoverSchedule
(
String
signalId
,
String
sourceType
,
String
signalType
,
Integer
command
)
{
return
null
;
public
<
T
>
Result
<
T
>
recoverSchedule
(
String
code
)
throws
Exception
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
code
);
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
return
controlSignal
(
code
,
NORMAL_RUNNING_CONTROL
);
}
else
{
// todo else
return
null
;
}
}
@Override
public
<
T
>
Result
<
T
>
phaseTimingSend
(
List
<
TimePlanVO
>
timePlans
)
{
try
{
public
<
T
>
Result
<
T
>
phaseTimingSend
(
String
code
,
List
<
TimePlanVO
>
timePlans
)
throws
InterruptedException
{
CrossInfoPO
crossInfoPo
=
crossInfoMapper
.
selectByCode
(
code
);
if
(
crossInfoPo
==
null
)
{
throw
new
ControlException
(
BODY_NOT_MATCH
.
getResultCode
(),
"参数错误,信号机ID不正确。"
);
}
if
(
ListUtil
.
isEmpty
(
timePlans
))
{
throw
new
ControlException
(
"参数错误,下发方案信息为空。"
);
}
//开启适配服务
for
(
TimePlanVO
timePlanVo
:
timePlans
)
{
timePlanVo
.
setCode
(
crossInfoPo
.
getCode
());
timePlanVo
.
setManufacturerAbbr
(
crossInfoPo
.
getManufacturerId
()
+
""
);
}
Integer
manufacturerId
=
crossInfoPo
.
getManufacturerId
();
if
(
manufacturerId
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
()))
{
for
(
TimePlanVO
timePlanVo
:
timePlans
)
{
if
(!
phaseTimingSend
(
timePlanVo
))
{
//发送失败
log
.
error
(
"批量下发配时方案信息到路口信号机或信号系统中异常!"
);
throw
new
ControlException
(
"批量下发配时方案信息到路口信号机或信号系统中异常!"
);
}
//暂停1秒
Thread
.
sleep
(
1000
);
if
(
timePlans
.
size
()
>
1
)
{
//暂停1秒
Thread
.
sleep
(
1000
);
}
}
return
Result
.
success
();
}
catch
(
InterruptedException
e
)
{
log
.
error
(
"批量配时方案下发-->线程等待异常!{}"
,
e
.
getMessage
());
throw
new
ControlException
(
"批量配时方案下发-->线程等待异常!"
)
;
}
else
{
// todo else
return
null
;
}
}
...
...
@@ -227,9 +383,11 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
bodyObjectParam
.
put
(
"crossCode"
,
timePlan
.
getCode
());
bodyObjectParam
.
put
(
"patternList"
,
patternArrayParam
);
//获取下发配时方案的url
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"updateTimePlans"
),
bodyObjectParam
.
toJSONString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
object
=
JSON
.
parseObject
(
strResult
);
return
HK_SUCCESS_CODE
.
equals
(
object
.
getInteger
(
HK_CODE_KEY
));
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"updateTimePlans"
),
bodyObjectParam
.
toJSONString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
obj
=
JSON
.
parseObject
(
strResult
);
return
HK_SUCCESS_CODE
.
equals
(
obj
.
getInteger
(
HK_CODE_KEY
));
}
catch
(
Exception
e
)
{
log
.
error
(
"系统繁忙,服务器端内部错误!"
,
e
);
throw
new
ControlException
(
"系统繁忙,服务器端内部错误!"
);
...
...
@@ -248,12 +406,11 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
int
controlNo
=
0
;
if
(
0
!=
stepNum
)
{
//根据当前实时灯态获取运行的相位
SignalLightStateVo
signalInfoVo
=
getSignalInfoVos
(
signalId
).
get
(
0
);
LightsStatusVO
lightsStatusVO
=
getSignalInfoVos
(
signalId
).
get
(
0
);
//暂时按单环处理
SignalRingVo
signalRunring
=
signalInfoVo
.
getRings
().
get
(
0
);
String
phaseId
=
signalRunring
.
getPhaseId
();
String
phaseId
=
lightsStatusVO
.
getRunrings
().
get
(
0
).
getPhaseId
();
//获取方案数据列表
List
<
CrossPhasePO
>
baseCrossPhasePlanList
=
crossPhaseMapper
.
selectByCrossIdAndPlanId
(
signalInfoVo
.
getCode
(),
signalInfoVo
.
getPhasePlanId
());
List
<
CrossPhasePO
>
baseCrossPhasePlanList
=
crossPhaseMapper
.
selectByCrossIdAndPlanId
(
lightsStatusVO
.
getCode
(),
lightsStatusVO
.
getPhasePlanId
());
Map
<
String
,
List
<
CrossPhasePO
>>
groupByPhase
=
baseCrossPhasePlanList
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossPhasePO:
:
getPhaseNo
));
//根据相位获取当前相序
int
newPhaseOrderId
=
0
;
...
...
@@ -275,39 +432,58 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
return
setSignalControl
(
bodyObjectParam
);
}
private
<
T
>
Result
<
T
>
setSignalControl
(
Map
<
String
,
Object
>
param
)
{
try
{
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"SetSignalControl"
),
JSON
.
toJSONString
(
param
),
null
,
null
,
"application/json"
,
null
);
JSONObject
obj
=
JSON
.
parseObject
(
strResult
);
if
(
HK_SUCCESS_CODE
.
equals
(
obj
.
getInteger
(
HK_CODE_KEY
)))
{
return
Result
.
success
();
}
return
Result
.
error
();
}
catch
(
Exception
e
)
{
log
.
error
(
"系统繁忙,服务器端内部错误!"
,
e
);
throw
new
ControlException
(
"系统繁忙,服务器端内部错误!"
);
}
}
/**
* @param
signalId
信号机编号
* @param
code
信号机编号
* @param runningMode 0-多时段控制模式 1-关灯、2-黄闪、3-全红、11-取消步进控制、12-灯态锁定、13-灯态解锁
*/
private
<
T
>
Result
<
T
>
controlSignal
(
String
signalId
,
Integer
runningMode
)
{
private
<
T
>
Result
<
T
>
controlSignal
(
String
code
,
Integer
runningMode
)
throws
Exception
{
//执行恢复时间表方案命令
if
(
NORMAL_RUNNING_CONTROL
.
equals
(
runningMode
)
||
CANCEL_STEP_CONTROL
.
equals
(
runningMode
))
{
//根据实时灯态获取当前运行模式
SignalLightStateVo
signalInfoVo
=
getSignalInfoVos
(
signalId
).
get
(
0
);
List
<
BaseCrossInfo
>
baseSignals
=
new
ArrayList
<>();
BaseCrossInfo
baseSignal
=
new
BaseCrossInfo
();
baseSignal
.
setCode
(
code
);
baseSignal
.
setManufacturerAbbr
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getAbbr
());
baseSignals
.
add
(
baseSignal
);
LightsStatusVO
lightsStatusVO
=
hkLightsStatusService
.
getHkLightsStatus
(
baseSignals
).
get
(
0
);
//如果当前模式已经是定周期,就不在执行恢复时间表方案指令
if
(
FIXED_CYCLE_MODE
.
equals
(
Integer
.
valueOf
(
signalInfoVo
.
getRunMode
())))
{
if
(
FIXED_CYCLE_MODE
.
equals
(
Integer
.
valueOf
(
lightsStatusVO
.
getRunMode
())))
{
throw
new
ControlException
(
"当前控制模式是定周期控制,请勿下发恢复命令"
);
}
}
Map
<
String
,
Object
>
param
=
new
HashMap
<
String
,
Object
>()
{
private
static
final
long
serialVersionUID
=
-
3468722905882654820L
;
JSONObject
bodyObjectParam
=
new
JSONObject
();
bodyObjectParam
.
put
(
"crossCode"
,
signalId
);
bodyObjectParam
.
put
(
"controlType"
,
runningMode
);
bodyObjectParam
.
put
(
"controlNo"
,
0
);
//控制时长,单位 s,0 则持续控制
bodyObjectParam
.
put
(
"duration"
,
0
);
return
setSignalControl
(
bodyObjectParam
);
}
private
<
T
>
Result
<
T
>
setSignalControl
(
JSONObject
bodyObjectParam
)
{
try
{
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"updateLockPhase"
),
bodyObjectParam
.
toJSONString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
object
=
JSON
.
parseObject
(
strResult
);
if
(
HK_SUCCESS_CODE
.
equals
(
object
.
getInteger
(
HK_CODE_KEY
)))
{
return
Result
.
success
();
{
put
(
"crossCode"
,
code
);
put
(
"controlType"
,
runningMode
);
put
(
"controlNo"
,
0
);
//控制时长,单位 s,0 则持续控制
put
(
"duration"
,
0
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"系统繁忙,服务器端内部错误!"
,
e
);
};
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"SetSignalControl"
),
JSON
.
toJSONString
(
param
),
null
,
null
,
"application/json"
,
null
);
JSONObject
object
=
JSON
.
parseObject
(
strResult
);
if
(
HK_SUCCESS_CODE
.
equals
(
object
.
getInteger
(
HK_CODE_KEY
)))
{
return
Result
.
success
();
}
return
Result
.
error
(
"下发指令失败"
);
}
...
...
@@ -315,144 +491,12 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
/**
* 根据信号机获取灯态列表
*/
private
List
<
SignalLightStateVo
>
getSignalInfoVos
(
String
signalId
)
{
private
List
<
LightsStatusVO
>
getSignalInfoVos
(
String
code
)
{
List
<
BaseCrossInfo
>
baseSignals
=
new
ArrayList
<>();
BaseCrossInfo
baseSignal
=
new
BaseCrossInfo
();
baseSignal
.
setCode
(
signalId
);
baseSignal
.
setCode
(
code
);
baseSignal
.
setManufacturerAbbr
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getAbbr
());
baseSignals
.
add
(
baseSignal
);
return
hkGetSignalMethodService
.
queryHkSignalInfo
(
baseSignals
);
}
/**
* 下发时段信息
*
* @param planSendVO 计划下发VO
* @return boolean
*/
private
boolean
sendTimeInfo
(
PlanSendVO
planSendVO
)
throws
Exception
{
//拼接参数
JSONObject
bodyObjectParam
=
new
JSONObject
();
// 拼接参数 海康后续修改不传入 controlType ,controlType 取值默认为原始值
List
<
SectionPlan
>
sectionPlans
=
planSendVO
.
getSectionPlans
();
for
(
SectionPlan
plan
:
sectionPlans
)
{
//拼接参数,信号机方案对象
JSONObject
signalObjectParam
=
new
JSONObject
();
//拼接参数,信号列表
JSONArray
signalArrayParam
=
new
JSONArray
();
//拼接参数,方案列表
JSONArray
planArrayParam
=
new
JSONArray
();
//拼接参数,时段列表
JSONArray
sectionArrayParam
=
new
JSONArray
();
List
<
TimeSlice
>
timeSlices
=
plan
.
getTimeSlices
();
for
(
TimeSlice
timeSlice
:
timeSlices
)
{
JSONObject
section
=
new
JSONObject
();
section
.
put
(
"timeSecNo"
,
timeSlice
.
getTimeSliceId
());
section
.
put
(
"patternNo"
,
timeSlice
.
getTimePlanId
());
section
.
put
(
"beginTime"
,
timeSlice
.
getStartTime
());
sectionArrayParam
.
add
(
section
);
}
JSONObject
planObjectParam
=
new
JSONObject
();
planObjectParam
.
put
(
"planNo"
,
plan
.
getSectionPlanId
());
planObjectParam
.
put
(
"planName"
,
plan
.
getSectionPlanDesc
());
planObjectParam
.
put
(
"sectionList"
,
sectionArrayParam
);
planArrayParam
.
add
(
planObjectParam
);
signalObjectParam
.
put
(
"crossCode"
,
planSendVO
.
getCode
());
signalObjectParam
.
put
(
"planList"
,
planArrayParam
);
signalArrayParam
.
add
(
signalObjectParam
);
bodyObjectParam
.
put
(
"data"
,
signalArrayParam
);
}
// 下发时段方案
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"updateSectionPlans"
),
bodyObjectParam
.
toJSONString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
object
=
JSON
.
parseObject
(
strResult
);
return
object
.
getInteger
(
HK_CODE_KEY
).
equals
(
HK_SUCCESS_CODE
);
}
/**
* 下发计划信息
*
* @param planSendVO 计划下发VO
* @return boolean
* @throws Exception 异常
*/
private
boolean
sendPlanInfo
(
PlanSendVO
planSendVO
)
throws
Exception
{
JSONArray
body
=
new
JSONArray
();
body
.
add
(
planSendVO
.
getCode
());
Map
<
String
,
String
>
path
=
getPathMapByApiCode
(
"queryRunPlan"
);
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
path
,
body
.
toString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
jsonObj
=
JSON
.
parseObject
(
strResult
);
//日期 id
int
id
=
1
;
if
(
jsonObj
.
getInteger
(
HK_CODE_KEY
).
equals
(
HK_SUCCESS_CODE
))
{
// 获取日期列表
JSONArray
schedulesArray
=
jsonObj
.
getJSONArray
(
"data"
).
getJSONObject
(
0
).
getJSONArray
(
"schedules"
);
JSONObject
scheduleObj
=
schedulesArray
.
getJSONObject
(
schedulesArray
.
size
()
-
1
);
id
=
scheduleObj
.
getInteger
(
"id"
);
}
//拼接参数
JSONObject
bodyObjectParam
=
new
JSONObject
();
JSONArray
schedulesArrayParam
=
new
JSONArray
();
// 获取传入的星期数组
JSONArray
weeks
=
JSON
.
parseArray
(
JSON
.
toJSONString
(
planSendVO
.
getWeeks
()));
// 获取传入的特殊日期数组
JSONArray
specialDays
=
JSON
.
parseArray
(
JSON
.
toJSONString
(
planSendVO
.
getSpecialDays
()));
if
(
null
!=
weeks
)
{
//去重,获取所有的运行方案号
Set
<
String
>
set
=
new
HashSet
<>();
for
(
int
i
=
0
;
i
<
weeks
.
size
();
i
++)
{
String
sectionPlanId
=
weeks
.
getJSONObject
(
i
).
getString
(
"sectionPlanId"
);
set
.
add
(
sectionPlanId
);
}
if
(
null
!=
specialDays
)
{
for
(
int
i
=
0
;
i
<
specialDays
.
size
();
i
++)
{
String
sectionPlanId
=
specialDays
.
getJSONObject
(
i
).
getString
(
"sectionPlanId"
);
set
.
add
(
sectionPlanId
);
}
}
int
num
=
0
;
for
(
String
planNo
:
set
)
{
JSONObject
schedulesObjectParam
=
new
JSONObject
();
List
<
Integer
>
weeksListParam
=
new
ArrayList
<>();
// 遍历星期列表,拼接星期集合参数
for
(
int
i
=
0
;
i
<
weeks
.
size
();
i
++)
{
JSONObject
week
=
weeks
.
getJSONObject
(
i
);
String
weekNum
=
week
.
getString
(
"weekNum"
);
String
sectionPlanId
=
week
.
getString
(
"sectionPlanId"
);
if
(
planNo
.
equals
(
sectionPlanId
))
{
weeksListParam
.
add
(
Integer
.
valueOf
(
weekNum
));
}
}
// 遍历特殊日期列表,拼接特殊日期集合参数
if
(
null
!=
specialDays
)
{
List
<
String
>
specialDaysListParam
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
specialDays
.
size
();
i
++)
{
JSONObject
specialDay
=
specialDays
.
getJSONObject
(
i
);
String
dateStr
=
specialDay
.
getString
(
"dateStr"
);
String
sectionPlanId
=
specialDay
.
getString
(
"sectionPlanId"
);
if
(
planNo
.
equals
(
sectionPlanId
))
{
specialDaysListParam
.
add
(
dateStr
);
}
}
schedulesObjectParam
.
put
(
"dates"
,
specialDaysListParam
);
//0 说明 dates 内的日期是日期集合,1 说明是dates 内的数据是日期范围
schedulesObjectParam
.
put
(
"isPeriod"
,
0
);
}
//scheduleNo 日期号 ,支持返回【1~128】
if
(
id
+
set
.
size
()
>
128
)
{
schedulesObjectParam
.
put
(
"scheduleNo"
,
128
-
set
.
size
()
-
(++
num
));
}
else
{
schedulesObjectParam
.
put
(
"scheduleNo"
,
id
+
(++
num
));
}
schedulesObjectParam
.
put
(
"planNo"
,
planNo
);
schedulesObjectParam
.
put
(
"weeks"
,
weeksListParam
);
schedulesArrayParam
.
add
(
schedulesObjectParam
);
}
}
bodyObjectParam
.
put
(
"crossCode"
,
planSendVO
.
getCode
());
bodyObjectParam
.
put
(
"schedules"
,
schedulesArrayParam
);
// 下发路口运行计划方案
String
updateResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
getPathMapByApiCode
(
"updateRunPlan"
),
bodyObjectParam
.
toJSONString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
updateObject
=
JSON
.
parseObject
(
updateResult
);
return
updateObject
.
getInteger
(
HK_CODE_KEY
).
equals
(
HK_SUCCESS_CODE
);
return
hkLightsStatusService
.
getHkLightsStatus
(
baseSignals
);
}
}
signal-utc-service/src/main/java/net/wanji/utc/service/impl/HkGetSignalMethodServiceImpl.java
deleted
100644 → 0
View file @
f1afad27
package
net
.
wanji
.
utc
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.hikvision.artemis.sdk.ArtemisHttpUtil
;
import
com.hikvision.artemis.sdk.config.ArtemisConfig
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.utc.common.baseentity.BaseCrossInfo
;
import
net.wanji.utc.common.constant.Constants
;
import
net.wanji.utc.service.HkGetSignalMethodService
;
import
net.wanji.utc.vo.CrossLanesVo
;
import
net.wanji.utc.vo.signal.SignalLightStateVo
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
static
net
.
wanji
.
utc
.
common
.
constant
.
Constants
.
HK_CODE_KEY
;
import
static
net
.
wanji
.
utc
.
common
.
constant
.
Constants
.
HK_SUCCESS_CODE
;
/**
* @author hfx
* Created on 2020/09/10
* @description: [海康信号灯厂商接口service实现]
*/
@Slf4j
@Service
public
class
HkGetSignalMethodServiceImpl
implements
HkGetSignalMethodService
{
@Resource
private
ArtemisConfig
artemisConfig
;
/**
* 获取路口信号机的实时灯态数据
*/
@Override
@SuppressWarnings
(
"unchecked"
)
public
List
<
SignalLightStateVo
>
queryHkSignalInfo
(
List
<
BaseCrossInfo
>
baseSignals
)
{
List
<
SignalLightStateVo
>
result
=
new
ArrayList
<>();
SignalLightStateVo
infoVo
;
try
{
Map
<
String
,
String
>
path
=
Constants
.
getPathMapByApiCode
(
"querySignalInfo"
);
for
(
BaseCrossInfo
entity
:
baseSignals
)
{
JSONObject
jsonBody
=
new
JSONObject
();
jsonBody
.
put
(
"pageNo"
,
1
);
jsonBody
.
put
(
"pageSize"
,
20
);
JSONObject
searchObj
=
new
JSONObject
();
JSONArray
crossCodes
=
new
JSONArray
();
crossCodes
.
add
(
entity
.
getCode
());
searchObj
.
put
(
"crossCodes"
,
crossCodes
);
jsonBody
.
put
(
"searchObj"
,
searchObj
);
String
strResult
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
path
,
jsonBody
.
toJSONString
(),
null
,
null
,
"application/json"
,
null
);
JSONObject
object
=
JSON
.
parseObject
(
strResult
);
//根据路口ID 找到对应通道号上的灯组方向
List
<
CrossLanesVo
>
crossDetailInfo
=
Constants
.
getTelesemeLaneRealMap
().
get
(
entity
.
getCode
());
if
(
HK_SUCCESS_CODE
.
equals
(
object
.
getInteger
(
HK_CODE_KEY
)))
{
JSONObject
data
=
object
.
getJSONObject
(
"data"
);
JSONArray
list
=
data
.
getJSONArray
(
"list"
);
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
infoVo
=
new
SignalLightStateVo
();
JSONObject
jsonObject
=
list
.
getJSONObject
(
i
);
String
patternNo
=
jsonObject
.
getString
(
"patternNo"
);
// 方案编号
JSONArray
rings
=
jsonObject
.
getJSONArray
(
"rings"
);
// 环列表
JSONArray
channelState
=
jsonObject
.
getJSONArray
(
"channelState"
);
// 灯组列表
infoVo
.
setRunMode
(
jsonObject
.
getString
(
"controlType"
));
// 运行模式
infoVo
.
setPhasePlanId
(
patternNo
);
// 相位方案号
int
cycleLen
=
jsonObject
.
getIntValue
(
"cycle"
);
// 周期时长
int
curRunTime
=
jsonObject
.
getIntValue
(
"curRunTime"
);
// 当前运行时长
int
cycleCountDown
=
cycleLen
-
curRunTime
;
// 周期剩余时长
infoVo
.
setCode
(
entity
.
getCode
());
infoVo
.
setManufacturerAbbr
(
entity
.
getManufacturerAbbr
());
infoVo
.
setCycleCountDown
(
cycleCountDown
);
infoVo
.
setCycleLen
(
cycleLen
);
Map
<
String
,
Object
>
dirLampGroupMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
phaseMap
=
new
HashMap
<>();
// 循环构建灯组对象(从路口详情接口中获取灯组关系)
for
(
int
k
=
0
;
k
<
channelState
.
size
();
k
++)
{
JSONObject
cobj
=
channelState
.
getJSONObject
(
k
);
int
channelNo
=
cobj
.
getIntValue
(
"channelNo"
);
String
color
=
transferHKLampGroup
(
cobj
.
getIntValue
(
"state"
));
for
(
CrossLanesVo
vo
:
crossDetailInfo
)
{
if
(
vo
.
getChannelNo
()
==
channelNo
)
{
String
direction
=
handleDirection
(
vo
.
getDirection
().
toString
());
String
trun
=
handleTurnTypeByDt
(
vo
.
getTurn
());
if
(
dirLampGroupMap
.
get
(
direction
)
!=
null
)
{
Map
<
String
,
String
>
mstr
=
(
Map
<
String
,
String
>)
dirLampGroupMap
.
get
(
direction
);
mstr
.
put
(
trun
,
color
);
dirLampGroupMap
.
put
(
direction
,
mstr
);
}
else
{
Map
<
String
,
String
>
lamp
=
new
HashMap
<>();
lamp
.
put
(
trun
,
color
);
dirLampGroupMap
.
put
(
direction
,
lamp
);
}
}
}
}
//循环相位列表
for
(
int
j
=
0
;
j
<
rings
.
size
();
j
++)
{
JSONObject
jsonObj
=
rings
.
getJSONObject
(
j
);
JSONArray
phaseList
=
jsonObj
.
getJSONArray
(
"phaseList"
);
for
(
int
k
=
0
;
k
<
phaseList
.
size
();
k
++)
{
JSONObject
phase
=
phaseList
.
getJSONObject
(
k
);
String
phaseNo
=
phase
.
getString
(
"phaseNo"
);
Integer
vehicleStatus
=
phase
.
getInteger
(
"vehicleStatus"
);
Integer
phaseLength
=
phase
.
getInteger
(
"phaseLength"
);
Integer
red
=
phase
.
getInteger
(
"red"
);
Integer
yellow
=
phase
.
getInteger
(
"yellow"
);
Integer
green
=
phaseLength
-
yellow
-
red
;
phaseMap
.
put
(
phaseNo
,
green
);
if
(
2
!=
vehicleStatus
)
{
infoVo
.
setPhaseId
(
phaseNo
);
}
}
}
infoVo
.
setDirLampGroupMap
(
dirLampGroupMap
);
infoVo
.
setPhaseMap
(
phaseMap
);
result
.
add
(
infoVo
);
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"系统繁忙,服务器端内部错误!"
,
e
);
}
return
result
;
}
/**
* 灯组颜色转换
*/
private
String
transferHKLampGroup
(
int
state
)
{
String
color
;
switch
(
state
)
{
case
1
:
color
=
"green"
;
break
;
case
2
:
case
6
:
color
=
"red"
;
break
;
case
3
:
color
=
"yellow"
;
break
;
case
4
:
color
=
"greenFlash"
;
break
;
case
5
:
color
=
"yellowFlash"
;
break
;
case
7
:
color
=
"lightsOut"
;
break
;
case
8
:
color
=
"redFlash"
;
break
;
default
:
color
=
""
;
break
;
}
return
color
;
}
/**
* 处理方向
* 车道进口方向,方向:北 1 ,东北 2 ,东 3 ,东南 4 ,南 5 ,西南 6 ,西 7 ,西北 8
*
* @param direction 海康方向: 0 其他,1 由南向北,2 由北向南,3 由东向西,4 由西向东,5 西南向东北,6 西北向东南,7 东南向西北,8 东北向西南,9 北行人,10 南行人,11 西行人,12 东行人
*/
private
String
handleDirection
(
String
direction
)
{
String
nDirection
;
switch
(
direction
)
{
case
"1"
:
case
"10"
:
nDirection
=
"5"
;
break
;
case
"2"
:
case
"9"
:
nDirection
=
"1"
;
break
;
case
"3"
:
case
"12"
:
nDirection
=
"3"
;
break
;
case
"4"
:
case
"11"
:
nDirection
=
"7"
;
break
;
case
"5"
:
nDirection
=
"6"
;
break
;
case
"6"
:
nDirection
=
"8"
;
break
;
case
"7"
:
nDirection
=
"4"
;
break
;
case
"8"
:
nDirection
=
"2"
;
break
;
//其他
default
:
nDirection
=
"0"
;
}
return
nDirection
;
}
/**
* 灯态车道转向
* 处理转向 1.左转、2.直行、3.右转、4.掉头、5.向左合流、6.向右合流、7.右掉头、8.左转直行、9.直行右转、
* 10.左转掉头、11.右转掉头、12.直行掉头、13.直行右掉头、14.左转右转、15.左转直行右转、16.左转右转掉头、17.左转右转右掉头、18.左转直行掉
*
* @param movement 海康转向: 1 直行,2 左转,3 右转,4 掉头,5 直左,6 直右,7 行人,8 左右,9 通行(左直右),10 左转掉头
*/
private
String
handleTurnTypeByDt
(
int
movement
)
{
//处理海康转向 5,6,7,8,9,10 暂时不处理
String
turnType
;
switch
(
movement
)
{
case
1
:
turnType
=
"2"
;
break
;
case
2
:
turnType
=
"1"
;
break
;
case
3
:
turnType
=
"3"
;
break
;
case
4
:
turnType
=
"4"
;
break
;
case
5
:
turnType
=
"8"
;
break
;
case
6
:
turnType
=
"9"
;
break
;
case
8
:
turnType
=
"14"
;
break
;
case
9
:
turnType
=
"15"
;
break
;
case
10
:
turnType
=
"10"
;
break
;
default
:
turnType
=
"0"
;
}
return
turnType
;
}
}
signal-utc-service/src/main/java/net/wanji/utc/util/FieldUtil.java
0 → 100644
View file @
44654fad
package
net
.
wanji
.
utc
.
util
;
import
com.alibaba.fastjson.JSON
;
import
net.wanji.utc.vo.PlanSendVO
;
import
java.lang.reflect.Field
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author wuxiaokai
* @date 2022/11/24 15:37:26
*/
public
class
FieldUtil
{
/**
* 将对象的属性转成 key - Value
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
Map
<
String
,
Object
>
fieldMethod
(
T
t
)
throws
IllegalAccessException
{
if
(
t
==
null
)
{
return
null
;
}
Field
[]
fields
=
t
.
getClass
().
getDeclaredFields
();
Map
<
String
,
Object
>
map
=
new
HashMap
<>(
fields
.
length
);
for
(
Field
field
:
fields
)
{
field
.
setAccessible
(
true
);
if
(
field
.
getType
().
equals
(
List
.
class
))
{
List
<
Object
>
list
=
(
List
<
Object
>)
field
.
get
(
t
);
List
<
Map
<
String
,
Object
>>
list2
=
new
ArrayList
<>(
list
.
size
());
for
(
Object
o
:
list
)
{
Map
<
String
,
Object
>
map1
=
fieldMethod
(
o
);
list2
.
add
(
map1
);
}
map
.
put
(
field
.
getName
(),
list2
);
}
else
{
map
.
put
(
field
.
getName
(),
field
.
get
(
t
));
}
}
return
map
;
}
}
signal-utc-service/src/main/java/net/wanji/utc/vo/PhaseLockVO.java
View file @
44654fad
...
...
@@ -3,6 +3,7 @@ package net.wanji.utc.vo;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
net.wanji.utc.common.baseentity.BaseCrossInfo
;
/**
* 相位锁定实体类
...
...
@@ -12,7 +13,7 @@ import lombok.Data;
*/
@Data
@ApiModel
(
value
=
"PhaseLockVO"
,
description
=
"相位锁定实体类"
)
public
class
PhaseLockVO
{
public
class
PhaseLockVO
extends
BaseCrossInfo
{
/**
* 相位编号
...
...
signal-utc-service/src/main/java/net/wanji/utc/vo/PlanSendVO.java
0 → 100644
View file @
44654fad
package
net
.
wanji
.
utc
.
vo
;
import
lombok.Getter
;
import
lombok.Setter
;
import
net.wanji.utc.common.baseentity.BaseCrossInfo
;
import
java.util.List
;
/**
* @author wuxiaokai
* @date 2022/11/24 15:55:08
*/
@Setter
@Getter
public
class
PlanSendVO
extends
BaseCrossInfo
{
private
List
<
Data
>
data
;
@Setter
@Getter
private
static
class
Data
{
private
String
crossCode
;
private
List
<
Plan
>
planList
;
@Setter
@Getter
private
static
class
Plan
{
private
String
planNo
;
private
List
<
Section
>
sectionList
;
@Setter
@Getter
private
static
class
Section
{
private
String
timeSecNo
;
private
String
patternNo
;
private
String
beginTime
;
}
}
}
}
signal-utc-service/src/main/java/net/wanji/utc/vo/schedulesend/ScheduleSendVO.java
0 → 100644
View file @
44654fad
package
net
.
wanji
.
utc
.
vo
.
schedulesend
;
import
lombok.Data
;
import
net.wanji.utc.common.baseentity.BaseCrossInfo
;
import
net.wanji.utc.vo.plansend.SpecialDay
;
import
net.wanji.utc.vo.plansend.Week
;
import
java.util.List
;
/**
* 时间表下发VO
*
* @author wuxiaokai
* @date 2022/11/23 14:11:09
*/
@Data
public
class
ScheduleSendVO
extends
BaseCrossInfo
{
/**
* 星期
*/
private
List
<
Week
>
weeks
;
/**
* 特殊日期
*/
private
List
<
SpecialDay
>
specialDays
;
}
signal-utc-service/src/main/resources/mapper/CrossInfoMapper.xml
View file @
44654fad
...
...
@@ -51,7 +51,7 @@
select
id,name,code,manufacturer_id,ip,port,location,version,model,install_time,gmt_create,gmt_modified
from t_cross_info
where
id
= #{code}
where
code
= #{code}
</select>
<select
id=
"selectByManufacturerId"
resultMap=
"BaseResultMap"
>
...
...
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