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

feat(task): 优化任务统计功能

- 新增任务得分计算逻辑,综合考虑不同因素对任务评分的影响
- 增加个人积分统计功能,用于个人考核- 优化任务类型统计分析,增加到达率和案件比例计算- 改进任务统计排序功能,支持自定义排序字段和顺序
wanyuan 3 hónapja
szülő
commit
2423b500b3

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

@@ -436,9 +436,28 @@ public class TaskAnalysisDaoImpl extends BaseDaoImpl implements ITaskAnalysisDao
     @Override
     public List<Map<String, Object>> countTaskByManager(Map<String, Object> param) {
         StringBuilder sql = new StringBuilder();
-        sql.append(" SELECT M.resource_id \"resourceId\",M.resource_type \"resourceType\",count(t.id) \"count\" ");
+        sql.append(" SELECT M.resource_id \"resourceId\",M.resource_type \"resourceType\",count(t.id) \"count\", ");
+        sql.append(" ROUND( ifnull(sum(case when post.pcode = 'jcg' and ( tt.name = '普通案件' or tt.name = '重点案件' ) then "
+                + "a.jcgScore else cast(extend.field_51 as float) end),0),1)+ ifnull(sum(tc.dtc_level),0) \"score\" ");
         sql.append(" FROM task_summary T LEFT JOIN task_member M ON T.ID = M.task_id ");
+        sql.append(" left join task_comment tc on (tc.taskid = M.task_id and tc.dwid = M.resource_id) ");
+        sql.append(" left join dm_dtab_basic_extend extend on extend.reference_id = T.id ");
+        sql.append(" left join task_type tt on tt.id = cast(T.tasktype_id as bigint) ");
+        sql.append(" left join org_person person on person.id = M.resource_id ");
+        sql.append(" left join org_post post on post.id = person.org_post_id ");
+        sql.append(" left join ( ");
+        sql.append(" select tm.task_id ,ROUND(max(cast(extend.field_51 as float))/count(tm.id),1) as \"jcgScore\" ");
+        sql.append(" from task_member tm inner join task_summary ts on tm.task_id = ts.id ");
+        sql.append(" left join dm_dtab_basic_extend extend on extend.reference_id = ts.id ");
+        sql.append(" left join org_person person on person.id = tm.resource_id ");
+        sql.append(" left join org_post post on post.id = person.org_post_id ");
+        sql.append(" where tm.resource_type = 10000003 and tm.relation_type = 1 ");
+        sql.append(" and ts.tasktype_id in (select cast(id as varchar) as id ");
+        sql.append(" from task_type where name='普通案件' or name = '重点案件' ) ");
+        sql.append(" and post.pcode = 'jcg' group by tm.task_id ) a ");
+        sql.append(" on a.task_id = T.id ");
         sql.append(" WHERE to_char(T.create_date,'yyyy') = :year ");
+        sql.append(" AND person.pstate = 0 ");
         List<Integer> resourceTypes = ParameterUtil.getList(param, Integer.class, "resourceTypes");
         if(CollectionUtil.isNotEmpty(resourceTypes)){
             sql.append(" AND M.resource_type in( :resourceTypes) ");
@@ -510,13 +529,13 @@ public class TaskAnalysisDaoImpl extends BaseDaoImpl implements ITaskAnalysisDao
         //类型筛选
         Long gbTaskTypeId = ParameterUtil.getLong(param, "gbTaskTypeId");
         if (gbTaskTypeId != null) {
-            sql.append(" and t.tasktype_id = :gbTaskTypeId ");
+            sql.append(" AND t.tasktype_id = :gbTaskTypeId ");
         }
         if(param.get("gbResIds") != null){
-            sql.append(" and M.resource_id in ( :gbResIds) ");
+            sql.append(" AND M.resource_id in ( :gbResIds) ");
         }
         sql.append(" GROUP BY M.resource_id,M.resource_type ");
-        sql.append(" ORDER BY \"count\" desc ");
+        sql.append(" ORDER BY \"score\" desc ");
         param.put("jobType", TaskEnum.JobType.Task.getKey());
         List<Map<String, Object>> result = getHibernateTpl().queryBySql(sql.toString(), param);
         return result;

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

@@ -42,7 +42,6 @@ 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 org.aspectj.weaver.ast.Var;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -380,15 +379,15 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
         resourceTypes.add(ResourceEnum.ResourceTypeEnum.OrgDepartment.getKey());
         param.put("resourceTypes", resourceTypes);
 
-        Long gbDeptId = ParameterUtil.getLong(param,"gbDeptId");
-        if(gbDeptId!=null){
+        Long gbDeptId = ParameterUtil.getLong(param, "gbDeptId");
+        if(gbDeptId != null){
             List<Long> gbResIds = new ArrayList<>();
             gbResIds.add(gbDeptId);
             List<OrgPersonBean> personBeans = orgManager.findPersonsByDepartmentId(gbDeptId, false);
             if(CollectionUtil.isNotEmpty(personBeans)){
-                gbResIds.addAll(personBeans.stream().map(e->e.getId()).collect(Collectors.toList()));
+                gbResIds.addAll(personBeans.stream().map(e -> e.getId()).collect(Collectors.toList()));
             }
-            param.put("gbResIds",gbResIds);
+            param.put("gbResIds", gbResIds);
         }
 
         //所有承办单位承办总数
@@ -671,6 +670,22 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
         result.put("tStopped", tStopped);
 
         //根据责任单位统计
+        //排序
+        String order = ParameterUtil.getString(param, "gbOrder");
+        Integer desc = ParameterUtil.getInteger(param, "gbDesc", 1);
+        if(allTaskCounts.get(0).keySet().contains(order)){
+            allTaskCounts.sort((o1, o2) -> {
+                String str1 = o1.get(order) == null ? "0" : o1.get(order).toString();
+                String str2 = o2.get(order) == null ? "0" : o2.get(order).toString();
+                BigDecimal decimal1 = new BigDecimal(str1);
+                BigDecimal decimal2 = new BigDecimal(str2);
+                if(desc == 1){
+                    return decimal1.compareTo(decimal2);
+                } else{
+                    return decimal2.compareTo(decimal1);
+                }
+            });
+        }
         result.put("list", allTaskCounts);
         result.put("year", ParameterUtil.getString(param, "year"));
         return result;
@@ -1582,17 +1597,19 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
     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);
+        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 != reachMap && reachMap.containsKey(id)){
+                    e.put("reachPer", reachMap.get(id) + "%");
                 }
-                if (null != caseProportionMap && caseProportionMap.containsKey(id)){
-                    e.put("caseProportion","1:"+caseProportionMap.get(id));
+                if(null != caseProportionMap && caseProportionMap.containsKey(id)){
+                    e.put("caseProportion", "1:" + caseProportionMap.get(id));
                 }
             });
         }
@@ -1600,8 +1617,8 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
         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"));
+        if(!"0".equals(allNum)){
+            caseProportionMap.put("caseProportion", "1:" + caseProportionMap.get("caseProportion"));
         }
         list.add(caseProportionMap);
 
@@ -1642,7 +1659,7 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
             //基础分数
             result.put("baseScore", scoreBean.getBaseScore());
             //评价分
-            result.put("evalScore",scoreBean.getEvalScore());
+            result.put("evalScore", scoreBean.getEvalScore());
             list.add(result);
         });
         return list;