提交 6162fb2b authored 作者: 孙洁清's avatar 孙洁清

Merge branch 'master' of git.yfzx.zjtys.com.cn:912-system/monitor/inspect

package com.zjty.inspect.controller; package com.zjty.inspect.controller;
import com.alibaba.fastjson.JSON;
import com.zjty.inspect.dao.TechnologyDao; import com.zjty.inspect.dao.TechnologyDao;
import com.zjty.inspect.entity.*; import com.zjty.inspect.entity.*;
import com.zjty.inspect.service.InspectService; import com.zjty.inspect.service.InspectService;
...@@ -21,9 +22,8 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -21,9 +22,8 @@ import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile;
import java.io.*; import java.io.*;
import java.util.HashMap; import java.io.File;
import java.util.List; import java.util.*;
import java.util.Map;
/** /**
* 评估接口 * 评估接口
...@@ -133,4 +133,211 @@ public class InspectController { ...@@ -133,4 +133,211 @@ public class InspectController {
ReportVo inspect = inspectService.inspect(reportVo, inspectParameter); ReportVo inspect = inspectService.inspect(reportVo, inspectParameter);
return ResponseEntity.ok(inspect); return ResponseEntity.ok(inspect);
} }
@PostMapping("/frontend")
@ApiOperation("git下载代码进行评估")
public ResponseEntity inspect(MultipartFile file) throws IOException {
return ResponseEntity.ok(200);
}
@PostMapping("/rapidAssessment")
public ResponseEntity rapidAssessment(@RequestBody Reform reform){
System.out.println(JSON.toJSONString(reform));
InspectParameter inspectParameter = new InspectParameter();
inspectParameter.setUsername(reform.getUsername());
inspectParameter.setValid("1");
inspectParameter.setSourceAddress(reform.getCodeUrl());
inspectParameter.setSystemFund(reform.getCost());
inspectParameter.setAdmin(reform.getAdmin());
inspectParameter.setModules(reform.getModuleNum());
inspectParameter.setSafety(reform.getSafe());
inspectParameter.setTables(reform.getTableNum());
inspectParameter.setDisaster(reform.getDisasterTolerance());
inspectParameter.setData(reform.getDatabaseNum());
inspectParameter.setFramework(reform.getFramework());
inspectParameter.setGitAddress(reform.getGitUrl());
inspectParameter.setRecastMethod(reform.getMode());
inspectParameter.setYears(reform.getTime());
inspectParameter.setId(UUIDUtil.getUUID());
ReportVo reportVo = new ReportVo();
int count = technologyService.findAllTechnologyCount();
reportVo.setTechnologiesNum(count);
int support = technologyService.findAllTechnologyNotSupport();
reportVo.setTechnologiesRepair(support);
reportVo.setId(RandomUtil.getRandom());
reportVo.setUploadType("文件上传");
reportVo.setFileName(reform.getCodeName());
reportVo.setProjectName(reform.getProjectName());
reportVo.setSourceAddress(reform.getCodeUrl());
reportVo.setDatabaseType(null);
ReportVo inspect = inspectService.inspect(reportVo,inspectParameter);
log.info("inspect:代码评估完成");
Report report = new Report();
String random = RandomUtil.getRandom();
report.setId(RandomUtil.getRandom());
report.setHtmlAddress(reportVo.getHtmlAddress());
reportService.saveReport(report);
/*
马晨俊运算结束
*/
System.out.println(JSON.toJSONString(inspect));
/*
将马晨俊的数据放入输出的表单
*/
AssessmentReport assessmentReport = new AssessmentReport();
//系统名称
assessmentReport.setSysName(inspect.getProjectName());
//软件名称
assessmentReport.setOrgName(inspect.getFileName());
//评估时间
assessmentReport.setTime(inspect.getCreateDate());
//适配预算
assessmentReport.setBudget(inspect.getBudgets().getBudget().get(0).getFund());
//原系统规模,马晨俊没放进去
//技术详情,马晨俊的警告点,同时统计技术的数量
//样式调整
int css = 0;
//API数量
int api = 0;
//插件替换数量
int plugIn = 0;
//jni数量
int jni = 0;
HashMap<String, List<Warn>> warnDetails = inspect.getWarnDetails();
Set<String> keySet = warnDetails.keySet();
List<TechnologyReport> technologyReports = new ArrayList<>();
for (String key:keySet) {
List<Warn> warns = warnDetails.get(key);
if(warns.size()>0){
TechnologyReport technologyReport = new TechnologyReport();
technologyReport.setTechnology(key);
//少一个策略
List<TechnologyContent> technologyContents = new ArrayList<>();
for (Warn warn:warns) {
TechnologyContent technologyContent = new TechnologyContent();
technologyContent.setFile(warn.getFilePath());
technologyContent.setKeyWord(warn.getRule());
technologyContent.setPosition(warn.getLineNum().toString());
technologyContents.add(technologyContent);
}
if(Objects.equals(key, "Microsoft CSS extensions(不支持)")){
css = technologyContents.size();
}else if(Objects.equals(key, "Microsoft API extensions(不支持)")){
api = technologyContents.size();
}else if(Objects.equals(key, "Microsoft JavaScript extensions(不支持)")){
plugIn = technologyContents.size();
}else if(Objects.equals(key, "JNI(不支持)")){
jni = technologyContents.size();
}
technologyReport.setTechnologyContents(technologyContents);
technologyReports.add(technologyReport);
}
}
TechnologyList technologyList = new TechnologyList();
technologyList.setDes(null);
technologyList.setTechnologyReports(technologyReports);
assessmentReport.setTechnologyList(technologyList);
//额外申请
assessmentReport.setApply(reform.getApply());
//难度数据填写
DifficultyAssessment difficultyAssessment = new DifficultyAssessment();
//系统部署架构难度,reform中获取
FrameDifficulty frameDifficulty = new FrameDifficulty();
frameDifficulty.setDetails(inspect.getFramework());
SystemStructure systemStructure = reform.getSystemStructure();
frameDifficulty.setDisaster(systemStructure.getDisaster());
frameDifficulty.setDistributed(systemStructure.getDistributed());
frameDifficulty.setLoadBalance(systemStructure.getLoadBalance());
frameDifficulty.setOtherDemand(systemStructure.getOtherDemand());
difficultyAssessment.setFrameDifficulty(frameDifficulty);
//浏览器难度
BrowserDifficulty browserDifficulty = new BrowserDifficulty();
browserDifficulty.setApi(api);
browserDifficulty.setStyle(css);
browserDifficulty.setPlugInUnit(plugIn);
Browser browser = reform.getBrowser();
browserDifficulty.setOtherDemand(browser.getOtherDemand());
browserDifficulty.setGeography(browser.getGeography());
browserDifficulty.setPeripheral(browser.getPeripheral());
browserDifficulty.setAnimation(browser.getAnimation());
browserDifficulty.setThreeD(browser.getThreeD());
browserDifficulty.setDocument(browser.getDocument());
browserDifficulty.setMedia(browser.getMedia());
browserDifficulty.setFlash(browser.getFlash());
System.out.println("BrowserDifficulty:"+JSON.toJSONString(browserDifficulty));
difficultyAssessment.setBrowserDifficulty(browserDifficulty);
//中间件难度
MiddlewareDifficulty middlewareDifficulty = new MiddlewareDifficulty();
//所有的依赖
List<PomDependency> dependencies = inspect.getDependencyVo().getDepTreeList().get(0).getDependencies();
HashMap<String,Integer> num = new HashMap<>();
for (PomDependency pomDependency:dependencies) {
String groupId = pomDependency.getGroupId();
Integer integer = num.get(groupId);
if(integer == null){
num.put(groupId,1);
}else{
integer = integer+1;
num.put(groupId,integer);
}
}
System.out.println("所有依赖:"+JSON.toJSONString(num));
Set<String> strings = num.keySet();
List<DependOnNum> dependOnNums = new ArrayList<>();
for (String s:strings) {
DependOnNum dependOnNum = new DependOnNum();
dependOnNum.setName(s);
dependOnNum.setNum(num.get(s));
dependOnNums.add(dependOnNum);
}
middlewareDifficulty.setDependOnNum(dependOnNums);
Middleware middleware = reform.getMiddleware();
middlewareDifficulty.setWeb(middleware.getWeb());
middlewareDifficulty.setJms(middleware.getJms());
middlewareDifficulty.setJndi(middleware.getJndi());
middlewareDifficulty.setRoute(middleware.getRoute());
System.out.println("middlewareDifficulty"+JSON.toJSONString(middlewareDifficulty));
difficultyAssessment.setMiddlewareDifficulty(middlewareDifficulty);
//数据库难度
DatabaseDifficulty databaseDifficulty = new DatabaseDifficulty();
Database database = reform.getDatabase();
databaseDifficulty.setDisasterTolerance(database.getDisasterTolerance());
databaseDifficulty.setSafe(database.getSafe());
databaseDifficulty.setSeparate(database.getSeparate());
databaseDifficulty.setPerformance(database.getPerformance());
databaseDifficulty.setOtherContent(database.getOtherContent());
difficultyAssessment.setDatabaseDifficulty(databaseDifficulty);
//本地程序难度
ProgramDifficulty programDifficulty = new ProgramDifficulty();
List<DependOnNum> dependOns = new ArrayList<>();
DependOnNum dependOnNum = new DependOnNum("jni",jni);
dependOns.add(dependOnNum);
programDifficulty.setDependOnNum(dependOns);
difficultyAssessment.setProgramDifficulty(programDifficulty);
System.out.println("programDifficulty+:"+JSON.toJSONString(programDifficulty));
assessmentReport.setDifficultyAssessment(difficultyAssessment);
WorkLoadUtil workLoadUtil = new WorkLoadUtil();
//r:人工费
//计算f
Budget budget = inspect.getBudgets().getBudget().get(0);
double f = budget.getProportion()*budget.getSysFund()*budget.getMoneyRate()*budget.getCoefficient();
System.out.println("F:"+f);
workLoadUtil.result(reform, assessmentReport, f, 120);
return ResponseEntity.ok(assessmentReport);
}
@PostMapping("/uploads")
private ResponseEntity uploads(@RequestParam(value = "file") MultipartFile multfile){
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));
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.ok("上传失败");
}
}
} }
...@@ -48,7 +48,7 @@ public class AssessmentReport { ...@@ -48,7 +48,7 @@ public class AssessmentReport {
/** /**
* 预算金额 double * 预算金额 double
*/ */
private double budget = 1.1; private String budget = "53.973348451903085--129.498761216";
/** /**
* 原系统规模 * 原系统规模
......
...@@ -60,5 +60,5 @@ public class DatabaseDifficulty { ...@@ -60,5 +60,5 @@ public class DatabaseDifficulty {
/** /**
* 其他内容 * 其他内容
*/ */
private Integer otherContent = 1; private String otherContent = "其他内容";
} }
package com.zjty.inspect.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* <h4>Description : inspect</h4>
*
* @author : M@tr!x [xhyrzldf@foxmail.com]
* @Date : 2020-03-06 21:25
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class File {
private String name;
private String path;
}
...@@ -5,6 +5,8 @@ import lombok.AllArgsConstructor; ...@@ -5,6 +5,8 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date;
/** /**
* <h4>Description : 应用系统改造替换表单</h4> * <h4>Description : 应用系统改造替换表单</h4>
* *
...@@ -15,31 +17,34 @@ import lombok.NoArgsConstructor; ...@@ -15,31 +17,34 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class Reform { public class Reform {
/*
基础
*/
/** /**
* 替换方式 int(1:改造 2:适配) * admin 是否是管理员
*/ */
private Integer mode ; private Integer admin;
/** /**
* 改造解释链接 * username
*/
private String username;
/*
快速评估部分
*/ */
private String reformUrl;
/** /**
* 适配解释链接 * 替换方式 int(1:改造 2:适配)
*/ */
private String adaptationUrl; private Integer mode ;
/** /**
* 系统名称 * 系统名称
*/ */
private String projectName; private String projectName;
/**
* 上传类型
*/
private String uploadType;
/** /**
* 代码地址 * 代码地址
...@@ -47,49 +52,76 @@ public class Reform { ...@@ -47,49 +52,76 @@ public class Reform {
private String codeUrl; private String codeUrl;
/** /**
* 模块数 * 文件名称
*/
private String codeName;
/**
* git地址
*/ */
private String moduleNum; private String gitUrl;
/** /**
*开发语言 * 模块数
*/ */
private String language; private Integer moduleNum;
/** /**
* 原开发费用 * 原开发费用
*/ */
private double cost; private Integer cost;
/**
* 开发单位是否在本地int 1:是 2:否
*/
private Integer address;
/**
* 是否为涉密信息系统 int 1:是 2:否
*/
private Integer secret;
/** /**
* 原开发周期 * 容灾能力 int 1:是 2:否
*/ */
private Integer cycle; private Integer disasterTolerance;
/** /**
* 服务设备台数 * 安全能力
* 1:无
* 2:弱
* 3:强
*/ */
private Integer serverNum; private Integer safe;
/**
* 架构
*/
private Integer framework;
/** /**
* 该应用类型 * 该应用类型
*/ */
private ApplicationType applicationType; private Integer applicationType;
/** /**
* 开发单位是否在本地int 1:是 2:否 * 运行时间
*/ */
private Integer address; private Integer time;
/** /**
* 是否为涉密信息系统 int 1:是 2:否 * 数据库表数量
*/ */
private Integer secret; private Integer tableNum;
/** /**
* 详细填写 * 数据库数据量
*/
private Integer databaseNum;
/*
详细填写
*/ */
private String message;
/** /**
* 系统部署架构 * 系统部署架构
......
...@@ -56,9 +56,12 @@ public class SystemStructure { ...@@ -56,9 +56,12 @@ public class SystemStructure {
private Integer loadBalance; private Integer loadBalance;
/** /**
* 容灾 int 1:是 2:否 * 容灾
* 1:无0,有+0.05
* 2:有0,无-0.05
* 3:有0,无-0.1
*/ */
private Integer disaster; private Integer disaster = 0;
/** /**
* 其他需求 * 其他需求
......
...@@ -11,4 +11,6 @@ public enum OperateSystem { ...@@ -11,4 +11,6 @@ public enum OperateSystem {
WINSERVER2006, WINSERVER2006,
WINSERVER2012, WINSERVER2012,
REDHATREALES, REDHATREALES,
UBUNTU,
AIX,
} }
package com.zjty.inspect.inspect; package com.zjty.inspect.inspect;
import com.alibaba.fastjson.JSON;
import com.zjty.inspect.dao.*; import com.zjty.inspect.dao.*;
import com.zjty.inspect.entity.*; import com.zjty.inspect.entity.*;
import com.zjty.inspect.enums.DependenceManagement; import com.zjty.inspect.enums.DependenceManagement;
...@@ -14,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -14,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import springfox.documentation.spring.web.json.Json;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.MalformedInputException; import java.nio.charset.MalformedInputException;
...@@ -521,6 +523,7 @@ public class Inspector { ...@@ -521,6 +523,7 @@ public class Inspector {
stringBuilder.append(dependency.getGroupId()).append(":").append(dependency.getArtifactId()); stringBuilder.append(dependency.getGroupId()).append(":").append(dependency.getArtifactId());
if (inspectParameter.getAdmin() == 1) { if (inspectParameter.getAdmin() == 1) {
Rule rule = new Rule(); Rule rule = new Rule();
System.out.println(JSON.toJSONString(techJavaSupport));
rule.setTechnologyId(techJavaSupport.getId()); rule.setTechnologyId(techJavaSupport.getId());
rule.setTarget(dependency.getGroupId()); rule.setTarget(dependency.getGroupId());
rule.setTechnologyName(techJavaSupport.getTechnologyName()); rule.setTechnologyName(techJavaSupport.getTechnologyName());
......
package com.zjty.inspect.utils;
import com.zjty.inspect.entity.AssessmentReport;
/**
* <h4>Description : inspect</h4>
*
* @author : M@tr!x [xhyrzldf@foxmail.com]
* @Date : 2020-03-06 13:15
*/
public class AssessmentReportUtils {
/*
计算以下三项,拼接字符串,完成关键技术及替换策略建议:
*/
//关键技术xx个
//本地程序开发项xx个
//中间件依赖修改项xx个
/*
先计算难度,再算基础工作量
*/
//系统框架难度P(混合:1.1 前后分离:1)即系统评估
//系统框架难度e(分布式 0.2 负载均衡 0.1 容灾0.1 其他0.1) e = 1.2*1.1*1.1*1.1 即用户额外信息
//系统框架综合难度 p*e
//浏览器难度P(0.001*样式数量+0.01*API数量+0.01*插件数量+1) max=1.3
//浏览器难度e(1+需求分数/100)*(1+需求分数/100) max=1.3
//浏览器综合难度 p*e开根号
//中间件系统评估
/*
基础工作量评估
*/
//总计J = F(马) * 人工费
//开发修正系数
//测试修正系数
//部署修正系数
//开发的开发量 J*(开发修正系数+0.4)
//测试的开发量 J*(测试修正系数+0.3)
//部署的开发量 J*(部署修正系数+0.3)
//合计的开发量 总数
public AssessmentReport algorithm(AssessmentReport assessmentReport){
return null;
}
}
package com.zjty.inspect.utils; package com.zjty.inspect.utils;
import com.alibaba.fastjson.JSON;
import com.zjty.inspect.dao.CoefficientModelDao; import com.zjty.inspect.dao.CoefficientModelDao;
import com.zjty.inspect.dao.ConfigParamDao; import com.zjty.inspect.dao.ConfigParamDao;
import com.zjty.inspect.entity.*; import com.zjty.inspect.entity.*;
...@@ -61,6 +62,7 @@ public class BudgetUitl { ...@@ -61,6 +62,7 @@ public class BudgetUitl {
} }
inspectParameter.setMoneyRate(Double.valueOf(doubleHashMap.get(1))); inspectParameter.setMoneyRate(Double.valueOf(doubleHashMap.get(1)));
Double moneyRate = inspectParameter.getMoneyRate(); Double moneyRate = inspectParameter.getMoneyRate();
System.out.println(JSON.toJSONString("inspectParameter:"+inspectParameter));
int years = inspectParameter.getYears(); int years = inspectParameter.getYears();
double pow = Math.pow(moneyRate, years); double pow = Math.pow(moneyRate, years);
......
...@@ -7,6 +7,7 @@ import org.slf4j.Logger; ...@@ -7,6 +7,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 应用系统改造替换工作量根据表单计算 * 应用系统改造替换工作量根据表单计算
...@@ -321,7 +322,7 @@ public class WorkLoadUtil { ...@@ -321,7 +322,7 @@ public class WorkLoadUtil {
eDatabase *= (1+(databaseDifficulty.getSafe()==1?1:0)/100)* eDatabase *= (1+(databaseDifficulty.getSafe()==1?1:0)/100)*
(1+(databaseDifficulty.getSeparate()==1?1:0)/100)* (1+(databaseDifficulty.getSeparate()==1?1:0)/100)*
(1+(databaseDifficulty.getPerformance()==1?1:0)/100)* (1+(databaseDifficulty.getPerformance()==1?1:0)/100)*
(1+(databaseDifficulty.getOtherContent()==1?1:0)/100); (1+(Objects.equals(databaseDifficulty.getOtherContent(), "") ?1:0)/100);
logger.info("数据库难度:"+eDatabase); logger.info("数据库难度:"+eDatabase);
databaseDifficulty.setDifficulty(eDatabase); databaseDifficulty.setDifficulty(eDatabase);
//工作量2*j*(z-1) //工作量2*j*(z-1)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论