提交 83a1cdb0 authored 作者: 马晨俊's avatar 马晨俊

mcj:添加枚举返回,新增系数

上级 0bb0d495
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,12 +77,15 @@ public class InspectController {
inspectParameter.setId(UUIDUtil.getUUID());
ReportVo reportVo = new ReportVo();
int count = technologyService.findAllTEchnologyCount();
reportVo.setTechnologiesNum(count);
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();
......
......@@ -45,7 +45,7 @@ public class CoefficientModel {
private Integer scale;
public Double countCoefficient(Double data) {
public Double countCoefficient(Integer data) {
if(data<min){
return 1+belowCoefficient;
}else if(data>max){
......
......@@ -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;
/**
* 评估时间
*/
......
......@@ -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,10 @@ public interface TechnologyService {
void update(Technology technology);
Page<Technology> findSearch(Map searchMap, int page, int size);
/**
* 查询个数
* @return
*/
int findAllTEchnologyCount();
}
......@@ -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;
}
......
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,94 @@ 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);
int years = inspectParameter.getYears();
double pow = Math.pow(moneyRate, years);
//不带修正系数资金
double v = inspectParameter.getProportion() * pow * systemFund + fund;
double fundNotRepair = inspectParameter.getProportion() * pow * systemFund + fund;
//带修正系数资金
ArrayList<String> strings = new ArrayList<>();
Double v1 = v;
Double fundRepair = fundNotRepair;
strings.add("安全能力");
strings.add("容灾能力");
strings.add("架构");
strings.add("数据量");
strings.add("模块数");
strings.add("数据库表");
strings.add("代码量");
int coefficient = 0;
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("代码重构预算");
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("代码修改替换预算");
if(fundNotRepair<fundRepair){
codeUpdate.setFund(fundNotRepair +"--"+fundRepair);
}else if(fundNotRepair>fundRepair){
codeUpdate.setFund(fundRepair +"--"+fundNotRepair);
}else{
budget.setFund(v1 +"--"+v);
codeUpdate.setFund(fundRepair +"--"+fundNotRepair);
}
budget.setFundDetail("普通业务开发费用:"+v);
budget.setFundDetail("普通业务开发费用(修正):"+v1);
budget.setFundDetail("关键适配技术成本:"+fund);
codeUpdate.setFundDetail("普通业务开发费用:"+fundNotRepair);
codeUpdate.setFundDetail("普通业务开发费用(修正):"+fundRepair);
codeUpdate.setFundDetail("关键适配技术成本:"+fund);
budgetVo.getBudget().add(codeRefactor);
budgetVo.getBudget().add(codeUpdate);
ArrayList<Budget> budgets = new ArrayList<>();
budgets.add(budget);
return budgets;
return budgetVo;
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论