From 19ebbf0125b697c07b647d7fd0e8bf7758c08462 Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Wed, 12 Oct 2022 17:53:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E7=9B=B8=E5=85=B3=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/form/EventStatisticsFormDTO.java | 1 + .../dto/screen/result/BarCategoryDTO.java | 21 ++ .../dto/screen/result/BarCategoryDetail.java | 21 ++ .../screen/result/BarCategoryResultDTO.java | 19 ++ .../result/EfficiencyEvaluationResultDTO.java | 58 ++++ .../epdc/dto/screen/result/LegendDTO.java | 19 ++ .../screen/controller/ScreenController.java | 86 ++++++ .../controller/ScreenItemController.java | 68 ++++- .../dao/ScreenDeptEventEfficiencyDao.java | 20 ++ .../ScreenDeptEventEfficiencyEntity.java | 16 ++ .../ScreenDeptEventEfficiencyService.java | 80 +++--- .../ScreenDeptEventEfficiencyServiceImpl.java | 258 +++++++++++++++--- .../impl/ScreenDeptEventStatServiceImpl.java | 19 +- .../screen/ScreenDeptEventEfficiencyDao.xml | 95 ++++++- .../mapper/screen/ScreenDeptEventStatDao.xml | 1 + 15 files changed, 678 insertions(+), 104 deletions(-) create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDTO.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDetail.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryResultDTO.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/EfficiencyEvaluationResultDTO.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/LegendDTO.java create mode 100644 esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenController.java diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/form/EventStatisticsFormDTO.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/form/EventStatisticsFormDTO.java index 86008015e..5e531a4bf 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/form/EventStatisticsFormDTO.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/form/EventStatisticsFormDTO.java @@ -23,4 +23,5 @@ public class EventStatisticsFormDTO implements Serializable { private String statDate; private String startDate; private String endDate; + private String type; } diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDTO.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDTO.java new file mode 100644 index 000000000..9f3cb6ea6 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDTO.java @@ -0,0 +1,21 @@ +package com.elink.esua.epdc.dto.screen.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @author Administrator + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BarCategoryDTO implements Serializable { + private static final long serialVersionUID = 1L; + private String categoryCode; + private String categoryName; + private List detail; +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDetail.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDetail.java new file mode 100644 index 000000000..2ac14d55c --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryDetail.java @@ -0,0 +1,21 @@ +package com.elink.esua.epdc.dto.screen.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2022/10/12 16:06 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BarCategoryDetail implements Serializable { + private static final long serialVersionUID = 1L; + private String legendName; + private Integer count; +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryResultDTO.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryResultDTO.java new file mode 100644 index 000000000..2323d9519 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/BarCategoryResultDTO.java @@ -0,0 +1,19 @@ +package com.elink.esua.epdc.dto.screen.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2022/10/12 16:07 + */ +@Data +public class BarCategoryResultDTO implements Serializable { + private static final long serialVersionUID = 1L; + private List legend; + private List categoryList; + +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/EfficiencyEvaluationResultDTO.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/EfficiencyEvaluationResultDTO.java new file mode 100644 index 000000000..e3571f014 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/EfficiencyEvaluationResultDTO.java @@ -0,0 +1,58 @@ +package com.elink.esua.epdc.dto.screen.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2022/10/12 10:47 + */ +@Data +public class EfficiencyEvaluationResultDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 部门ID + */ + private String deptId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 事件总数 + */ + private Integer eventCount; + + /** + * 结案数 + */ + private Integer closedCount; + + /** + * 响应数 + */ + private Integer responseCount; + + /** + * 满意数 + */ + private Integer satisfiedCount; + /** + * 响应率 + */ + private String responseRatio; + + /** + * 满意率 + */ + private String satisfiedRatio; + + /** + * 结案率 + */ + private String closedRatio; +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/LegendDTO.java b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/LegendDTO.java new file mode 100644 index 000000000..71ffa4610 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-client/src/main/java/com/elink/esua/epdc/dto/screen/result/LegendDTO.java @@ -0,0 +1,19 @@ +package com.elink.esua.epdc.dto.screen.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 服务措施分析-柱状图 + * @author Administrator + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LegendDTO implements Serializable { + private static final long serialVersionUID = 1L; + private String legendName; +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenController.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenController.java new file mode 100644 index 000000000..b6fa89f86 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenController.java @@ -0,0 +1,86 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.elink.esua.epdc.modules.screen.controller; + +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; +import com.elink.esua.epdc.commons.tools.validator.group.AddGroup; +import com.elink.esua.epdc.dto.events.form.ItemDailyStatisFormDTO; +import com.elink.esua.epdc.dto.events.result.ItemDailyStatisResultDTO; +import com.elink.esua.epdc.dto.screen.form.EventStatisticsFormDTO; +import com.elink.esua.epdc.dto.screen.result.BarCategoryResultDTO; +import com.elink.esua.epdc.dto.screen.result.EfficiencyEvaluationResultDTO; +import com.elink.esua.epdc.dto.screen.result.EventStatisticsResultDTO; +import com.elink.esua.epdc.modules.screen.service.ScreenDeptEventEfficiencyService; +import com.elink.esua.epdc.modules.screen.service.ScreenDeptEventStatService; +import com.elink.esua.epdc.modules.screen.service.ScreenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + + +/** + * 大屏接口 + * @author Administrator + */ +@RestController +@RequestMapping("screen") +public class ScreenController { + + @Resource + private ScreenDeptEventEfficiencyService screenDeptEventEfficiencyService; + @Resource + private ScreenDeptEventStatService screenDeptEventStatService; + + + + /** + * 大屏-事件&结案数统计柱状图 + * + * @return + */ + @PostMapping("getEventBar") + public Result getEventBar(@RequestBody EventStatisticsFormDTO formDTO) { + return new Result().ok(screenDeptEventEfficiencyService.getEventBar(formDTO)); + } + + /** + * 大屏-效能评价 + * + * @return + */ + @PostMapping("getEfficiencyEvaluation") + public Result> getEfficiencyEvaluation(@RequestBody EventStatisticsFormDTO formDTO) { + return new Result>().ok(screenDeptEventEfficiencyService.getEfficiencyEvaluation(formDTO)); + } + + /** + * 大屏-汇总统计 + */ + @PostMapping("getEventStat") + public Result> getEventStat(@RequestBody EventStatisticsFormDTO formDTO) { + return new Result>().ok(screenDeptEventStatService.getEventStat(formDTO)); + } + + +} diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenItemController.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenItemController.java index 4358e0b4c..6e4f80834 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenItemController.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenItemController.java @@ -17,18 +17,30 @@ package com.elink.esua.epdc.modules.screen.controller; +import com.elink.esua.epdc.commons.tools.constant.NumConstant; +import com.elink.esua.epdc.commons.tools.utils.DateUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.commons.tools.validator.group.AddGroup; import com.elink.esua.epdc.dto.events.form.ItemDailyStatisFormDTO; import com.elink.esua.epdc.dto.events.result.ItemDailyStatisResultDTO; +import com.elink.esua.epdc.dto.screen.form.DataStatisticsFormDTO; +import com.elink.esua.epdc.modules.screen.service.ScreenDeptEventEfficiencyService; +import com.elink.esua.epdc.modules.screen.service.ScreenDeptEventStatService; import com.elink.esua.epdc.modules.screen.service.ScreenService; +import org.apache.commons.lang3.StringUtils; +import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + /** * 项目统计相关接口 @@ -39,7 +51,10 @@ public class ScreenItemController { @Autowired private ScreenService screenService; - + @Resource + private ScreenDeptEventEfficiencyService screenDeptEventEfficiencyService; + @Resource + private ScreenDeptEventStatService screenDeptEventStatService; /** @@ -53,4 +68,55 @@ public class ScreenItemController { return new Result().ok(screenService.itemDailyStatis(formDTO)); } + @PostMapping("deptEventStat/dataStatistics") + public Result dataStatistics(@RequestBody DataStatisticsFormDTO formDTO) { + List dateIds = new ArrayList<>(); + if ((StringUtils.isBlank(formDTO.getStartDate()) && StringUtils.isBlank(formDTO.getEndDate()))){ + if (StringUtils.isNotBlank(formDTO.getStatDate())){ + dateIds.add(formDTO.getStatDate()); + }else { + dateIds.add(DateUtils.format(DateUtils.addDateDays(new Date(), -1), DateUtils.DATE_PATTERN)); + } + }else { + dateIds = DateUtils.getDaysBetween(formDTO.getStartDate(), formDTO.getEndDate()); + } + dateIds.forEach(date -> { + formDTO.setStatDate(date); + screenDeptEventStatService.dataStatistics(formDTO); + }); + return new Result(); + } + + @PostMapping("deptEventEfficiency/dataStatistics") + public Result eventEfficiencyStatistics(@RequestBody DataStatisticsFormDTO formDTO) { + List dateIds = new ArrayList<>(); + if ((StringUtils.isBlank(formDTO.getStartDate()) && StringUtils.isBlank(formDTO.getEndDate()))){ + if (StringUtils.isNotBlank(formDTO.getStatDate())){ + dateIds.add(formDTO.getStatDate()); + }else { + dateIds.add(DateUtils.format(DateUtils.addDateDays(new Date(), -1), DateUtils.DATE_PATTERN)); + } + }else { + dateIds = DateUtils.getDaysBetween(formDTO.getStartDate(), formDTO.getEndDate()); + } + dateIds.forEach(date -> { + Date d = DateUtils.parse(date, DateUtils.DATE_PATTERN); + formDTO.setStatDate(date); + screenDeptEventEfficiencyService.dataStatisticsDaily(formDTO); + + DateTime dateTime = new DateTime(d); + if (dateTime.getDayOfMonth() == 1) { + String statDate = DateUtils.format(DateUtils.addDateMonths(d, -1), "yyyy-MM"); + formDTO.setStatDate(statDate); + screenDeptEventEfficiencyService.dataStatisticsMonthly(formDTO); + } + if (dateTime.getDayOfYear() == 1) { + String statDate = DateUtils.format(DateUtils.addDateYears(d, -1), "yyyy"); + formDTO.setStatDate(statDate); + screenDeptEventEfficiencyService.dataStatisticsYearly(formDTO); + } + }); + return new Result(); + } + } diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/dao/ScreenDeptEventEfficiencyDao.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/dao/ScreenDeptEventEfficiencyDao.java index ccbf3cc4e..2fe654dfb 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/dao/ScreenDeptEventEfficiencyDao.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/dao/ScreenDeptEventEfficiencyDao.java @@ -18,6 +18,8 @@ package com.elink.esua.epdc.modules.screen.dao; import com.elink.esua.epdc.commons.mybatis.dao.BaseDao; +import com.elink.esua.epdc.dto.screen.form.EventStatisticsFormDTO; +import com.elink.esua.epdc.dto.screen.result.EfficiencyEvaluationResultDTO; import com.elink.esua.epdc.modules.screen.entity.ScreenDeptEventEfficiencyEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -58,4 +60,22 @@ public interface ScreenDeptEventEfficiencyDao extends BaseDao getEventEfficiencyYearly(@Param("statDate") String statDate); + + /** + * 获取大屏数据 + * @Param formDTO + * @Return {@link List< EfficiencyEvaluationResultDTO>} + * @Author zhaoqifeng + * @Date 2022/10/12 14:04 + */ + List getScreenData(EventStatisticsFormDTO formDTO); + + /** + * 获取大屏数据-自定义时间区间 + * @Param formDTO + * @Return {@link List< EfficiencyEvaluationResultDTO>} + * @Author zhaoqifeng + * @Date 2022/10/12 14:40 + */ + List getScreenDataByInterval(EventStatisticsFormDTO formDTO); } \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/entity/ScreenDeptEventEfficiencyEntity.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/entity/ScreenDeptEventEfficiencyEntity.java index 7a2c56cd7..a4ea955a3 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/entity/ScreenDeptEventEfficiencyEntity.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/entity/ScreenDeptEventEfficiencyEntity.java @@ -23,6 +23,7 @@ import com.elink.esua.epdc.commons.mybatis.entity.BaseEpdcEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; import java.util.Date; /** @@ -98,4 +99,19 @@ public class ScreenDeptEventEfficiencyEntity extends BaseEpdcEntity { */ private Integer closedCount; + /** + * 响应率 + */ + private BigDecimal responseRatio; + + /** + * 满意率 + */ + private BigDecimal satisfiedRatio; + + /** + * 结案率 + */ + private BigDecimal closedRatio; + } \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/ScreenDeptEventEfficiencyService.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/ScreenDeptEventEfficiencyService.java index eb5a9e68f..9048dd85d 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/ScreenDeptEventEfficiencyService.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/ScreenDeptEventEfficiencyService.java @@ -18,12 +18,13 @@ package com.elink.esua.epdc.modules.screen.service; import com.elink.esua.epdc.commons.mybatis.service.BaseService; -import com.elink.esua.epdc.commons.tools.page.PageData; -import com.elink.esua.epdc.dto.screen.ScreenDeptEventEfficiencyDTO; +import com.elink.esua.epdc.dto.screen.form.DataStatisticsFormDTO; +import com.elink.esua.epdc.dto.screen.form.EventStatisticsFormDTO; +import com.elink.esua.epdc.dto.screen.result.BarCategoryResultDTO; +import com.elink.esua.epdc.dto.screen.result.EfficiencyEvaluationResultDTO; import com.elink.esua.epdc.modules.screen.entity.ScreenDeptEventEfficiencyEntity; import java.util.List; -import java.util.Map; /** * 大屏-事件结案数与效能评价统计 @@ -32,64 +33,51 @@ import java.util.Map; * @since v1.0.0 2022-10-11 */ public interface ScreenDeptEventEfficiencyService extends BaseService { - /** - * 默认分页 + * 大屏数据统计-按天 * - * @param params - * @return PageData - * @author generator - * @date 2022-10-11 + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/10/11 10:24 */ - PageData page(Map params); + void dataStatisticsDaily(DataStatisticsFormDTO formDTO); /** - * 默认查询 + * 大屏数据统计-按月 * - * @param params - * @return java.util.List - * @author generator - * @date 2022-10-11 + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/10/11 10:24 */ - List list(Map params); + void dataStatisticsMonthly(DataStatisticsFormDTO formDTO); /** - * 单条查询 + * 大屏数据统计-按年 * - * @param id - * @return ScreenDeptEventEfficiencyDTO - * @author generator - * @date 2022-10-11 + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/10/11 10:24 */ - ScreenDeptEventEfficiencyDTO get(String id); + void dataStatisticsYearly(DataStatisticsFormDTO formDTO); /** - * 默认保存 - * - * @param dto - * @return void - * @author generator - * @date 2022-10-11 + * 大屏-效能评价 + * @Param formDTO + * @Return {@link List< EfficiencyEvaluationResultDTO>} + * @Author zhaoqifeng + * @Date 2022/10/12 11:00 */ - void save(ScreenDeptEventEfficiencyDTO dto); + List getEfficiencyEvaluation(EventStatisticsFormDTO formDTO); /** - * 默认更新 - * - * @param dto - * @return void - * @author generator - * @date 2022-10-11 - */ - void update(ScreenDeptEventEfficiencyDTO dto); - - /** - * 批量删除 - * - * @param ids - * @return void - * @author generator - * @date 2022-10-11 + * 大屏-事件数&结案数柱状图 + * @Param formDTO + * @Return {@link BarCategoryResultDTO} + * @Author zhaoqifeng + * @Date 2022/10/12 16:11 */ - void delete(String[] ids); + BarCategoryResultDTO getEventBar(EventStatisticsFormDTO formDTO); } \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventEfficiencyServiceImpl.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventEfficiencyServiceImpl.java index 204793f0f..7e4982442 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventEfficiencyServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventEfficiencyServiceImpl.java @@ -17,24 +17,28 @@ package com.elink.esua.epdc.modules.screen.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; -import com.elink.esua.epdc.commons.tools.page.PageData; -import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; -import com.elink.esua.epdc.commons.tools.constant.FieldConstant; -import com.elink.esua.epdc.dto.screen.ScreenDeptEventEfficiencyDTO; +import com.elink.esua.epdc.commons.tools.constant.NumConstant; +import com.elink.esua.epdc.commons.tools.utils.DateUtils; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.SysDeptDTO; +import com.elink.esua.epdc.dto.screen.form.DataStatisticsFormDTO; +import com.elink.esua.epdc.dto.screen.form.EventStatisticsFormDTO; +import com.elink.esua.epdc.dto.screen.result.*; import com.elink.esua.epdc.modules.screen.dao.ScreenDeptEventEfficiencyDao; import com.elink.esua.epdc.modules.screen.entity.ScreenDeptEventEfficiencyEntity; import com.elink.esua.epdc.modules.screen.service.ScreenDeptEventEfficiencyService; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Date; import java.util.List; -import java.util.Map; +import java.util.stream.Collectors; /** * 大屏-事件结案数与效能评价统计 @@ -46,56 +50,220 @@ import java.util.Map; public class ScreenDeptEventEfficiencyServiceImpl extends BaseServiceImpl implements ScreenDeptEventEfficiencyService { + /** + * 大屏数据统计-按天 + * + * @param formDTO + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/10/11 10:24 + */ @Override - public PageData page(Map params) { - IPage page = baseDao.selectPage( - getPage(params, FieldConstant.CREATED_TIME, false), - getWrapper(params) - ); - return getPageData(page, ScreenDeptEventEfficiencyDTO.class); + public void dataStatisticsDaily(DataStatisticsFormDTO formDTO) { + String statDate; + if (StringUtils.isBlank(formDTO.getStatDate())) { + statDate = DateUtils.format(DateUtils.addDateDays(new Date(), -1), DateUtils.DATE_PATTERN); + } else { + statDate = formDTO.getStatDate(); + } + List list = baseDao.getEventEfficiencyDaily(statDate); + if (CollectionUtils.isNotEmpty(list)) { + list.forEach(item -> { + item.setStatDate(statDate); + BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED); + BigDecimal eventCount = new BigDecimal(item.getEventCount()); + BigDecimal closedCount = new BigDecimal(item.getClosedCount()); + BigDecimal responseCount = new BigDecimal(item.getResponseCount()); + BigDecimal satisfiedCount = new BigDecimal(item.getSatisfiedCount()); + item.setClosedRatio(closedCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setResponseRatio(responseCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setSatisfiedRatio(satisfiedCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + }); + insertBatch(list); + } } + /** + * 大屏数据统计-按月 + * + * @param formDTO + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/10/11 10:24 + */ @Override - public List list(Map params) { - List entityList = baseDao.selectList(getWrapper(params)); + public void dataStatisticsMonthly(DataStatisticsFormDTO formDTO) { + String statDate; + if (StringUtils.isBlank(formDTO.getStatDate())) { + statDate = DateUtils.format(DateUtils.addDateMonths(new Date(), -1), "yyyy-MM"); + } else { + statDate = formDTO.getStatDate(); + } + List list = baseDao.getEventEfficiencyDaily(statDate); + if (CollectionUtils.isNotEmpty(list)) { + list.forEach(item -> { + item.setStatDate(statDate); + BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED); + BigDecimal eventCount = new BigDecimal(item.getEventCount()); + BigDecimal closedCount = new BigDecimal(item.getClosedCount()); + BigDecimal responseCount = new BigDecimal(item.getResponseCount()); + BigDecimal satisfiedCount = new BigDecimal(item.getSatisfiedCount()); + item.setClosedRatio(closedCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setResponseRatio(responseCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setSatisfiedRatio(satisfiedCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + }); + insertBatch(list); + } + } - return ConvertUtils.sourceToTarget(entityList, ScreenDeptEventEfficiencyDTO.class); + /** + * 大屏数据统计-按年 + * + * @param formDTO + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/10/11 10:24 + */ + @Override + public void dataStatisticsYearly(DataStatisticsFormDTO formDTO) { + String statDate; + if (StringUtils.isBlank(formDTO.getStatDate())) { + statDate = DateUtils.format(DateUtils.addDateYears(new Date(), -1), "yyyy"); + } else { + statDate = formDTO.getStatDate(); + } + List list = baseDao.getEventEfficiencyDaily(statDate); + if (CollectionUtils.isNotEmpty(list)) { + list.forEach(item -> { + item.setStatDate(statDate); + BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED); + BigDecimal eventCount = new BigDecimal(item.getEventCount()); + BigDecimal closedCount = new BigDecimal(item.getClosedCount()); + BigDecimal responseCount = new BigDecimal(item.getResponseCount()); + BigDecimal satisfiedCount = new BigDecimal(item.getSatisfiedCount()); + item.setClosedRatio(closedCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setResponseRatio(responseCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setSatisfiedRatio(satisfiedCount.multiply(hundred).divide(eventCount, NumConstant.SIX, RoundingMode.HALF_UP)); + }); + insertBatch(list); + } } - private QueryWrapper getWrapper(Map params){ - String id = (String)params.get(FieldConstant.ID_HUMP); + /** + * 大屏-效能评价 + * + * @param formDTO + * @Param formDTO + * @Return {@link List< EfficiencyEvaluationResultDTO >} + * @Author zhaoqifeng + * @Date 2022/10/12 11:00 + */ + @Override + public List getEfficiencyEvaluation(EventStatisticsFormDTO formDTO) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id); + if (NumConstant.ONE_STR.equals(formDTO.getStatType())) { + //日期为当前日期前一天 + formDTO.setStatDate(DateUtils.format(DateUtils.addDateDays(new Date(), -1), DateUtils.DATE_PATTERN)); + } else if (NumConstant.TWO_STR.equals(formDTO.getStatType())) { + //日期为本月 + formDTO.setStatDate(DateUtils.format(new Date(), DateUtils.DATE_PATTERN).substring(0, 7)); + } else if (NumConstant.THREE_STR.equals(formDTO.getStatType())) { + //日期为本年 + formDTO.setStatDate(DateUtils.format(new Date(), DateUtils.DATE_PATTERN).substring(0, 4)); + } else { + //自定义区间 + List list = baseDao.getScreenDataByInterval(formDTO); + if (CollectionUtils.isNotEmpty(list)) { + list.forEach(item -> { + //计算结案率,响应率,满意率 + if (item.getEventCount() != NumConstant.ZERO) { + BigDecimal hundred = new BigDecimal(NumConstant.ONE_HUNDRED); + BigDecimal eventCount = new BigDecimal(item.getEventCount()); + BigDecimal closedCount = new BigDecimal(item.getClosedCount()); + BigDecimal responseCount = new BigDecimal(item.getResponseCount()); + BigDecimal satisfiedCount = new BigDecimal(item.getSatisfiedCount()); + String closedRatio = closedCount.multiply(hundred).divide(eventCount, NumConstant.ONE, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString(); + String responseRatio = responseCount.multiply(hundred).divide(eventCount, NumConstant.ONE, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString(); + String satisfiedRatio = satisfiedCount.multiply(hundred).divide(eventCount, NumConstant.ONE, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString(); + item.setClosedRatio(closedRatio.concat("%")); + item.setResponseRatio(responseRatio.concat("%")); + item.setSatisfiedRatio(satisfiedRatio.concat("%")); + } else { + item.setClosedRatio("0%"); + item.setResponseRatio("0%"); + item.setSatisfiedRatio("0%"); + } + }); + } + return list; + } - return wrapper; + return baseDao.getScreenData(formDTO); } + /** + * 大屏-事件数&结案数柱状图 + * + * @param formDTO + * @Param formDTO + * @Return {@link BarCategoryResultDTO} + * @Author zhaoqifeng + * @Date 2022/10/12 16:11 + */ @Override - public ScreenDeptEventEfficiencyDTO get(String id) { - ScreenDeptEventEfficiencyEntity entity = baseDao.selectById(id); - return ConvertUtils.sourceToTarget(entity, ScreenDeptEventEfficiencyDTO.class); - } + public BarCategoryResultDTO getEventBar(EventStatisticsFormDTO formDTO) { + BarCategoryResultDTO result = new BarCategoryResultDTO(); - @Override - @Transactional(rollbackFor = Exception.class) - public void save(ScreenDeptEventEfficiencyDTO dto) { - ScreenDeptEventEfficiencyEntity entity = ConvertUtils.sourceToTarget(dto, ScreenDeptEventEfficiencyEntity.class); - insert(entity); - } + List legendList = new ArrayList<>(); + LegendDTO event = new LegendDTO(); + event.setLegendName("事件数"); + legendList.add(event); + LegendDTO closed = new LegendDTO(); + closed.setLegendName("结案数"); + legendList.add(closed); + result.setLegend(legendList); - @Override - @Transactional(rollbackFor = Exception.class) - public void update(ScreenDeptEventEfficiencyDTO dto) { - ScreenDeptEventEfficiencyEntity entity = ConvertUtils.sourceToTarget(dto, ScreenDeptEventEfficiencyEntity.class); - updateById(entity); + if (NumConstant.ONE_STR.equals(formDTO.getStatType())) { + //日期为当前日期前一天 + formDTO.setStatDate(DateUtils.format(DateUtils.addDateDays(new Date(), -1), DateUtils.DATE_PATTERN)); + } else if (NumConstant.TWO_STR.equals(formDTO.getStatType())) { + //日期为本月 + formDTO.setStatDate(DateUtils.format(new Date(), DateUtils.DATE_PATTERN).substring(0, 7)); + } else if (NumConstant.THREE_STR.equals(formDTO.getStatType())) { + //日期为本年 + formDTO.setStatDate(DateUtils.format(new Date(), DateUtils.DATE_PATTERN).substring(0, 4)); + } else { + //自定义区间 + List list = baseDao.getScreenDataByInterval(formDTO); + return getBarCategoryResultDTO(result, list); + } + List list = baseDao.getScreenData(formDTO); + return getBarCategoryResultDTO(result, list); } - @Override - @Transactional(rollbackFor = Exception.class) - public void delete(String[] ids) { - // 逻辑删除(@TableLogic 注解) - baseDao.deleteBatchIds(Arrays.asList(ids)); + private BarCategoryResultDTO getBarCategoryResultDTO(BarCategoryResultDTO result, List list) { + if (CollectionUtils.isNotEmpty(list)) { + List barList = list.stream().map(item -> { + BarCategoryDTO dto = new BarCategoryDTO(); + dto.setCategoryCode(item.getDeptId()); + dto.setCategoryName(item.getDeptName()); + List detail = new ArrayList<>(); + BarCategoryDetail eventDetail = new BarCategoryDetail(); + eventDetail.setLegendName("事件数"); + eventDetail.setCount(item.getEventCount()); + detail.add(eventDetail); + BarCategoryDetail closedDetail = new BarCategoryDetail(); + closedDetail.setLegendName("结案数"); + closedDetail.setCount(item.getEventCount()); + detail.add(closedDetail); + dto.setDetail(detail); + return dto; + }).collect(Collectors.toList()); + result.setCategoryList(barList); + } + return result; } - } \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventStatServiceImpl.java b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventStatServiceImpl.java index c92c7f523..4aa770956 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventStatServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenDeptEventStatServiceImpl.java @@ -17,28 +17,27 @@ package com.elink.esua.epdc.modules.screen.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; import com.elink.esua.epdc.commons.tools.constant.NumConstant; -import com.elink.esua.epdc.commons.tools.page.PageData; -import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; -import com.elink.esua.epdc.commons.tools.constant.FieldConstant; import com.elink.esua.epdc.commons.tools.utils.DateUtils; -import com.elink.esua.epdc.dto.screen.ScreenDeptEventStatDTO; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.dto.SysDeptDTO; import com.elink.esua.epdc.dto.screen.form.DataStatisticsFormDTO; import com.elink.esua.epdc.dto.screen.form.EventStatisticsFormDTO; import com.elink.esua.epdc.dto.screen.result.EventStatisticsResultDTO; +import com.elink.esua.epdc.modules.feign.AdminFeignClient; import com.elink.esua.epdc.modules.screen.dao.ScreenDeptEventStatDao; import com.elink.esua.epdc.modules.screen.entity.ScreenDeptEventStatEntity; import com.elink.esua.epdc.modules.screen.service.ScreenDeptEventStatService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -65,7 +64,7 @@ public class ScreenDeptEventStatServiceImpl extends BaseServiceImpl + + + \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/screen/ScreenDeptEventStatDao.xml b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/screen/ScreenDeptEventStatDao.xml index e3e01d470..a6eb9e0fa 100644 --- a/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/screen/ScreenDeptEventStatDao.xml +++ b/esua-epdc/epdc-module/epdc-events/epdc-events-server/src/main/resources/mapper/screen/ScreenDeptEventStatDao.xml @@ -68,6 +68,7 @@ SUM(LAW_INCR) LAW_COUNT FROM screen_dept_event_stat WHERE PID = #{deptId} + AND DEPT_LEVEL != 'street_dept' AND STAT_MONTH = #{statDate}