|
@@ -7,10 +7,8 @@ import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import com.ims.eval.dao.EvaluateReportInfoMapper;
|
|
|
-import com.ims.eval.dao.EvaluateReportMapper;
|
|
|
-import com.ims.eval.entity.EvaluateReport;
|
|
|
-import com.ims.eval.entity.EvaluateReportInfo;
|
|
|
+import com.ims.eval.dao.*;
|
|
|
+import com.ims.eval.entity.*;
|
|
|
import com.ims.eval.service.custom.enums.AIDateTypeEnum;
|
|
|
import lombok.Data;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -20,23 +18,28 @@ import javax.annotation.Resource;
|
|
|
|
|
|
@RestController
|
|
|
public class AIIntelligentService {
|
|
|
+ @Resource
|
|
|
+ private EvaluateReportInfoMapper evaluateReportInfoMapper;
|
|
|
|
|
|
- private Map<String, EvaluateReportInfo> evaluateReportInfoMap = new HashMap<>();
|
|
|
-
|
|
|
-
|
|
|
- @Value("${AI.scoreType}")
|
|
|
- private String scoreType;
|
|
|
+ @Resource
|
|
|
+ private EvaluateReportMapper evaluateReportMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private EvaluationDeptMapper evaluationDeptMapper;
|
|
|
|
|
|
@Resource
|
|
|
- private EvaluateReportInfoMapper evaluateReportInfoMapper;
|
|
|
+ private DeptAssessmentDeclarationMapper deptAssessmentDeclarationMapper;
|
|
|
|
|
|
@Resource
|
|
|
- private EvaluateReportMapper evaluateReportMapper;
|
|
|
+ private EvaluationPortalMapper evaluationPortalMapper;
|
|
|
+
|
|
|
+
|
|
|
+ @Value("${AI.scoreType}")
|
|
|
+ private String scoreType;
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 智能生成结果
|
|
|
+ * 考评报告智能生成结果
|
|
|
*/
|
|
|
public String intelligentGeneration(String question) {
|
|
|
StringBuilder sb = new StringBuilder();
|
|
@@ -44,22 +47,146 @@ public class AIIntelligentService {
|
|
|
sb.append("你好!请问有什么我可以帮助你的吗?");
|
|
|
return sb.toString();
|
|
|
}
|
|
|
- Map<String, EvaluateReportInfo> erimap = new HashMap<>();
|
|
|
- evaluateReportInfoMap = getEvaluateReportInfoMap();
|
|
|
- erimap = evaluateReportInfoMap.values().stream().filter(eri -> question.contains(eri.getOrganizationName())).collect(Collectors.toMap(EvaluateReportInfo::getEvaluateReportId, Function.identity()));
|
|
|
+ Map<String, EvaluationDept> evaluateDeptMap = getEvaluateDeptMap();
|
|
|
+ for (String deptName : evaluateDeptMap.keySet()) {
|
|
|
+ if (question.contains(deptName) || deptName.contains(question)) {
|
|
|
+ //部门评级
|
|
|
+ String deptId = evaluateDeptMap.get(deptName).getDeptId();
|
|
|
+ generationRating(question, sb, deptId);
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //考评报告
|
|
|
+ generationReport(question, sb);
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 考评报告智能生成结果
|
|
|
+ */
|
|
|
+ public void generationReport(String question, StringBuilder sb) {
|
|
|
+ if (question.contains("等级")) {
|
|
|
+ getGrade(question, sb);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<String, EvaluateReportInfo> evaluateReportInfoMap = getEvaluateReportInfoMap();
|
|
|
+ Map<String, EvaluateReportInfo> erimap = evaluateReportInfoMap.values().stream().filter(eri -> question.contains(eri.getOrganizationName())).collect(Collectors.toMap(EvaluateReportInfo::getEvaluateReportId, Function.identity()));
|
|
|
if (erimap.isEmpty()) {
|
|
|
sb.append("抱歉,这个知识我还在学习中");
|
|
|
- return sb.toString();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ getReportConcrete(erimap, question, sb);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 单位等级
|
|
|
+ */
|
|
|
+ private void getGrade(String question, StringBuilder sb) {
|
|
|
+ Map<String, EvaluationPortal> evaluationPortalMap = getEvaluationPortalMap();
|
|
|
+ List<EvaluationPortal> leps = evaluationPortalMap.values().stream().filter(ep -> question.contains(ep.getCompany())).collect(Collectors.toList());
|
|
|
+ AIDateInfo ad = getDate(question);
|
|
|
+ if (ad.getInfoYear() == null && ad.getInfoQuarter() == null) {
|
|
|
+ ad = new AIDateInfo();
|
|
|
+ ad.setType(AIDateTypeEnum.Year);
|
|
|
+ ad.setInfoYear(LocalDate.now().getYear() + "");
|
|
|
+ }
|
|
|
+ switch (ad.getType()) {
|
|
|
+ case Year:
|
|
|
+ getYearGrade(leps, ad, sb);
|
|
|
+ break;
|
|
|
+ case YearQuarter:
|
|
|
+ getYearQuarterGrade(leps, ad, sb);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void getYearQuarterGrade(List<EvaluationPortal> leps, AIDateInfo ad, StringBuilder sb) {
|
|
|
+ List<EvaluationPortal> lep = leps.stream().filter(ep -> ad.getInfoQuarter().equals(ep.getSeason()) && ad.getInfoYear().equals(ep.getYear())).collect(Collectors.toList());
|
|
|
+ if (lep.isEmpty()) {
|
|
|
+ sb.append("抱歉,这个知识我还在学习中");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sb.append(ad.getInfoYear()).append("年").append(ad.getInfoQuarter()).append("季度").append(lep.get(0).getCompany()).append("的等级是").append(lep.get(0).getGrade());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void getYearGrade(List<EvaluationPortal> leps, AIDateInfo ad, StringBuilder sb) {
|
|
|
+ List<EvaluationPortal> lep = leps.stream().filter(ep -> ep.getSeason() == null && ad.getInfoYear().equals(ep.getYear())).collect(Collectors.toList());
|
|
|
+ if (lep.isEmpty()) {
|
|
|
+ sb.append("抱歉,这个知识我还在学习中");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sb.append(ad.getInfoYear()).append("年").append(lep.get(0).getCompany()).append("的等级是").append(lep.get(0).getGrade());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 部门评级智能生成结果
|
|
|
+ */
|
|
|
+ public void generationRating(String question, StringBuilder sb, String deptId) {
|
|
|
+ Map<String, DeptAssessmentDeclaration> deptAssessmentDeclarationMap = getdeptAssessmentDeclarationMap();
|
|
|
+ List<DeptAssessmentDeclaration> ldd = deptAssessmentDeclarationMap.values().stream().filter(dd -> deptId.equals(dd.getDeptId())).collect(Collectors.toList());
|
|
|
+ if (ldd.isEmpty()) {
|
|
|
+ sb.append("抱歉,这个知识我还在学习中");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ getRatingConcrete(ldd, question, sb);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void getRatingConcrete(List<DeptAssessmentDeclaration> ldd, String question, StringBuilder sb) {
|
|
|
+ AIDateInfo ad = getDate(question);
|
|
|
+ if (ad.getInfoYear() == null && ad.getInfoMonth() == null) {
|
|
|
+ ad = new AIDateInfo();
|
|
|
+ ad.setType(AIDateTypeEnum.YearMonth);
|
|
|
+ ad.setInfoYear(LocalDate.now().getYear() + "");
|
|
|
+ ad.setInfoMonth(((LocalDate.now().getMonth()).getValue() - 2) + "");
|
|
|
+ }
|
|
|
+ getYearMonthRating(ldd, ad, sb);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void getYearMonthRating(List<DeptAssessmentDeclaration> ldd, AIDateInfo ad, StringBuilder sb) {
|
|
|
+ int mark = 0;
|
|
|
+ int month = (LocalDate.now().getMonth()).getValue() - 1;
|
|
|
+ int year = LocalDate.now().getYear();
|
|
|
+ if (ldd.isEmpty()) {
|
|
|
+ sb.append("抱歉,这个知识我还在学习中");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (ad.getInfoMonth() == null) {
|
|
|
+ for (DeptAssessmentDeclaration dd : ldd) {
|
|
|
+ if (ad.getInfoYear().equals(dd.getAnnual().toString())) {
|
|
|
+ sb.append(dd.getAnnual()).append("年").append(dd.getDeptName()).append(dd.getDeclarationMonth()).append("月").append("考评评级为").append(dd.getRatingGrade()).append("级").append('\n');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (Integer.parseInt(ad.getInfoMonth()) > month && Integer.parseInt(ad.getInfoYear()) >= year) {
|
|
|
+ sb.append(ad.getInfoYear()).append("年").append(ad.getInfoMonth()).append("月").append("暂时没有数据,请输入其他年份!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (DeptAssessmentDeclaration dd : ldd) {
|
|
|
+ if (ad.getInfoYear().equals(dd.getAnnual().toString())) {
|
|
|
+ if (ad.getInfoMonth().equals(dd.getDeclarationMonth().toString())) {
|
|
|
+ sb.append(dd.getAnnual()).append("年").append(dd.getDeptName()).append(ad.getInfoMonth()).append("月").append("考评评级为").append(dd.getRatingGrade()).append("级");
|
|
|
+ mark++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (mark == 0) {
|
|
|
+ sb.append("抱歉,这个知识我还在学习中");
|
|
|
}
|
|
|
- getConcrete(erimap, question, sb);
|
|
|
- return sb.toString();
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取具体时间报表
|
|
|
*/
|
|
|
- private void getConcrete(Map<String, EvaluateReportInfo> erimap, String question, StringBuilder sb) {
|
|
|
+ private void getReportConcrete(Map<String, EvaluateReportInfo> erimap, String question, StringBuilder sb) {
|
|
|
List<EvaluateReport> ler = evaluateReportMapper.selectBatchIds(erimap.keySet());
|
|
|
AIDateInfo ad = getDate(question);
|
|
|
if (ad.getInfoYear() == null && ad.getInfoQuarter() == null && ad.getInfoMonth() == null) {
|
|
@@ -90,8 +217,10 @@ public class AIIntelligentService {
|
|
|
int mark = 0;
|
|
|
for (EvaluateReport er : ler) {
|
|
|
if (ad.getInfoYear().equals(er.getYear()) && ad.getInfoMonth().equals(er.getMonth())) {
|
|
|
+ sb.append(er.getYear()).append("年").append(er.getMonth()).append("月");
|
|
|
getInfoScore(sb, er, erimap, question);
|
|
|
mark++;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
if (mark == 0) {
|
|
@@ -107,8 +236,10 @@ public class AIIntelligentService {
|
|
|
int mark = 0;
|
|
|
for (EvaluateReport er : ler) {
|
|
|
if (ad.getInfoYear().equals(er.getYear()) && ad.getInfoQuarter().equals(er.getMonth())) {
|
|
|
+ sb.append(er.getYear()).append("年").append(er.getMonth()).append("季度");
|
|
|
getInfoScore(sb, er, erimap, question);
|
|
|
mark++;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
if (mark == 0) {
|
|
@@ -124,8 +255,10 @@ public class AIIntelligentService {
|
|
|
int mark = 0;
|
|
|
for (EvaluateReport er : ler) {
|
|
|
if ("-".equals(er.getMonth()) && ad.getInfoYear().equals(er.getYear())) {
|
|
|
+ sb.append(er.getYear()).append("年");
|
|
|
getInfoScore(sb, er, erimap, question);
|
|
|
mark++;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
if (mark == 0) {
|
|
@@ -176,7 +309,7 @@ public class AIIntelligentService {
|
|
|
int quarterNum = convertToQuarterNumber(quarterStr);
|
|
|
if (quarterNum > 0) {
|
|
|
if (aii.getInfoYear() == null) {
|
|
|
- aii.setInfoMonth(LocalDate.now().getYear() + "");
|
|
|
+ aii.setInfoQuarter(LocalDate.now().getYear() + "");
|
|
|
}
|
|
|
aii.setType(AIDateTypeEnum.YearQuarter);
|
|
|
aii.setInfoQuarter(quarterNum + "");
|
|
@@ -187,7 +320,7 @@ public class AIIntelligentService {
|
|
|
|
|
|
|
|
|
private void getInfoScore(StringBuilder sb, EvaluateReport er, Map<String, EvaluateReportInfo> erimap, String question) {
|
|
|
- int mark=0;
|
|
|
+ int mark = 0;
|
|
|
EvaluateReportInfo e = erimap.get(er.getId());
|
|
|
sb.append(e.getOrganizationName()).append("的");
|
|
|
double s3 = 0.0;
|
|
@@ -197,61 +330,60 @@ public class AIIntelligentService {
|
|
|
switch (s2) {
|
|
|
case "最终得分":
|
|
|
s3 = e.getScore();
|
|
|
- sb.append("最终得分是:").append(s3);
|
|
|
+ sb.append("最终得分").append(s3).append("分");
|
|
|
break;
|
|
|
case "综合得分":
|
|
|
s3 = e.getZhScore();
|
|
|
- sb.append("综合得分是:").append(s3);
|
|
|
+ sb.append("综合得分").append(s3).append("分");
|
|
|
break;
|
|
|
case "生产经营得分":
|
|
|
s3 = e.getScjyScore();
|
|
|
- sb.append("生产经营得分是:").append(s3);
|
|
|
+ sb.append("生产经营得分").append(s3).append("分");
|
|
|
break;
|
|
|
case "前期得分":
|
|
|
s3 = e.getQqScore();
|
|
|
- sb.append("前期得分是:").append(s3);
|
|
|
+ sb.append("前期得分").append(s3).append("分");
|
|
|
break;
|
|
|
case "基建得分":
|
|
|
s3 = e.getJjScore();
|
|
|
- sb.append("基建得分是:").append(s3);
|
|
|
+ sb.append("基建得分").append(s3).append("分");
|
|
|
break;
|
|
|
case "加分项":
|
|
|
s3 = e.getAddScore();
|
|
|
- sb.append("加分项是:").append(s3);
|
|
|
+ sb.append("加分项").append(s3).append("分");
|
|
|
break;
|
|
|
case "减分项":
|
|
|
s3 = e.getSubScore();
|
|
|
- sb.append("减分项是:").append(s3);
|
|
|
+ sb.append("减分项").append(s3).append("分");
|
|
|
break;
|
|
|
case "加减分合计":
|
|
|
s3 = e.getAddSubScore();
|
|
|
- sb.append("加减分合计是:").append(s3);
|
|
|
+ sb.append("加减分合计").append(s3).append("分");
|
|
|
break;
|
|
|
case "经营业绩系数":
|
|
|
s3 = e.getJyyjXs();
|
|
|
- sb.append("经营业绩系数是:").append(s3);
|
|
|
+ sb.append("经营业绩系数").append(s3).append("分");
|
|
|
break;
|
|
|
case "关键业绩系数":
|
|
|
s3 = e.getGjyjXs();
|
|
|
- sb.append("关键业绩系数是:").append(s3);
|
|
|
+ sb.append("关键业绩系数").append(s3).append("分");
|
|
|
break;
|
|
|
case "党建考核乘数":
|
|
|
s3 = e.getDjkhCs();
|
|
|
- sb.append("党建考核乘数是:").append(s3);
|
|
|
+ sb.append("党建考核乘数").append(s3).append("分");
|
|
|
break;
|
|
|
case "折算分数":
|
|
|
s3 = e.getDiscountScore();
|
|
|
- sb.append("折算分数是:").append(s3);
|
|
|
+ sb.append("折算分数").append(s3).append("分");
|
|
|
break;
|
|
|
}
|
|
|
mark++;
|
|
|
}
|
|
|
}
|
|
|
if (mark == 0) {
|
|
|
- sb.append("最终得分是:").append(e.getScore()).append(",").append("综合得分是:").append(e.getZhScore()).append(",").append("生产经营得分是:").append(e.getScjyScore()).append(",")
|
|
|
- .append("前期得分是:").append(e.getQqScore()).append(",").append("基建得分是:").append(e.getJjScore()).append(",").append("加分项是:").append(e.getAddScore()).append(",")
|
|
|
- .append("减分项是:").append(e.getSubScore()).append("加减分合计是:").append(e.getAddSubScore()).append("经营业绩系数是:").append(e.getJyyjXs())
|
|
|
- .append("关键业绩系数是:").append(e.getGjyjXs()).append(",").append("党建考核乘数是:").append(e.getDjkhCs()).append(",").append("折算分数是:").append(e.getDiscountScore());
|
|
|
+ sb.append("最终得分").append(e.getScore()).append("分").append(",").append("综合得分").append(e.getZhScore()).append("分")
|
|
|
+ .append(",").append("生产经营得分").append(e.getScjyScore()).append("分").append(",")
|
|
|
+ .append("前期得分").append(e.getQqScore()).append("分").append(",").append("基建得分").append(e.getJjScore()).append("分");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -282,12 +414,38 @@ public class AIIntelligentService {
|
|
|
*/
|
|
|
public Map<String, EvaluateReportInfo> getEvaluateReportInfoMap() {
|
|
|
List<EvaluateReportInfo> evaluateReportInfos = evaluateReportInfoMapper.selectList(null);
|
|
|
- return evaluateReportInfoMap = evaluateReportInfos.stream().collect(Collectors.toMap(EvaluateReportInfo::getId, Function.identity()));
|
|
|
+ return evaluateReportInfos.stream().collect(Collectors.toMap(EvaluateReportInfo::getId, Function.identity()));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 单位等级map
|
|
|
+ */
|
|
|
+ public Map<String, EvaluationPortal> getEvaluationPortalMap() {
|
|
|
+ List<EvaluationPortal> evaluateReportInfos = evaluationPortalMapper.selectList(null);
|
|
|
+ return evaluateReportInfos.stream().collect(Collectors.toMap(EvaluationPortal::getId, Function.identity()));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 部门map
|
|
|
+ */
|
|
|
+ public Map<String, EvaluationDept> getEvaluateDeptMap() {
|
|
|
+ List<EvaluationDept> evaluationDepts = evaluationDeptMapper.selectList(null);
|
|
|
+ return evaluationDepts.stream().collect(Collectors.toMap(EvaluationDept::getDeptName, Function.identity()));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 部门评级map
|
|
|
+ */
|
|
|
+ public Map<String, DeptAssessmentDeclaration> getdeptAssessmentDeclarationMap() {
|
|
|
+ List<DeptAssessmentDeclaration> evaluationDeptRatings = deptAssessmentDeclarationMapper.selectList(null);
|
|
|
+ return evaluationDeptRatings.stream().collect(Collectors.toMap(DeptAssessmentDeclaration::getId, Function.identity()));
|
|
|
}
|
|
|
|
|
|
|
|
|
@Data
|
|
|
- public class AIDateInfo {
|
|
|
+ public static class AIDateInfo {
|
|
|
private String infoYear;
|
|
|
private String infoMonth;
|
|
|
private String infoQuarter;
|