Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
youjj
cloud-platform
Commits
f47c2b95
Commit
f47c2b95
authored
Apr 25, 2019
by
youjj
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
d7862002
a02d6a3c
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
785 additions
and
0 deletions
+785
-0
VehicleWarningMsgBiz.java
...nxincaravan/caravan/vehicle/biz/VehicleWarningMsgBiz.java
+217
-0
RedisKey.java
.../com/xinxincaravan/caravan/vehicle/constant/RedisKey.java
+13
-0
VehicleMsgStatus.java
...xincaravan/caravan/vehicle/constant/VehicleMsgStatus.java
+53
-0
VehicleMsgType.java
...inxincaravan/caravan/vehicle/constant/VehicleMsgType.java
+54
-0
VehicleWarningMsg.java
...nxincaravan/caravan/vehicle/entity/VehicleWarningMsg.java
+59
-0
VehicleWarningRule.java
...xincaravan/caravan/vehicle/entity/VehicleWarningRule.java
+47
-0
VehicleWarningMsgMapper.java
...ravan/caravan/vehicle/mapper/VehicleWarningMsgMapper.java
+17
-0
VehicleWarningRuleMapper.java
...avan/caravan/vehicle/mapper/VehicleWarningRuleMapper.java
+9
-0
VehicleWarningMsgController.java
...van/caravan/vehicle/rest/VehicleWarningMsgController.java
+55
-0
JSUtil.java
...n/java/com/xinxincaravan/caravan/vehicle/util/JSUtil.java
+70
-0
AddVehicleWarningMsgVo.java
...xincaravan/caravan/vehicle/vo/AddVehicleWarningMsgVo.java
+31
-0
QueryVehicleWarningMsgVo.java
...ncaravan/caravan/vehicle/vo/QueryVehicleWarningMsgVo.java
+32
-0
VehicleWarningMsgQueryVo.java
...ncaravan/caravan/vehicle/vo/VehicleWarningMsgQueryVo.java
+68
-0
VehicleWarningMsgMapper.xml
...cle/src/main/resources/mapper/VehicleWarningMsgMapper.xml
+28
-0
VehicleWarningRuleMapper.xml
...le/src/main/resources/mapper/VehicleWarningRuleMapper.xml
+10
-0
VehicleWarningMsgBizTest.java
...caravan/caravan/vehicle/biz/VehicleWarningMsgBizTest.java
+22
-0
No files found.
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/biz/VehicleWarningMsgBiz.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
biz
;
import
com.github.pagehelper.PageHelper
;
import
com.github.pagehelper.PageInfo
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.google.common.collect.ImmutableMap
;
import
com.google.common.collect.Maps
;
import
com.xinxincaravan.caravan.vehicle.common.RestResponse
;
import
com.xinxincaravan.caravan.vehicle.constant.RedisKey
;
import
com.xinxincaravan.caravan.vehicle.constant.VehicleMsgStatus
;
import
com.xinxincaravan.caravan.vehicle.constant.VehicleMsgType
;
import
com.xinxincaravan.caravan.vehicle.entity.Vehicle
;
import
com.xinxincaravan.caravan.vehicle.entity.VehicleWarningMsg
;
import
com.xinxincaravan.caravan.vehicle.entity.VehicleWarningRule
;
import
com.xinxincaravan.caravan.vehicle.mapper.VehicleMapper
;
import
com.xinxincaravan.caravan.vehicle.mapper.VehicleWarningMsgMapper
;
import
com.xinxincaravan.caravan.vehicle.mapper.VehicleWarningRuleMapper
;
import
com.xinxincaravan.caravan.vehicle.util.JSUtil
;
import
com.xinxincaravan.caravan.vehicle.vo.AddVehicleWarningMsgVo
;
import
com.xinxincaravan.caravan.vehicle.vo.PageDataVo
;
import
com.xinxincaravan.caravan.vehicle.vo.QueryVehicleWarningMsgVo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.beanutils.BeanUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.ibatis.session.RowBounds
;
import
org.joda.time.DateTime
;
import
org.joda.time.format.DateTimeFormat
;
import
org.joda.time.format.DateTimeFormatter
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
@Service
@Slf4j
public
class
VehicleWarningMsgBiz
extends
BaseBiz
<
VehicleWarningMsgMapper
,
VehicleWarningMsg
>
{
private
static
final
Integer
CHECK_BATCH_SIZE_VEHICLE
=
100
;
//每批次检查多少辆车
private
static
final
String
PARAM_NAME_4_JS_WARNEDIDANDMSG
=
"idAndMsg"
;
private
static
final
String
PARAM_NAME_4_JS_LAST_DAY_MILEAGE
=
"lastDayMileage"
;
private
static
final
String
PARAM_NAME_4_JS_NOW_STR
=
"nowStr"
;
private
static
final
String
PARAM_NAME_4_JS_VEHICLE
=
"vehicle"
;
private
static
final
String
PARAM_NAME_4_JS_CUR_RULE_ID
=
"curRuleId"
;
private
static
final
String
VEHICLE_CHECK_RULE_FUNCTION_PREFIX
=
"checkIfViolateRule"
;
private
static
final
String
VEHICLE_MSG_KEY_FUNCTION_PREFIX
=
"getMsgKey"
;
public
static
final
DateTimeFormatter
DATE_TIME_FORMATTER
=
DateTimeFormat
.
forPattern
(
"yyyy-MM-dd"
);
@Autowired
private
VehicleWarningRuleMapper
vehicleWarningRuleMapper
;
@Autowired
private
VehicleMapper
vehicleMapper
;
@Autowired
private
RedisTemplate
customRedisTemplate
;
/**
* 增加自定义预警消息
* @param addVehicleWarningMsgVo
* @return
* @throws Exception
*/
public
RestResponse
add
(
AddVehicleWarningMsgVo
addVehicleWarningMsgVo
)
throws
Exception
{
VehicleWarningMsg
vehicleWarningMsg
=
new
VehicleWarningMsg
();
BeanUtils
.
copyProperties
(
vehicleWarningMsg
,
addVehicleWarningMsgVo
);
//新增的都是自定义类型的消息
vehicleWarningMsg
.
setType
(
VehicleMsgType
.
CUSTOM
.
getCode
());
//新增消息默认未处理类型
vehicleWarningMsg
.
setStatus
(
VehicleMsgStatus
.
NOT_PROCESSED
.
getCode
());
mapper
.
insertSelective
(
vehicleWarningMsg
);
return
RestResponse
.
suc
();
}
/**
* 按页查询
* @param queryVehicleWarningMsgVo
* @return
*/
public
PageDataVo
<
VehicleWarningMsg
>
getByPage
(
QueryVehicleWarningMsgVo
queryVehicleWarningMsgVo
){
PageHelper
.
startPage
(
queryVehicleWarningMsgVo
.
getPage
(),
queryVehicleWarningMsgVo
.
getLimit
());
List
<
VehicleWarningMsg
>
vehicleWarningMsgs
=
mapper
.
getByPage
(
queryVehicleWarningMsgVo
);
PageInfo
<
VehicleWarningMsg
>
vehicleWarningMsgPageInfo
=
new
PageInfo
<>(
vehicleWarningMsgs
);
return
PageDataVo
.
pageInfo
(
vehicleWarningMsgPageInfo
);
}
/**
* 处理预警消息(把状态置为已处理)
* @param id
* @return
*/
public
RestResponse
deal
(
Integer
id
){
VehicleWarningMsg
params
=
new
VehicleWarningMsg
();
params
.
setId
(
id
);
params
.
setStatus
(
VehicleMsgStatus
.
PROCESSED
.
getCode
());
Integer
effected
=
mapper
.
updateByPrimaryKeySelective
(
params
);
return
RestResponse
.
suc
();
}
/**
* 检查车辆是否需要插入相关预警信息
*/
@Scheduled
(
cron
=
"0 0 0 * * ?"
)
//每日0点触发
public
void
checkIfNeedWarn
(){
//获取redis乐观锁,失败则不执行,确保只有一个线程执行
Boolean
hasSuc
=
customRedisTemplate
.
opsForValue
().
setIfAbsent
(
RedisKey
.
LOCK_VEHICLE_WARNING_MSG
,
String
.
valueOf
(
DateTime
.
now
().
getMillis
()));
if
(
hasSuc
){
//设置23小时后过期
customRedisTemplate
.
expire
(
RedisKey
.
LOCK_VEHICLE_WARNING_MSG
,
23
,
TimeUnit
.
HOURS
);
}
else
{
log
.
info
(
"[预警信息检查]乐观锁获取失败,该线程不执行任务。"
);
return
;
}
log
.
info
(
"[预警信息检查]任务开始。"
);
//获取所有检查规则
List
<
VehicleWarningRule
>
vehicleWarningRules
=
vehicleWarningRuleMapper
.
selectAll
();
if
(
CollectionUtils
.
isEmpty
(
vehicleWarningRules
)){
log
.
info
(
"[预警信息检查]当前不存在任何预警规则,不执行预警信息检查"
);
return
;
}
//按页获取车辆
Integer
curPage
=
1
;
List
<
Vehicle
>
vehicles
=
null
;
do
{
RowBounds
rowBounds
=
new
RowBounds
((
curPage
-
1
)*
CHECK_BATCH_SIZE_VEHICLE
,
CHECK_BATCH_SIZE_VEHICLE
);
curPage
++;
vehicles
=
vehicleMapper
.
selectByRowBounds
(
new
Vehicle
(),
rowBounds
);
if
(
CollectionUtils
.
isEmpty
(
vehicles
)){
continue
;
}
for
(
Vehicle
vehicle
:
vehicles
){
//逐个车辆执行检查
checkIfNeedWarnEachVehicle
(
vehicle
,
vehicleWarningRules
);
}
}
while
(
CollectionUtils
.
isEmpty
(
vehicles
));
}
/**
* 对某辆车执行规则检查,查出规则判断函数中支持的参数,若需预警,则执行相关js表达式生成消息内容
* @param vehicle
* @param vehicleWarningRules
*/
private
void
checkIfNeedWarnEachVehicle
(
Vehicle
vehicle
,
List
<
VehicleWarningRule
>
vehicleWarningRules
){
//查出当前车辆曾经触发的预警规则列表
List
<
VehicleWarningMsg
>
vehicleWarningMsgs
=
mapper
.
getMsgByVehicle
(
vehicle
.
getId
());
//转化相关list为map方便使用
Map
<
Integer
,
VehicleWarningMsg
>
idAndMsg
=
Maps
.
newHashMap
();
//提取存在的msgKey
Set
<
String
>
existsKey
=
new
HashSet
<>();
if
(!
CollectionUtils
.
isEmpty
(
vehicleWarningRules
)){
for
(
VehicleWarningMsg
vehicleWarningMsg:
vehicleWarningMsgs
){
idAndMsg
.
put
(
vehicleWarningMsg
.
getId
(),
vehicleWarningMsg
);
if
(
StringUtils
.
isNotBlank
(
vehicleWarningMsg
.
getMsgKey
())){
existsKey
.
add
(
vehicleWarningMsg
.
getMsgKey
());
}
}
}
Map
<
String
,
Object
>
params
=
Maps
.
newHashMap
();
//填充对应参数
params
.
put
(
PARAM_NAME_4_JS_WARNEDIDANDMSG
,
idAndMsg
);
params
.
put
(
PARAM_NAME_4_JS_NOW_STR
,
DateTime
.
now
().
toString
(
DATE_TIME_FORMATTER
));
params
.
put
(
PARAM_NAME_4_JS_VEHICLE
,
vehicle
);
//查出并写入车辆最近一次更新的里程数
Integer
lastDayMileage
=
null
;
if
(
vehicle
.
getMileageLastUpdate
()
!=
null
)
{
String
mileageLastUpdateStr
=
String
.
valueOf
(
vehicle
.
getMileageLastUpdate
());
Object
lastDayMileageStrObj
=
customRedisTemplate
.
opsForValue
().
getAndSet
(
RedisKey
.
MILEAGE_LAST_DAY_PREFIX
+
vehicle
.
getId
(),
mileageLastUpdateStr
);
String
lastDayMileageStr
=
lastDayMileageStrObj
==
null
?
null
:
String
.
valueOf
(
lastDayMileageStrObj
);
if
(
StringUtils
.
isNotBlank
(
lastDayMileageStr
))
{
lastDayMileage
=
Integer
.
parseInt
(
lastDayMileageStr
);
params
.
put
(
PARAM_NAME_4_JS_LAST_DAY_MILEAGE
,
lastDayMileage
);
//填充对应参数
}
}
for
(
VehicleWarningRule
vehicleWarningRule:
vehicleWarningRules
){
//传入参数执行对应js函数
Object
jsRet
=
JSUtil
.
evalJsFunction
(
VEHICLE_CHECK_RULE_FUNCTION_PREFIX
+
vehicleWarningRule
.
getId
(),
vehicleWarningRule
.
getJsFunctionCheck
(),
params
);
if
(!(
jsRet
instanceof
Boolean
)
||
Boolean
.
FALSE
.
equals
(
jsRet
)){
continue
;
}
params
.
put
(
PARAM_NAME_4_JS_CUR_RULE_ID
,
vehicleWarningRule
.
getId
());
VehicleWarningMsg
vehicleWarningMsg
=
new
VehicleWarningMsg
();
if
(
StringUtils
.
isNotBlank
(
vehicleWarningRule
.
getJsFunctionMsgKey
())){
//执行相应获取消息唯一键的js函数,用于去重,不存在则无需执行去重检查
String
msgKey
=
String
.
valueOf
(
JSUtil
.
evalJsFunction
(
VEHICLE_MSG_KEY_FUNCTION_PREFIX
+
vehicleWarningRule
.
getId
(),
vehicleWarningRule
.
getJsFunctionMsgKey
(),
params
));
if
(
existsKey
.
contains
(
msgKey
)){
//注意此处若没有乐观锁保证该任务单线程执行,有并发问题
continue
;
//去除重复key消息
}
vehicleWarningMsg
.
setMsgKey
(
msgKey
);
}
//若触发预警,执行js表达式获取相关msg
vehicleWarningMsg
.
setStatus
(
VehicleMsgStatus
.
NOT_PROCESSED
.
getCode
());
vehicleWarningMsg
.
setType
(
vehicleWarningRule
.
getMsgType
());
vehicleWarningMsg
.
setRuleId
(
vehicleWarningRule
.
getId
());
vehicleWarningMsg
.
setVehicleId
(
vehicle
.
getId
());
vehicleWarningMsg
.
setMsg
(
String
.
valueOf
(
JSUtil
.
eval
(
vehicleWarningRule
.
getJsExpressionMsg
(),
params
)
));
mapper
.
insertSelective
(
vehicleWarningMsg
);
}
}
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/constant/RedisKey.java
View file @
f47c2b95
...
...
@@ -51,4 +51,17 @@ public class RedisKey {
* 服务器上传文件序号
*/
public
static
final
String
UPLOAD_FILE_NO_PREFIX
=
"upload:file:no:"
;
/**
* 预警信息检查乐观锁
*/
public
static
final
String
LOCK_VEHICLE_WARNING_MSG
=
"lock:vehicle:warningMsg"
;
/**
* 车辆预警,前一天检查的里程数redisKey前缀
*/
public
static
final
String
MILEAGE_LAST_DAY_PREFIX
=
"mileage:last_day:"
;
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/constant/VehicleMsgStatus.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
constant
;
import
com.google.common.collect.Maps
;
import
java.util.Map
;
public
enum
VehicleMsgStatus
{
NOT_PROCESSED
(
0
,
"未处理"
),
PROCESSED
(
1
,
"已处理"
),
;
/**
* 编码
*/
private
Integer
code
;
/**
* 类型描述
*/
private
String
desc
;
private
static
Map
<
Integer
,
String
>
codeAndDesc
=
Maps
.
newHashMap
();
static
{
for
(
VehicleMsgStatus
constantType
:
VehicleMsgStatus
.
values
()){
codeAndDesc
.
put
(
constantType
.
getCode
(),
constantType
.
getDesc
());
}
}
VehicleMsgStatus
(
Integer
code
,
String
desc
){
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
static
Boolean
exists
(
Integer
code
){
return
codeAndDesc
.
containsKey
(
code
);
}
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/constant/VehicleMsgType.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
constant
;
import
com.google.common.collect.Maps
;
import
java.util.Map
;
public
enum
VehicleMsgType
{
MAINTENANCE
(
1
,
"汽车保养提醒"
),
REPAIR
(
2
,
"汽车维修提醒"
),
CUSTOM
(
3
,
"自定义"
),
;
/**
* 编码
*/
private
Integer
code
;
/**
* 类型描述
*/
private
String
desc
;
private
static
Map
<
Integer
,
String
>
codeAndDesc
=
Maps
.
newHashMap
();
static
{
for
(
VehicleMsgType
constantType
:
VehicleMsgType
.
values
()){
codeAndDesc
.
put
(
constantType
.
getCode
(),
constantType
.
getDesc
());
}
}
VehicleMsgType
(
Integer
code
,
String
desc
){
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
static
Boolean
exists
(
Integer
code
){
return
codeAndDesc
.
containsKey
(
code
);
}
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/entity/VehicleWarningMsg.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
entity
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
java.util.Date
;
/**
*车辆相关预警消息
*
*/
@Data
public
class
VehicleWarningMsg
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
public
Integer
id
;
/**
* 消息类型,详见VehicleMsgType
*/
public
Integer
type
;
/**
* 消息类型,详见VehicleMsgStatus
*/
public
Integer
status
;
/**
* 消息内容
*/
private
String
msg
;
/**
* 对应规则ID
*/
private
Integer
ruleId
;
/**
* 对应车辆ID
*/
private
String
vehicleId
;
/**
* 消息key,用于去重
*/
private
String
msgKey
;
/**
* 备注
*/
private
String
remark
;
private
Date
createTime
;
private
Date
updateTime
;
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/entity/VehicleWarningRule.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
entity
;
import
lombok.Data
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
java.util.Date
;
/**
*车辆相关预警消息
*
*/
@Data
public
class
VehicleWarningRule
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Integer
id
;
/**
* 消息类型,详见VehicleMsgType
*/
private
Integer
msgType
;
/**
* js函数用于检查是否符合规则
*/
private
String
jsFunctionCheck
;
/**
* js表达式用于拼接消息内容
*/
private
String
jsExpressionMsg
;
/**
* js表达式用于生成消息唯一键
*/
private
String
jsFunctionMsgKey
;
/**
* 备注
*/
private
String
remark
;
private
Date
createTime
;
private
Date
updateTime
;
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/mapper/VehicleWarningMsgMapper.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
mapper
;
import
com.xinxincaravan.caravan.vehicle.entity.VehicleWarningMsg
;
import
com.xinxincaravan.caravan.vehicle.vo.PageDataVo
;
import
com.xinxincaravan.caravan.vehicle.vo.QueryVehicleWarningMsgVo
;
import
tk.mybatis.mapper.common.Mapper
;
import
java.util.List
;
public
interface
VehicleWarningMsgMapper
extends
Mapper
<
VehicleWarningMsg
>
{
public
List
<
VehicleWarningMsg
>
getByPage
(
QueryVehicleWarningMsgVo
queryVehicleWarningMsgVo
);
public
List
<
VehicleWarningMsg
>
getMsgByVehicle
(
String
vehicleId
);
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/mapper/VehicleWarningRuleMapper.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
mapper
;
import
com.xinxincaravan.caravan.vehicle.entity.VehicleWarningRule
;
import
tk.mybatis.mapper.common.Mapper
;
public
interface
VehicleWarningRuleMapper
extends
Mapper
<
VehicleWarningRule
>
{
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/rest/VehicleWarningMsgController.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
rest
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONException
;
import
com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken
;
import
com.xinxincaravan.caravan.vehicle.biz.AccompanyingItemBiz
;
import
com.xinxincaravan.caravan.vehicle.biz.VehicleWarningMsgBiz
;
import
com.xinxincaravan.caravan.vehicle.common.BaseController
;
import
com.xinxincaravan.caravan.vehicle.common.CustomIllegalParamException
;
import
com.xinxincaravan.caravan.vehicle.common.RestResponse
;
import
com.xinxincaravan.caravan.vehicle.constant.ResCode.ResCode
;
import
com.xinxincaravan.caravan.vehicle.entity.AccompanyingItem
;
import
com.xinxincaravan.caravan.vehicle.entity.VehicleWarningMsg
;
import
com.xinxincaravan.caravan.vehicle.vo.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/vehicleWarningMsg"
)
@IgnoreClientToken
@Slf4j
public
class
VehicleWarningMsgController
extends
BaseController
<
VehicleWarningMsgBiz
>
{
@RequestMapping
(
value
=
"{id}"
,
method
=
RequestMethod
.
GET
)
private
RestResponse
<
VehicleWarningMsg
>
get
(
@PathVariable
Integer
id
)
throws
Exception
{
return
RestResponse
.
codeAndData
(
RestResponse
.
SUC_CODE
,
baseBiz
.
selectById
(
id
));
}
@RequestMapping
(
value
=
"page"
,
method
=
RequestMethod
.
GET
)
private
RestResponse
<
PageDataVo
<
VehicleWarningMsg
>>
getByPage
(
@RequestParam
String
queryVehicleWarningMsgVoJson
)
throws
Exception
{
QueryVehicleWarningMsgVo
queryVehicleWarningMsgVo
=
null
;
try
{
queryVehicleWarningMsgVo
=
JSON
.
parseObject
(
queryVehicleWarningMsgVoJson
,
QueryVehicleWarningMsgVo
.
class
);
return
RestResponse
.
data
(
baseBiz
.
getByPage
(
queryVehicleWarningMsgVo
));
}
catch
(
JSONException
ex
)
{
return
RestResponse
.
code
(
ResCode
.
INVALID_REST_REQ_PARAM
.
getCode
());
}
catch
(
CustomIllegalParamException
ex
){
return
RestResponse
.
code
(
ResCode
.
INVALID_REST_REQ_PARAM
.
getCode
());
}
}
@RequestMapping
(
value
=
""
,
method
=
RequestMethod
.
POST
)
private
RestResponse
<
Integer
>
add
(
@RequestBody
AddVehicleWarningMsgVo
addVehicleWarningMsgVo
)
throws
Exception
{
return
baseBiz
.
add
(
addVehicleWarningMsgVo
);
}
@RequestMapping
(
value
=
"deal/{id}"
,
method
=
RequestMethod
.
PUT
)
private
RestResponse
deal
(
@PathVariable
Integer
id
)
throws
Exception
{
return
baseBiz
.
deal
(
id
);
}
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/util/JSUtil.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
util
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
javax.script.Invocable
;
import
javax.script.ScriptEngine
;
import
javax.script.ScriptEngineManager
;
import
java.util.Map
;
public
class
JSUtil
{
public
static
final
ScriptEngineManager
manager
=
new
ScriptEngineManager
();
public
static
final
ThreadLocal
<
ScriptEngine
>
engine
=
new
ThreadLocal
<
ScriptEngine
>()
{
@Override
protected
ScriptEngine
initialValue
()
{
return
manager
.
getEngineByName
(
"javascript"
);
}
};
public
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
Object
.
class
);
/**
* 执行js函数(注意,js的脚本引擎不是线程安全的,不要使用全局变量)
* @param functionCode 函数代码,只包含块中内容
* @param params 参数params
* @return
*/
public
static
Object
evalJsFunction
(
String
functionName
,
String
functionCode
,
Map
<
String
,
Object
>
params
){
try
{
engine
.
get
().
eval
(
"function "
+
functionName
+
"(params){"
+
functionCode
+
"};"
);
if
(
engine
.
get
()
instanceof
Invocable
)
{
Invocable
in
=
(
Invocable
)
engine
.
get
();
return
in
.
invokeFunction
(
functionName
,
params
);
}
}
catch
(
Exception
e
){
logger
.
error
(
e
.
getMessage
());
}
return
null
;
}
/**
* 执行js表达式
* @param jsExpression js表达式
* @param params 参数,供表达式调用
* @return
*/
public
static
Object
eval
(
String
jsExpression
,
Map
<
String
,
Object
>
params
){
try
{
engine
.
get
().
eval
(
"function evalJSExpression(params){"
+
"return eval(\""
+
jsExpression
+
"\");"
+
"}"
);
if
(
engine
.
get
()
instanceof
Invocable
)
{
Invocable
in
=
(
Invocable
)
engine
.
get
();
return
in
.
invokeFunction
(
"evalJSExpression"
,
params
);
}
}
catch
(
Exception
e
){
logger
.
error
(
e
.
getMessage
());
}
return
null
;
}
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/vo/AddVehicleWarningMsgVo.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
vo
;
import
lombok.Data
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
java.util.Date
;
/**
*车辆相关预警消息
*
*/
@Data
public
class
AddVehicleWarningMsgVo
{
/**
* 消息内容
*/
private
String
msg
;
/**
* 对应车辆ID
*/
private
String
vehicleId
;
/**
* 备注
*/
private
String
remark
;
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/vo/QueryVehicleWarningMsgVo.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
vo
;
import
lombok.Data
;
/**
*车辆相关预警消息
*
*/
@Data
public
class
QueryVehicleWarningMsgVo
{
/**
* 对应车辆code
*/
private
Integer
vehicleCode
;
/**
* 对应车牌号
*/
private
String
numberPlate
;
/**
* 消息类型,详见VehicleMsgType
*/
public
Integer
type
;
private
Integer
page
;
private
Integer
limit
;
}
vehicle/src/main/java/com/xinxincaravan/caravan/vehicle/vo/VehicleWarningMsgQueryVo.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
vo
;
import
lombok.Data
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
java.util.Date
;
/**
*车辆相关预警消息
*
*/
@Data
public
class
VehicleWarningMsgQueryVo
{
public
Integer
id
;
/**
* 消息类型,详见VehicleMsgType
*/
public
Integer
type
;
/**
* 消息类型,详见VehicleMsgStatus
*/
public
Integer
status
;
/**
* 消息内容
*/
private
String
msg
;
/**
* 对应规则ID
*/
private
Integer
ruleId
;
/**
* 对应车辆ID
*/
private
String
vehicleId
;
/**
* 消息key,用于去重
*/
private
String
msgKey
;
/**
* 备注
*/
private
String
remark
;
/**
* 对应车辆code
*/
private
Integer
vehicleCode
;
/**
* 对应车牌号
*/
private
String
numberPlate
;
private
Date
createTime
;
private
Date
updateTime
;
}
vehicle/src/main/resources/mapper/VehicleWarningMsgMapper.xml
0 → 100644
View file @
f47c2b95
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.xinxincaravan.caravan.vehicle.mapper.VehicleWarningMsgMapper"
>
<select
id=
"getByPage"
resultType=
"com.xinxincaravan.caravan.vehicle.vo.VehicleWarningMsgQueryVo"
parameterType=
"com.xinxincaravan.caravan.vehicle.vo.QueryVehicleWarningMsgVo"
>
select
vwn.id, vwn.type, vwn.`status`, vwn.msg, vwn.rule_id, vwn.msg_key, vwn.vehicle_id, vwn.create_time, vwn.update_time, vwn.remark, v.code as vehicleCode, v.number_plate
from vehicle_warning_msg vwn left join vehicle v on vwn.vehicle_id = v.id
where
vwn.`status` = 0
<if
test=
"vehicleCode != null"
>
and v.code = #{vehicleCode}
</if>
<if
test=
"numberPlate != null and numberPlate != '' "
>
and v.number_plate = #{numberPlate}
</if>
<if
test=
"type != null"
>
and type = #{type}
</if>
</select>
<select
id=
"getMsgByVehicle"
parameterType=
"String"
resultType=
"com.xinxincaravan.caravan.vehicle.entity.VehicleWarningMsg"
>
select id, type, status, msg, rule_id, msg_key, vehicle_id, create_time, update_time, remark from vehicle_warning_msg where vehicle_id = #{_parameter}
</select>
</mapper>
\ No newline at end of file
vehicle/src/main/resources/mapper/VehicleWarningRuleMapper.xml
0 → 100644
View file @
f47c2b95
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.xinxincaravan.caravan.vehicle.mapper.VehicleWarningRuleMapper"
>
<select
id=
"getByPage"
parameterType=
"com.xinxincaravan.caravan.vehicle.vo.QueryVehicleWarningMsgVo"
resultType=
"com.xinxincaravan.caravan.vehicle.entity.VehicleWarningMsg"
>
</select>
</mapper>
\ No newline at end of file
vehicle/src/test/java/com/xinxincaravan/caravan/vehicle/biz/VehicleWarningMsgBizTest.java
0 → 100644
View file @
f47c2b95
package
com
.
xinxincaravan
.
caravan
.
vehicle
.
biz
;
import
com.xinxincaravan.caravan.vehicle.VehicleApplication
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
static
org
.
junit
.
Assert
.*;
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringBootTest
(
classes
={
VehicleApplication
.
class
,
VehicleWarningMsgBizTest
.
class
})
public
class
VehicleWarningMsgBizTest
{
@Autowired
private
VehicleWarningMsgBiz
vehicleWarningMsgBiz
;
@Test
public
void
checkIfNeedWarn
()
{
vehicleWarningMsgBiz
.
checkIfNeedWarn
();
}
}
\ No newline at end of file
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