Browse Source

新增年度评级功能,模块功能的完善,规则策略可视化配置

xujuanning 8 months ago
parent
commit
cc67d3a252

+ 25 - 8
ims-service/ims-eval/src/main/java/com/ims/eval/controller/OrganizationRatingController.java

@@ -33,6 +33,14 @@ public class OrganizationRatingController {
 	@Autowired
 	private IOrganizationRatingService organizationRatingService;
 
+
+	@PostMapping(value = "grade")
+	public R grade(@RequestBody List<OrganizationRating> orgRating) {
+		IPage<OrganizationRating> grade = organizationRatingService.grade(orgRating);
+		return R.ok().data(grade);
+	}
+
+
 	/**
 	 * 查询
 	 * @param pageNum
@@ -50,8 +58,19 @@ public class OrganizationRatingController {
 				  @RequestParam(value = "binSection", required = false) String binSection,
 				  @RequestParam(value = "year", required = false) String year,
 				  @RequestParam(value = "organizationShortName", required = false) String organizationShortName,
-				  @RequestParam(value = "organizationId", required = false) String organizationId) {
-		IPage<OrganizationRating> list = organizationRatingService.list(pageNum, pageSize, id,organizationYearRatingId, binSection, year,organizationShortName,organizationId);
+				  @RequestParam(value = "organizationId", required = false) String organizationId,
+				  @RequestParam(value = "safetyEnvProtection", required = false) String safetyEnvProtection,
+				  @RequestParam(value = "veto", required = false) String veto,
+				  @RequestParam(value = "netProfit", required = false) String netProfit,
+				  @RequestParam(value = "compositeScore", required = false) String compositeScore,
+				  @RequestParam(value = "annualTarget", required = false) String annualTarget,
+				  @RequestParam(value = "bonusPoint", required = false) String bonusPoint,
+				  @RequestParam(value = "compositeScoreRaking", required = false) String compositeScoreRaking,
+				  @RequestParam(value = "projectLevel", required = false) String projectLevel) {
+		IPage<OrganizationRating> list = organizationRatingService.list(pageNum, pageSize, id, organizationYearRatingId, binSection, year, organizationShortName, organizationId, safetyEnvProtection, veto, netProfit, compositeScore, annualTarget, bonusPoint,compositeScoreRaking,projectLevel);
+		if (list.getRecords().isEmpty()) {
+			return R.ok().data("");
+		}
 		return R.ok().data(list);
 	}
 
@@ -75,8 +94,8 @@ public class OrganizationRatingController {
 	@PostMapping(value = "/generateRating")
 	@ApiOperation(value = "批量生成明细", notes = "批量生成明细")
 	public R generateRating(@RequestParam(value = "organizationYearRatingId") String organizationYearRatingId,
-							@RequestParam(value = "year") String year){
-		boolean b = organizationRatingService.generateRating(organizationYearRatingId,year);
+							@RequestParam(value = "year") String year) {
+		boolean b = organizationRatingService.generateRating(organizationYearRatingId, year);
 		if (b) {
 			return R.ok().data(b);
 		} else {
@@ -103,8 +122,6 @@ public class OrganizationRatingController {
 	}
 
 
-
-
 	/**
 	 * 导入
 	 *
@@ -125,10 +142,10 @@ public class OrganizationRatingController {
 				InputStream is = file.getInputStream();
 				List<OrganizationRating> organizationRatingList = new ArrayList<>();
 				//Excel导入导出的单元类
-				List<String[]> strings = ExcelUtil.readData(fileType, startRows-1, true, is);
+				List<String[]> strings = ExcelUtil.readData(fileType, startRows - 1, true, is);
 				//遍历Excel表每一行的数据
 				for (String[] str : strings) {
-					if(startRows==1){
+					if (startRows == 1) {
 						startRows++;
 						continue;
 					}

+ 12 - 5
ims-service/ims-eval/src/main/java/com/ims/eval/dao/OrganizationRatingMapper.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ims.eval.entity.OrganizationRating;
-import com.ims.eval.entity.OrganizationRatingRule;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -24,11 +23,19 @@ public interface OrganizationRatingMapper extends BaseMapper<OrganizationRating>
 										 @Param("binSection") String binSection,
 										 @Param("year") String year,
 										 @Param("organizationShortName") String organizationShortName,
-										 @Param("organizationId") String organizationId);
+										 @Param("organizationId") String organizationId,
+										 @Param("safetyEnvProtection") String safetyEnvProtection,
+										 @Param("veto") String veto,
+										 @Param("netProfit") String netProfit,
+										 @Param("compositeScore") String compositeScore,
+										 @Param("annualTarget") String annualTarget,
+										 @Param("bonusPoint") String bonusPoint,
+										 @Param("compositeScoreRaking") String compositeScoreRaking,
+										 @Param("projectLevel") String projectLevel);
 
 
-	List<OrganizationRating> selectListSating(@Param("organizationYearRatingId")String organizationYearRatingId,
-											  @Param("year")String year,
-											  @Param("organizationId")String organizationId);
+	List<OrganizationRating> selectListSating(@Param("organizationYearRatingId") String organizationYearRatingId,
+											  @Param("year") String year,
+											  @Param("organizationId") String organizationId);
 
 }

+ 1 - 1
ims-service/ims-eval/src/main/java/com/ims/eval/dao/OrganizationRatingRuleMapper.java

@@ -16,7 +16,7 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface OrganizationRatingRuleMapper extends BaseMapper<OrganizationRatingRule> {
 
-	IPage<OrganizationRatingRule> selectList(Page page, @Param("id") String id,
+	IPage<OrganizationRatingRule> selList(Page page, @Param("id") String id,
 											 @Param("binSection") String binSection,
 											 @Param("binStage") String binStage,
 											 @Param("ruleName") String ruleName,

+ 0 - 1
ims-service/ims-eval/src/main/java/com/ims/eval/entity/OrganizationEvaluation.java

@@ -2,7 +2,6 @@ package com.ims.eval.entity;
 
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.Date;
 
 import lombok.Data;

+ 42 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/entity/OrganizationRating.java

@@ -106,4 +106,46 @@ public class OrganizationRating extends Model {
     private String remark;
 
 
+	/**
+	 * 年度安全环保评级
+	 */
+	//@TableField(exist = false)
+	private String safetyEnvProtection;
+
+	/**
+	 * 否决事项
+	 */
+	private String veto;
+
+	/**
+	 * 净利润
+	 */
+	private String netProfit;
+
+	/**
+	 * 经营业绩考核综合得分百分比
+	 */
+	private String compositeScore;
+
+	/**
+	 * 年度项目进度目标完成率%
+	 */
+	private String annualTarget;
+
+	/**
+	 * 先进性指标考核得分有无加分,1:有,0:无
+	 */
+	private String bonusPoint;
+
+	/**
+	 * 基建工程综合得分排名
+	 */
+	private String compositeScoreRaking;
+
+	/**
+	 * 基建工程项目等级
+	 */
+	private String projectLevel;
+
+
 }

+ 4 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/entity/OrganizationRatingRule.java

@@ -99,5 +99,9 @@ public class OrganizationRatingRule extends Model {
      */
     private Date cronTime;
 
+	/**
+	 * 规则适用年份
+	 */
+	private String year;
 
 }

+ 9 - 1
ims-service/ims-eval/src/main/java/com/ims/eval/service/IOrganizationRatingService.java

@@ -16,11 +16,19 @@ import java.util.List;
  */
 public interface IOrganizationRatingService extends IService<OrganizationRating> {
 
-	IPage<OrganizationRating> list(Integer pageNum, Integer pageSize, String id,String organizationYearRatingId, String binSection, String year,String organizationShortName,String organizationId);
+	//IPage<OrganizationRating> list(Integer pageNum, Integer pageSize, String formula);
+
+	IPage<OrganizationRating> list(Integer pageNum, Integer pageSize, String id,String organizationYearRatingId, String binSection,
+								   String year,String organizationShortName,String organizationId,String safetyEnvProtection,String veto,
+								   String netProfit,String compositeScore,String annualTarget,String bonusPoint,String compositeScoreRaking,String projectLevel);
 
 
 	boolean generateRating(String organizationYearRatingId, String year);
 
 	List<OrganizationRating> getListSating(String organizationYearRatingId, String year, String organizationId);
 
+	IPage<OrganizationRating> grade(List<OrganizationRating> orgRating);
+
+
+
 }

+ 4 - 1
ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/OrganizationRatingRuleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ims.eval.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ims.eval.entity.OrganizationEvaluationRule;
@@ -9,6 +10,8 @@ import com.ims.eval.service.IOrganizationRatingRuleService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -25,7 +28,7 @@ public class OrganizationRatingRuleServiceImpl extends ServiceImpl<OrganizationR
 
 
 		Page<OrganizationRatingRule> page = new Page<>(pageNum, pageSize);
-		IPage<OrganizationRatingRule>  list = baseMapper.selectList(page, id, binSection, binStage, ruleName, checkCycle);
+		IPage<OrganizationRatingRule>  list = baseMapper.selList(page, id, binSection, binStage, ruleName, checkCycle);
 
 		return list;
 	}

+ 339 - 20
ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/OrganizationRatingServiceImpl.java

@@ -1,19 +1,24 @@
 package com.ims.eval.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ims.eval.cache.CacheContext;
 import com.ims.eval.dao.OrganizationRatingMapper;
-import com.ims.eval.entity.OrganizationEvaluationRule;
-import com.ims.eval.entity.OrganizationRating;
-import com.ims.eval.entity.OrganizationRatingRule;
-import com.ims.eval.service.IOrganizationEvaluationRuleService;
-import com.ims.eval.service.IOrganizationRatingService;
+import com.ims.eval.entity.*;
+import com.ims.eval.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -27,30 +32,343 @@ import java.util.stream.Collectors;
 @Service
 public class OrganizationRatingServiceImpl extends ServiceImpl<OrganizationRatingMapper, OrganizationRating> implements IOrganizationRatingService {
 
-
-
 	@Autowired
 	private IOrganizationEvaluationRuleService organizationEvaluationRuleService;
 
+	@Resource
+	private IOrganizationEvaluationService iOrganizationEvaluationService;
+
+	@Resource
+	private IOrganizationRatingService iOrganizationRatingService;
+
+	@Resource
+	private IOrganizationEvaluationRuleService iOrganizationEvaluationRuleService;
+
+	@Resource
+	private IBinSectionService iBinSectionService;
+
+	@Resource
+	private IOrganizationRatingRuleService iOrganizationRatingRuleService;
+
+
 	@Override
-	public IPage<OrganizationRating> list(Integer pageNum, Integer pageSize, String id,String organizationYearRatingId, String binSection, String year,String organizationShortName,String organizationId) {
+	public IPage<OrganizationRating> grade(List<OrganizationRating> orgRating) {
+		XSSFWorkbook xwb = new XSSFWorkbook();
+		Sheet st = xwb.createSheet();
+		List<OrganizationRatingRule> rules = iOrganizationRatingRuleService.list(null);
+		List<OrganizationRatingRule> rulesYear = rules.stream().filter(rul -> orgRating.get(0).getYear().equals(rul.getYear())).collect(Collectors.toList());
+
+		Map<String, List<OrganizationRating>> collect = orgRating.stream().collect(Collectors.groupingBy(OrganizationRating::getBinSection));
+		Map<String, List<OrganizationRating>> col = new HashMap<>();
+		collect.forEach((key, value) -> CacheContext.bsnList.stream()
+                .filter(b -> key.equals(b.getSectionCode()))
+                .findFirst()
+                .ifPresent(b -> col.put(b.getId(), value)));
+
+		calcSCJYrating(rulesYear, col,st,xwb);
+		calcQQXMrating(rulesYear, col,st,xwb);
+		calcJJXMrating(rulesYear, col,st,xwb);
+		calcNDrating(rulesYear, orgRating,st,xwb);
+		return null;
+	}
+
+
+	/**
+	 *年度评级
+	 */
+	private void calcNDrating(List<OrganizationRatingRule> list, List<OrganizationRating> orgRating,Sheet st,XSSFWorkbook xwb) {
+		List<String> ls = new ArrayList<>();
+		for (OrganizationRating or : orgRating) {
+			ls.add(or.getId());
+		}
+		List<OrganizationRatingRule> rules = list.stream().filter(orr -> "年度评级".equals(orr.getCheckCycle())).collect(Collectors.toList());
+		List<OrganizationRating> org = iOrganizationRatingService.listByIds(ls);
+		Map<String, List<OrganizationRating>> col = org.stream().collect(Collectors.groupingBy(OrganizationRating::getBinSection));
+
+		Map<String, List<OrganizationRating>> col2 = new HashMap<>();
+		col.forEach((key, value) -> CacheContext.bsnList.stream()
+			.filter(b -> key.equals(b.getSectionCode()))
+			.findFirst()
+			.ifPresent(b -> col2.put(b.getId(), value)));
+
+		for (Map.Entry<String, List<OrganizationRating>> orgMap : col2.entrySet()) {
+			List<OrganizationRatingRule> collect = rules.stream().filter(rul -> orgMap.getKey().equals(rul.getBinSection())).collect(Collectors.toList());
+			if (collect.isEmpty()) {
+				continue;
+			}
+			String formula=collect.get(0).getExpression();
+
+		for (OrganizationRating or : orgMap.getValue()) {
+			if (or.getScjyRate() == null ||or.getScjyRate().isEmpty()|| or.getQqRate() == null||or.getQqRate().isEmpty()) {
+				continue;
+			}
+			String replace = formula;
+			Pattern pattern = Pattern.compile("\\[([^\\[\\]]+)\\]");//编译成模式
+			Matcher matcher = pattern.matcher(formula);
+			Map<String, String> placeholders = new HashMap<>();
+			String key=null;
+			while (matcher.find()) {
+				String content = matcher.group(1);
+				if ("scjy_rate".equals(content)) {
+					if (or.getScjyRate() == null) {
+						return;
+					}
+					key= or.getScjyRate();
+				}else if ("qq_rate".equals(content)) {
+					if (or.getQqRate() == null) {
+						return;
+					}
+					key = or.getQqRate();
+				}
+				if (key != null) {
+					replace = replace.replace("[" + content + "]", key);
+				}
+				placeholders.put(key, content);
+			}
+			String form = replace;
+			CellValue cv = setFormula(st, xwb, form);
+			UpdateWrapper<OrganizationRating> uw = new UpdateWrapper<>();
+			uw.eq("id", or.getId()).set("year_rate", cv.formatAsString());
+			iOrganizationRatingService.update(uw);
+	   		}
+		}
+	}
+
+
+	private CellValue setFormula(Sheet st,XSSFWorkbook xwb,String form) {
+		Row rr = st.createRow(0);
+		Cell cc = rr.createCell(0);
+		// 这里要设置为公式类型
+		cc.setCellFormula(form);
+		FormulaEvaluator fe = new XSSFFormulaEvaluator(xwb);
+		return fe.evaluate(cc);
+	}
+
+
+	/**
+	 * 基建评级
+	 */
+	private void calcJJXMrating(List<OrganizationRatingRule> list, Map<String, List<OrganizationRating>> orgRating,Sheet st,XSSFWorkbook xwb) {
+		List<OrganizationRatingRule> rules = list.stream().filter(orr -> "基建评级".equals(orr.getCheckCycle())).collect(Collectors.toList());
+		for (Map.Entry<String, List<OrganizationRating>> orgMap : orgRating.entrySet()) {
+			List<OrganizationRatingRule> collect = rules.stream().filter(rul -> orgMap.getKey().equals(rul.getBinSection())).collect(Collectors.toList());
+			if (collect.isEmpty()) {
+				continue;
+			}
+			String formula=collect.get(0).getExpression();
+			for (OrganizationRating or : orgMap.getValue()) {
+				if (or.getCompositeScoreRaking() == null ||or.getCompositeScoreRaking().isEmpty()|| or.getProjectLevel() == null||or.getProjectLevel().isEmpty()) {
+					continue;
+				}
+				String replace = formula;
+				Pattern pattern = Pattern.compile("\\[([^\\[\\]]+)\\]");//编译成模式
+				Matcher matcher = pattern.matcher(formula);
+				Map<String, String> placeholders = new HashMap<>();
+				String key=null;
+				while (matcher.find()) {
+					String content = matcher.group(1);
+					if ("ZHDEPM".equals(content)) {
+						key= or.getCompositeScoreRaking();
+					}else if ("JJDJ".equals(content)) {
+						key = or.getProjectLevel();
+					}
+					if (key != null) {
+						replace = replace.replace("[" + content + "]", key);
+					}
+					placeholders.put(key, content);
+				}
+				String form = replace;
+				CellValue cv = setFormula(st, xwb, form);
+				UpdateWrapper<OrganizationRating> uw = new UpdateWrapper<>();
+				uw.eq("id", or.getId()).set("jj_rate", cv.formatAsString()).set("composite_score_raking",or.getCompositeScoreRaking())
+					.set("project_level",or.getProjectLevel());
+				iOrganizationRatingService.update(uw);
+			}
+		}
+	}
+
+	/**
+	 * 生产经营评级
+	 */
+	private void calcSCJYrating(List<OrganizationRatingRule> list, Map<String, List<OrganizationRating>> orgRating,Sheet st,XSSFWorkbook xwb) {
+		List<OrganizationRatingRule> rules = list.stream().filter(orr -> "生产经营评级".equals(orr.getCheckCycle())).collect(Collectors.toList());
+		for (Map.Entry<String, List<OrganizationRating>> orgMap : orgRating.entrySet()) {
+			List<OrganizationRatingRule> collect = rules.stream().filter(rul -> orgMap.getKey().equals(rul.getBinSection())).collect(Collectors.toList());
+			for (OrganizationRatingRule ru : rules) {
+				System.out.println("key+"+orgMap.getKey()+"---"+ru.getBinSection());
+			}
+			if (collect.isEmpty()) {
+				continue;
+			}
+			String formula=collect.get(0).getExpression();
+		for (OrganizationRating or : orgMap.getValue()) {
+			if (or.getSafetyEnvProtection() == null|| or.getSafetyEnvProtection().isEmpty() || or.getNetProfit() == null ||or.getNetProfit().isEmpty()|| or.getCompositeScore()==null ||or.getCompositeScore().isEmpty()|| or.getVeto()==null||or.getVeto().isEmpty()) {
+				continue;
+			}
+			String replace = formula;
+			Pattern pattern = Pattern.compile("\\[([^\\[\\]]+)\\]");//编译成模式
+			Matcher matcher = pattern.matcher(formula);
+			Map<String, String> placeholders = new HashMap<>();
+			String key=null;
+			while (matcher.find()) {
+				String content = matcher.group(1);
+				if ("AQHB".equals(content)) {
+					key= or.getSafetyEnvProtection();
+				}else if ("JLR".equals(content)) {
+					key = or.getNetProfit();
+				}else if ("ZHDF".equals(content)) {
+					key = or.getCompositeScore();
+				}else if ("FJSX".equals(content)) {
+					key = or.getVeto();
+				}
+				if (key != null) {
+					replace = replace.replace("[" + content + "]", key);
+				}
+				placeholders.put(key, content);
+			}
+			String form = replace;
+			CellValue cv = setFormula(st, xwb, form);
+			UpdateWrapper<OrganizationRating> uw = new UpdateWrapper<>();
+			uw.eq("id", or.getId()).set("scjy_rate", cv.formatAsString()).set("safety_env_protection",or.getSafetyEnvProtection())
+				.set("veto",or.getVeto()).set("net_profit",or.getNetProfit()).set("composite_score",or.getCompositeScore());
+			iOrganizationRatingService.update(uw);
+		}}
+	}
+
+	/**
+	 * 前期评级
+	 */
+	private void calcQQXMrating(List<OrganizationRatingRule> list, Map<String, List<OrganizationRating>> orgRating,Sheet st,XSSFWorkbook xwb) {
+		List<OrganizationRatingRule> rules = list.stream().filter(orr -> "前期评级".equals(orr.getCheckCycle())).collect(Collectors.toList());
+		for (Map.Entry<String, List<OrganizationRating>> orgMap : orgRating.entrySet()) {
+			List<OrganizationRatingRule> collect = rules.stream().filter(rul -> orgMap.getKey().equals(rul.getBinSection())).collect(Collectors.toList());
+			if (collect.isEmpty()) {
+				continue;
+			}
+			String formula=collect.get(0).getExpression();
+		for (OrganizationRating or : orgMap.getValue()) {
+			if (or.getAnnualTarget() == null ||or.getAnnualTarget().isEmpty()|| or.getBonusPoint() == null||or.getBonusPoint().isEmpty()) {
+				continue;
+			}
+			String replace = formula;
+			Pattern pattern = Pattern.compile("\\[([^\\[\\]]+)\\]");
+			Matcher matcher = pattern.matcher(formula);
+			Map<String, String> placeholders = new HashMap<>();
+			String key=null;
+			while (matcher.find()) {
+				String content = matcher.group(1);
+				if ("NDMB".equals(content)) {
+					 key= or.getAnnualTarget();
+				}else if ("XJX".equals(content)) {
+					key = or.getBonusPoint();
+				}
+				if (key != null) {
+					replace = replace.replace("[" + content + "]", key);
+				}
+				placeholders.put(key, content);
+			}
+			String form = replace;
+			CellValue cv = setFormula(st, xwb, form);
+			UpdateWrapper<OrganizationRating> uw = new UpdateWrapper<>();
+			uw.eq("id", or.getId()).set("qq_rate", cv.formatAsString()).set("annual_target",or.getAnnualTarget()).set("bonus_point",or.getBonusPoint());
+			iOrganizationRatingService.update(uw);
+		}}
+	}
+
+
+	@Override
+	public IPage<OrganizationRating> list(Integer pageNum, Integer pageSize, String id, String
+		organizationYearRatingId, String binSection, String year, String organizationShortName, String organizationId, String safetyEnvProtection,
+										  String veto, String netProfit, String compositeScore, String annualTarget, String bonusPoint,String compositeScoreRaking,String projectLevel) {
 		Page<OrganizationRatingRule> page = new Page<>(pageNum, pageSize);
 		if (null == pageNum || null == pageSize) {
 			throw new RuntimeException("分页参数为空");
 		}
-		IPage<OrganizationRating> list = baseMapper.selectList(page,id,organizationYearRatingId,binSection,year,organizationShortName,organizationId);
+		IPage<OrganizationRating> list = baseMapper.selectList(page, id, organizationYearRatingId, binSection, year, organizationShortName,
+			organizationId, safetyEnvProtection, veto, netProfit, compositeScore, annualTarget, bonusPoint,compositeScoreRaking,projectLevel);
+		if (list.getRecords().isEmpty()) {
+			int c = iOrganizationRatingService.count();
+			if (c > 0) {
+				return list;
+			}
+			getOrgRatingInfo(organizationYearRatingId);
+			list = baseMapper.selectList(page, id, organizationYearRatingId, binSection, year, organizationShortName, organizationId,
+				safetyEnvProtection, veto, netProfit, compositeScore, annualTarget, bonusPoint,compositeScoreRaking,projectLevel);
+		}
 		return list;
 	}
 
+
+	/**
+	 * 根据年度考评公司写年度等级表中的id
+	 */
+	private void getOrgRatingInfo(String organizationYearRatingId) {
+		LambdaQueryWrapper<OrganizationEvaluation> lqw = new LambdaQueryWrapper<>();
+		lqw.eq(OrganizationEvaluation::getCheckCycle, "NDKP");
+		List<OrganizationEvaluation> ll = iOrganizationEvaluationService.list(lqw);
+		if (ll.isEmpty()) {
+			return;
+		}
+		OrganizationEvaluation yearMax = null;
+		if (ll.size() > 1) {
+			yearMax = ll.stream().filter(ye -> ye.getYear().matches("\\d+")).max(Comparator.comparing(ye -> Integer.parseInt(ye.getYear()))).orElse(null);
+		} else {
+			yearMax = ll.get(0);
+		}
+		if (yearMax == null) {
+			return;
+		}
+		List<OrganizationRating> lors = new ArrayList<>();
+		String ruls = yearMax.getOrganizationEvaluationRuleId();
+		String[] ru = ruls.split(",");
+		List<OrganizationEvaluationRule> oers = iOrganizationEvaluationRuleService.listByIds(Arrays.asList(ru));
+		List<BinSection> binList = iBinSectionService.list();
+		for (OrganizationEvaluationRule oer : oers) {
+			if (!oer.getBinSection().contains(",")) {
+				OrganizationRating or = new OrganizationRating();
+				or.setYear(yearMax.getYear());
+				or.setOrganizationShortName(oer.getOrganizationShortName());
+				or.setOrganizationId(oer.getOrganizationId());
+				or.setOrganizationYearRatingId(organizationYearRatingId);
+				for (BinSection bl : binList) {
+					if (bl.getId().equals(oer.getBinSection())) {
+						or.setBinSection(bl.getSectionCode());
+						break;
+					}
+				}
+				lors.add(or);
+				continue;
+			}
+			String[] split = oer.getBinSection().split(",");
+			Set<String> splitSet = new LinkedHashSet<>(Arrays.asList(split));
+			for (String s : splitSet) {
+				OrganizationRating or = new OrganizationRating();
+				or.setYear(yearMax.getYear());
+				or.setOrganizationShortName(oer.getOrganizationShortName());
+				or.setOrganizationId(oer.getOrganizationId());
+				or.setOrganizationYearRatingId(organizationYearRatingId);
+				for (BinSection bl : binList) {
+					if (bl.getId().equals(s)) {
+						or.setBinSection(bl.getSectionCode());
+						break;
+					}
+				}
+				lors.add(or);
+			}
+		}
+		iOrganizationRatingService.saveBatch(lors);
+	}
+
+
 	@Override
 	public boolean generateRating(String organizationYearRatingId, String year) {
-		List<OrganizationRating> ratings = getListSating( organizationYearRatingId,  year,  "");
+		List<OrganizationRating> ratings = getListSating(organizationYearRatingId, year, "");
 		List<String> collect = ratings.stream().map(OrganizationRating::getOrganizationId).collect(Collectors.toList());
-		List<OrganizationEvaluationRule> evaluationRules =  organizationEvaluationRuleService.listByIsCheck("DWKP","NDKP",year,true,false);
+		List<OrganizationEvaluationRule> evaluationRules = organizationEvaluationRuleService.listByIsCheck("DWKP", "NDKP", year, true, false);
 
 		List<OrganizationRating> addRatings = new ArrayList<>();
-		for (OrganizationEvaluationRule rule : evaluationRules){
-			if(null != collect && collect.size()>0 && collect.contains(rule.getOrganizationId())){
+		for (OrganizationEvaluationRule rule : evaluationRules) {
+			if (null != collect && collect.size() > 0 && collect.contains(rule.getOrganizationId())) {
 				continue;
 			}
 			OrganizationRating rating = new OrganizationRating();
@@ -63,17 +381,18 @@ public class OrganizationRatingServiceImpl extends ServiceImpl<OrganizationRatin
 			addRatings.add(rating);
 		}
 
-		if(addRatings.size()<=0){
-			return  true;
+		if (addRatings.size() <= 0) {
+			return true;
 		}
 		boolean b = this.saveOrUpdateBatch(addRatings);
-		return  b;
+		return b;
 	}
 
 	@Override
-	public List<OrganizationRating> getListSating(String organizationYearRatingId, String year, String organizationId) {
+	public List<OrganizationRating> getListSating(String organizationYearRatingId, String year, String
+		organizationId) {
 
-		List<OrganizationRating> list = baseMapper.selectListSating(organizationYearRatingId,year,organizationId);
+		List<OrganizationRating> list = baseMapper.selectListSating(organizationYearRatingId, year, organizationId);
 		return list;
 	}
 }

+ 28 - 1
ims-service/ims-eval/src/main/resources/mappers/OrganizationRatingMapper.xml

@@ -6,7 +6,9 @@
     <select id="selectList" resultType="com.ims.eval.entity.OrganizationRating">
 
         select
-            r.*,
+        r.id,r.organization_year_rating_id,r.organization_short_name,r.organization_id,r.year,r.bin_section,TRIM('"' FROM r.scjy_rate) AS scjy_rate,
+        TRIM('"' FROM r.qq_rate) AS qq_rate,TRIM('"' FROM r.jj_rate) AS jj_rate,TRIM('"' FROM r.year_rate) AS year_rate,r.create_by,r.update_by,r.create_time,r.update_time,
+        r.remark,r.safety_env_protection,r.veto,r.net_profit,r.composite_score,r.annual_target,r.bonus_point,r.composite_score_raking,r.project_level,
             bs.section_name binsectionname
         from
             organization_rating r
@@ -36,8 +38,33 @@
             <if test="organizationId !=null and organizationId !=''">
                 and r.organization_id=#{organizationId}
             </if>
+            <if test="safetyEnvProtection !=null and safetyEnvProtection !=''">
+                and r.safety_env_protection=#{safetyEnvProtection}
+            </if>
+            <if test="veto !=null and veto !=''">
+                and r.veto=#{veto}
+            </if>
+            <if test="netProfit !=null and netProfit !=''">
+                and r.net_profit=#{netProfit}
+            </if>
+            <if test="compositeScore !=null and compositeScore !=''">
+                and r.composite_score=#{compositeScore}
+            </if>
+            <if test="annualTarget !=null and annualTarget !=''">
+                and r.annual_target=#{annualTarget}
+            </if>
+            <if test="bonusPoint !=null and compositeScore !=''">
+                and r.bonus_point=#{bonusPoint}
+            </if>
+            <if test="compositeScoreRaking !=null and compositeScoreRaking !=''">
+                and r.composite_score_raking=#{compositeScoreRaking}
+            </if>
+            <if test="projectLevel !=null and projectLevel !=''">
+                and r.project_level=#{projectLevel}
+            </if>
 
         </where>
+        order by r.organization_short_name
 
     </select>
     <select id="selectListSating" resultType="com.ims.eval.entity.OrganizationRating">

+ 5 - 4
ims-service/ims-eval/src/main/resources/mappers/OrganizationRatingRuleMapper.xml

@@ -3,16 +3,17 @@
 <mapper namespace="com.ims.eval.dao.OrganizationRatingRuleMapper">
 
 
-    <select id="selectList" resultType="com.ims.eval.entity.OrganizationRatingRule">
+    <select id="selList" resultType="com.ims.eval.entity.OrganizationRatingRule">
 
-        select
+        select distinct
             r.*,
             bs.section_name binsectionname,
-            be.stage_name binstagename
+           be.stage_name binstagename
         from
             organization_rating_rule r
             left join bin_section bs on bs.id = r.bin_section
-            left join bin_stage be on be.id = r.bin_stage
+           left join bin_stage be on be.id = r.bin_stage
+            left join organization_rating_indicator ori on ori.rating_stage = r.check_cycle
         <where>