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

指标类型和满足率

zhaoq 5 hónapja
szülő
commit
0e22c555bc

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

@@ -15,5 +15,8 @@ import java.util.Map;
  */
 public interface ITaskTypeSettingDao extends BaseDao{
     //分组统计
-    List<Map<String, Object>> findReachCountGroupByTypeId();
+    List<Map<String, Object>> findReachCountGroupByTypeId(Map<String, Object> param);
+
+    //查询案件比
+    List<Map<String, Object>> findCaseProportion(Map<String, Object> param);
 }

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

@@ -2058,7 +2058,8 @@ hql.append("AND EXISTS (\n" +
 //        sql.append(" SUM(CASE WHEN typeScore.eval_score IS NULL THEN 0 ELSE typeScore.eval_score END) AS scope2");
         sql.append(" sum(IFNULL(typeScore.base_score, 0)) AS scope1, ");
         sql.append(" sum(IFNULL(typeScore.eval_score, 0)) AS scope2, ");
-        sql.append(" sum(IFNULL(typeScore.base_score, 0) + IFNULL(typeScore.eval_score, 0)) AS scope0 ");
+        sql.append(" sum(IFNULL(typeScore.base_score, 0) + IFNULL(typeScore.eval_score, 0)) AS scope0, ");
+        sql.append(" te.id ");
         sql.append(" FROM ");
         sql.append(" (SELECT * FROM tip_enum WHERE type IN ( ");
         sql.append(" SELECT id FROM tip_enum WHERE key = 'matter_type_settings' ");
@@ -2067,7 +2068,7 @@ hql.append("AND EXISTS (\n" +
         sql.append(" LEFT JOIN task_summary ts ON ddbe.reference_id = ts.id ");
         sql.append(" LEFT JOIN type_setting_score typeScore ON typeScore.enum_id = te.id AND typeScore.year = :year ");
         sql.append(" WHERE to_char(ts.create_date,'yyyy') = :year ");
-        sql.append(" GROUP BY te.value ");
+        sql.append(" GROUP BY te.value,te.id ");
         String order = ParameterUtil.getString(params,"order","c");
         Integer asc = ParameterUtil.getInteger(params,"asc",0);
         sql.append(" ORDER BY ").append(order).append(asc == 1 ? " ASC " : " DESC ");

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

@@ -17,15 +17,31 @@ import java.util.Map;
 @Repository("taskTypeSettingDao")
 public class TaskTypeSettingDaoImpl extends BaseDaoImpl implements ITaskTypeSettingDao{
     @Override
-    public List<Map<String, Object>> findReachCountGroupByTypeId() {
+    public List<Map<String, Object>> findReachCountGroupByTypeId(Map<String, Object> param) {
         StringBuilder sql = new StringBuilder();
         sql.append(" select ");
         sql.append(" tts.type_id as typeId, ");
-        sql.append(" count(CASE WHEN tts.type_state = '2' THEN tts.id END)as reachNum, ");
+        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(" 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(" group by tts.type_id ");
-        return getHibernateTpl().queryBySql(sql.toString(), null);
+        return getHibernateTpl().queryBySql(sql.toString(), param);
+    }
+
+    @Override
+    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(" 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);
     }
 }

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

@@ -5,6 +5,7 @@
 
 package com.minto.app.task.manager;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -41,6 +42,7 @@ 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;
 
@@ -1567,7 +1569,26 @@ public class TaskAnalysisManagerImpl implements ITaskAnalysisManager{
 
     @Override
     public List<Map<String, Object>> findTypeScopeTaskCountAnalysis(Map<String, Object> param) throws BusinessException{
-        return taskAnalysisDao.findTypeScopeCount(param);
+        List<Map<String, Object>> list = taskAnalysisDao.findTypeScopeCount(param);
+
+        if (!list.isEmpty()){
+            Map<Long, BigDecimal> reachMap = taskTypeSettingManager.findReachPerGroupByTypeId(param);
+            list.stream().forEach(e -> {
+                long id = Long.parseLong(e.get("id").toString());
+                if (reachMap.containsKey(id)){
+                    e.put("reachPer",reachMap.get(id)+"%");
+                }
+                e.put("caseProportion","-");
+            });
+        }
+
+        Map<String, Object> caseProportionMap = taskTypeSettingManager.calculateCaseProportion(param);
+        caseProportionMap.put("c",caseProportionMap.get("allNum"));
+        caseProportionMap.put("reachPer","-");
+        caseProportionMap.put("caseProportion","1:"+caseProportionMap.get("caseProportion"));
+        list.add(caseProportionMap);
+
+        return list;
     }
 
     @Override

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

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.sql.Array;
 import java.sql.SQLException;
 import java.util.*;
@@ -123,7 +124,7 @@ public class TaskTypeSettingManagerImpl implements ITaskTypeSettingManager{
     public void saveCaseProportion(Long userId, Long taskId, Integer typeState) {
         DetachedCriteria detachedCriteria = DetachedCriteria.forClass(TaskTypeSettingBean.class);
         detachedCriteria.add(Restrictions.eq("referenceId",taskId));
-        detachedCriteria.add(Restrictions.eq("typeId",-1));
+        detachedCriteria.add(Restrictions.eq("typeId",-1L));
         TaskTypeSettingBean bean = (TaskTypeSettingBean) taskTypeSettingDao.get(detachedCriteria);
 
         if (null == bean){
@@ -143,16 +144,32 @@ public class TaskTypeSettingManagerImpl implements ITaskTypeSettingManager{
     }
 
     @Override
-    public Map<Long, BigDecimal> findReachPerGroupByTypeId() {
-        List<Map<String, Object>> list = taskTypeSettingDao.findReachCountGroupByTypeId();
+    public Map<Long, BigDecimal> findReachPerGroupByTypeId(Map<String, Object> param) {
+        List<Map<String, Object>> list = taskTypeSettingDao.findReachCountGroupByTypeId(param);
         Map<Long, BigDecimal> map = 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("id").toString()),reachPer.multiply(hundredBigDecimal));
+                map.put(Long.parseLong(e.get("typeId").toString()),reachPer.multiply(hundredBigDecimal).setScale(0, RoundingMode.DOWN));
             });
         }
         return map;
     }
+
+    @Override
+    public Map<String, Object> calculateCaseProportion(Map<String, Object> param) {
+        Map<String, Object> map = new HashMap<>();
+        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);
+            BigDecimal caseProportion = new BigDecimal(caseProportionMap.get("caseProportionSum").toString()).divide(new BigDecimal(caseProportionMap.get("allNum").toString()), 1, BigDecimal.ROUND_HALF_UP);
+            map.put("caseProportion",caseProportion);
+            map.put("allNum",caseProportionMap.get("allNum"));
+        }
+
+        return map;
+    }
 }

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

@@ -29,5 +29,8 @@ public interface ITaskTypeSettingManager {
     void saveCaseProportion(Long userId, Long taskId, Integer typeState);
 
     //获取各指标类型完成率
-    Map<Long, BigDecimal> findReachPerGroupByTypeId();
+    Map<Long, BigDecimal> findReachPerGroupByTypeId(Map<String, Object> param);
+
+    //计算案件比
+    Map<String, Object> calculateCaseProportion(Map<String, Object> param);
 }

+ 8 - 4
tip-front/src/main/webapp/WEB-INF/pages/apps/task/analysis/performance.html

@@ -262,7 +262,9 @@
                             <th>序号</th>
                             <th>类型名称</th>
                             <th>办件量</th>
-                            <th>
+                            <th>满足率</th>
+                            <th>案件比</th>
+                            <!--<th>
                                 <span class="pj-sort-box" data-order="scope0">
                                     <span>总得分</span>
                                     <span class="pj-sort-up"></span>
@@ -282,7 +284,7 @@
                                     <span class="pj-sort-up"></span>
                                     <span class="pj-sort-down"></span>
                                 </span>
-                            </th>
+                            </th>-->
                         </tr>
                         </thead>
                         <tbody id="byManagerTrs">
@@ -343,9 +345,11 @@
         <td>{{index+1}}</td>
         <td>{{obj.name}}</td>
         <td>{{obj.c}}</td>
-        <td>{{obj.scope0}}</td>
+        <td>{{obj.reachPer}}</td>
+        <td>{{obj.caseProportion}}</td>
+        <!--<td>{{obj.scope0}}</td>
         <td>{{obj.scope1}}</td>
-        <td>{{obj.scope2}}</td>
+        <td>{{obj.scope2}}</td>-->
     </tr>
     {{/each}}
     {{/if}}

+ 50 - 1
tip-front/src/main/webapp/WEB-INF/pages/apps/task/dataVisualization/index.html

@@ -14,6 +14,23 @@
         [v-cloak]{
             display: none;
         }
+
+        .togg_tab{
+            margin-left: 10px;
+            display: flex;
+        }
+        .togg_tab div{
+            margin-right: 10px;
+            padding: 5px 10px;
+            color: #efefef;
+            border: 1px solid #efefef;
+        }
+        .togg_tab div:hover, .togg_tab div.cur{
+            cursor: pointer;
+            color: #1370fb;
+            font-weight: bold;
+            border-color: #1370fb;
+        }
     </style>
 </head>
 <body>
@@ -101,8 +118,13 @@
                 </div>
             </div>
             <dv-border-box-8 class="container content-center-cont">
-                <div class="container-title">责任单位承办事项完成效率分析</div>
+<!--                <div class="container-title">责任单位承办事项完成效率分析</div>-->
+                <div class="togg_tab">
+                    <div :class="selectedTab === 'zrdw' ? 'cur' : ''" @click="tabChange('zrdw')">责任单位统计</div>
+                    <div :class="selectedTab === 'sxlx' ? 'cur' : ''"  @click="tabChange('sxlx')">事项类型统计</div>
+                </div>
                 <dv-scroll-board :config="tableConfig" style="flex: 1"></dv-scroll-board>
+<!--                <dv-scroll-board :config="tableConfig" style="flex: 1"></dv-scroll-board>-->
             </dv-border-box-8>
         </div>
         <div class="content-right">
@@ -151,6 +173,8 @@
                 tAllCount:{},// 中间总办理事项
                 defaultYear: new Date().getFullYear(),// 默认年份
                 yearsList: [],// 年份列表
+
+                selectedTab: 'zrdw'
             };
         },
         methods: {
@@ -163,20 +187,45 @@
                 );
                 container.style.transform = 'scale(' + scale + ')';
             },
+            tabChange(type) {
+                this.selectedTab = type
+                this.getCenterData()
+            },
             // 获取中间数据
             getCenterData() {
+                if (this.selectedTab === 'zrdw') this.getZrdwTable()
+                else this.getSxlxTable()
+            },
+            // 获取责任单位表格数据
+            getZrdwTable() {
                 let _that = this;
                 let param = {
                     orgName: "",
                     taskTypeId: "0",
                     year: _that.defaultYear
                 };
+                this.tableHeader[0] = {name: "责任单位", value: "targetName"}
                 callAjaxRequest("taskAnalysisWebService", "findTaskTaskAnalysisByManager", param, function (result) {
                     _that.tAllCount = result.tAllCount || "";
                     _that.setTableConfig(result.list || []);
                     _that.setMainRenderData(result);
                 })
             },
+            // 获取事项类型表格数据
+            getSxlxTable() {
+                let _that = this;
+                let param = {
+                    orgName: "",
+                    taskTypeId: "0",
+                    year: _that.defaultYear
+                };
+                this.tableHeader[0] = {name: "类型名称", value: "targetName"}
+                callAjaxRequest("taskAnalysisWebService", "findTaskTaskAnalysisByType", param, function (result) {
+                    // _that.tAllCount = result.tAllCount || "";
+                    _that.setTableConfig(result.list || []);
+                    // _that.setMainRenderData(result);
+                })
+            },
             // 表格数据处理
             setTableConfig(data) {
                 let _that = this;

+ 38 - 7
tip-front/src/main/webapp/tc_suite/minto/task/showTaskDetail_anchor.jsp

@@ -1088,21 +1088,21 @@
                                             <thead>
                                             <tr>
                                                 <td class="fixedTd" >指标类型</td>
-                                                <td class="fixedTd" >状态值 </td>
+                                                <td class="fixedTd" >状态/值 </td>
                                                 <td class="fixedTd" >最新修改时间</td>
                                             </tr>
                                             </thead>
-                                            <tbody>
+                                            <tbody class="typeStateBox">
                                             <c:forEach items="${taskTypeSettingMap.taskTypeSettingList}" var="sign" varStatus="s">
                                                 <tr class="sign-unit">
                                                     <td class="fixedTd">
                                                             ${sign.typeName}
                                                     </td>
                                                     <td class="fixedTd">
-                                                        <select name="typeStateSelect">
-                                                            <option value="">请选择</option>
-                                                            <option value="0" <c:if test="${0==sign.typeState}">selected="selected"</c:if> >未满足</option>
-                                                            <option value="1" <c:if test="${1==sign.typeState}">selected="selected"</c:if> >已满足</option>
+                                                        <select class="typeStateSelect" name="typeStateSelect">
+                                                            <c:if test="${sign.typeState == null}"><option value="">请选择</option></c:if>
+                                                            <option  <c:if test="${3==tstate}">disabled="false"</c:if> data-id="${sign.id}" value="0" <c:if test="${0==sign.typeState}">selected="selected"</c:if> >未满足</option>
+                                                            <option  <c:if test="${3==tstate}">disabled="false"</c:if> data-id="${sign.id}" value="1" <c:if test="${1==sign.typeState}">selected="selected"</c:if> >已满足</option>
                                                         </select>
                                                     </td>
                                                     <td class="fixedTd" style="white-space: nowrap">
@@ -1116,7 +1116,7 @@
                                                 </td>
                                                 <td class="fixedTd">
                                                         1:<input style="width:60px;" type="text" class="mt-input" id="typeStateInput" name="typeStateInput" value="${taskTypeSettingMap.caseProportion.typeState}">
-                                                        <button class="typeStateInputSave mt-btn">确认</button>
+                                                        <c:if test="${3!=tstate}"><button class="ajb mt-btn">确认</button> </c:if>
                                                 </td>
                                                 <td class="fixedTd" style="white-space: nowrap">
                                                     <fmt:formatDate type="time" value="${taskTypeSettingMap.caseProportion.updateTime}" pattern="yyyy-MM-dd HH:mm"/>
@@ -6048,5 +6048,36 @@
             parent.find('.enclosure-cutlist').css('display', 'none');
         }
     })
+
+    $('.typeStateBox').on('change', '.typeStateSelect', function() {
+        var value = $(this).val()
+
+        var id = $(this).find('option:selected').attr('data-id')
+        callAjaxRequest("taskListWebService","updateTaskTypeSetting",id,value,{
+            success:function(result){
+                $.ok("修改成功!",function(){
+                    window.location.reload();
+                })
+            }
+        });
+    })
+
+    $('.ajb').click(function() {
+        var value = $('#typeStateInput').val()
+        var z_reg = /^\+?[1-9][0-9]*$/
+        if (!z_reg.test(value)) {
+            $.alert("请输入正整数!");
+            return
+        }
+
+        var id = $('body').attr('data-id')
+        callAjaxRequest("taskListWebService","saveCaseProportion",id,value,{
+            success:function(result){
+                $.ok("修改成功!",function(){
+                    window.location.reload();
+                })
+            }
+        });
+    })
 </script>
 </html>