Browse Source

修改:

志愿者措施清单
dev_shibei_match
wangxianzhang 4 years ago
parent
commit
60c455b39a
  1. 15
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/heart/result/DemandServiceCountResultDTO.java
  2. 38
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemandController.java
  3. 44
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/IcUserDemandServiceDao.java
  4. 33
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/VolunteerInfoDao.java
  5. 42
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactVolunteerServiceDailyDao.java
  6. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java
  7. 75
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/heart/IcUserDemandServiceEntity.java
  8. 71
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/heart/VolunteerInfoEntity.java
  9. 86
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/stats/FactVolunteerServiceDailyEntity.java
  10. 20
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/DemandService.java
  11. 15
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/HeartDemandService.java
  12. 15
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/HeartVolunteerService.java
  13. 40
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/HeartDemandServiceImpl.java
  14. 40
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/HeartVolunteerServiceImpl.java
  15. 184
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/DemandServiceImpl.java
  16. 18
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DemandStatsService.java
  17. 36
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DemandStatsServiceImpl.java
  18. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java
  19. 4
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java
  20. 21
      epmet-module/data-statistical/data-statistical-server/src/main/resources/db/migration/V0.0.26__create_volunteer_service_daily.sql
  21. 33
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/heart/IcUserDemandServiceDao.xml
  22. 23
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/heart/VolunteerInfoDao.xml
  23. 37
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactVolunteerServiceDailyDao.xml
  24. 13
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml

15
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/heart/result/DemandServiceCountResultDTO.java

@ -0,0 +1,15 @@
package com.epmet.dto.heart.result;
import lombok.Data;
/**
* @Description 描述
* @Author wangxianzhang
* @Date 2021/12/8 4:39 下午
* @Version 1.0
*/
@Data
public class DemandServiceCountResultDTO {
private String serverId;
private String serviceType;
}

38
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemandController.java

@ -0,0 +1,38 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.service.DemandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Description 描述
* @Author wangxianzhang
* @Date 2021/12/8 10:44 上午
* @Version 1.0
*/
@RestController
@RequestMapping("demand")
public class DemandController {
@Autowired
private DemandService demandStatsService;
/**
* wangxianzhang
*
* 计算客户下志愿者服务相关数据
*
* @param customerId 客户ID可以为空为空则计算所有客户
* @return
*/
@PostMapping("volunteer/daily")
public Result statsVolunteerDemandServicesDaily(@RequestParam(value = "customer-id", required = false) String customerId) {
demandStatsService.statsVolunteerDemandServicesDaily(customerId);
return new Result();
}
}

44
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/IcUserDemandServiceDao.java

@ -0,0 +1,44 @@
/**
* 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.heart;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.heart.result.DemandServiceCountResultDTO;
import com.epmet.entity.heart.IcUserDemandServiceEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* 居民需求服务记录表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-11-19
*/
@Mapper
public interface IcUserDemandServiceDao extends BaseDao<IcUserDemandServiceEntity> {
/**
* 需求服务次数查询
* @param customerId 客户id
* @param serviceType 服务者类型
*/
List<DemandServiceCountResultDTO> listDemandServiceCountPage(@Param("customerId") String customerId, @Param("endTime") Date endTime, @Param("serviceType") String serviceType);
}

33
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/heart/VolunteerInfoDao.java

@ -0,0 +1,33 @@
/**
* 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.heart;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.heart.VolunteerInfoEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 志愿者信息
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-12-08
*/
@Mapper
public interface VolunteerInfoDao extends BaseDao<VolunteerInfoEntity> {
}

42
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactVolunteerServiceDailyDao.java

@ -0,0 +1,42 @@
/**
* 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.stats;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.stats.FactVolunteerServiceDailyEntity;
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-12-08
*/
@Mapper
public interface FactVolunteerServiceDailyDao extends BaseDao<FactVolunteerServiceDailyEntity> {
/**
* 删除指定客户指定dateId的志愿者服务统计记录
* @param customerIds
* @param dateDimId
*/
void clearVolunteerDemandServiceDailyStats(@Param("customerIds") List<String> customerIds, @Param("dateDimId") String dateDimId);
}

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

@ -264,5 +264,7 @@ public interface UserDao {
List<MidPatrolRecordResult> getPatrolRecordList(MidPatrolFormDTO formDTO);
List<MidPatrolDetailResult> getPatrolDetailList(MidPatrolFormDTO formDTO);
List<String> filterUserIds(@Param("userIds") List<String> userIds, @Param("roleKey") String roleKey);
}

75
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/heart/IcUserDemandServiceEntity.java

@ -0,0 +1,75 @@
/**
* 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.heart;
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-11-19
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("ic_user_demand_service")
public class IcUserDemandServiceEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 需求id
*/
private String demandRecId;
/**
* 服务方类型志愿者volunteer社会组织social_org社区自组织community_org区域党建单位party_unit
*/
private String serviceType;
/**
* 志愿者居民端爱心互助的志愿者userId
*/
private String serverId;
/**
* 实际服务开始时间
*/
private Date serviceStartTime;
/**
* 实际服务结束时间
*/
private Date serviceEndTime;
/**
* 完成情况
*/
private String finishDesc;
}

71
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/heart/VolunteerInfoEntity.java

@ -0,0 +1,71 @@
/**
* 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.heart;
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-12-08
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("volunteer_info")
public class VolunteerInfoEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
private String userId;
/**
* 客户id
*/
private String customerId;
/**
* 志愿者自我介绍
*/
private String volunteerIntroduce;
/**
* 志愿者签名
*/
private String volunteerSignature;
/**
* 网格id
*/
private String gridId;
/**
* 网格名称
*/
private String gridName;
}

86
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/stats/FactVolunteerServiceDailyEntity.java

@ -0,0 +1,86 @@
/**
* 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.stats;
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-12-08
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("fact_volunteer_service_daily")
public class FactVolunteerServiceDailyEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* yyyyMMdd
*/
private String dateId;
/**
* yyyyMM
*/
private String monthId;
/**
* 截止到当前dateId当前客户下共有多少个爱心互助的志愿者
*/
private Integer volunteerTotal;
/**
* 截止到当前dateId当前客户下XX个爱心互助志愿者中党员有多少个
*/
private Integer partyTotal;
/**
* 截止到当前dateId当前客户下XX个爱心互助志愿者中居民有多少个
*/
private Integer resiTotal;
/**
* 服务总次数
*/
private Integer serviceTotal;
/**
* 党员服务总次数
*/
private Integer partyServiceTotal;
/**
* 居民服务总次数
*/
private Integer resiServiceTotal;
}

20
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/DemandService.java

@ -0,0 +1,20 @@
package com.epmet.service;
/**
* @Description 需求service
* @Author wangxianzhang
* @Date 2021/12/8 12:14 下午
* @Version 1.0
*/
public interface DemandService {
/**
* wangxianzhang
*
* 按日统计
*
* @param customerId 客户ID可为空为空计算所有
*/
void statsVolunteerDemandServicesDaily(String customerId);
}

15
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/HeartDemandService.java

@ -0,0 +1,15 @@
package com.epmet.service.heart;
import com.epmet.dto.heart.result.DemandServiceCountResultDTO;
import java.util.Date;
import java.util.List;
/**
*@Description 爱心互助需求service
*@Author wangxianzhang
*@Date 2021/12/8
*/
public interface HeartDemandService {
List<DemandServiceCountResultDTO> listDemandServiceCountPage(String customerId, Date endTime, int serviceCountPageNo, int serviceCountPageSize);
}

15
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/HeartVolunteerService.java

@ -0,0 +1,15 @@
package com.epmet.service.heart;
import com.epmet.entity.heart.VolunteerInfoEntity;
import java.util.Date;
import java.util.List;
/**
*@Description heart 志愿者service
*@Author wangxianzhang
*@Date 2021/12/8
*/
public interface HeartVolunteerService {
List<VolunteerInfoEntity> listVolunteersPage(String customerId, Date endCreateTime, Integer pageNum, Integer pageSize);
}

40
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/HeartDemandServiceImpl.java

@ -0,0 +1,40 @@
package com.epmet.service.heart.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.constant.DataSourceConstant;
import com.epmet.dao.heart.IcUserDemandServiceDao;
import com.epmet.dto.heart.result.DemandServiceCountResultDTO;
import com.epmet.service.heart.HeartDemandService;
import com.github.pagehelper.ISelect;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @Description 爱心互助需求service
* @Author wangxianzhang
* @Date 2021/12/8 12:33 下午
* @Version 1.0
*/
@Service
@DataSource(DataSourceConstant.EPMET_HEART)
public class HeartDemandServiceImpl implements HeartDemandService {
@Autowired
private IcUserDemandServiceDao demandServiceDao;
@Override
public List<DemandServiceCountResultDTO> listDemandServiceCountPage(String customerId, Date endTime, int serviceCountPageNo, int serviceCountPageSize) {
return PageHelper.startPage(serviceCountPageNo, serviceCountPageSize).doSelectPage(new ISelect() {
@Override
public void doSelect() {
demandServiceDao.listDemandServiceCountPage(customerId, endTime, "volunteer");
}
});
}
}

40
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/heart/impl/HeartVolunteerServiceImpl.java

@ -0,0 +1,40 @@
package com.epmet.service.heart.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.constant.DataSourceConstant;
import com.epmet.dao.heart.VolunteerInfoDao;
import com.epmet.entity.heart.VolunteerInfoEntity;
import com.epmet.service.heart.HeartVolunteerService;
import com.github.pagehelper.ISelect;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @Description 描述
* @Author wangxianzhang
* @Date 2021/12/8 1:35 下午
* @Version 1.0
*/
@Service
@DataSource(DataSourceConstant.EPMET_HEART)
public class HeartVolunteerServiceImpl implements HeartVolunteerService {
@Autowired
private VolunteerInfoDao volunteerInfoDao;
@Override
public List<VolunteerInfoEntity> listVolunteersPage(String customerId, Date endCreateTime, Integer pageNum, Integer pageSize) {
return PageHelper.startPage(pageNum, pageSize).doSelectPage(() -> {
LambdaQueryWrapper<VolunteerInfoEntity> query = new LambdaQueryWrapper<>();
query.eq(VolunteerInfoEntity::getCustomerId, customerId);
query.lt(VolunteerInfoEntity::getCreatedTime, endCreateTime);
volunteerInfoDao.selectList(query);
});
}
}

184
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/DemandServiceImpl.java

@ -0,0 +1,184 @@
package com.epmet.service.impl;
import com.epmet.commons.tools.constant.EpmetRoleKeyConstant;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dto.heart.result.DemandServiceCountResultDTO;
import com.epmet.entity.crm.CustomerEntity;
import com.epmet.entity.heart.VolunteerInfoEntity;
import com.epmet.entity.stats.FactVolunteerServiceDailyEntity;
import com.epmet.service.DemandService;
import com.epmet.service.crm.CustomerService;
import com.epmet.service.heart.HeartDemandService;
import com.epmet.service.heart.HeartVolunteerService;
import com.epmet.service.stats.DemandStatsService;
import com.epmet.service.user.UserService;
import com.epmet.util.DimIdGenerator;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description 需求service
* @Author wangxianzhang
* @Date 2021/12/8 12:14 下午
* @Version 1.0
*/
@Service
public class DemandServiceImpl implements DemandService {
@Autowired
private HeartDemandService heartDemandService;
@Autowired
private HeartVolunteerService heartVolunteerService;
@Autowired
private UserService userService;
@Autowired
private DemandStatsService demandStatsService;
@Autowired
private CustomerService customerService;
@Override
public void statsVolunteerDemandServicesDaily(String customerId) {
Date now = new Date();
Date today = DateUtils.integrate(now, "yyyy-MM-dd");
Date yestoday = DateUtils.addDateDays(today, -1);
if (StringUtils.isNotBlank(customerId)) {
// 只计算单个客户
clearOldDatas(Arrays.asList(customerId), yestoday);
statsVolunteerDemandServicesDaily4Customer(customerId, today, yestoday);
} else {
// 查询所有客户ID
List<String> customerIds = customerService.listValidCustomersByCreateTime(null, null).stream().map(c -> c.getId()).collect(Collectors.toList());
clearOldDatas(customerIds, yestoday);
customerIds.stream().forEach(cId -> {
statsVolunteerDemandServicesDaily4Customer(cId, today, yestoday);
});
}
}
/**
* 清理旧数据
* @param yestoday
*/
private void clearOldDatas(List<String> customerIds, Date yestoday) {
String dateDimId = DimIdGenerator.getDateDimId(yestoday);
demandStatsService.clearVolunteerDemandServiceDailyStats(customerIds, dateDimId);
}
/**
* 统计单个客户的志愿者服务情况
* @param customerId 客户ID
* @param endTime 统计截止时间(<endTime)
*/
private void statsVolunteerDemandServicesDaily4Customer(String customerId, Date endTime, Date belongTime) {
// 1.志愿者分流为党员志愿者&普通居民志愿者
Integer volunteerTotalCount = 0;
// 党员志愿者数量
Integer partymemberVolunteerCount = 0;
// 居民志愿者数量
Integer resiVolunteerCount = 0;
List<String> partymemberVolunteerUserIds = new ArrayList<>(16);
int pageNum = 1;
int volunteerPageSize = 5;
while (true) {
int shardingStartIndex = 0;
int shardingSize = 2;
List<VolunteerInfoEntity> volunteersPage = heartVolunteerService.listVolunteersPage(customerId, endTime, pageNum, volunteerPageSize);
// 如果查询结果为0,说明没有更多的志愿者了
if (volunteersPage.size() == 0) {
break;
}
volunteerTotalCount += volunteersPage.size();
// 分片去确定党员身份
while (true) {
int realShardingSize = Math.min(shardingSize, volunteersPage.size() - shardingStartIndex);
if (realShardingSize == 0) {
break;
}
int shardingEndIndex = shardingStartIndex + realShardingSize;
List<String> volunteerUserIds = volunteersPage.subList(shardingStartIndex, shardingEndIndex)
.stream()
.map((volunteerInfoEntity) -> volunteerInfoEntity.getUserId())
.collect(Collectors.toList());
List<String> tempPartymemberUserIds = userService.filterUserIds(volunteerUserIds, EpmetRoleKeyConstant.PARTYMEMBER);
partymemberVolunteerUserIds.addAll(tempPartymemberUserIds);
shardingStartIndex = shardingEndIndex;
}
pageNum++;
}
partymemberVolunteerCount += partymemberVolunteerUserIds.size();
resiVolunteerCount = volunteerTotalCount - partymemberVolunteerCount;
//2. 查询志愿者服务次数
// 总服务次数
int totalDemandServiceCount = 0;
// 党员服务次数
int partymemberDemandServiceCount = 0;
// 居民服务次数
int resiDemandServiceCount = 0;
int serviceCountPageNo = 0;
int serviceCountPageSize = 1000;
while (true) {
List<DemandServiceCountResultDTO> damendServiceCounts = heartDemandService.listDemandServiceCountPage(customerId, endTime, serviceCountPageNo, serviceCountPageSize);
for (DemandServiceCountResultDTO damendServiceCount : damendServiceCounts) {
String serverId = damendServiceCount.getServerId();
if (partymemberVolunteerUserIds.contains(serverId)) {
partymemberDemandServiceCount++;
} else {
resiDemandServiceCount++;
}
}
totalDemandServiceCount += damendServiceCounts.size();
if (damendServiceCounts.size() <= serviceCountPageSize) {
break;
}
}
// 3.持久化
FactVolunteerServiceDailyEntity insert = new FactVolunteerServiceDailyEntity();
insert.setDateId(DimIdGenerator.getDateDimId(belongTime));
insert.setCustomerId(customerId);
insert.setMonthId(DimIdGenerator.getMonthDimId(belongTime));
insert.setPartyServiceTotal(partymemberDemandServiceCount);
insert.setServiceTotal(totalDemandServiceCount);
insert.setPartyTotal(partymemberVolunteerCount);
insert.setResiServiceTotal(resiDemandServiceCount);
insert.setResiTotal(resiVolunteerCount);
insert.setVolunteerTotal(volunteerTotalCount);
demandStatsService.addVolunteerServiceDaily(insert);
}
}

18
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/DemandStatsService.java

@ -0,0 +1,18 @@
package com.epmet.service.stats;
import com.epmet.entity.stats.FactVolunteerServiceDailyEntity;
import java.util.List;
/**
*@Description 统计客户下的志愿者需求服务数据
*@Author wangxianzhang
*@Date 2021/12/8
*/
public interface DemandStatsService {
void addVolunteerServiceDaily(FactVolunteerServiceDailyEntity entity);
void clearVolunteerDemandServiceDailyStats(List<String> customerIds, String dateDimId);
}

36
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/DemandStatsServiceImpl.java

@ -0,0 +1,36 @@
package com.epmet.service.stats.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.constant.DataSourceConstant;
import com.epmet.dao.stats.FactVolunteerServiceDailyDao;
import com.epmet.entity.stats.FactVolunteerServiceDailyEntity;
import com.epmet.service.stats.DemandStatsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description 描述
* @Author wangxianzhang
* @Date 2021/12/8 10:54 上午
* @Version 1.0
*/
@Service
@DataSource(DataSourceConstant.STATS)
public class DemandStatsServiceImpl implements DemandStatsService {
@Autowired
private FactVolunteerServiceDailyDao factVolunteerServiceDailyDao;
@Override
public void addVolunteerServiceDaily(FactVolunteerServiceDailyEntity entity) {
factVolunteerServiceDailyDao.insert(entity);
}
@Override
public void clearVolunteerDemandServiceDailyStats(List<String> customerIds, String dateDimId) {
factVolunteerServiceDailyDao.clearVolunteerDemandServiceDailyStats(customerIds, dateDimId);
}
}

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

@ -146,4 +146,6 @@ public interface UserService {
List<MidPatrolRecordResult> getPatrolRecordList(MidPatrolFormDTO formDTO);
List<MidPatrolDetailResult> getPatrolDetailList(MidPatrolFormDTO formDTO);
List<String> filterUserIds(List<String> userIds, String roleKey);
}

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

@ -1109,4 +1109,8 @@ public class UserServiceImpl implements UserService {
return userDao.getPatrolDetailList(formDTO);
}
@Override
public List<String> filterUserIds(List<String> userIds, String roleKey) {
return userDao.filterUserIds(userIds, roleKey);
}
}

21
epmet-module/data-statistical/data-statistical-server/src/main/resources/db/migration/V0.0.26__create_volunteer_service_daily.sql

@ -0,0 +1,21 @@
CREATE TABLE epmet_data_statistical.`fact_volunteer_service_daily`
(
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id',
`DATE_ID` varchar(8) NOT NULL COMMENT 'yyyyMMdd',
`MONTH_ID` varchar(6) NOT NULL COMMENT 'yyyyMM',
`VOLUNTEER_TOTAL` int(11) NOT NULL COMMENT '截止到当前dateId,当前客户下,共有多少个爱心互助的志愿者',
`PARTY_TOTAL` int(11) NOT NULL COMMENT '截止到当前dateId,当前客户下,XX个爱心互助志愿者中,党员有多少个',
`RESI_TOTAL` int(11) NOT NULL COMMENT '截止到当前dateId,当前客户下,XX个爱心互助志愿者中,居民有多少个',
`SERVICE_TOTAL` int(11) NOT NULL COMMENT '服务总次数',
`PARTY_SERVICE_TOTAL` int(11) NOT NULL COMMENT '党员服务总次数',
`RESI_SERVICE_TOTAL` int(11) NOT NULL COMMENT '居民服务总次数',
`DEL_FLAG` int(11) NOT NULL COMMENT '删除标识:0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`),
UNIQUE KEY `uni_vsd` (`CUSTOMER_ID`,`DATE_ID`,`DEL_FLAG`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='志愿者服务情况统计'

33
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/heart/IcUserDemandServiceDao.xml

@ -0,0 +1,33 @@
<?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.heart.IcUserDemandServiceDao">
<resultMap type="com.epmet.entity.heart.IcUserDemandServiceEntity" id="icUserDemandServiceMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="demandRecId" column="DEMAND_REC_ID"/>
<result property="serviceType" column="SERVICE_TYPE"/>
<result property="serverId" column="SERVER_ID"/>
<result property="serviceStartTime" column="SERVICE_START_TIME"/>
<result property="serviceEndTime" column="SERVICE_END_TIME"/>
<result property="finishDesc" column="FINISH_DESC"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<select id="listDemandServiceCountPage" resultType="com.epmet.dto.heart.result.DemandServiceCountResultDTO">
select service.SERVER_ID, SERVICE_TYPE
from ic_user_demand_rec damend
inner join ic_user_demand_service service on (damend.ID = service.DEMAND_REC_ID and service.DEL_FLAG = 0)
where damend.DEL_FLAG = 0
and damend.STATUS = 'finished'
and damend.REPORT_TIME <![CDATA[<]]> #{endTime}
and damend.CUSTOMER_ID = #{customerId}
and service.SERVICE_TYPE = #{serviceType}
</select>
</mapper>

23
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/heart/VolunteerInfoDao.xml

@ -0,0 +1,23 @@
<?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.VolunteerInfoDao">
<resultMap type="com.epmet.entity.heart.VolunteerInfoEntity" id="volunteerInfoMap">
<result property="id" column="ID"/>
<result property="userId" column="USER_ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="volunteerIntroduce" column="VOLUNTEER_INTRODUCE"/>
<result property="volunteerSignature" column="VOLUNTEER_SIGNATURE"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
<result property="gridId" column="GRID_ID"/>
<result property="gridName" column="GRID_NAME"/>
</resultMap>
</mapper>

37
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactVolunteerServiceDailyDao.xml

@ -0,0 +1,37 @@
<?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.stats.FactVolunteerServiceDailyDao">
<resultMap type="com.epmet.entity.stats.FactVolunteerServiceDailyEntity" id="factVolunteerServiceDailyMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="dateId" column="DATE_ID"/>
<result property="monthId" column="MONTH_ID"/>
<result property="volunteerTotal" column="VOLUNTEER_TOTAL"/>
<result property="partyTotal" column="PARTY_TOTAL"/>
<result property="resiTotal" column="RESI_TOTAL"/>
<result property="serviceTotal" column="SERVICE_TOTAL"/>
<result property="partyServiceTotal" column="PARTY_SERVICE_TOTAL"/>
<result property="resiServiceTotal" column="RESI_SERVICE_TOTAL"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<delete id="clearVolunteerDemandServiceDailyStats">
delete
from fact_volunteer_service_daily
where DATE_ID=#{dateDimId}
and CUSTOMER_ID in
<foreach collection="customerIds" open="(" separator="," close=")" item="customerId">
#{customerId}
</foreach>
</delete>
</mapper>

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

@ -1052,5 +1052,18 @@
order by created_time
LIMIT #{offset},#{pageSize}
</select>
<!-- 从UserId列表中过滤符合条件的UserId列表出来 -->
<select id="filterUserIds" resultType="java.lang.String">
select distinct ur.USER_ID
from user_role ur
inner join epmet_role er on (ur.ROLE_ID = er.ID)
where ur.DEL_FLAG = 0
and ur.USER_ID in
<foreach collection="userIds" open="(" item="userId" separator="," close=")">
#{userId}
</foreach>
and er.ROLE_KEY = #{roleKey}
</select>
</mapper>

Loading…
Cancel
Save