Browse Source

Merge remote-tracking branch 'remotes/origin/dev_patrol_stats' into dev

master
jianjun 4 years ago
parent
commit
8756e3e777
  1. 1
      epmet-cloud-generator/src/main/java/io/renren/GeneratorApplication.java
  2. 11
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  3. 2
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/form/StaffListFormDTO.java
  4. 20
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/PersonalPatrolListResultDTO.java
  5. 7
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/StaffListResultDTO.java
  6. 29
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java
  7. 12
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/StaffPatrolRecordDao.java
  8. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/CustomerGridDao.java
  9. 17
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java
  10. 82
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java
  11. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java
  12. 11
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java
  13. 58
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StaffPatrolRecordDao.xml
  14. 48
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerGridDao.xml
  15. 41
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/BizDataFormDTO.java
  16. 25
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/StaffPatrolStatsFormDTO.java
  17. 61
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/CustomerGridStaffDTO.java
  18. 137
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/CustomerStaffDTO.java
  19. 122
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/StaffPatrolRecordResult.java
  20. 147
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/StatsStaffPatrolRecordDailyDTO.java
  21. 14
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java
  22. 9
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java
  23. 46
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/BizDataStatsController.java
  24. 38
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/org/CustomerStaffGridDao.java
  25. 63
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/project/ProjectDao.java
  26. 41
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/StatsStaffPatrolRecordDailyDao.java
  27. 18
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java
  28. 40
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/org/CustomerStaffGridEntity.java
  29. 116
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/user/StatsStaffPatrolRecordDailyEntity.java
  30. 40
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/BizDataStatsService.java
  31. 300
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/impl/BizDataStatsServiceImpl.java
  32. 22
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/org/CustomerStaffService.java
  33. 39
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/org/impl/CustomerStaffServiceImpl.java
  34. 1
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectService.java
  35. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectServiceImpl.java
  36. 16
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/StatsStaffPatrolService.java
  37. 18
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java
  38. 48
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/StatsStaffPatrolServiceImpl.java
  39. 21
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java
  40. 31
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerStaffGridDao.xml
  41. 7
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml
  42. 69
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/StatsStaffPatrolRecordDailyDao.xml
  43. 39
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml
  44. 10
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/BizDataStatsService.java
  45. 25
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/BizDataStatsServiceImpl.java
  46. 38
      epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/BizDataStatsDailyTask.java
  47. 29
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/PatrolProjectFormDTO.java
  48. 14
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/GovProjectOpenFeignClient.java
  49. 10
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/fallback/GovProjectOpenFeignClientFallback.java
  50. 12
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java
  51. 9
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ProjectDao.java
  52. 8
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectService.java
  53. 11
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  54. 12
      epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectDao.xml
  55. 146
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/StatsStaffPatrolRecordDailyDTO.java
  56. 32
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StatsStaffPatrolRecordDailyController.java
  57. 64
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/StatsStaffPatrolRecordDailyDao.java
  58. 116
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/StatsStaffPatrolRecordDailyEntity.java
  59. 15
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/StatsStaffPatrolRecordDailyService.java
  60. 90
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StaffPatrolRecordServiceImpl.java
  61. 32
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StatsStaffPatrolRecordDailyServiceImpl.java
  62. 91
      epmet-user/epmet-user-server/src/main/java/com/epmet/util/DimIdGenerator.java
  63. 26
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.14__add_patrol_stats.sql
  64. 3
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.15__update_patrol_stats.sql
  65. 43
      epmet-user/epmet-user-server/src/main/resources/mapper/StatsStaffPatrolRecordDailyDao.xml

1
epmet-cloud-generator/src/main/java/io/renren/GeneratorApplication.java

@ -2,7 +2,6 @@ package io.renren;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GeneratorApplication {

11
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java

@ -847,4 +847,15 @@ public class DateUtils {
return DateUtils.format(date,DateUtils.DATE_TIME_PATTERN);
}
/**
* @Author sun
* @Description 获取当前日期几个自然月之前的日期yyyy-MM-dd HH:mm:ss
**/
public static String getBeforeMonthDate(int beforMonth, String dateType){
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, - beforMonth);
Date date = c.getTime();
return DateUtils.format(date,dateType);
}
}

2
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/form/StaffListFormDTO.java

@ -24,7 +24,7 @@ public class StaffListFormDTO implements Serializable {
@NotNull(message = "最近时间不能为空", groups = StaffListFormDTO.Staff.class)
private Integer time;
/**
* 排序字段巡查总次数patrolTotal最近开始巡查时间latestPatrolledTime
* 排序字段巡查总次数patrolTotal最近开始巡查时间latestPatrolledTime上报项目数 reportProjectCount巡查总时长totalTime
*/
@NotBlank(message = "排序条件不能为空", groups = StaffListFormDTO.Staff.class)
private String sortCode;

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

@ -0,0 +1,20 @@
package com.epmet.dataaggre.dto.epmetuser.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 个人中心-网格员巡查记录-接口入参
* @Auth sun
*/
@Data
public class PersonalPatrolListResultDTO implements Serializable {
private static final long serialVersionUID = 7129564173128153335L;
//巡查总次数;巡查总时长;立项事件数
private String key;
//key对应值
private String value;
}

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

@ -1,5 +1,6 @@
package com.epmet.dataaggre.dto.epmetuser.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
@ -28,5 +29,11 @@ public class StaffListResultDTO implements Serializable {
private String gender = "0";
//正在巡查中:patrolling;否则返回空字符串
private String status = "";
//上报项目数
private Integer reportProjectCount;
//巡查总时长
private String totalTime = "";
@JsonIgnore
private Integer timeNum;
}

29
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java

@ -12,6 +12,7 @@ import com.epmet.dataaggre.dto.epmetuser.form.PatrolRecordListFormDTO;
import com.epmet.dataaggre.dto.epmetuser.form.StaffListFormDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PatrolDateListResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PatrolRecordListResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PersonalPatrolListResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.StaffListResultDTO;
import com.epmet.dataaggre.service.epmetuser.EpmetUserService;
import org.springframework.beans.factory.annotation.Autowired;
@ -79,5 +80,33 @@ public class EpmetUserController {
return new Result<PatrolDateListResultDTO>().ok(epmetUserService.patrolDateList(formDTO));
}
/**
* @Param formDTO
* @Description 更多-巡查记录-人员巡查记录列表
* @author sun
*/
@PostMapping("staffpatrollist")
@RequirePermission(requirePermission = RequirePermissionEnum.MORE_PATROL_RECORD_LIST)
public Result<List<StaffListResultDTO>> staffPatrolList(@LoginUser TokenDto tokenDto, @RequestBody StaffListFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, StaffListFormDTO.Staff.class);
if (!"patrolTotal".equals(formDTO.getSortCode()) && !"latestPatrolledTime".equals(formDTO.getSortCode())
&& !"reportProjectCount".equals(formDTO.getSortCode()) && !"totalTime".equals(formDTO.getSortCode())) {
throw new RenException("参数错误,排序条件值错误");
}
if (formDTO.getTime() != 1 && formDTO.getTime() != 3) {
throw new RenException("参数错误,最近时间值不正确");
}
formDTO.setUserId(tokenDto.getUserId());
return new Result<List<StaffListResultDTO>>().ok(epmetUserService.staffPatrolList(formDTO));
}
/**
* @Description 个人中心-网格员巡查记录
* @author sun
*/
@PostMapping("personalpatrollist")
public Result<List<PersonalPatrolListResultDTO>> personalPatrolList(@LoginUser TokenDto tokenDto) {
return new Result<List<PersonalPatrolListResultDTO>>().ok(epmetUserService.personalPatrolList(tokenDto.getUserId()));
}
}

12
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/StaffPatrolRecordDao.java

@ -23,6 +23,7 @@ import com.epmet.dataaggre.dto.epmetuser.form.StaffListFormDTO;
import com.epmet.dataaggre.dto.epmetuser.result.StaffListResultDTO;
import com.epmet.dataaggre.entity.epmetuser.StaffPatrolRecordEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -41,4 +42,15 @@ public interface StaffPatrolRecordDao extends BaseDao<StaffPatrolRecordEntity> {
*/
List<StaffListResultDTO> selectPatrolList(StaffListFormDTO formDTO);
/**
* @Description 按条件查询巡查业务数据V2
* @author sun
*/
List<StaffListResultDTO> selectStaffPatrolList(StaffListFormDTO formDTO);
/**
* @Description 汇总查询当前工作人员所有巡查记录数据
* @author sun
*/
StaffListResultDTO selectPersonalPatrolList(@Param("staffId") String staffId);
}

6
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/CustomerGridDao.java

@ -62,4 +62,10 @@ public interface CustomerGridDao extends BaseDao<CustomerGridEntity> {
* @Description 查询工作人员所属组织下网格列表
**/
List<CustomerGridDTO> gridListByStaffId(@Param("staffId") String staffId);
/**
* @Description 有网格列表的查询网格基本信息没有的查询工作人员所属组织级下级所有的网格信息
* @author sun
*/
List<CustomerGridDTO> getGridInfoList(@Param("gridIds") List<String> gridIds, @Param("staffId") String staffId);
}

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

@ -3,10 +3,7 @@ package com.epmet.dataaggre.service.epmetuser;
import com.epmet.dataaggre.dto.epmetuser.form.PatrolDateListFormDTO;
import com.epmet.dataaggre.dto.epmetuser.form.PatrolRecordListFormDTO;
import com.epmet.dataaggre.dto.epmetuser.form.StaffListFormDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PatrolDateListResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.PatrolRecordListResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.StaffListResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.UserInfosResultDTO;
import com.epmet.dataaggre.dto.epmetuser.result.*;
import com.epmet.dataaggre.dto.govorg.result.GridStaffResultDTO;
import java.util.List;
@ -64,4 +61,16 @@ public interface EpmetUserService {
*/
List<GridStaffResultDTO> staffGridRole(List<GridStaffResultDTO> forms, String staffName);
/**
* @Param formDTO
* @Description 更多-巡查记录-人员巡查记录列表
* @author sun
*/
List<StaffListResultDTO> staffPatrolList(StaffListFormDTO formDTO);
/**
* @Description 个人中心-网格员巡查记录
* @author sun
*/
List<PersonalPatrolListResultDTO> personalPatrolList(String staffId);
}

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

@ -25,6 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -247,5 +249,85 @@ public class EpmetUserServiceImpl implements EpmetUserService {
return result;
}
/**
* @Param formDTO
* @Description 更多-巡查记录-人员巡查记录列表
* @author sun
*/
@Override
public List<StaffListResultDTO> staffPatrolList(StaffListFormDTO formDTO) {
List<StaffListResultDTO> resultList = new ArrayList<>();
//1.查询网格信息供后续封装数据使用
List<CustomerGridDTO> list = govOrgService.getGridInfoList(formDTO.getGridIds(), formDTO.getUserId());
if (CollectionUtils.isEmpty(formDTO.getGridIds())) {
formDTO.setGridIds(list.stream().map(CustomerGridDTO::getId).collect(Collectors.toList()));
}
//2.按条件分页查询业务数据
int pageIndex = (formDTO.getPageNo() - NumConstant.ONE) * formDTO.getPageSize();
formDTO.setPageNo(pageIndex);
//起始查询日期
formDTO.setPatrolStartTime(DateUtils.getBeforeMonthDate(formDTO.getTime(), "yyyyMMdd"));
resultList = staffPatrolRecordDao.selectStaffPatrolList(formDTO);
//3.封装数据并返回
resultList.forEach(re -> list.stream().filter(l -> re.getGridId().equals(l.getId())).forEach(s -> re.setGridName(s.getGridName())));
//NumberFormat numberFormat = NumberFormat.getInstance();
//numberFormat.setMaximumFractionDigits(NumConstant.ZERO);
resultList.forEach(re -> {
String totalTime = "0分钟";
if (re.getTimeNum() > NumConstant.ZERO) {
int num = re.getTimeNum() / 60;
int hour = num / 60;
int minute = num % 60;
totalTime = (hour < 1 ? "" : hour + "小时") + (minute < 1 ? "" : minute + "分钟");
}
re.setTotalTime(totalTime == "" ? "0分钟" : totalTime);
//re.setTotalTime(re.getTimeNum() < 1 ? BigDecimal.ZERO + "h" : new BigDecimal(numberFormat.format((float) re.getTimeNum() / (float) 3600)) + "h");
//re.setTotalTime(re.getTimeNum() / 60 + "分钟");
list.stream().filter(l -> re.getGridId().equals(l.getId())).forEach(s -> re.setGridName(s.getGridName()));
});
return resultList;
}
/**
* @Description 个人中心-网格员巡查记录
* @author sun
*/
@Override
public List<PersonalPatrolListResultDTO> personalPatrolList(String staffId) {
LinkedList<PersonalPatrolListResultDTO> resultList = new LinkedList<>();
//1.汇总查询当前工作人员所有巡查记录数据
StaffListResultDTO resultDTO = staffPatrolRecordDao.selectPersonalPatrolList(staffId);
if (null == resultDTO) {
return resultList;
}
//2.封装数据并返回
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(NumConstant.ZERO);
PersonalPatrolListResultDTO personal1 = new PersonalPatrolListResultDTO();
personal1.setKey("总次数");
personal1.setValue(resultDTO.getPatrolTotal().toString());
resultList.add(personal1);
PersonalPatrolListResultDTO personal2 = new PersonalPatrolListResultDTO();
personal2.setKey("总时长");
//personal2.setValue(resultDTO.getTimeNum() / 60 + "分钟");
String totalTime = "0分钟";
if (resultDTO.getTimeNum() > NumConstant.ZERO) {
int num = resultDTO.getTimeNum() / 60;
int hour = num / 60;
int minute = num % 60;
totalTime = (hour < 1 ? "" : hour + "小时") + (minute < 1 ? "" : minute + "分钟");
}
personal2.setValue(totalTime == "" ? "0分钟" : totalTime);
resultList.add(personal2);
PersonalPatrolListResultDTO personal3 = new PersonalPatrolListResultDTO();
personal3.setKey("事件数");
personal3.setValue(resultDTO.getReportProjectCount().toString());
resultList.add(personal3);
return resultList;
}
}

6
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/GovOrgService.java

@ -59,4 +59,10 @@ public interface GovOrgService {
* @author sun
*/
List<GridStaffResultDTO> selectGridStaffByGridIds(List<String> gridIds, String staffName);
/**
* @Description 查询网格信息或查询当前人员所属组织下所有网格信息
* @author sun
*/
List<CustomerGridDTO> getGridInfoList(List<String> gridIds, String staffId);
}

11
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java

@ -264,4 +264,15 @@ public class GovOrgServiceImpl implements GovOrgService {
return result;
}
/**
* @Description 查询网格信息或查询当前人员所属组织下所有网格信息
* @author sun
*/
@Override
public List<CustomerGridDTO> getGridInfoList(List<String> gridIds, String staffId) {
//1.有网格列表的查询网格基本信息,没有的查询工作人员所属组织级下级所有的网格信息
List<CustomerGridDTO> list = customerGridDao.getGridInfoList(gridIds, staffId);
return list;
}
}

58
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StaffPatrolRecordDao.xml

@ -51,4 +51,62 @@
-->
</select>
<select id="selectStaffPatrolList" resultType="com.epmet.dataaggre.dto.epmetuser.result.StaffListResultDTO">
SELECT
ssp.grid_id AS gridId,
ssp.staff_id AS staffId,
cs.real_name AS staffName,
cs.gender AS gender,
IFNULL(MAX(ssp.latest_patrol_time), '') AS patrolStartTime,
IFNULL(SUM(ssp.patrol_total), 0) AS patrolTotal,
ssp.latest_patrol_status AS STATUS,
IFNULL(SUM(ssp.report_project_count), 0) AS reportProjectCount,
IFNULL(SUM(ssp.total_time), 0) AS timeNum
FROM
stats_staff_patrol_record_daily ssp
LEFT JOIN customer_staff cs ON ssp.staff_id = cs.user_id
WHERE
ssp.del_flag = '0'
AND ssp.date_id >= #{patrolStartTime}
<if test="staffName!= null and staffName != ''">
AND cs.real_name = #{staffName}
</if>
<if test="gridIds != null and gridIds.size() > 0">
<foreach collection="gridIds" item="gridId" open="AND (" separator=" OR " close=" )" >
ssp.grid_id = #{gridId}
</foreach>
</if>
GROUP BY ssp.grid_id, ssp.staff_id
<if test="sortCode!= null and sortCode != ''">
<choose>
<when test="sortCode == 'patrolTotal' ">
ORDER BY SUM(ssp.patrol_total) DESC
</when>
<when test="sortCode == 'latestPatrolledTime' ">
ORDER BY MAX(ssp.latest_patrol_time) DESC
</when>
<when test="sortCode == 'reportProjectCount' ">
ORDER BY SUM(ssp.report_project_count) DESC
</when>
<otherwise>
ORDER BY SUM(ssp.total_time) DESC
</otherwise>
</choose>
</if>
LIMIT
#{pageNo}, #{pageSize}
</select>
<select id="selectPersonalPatrolList" resultType="com.epmet.dataaggre.dto.epmetuser.result.StaffListResultDTO">
SELECT
IFNULL(SUM(ssp.patrol_total), 0) AS patrolTotal,
IFNULL(SUM(ssp.total_time), 0) AS timeNum,
IFNULL(SUM(ssp.report_project_count), 0) AS reportProjectCount
FROM
stats_staff_patrol_record_daily ssp
WHERE
ssp.del_flag = '0'
AND ssp.staff_id = #{staffId}
</select>
</mapper>

48
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/CustomerGridDao.xml

@ -99,4 +99,52 @@
)
</select>
<select id="getGridInfoList" resultType="com.epmet.dataaggre.dto.govorg.CustomerGridDTO">
SELECT
cg.id AS 'id',
IF (
ca.pid = '0',
IF (
ca.organization_name = '',
cg.grid_name,
CONCAT(ca.organization_name,'-',cg.grid_name)
),
CONCAT(
(select organization_name from customer_agency where id = ca.pid),
'-',
IF (
ca.organization_name = '',
cg.grid_name,
CONCAT(ca.organization_name,'-',cg.grid_name)
)
)
)AS 'gridName'
FROM
customer_grid cg
INNER JOIN customer_agency ca ON cg.pid = ca.id
WHERE
cg.del_flag = '0'
AND ca.del_flag = '0'
<choose>
<when test="gridIds != null and gridIds.size() > 0">
<foreach collection="gridIds" item="id" open="AND (" separator=" OR " close=" )" >
cg.id = #{id}
</foreach>
</when>
<otherwise>
AND cg.pids
LIKE CONCAT(
'%',
(
select agency_id
from customer_staff_agency
where del_flag = '0'
AND user_id = #{staffId}
),
'%'
)
</otherwise>
</choose>
</select>
</mapper>

41
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/BizDataFormDTO.java

@ -0,0 +1,41 @@
package com.epmet.dto.extract.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* desc: 从业务数据抽取到统计库 dto
*
* @Author zxc
* @DateTime 2020/9/16 6:01 下午
*/
@Data
public class BizDataFormDTO implements Serializable {
private static final long serialVersionUID = 2860395703825549825L;
public interface ExtractForm extends CustomerClientShowGroup {
}
@NotBlank(message = "客户ID不能为空", groups = ExtractForm.class)
private String customerId;
@NotBlank(message = "dateId不能为空", groups = ExtractForm.class)
private String dateId;
private String userId;
private String gridId;
/**
* 开始时间
*/
private String startDate;
/**
* 结束时间
*/
private String endDate;
}

25
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/StaffPatrolStatsFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.dto.extract.form;
import lombok.Data;
import java.io.Serializable;
/**
* desc: 工作人员巡查统计参数
*
* @author LiuJanJun
* @date 2021/6/29 10:19 上午
*/
@Data
public class StaffPatrolStatsFormDTO implements Serializable {
private static final long serialVersionUID = -3639860733213306581L;
private String customerId;
private String dateId;
private String staffId;
private String gridId;
/**
* 角色key
*/
private String roleKey;
}

61
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/CustomerGridStaffDTO.java

@ -0,0 +1,61 @@
/**
* 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.dto.user.result;
import lombok.Data;
import java.io.Serializable;
/**
* 政府工作人员表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-04-18
*/
@Data
public class CustomerGridStaffDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 网格id
*/
private String gridId;
/**
* 网格所属组织id
*/
private String agencyId;
/**
* 网格所属的所有组织id
*/
private String gridPids;
/**
* 关联User表的主键Id
*/
private String userId;
}

137
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/CustomerStaffDTO.java

@ -0,0 +1,137 @@
/**
* 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.dto.user.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 政府工作人员表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-04-18
*/
@Data
public class CustomerStaffDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private String id;
/**
* 关联User表的主键Id
*/
private String userId;
/**
* 真实姓名
*/
private String realName;
/**
* 性别0.未知1男2.
*/
private Integer gender;
/**
* 邮箱
*/
private String email;
/**
* 手机号-唯一键
*/
private String mobile;
/**
* 地址
*/
private String address;
/**
* 删除标识
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
/**
* fulltime专职parttime兼职
*/
private String workType;
/**
* 头像
*/
private String headPhoto;
/**
* inactive未激活active已激活
*/
private String activeFlag;
/**
* 激活时间
*/
private Date activeTime;
/**
* 未禁用enable,已禁用diabled
*/
private String enableFlag;
/**
* 客户id
*/
private String customerId;
/**
* 角色名称
*/
private String roleName;
}

122
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/StaffPatrolRecordResult.java

@ -0,0 +1,122 @@
/**
* 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.dto.user.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 工作人员巡查主记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-07
*/
@Data
public class StaffPatrolRecordResult implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户Id
*/
private String customerId;
/**
* 网格id
*/
private String grid;
/**
* 网格所有上级id
*/
private String gridPids;
/**
* 工作人员用户id
*/
private String staffId;
/**
* 工作人员所属组织id=网格所属的组织id
*/
private String agencyId;
/**
* 巡查开始时间
*/
private Date patrolStartTime;
/**
* 巡查结束时间,前端传入
*/
private Date patrolEndTime;
/**
* 实际结束时间=操作结束巡查的时间
*/
private Date actrualEndTime;
/**
* 本次巡查总耗时单位秒结束巡查时写入
*/
private Integer totalTime;
/**
* 正在巡查中patrolling结束end
*/
private String status;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

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

@ -0,0 +1,147 @@
/**
* 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.dto.user.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-29
*/
@Data
public class StatsStaffPatrolRecordDailyDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户Id
*/
private String customerId;
/**
* 统计日期 关联日期dim表
*/
private String dateId;
/**
* 周ID
*/
private String weekId;
/**
* 月ID
*/
private String monthId;
/**
* 季ID
*/
private String quarterId;
/**
* 年ID
*/
private String yearId;
/**
* 网格id
*/
private String gridId;
/**
* 工作人员所属组织id=网格所属的组织id
*/
private String agencyId;
/**
* 网格所有上级id
*/
private String gridPids;
/**
* 工作人员用户id
*/
private String staffId;
/**
* 巡查次数
*/
private Integer patrolTotal;
/**
* 巡查时长 单位
*/
private Integer totalTime;
/**
* 巡查期间直接立项项目数
*/
private Integer reportProjectCount;
/**
* 最新的巡查开始时间
*/
private Date latestPatrolTime;
/**
* 最新的巡查状态 正在巡查中patrolling结束end
*/
private String latestPatrolStatus;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

14
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java

@ -3,9 +3,7 @@ package com.epmet.feign;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.StatsFormDTO;
import com.epmet.dto.extract.form.ExtractIndexFormDTO;
import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.dto.extract.form.ExtractScreenFormDTO;
import com.epmet.dto.extract.form.*;
import com.epmet.dto.group.form.GroupStatsFormDTO;
import com.epmet.dto.screen.form.InitCustomerIndexForm;
import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO;
@ -256,4 +254,14 @@ public interface DataStatisticalOpenFeignClient {
@PostMapping("/data/stats/vanguard/gridvanguardstats")
Result gridVanguardStats(@RequestBody StatsFormDTO formDTO);
/**
* desc: 业务库按天统计 统一入库
*
* @param formDTO
* @return com.epmet.commons.tools.utils.Result
* @author LiuJanJun
* @date 2021/7/2 3:04 下午
*/
@PostMapping("/data/stats/bizData/stats/daily")
Result exeStatsDaily(@RequestBody BizDataFormDTO formDTO);
}

9
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java

@ -4,9 +4,7 @@ import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.StatsFormDTO;
import com.epmet.dto.extract.form.ExtractIndexFormDTO;
import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.dto.extract.form.ExtractScreenFormDTO;
import com.epmet.dto.extract.form.*;
import com.epmet.dto.group.form.GroupStatsFormDTO;
import com.epmet.dto.screen.form.InitCustomerIndexForm;
import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO;
@ -256,4 +254,9 @@ public class DataStatisticalOpenFeignClientFallBack implements DataStatisticalOp
public Result gridVanguardStats(StatsFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.DATA_STATISTICAL_SERVER, "gridVanguardStats", formDTO);
}
@Override
public Result exeStatsDaily(BizDataFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.DATA_STATISTICAL_SERVER, "exeStatsDaily", formDTO);
}
}

46
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/BizDataStatsController.java

@ -0,0 +1,46 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.extract.form.BizDataFormDTO;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.service.evaluationindex.extract.biz.BizDataStatsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description 用户统计
* @ClassName StatsUserController
* @Auth wangc
* @Date 2020-06-23 15:18
*/
@RestController
@RequestMapping("bizData/stats")
public class BizDataStatsController {
@Autowired
private BizDataStatsService bizDataStatsService;
/**
* @return com.epmet.commons.tools.utils.Result
* @param formDTO
* @description 业务库统计数据 统一入库
* @Date 2021/3/26 13:27
**/
@RequestMapping("daily")
public Result execute(@RequestBody BizDataFormDTO formDTO) {
bizDataStatsService.exeDailyAll(formDTO);
return new Result();
} /**
* @return com.epmet.commons.tools.utils.Result
* @param formDTO
* @description 工作端数据一期用户分析参与用户注册用户分析
* @Date 2021/3/26 13:27
**/
@RequestMapping("patrol")
public Result execute(@RequestBody StaffPatrolStatsFormDTO formDTO) {
bizDataStatsService.executeStaffPatrolStats(formDTO);
return new Result();
}
}

38
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/org/CustomerStaffGridDao.java

@ -0,0 +1,38 @@
/**
* 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.dao.org;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.user.result.CustomerGridStaffDTO;
import com.epmet.entity.org.CustomerStaffGridEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 客户网格人员关系表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-03-16
*/
@Mapper
public interface CustomerStaffGridDao extends BaseDao<CustomerStaffGridEntity> {
List<CustomerGridStaffDTO> selectGridStaffList(StaffPatrolStatsFormDTO formDTO);
}

63
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/project/ProjectDao.java

@ -18,16 +18,12 @@
package com.epmet.dao.project;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.CustomerProjectParameterDTO;
import com.epmet.dto.ProjectDTO;
import com.epmet.dto.ProjectSatisfactionStatisticsDTO;
import com.epmet.dto.project.ProjectAgencyDTO;
import com.epmet.dto.project.ProjectCategoryDTO;
import com.epmet.dto.project.ProjectGridDTO;
import com.epmet.dto.project.ProjectPointDTO;
import com.epmet.dto.project.result.ProjectExceedParamsResultDTO;
import com.epmet.dto.screen.ScreenProjectProcessAttachmentDTO;
import com.epmet.entity.evaluationindex.extract.FactOriginProjectMainDailyEntity;
import com.epmet.entity.project.ProjectEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -52,110 +48,119 @@ public interface ProjectDao extends BaseDao<ProjectEntity> {
/**
* 已结案项目统计
* @author zhaoqifeng
* @date 2020/6/18 17:01
*
* @param customerId
* @param date
* @return java.util.List<com.epmet.dto.project.ProjectAgencyDTO>
* @author zhaoqifeng
* @date 2020/6/18 17:01
*/
List<ProjectAgencyDTO> selectAgencyClosedProjectTotal(@Param("customerId") String customerId, @Param("date") String date);
/**
* 已结案项目增量
* @author zhaoqifeng
* @date 2020/6/18 17:01
*
* @param customerId
* @param date
* @return java.util.List<com.epmet.dto.project.ProjectAgencyDTO>
* @author zhaoqifeng
* @date 2020/6/18 17:01
*/
List<ProjectAgencyDTO> selectAgencyClosedProjectInc(@Param("customerId") String customerId, @Param("date") String date);
/**
* 已结案项目统计
* @author zhaoqifeng
* @date 2020/6/18 17:01
*
* @param customerId
* @param date
* @return java.util.List<com.epmet.dto.project.ProjectGridDTO>
* @author zhaoqifeng
* @date 2020/6/18 17:01
*/
List<ProjectGridDTO> selectGridClosedProjectTotal(@Param("customerId") String customerId, @Param("date") String date);
/**
* 已结案项目增量
* @author zhaoqifeng
* @date 2020/6/18 17:01
*
* @param customerId
* @param date
* @return java.util.List<com.epmet.dto.project.ProjectGridDTO>
* @author zhaoqifeng
* @date 2020/6/18 17:01
*/
List<ProjectGridDTO> selectGridClosedProjectInc(@Param("customerId") String customerId, @Param("date") String date);
/**
* 获取项目信息
* @author zhaoqifeng
* @date 2020/9/15 16:13
*
* @param customerId
* @param date
* @return java.util.List<com.epmet.dto.project.ProjectInfoDTO>
* @author zhaoqifeng
* @date 2020/9/15 16:13
*/
List<ProjectDTO> selectProjectInfo(@Param("customerId") String customerId, @Param("date") String date);
/**
* 获取用户可滞留天数
* @author zhaoqifeng
* @date 2020/9/28 10:16
*
* @param customerId
* @return java.lang.String
* @author zhaoqifeng
* @date 2020/9/28 10:16
*/
String selectParameterValueByKey(@Param("customerId") String customerId);
/**
* @Description 查找客户项目超期参数
*
* @param customerId
* @return java.util.List<com.epmet.dto.project.result.ProjectExceedParamsResultDTO>
* @Description 查找客户项目超期参数
* @author wangc
* @date 2021.03.05 17:52
*/
*/
List<ProjectExceedParamsResultDTO> selectProjectExceedParams(@Param("customerId") String customerId);
/**
* @Description 批量查询项目信息
* @param ids
* @return java.util.List<com.epmet.entity.project.ProjectEntity>
* @Description 批量查询项目信息
* @author wangc
* @date 2021.03.08 10:32
*/
List<ProjectEntity> batchSelectProjectInfo(@Param("ids")List<String> ids);
*/
List<ProjectEntity> batchSelectProjectInfo(@Param("ids") List<String> ids);
/**
* @Description 查询项目的分类信息
* @param list
* @return java.util.List<com.epmet.dto.project.ProjectCategoryDTO>
* @Description 查询项目的分类信息
* @author wangc
* @date 2021.03.08 23:44
*/
List<ProjectCategoryDTO> selectProjectCategory(@Param("list")List<String> list);
*/
List<ProjectCategoryDTO> selectProjectCategory(@Param("list") List<String> list);
List<com.epmet.dto.ProjectCategoryDTO> getProjectCategoryData(@Param("customerId") String customerId, @Param("dateId") String dateId);
/**
* 获取项目满意度
* @author zhaoqifeng
* @date 2021/5/21 10:06
*
* @param customerId
* @return java.util.List<com.epmet.dto.ProjectSatisfactionStatisticsDTO>
* @author zhaoqifeng
* @date 2021/5/21 10:06
*/
List<ProjectPointDTO> selectProjectSatisfaction(@Param("customerId") String customerId);
/**
* 根据key查找value
* @author zhaoqifeng
* @date 2021/5/21 10:58
*
* @param customerId
* @param parameterKey
* @return java.lang.String
* @author zhaoqifeng
* @date 2021/5/21 10:58
*/
String selectValueByKey(@Param("customerId") String customerId, @Param("parameterKey") String parameterKey);
List<ProjectDTO> selectProjectListByDateId(@Param("customerId") String customerId, @Param("dateId") String dateId, @Param("projectOrigin") String projectOrigin);
}

41
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/StatsStaffPatrolRecordDailyDao.java

@ -0,0 +1,41 @@
/**
* 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.dao.user;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO;
import com.epmet.entity.user.StatsStaffPatrolRecordDailyEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-29
*/
@Mapper
public interface StatsStaffPatrolRecordDailyDao extends BaseDao<StatsStaffPatrolRecordDailyEntity> {
Integer insertBatch(@Param("list") List<StatsStaffPatrolRecordDailyDTO> insertList);
int delete(StaffPatrolStatsFormDTO formDTO);
}

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

@ -1,9 +1,13 @@
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.screen.ScreenProjectDataDTO;
import com.epmet.dto.user.result.CommonTotalAndIncCountResultDTO;
import com.epmet.dto.user.result.CustomerStaffDTO;
import com.epmet.dto.user.result.StaffPatrolRecordResult;
import com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO;
import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -159,5 +163,19 @@ public interface UserDao {
* @date 2021/6/8 5:21 下午
*/
List<ScreenProjectDataDTO> selectStaffInfo(@Param("list") List<String> staffUserIdList);
/**
* desc: 根据角色key条件获取所有的人
*
* @param formDTO
* @return java.util.List<com.epmet.dto.user.result.StatsStaffPatrolRecordDalilyDTO>
* @author LiuJanJun
* @date 2021/6/29 2:58 下午
*/
List<CustomerStaffDTO> selectUserByRoleKey(StaffPatrolStatsFormDTO formDTO);
List<StatsStaffPatrolRecordDailyDTO> selectLastStaffPatrolList(StaffPatrolStatsFormDTO formDTO);
List<StaffPatrolRecordResult> selectStaffPatrolListByDateId(@Param("customerId") String customerId, @Param("dateId") String dateId);
}

40
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/org/CustomerStaffGridEntity.java

@ -0,0 +1,40 @@
/**
* 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.entity.org;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 客户网格表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-03-16
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("customer_staff_grid")
public class CustomerStaffGridEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
private String customerId;
private String gridId;
private String userId;
}

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

@ -0,0 +1,116 @@
/**
* 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.entity.user;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-29
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("stats_staff_patrol_record_daily")
public class StatsStaffPatrolRecordDailyEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户Id
*/
private String customerId;
/**
* 统计日期 关联日期dim表
*/
private String dateId;
/**
* 周ID
*/
private String weekId;
/**
* 月ID
*/
private String monthId;
/**
* 季ID
*/
private String quarterId;
/**
* 年ID
*/
private String yearId;
/**
* 网格id
*/
private String gridId;
/**
* 工作人员所属组织id=网格所属的组织id
*/
private String agencyId;
/**
* 网格所有上级id
*/
private String gridPids;
/**
* 工作人员用户id
*/
private String staffId;
/**
* 巡查次数
*/
private Integer patrolTotal;
/**
* 巡查时长 单位
*/
private Integer totalTime;
/**
* 巡查期间直接立项项目数
*/
private Integer reportProjectCount;
/**
* 最新的巡查开始时间
*/
private Date latestPatrolTime;
/**
* 最新的巡查状态 正在巡查中patrolling结束end
*/
private String latestPatrolStatus;
}

40
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/biz/BizDataStatsService.java

@ -0,0 +1,40 @@
/**
* 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.service.evaluationindex.extract.biz;
import com.epmet.dto.extract.form.BizDataFormDTO;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-29
*/
public interface BizDataStatsService {
/**
* desc:抽取所有业务数据到统计库
*
* @param dataFormDTO
*/
void exeDailyAll(BizDataFormDTO dataFormDTO);
void executeStaffPatrolStats(StaffPatrolStatsFormDTO formDTO);
}

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

@ -0,0 +1,300 @@
package com.epmet.service.evaluationindex.extract.biz.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
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.user.result.CustomerGridStaffDTO;
import com.epmet.dto.user.result.CustomerStaffDTO;
import com.epmet.dto.user.result.StaffPatrolRecordResult;
import com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO;
import com.epmet.service.evaluationindex.extract.biz.BizDataStatsService;
import com.epmet.service.org.CustomerStaffService;
import com.epmet.service.project.ProjectService;
import com.epmet.service.stats.DimCustomerService;
import com.epmet.service.user.StatsStaffPatrolService;
import com.epmet.service.user.UserService;
import com.epmet.util.DimIdGenerator;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
* desc:业务库里的统计
*
* @author: LiuJanJun
* @date: 2021/6/29 3:08 下午
* @version: 1.0
*/
@Slf4j
@Service
public class BizDataStatsServiceImpl implements BizDataStatsService {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("bizDataStats-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(3, 6,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired
private CustomerStaffService customerStaffService;
@Autowired
private UserService userService;
@Autowired
private ProjectService projectService;
@Autowired
private StatsStaffPatrolService statsStaffPatrolService;
@Autowired
private DimCustomerService dimCustomerService;
@Override
public void exeDailyAll(BizDataFormDTO dataFormDTO) {
String customerId = dataFormDTO.getCustomerId();
List<String> customerIds = new ArrayList<>();
if (StringUtils.isNotBlank(customerId)) {
//指定某个客户
customerIds.add(customerId);
} else {
//查询全部客户
int pageNo = NumConstant.ONE;
int pageSize = NumConstant.ONE_HUNDRED;
customerIds = dimCustomerService.selectCustomerIdPage(pageNo, pageSize);
if (org.springframework.util.CollectionUtils.isEmpty(customerIds)) {
log.error("exeDailyAll 获取客户Id为空");
return;
}
}
customerIds.forEach(cId -> {
dataFormDTO.setCustomerId(cId);
log.info("exeDailyAll param:{}", JSON.toJSONString(dataFormDTO));
submitJob(dataFormDTO);
});
}
@Override
public void executeStaffPatrolStats(StaffPatrolStatsFormDTO formDTO) {
//校正参数里的前一天日期的数据
//获取所有网格员
List<CustomerGridStaffDTO> allGridMembers = getAllGridMembers(formDTO);
if (CollectionUtils.isEmpty(allGridMembers)){
log.warn("executeStaffPatrolStats have any gridMembers,param:{}",JSON.toJSONString(formDTO));
return;
}
String yesterdayStr = getYesterdayString(formDTO);
StaffPatrolStatsFormDTO yesterdayParam = ConvertUtils.sourceToTarget(formDTO, StaffPatrolStatsFormDTO.class);
yesterdayParam.setDateId(yesterdayStr);
reloadStaffPatrolStatsData(yesterdayParam, allGridMembers);
//初始化参数里日期的数据 如果当前时间在1分钟内 则初始化
String todayDateDimId = DimIdGenerator.getDateDimId(new Date());
if (todayDateDimId.equals(formDTO.getDateId())){
//如果当前时间-1分钟还等于今天 则进行初始化操作 否则执行数据纠正
String dateDimId = DimIdGenerator.getDateDimId(new Date(System.currentTimeMillis() - 1 * 60 * 1000));
if (!dateDimId.equals(todayDateDimId)){
initStaffPatrolTodayData(formDTO, allGridMembers);
}else{
reloadStaffPatrolStatsData(formDTO, allGridMembers);
}
}
}
private void reloadStaffPatrolStatsData(StaffPatrolStatsFormDTO formDTO, List<CustomerGridStaffDTO> allGridMembers) {
log.info("reloadStaffPatrolStatsData param:{}",JSON.toJSONString(formDTO));
//获取昨日的巡查统计记录
//遍历网格员重新初始化数据
List<StatsStaffPatrolRecordDailyDTO> insertList = buildInitPatrolStatsData(formDTO, allGridMembers);
Map<String, StatsStaffPatrolRecordDailyDTO> yesterdayStatsMap = insertList.stream().collect(Collectors.toMap(o -> o.getGridId() + o.getStaffId(), o -> o, (o1, o2) -> o1));
//获取昨日的巡查记录
List<StaffPatrolRecordResult> yesterdayPatrolList = userService.selectStaffPatrolListByDateId(formDTO.getCustomerId(), formDTO.getDateId());
//获取昨日的立项项目数
List<ProjectDTO> yesterdayProjectList = projectService.selectProjectListByDateId(formDTO.getCustomerId(), formDTO.getDateId(), ProjectConstant.PROJECT_ORIGIN_AGENCY);
//遍历网格员 设置其 巡查次数 巡查时常 上报项目数
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());
}
}
});
//填充项目数
yesterdayProjectList.forEach(projectDTO -> {
yesterdayPatrolList.forEach(patrol -> {
//项目立项时间 在巡查期间时 总数加1
long projectCreateTime = projectDTO.getCreatedTime().getTime();
//创建人为网格员 且时间在巡查期间的 则上报的项目数加1
if (projectDTO.getCreatedBy().equals(patrol.getStaffId()) && projectCreateTime >= patrol.getPatrolStartTime().getTime() && projectCreateTime <= patrol.getPatrolEndTime().getTime()) {
String unqPatrolKey = getUnqPatrolKey(patrol.getGrid(), patrol.getStaffId());
StatsStaffPatrolRecordDailyDTO recordDailyDTO = yesterdayStatsMap.get(unqPatrolKey);
if (recordDailyDTO == null) {
log.error("have project data but have any patrolRecordDaily,gridId:{},staffId:{}", patrol.getGrid(), patrol.getStaffId());
return;
}
recordDailyDTO.setReportProjectCount(recordDailyDTO.getReportProjectCount() + 1);
}
});
});
Integer effectRow = statsStaffPatrolService.delAndInsertBatch(formDTO, insertList);
log.debug("initStaffPatrolStats insert rows:{}", effectRow);
}
/**
* desc: 获取key
*
* @param gridId
* @param staffId
* @return java.lang.String
* @author LiuJanJun
* @date 2021/7/2 8:32 上午
*/
private String getUnqPatrolKey(String gridId, String staffId) {
return gridId.concat(staffId);
}
@Nullable
private String getYesterdayString(StaffPatrolStatsFormDTO formDTO) {
Date dateParam = DateUtils.parse(formDTO.getDateId(), DateUtils.DATE_PATTERN_YYYYMMDD);
Date yesterdayDate = DateUtils.addDateDays(dateParam, -1);
return DateUtils.format(yesterdayDate, DateUtils.DATE_PATTERN_YYYYMMDD);
}
private void initStaffPatrolTodayData(StaffPatrolStatsFormDTO formDTO, List<CustomerGridStaffDTO> allGridMembers) {
log.info("initStaffPatrolTodayData param:{}",JSON.toJSONString(formDTO));
List<StatsStaffPatrolRecordDailyDTO> insertList = buildInitPatrolStatsData(formDTO, allGridMembers);
Integer effectRow = statsStaffPatrolService.delAndInsertBatch(formDTO, insertList);
log.debug("initStaffPatrolStats insert rows:{}", effectRow);
}
@NotNull
private List<StatsStaffPatrolRecordDailyDTO> buildInitPatrolStatsData(StaffPatrolStatsFormDTO formDTO, List<CustomerGridStaffDTO> allGridMembers) {
List<StatsStaffPatrolRecordDailyDTO> lastStaffPatrolList = userService.selectLastStaffPatrolList(formDTO);
Map<String, StatsStaffPatrolRecordDailyDTO> lastPatrolMap = lastStaffPatrolList.stream().collect(Collectors.toMap(o -> o.getGridId() + o.getStaffId(), o -> o, (o1, o2) -> o1));
//构建数据 插入
List<StatsStaffPatrolRecordDailyDTO> insertList = new ArrayList<>();
Date date = DateUtils.parse(formDTO.getDateId(), DateUtils.DATE_PATTERN_YYYYMMDD);
DimIdGenerator.DimIdBean dimIdBean = DimIdGenerator.getDimIdBean(date);
allGridMembers.forEach(gridMember -> {
StatsStaffPatrolRecordDailyDTO record = new StatsStaffPatrolRecordDailyDTO();
record.setCustomerId(gridMember.getCustomerId());
record.setGridId(gridMember.getGridId());
record.setAgencyId(gridMember.getAgencyId());
record.setGridPids(gridMember.getGridPids());
record.setStaffId(gridMember.getUserId());
record.setDateId(dimIdBean.getDateId());
record.setWeekId(dimIdBean.getWeekId());
record.setQuarterId(dimIdBean.getQuarterId());
record.setYearId(dimIdBean.getYearId());
record.setMonthId(dimIdBean.getMonthId());
StatsStaffPatrolRecordDailyDTO recordDailyDTO = lastPatrolMap.get(gridMember.getGridId().concat(gridMember.getUserId()));
record.setTotalTime(NumConstant.ZERO);
record.setPatrolTotal(NumConstant.ZERO);
record.setLatestPatrolStatus("end");
record.setReportProjectCount(NumConstant.ZERO);
//最后巡查时间
record.setLatestPatrolTime(null);
if (recordDailyDTO != null) {
record.setLatestPatrolStatus(recordDailyDTO.getLatestPatrolStatus());
record.setLatestPatrolTime(recordDailyDTO.getLatestPatrolTime());
}
insertList.add(record);
});
return insertList;
}
private List<CustomerGridStaffDTO> getAllGridMembers(StaffPatrolStatsFormDTO formDTO) {
//获取所有的网格员
//1.获取所有网格用户
List<CustomerGridStaffDTO> allStaffList = customerStaffService.selectStaffGridList(formDTO);
if (CollectionUtils.isEmpty(allStaffList)) {
log.warn("reloadStaffPatrolStats customerId:{} have any staff,param:{}", formDTO.getCustomerId(), JSON.toJSONString(formDTO));
return allStaffList;
}
//获取所有含有网格员角色的用户
List<CustomerStaffDTO> gridMemberList = userService.selectUserListByRoleKey(formDTO);
if (CollectionUtils.isEmpty(gridMemberList)) {
log.warn("reloadStaffPatrolStats customerId:{} have any gridMembers,param:{}", formDTO.getCustomerId(), JSON.toJSONString(formDTO));
return allStaffList;
}
List<CustomerGridStaffDTO> insertList = new ArrayList<>();
allStaffList.forEach(gridStaff -> gridMemberList.forEach(gridMember -> {
if (gridStaff.getUserId().equals(gridMember.getUserId())) {
insertList.add(gridStaff);
}
}));
log.debug("getAllGridMembers result:{},param:{}", JSON.toJSONString(insertList), JSON.toJSONString(formDTO));
return insertList;
}
private void submitJob(BizDataFormDTO param) {
if (StringUtils.isBlank(param.getDateId()) && (StringUtils.isBlank(param.getStartDate()) && StringUtils.isBlank(param.getEndDate()))) {
//如果没有设置开始日期、结束日期,默认查询今天
param.setDateId(DimIdGenerator.getDateDimId(new Date()));
}
StaffPatrolStatsFormDTO formDTO = ConvertUtils.sourceToTarget(param, StaffPatrolStatsFormDTO.class);
boolean isRange = StringUtils.isBlank(formDTO.getDateId());
List<String> daysBetween = null;
if (isRange) {
daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
}
List<String> finalDaysBetween = daysBetween;
threadPool.submit(() -> {
if (!isRange) {
try {
//初始化form里的今天的数据 并纠正昨日的数据
this.executeStaffPatrolStats(formDTO);
} catch (Exception e) {
log.error("【网格员巡查数据统计】发生异常,参数:" + JSON.toJSONString(formDTO), e);
}
} else {
try {
for (String dateDimId : finalDaysBetween) {
formDTO.setDateId(dateDimId);
this.executeStaffPatrolStats(formDTO);
}
} catch (Exception e) {
log.error("【网格员巡查数据统计】发生异常,参数:" + JSON.toJSONString(param), e);
}
}
});
}
}

22
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/org/CustomerStaffService.java

@ -0,0 +1,22 @@
package com.epmet.service.org;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.user.result.CustomerGridStaffDTO;
import java.util.List;
/**
* @author liujianjun
*/
public interface CustomerStaffService {
/**
* desc: 条件获取 网格下的所有人
*
* @param formDTO
* @return java.util.List<com.epmet.dto.org.GridInfoDTO>
* @author LiuJanJun
* @date 2021/6/29 3:13 下午
*/
List<CustomerGridStaffDTO> selectStaffGridList(StaffPatrolStatsFormDTO formDTO);
}

39
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/org/impl/CustomerStaffServiceImpl.java

@ -0,0 +1,39 @@
package com.epmet.service.org.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.constant.DataSourceConstant;
import com.epmet.dao.org.CustomerStaffGridDao;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.user.result.CustomerGridStaffDTO;
import com.epmet.service.org.CustomerStaffService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2021/6/29 3:14 下午
* @version: 1.0
*/
@Service
@DataSource(DataSourceConstant.GOV_ORG)
public class CustomerStaffServiceImpl implements CustomerStaffService {
@Autowired
private CustomerStaffGridDao customerStaffGridDao;
/**
* desc: 条件获取 网格下的所有人
*
* @param formDTO
* @return java.util.List<com.epmet.dto.org.GridInfoDTO>
* @author LiuJanJun
* @date 2021/6/29 3:13 下午
*/
@Override
public List<CustomerGridStaffDTO> selectStaffGridList(StaffPatrolStatsFormDTO formDTO) {
return customerStaffGridDao.selectGridStaffList(formDTO);
}
}

1
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectService.java

@ -162,4 +162,5 @@ public interface ProjectService extends BaseService<ProjectEntity> {
*/
List<FactOriginProjectMainDailyEntity> getProjectSatisfaction(String customerId);
List<ProjectDTO> selectProjectListByDateId(String customerId, String yesterdayStr, String projectOriginAgency);
}

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectServiceImpl.java

@ -196,5 +196,10 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
}).collect(Collectors.toList());
}
@Override
public List<ProjectDTO> selectProjectListByDateId(String customerId, String dateId, String projectOrigin) {
return baseDao.selectProjectListByDateId(customerId,dateId,projectOrigin);
}
}

16
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/StatsStaffPatrolService.java

@ -0,0 +1,16 @@
package com.epmet.service.user;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO;
import java.util.List;
/**
* @author liujianjun
*/
public interface StatsStaffPatrolService {
Integer delAndInsertBatch(StaffPatrolStatsFormDTO formDTO, List<StatsStaffPatrolRecordDailyDTO> insertList);
List<StatsStaffPatrolRecordDailyDTO> selectData(String customerId, String yesterdayStr);
}

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

@ -2,9 +2,13 @@ package com.epmet.service.user;
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.screen.ScreenProjectDataDTO;
import com.epmet.dto.stats.user.result.UserStatisticalData;
import com.epmet.dto.user.result.CustomerStaffDTO;
import com.epmet.dto.user.result.StaffPatrolRecordResult;
import com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO;
import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity;
import com.epmet.util.DimIdGenerator;
@ -94,4 +98,18 @@ public interface UserService {
* @return com.epmet.dto.user.OrgGridManagerTotalDTO
*/
Map<String,Integer> queryOrgGridManager(String customerId,List<OrgStaffDTO> orgStaffDTOList);
/**
* desc: 请描述类的业务用途
*
* @param formDTO
* @return
* @author LiuJanJun
* @date 2021/6/29 10:15 上午
*/
List<CustomerStaffDTO> selectUserListByRoleKey(StaffPatrolStatsFormDTO formDTO);
List<StatsStaffPatrolRecordDailyDTO> selectLastStaffPatrolList(StaffPatrolStatsFormDTO formDTO);
List<StaffPatrolRecordResult> selectStaffPatrolListByDateId(String customerId, String yesterdayStr);
}

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

@ -0,0 +1,48 @@
package com.epmet.service.user.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.constant.DataSourceConstant;
import com.epmet.dao.user.StatsStaffPatrolRecordDailyDao;
import com.epmet.dto.extract.form.StaffPatrolStatsFormDTO;
import com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO;
import com.epmet.entity.user.StatsStaffPatrolRecordDailyEntity;
import com.epmet.service.user.StatsStaffPatrolService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2021/6/30 8:33 上午
* @version: 1.0
*/
@Slf4j
@DataSource(DataSourceConstant.EPMET_USER)
@Service
public class StatsStaffPatrolServiceImpl implements StatsStaffPatrolService {
@Autowired
private StatsStaffPatrolRecordDailyDao statsStaffPatrolRecordDailyDao;
@Override
public Integer delAndInsertBatch(StaffPatrolStatsFormDTO formDTO, List<StatsStaffPatrolRecordDailyDTO> insertList) {
int delete = statsStaffPatrolRecordDailyDao.delete(formDTO);
log.debug("delAndInsertBatch delete:{},param:{}", delete, JSON.toJSONString(formDTO));
return statsStaffPatrolRecordDailyDao.insertBatch(insertList);
}
@Override
public List<StatsStaffPatrolRecordDailyDTO> selectData(String customerId, String yesterdayStr) {
LambdaQueryWrapper<StatsStaffPatrolRecordDailyEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StatsStaffPatrolRecordDailyEntity::getCustomerId, customerId)
.eq(StatsStaffPatrolRecordDailyEntity::getDateId, yesterdayStr);
List<StatsStaffPatrolRecordDailyEntity> list = statsStaffPatrolRecordDailyDao.selectList(queryWrapper);
return ConvertUtils.sourceToTarget(list, StatsStaffPatrolRecordDailyDTO.class);
}
}

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

@ -6,15 +6,20 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.constant.DataSourceConstant;
import com.epmet.constant.ExtractConstant;
import com.epmet.constant.ProjectConstant;
import com.epmet.constant.RoleKeyConstants;
import com.epmet.dao.user.UserDao;
import com.epmet.dto.AgencySubTreeDto;
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.screen.ScreenProjectDataDTO;
import com.epmet.dto.stats.user.*;
import com.epmet.dto.stats.user.result.UserStatisticalData;
import com.epmet.dto.user.result.CommonTotalAndIncCountResultDTO;
import com.epmet.dto.user.result.CustomerStaffDTO;
import com.epmet.dto.user.result.StaffPatrolRecordResult;
import com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO;
import com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity;
import com.epmet.service.user.UserService;
import com.epmet.util.DimIdGenerator;
@ -797,4 +802,20 @@ public class UserServiceImpl implements UserService {
return resultMap;
}
@Override
public List<CustomerStaffDTO> selectUserListByRoleKey(StaffPatrolStatsFormDTO formDTO) {
formDTO.setRoleKey(RoleKeyConstants.ROLE_KEY_GRID_MEMBER);
return userDao.selectUserByRoleKey(formDTO);
}
@Override
public List<StatsStaffPatrolRecordDailyDTO> selectLastStaffPatrolList(StaffPatrolStatsFormDTO formDTO) {
return userDao.selectLastStaffPatrolList(formDTO);
}
@Override
public List<StaffPatrolRecordResult> selectStaffPatrolListByDateId(String customerId, String yesterdayStr) {
return userDao.selectStaffPatrolListByDateId(customerId,yesterdayStr);
}
}

31
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerStaffGridDao.xml

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.org.CustomerStaffGridDao">
<!--排除掉pid为空的人-->
<select id="selectGridStaffList" resultType="com.epmet.dto.user.result.CustomerGridStaffDTO">
SELECT * FROM (
SELECT
sg.customer_id,
sg.grid_id,
sg.user_id,
grid.PID agencyId,
grid.PIDS gridPids
FROM
customer_staff_grid sg
LEFT JOIN customer_grid grid ON grid.id = sg.grid_id
WHERE
sg.del_flag = '0'
<if test="customerId != null and customerId != ''">
AND sg.customer_id = #{customerId}
</if>
<if test="gridId != null and gridId != ''">
AND sg.GRID_ID = #{gridId}
</if>
) t WHERE t.agencyId IS NOT NULL
</select>
</mapper>

7
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml

@ -162,4 +162,11 @@
and CUSTOMER_ID = #{customerId}
and PARAMETER_KEY = #{parameterKey}
</select>
<select id="selectProjectListByDateId" resultType="com.epmet.dto.ProjectDTO">
SELECT * FROM project
WHERE customer_id = #{customerId}
AND ORIGIN = #{projectOrigin}
AND del_flag = '0'
AND DATE_FORMAT( CREATED_TIME, '%Y%m%d' ) = #{dateId}
</select>
</mapper>

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

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.user.StatsStaffPatrolRecordDailyDao">
<insert id="insertBatch">
insert into stats_staff_patrol_record_daily
(
ID,
CUSTOMER_ID,
DATE_ID,
WEEK_ID,
MONTH_ID,
YEAR_ID,
QUARTER_ID,
GRID_ID,
AGENCY_ID,
GRID_PIDS,
STAFF_ID,
PATROL_TOTAL,
TOTAL_TIME,
REPORT_PROJECT_COUNT,
LATEST_PATROL_TIME,
LATEST_PATROL_STATUS,
DEL_FLAG,
REVISION,
CREATED_BY,
CREATED_TIME,
UPDATED_BY,
UPDATED_TIME
) values
<foreach collection="list" item="item" separator=",">
(
(SELECT REPLACE(UUID(), '-', '') AS id),
#{item.customerId},
#{item.dateId},
#{item.weekId},
#{item.monthId},
#{item.yearId},
#{item.quarterId},
#{item.gridId},
#{item.agencyId},
#{item.gridPids},
#{item.staffId},
#{item.patrolTotal},
#{item.totalTime},
#{item.reportProjectCount},
#{item.latestPatrolTime},
#{item.latestPatrolStatus},
'0',
0,
'APP_USER',
now(),
'APP_USER',
now()
)
</foreach>
</insert>
<delete id="delete">
DELETE FROM stats_staff_patrol_record_daily
WHERE CUSTOMER_ID = #{customerId}
AND DATE_ID = #{dateId}
<if test="gridId != null and gridId != ''">
AND GRID_ID = #{gridId}
</if>
<if test="staffId != null and staffId != ''">
AND STAFF_ID = #{staffId}
</if>
</delete>
</mapper>

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

@ -570,4 +570,43 @@
user_id = #{userId}
</foreach>
</select>
<select id="selectUserByRoleKey" resultType="com.epmet.dto.user.result.CustomerStaffDTO">
SELECT DISTINCT
s.USER_ID,
s.*,
gsr.ROLE_NAME
FROM
customer_staff s
LEFT JOIN staff_role sr ON sr.STAFF_ID = s.USER_ID
AND sr.CUSTOMER_ID = s.CUSTOMER_ID
LEFT JOIN gov_staff_role gsr ON gsr.ID = sr.ROLE_ID
WHERE
s.del_flag = '0'
AND gsr.ROLE_KEY = #{roleKey}
</select>
<select id="selectLastStaffPatrolList" resultType="com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO">
SELECT
t.STAFF_ID,
t.GRID gridId,
t.PATROL_START_TIME latestPatrolTime,
t.STATUS latestPatrolStatus
FROM
( SELECT DEL_FLAG,CUSTOMER_ID,GRID, STAFF_ID, max( CREATED_TIME ) AS CREATED_TIME FROM staff_patrol_record GROUP BY GRID, STAFF_ID ) a
LEFT JOIN staff_patrol_record t ON t.GRID = a.GRID
AND t.STAFF_ID = a.STAFF_ID
AND t.CREATED_TIME = a.CREATED_TIME
WHERE
a.del_flag = '0'
AND a.CUSTOMER_ID = #{customerId}
</select>
<select id="selectStaffPatrolListByDateId" resultType="com.epmet.dto.user.result.StaffPatrolRecordResult">
SELECT
r.*
FROM
staff_patrol_record r
WHERE
r.del_flag = '0' and r.customer_id = #{customerId}
AND DATE_FORMAT( r.ACTRUAL_END_TIME, '%Y%m%d' ) = #{dateId}
</select>
</mapper>

10
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/BizDataStatsService.java

@ -0,0 +1,10 @@
package com.epmet.service;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.extract.form.BizDataFormDTO;
public interface BizDataStatsService {
Result exeStatsDaily(BizDataFormDTO formDTO);
}

25
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/BizDataStatsServiceImpl.java

@ -0,0 +1,25 @@
package com.epmet.service.impl;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.extract.form.BizDataFormDTO;
import com.epmet.feign.DataStatisticalOpenFeignClient;
import com.epmet.service.BizDataStatsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* desc:业务库 数据统计服务实现
*
* @author: LiuJanJun
* @date: 2021/7/2 2:58 下午
* @version: 1.0
*/
@Service
public class BizDataStatsServiceImpl implements BizDataStatsService {
@Autowired
private DataStatisticalOpenFeignClient feignClient;
@Override
public Result exeStatsDaily(BizDataFormDTO formDTO) {
return feignClient.exeStatsDaily(formDTO);
}
}

38
epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/BizDataStatsDailyTask.java

@ -0,0 +1,38 @@
package com.epmet.task;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.extract.form.BizDataFormDTO;
import com.epmet.service.BizDataStatsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author zhaoqifeng
* @dscription 业务数据统计 统一入库
* @date 2020/6/23 14:36
*/
@Slf4j
@Component("bizDataStatsDailyTask")
public class BizDataStatsDailyTask implements ITask {
@Autowired
private BizDataStatsService bizDataStatsService;
@Override
public void run(String params) {
log.debug("bizDataStatsDailyTask定时任务正在执行,参数为:{}", params);
BizDataFormDTO formDTO = new BizDataFormDTO();
if (StringUtils.isNotBlank(params)) {
formDTO = JSON.parseObject(params, BizDataFormDTO.class);
}
Result result = bizDataStatsService.exeStatsDaily(formDTO);
if (result.success()){
log.debug("bizDataStatsDailyTask定时任务正在执行定时任务执行成功");
}else {
log.debug("bizDataStatsDailyTask定时任务正在执行定时任务执行失败:" + result.getMsg());
}
}
}

29
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/PatrolProjectFormDTO.java

@ -0,0 +1,29 @@
package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author zxc
* @DateTime 2021/7/1 10:10 上午
* @DESC
*/
@Data
public class PatrolProjectFormDTO implements Serializable {
private static final long serialVersionUID = 7244072033926913678L;
private String userId;
/**
* 巡查开始时间
*/
private String patrolStartTime;
/**
* 巡查结束时间
*/
private String patrolEndTime;
}

14
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/GovProjectOpenFeignClient.java

@ -4,10 +4,7 @@ import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.ProjectCategoryDTO;
import com.epmet.dto.ProjectDTO;
import com.epmet.dto.form.DelCategoryFormDTO;
import com.epmet.dto.form.ProcessListFormDTO;
import com.epmet.dto.form.ProjectByCreateTopicUserFormDTO;
import com.epmet.dto.form.ProjectListFromDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.feign.fallback.GovProjectOpenFeignClientFallback;
import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO;
@ -86,4 +83,13 @@ public interface GovProjectOpenFeignClient {
**/
@PostMapping("gov/project/projectcategory/getprojectcategorylist")
Result<List<ProjectCategoryDTO>> getProjectCategoryList(@RequestBody DelCategoryFormDTO formDTO);
/**
* @Description 查询巡查期间的立项数
* @Param formDTO
* @author zxc
* @date 2021/7/1 10:16 上午
*/
@PostMapping("gov/project/project/patrolproject")
Result<Integer> selectPatrolProject(@RequestBody PatrolProjectFormDTO formDTO);
}

10
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/feign/fallback/GovProjectOpenFeignClientFallback.java

@ -5,10 +5,7 @@ import com.epmet.commons.tools.utils.ModuleUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.ProjectCategoryDTO;
import com.epmet.dto.ProjectDTO;
import com.epmet.dto.form.DelCategoryFormDTO;
import com.epmet.dto.form.ProcessListFormDTO;
import com.epmet.dto.form.ProjectByCreateTopicUserFormDTO;
import com.epmet.dto.form.ProjectListFromDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.feign.GovProjectOpenFeignClient;
import com.epmet.resi.mine.dto.from.MyPartProjectsFormDTO;
@ -78,4 +75,9 @@ public class GovProjectOpenFeignClientFallback implements GovProjectOpenFeignCli
public Result<List<ProjectCategoryDTO>> getProjectCategoryList(DelCategoryFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_PROJECT_SERVER, "getProjectCategoryList", formDTO);
}
@Override
public Result<Integer> selectPatrolProject(PatrolProjectFormDTO formDTO) {
return ModuleUtils.feignConError(ServiceConstant.GOV_PROJECT_SERVER, "selectPatrolProject", formDTO);
}
}

12
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectController.java

@ -222,4 +222,16 @@ public class ProjectController {
projectService.platformCallBack(formDTO);
return new Result();
}
/**
* @Description 查询巡查期间的立项数
* @Param formDTO
* @author zxc
* @date 2021/7/1 10:16 上午
*/
@PostMapping("patrolproject")
public Result<Integer> selectPatrolProject(@RequestBody PatrolProjectFormDTO formDTO){
return new Result<Integer>().ok(projectService.selectPatrolProject(formDTO));
}
}

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

@ -21,6 +21,7 @@ import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.ProjectDTO;
import com.epmet.dto.ProjectStaffDTO;
import com.epmet.dto.form.LatestListFormDTO;
import com.epmet.dto.form.PatrolProjectFormDTO;
import com.epmet.dto.form.ProjectListFromDTO;
import com.epmet.dto.form.ShiftProjectsFromDTO;
import com.epmet.dto.result.*;
@ -164,4 +165,12 @@ public interface ProjectDao extends BaseDao<ProjectEntity> {
* @date 2021/5/14 1:59 下午
*/
List<MassesDiscontentResultDTO> selectProjectIdByTime(@Param("agencyId")String agencyId,@Param("endDate")Integer endDate,@Param("startDate")Integer startDate);
/**
* @Description 查询巡查期间的立项数
* @Param formDTO
* @author zxc
* @date 2021/7/1 10:16 上午
*/
Integer selectPatrolProject(PatrolProjectFormDTO formDTO);
}

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

@ -295,4 +295,12 @@ public interface ProjectService extends BaseService<ProjectEntity> {
* @return void
*/
void platformCallBack(PlatformCallBackFormDTO formDTO);
/**
* @Description 查询巡查期间的立项数
* @Param formDTO
* @author zxc
* @date 2021/7/1 10:16 上午
*/
Integer selectPatrolProject(PatrolProjectFormDTO formDTO);
}

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

@ -2694,4 +2694,15 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
return UUID.randomUUID().toString().replace("-", "") + "." + FilenameUtils.getExtension(url);
}
/**
* @Description 查询巡查期间的立项数
* @Param formDTO
* @author zxc
* @date 2021/7/1 10:16 上午
*/
@Override
public Integer selectPatrolProject(PatrolProjectFormDTO formDTO) {
return baseDao.selectPatrolProject(formDTO);
}
}

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

@ -300,4 +300,16 @@
AND `STATUS` = 'closed'
</select>
<!-- 查询巡查期间的立项数 -->
<select id="selectPatrolProject" resultType="java.lang.Integer">
SELECT
COUNT(1)
FROM
project
WHERE DEL_FLAG = '0'
AND CREATED_TIME BETWEEN #{patrolStartTime} AND #{patrolEndTime}
AND ORIGIN = 'agency'
AND CREATED_BY = #{userId}
</select>
</mapper>

146
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/StatsStaffPatrolRecordDailyDTO.java

@ -0,0 +1,146 @@
/**
* 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.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-30
*/
@Data
public class StatsStaffPatrolRecordDailyDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 客户Id
*/
private String customerId;
/**
* 统计日期 关联日期dim表
*/
private String dateId;
/**
* 周ID
*/
private String weekId;
/**
* 月ID
*/
private String monthId;
/**
* 季ID
*/
private String quarterId;
/**
* 年ID
*/
private String yearId;
/**
* 网格id
*/
private String gridId;
/**
* 工作人员所属组织id=网格所属的组织id
*/
private String agencyId;
/**
* 网格所有上级id
*/
private String gridPids;
/**
* 工作人员用户id
*/
private String staffId;
/**
* 巡查次数
*/
private Integer patrolTotal;
/**
* 巡查时长 单位
*/
private Integer totalTime;
/**
* 巡查期间直接立项项目数
*/
private Integer reportProjectCount;
/**
* 最新的巡查开始时间
*/
private Date latestPatrolTime;
/**
* 最新的巡查状态 正在巡查中patrolling结束end
*/
private String latestPatrolStatus;
/**
* 删除标识 0.未删除 1.已删除
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

32
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/StatsStaffPatrolRecordDailyController.java

@ -0,0 +1,32 @@
package com.epmet.controller;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.dto.StatsStaffPatrolRecordDailyDTO;
import com.epmet.service.StatsStaffPatrolRecordDailyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-30
*/
@RestController
@RequestMapping("statsstaffpatrolrecorddaily")
public class StatsStaffPatrolRecordDailyController {
@Autowired
private StatsStaffPatrolRecordDailyService statsStaffPatrolRecordDailyService;
}

64
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/StatsStaffPatrolRecordDailyDao.java

@ -0,0 +1,64 @@
/**
* 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.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.StatsStaffPatrolRecordDailyEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-30
*/
@Mapper
public interface StatsStaffPatrolRecordDailyDao extends BaseDao<StatsStaffPatrolRecordDailyEntity> {
/**
* @Description 校验今天某人是不是有数据
* @Param staffId
* @Param dateId
* @author zxc
* @date 2021/6/30 2:41 下午
*/
String checkStatsCount(@Param("staffId")String staffId, @Param("dateId")String dateId,@Param("gridId")String gridId);
/**
* @Description 更新最近巡查时间和巡查状态
* @Param id
* @Param patrolStartTime 最近巡查时间
* @author zxc
* @date 2021/7/1 9:15 上午
*/
void updateStatsRecord(@Param("id")String id,@Param("patrolStartTime") Date patrolStartTime);
/**
* @Description 巡查关闭时更新
* @Param userId
* @Param patrolStartTime
* @author zxc
* @date 2021/7/1 10:36 上午
*/
void updateStatsRecordEnd(@Param("userId")String userId,@Param("totalTime") Integer totalTime,
@Param("projectCount")Integer projectCount,@Param("dateId")String dateId,@Param("gridId")String gridId);
}

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

@ -0,0 +1,116 @@
/**
* 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.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-30
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("stats_staff_patrol_record_daily")
public class StatsStaffPatrolRecordDailyEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户Id
*/
private String customerId;
/**
* 统计日期 关联日期dim表
*/
private String dateId;
/**
* 周ID
*/
private String weekId;
/**
* 月ID
*/
private String monthId;
/**
* 季ID
*/
private String quarterId;
/**
* 年ID
*/
private String yearId;
/**
* 网格id
*/
private String gridId;
/**
* 工作人员所属组织id=网格所属的组织id
*/
private String agencyId;
/**
* 网格所有上级id
*/
private String gridPids;
/**
* 工作人员用户id
*/
private String staffId;
/**
* 巡查次数
*/
private Integer patrolTotal;
/**
* 巡查时长 单位
*/
private Integer totalTime;
/**
* 巡查期间直接立项项目数
*/
private Integer reportProjectCount;
/**
* 最新的巡查开始时间
*/
private Date latestPatrolTime;
/**
* 最新的巡查状态 正在巡查中patrolling结束end
*/
private String latestPatrolStatus;
}

15
epmet-user/epmet-user-server/src/main/java/com/epmet/service/StatsStaffPatrolRecordDailyService.java

@ -0,0 +1,15 @@
package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.entity.StatsStaffPatrolRecordDailyEntity;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-30
*/
public interface StatsStaffPatrolRecordDailyService extends BaseService<StatsStaffPatrolRecordDailyEntity> {
}

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

@ -15,15 +15,19 @@ import com.epmet.constant.PatrolConstant;
import com.epmet.dao.CustomerStaffDao;
import com.epmet.dao.StaffPatrolDetailDao;
import com.epmet.dao.StaffPatrolRecordDao;
import com.epmet.dao.StatsStaffPatrolRecordDailyDao;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.StaffPatrolDetailDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.entity.StaffPatrolDetailEntity;
import com.epmet.entity.StaffPatrolRecordEntity;
import com.epmet.entity.StatsStaffPatrolRecordDailyEntity;
import com.epmet.feign.GovOrgFeignClient;
import com.epmet.feign.GovProjectOpenFeignClient;
import com.epmet.service.StaffPatrolDetailService;
import com.epmet.service.StaffPatrolRecordService;
import com.epmet.util.DimIdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -61,6 +65,12 @@ public class StaffPatrolRecordServiceImpl extends BaseServiceImpl<StaffPatrolRec
@Autowired
private StaffPatrolDetailDao staffPatrolDetailDao;
@Autowired
private StatsStaffPatrolRecordDailyDao statsStaffPatrolRecordDailyDao;
@Autowired
private GovProjectOpenFeignClient govProjectOpenFeignClient;
/**
* 巡查界面初始化
@ -151,7 +161,9 @@ public class StaffPatrolRecordServiceImpl extends BaseServiceImpl<StaffPatrolRec
record.setGridPids(grid.getPids());
record.setGrid(formDTO.getGridId());
record.setStaffId(tokenDto.getUserId());
record.setPatrolStartTime(new Date());
// 方便更新 巡查统计表使用
Date patrolStartTime = new Date();
record.setPatrolStartTime(patrolStartTime);
record.setStatus(PatrolConstant.PATROLLING);
insert(record);
@ -169,9 +181,51 @@ public class StaffPatrolRecordServiceImpl extends BaseServiceImpl<StaffPatrolRec
StartPatrolResultDTO result = new StartPatrolResultDTO();
result.setStaffPatrolRecId(record.getId());
result.setCarmDown(NumConstant.THIRTY);
// 添加巡查统计表逻辑
statsPatrolUpdateStart(tokenDto.getUserId(),patrolStartTime,grid);
return result;
}
/**
* @Description 开始巡查时添加巡查统计表逻辑 更新巡查状态最近巡查时间
* @Param userId
* @Param patrolStartTime
* @Param grid
* @author zxc
* @date 2021/7/1 9:22 上午
*/
@Transactional(rollbackFor = Exception.class)
public void statsPatrolUpdateStart(String userId,Date patrolStartTime,CustomerGridDTO grid){
// 巡查统计表更新数据
//1.校验是否有今天此人数据
String statsId = statsStaffPatrolRecordDailyDao.checkStatsCount(userId, DateUtils.getBeforeNDay(NumConstant.ZERO),grid.getId());
if (StringUtils.isEmpty(statsId)){
DimIdGenerator.DimIdBean dimId = DimIdGenerator.getDimIdBean(new Date());
// 不存在就插入新纪录
StatsStaffPatrolRecordDailyEntity entity = new StatsStaffPatrolRecordDailyEntity();
entity.setCustomerId(grid.getCustomerId());
entity.setDateId(dimId.getDateId());
entity.setWeekId(dimId.getWeekId());
entity.setMonthId(dimId.getMonthId());
entity.setQuarterId(dimId.getQuarterId());
entity.setYearId(dimId.getYearId());
entity.setGridId(grid.getId());
entity.setAgencyId(grid.getPid());
entity.setGridPids(grid.getPids());
entity.setStaffId(userId);
// 结束巡查时在+1
entity.setPatrolTotal(NumConstant.ZERO);
entity.setTotalTime(NumConstant.ZERO);
entity.setReportProjectCount(NumConstant.ZERO);
entity.setLatestPatrolTime(patrolStartTime);
entity.setLatestPatrolStatus(PatrolConstant.PATROLLING);
statsStaffPatrolRecordDailyDao.insert(entity);
}else {
// 存在记录,直接更新
statsStaffPatrolRecordDailyDao.updateStatsRecord(statsId,patrolStartTime);
}
}
/**
* 结束巡查
*
@ -200,8 +254,12 @@ public class StaffPatrolRecordServiceImpl extends BaseServiceImpl<StaffPatrolRec
}
record.setActrualEndTime(new Date());
record.setUpdatedTime(null);
record.setPatrolEndTime(DateUtils.parse(formDTO.getPatrolEndTime(), DateUtils.DATE_TIME_PATTERN));
record.setTotalTime(DateUtils.calculateSecond(record.getPatrolStartTime(), record.getPatrolEndTime()));
// 方便巡查统计表使用
Date patrolEndTime = DateUtils.parse(formDTO.getPatrolEndTime(), DateUtils.DATE_TIME_PATTERN);
record.setPatrolEndTime(patrolEndTime);
// 总时间+59s,防止筛选项目时漏掉
Integer totalTime = DateUtils.calculateSecond(record.getPatrolStartTime(), record.getPatrolEndTime()) + 59;
record.setTotalTime(totalTime);
record.setStatus(PatrolConstant.END);
baseDao.updateById(record);
//保存记录明细
@ -214,6 +272,32 @@ public class StaffPatrolRecordServiceImpl extends BaseServiceImpl<StaffPatrolRec
detailEntity.setLongitude(formDTO.getLongitude());
detailEntity.setSpeed(formDTO.getSpeed());
staffPatrolDetailService.insert(detailEntity);
// 添加巡查统计表逻辑
statsPatrolUpdateEnd(tokenDto.getUserId(),totalTime,record.getPatrolStartTime(),patrolEndTime,record.getGrid());
}
/**
* @Description 巡查结束时添加巡查统计表逻辑
* @Param userId
* @Param totalTime
* @Param patrolStartTime
* @Param patrolEndTime
* @author zxc
* @date 2021/7/1 10:50 上午
*/
@Transactional(rollbackFor = Exception.class)
public void statsPatrolUpdateEnd(String userId, Integer totalTime, Date patrolStartTime, Date patrolEndTime,String gridId){
String dateId = DateUtils.getBeforeNDay(NumConstant.ZERO);
PatrolProjectFormDTO formDTO = new PatrolProjectFormDTO();
formDTO.setUserId(userId);
formDTO.setPatrolStartTime(DateUtils.format(patrolStartTime,DateUtils.DATE_TIME_PATTERN));
formDTO.setPatrolEndTime(DateUtils.format(patrolEndTime,DateUtils.DATE_TIME_PATTERN));
Result<Integer> patrolProject = govProjectOpenFeignClient.selectPatrolProject(formDTO);
if (!patrolProject.success()){
throw new RenException("查询巡查期间立项数失败【"+patrolProject.getInternalMsg()+"】");
}
Integer data = patrolProject.getData();
statsStaffPatrolRecordDailyDao.updateStatsRecordEnd(userId,totalTime,data,dateId,gridId);
}
/**

32
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StatsStaffPatrolRecordDailyServiceImpl.java

@ -0,0 +1,32 @@
package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.dao.StatsStaffPatrolRecordDailyDao;
import com.epmet.dto.StatsStaffPatrolRecordDailyDTO;
import com.epmet.entity.StatsStaffPatrolRecordDailyEntity;
import com.epmet.service.StatsStaffPatrolRecordDailyService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-30
*/
@Service
@Slf4j
public class StatsStaffPatrolRecordDailyServiceImpl extends BaseServiceImpl<StatsStaffPatrolRecordDailyDao, StatsStaffPatrolRecordDailyEntity> implements StatsStaffPatrolRecordDailyService {
}

91
epmet-user/epmet-user-server/src/main/java/com/epmet/util/DimIdGenerator.java

@ -0,0 +1,91 @@
package com.epmet.util;
import com.epmet.commons.tools.utils.DateUtils;
import lombok.Data;
import java.util.Calendar;
import java.util.Date;
public class DimIdGenerator {
/**
* 生成日期维度ID
* @param targetDate
* @return
*/
public static String getDateDimId(Date targetDate) {
return DateUtils.format(targetDate, DateUtils.DATE_PATTERN_YYYYMMDD);
}
/**
* 获取月维度ID
* @param date
* @return
*/
public static String getMonthDimId(Date date) {
return DateUtils.format(date, DateUtils.DATE_PATTERN_YYYYMM);
}
/**
* 获取周维度ID ,每周的星期一为 周的开始
* @param date
* @return
*/
public static String getWeekDimId(Date date) {
String yyyy = DateUtils.format(date, DateUtils.DATE_PATTERN_YYYY);
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
return yyyy.concat("W").concat(calendar.get(Calendar.WEEK_OF_YEAR)+"");
}
/**
* 获取季度维度ID
* @param date
* @return
*/
public static String getQuarterDimId(Date date) {
String yyyy = DateUtils.format(date, DateUtils.DATE_PATTERN_YYYY);
return yyyy.concat("Q").concat(DateUtils.getQuarterIndex(date) + "");
}
/**
* 获取年维度ID
* @param date
* @return
*/
public static String getYearDimId(Date date) {
return DateUtils.format(date, DateUtils.DATE_PATTERN_YYYY);
}
/**
* 获取封装了所有ID的对象
* @return
*/
public static DimIdBean getDimIdBean(Date date) {
DimIdBean dimIdBean = new DimIdBean();
dimIdBean.setDateId(getDateDimId(date));
dimIdBean.setMonthId(getMonthDimId(date));
dimIdBean.setWeekId(getWeekDimId(date));
dimIdBean.setQuarterId(getQuarterDimId(date));
dimIdBean.setYearId(getYearDimId(date));
return dimIdBean;
}
public static void main(String[] args) {
DimIdBean dimIdBean = getDimIdBean(DateUtils.stringToDate("2020-06-14",DateUtils.DATE_PATTERN));
System.out.println(dimIdBean);
}
@Data
public static class DimIdBean {
private String dateId;
private String monthId;
private String quarterId;
private String yearId;
private String weekId;
public DimIdBean() {
}
}
}

26
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.14__add_patrol_stats.sql

@ -0,0 +1,26 @@
CREATE TABLE `stats_staff_patrol_record_daily` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id',
`DATE_ID` varchar(32) NOT NULL COMMENT '统计日期 关联日期dim表',
`WEEK_ID` varchar(32) NOT NULL COMMENT '周ID',
`MONTH_ID` varchar(32) NOT NULL COMMENT '月ID',
`QUARTER_ID` varchar(32) NOT NULL COMMENT '季ID',
`YEAR_ID` varchar(32) NOT NULL COMMENT '年ID',
`GRID_ID` varchar(64) NOT NULL COMMENT '网格id',
`AGENCY_ID` varchar(64) DEFAULT NULL COMMENT '工作人员所属组织id=网格所属的组织id',
`GRID_PIDS` varchar(512) DEFAULT NULL COMMENT '网格所有上级id',
`STAFF_ID` varchar(64) DEFAULT NULL COMMENT '工作人员用户id',
`PATROL_TOTAL` int(11) DEFAULT NULL COMMENT '巡查次数',
`TOTAL_TIME` int(11) DEFAULT NULL COMMENT '巡查时长 单位:秒',
`REPORT_PROJECT_COUNT` int(11) DEFAULT NULL COMMENT '巡查期间直接立项项目数',
`LATEST_PATROL_TIME` datetime DEFAULT NULL COMMENT '最新的巡查开始时间',
`LATEST_PATROL_STATUS` varchar(32) DEFAULT NULL COMMENT '最新的巡查状态 正在巡查中:patrolling;结束:end',
`DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`),
UNIQUE KEY `unx_staff` (`DATE_ID`,`GRID_ID`,`STAFF_ID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[天]工作人员巡查记录统计';

3
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.15__update_patrol_stats.sql

@ -0,0 +1,3 @@
ALTER TABLE `epmet_user`.`stats_staff_patrol_record_daily`
DROP INDEX `unx_staff`,
ADD UNIQUE INDEX `unx_staff`(`DATE_ID`, `STAFF_ID`, `GRID_ID`) USING BTREE;

43
epmet-user/epmet-user-server/src/main/resources/mapper/StatsStaffPatrolRecordDailyDao.xml

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.StatsStaffPatrolRecordDailyDao">
<!-- 更新最近巡查时间和巡查状态 -->
<update id="updateStatsRecord">
update stats_staff_patrol_record_daily
set LATEST_PATROL_TIME = #{patrolStartTime},
LATEST_PATROL_STATUS = 'patrolling',
UPDATED_TIME = NOW()
where DEL_FLAG = 0
and ID = #{id}
</update>
<!-- 巡查关闭时更新 -->
<update id="updateStatsRecordEnd">
update stats_staff_patrol_record_daily
SET TOTAL_TIME = (TOTAL_TIME + #{totalTime}),
PATROL_TOTAL = (PATROL_TOTAL + 1),
REPORT_PROJECT_COUNT = (REPORT_PROJECT_COUNT + #{projectCount}),
LATEST_PATROL_STATUS = 'end',
UPDATED_TIME = NOW()
WHERE DEL_FLAG = 0
AND STAFF_ID = #{userId}
AND DATE_ID = #{dateId}
AND GRID_ID = #{gridId}
</update>
<!-- 校验今天某人是不是有数据 -->
<select id="checkStatsCount" resultType="java.lang.String">
SELECT
ID
FROM
stats_staff_patrol_record_daily
WHERE
DEL_FLAG = 0
AND DATE_ID = #{dateId}
AND STAFF_ID = #{staffId}
AND GRID_ID = #{gridId}
</select>
</mapper>
Loading…
Cancel
Save