Forráskód Böngészése

计算案件比和满足率优化

zhaoq 5 hónapja
szülő
commit
04d3727594

+ 9 - 6
tc-service/tap-task/src/main/java/com/minto/app/task/dao/TaskTypeSettingDaoImpl.java

@@ -22,9 +22,12 @@ public class TaskTypeSettingDaoImpl extends BaseDaoImpl implements ITaskTypeSett
         sql.append(" select ");
         sql.append(" tts.type_id as typeId, ");
         sql.append(" count(CASE WHEN tts.type_state = 1 THEN tts.id END)as reachNum, ");
-        sql.append(" count(tts.id) as allNum ");
-        sql.append(" from XIZANG_DUBAN_TEST.task_type_setting tts ");
+        sql.append(" count(tts.id) as allNum, ");
+        sql.append(" count(CASE WHEN tts1.type_state is not null THEN 1 END)as allCaseProportionNum, ");
+        sql.append(" sum(CASE WHEN  tts1.type_state is not null THEN tts1.type_state END) as caseProportionSum ");
+        sql.append(" from task_type_setting tts ");
         sql.append(" inner join task_summary ts on ts.id = tts.reference_id ");
+        sql.append(" left join task_type_setting tts1 on (tts.reference_id = tts1.reference_id and tts1.type_id = -1) ");
         sql.append(" where tts.type_id != -1 ");
         sql.append(" and to_char(ts.create_date,'yyyy') = :year ");
         sql.append(" group by tts.type_id ");
@@ -35,13 +38,13 @@ public class TaskTypeSettingDaoImpl extends BaseDaoImpl implements ITaskTypeSett
     public List<Map<String, Object>> findCaseProportion(Map<String, Object> param) {
         StringBuilder sql = new StringBuilder();
         sql.append(" select ");
-        sql.append(" count(tts.id)as allNum, ");
-        sql.append(" sum(tts.type_state) as caseProportionSum ");
+        sql.append(" count(CASE WHEN tts.type_id != -1 THEN tts.id END)as allTypeNum, ");
+        sql.append(" count(CASE WHEN tts.type_id != -1 and tts.type_state = 1 THEN tts.id END)as allReachTypeNum, ");
+        sql.append(" count(CASE WHEN tts.type_id = -1 and tts.type_state is not null THEN tts.id END)as allCaseProportionNum, ");
+        sql.append(" sum(CASE WHEN tts.type_id = -1 and tts.type_state is not null THEN tts.type_state END) as caseProportionSum ");
         sql.append(" from task_type_setting tts ");
         sql.append(" inner join task_summary ts on ts.id = tts.reference_id ");
-        sql.append(" where tts.type_id = -1 ");
         sql.append(" and to_char(ts.create_date,'yyyy') = :year ");
-        sql.append(" and tts.type_state is not null ");
         return getHibernateTpl().queryBySql(sql.toString(), param);
     }
 }

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

@@ -1572,20 +1572,23 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
         List<Map<String, Object>> list = taskAnalysisDao.findTypeScopeCount(param);
 
         if (!list.isEmpty()){
-            Map<Long, BigDecimal> reachMap = taskTypeSettingManager.findReachPerGroupByTypeId(param);
+            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 (reachMap.containsKey(id)){
+                if (null != reachMap && reachMap.containsKey(id)){
                     e.put("reachPer",reachMap.get(id)+"%");
                 }
-                e.put("caseProportion","-");
+                if (null != caseProportionMap && caseProportionMap.containsKey(id)){
+                    e.put("caseProportion","1:"+caseProportionMap.get(id));
+                }
             });
         }
 
         Map<String, Object> caseProportionMap = taskTypeSettingManager.calculateCaseProportion(param);
         String allNum = caseProportionMap.get("allNum").toString();
         caseProportionMap.put("c", allNum);
-        caseProportionMap.put("reachPer","-");
         if (!"0".equals(allNum)){
             caseProportionMap.put("caseProportion","1:"+caseProportionMap.get("caseProportion"));
         }

+ 31 - 10
tc-service/tap-task/src/main/java/com/minto/app/task/manager/TaskTypeSettingManagerImpl.java

@@ -144,32 +144,53 @@ public class TaskTypeSettingManagerImpl implements ITaskTypeSettingManager{
     }
 
     @Override
-    public Map<Long, BigDecimal> findReachPerGroupByTypeId(Map<String, Object> param) {
+    public Map<String,Map<Long, BigDecimal>> findReachPerGroupByTypeId(Map<String, Object> param) {
+        Map<String,Map<Long, BigDecimal>> resultMap = new HashMap<>();
         List<Map<String, Object>> list = taskTypeSettingDao.findReachCountGroupByTypeId(param);
-        Map<Long, BigDecimal> map = new HashMap<>();
+        Map<Long, BigDecimal> reachMap = new HashMap<>();
+        Map<Long, BigDecimal> caseProportionMap = new HashMap<>();
         if (!list.isEmpty()){
             list.stream().forEach(e -> {
                 BigDecimal hundredBigDecimal = new BigDecimal(100);
                 BigDecimal reachPer = new BigDecimal(e.get("reachNum").toString()).divide(new BigDecimal(e.get("allNum").toString()), 2, BigDecimal.ROUND_HALF_UP);
-                map.put(Long.parseLong(e.get("typeId").toString()),reachPer.multiply(hundredBigDecimal).setScale(0, RoundingMode.DOWN));
+                reachMap.put(Long.parseLong(e.get("typeId").toString()),reachPer.multiply(hundredBigDecimal).setScale(0, RoundingMode.DOWN));
+
+
+                BigDecimal caseProportion = new BigDecimal(e.get("caseProportionSum").toString()).divide(new BigDecimal(e.get("allCaseProportionNum").toString()), 1, BigDecimal.ROUND_HALF_UP);
+                caseProportionMap.put(Long.parseLong(e.get("typeId").toString()),caseProportion);
             });
+
+            resultMap.put("reachMap",reachMap);
+            resultMap.put("caseProportionMap",caseProportionMap);
         }
-        return map;
+        return resultMap;
     }
 
     @Override
     public Map<String, Object> calculateCaseProportion(Map<String, Object> param) {
         Map<String, Object> map = new HashMap<>();
-        map.put("name","案件比");
+        map.put("name","全部事件");
         map.put("allNum",0);
         List<Map<String, Object>> list = taskTypeSettingDao.findCaseProportion(param);
         if (!list.isEmpty()) {
             Map<String, Object> caseProportionMap = list.get(0);
-            String allNum = caseProportionMap.get("allNum").toString();
-            if ("0".equals(allNum)) return map;
-            BigDecimal caseProportion = new BigDecimal(caseProportionMap.get("caseProportionSum").toString()).divide(new BigDecimal(allNum), 1, BigDecimal.ROUND_HALF_UP);
-            map.put("caseProportion",caseProportion);
-            map.put("allNum",caseProportionMap.get("allNum"));
+            String allNum = caseProportionMap.get("allCaseProportionNum").toString();
+            //案件比
+            if (!"0".equals(allNum)){
+                BigDecimal caseProportion = new BigDecimal(caseProportionMap.get("caseProportionSum").toString()).divide(new BigDecimal(allNum), 1, BigDecimal.ROUND_HALF_UP);
+                map.put("caseProportion",caseProportion);
+                map.put("allNum",allNum);
+            }
+
+
+            String allTypeNum = caseProportionMap.get("allTypeNum").toString();
+            //满足率
+            if (!"0".equals(allTypeNum)){
+                BigDecimal hundredBigDecimal = new BigDecimal(100);
+                BigDecimal reachPer = new BigDecimal(caseProportionMap.get("allReachTypeNum").toString()).divide(new BigDecimal(allTypeNum), 2, BigDecimal.ROUND_HALF_UP);
+                map.put("reachPer",reachPer.multiply(hundredBigDecimal).setScale(0, RoundingMode.DOWN)+"%");
+            }
+
         }
 
         return map;

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

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