Ver Fonte

refactor(task): 重构业绩考核类型设置数据分析

- 新增 findTaskTypeSettingDataAnalysis 方法替代原有的 findTypeScopeCount 方法
-重构 findTypeScopeTaskCountAnalysis 方法,使用新的数据分析逻辑
-标记原方法为 @Deprecated- 优化数据处理和计算逻辑,提高代码可读性和性能
wanyuan há 3 meses atrás
pai
commit
50183c27c9

+ 8 - 0
tc-service/tap-task/src/main/java/com/minto/app/task/dao/ITaskAnalysisDao.java

@@ -458,5 +458,13 @@ public interface ITaskAnalysisDao extends BaseDao {
      * @param params
      * @return
      */
+    @Deprecated
     List<Map<String,Object>> findTypeScopeCount(Map<String,Object> params);
+
+    /**
+     * 业绩考核类型设置,统计各个业绩考核指标结果(满足率、案件比)
+     * @param params
+     * @return
+     */
+    List<Map<String, Object>> findTaskTypeSettingDataAnalysis(Map<String, Object> params);
 }

+ 18 - 0
tc-service/tap-task/src/main/java/com/minto/app/task/dao/TaskAnalysisDaoImpl.java

@@ -2111,4 +2111,22 @@ hql.append("AND EXISTS (\n" +
         param.put("year", ParameterUtil.getInteger(params, "year", DateUtil.getYear()));
         return getHibernateTpl().queryBySql(sql.toString(), param);
     }
+
+    @Override
+    public List<Map<String, Object>> findTaskTypeSettingDataAnalysis(Map<String, Object> params){
+        String sql = "select te.id as id, te.value as name, te.color as color, (case when te.color is null or te"
+                + ".color = '1' then count(CASE WHEN tts.type_state = '1' THEN tts.id END) else sum(CASE WHEN tts.type_state "
+                + "is not null THEN tts.type_state else 0 END) end) as c1, (case when te.color is null or te.color = '1' then"
+                + " count(tts.id) else count(CASE WHEN tts.type_state is not null THEN 1 END) end) as c2 from "
+        + "task_type_setting tts inner join task_summary ts on ts.id = tts.reference_id left join (SELECT * FROM "
+        + "tip_enum WHERE type IN ( SELECT id FROM tip_enum WHERE key = 'matter_type_settings' ) AND status <> -1 ) "
+        + "te on te.id = tts.type_id where ts.tstate != 7 and to_char(ts.create_date,'yyyy') = :year group by te.id, "
+        + "te.value, te.color ";
+        String order = ParameterUtil.getString(params, "order", "name");
+        Integer asc = ParameterUtil.getInteger(params, "asc", 0);
+        sql = sql + (" ORDER BY " + order + (asc == 1 ? " ASC " : " DESC "));
+        Map<String, Object> param = new HashMap<>();
+        param.put("year", ParameterUtil.getInteger(params, "year", DateUtil.getYear()));
+        return getHibernateTpl().queryBySql(sql, param);
+    }
 }

+ 18 - 26
tc-service/tap-task/src/main/java/com/minto/app/task/manager/TaskAnalysisManagerImpl.java

@@ -6,6 +6,7 @@
 package com.minto.app.task.manager;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -42,6 +43,8 @@ import com.minto.tap.task.api.TaskApi;
 import com.minto.tip.common.authenticate.bo.User;
 import com.minto.tip.common.exceptions.BusinessException;
 import com.minto.tip.organization.enums.RelationValueName;
+import freemarker.core.ArithmeticEngine;
+import org.apache.commons.math3.dfp.DfpField;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -1595,33 +1598,22 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
 
     @Override
     public List<Map<String, Object>> findTypeScopeTaskCountAnalysis(Map<String, Object> param) throws BusinessException{
-        List<Map<String, Object>> list = taskAnalysisDao.findTypeScopeCount(param);
-
-        if(!list.isEmpty()){
-            Map<String, Map<Long, BigDecimal>> reachAndCaseProportionMap =
-                    taskTypeSettingManager.findReachPerGroupByTypeId(
-                    param);
-            Map<Long, BigDecimal> reachMap = reachAndCaseProportionMap.get("reachMap");
-            Map<Long, BigDecimal> caseProportionMap = reachAndCaseProportionMap.get("caseProportionMap");
-            list.stream().forEach(e -> {
-                long id = Long.parseLong(e.get("id").toString());
-                if(null != reachMap && reachMap.containsKey(id)){
-                    e.put("reachPer", reachMap.get(id) + "%");
-                }
-                if(null != caseProportionMap && caseProportionMap.containsKey(id)){
-                    e.put("caseProportion", "1:" + caseProportionMap.get(id));
+        //办件量是c,现在不显示办件量,所以先注释掉
+        //List<Map<String, Object>> list = taskAnalysisDao.findTypeScopeCount(param);
+        List<Map<String, Object>> list = taskAnalysisDao.findTaskTypeSettingDataAnalysis(param);
+        list.forEach(e -> {
+            BigDecimal c1 = new BigDecimal(e.get("c1").toString());
+            BigDecimal c2 = new BigDecimal(e.get("c2").toString());
+            String value = "";
+            if(c2.compareTo(BigDecimal.ZERO) != 0){
+                if(e.get("type") == null || "1".equals(e.get("type").toString())){
+                    value = c1.divide(c2, 2, RoundingMode.HALF_UP).toPlainString() + "%";
+                } else{
+                    value = "1:" + c1.divide(c2, 1, RoundingMode.HALF_DOWN).toPlainString();
                 }
-            });
-        }
-
-        Map<String, Object> caseProportionMap = taskTypeSettingManager.calculateCaseProportion(param);
-        String allNum = caseProportionMap.get("allNum").toString();
-        caseProportionMap.put("c", allNum);
-        if(!"0".equals(allNum)){
-            caseProportionMap.put("caseProportion", "1:" + caseProportionMap.get("caseProportion"));
-        }
-        list.add(caseProportionMap);
-
+            }
+            e.put("value", value);
+        });
         return list;
     }
 

+ 2 - 0
tip-api/src/main/java/com/minto/app/task/manager/ITaskTypeSettingManager.java

@@ -30,8 +30,10 @@ public interface ITaskTypeSettingManager {
     void saveCaseProportion(Long userId, Long taskId, Integer typeState);
 
     //获取各指标类型满足率和案件比
+    @Deprecated
     Map<String,Map<Long, BigDecimal>> findReachPerGroupByTypeId(Map<String, Object> param);
 
     //计算总的案件比和满足率
+    @Deprecated
     Map<String, Object> calculateCaseProportion(Map<String, Object> param);
 }