From 61a9e06efda0d645d75cf198fcf690feedd08cf7 Mon Sep 17 00:00:00 2001 From: liuqingkun Date: Sun, 11 Jun 2023 15:57:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E6=95=B4=E5=8F=8A=E6=96=87=E6=A1=A3=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/api.md | 10 + .../controller/AppealRegController.java | 33 +- .../business/controller/ReportController.java | 193 ++-- .../business/service/IAppealRegService.java | 5 + .../business/service/ILargeScreenService.java | 3 - .../service/impl/AppealRegServiceImpl.java | 115 +++ .../service/impl/LargeScreenServiceImpl.java | 836 ++++++++---------- 7 files changed, 599 insertions(+), 596 deletions(-) diff --git a/doc/api.md b/doc/api.md index f8a5c24..3c25530 100644 --- a/doc/api.md +++ b/doc/api.md @@ -395,6 +395,16 @@ } ``` +### 5 导入诉求列表 +- 请求地址 +`GET` `/blade-business/appealReg/importData` + +- 请求参数 + +|参数名称|参数类型|允许为空|参数说明| +| ---- | ---- | ---- | ---- | +| file | file | N | 诉求状态 | + # 诉求调解 ### 1. 调解记录列表(点击"调解记录") - 请求地址 diff --git a/src/main/java/org/springblade/modules/business/controller/AppealRegController.java b/src/main/java/org/springblade/modules/business/controller/AppealRegController.java index 71d9c22..66334bf 100644 --- a/src/main/java/org/springblade/modules/business/controller/AppealRegController.java +++ b/src/main/java/org/springblade/modules/business/controller/AppealRegController.java @@ -21,13 +21,18 @@ import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import org.springblade.common.constant.CommonConstant; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.tenant.annotation.TenantDS; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.modules.business.excel.AppealExcel; import org.springblade.modules.business.service.IAppealRegService; import org.springblade.modules.business.vo.AppealListVO; import org.springblade.modules.business.vo.AppealRegVO; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -69,6 +74,17 @@ public class AppealRegController extends BladeController { return R.data(vos); } + + /** + * 导入 + */ + @PostMapping("importData") + public R importAppeal(MultipartFile file) { + List excels = ExcelUtil.read(file, AppealExcel.class); + regService.importAppeal(excels); + return R.success("操作成功"); + } + /** * 导出 * @@ -78,22 +94,11 @@ public class AppealRegController extends BladeController { * @param appealType 诉求类型 * @param windowId 处理窗口ID * @param username 代表姓名 - * @return */ @GetMapping("/export") - public R export(String appealStatus, String startTime, String endTime, String appealType, String windowId, String username) { - return null; - } - - /** - * 导出 - * - * @param file 诉求状态 - * @return - */ - @GetMapping("/importData") - public R importData(String file) { - return null; + public void exportAppeal(HttpServletResponse response, String appealStatus, String startTime, String endTime, String appealType, String windowId, String username) { + List appealExcels = regService.exportAppeal(appealStatus, startTime, endTime, appealType, windowId, username); + ExcelUtil.export(response, "纠纷数据" + DateUtil.time(), "纠纷数据表", appealExcels, AppealExcel.class); } /** diff --git a/src/main/java/org/springblade/modules/business/controller/ReportController.java b/src/main/java/org/springblade/modules/business/controller/ReportController.java index b1967c3..b04bff7 100644 --- a/src/main/java/org/springblade/modules/business/controller/ReportController.java +++ b/src/main/java/org/springblade/modules/business/controller/ReportController.java @@ -16,34 +16,21 @@ */ package org.springblade.modules.business.controller; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSort; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springblade.common.constant.CommonConstant; import org.springblade.core.boot.ctrl.BladeController; -import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tenant.annotation.TenantDS; import org.springblade.core.tool.api.R; -import org.springblade.core.tool.utils.DateUtil; -import org.springblade.modules.business.excel.AppealExcel; import org.springblade.modules.business.service.ILargeScreenService; -import org.springblade.modules.business.vo.AppealListVO; -import org.springblade.modules.system.excel.UserExcel; -import org.springblade.modules.system.excel.UserImporter; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletResponse; import java.text.ParseException; -import java.util.Date; -import java.util.List; /** * 控制器 @@ -58,104 +45,86 @@ import java.util.List; @Api(value = "统计报表", tags = "统计报表接口") public class ReportController extends BladeController { - private final ILargeScreenService largeScreenService; + private final ILargeScreenService largeScreenService; + + /** + * 矛盾纠纷化解统计(左1) + */ + @GetMapping("/getMediateFinish") + public R getMediateFinish() { + return R.data(largeScreenService.getMediateFinish()); + } + + /** + * 矛盾纠纷上报处理列表(左2) + */ + @GetMapping("/getAppealList") + public R getAppealList() { + return R.data(largeScreenService.getAppealList()); + } + + /** + * 矛盾纠纷月份趋势统计(左3) + */ + @GetMapping("/getAppealByMon") + public R getAppealByMon() { + return R.data(largeScreenService.getAppealByMon()); + } + + /** + * 矛盾纠纷类型占比统计(左4) + */ + @GetMapping("/getAppealTypePercent") + public R getAppealTypePercent() { + return R.data(largeScreenService.getAppealTypePercent()); + } + + /** + * 矛盾纠纷上报统计(中1) + */ + @GetMapping("/getAppealSubmit") + public R getAppealSubmit() { + return R.data(largeScreenService.getAppealSubmit()); + } + + /** + * 事件上报热力图(中2) + */ + @GetMapping("/getAppealSubmitCountByLoc") + public R getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { + return R.data(largeScreenService.getAppealSubmitCountByLoc(timeFrame, startTime, endTime)); + } + + /** + * 矛盾化解热力图(中3) + */ + @GetMapping("/getAppealFinishCountByLoc") + public R getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { + return R.data(largeScreenService.getAppealFinishCountByLoc(timeFrame, startTime, endTime)); + } + + /** + * 越级上报热力图(中4) + */ + @GetMapping("/getImmediateCountByLoc") + public R getImmediateCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { + return R.data(largeScreenService.getImmediateCountByLoc(timeFrame, startTime, endTime)); + } + + /** + * 越级上报事件列表(中5) + */ + @GetMapping("/getImmediateList") + public R getImmediateList(String streetId, Query query) { + return R.data(largeScreenService.getImmediateList(streetId, Condition.getPage(query))); + } + + /** + * 矛盾纠纷化解排行(街道/部门)统计(右1-2) + */ + @GetMapping("/getAppealHot") + public R getAppealHot() { + return R.data(largeScreenService.getAppealHot()); + } - /** - * 矛盾纠纷化解统计(左1) - */ - @GetMapping("/getMediateFinish") - public R getMediateFinish() { - return R.data(largeScreenService.getMediateFinish()); - } - - /** - * 矛盾纠纷上报处理列表(左2) - */ - @GetMapping("/getAppealList") - public R getAppealList() { - return R.data(largeScreenService.getAppealList()); - } - - /** - * 矛盾纠纷月份趋势统计(左3) - */ - @GetMapping("/getAppealByMon") - public R getAppealByMon() { - return R.data(largeScreenService.getAppealByMon()); - } - - /** - * 矛盾纠纷类型占比统计(左4) - */ - @GetMapping("/getAppealTypePercent") - public R getAppealTypePercent() { - return R.data(largeScreenService.getAppealTypePercent()); - } - - /** - * 矛盾纠纷上报统计(中1) - */ - @GetMapping("/getAppealSubmit") - public R getAppealSubmit() { - return R.data(largeScreenService.getAppealSubmit()); - } - - /** - * 事件上报热力图(中2) - */ - @GetMapping("/getAppealSubmitCountByLoc") - public R getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { - return R.data(largeScreenService.getAppealSubmitCountByLoc(timeFrame, startTime, endTime)); - } - - /** - * 矛盾化解热力图(中3) - */ - @GetMapping("/getAppealFinishCountByLoc") - public R getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { - return R.data(largeScreenService.getAppealFinishCountByLoc(timeFrame, startTime, endTime)); - } - - /** - * 越级上报热力图(中4) - */ - @GetMapping("/getImmediateCountByLoc") - public R getImmediateCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { - return R.data(largeScreenService.getImmediateCountByLoc(timeFrame, startTime, endTime)); - } - - /** - * 越级上报事件列表(中5) - */ - @GetMapping("/getImmediateList") - public R getImmediateList(String streetId, Query query) { - return R.data(largeScreenService.getImmediateList(streetId, Condition.getPage(query))); - } - - /** - * 矛盾纠纷化解排行(街道/部门)统计(右1-2) - */ - @GetMapping("/getAppealHot") - public R getAppealHot() { - return R.data(largeScreenService.getAppealHot()); - } - - /** - * 导入 - */ - @PostMapping("importAppeal") - public R importAppeal(MultipartFile file) { - List excels = ExcelUtil.read(file, AppealExcel.class); - largeScreenService.importAppeal(excels); - return R.success("操作成功"); - } - - /** - * 导出 - */ - @GetMapping("/exportAppeal") - public void exportAppeal(HttpServletResponse response, String appealStatus, String startTime, String endTime, String appealType, String windowId, String username) { - List appealExcels = largeScreenService.exportAppeal(appealStatus, startTime, endTime, appealType, windowId, username); - ExcelUtil.export(response, "纠纷数据" + DateUtil.time(), "纠纷数据表", appealExcels, AppealExcel.class); - } } diff --git a/src/main/java/org/springblade/modules/business/service/IAppealRegService.java b/src/main/java/org/springblade/modules/business/service/IAppealRegService.java index b7cd3d2..624e2ba 100644 --- a/src/main/java/org/springblade/modules/business/service/IAppealRegService.java +++ b/src/main/java/org/springblade/modules/business/service/IAppealRegService.java @@ -20,6 +20,7 @@ import org.apache.ibatis.annotations.Param; import org.springblade.core.mp.base.BaseService; import org.springblade.core.tool.api.R; import org.springblade.modules.business.entity.AppealReg; +import org.springblade.modules.business.excel.AppealExcel; import org.springblade.modules.business.vo.AppealListVO; import org.springblade.modules.business.vo.AppealRegVO; import org.springframework.web.bind.annotation.GetMapping; @@ -68,4 +69,8 @@ public interface IAppealRegService extends BaseService { * @return */ AppealReg getLastReg(@Param("appealId") String appealId); + + void importAppeal(List excels); + + List exportAppeal(String appealStatus, String startTime, String endTime, String appealType, String windowId, String username); } diff --git a/src/main/java/org/springblade/modules/business/service/ILargeScreenService.java b/src/main/java/org/springblade/modules/business/service/ILargeScreenService.java index 483e9ad..657a655 100644 --- a/src/main/java/org/springblade/modules/business/service/ILargeScreenService.java +++ b/src/main/java/org/springblade/modules/business/service/ILargeScreenService.java @@ -54,7 +54,4 @@ public interface ILargeScreenService { IPage getImmediateList(String streetId, IPage page); - void importAppeal(List excels); - - List exportAppeal(String appealStatus, String startTime, String endTime, String appealType, String windowId, String username); } diff --git a/src/main/java/org/springblade/modules/business/service/impl/AppealRegServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/AppealRegServiceImpl.java index ee7d54c..f75c502 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/AppealRegServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/AppealRegServiceImpl.java @@ -16,8 +16,12 @@ */ package org.springblade.modules.business.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springblade.common.constant.BusinessConstant; import org.springblade.common.constant.CommonConstant; import org.springblade.core.mp.base.BaseServiceImpl; @@ -26,17 +30,28 @@ import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.entity.Appeal; import org.springblade.modules.business.entity.AppealReg; import org.springblade.modules.business.entity.AppealVisitor; +import org.springblade.modules.business.excel.AppealExcel; import org.springblade.modules.business.mapper.AppealMapper; import org.springblade.modules.business.mapper.AppealRegMapper; import org.springblade.modules.business.mapper.AppealVisitorMapper; import org.springblade.modules.business.service.IAppealRegService; +import org.springblade.modules.business.service.IAppealService; import org.springblade.modules.business.service.IAppealVisitorService; import org.springblade.modules.business.vo.AppealListVO; import org.springblade.modules.business.vo.AppealRegVO; +import org.springblade.modules.system.entity.DictBiz; +import org.springblade.modules.system.entity.User; +import org.springblade.modules.system.service.IDictBizService; +import org.springblade.modules.system.service.IUserService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; /** * 服务实现类 @@ -51,6 +66,10 @@ public class AppealRegServiceImpl extends BaseServiceImpl getList(String appealStatus, String startTime, String endTime, String appealType, String windowId, String username) { return baseMapper.getList(appealStatus, startTime, endTime, appealType, windowId, username); @@ -126,4 +145,100 @@ public class AppealRegServiceImpl extends BaseServiceImpl excels) { + if (CollectionUtils.isNotEmpty(excels)) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + List appeals = new ArrayList<>(); + List visitors = new ArrayList<>(); + excels.forEach(excel -> { + if (StringUtils.isNotBlank(excel.getDisputeName())) { + Appeal appeal = Objects.requireNonNull(BeanUtil.copy(excel, Appeal.class)); + appeal.setId(IdWorker.getId()); + // 所属街道字典id + if (StringUtils.isNotBlank(excel.getStreetId())) { + List street = dictBizService.list(new LambdaQueryWrapper().eq(DictBiz::getCode, "street").like(DictBiz::getDictValue, excel.getStreetId())); + if (CollectionUtils.isNotEmpty(street)) { + appeal.setStreetId(street.get(0).getId()); + } + } + + // 纠纷字典id + if (StringUtils.isNotBlank(appeal.getDisputeName())) { + List values = dictBizService.list(new LambdaQueryWrapper().eq(DictBiz::getCode, "dispute_type").like(DictBiz::getDictValue, appeal.getDisputeName())); + if (CollectionUtils.isNotEmpty(values)) { + appeal.setDisputeId(values.get(0).getId()); + } + } + + // 数据录入时, 处理部门 + if (StringUtils.isNotBlank(excel.getHandleDept())) { + List users = userService.list(new LambdaQueryWrapper().like(User::getName, excel.getHandleDept())); + if (CollectionUtils.isNotEmpty(users)) { + appeal.setHandleDept(users.get(0).getId()); + } + } + + // 纠纷等级(事件等级), 0:简单, 1:一般, 2:重大, 3:疑难 + if (StringUtils.isNotBlank(excel.getDisputeLevel())) { + if ("简单".equals(excel.getDisputeLevel())) { + appeal.setDisputeLevel(0); + } else if ("一般".equals(excel.getDisputeLevel())) { + appeal.setDisputeLevel(1); + } else if ("重大".equals(excel.getDisputeLevel())) { + appeal.setDisputeLevel(2); + } else if ("疑难".equals(excel.getDisputeLevel())) { + appeal.setDisputeLevel(3); + } + } + + // 首次登记时间 + if (StringUtils.isNotBlank(excel.getFirstRegTime())) { + try { + appeal.setFirstRegTime(dateFormat.parse(excel.getFirstRegTime())); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + // 诉求状态(办理状态) + if (StringUtils.isNotBlank(excel.getStatus())) { + if ("正在处理".equals(excel.getStatus())) { + appeal.setStatus(1); + } else if ("达成协议".equals(excel.getStatus())) { + appeal.setStatus(2); + } else if ("调解成功".equals(excel.getStatus()) || "完成归档".equals(excel.getStatus())) { + appeal.setStatus(3); + } + } + + // 是否越级上报 + appeal.setSkipGrant(0); + + // 数据来源 0:系统添加, 1:数据导入 + appeal.setSourceType(BusinessConstant.SOURCE_TYPE_IMPORT); + + // 上访人员 + if (StringUtils.isNotBlank(excel.getUsername())) { + AppealVisitor visitor = new AppealVisitor(); + visitor.setAppealId(appeal.getId()); + visitor.setSort(1); + visitor.setUsername(excel.getUsername()); + visitors.add(visitor); + } + appeals.add(appeal); + } + }); + appealService.saveBatch(appeals); + visitorService.saveBatch(visitors); + } + } + + @Override + public List exportAppeal(String appealStatus, String startTime, String endTime, String appealType, String windowId, String username) { + List excels = appealMapper.exportAppeal(appealStatus, startTime, endTime, appealType, windowId, username); + return excels; + } } diff --git a/src/main/java/org/springblade/modules/business/service/impl/LargeScreenServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/LargeScreenServiceImpl.java index f4856f9..0a10173 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/LargeScreenServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/LargeScreenServiceImpl.java @@ -62,472 +62,374 @@ import java.util.stream.Collectors; @AllArgsConstructor public class LargeScreenServiceImpl implements ILargeScreenService { - private final IAppealService appealService; - - private final AppealMapper appealMapper; - - private final IAppealVisitorService appealVisitorService; - - private final IUserService userService; - - private final IDictBizService dictBizService; - - @Override - public Map getMediateFinish() { - Map map = new HashMap<>(); - - // 化解成功状态数组 - List state = new ArrayList<>(); - state.add(2); - state.add(3); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - // 总化解数 - wrapper.in(Appeal::getStatus, state); - map.put("all", appealService.count(wrapper)); - wrapper.clear(); - - // 本年度化解数 - wrapper.in(Appeal::getStatus, state); - wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); - map.put("year", appealService.count(wrapper)); - wrapper.clear(); - - // 本季度化解数 - wrapper.in(Appeal::getStatus, state); - wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); - map.put("quarterly", appealService.count(wrapper)); - wrapper.clear(); - - // 本月化解数 - wrapper.in(Appeal::getStatus, state); - wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); - map.put("mon", appealService.count(wrapper)); - - return map; - } - - @Override - public Map getAppealSubmit() { - Map map = new HashMap<>(); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - // 总化解数 - map.put("all", appealService.count(wrapper)); - wrapper.clear(); - - // 本年度化解数 - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); - map.put("year", appealService.count(wrapper)); - wrapper.clear(); - - // 本季度化解数 - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); - map.put("quarterly", appealService.count(wrapper)); - wrapper.clear(); - - // 本月化解数 - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); - map.put("mon", appealService.count(wrapper)); - - return map; - } - - @Override - public List getAppealList() { - // 化解成功状态数组 - List state = new ArrayList<>(); - state.add(0); - state.add(1); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - // 只查这几个字段值 + private final IAppealService appealService; + + private final IAppealVisitorService appealVisitorService; + + private final IUserService userService; + + + @Override + public Map getMediateFinish() { + Map map = new HashMap<>(); + + // 化解成功状态数组 + List state = new ArrayList<>(); + state.add(2); + state.add(3); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + // 总化解数 + wrapper.in(Appeal::getStatus, state); + map.put("all", appealService.count(wrapper)); + wrapper.clear(); + + // 本年度化解数 + wrapper.in(Appeal::getStatus, state); + wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); + map.put("year", appealService.count(wrapper)); + wrapper.clear(); + + // 本季度化解数 + wrapper.in(Appeal::getStatus, state); + wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); + map.put("quarterly", appealService.count(wrapper)); + wrapper.clear(); + + // 本月化解数 + wrapper.in(Appeal::getStatus, state); + wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); + map.put("mon", appealService.count(wrapper)); + + return map; + } + + @Override + public Map getAppealSubmit() { + Map map = new HashMap<>(); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + // 总化解数 + map.put("all", appealService.count(wrapper)); + wrapper.clear(); + + // 本年度化解数 + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); + map.put("year", appealService.count(wrapper)); + wrapper.clear(); + + // 本季度化解数 + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); + map.put("quarterly", appealService.count(wrapper)); + wrapper.clear(); + + // 本月化解数 + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); + map.put("mon", appealService.count(wrapper)); + + return map; + } + + @Override + public List getAppealList() { + // 化解成功状态数组 + List state = new ArrayList<>(); + state.add(0); + state.add(1); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + // 只查这几个字段值 // wrapper.select(Appeal::getId, Appeal::getDisputeName, Appeal::getFirstRegTime, Appeal::getStatus, Appeal::getStreetId); - // 待处理、正在处理 - wrapper.in(Appeal::getStatus, state); - // 根据登记时间倒序 - wrapper.orderByDesc(Appeal::getFirstRegTime); - List appeals = appealService.list(wrapper); - - // 获取前50条 - List appealList = appeals.stream().limit(50).collect(Collectors.toList()); - - // 所属街道赋字典值 - appealList.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); - return appealList; - } - - @Override - public Map> getAppealByMon() { - Map> map = new HashMap<>(); - List dateList = new ArrayList<>(); - List handlerCountList = new ArrayList<>(); - List finishContList = new ArrayList<>(); - map.put("dateList", dateList); - map.put("handlerCountList", handlerCountList); - map.put("finishContList", finishContList); - - List state = new ArrayList<>(); - state.add(2); - state.add(3); - - // 当月 - Map> map0 = getStartAndEndTime(map, state, 0); - - // 前1个月 - Map> map1 = getStartAndEndTime(map0, state, 1); - - // 前2个月 - Map> map2 = getStartAndEndTime(map1, state, 2); - - // 前3个月 - Map> map3 = getStartAndEndTime(map2, state, 3); - - // 前4个月 - Map> map4 = getStartAndEndTime(map3, state, 4); - - // 前5个月 - return getStartAndEndTime(map4, state, 5); - } - - @Override - public Map getAppealTypePercent() { - // 先查所有 - List appeals = appealService.list(); - - // 根据纠纷类型分组 - Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getDisputeName)); - Set names = collect.keySet(); - - // 纠纷类型对应的数量 - Map map = new HashMap<>(); - for (String name : names) { - map.put(name, collect.get(name).size()); - } - - // 根据数量排序 - List> list = new ArrayList<>(map.entrySet()); - list.sort((o1, o2) -> o2.getValue() - o1.getValue()); - - Map hashMap = new HashMap<>(); - DecimalFormat df = new DecimalFormat("#0.0"); - - // 如果类型小于5,正常计算 - if (list.size() <= 5) { - for (Map.Entry entry : list) { - hashMap.put(entry.getKey(), df.format((double) entry.getValue() / (double) appeals.size() * 100) + "%"); - } - } - // 如果类型大于5,前五正常计算,其余全部按照其他纠纷计算 - else { - for (int i = 0; i < 5; i++) { - Map.Entry entry = list.get(i); - hashMap.put(entry.getKey(), df.format((double) entry.getValue() / (double) appeals.size() * 100) + "%"); - } - int size = 0; - for (int i = 5; i < list.size(); i++) { - Map.Entry entry = list.get(i); - size += entry.getValue(); - } - hashMap.put("其他纠纷", df.format((double) size / (double) appeals.size() * 100) + "%"); - } - - return hashMap; - } - - @Override - public Map getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { - wrapper.between(Appeal::getFirstRegTime, dateFormat.parse(startTime), dateFormat.parse(endTime)); - } else if (timeFrame == 1) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); - } else if (timeFrame == 2) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); - } else if (timeFrame == 3) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); - } - List appeals = appealService.list(wrapper); - appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); - - // 根据街道分组 - Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); - Set names = collect.keySet(); - - // 街道对应的数量 - Map map = new HashMap<>(); - for (String name : names) { - map.put(name, collect.get(name).size()); - } - return map; - } - - @Override - public Map getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - // 化解成功状态数组 - List state = new ArrayList<>(); - state.add(2); - state.add(3); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(Appeal::getStatus, state); - if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { - wrapper.between(Appeal::getFirstRegTime, dateFormat.parse(startTime), dateFormat.parse(endTime)); - } else if (timeFrame == 1) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); - } else if (timeFrame == 2) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); - } else if (timeFrame == 3) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); - } - List appeals = appealService.list(wrapper); - appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); - - // 根据街道分组 - Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); - Set names = collect.keySet(); - - // 街道对应的数量 - Map map = new HashMap<>(); - for (String name : names) { - map.put(name, collect.get(name).size()); - } - return map; - } - - @Override - public Map getImmediateCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(Appeal::getSkipGrant, 1); - if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { - wrapper.between(Appeal::getFirstRegTime, dateFormat.parse(startTime), dateFormat.parse(endTime)); - } else if (timeFrame == 1) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); - } else if (timeFrame == 2) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); - } else if (timeFrame == 3) { - wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); - } - List appeals = appealService.list(wrapper); - appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); - - // 根据街道分组 - Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); - Set names = collect.keySet(); - - // 街道对应的数量 - Map map = new HashMap<>(); - for (String name : names) { - map.put(name, collect.get(name).size()); - } - return map; - } - - @Override - public IPage getImmediateList(String streetId, IPage page) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.select(Appeal::getId, Appeal::getFirstRegTime, Appeal::getDisputeName); - wrapper.eq(Appeal::getStreetId, streetId); - wrapper.eq(Appeal::getSkipGrant, 1); - wrapper.orderByDesc(Appeal::getCreateTime); - IPage iPage = appealService.page(page, wrapper); - - // 给每条数据赋值来访人姓名 - List records = iPage.getRecords(); - if (CollectionUtils.isNotEmpty(records)) { - for (Appeal record : records) { - // 获取sort=1的来访人 - AppealVisitor visitor = appealVisitorService.getOne(new LambdaQueryWrapper().eq(AppealVisitor::getAppealId, record.getId()).eq(AppealVisitor::getSort, 1)); - if (visitor != null) { - record.setUsername(visitor.getUsername()); - } - } - iPage.setRecords(records); - } - return iPage; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void importAppeal(List excels) { - if (CollectionUtils.isNotEmpty(excels)) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - List appeals = new ArrayList<>(); - List visitors = new ArrayList<>(); - excels.forEach(excel -> { - if (StringUtils.isNotBlank(excel.getDisputeName())) { - Appeal appeal = Objects.requireNonNull(BeanUtil.copy(excel, Appeal.class)); - appeal.setId(IdWorker.getId()); - // 所属街道字典id - if (StringUtils.isNotBlank(excel.getStreetId())) { - List street = dictBizService.list(new LambdaQueryWrapper().eq(DictBiz::getCode, "street").like(DictBiz::getDictValue, excel.getStreetId())); - if (CollectionUtils.isNotEmpty(street)) { - appeal.setStreetId(street.get(0).getId()); - } - } - - // 纠纷字典id - if (StringUtils.isNotBlank(appeal.getDisputeName())) { - List values = dictBizService.list(new LambdaQueryWrapper().eq(DictBiz::getCode, "dispute_type").like(DictBiz::getDictValue, appeal.getDisputeName())); - if (CollectionUtils.isNotEmpty(values)) { - appeal.setDisputeId(values.get(0).getId()); - } - } - - // 数据录入时, 处理部门 - if (StringUtils.isNotBlank(excel.getHandleDept())) { - List users = userService.list(new LambdaQueryWrapper().like(User::getName, excel.getHandleDept())); - if (CollectionUtils.isNotEmpty(users)) { - appeal.setHandleDept(users.get(0).getId()); - } - } - - // 纠纷等级(事件等级), 0:简单, 1:一般, 2:重大, 3:疑难 - if (StringUtils.isNotBlank(excel.getDisputeLevel())) { - if ("简单".equals(excel.getDisputeLevel())) { - appeal.setDisputeLevel(0); - } else if ("一般".equals(excel.getDisputeLevel())) { - appeal.setDisputeLevel(1); - } else if ("重大".equals(excel.getDisputeLevel())) { - appeal.setDisputeLevel(2); - } else if ("疑难".equals(excel.getDisputeLevel())) { - appeal.setDisputeLevel(3); - } - } - - // 首次登记时间 - if (StringUtils.isNotBlank(excel.getFirstRegTime())) { - try { - appeal.setFirstRegTime(dateFormat.parse(excel.getFirstRegTime())); - } catch (ParseException e) { - e.printStackTrace(); - } - } - - // 诉求状态(办理状态) - if (StringUtils.isNotBlank(excel.getStatus())) { - if ("正在处理".equals(excel.getStatus())) { - appeal.setStatus(1); - } else if ("达成协议".equals(excel.getStatus())) { - appeal.setStatus(2); - } else if ("调解成功".equals(excel.getStatus()) || "完成归档".equals(excel.getStatus())) { - appeal.setStatus(3); - } - } - - // 是否越级上报 - appeal.setSkipGrant(0); - - // 数据来源 0:系统添加, 1:数据导入 - appeal.setSourceType(BusinessConstant.SOURCE_TYPE_IMPORT); - - // 上访人员 - if (StringUtils.isNotBlank(excel.getUsername())) { - AppealVisitor visitor = new AppealVisitor(); - visitor.setAppealId(appeal.getId()); - visitor.setSort(1); - visitor.setUsername(excel.getUsername()); - visitors.add(visitor); - } - appeals.add(appeal); - } - }); - appealService.saveBatch(appeals); - appealVisitorService.saveBatch(visitors); - } - } - - @Override - public List exportAppeal(String appealStatus, String startTime, String endTime, String appealType, String windowId, String username) { - List excels = appealMapper.exportAppeal(appealStatus, startTime, endTime, appealType, windowId, username); - return excels; - } - - @Override - public Map> getAppealHot() { - Map> map = new HashMap(); - // 化解成功状态数组 - List state = new ArrayList<>(); - state.add(2); - state.add(3); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(Appeal::getStatus, state); - List appeals = appealService.list(wrapper); - appeals.forEach(appeal -> { - appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue()); - appeal.setName(userService.getById(appeal.getHandleDept()).getName()); - }); - - // 根据街道分组 - Map> street = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); - Set names = street.keySet(); - - // 封装到数据对象 - List strees = new ArrayList<>(); - for (String name : names) { - DataEntity entity = new DataEntity(); - entity.setName(name); - entity.setNum(street.get(name).size()); - strees.add(entity); - } - // 倒序 - List streeList = strees.stream().sorted(Comparator.comparing(DataEntity::getNum).reversed()).collect(Collectors.toList()); - map.put("street", streeList); - - // 根据部门分组 - Map> town = appeals.stream().collect(Collectors.groupingBy(Appeal::getName)); - Set depts = town.keySet(); - - // 封装到数据对象 - List towns = new ArrayList<>(); - for (String name : depts) { - DataEntity entity = new DataEntity(); - entity.setName(name); - entity.setNum(town.get(name).size()); - towns.add(entity); - } - // 倒序 - List townList = towns.stream().sorted(Comparator.comparing(DataEntity::getNum).reversed()).collect(Collectors.toList()); - map.put("town", townList); - - return map; - } - - private Map> getStartAndEndTime(Map> map, List state, Integer month) { - List dateList = map.get("dateList"); - List handlerCountList = map.get("handlerCountList"); - List finishContList = map.get("finishContList"); - - // 当月开始时间 - LocalDateTime start = LocalDateTime.of(LocalDate.now().withDayOfMonth(1).minusMonths(month), LocalTime.MIDNIGHT); - - // 当月结束时间 - LocalDateTime end = start.plusMonths(1).minusSeconds(1); - DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); - - // 月份:2023-06 - dateList.add(start.format(dateFormatter)); - - // 登记数 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.between(Appeal::getFirstRegTime, start, end); - handlerCountList.add(appealService.count(wrapper)); - - // 调解成功数 - wrapper.clear(); - wrapper.in(Appeal::getStatus, state); - wrapper.between(Appeal::getFirstRegTime, start, end); - finishContList.add(appealService.count(wrapper)); - - map.put("dateList", dateList); - map.put("handlerCountList", handlerCountList); - map.put("finishContList", finishContList); - return map; - - } + // 待处理、正在处理 + wrapper.in(Appeal::getStatus, state); + // 根据登记时间倒序 + wrapper.orderByDesc(Appeal::getFirstRegTime); + List appeals = appealService.list(wrapper); + + // 获取前50条 + List appealList = appeals.stream().limit(50).collect(Collectors.toList()); + + // 所属街道赋字典值 + appealList.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); + return appealList; + } + + @Override + public Map> getAppealByMon() { + Map> map = new HashMap<>(); + List dateList = new ArrayList<>(); + List handlerCountList = new ArrayList<>(); + List finishContList = new ArrayList<>(); + map.put("dateList", dateList); + map.put("handlerCountList", handlerCountList); + map.put("finishContList", finishContList); + + List state = new ArrayList<>(); + state.add(2); + state.add(3); + + // 当月 + Map> map0 = getStartAndEndTime(map, state, 0); + + // 前1个月 + Map> map1 = getStartAndEndTime(map0, state, 1); + + // 前2个月 + Map> map2 = getStartAndEndTime(map1, state, 2); + + // 前3个月 + Map> map3 = getStartAndEndTime(map2, state, 3); + + // 前4个月 + Map> map4 = getStartAndEndTime(map3, state, 4); + + // 前5个月 + return getStartAndEndTime(map4, state, 5); + } + + @Override + public Map getAppealTypePercent() { + // 先查所有 + List appeals = appealService.list(); + + // 根据纠纷类型分组 + Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getDisputeName)); + Set names = collect.keySet(); + + // 纠纷类型对应的数量 + Map map = new HashMap<>(); + for (String name : names) { + map.put(name, collect.get(name).size()); + } + + // 根据数量排序 + List> list = new ArrayList<>(map.entrySet()); + list.sort((o1, o2) -> o2.getValue() - o1.getValue()); + + Map hashMap = new HashMap<>(); + DecimalFormat df = new DecimalFormat("#0.0"); + + // 如果类型小于5,正常计算 + if (list.size() <= 5) { + for (Map.Entry entry : list) { + hashMap.put(entry.getKey(), df.format((double) entry.getValue() / (double) appeals.size() * 100) + "%"); + } + } + // 如果类型大于5,前五正常计算,其余全部按照其他纠纷计算 + else { + for (int i = 0; i < 5; i++) { + Map.Entry entry = list.get(i); + hashMap.put(entry.getKey(), df.format((double) entry.getValue() / (double) appeals.size() * 100) + "%"); + } + int size = 0; + for (int i = 5; i < list.size(); i++) { + Map.Entry entry = list.get(i); + size += entry.getValue(); + } + hashMap.put("其他纠纷", df.format((double) size / (double) appeals.size() * 100) + "%"); + } + + return hashMap; + } + + @Override + public Map getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { + wrapper.between(Appeal::getFirstRegTime, dateFormat.parse(startTime), dateFormat.parse(endTime)); + } else if (timeFrame == 1) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); + } else if (timeFrame == 2) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); + } else if (timeFrame == 3) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); + } + List appeals = appealService.list(wrapper); + appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); + + // 根据街道分组 + Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); + Set names = collect.keySet(); + + // 街道对应的数量 + Map map = new HashMap<>(); + for (String name : names) { + map.put(name, collect.get(name).size()); + } + return map; + } + + @Override + public Map getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + // 化解成功状态数组 + List state = new ArrayList<>(); + state.add(2); + state.add(3); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(Appeal::getStatus, state); + if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { + wrapper.between(Appeal::getFirstRegTime, dateFormat.parse(startTime), dateFormat.parse(endTime)); + } else if (timeFrame == 1) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); + } else if (timeFrame == 2) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); + } else if (timeFrame == 3) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); + } + List appeals = appealService.list(wrapper); + appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); + + // 根据街道分组 + Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); + Set names = collect.keySet(); + + // 街道对应的数量 + Map map = new HashMap<>(); + for (String name : names) { + map.put(name, collect.get(name).size()); + } + return map; + } + + @Override + public Map getImmediateCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Appeal::getSkipGrant, 1); + if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { + wrapper.between(Appeal::getFirstRegTime, dateFormat.parse(startTime), dateFormat.parse(endTime)); + } else if (timeFrame == 1) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); + } else if (timeFrame == 2) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime()); + } else if (timeFrame == 3) { + wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); + } + List appeals = appealService.list(wrapper); + appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); + + // 根据街道分组 + Map> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); + Set names = collect.keySet(); + + // 街道对应的数量 + Map map = new HashMap<>(); + for (String name : names) { + map.put(name, collect.get(name).size()); + } + return map; + } + + @Override + public IPage getImmediateList(String streetId, IPage page) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(Appeal::getId, Appeal::getFirstRegTime, Appeal::getDisputeName); + wrapper.eq(Appeal::getStreetId, streetId); + wrapper.eq(Appeal::getSkipGrant, 1); + wrapper.orderByDesc(Appeal::getCreateTime); + IPage iPage = appealService.page(page, wrapper); + + // 给每条数据赋值来访人姓名 + List records = iPage.getRecords(); + if (CollectionUtils.isNotEmpty(records)) { + for (Appeal record : records) { + // 获取sort=1的来访人 + AppealVisitor visitor = appealVisitorService.getOne(new LambdaQueryWrapper().eq(AppealVisitor::getAppealId, record.getId()).eq(AppealVisitor::getSort, 1)); + if (visitor != null) { + record.setUsername(visitor.getUsername()); + } + } + iPage.setRecords(records); + } + return iPage; + } + + + @Override + public Map> getAppealHot() { + Map> map = new HashMap(); + // 化解成功状态数组 + List state = new ArrayList<>(); + state.add(2); + state.add(3); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(Appeal::getStatus, state); + List appeals = appealService.list(wrapper); + appeals.forEach(appeal -> { + appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue()); + appeal.setName(userService.getById(appeal.getHandleDept()).getName()); + }); + + // 根据街道分组 + Map> street = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); + Set names = street.keySet(); + + // 封装到数据对象 + List strees = new ArrayList<>(); + for (String name : names) { + DataEntity entity = new DataEntity(); + entity.setName(name); + entity.setNum(street.get(name).size()); + strees.add(entity); + } + // 倒序 + List streeList = strees.stream().sorted(Comparator.comparing(DataEntity::getNum).reversed()).collect(Collectors.toList()); + map.put("street", streeList); + + // 根据部门分组 + Map> town = appeals.stream().collect(Collectors.groupingBy(Appeal::getName)); + Set depts = town.keySet(); + + // 封装到数据对象 + List towns = new ArrayList<>(); + for (String name : depts) { + DataEntity entity = new DataEntity(); + entity.setName(name); + entity.setNum(town.get(name).size()); + towns.add(entity); + } + // 倒序 + List townList = towns.stream().sorted(Comparator.comparing(DataEntity::getNum).reversed()).collect(Collectors.toList()); + map.put("town", townList); + + return map; + } + + private Map> getStartAndEndTime(Map> map, List state, Integer month) { + List dateList = map.get("dateList"); + List handlerCountList = map.get("handlerCountList"); + List finishContList = map.get("finishContList"); + + // 当月开始时间 + LocalDateTime start = LocalDateTime.of(LocalDate.now().withDayOfMonth(1).minusMonths(month), LocalTime.MIDNIGHT); + + // 当月结束时间 + LocalDateTime end = start.plusMonths(1).minusSeconds(1); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); + + // 月份:2023-06 + dateList.add(start.format(dateFormatter)); + + // 登记数 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.between(Appeal::getFirstRegTime, start, end); + handlerCountList.add(appealService.count(wrapper)); + + // 调解成功数 + wrapper.clear(); + wrapper.in(Appeal::getStatus, state); + wrapper.between(Appeal::getFirstRegTime, start, end); + finishContList.add(appealService.count(wrapper)); + + map.put("dateList", dateList); + map.put("handlerCountList", handlerCountList); + map.put("finishContList", finishContList); + return map; + + } }