提交 6e7f506b authored 作者: 孙洁清's avatar 孙洁清

关键技术接口根据name查询功能

package com.zjty.inspect.controller;
import com.zjty.inspect.dao.TechnologyDao;
import com.zjty.inspect.entity.InspectParameter;
import com.zjty.inspect.entity.ReportVo;
import com.zjty.inspect.entity.Technology;
import com.zjty.inspect.entity.Warn;
import com.zjty.inspect.service.InspectService;
import com.zjty.inspect.service.TechnologyService;
import com.zjty.inspect.utils.*;
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
......@@ -34,6 +36,8 @@ public class InspectController {
@Autowired
private InspectService inspectService;
@Autowired
private TechnologyService technologyService;
/**
* 上传代码进行评估
......@@ -53,8 +57,8 @@ public class InspectController {
@PostMapping("/path")
@ApiOperation("上传代码进行评估")
public ResponseEntity inspect(Integer years,Integer systemFund,Integer modules
,String valid,Double framework,Double safety,Double disaster,Integer data
,Integer admin,String projectName,String fileName, MultipartFile multfile) throws IOException {
,String valid,Integer framework,Integer safety,Integer disaster,Integer data
,Integer admin,String projectName,Integer tables,String databaseType, MultipartFile multfile) throws IOException {
File file = FileUtil.saveToLocal(multfile);
InspectParameter inspectParameter = new InspectParameter();
......@@ -63,6 +67,7 @@ public class InspectController {
inspectParameter.setAdmin(admin);
inspectParameter.setModules(modules);
inspectParameter.setSafety(safety);
inspectParameter.setTables(tables);
inspectParameter.setValid(valid);
inspectParameter.setYears(years);
inspectParameter.setDisaster(disaster);
......@@ -72,34 +77,42 @@ public class InspectController {
inspectParameter.setId(UUIDUtil.getUUID());
ReportVo reportVo = new ReportVo();
int count = technologyService.findAllTechnologyCount();
reportVo.setTechnologiesNum(count);
int support = technologyService.findAllTechnologyNotSupport();
reportVo.setTechnologiesRepair(support);
reportVo.setId(TimeUtil.getNowDate());
reportVo.setUploadType("文件上传");
reportVo.setFileName(fileName);
reportVo.setFileName(file.getName());
reportVo.setProjectName(projectName);
reportVo.setSourceAddress(file.getCanonicalPath());
reportVo.setDatabaseType(databaseType);
ReportVo inspect = inspectService.inspect(reportVo,inspectParameter);
// Map map=new HashMap();
// map.put("inspect",inspect);
// map.put("time",TimeUtil.getTime());
// HashMap<String, List<Warn>> warnMap = inspect.getWarnDetails();
// List<Technology> technologies = inspect.getTechnologies();
// Map techMap=new HashMap();
// for (Technology technology : technologies) {
// techMap.put(technology.getTechnologyName(),technology.getSupport());
// }
// map.put("techMap",techMap);
// map.put("warnMap",warnMap);
// map.put("technologies",technologies);
// try {
// String template = FreemarkerUtils.getTemplate("pg.ftl", map);
// String s = inspectService.generateHtml(template, map);
// FileUtil.write(s,"/opt/pgbg/"+fileName+".html");
// System.out.println("内容"+s);
// } catch (TemplateException e) {
// e.printStackTrace();
// }
/*Map map=new HashMap();
map.put("inspect",inspect);
map.put("time",TimeUtil.getTime());
HashMap<String, List<Warn>> warnMap = inspect.getWarnDetails();
List<Technology> technologies = inspect.getTechnologies();
Map techMap=new HashMap();
for (Technology technology : technologies) {
techMap.put(technology.getTechnologyName(),technology.getSupport());
}
map.put("techMap",techMap);
map.put("warnMap",warnMap);
map.put("technologies",technologies);
try {
String template = FreemarkerUtils.getTemplate("pg.ftl", map);
String s = inspectService.generateHtml(template, map);
String filePath = FileUtil.createFilePath();
FileUtil.write(s,"/opt/pgbg/"+filePath+"/"+file.getName()+".html");
reportVo.setHtmlAddress("/opt/pgbg/"+filePath+"/"+file.getName()+".html");
System.out.println("内容"+s);
} catch (TemplateException e) {
e.printStackTrace();
}*/
return ResponseEntity.ok(inspect);
}
......@@ -114,13 +127,13 @@ public class InspectController {
public ResponseEntity inspect1(@RequestBody InspectParameter inspectParameter){
String path = GitLabUtil.downLoadProject(inspectParameter.getGitAddress(),inspectParameter.getGitName());
inspectParameter.setId(UUIDUtil.getUUID());
inspectParameter.setPath(path);
inspectParameter.setSourceAddress(path);
ReportVo reportVo = new ReportVo();
reportVo.setUploadType("git下载");
reportVo.setSourceAddress(path);
reportVo.setGitAddress(inspectParameter.getGitAddress());
inspectService.inspect(reportVo,inspectParameter);
return ResponseEntity.ok(200);
ReportVo inspect = inspectService.inspect(reportVo, inspectParameter);
return ResponseEntity.ok(inspect);
}
@PostMapping("/frontend")
......
......@@ -16,6 +16,11 @@ public interface TechnologyDao extends JpaRepository<Technology,String>, JpaSpec
*/
Technology findAllByTechnologyNameEquals(String name);
/**
* 模糊查询技术名称
* @param name
* @return
*/
List<Technology> findAllByTechnologyNameLike(String name);
/**
......@@ -28,4 +33,11 @@ public interface TechnologyDao extends JpaRepository<Technology,String>, JpaSpec
@Query("select technologyName from Technology ")
List<String> getTechnologyNames();
/**
* 查询不支持的技术个数
* @param support 是否支持
* @return
*/
int countAllBySupportIsNot(Integer support);
}
package com.zjty.inspect.entity;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* 预算
* @author Mcj
* @date 2020-02-27 19:05
*/
@Data
public class BudgetVo {
private List<Budget> budget = new ArrayList<>();
private List<CoefficientModelVo> coefficientModelVos = new ArrayList<>();
}
......@@ -45,7 +45,10 @@ public class CoefficientModel {
private Integer scale;
public Double countCoefficient(Double data) {
public Double countCoefficient(Integer data) {
if(data==null || data==0){
return 1D;
}
if(data<min){
return 1+belowCoefficient;
}else if(data>max){
......
package com.zjty.inspect.entity;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
/**
* 系数计算
*
* @author Mcj
*/
@Data
public class CoefficientModelVo {
/**
* 系数名称
*/
private String name;
/**
* 系数
*/
private double value;
}
......@@ -51,10 +51,20 @@ public class InspectParameter {
* 数据量
*/
private Integer data;
/**
* 代码量
*/
private Integer codeSize;
/**
* 架构
*/
private Double framework;
private Integer framework;
/**
* 数据库表数量
*/
private Integer tables;
/**
* 安全能力
......@@ -62,7 +72,7 @@ public class InspectParameter {
* 2:弱
* 3:强
*/
private Double safety;
private Integer safety;
/**
* 容灾
......@@ -70,7 +80,7 @@ public class InspectParameter {
* 2:有0,无-0.05
* 3:有0,无-0.1
*/
private Double disaster;
private Integer disaster;
/**
* git地址
......@@ -113,4 +123,9 @@ public class InspectParameter {
* 0:否
*/
private Integer admin;
/**
* 方式
*/
private Integer recastMethod;
}
......@@ -62,8 +62,7 @@ public class ReportVo {
* 1:适配
* 2:重构
*/
@Column(length = 5)
private String recastMethod;
private Integer recastMethod;
/**
* 源代码地址
......@@ -73,7 +72,7 @@ public class ReportVo {
/**
* 预算详情
*/
private List<Budget> budgets;
private BudgetVo budgets;
/**
* 依赖
......@@ -85,12 +84,22 @@ public class ReportVo {
*/
private List<Technology> technologies;
private HashMap<String,Technology> technologyNameMap = new HashMap<>();
/**
* 告警点
*/
private HashMap<String, List<Warn>> warnDetails;
/**
* 关键技术个数
*/
private Integer technologiesNum;
/**
* 需要改造的技术
*/
private Integer technologiesRepair;
/**
* 评估时间
*/
......
package com.zjty.inspect.enums;
public enum Framework {
/**
* 架构
*/
分离型架构("分离型架构",1),
混合型架构("混合型架构",2);
Framework(String name,Integer status){
this.name=name;
this.status=status;
}
private String name;
private Integer status;
public String getName() {
return name;
}
public Integer getStatus() {
return status;
}
}
package com.zjty.inspect.enums;
public enum RecastMethod {
/**
* 架构
*/
适配重构("适配重构",1),
代码修改("代码修改",2);
RecastMethod(String name, Integer status){
this.name=name;
this.status=status;
}
private String name;
private Integer status;
public String getName() {
return name;
}
public Integer getStatus() {
return status;
}
}
......@@ -5,6 +5,7 @@ import com.zjty.inspect.entity.*;
import com.zjty.inspect.enums.DependenceManagement;
import com.zjty.inspect.enums.Framework;
import com.zjty.inspect.enums.Language;
import com.zjty.inspect.enums.RecastMethod;
import com.zjty.inspect.utils.*;
import lombok.AllArgsConstructor;
import lombok.Data;
......@@ -79,6 +80,7 @@ public class Inspector {
*/
private InspectParameter inspectParameter;
private double codeSize = 0;
/**
* 报告对象
*/
......@@ -176,6 +178,8 @@ public class Inspector {
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();
}
}
......@@ -246,6 +250,7 @@ public class Inspector {
} catch (IOException e) {
e.printStackTrace();
}
inspectParameter.setCodeSize((int) codeSize);
return analysis();
}
......@@ -331,7 +336,7 @@ public class Inspector {
}
//计算预算
if (inspectParameter.getValid() != null) {
List<Budget> budget = budgetUitl.getBudget(fund, inspectParameter);
BudgetVo budget = budgetUitl.getBudget(fund, report, inspectParameter);
report.setBudgets(budget);
inspectParameter.setId(UUIDUtil.getUUID());
parameterDao.save(inspectParameter);
......@@ -350,7 +355,6 @@ public class Inspector {
HashMap<String, List<Warn>> warnMap = getWarnMap(map);
ruleDao.saveAll(rules);
report.setWarnDetails(warnMap);
report.setTechnologyNameMap(map);
return report;
}
......@@ -373,9 +377,9 @@ public class Inspector {
report.setFramework(languageMatchMap.get("jsp").i > 0 ? Framework.混合型架构.getStatus() : Framework.分离型架构.getStatus());
//设置是否需要重构
if (languageMatchMap.get("jsp").i == 0 & languageMatchMap.get("java").i == 0) {
report.setRecastMethod("建议重构");
report.setRecastMethod(RecastMethod.适配重构.getStatus());
} else {
report.setRecastMethod("建议适配");
report.setRecastMethod(RecastMethod.代码修改.getStatus());
}
}
......
......@@ -30,4 +30,16 @@ public interface TechnologyService {
void update(Technology technology);
Page<Technology> findSearch(Map searchMap, int page, int size);
/**
* 查询全部技术个数
* @return 查询技术数量
*/
int findAllTechnologyCount();
/**
* 查询不支持的技术个数
* @return 查询技术数量
*/
int findAllTechnologyNotSupport();
}
......@@ -27,7 +27,6 @@ public class InspectServiceImpl implements InspectService {
@Autowired
Inspector inspector;
@Transactional
@Override
public ReportVo inspect(ReportVo reportVo,InspectParameter inspectParameter) {
......@@ -49,6 +48,8 @@ public class InspectServiceImpl implements InspectService {
inspector.setSuffixLanguageMapping(suffixLanguageMapping);
ReportVo report = inspector.inspect();
return report;
}
......
......@@ -89,6 +89,10 @@ public class TechnologyServiceImpl implements TechnologyService {
return technologyDao.findAllByTechnologyNameLike("%"+name+"%");
}
/**
* 更新技术细节
* @param technology
*/
@Override
public void update(Technology technology) {
technologyDao.save(technology);
......@@ -100,6 +104,17 @@ public class TechnologyServiceImpl implements TechnologyService {
PageRequest pageRequest = PageRequest.of(page-1, size);
return technologyDao.findAll(specification, pageRequest);
}
@Override
public int findAllTechnologyCount() {
return (int) technologyDao.count();
}
@Override
public int findAllTechnologyNotSupport() {
return technologyDao.countAllBySupportIsNot(1);
}
/**
* 动态条件构建
* @param searchMap
......
package com.zjty.inspect.utils;
import com.zjty.inspect.dao.CoefficientModelDao;
import com.zjty.inspect.entity.Budget;
import com.zjty.inspect.entity.CoefficientModel;
import com.zjty.inspect.entity.InspectParameter;
import com.zjty.inspect.entity.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -27,12 +25,26 @@ public class BudgetUitl {
/**
* 获取预算数据
* @param fund 技术费用
* @param report
* @param inspectParameter 计算所需数据
* @return
*/
public List<Budget> getBudget(Integer fund, InspectParameter inspectParameter){
public BudgetVo getBudget(Integer fund, ReportVo report, InspectParameter inspectParameter){
BudgetVo budgetVo = new BudgetVo();
// TODO: 2020-03-05 查询年复利率
inspectParameter.setMoneyRate(1.04);
inspectParameter.setProportion(0.6);
//代码重构比
double refactorProportion = 0D;
//代码修改比
double updateProportion = 0D;
if(report.getRecastMethod()==1){
inspectParameter.setProportion(0.6);
}else{
// TODO: 2020-03-05 查询config表0.3或者0.15
inspectParameter.setProportion(0.3);
}
int scale;
Integer systemFund = inspectParameter.getSystemFund();
if(systemFund==0){
......@@ -46,58 +58,98 @@ public class BudgetUitl {
}else{
scale=3;
}
Budget budget = new Budget();
budget.setBudgetName("代码重构预算");
Double moneyRate = inspectParameter.getMoneyRate();
int i = 2020 - inspectParameter.getYears();
double pow = Math.pow(moneyRate, i);
//不带修正系数资金
double v = inspectParameter.getProportion() * pow * systemFund + fund;
int years = inspectParameter.getYears();
double pow = Math.pow(moneyRate, years);
//带修正系数资金
ArrayList<String> strings = new ArrayList<>();
Double v1 = v;
strings.add("安全能力");
strings.add("容灾能力");
strings.add("架构");
strings.add("数据量");
strings.add("模块数");
strings.add("数据库表");
strings.add("代码量");
double coefficient = 1;
List<CoefficientModel> nameIn = coefficientModelDao.findAllByNameIn(strings);
List<CoefficientModel> collect = nameIn.stream().filter(a -> a.getScale() == scale).collect(Collectors.toList());
for (CoefficientModel model : collect) {
CoefficientModelVo coefficientModelVo = new CoefficientModelVo();
coefficientModelVo.setName(model.getName());
if("架构".equals(model.getName())){
Double aDouble = model.countCoefficient(inspectParameter.getFramework());
v1*=aDouble;
Double value = model.countCoefficient(inspectParameter.getFramework());
coefficientModelVo.setValue(value);
coefficient*=value;
}else if("容灾能力".equals(model.getName())){
Double aDouble = model.countCoefficient(inspectParameter.getDisaster());
v1*=aDouble;
Double value = model.countCoefficient(inspectParameter.getDisaster());
coefficientModelVo.setValue(value);
coefficient*=value;
}
else if("安全能力".equals(model.getName())){
Double aDouble = model.countCoefficient(inspectParameter.getSafety());
v1*=aDouble;
Double value = model.countCoefficient(inspectParameter.getSafety());
coefficientModelVo.setValue(value);
coefficient*=value;
}
else if("数据量".equals(model.getName())){
Double aDouble = model.countCoefficient(Double.valueOf(inspectParameter.getData()));
v1*=aDouble;
Double value = model.countCoefficient(inspectParameter.getData());
coefficientModelVo.setValue(value);
coefficient*=value;
}
else if("模块数".equals(model.getName())){
Double aDouble = model.countCoefficient(Double.valueOf(inspectParameter.getModules()));
v1*=aDouble;
Double value = model.countCoefficient(inspectParameter.getModules());
coefficientModelVo.setValue(value);
coefficient*=value;
}
else if("数据库表".equals(model.getName())){
Double value = model.countCoefficient(inspectParameter.getTables());
coefficientModelVo.setValue(value);
coefficient *=value;
}
else if("代码量".equals(model.getName())){
Double value = model.countCoefficient(inspectParameter.getCodeSize());
coefficientModelVo.setValue(value);
coefficient*=value;
}
budgetVo.getCoefficientModelVos().add(coefficientModelVo);
}
Budget codeRefactor = new Budget();
codeRefactor.setBudgetName("代码重构预算");
//不带修正系数资金
double fundNotRepair = inspectParameter.getProportion() * pow * systemFund + fund;
double fundRepair=fundNotRepair*coefficient;
if(fundNotRepair<fundRepair){
codeRefactor.setFund(fundNotRepair +"--"+fundRepair);
}else if(fundNotRepair>fundRepair){
codeRefactor.setFund(fundRepair +"--"+fundNotRepair);
}else{
codeRefactor.setFund(fundRepair +"--"+fundNotRepair);
}
codeRefactor.setFundDetail("普通业务开发费用:"+fundNotRepair);
codeRefactor.setFundDetail("普通业务开发费用(修正):"+fundRepair);
codeRefactor.setFundDetail("关键适配技术成本:"+fund);
if(v<v1){
budget.setFund(v +"--"+v1);
}else if(v>v1){
budget.setFund(v1 +"--"+v);
Budget codeUpdate = new Budget();
codeUpdate.setBudgetName("代码修改替换预算");
double findUpdateNotRepair = inspectParameter.getProportion() * pow * systemFund + fund;
double findUpdateRepair = findUpdateNotRepair * coefficient;
if(findUpdateNotRepair<findUpdateRepair){
codeUpdate.setFund(findUpdateNotRepair +"--"+findUpdateRepair);
}else if(fundNotRepair>fundRepair){
codeUpdate.setFund(findUpdateRepair +"--"+findUpdateNotRepair);
}else{
budget.setFund(v1 +"--"+v);
codeUpdate.setFund(findUpdateRepair +"--"+findUpdateNotRepair);
}
budget.setFundDetail("普通业务开发费用:"+v);
budget.setFundDetail("普通业务开发费用(修正):"+v1);
budget.setFundDetail("关键适配技术成本:"+fund);
codeUpdate.setFundDetail("普通业务开发费用:"+findUpdateNotRepair);
codeUpdate.setFundDetail("普通业务开发费用(修正):"+findUpdateRepair);
codeUpdate.setFundDetail("关键适配技术成本:"+fund);
budgetVo.getBudget().add(codeRefactor);
budgetVo.getBudget().add(codeUpdate);
ArrayList<Budget> budgets = new ArrayList<>();
budgets.add(budget);
return budgets;
return budgetVo;
}
}
package com.zjty.inspect.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.junrar.Archive;
import com.github.junrar.rarfile.FileHeader;
import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.core.ZipFile;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Slf4j
public class FileUtil {
static int BUFFER_SIZE = 1024;
public static String createFilePath(){
//"./"+name+"/"+split1[0]
String[] split = UUIDUtil.getUUID().split("-");
String time = LocalDate.now().toString();
String filePath = time + "/"+split[0];
return filePath;
}
/**
* 保存文件到本地
......@@ -157,15 +163,4 @@ public class FileUtil {
return file;
}
public static void main(String[] args) throws IOException {
// System.out.println(LocalDate.now().toString());
// String[] split1 = UUIDUtil.getUUID().split("-");
// System.out.println(split1[0]);
// // FileUtil.unPackZip(new File("/Users/mcj/Downloads/acq-server.zip"),"", "./");
// //FileUtils.deleteDirectory(new File("./acq-server"));
// SAXReader reader = new SAXReader();
// Document document = null;
write("hello","E://test//text.txt");
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论