diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml index 0282677e40..d2cc49d64a 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml @@ -4,7 +4,7 @@ + select LAST_SYNC_TIME + from dim_last_sync_record + where SUBJECT = #{subject} + and DEL_FLAG = '0' + + \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerDepartmentDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerDepartmentDao.xml index 1df3ef3a1a..2ba0e21b5a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerDepartmentDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerDepartmentDao.xml @@ -44,7 +44,9 @@ from customer_department cd LEFT JOIN customer_agency ca ON ( cd.AGENCY_ID = ca.id and ca.DEL_FLAG='0') - where cd.UPDATED_TIME > #{startTime} - and cd.UPDATED_TIME #{endTime} + where + cd.CREATED_TIME #{startTime} + and cd.UPDATED_TIME >= #{startTime} + and cd.UPDATED_TIME #{endTime} \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml index 587b75120e..4ebde89821 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/CustomerGridDao.xml @@ -71,6 +71,7 @@ pids FROM customer_grid WHERE SYNC_FLAG='1' + AND CREATED_TIME #{startTime} AND UPDATED_TIME >= #{startTime} AND UPDATED_TIME #{endTime} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/StatsCustomerAgencyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/StatsCustomerAgencyDao.xml index aa337955ad..fa5da30046 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/StatsCustomerAgencyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/org/StatsCustomerAgencyDao.xml @@ -102,9 +102,10 @@ district, PARENT_AREA_CODE as parentAreaCode from customer_agency - where SYNC_FLAG='1' + where SYNC_FLAG='1' + AND CREATED_TIME #{startTime} AND UPDATED_TIME >= #{startTime} - and UPDATED_TIME #{endTime} + AND UPDATED_TIME #{endTime} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml index 715b37f605..766636e76b 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectDao.xml @@ -259,6 +259,9 @@ from resi_event_report_org rero inner join resi_event re on rero.RESI_EVENT_ID = re.id and re.SHIFT_PROJECT = 1 and re.DEL_FLAG = '0' where rero.del_flag = '0' + + AND re.PROJECT_ID = #{projectId} + and rero.CUSTOMER_ID = #{customerId} diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java index d4f3c8c92d..fa1010d5be 100644 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java @@ -75,4 +75,12 @@ public interface EpmetHeartOpenFeignClient { */ @PostMapping("/heart/residemand/autoevaluate") Result AutoEvaluateDemand(@RequestBody AutoEvaluateDemandFormDTO formDTO); + + /** + * 查询志愿者数量 + * @param input + * @return + */ + @PostMapping("/heart/resi/volunteer/count") + Result getVolunteerCount(@RequestBody VolunteerCommonFormDTO input); } diff --git a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java index eed34f0116..3f1b877e63 100644 --- a/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java +++ b/epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/fallback/EpmetHeartOpenFeignClientFallback.java @@ -71,4 +71,9 @@ public class EpmetHeartOpenFeignClientFallback implements EpmetHeartOpenFeignCli public Result AutoEvaluateDemand(AutoEvaluateDemandFormDTO formDTO) { return ModuleUtils.feignConError(ServiceConstant.EPMET_HEART_SERVER, "autoEvaluate",formDTO); } + + @Override + public Result getVolunteerCount(VolunteerCommonFormDTO input) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_HEART_SERVER, "getVolunteerCount", input); + } } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java index 842919a3f2..f9467f995b 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java @@ -145,4 +145,18 @@ public class ResiVolunteerController { List l = volunteerInfoService.queryVolunteerPage(customerId, pageNo, pageSize, superiorAgencyId); return new Result>().ok(l); } + + /** + * 查询志愿者数量 + * @param input + * @return + */ + @PostMapping("count") + public Result getVolunteerCount(@RequestBody VolunteerCommonFormDTO input) { + ValidatorUtils.validateEntity(input, VolunteerCommonFormDTO.VolunteerPage.class); + String customerId = input.getCustomerId(); + + Integer volunteerCount = volunteerInfoService.getVolunteerCount(customerId); + return new Result().ok(volunteerCount); + } } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyUnitService.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyUnitService.java index 5108fb6dbc..22e69d652e 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyUnitService.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyUnitService.java @@ -114,6 +114,15 @@ public interface IcPartyUnitService extends BaseService { */ List option(IcPartyUnitDTO dto); + /** + * @Description 获取组织以及下级单位列表 + * @Param dto + * @Return {@link List< OptionDTO>} + * @Author zhaoqifeng + * @Date 2021/11/22 14:35 + */ + List options(IcPartyUnitDTO dto); + /** * 导入数据 * @Param tokenDto diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java index 3df4a76018..6f7f26df7b 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java @@ -96,4 +96,11 @@ public interface VolunteerInfoService extends BaseService { List queryListVolunteer(String customerId,String staffId,String userRealName); List queryVolunteerPage(String customerId, Integer pageNo, Integer pageSize, String superiorAgencyId); + + /** + * 查询志愿者数量 + * @param customerId + * @return + */ + Integer getVolunteerCount(String customerId); } diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java index 045b9564cc..116b3c47a5 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java @@ -366,7 +366,7 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl option = icPartyUnitService.option(unitDTO).stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel)); + Map option = icPartyUnitService.options(unitDTO).stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel)); //获取服务事项字典 SubCodeFormDTO codeFormDTO = new SubCodeFormDTO(); codeFormDTO.setCustomerId(tokenDto.getCustomerId()); diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java index 43c0cd8bb0..2370562d4b 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java @@ -193,7 +193,7 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl options(IcPartyUnitDTO dto) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.and(wp -> wp.eq(IcPartyUnitEntity::getAgencyId, dto.getAgencyId()).or(). + like(IcPartyUnitEntity::getPids, dto.getAgencyId())); + wrapper.orderByDesc(IcPartyUnitEntity::getUpdatedTime); + wrapper.eq(StringUtils.isNotBlank(dto.getServiceMatter()), IcPartyUnitEntity::getServiceMatter, dto.getServiceMatter()); + List list = baseDao.selectList(wrapper); + if (CollectionUtils.isEmpty(list)) { + return Collections.emptyList(); + } + return list.stream().map(item -> { + OptionDTO option = new OptionDTO(); + option.setValue(item.getId()); + option.setLabel(item.getUnitName()); + return option; + }).collect(Collectors.toList()); + } + /** * 导入数据 * diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java index b973a249a1..408627e3ae 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java @@ -383,4 +383,11 @@ public class VolunteerInfoServiceImpl extends BaseServiceImpl query = new LambdaQueryWrapper<>(); + query.eq(VolunteerInfoEntity::getCustomerId, customerId); + return baseDao.selectCount(query); + } } diff --git a/epmet-module/epmet-job/epmet-job-server/pom.xml b/epmet-module/epmet-job/epmet-job-server/pom.xml index 5c1655d562..e3d12204ad 100644 --- a/epmet-module/epmet-job/epmet-job-server/pom.xml +++ b/epmet-module/epmet-job/epmet-job-server/pom.xml @@ -96,6 +96,12 @@ 2.0.0 compile + + com.epmet + gov-issue-client + 2.0.0 + compile + diff --git a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/GovIssueFeignClient.java b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/GovIssueFeignClient.java index 4c091c1c6a..3731ecf8e6 100644 --- a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/GovIssueFeignClient.java +++ b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/GovIssueFeignClient.java @@ -2,6 +2,7 @@ package com.epmet.feign; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.form.DailyStatisticalVoteJob; import com.epmet.feign.impl.GovIssueFeignClientFallBack; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -22,7 +23,7 @@ public interface GovIssueFeignClient { * @date 2020.05.20 15:39 **/ @PostMapping(value = "gov/issue/issuevotestatisticaldaily/dailystatisticalvotejob") - Result dailyStatisticalVoteJob(); + Result dailyStatisticalVoteJob(DailyStatisticalVoteJob form); /** * @Description 将所有表决中的投票数从缓存同步到数据库,要进行数据对比,若数据一致无需更新 diff --git a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/impl/GovIssueFeignClientFallBack.java b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/impl/GovIssueFeignClientFallBack.java index 0267ca347f..7623db9dab 100644 --- a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/impl/GovIssueFeignClientFallBack.java +++ b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/feign/impl/GovIssueFeignClientFallBack.java @@ -3,6 +3,7 @@ package com.epmet.feign.impl; 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.form.DailyStatisticalVoteJob; import com.epmet.feign.GovIssueFeignClient; import org.springframework.stereotype.Component; @@ -15,8 +16,8 @@ import org.springframework.stereotype.Component; @Component public class GovIssueFeignClientFallBack implements GovIssueFeignClient { @Override - public Result dailyStatisticalVoteJob() { - return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "dailyStatisticalVoteJob"); + public Result dailyStatisticalVoteJob(DailyStatisticalVoteJob form) { + return ModuleUtils.feignConError(ServiceConstant.GOV_ISSUE_SERVER, "dailyStatisticalVoteJob",form); } @Override diff --git a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/IssueVotingDailyStatisticalTaskService.java b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/IssueVotingDailyStatisticalTaskService.java index 0b72ddc1b2..3d14b1be08 100644 --- a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/IssueVotingDailyStatisticalTaskService.java +++ b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/IssueVotingDailyStatisticalTaskService.java @@ -2,6 +2,7 @@ package com.epmet.service; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.form.DailyStatisticalVoteJob; /** * @Description 生成议题表决日统计数定时任务 @@ -10,6 +11,6 @@ import com.epmet.commons.tools.utils.Result; */ public interface IssueVotingDailyStatisticalTaskService { - Result issueVotingDailyStatistical(); + Result issueVotingDailyStatistical(DailyStatisticalVoteJob form); } diff --git a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/IssueVotingDailyStatisticalTaskServiceImpl.java b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/IssueVotingDailyStatisticalTaskServiceImpl.java index eb31c97810..504dc46994 100644 --- a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/IssueVotingDailyStatisticalTaskServiceImpl.java +++ b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/service/impl/IssueVotingDailyStatisticalTaskServiceImpl.java @@ -1,6 +1,7 @@ package com.epmet.service.impl; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.form.DailyStatisticalVoteJob; import com.epmet.feign.GovIssueFeignClient; import com.epmet.service.IssueVotingDailyStatisticalTaskService; import org.springframework.beans.factory.annotation.Autowired; @@ -18,7 +19,7 @@ public class IssueVotingDailyStatisticalTaskServiceImpl implements IssueVotingDa private GovIssueFeignClient govIssueFeignClient; @Override - public Result issueVotingDailyStatistical() { - return govIssueFeignClient.dailyStatisticalVoteJob(); + public Result issueVotingDailyStatistical(DailyStatisticalVoteJob form) { + return govIssueFeignClient.dailyStatisticalVoteJob(form); } } diff --git a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/DailyStatisticalVoteTask.java b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/DailyStatisticalVoteTask.java index 1c33869895..41302d5305 100644 --- a/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/DailyStatisticalVoteTask.java +++ b/epmet-module/epmet-job/epmet-job-server/src/main/java/com/epmet/task/DailyStatisticalVoteTask.java @@ -1,7 +1,10 @@ package com.epmet.task; +import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.form.DailyStatisticalVoteJob; import com.epmet.service.IssueVotingDailyStatisticalTaskService; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +27,11 @@ public class DailyStatisticalVoteTask implements ITask{ @Override public void run(String params) { logger.debug("dailyStatisticalVoteTask定时任务正在执行,参数为:{}", params); - Result result=issueVotingDailyStatisticalTaskService.issueVotingDailyStatistical(); + DailyStatisticalVoteJob form = new DailyStatisticalVoteJob(); + if (StringUtils.isNotBlank(params)) { + form = JSON.parseObject(params, DailyStatisticalVoteJob.class); + } + Result result=issueVotingDailyStatisticalTaskService.issueVotingDailyStatistical(form); if(result.success()){ logger.debug("dailyStatisticalVoteTask定时任务正在执行定时任务执行成功"); }else{ diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java index 6c7960d26b..ecbd1f1997 100644 --- a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java @@ -1,5 +1,6 @@ package com.epmet.dto; +import com.epmet.commons.tools.constant.NumConstant; import lombok.Data; import java.io.Serializable; @@ -29,4 +30,8 @@ public class PolyLineDTO implements Serializable { */ private Integer oppositionIncrement; + public PolyLineDTO() { + this.supportIncrement = NumConstant.ZERO; + this.oppositionIncrement = NumConstant.ZERO; + } } diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/DailyStatisticalVoteJob.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/DailyStatisticalVoteJob.java new file mode 100644 index 0000000000..ff64816eca --- /dev/null +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/DailyStatisticalVoteJob.java @@ -0,0 +1,26 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author zxc + * @DateTime 2021/12/29 10:56 上午 + * @DESC + */ +@Data +public class DailyStatisticalVoteJob implements Serializable { + + private static final long serialVersionUID = -3685299478100771134L; + + private String customerId; + + private String dateId; + + private String startDate; + + private String endDate; + + +} diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ResiBuzzLeftPieChartFormDTO.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ResiBuzzLeftPieChartFormDTO.java index a8b2cae5dd..75f4bb0da4 100644 --- a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ResiBuzzLeftPieChartFormDTO.java +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/ResiBuzzLeftPieChartFormDTO.java @@ -23,4 +23,9 @@ public class ResiBuzzLeftPieChartFormDTO implements Serializable { * 组织类型,agency:组织,grid:网格 */ private String orgType; + + /** + * 表决中:voting 已转项目:shift_project 已关闭:closed,全部:all + */ + private String status = "all"; } diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/DailyStatisticalVoteJobResultDTO.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/DailyStatisticalVoteJobResultDTO.java new file mode 100644 index 0000000000..7bb45f5a4e --- /dev/null +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/DailyStatisticalVoteJobResultDTO.java @@ -0,0 +1,70 @@ +package com.epmet.dto.result; + +import com.epmet.commons.tools.constant.NumConstant; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Author zxc + * @DateTime 2021/12/29 1:52 下午 + * @DESC + */ +@Data +public class DailyStatisticalVoteJobResultDTO implements Serializable { + + private static final long serialVersionUID = 5266996778036448163L; + + private String issueId; + + /** + * 统计日期 + */ + private Date statisticalDate; + + /** + * 到该日的总赞成数 + */ + private Integer supportCount; + + /** + * 到该日的总反对数 + */ + private Integer oppositionCount; + + /** + * 到该日的总票数 + */ + private Integer totalCount; + + /** + * 该日增量 + */ + private Integer todayIncrement; + + /** + * 该日赞成增量 + */ + private Integer supportIncrement; + + /** + * 该日反对增量 + */ + private Integer oppositionIncrement; + + /** + * 应表决数 + */ + private Integer votableCount; + + public DailyStatisticalVoteJobResultDTO() { + this.supportCount = NumConstant.ZERO; + this.oppositionCount = NumConstant.ZERO; + this.totalCount = NumConstant.ZERO; + this.todayIncrement = NumConstant.ZERO; + this.supportIncrement = NumConstant.ZERO; + this.oppositionIncrement = NumConstant.ZERO; + this.votableCount = NumConstant.ZERO; + } +} diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java index ed50325a90..b11a2e960b 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java @@ -83,7 +83,7 @@ public class IssueManageController { * @author zxc */ @PostMapping("votingtrend") - @RequirePermission(requirePermission = RequirePermissionEnum.WORK_GRASSROOTS_ISSUE_DETAIL) +// @RequirePermission(requirePermission = RequirePermissionEnum.WORK_GRASSROOTS_ISSUE_DETAIL) public Result votingTrend(@RequestBody IssueIdFormDTO issueId){ return new Result().ok(issueVoteStatisticalService.votingTrend(issueId)); } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java index c0532cbbf5..1d4128ace9 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java @@ -26,6 +26,7 @@ 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.IssueVoteStatisticalDailyDTO; +import com.epmet.dto.form.DailyStatisticalVoteJob; import com.epmet.excel.IssueVoteStatisticalDailyExcel; import com.epmet.service.IssueVoteStatisticalDailyService; import org.springframework.beans.factory.annotation.Autowired; @@ -99,8 +100,9 @@ public class IssueVoteStatisticalDailyController { * @date 2020.05.20 15:39 **/ @PostMapping(value = "dailystatisticalvotejob") - public Result dailyStatisticalVoteJob(){ - issueVoteStatisticalDailyService.countVotingDailyStatistic(); + public Result dailyStatisticalVoteJob(@RequestBody DailyStatisticalVoteJob form){ +// issueVoteStatisticalDailyService.countVotingDailyStatistic(); + issueVoteStatisticalDailyService.countVotingDailyStatisticNew(form); return new Result(); } } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueDao.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueDao.java index b3b6430af1..0a82cb5530 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueDao.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueDao.java @@ -272,7 +272,7 @@ public interface IssueDao extends BaseDao { * @author zxc * @date 2021/12/30 9:16 上午 */ - List resiBuzzLeftPieChartIssueIds(@Param("orgId")String orgId,@Param("orgType")String orgType); + List resiBuzzLeftPieChartIssueIds(@Param("orgId")String orgId,@Param("orgType")String orgType,@Param("status")String status); /** * @Description 查询组织下每个网格的项目数 diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java index 65d2d35904..a83bba6689 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java @@ -19,8 +19,10 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.dto.IssueVoteDetailDTO; +import com.epmet.dto.PolyLineDTO; import com.epmet.dto.form.VoteFormDTO; import com.epmet.dto.form.VoteRedisFormDTO; +import com.epmet.dto.result.DailyStatisticalVoteJobResultDTO; import com.epmet.dto.result.IssueAttitudeCountResultDTO; import com.epmet.dto.result.IssueVoteResultDTO; import com.epmet.dto.result.MyPartIssuesResultDTO; @@ -130,4 +132,23 @@ public interface IssueVoteDetailDao extends BaseDao { * @date 2021/5/12 1:48 下午 */ List selectIssueVoteCountBatch(@Param("issueIds")List issueIds); + + /** + * @Description 查询客户下的议题表决日增 + * @param customerId + * @param dateId 当dateId为空时,查询的是累计值 + * @author zxc + * @date 2021/12/29 2:02 下午 + */ + List statisticVote(@Param("customerId")String customerId,@Param("dateId")String dateId); + + /** + * @Description 根据议题ID查询折线图一天的数据 + * @param issueId + * @param dateId + * @author zxc + * @date 2021/12/29 4:19 下午 + */ + PolyLineDTO polyLineData(@Param("issueId")String issueId,@Param("dateId")String dateId);; + } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java index 6b500ad3fd..ce47a20ff6 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java @@ -78,4 +78,13 @@ public interface IssueVoteStatisticalDailyDao extends BaseDao list); + + /** + * @Description 删除历史数据 + * @param customerId + * @param dateId + * @author zxc + * @date 2021/12/29 2:51 下午 + */ + Integer delHistoryData(@Param("customerId")String customerId,@Param("dateId")String dateId); } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java index 23e0c2bb02..6330942024 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/redis/IssueVoteDetailRedis.java @@ -264,6 +264,11 @@ public class IssueVoteDetailRedis { formDTO.setIssueId(issueId); formDTO.setGridId(issue.getGridId()); voteCache = issueVoteDetailService.selectIssueVotingDetail(formDTO); + IssueVoteStatisticalDTO dto = ConvertUtils.sourceToTarget(voteCache, IssueVoteStatisticalDTO.class); + dto.setVotableCount(voteCache.getShouldVoteCount()); + dto.setSupportCount(voteCache.getSupportAmount()); + dto.setOppositionCount(voteCache.getOppositionAmount()); + issueVoteStatisticalDao.updateBtIssueId(dto); }else { // 状态是关闭,转议题的,直接从结果表查询 voteCache = issueVoteStatisticalDao.selectVoteDetail(issueId); diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java index cf94b37242..42d3beac71 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java @@ -20,6 +20,7 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; import com.epmet.dto.IssueVoteStatisticalDailyDTO; +import com.epmet.dto.form.DailyStatisticalVoteJob; import com.epmet.entity.IssueVoteStatisticalDailyEntity; import java.util.List; @@ -101,4 +102,12 @@ public interface IssueVoteStatisticalDailyService extends BaseService imp // 分类编码长度 Integer length = baseDao.selectOneLevelCategoryLength(tokenDto.getCustomerId()); // List result = baseDao.resiBuzzLeftPieChart(formDTO.getOrgId(), formDTO.getOrgType(), length, tokenDto.getCustomerId()); - List issueIds = baseDao.resiBuzzLeftPieChartIssueIds(formDTO.getOrgId(), formDTO.getOrgType()); + List issueIds = baseDao.resiBuzzLeftPieChartIssueIds(formDTO.getOrgId(), formDTO.getOrgType(),formDTO.getStatus()); if(CollectionUtils.isEmpty(issueIds)){ return new ArrayList<>(); } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalDailyServiceImpl.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalDailyServiceImpl.java index 31e445c149..d42489fb48 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalDailyServiceImpl.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalDailyServiceImpl.java @@ -21,18 +21,27 @@ 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.constant.NumConstant; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.utils.DateUtils; +import com.epmet.commons.tools.utils.Result; import com.epmet.dao.IssueVoteDetailDao; import com.epmet.dao.IssueVoteStatisticalDailyDao; +import com.epmet.dto.CustomerDTO; import com.epmet.dto.IssueVoteStatisticalDailyDTO; +import com.epmet.dto.form.DailyStatisticalVoteJob; +import com.epmet.dto.result.DailyStatisticalVoteJobResultDTO; import com.epmet.dto.result.IssuesToBeCountedResultDTO; import com.epmet.entity.IssueVoteStatisticalDailyEntity; +import com.epmet.feign.OperCrmOpenFeignClient; import com.epmet.redis.IssueVoteStatisticalDailyRedis; import com.epmet.service.IssueVoteStatisticalDailyService; import com.epmet.utils.ModuleConstants; import oracle.sql.NUMBER; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,6 +49,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -58,6 +68,9 @@ public class IssueVoteStatisticalDailyServiceImpl extends BaseServiceImpl customerIds = new ArrayList<>(); + if (StringUtils.isBlank(form.getCustomerId())){ + Result> allCustomerList = operCrmOpenFeignClient.getAllCustomerList(); + if (!allCustomerList.success() || CollectionUtils.isEmpty(allCustomerList.getData())){ + throw new EpmetException("查询所有客户失败..."); + } + customerIds = allCustomerList.getData().stream().map(m -> m.getId()).collect(Collectors.toList()); + }else { + customerIds.add(form.getCustomerId()); + } + if (StringUtils.isNotBlank(form.getStartDate()) && StringUtils.isNotBlank(form.getEndDate())){ + List daysBetween = DateUtils.getDaysBetween(form.getStartDate(), form.getEndDate()); + customerIds.forEach(customerId -> { + daysBetween.forEach(dateId -> { + statisticVote(customerId,dateId); + }); + }); + }else { + if (StringUtils.isBlank(form.getDateId())){ + form.setDateId(LocalDate.now().minusDays(NumConstant.ONE).toString().replace("-", "")); + } + customerIds.forEach(customerId -> { + statisticVote(customerId, form.getDateId()); + }); + } + } + + /** + * @Description 统计 issue_vote_statistical_daily 表 + * 只统计表决日增存在的,不存在的不写入,查询程序补全 + * @param customerId + * @param dateId 格式:YYYY-MM-DD + * @author zxc + * @date 2021/12/29 1:46 下午 + */ + @Transactional(rollbackFor = Exception.class) + public void statisticVote(String customerId,String dateId){ + // 日增 + List dayAdd = issueVoteDetailDao.statisticVote(customerId, dateId); + if (CollectionUtils.isNotEmpty(dayAdd)){ + //累计 + List allDayAdd = issueVoteDetailDao.statisticVote(customerId, null); + dayAdd.forEach(d -> allDayAdd.stream().filter(a -> a.getIssueId().equals(d.getIssueId())).forEach(a -> { + d.setOppositionCount(a.getOppositionCount()); + d.setSupportCount(a.getSupportCount()); + d.setTotalCount(a.getTotalCount()); + })); + List needInsert = ConvertUtils.sourceToTarget(dayAdd, IssueVoteStatisticalDailyEntity.class); + Integer delNum; + do { + delNum = baseDao.delHistoryData(customerId, dateId); + } while (delNum != null && delNum > NumConstant.ZERO); + List> partition = ListUtils.partition(needInsert, NumConstant.ONE_HUNDRED); + partition.forEach(p -> { + baseDao.insertBatch(p); + }); + } + } + } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java index 67eea7532a..f8afd7bbf7 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java @@ -27,6 +27,7 @@ import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.IssueConstant; import com.epmet.dao.IssueDao; @@ -66,6 +67,9 @@ import java.time.ZoneOffset; import java.util.*; import java.util.stream.Collectors; +import static com.epmet.commons.tools.utils.DateUtils.DATE_PATTERN; +import static com.epmet.commons.tools.utils.DateUtils.DATE_PATTERN_YYYYMMDD; + /** * 议题表决统计表 * @@ -205,12 +209,36 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl polyLineDTOS = issueVoteStatisticalDao.polyLineData(issueId); - PolyLineDTO polyLineDTO = new PolyLineDTO(); - polyLineDTO.setVoteDate(LocalDateTime.now().toEpochSecond(ZoneOffset.of(IssueConstant.BEIJING_TIME_ZONE))); +// PolyLineDTO polyLineDTO = new PolyLineDTO(); +// polyLineDTO.setVoteDate(LocalDateTime.now().toEpochSecond(ZoneOffset.of(IssueConstant.BEIJING_TIME_ZONE))); //议题 已转项目 或 已结案 的时间 - String date = issueDao.operateTime(issueId.getIssueId()); +// String date = issueDao.operateTime(issueId.getIssueId()); + IssueEntity issueEntity = issueDao.selectById(issueId.getIssueId()); + String startDate = DateUtils.format(issueEntity.getDecidedTime(),DATE_PATTERN); + String endDate = null == issueEntity.getVotingDeadline() ? + DateUtils.format(new Date(),DATE_PATTERN) : + DateUtils.format(issueEntity.getVotingDeadline(),DATE_PATTERN); + List polyLine = getPolyLine(startDate, endDate); + String today = LocalDate.now().toString(); + if (today.equals(endDate)){ + PolyLineDTO polyLineDTO = issueVoteDetailDao.polyLineData(issueId.getIssueId(), endDate); + polyLine.get(polyLine.size() - NumConstant.ONE).setSupportIncrement(polyLineDTO.getSupportIncrement()); + polyLine.get(polyLine.size() - NumConstant.ONE).setOppositionIncrement(polyLineDTO.getOppositionIncrement()); + } + if (CollectionUtils.isEmpty(polyLineDTOS)){ + votingTrendResultDTO.setPolyLine(polyLine); + return votingTrendResultDTO; + } + polyLineDTOS.forEach(pd -> { + polyLine.forEach(p -> { + if (pd.getVoteDate().equals(p.getVoteDate())){ + p.setOppositionIncrement(pd.getOppositionIncrement()); + p.setSupportIncrement(pd.getSupportIncrement()); + } + }); + }); //今天刚转项目或刚刚关闭,当天数据DB没有,直接从缓存拿 - if (polyLineDTOS.size() == NumConstant.ZERO && date.equals(LocalDate.now().toString())) { + /*if (polyLineDTOS.size() == NumConstant.ZERO && date.equals(LocalDate.now().toString())) { polyLineDTO.setSupportIncrement(voteRedisFormDTO.getSupportAmount()); polyLineDTO.setOppositionIncrement(voteRedisFormDTO.getOppositionAmount()); polyLineDTOS.add(polyLineDTO); @@ -222,18 +250,37 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl getPolyLine(String startTime, String endTime){ + List result = new ArrayList<>(); + Date start = DateUtils.parse(startTime, DATE_PATTERN); + Date end = DateUtils.parse(endTime, DATE_PATTERN); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + // 日期加1(包含结束) + tempEnd.add(Calendar.DATE, +1); + while (tempStart.before(tempEnd)) { + PolyLineDTO dto = new PolyLineDTO(); + dto.setVoteDate(tempStart.getTimeInMillis()/1000); + result.add(dto); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + return result; + } + /** * @param formDTO * @Description 满意度评价列表——已关闭 diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml index d34986581d..3273fb243e 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml +++ b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml @@ -641,7 +641,7 @@ + + + + + + \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml index dcad30689c..bcbe6a5a4d 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml +++ b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml @@ -280,4 +280,13 @@ id = #{item.id} + + + + DELETE FROM issue_vote_statistical_daily + WHERE CUSTOMER_ID = #{customerId} + AND STATISTICAL_DATE = #{dateId} + LIMIT 1000 + + \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java index 6e6bc84e49..b9d49f7235 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java @@ -1136,7 +1136,7 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl 0 ? ++pageCount : pageCount; - // 志愿者epmet user id + // 志愿者epmet user id 集合 List volunteerEpmetUserIds = new ArrayList<>(); // 分页查询志愿者的epmet user id - while (true) { - - VolunteerCommonFormDTO volunteerForm = new VolunteerCommonFormDTO(); - volunteerForm.setCustomerId(customerId); - volunteerForm.setSuperiorAgencyId(agencyId); - volunteerForm.setPageNo(pageNo); - volunteerForm.setPageSize(pageSize); - - String errorMsg = "【志愿者分布】分页查询志愿者列表失败"; - List volunteerPage = getResultDataOrThrowsException(epmetHeartOpenFeignClient.queryVolunteerPage(volunteerForm), - ServiceConstant.EPMET_HEART_SERVER, - EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), - errorMsg, - errorMsg); - - // 将本页userId添加到总集中去 - volunteerEpmetUserIds.addAll(volunteerPage.stream().map(v -> v.getUserId()).collect(Collectors.toSet())); - - if (volunteerPage.size() < pageSize) { - // 说明是最后一页了 - break; - } + List>> volsPageFutures = new ArrayList<>(); - pageNo++; - } + for (int pageNo = 1 ; pageNo <= pageCount ; pageNo ++) { + int pageNoTemp = pageNo; + CompletableFuture> future = CompletableFuture.supplyAsync(() -> { + return listVolunteersByPage(customerId, agencyId, pageNoTemp, pageSize) + .stream() + .map(v -> v.getUserId()) + .collect(Collectors.toSet()); + }); - VolunteerDistributionResultDTO r = new VolunteerDistributionResultDTO(); + volsPageFutures.add(future); + } + + // 阻塞,等待子线程返回结果,然后添加到志愿者userId集合中去 + for (CompletableFuture> future : volsPageFutures) { + try { + volunteerEpmetUserIds.addAll(future.get()); + } catch (InterruptedException e) { + log.error("【志愿者分布】异步获取志愿者userId列表被中断:{}", ExceptionUtils.getErrorStackTrace(e)); + } catch (ExecutionException e) { + log.error("【志愿者分布】异步获取志愿者userId列表失败:{}", ExceptionUtils.getErrorStackTrace(e)); + } + } log.info("【志愿者分布】查询到志愿者userId公{}个", volunteerEpmetUserIds.size()); - - // 2.填充ic居民信息 + + // 2.==========异步填充ic居民信息========== + List>> volResiInfoFutures = new ArrayList<>(); + + // 将所有的userId按100固定分割成多个部分,循环用每个部分去查询,然后填充 List> volunteerEpmetUserIdParts = Lists.partition(volunteerEpmetUserIds, 100); + for (List volunteerEpmetUserIdPart : volunteerEpmetUserIdParts) { - List icResiInfos = icResiUserDao.listIcResiInfosByUserIds(volunteerEpmetUserIdPart); - - // 填充志愿者类型 - for (VolunteerDistributionResultDTO.Distribution icResiInfo : icResiInfos) { - // 将志愿者类型列表字符串,切割放到set中 - Set volunteerTypes = new HashSet(); - String volunteerCategoriesStr = icResiInfo.getVolunteerCategoriesStr(); - - if (StringUtils.isNotEmpty(volunteerCategoriesStr)) { - String[] vTypes = volunteerCategoriesStr.split(","); - if (vTypes != null && vTypes.length > 0) { - volunteerTypes.addAll(Arrays.asList(vTypes)); - } - icResiInfo.setVolunteerCategories(volunteerTypes); - } else { - icResiInfo.setVolunteerCategories(new HashSet<>()); - } + log.info("【志愿者分布】查询ic居民信息,切割后,本组的userId个数:{}", volunteerEpmetUserIdPart.size()); - // 填充建筑坐标 - String msg = "【志愿者分布】查询楼栋信息失败"; - IcBuildingDTO building = getResultDataOrThrowsException(govOrgOpenFeignClient.getBuildingById(icResiInfo.getBuildingId()), - ServiceConstant.GOV_ORG_SERVER, - EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), msg, msg); + CompletableFuture> future = CompletableFuture.supplyAsync(() -> { + return listIcResiInfosByUserIds(volunteerEpmetUserIdPart); + }); - icResiInfo.setEpmetUserId(icResiInfo.getEpmetUserId()); - icResiInfo.setIcResiUserId(icResiInfo.getIcResiUserId()); - Optional.of(building).ifPresent(b -> { - icResiInfo.setLongitude(b.getLongitude()); - icResiInfo.setLatitude(b.getLatitude()); - }); + volResiInfoFutures.add(future); + } + // 阻塞的,获取各个子线程计算结果 + for (CompletableFuture> volResiInfoFuture : volResiInfoFutures) { + try { + List distributions = volResiInfoFuture.get(); + r.getDistributions().addAll(distributions); + } catch (InterruptedException e) { + log.error("【志愿者分布】异步获取志愿者的居民信息被中断:{}", ExceptionUtils.getErrorStackTrace(e)); + } catch (ExecutionException e) { + log.error("【志愿者分布】异步获取志愿者的居民信息失败:{}", ExceptionUtils.getErrorStackTrace(e)); } - r.getDistributions().addAll(icResiInfos); } - - // 就有代码,稳定之后可以删掉 - //for (String volunteerEpmetUserId : volunteerEpmetUserIds) { - // - // VolunteerDistributionResultDTO.Distribution distribution = new VolunteerDistributionResultDTO.Distribution(); - // - // ResiUserBaseInfoResultDTO userBaseInfo = userBaseInfoDao.selecUserBaseInfoByUserId(volunteerEpmetUserId); - // if (userBaseInfo == null || StringUtils.isBlank(userBaseInfo.getIdNum())){ - // log.warn("getVolunteerDistribution selecUserBaseInfoByUserId return null or idCard is null,volunteerEpmetUserId:{}", volunteerEpmetUserId); - // continue; - // } - // //使用身份证号查询ic resi信息 - // IcResiUserDTO icResiUserInfo = icResiUserDao.selectIdByIdCard(customerId, userBaseInfo.getIdNum(), null); - // if (icResiUserInfo == null) { - // continue; - // } - // - // // 查询志愿者类别 - // List volunteerCategories = icResiUserDao.selectVolunteerByUserId(icResiUserInfo.getId()); - // //if (CollectionUtils.isEmpty(volunteerCategories)) { - // // // 此人没有志愿者信息 - // // continue; - // //} - // - // // 将志愿者类型列表字符串,切割放到set中 - // Set volunteerTypes = new HashSet(); - // for (String vTypesString : volunteerCategories) { - // String[] vTypes = vTypesString.split(","); - // if (vTypes != null && vTypes.length > 0) { - // volunteerTypes.addAll(Arrays.asList(vTypes)); - // } - // } - // - // - // String msg = "【志愿者分布】查询楼栋信息失败"; - // IcBuildingDTO building = getResultDataOrThrowsException(govOrgOpenFeignClient.getBuildingById(icResiUserInfo.getBuildId()), - // ServiceConstant.GOV_ORG_SERVER, - // EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), msg, msg); - // - // distribution.setVolunteerCategories(volunteerTypes); - // distribution.setEpmetUserId(userBaseInfo.getUserId()); - // distribution.setIcResiUserId(icResiUserInfo.getId()); - // Optional.of(building).ifPresent(b -> { - // distribution.setLongitude(b.getLongitude()); - // distribution.setLatitude(b.getLatitude()); - // }); - // - // r.getDistributions().add(distribution); - //} return r; } + /** + * userId列表批量获取他们对应的志愿者信息 + * @param volunteerEpmetUserIdPart + * @return + */ + private List listIcResiInfosByUserIds(List volunteerEpmetUserIdPart) { + List icResiInfos = icResiUserDao.listIcResiInfosByUserIds(volunteerEpmetUserIdPart); + + // 填充志愿者类型 + for (VolunteerDistributionResultDTO.Distribution icResiInfo : icResiInfos) { + // 将志愿者类型列表字符串,切割放到set中 + Set volunteerTypes = new HashSet(); + String volunteerCategoriesStr = icResiInfo.getVolunteerCategoriesStr(); + + if (StringUtils.isNotEmpty(volunteerCategoriesStr)) { + String[] vTypes = volunteerCategoriesStr.split(","); + if (vTypes != null && vTypes.length > 0) { + volunteerTypes.addAll(Arrays.asList(vTypes)); + } + icResiInfo.setVolunteerCategories(volunteerTypes); + } else { + icResiInfo.setVolunteerCategories(new HashSet<>()); + } + + // 填充建筑坐标 + String msg = "【志愿者分布】查询楼栋信息失败"; + IcBuildingDTO building = getResultDataOrThrowsException(govOrgOpenFeignClient.getBuildingById(icResiInfo.getBuildingId()), + ServiceConstant.GOV_ORG_SERVER, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), msg, msg); + + icResiInfo.setEpmetUserId(icResiInfo.getEpmetUserId()); + icResiInfo.setIcResiUserId(icResiInfo.getIcResiUserId()); + Optional.of(building).ifPresent(b -> { + icResiInfo.setLongitude(b.getLongitude()); + icResiInfo.setLatitude(b.getLatitude()); + }); + + } + + return icResiInfos; + } + + /** + * 分页查询志愿者列表 + * @param customerId + * @param pageNo + * @param pageSize + * @return + */ + private List listVolunteersByPage(String customerId, String agencyId, Integer pageNo, Integer pageSize) { + VolunteerCommonFormDTO volunteerForm = new VolunteerCommonFormDTO(); + volunteerForm.setCustomerId(customerId); + volunteerForm.setSuperiorAgencyId(agencyId); + volunteerForm.setPageNo(pageNo); + volunteerForm.setPageSize(pageSize); + + String errorMsg = "【志愿者分布】分页查询志愿者列表失败"; + return getResultDataOrThrowsException(epmetHeartOpenFeignClient.queryVolunteerPage(volunteerForm), + ServiceConstant.EPMET_HEART_SERVER, + EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), + errorMsg, + errorMsg); + } + }