Browse Source

计算重构

wangchangsheng 1 year ago
parent
commit
8fd3f027e9
19 changed files with 250 additions and 86 deletions
  1. 8 0
      ims-common/pom.xml
  2. 49 0
      ims-common/src/main/java/com/ims/common/utils/FormulaUtils.java
  3. 6 0
      ims-service/ims-eval/src/main/java/com/ims/eval/controller/IndicatorController.java
  4. 23 0
      ims-service/ims-eval/src/main/java/com/ims/eval/controller/OrganizationEvaluationInfoController.java
  5. 1 1
      ims-service/ims-eval/src/main/java/com/ims/eval/dao/CalculateIndicatorItemInfoMapper.java
  6. 2 1
      ims-service/ims-eval/src/main/java/com/ims/eval/dao/OrganizationEvaluationInfoMapper.java
  7. 5 0
      ims-service/ims-eval/src/main/java/com/ims/eval/entity/CalculateIndicatorItemInfo.java
  8. 1 1
      ims-service/ims-eval/src/main/java/com/ims/eval/entity/EvaluationScoreCount.java
  9. 4 0
      ims-service/ims-eval/src/main/java/com/ims/eval/entity/IndicatorDictionary.java
  10. 6 0
      ims-service/ims-eval/src/main/java/com/ims/eval/entity/dto/response/OrganizationEvaluationInfoResDTO.java
  11. 10 60
      ims-service/ims-eval/src/main/java/com/ims/eval/schedule/ScoreCalculationSchedule.java
  12. 3 0
      ims-service/ims-eval/src/main/java/com/ims/eval/service/ICalculateIndicatorItemInfoService.java
  13. 1 1
      ims-service/ims-eval/src/main/java/com/ims/eval/service/IIndicatorService.java
  14. 1 1
      ims-service/ims-eval/src/main/java/com/ims/eval/service/IOrganizationEvaluationInfoService.java
  15. 30 1
      ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/CalculateIndicatorItemInfoServiceImpl.java
  16. 8 1
      ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/IndicatorServiceImpl.java
  17. 77 15
      ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/OrganizationEvaluationInfoServiceImpl.java
  18. 4 0
      ims-service/ims-eval/src/main/resources/mappers/CalculateIndicatorItemInfoMapper.xml
  19. 11 4
      ims-service/ims-eval/src/main/resources/mappers/OrganizationEvaluationInfoMapper.xml

+ 8 - 0
ims-common/pom.xml

@@ -35,6 +35,14 @@
             <version>4.6.17</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 49 - 0
ims-common/src/main/java/com/ims/common/utils/FormulaUtils.java

@@ -0,0 +1,49 @@
+package com.ims.common.utils;
+
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.formula.FormulaParseException;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+
+import java.math.BigDecimal;
+
+public class FormulaUtils {
+
+
+
+
+	/**
+	 * Sheet 中的每一行
+	 */
+	private static HSSFRow row = null;
+
+	private static FormulaEvaluator formulaEvaluator = null;
+
+	/**
+	 * 计算值
+	 *
+	 * @param formula Excel 中的公式,例如:MAX(56-FLOOR(20/6,1),2)
+	 * @return
+	 */
+	public static double caculateFormula(String formula) {
+		if(formula.startsWith("=")){
+			formula =formula.replace("=","");
+		}
+		HSSFWorkbook workbook = new HSSFWorkbook();
+		HSSFSheet sheet = workbook.createSheet();
+		row = sheet.createRow(0);
+		formulaEvaluator = new HSSFFormulaEvaluator(workbook);
+
+		// 这里必须新建一个对象,否则只有第一个 formula 才有效。查看 formulaEvaluator.evaluate 的源码。
+		HSSFCell cell = row.createCell(0);
+		cell.setCellType(CellType.FORMULA);
+		try {
+			cell.setCellFormula(formula);
+			double value = formulaEvaluator.evaluate(cell).getNumberValue();
+			return new BigDecimal(value).setScale(4, BigDecimal.ROUND_CEILING).doubleValue();
+		} catch (FormulaParseException e) {
+			System.out.print(e.getMessage());
+			return 0;
+		}
+	}
+}

+ 6 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/controller/IndicatorController.java

@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -167,6 +168,8 @@ public class IndicatorController {
 	@ApiOperation(value = "新增(修改)", notes = "新增(修改)")
 	public R saveGroup(@RequestBody IndicatorDTO indicator) {
 
+
+
 		try {
 			boolean b = iIndicatorService.saveGroup(indicator);
 			if (b) {
@@ -177,6 +180,9 @@ public class IndicatorController {
 		} catch (CustomException e){
 			log.error("错误",e);
 			return R.customError(e.getMessage()).data("失败!");
+		}catch (Exception e2){
+			log.error("错误",e2);
+			return R.customError(e2.getMessage()).data("失败!");
 		}
 	}
 

+ 23 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/controller/OrganizationEvaluationInfoController.java

@@ -139,4 +139,27 @@ public class OrganizationEvaluationInfoController {
 		}
 		return R.customError("上传文件为空!");
 	}
+
+
+//
+
+		@PostMapping(value = "/calculation")
+	@ApiOperation(value = "批量新增(修改)", notes = "批量新增(修改)")
+	public R calculation(@RequestParam(value = "id", required = false)String id,
+						  @RequestParam(value = "indicatorId", required = false) String indicatorId ,
+						  @RequestParam(value = "organizationEvaluationId", required = false) String organizationEvaluationId,
+						  @RequestParam(value = "optionCode", required = false) String optionCode) {
+
+		try {
+			boolean b = organizationEvaluationInfoService.calculationByEvaluationId(id,indicatorId,organizationEvaluationId,optionCode);
+			if (b) {
+				return R.ok().data(b);
+			} else {
+				return R.error().data("保存失败!");
+			}
+		} catch (Exception e) {
+			log.error("错误", e);
+			return R.customError(e.getMessage()).data("失败!");
+		}
+	}
 }

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

@@ -15,6 +15,6 @@ import java.util.List;
  */
 public interface CalculateIndicatorItemInfoMapper extends BaseMapper<CalculateIndicatorItemInfo> {
 
-	List<CalculateIndicatorItemInfo> selectList(String organizationType, String checkCycle, String year, String month,String binSection);
+	List<CalculateIndicatorItemInfo> selectList(String organizationType, String checkCycle, String year, String month,String binSection,String organizationEvaluationId);
 
 }

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

@@ -47,6 +47,7 @@ public interface OrganizationEvaluationInfoMapper extends BaseMapper<Organizatio
 
 	List<OrganizationEvaluationInfoResDTO> selectByIdAndEvaluationInfoId(@Param("id") String id,
 																   @Param("indicatorId") String indicatorId,
-																   @Param("organizationEvaluationId") String organizationEvaluationId);
+																   @Param("organizationEvaluationId") String organizationEvaluationId,
+																   @Param("optionCode") String optionCode);
 
 }

+ 5 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/entity/CalculateIndicatorItemInfo.java

@@ -22,6 +22,11 @@ public class CalculateIndicatorItemInfo extends Model implements Cloneable {
 	private String id;
 
 	/**
+	 * 考评记录id
+	 */
+	private String organizationEvaluationId;
+
+	/**
 	 * 考评类别(单位、部门)
 	 */
 	private String organizationType;

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

@@ -14,7 +14,7 @@ import lombok.*;
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@Builder
+//@Builder
 public class EvaluationScoreCount extends Model {
 
     private static final long serialVersionUID = 1L;

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

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 import java.util.Date;
 
 /**
@@ -100,4 +102,6 @@ public class IndicatorDictionary extends Model {
 
 
 
+
+
 }

+ 6 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/entity/dto/response/OrganizationEvaluationInfoResDTO.java

@@ -122,4 +122,10 @@ public class OrganizationEvaluationInfoResDTO {
 	 * 修改标记
 	 */
 	private Boolean updateMark;
+
+
+	/**
+	 *计算公式
+	 */
+	private String formula;
 }

+ 10 - 60
ims-service/ims-eval/src/main/java/com/ims/eval/schedule/ScoreCalculationSchedule.java

@@ -130,15 +130,15 @@ public class ScoreCalculationSchedule {
 							}
 						}
 						//得分存入数据库
-						EvaluationScoreCount evaluationScoreCount = EvaluationScoreCount.builder()
-							.indicatorId(listEntry.getKey())
-							.organizationEvaluationRuleId(entry.getKey())
-							.organizationEvaluationId(organizationEvaluation.getId())
-							.score(calculation)
-							.isQuantified("1")
-							.obversionScore(calculation)
-							.build();
-						save = iEvaluatioinScoreCountService.save(evaluationScoreCount);
+//						EvaluationScoreCount evaluationScoreCount = EvaluationScoreCount.builder()
+//							.indicatorId(listEntry.getKey())
+//							.organizationEvaluationRuleId(entry.getKey())
+//							.organizationEvaluationId(organizationEvaluation.getId())
+//							.score(calculation)
+//							.isQuantified("1")
+//							.obversionScore(calculation)
+//							.build();
+//						save = iEvaluatioinScoreCountService.save(evaluationScoreCount);
 					}
 				}
 			}
@@ -180,7 +180,7 @@ public class ScoreCalculationSchedule {
 				//添加计算指标项的code和值  例如:差值最大值和最小值
 				OrganizationEvaluation organizationEvaluation = organizationEvaluationMapper.selectById(list.get(0).getOrganizationEvaluationId());
 				OrganizationEvaluationRule organizationEvaluationRule = organizationEvaluationRuleMapper.selectById(list.get(0).getOrganizationEvaluationRuleId());
-				List<CalculateIndicatorItemInfo> calculateIndicatorItemInfos = calculateIndicatorItemInfoMapper.selectList(organizationEvaluation.getOrganizationType(),organizationEvaluation.getCheckCycle(),organizationEvaluation.getYear(),organizationEvaluation.getMonth(),organizationEvaluationRule.getBinSection());
+				List<CalculateIndicatorItemInfo> calculateIndicatorItemInfos = calculateIndicatorItemInfoMapper.selectList(organizationEvaluation.getOrganizationType(),organizationEvaluation.getCheckCycle(),organizationEvaluation.getYear(),organizationEvaluation.getMonth(),organizationEvaluationRule.getBinSection(),"");
 				if (calculateIndicatorItemInfos.size() < 0){
 					throw new CustomException("计算指标项为空");
 				}
@@ -296,58 +296,8 @@ public class ScoreCalculationSchedule {
 	}
 
 
-	/*public static void main(String[] args) {
 
 
-		String sv = "round(1.2)";
-		String sc = "if(1==0,8,8-0.5*round(0.08/0.04))";
-
-
-		String s2 = "if(1>0,-1*2/maxnum(2)+10,1*2/minnum(1)+10)";
-
-		String s4 = "if(0.01<0,-0.01*2/min(1,0.07)+10,1/1*2/max(4,0.07)+10)";
-		String s5 = "1+if(if(1<0,-1*2/min(2,1)+10,1*2/max(2,1)+10)>12,12,if(1<0,-1*2/min(2,1)+10,1*2/max(2,1)+10))";
-		String s3 = "if(abs(99)<=5%,if(abs(99)>=1%,(5%-abs(99))/1%*0.25+5,6),if(abs(99)<=10%,(5%-abs(99))/1%*0.2+5,4))+if(99==0,5,if(99>0,6,4))";
-		*//*String sd = "max(1,min(1,2))";
-		String sc = MathCalculatorUtil.calculator(sd);*//*
-		String ss = "if(max(1,3)<1,1,2)";
-		String s9 = "maxnum(1)";
-		ArrayList<Token> tokens = Analyzer.getTokens(sc);
-
-		//使用不同编码代替函数
-		AlarmExpression alarmExpression = Analyzer.createAlarmExpression(tokens);
-		if (alarmExpression.getVarList() != null && alarmExpression.getVarList().size() > 0) {
-			List<AlarmExpression> alarmExpressions = alarmExpression.getChildren();
-			for (AlarmExpression alarmExpression1 : alarmExpressions){
-				if (alarmExpression1.getChildren().size() > 0 && alarmExpression1.getChildren() != null){
-					for (AlarmExpression alarmExpression2 : alarmExpression1.getChildren()){
-						if (alarmExpression2.getChildren().size() > 0 && alarmExpression2.getChildren() != null){
-							List<AlarmExpression> al = alarmExpression2.getChildren();
-							for (AlarmExpression alarmExpression3 : al){
-								String calculator = MathCalculatorUtil.calculator(alarmExpression3.getExpression());
-								alarmExpression2.setExpression(alarmExpression2.getExpression().replaceAll(alarmExpression3.getFunCode(), calculator));
-							}
-						}
-						String calculator = MathCalculatorUtil.calculator(alarmExpression2.getExpression());
-						alarmExpression1.setExpression(alarmExpression1.getExpression().replaceAll(alarmExpression2.getFunCode(), calculator));
-					}
-					String calculator = MathCalculatorUtil.calculator(alarmExpression1.getExpression());
-					alarmExpression.setExpression(alarmExpression.getExpression().replaceAll(alarmExpression1.getFunCode(), calculator));
-				}else {
-					String calculator = MathCalculatorUtil.calculator(alarmExpression1.getExpression());
-					alarmExpression.setExpression(alarmExpression.getExpression().replaceAll(alarmExpression1.getFunCode(), calculator));
-				}
-			}
-		}
-//		Map<String,Object> map = new HashMap<>();
-//		Object o = ScriptShell.parseExpr(alarmExpression.getExpression(), map);
-//		System.out.println(o);
-		//判断表达式返回结果
-		String calculator = MathCalculatorUtil.calculator(alarmExpression.getExpression().trim());
-		System.out.println(calculator);
-
-	}*/
-
 
 
 	/**

+ 3 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/service/ICalculateIndicatorItemInfoService.java

@@ -3,6 +3,7 @@ package com.ims.eval.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ims.eval.entity.CalculateIndicatorItemInfo;
 import com.ims.eval.entity.OrganizationEvaluationInfo;
+import com.ims.eval.entity.dto.response.OrganizationEvaluationInfoResDTO;
 
 import java.util.List;
 
@@ -17,4 +18,6 @@ import java.util.List;
 public interface ICalculateIndicatorItemInfoService extends IService<CalculateIndicatorItemInfo> {
 
 	int saveIndicatorInfo(List<OrganizationEvaluationInfo> organizationEvaluationInfos) throws Exception;
+
+	int saveIndicatorInfoDTO(List<OrganizationEvaluationInfoResDTO> infoResDTOS) throws Exception;
 }

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

@@ -31,7 +31,7 @@ public interface IIndicatorService extends IService<Indicator> {
 
 	List<IndicatorResDTO> listByIds(List<String> indicatorIds);
 
-	boolean saveGroup(IndicatorDTO dto);
+	boolean saveGroup(IndicatorDTO dto) throws Exception;
 
 	IndicatorDTO getById(String id);
 

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

@@ -29,5 +29,5 @@ public interface IOrganizationEvaluationInfoService extends IService<Organizatio
 	List<OrganizationEvaluationInfoResDTO> finishValueList(String organizationEvaluationId, String dept, String  organizationShortName, String indicatorName, String binSection, String isQuantified, HttpServletRequest request);
 
 
-	boolean calculationByEvaluationId(String id ,String indicatorId,String organizationEvaluationI);
+	boolean calculationByEvaluationId(String id ,String indicatorId,String organizationEvaluationId,String optionCode);
 }

+ 30 - 1
ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/CalculateIndicatorItemInfoServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ims.eval.dao.*;
 import com.ims.eval.entity.CalculateIndicatorItemInfo;
 import com.ims.eval.entity.OrganizationEvaluationInfo;
+import com.ims.eval.entity.dto.response.OrganizationEvaluationInfoResDTO;
 import com.ims.eval.entity.dto.response.OrganizationEvaluationResDTO;
 import com.ims.eval.service.ICalculateIndicatorItemInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,6 +58,7 @@ public class CalculateIndicatorItemInfoServiceImpl extends ServiceImpl<Calculate
 					for (OrganizationEvaluationInfo r : listEntryValue){
 						if (r.getOptionCode().equals("CZ") || r.getOptionCode().equals("LRGXL") || r.getOptionCode().equals("DWQWLR")) {
 							CalculateIndicatorItemInfo calculateIndicatorItemInfo = new CalculateIndicatorItemInfo();
+
 							calculateIndicatorItemInfo.setIndicatorId(listEntry.getKey());
 							calculateIndicatorItemInfo.setOptionCode(r.getOptionCode());
 							calculateIndicatorItemInfo.setQuantifiedValue(r.getQuantifiedValue());
@@ -65,6 +67,7 @@ public class CalculateIndicatorItemInfoServiceImpl extends ServiceImpl<Calculate
 							calculateIndicatorItemInfo.setCheckCycle(organizationEvaluationResDTO.getCheckCycle());
 							calculateIndicatorItemInfo.setYear(organizationEvaluationResDTO.getYear());
 							calculateIndicatorItemInfo.setMonth(organizationEvaluationResDTO.getMonth());
+							calculateIndicatorItemInfo.setOrganizationEvaluationId(organizationEvaluationResDTO.getId());
 							list.add(calculateIndicatorItemInfo);
 						}
 					}
@@ -75,6 +78,32 @@ public class CalculateIndicatorItemInfoServiceImpl extends ServiceImpl<Calculate
 		return saveCalculate(list);
 	}
 
+	@Override
+	public int saveIndicatorInfoDTO(List<OrganizationEvaluationInfoResDTO> infoResDTOS) throws Exception {
+		List<CalculateIndicatorItemInfo> list = new ArrayList<>();
+
+		OrganizationEvaluationResDTO organizationEvaluationResDTO = organizationEvaluationMapper.selectById(infoResDTOS.get(0).getOrganizationEvaluationId());
+		//对考评规则id进行分组
+				//对指标id进行分组
+					for (OrganizationEvaluationInfoResDTO r : infoResDTOS){
+						if (r.getOptionCode().equals("CZ") || r.getOptionCode().equals("LRGXL") || r.getOptionCode().equals("DWQWLR")) {
+							CalculateIndicatorItemInfo calculateIndicatorItemInfo = new CalculateIndicatorItemInfo();
+							calculateIndicatorItemInfo.setIndicatorId(r.getIndicatorId());
+							calculateIndicatorItemInfo.setOptionCode(r.getOptionCode());
+							calculateIndicatorItemInfo.setQuantifiedValue(r.getQuantifiedValue());
+							calculateIndicatorItemInfo.setSectionId(r.getBinSection());
+							calculateIndicatorItemInfo.setOrganizationType(organizationEvaluationResDTO.getOrganizationType());
+							calculateIndicatorItemInfo.setCheckCycle(organizationEvaluationResDTO.getCheckCycle());
+							calculateIndicatorItemInfo.setYear(organizationEvaluationResDTO.getYear());
+							calculateIndicatorItemInfo.setMonth(organizationEvaluationResDTO.getMonth());
+							calculateIndicatorItemInfo.setOrganizationEvaluationId(organizationEvaluationResDTO.getId());
+							list.add(calculateIndicatorItemInfo);
+			}
+		}
+
+		return saveCalculate(list);
+	}
+
 
 	@Transactional
 	public int saveCalculate(List<CalculateIndicatorItemInfo> list) throws Exception {
@@ -82,7 +111,7 @@ public class CalculateIndicatorItemInfoServiceImpl extends ServiceImpl<Calculate
 		if (list.size() > 0){
 
 			//判断计算指标明细中之前是否存在记录 如果存在删除之前记录,重新新增
-			List<CalculateIndicatorItemInfo> calculateIndicatorItemInfo = calculateIndicatorItemInfoMapper.selectList(list.get(0).getOrganizationType(),list.get(0).getCheckCycle(),list.get(0).getYear(),list.get(0).getMonth(),list.get(0).getSectionId());
+			List<CalculateIndicatorItemInfo> calculateIndicatorItemInfo = calculateIndicatorItemInfoMapper.selectList(list.get(0).getOrganizationType(),list.get(0).getCheckCycle(),list.get(0).getYear(),list.get(0).getMonth(),list.get(0).getSectionId(),list.get(0).getOrganizationEvaluationId());
 
 			if (calculateIndicatorItemInfo.size() > 0){
 				List<String> idList = calculateIndicatorItemInfo.stream().map(CalculateIndicatorItemInfo::getId).collect(Collectors.toList());

+ 8 - 1
ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/IndicatorServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.Serializable;
+import java.net.URLDecoder;
 import java.util.*;
 
 /**
@@ -134,7 +135,7 @@ public class IndicatorServiceImpl extends ServiceImpl<IndicatorMapper, Indicator
 
 	@Transactional
 	@Override
-	public boolean saveGroup(IndicatorDTO dto) {
+	public boolean saveGroup(IndicatorDTO dto) throws Exception{
 		if (null != dto && (null == dto.getId() || "".equals(dto.getId().trim()))) {
 			QueryWrapper<Indicator> qw = new QueryWrapper<>();
 			qw.lambda().eq(Indicator::getIndicatorCode, dto.getIndicatorCode());
@@ -161,6 +162,10 @@ public class IndicatorServiceImpl extends ServiceImpl<IndicatorMapper, Indicator
 				throw new CustomException("子指标名或编码为空");
 			}
 			for (IndicatorDictionary i : dto2.getList()) {
+
+				String decode = URLDecoder.decode(i.getFormula(), "UTF-8");
+				String formula = decode.replaceAll(" ", "+");
+
 				if (null != i && (null == i.getId() || "".equals(i.getId().trim()))) {
 					QueryWrapper<IndicatorDictionary> qw = new QueryWrapper<>();
 					qw.lambda().eq(IndicatorDictionary::getIndicatorId, dto.getId());
@@ -174,6 +179,7 @@ public class IndicatorServiceImpl extends ServiceImpl<IndicatorMapper, Indicator
 					i.setOptionOrder(i.getOptionOrder());
 					i.setChildCode(dto2.getChildCode());
 					i.setChildName(dto2.getChildName());
+					i.setFormula(formula);
 					i.setCreateTime(new Date());
 					i.setOptionName(null == CacheContext.ddNameMap.get(i.getOptionCode()) ? "未知属性" : CacheContext.ddNameMap.get(i.getOptionCode()));
 				} else {
@@ -181,6 +187,7 @@ public class IndicatorServiceImpl extends ServiceImpl<IndicatorMapper, Indicator
 					i.setOptionOrder(i.getOptionOrder());
 					i.setChildCode(dto2.getChildCode());
 					i.setChildName(dto2.getChildName());
+					i.setFormula(formula);
 					i.setOptionName(null == CacheContext.ddNameMap.get(i.getOptionCode()) ? "未知属性" : CacheContext.ddNameMap.get(i.getOptionCode()));
 					i.setUpdateTime(new Date());
 				}

+ 77 - 15
ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/OrganizationEvaluationInfoServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ims.eval.service.impl;
 
 import com.ims.common.utils.Constant;
+import com.ims.common.utils.FormulaUtils;
 import com.ims.common.utils.StringUtils;
 import com.ims.eval.config.CustomException;
 import com.ims.eval.entity.IndicatorDictionary;
@@ -9,11 +10,8 @@ import com.ims.eval.entity.OrganizationEvaluationInfo;
 import com.ims.eval.dao.OrganizationEvaluationInfoMapper;
 import com.ims.eval.entity.dto.response.MyuserResDTO;
 import com.ims.eval.entity.dto.response.OrganizationEvaluationInfoResDTO;
-import com.ims.eval.service.ICalculateIndicatorItemInfoService;
-import com.ims.eval.service.IIndicatorDictionaryService;
-import com.ims.eval.service.IOrganizationEvaluationInfoService;
+import com.ims.eval.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ims.eval.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -48,6 +46,8 @@ public class OrganizationEvaluationInfoServiceImpl extends ServiceImpl<Organizat
 	@Autowired
 	private IUserService userService;
 
+	@Autowired
+	private IEvaluationScoreCountService iEvaluatioinScoreCountService;
 	@Override
 	public Map finishValueList(String organizationEvaluationId, String dept, HttpServletRequest request) {
 
@@ -195,19 +195,81 @@ public class OrganizationEvaluationInfoServiceImpl extends ServiceImpl<Organizat
 	}
 
 	@Override
-	public boolean calculationByEvaluationId(String id, String indicatorId,String organizationEvaluationI) {
-		List<OrganizationEvaluationInfoResDTO> list = baseMapper.selectByIdAndEvaluationInfoId(id,indicatorId,organizationEvaluationI);
-		Map<String, List<OrganizationEvaluationInfoResDTO>> binSectionGropList = list.stream().collect(Collectors.groupingBy(OrganizationEvaluationInfoResDTO::getBinSection));
-
-		for (Map.Entry<String, List<OrganizationEvaluationInfoResDTO>> entry : binSectionGropList.entrySet()){
-			if (entry.getValue().size() > 0){
-				Map<String, List<OrganizationEvaluationInfoResDTO>> collectIn = entry.getValue().stream().collect(Collectors.groupingBy(OrganizationEvaluationInfoResDTO::getIndicatorId));
-
-
+	public boolean calculationByEvaluationId(String id, String indicatorId,String organizationEvaluationId,String optionCode) {
+		try {
+			List<OrganizationEvaluationInfoResDTO> list = baseMapper.selectByIdAndEvaluationInfoId(id,indicatorId,organizationEvaluationId,"");
+			//根据板块分组
+			Map<String, List<OrganizationEvaluationInfoResDTO>> binSectionGropList = list.stream().collect(Collectors.groupingBy(OrganizationEvaluationInfoResDTO::getBinSection));
+
+			for (Map.Entry<String, List<OrganizationEvaluationInfoResDTO>> binSectionGropEntry : binSectionGropList.entrySet()){
+				if (binSectionGropEntry.getValue().size() > 0){
+					//按照指标分组
+					Map<String, List<OrganizationEvaluationInfoResDTO>> indicatorGropList = binSectionGropEntry.getValue().stream().collect(Collectors.groupingBy(OrganizationEvaluationInfoResDTO::getIndicatorId));
+
+
+					for (Map.Entry<String, List<OrganizationEvaluationInfoResDTO>> indicatorGropListEntry : indicatorGropList.entrySet()){
+	//					List<OrganizationEvaluationInfoResDTO> indicator = indicatorGropListEntry.getValue();
+
+						//计算差值等的最大值最小值
+						//iCalculateIndicatorItemInfoService.saveIndicatorInfoDTO(indicatorGropListEntry.getValue());
+
+
+
+						if (indicatorGropListEntry.getValue().size() > 0){
+							//按照公司规则分组
+							Map<String, List<OrganizationEvaluationInfoResDTO>> ruleIdGropList = indicatorGropListEntry.getValue().stream().collect(Collectors.groupingBy(OrganizationEvaluationInfoResDTO::getOrganizationEvaluationRuleId));
+
+							//遍历公司指标
+							for (Map.Entry<String, List<OrganizationEvaluationInfoResDTO>> ruleIdGropListEntry : ruleIdGropList.entrySet()){
+								if (ruleIdGropListEntry.getValue().size() > 0){
+
+									List<OrganizationEvaluationInfoResDTO> indicator = ruleIdGropListEntry.getValue();
+//									EvaluationScoreCount scoreCount = new EvaluationScoreCount();
+									double totalScore = 0.00;
+									for (OrganizationEvaluationInfoResDTO dto: indicator){
+										if(!optionCode.equals(dto.getOptionCode()) ||"DF".equals(dto.getOptionCode()) || "DF2".equals(dto.getOptionCode()) || StringUtils.isEmpty(dto.getFormula())){
+											continue;//当前属性没有配置公式跳过
+										}
+//										System.out.println("**************"+dto.getFormula());
+										for (OrganizationEvaluationInfoResDTO f : indicator){
+											if(f.getOptionCode().endsWith("MIN") || f.getOptionCode().endsWith("MAX")){
+												//查询对应的最大值和最小值
+											}
+
+											dto.setFormula(dto.getFormula().replace("["+f.getOptionCode()+"]", f.getQuantifiedValue() + ""));
+//											System.out.println("----------"+dto.getFormula());
+
+										}
+//										scoreCount.setIndicatorId(dto.getIndicatorId());
+//										scoreCount.setOrganizationEvaluationRuleId(dto.getOrganizationEvaluationRuleId());
+//										scoreCount.setOrganizationEvaluationId(dto.getOrganizationEvaluationId());
+
+										System.out.print(dto.getOrganizationShortName()+"|"+dto.getIndicatorName()+"----------"+dto.getFormula()+"=");
+										double score = FormulaUtils.caculateFormula(dto.getFormula());
+										if(StringUtils.inStringIgnoreCase("DF",dto.getOptionCode())){
+											totalScore = totalScore+score;
+										}
+										System.out.println(score);
+										OrganizationEvaluationInfo info  = baseMapper.selectById(dto.getId());
+										info.setQuantifiedValue(score);
+										this.saveOrUpdate(info);
+									}
+									//得分存入数据库
+//									scoreCount.setIsQuantified("1");
+//									scoreCount.setScore(totalScore);
+//									scoreCount.setObversionScore(totalScore);
+//									boolean save = iEvaluatioinScoreCountService.save(scoreCount);
+								}
+							}
+						}
+					}
+				}
 			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
 		}
-
-		return false;
+		return true;
 	}
 
 

+ 4 - 0
ims-service/ims-eval/src/main/resources/mappers/CalculateIndicatorItemInfoMapper.xml

@@ -25,6 +25,10 @@
                 and a.section_id=#{binSection}
             </if>
 
+            <if test="organizationEvaluationId !=null and organizationEvaluationId !=''">
+                and a.organization_evaluation_id=#{organizationEvaluationId}
+            </if>
+
         </where>
     </select>
 

+ 11 - 4
ims-service/ims-eval/src/main/resources/mappers/OrganizationEvaluationInfoMapper.xml

@@ -180,16 +180,15 @@
                 and  oer.organization_id = #{organizationId}
             </if>
 
-            and id.option_code not in ('CZ','CZMAX','CZMIN','LRGXKLMAX','LRGXKLMIN','DWQWLRMAX','DWQWLRMIN','WCLDF','LRGXKHMAX','LRGXKHMIN')
+            and id.option_code not in ('DF','DF2','CZ','CZMAX','CZMIN','LRGXKLMAX','LRGXKLMIN','DWQWLRMAX','DWQWLRMIN','WCLDF','LRGXKHMAX','LRGXKHMIN')
+            and id.is_show = true
         </where>
 
-        order by be.order_num,oer.organization_short_name,bn.order_num,ri.order_num,id.option_order asc
+        order by oer.organization_short_name,be.order_num,oer.organization_short_name,bn.order_num,ri.order_num,id.option_order asc
 
     </select>
     <select id="selectByIdAndEvaluationInfoId" resultType="com.ims.eval.entity.dto.response.OrganizationEvaluationInfoResDTO">
 
-
-
         select
         ei.id,
         oe.id organizationEvaluationId,
@@ -208,6 +207,7 @@
         id.child_name,
         id.option_name,
         id.option_code,
+        id.formula,
         ei.quantified_value,
         ei.non_quantified_value,
         i.unit,
@@ -233,6 +233,13 @@
             and  ei.organization_evaluation_id  = #{organizationEvaluationId}
         </if>
 
+        <if test="optionCode !=null and optionCode !=''">
+            and  id.option_code = #{optionCode}
+        </if>
+
+
+        and   ei.is_quantified = '是'
+
         </where>
 
         order by be.order_num,oer.organization_short_name,bn.order_num,ri.order_num,id.option_order asc