Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Z
zhongtong-avi-service
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
中通客车项目
zhongtong-avi-service
Commits
e49e3869
Commit
e49e3869
authored
Sep 24, 2019
by
喻训浩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: modbus采集及设备状态运行时间保存实现
parent
b5755d43
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
260 additions
and
26 deletions
+260
-26
RunRecordController.java
...ongtong/avi/equipment/controller/RunRecordController.java
+7
-4
RuntimeRecord.java
.../vtstar/zhongtong/avi/equipment/domain/RuntimeRecord.java
+4
-4
CleanAndStatisticsJob.java
...ar/zhongtong/avi/equipment/job/CleanAndStatisticsJob.java
+136
-0
StateDataSaveJob.java
.../vtstar/zhongtong/avi/equipment/job/StateDataSaveJob.java
+0
-11
RuntimeRecordMapper.java
...r/zhongtong/avi/equipment/mapper/RuntimeRecordMapper.java
+5
-0
RunRecordService.java
...tar/zhongtong/avi/equipment/service/RunRecordService.java
+36
-0
MybatisMySQLConfig.java
...tstar/zhongtong/avi/global/config/MybatisMySQLConfig.java
+1
-1
QuartzConfig.java
.../net/vtstar/zhongtong/avi/global/config/QuartzConfig.java
+10
-0
FieldType.java
...star/zhongtong/avi/global/web/domain/enums/FieldType.java
+15
-0
LaserCuttingMachineJob.java
...ar/zhongtong/avi/stamping/job/LaserCuttingMachineJob.java
+3
-2
application-dev-yxh.properties
src/main/resources/config/application-dev-yxh.properties
+5
-0
application-quartz.properties
src/main/resources/config/application-quartz.properties
+16
-4
RuntimeRecordMapper.xml
src/main/resources/mapper/mysql/RuntimeRecordMapper.xml
+22
-0
No files found.
src/main/java/net/vtstar/zhongtong/avi/equipment/controller/RunRecordController.java
View file @
e49e3869
...
...
@@ -8,10 +8,7 @@ import net.vtstar.user.search.controller.vo.SearchVo;
import
net.vtstar.utils.domain.Return
;
import
net.vtstar.zhongtong.avi.equipment.service.RunRecordService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
/**
* @Author: xiadongwei
...
...
@@ -51,4 +48,10 @@ public class RunRecordController {
public
Return
pageListFault
(
@RequestBody
SearchVo
pageFilter
)
{
return
Return
.
success
(
new
PageInfo
<>(
runRecordService
.
findPageFault
(
pageFilter
.
toJSONObject
())));
}
@GetMapping
(
"/test"
)
public
Return
test
(){
runRecordService
.
test
();
return
Return
.
success
();
}
}
src/main/java/net/vtstar/zhongtong/avi/equipment/domain/RuntimeRecord.java
View file @
e49e3869
...
...
@@ -9,6 +9,7 @@ import net.vtstar.user.search.Search;
import
javax.persistence.Column
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
...
...
@@ -34,8 +35,7 @@ public class RuntimeRecord {
private
Long
machineId
;
@ApiModelProperty
(
notes
=
"设备编号"
)
@JoinColumn
(
tableName
=
EquipInfo
.
class
,
name
=
"equipCode"
)
@Search
@JoinColumn
(
tableName
=
EquipInfo
.
class
,
name
=
"equip_code"
)
private
String
equipCode
;
@ApiModelProperty
(
notes
=
"设备名称"
)
...
...
@@ -45,11 +45,11 @@ public class RuntimeRecord {
@ApiModelProperty
(
notes
=
"当前运行时间"
)
@Column
(
name
=
"current_runtime"
)
private
Long
currentRuntime
;
private
BigDecimal
currentRuntime
;
@ApiModelProperty
(
notes
=
"累计运行时间"
)
@Column
(
name
=
"total_runtime"
)
private
Long
totalRuntime
;
private
BigDecimal
totalRuntime
;
@ApiModelProperty
(
notes
=
"创建时间"
)
@Column
(
name
=
"create_time"
)
...
...
src/main/java/net/vtstar/zhongtong/avi/equipment/job/CleanAndStatisticsJob.java
0 → 100644
View file @
e49e3869
package
net
.
vtstar
.
zhongtong
.
avi
.
equipment
.
job
;
import
lombok.extern.slf4j.Slf4j
;
import
net.vtstar.scada.base.equipmgt.domain.Enum.EquipStatusEnum
;
import
net.vtstar.scada.base.equipmgt.service.EquipDataService
;
import
net.vtstar.scada.base.gather.domain.EquipmentData
;
import
net.vtstar.scada.base.redis.service.SimpleRedisService
;
import
net.vtstar.scada.base.redis.util.EquipDataUtil
;
import
net.vtstar.user.mybatis.provider.Operation
;
import
net.vtstar.user.mybatis.provider.WhereFilter
;
import
net.vtstar.zhongtong.avi.equipment.domain.EquipInfo
;
import
net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord
;
import
net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper
;
import
net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper
;
import
net.vtstar.zhongtong.avi.equipment.service.RunRecordService
;
import
org.quartz.DisallowConcurrentExecution
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Set
;
@Slf4j
@Component
@DisallowConcurrentExecution
public
class
CleanAndStatisticsJob
extends
QuartzJobBean
{
@Resource
(
name
=
"redisTemplate"
)
private
RedisTemplate
redisTemplate
;
@Autowired
private
EquipDataService
equipDataService
;
@Autowired
private
SimpleRedisService
simpleRedisService
;
@Autowired
private
RunRecordService
runRecordService
;
@Autowired
private
RuntimeRecordMapper
runtimeRecordMapper
;
@Autowired
private
BasicInfoMapper
basicInfoMapper
;
@Override
protected
void
executeInternal
(
JobExecutionContext
context
)
throws
JobExecutionException
{
log
.
info
(
"_______________________________________________________________"
);
log
.
info
(
"开始清洗设备状态数据..."
);
Set
<
String
>
keys
=
redisTemplate
.
keys
(
EquipDataUtil
.
getStatusKey
(
"*"
));
if
(
CollectionUtils
.
isEmpty
(
keys
))
{
return
;
}
log
.
info
(
"开始清洗设备状态数据 key.size: {}"
,
keys
.
size
());
for
(
String
key
:
keys
)
{
List
<
EquipmentData
>
dataList
=
(
List
<
EquipmentData
>)
simpleRedisService
.
getListDelDefaultSize
(
key
);
if
(
CollectionUtils
.
isEmpty
(
dataList
))
{
continue
;
}
equipDataService
.
updateLastStatus
(
dataList
.
get
(
dataList
.
size
()
-
1
));
String
equipCode
=
dataList
.
get
(
0
).
getEquipCode
();
EquipmentData
last
=
equipDataService
.
getLast
(
equipCode
);
final
EquipmentData
first
=
last
;
int
index
=
1
;
long
totalRuntime
=
0
;
for
(
int
i
=
0
;
i
<
dataList
.
size
();
i
++)
{
if
(
last
==
null
)
{
last
=
dataList
.
get
(
0
);
continue
;
}
if
(
last
.
getBeginTime
()
==
null
||
last
.
getEquipStatus
()
==
null
)
{
redisTemplate
.
delete
(
key
);
break
;
}
EquipmentData
d
=
dataList
.
get
(
i
);
last
.
setEndTime
(
d
.
getBeginTime
());
if
(
d
.
getEquipStatus
()
!=
last
.
getEquipStatus
())
{
if
(
index
==
1
)
{
equipDataService
.
update
(
last
);
}
else
{
// 保存
equipDataService
.
save
(
last
);
}
//计算累计运行时间
if
(
last
.
getEquipStatus
().
equals
(
EquipStatusEnum
.
RUN
))
{
long
runtime
=
last
.
getEndTime
().
getTime
()
-
last
.
getBeginTime
().
getTime
();
totalRuntime
+=
runtime
;
}
last
=
d
;
index
++;
}
}
if
(
first
!=
null
&&
first
.
getBeginTime
().
equals
(
last
.
getBeginTime
()))
{
equipDataService
.
update
(
last
);
}
else
{
equipDataService
.
save
(
last
);
}
RuntimeRecord
lastRecord
=
runRecordService
.
getLastByCode
(
equipCode
);
RuntimeRecord
runtimeRecord
=
new
RuntimeRecord
();
runtimeRecord
.
setCreateTime
(
new
Date
());
BigDecimal
hours
=
new
BigDecimal
(
totalRuntime
).
divide
(
new
BigDecimal
(
3600000
),
4
,
BigDecimal
.
ROUND_HALF_UP
);
runtimeRecord
.
setCurrentRuntime
(
hours
);
BigDecimal
total
=
BigDecimal
.
ZERO
;
if
(
null
!=
lastRecord
)
{
total
=
lastRecord
.
getTotalRuntime
();
}
runtimeRecord
.
setTotalRuntime
(
total
.
add
(
hours
));
List
<
EquipInfo
>
list
=
basicInfoMapper
.
findList
(
new
WhereFilter
()
{{
addFilter
(
EquipInfo
.
class
,
"equip_code"
,
Operation
.
EQUAL
,
equipCode
);
}},
EquipInfo
.
class
);
EquipInfo
eqp
=
list
.
get
(
0
);
runtimeRecord
.
setMachineId
(
eqp
.
getId
());
runtimeRecord
.
setWorkshopCode
(
eqp
.
getWorkshopCode
());
List
<
RuntimeRecord
>
records
=
new
ArrayList
<>();
records
.
add
(
runtimeRecord
);
runtimeRecordMapper
.
insertLists
(
records
);
}
}
}
src/main/java/net/vtstar/zhongtong/avi/equipment/job/StateDataSaveJob.java
deleted
100644 → 0
View file @
b5755d43
package
net
.
vtstar
.
zhongtong
.
avi
.
equipment
.
job
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
@Slf4j
@Component
public
class
StateDataSaveJob
{
}
src/main/java/net/vtstar/zhongtong/avi/equipment/mapper/RuntimeRecordMapper.java
View file @
e49e3869
...
...
@@ -3,6 +3,9 @@ package net.vtstar.zhongtong.avi.equipment.mapper;
import
net.vtstar.user.mybatis.BaseMapper
;
import
net.vtstar.zhongtong.avi.equipment.domain.RuntimeRecord
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* @Author: xiadongwei
...
...
@@ -10,4 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public
interface
RuntimeRecordMapper
extends
BaseMapper
<
RuntimeRecord
>
{
void
insertLists
(
@Param
(
"records"
)
List
<
RuntimeRecord
>
records
);
}
src/main/java/net/vtstar/zhongtong/avi/equipment/service/RunRecordService.java
View file @
e49e3869
...
...
@@ -3,15 +3,23 @@ package net.vtstar.zhongtong.avi.equipment.service;
import
com.alibaba.fastjson.JSONObject
;
import
com.github.pagehelper.PageHelper
;
import
lombok.extern.slf4j.Slf4j
;
import
net.vtstar.user.domain.Dict
;
import
net.vtstar.user.mybatis.BaseMapper
;
import
net.vtstar.user.mybatis.provider.Operation
;
import
net.vtstar.user.mybatis.provider.OrderBy
;
import
net.vtstar.user.mybatis.provider.WhereFilter
;
import
net.vtstar.user.search.service.SearchService
;
import
net.vtstar.zhongtong.avi.equipment.domain.*
;
import
net.vtstar.zhongtong.avi.equipment.mapper.BasicInfoMapper
;
import
net.vtstar.zhongtong.avi.equipment.mapper.FaultRecordMapper
;
import
net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -30,6 +38,10 @@ public class RunRecordService {
@Autowired
private
SearchService
searchService
;
@Autowired
private
BasicInfoMapper
basicInfoMapper
;
/**
* 分页查询运行时间
*/
...
...
@@ -51,4 +63,28 @@ public class RunRecordService {
addOrderBy
(
PaintshopStation
.
class
,
"sequence"
,
OrderBy
.
ASC
);
}}),
PaintshopStation
.
class
);
}
/**
* 根据设备编码查询上一条运行时间记录
*/
public
RuntimeRecord
getLastByCode
(
String
eqpCode
)
{
List
<
RuntimeRecord
>
list
=
runtimeRecordMapper
.
findList
(
new
WhereFilter
()
{{
addJoin
(
RuntimeRecord
.
class
,
"machine_id"
,
EquipInfo
.
class
,
"id"
);
addFilter
(
EquipInfo
.
class
,
"equip_code"
,
Operation
.
EQUAL
,
eqpCode
);
addOrderBy
(
RuntimeRecord
.
class
,
"create_time"
,
OrderBy
.
DESC
);
setRows
(
0
);
setOffset
(
1
);
}},
RuntimeRecord
.
class
);
if
(
CollectionUtils
.
isEmpty
(
list
))
{
return
null
;
}
else
{
return
list
.
get
(
0
);
}
}
public
void
test
()
{
RuntimeRecord
runtimeRecord
=
new
RuntimeRecord
();
runtimeRecord
.
setWorkshopCode
(
"23232"
);
}
}
src/main/java/net/vtstar/zhongtong/avi/global/config/MybatisMySQLConfig.java
View file @
e49e3869
...
...
@@ -39,7 +39,7 @@ public class MybatisMySQLConfig {
public
SqlSessionFactory
sqlSessionFactoryMySQL
()
throws
Exception
{
SqlSessionFactoryBean
factoryBean
=
new
SqlSessionFactoryBean
();
factoryBean
.
setDataSource
(
dataSource
);
//
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql/*.xml"));
factoryBean
.
setMapperLocations
(
new
PathMatchingResourcePatternResolver
().
getResources
(
"classpath:mapper/mysql/*.xml"
));
return
factoryBean
.
getObject
();
}
...
...
src/main/java/net/vtstar/zhongtong/avi/global/config/
Scheduling
Config.java
→
src/main/java/net/vtstar/zhongtong/avi/global/config/
Quartz
Config.java
View file @
e49e3869
package
net
.
vtstar
.
zhongtong
.
avi
.
global
.
config
;
import
net.vtstar.scada.base.quartz.properties.QuartzProperties
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
@Configuration
@Enable
Scheduling
public
class
Scheduling
Config
{
@Enable
ConfigurationProperties
(
QuartzProperties
.
class
)
public
class
Quartz
Config
{
}
src/main/java/net/vtstar/zhongtong/avi/global/web/domain/enums/FieldType.java
View file @
e49e3869
package
net
.
vtstar
.
zhongtong
.
avi
.
global
.
web
.
domain
.
enums
;
import
io.swagger.annotations.ApiModel
;
@ApiModel
(
"前端数据类型"
)
public
enum
FieldType
{
/**
* 字符串
*/
STRING
,
/**
* 数值
*/
NUMBER
,
/**
* 时间戳
*/
DATETIME
,
/**
* 枚举
*/
ENUMS
;
}
src/main/java/net/vtstar/zhongtong/avi/stamping/job/LaserCuttingMachineJob.java
View file @
e49e3869
...
...
@@ -5,7 +5,6 @@ import net.vtstar.scada.base.equipmgt.domain.Enum.EquipStatusEnum;
import
net.vtstar.scada.base.gather.domain.EquipmentData
;
import
net.vtstar.scada.base.gather.job.GatherJob
;
import
net.vtstar.zhongtong.avi.stamping.domain.LaserCuttingMachine
;
import
org.quartz.DisallowConcurrentExecution
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
org.springframework.stereotype.Component
;
...
...
@@ -15,7 +14,6 @@ import org.springframework.stereotype.Component;
*/
@Slf4j
@Component
@DisallowConcurrentExecution
public
class
LaserCuttingMachineJob
extends
GatherJob
{
private
static
final
String
NAME
=
"3D_LASER_CUTTING"
;
...
...
@@ -41,6 +39,9 @@ public class LaserCuttingMachineJob extends GatherJob {
case
1
:
equipmentData
.
setEquipStatus
(
EquipStatusEnum
.
RUN
);
break
;
case
2
:
equipmentData
.
setEquipStatus
(
EquipStatusEnum
.
ALARM
);
break
;
default
:
return
false
;
}
...
...
src/main/resources/config/application-dev-yxh.properties
View file @
e49e3869
spring.profiles.include
=
mybatis,quartz,swagger,security
# Mysql
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://10.100.172.135:3306/zhongtong_dev?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
#spring.datasource.username=zhongtongdev
#spring.datasource.password=123456
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
spring.datasource.url
=
jdbc:mysql://localhost:3306/zhongtong_dev?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username
=
root
...
...
src/main/resources/config/application-quartz.properties
View file @
e49e3869
# scheduler(Quartz)
spring.quartz.job-store-type
=
jdbc
spring.quartz.jdbc.initialize-schema
=
ALWAYS
spring.quartz.jdbc.comment-prefix
=
--
spring.quartz.jdbc.initialize-schema
=
always
spring.quartz.jdbc.comment-prefix
=
#
spring.quartz.startupDelay=2s
spring.quartz.auto-startup
=
true
#
spring.quartz.auto-startup=true
spring.quartz.properties.org.quartz.scheduler.instanceName
=
myScheduler-scada
spring.quartz.properties.org.quartz.scheduler.instanceId
=
AUTO
spring.quartz.properties.org.quartz.jobStore.isClustered
=
true
...
...
@@ -24,4 +24,16 @@ quartz.job.taskInfos[0].jobName=net.vtstar.zhongtong.avi.stamping.job.LaserCutti
quartz.job.taskInfos[0]
.jobGroup
=
LaserCuttingMachineJob
quartz.job.taskInfos[0]
.jobDescription
=
\u
5C01
\u
88C5
\u
7EBF
\u9884\u
710A
\u
673A
\u6570\u
636E
\u
91C7
\u
96C6job
quartz.job.taskInfos[0]
.cronExpression
=
0/10 * * * * ?
quartz.job.taskInfos[0]
.start
=
true
\ No newline at end of file
quartz.job.taskInfos[0]
.start
=
false
quartz.job.taskInfos[1]
.jobName
=
net.vtstar.zhongtong.avi.equipment.job.CleanAndStatisticsJob
quartz.job.taskInfos[1]
.jobGroup
=
CleanAndStatisticsJob
quartz.job.taskInfos[1]
.jobDescription
=
\u
6E05
\u
6D17
\u
8BBE
\u5907\u
72B6
\u6001
Job
quartz.job.taskInfos[1]
.cronExpression
=
0 0 0 * * ?
quartz.job.taskInfos[1]
.start
=
false
#quartz.job.taskInfos[2].jobName=net.vtstar.scada.base.equipmgt.job.CleanEquipStatusJob
#quartz.job.taskInfos[2].jobGroup=CleanEquipStatusJob
#quartz.job.taskInfos[2].jobDescription=\u6E05\u6D17\u8BBE\u5907\u72B6\u6001Job
#quartz.job.taskInfos[2].cronExpression=0/20 * * * * ?
#quartz.job.taskInfos[2]
.start
=
true
\ No newline at end of file
src/main/resources/mapper/mysql/RuntimeRecordMapper.xml
View file @
e49e3869
...
...
@@ -2,4 +2,26 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"net.vtstar.zhongtong.avi.equipment.mapper.RuntimeRecordMapper"
>
<insert
id=
"insertLists"
parameterType=
"java.util.List"
>
insert into
machine_runtime_record
(
workshop_code,
machine_id,
current_runtime,
total_runtime,
create_time
)
values
<foreach
collection=
"records"
item=
"record"
separator=
","
index=
"index"
>
(
#{record.workshopCode},
#{record.machineId},
#{record.currentRuntime},
#{record.totalRuntime},
#{record.createTime}
)
</foreach>
</insert>
</mapper>
\ 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