Browse Source

Merge branches 'dev' and 'dev_routine_work' of http://git.elinkit.com.cn:7070/r/epmet-cloud into dev_routine_work

dev_shibei_match
wangxianzhang 4 years ago
parent
commit
5931d46f4a
  1. 29
      .gitignore
  2. 21
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/StaffPatrolRecordDailyResultDTO.java
  3. 18
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/GridMemberDataAnalysisFromDTO.java
  4. 8
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/result/GridMemberDataAnalysisResultDTO.java
  5. 28
      epmet-module/data-aggregator/data-aggregator-server/pom.xml
  6. 55
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/GridMemberDataAnalysisExcelExportBean.java
  7. 164
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovOrgController.java
  8. 22
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/FactGridMemberStatisticsDailyDao.java
  9. 14
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/StatsStaffPatrolRecordDailyDao.java
  10. 5
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/StatsStaffPatrolRecordDailyEntity.java
  11. 29
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/AggreGridService.java
  12. 19
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java
  13. 50
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
  14. 8
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java
  15. 11
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/StatsStaffPatrolRecordDailyService.java
  16. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java
  17. 5
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/StatsStaffPatrolRecordDailyServiceImpl.java
  18. 135
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/AggreGridServiceImpl.java
  19. 66
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/FactGridMemberStatisticsDailyDao.xml
  20. 29
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StatsStaffPatrolRecordDailyDao.xml
  21. 5
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/StatsStaffPatrolRecordDailyDTO.java
  22. 1
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/ProjectConstant.java
  23. 23
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java
  24. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/user/StatsStaffPatrolRecordDailyEntity.java
  25. 47
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java
  26. 11
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java
  27. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/StatsStaffPatrolServiceImpl.java
  28. 13
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java
  29. 2
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/StatsStaffPatrolRecordDailyDao.xml
  30. 10
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml
  31. 5
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueProjectCategoryDictDTO.java
  32. 18
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java
  33. 14
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java
  34. 13
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueProjectCategoryDictController.java
  35. 9
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectCategoryDictDao.java
  36. 3
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueProjectCategoryDictService.java
  37. 15
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectCategoryDictServiceImpl.java
  38. 18
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectCategoryDictDao.xml
  39. 28
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ApprovaledListFromDTO.java
  40. 28
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ApprovaledListResultDTO.java
  41. 19
      epmet-module/gov-project/gov-project-server/pom.xml
  42. 34
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java
  43. 11
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectDao.java
  44. 29
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/excel/ApprovaledListExcel.java
  45. 10
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectCategoryService.java
  46. 10
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectService.java
  47. 22
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java
  48. 27
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectCategoryServiceImpl.java
  49. 25
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  50. 101
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java
  51. 25
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectDao.xml
  52. 45
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/PcWorkListFormDTO.java
  53. 53
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/patrol/PcworkRecordListFormDTO.java
  54. 2
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/PatrolRoutineWorkResult.java
  55. 109
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/PcWorkListResultDTO.java
  56. 50
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/PcworkRecordListResultDTO.java
  57. 29
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/PatrolRoutineWorkController.java
  58. 37
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StaffPatrolController.java
  59. 4
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/PatrolRoutineWorkDao.java
  60. 7
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/StaffPatrolRecordDao.java
  61. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/StatsStaffPatrolRecordDailyEntity.java
  62. 71
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/PcWorkListExport.java
  63. 83
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/StaffPatrolRecordExcel.java
  64. 14
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/PatrolRoutineWorkService.java
  65. 17
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/StaffPatrolRecordService.java
  66. 137
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/PatrolRoutineWorkServiceImpl.java
  67. 107
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StaffPatrolRecordServiceImpl.java
  68. 48
      epmet-user/epmet-user-server/src/main/resources/mapper/PatrolRoutineWorkDao.xml
  69. 33
      epmet-user/epmet-user-server/src/main/resources/mapper/StaffPatrolRecordDao.xml

29
.gitignore

@ -1,29 +0,0 @@
# Created by .ignore support plugin (hsz.mobi)
### Java template
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.idea/
*.iml
target/

21
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/StaffPatrolRecordDailyResultDTO.java

@ -0,0 +1,21 @@
package com.epmet.dataaggre.dto.epmetuser.result;
import lombok.Data;
/**
* @ClassName StaffPatrolRecordDailyResultDTO
* @Description 工作人员巡查记录按日统计查询结果
* @Author wangxianzhang
* @Date 2022/1/4 4:08 下午
*/
@Data
public class StaffPatrolRecordDailyResultDTO {
private String staffId;
private String gridId;
private int patrolTimes;
private int totalTime;
private int patrolRoutineWorkTimes;
}

18
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/GridMemberDataAnalysisFromDTO.java

@ -1,14 +1,18 @@
package com.epmet.dataaggre.dto.govorg.form;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
@Data
public class GridMemberDataAnalysisFromDTO {
public interface listGridMemberDatas {}
public interface listGridMemberDatas4PcWork {}
private List<String> gridIds;
@ -19,4 +23,18 @@ public class GridMemberDataAnalysisFromDTO {
private String sort;
private Integer pageNo = 1;
private Integer pageSize = 10;
@NotBlank(message = "请选择组织", groups = { listGridMemberDatas4PcWork.class })
private String orgId;
@NotBlank(message = "请选择组织类型", groups = { listGridMemberDatas4PcWork.class })
private String orgType;
@DateTimeFormat(pattern = "yyyyMMdd")
@JsonFormat(pattern = "yyyyMMdd")
private Date startTime;
@DateTimeFormat(pattern = "yyyyMMdd")
@JsonFormat(pattern = "yyyyMMdd")
private Date endTime;
}

8
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/result/GridMemberDataAnalysisResultDTO.java

@ -7,9 +7,12 @@ public class GridMemberDataAnalysisResultDTO {
private String gridId;
private String staffId;
private String mobile;
private String staffName;
private String orgName;
//private String gridName;
// 项目议题等
private Integer projectCount;
private Integer issueToProjectCount;
private Integer closedIssueCount;
@ -17,4 +20,9 @@ public class GridMemberDataAnalysisResultDTO {
private Integer projectTransferCount;
private Integer projectClosedCount;
// 巡查
private int patrolTimes;
private int totalTime;
private int patrolRoutineWorkTimes;
}

28
epmet-module/data-aggregator/data-aggregator-server/pom.xml

@ -82,6 +82,34 @@
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.3</version>
<exclusions>
<exclusion>
<artifactId>poi</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
<exclusion>
<artifactId>poi-ooxml</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
<exclusion>
<artifactId>poi-ooxml-schemas</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
<!--<exclusion>
<artifactId>cglib</artifactId>
<groupId>cglib</groupId>
</exclusion>-->
</exclusions>
</dependency>
</dependencies>
<build>

55
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/beans/GridMemberDataAnalysisExcelExportBean.java

@ -0,0 +1,55 @@
package com.epmet.dataaggre.beans;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
/**
* 网格员数据分析excel导出bean
*/
@Getter
@Setter
@EqualsAndHashCode
@ColumnWidth(20)
public class GridMemberDataAnalysisExcelExportBean {
@ExcelProperty(value = {"姓名"})
private String staffName;
@ExcelProperty(value = {"手机号"})
private String mobile;
@ExcelProperty(value = {"所属网格"})
private String orgName;
// 项目议题等
@ExcelProperty(value = {"项目数"})
private Integer projectCount;
@ExcelProperty(value = {"议题转项目数"})
private Integer issueToProjectCount;
@ExcelProperty(value = {"议题关闭数"})
private Integer closedIssueCount;
@ExcelProperty(value = {"项目事件响应数"})
private Integer projectResponseCount;
@ExcelProperty(value = {"项目事件吹哨数"})
private Integer projectTransferCount;
@ExcelProperty(value = {"项目事件结案数"})
private Integer projectClosedCount;
// 巡查
@ExcelProperty(value = {"巡查次数"})
private int patrolTimes;
@ExcelProperty(value = {"巡查时长"})
private int totalTime;
@ExcelProperty(value = {"例行工作次数"})
private int patrolRoutineWorkTimes;
}

164
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovOrgController.java

@ -1,30 +1,49 @@
package com.epmet.dataaggre.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dataaggre.dto.govorg.CustomerAgencyDTO;
import com.epmet.dataaggre.beans.GridMemberDataAnalysisExcelExportBean;
import com.epmet.dataaggre.dto.govorg.CustomerGridDTO;
import com.epmet.dataaggre.dto.govorg.form.*;
import com.epmet.dataaggre.dto.govorg.result.*;
import com.epmet.dataaggre.entity.govorg.CustomerAgencyEntity;
import com.epmet.dataaggre.entity.govorg.CustomerGridEntity;
import com.epmet.dataaggre.enums.GridMemberDataAnalysisEnums;
import com.epmet.dataaggre.service.AggreGridService;
import com.epmet.dataaggre.service.govorg.GovOrgService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
/**
* @Author zxc
@ -32,6 +51,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("org")
@Slf4j
public class GovOrgController {
@Autowired
@ -43,6 +63,24 @@ public class GovOrgController {
@Autowired
private AggreGridService aggreGridService;
/**
* 导出路径
*/
private Path gridMemberStatsExcelExportDir;
{
// 初始化目录
String home = System.getProperty("user.home");
Path importDir = Paths.get(home, "epmet_files", "grid_member_stats_excel_export");
if (Files.notExists(importDir)) {
try {
Files.createDirectories(importDir);
} catch (IOException e) {
log.error("创建导出暂存目录失败");
}
}
gridMemberStatsExcelExportDir = importDir;
}
/**
* @param tokenDTO
@ -201,4 +239,122 @@ public class GovOrgController {
return new Result<CustomerGridDTO>().ok(govOrgService.getGridInfo(gridId));
}
/**
* pc 工作端网格员巡查统计
* @param input
* @return
*/
@PostMapping("pcwork/gridmember-analysis")
public Result getGridMemberAnalysis4PcWork(@RequestBody GridMemberDataAnalysisFromDTO input) {
ValidatorUtils.validateEntity(input, GridMemberDataAnalysisFromDTO.listGridMemberDatas4PcWork.class);
String orgId = input.getOrgId();
Date startTime = input.getStartTime();
Date endTime = input.getEndTime();
Integer pageNo = input.getPageNo();
Integer pageSize = input.getPageSize();
String orgType = input.getOrgType();
PageData<GridMemberDataAnalysisResultDTO> page = aggreGridService.getGridMemberDataAnalysis4PcWork(orgId, orgType, pageNo, pageSize, startTime, endTime, true);
return new Result().ok(page);
}
/**
* pc 工作端网格员巡查统计导出excel
* @param input
* @return
*/
@PostMapping("pcwork/gridmember-analysis/export")
public void exportGridMemberAnalysis4PcWork(@RequestBody GridMemberDataAnalysisFromDTO input, HttpServletResponse response) {
ValidatorUtils.validateEntity(input, GridMemberDataAnalysisFromDTO.listGridMemberDatas4PcWork.class);
String orgId = input.getOrgId();
Date startTime = input.getStartTime();
Date endTime = input.getEndTime();
String orgType = input.getOrgType();
// 缓存路径
String tempFileName = UUID.randomUUID().toString().concat(".xlsx");
Path tempFilePath = gridMemberStatsExcelExportDir.resolve(tempFileName);
log.info("工作统计excel文件下载路径:{}", tempFilePath.toString());
ExcelWriter excelWriter = null;
// 组织名称
AtomicReference<String> orgName = new AtomicReference<>("");
if ("grid".equals(orgType)) {
CustomerGridDTO gridInfo = govOrgService.getGridInfo(orgId);
Optional.ofNullable(gridInfo).ifPresent((g) -> orgName.set(g.getGridName()));
} else if ("agency".equals(orgType)) {
CustomerAgencyEntity agencyInfo = govOrgService.getAgencyInfo(orgId);
Optional.ofNullable(agencyInfo).ifPresent((a) -> orgName.set(a.getOrganizationName()));
}
// sheet名
String sheetName = getSheetName(orgName.get(), startTime, endTime);
// 分页导出到缓存excel
try {
excelWriter = EasyExcel.write(tempFilePath.toString(), GridMemberDataAnalysisExcelExportBean.class).build();
// 这里注意 如果同一个sheet只要创建一次
WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).build();
PageData<GridMemberDataAnalysisResultDTO> page;
int pageNo = 0;
int pageSize = 1000;
do {
page = aggreGridService.getGridMemberDataAnalysis4PcWork(orgId, orgType, pageNo, pageSize, startTime, endTime, false);
List<GridMemberDataAnalysisResultDTO> pageList = page.getList();
List<GridMemberDataAnalysisExcelExportBean> exportBeans = ConvertUtils.sourceToTarget(pageList, GridMemberDataAnalysisExcelExportBean.class);
excelWriter.write(exportBeans, writeSheet);
} while (page.getList().size() == pageSize);
} catch (Exception e) {
e.printStackTrace();
log.error("【PC工作端网格员数据统计导出】生成excel失败:{}", ExceptionUtils.getErrorStackTrace(e));
} finally {
// 关闭流
Optional.ofNullable(excelWriter).ifPresent((i) -> i.finish());
}
// 开始下载缓存excel到客户端,然后删除缓存文件
try {
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(sheetName.concat(".xlsx"), "UTF-8"));
IOUtils.copy(new FileInputStream(tempFilePath.toString()), response.getOutputStream());
} catch (Exception e) {
log.error(ExceptionUtils.getErrorStackTrace(e));
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "【下载工作统计信息】下载失败");
} finally {
try {
Files.delete(tempFilePath);
} catch (IOException e) {
log.error(ExceptionUtils.getErrorStackTrace(e));
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "【下载工作统计信息】删除缓存文件失败");
}
}
}
private String getSheetName(String orgName, Date startTime, Date endTime) {
StringBuilder sb = new StringBuilder(orgName);
String s = orgName;
if (startTime == null && endTime != null) {
sb.append("截止").append(DateUtils.format(endTime, DateUtils.DATE_PATTERN));
} else if (startTime != null && endTime != null) {
sb.append(DateUtils.format(startTime, DateUtils.DATE_PATTERN))
.append("至")
.append(DateUtils.format(endTime, DateUtils.DATE_PATTERN))
.append("区间新增值");
}
sb.append("的工作统计");
return sb.toString();
}
}

22
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/FactGridMemberStatisticsDailyDao.java

@ -52,4 +52,26 @@ public interface FactGridMemberStatisticsDailyDao extends BaseDao<FactGridMember
* @date 2021.07.05 16:17
*/
GridMemberDataAnalysisResultDTO getGridMemberIssueProjectStats(@Param("staffId") String staffId);
/**
* 查询截止日期的网格员数据统计累计值
* @param pids
* @param endDateID
* @return
*/
List<GridMemberDataAnalysisResultDTO> listGridMemberDataStatsAccumulate(@Param("pids") String pids,
@Param("gridId") String gridId,
@Param("endDateID") String endDateID);
/**
* 按照时间段查询网格员数据统计增量值
* @param pids
* @param startDateID
* @param endDateID
* @return
*/
List<GridMemberDataAnalysisResultDTO> listGridMemberDataStatsIncr(@Param("pids") String pids,
@Param("gridId") String gridId,
@Param("startDateID") String startDateID,
@Param("endDateID") String endDateID);
}

14
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/StatsStaffPatrolRecordDailyDao.java

@ -22,6 +22,7 @@ import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dataaggre.dto.datastats.form.CustomerDataManageFormDTO;
import com.epmet.dataaggre.dto.datastats.result.CustomerDataManageResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PatrolDailySumResult;
import com.epmet.dataaggre.dto.epmetuser.result.StaffPatrolRecordDailyResultDTO;
import com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -51,4 +52,17 @@ public interface StatsStaffPatrolRecordDailyDao extends BaseDao<StatsStaffPatrol
* @author sun
*/
List<CustomerDataManageResultDTO.CustomerDataManage> patrolList(CustomerDataManageFormDTO formDTO);
/**
* 工作人员巡查记录按日统计查询
* @param userIds
* @param startDateID
* @param endDateID
* @return
*/
List<StaffPatrolRecordDailyResultDTO> listStaffPatrolRecordDailyAnalysis(@Param("gridPids") String gridPids,
@Param("gridId") String gridId,
@Param("userIds") List<String> userIds,
@Param("startDateId") String startDateID,
@Param("endDateID") String endDateID);
}

5
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/StatsStaffPatrolRecordDailyEntity.java

@ -122,4 +122,9 @@ public class StatsStaffPatrolRecordDailyEntity extends BaseEpmetEntity {
*/
private String latestPatrolStatus;
/**
* 例行工作次数
*/
private Integer routineWorkCount;
}

29
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/AggreGridService.java

@ -1,7 +1,10 @@
package com.epmet.dataaggre.service;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO;
import com.sun.org.apache.xpath.internal.operations.Bool;
import java.util.Date;
import java.util.List;
/**
@ -16,5 +19,29 @@ public interface AggreGridService {
* @author wxz
* @date 2021.07.05 11:17
*/
List<GridMemberDataAnalysisResultDTO> getGridMemberDataAnalysis(List<String> gridIds, String searchedStaffName, String currStaffId, String month, String sort, Integer pageNo, Integer pageSize);
List<GridMemberDataAnalysisResultDTO> getGridMemberDataAnalysis(List<String> gridIds,
String searchedStaffName,
String currStaffId,
String month,
String sort,
Integer pageNo,
Integer pageSize);
/**
* 网格员巡查统计查询 pcwork端
* @param orgId 组织id
* @param orgType 组织类型agency,grid
* @param pageNo
* @param pageSize
* @param startTime
* @param endTime
* @return
*/
PageData<GridMemberDataAnalysisResultDTO> getGridMemberDataAnalysis4PcWork(String orgId,
String orgType,
Integer pageNo,
Integer pageSize,
Date startTime,
Date endTime,
Boolean needCount);
}

19
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java

@ -13,6 +13,7 @@ import com.epmet.dataaggre.dto.resigroup.result.GroupActRankDetailDTO;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
/**
@ -260,4 +261,22 @@ public interface DataStatsService {
* @author sun
*/
List<FactAgencyProjectMonthResultDTO> getProjectMonthIncr(ProjectTotalFormDTO formDTO);
/**
* 查询网格员项目统计数据4 pcwork
* @param pids 组织PIDS
* @param pageNo
* @param pageSize
* @param startDateID 查询起始时间匹配统计表的dateId列
* @param endDateID 查询结束时间匹配统计表的dateId列
* @param needCount 是否需要查询Count分页查询需要导出excel不需要
* @return
*/
List<GridMemberDataAnalysisResultDTO> getGridMemberIssueProjectStats4PcWork(String pids,
String gridId,
Integer pageNo,
Integer pageSize,
String startDateID,
String endDateID,
Boolean needCount);
}

50
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java

@ -3,9 +3,12 @@
import com.alibaba.fastjson.JSON;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.OrgLevelEnum;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.enums.OrgLevelEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.dataaggre.constant.DataSourceConstant;
@ -29,12 +32,16 @@ import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO;
import com.epmet.dataaggre.dto.resigroup.result.GroupActRankDetailDTO;
import com.epmet.dataaggre.entity.datastats.DimAgencyEntity;
import com.epmet.dataaggre.entity.datastats.FactAgencyGovernDailyEntity;
import com.epmet.dataaggre.excel.CustomerDataManageExcel;
import com.epmet.dataaggre.entity.govorg.CustomerAgencyEntity;
import com.epmet.dataaggre.excel.CustomerDataManageExcel;
import com.epmet.dataaggre.service.datastats.DataStatsService;
import com.epmet.dataaggre.service.epmetuser.StatsStaffPatrolRecordDailyService;
import com.epmet.dataaggre.service.evaluationindex.EvaluationIndexService;
import com.epmet.dataaggre.service.opercrm.CustomerRelation;
import com.github.pagehelper.PageHelper;
import com.epmet.dataaggre.service.govorg.GovOrgService;
import com.epmet.dataaggre.service.opercrm.CustomerRelation;
import com.epmet.dto.CustomerAgencyDTO;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -59,7 +66,7 @@ import java.util.stream.Collectors;
@Service
@DataSource(DataSourceConstant.DATA_STATISTICAL)
@Slf4j
public class DataStatsServiceImpl implements DataStatsService {
public class DataStatsServiceImpl implements DataStatsService, ResultDataResolver {
@Autowired
private DataStatsDao dataStatsDao;
@Autowired
@ -71,7 +78,8 @@ public class DataStatsServiceImpl implements DataStatsService {
private FactGridMemberStatisticsDailyDao factGridMemberStatisticsDailyDao;
@Autowired
private StatsStaffPatrolRecordDailyService statsStaffPatrolRecordDailyService;
@Autowired
private GovOrgService govOrgService;
/**
* @Param formDTO
@ -2141,5 +2149,29 @@ public class DataStatsServiceImpl implements DataStatsService {
return dataStatsDao.getProjectMonthIncr(formDTO);
}
@Override
public List<GridMemberDataAnalysisResultDTO> getGridMemberIssueProjectStats4PcWork(String pids,
String gridId,
Integer pageNo,
Integer pageSize,
String startDateID,
String endDateID,
Boolean needCount) {
//boolean isStartDateIdBlank = StringUtils.isBlank(startDateID);
//boolean isEndDateIdBlank = StringUtils.isBlank(endDateID);
//
//if (isStartDateIdBlank && !isEndDateIdBlank) {
// // 查询截止时间的累计值,直接查询表里的total即可
// PageHelper.startPage(pageNo, pageSize, needCount);
// return factGridMemberStatisticsDailyDao.listGridMemberDataStatsAccumulate(pids, gridId, endDateID);
//} else if (!isStartDateIdBlank && !isEndDateIdBlank) {
// // 查询时间段内的增量,需要使用表中的增量列计算
// return factGridMemberStatisticsDailyDao.listGridMemberDataStatsIncr(pids, gridId, startDateID, endDateID);
//} else {
// throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "【pcwork查询网格员数据统计列表】传入时间条件有误");
//}
return factGridMemberStatisticsDailyDao.listGridMemberDataStatsIncr(pids, gridId, startDateID, endDateID);
}
}

8
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java

@ -6,6 +6,7 @@ import com.epmet.dataaggre.dto.govorg.form.OrgStaffListFormDTO;
import com.epmet.dataaggre.dto.govorg.form.StaffDetailV2FormDTO;
import com.epmet.dataaggre.dto.govorg.result.GridStaffResultDTO;
import com.epmet.dataaggre.dto.govproject.result.ProjectAnalysisResultDTO;
import com.epmet.dataaggre.entity.epmetuser.CustomerStaffEntity;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.UserBaseInfoDTO;
@ -167,4 +168,11 @@ public interface EpmetUserService {
* @author sun
*/
List<ProjectAnalysisResultDTO.Home> getHomeUserList(String homeId, String icUserId);
/**
* 使用staffId批量查询staff信息
* @param userIdsPart
* @return
*/
List<CustomerStaffEntity> listStaffsByIds(List<String> userIdsPart);
}

11
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/StatsStaffPatrolRecordDailyService.java

@ -21,6 +21,7 @@ import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.dataaggre.dto.datastats.form.CustomerDataManageFormDTO;
import com.epmet.dataaggre.dto.datastats.result.CustomerDataManageResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PatrolDailySumResult;
import com.epmet.dataaggre.dto.epmetuser.result.StaffPatrolRecordDailyResultDTO;
import com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity;
import java.util.List;
@ -47,4 +48,14 @@ public interface StatsStaffPatrolRecordDailyService extends BaseService<StatsSta
* @author sun
*/
List<CustomerDataManageResultDTO.CustomerDataManage> patrolList(CustomerDataManageFormDTO formDTO);
/**
* 查询工作人员巡查记录按日统计
* @param gridPids 记录所属的网格的pids
* @param userIds
* @param startDateID
* @param endDateID
* @return
*/
List<StaffPatrolRecordDailyResultDTO> listStaffPatrolRecordDailyAnalysis(String gridPids, String gridId, List<String> userIds, String startDateID, String endDateID);
}

6
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java

@ -735,5 +735,11 @@ public class EpmetUserServiceImpl implements EpmetUserService {
return icResiUserDao.getHomeUserList(homeId, icUserId);
}
@Override
public List<CustomerStaffEntity> listStaffsByIds(List<String> userIds) {
LambdaQueryWrapper<CustomerStaffEntity> query = new LambdaQueryWrapper<>();
query.in(CustomerStaffEntity::getUserId, userIds);
return customerStaffDao.selectList(query);
}
}

5
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/StatsStaffPatrolRecordDailyServiceImpl.java

@ -7,6 +7,7 @@ import com.epmet.dataaggre.dao.epmetuser.StatsStaffPatrolRecordDailyDao;
import com.epmet.dataaggre.dto.datastats.form.CustomerDataManageFormDTO;
import com.epmet.dataaggre.dto.datastats.result.CustomerDataManageResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PatrolDailySumResult;
import com.epmet.dataaggre.dto.epmetuser.result.StaffPatrolRecordDailyResultDTO;
import com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity;
import com.epmet.dataaggre.service.epmetuser.StatsStaffPatrolRecordDailyService;
import lombok.extern.slf4j.Slf4j;
@ -47,4 +48,8 @@ public class StatsStaffPatrolRecordDailyServiceImpl extends BaseServiceImpl<Stat
return baseDao.patrolList(formDTO);
}
@Override
public List<StaffPatrolRecordDailyResultDTO> listStaffPatrolRecordDailyAnalysis(String gridPids, String gridId, List<String> userIds, String startDateID, String endDateID) {
return baseDao.listStaffPatrolRecordDailyAnalysis(gridPids, gridId, userIds, startDateID, endDateID);
}
}

135
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/AggreGridServiceImpl.java

@ -1,18 +1,28 @@
package com.epmet.dataaggre.service.impl;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dataaggre.dto.epmetuser.result.StaffPatrolRecordDailyResultDTO;
import com.epmet.dataaggre.dto.govorg.CustomerGridDTO;
import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO;
import com.epmet.dataaggre.entity.epmetuser.CustomerStaffEntity;
import com.epmet.dataaggre.entity.govorg.CustomerAgencyEntity;
import com.epmet.dataaggre.service.AggreGridService;
import com.epmet.dataaggre.service.datastats.DataStatsService;
import com.epmet.dataaggre.service.epmetuser.EpmetUserService;
import com.epmet.dataaggre.service.epmetuser.StatsStaffPatrolRecordDailyService;
import com.epmet.dataaggre.service.govorg.GovOrgService;
import org.apache.commons.collections4.CollectionUtils;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@ -24,6 +34,12 @@ public class AggreGridServiceImpl implements AggreGridService {
@Autowired
private DataStatsService dataStatsService;
@Autowired
private StatsStaffPatrolRecordDailyService statsStaffPatrolRecordDailyService;
@Autowired
private EpmetUserService epmetUserService;
@Override
public List<GridMemberDataAnalysisResultDTO> getGridMemberDataAnalysis(
List<String> gridIds,
@ -48,4 +64,113 @@ public class AggreGridServiceImpl implements AggreGridService {
return records;
}
@Override
public PageData<GridMemberDataAnalysisResultDTO> getGridMemberDataAnalysis4PcWork(String orgId,
String orgType,
Integer pageNo,
Integer pageSize,
Date startTime,
Date endTime,
Boolean needCount) {
// 计算出开始dateId和结束endId
String startDateID = DateUtils.format(startTime, DateUtils.DATE_PATTERN_YYYYMMDD);
String endDateID = DateUtils.format(endTime, DateUtils.DATE_PATTERN_YYYYMMDD);
// 根据orgType判断是使用agency的pids还是直接使用gridId作为条件
String pids = null;
String gridId = null;
if ("grid".equals(orgType)) {
gridId = orgId;
} else if ("agency".equals(orgType)) {
pids = getPidsByAgencyId(orgId);
} else {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "组织类型不支持");
}
// 一.查询网格员数据统计相关信息
List<GridMemberDataAnalysisResultDTO> datas = dataStatsService.getGridMemberIssueProjectStats4PcWork(pids, gridId, pageNo, pageSize, startDateID, endDateID, needCount);
long total = new PageInfo<>(datas).getTotal();
// 二.匹配用户巡查,例行工作数据
int partSize = 100;
// 将数据列表结构化 <staffId:<gridId:data>>
HashMap<String, Map<String, GridMemberDataAnalysisResultDTO>> structedData = new HashMap<>();
for (GridMemberDataAnalysisResultDTO data : datas) {
// 填充gridName
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(data.getGridId());
Optional.ofNullable(gridInfo).ifPresent((d) -> data.setOrgName(d.getGridName()));
// 生成结构化map
Map<String, GridMemberDataAnalysisResultDTO> gridAndData = structedData.get(data.getStaffId());
if (gridAndData == null) {
HashMap<String, GridMemberDataAnalysisResultDTO> gat = new HashMap<>();
gat.put(data.getGridId(), data);
structedData.put(data.getStaffId(), gat);
} else {
Map<String, GridMemberDataAnalysisResultDTO> gat = structedData.get(data.getStaffId());
gat.put(data.getGridId(), data);
}
}
ArrayList<String> userIds = new ArrayList<>(structedData.keySet());
// 分片
List<List<String>> userIdsParts = Lists.partition(userIds, partSize);
for (List<String> userIdsPart : userIdsParts) {
// 批量查询出用户信息
List<CustomerStaffEntity> staffInfos = epmetUserService.listStaffsByIds(userIdsPart);
//Map<String, CustomerStaffEntity> staffIdAndStaffInfo = staffInfos.stream().collect(Collectors.toMap((s) -> s.getUserId(), Function.identity()));
for (CustomerStaffEntity staffInfo : staffInfos) {
Map<String, GridMemberDataAnalysisResultDTO> gridAndData = structedData.get(staffInfo.getUserId());
if (gridAndData != null) {
gridAndData.forEach((k, v) -> v.setMobile(staffInfo.getMobile()));
}
}
// 批量查询出巡查信息
List<StaffPatrolRecordDailyResultDTO> patrolDatas = statsStaffPatrolRecordDailyService.listStaffPatrolRecordDailyAnalysis(pids, gridId, userIdsPart, startDateID, endDateID);
for (StaffPatrolRecordDailyResultDTO d : patrolDatas) {
Map<String, GridMemberDataAnalysisResultDTO> gridAndData = structedData.get(d.getStaffId());
if (gridAndData != null) {
GridMemberDataAnalysisResultDTO data = gridAndData.get(d.getGridId());
if (data != null) {
data.setPatrolTimes(d.getPatrolTimes());
data.setTotalTime(d.getTotalTime());
data.setPatrolRoutineWorkTimes(d.getPatrolRoutineWorkTimes());
}
}
}
}
return new PageData<>(datas, total);
}
/**
* 使用agencyId,获取pidsagencyPids:agencyId
* @param agencyId
* @return
*/
private String getPidsByAgencyId(String agencyId) {
CustomerAgencyEntity agencyInfo = govOrgService.getAgencyInfo(agencyId);
if (agencyInfo == null) {
String errorMsg = "【网格员数据统计查询pcwork】查询组织信息返回为null";
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), errorMsg, errorMsg);
}
String pidsAndAgencyIdPath = agencyInfo.getPids().concat(":").concat(agencyId);
if (pidsAndAgencyIdPath.startsWith(":")) {
pidsAndAgencyIdPath = pidsAndAgencyIdPath.replaceFirst(":", "");
}
return pidsAndAgencyIdPath;
}
}

66
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/FactGridMemberStatisticsDailyDao.xml

@ -131,5 +131,71 @@
and member.DEL_FLAG = 0
</select>
<select id="listGridMemberDataStatsAccumulate"
resultType="com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO">
select member.id,
member.date_id,
member.month_id,
member.year_id,
member.customer_id,
member.agency_id,
member.grid_id,
member.pid,
member.pids,
member.staff_id,
member.staff_name,
member.PROJECT_COUNT project_count,
member.ISSUE_TO_PROJECT_COUNT issue_to_project_count,
member.CLOSED_ISSUE_COUNT closed_issue_count,
member.PROJECT_RESPONSE_COUNT project_response_count,
member.PROJECT_TRANSFER_COUNT project_transfer_count,
member.CLOSED_ISSUE_COUNT project_closed_count
from fact_grid_member_statistics_daily member
inner join (
select max(gms.DATE_ID) dateId from fact_grid_member_statistics_daily gms where gms.DATE_ID <![CDATA[<]]> #{endDateID} and gms.DEL_FLAG = '0'
) dim on (member.DATE_ID = dim.dateId)
where
member.DEL_FLAG = '0'
<if test="pids != null and pids != ''">
AND member.PIDS like CONCAT(#{pids}, '%')
</if>
<if test="gridId != null and gridId != ''">
AND member.GRID_ID = #{gridId}
</if>
order by convert(member.staff_name using gbk) asc, member.GRID_ID asc
</select>
<select id="listGridMemberDataStatsIncr"
resultType="com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO">
select member.grid_id,
member.staff_id,
member.STAFF_NAME,
sum(member.project_incr) project_count,
sum(member.issue_to_project_incr) issue_to_project_count,
sum(member.closed_issue_incr) closed_issue_count,
sum(member.project_response_incr) project_response_count,
sum(member.project_transfer_incr) project_transfer_count,
sum(member.project_closed_incr) project_closed_count
from fact_grid_member_statistics_daily member
where
member.DEL_FLAG = '0'
<if test="pids != null and pids != ''">
AND member.PIDS like CONCAT(#{pids}, '%')
</if>
<if test="gridId != null and gridId != ''">
AND member.GRID_ID = #{gridId}
</if>
<if test="startDateID != null and startDateID!=''">
and member.DATE_ID >= #{startDateID}
</if>
<if test="endDateID != null and endDateID != ''">
and member.DATE_ID <![CDATA[<=]]> #{endDateID}
</if>
group by member.grid_id,
member.staff_id,
member.STAFF_NAME
order by convert(member.staff_name using gbk) asc, member.GRID_ID asc
</select>
</mapper>

29
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StatsStaffPatrolRecordDailyDao.xml

@ -57,4 +57,33 @@
GROUP BY t.grid_id, t.staffId
</select>
<select id="listStaffPatrolRecordDailyAnalysis"
resultType="com.epmet.dataaggre.dto.epmetuser.result.StaffPatrolRecordDailyResultDTO">
select sprd.STAFF_ID,
sprd.GRID_ID,
sum(PATROL_TOTAL) as patrol_times,
sum(TOTAL_TIME) as total_time,
sum(ROUTINE_WORK_COUNT) as patrol_routine_work_times
from stats_staff_patrol_record_daily sprd
where
sprd.DEL_FLAG = '0'
<if test="gridId != null and gridId != ''">
and sprd.GRID_ID=#{gridId}
</if>
<if test="gridPids != null and gridPids != ''">
and sprd.GRID_PIDS like CONCAT(#{gridPids}, '%')
</if>
and sprd.STAFF_ID in
<foreach collection="userIds" open="(" item="userId" separator="," close=")">
#{userId}
</foreach>
<if test="startDateId != null and startDateId != ''">
and sprd.DATE_ID >= #{startDateId}
</if>
and sprd.DATE_ID <![CDATA[<=]]> #{endDateID}
group by
sprd.STAFF_ID,
sprd.GRID_ID
</select>
</mapper>

5
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/StatsStaffPatrolRecordDailyDTO.java

@ -124,6 +124,11 @@ public class StatsStaffPatrolRecordDailyDTO implements Serializable {
*/
private String latestPatrolStatus;
/**
* 例行工作次数
*/
private Integer routineWorkCount;
/**
* 删除标识 0.未删除 1.已删除
*/

1
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/ProjectConstant.java

@ -81,6 +81,7 @@ public interface ProjectConstant {
* 项目来源于 工作端立项
*/
String PROJECT_ORIGIN_AGENCY="agency";
String PROJECT_ORIGIN_EVENT="resi_event";
/**
* 自办

23
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java

@ -3,6 +3,7 @@ package com.epmet.dao.user;
import com.epmet.dto.extract.form.GridHeartedFormDTO;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.extract.result.UserPartyResultDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.screen.ScreenProjectDataDTO;
import com.epmet.dto.stats.form.GmUploadEventFormDTO;
import com.epmet.dto.user.form.StaffBaseInfoFormDTO;
@ -35,14 +36,14 @@ public interface UserDao {
CommonTotalAndIncCountResultDTO selectResiTotalAndIncrByLevel(@Param("regOrPartiFlag") String regOrPartiFlag, @Param("gridIds") Set<String> gridIds, @Param("targetDate") Date targetDate);
/**
* @Description 查询注册用户的总量与增量新方法
* @Description 查询注册用户的总量与增量新方法
* @Param regOrPartiFlag
* @Param gridIds
* @Param targetDate
* @author zxc
* @date 2021/7/27 10:20 上午
*/
List<TotalAndIncrResultDTO> selectResiTotalAndIncrByGridIds(@Param("regOrPartiFlag") String regOrPartiFlag, @Param("gridIds") Set<String> gridIds, @Param("targetDate") Date targetDate,@Param("startDate")Date startDate);
List<TotalAndIncrResultDTO> selectResiTotalAndIncrByGridIds(@Param("regOrPartiFlag") String regOrPartiFlag, @Param("gridIds") Set<String> gridIds, @Param("targetDate") Date targetDate, @Param("startDate") Date startDate);
/**
* @param
@ -54,13 +55,13 @@ public interface UserDao {
CommonTotalAndIncCountResultDTO selectPartyTotalAndIncr(@Param("userIds") List<String> userIds, @Param("incrUserIds") List<String> incrUserIds, @Param("targetDate") Date targetDate);
/**
* @Description 查询党员的总量与增量新方法
* @Description 查询党员的总量与增量新方法
* @Param targetDate
* @Param regOrPartiFlag
* @author zxc
* @date 2021/7/27 5:08 下午
*/
List<PartyTotalAndIncrResultDTO> selectPartyTotalAndIncrNew(@Param("targetDate") Date targetDate,@Param("regOrPartiFlag") String regOrPartiFlag,@Param("startDate") Date startDate);
List<PartyTotalAndIncrResultDTO> selectPartyTotalAndIncrNew(@Param("targetDate") Date targetDate, @Param("regOrPartiFlag") String regOrPartiFlag, @Param("startDate") Date startDate);
/**
* @param
@ -72,7 +73,7 @@ public interface UserDao {
CommonTotalAndIncCountResultDTO selectWarmTotalAndIncr(@Param("userIds") List<String> userIds, @Param("incrUserIds") List<String> incrUserIds, @Param("gridIds") Set<String> gridIds, @Param("targetDate") Date targetDate);
/**
* @Description 查询热心居民的总量与增量新方法
* @Description 查询热心居民的总量与增量新方法
* @Param userIds 总注册用户
* @Param incrUserIds 增长注册用户
* @Param gridIds 网格IDS
@ -81,7 +82,7 @@ public interface UserDao {
* @date 2021/7/27 1:31 下午
*/
List<WarmTotalAndIncrResultDTO> selectWarmTotalAndIncrByGrids(@Param("userIds") List<String> userIds, @Param("incrDailyUserIds") List<String> incrDailyUserIds, @Param("gridIds") Set<String> gridIds,
@Param("targetDate") Date targetDate,@Param("startDate") Date startDate,@Param("incrMonthlyUserIds") List<String> incrMonthlyUserIds);
@Param("targetDate") Date targetDate, @Param("startDate") Date startDate, @Param("incrMonthlyUserIds") List<String> incrMonthlyUserIds);
/**
* @param
@ -102,7 +103,7 @@ public interface UserDao {
List<String> selectTotalUserIds(@Param("regOrPartiFlag") String regOrPartiFlag, @Param("gridIds") Set<String> gridIds, @Param("targetDate") Date targetDate);
/**
* @Description 查询指定网格范围下单位时间内新增的注册用户Id新方法
* @Description 查询指定网格范围下单位时间内新增的注册用户Id新方法
* @Param regOrPartiFlag
* @Param gridIds
* @Param targetDate
@ -110,10 +111,10 @@ public interface UserDao {
* @date 2021/7/27 10:41 上午
*/
List<IncrAndTotalUserIdsResultDTO> selectIncrUserIdsByGrids(@Param("regOrPartiFlag") String regOrPartiFlag, @Param("gridIds") Set<String> gridIds, @Param("targetDate") Date targetDate,
@Param("startDate")Date startDate);
@Param("startDate") Date startDate);
/**
* @Description 查询指定网格范围下单位时间内全部的注册用户Id新方法
* @Description 查询指定网格范围下单位时间内全部的注册用户Id新方法
* @Param regOrPartiFlag
* @Param gridIds
* @Param targetDate
@ -141,7 +142,7 @@ public interface UserDao {
Integer selectResiIncrWithinTimeRange(@Param("regOrPartiFlag") String regOrPartiFlag, @Param("gridIds") Set<String> gridIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
/**
* @Description 查询指定时间范围内注册/参与用户增量新方法
* @Description 查询指定时间范围内注册/参与用户增量新方法
* @Param regOrPartiFlag
* @Param gridIds
* @Param startDate
@ -266,5 +267,7 @@ public interface UserDao {
List<MidPatrolDetailResult> getPatrolDetailList(MidPatrolFormDTO formDTO);
List<String> filterUserIds(@Param("userIds") List<String> userIds, @Param("roleKey") String roleKey);
List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(@Param("customerId") String customerId, @Param("dateId") String dateId);
}

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/user/StatsStaffPatrolRecordDailyEntity.java

@ -123,5 +123,10 @@ public class StatsStaffPatrolRecordDailyEntity extends BaseEpmetEntity {
*/
private String latestPatrolStatus;
/**
* 例行工作次数
*/
private Integer routineWorkCount;
}

47
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java

@ -9,6 +9,7 @@ import com.epmet.constant.ProjectConstant;
import com.epmet.dto.ProjectDTO;
import com.epmet.dto.extract.form.BizDataFormDTO;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.user.result.CustomerGridStaffDTO;
import com.epmet.dto.user.result.CustomerStaffDTO;
import com.epmet.dto.user.result.StaffPatrolRecordResult;
@ -135,25 +136,29 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
//获取昨日的立项项目数
List<ProjectDTO> yesterdayProjectList = projectService.selectProjectListByDateId(formDTO.getCustomerId(), formDTO.getDateId(), ProjectConstant.PROJECT_ORIGIN_AGENCY);
//获取昨日的例行工作数据
List<PatrolRoutineWorkResult> yesterdayWorkList = userService.selectRoutineWorkListByDateId(formDTO.getCustomerId(), formDTO.getDateId());
//遍历网格员 设置其 巡查次数 巡查时常 上报项目数
yesterdayPatrolList.forEach(patrolRecord -> {
String key = patrolRecord.getGrid().concat(patrolRecord.getStaffId());
StatsStaffPatrolRecordDailyDTO patrolRecordDailyDTO = yesterdayStatsMap.get(key);
if (patrolRecordDailyDTO != null) {
long total = (patrolRecord.getPatrolEndTime().getTime() - patrolRecord.getPatrolStartTime().getTime()) / 1000;
if (patrolRecordDailyDTO.getTotalTime() == null) {
patrolRecordDailyDTO.setTotalTime(NumConstant.ZERO);
}
patrolRecordDailyDTO.setTotalTime(patrolRecordDailyDTO.getTotalTime() + (int) total);
if (patrolRecordDailyDTO.getPatrolTotal() == null) {
patrolRecordDailyDTO.setPatrolTotal(NumConstant.ZERO);
}
patrolRecordDailyDTO.setPatrolTotal(patrolRecordDailyDTO.getPatrolTotal() + NumConstant.ONE);
//如果巡查记录时间小于统计里的最新的时间 则更新
if (patrolRecordDailyDTO.getLatestPatrolTime() == null || patrolRecordDailyDTO.getLatestPatrolTime().getTime() < patrolRecord.getPatrolStartTime().getTime()) {
patrolRecordDailyDTO.setLatestPatrolTime(patrolRecord.getPatrolStartTime());
patrolRecordDailyDTO.setLatestPatrolStatus(patrolRecord.getStatus());
}
if (patrolRecordDailyDTO == null) {
return;
}
long total = (patrolRecord.getPatrolEndTime().getTime() - patrolRecord.getPatrolStartTime().getTime()) / NumConstant.ONE_THOUSAND;
if (patrolRecordDailyDTO.getTotalTime() == null) {
patrolRecordDailyDTO.setTotalTime(NumConstant.ZERO);
}
patrolRecordDailyDTO.setTotalTime(patrolRecordDailyDTO.getTotalTime() + (int) total);
if (patrolRecordDailyDTO.getPatrolTotal() == null) {
patrolRecordDailyDTO.setPatrolTotal(NumConstant.ZERO);
}
patrolRecordDailyDTO.setPatrolTotal(patrolRecordDailyDTO.getPatrolTotal() + NumConstant.ONE);
//如果巡查记录时间小于统计里的最新的时间 则更新
if (patrolRecordDailyDTO.getLatestPatrolTime() == null || patrolRecordDailyDTO.getLatestPatrolTime().getTime() < patrolRecord.getPatrolStartTime().getTime()) {
patrolRecordDailyDTO.setLatestPatrolTime(patrolRecord.getPatrolStartTime());
patrolRecordDailyDTO.setLatestPatrolStatus(patrolRecord.getStatus());
}
});
//填充项目数
@ -171,10 +176,19 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
return;
}
recordDailyDTO.setReportProjectCount(recordDailyDTO.getReportProjectCount() + 1);
recordDailyDTO.setReportProjectCount(recordDailyDTO.getReportProjectCount() + NumConstant.ONE);
}
});
});
yesterdayWorkList.forEach(work->{
String key = work.getGridId().concat(work.getUserId());
StatsStaffPatrolRecordDailyDTO patrolRecordDailyDTO = yesterdayStatsMap.get(key);
if (patrolRecordDailyDTO == null){
return;
}
patrolRecordDailyDTO.setRoutineWorkCount(patrolRecordDailyDTO.getRoutineWorkCount() + NumConstant.ONE);
});
Integer effectRow = statsStaffPatrolService.delAndInsertBatch(formDTO, insertList);
log.debug("initStaffPatrolStats insert rows:{}", effectRow);
@ -234,6 +248,7 @@ public class BizDataStatsServiceImpl implements BizDataStatsService {
record.setPatrolTotal(NumConstant.ZERO);
record.setLatestPatrolStatus("end");
record.setReportProjectCount(NumConstant.ZERO);
record.setRoutineWorkCount(NumConstant.ZERO);
record.setSourceType("internal");
record.setSourceCustomerId(record.getCustomerId());

11
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java

@ -4,6 +4,7 @@ import com.epmet.dto.AgencySubTreeDto;
import com.epmet.dto.extract.form.GridHeartedFormDTO;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.org.result.OrgStaffDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.screen.ScreenProjectDataDTO;
import com.epmet.dto.stats.form.GmUploadEventFormDTO;
import com.epmet.dto.stats.user.result.UserStatisticalData;
@ -146,6 +147,14 @@ public interface UserService {
List<MidPatrolRecordResult> getPatrolRecordList(MidPatrolFormDTO formDTO);
List<MidPatrolDetailResult> getPatrolDetailList(MidPatrolFormDTO formDTO);
List<String> filterUserIds(List<String> userIds, String roleKey);
/**
* desc:根据客户id和日期获取 例行工作数据
* @param customerId
* @param dateId
* @return
*/
List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(String customerId, String dateId);
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/StatsStaffPatrolServiceImpl.java

@ -13,6 +13,7 @@ import com.epmet.service.user.StatsStaffPatrolService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -30,6 +31,7 @@ public class StatsStaffPatrolServiceImpl implements StatsStaffPatrolService {
@Autowired
private StatsStaffPatrolRecordDailyDao statsStaffPatrolRecordDailyDao;
@Transactional(rollbackFor = Exception.class)
@Override
public Integer delAndInsertBatch(StaffPatrolStatsFormDTO formDTO, List<StatsStaffPatrolRecordDailyDTO> insertList) {
int delete = statsStaffPatrolRecordDailyDao.deleteInternal(formDTO);

13
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java

@ -13,6 +13,7 @@ import com.epmet.dto.extract.form.GridHeartedFormDTO;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.extract.result.UserPartyResultDTO;
import com.epmet.dto.org.result.OrgStaffDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.screen.ScreenProjectDataDTO;
import com.epmet.dto.stats.form.GmUploadEventFormDTO;
import com.epmet.dto.stats.user.*;
@ -1113,4 +1114,16 @@ public class UserServiceImpl implements UserService {
public List<String> filterUserIds(List<String> userIds, String roleKey) {
return userDao.filterUserIds(userIds, roleKey);
}
/**
* desc:根据客户id和日期获取 例行工作数据
*
* @param customerId
* @param dateId
* @return
*/
@Override
public List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(String customerId, String dateId) {
return userDao.selectRoutineWorkListByDateId(customerId, dateId);
}
}

2
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/StatsStaffPatrolRecordDailyDao.xml

@ -23,6 +23,7 @@
REPORT_PROJECT_COUNT,
LATEST_PATROL_TIME,
LATEST_PATROL_STATUS,
ROUTINE_WORK_COUNT,
DEL_FLAG,
REVISION,
CREATED_BY,
@ -50,6 +51,7 @@
#{item.reportProjectCount},
#{item.latestPatrolTime},
#{item.latestPatrolStatus},
#{item.routineWorkCount},
'0',
0,
'APP_USER',

10
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml

@ -620,7 +620,7 @@
</select>
<select id="selectStaffPatrolListByDateId" resultType="com.epmet.dto.user.result.StaffPatrolRecordResult">
SELECT
r.*
r.ID, CUSTOMER_ID, GRID, GRID_PIDS, STAFF_ID, AGENCY_ID, PATROL_START_TIME, PATROL_END_TIME, ACTRUAL_END_TIME, TOTAL_TIME, STATUS, IS_HAND_END, DEL_FLAG, REVISION, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME
FROM
staff_patrol_record r
WHERE
@ -1065,5 +1065,13 @@
</foreach>
and er.ROLE_KEY = #{roleKey}
</select>
<select id="selectRoutineWorkListByDateId" resultType="com.epmet.dto.result.PatrolRoutineWorkResult">
SELECT id, GRID_ID,USER_ID FROM patrol_routine_work
WHERE
DATE_FORMAT( CREATED_TIME, '%Y%m%d' ) = #{dateId}
AND DEL_FLAG = '0'
AND CUSTOMER_ID = #{customerId}
</select>
</mapper>

5
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/IssueProjectCategoryDictDTO.java

@ -17,9 +17,10 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
@ -67,7 +68,7 @@ public class IssueProjectCategoryDictDTO implements Serializable {
* 分类名称
*/
private String categoryName;
private String parentCategoryName;
/**
* 分类类别1,2,3,4....
*/

18
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/GovIssueOpenFeignClient.java

@ -4,9 +4,6 @@ import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.IssueApplicationDTO;
import com.epmet.dto.IssueDTO;
import com.epmet.dto.IssueSuggestionDTO;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
@ -25,10 +22,7 @@ import com.epmet.resi.mine.dto.from.MyShiftIssueTopicsFormDTO;
import com.epmet.resi.mine.dto.result.MyShiftIssueTopicsResultDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@ -372,4 +366,14 @@ public interface GovIssueOpenFeignClient {
**/
@PostMapping(value = "/gov/issue/issueprojectcategorydict/getcategorylist")
Result<List<IssueProjectCategoryDictDTO>> getCategoryList(@RequestBody IssueProjectCategoryDictListFormDTO formDTO);
/**
* 获取项目分类名
* @Param customerId
* @Return {@link Result< Map< String, String>>}
* @Author zhaoqifeng
* @Date 2022/1/5 10:16
*/
@PostMapping("/gov/issue/issueprojectcategorydict/categoryMap/{customerId}")
Result<Map<String, String>> getCategoryMap(@PathVariable("customerId") String customerId);
}

14
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/feign/fallback/GovIssueOpenFeignClientFallBack.java

@ -305,4 +305,18 @@ public class GovIssueOpenFeignClientFallBack implements GovIssueOpenFeignClient
public Result<List<IssueProjectCategoryDictDTO>> getCategoryList(IssueProjectCategoryDictListFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "getCategoryList", formDTO);
}
/**
* 获取项目分类名
*
* @param customerId
* @Param customerId
* @Return {@link Result< Map< String, String>>}
* @Author zhaoqifeng
* @Date 2022/1/5 10:16
*/
@Override
public Result<Map<String, String>> getCategoryMap(String customerId) {
return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "getCategoryMap", customerId);
}
}

13
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueProjectCategoryDictController.java

@ -33,7 +33,6 @@ import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IssueProjectCategoryDictDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.IssueProjectCategoryDictEntity;
import com.epmet.excel.IssueProjectCategoryDictExcel;
import com.epmet.project.dto.CustomerCategoryDTO;
import com.epmet.project.dto.result.ProjectCategoryDictResultDTO;
@ -288,5 +287,17 @@ public class IssueProjectCategoryDictController {
return new Result<List<CategoryListResultDTO>>().ok(issueProjectCategoryDictService.selectCategoryOneLevelListByCustomerId(tokenDto.getCustomerId()));
}
/**
* 获取项目分类名
* @Param customerId
* @Return {@link Result< Map< String, String>>}
* @Author zhaoqifeng
* @Date 2022/1/5 10:16
*/
@PostMapping("categoryMap/{customerId}")
public Result<Map<String, String>> getCategoryMap(@PathVariable("customerId") String customerId) {
return new Result<Map<String, String>>().ok(issueProjectCategoryDictService.getCategoryMap(customerId));
}
}

9
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueProjectCategoryDictDao.java

@ -192,4 +192,13 @@ public interface IssueProjectCategoryDictDao extends BaseDao<IssueProjectCategor
*/
List<CategoryListResultDTO> selectCategoryOneLevelListByCustomerId(@Param("customerId")String customerId);
/**
* @Description 获取客户下分类
* @Param customerId
* @Return {@link List< IssueProjectCategoryDictDTO>}
* @Author zhaoqifeng
* @Date 2022/1/5 10:45
*/
List<IssueProjectCategoryDictDTO> getCategoryByCustomer(@Param("customerId") String customerId);
}

3
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueProjectCategoryDictService.java

@ -25,7 +25,6 @@ import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.IssueProjectCategoryDictEntity;
import com.epmet.project.dto.result.ProjectCategoryDictResultDTO;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
@ -230,4 +229,6 @@ public interface IssueProjectCategoryDictService extends BaseService<IssueProjec
*/
List<CategoryListResultDTO> selectCategoryOneLevelListByCustomerId(String customerId);
Map<String, String> getCategoryMap(String customerId);
}

15
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueProjectCategoryDictServiceImpl.java

@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
@ -507,6 +508,20 @@ public class IssueProjectCategoryDictServiceImpl extends BaseServiceImpl<IssuePr
return baseDao.selectCategoryOneLevelListByCustomerId(customerId);
}
@Override
public Map<String, String> getCategoryMap(String customerId) {
List<IssueProjectCategoryDictDTO> list = baseDao.getCategoryByCustomer(customerId);
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyMap();
}
list.forEach(item -> {
if(StringUtils.isNotBlank(item.getParentCategoryName())) {
item.setCategoryName(item.getParentCategoryName().concat(StrConstant.HYPHEN).concat(item.getCategoryName()));
}
});
return list.stream().collect(Collectors.toMap(IssueProjectCategoryDictDTO::getCategoryCode, IssueProjectCategoryDictDTO::getCategoryName));
}
/**
* @Description 项目分类处理
* @Param list

18
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueProjectCategoryDictDao.xml

@ -41,7 +41,7 @@
ORDER BY sort ASC
</select>
<!-- sql递归 查询客户议题项目的分类信息以及递归查询二级分类信息 end-->
<select id="selectCategoryListByCustomer" resultType="com.epmet.entity.IssueProjectCategoryDictEntity">
<select id="selectCategoryListByCustomer" resultType="com.epmet.dto.IssueProjectCategoryDictDTO">
SELECT
ID,
PID,
@ -292,4 +292,20 @@
WHERE
customer_id = #{customerId} AND id = #{id} AND DEL_FLAG = '0'
</update>
<select id="getCategoryByCustomer" resultType="com.epmet.dto.IssueProjectCategoryDictDTO">
SELECT
a.CATEGORY_CODE,
a.CATEGORY_NAME,
b.CATEGORY_NAME AS parentCategoryName
FROM
issue_project_category_dict a
LEFT JOIN issue_project_category_dict b ON a.PARENT_CATEGORY_CODE = b.CATEGORY_CODE
AND b.DEL_FLAG = '0'
AND b.CUSTOMER_ID = #{customerId}
WHERE
a.DEL_FLAG = '0'
AND a.CUSTOMER_ID = #{customerId}
ORDER BY a.CATEGORY_CODE
</select>
</mapper>

28
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ApprovaledListFromDTO.java

@ -0,0 +1,28 @@
package com.epmet.dto.form;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/1/4 14:49
*/
@NoArgsConstructor
@Data
public class ApprovaledListFromDTO implements Serializable {
private static final long serialVersionUID = 5700160700676332579L;
private String customerId;
@NotBlank(message = "组织id不能为空")
private String orgId;
private String orgType;
private String startTime;
private String endTime;
private String staffId;
private Integer pageSize = 1;
private Integer pageNo = 20;
}

28
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/ApprovaledListResultDTO.java

@ -0,0 +1,28 @@
package com.epmet.dto.result;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/1/4 14:58
*/
@NoArgsConstructor
@Data
public class ApprovaledListResultDTO implements Serializable {
private static final long serialVersionUID = 5118030421632653558L;
private String projectId;
private String title;
private String projectCategory;
private String locateAddress;
private String happenTime;
private String staffId;
private String staffName;
private String gridId;
private String gridName;
private String createdTime;
}

19
epmet-module/gov-project/gov-project-server/pom.xml

@ -65,6 +65,25 @@
<version>4.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.3</version>
<exclusions>
<exclusion>
<artifactId>poi</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
<exclusion>
<artifactId>poi-ooxml</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
<exclusion>
<artifactId>poi-ooxml-schemas</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 替换Feign原生httpclient -->
<dependency>
<groupId>io.github.openfeign</groupId>

34
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java

@ -3,6 +3,7 @@ package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@ -380,5 +382,37 @@ public class ProjectTraceController {
ValidatorUtils.validateEntity(formDTO,EventToProjectFormDTO.ApprovalCategory.class,EventToProjectFormDTO.AddUserInternalGroup.class);
return new Result<EventToProjectResultDTO>().ok(projectTraceService.eventToProject(formDTO));
}
/**
* 网格员工作统计项目列表
*
* @Param formDTO
* @Return {@link Result< PageData< ApprovaledListResultDTO>>}
* @Author zhaoqifeng
* @Date 2022/1/4 15:32
*/
@PostMapping("pcwork/approvaled-list")
public Result<PageData<ApprovaledListResultDTO>> approvaledList(@LoginUser TokenDto tokenDto, @RequestBody ApprovaledListFromDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
formDTO.setCustomerId(tokenDto.getCustomerId());
PageData<ApprovaledListResultDTO> result = projectTraceService.approvaledList(formDTO);
return new Result<PageData<ApprovaledListResultDTO>>().ok(result);
}
/**
* 网格员工作统计项目列表 导出
*
* @Param tokenDto
* @Param formDTO
* @Return
* @Author zhaoqifeng
* @Date 2022/1/5 14:58
*/
@PostMapping("pcwork/approvaled-list/export")
public void approvaledListExport(HttpServletResponse response, @LoginUser TokenDto tokenDto, @RequestBody ApprovaledListFromDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
formDTO.setCustomerId(tokenDto.getCustomerId());
projectTraceService.approvaledListExport(response, formDTO);
}
}

11
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectDao.java

@ -267,4 +267,15 @@ public interface ProjectDao extends BaseDao<ProjectEntity> {
*/
List<ProjectDistributionAnalysisRightDTO> selectProjectCountByOrg(List<SonOrgResultDTO> orgIds,@Param("startDate")String startDate,@Param("endDate")String endDate);
/**
* 网格员立项
* @Param agencyId
* @Param staffId
* @Param startTime
* @Param endTime
* @Return {@link List< ApprovaledListResultDTO>}
* @Author zhaoqifeng
* @Date 2022/1/4 16:45
*/
List<ApprovaledListResultDTO> getGridMemberProjectList(@Param("agencyId") String agencyId, @Param("staffId") String staffId, @Param("startTime") String startTime, @Param("endTime") String endTime);
}

29
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/excel/ApprovaledListExcel.java

@ -0,0 +1,29 @@
package com.epmet.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/1/5 15:00
*/
@Getter
@Setter
@EqualsAndHashCode
public class ApprovaledListExcel {
@ExcelProperty("项目事件标题")
private String title;
@ExcelProperty("项目事件类别")
private String projectCategory;
@ExcelProperty("发生地点")
private String locateAddress;
@ExcelProperty("发生日期")
private String happenTime;
@ExcelProperty("网格员")
private String staffName;
@ExcelProperty("提交日期")
private String createdTime;
}

10
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectCategoryService.java

@ -28,6 +28,7 @@ import com.epmet.entity.ProjectCategoryEntity;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 项目所属分类表
@ -126,4 +127,13 @@ public interface ProjectCategoryService extends BaseService<ProjectCategoryEntit
* @return
*/
List<ProjectCategoryDTO> getProjectCategoryService(String projectId);
/**
* @Description 获取项目分类列表
* @Param projectIds
* @Return {@link Map< String, Set< String>>}
* @Author zhaoqifeng
* @Date 2022/1/5 9:50
*/
Map<String, Set<String>> getProjectCategoryMap(List<String> projectIds);
}

10
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectService.java

@ -357,4 +357,14 @@ public interface ProjectService extends BaseService<ProjectEntity> {
* @return
*/
TopicResearchAnalysisResDTO topicResearchAnalysis(TopicResearchAnalysisFormDTO formDTO);
/**
* 网格员工作统计项目列表
*
* @Param formDTO
* @Return {@link PageData< ApprovaledListResultDTO>}
* @Author zhaoqifeng
* @Date 2022/1/4 16:27
*/
PageData<ApprovaledListResultDTO> approvaledList(ApprovaledListFromDTO formDTO);
}

22
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java

@ -1,9 +1,11 @@
package com.epmet.service;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@ -183,4 +185,24 @@ public interface ProjectTraceService {
* @date 2021/8/5 15:38
*/
EventToProjectResultDTO eventToProject(EventToProjectFormDTO formDTO);
/**
* 网格员工作统计项目列表
*
* @Param formDTO
* @Return {@link PageData< ApprovaledListResultDTO>}
* @Author zhaoqifeng
* @Date 2022/1/4 15:33
*/
PageData<ApprovaledListResultDTO> approvaledList(ApprovaledListFromDTO formDTO);
/**
* 网格员工作统计项目列表导出
*
* @Param formDTO
* @Return {@link PageData< ApprovaledListResultDTO>}
* @Author zhaoqifeng
* @Date 2022/1/4 15:33
*/
void approvaledListExport(HttpServletResponse response, ApprovaledListFromDTO formDTO);
}

27
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectCategoryServiceImpl.java

@ -17,6 +17,7 @@
package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
@ -39,15 +40,14 @@ import com.epmet.entity.ProjectEntity;
import com.epmet.feign.GovIssueOpenFeignClient;
import com.epmet.redis.ProjectCategoryRedis;
import com.epmet.service.ProjectCategoryService;
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.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
* 项目所属分类表
@ -225,4 +225,23 @@ public class ProjectCategoryServiceImpl extends BaseServiceImpl<ProjectCategoryD
return baseDao.selectListByProjectId(projectId);
}
/**
* @param projectIds
* @Description 获取项目分类列表
* @Param projectIds
* @Return {@link Map< String, Set < String>>}
* @Author zhaoqifeng
* @Date 2022/1/5 9:50
*/
@Override
public Map<String, Set<String>> getProjectCategoryMap(List<String> projectIds) {
LambdaQueryWrapper<ProjectCategoryEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.in(ProjectCategoryEntity::getProjectId, projectIds);
List<ProjectCategoryEntity> list = baseDao.selectList(wrapper);
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyMap();
}
return list.stream().collect(Collectors.groupingBy(ProjectCategoryEntity::getProjectId, Collectors.mapping(ProjectCategoryEntity::getCategoryCode, Collectors.toSet())));
}
}

25
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java

@ -3045,6 +3045,31 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
return resultDTO;
}
/**
* 网格员工作统计项目列表
*
* @param formDTO
* @Param formDTO
* @Return {@link PageData< ApprovaledListResultDTO>}
* @Author zhaoqifeng
* @Date 2022/1/4 16:27
*/
@Override
public PageData<ApprovaledListResultDTO> approvaledList(ApprovaledListFromDTO formDTO) {
if (StringUtils.isNotBlank(formDTO.getStaffId()) && ProjectConstant.ORG_TYPE_GRID.equals(formDTO.getOrgType())) {
CustomerStaffInfoCacheResult staff = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
if (null == staff) {
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "获取工作人员信息失败");
}
formDTO.setOrgId(staff.getAgencyId());
}
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize());
List<ApprovaledListResultDTO> list = baseDao.getGridMemberProjectList(formDTO.getOrgId(), formDTO.getStaffId(),
formDTO.getStartTime(), formDTO.getEndTime());
PageInfo<ApprovaledListResultDTO> pageInfo = new PageInfo<>(list);
return new PageData<>(list, pageInfo.getTotal());
}
/**
* @Description 区间项目分类数量处理
* 查询的是时间段内的分类项目数查询的时间 是传入一个日期拼上时间在进行比较大小

101
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java

@ -1,23 +1,28 @@
package com.epmet.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.scan.param.TextScanParamDTO;
import com.epmet.commons.tools.scan.param.TextTaskDTO;
import com.epmet.commons.tools.scan.result.SyncScanResult;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.IpUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.ScanContentUtils;
import com.epmet.commons.tools.utils.*;
import com.epmet.constant.*;
import com.epmet.dao.ProjectOrgRelationDao;
import com.epmet.dao.ProjectProcessAttachmentDao;
@ -29,22 +34,24 @@ import com.epmet.dto.ProjectStaffDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.*;
import com.epmet.excel.ApprovaledListExcel;
import com.epmet.feign.*;
import com.epmet.send.SendMqMsgUtil;
import com.epmet.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
@ -882,6 +889,88 @@ public class ProjectTraceServiceImpl<ProjectTagService> implements ProjectTraceS
return resultDTO;
}
/**
* 网格员工作统计项目列表
*
* @param formDTO
* @Param formDTO
* @Return {@link PageData < ApprovaledListResultDTO>}
* @Author zhaoqifeng
* @Date 2022/1/4 15:33
*/
@Override
public PageData<ApprovaledListResultDTO> approvaledList(ApprovaledListFromDTO formDTO) {
//获取项目列表
PageData<ApprovaledListResultDTO> result = projectService.approvaledList(formDTO);
//获取项目分类
Result<Map<String, String>> categoryMapResult = govIssueOpenFeignClient.getCategoryMap(formDTO.getCustomerId());
if (!categoryMapResult.success()) {
throw new EpmetException(categoryMapResult.getCode(),categoryMapResult.getMsg());
}
Map<String, String> categoryMap = categoryMapResult.getData();
if(CollectionUtils.isNotEmpty(result.getList())) {
List<String> projectIds = result.getList().stream().map(ApprovaledListResultDTO::getProjectId).collect(Collectors.toList());
Map<String, Set<String>> projectCategory = projectCategoryService.getProjectCategoryMap(projectIds);
result.getList().forEach(item -> {
//工作人员姓名
CustomerStaffInfoCacheResult staff = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), item.getStaffId());
if (null == staff) {
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "获取工作人员信息失败");
}
item.setStaffName(staff.getRealName());
//项目分类
Set<String> categoryList = projectCategory.get(item.getProjectId());
if (null != categoryList) {
List<String> categoryNames = new ArrayList<>();
categoryList.forEach(category -> {
if (StringUtils.isNotBlank(categoryMap.get(category))) {
categoryNames.add(categoryMap.get(category));
}
} );
item.setProjectCategory(StringUtils.join(categoryNames.toArray(), StrConstant.SEMICOLON));
}
});
}
return result;
}
/**
* 网格员工作统计项目列表导出
*
* @param formDTO
* @Param formDTO
* @Return {@link PageData< ApprovaledListResultDTO>}
* @Author zhaoqifeng
* @Date 2022/1/4 15:33
*/
@Override
public void approvaledListExport(HttpServletResponse response, ApprovaledListFromDTO formDTO) {
formDTO.setPageNo(NumConstant.ONE);
formDTO.setPageSize(NumConstant.ONE_THOUSAND);
ExcelWriter excelWriter = null;
try {
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("直接立项记录.xlsx", response)).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
writeSheet.setClazz(ApprovaledListExcel.class);
Integer num;
//一千条一循环分批写入
do {
List<ApprovaledListResultDTO> list = approvaledList(formDTO).getList();
List<ApprovaledListExcel> data = ConvertUtils.sourceToTarget(list, ApprovaledListExcel.class);
excelWriter.write(data, writeSheet);
num = data.size();
formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE);
} while (num > NumConstant.ZERO && num.compareTo(formDTO.getPageSize()) == NumConstant.ZERO);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
private List<StaffListResultDTO> queryStaffListRes(List<TickStaffFormDTO> staffList,String currentUserId) {
List<String> staffIdList = staffList.stream().map(TickStaffFormDTO::getStaffId).collect(Collectors.toList());
staffIdList.add(currentUserId);

25
epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectDao.xml

@ -483,4 +483,29 @@
AND DATE_FORMAT(CREATED_TIME,'%Y-%m-%d') <![CDATA[ <= ]]> #{endDate}
</foreach>
</select>
<select id="getGridMemberProjectList" resultType="com.epmet.dto.result.ApprovaledListResultDTO">
SELECT
ID AS "projectId",
TITLE,
LOCATE_ADDRESS,
DATE_FORMAT( CREATED_TIME, '%Y-%m-%d' ) AS "happenTime",
CREATED_BY AS "staffId",
DATE_FORMAT( CREATED_TIME, '%Y-%m-%d %H:%i:%s' ) AS "createdTime"
FROM
project
WHERE
DEL_FLAG = '0'
AND ORIGIN = 'agency'
AND AGENCY_ID = #{agencyId}
<if test="staffId != null and staffId != ''">
AND CREATED_BY = #{staffId}
</if>
<if test="startTime != null and startTime != ''">
AND DATE_FORMAT( CREATED_TIME, '%Y%m%d' ) &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND DATE_FORMAT( CREATED_TIME, '%Y%m%d' ) &lt;= #{endTime}
</if>
ORDER BY CREATED_TIME DESC
</select>
</mapper>

45
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/PcWorkListFormDTO.java

@ -0,0 +1,45 @@
package com.epmet.dto.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author zxc
* @DateTime 2022/1/4 2:00 下午
* @DESC
*/
@Data
public class PcWorkListFormDTO implements Serializable {
private static final long serialVersionUID = -3522636529743412120L;
public interface PcWorkListForm{}
// @NotBlank(message = "staffId不能为空",groups = PcWorkListForm.class)
private String staffId;
@NotBlank(message = "endTime不能为空",groups = PcWorkListForm.class)
private String endTime;
private String startTime;
@NotBlank(message = "orgId不能为空",groups = PcWorkListForm.class)
private String orgId;
@NotBlank(message = "orgType不能为空",groups = PcWorkListForm.class)
private String orgType;
@NotNull(message = "pageSize不能为空",groups = PcWorkListForm.class)
private Integer pageSize;
@NotNull(message = "pageNo不能为空",groups = PcWorkListForm.class)
private Integer pageNo;
/**
* 是否分页默认分页
*/
private Boolean isPage = true;
}

53
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/patrol/PcworkRecordListFormDTO.java

@ -0,0 +1,53 @@
package com.epmet.dto.form.patrol;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 网格员工作统计巡查记录列表
* @Author sun
*/
@Data
public class PcworkRecordListFormDTO implements Serializable {
private static final long serialVersionUID = 9156247659994638103L;
/**
* 组织或网格Id
*/
@NotBlank(message = "组织Id不能为空", groups = Staff.class)
private String orgId;
/**
* 组织agency 网格grid
*/
@NotBlank(message = "组织类型不能为空", groups = Staff.class)
private String orgType;
/**
* 工作人员Id
*/
private String staffId;
/**
* 开始时间yyyymmdd
*/
private String startTime;
/**
* 结束时间yyyymmdd
*/
@NotBlank(message = "结束时间不能为空",groups = Staff.class)
private String endTime;
/**
* 页码
* */
@Min(1)
private Integer pageNo;
/**
* 每页多少条
* */
private Integer pageSize = 20;
private Boolean isPage = true;
public interface Staff extends CustomerClientShowGroup {}
}

2
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/PatrolRoutineWorkResult.java

@ -25,6 +25,8 @@ public class PatrolRoutineWorkResult implements Serializable {
private String title;
private String userId;
/**
* 一级工作类型 code
*/

109
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/PcWorkListResultDTO.java

@ -0,0 +1,109 @@
package com.epmet.dto.result;
import com.epmet.commons.tools.constant.NumConstant;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @Author zxc
* @DateTime 2022/1/4 2:06 下午
* @DESC
*/
@Data
public class PcWorkListResultDTO implements Serializable {
private static final long serialVersionUID = -2072009617522409407L;
private Integer total;
private List<PcWorkListResult> list;
public PcWorkListResultDTO() {
this.total = NumConstant.ZERO;
this.list = new ArrayList<>();
}
@Data
public static class PcWorkListResult{
/**
* 事项名称
*/
private String title;
/**
* 事项类型码
*/
private List<String> workTypeCode;
/**
* 事项类型名称
*/
private List<String> workTypeName;
/**
* 有无异常
*/
private String isNormal;
private String workTypeNames;
/**
* 发生地点
*/
private String happenAddress;
/**
* 发生时间 返回返回格式化字符串,yyyy-MM-dd
*/
private String happenTime;
/**
* 人员ID
*/
private String staffId;
/**
* 人员姓名
*/
private String staffName;
/**
* 网格id
*/
private String gridId;
/**
* 网格名字
*/
private String gridName;
/**
* 提交日期 返回返回格式化字符串,yyyy-MM-dd HH:mm:ss
*/
private String createdTime;
/**
* 工作内容
*/
private String workContent;
public PcWorkListResult() {
this.title = "";
this.workTypeCode = new ArrayList<>();
this.workTypeName = new ArrayList<>();
this.isNormal = "";
this.happenAddress = "";
this.happenTime = "";
this.staffId = "";
this.staffName = "";
this.gridId = "";
this.gridName = "";
this.createdTime = "";
this.workContent = "";
}
}
}

50
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/PcworkRecordListResultDTO.java

@ -0,0 +1,50 @@
package com.epmet.dto.result;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Description 网格员工作统计巡查记录列表
* @Author sun
*/
@Data
public class PcworkRecordListResultDTO implements Serializable {
private static final long serialVersionUID = -1L;
List<StaffPatrol> list = new ArrayList<>();
private Integer total;
@Data
public static class StaffPatrol {
//人员ID
private String staffId;
//人员名称
private String staffName;
//网格ID
private String gridId;
//网格名称
private String gridName;
//状态(英文key)
private String status;
//状态(中文)
private String statusName;
//巡查开始时间 返回返回格式化字符串,yyyy-MM-dd HH:mm:ss
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date patrolStartTime;
//巡查结束时间 返回返回格式化字符串,yyyy-MM-dd HH:mm:ss
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date patrolEndTime;
//巡查时长 xx小时xx分钟
private String totalTime;
@JsonIgnore
private Integer totalTimeNum;
}
}

29
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/PatrolRoutineWorkController.java

@ -1,21 +1,32 @@
package com.epmet.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.PatrolRoutineWorkFormDTO;
import com.epmet.dto.form.PcWorkListFormDTO;
import com.epmet.dto.form.patrol.PatrolQueryFormDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.result.PcWorkListResultDTO;
import com.epmet.excel.PcWorkListExport;
import com.epmet.service.PatrolRoutineWorkService;
import com.github.pagehelper.Page;
import org.apache.commons.lang3.StringUtils;
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.servlet.http.HttpServletResponse;
import java.util.List;
import static io.netty.handler.codec.smtp.SmtpRequests.data;
/**
* 例行工作
*
@ -56,4 +67,22 @@ public class PatrolRoutineWorkController {
return new Result().ok(true);
}
/**
* @Description 网格员工作统计例行工作列表
* @param formDTO
* @author zxc
* @date 2022/1/4 2:18 下午
*/
@PostMapping("pcwork/list")
public Result<PcWorkListResultDTO> pcWorkList(@RequestBody PcWorkListFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, PcWorkListFormDTO.PcWorkListForm.class);
return new Result<PcWorkListResultDTO>().ok(gridUserWorkService.pcWorkList(formDTO));
}
@PostMapping("pcwork/list/export")
public void pcWorkListExport(@RequestBody PcWorkListFormDTO formDTO, HttpServletResponse response) throws Exception {
ValidatorUtils.validateEntity(formDTO, PcWorkListFormDTO.PcWorkListForm.class);
gridUserWorkService.pcWorkListExport(formDTO,response);
}
}

37
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StaffPatrolController.java

@ -1,22 +1,37 @@
package com.epmet.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.*;
import com.epmet.dto.form.patrol.PcworkRecordListFormDTO;
import com.epmet.dto.result.*;
import com.epmet.excel.StaffPatrolRecordExcel;
import com.epmet.service.StaffPatrolDetailService;
import com.epmet.service.StaffPatrolRecordService;
import com.epmet.util.TestFileUtil;
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 javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
/**
@ -155,4 +170,26 @@ public class StaffPatrolController {
return new Result<List<PatrolTrackResultDTO>>().ok(staffPatrolRecordService.patrolTrack(formDTO));
}
/**
* @Author sun
* @Description 网格员工作统计巡查记录列表
**/
@NoRepeatSubmit
@PostMapping("pcwork/record-list")
public Result<PcworkRecordListResultDTO> pcworkRecordList(@RequestBody PcworkRecordListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, PcworkRecordListFormDTO.Staff.class);
return new Result<PcworkRecordListResultDTO>().ok(staffPatrolRecordService.pcworkRecordList(formDTO));
}
/**
* @Author sun
* @Description 网格员工作统计巡查记录列表导出
**/
@NoRepeatSubmit
@PostMapping("pcwork/record-list/export")
public void pcworkRecordListExport(HttpServletResponse response, @RequestBody PcworkRecordListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, PcworkRecordListFormDTO.Staff.class);
staffPatrolRecordService.pcworkRecordListExport(response, formDTO);
}
}

4
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/PatrolRoutineWorkDao.java

@ -18,8 +18,10 @@
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.PcWorkListFormDTO;
import com.epmet.dto.form.patrol.PatrolQueryFormDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.result.PcWorkListResultDTO;
import com.epmet.entity.PatrolRoutineWorkEntity;
import org.apache.ibatis.annotations.Mapper;
@ -35,4 +37,6 @@ import java.util.List;
public interface PatrolRoutineWorkDao extends BaseDao<PatrolRoutineWorkEntity> {
List<PatrolRoutineWorkResult> selectList(PatrolQueryFormDTO formDTO);
List<PcWorkListResultDTO.PcWorkListResult> pcWorkList(PcWorkListFormDTO formDTO);
}

7
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/StaffPatrolRecordDao.java

@ -19,7 +19,9 @@ package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.RecordListFormDTO;
import com.epmet.dto.form.patrol.PcworkRecordListFormDTO;
import com.epmet.dto.result.GridManagerUserListResultDTO;
import com.epmet.dto.result.PcworkRecordListResultDTO;
import com.epmet.dto.result.RecordListResultDTO;
import com.epmet.entity.StaffPatrolRecordEntity;
import org.apache.ibatis.annotations.Mapper;
@ -62,4 +64,9 @@ public interface StaffPatrolRecordDao extends BaseDao<StaffPatrolRecordEntity> {
*/
List<RecordListResultDTO> recordList(RecordListFormDTO formDTO);
/**
* @Author sun
* @Description 网格员工作统计巡查记录列表
**/
List<PcworkRecordListResultDTO.StaffPatrol> pcworkRecordList(PcworkRecordListFormDTO formDTO);
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/StatsStaffPatrolRecordDailyEntity.java

@ -123,5 +123,10 @@ public class StatsStaffPatrolRecordDailyEntity extends BaseEpmetEntity {
*/
private String latestPatrolStatus;
/**
* 例行工作次数
*/
private Integer routineWorkCount;
}

71
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/PcWorkListExport.java

@ -0,0 +1,71 @@
package com.epmet.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @Author zxc
* @DateTime 2022/1/5 10:00 上午
* @DESC
*/
@Getter
@Setter
@EqualsAndHashCode
public class PcWorkListExport {
@ExcelProperty("事项名称")
@ColumnWidth(20)
private String title;
@ExcelProperty("事项类型码")
@ColumnWidth(20)
@ExcelIgnore
private String workTypeCode;
@ExcelProperty("事项类型名称")
@ColumnWidth(40)
private String workTypeNames;
@ExcelProperty("有无异常")
private String isNormal;
@ExcelProperty("发生地点")
@ColumnWidth(20)
private String happenAddress;
@ExcelProperty("发生时间")
@ColumnWidth(20)
private String happenTime;
@ExcelProperty("人员ID")
@ExcelIgnore
private String staffId;
@ExcelProperty("人员姓名")
@ColumnWidth(20)
private String staffName;
@ExcelProperty("网格ID")
@ExcelIgnore
private String gridId;
@ExcelProperty("网格名字")
@ColumnWidth(20)
private String gridName;
@ExcelProperty("提交日期")
@ColumnWidth(30)
private String createdTime;
@ExcelProperty("工作内容")
@ColumnWidth(60)
private String workContent;
}

83
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/StaffPatrolRecordExcel.java

@ -0,0 +1,83 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* 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.
* <p>
* 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
/**
* @Description 网格员工作统计巡查记录列表导出
* @Author sun
*/
@Getter
@Setter
@EqualsAndHashCode
public class StaffPatrolRecordExcel {
@ExcelProperty("人员ID")
@ExcelIgnore
private String staffId;
@ExcelProperty("人员名称")
@ColumnWidth(15)
private String staffName;
@ExcelProperty("网格ID")
@ExcelIgnore
private String gridId;
@ExcelProperty("网格名称")
@ColumnWidth(20)
private String gridName;
@ExcelProperty("状态(英文key)")
@ExcelIgnore
private String status;
@ExcelProperty("状态")
@ColumnWidth(18)
private String statusName;
@DateTimeFormat("yyyy年MM月dd日")
@ExcelProperty("巡查开始时间")
@ColumnWidth(20)
private Date patrolStartTime;
@DateTimeFormat("yyyy年MM月dd日")
@ExcelProperty("巡查结束时间")
@ColumnWidth(20)
private Date patrolEndTime;
@ExcelProperty("巡查时长")
@ColumnWidth(20)
private String totalTime;
@ExcelIgnore
private Integer totalTimeNum;;
}

14
epmet-user/epmet-user-server/src/main/java/com/epmet/service/PatrolRoutineWorkService.java

@ -19,11 +19,16 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.dto.form.PatrolRoutineWorkFormDTO;
import com.epmet.dto.form.PcWorkListFormDTO;
import com.epmet.dto.form.patrol.PatrolQueryFormDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.result.PcWorkListResultDTO;
import com.epmet.entity.PatrolRoutineWorkEntity;
import com.github.pagehelper.Page;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 巡查例行工作
*
@ -44,4 +49,13 @@ public interface PatrolRoutineWorkService extends BaseService<PatrolRoutineWorkE
* @return
*/
Page<PatrolRoutineWorkResult> listPage(PatrolQueryFormDTO formDTO);
/**
* @Description 网格员工作统计例行工作列表
* @param formDTO
* @author zxc
* @date 2022/1/4 2:18 下午
*/
PcWorkListResultDTO pcWorkList(PcWorkListFormDTO formDTO);
void pcWorkListExport(PcWorkListFormDTO formDTO, HttpServletResponse response) throws Exception;
}

17
epmet-user/epmet-user-server/src/main/java/com/epmet/service/StaffPatrolRecordService.java

@ -20,14 +20,11 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.dto.form.*;
import com.epmet.dto.result.PatrolUploadResultDTO;
import com.epmet.dto.result.StaffPatrolInitResultDTO;
import com.epmet.dto.result.StartPatrolResultDTO;
import com.epmet.dto.result.PatrolTrackResultDTO;
import com.epmet.dto.result.RecordListResultDTO;
import com.epmet.dto.result.UserNameAndLLResultDTO;
import com.epmet.dto.form.patrol.PcworkRecordListFormDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.StaffPatrolRecordEntity;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@ -115,4 +112,12 @@ public interface StaffPatrolRecordService extends BaseService<StaffPatrolRecordE
*/
List<PatrolTrackResultDTO> patrolTrack(PatrolTrackFormDTO formDTO);
/**
* @Author sun
* @Description 网格员工作统计巡查记录列表
**/
PcworkRecordListResultDTO pcworkRecordList(PcworkRecordListFormDTO formDTO);
void pcworkRecordListExport(HttpServletResponse response, PcworkRecordListFormDTO formDTO);
}

137
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/PatrolRoutineWorkServiceImpl.java

@ -17,6 +17,9 @@
package com.epmet.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.rocketmq.messages.BaseMQMsgDTO;
@ -24,20 +27,29 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.DictTreeResultDTO;
import com.epmet.commons.tools.enums.DictTypeEnum;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.SystemMessageType;
import com.epmet.dao.PatrolRoutineWorkDao;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.form.CustomerGridFormDTO;
import com.epmet.dto.form.PatrolRoutineWorkFormDTO;
import com.epmet.dto.form.PcWorkListFormDTO;
import com.epmet.dto.form.patrol.PatrolQueryFormDTO;
import com.epmet.dto.result.AllGridsByUserIdResultDTO;
import com.epmet.dto.result.PatrolRoutineWorkResult;
import com.epmet.dto.result.PcWorkListResultDTO;
import com.epmet.entity.PatrolRoutineWorkEntity;
import com.epmet.entity.PatrolRoutineWorkTypeEntity;
import com.epmet.excel.PcWorkListExport;
import com.epmet.feign.EpmetAdminOpenFeignClient;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
@ -46,6 +58,7 @@ import com.epmet.service.PatrolRoutineWorkService;
import com.epmet.service.PatrolRoutineWorkTypeService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -53,10 +66,14 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.beans.Encoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 巡查例行工作
@ -147,6 +164,126 @@ public class PatrolRoutineWorkServiceImpl extends BaseServiceImpl<PatrolRoutineW
.doSelectPage(() -> baseDao.selectList(formDTO));
}
/**
* @Description 网格员工作统计例行工作列表
* @param formDTO
* @author zxc
* @date 2022/1/4 2:18 下午
*/
@Override
public PcWorkListResultDTO pcWorkList(PcWorkListFormDTO formDTO) {
PcWorkListResultDTO result = new PcWorkListResultDTO();
List<PcWorkListResultDTO.PcWorkListResult> list;
if (formDTO.getIsPage()){
PageInfo<PcWorkListResultDTO.PcWorkListResult> listPageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.pcWorkList(formDTO));
result.setTotal(Integer.valueOf(String.valueOf(listPageInfo.getTotal())));
list = listPageInfo.getList();
}else {
list = baseDao.pcWorkList(formDTO);
result.setTotal(list.size());
}
if (CollectionUtils.isEmpty(list)){
return result;
}
Result<List<DictTreeResultDTO>> workTypeResult = adminOpenFeignClient.dictTree(DictTypeEnum.PATROL_WORK_TYPE.getCode());
if (!workTypeResult.success()){
throw new EpmetException("查询例行工作分类失败...");
}
List<String> gridIds = list.stream().map(m -> m.getGridId()).distinct().collect(Collectors.toList());
Result<List<AllGridsByUserIdResultDTO>> gridNamesResult = govOrgOpenFeignClient.getGridListByGridIds(gridIds);
if (!gridNamesResult.success()){
throw new EpmetException("查询网格名字失败...");
}
list.forEach(l -> {
l.setWorkTypeName(disposeWorkTypeCode(workTypeResult.getData(),l.getWorkTypeCode()));
gridNamesResult.getData().stream().filter(g -> l.getGridId().equals(g.getGridId())).forEach(g -> l.setGridName(g.getGridName()));
});
result.setList(list);
return result;
}
@Override
public void pcWorkListExport(PcWorkListFormDTO formDTO, HttpServletResponse response) throws Exception {
String fileName = getFileName(formDTO);
ExcelWriter excelWriter = null;
try {
String name = URLEncoder.encode(fileName, "UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-disposition", "attachment;");
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(name,response),PcWorkListExport.class).build();
// 如果同一个sheet只要创建一次
WriteSheet writeSheet = EasyExcel.writerSheet(name).build();
Integer pageNo = NumConstant.ONE;
Integer pageSize = NumConstant.ONE_HUNDRED;
Integer num = NumConstant.ZERO;
do {
formDTO.setPageNo(pageNo);
formDTO.setPageSize(pageSize);
List<PcWorkListResultDTO.PcWorkListResult> dtos = pcWorkList(formDTO).getList();
dtos.forEach(d -> {
d.setWorkTypeNames(d.getWorkTypeName().toString());
});
List<PcWorkListExport> data = ConvertUtils.sourceToTarget(dtos, PcWorkListExport.class);
num = data.size();
excelWriter.write(data, writeSheet);
pageNo++;
}while (num > NumConstant.ZERO && num.compareTo(pageSize) == NumConstant.ZERO);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
public String getFileName(PcWorkListFormDTO formDTO){
StringBuilder name = new StringBuilder();
if (formDTO.getOrgType().equals(OrgTypeEnum.GRID.getCode())){
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(formDTO.getOrgId());
if (null == gridInfo){
throw new EpmetException("查询网格信息失败...");
}
name.append(gridInfo.getGridName());
}else {
AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(formDTO.getOrgId());
if (null == agencyInfo){
throw new EpmetException("查询组织信息失败...");
}
name.append(agencyInfo.getOrganizationName());
}
name.append("例行工作列表");
if (StringUtils.isNotBlank(formDTO.getStartTime())){
name.append(formDTO.getStartTime()).append("-").append(formDTO.getEndTime()).append("区间新增值");
}else {
name.append(formDTO.getEndTime()).append("截止累计值");
}
name.append(".xlsx");
return name.toString();
};
/**
* @Description 处理 workTypeName
* @param workTypeList
* @param code
* @author zxc
* @date 2022/1/5 9:27 上午
*/
public List<String> disposeWorkTypeCode(List<DictTreeResultDTO> workTypeList,List<String> code){
if (CollectionUtils.isEmpty(code)){
return new ArrayList<>();
}
List<String> result = new ArrayList<>();
code.forEach(c -> {
workTypeList.forEach(w1 -> {
w1.getChildren().forEach(w2 -> {
if (c.equals(w2.getId())){
result.add(w1.getName() + StrConstant.HYPHEN + w2.getName());
}
});
});
});
return result;
}
/**
* desc:递归遍历树形结构 构建pids 根节点pids 为空字符串
*

107
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StaffPatrolRecordServiceImpl.java

@ -1,15 +1,24 @@
package com.epmet.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.rocketmq.messages.StaffPatrolMQMsg;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.PatrolConstant;
import com.epmet.constant.SystemMessageType;
@ -20,10 +29,12 @@ import com.epmet.dao.StatsStaffPatrolRecordDailyDao;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.StaffPatrolDetailDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.form.patrol.PcworkRecordListFormDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.StaffPatrolDetailEntity;
import com.epmet.entity.StaffPatrolRecordEntity;
import com.epmet.entity.StatsStaffPatrolRecordDailyEntity;
import com.epmet.excel.StaffPatrolRecordExcel;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.feign.GovProjectOpenFeignClient;
@ -31,6 +42,8 @@ import com.epmet.send.SendMqMsgUtil;
import com.epmet.service.StaffPatrolDetailService;
import com.epmet.service.StaffPatrolRecordService;
import com.epmet.util.DimIdGenerator;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -39,9 +52,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -70,6 +84,8 @@ public class StaffPatrolRecordServiceImpl extends BaseServiceImpl<StaffPatrolRec
private GovProjectOpenFeignClient govProjectOpenFeignClient;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Autowired
private RedisUtils redisUtils;
/**
@ -451,4 +467,89 @@ public class StaffPatrolRecordServiceImpl extends BaseServiceImpl<StaffPatrolRec
}
return new ArrayList<>();
}
/**
* @Author sun
* @Description 网格员工作统计巡查记录列表
**/
@Override
public PcworkRecordListResultDTO pcworkRecordList(PcworkRecordListFormDTO formDTO) {
PcworkRecordListResultDTO resultDTO = new PcworkRecordListResultDTO();
//1.按条件查询网格员巡查数据
PageInfo<PcworkRecordListResultDTO.StaffPatrol> result =
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()).doSelectPageInfo(() -> staffPatrolRecordDao.pcworkRecordList(formDTO));
if (org.springframework.util.CollectionUtils.isEmpty(result.getList())) {
return resultDTO;
}
//2.查询网格信息并赋值
Map<String, CustomerGridDTO> map = new HashMap<>();
for (PcworkRecordListResultDTO.StaffPatrol r : result.getList()) {
if (map.containsKey(r.getGridId())) {
r.setGridName(map.get(r.getGridId()).getGridName());
continue;
}
String redisKey = RedisKeys.getGridInfoKey(r.getGridId());
Map<String, Object> gridCache = redisUtils.hGetAll(redisKey);
if (gridCache != null && gridCache.size() > 0) {
// 直接取缓存中的
CustomerGridDTO dto = BeanUtil.mapToBean(gridCache, CustomerGridDTO.class, true);
r.setGridName(dto.getGridName());
map.put(r.getGridId(), dto);
} else {
CustomerGridFormDTO form = new CustomerGridFormDTO();
form.setGridId(r.getGridId());
Result<CustomerGridDTO> resultGrid = govOrgOpenFeignClient.getGridBaseInfoByGridId(form);
if (!resultGrid.success()) {
throw new RenException("调用org服务获取网格基础信息失败......");
}
r.setGridName(resultGrid.getData().getGridName());
map.put(r.getGridId(), resultGrid.getData());
}
//秒变小时分钟
Integer minutes = r.getTotalTimeNum() / 60;
String patrolDuration = (minutes / 60 > 0 ? minutes / 60 + "小时" : "") + (minutes % 60 > 0 ? minutes % 60 + "分钟" : "0分钟");
r.setTotalTime(patrolDuration);
}
//3.封装数据并返回
resultDTO.setTotal((int)result.getTotal());
resultDTO.setList(result.getList());
return resultDTO;
}
/**
* @Author sun
* @Description 网格员工作统计巡查记录列表导出
**/
@Override
public void pcworkRecordListExport(HttpServletResponse response, PcworkRecordListFormDTO formDTO) {
formDTO.setPageNo(NumConstant.ONE);
formDTO.setPageSize(NumConstant.ONE_THOUSAND);
ExcelWriter excelWriter = null;
try {
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel("网格员巡查记录.xlsx", response)).build();
/*WriteSheet writeSheet = EasyExcel.writerSheet("sheet").build();
writeSheet.setClazz(StaffPatrolRecordExcel.class);*/
int num = NumConstant.ZERO;
//一千条一个sheet页,循环分批写入
do {
PcworkRecordListResultDTO dto = pcworkRecordList(formDTO);
List<StaffPatrolRecordExcel> data = ConvertUtils.sourceToTarget(dto.getList(), StaffPatrolRecordExcel.class);
WriteSheet writeSheet = EasyExcel.writerSheet(formDTO.getPageNo(), "sheet" + formDTO.getPageNo()).build();
writeSheet.setClazz(StaffPatrolRecordExcel.class);
excelWriter.write(data, writeSheet);
num = data.size();
formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE);
} while (num == formDTO.getPageSize());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
}

48
epmet-user/epmet-user-server/src/main/resources/mapper/PatrolRoutineWorkDao.xml

@ -38,5 +38,53 @@
AND m.DEL_FLAG = '0'
</select>
<resultMap id="pcWorkListMap" type="com.epmet.dto.result.PcWorkListResultDTO$PcWorkListResult">
<result property="title" column="title"/>
<result property="isNormal" column="isNormal"/>
<result property="happenAddress" column="happenAddress"/>
<result property="happenTime" column="happenTime"/>
<result property="staffId" column="staffId"/>
<result property="gridId" column="gridId"/>
<result property="createdTime" column="createdTime"/>
<result property="workContent" column="workContent"/>
<result property="staffName" column="staffName"/>
<collection property="workTypeCode" ofType="java.lang.String" select="pcWorkTypeCodeList" column="wid">
<result column="workTypeCode"/>
</collection>
</resultMap>
<select id="pcWorkList" resultMap="pcWorkListMap">
SELECT
w.ID AS wid,
w.TITLE as title,
(CASE WHEN w.IS_NORMAL = 1 THEN '有' ELSE '无' END) AS isNormal,
w.ADDRESS AS happenAddress,
w.HAPPEN_TIME AS happenTime,
w.USER_ID AS staffId,
w.GRID_ID AS gridId,
DATE_FORMAT(w.CREATED_TIME,'%Y-%m-%d %H:%i:%s') AS createdTime,
w.WORK_CONTENT AS workContent,
s.REAL_NAME AS staffName
FROM patrol_routine_work w
INNER JOIN customer_staff s ON (s.USER_ID = w.USER_ID AND s.DEL_FLAG = 0)
WHERE w.DEL_FLAG = 0
<if test="staffId != null and staffId != '' ">
AND w.USER_ID = #{staffId}
</if>
<if test='orgType == "grid" '>
AND w.GRID_ID = #{orgId}
</if>
<if test='orgType == "agency" '>
AND w.PIDS LIKE CONCAT('%',#{orgId},'%')
</if>
AND DATE_FORMAT(w.CREATED_TIME,'%Y%m%d') <![CDATA[ <= ]]> #{endTime}
<if test="startTime != '' and startTime != null">
AND DATE_FORMAT(w.CREATED_TIME,'%Y%m%d') >= #{startTime}
</if>
ORDER BY w.CREATED_TIME DESC
</select>
<select id="pcWorkTypeCodeList" resultType="java.lang.String">
SELECT WORK_TYPE_CODE AS workTypeCode FROM patrol_routine_work_type WHERE DEL_FLAG = 0 AND ROUTINE_WORK_ID = #{wid}
</select>
</mapper>

33
epmet-user/epmet-user-server/src/main/resources/mapper/StaffPatrolRecordDao.xml

@ -75,4 +75,37 @@
GROUP BY recordId
</select>
<select id="pcworkRecordList" resultType="com.epmet.dto.result.PcworkRecordListResultDTO$StaffPatrol">
SELECT
spr.staff_id staffId,
cs.real_name staffName,
spr.grid gridId,
spr.`status` status,
if(spr.`status`='patrolling', '巡查中', if(spr.is_hand_end=0, '结束巡查(系统自动)', '结束巡查'))statusName,
spr.patrol_start_time patrolStartTime,
spr.patrol_end_time patrolEndTime,
spr.total_time totalTimeNum
FROM
staff_patrol_record spr
LEFT JOIN customer_staff cs ON spr.staff_id = cs.user_id
WHERE
spr.del_flag = '0'
<if test='orgType != "" and orgType != null and "agency" == orgType'>
AND spr.grid_pids LIKE CONCAT('%', #{orgId}, '%')
</if>
<if test='orgType != "" and orgType != null and "grid" == orgType'>
AND spr.grid = #{orgId}
</if>
<if test='staffId != "" and staffId != null '>
AND spr.staff_id = #{staffId}
</if>
<if test='startTime != "" and startTime != null '>
AND DATE_FORMAT(spr.created_time,'%Y%m%d') <![CDATA[ >= ]]> #{startTime}
</if>
<if test='endTime != "" and endTime != null '>
AND DATE_FORMAT(spr.created_time,'%Y%m%d') <![CDATA[ <= ]]> #{endTime}
</if>
ORDER BY spr.total_time DESC
</select>
</mapper>
Loading…
Cancel
Save