package cn.huge.module.analysis.controller; import cn.huge.base.common.bo.ReturnBO; import cn.huge.base.common.utils.ObjectUtils; import cn.huge.base.common.utils.ReturnFailUtils; import cn.huge.base.common.utils.ReturnSucUtils; import cn.huge.base.config.CurrentUser; import cn.huge.module.analysis.domain.dto.*; import cn.huge.module.analysis.domain.vo.CountRepeateVo; import cn.huge.module.analysis.service.AnalysisService; import cn.huge.module.client.api.impl.CustClientImpl; import cn.huge.module.cust.dto.CtUnitDTO; import cn.huge.module.cust.dto.CtUserDTO; import com.google.common.collect.Maps; import dm.jdbc.util.StringUtil; import org.apache.commons.lang3.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @title: 纠纷信息主表接口api-web端 * @description: 纠纷信息主表接口api-web端 * @company: hugeinfo * @author: wangwh * @time: 2024-08-27 10:00:57 * @version: 1.0.0 */ @Slf4j @RestController @RequestMapping("/api/web/analysis") public class AnalysisWebController { @Autowired(required = false) private HttpServletRequest request; @Autowired private AnalysisService service; @Autowired private CustClientImpl custClient; /** * 获取请求URL参数 * @return Map */ private Map getParameter(){ Map terms = Maps.newHashMap(); // 组织地址社区 String queVillage = request.getParameter("queVillage"); if (StringUtils.isNotBlank(queVillage)){ terms.put("village", queVillage); } // 组织地址街道 String queRoad = request.getParameter("queRoad"); if (StringUtils.isNotBlank(queRoad)){ terms.put("road", queRoad); } // 组织地址区 String queArea = request.getParameter("queArea"); if (StringUtils.isNotBlank(queArea)){ terms.put("area", queArea); } // 组织地址市 String queCity = request.getParameter("queCity"); if (StringUtils.isNotBlank(queCity)){ terms.put("city", queCity); } // 组织地址省 String queProv = request.getParameter("queProv"); if (StringUtils.isNotBlank(queProv)){ terms.put("prov", queProv); } // 纠纷类型 String caseType = request.getParameter("caseType"); if (StringUtils.isNotBlank(caseType)){ terms.put("caseType", caseType); } // 纠纷类型 String caseTypeFirst = request.getParameter("caseTypeFirst"); if (StringUtils.isNotBlank(caseTypeFirst)){ terms.put("caseTypeFirst", caseTypeFirst); } // 登记开始时间 String createStart = request.getParameter("createStart"); String createEnd = request.getParameter("createEnd"); if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) { terms.put("createStart", createStart); terms.put("createEnd", createEnd); } // 办结时间 String closeStart = request.getParameter("closeStart"); String closeEnd = request.getParameter("closeEnd"); if(StringUtils.isNotBlank(closeStart) && StringUtils.isNotBlank(closeEnd)) { terms.put("closeStart", closeStart); terms.put("closeEnd", closeEnd); } // 事项等级 String caseGrade = request.getParameter("caseGrade"); if (org.apache.commons.lang3.StringUtils.isNotBlank(caseGrade)){ terms.put("caseGrade", caseGrade); } // 事项来源 String caseSource = request.getParameter("caseSource"); if (org.apache.commons.lang3.StringUtils.isNotBlank(caseSource)){ terms.put("caseSource", caseSource); } // 承办部门 String mediateUnitId = request.getParameter("mediateUnitId"); if (StringUtils.isNotBlank(mediateUnitId)){ terms.put("mediateUnitId", mediateUnitId); } // 配合部门 String assistUnitId = request.getParameter("assistUnitId"); if (StringUtils.isNotBlank(assistUnitId)){ terms.put("assistUnitId", assistUnitId); } return terms; } /** * 获取请求URL参数(获取区域地址后放入map的名称不一样) * @return Map */ private Map getParameter1(){ Map terms = Maps.newHashMap(); // 组织地址街道 String queRoad = request.getParameter("queRoad"); if (StringUtils.isNotBlank(queRoad)){ terms.put("queRoad", queRoad); }else{ // 组织地址区 String queArea = request.getParameter("queArea"); if (StringUtils.isNotBlank(queArea)){ terms.put("queArea", queArea); }else{ // 组织地址市 String queCity = request.getParameter("queCity"); if (StringUtils.isNotBlank(queCity)){ terms.put("queCity", queCity); }else{ // 组织地址省 String queProv = request.getParameter("queProv"); if (StringUtils.isNotBlank(queProv)){ terms.put("queProv", queProv); } } } } // 纠纷类型 String caseType = request.getParameter("caseType"); if (StringUtils.isNotBlank(caseType)){ terms.put("caseType", caseType); } // 纠纷类型 String caseTypeFirst = request.getParameter("caseTypeFirst"); if (StringUtils.isNotBlank(caseTypeFirst)){ terms.put("caseTypeFirst", caseTypeFirst); } // 登记开始时间 String createStart = request.getParameter("createStart"); String createEnd = request.getParameter("createEnd"); if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) { terms.put("createStart", createStart); terms.put("createEnd", createEnd); } // 办结时间 String closeStart = request.getParameter("closeStart"); String closeEnd = request.getParameter("closeEnd"); if(StringUtils.isNotBlank(closeStart) && StringUtils.isNotBlank(closeEnd)) { terms.put("closeStart", closeStart); terms.put("closeEnd", closeEnd); } // 事项等级 String caseGrade = request.getParameter("caseGrade"); if (org.apache.commons.lang3.StringUtils.isNotBlank(caseGrade)){ terms.put("caseGrade", caseGrade); } // 事项来源 String caseSource = request.getParameter("caseSource"); if (org.apache.commons.lang3.StringUtils.isNotBlank(caseSource)){ terms.put("caseSource", caseSource); } // 事项来源 String canal = request.getParameter("canal"); if (org.apache.commons.lang3.StringUtils.isNotBlank(canal)){ terms.put("canal", canal); } // 承办部门 String mediateUnitId = request.getParameter("mediateUnitId"); if (StringUtils.isNotBlank(mediateUnitId)){ terms.put("mediateUnitId", mediateUnitId); } // 配合部门 String assistUnitId = request.getParameter("assistUnitId"); if (StringUtils.isNotBlank(assistUnitId)){ terms.put("assistUnitId", assistUnitId); } //任务是否完成 String taskStatus = request.getParameter("taskStatus"); if (StringUtils.isNotBlank(taskStatus)){ terms.put("taskStatus", taskStatus); } return terms; } /** * 统计重复来访案件数量-根据案件类型分组 * 此接口用于分析和统计在同一案件类型下重复来访的案件数量 * @url {ctx}/api/web/analysis/countRepeatedCasesByCaseType * @param countRepeateVo 包含查询条件的请求体,用于指定统计范围 * @return ReturnBO */ @PostMapping("/countRepeatedCasesByCaseType") public ReturnBO countRepeatedCasesByCaseType(@RequestBody CountRepeateVo countRepeateVo) { try{ // 设置按案件类型分组的标志为true countRepeateVo.setGroupByCaseType("true"); // 调用服务层方法统计重复来访案件数量 List countRepeateDtoList = service.countRepeatedCases(countRepeateVo); // 使用ReturnSucUtils工具类返回成功信息和统计结果 return ReturnSucUtils.getRepInfo("请求成功",countRepeateDtoList); }catch (Exception e){ // 捕获异常,并记录错误日志 log.error("统计重复来访案件数量异常",e); // 使用ReturnFailUtils工具类返回错误信息 return ReturnFailUtils.getRepInfo(e.getMessage()); } } /** * 统计重复来访案件数量-根据地区分组 * @url {ctx}/api/web/analysis/countRepeatedCasesByArea * @param countRepeateVo 包含查询条件的请求体,用于指定统计范围 * @return ReturnBO 包含统计结果的返回对象 */ @PostMapping("/countRepeatedCasesByArea") public ReturnBO countRepeatedCasesByArea(@RequestBody CountRepeateVo countRepeateVo) { try{ // 创建一个映射,用于存储不同状态下重复来访案件的统计结果 Map> collect = new HashMap<>(); // 判断是否提供了结案时间,如果没有,则查询未办结的重复来访案件 if(StringUtil.isEmpty(countRepeateVo.getCloseStart()) && StringUtil.isEmpty(countRepeateVo.getCloseEnd())){ countRepeateVo.setIsFinish("false"); List countRepeateDtoList = service.countRepeatedCasesByArea(countRepeateVo); collect.put("未办结重复来访",countRepeateDtoList); }else { // 如果提供了关闭时间范围,则初始化未办结案件列表为空 collect.put("未办结重复来访",new ArrayList<>()); } // 统计已办结的重复来访案件 countRepeateVo.setIsFinish("true"); List countRepeateDtoListIsFinish = service.countRepeatedCasesByArea(countRepeateVo); collect.put("已办结重复来访",countRepeateDtoListIsFinish); // 返回统计结果 return ReturnSucUtils.getRepInfo("请求成功",collect); }catch (Exception e){ // 记录异常信息并返回错误响应 log.error("统计重复来访案件数量异常",e); return ReturnFailUtils.getRepInfo(e.getMessage()); } } /** * 统计重复来访案件数量-根据时间分组 * @url {ctx}/api/web/analysis/countRepeatedCasesByCaseType * @param countRepeateVo 包含查询条件的请求体 * @return ReturnBO 包含统计结果的返回对象 */ @PostMapping("/countRepeatedCasesByTime") public ReturnBO countRepeatedCasesByTime(@RequestBody CountRepeateVo countRepeateVo) { try{ // 创建一个映射,用于存储不同状态下重复来访案件的统计结果 Map> collect = new HashMap<>(); // 判断是否提供了结案时间,如果没有,则查询未办结的重复来访案件 if((StringUtil.isEmpty(countRepeateVo.getCloseStart())) && (StringUtil.isEmpty(countRepeateVo.getCloseEnd()))){ countRepeateVo.setIsFinish("false"); List countRepeateDtoList = service.countRepeatedCasesByTime(countRepeateVo); collect.put("未办结重复来访",countRepeateDtoList); }else { // 如果提供了结案时间,则初始化未办结重复来访案件列表为空 collect.put("未办结重复来访",new ArrayList<>()); } // 查询已办结的重复来访案件 countRepeateVo.setIsFinish("true"); List countRepeateDtoListIsFinish = service.countRepeatedCasesByTime(countRepeateVo); collect.put("已办结重复来访",countRepeateDtoListIsFinish); // 返回统计结果 return ReturnSucUtils.getRepInfo("请求成功",collect); }catch (Exception e){ // 异常处理,记录日志并返回错误信息 log.error("统计重复来访案件数量异常",e); return ReturnFailUtils.getRepInfo(e.getMessage()); } } /** * 条件查询多个 * @url {ctx}/api/web/analysis/statistics * @return Object */ @GetMapping("/statistics") public Object statistics(@CurrentUser String userId) { try { // 获取当前登录用户 CtUserDTO loginUser = custClient.clientGetUserAll(userId); CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId); Map terms = getParameter1(); //拷贝条件,避免影响原参数 AvgDurationDTO avgDurationDTO = service.AvgDuration(terms, loginUser, ctUnitDTO); return ReturnSucUtils.getRepInfo(avgDurationDTO); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 超时任务数量查询 * @url {ctx}/api/web/analysis/timeoutTask * @return Object */ @GetMapping("/timeoutTask") public Object timeoutTask(@CurrentUser String userId) { try { // 获取当前登录用户 CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId); Map terms = getParameter1(); StatisticsGroupDTO statisticsGroupDTO = new StatisticsGroupDTO(); statisticsGroupDTO = service.TimeoutTask(terms, ctUnitDTO); return ReturnSucUtils.getRepInfo(statisticsGroupDTO); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 超时任务数量查询 * @url {ctx}/api/web/analysis/listTimeOutTaskGroup * @return Object */ @GetMapping("/listTimeOutTaskGroup") public Object listTimeOutTaskGroup(@CurrentUser String userId, @RequestParam(value = "queryType") int queryType) { try { // 获取当前登录用户 CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId); Map terms = getParameter1(); List timeOutTaskGroupDTOList = new ArrayList<>(); timeOutTaskGroupDTOList = service.listTimeOutTaskGroup(terms, ctUnitDTO, queryType); return ReturnSucUtils.getRepInfo(timeOutTaskGroupDTOList); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 效能分析-平均时长-分组列表 * @url {ctx}/api/web/analysis/AvgDurationGroup * @return Object */ @GetMapping("/AvgDurationGroup") public Object AvgDurationGroup(@CurrentUser String userId) { try { Map terms = getParameter1(); // 排序字段 String sortColmn1 = request.getParameter("sortColmn"); int sortColmn = 0; if (StringUtils.isNotBlank(sortColmn1)){ sortColmn = Integer.parseInt(sortColmn1); } // 排序方式 String sortType1 = request.getParameter("sortType"); int sortType = 0; if (StringUtils.isNotBlank(sortType1)){ sortType = Integer.parseInt(sortType1); } return ReturnSucUtils.getRepInfo(service.AvgDurationGroup(terms, sortType, sortColmn)); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 效能分析-平均时长-统计图 * @url {ctx}/api/web/analysis/AvgDurationChartsGroup * @return Object */ @GetMapping("/AvgDurationChartsGroup") public Object AvgDurationChartsGroup(@CurrentUser String userId) { try { Map terms = getParameter1(); return ReturnSucUtils.getRepInfo(service.AvgDurationChartsGroup(terms)); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 分页查询受理超时案件 * @url {ctx}/api/web/analysis/pageQuantity * @param page 页码 * @param size 每页数量 * @param queryType 查询类型(1:分派;2、签收;3、受理;4、督办) * @return */ @GetMapping("/pageQuantity") public Object pageQuantity(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size, @RequestParam(value = "queryType") int queryType, @CurrentUser String userId) { try { Map terms = getParameter1(); // 排序字段 String sortColmn1 = request.getParameter("sortColmn"); int sortColmn = 1; if (StringUtils.isNotBlank(sortColmn1)){ sortColmn = Integer.parseInt(sortColmn1); } // 排序方式 String sortType1 = request.getParameter("sortType"); int sortType = 1; if (StringUtils.isNotBlank(sortType1)){ sortType = Integer.parseInt(sortType1); } Sort sort = null; String sortName = null; switch (sortColmn){ case 1: sortName = "turnaroundTime"; break; case 2: sortName = "timeLimit"; break; case 3: sortName = "caseGrade"; break; case 4: sortName = "superviseCount"; break; default: sortName = "turnaroundTime"; break; } switch (sortType){ case 1: sort = Sort.by(Sort.Direction.ASC, sortName); break; case 2: sort = Sort.by(Sort.Direction.DESC, sortName); break; default: sort = Sort.by(Sort.Direction.ASC, sortName); break; } if(ObjectUtils.isEmpty(sort)){ sort = Sort.by(Sort.Direction.DESC, "t1.create_time"); } PageRequest pageRequest = PageRequest.of(page-1, size, sort); Page timeoutTaskInfoDTOPage = null; CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId); if(1 == queryType){ timeoutTaskInfoDTOPage = service.pageFPQuantity(pageRequest, terms); }else if(2 == queryType){ timeoutTaskInfoDTOPage = service.pageSLQuantity(pageRequest, terms); }else if(3 == queryType){ timeoutTaskInfoDTOPage = service.pageDBQuantity(pageRequest, terms); }else if(4 == queryType){ timeoutTaskInfoDTOPage = service.pageAllQuantity(pageRequest, terms); } return ReturnSucUtils.getRepInfo(timeoutTaskInfoDTOPage); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 分组任务流转统计 * @url {ctx}/api/web/analysis/statisticsCirculation * @return */ @GetMapping("/statisticsCirculation") public Object statisticsCirculation() { try { Map terms = getParameter1(); // 排序字段 String sortColmn1 = request.getParameter("sortColmn"); int sortColmn = 0; if (StringUtils.isNotBlank(sortColmn1)){ sortColmn = Integer.parseInt(sortColmn1); } // 排序方式 String sortType1 = request.getParameter("sortType"); int sortType = 0; if (StringUtils.isNotBlank(sortType1)){ sortType = Integer.parseInt(sortType1); } return ReturnSucUtils.getRepInfo(service.statisticsCirculation(terms, sortType, sortColmn)); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 效能分析-分组任务-统计图 * @url {ctx}/api/web/analysis/statisticsCirculationCharts * @return */ @GetMapping("/statisticsCirculationCharts") public Object statisticsCirculationCharts(@CurrentUser String userId) { try { Map terms = getParameter1(); return ReturnSucUtils.getRepInfo(service.statisticsCirculationCharts(terms)); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 解纷态势-分组查询扬言极端数量 * @url {ctx}/api/web/analysis/statisticsYYJDQuantity * @return Object */ @GetMapping("/statisticsYYJDQuantity") public Object statisticsYYJDQuantity(@CurrentUser String userId) { try { Map terms = getParameter(); // 组织地址社区 String sortType = request.getParameter("sortType"); if (StringUtils.isNotBlank(sortType)){ terms.put("sortType", sortType); } // 获取当前登录用户 CtUserDTO loginUser = custClient.clientGetUserAll(userId); CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId); return ReturnSucUtils.getRepInfo(service.statisticsYYJDQuantity(terms, ctUnitDTO)); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } /** * 查询流转情况列表 * @url {ctx}/api/web/analysis/listStatisticsCirculation * @return */ @GetMapping("/listStatisticsCirculation") public Object listStatisticsCirculation(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size, @RequestParam(value = "caseStatus") String caseStatus, @RequestParam(value = "regionCode") String regionCode, @RequestParam(value = "regionName") String regionName) { try { Map terms = getParameter1(); if(StringUtils.isNotBlank(caseStatus)){ terms.put("caseStatus", caseStatus); } if(StringUtils.isNotBlank(regionCode) && StringUtils.isNotBlank(regionName)){ if(regionName.matches(".*市")){ terms.put("queCity", regionCode); }else if(regionName.matches(".*区")){ terms.put("queArea", regionCode); }else if(regionName.contains("街道") || regionName.matches(".*街") || regionName.matches(".*镇")){ terms.put("queRoad", regionCode); } } Sort sort = Sort.by(Sort.Direction.DESC, "t3.create_time"); PageRequest pageRequest = PageRequest.of(page - 1, size, sort); return ReturnSucUtils.getRepInfo(service.listStatisticsCirculation(terms, pageRequest)); } catch (Exception e) { return ReturnFailUtils.getRepInfo(); } } }