Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
car-reptiles
Overview
Overview
Details
Activity
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
梁辉
car-reptiles
Commits
18d6e520
Commit
18d6e520
authored
Jan 06, 2021
by
landerliang@163.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
最新稳定版,修复了扫描检测报告抛异常会停止的问题(四驱车没有测到,不过已经扫描的到,应该没问题了)
parent
5037ce52
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
163 additions
and
130 deletions
+163
-130
car-reptiles-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java
+3
-2
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/domain/QuartzJob.java
+1
-14
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/domain/QuartzLog.java
+4
-0
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/task/ReportTask.java
+14
-7
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java
+1
-0
car-reptiles-system/src/main/java/me/zhengjie/modules/security/service/UserCacheClean.java
+1
-0
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/User.java
+0
-20
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/vo/SysUserVo.java
+0
-16
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/vo/report/CarSignatureReqVo.java
+3
-0
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/vo/signature/SignReportVo.java
+3
-0
car-reptiles-system/src/main/java/me/zhengjie/modules/system/rest/ReportController.java
+1
-0
car-reptiles-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java
+1
-1
car-reptiles-system/src/main/java/me/zhengjie/modules/system/service/ReportService.java
+11
-5
car-reptiles-system/src/main/java/me/zhengjie/modules/system/service/SignatureService.java
+2
-2
car-reptiles-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java
+4
-4
car-reptiles-system/src/main/java/me/zhengjie/modules/system/util/CarReportUtil.java
+84
-56
car-reptiles-system/src/main/resources/config/application-prod.yml
+1
-1
car-reptiles-system/src/test/java/me/zhengjie/LoginCacheTest.java
+29
-2
No files found.
car-reptiles-logging/src/main/java/me/zhengjie/service/impl/LogServiceImpl.java
View file @
18d6e520
...
...
@@ -95,10 +95,11 @@ public class LogServiceImpl implements LogService {
assert
log
!=
null
;
log
.
setRequestIp
(
ip
);
log
.
setAddress
(
""
);
log
.
setAddress
(
ip
);
log
.
setMethod
(
methodName
);
log
.
setUsername
(
username
);
log
.
setParams
(
getParameter
(
method
,
joinPoint
.
getArgs
()));
log
.
setParams
(
""
);
//log.setParams(getParameter(method, joinPoint.getArgs()));
log
.
setBrowser
(
browser
);
logRepository
.
save
(
log
);
}
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/domain/QuartzJob.java
View file @
18d6e520
...
...
@@ -84,21 +84,8 @@ public class QuartzJob extends BaseEntity implements Serializable {
private
String
description
;
@Column
(
name
=
"dept_id"
)
@ApiModelProperty
(
"部门id"
)
private
Long
deptId
;
@ApiModelProperty
(
"环保系统账号"
)
private
String
account
;
@ApiModelProperty
(
"环保系统密码"
)
private
String
password
;
@ApiModelProperty
(
"授权人签章名称"
)
private
String
snName1
;
@ApiModelProperty
(
"批准人签章名称"
)
private
String
snName2
;
@ApiModelProperty
(
"公章名称"
)
private
String
snName3
;
}
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/domain/QuartzLog.java
View file @
18d6e520
...
...
@@ -64,4 +64,8 @@ public class QuartzLog implements Serializable {
@CreationTimestamp
@ApiModelProperty
(
value
=
"创建时间"
,
hidden
=
true
)
private
Timestamp
createTime
;
@Column
(
name
=
"dept_id"
)
@ApiModelProperty
(
"部门id"
)
private
Long
deptId
;
}
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/task/ReportTask.java
View file @
18d6e520
package
me
.
zhengjie
.
modules
.
quartz
.
task
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
me.zhengjie.exception.BusinessException
;
import
me.zhengjie.modules.system.service.ReportService
;
import
me.zhengjie.utils.AssertUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -21,26 +23,31 @@ public class ReportTask {
private
ReportService
reportService
;
public
void
run
(
String
param
)
{
log
.
info
(
">>> 开始自动爬取新的检测报告进行下载、签章、上传"
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
param
);
log
.
info
(
">>> ================================ 开始自动爬取新的检测报告进行下载、签章、上传 ===================================="
);
String
replace
=
param
.
replace
(
"\n"
,
""
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
replace
);
log
.
info
(
">>> 环保账户: {}, 环保密码:{}, 授权人签名盘符:{}, 批准人签名盘符:{}, 公章签名盘符:{}"
,
log
.
info
(
">>> 环保账户: {}, 环保密码:{}, 授权人签名盘符:{}, 批准人签名盘符:{}, 公章签名盘符:{}
, 部门编号:{}
"
,
jsonObject
.
getString
(
"account"
),
jsonObject
.
getString
(
"password"
),
jsonObject
.
getString
(
"snKey1"
),
jsonObject
.
getString
(
"snKey2"
),
jsonObject
.
getString
(
"snKey3"
));
jsonObject
.
getString
(
"snKey1"
),
jsonObject
.
getString
(
"snKey2"
),
jsonObject
.
getString
(
"snKey3"
)
,
jsonObject
.
getInteger
(
"deptId"
)
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"account"
),
"缺少环保系统账户,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"password"
),
"缺少环保系统密码,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snKey1"
),
"缺少授权人签名盘符,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snKey2"
),
"缺少批准人签名盘符,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snKey3"
),
"缺少公章签名盘符,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snKey4"
),
"缺少MA章签名盘符,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snName1"
),
"缺少授权人签章名称,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snName2"
),
"缺少批准人签章名称,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snName3"
),
"缺少公章签章名称,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"snName4"
),
"缺少MA章名称,自动任务执行终止!"
);
AssertUtil
.
isNotNull
(
jsonObject
.
get
(
"deptId"
),
"缺少部门id,自动任务执行终止!"
);
reportService
.
autoDownloadAndSignAndUploadReport
(
jsonObject
.
getString
(
"account"
),
jsonObject
.
getString
(
"password"
),
jsonObject
.
getString
(
"snKey1"
),
jsonObject
.
getString
(
"snKey2"
),
jsonObject
.
getString
(
"snKey3"
),
jsonObject
.
getString
(
"snName1"
),
jsonObject
.
getString
(
"snName2"
),
jsonObject
.
getString
(
"snName3"
));
log
.
info
(
">> 本次自动签章任务执行完毕!"
);
}
jsonObject
.
getString
(
"snName1"
),
jsonObject
.
getString
(
"snName2"
),
jsonObject
.
getString
(
"snName3"
)
,
jsonObject
.
getString
(
"snKey4"
),
jsonObject
.
getString
(
"snName4"
),
jsonObject
.
getInteger
(
"deptId"
));
log
.
info
(
">> ========================================== 本次自动签章任务执行完毕 =========================================="
);
}
}
car-reptiles-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java
View file @
18d6e520
...
...
@@ -61,6 +61,7 @@ public class ExecutionJob extends QuartzJobBean {
QuartzLog
log
=
new
QuartzLog
();
log
.
setJobName
(
quartzJob
.
getJobName
());
log
.
setBeanName
(
quartzJob
.
getBeanName
());
log
.
setDeptId
(
quartzJob
.
getDeptId
());
log
.
setMethodName
(
quartzJob
.
getMethodName
());
log
.
setParams
(
quartzJob
.
getParams
());
long
startTime
=
System
.
currentTimeMillis
();
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/security/service/UserCacheClean.java
View file @
18d6e520
...
...
@@ -16,6 +16,7 @@
package
me
.
zhengjie
.
modules
.
security
.
service
;
import
me.zhengjie.modules.security.service.dto.JwtUserDto
;
import
me.zhengjie.utils.StringUtils
;
import
org.springframework.stereotype.Component
;
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/User.java
View file @
18d6e520
...
...
@@ -103,26 +103,6 @@ public class User extends BaseEntity implements Serializable {
@ApiModelProperty
(
value
=
"最后修改密码的时间"
,
hidden
=
true
)
private
Date
pwdResetTime
;
@Column
(
name
=
"site_id"
)
@ApiModelProperty
(
value
=
"站点ID"
,
hidden
=
true
)
private
Integer
siteId
;
/*@Column(name = "sn_key")
@ApiModelProperty("签章服务key")
private String snKey;
@Column(name = "sn_password")
@ApiModelProperty("签章服务密码")
private String snPassword;
@Column(name = "sn_signature")
@ApiModelProperty("签章服务签名")
private String snSignature;*/
@Transient
@ApiModelProperty
(
value
=
"站点名称"
,
hidden
=
false
)
private
String
siteName
;
@Override
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/vo/SysUserVo.java
View file @
18d6e520
...
...
@@ -58,20 +58,4 @@ public class SysUserVo {
@ApiModelProperty
(
value
=
"最后修改密码的时间"
)
private
Date
pwdResetTime
;
@ApiModelProperty
(
value
=
"站点ID"
,
hidden
=
true
)
private
Integer
siteId
;
@ApiModelProperty
(
value
=
"签名服务器snkey"
)
private
String
snKey
;
@ApiModelProperty
(
value
=
"签名服务器snPassword"
)
private
String
snPassword
;
@TableField
(
exist
=
false
)
@ApiModelProperty
(
value
=
"站点名称"
,
hidden
=
false
)
private
String
siteName
;
@ApiModelProperty
(
"签名章名称"
)
private
String
snSignature
;
}
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/vo/report/CarSignatureReqVo.java
View file @
18d6e520
...
...
@@ -24,4 +24,7 @@ public class CarSignatureReqVo {
@ApiModelProperty
(
"公章签章"
)
private
SignatureVo
signature3
;
@ApiModelProperty
(
"MA章"
)
private
SignatureVo
signature4
;
}
car-reptiles-system/src/main/java/me/zhengjie/modules/system/domain/vo/signature/SignReportVo.java
View file @
18d6e520
...
...
@@ -17,4 +17,7 @@ public class SignReportVo {
@ApiModelProperty
(
"公章名称"
)
private
String
snName3
;
@ApiModelProperty
(
"MA章"
)
private
String
snName4
;
}
car-reptiles-system/src/main/java/me/zhengjie/modules/system/rest/ReportController.java
View file @
18d6e520
...
...
@@ -144,6 +144,7 @@ public class ReportController {
AssertUtil
.
isNotBlank
(
signReportVo
.
getSnName1
(),
"请选择授权人签名"
);
AssertUtil
.
isNotBlank
(
signReportVo
.
getSnName2
(),
"请选择批准人签名"
);
AssertUtil
.
isNotBlank
(
signReportVo
.
getSnName3
(),
"请选择公章"
);
AssertUtil
.
isNotBlank
(
signReportVo
.
getSnName4
(),
"请选择MA章"
);
return
ResultVo
.
success
(
reportService
.
signature
(
signReportVo
));
}
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java
View file @
18d6e520
...
...
@@ -118,7 +118,7 @@ public class UserController {
public
ResponseEntity
<
Object
>
update
(
@Validated
(
User
.
Update
.
class
)
@RequestBody
User
resources
){
checkLevel
(
resources
);
userService
.
update
(
resources
);
return
new
ResponseEntity
<>(
HttpStatus
.
NO_CONTENT
);
return
new
ResponseEntity
<>(
HttpStatus
.
CREATED
);
}
@Log
(
"修改用户:个人中心"
)
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/system/service/ReportService.java
View file @
18d6e520
...
...
@@ -124,7 +124,7 @@ public class ReportService {
*
*/
public
synchronized
void
autoDownloadAndSignAndUploadReport
(
String
account
,
String
password
,
String
snKey1
,
String
snKey2
,
String
snKey3
,
String
snName1
,
String
snName2
,
String
snName3
){
String
snName1
,
String
snName2
,
String
snName3
,
String
snKey4
,
String
snName4
,
Integer
deptId
){
try
{
...
...
@@ -154,12 +154,14 @@ public class ReportService {
//根据snKey查询签章信息
SignatureVo
signatureVo1
=
signatureService
.
getBySnKeyAndSnName
(
snKey1
,
snName1
);
SignatureVo
signatureVo1
=
signatureService
.
getBySnKeyAndSnName
(
snKey1
,
snName1
,
deptId
);
AssertUtil
.
isNotNull
(
signatureVo1
,
"找不到snKey为: "
+
snKey1
+
"的签名章"
);
SignatureVo
signatureVo2
=
signatureService
.
getBySnKeyAndSnName
(
snKey2
,
snName2
);
SignatureVo
signatureVo2
=
signatureService
.
getBySnKeyAndSnName
(
snKey2
,
snName2
,
deptId
);
AssertUtil
.
isNotNull
(
signatureVo2
,
"找不到snKey为: "
+
snKey2
+
"的签名章"
);
SignatureVo
signatureVo3
=
signatureService
.
getBySnKeyAndSnName
(
snKey3
,
snName3
);
SignatureVo
signatureVo3
=
signatureService
.
getBySnKeyAndSnName
(
snKey3
,
snName3
,
deptId
);
AssertUtil
.
isNotNull
(
signatureVo3
,
"找不到snKey为: "
+
snKey3
+
"的公章"
);
SignatureVo
signatureVo4
=
signatureService
.
getBySnKeyAndSnName
(
snKey4
,
snName4
,
deptId
);
AssertUtil
.
isNotNull
(
signatureVo3
,
"找不到snKey为: "
+
snKey4
+
"的公章"
);
//进行签章
CarSignatureReqVo
carSignatureReqVo
=
new
CarSignatureReqVo
();
...
...
@@ -167,6 +169,7 @@ public class ReportService {
carSignatureReqVo
.
setSignature1
(
signatureVo1
);
carSignatureReqVo
.
setSignature2
(
signatureVo2
);
carSignatureReqVo
.
setSignature3
(
signatureVo3
);
carSignatureReqVo
.
setSignature4
(
signatureVo4
);
HttpEntity
<
CarSignatureReqVo
>
httpEntity
=
new
HttpEntity
<>(
carSignatureReqVo
);
ResponseEntity
<
ResultVo
>
responseEntity
=
this
.
restTemplate
.
exchange
(
...
...
@@ -206,7 +209,7 @@ public class ReportService {
e
.
printStackTrace
();
TaskErrorVo
taskErrorVo
=
new
TaskErrorVo
();
taskErrorVo
.
setCreateTime
(
DateUtil
.
date
());
taskErrorVo
.
setErrMsg
(
e
.
getCause
()
.
getMessage
()==
null
?
e
.
getMessage
():
e
.
getCause
()
.
getMessage
());
taskErrorVo
.
setErrMsg
(
e
.
getCause
()
!=
null
?
e
.
getCause
().
getMessage
():
e
.
getMessage
());
taskErrorMapper
.
insert
(
taskErrorVo
);
}
}
...
...
@@ -273,9 +276,11 @@ public class ReportService {
SignatureVo
signatureVo1
=
signatureService
.
getByDeptId
(
topDept
.
getDeptId
(),
signReportVo
.
getSnName1
());
SignatureVo
signatureVo2
=
signatureService
.
getByDeptId
(
topDept
.
getDeptId
(),
signReportVo
.
getSnName2
());
SignatureVo
signatureVo3
=
signatureService
.
getByDeptId
(
topDept
.
getDeptId
(),
signReportVo
.
getSnName3
());
SignatureVo
signatureVo4
=
signatureService
.
getByDeptId
(
topDept
.
getDeptId
(),
signReportVo
.
getSnName4
());
AssertUtil
.
isNotNull
(
signatureVo1
,
"当前部门无'"
+
signReportVo
.
getSnName1
()+
"'的签名"
);
AssertUtil
.
isNotNull
(
signatureVo2
,
"当前部门无'"
+
signReportVo
.
getSnName2
()+
"'的签名"
);
AssertUtil
.
isNotNull
(
signatureVo3
,
"当前部门无'"
+
signReportVo
.
getSnName3
()+
"'的公章"
);
AssertUtil
.
isNotNull
(
signatureVo4
,
"当前部门无'"
+
signReportVo
.
getSnName4
()+
"'的公章"
);
ReportPdfVo
reportPdfVo
=
reportPdfMapper
.
selectById
(
signReportVo
.
getReportPdfId
());
...
...
@@ -289,6 +294,7 @@ public class ReportService {
carSignatureReqVo
.
setSignature1
(
signatureVo1
);
carSignatureReqVo
.
setSignature2
(
signatureVo2
);
carSignatureReqVo
.
setSignature3
(
signatureVo3
);
carSignatureReqVo
.
setSignature4
(
signatureVo4
);
//reportPdfVo = signatureUtil.electronicGM(reportPdfVo, sysUserVo);
HttpEntity
<
CarSignatureReqVo
>
httpEntity
=
new
HttpEntity
<>(
carSignatureReqVo
);
ResponseEntity
<
ResultVo
>
responseEntity
=
this
.
restTemplate
.
exchange
(
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/system/service/SignatureService.java
View file @
18d6e520
...
...
@@ -44,8 +44,8 @@ public class SignatureService {
* @param snKey
* @return
*/
public
SignatureVo
getBySnKeyAndSnName
(
String
snKey
,
String
snName
){
return
signatureMapper
.
selectOne
(
new
QueryWrapper
<
SignatureVo
>().
lambda
().
and
(
i
->
i
.
eq
(
SignatureVo:
:
getSnKey
,
snKey
).
eq
(
SignatureVo:
:
getSnName
,
snName
)));
public
SignatureVo
getBySnKeyAndSnName
(
String
snKey
,
String
snName
,
Integer
deptId
){
return
signatureMapper
.
selectOne
(
new
QueryWrapper
<
SignatureVo
>().
lambda
().
and
(
i
->
i
.
eq
(
SignatureVo:
:
getSnKey
,
snKey
).
eq
(
SignatureVo:
:
getSnName
,
snName
)
.
eq
(
SignatureVo:
:
getDeptId
,
deptId
)
));
}
/**
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java
View file @
18d6e520
...
...
@@ -70,24 +70,24 @@ public class UserServiceImpl implements UserService {
@Override
public
Object
queryAll
(
UserQueryCriteria
criteria
,
Pageable
pageable
)
{
Page
<
User
>
page
=
userRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
),
pageable
);
page
.
getContent
().
forEach
(
user
->
{
/*
page.getContent().forEach(user -> {
SiteVo siteVo = siteMapper.selectById(user.getSiteId());
if(siteVo!=null){
user.setSiteName(siteVo.getName());
}
});
});
*/
return
PageUtil
.
toPage
(
page
.
map
(
userMapper:
:
toDto
));
}
@Override
public
List
<
UserDto
>
queryAll
(
UserQueryCriteria
criteria
)
{
List
<
User
>
users
=
userRepository
.
findAll
((
root
,
criteriaQuery
,
criteriaBuilder
)
->
QueryHelp
.
getPredicate
(
root
,
criteria
,
criteriaBuilder
));
users
.
forEach
(
user
->
{
/*
users.forEach(user -> {
SiteVo siteVo = siteMapper.selectById(user.getSiteId());
if(siteVo!=null){
user.setSiteName(siteVo.getName());
}
});
});
*/
return
userMapper
.
toDto
(
users
);
}
...
...
car-reptiles-system/src/main/java/me/zhengjie/modules/system/util/CarReportUtil.java
View file @
18d6e520
...
...
@@ -3,10 +3,7 @@ package me.zhengjie.modules.system.util;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.io.FileUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
cn.hutool.http.HttpStatus
;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.http.*
;
import
cn.hutool.json.JSONArray
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
...
...
@@ -36,6 +33,7 @@ import sun.misc.BASE64Encoder;
import
java.io.File
;
import
java.io.UnsupportedEncodingException
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
...
...
@@ -350,6 +348,10 @@ public class CarReportUtil {
e
.
printStackTrace
();
throw
new
BusinessException
(
e
.
getLocalizedMessage
());
}
if
(
driver
!=
null
){
driver
.
close
();
}
return
success
;
}
...
...
@@ -752,7 +754,9 @@ public class CarReportUtil {
}*/
//登录环保
driver
=
loginEp
(
username
,
password
,
null
);
driver
=
loginEp
(
username
,
password
,
BrowserVersion
.
INTERNET_EXPLORER
);
Thread
.
sleep
(
1000
);
//抓取检测报告超链接
WebElement
inspecReportBtn
=
driver
.
findElement
(
new
By
.
ById
(
"mainMenuTree_3_a"
));
...
...
@@ -762,36 +766,36 @@ public class CarReportUtil {
driver
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
.
setScriptTimeout
(
60
,
TimeUnit
.
SECONDS
).
pageLoadTimeout
(
120
,
TimeUnit
.
SECONDS
);
Thread
.
sleep
(
1
000
);
Thread
.
sleep
(
3
000
);
//点击完检测报告的超链接后,抓取frame窗口的元素
WebElement
homeFrame
=
driver
.
findElement
(
new
By
.
ByXPath
(
"//*[@id=\"tabs\"]/div[2]/div[2]/div/iframe"
));
//切换到iframe页面
WebDriver
frameD
river
=
driver
.
switchTo
().
frame
(
homeFrame
);
d
river
=
driver
.
switchTo
().
frame
(
homeFrame
);
//延迟加载html
frameD
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
d
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
.
setScriptTimeout
(
60
,
TimeUnit
.
SECONDS
).
pageLoadTimeout
(
120
,
TimeUnit
.
SECONDS
);
Thread
.
sleep
(
1
000
);
Thread
.
sleep
(
2
000
);
frameD
river
.
findElement
(
new
By
.
ByXPath
(
"//*[@id=\"table_Condition\"]/tbody/tr[2]/td[3]/input"
)).
click
();
d
river
.
findElement
(
new
By
.
ByXPath
(
"//*[@id=\"table_Condition\"]/tbody/tr[2]/td[3]/input"
)).
click
();
//获取车牌号输入框
WebElement
carNumInput
=
frameD
river
.
findElement
(
new
By
.
ByXPath
(
"//*[@id=\"conWindow\"]/div[1]/div/table/tbody/tr[1]/td[2]/input"
));
WebElement
carNumInput
=
d
river
.
findElement
(
new
By
.
ByXPath
(
"//*[@id=\"conWindow\"]/div[1]/div/table/tbody/tr[1]/td[2]/input"
));
carNumInput
.
sendKeys
(
detailsReqVo
.
getCarNum
());
//点击检索按钮
frameD
river
.
findElement
(
new
By
.
ById
(
"btnVin"
)).
click
();
d
river
.
findElement
(
new
By
.
ById
(
"btnVin"
)).
click
();
//延迟加载html
frameD
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
d
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
.
setScriptTimeout
(
60
,
TimeUnit
.
SECONDS
).
pageLoadTimeout
(
120
,
TimeUnit
.
SECONDS
);
Thread
.
sleep
(
2000
);
//抓取检索后的列表
List
<
WebElement
>
trElements
=
frameD
river
.
findElements
(
new
By
.
ByXPath
(
"//*[contains(@id,'datagrid-row-')]"
));
List
<
WebElement
>
trElements
=
d
river
.
findElements
(
new
By
.
ByXPath
(
"//*[contains(@id,'datagrid-row-')]"
));
AssertUtil
.
isTrue
(
trElements
.
size
()>
0
,
"获取该检测报告失败!"
);
//拿出对应的那条记录(根据检测编码)
WebElement
trElement
=
null
;
...
...
@@ -804,26 +808,33 @@ public class CarReportUtil {
//点击检索出来的列表
trElement
.
click
();
//延迟加载html
frameD
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
d
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
.
setScriptTimeout
(
60
,
TimeUnit
.
SECONDS
).
pageLoadTimeout
(
120
,
TimeUnit
.
SECONDS
);
Thread
.
sleep
(
2000
);
//抓取检测报告frame
WebElement
reportFrame
=
frameD
river
.
findElement
(
new
By
.
ById
(
"iframe_divReport"
));
WebElement
reportFrame
=
d
river
.
findElement
(
new
By
.
ById
(
"iframe_divReport"
));
//切换到检测报告frame
WebDriver
reportDriver
=
frameDriver
.
switchTo
().
frame
(
reportFrame
);
driver
=
driver
.
switchTo
().
frame
(
reportFrame
);
Thread
.
sleep
(
2000
);
//抓取打印预览按钮进行点击
WebElement
printView
=
reportDriver
.
findElement
(
new
By
.
ById
(
"A1"
));
//WebElement printView = reportDriver.findElement(new By.ById("A1"));
WebElement
printView
=
driver
.
findElement
(
new
By
.
ById
(
"btnPlaySelectAll"
));
printView
.
click
();
reportD
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
d
river
.
manage
().
timeouts
().
implicitlyWait
(
60
,
TimeUnit
.
SECONDS
)
.
setScriptTimeout
(
60
,
TimeUnit
.
SECONDS
).
pageLoadTimeout
(
120
,
TimeUnit
.
SECONDS
);
boolean
isError
=
reportD
river
.
getPageSource
().
contains
(
"无检测方法结果数据不允许打印操作"
);
boolean
isError
=
d
river
.
getPageSource
().
contains
(
"无检测方法结果数据不允许打印操作"
);
AssertUtil
.
isNotTrue
(
isError
,
"无检测方法结果数据不允许打印操作"
);
Thread
.
sleep
(
2500
);
//手动在授权人签字栏加上当天日期
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy.MM.dd"
);
String
todayStr
=
simpleDateFormat
.
format
(
DateUtil
.
date
());
//替换掉css样式的链接以及去掉多余的元素
Document
parse
=
Jsoup
.
parse
(
reportD
river
.
getPageSource
());
Document
parse
=
Jsoup
.
parse
(
d
river
.
getPageSource
());
parse
.
select
(
"a"
).
remove
();
String
reportHtml
=
parse
.
html
();
reportHtml
=
reportHtml
.
replace
(
"src=\"../.."
,
"src=\""
+
host
).
replace
(
"src=\"/businesscom"
,
"src=\""
+
host
+
"businesscom"
)
...
...
@@ -835,12 +846,15 @@ public class CarReportUtil {
" <br> \n"
+
" <br> \n"
+
" <font color=\"#FF00FF\"> (如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装) </font>"
,
" "
)
.
replace
(
"<div>"
,
"<div style=\"margin-left:-460px\">"
);
.
replace
(
"<div>"
,
"<div style=\"margin-left:-460px\">"
)
.
replace
(
"<td style=\"width:13.25%;\"> 授权签字人 </td> \n"
+
" <td colspan=\"4\" style=\"width:30%;border-left:none;border-right:none;\"></td>"
,
"<td style=\"width:13.25%;\"> 授权签字人 </td> \n"
+
" <td colspan=\"4\" style=\"width:30%;border-left:none;border-right:none;padding-left:100px\">"
+
todayStr
+
"</td>"
);
Document
parse1
=
Jsoup
.
parse
(
reportHtml
);
System
.
out
.
println
(
"检测报告二维码html:"
+
parse1
.
getElementById
(
"qrImg"
).
toString
());
String
imgSrc
=
parse1
.
getElementById
(
"qrImg"
).
attr
(
"src"
);
Object
[]
cookies
=
reportD
river
.
manage
().
getCookies
().
toArray
();
Object
[]
cookies
=
d
river
.
manage
().
getCookies
().
toArray
();
byte
[]
respBytes
=
HttpUtil
.
createGet
(
imgSrc
).
header
(
"Cookie"
,
cookies
[
0
].
toString
()
+
";"
+
cookies
[
1
].
toString
()
+
";"
+
cookies
[
2
].
toString
()).
execute
().
bodyBytes
();
FileUtil
.
writeBytes
(
respBytes
,
getReportPath
(
fileName
,
".png"
));
...
...
@@ -861,12 +875,15 @@ public class CarReportUtil {
PdfUtil
.
convert
(
reportHtmlPath
,
getReportPath
(
fileName
,
".pdf"
));
//离开当前检测报告页返回列表页面
reportD
river
.
switchTo
().
parentFrame
();
//d
river.switchTo().parentFrame();
log
.
info
(
">> 检测报告下载完成!"
);
if
(
driver
!=
null
){
driver
.
close
();
}
return
getReportPath
(
fileName
,
".pdf"
);
}
catch
(
InterruptedException
|
UnsupportedEncodingException
|
UnhandledAlertException
e
)
{
driver
.
close
();
e
.
printStackTrace
();
throw
new
BusinessException
(
"检测报告下载失败"
);
}
...
...
@@ -946,7 +963,7 @@ public class CarReportUtil {
MyContext
.
PHOTO_TABLE_NAME
,
MyContext
.
PHOTO_WHERE
,
fldsVo
.
getFld
(),
conditionVoList
,
null
,
5
);
JSONObject
body
=
JSONUtil
.
createObj
();
body
.
put
(
"data"
,
queryDataVo
);
body
.
put
(
"rows"
,
5
);
body
.
put
(
"rows"
,
10
);
body
.
put
(
"page"
,
1
);
body
.
put
(
"sort"
,
"DetectEndTime"
);
body
.
put
(
"order"
,
"DESC"
);
...
...
@@ -965,7 +982,7 @@ public class CarReportUtil {
//将结果转vo对象
InspecPageVo
pageVo
=
JSONUtil
.
toBean
(
queryResult
,
InspecPageVo
.
class
);
List
<
TestReportVo
>
collect
=
pageVo
.
getRows
().
stream
().
filter
(
i
->
Integer
.
valueOf
(
i
.
getPDFCount
())==
0
).
collect
(
Collectors
.
toList
());
List
<
TestReportVo
>
collect
=
pageVo
.
getRows
().
stream
().
filter
(
i
->
((
Integer
.
valueOf
(
i
.
getPDFCount
())==
0
)||
Integer
.
valueOf
(
i
.
getPDFCount
())==
2
)
).
collect
(
Collectors
.
toList
());
pageVo
.
setRows
(
collect
);
pageVo
.
setTotal
(
collect
.
size
());
return
pageVo
.
getRows
();
...
...
@@ -973,7 +990,7 @@ public class CarReportUtil {
/**
* 获取最新
5
条检测报告 (给定时任务使用)
* 获取最新
10
条检测报告 (给定时任务使用)
* @param username
* @param password
* @return
...
...
@@ -981,37 +998,48 @@ public class CarReportUtil {
*/
public
List
<
TestReportVo
>
taskReportList
(
String
username
,
String
password
)
{
//登录环保检测系统
WebDriver
driver
=
loginEp
(
username
,
password
,
null
)
;
WebDriver
driver
=
null
;
List
<
TestReportVo
>
testReportVoIPage
=
null
;
WebElement
inspecReportBtn
=
driver
.
findElement
(
new
By
.
ById
(
"mainMenuTree_3_a"
));
AssertUtil
.
isNotNull
(
inspecReportBtn
,
"抓取报告单菜单失败"
);
String
[]
reportA
=
inspecReportBtn
.
getAttribute
(
"onclick"
).
split
(
"/"
);
try
{
//登录环保检测系统
driver
=
loginEp
(
username
,
password
,
null
);
//抓取当前登录用户的站点名称
WebElement
stationSpan
=
driver
.
findElement
(
new
By
.
ById
(
"orgName"
));
AssertUtil
.
isNotBlank
(
stationSpan
.
getText
(),
"获取不到当前用户的站点名称"
);
Object
[]
cookies
=
driver
.
manage
().
getCookies
().
toArray
();
WebElement
inspecReportBtn
=
driver
.
findElement
(
new
By
.
ById
(
"mainMenuTree_3_a"
));
AssertUtil
.
isNotNull
(
inspecReportBtn
,
"抓取报告单菜单失败"
);
String
[]
reportA
=
inspecReportBtn
.
getAttribute
(
"onclick"
).
split
(
"/"
);
//获取所有站点信息
String
stationJsonStr
=
HttpUtil
.
createGet
(
getStationUrl
+
System
.
currentTimeMillis
())
.
header
(
"Cookie"
,
cookies
[
0
].
toString
()
+
";"
+
cookies
[
1
].
toString
()
+
";"
+
cookies
[
2
].
toString
()).
execute
().
body
();
AssertUtil
.
isNotBlank
(
stationJsonStr
,
"获取不到所有站点信息"
);
JSONArray
stationList
=
JSONUtil
.
parseArray
(
stationJsonStr
);
String
stationCode
=
""
;
for
(
Object
station:
stationList
){
JSONObject
stat
=
(
JSONObject
)
station
;
if
(
stat
.
getStr
(
"Name"
).
equals
(
stationSpan
.
getText
())){
stationCode
=
stat
.
getStr
(
"Code"
);
//抓取当前登录用户的站点名称
WebElement
stationSpan
=
driver
.
findElement
(
new
By
.
ById
(
"orgName"
));
AssertUtil
.
isNotBlank
(
stationSpan
.
getText
(),
"获取不到当前用户的站点名称"
);
Object
[]
cookies
=
driver
.
manage
().
getCookies
().
toArray
();
//获取所有站点信息
String
stationJsonStr
=
HttpUtil
.
createGet
(
getStationUrl
+
System
.
currentTimeMillis
())
.
header
(
"Cookie"
,
cookies
[
0
].
toString
()
+
";"
+
cookies
[
1
].
toString
()
+
";"
+
cookies
[
2
].
toString
()).
execute
().
body
();
AssertUtil
.
isNotBlank
(
stationJsonStr
,
"获取不到所有站点信息"
);
JSONArray
stationList
=
JSONUtil
.
parseArray
(
stationJsonStr
);
String
stationCode
=
""
;
for
(
Object
station:
stationList
){
JSONObject
stat
=
(
JSONObject
)
station
;
if
(
stat
.
getStr
(
"Name"
).
equals
(
stationSpan
.
getText
())){
stationCode
=
stat
.
getStr
(
"Code"
);
}
}
AssertUtil
.
isNotBlank
(
stationCode
,
"获取不到当前用户的站点编码"
);
testReportVoIPage
=
topReportList
(
stationCode
,
cookies
);
log
.
info
(
">> 扫描到的检测报告:"
);
testReportVoIPage
.
forEach
(
testReportVo
->
{
testReportVo
.
setSiteName
(
stationSpan
.
getText
());
System
.
out
.
println
(
testReportVo
.
toString
());
});
}
catch
(
HttpException
e
)
{
log
.
error
(
e
.
getMessage
());
}
if
(
driver
!=
null
){
driver
.
close
();
}
AssertUtil
.
isNotBlank
(
stationCode
,
"获取不到当前用户的站点编码"
);
List
<
TestReportVo
>
testReportVoIPage
=
topReportList
(
stationCode
,
cookies
);
log
.
info
(
">> 扫描到的检测报告:"
);
testReportVoIPage
.
forEach
(
testReportVo
->
{
testReportVo
.
setSiteName
(
stationSpan
.
getText
());
System
.
out
.
println
(
testReportVo
.
toString
());
});
return
testReportVoIPage
;
...
...
car-reptiles-system/src/main/resources/config/application-prod.yml
View file @
18d6e520
...
...
@@ -6,7 +6,7 @@ spring:
driverClassName
:
net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url
:
jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:car-reptiles}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
username
:
${DB_USER:root}
password
:
${DB_PWD:
root
}
password
:
${DB_PWD:
Xxt123456/
}
# 初始连接数
initial-size
:
5
# 最小连接数
...
...
car-reptiles-system/src/test/java/me/zhengjie/LoginCacheTest.java
View file @
18d6e520
...
...
@@ -3,17 +3,35 @@ package me.zhengjie;
import
me.zhengjie.modules.security.service.UserDetailsServiceImpl
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.omg.CORBA.PUBLIC_MEMBER
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
javax.annotation.Resource
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
(
webEnvironment
=
SpringBootTest
.
WebEnvironment
.
RANDOM_PORT
)
public
class
LoginCacheTest
{
@Resource
(
name
=
"userDetailsService"
)
private
UserDetailsServiceImpl
userDetailsService
;
public
synchronized
void
testSyncronized
(
Integer
i
){
System
.
out
.
println
(
i
+
"进入同步方法"
);
}
public
void
testSync
(
Integer
i
){
System
.
out
.
println
(
i
+
"开始异步执行同步方法。。。"
);
if
(
i
==
2
){
try
{
Thread
.
sleep
(
10000
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
testSyncronized
(
i
);
}
@Test
public
void
testCache
()
{
long
start1
=
System
.
currentTimeMillis
();
...
...
@@ -31,4 +49,13 @@ public class LoginCacheTest {
long
end2
=
System
.
currentTimeMillis
();
System
.
out
.
print
(
"使用缓存:"
+
(
end1
-
start1
)
+
"毫秒\n 不使用缓存:"
+
(
end2
-
start2
)
+
"毫秒"
);
}
@Test
public
void
testStramFilter
(){
List
<
String
>
strings
=
Arrays
.
asList
(
"1"
,
"2"
,
"0"
,
"1"
,
"2"
,
"888"
,
"2342"
,
"2"
);
List
<
String
>
collect
=
strings
.
stream
().
filter
(
i
->
((
Integer
.
valueOf
(
i
)
==
0
)
||
(
Integer
.
valueOf
(
i
)
==
2
))).
collect
(
Collectors
.
toList
());
collect
.
forEach
(
s
->
{
System
.
out
.
println
(
s
);
});
}
}
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