Kaynağa Gözat

智能AI交互添加单位等级和部门评级

xujuanning 1 yıl önce
ebeveyn
işleme
e97dac096a

+ 197 - 39
ims-service/ims-eval/src/main/java/com/ims/eval/service/custom/AIIntelligentService.java

@@ -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;