Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

wangchangsheng 2 vuotta sitten
vanhempi
commit
0acff1155e

+ 28 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/controller/FunctionController.java

@@ -0,0 +1,28 @@
+package com.ims.eval.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author :xugp
+ * @date :Created in 2023/3/20 10:28
+ * @description:函数接口
+ * @modified By:
+ * @version: $
+ */
+
+@RestController
+@RequestMapping("//function")
+public class FunctionController {
+
+
+	@RequestMapping(value = "list")
+	public List<String> functionList(){
+		List<String> list = new ArrayList<>();
+
+		return list;
+	}
+ }

+ 28 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/controller/TestController.java

@@ -0,0 +1,28 @@
+package com.ims.eval.controller;
+
+import com.ims.eval.schedule.ScoreCalculationSchedule;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author :mmzs
+ * @date :Created in 2023/3/15 9:46
+ * @description:
+ * @modified By:
+ * @version: $
+ */
+
+@RestController
+@RequestMapping("//test")
+public class TestController {
+
+	@Autowired
+	private ScoreCalculationSchedule scoreCalculationSchedule;
+
+	@GetMapping("/cron")
+	public void test(){
+		boolean b = scoreCalculationSchedule.doTask();
+	}
+}

+ 17 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/dao/EvaluationScoreCountMapper.java

@@ -0,0 +1,17 @@
+package com.ims.eval.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ims.eval.entity.BinSection;
+import com.ims.eval.entity.EvaluationScoreCount;
+
+/**
+ * <p>
+ * 考评得分统计 Mapper 接口
+ * </p>
+ *
+ * @author xugp
+ * @since 2023-03-20
+ */
+public interface EvaluationScoreCountMapper extends BaseMapper<EvaluationScoreCount> {
+
+}

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

@@ -9,9 +9,7 @@ import java.util.List;
 
 /**
  * <p>
- * 责任书指标明细
-
- Mapper 接口
+ * 责任书指标明细  Mapper 接口
  * </p>
  *
  * @author wang
@@ -23,5 +21,4 @@ public interface ResponsibilityIndicatorInfoMapper extends BaseMapper<Responsibi
 	List<ResponsibilityIndicatorInfoResDTO> listByresponsibilityId(@Param("deptResponsibilityIds") List<String> deptResponsibilityIds,
 																   @Param("dept") String dept,
 																   @Param("optionCode") String optionCode);
-
 }

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

@@ -0,0 +1,44 @@
+package com.ims.eval.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * <p>
+ * 考评得分统计
+ * </p>
+ *
+ * @author xugp
+ * @since 2023-03-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class EvaluationScoreCount extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 考评记录id
+     */
+    private String organizationEvaluationID;
+
+    /**
+     * 指标id
+     */
+    private String indicatorId;
+
+    /**
+     * 得分
+     */
+    private String score;
+
+}

+ 169 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/schedule/ScoreCalculationSchedule.java

@@ -0,0 +1,169 @@
+package com.ims.eval.schedule;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ims.common.utils.StringUtils;
+import com.ims.eval.dao.*;
+import com.ims.eval.entity.*;
+import com.ims.eval.service.IEvaluationScoreCountService;
+import com.ims.eval.service.impl.EvaluatioinScoreCountServiceImpl;
+import com.ims.eval.util.MathCalculatorUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.stereotype.Component;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author :xugp
+ * @date :Created in 2023/3/15 9:49
+ * @description:得分规则计算
+ * @modified By:
+ * @version: $
+ */
+
+@Slf4j
+@Component
+@EnableScheduling
+public class ScoreCalculationSchedule {
+
+	@Autowired
+	private OrganizationEvaluationInfoMapper organizationEvaluationInfoMapper;
+
+	@Autowired
+	private EvaluationScoringRuleMapper evaluationScoringRuleMapper;
+
+	@Autowired
+	private IntervalScoringTableMapper intervalScoringTableMapper;
+
+	@Autowired
+	private IndicatorMapper indicatorMapper;
+
+	@Autowired
+	private IEvaluationScoreCountService iEvaluatioinScoreCountService;
+
+	/*@Scheduled(cron = "* 10 11 ? * 3")*/
+	public boolean doTask(){
+
+		boolean save = true;
+		try {
+			//加载责任书指标明细数据
+			QueryWrapper<OrganizationEvaluationInfo> qw = new QueryWrapper<>();
+			List<OrganizationEvaluationInfo> organizationEvaluationInfos= organizationEvaluationInfoMapper.selectList(qw);
+			if (organizationEvaluationInfos.size() > 0){
+				//对考评记录id进行分组
+				Map<String, List<OrganizationEvaluationInfo>> collect = organizationEvaluationInfos.stream().collect(Collectors.groupingBy(OrganizationEvaluationInfo::getOrganizationEvaluationId));
+				for (Map.Entry<String, List<OrganizationEvaluationInfo>> entry : collect.entrySet()){
+					//对指标id进行分组
+					if (entry.getValue().size() > 0){
+						Map<String, List<OrganizationEvaluationInfo>> collectIn = entry.getValue().stream().collect(Collectors.groupingBy(OrganizationEvaluationInfo::getIndicatorId));
+						for (Map.Entry<String, List<OrganizationEvaluationInfo>> listEntry : collectIn.entrySet()){
+							Indicator indicator = indicatorMapper.selectById(listEntry.getKey());
+							QueryWrapper<EvaluationScoringRule> e = new QueryWrapper<>();
+							if (StringUtils.isNotEmpty(indicator.getIndicatorCode())) {
+								e.lambda().eq(EvaluationScoringRule::getIndicatorId,indicator.getIndicatorCode());
+							}
+							EvaluationScoringRule evaluationScoringRule = evaluationScoringRuleMapper.selectOne(e);
+							if (evaluationScoringRule != null){
+								String calculation = replace(listEntry.getValue(), evaluationScoringRule);
+								log.info(indicator.getIndicatorCode()+"得分为" + calculation);
+								//将得分存入考评得分统计表
+								EvaluationScoreCount evaluationScoreCount = new EvaluationScoreCount();
+								evaluationScoreCount.setOrganizationEvaluationID(entry.getKey());
+								evaluationScoreCount.setIndicatorId(listEntry.getKey());
+								evaluationScoreCount.setScore(calculation);
+								save = iEvaluatioinScoreCountService.save(evaluationScoreCount);
+							}
+						}
+					}
+				}
+
+			}
+
+		}catch (Exception e){
+			log.info(e.getMessage());
+		}
+		return save;
+	}
+
+	//中间变量替换为数据
+	public String replace(List<OrganizationEvaluationInfo> list,EvaluationScoringRule evaluationScoringRule) throws ScriptException {
+
+		String score = null;
+		//判断可用量化的进行变量替换
+		if ("是".equals(list.get(0).getIsQuantified())){
+			Map<String, Double> doubleMap = list.stream().collect(Collectors.toMap(OrganizationEvaluationInfo::getOptionCode, OrganizationEvaluationInfo::getQuantifiedValue));
+			QueryWrapper<IntervalScoringTable> qw = new QueryWrapper<>();
+			if (StringUtils.isNotEmpty(evaluationScoringRule.getId())) {
+				qw.lambda().eq(IntervalScoringTable::getRuleId,evaluationScoringRule.getId());
+			}
+			List<IntervalScoringTable> intervalScoringTables = intervalScoringTableMapper.selectList(qw);
+			for (Map.Entry<String, Double> entry : doubleMap.entrySet()){
+				intervalScoringTables.stream().forEach(r ->{
+					r.setRange(r.getRange().replaceAll(entry.getKey(), entry.getValue() + ""));
+					r.setRegularExpression(r.getRegularExpression().replaceAll(entry.getKey(),entry.getValue() + ""));
+				});
+			}
+			//针对只有一种区间评分
+			if (intervalScoringTables.size() == 1){
+				String regularExpression = intervalScoringTables.get(0).getRegularExpression();
+				//公式计算得分
+				score = MathCalculatorUtil.calculator(regularExpression);
+			}else {
+				//针对多区间评分
+				for (IntervalScoringTable intervalScoringTable : intervalScoringTables){
+					String range = intervalScoringTable.getRange();
+					if (handle(range)){
+						score = MathCalculatorUtil.calculator(intervalScoringTable.getRegularExpression());
+						break;
+					}
+				}
+			}
+		}
+		return score;
+	}
+
+
+	/*
+	*  1.将<,>,<=,>= 使用 # 替换
+	*  2.对字符串进行分割
+	*  3.如果字符数组长度为2,默认左边为公式,右边为条件
+	*  4.如果字符数组长度为3.默认中间为公式,两边为条件
+	* */
+	public Boolean handle(String range) throws ScriptException {
+
+		Boolean b = false;
+		String s = range.replaceAll("[\\<\\<=\\>=\\>]", "#");
+		String[] split = s.split("#");
+
+		//使用javaScript引擎来解释该字符串的表达式
+		ScriptEngineManager manager = new ScriptEngineManager();
+		ScriptEngine engine = manager.getEngineByName("javascript");
+		if (split.length == 2){
+			String calculator = MathCalculatorUtil.calculator(split[0]);
+			String newRange = range.replaceAll(split[0], calculator);
+			b = (boolean) engine.eval(newRange);
+		}else if (split.length == 3){
+			String calculator = MathCalculatorUtil.calculator(split[1]);
+			String newRange = range.replaceAll(split[1], calculator);
+			b = (boolean) engine.eval(newRange);
+		}
+
+		return b;
+	}
+
+	public static void main(String[] args) throws ScriptException {
+		String s = "7<8<6";
+		ScriptEngineManager manager = new ScriptEngineManager();
+		ScriptEngine engine = manager.getEngineByName("javascript");
+		boolean result = (boolean) engine.eval(s);
+		System.out.println(result);
+		System.exit(0);
+	}
+}

+ 20 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/service/IEvaluationScoreCountService.java

@@ -0,0 +1,20 @@
+package com.ims.eval.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ims.eval.entity.BinSection;
+import com.ims.eval.entity.EvaluationScoreCount;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 考评得分统计 服务类
+ * </p>
+ *
+ * @author xugp
+ * @since 2023-03-20
+ */
+public interface IEvaluationScoreCountService extends IService<EvaluationScoreCount> {
+
+
+}

+ 29 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/service/impl/EvaluatioinScoreCountServiceImpl.java

@@ -0,0 +1,29 @@
+package com.ims.eval.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ims.eval.config.CustomException;
+import com.ims.eval.dao.BinSectionMapper;
+import com.ims.eval.dao.EvaluationScoreCountMapper;
+import com.ims.eval.entity.BinSection;
+import com.ims.eval.entity.EvaluationScoreCount;
+import com.ims.eval.service.IBinSectionService;
+import com.ims.eval.service.IEvaluationScoreCountService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 考评得分统计 服务实现类
+ * </p>
+ *
+ * @author xugp
+ * @since 2023-03-20
+ */
+@Service
+public class EvaluatioinScoreCountServiceImpl extends ServiceImpl<EvaluationScoreCountMapper, EvaluationScoreCount> implements IEvaluationScoreCountService {
+
+
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1036 - 0
ims-service/ims-eval/src/main/java/com/ims/eval/util/MathCalculatorUtil.java