Commit 560b898a authored by 耿迪迪's avatar 耿迪迪

安检量统计

parent 07c4c10b
......@@ -257,4 +257,14 @@ public class TTaskInspectController extends BaseController
public AjaxResult statisticsInspectItems(TInspectStatisticsInfo inspectStatisticsInfo){
return AjaxResult.success(itStatisticsInspectItemService.statisticsInspectItems(inspectStatisticsInfo));
}
/**
* 根据安检人统计安检量
* @param param 参数
* @return
*/
@PostMapping("/inspectNumStatisticByInspector")
public AjaxResult inspectNumStatisticByInspector(@RequestBody Map<String,String> param){
return AjaxResult.success(tTaskInspectService.inspectNumStatisticByInspector(param));
}
}
......@@ -107,4 +107,11 @@ public interface TTaskInspectMapper
* @return
*/
List<TTaskInspect> selectResidentInspectItemStatistics(Map<String,Object> params);
/**
* 安检量统计
* @param param 入参
* @return
*/
List<Map<String,Object>> inspectNumStatisticByInspector(Map<String,String> param);
}
......@@ -98,4 +98,11 @@ public interface ITTaskInspectService
* @return
*/
List<UserTaskInspect> selectVisitorMissInfo (UserTaskInspect userTaskInspect);
/**
* 安检量统计
* @param param 入参
* @return
*/
List<Map<String,Object>> inspectNumStatisticByInspector(Map<String,String> param);
}
package com.zehong.system.service.impl;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import com.zehong.common.utils.DateUtils;
import com.zehong.common.utils.SecurityUtils;
......@@ -215,4 +215,77 @@ public class TTaskInspectServiceImpl implements ITTaskInspectService
public List<UserTaskInspect> selectVisitorMissInfo (UserTaskInspect userTaskInspect){
return tTaskInspectMapper.selectVisitorMissInfo(userTaskInspect);
}
/**
* 安检量统计
* @param param 入参
* @return
*/
@Override
public List<Map<String,Object>> inspectNumStatisticByInspector(Map<String,String> param){
//根据安检人和安检任务汇总
List<Map<String,Object>> statisticResult = tTaskInspectMapper.inspectNumStatisticByInspector(param);
//根据任务汇总同一个任务下的安检数量汇总并计算未安检量
statisticNoInspectNum(statisticResult);
//根据安检人汇总安检量
return statisticInspectByInspector(statisticResult);
}
/**
* 根据任务汇总未安检量
* @param statisticResult 统计结果
*/
private void statisticNoInspectNum(List<Map<String,Object>> statisticResult){
Map<Object, List<Map<String, Object>>> groupByTask = statisticResult.stream().collect(Collectors.groupingBy(e ->e.get("taskId")));
for(Object key : groupByTask.keySet()){
List<Map<String, Object>> inspectInfoList = groupByTask.get(key);
//汇总任务安检量
int totalInspectNum = 0;
for(Map<String, Object> inspectInfo : inspectInfoList){
if(null != inspectInfo.get("totalInspectNum")){
totalInspectNum += ((Long)inspectInfo.get("totalInspectNum")).intValue();
}
}
//计算任务未安检量并写入数据
for(Map<String,Object> taskInspectInfo : statisticResult){
if(taskInspectInfo.get("taskId").equals(key) && null != taskInspectInfo.get("totalUserNum")){
taskInspectInfo.put("noInspectNum",((Long)taskInspectInfo.get("totalUserNum")).intValue() - totalInspectNum);
}
}
}
}
/**
* 根据安检人汇总安检量
* @param statisticResult 统计结果
* @return
*/
private List<Map<String,Object>> statisticInspectByInspector(List<Map<String,Object>> statisticResult){
List<Map<String,Object>> result = new ArrayList<>();
Map<Object, List<Map<String, Object>>> groupByInspector = statisticResult.stream().collect(Collectors.groupingBy(e ->e.get("memberId")));
for(Map.Entry<Object, List<Map<String, Object>>> entry : groupByInspector.entrySet()){
List<Map<String, Object>> inspectInfoList = entry.getValue();
Map<String, Object> statisticResultByInspector = new HashMap<>();
for(Map<String, Object> inspectInfo : inspectInfoList){
for(String key : inspectInfo.keySet()){
if(!key.equals("totalUserNum") && !key.equals("totalInspectNum") && !key.equals("memberId") && !key.equals("taskId") && !key.equals("inspector")){
Object item = statisticResultByInspector.get(key);
//结果中不存在新增
if(null == item){
statisticResultByInspector.put(key,key.equals("noInspectNum") ? (int)inspectInfo.get(key) :((BigDecimal)inspectInfo.get(key)).intValue());
}else{
Object info = inspectInfo.get(key);
if(null != info){
statisticResultByInspector.put(key,(int)statisticResultByInspector.get(key) + (key.equals("noInspectNum") ? (int)inspectInfo.get(key) :((BigDecimal)inspectInfo.get(key)).intValue()));
}
}
}
}
}
statisticResultByInspector.put("inspector",inspectInfoList.get(0).get("inspector"));
result.add(statisticResultByInspector);
}
return result;
}
}
......@@ -398,4 +398,59 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="dateBegin != null and dateEnd != ''">and inspect.create_time BETWEEN #{dateBegin} AND #{dateEnd}</if>
</where>
</select>
<select id="inspectNumStatisticByInspector" parameterType="Map" resultType="Map">
SELECT
IFNULL(user_counts.totalUserNum, 0) as totalUserNum,
COUNT(inspect.id) as totalInspectNum,
SUM(IF(inspect.status = 0,1,0)) AS missInspectNum,
SUM(IF(inspect.status = 1,1,0)) AS refuseInspectNum,
SUM(IF(inspect.status = 2,1,0)) AS normalInspectNum,
SUM(IF(inspect.status = 3,1,0)) AS stopInspectNum,
SUM(IF(inspect.danger = 1,1,0)) AS dangerNum,
SUM(IF(inspect.danger = 1,0,1)) AS noDangerNum,
inspect.member_id as memberId,
inspect.task_id as taskId,
(select nick_name from sys_user where user_id = inspect.member_id)as inspector
FROM (
SELECT
i.id,
i.task_id,
i.member_id,
i.status,
i.danger,
i.create_time,
i.receive_id
FROM t_task_inspect i
INNER JOIN (
SELECT receive_id, MAX(id) AS max_id
FROM t_task_inspect
WHERE `status` != -1
GROUP BY receive_id
) latest ON i.id = latest.max_id
) inspect
LEFT JOIN (
SELECT
relation.task_id,
COUNT(DISTINCT us.id) as totalUserNum
FROM t_task_relation_info relation
LEFT JOIN t_user us ON us.village = relation.relation_id
<where>
relation.type = '1'
<if test="village != null"> and relation.relation_id = #{village}</if>
</where>
GROUP BY relation.task_id
) user_counts ON user_counts.task_id = inspect.task_id
LEFT JOIN t_task task ON task.id = inspect.task_id
<if test="village != null">
LEFT JOIN t_user u ON u.id = inspect.receive_id
</if>
<where>
task.status = 0
<if test="beginTime != null and endTime != null"> and inspect.create_time between #{beginTime} and #{endTime}</if>
<if test="village != null"> and u.village = #{village}</if>
</where>
GROUP BY inspect.member_id,inspect.task_id;
</select>
</mapper>
\ No newline at end of file
......@@ -131,3 +131,12 @@ export function statisticsInspectItems(query) {
params: query
})
}
//根据安检人统计安检量
export function inspectNumStatisticByInspector(data) {
return request({
url: '/checktask/inspect/inspectNumStatisticByInspector',
method: 'post',
data: data
})
}
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="120px">
<el-form-item label="起止时间">
<el-date-picker
v-model="time"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
size="small"
@change="timeChange"
value-format="yyyy-MM-dd HH:mm:ss"
>
</el-date-picker>
</el-form-item>
<el-form-item label="所属区域(村)" prop="village">
<el-select v-model="queryParams.village" placeholder="所属区域(村)">
<el-option
v-for="item in communityData"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="inspectStatisticInfoList">
<el-table-column label="姓名" align="center" prop="inspector"/>
<el-table-column label="待安检单数" align="center" prop="noInspectNum"/>
<el-table-column label="正常安检" align="center" prop="normalInspectNum"/>
<el-table-column label="拒绝安检" align="center" prop="refuseInspectNum"/>
<el-table-column label="燃气停用" align="center" prop="stopInspectNum"/>
<el-table-column label="到访不遇" align="center" prop="missInspectNum"/>
<el-table-column label="有隐患单数" align="center" prop="dangerNum"/>
<el-table-column label="无隐患单数" align="center" prop="noDangerNum"/>
<el-table-column label="汇总" align="center" prop="total"/>
</el-table>
</div>
</template>
<script>
import {inspectNumStatisticByInspector} from "@/api/checktask/inspect";
import { communityList } from "@/api/baseinfo/community";
export default {
name: "inspect-statistic-index",
data(){
return{
queryParams:{
beginTime: null,
endTime: null,
village: null
},
loading: true,
inspectStatisticInfoList: [],
time: [],
communityData: []
}
},
created(){
this.getList();
this.getCommunityInfo();
},
methods:{
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.queryParams.beginTime = null;
this.queryParams.endTime = null;
this.time = [];
this.handleQuery();
},
getList(){
this.loading = true;
inspectNumStatisticByInspector(this.queryParams).then(res =>{
this.loading = false;
if(res.code == 200 && res.data){
this.inspectStatisticInfoList = res.data;
let statistic = {inspector: "汇总",noInspectNum: 0,normalInspectNum: 0,refuseInspectNum: 0,stopInspectNum: 0,
missInspectNum: 0,dangerNum: 0,noDangerNum: 0,total: 0};
this.inspectStatisticInfoList.forEach(item =>{
let total = item.noInspectNum + item.normalInspectNum + item.refuseInspectNum + item.stopInspectNum + item.missInspectNum + item.dangerNum + item.noDangerNum;
statistic.noInspectNum += item.noInspectNum;
statistic.normalInspectNum += item.normalInspectNum;
statistic.refuseInspectNum += item.refuseInspectNum;
statistic.stopInspectNum += item.stopInspectNum;
statistic.missInspectNum += item.missInspectNum;
statistic.dangerNum += item.dangerNum;
statistic.noDangerNum += item.noDangerNum;
statistic.total += total;
item.total = total;
})
this.inspectStatisticInfoList.unshift(statistic);
}
})
},
timeChange(val){
this.queryParams.beginTime = val[0];
this.queryParams.endTime = val[1];
},
//获取小区信息
getCommunityInfo(){
communityList().then(res =>{
if(res.code == 200){
this.communityData = res.data;
}
})
},
}
}
</script>
<style scoped>
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment