Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
I
inspect
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
912协同工作系统
项目监控管理工具
inspect
Commits
b1138d2e
提交
b1138d2e
authored
3月 19, 2020
作者:
孙洁清
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of git.yfzx.zjtys.com.cn:912-system/monitor/inspect
上级
2b32b0fd
031e5f4c
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
273 行增加
和
287 行删除
+273
-287
ExceptionHandlerConfig.java
.../java/com/zjty/inspect/config/ExceptionHandlerConfig.java
+30
-0
InspectController.java
...n/java/com/zjty/inspect/controller/InspectController.java
+53
-56
InspectParameter.java
src/main/java/com/zjty/inspect/entity/InspectParameter.java
+1
-1
Language.java
src/main/java/com/zjty/inspect/enums/Language.java
+2
-19
Inspector.java
src/main/java/com/zjty/inspect/inspect/Inspector.java
+181
-208
InspectService.java
src/main/java/com/zjty/inspect/service/InspectService.java
+2
-1
InspectServiceImpl.java
...ava/com/zjty/inspect/service/impl/InspectServiceImpl.java
+2
-1
WorkLoadUtil.java
src/main/java/com/zjty/inspect/utils/WorkLoadUtil.java
+2
-1
没有找到文件。
src/main/java/com/zjty/inspect/config/ExceptionHandlerConfig.java
0 → 100644
浏览文件 @
b1138d2e
package
com
.
zjty
.
inspect
.
config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.converter.HttpMessageNotReadableException
;
import
org.springframework.web.bind.annotation.ControllerAdvice
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
/**
* @author Mcj
* @date 2020-03-16 10:33
*/
@ControllerAdvice
@Slf4j
public
class
ExceptionHandlerConfig
{
@ExceptionHandler
(
value
=
HttpMessageNotReadableException
.
class
)
public
ResponseEntity
defaultErrorHandler
(
Exception
e
)
{
log
.
error
(
"异常{}"
,
e
);
return
ResponseEntity
.
badRequest
().
build
();
}
@ExceptionHandler
(
value
=
IOException
.
class
)
public
ResponseEntity
defaultIOHandler
(
Exception
e
)
{
log
.
error
(
"IO异常{}"
,
e
);
return
ResponseEntity
.
status
(
500
).
build
();
}
}
src/main/java/com/zjty/inspect/controller/InspectController.java
浏览文件 @
b1138d2e
...
...
@@ -45,20 +45,18 @@ public class InspectController {
@Autowired
private
TechnologyService
technologyService
;
@Autowired
private
ParameterService
parameterService
;
@Autowired
private
ReportService
reportService
;
@Autowired
private
ConfigParamDao
configParamDao
;
//应用类型转换:小型0
Integer
[]
small
=
{
3
,
4
};
Integer
[]
small
=
{
3
,
4
};
//应用类型转换:中型2
private
Integer
[]
middle
=
{
1
,
2
,
6
,
7
,
8
,
10
};
private
Integer
[]
middle
=
{
1
,
2
,
6
,
7
,
8
,
10
};
//应用类型转换:大型4
private
Integer
[]
big
=
{
5
,
9
};
private
Integer
[]
big
=
{
5
,
9
};
/**
* 上传代码进行评估
*
...
...
@@ -79,12 +77,17 @@ public class InspectController {
@ApiOperation
(
"上传代码进行评估"
)
public
ResponseEntity
inspect
(
Integer
years
,
Integer
systemFund
,
Integer
modules
,
String
valid
,
Integer
framework
,
Integer
safety
,
Integer
disaster
,
Integer
data
,
Integer
admin
,
String
projectName
,
Integer
tables
,
String
databaseType
,
Integer
content
,
Integer
method
,
String
username
,
MultipartFile
multfile
)
throws
IOException
{
,
Integer
admin
,
String
projectName
,
Integer
tables
,
String
databaseType
,
Integer
content
,
Integer
method
,
String
username
,
MultipartFile
multfile
)
throws
IOException
{
File
file
=
FileUtil
.
saveToLocal
(
multfile
);
log
.
info
(
"inspect:代码解压完成,地址为{}"
,
file
.
getCanonicalPath
());
InspectParameter
inspectParameter
=
new
InspectParameter
();
ReportVo
reportVo
=
new
ReportVo
();
if
(
multfile
!=
null
)
{
File
file
=
FileUtil
.
saveToLocal
(
multfile
);
log
.
info
(
"inspect:代码解压完成,地址为{}"
,
file
.
getCanonicalPath
());
inspectParameter
.
setSourceAddress
(
file
.
getCanonicalPath
());
reportVo
.
setFileName
(
file
.
getName
());
reportVo
.
setSourceAddress
(
file
.
getCanonicalPath
());
}
inspectParameter
.
setUsername
(
username
);
inspectParameter
.
setSystemFund
(
systemFund
);
inspectParameter
.
setModules
(
modules
);
...
...
@@ -100,14 +103,9 @@ public class InspectController {
inspectParameter
.
setAdmin
(
admin
);
inspectParameter
.
setSystemFund
(
systemFund
);
inspectParameter
.
setRecastMethod
(
method
);
inspectParameter
.
setSourceAddress
(
file
.
getCanonicalPath
());
ReportVo
reportVo
=
new
ReportVo
();
reportVo
.
setId
(
RandomUtil
.
getRandom
());
reportVo
.
setUploadType
(
"文件上传"
);
reportVo
.
setFileName
(
file
.
getName
());
reportVo
.
setProjectName
(
projectName
);
reportVo
.
setSourceAddress
(
file
.
getCanonicalPath
());
reportVo
.
setDatabaseType
(
databaseType
);
ReportVo
inspect
=
inspectService
.
inspect
(
reportVo
,
inspectParameter
);
...
...
@@ -116,11 +114,9 @@ public class InspectController {
int
support
=
technologyService
.
findAllTechnologyNotSupport
();
reportVo
.
setTechnologiesRepair
(
support
);
log
.
info
(
"inspect:代码评估完成"
);
// String filePath = inspectService.freemakerData(inspect,count,support);
reportVo
.
setHtmlAddress
(
null
);
Report
report
=
new
Report
();
String
random
=
RandomUtil
.
getRandom
();
report
.
setId
(
RandomUtil
.
getRandom
());
report
.
setHtmlAddress
(
reportVo
.
getHtmlAddress
());
reportService
.
saveReport
(
report
);
...
...
@@ -135,13 +131,13 @@ public class InspectController {
}
@PostMapping
(
"/rapidAssessment"
)
public
ResponseEntity
rapidAssessment
(
@RequestBody
Reform
reform
){
public
ResponseEntity
rapidAssessment
(
@RequestBody
Reform
reform
)
throws
IOException
{
//输入参数
String
in
=
JSON
.
toJSONString
(
reform
);
Evaluation
evaluation
=
new
Evaluation
();
Evaluation
evaluation
=
new
Evaluation
();
evaluation
.
setInEva
(
in
);
//判断评估类型
if
(
reform
.
getAssessmentType
()!=
null
&&
reform
.
getAssessmentType
()
==
1
)
{
if
(
reform
.
getAssessmentType
()
!=
null
&&
reform
.
getAssessmentType
()
==
1
)
{
//快速评估
reform
.
setSystemStructure
(
new
SystemStructure
());
reform
.
setBrowser
(
new
Browser
());
...
...
@@ -153,36 +149,36 @@ public class InspectController {
//获取admin
Config
adminConfig
=
configParamDao
.
findByName
(
"admin"
);
Integer
admin
;
if
(
adminConfig
!=
null
)
{
if
(
adminConfig
!=
null
)
{
admin
=
Integer
.
valueOf
(
adminConfig
.
getValue
());
}
else
{
}
else
{
admin
=
2
;
}
System
.
out
.
println
(
"admin:"
+
admin
);
System
.
out
.
println
(
"admin:"
+
admin
);
System
.
out
.
println
(
JSON
.
toJSONString
(
reform
));
//架构类型
Integer
framework
=
reform
.
getFramework
();
if
(
framework
!=
null
&&
framework
==
1
)
{
if
(
framework
!=
null
&&
framework
==
1
)
{
framework
=
2
;
}
//应用类型
Integer
content
=
0
;
List
<
Integer
>
applicationType
=
reform
.
getApplicationType
();
if
(
applicationType
==
null
||
applicationType
.
size
()==
0
)
{
if
(
applicationType
==
null
||
applicationType
.
size
()
==
0
)
{
content
=
-
1
;
}
else
{
for
(
Integer
type
:
applicationType
)
{
if
(
Arrays
.
asList
(
middle
).
contains
(
type
))
{
if
(
content
<
2
)
{
}
else
{
for
(
Integer
type
:
applicationType
)
{
if
(
Arrays
.
asList
(
middle
).
contains
(
type
))
{
if
(
content
<
2
)
{
content
=
2
;
}
}
else
if
(
Arrays
.
asList
(
big
).
contains
(
type
))
{
}
else
if
(
Arrays
.
asList
(
big
).
contains
(
type
))
{
content
=
4
;
break
;
}
}
}
System
.
out
.
println
(
"content:"
+
content
);
System
.
out
.
println
(
"content:"
+
content
);
InspectParameter
inspectParameter
=
new
InspectParameter
();
inspectParameter
.
setContent
(
content
);
...
...
@@ -207,16 +203,16 @@ public class InspectController {
int
support
=
technologyService
.
findAllTechnologyNotSupport
();
reportVo
.
setTechnologiesRepair
(
support
);
reportVo
.
setId
(
RandomUtil
.
getRandom
());
if
(
reform
.
getGitUrl
()==
null
)
{
if
(
reform
.
getGitUrl
()
==
null
)
{
reportVo
.
setUploadType
(
"文件上传"
);
}
else
{
}
else
{
reportVo
.
setUploadType
(
"git下载"
);
}
reportVo
.
setFileName
(
reform
.
getCodeName
());
reportVo
.
setProjectName
(
reform
.
getProjectName
());
reportVo
.
setSourceAddress
(
reform
.
getCodeUrl
());
reportVo
.
setDatabaseType
(
null
);
ReportVo
inspect
=
inspectService
.
inspect
(
reportVo
,
inspectParameter
);
ReportVo
inspect
=
inspectService
.
inspect
(
reportVo
,
inspectParameter
);
log
.
info
(
"inspect:代码评估完成"
);
Report
report
=
new
Report
();
String
random
=
RandomUtil
.
getRandom
();
...
...
@@ -239,9 +235,9 @@ public class InspectController {
将马晨俊的数据放入输出的表单
*/
AssessmentReport
assessmentReport
=
new
AssessmentReport
();
if
(
reform
.
getMode
()==
1
&&
inspect
.
getLanguage
()!=
1
)
{
if
(
reform
.
getMode
()
==
1
&&
inspect
.
getLanguage
()
!=
1
)
{
assessmentReport
.
setCode
(
500
);
}
else
{
}
else
{
assessmentReport
.
setCode
(
200
);
}
//架构
...
...
@@ -287,33 +283,33 @@ public class InspectController {
HashMap
<
String
,
List
<
Warn
>>
warnDetails
=
inspect
.
getWarnDetails
();
Set
<
String
>
keySet
=
warnDetails
.
keySet
();
List
<
TechnologyReport
>
technologyReports
=
new
ArrayList
<>();
for
(
String
key
:
keySet
)
{
for
(
String
key
:
keySet
)
{
List
<
Warn
>
warns
=
warnDetails
.
get
(
key
);
if
(
warns
.
size
()>
0
)
{
if
(
warns
.
size
()
>
0
)
{
TechnologyReport
technologyReport
=
new
TechnologyReport
();
technologyReport
.
setTechnology
(
key
);
//少一个策略
List
<
TechnologyContent
>
technologyContents
=
new
ArrayList
<>();
for
(
Warn
warn
:
warns
)
{
for
(
Warn
warn
:
warns
)
{
TechnologyContent
technologyContent
=
new
TechnologyContent
();
//technologyContent.setLocal(warn.get);
technologyContent
.
setFile
(
warn
.
getFilePath
());
technologyContent
.
setKeyWord
(
warn
.
getRule
());
technologyContent
.
setPosition
(
warn
.
getLineNum
().
toString
());
String
categoryId
=
warn
.
getCategoryId
();
if
(!
Objects
.
equals
(
categoryId
,
"0"
)
&&
categoryId
!=
null
&&
Objects
.
equals
(
categoryId
,
"1"
)
&&
(
key
.
contains
(
"不支持"
)
||
key
.
contains
(
"未知"
))){
if
(!
Objects
.
equals
(
categoryId
,
"0"
)
&&
categoryId
!=
null
&&
Objects
.
equals
(
categoryId
,
"1"
)
&&
(
key
.
contains
(
"不支持"
)
||
key
.
contains
(
"未知"
)))
{
number
+=
1
;
}
technologyContents
.
add
(
technologyContent
);
}
if
(
Objects
.
equals
(
key
,
"Microsoft CSS extensions(不支持)"
))
{
if
(
Objects
.
equals
(
key
,
"Microsoft CSS extensions(不支持)"
))
{
css
=
technologyContents
.
size
();
}
else
if
(
Objects
.
equals
(
key
,
"Microsoft API extensions(不支持)"
))
{
}
else
if
(
Objects
.
equals
(
key
,
"Microsoft API extensions(不支持)"
))
{
api
=
technologyContents
.
size
();
}
else
if
(
Objects
.
equals
(
key
,
"Microsoft JavaScript extensions(不支持)"
))
{
}
else
if
(
Objects
.
equals
(
key
,
"Microsoft JavaScript extensions(不支持)"
))
{
plugIn
=
technologyContents
.
size
();
}
else
if
(
Objects
.
equals
(
key
,
"JNI(不支持)"
))
{
}
else
if
(
Objects
.
equals
(
key
,
"JNI(不支持)"
))
{
jni
=
technologyContents
.
size
();
}
technologyReport
.
setTechnologyContents
(
technologyContents
);
...
...
@@ -352,7 +348,7 @@ public class InspectController {
browserDifficulty
.
setDocument
(
browser
.
getDocument
());
browserDifficulty
.
setMedia
(
browser
.
getMedia
());
browserDifficulty
.
setFlash
(
browser
.
getFlash
());
System
.
out
.
println
(
"BrowserDifficulty:"
+
JSON
.
toJSONString
(
browserDifficulty
));
System
.
out
.
println
(
"BrowserDifficulty:"
+
JSON
.
toJSONString
(
browserDifficulty
));
difficultyAssessment
.
setBrowserDifficulty
(
browserDifficulty
);
//中间件难度
MiddlewareDifficulty
middlewareDifficulty
=
new
MiddlewareDifficulty
();
...
...
@@ -390,7 +386,7 @@ public class InspectController {
middlewareDifficulty
.
setJms
(
middleware
.
getJms
());
middlewareDifficulty
.
setJndi
(
middleware
.
getJndi
());
middlewareDifficulty
.
setRoute
(
middleware
.
getRoute
());
System
.
out
.
println
(
"middlewareDifficulty"
+
JSON
.
toJSONString
(
middlewareDifficulty
));
System
.
out
.
println
(
"middlewareDifficulty"
+
JSON
.
toJSONString
(
middlewareDifficulty
));
difficultyAssessment
.
setMiddlewareDifficulty
(
middlewareDifficulty
);
//数据库难度
DatabaseDifficulty
databaseDifficulty
=
new
DatabaseDifficulty
();
...
...
@@ -404,11 +400,11 @@ public class InspectController {
//本地程序难度
ProgramDifficulty
programDifficulty
=
new
ProgramDifficulty
();
List
<
DependOnNum
>
dependOns
=
new
ArrayList
<>();
DependOnNum
dependOnNum2
=
new
DependOnNum
(
"jni"
,
jni
);
DependOnNum
dependOnNum2
=
new
DependOnNum
(
"jni"
,
jni
);
dependOns
.
add
(
dependOnNum2
);
programDifficulty
.
setDependOnNum
(
dependOns
);
difficultyAssessment
.
setProgramDifficulty
(
programDifficulty
);
System
.
out
.
println
(
"programDifficulty+:"
+
JSON
.
toJSONString
(
programDifficulty
));
System
.
out
.
println
(
"programDifficulty+:"
+
JSON
.
toJSONString
(
programDifficulty
));
assessmentReport
.
setDifficultyAssessment
(
difficultyAssessment
);
WorkLoadUtil
workLoadUtil
=
new
WorkLoadUtil
();
//r:人工费
...
...
@@ -416,8 +412,8 @@ public class InspectController {
//restTemplate.exchange("localhost:8079/config", HttpMethod.GET,new HttpEntity<>())
//计算f
Budget
budget
=
inspect
.
getBudgets
().
getBudget
().
get
(
0
);
double
f
=
budget
.
getProportion
()
*
budget
.
getSysFund
()*
budget
.
getMoneyRate
()*
budget
.
getCoefficient
();
System
.
out
.
println
(
"F:"
+
f
);
double
f
=
budget
.
getProportion
()
*
budget
.
getSysFund
()
*
budget
.
getMoneyRate
()
*
budget
.
getCoefficient
();
System
.
out
.
println
(
"F:"
+
f
);
workLoadUtil
.
result
(
reform
,
assessmentReport
,
f
,
1.5
);
...
...
@@ -434,23 +430,24 @@ public class InspectController {
}
@PostMapping
(
"/uploads"
)
private
ResponseEntity
uploads
(
@RequestParam
(
value
=
"file"
)
MultipartFile
multfile
,
String
s
)
{
private
ResponseEntity
uploads
(
@RequestParam
(
value
=
"file"
)
MultipartFile
multfile
,
String
s
)
{
try
{
File
file
=
FileUtil
.
saveToLocal
(
multfile
);
String
name
=
file
.
getName
();
String
path
=
file
.
getCanonicalPath
();
return
ResponseEntity
.
ok
(
new
com
.
zjty
.
inspect
.
entity
.
File
(
name
,
path
));
return
ResponseEntity
.
ok
(
new
com
.
zjty
.
inspect
.
entity
.
File
(
name
,
path
));
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
ResponseEntity
.
ok
(
"上传失败"
);
}
}
@PostMapping
(
"/gitdownload"
)
private
ResponseEntity
gitDownloads
(
String
gitAddress
,
String
username
,
String
password
)
{
private
ResponseEntity
gitDownloads
(
String
gitAddress
,
String
username
,
String
password
)
{
try
{
String
gitPath
=
GitLabUtil
.
downLoadProject
(
gitAddress
,
username
,
password
);
String
gitPath
=
GitLabUtil
.
downLoadProject
(
gitAddress
,
username
,
password
);
return
ResponseEntity
.
ok
(
gitPath
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
ResponseEntity
.
status
(
400
).
build
();
}
}
...
...
src/main/java/com/zjty/inspect/entity/InspectParameter.java
浏览文件 @
b1138d2e
...
...
@@ -35,7 +35,7 @@ public class InspectParameter {
private
Double
proportion
;
/**
*
年
利率
* 利率
*/
private
Double
moneyRate
;
...
...
src/main/java/com/zjty/inspect/enums/Language.java
浏览文件 @
b1138d2e
...
...
@@ -13,30 +13,18 @@ public enum Language {
*/
JAVA
(
"java"
,
1
),
VUE
(
"js"
,
2
),
PYTHON
(
"python"
,
3
),
ASP
(
"asp"
,
4
),
/**
* js
*/
JAVASCRIPT
(
"js"
,
5
),
/**
* go
*/
GO
(
"go"
,
6
),
/**
* html
*/
HTML
(
"html"
,
7
),
C
井
(
"c#"
,
8
),
C
(
"c++"
,
9
),
UNKNOW
(
"unknowun"
,
10
);
...
...
@@ -56,9 +44,4 @@ public enum Language {
public
Integer
getStatus
()
{
return
status
;
}
public
static
void
main
(
String
[]
args
)
{
Language
language
=
Language
.
valueOf
(
"VUE"
);
System
.
out
.
println
(
language
.
name
);
}
}
src/main/java/com/zjty/inspect/inspect/Inspector.java
浏览文件 @
b1138d2e
...
...
@@ -138,182 +138,21 @@ public class Inspector {
private
Map
<
String
,
Technology
>
technologyHashMap
=
new
HashMap
<>(
64
);
/**
* 统计各后缀文件路径与出现次数,顺便解析jar与js文件
* FileVisitResult.CONTINUE 继续遍历
* FileVisitResult.TERMINATE 中止访问
* FileVisitResult.SKIP_SIBLINGS 不访问同级的文件或目录
* FileVisitResult.SKIP_SUBTREE 不访问子目录
* 准备工作
* 1.解析文件
* 2/记录文件地址
* 3/统计各个规则文件后缀
*
* @return
* 评估
* @return 报告
*/
public
ReportVo
inspect
()
{
public
ReportVo
inspect
()
throws
IOException
{
//初始化值
initData
();
//查询技术,构造支持与非支持技术对象,3个对象
findExistTechnology
();
//配置语言 map结构
statisticsLanguage
();
//配置 config文件 结构
statisticsConfigFile
();
//查询所有规则,第一遍扫描文件需要
this
.
ruleList
=
ruleDao
.
findAll
();
//根据后缀名,收集文件进行操作
for
(
Rule
rule
:
ruleList
)
{
if
(!
ruleSuffixFilePathMap
.
containsKey
(
rule
.
getSuffix
()))
{
ruleSuffixFilePathMap
.
put
(
rule
.
getSuffix
(),
new
ArrayList
<>());
}
if
(!
ruleMap
.
containsKey
(
rule
.
getTarget
()
+
":"
+
rule
.
getSuffix
()))
{
ruleMap
.
put
(
rule
.
getTarget
()
+
":"
+
rule
.
getSuffix
(),
rule
);
}
}
//查询所有技术,第一遍扫描文件需要
List
<
Technology
>
technologies
=
technologyDao
.
findAll
();
for
(
Technology
technology
:
technologies
)
{
technologyHashMap
.
put
(
technology
.
getId
(),
technology
);
}
try
{
//以下为计算文件名称匹配正则表达式
FileSystem
aDefault
=
FileSystems
.
getDefault
();
Map
<
String
,
PathMatcher
>
languageSuffixMatcherMapping
=
new
HashMap
<>(
16
);
//构造各个语言后缀文件的正则表达式
for
(
String
s
:
suffixLanguageMapping
.
keySet
())
{
languageSuffixMatcherMapping
.
put
(
s
,
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
));
}
//构造各个配置文件的正则表达式,用于解析依赖
Map
<
PathMatcher
,
String
>
configFileMatcherSuffixMapping
=
new
HashMap
<>(
16
);
for
(
String
s
:
configFileTypePathsMapping
.
keySet
())
{
configFileMatcherSuffixMapping
.
put
(
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
),
s
);
}
//构造规则后缀的正则表达式
Map
<
PathMatcher
,
String
>
ruleSuffixMap
=
new
HashMap
<>(
16
);
for
(
String
s
:
ruleSuffixFilePathMap
.
keySet
())
{
ruleSuffixMap
.
put
(
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
),
s
);
}
//文件读取
Files
.
walkFileTree
(
Paths
.
get
(
inspectParameter
.
getSourceAddress
()),
new
FileVisitor
<
Path
>()
{
@Override
public
FileVisitResult
preVisitDirectory
(
Path
dir
,
BasicFileAttributes
attrs
)
throws
IOException
{
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
visitFile
(
Path
file
,
BasicFileAttributes
attrs
)
{
//扫描jar文件时
if
(
file
.
getFileName
().
toString
().
endsWith
(
".jar"
))
{
//新建一个pom对象
ProjectPom
projectPom
=
new
ProjectPom
();
//截取jar名称
String
patten
=
RegexUtil
.
patten
(
file
.
getFileName
().
toString
());
//新建一个依赖对象
PomDependency
pomDependency
=
new
PomDependency
();
pomDependency
.
setArtifactId
(
patten
);
projectPom
.
getDependencies
().
add
(
pomDependency
);
// TODO: 2020-03-04 界定rule唯一,修改数据,一条数据绑定两种技术
//当参数为1时代表上传者管理员,代码可绝对信任,将jar名称当作可支持依赖添加进规则库中
if
(
inspectParameter
.
getAdmin
()
==
1
)
{
//新建规则对象
Rule
rule
=
new
Rule
();
//设置适配技术id
rule
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule
.
setTarget
(
patten
);
//设置文件后缀
rule
.
setSuffix
(
"*"
);
rule
.
setId
(
UUIDUtil
.
getUUID
());
rule
.
setTechnologyName
(
techJavaSupport
.
getTechnologyName
());
//做规则查询,不用去数据库查询
if
(!
ruleMap
.
containsKey
(
patten
+
":"
+
rule
.
getSuffix
()))
{
rules
.
add
(
rule
);
ruleMap
.
put
(
patten
+
":"
+
rule
.
getSuffix
(),
rule
);
}
//设置当前依赖为可支持
pomDependency
.
setSupport
(
1
);
}
else
{
//为普通用户上传,依赖需要检查是否支持。
int
i
=
valiWarn
(
ruleList
,
file
,
patten
,
0
);
//如果值为0则代表是有不支持技术到匹配
pomDependency
.
setSupport
(
i
);
}
dependencyVo
.
add
(
projectPom
);
}
fileNum
+=
1
;
try
{
List
<
String
>
allLines
=
Files
.
readAllLines
(
file
);
fileLine
+=
allLines
.
size
();
}
catch
(
MalformedInputException
e
)
{
return
FileVisitResult
.
CONTINUE
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
for
(
Map
.
Entry
<
String
,
PathMatcher
>
entry
:
languageSuffixMatcherMapping
.
entrySet
())
{
//通过正则表达式匹配.java类型后缀文件,并+1
if
(
entry
.
getValue
().
matches
(
file
))
{
long
length
=
file
.
toFile
().
length
();
codeSize
+=
length
/
1024
;
languageMatchMap
.
get
(
entry
.
getKey
()).
plus
();
}
}
for
(
Map
.
Entry
<
PathMatcher
,
String
>
entry
:
configFileMatcherSuffixMapping
.
entrySet
())
{
//通过配置文件正则表达式匹配.xml文件,记录文件地址
if
(
entry
.
getKey
().
matches
(
file
))
{
configFileTypePathsMapping
.
get
(
entry
.
getValue
()).
add
(
file
);
}
}
for
(
Map
.
Entry
<
PathMatcher
,
String
>
entry
:
ruleSuffixMap
.
entrySet
())
{
//通过规则匹配后缀正则表达式匹配,记录匹配上的文件地址
if
(
entry
.
getKey
().
matches
(
file
))
{
ruleSuffixFilePathMap
.
get
(
entry
.
getValue
()).
add
(
file
);
}
}
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
visitFileFailed
(
Path
file
,
IOException
exc
)
{
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
postVisitDirectory
(
Path
dir
,
IOException
exc
)
{
return
FileVisitResult
.
CONTINUE
;
}
});
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
//扫描文件
scanFiles
();
inspectParameter
.
setCodeSize
((
int
)
codeSize
);
report
.
setFileNum
(
fileNum
);
report
.
setFileLine
(
fileLine
);
log
.
info
(
"inspect:源代码扫描完成,统计各个文件后缀完成"
);
return
analysis
();
}
private
void
initData
()
{
codeSize
=
0
;
ruleSuffixFilePathMap
=
new
HashMap
<>();
ruleSuffixMap
=
new
HashMap
<>();
technologyHashMap
=
new
HashMap
<>();
warns
.
clear
();
rules
.
clear
();
}
/**
* 解析数据
*
* @return Report
*/
@Transactional
public
ReportVo
analysis
()
{
DependencyVo
dependencyVo
=
new
DependencyVo
();
//统计项目语言
setReportLanguageAndFrame
();
//
查询所有规则
//
根据扫描结果以及用户配置得出需要使用的规则及技术
ruleTransform
(
report
.
getRecastMethod
());
//解析配置文件集合
for
(
Map
.
Entry
<
String
,
List
<
Path
>>
entry
:
configFileTypePathsMapping
.
entrySet
())
{
...
...
@@ -327,7 +166,6 @@ public class Inspector {
// TODO: 2020-02-28 解析maven树文件,设置依赖保存到redis
report
.
setManager
(
DependenceManagement
.
MAVEN
.
getStatus
());
ProjectPom
projectPom
=
analysisFile
.
analysisPom
(
path
);
StringBuilder
stringBuilder
=
new
StringBuilder
();
for
(
PomDependency
dependency
:
projectPom
.
getDependencies
())
{
setRule
(
path
,
stringBuilder
,
dependency
);
...
...
@@ -336,26 +174,6 @@ public class Inspector {
}
}
break
;
case
"gradle"
:
// for (Path path : entry.getValue()) {
// if (path.getFileName().endsWith("build.gradle")) {
// try {
// ProjectPom projectPom = new ProjectPom();
// report.setManager(DependenceManagement.GRADLE.getStatus());
// List<PomDependency> pomDependencies = AnalysisFile.analysisGradle(path);
// projectPom.setDependencies(pomDependencies);
// //设置依赖
// StringBuilder stringBuilder = new StringBuilder();
// for (PomDependency dependency : pomDependencies) {
// setRule(path, stringBuilder, dependency);
// }
// dependencyVo.add(projectPom);
// }catch (Exception e){
// e.printStackTrace();
// }
// }
// }
break
;
default
:
}
}
...
...
@@ -383,25 +201,24 @@ public class Inspector {
}
}
//将得到的告警信息根据技术id进行转换
Set
<
String
>
collec
t
=
warns
.
stream
().
map
(
Warn:
:
getTechnologyId
).
collect
(
Collectors
.
toSet
());
List
<
Technology
>
allById
=
technologyDao
.
findAllById
(
collec
t
);
Set
<
String
>
idSe
t
=
warns
.
stream
().
map
(
Warn:
:
getTechnologyId
).
collect
(
Collectors
.
toSet
());
List
<
Technology
>
technologies
=
technologyDao
.
findAllById
(
idSe
t
);
//计算技术金额
Integer
f
und
=
0
;
for
(
Technology
tech
:
allById
)
{
f
und
+=
tech
.
getFund
();
Integer
technologyF
und
=
0
;
for
(
Technology
tech
:
technologies
)
{
technologyF
und
+=
tech
.
getFund
();
}
//计算预算
if
(
inspectParameter
.
getValid
()
!=
null
)
{
BudgetVo
budget
=
budgetUitl
.
getBudget
(
f
und
,
report
,
inspectParameter
);
BudgetVo
budget
=
budgetUitl
.
getBudget
(
technologyF
und
,
report
,
inspectParameter
);
report
.
setBudgets
(
budget
);
}
parameterDao
.
save
(
inspectParameter
);
//填充地址(如果有)
report
.
setGitAddress
(
inspectParameter
.
getGitAddress
());
//填充适配技术
report
.
setTechnologies
(
allById
);
report
.
setTechnologies
(
technologies
);
//填充依赖
report
.
setDependencyVo
(
dependencyVo
);
//数据转换
...
...
@@ -409,14 +226,12 @@ public class Inspector {
ruleDao
.
saveAll
(
rules
);
report
.
setWarnDetails
(
warnMap
);
log
.
info
(
"评估报告关键技术,{}"
,
warnMap
);
fileLine
=
0
;
fileNum
=
0
;
return
report
;
}
/**
* 比对源文件数量
* 比对源文件数量
得出语言架构
*/
private
void
setReportLanguageAndFrame
()
{
String
most
=
null
;
...
...
@@ -448,8 +263,8 @@ public class Inspector {
/**
* rule所需要数据装配
*/
private
void
ruleTransform
(
Integer
i
)
{
if
(
i
==
1
)
{
private
void
ruleTransform
(
Integer
status
)
{
if
(
status
==
1
)
{
List
<
Technology
>
front
=
technologyDao
.
findAllByBackorfrontEquals
(
1
);
List
<
String
>
ids
=
front
.
stream
().
map
(
Technology:
:
getId
).
collect
(
Collectors
.
toList
());
this
.
ruleList
=
ruleDao
.
findAllByTechnologyIdIn
(
ids
);
...
...
@@ -476,17 +291,37 @@ public class Inspector {
ruleSuffixMap
.
get
(
rule
.
getSuffix
()).
add
(
rule
);
}
}
ArrayList
<
String
>
k
eys
=
new
ArrayList
<>();
ArrayList
<
String
>
ruleSuffixK
eys
=
new
ArrayList
<>();
for
(
String
s
:
ruleSuffixFilePathMap
.
keySet
())
{
if
(!
ruleSuffixMap
.
containsKey
(
s
))
{
k
eys
.
add
(
s
);
ruleSuffixK
eys
.
add
(
s
);
}
}
for
(
String
key
:
k
eys
)
{
for
(
String
key
:
ruleSuffixK
eys
)
{
ruleSuffixFilePathMap
.
remove
(
key
);
}
}
private
void
initData
()
{
codeSize
=
0
;
fileLine
=
0
;
fileNum
=
0
;
dependencyVo
=
new
DependencyVo
();
ruleSuffixFilePathMap
=
new
HashMap
<>();
ruleSuffixMap
=
new
HashMap
<>();
technologyHashMap
=
new
HashMap
<>();
warns
.
clear
();
rules
.
clear
();
//查询技术,构造支持与非支持技术对象,3个对象
findExistTechnology
();
//配置语言 map结构
statisticsLanguage
();
//配置 config文件 结构
statisticsConfigFile
();
initRule
();
initTechnology
();
}
private
void
statisticsConfigFile
()
{
this
.
configFileTypePathsMapping
=
new
HashMap
<>();
configFileTypePathsMapping
.
put
(
"xml"
,
new
ArrayList
<>());
...
...
@@ -512,6 +347,33 @@ public class Inspector {
techUnKnowSupport
=
technologyDao
.
findAllByTechnologyNameEquals
(
"未知依赖(未知)"
);
}
/**
* 初始化规则
*/
private
void
initRule
()
{
//查询所有规则,第一遍扫描文件需要
this
.
ruleList
=
ruleDao
.
findAll
();
//根据后缀名,收集文件进行操作
for
(
Rule
rule
:
ruleList
)
{
if
(!
ruleSuffixFilePathMap
.
containsKey
(
rule
.
getSuffix
()))
{
ruleSuffixFilePathMap
.
put
(
rule
.
getSuffix
(),
new
ArrayList
<>());
}
if
(!
ruleMap
.
containsKey
(
rule
.
getTarget
()
+
":"
+
rule
.
getSuffix
()))
{
ruleMap
.
put
(
rule
.
getTarget
()
+
":"
+
rule
.
getSuffix
(),
rule
);
}
}
}
/**
* 初始化技术
*/
private
void
initTechnology
()
{
//查询所有技术,第一遍扫描文件需要
List
<
Technology
>
technologies
=
technologyDao
.
findAll
();
for
(
Technology
technology
:
technologies
)
{
technologyHashMap
.
put
(
technology
.
getId
(),
technology
);
}
}
/**
* 数据转换
...
...
@@ -643,12 +505,12 @@ public class Inspector {
warns
.
add
(
warn
);
//设置a=0代表当前依赖有问题
supportStatus
=
technology
.
getSupport
();
}
else
{
if
(
supportWarns
.
size
()!=
10
)
{
}
else
{
if
(
supportWarns
.
size
()
!=
10
)
{
supportWarns
.
add
(
warn
);
}
Integer
size
=
report
.
getSupportSize
();
Integer
integer
=
size
+
1
;
Integer
integer
=
size
+
1
;
report
.
setSupportSize
(
integer
);
supportStatus
=
1
;
}
...
...
@@ -657,6 +519,117 @@ public class Inspector {
return
supportStatus
;
}
public
void
scanFiles
()
throws
IOException
{
//以下为计算文件名称匹配正则表达式
FileSystem
aDefault
=
FileSystems
.
getDefault
();
Map
<
String
,
PathMatcher
>
languageSuffixMatcherMapping
=
new
HashMap
<>(
16
);
//构造各个语言后缀文件的正则表达式
for
(
String
s
:
suffixLanguageMapping
.
keySet
())
{
languageSuffixMatcherMapping
.
put
(
s
,
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
));
}
//构造各个配置文件的正则表达式,用于解析依赖
Map
<
PathMatcher
,
String
>
configFileMatcherSuffixMapping
=
new
HashMap
<>(
16
);
for
(
String
s
:
configFileTypePathsMapping
.
keySet
())
{
configFileMatcherSuffixMapping
.
put
(
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
),
s
);
}
//构造规则后缀的正则表达式
Map
<
PathMatcher
,
String
>
ruleSuffixMap
=
new
HashMap
<>(
16
);
for
(
String
s
:
ruleSuffixFilePathMap
.
keySet
())
{
ruleSuffixMap
.
put
(
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
),
s
);
}
//文件读取
if
(
inspectParameter
.
getSourceAddress
()!=
null
){
Files
.
walkFileTree
(
Paths
.
get
(
inspectParameter
.
getSourceAddress
()),
new
FileVisitor
<
Path
>()
{
@Override
public
FileVisitResult
preVisitDirectory
(
Path
dir
,
BasicFileAttributes
attrs
)
throws
IOException
{
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
visitFile
(
Path
file
,
BasicFileAttributes
attrs
)
{
//扫描jar文件时
if
(
file
.
getFileName
().
toString
().
endsWith
(
".jar"
))
{
//新建一个pom对象
ProjectPom
projectPom
=
new
ProjectPom
();
//截取jar名称
String
patten
=
RegexUtil
.
patten
(
file
.
getFileName
().
toString
());
//新建一个依赖对象
PomDependency
pomDependency
=
new
PomDependency
();
pomDependency
.
setArtifactId
(
patten
);
projectPom
.
getDependencies
().
add
(
pomDependency
);
//当参数为1时代表上传者管理员,代码可绝对信任,将jar名称当作可支持依赖添加进规则库中
if
(
inspectParameter
.
getAdmin
()
==
1
)
{
//新建规则对象
Rule
rule
=
new
Rule
();
//设置适配技术id
rule
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule
.
setTarget
(
patten
);
//设置文件后缀
rule
.
setSuffix
(
"*"
);
rule
.
setId
(
UUIDUtil
.
getUUID
());
rule
.
setTechnologyName
(
techJavaSupport
.
getTechnologyName
());
//做规则查询,不用去数据库查询
if
(!
ruleMap
.
containsKey
(
patten
+
":"
+
rule
.
getSuffix
()))
{
rules
.
add
(
rule
);
ruleMap
.
put
(
patten
+
":"
+
rule
.
getSuffix
(),
rule
);
}
//设置当前依赖为可支持
pomDependency
.
setSupport
(
1
);
}
else
{
//为普通用户上传,依赖需要检查是否支持。
int
i
=
valiWarn
(
ruleList
,
file
,
patten
,
0
);
//如果值为0则代表是有不支持技术到匹配
pomDependency
.
setSupport
(
i
);
}
dependencyVo
.
add
(
projectPom
);
}
fileNum
+=
1
;
try
{
List
<
String
>
allLines
=
Files
.
readAllLines
(
file
);
fileLine
+=
allLines
.
size
();
}
catch
(
MalformedInputException
e
)
{
return
FileVisitResult
.
CONTINUE
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
for
(
Map
.
Entry
<
String
,
PathMatcher
>
entry
:
languageSuffixMatcherMapping
.
entrySet
())
{
//通过正则表达式匹配.java类型后缀文件,并+1
if
(
entry
.
getValue
().
matches
(
file
))
{
long
length
=
file
.
toFile
().
length
();
codeSize
+=
length
/
1024
;
languageMatchMap
.
get
(
entry
.
getKey
()).
plus
();
}
}
for
(
Map
.
Entry
<
PathMatcher
,
String
>
entry
:
configFileMatcherSuffixMapping
.
entrySet
())
{
//通过配置文件正则表达式匹配.xml文件,记录文件地址
if
(
entry
.
getKey
().
matches
(
file
))
{
configFileTypePathsMapping
.
get
(
entry
.
getValue
()).
add
(
file
);
}
}
for
(
Map
.
Entry
<
PathMatcher
,
String
>
entry
:
ruleSuffixMap
.
entrySet
())
{
//通过规则匹配后缀正则表达式匹配,记录匹配上的文件地址
if
(
entry
.
getKey
().
matches
(
file
))
{
ruleSuffixFilePathMap
.
get
(
entry
.
getValue
()).
add
(
file
);
}
}
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
visitFileFailed
(
Path
file
,
IOException
exc
)
{
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
postVisitDirectory
(
Path
dir
,
IOException
exc
)
{
return
FileVisitResult
.
CONTINUE
;
}
});
}
}
public
class
Counter
{
private
int
i
=
0
;
...
...
src/main/java/com/zjty/inspect/service/InspectService.java
浏览文件 @
b1138d2e
...
...
@@ -4,6 +4,7 @@ import com.zjty.inspect.entity.InspectParameter;
import
com.zjty.inspect.entity.Report
;
import
com.zjty.inspect.entity.ReportVo
;
import
java.io.IOException
;
import
java.util.Map
;
public
interface
InspectService
{
...
...
@@ -12,7 +13,7 @@ public interface InspectService {
* @param inspectParameter
* @return
*/
ReportVo
inspect
(
ReportVo
reportVo
,
InspectParameter
inspectParameter
);
ReportVo
inspect
(
ReportVo
reportVo
,
InspectParameter
inspectParameter
)
throws
IOException
;
String
generateHtml
(
String
templateContent
,
Map
model
);
...
...
src/main/java/com/zjty/inspect/service/impl/InspectServiceImpl.java
浏览文件 @
b1138d2e
...
...
@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import
org.springframework.ui.freemarker.FreeMarkerTemplateUtils
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -45,7 +46,7 @@ public class InspectServiceImpl implements InspectService {
@Transactional
@Override
public
ReportVo
inspect
(
ReportVo
reportVo
,
InspectParameter
inspectParameter
)
{
public
ReportVo
inspect
(
ReportVo
reportVo
,
InspectParameter
inspectParameter
)
throws
IOException
{
//统计文件后缀数量
Map
<
String
,
Language
>
suffixLanguageMapping
=
new
HashMap
<>();
suffixLanguageMapping
.
put
(
"java"
,
Language
.
JAVA
);
...
...
src/main/java/com/zjty/inspect/utils/WorkLoadUtil.java
浏览文件 @
b1138d2e
...
...
@@ -290,7 +290,8 @@ public class WorkLoadUtil {
(
1.0
+(
browserDifficulty
.
getFlash
()!=
null
&&
browserDifficulty
.
getFlash
()==
1
?
1.0
:
0
)/
100
)*
(
1.0
+(
browserDifficulty
.
getOtherDemand
()!=
null
&&
browserDifficulty
.
getOtherDemand
()==
1
?
1.0
:
0
)/
100
);
List
<
CompatibleBrowser
>
compatibleBrowsers
=
reform
.
getBrowser
().
getCompatibleBrowsers
();
if
(
compatibleBrowsers
!=
null
&&
compatibleBrowsers
.
contains
(
CompatibleBrowser
.
IETRIDENT
))
{
//if (compatibleBrowsers!=null&&compatibleBrowsers.contains(CompatibleBrowser.IETRIDENT)) {
if
(
compatibleBrowsers
==
null
||!
compatibleBrowsers
.
contains
(
CompatibleBrowser
.
FIREFOX
))
{
eBrowser
*=
1.1
;
logger
.
info
(
"浏览器难度包含IE"
);
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论