diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java index 01af04ae04..59e3ce4bdc 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java @@ -26,10 +26,11 @@ public interface NumConstant { int TEN = 10; int ELEVEN = 11; int TWELVE = 12; - + int SEVENTEEN = 17; int FIFTEEN = 15; int FOURTEEN=14; int TWENTY = 20; + int TWENTY_FOUR = 24; int THIRTY = 30; int THIRTY_ONE = 31; int FORTY = 40; diff --git a/epmet-gateway/pom.xml b/epmet-gateway/pom.xml index ad2a59616e..6c4cacd58b 100644 --- a/epmet-gateway/pom.xml +++ b/epmet-gateway/pom.xml @@ -288,10 +288,11 @@ lb://gov-issue-server - + lb://gov-project-server lb://common-service-server + lb://resi-home-server diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/form/DifficultyRankFormDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/form/DifficultyRankFormDTO.java new file mode 100644 index 0000000000..782e9a1828 --- /dev/null +++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/form/DifficultyRankFormDTO.java @@ -0,0 +1,41 @@ +package com.epmet.project.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 数据改版-难点堵点项目排行--接口入参 + * @Author jiangyy + */ +@Data +public class DifficultyRankFormDTO implements Serializable { + private static final long serialVersionUID = -2880432640584616651L; + public interface DifficultyRankInternalGroup {} + /** + * 组织Id + */ + @NotBlank(message = "组织ID不能为空",groups = {DifficultyRankInternalGroup.class}) + private String agencyId; + /** + * 状态: 待处理: pending; 结案closed + */ + private String status; + /** + * 排序类型 耗时最长:timelongest;涉及部门最多:mostdepts;处理次数:mosthandled + */ + @NotBlank(message = "排序类型不能为空",groups = {DifficultyRankInternalGroup.class}) + private String type; + /** + * 获取数据个数 默认前10 + */ + private Integer topNum = 10; + /** + * 查询的组织类型 网格:grid ; 组织:agency + */ + @NotBlank(message = "查询的组织类型不能为空",groups = {DifficultyRankInternalGroup.class}) + private String orgType; + +} diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectDifficultRankResultDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectDifficultRankResultDTO.java new file mode 100644 index 0000000000..f781d62d15 --- /dev/null +++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectDifficultRankResultDTO.java @@ -0,0 +1,59 @@ +package com.epmet.project.dto.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description 难点赌点-耗时最长|涉及部门最多|处理次数 返参DTO + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @ClassName DifficultProjectResultDTO + * @Auth jiangyy + * @Date 2020-08-20 13:43 + */ +@Data +public class ProjectDifficultRankResultDTO implements Serializable { + private static final long serialVersionUID = -7338625142484943434L; + /** + * 项目id + * */ + private String projectId; + + /** + * 项目标题 + * */ + private String title; + + /** + * 状态: 待处理: pending; 结案closed + * */ + private String statusCode; + + /** + * 社区-网格名 + * */ + private String gridName; + + /** + * 图片列表 + * */ + private List imgUrlList; + + /** + * 耗时,单位分钟 + * */ + private Integer totalHours; + + /** + * 涉及多少个部门 + * */ + private Integer reOrg; + + /** + * 处理次数 + * */ + private Integer handledCount; + +} diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectNextAgencyResultDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectNextAgencyResultDTO.java new file mode 100644 index 0000000000..2c867a6398 --- /dev/null +++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/project/dto/result/ProjectNextAgencyResultDTO.java @@ -0,0 +1,34 @@ +package com.epmet.project.dto.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @Description 难点赌点-当前登录人员本级一级下一级组织机构/网格 返参DTO + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @ClassName DifficultProjectResultDTO + * @Auth jiangyy + * @Date 2020-08-20 13:43 + */ +@Data +public class ProjectNextAgencyResultDTO implements Serializable { + private static final long serialVersionUID = -7338625142484943434L; + /** + * 组织id + * */ + private String orgId; + + /** + * 组织名称 + * */ + private String orgName; + + /** + * 网格:grid ; 组织:agency + * */ + private String orgType; + + +} diff --git a/epmet-module/data-report/data-report-server/pom.xml b/epmet-module/data-report/data-report-server/pom.xml index 6e410e26ad..a4d8978680 100644 --- a/epmet-module/data-report/data-report-server/pom.xml +++ b/epmet-module/data-report/data-report-server/pom.xml @@ -13,6 +13,11 @@ 4.0.0 + + com.epmet + gov-org-client + 2.0.0 + com.epmet data-report-client diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/project/ProjectController.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/project/ProjectController.java index 9966047056..96b9e5c99a 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/project/ProjectController.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/project/ProjectController.java @@ -1,13 +1,15 @@ -package com.epmet.module.project.controller; +package com.epmet.datareport.controller.project; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.datareport.service.project.ProjectService; import com.epmet.dto.form.ProcessListFormDTO; import com.epmet.module.project.service.ProjectService; import com.epmet.project.constant.ProjectConstant; +import com.epmet.project.dto.form.DifficultyRankFormDTO; import com.epmet.project.dto.form.ProjectIncrTrendFormDTO; import com.epmet.project.dto.result.*; import org.springframework.beans.factory.annotation.Autowired; @@ -41,7 +43,7 @@ public class ProjectController { /** * @Author sun - * @Description 数据-项目-获取组织下饼图数据 + * @Description t **/ @PostMapping("summaryinfo") public Result> summaryInfo(@LoginUser TokenDto tokenDto) { @@ -79,6 +81,35 @@ public class ProjectController { return new Result>().ok(projectService.getProjectIncrTrend(tokenDto, formDTO)); } + /** + * @Description 难点赌点-耗时最长|涉及部门最多|处理次数 + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @param param + * @return + * @author jiangyy + * @date 2020.10.19 16:38 + **/ + @PostMapping("difficultyrank") + public Result> difficultyRank(@RequestBody DifficultyRankFormDTO param){ + ValidatorUtils.validateEntity(param, DifficultyRankFormDTO.DifficultyRankInternalGroup.class); + return new Result>().ok(projectService.getDifficultyRank(param)); + } + + /** + * @Description 难点赌点-耗时最长|涉及部门最多|处理次数 + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @param tokenDto + * @return + * @author jiangyy + * @date 2020.10.19 16:38 + **/ + @PostMapping("mynextagency") + public Result> myNextAgency(@LoginUser TokenDto tokenDto){ + return new Result>().ok(projectService.getMyNextAgency(tokenDto)); + } + + + /** * @Description 项目详情 * @Param processListFormDTO diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/project/ProjectDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/project/ProjectDao.java index b8920580bf..870c25a6d2 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/project/ProjectDao.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/project/ProjectDao.java @@ -1,6 +1,7 @@ package com.epmet.datareport.dao.project; import com.epmet.project.dto.FactAgencyProjectDailyDTO; +import com.epmet.project.dto.form.DifficultyRankFormDTO; import com.epmet.project.dto.result.*; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -55,4 +56,22 @@ public interface ProjectDao { * @Description 查询机关月统计近十二个月数据 **/ List selectIncrTrendMonthly(@Param("agencyId") String agencyId); + + /** + * @Description 查询难点赌点-耗时最长|涉及部门最多|处理次数 + * @param + * @return + * @author jiangyy + * @date 2020.10.19 16:38 + **/ + List difficultyRank(DifficultyRankFormDTO difficultyRankFormDTO); + + /** + * @Description 查询难点堵点的图片list + * @param + * @return + * @author jiangyy + * @date 2020.10.20 10:13 + **/ + List getDifficultyImgList(String eventId); } diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/ProjectService.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/ProjectService.java index f4c4afa4d0..99a9b90db0 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/ProjectService.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/ProjectService.java @@ -1,6 +1,7 @@ -package com.epmet.module.project.service; +package com.epmet.datareport.service.project; import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.project.dto.form.DifficultyRankFormDTO; import com.epmet.dto.form.ProcessListFormDTO; import com.epmet.project.dto.form.ProjectIncrTrendFormDTO; import com.epmet.project.dto.result.*; @@ -43,6 +44,25 @@ public interface ProjectService { **/ List getProjectIncrTrend(TokenDto tokenDto, ProjectIncrTrendFormDTO formDTO); + /** + * @Description 难点赌点-耗时最长|涉及部门最多|处理次数 + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @param param + * @return + * @author jiangyy + * @date 2020.10.19 16:38 + **/ + List getDifficultyRank(DifficultyRankFormDTO param); + + /** + * @Description 难点赌点-获取组织下拉框 + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @return + * @author jiangyy + * @date 2020.10.19 16:38 + **/ + List getMyNextAgency(TokenDto tokenDto); + /** * @Description 项目详情 * @Param processListFormDTO diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/impl/ProjectServiceImpl.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/impl/ProjectServiceImpl.java index ac9909f9a2..3610436962 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/impl/ProjectServiceImpl.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/project/impl/ProjectServiceImpl.java @@ -1,23 +1,34 @@ package com.epmet.datareport.service.project.impl; +import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.Result; +import com.epmet.constant.DataSourceConstant; +import com.epmet.commons.tools.utils.Result; import com.epmet.datareport.dao.project.ProjectDao; +import com.epmet.dto.CustomerAgencyDTO; import com.epmet.datareport.service.evaluationindex.screen.ScreenDifficultyDataService; import com.epmet.dto.form.LoginUserDetailsFormDTO; +import com.epmet.dto.form.SubAgencyFormDTO; +import com.epmet.dto.result.GridByStaffResultDTO; import com.epmet.dto.form.ProcessListFormDTO; import com.epmet.dto.result.LoginUserDetailsResultDTO; +import com.epmet.dto.result.SubAgencyResultDTO; +import com.epmet.dto.result.SubListResultDTO; import com.epmet.dto.result.ProcessAndCurrentDeptResultDTO; import com.epmet.dto.result.ProcesslistResultDTO; import com.epmet.feign.EpmetUserOpenFeignClient; +import com.epmet.feign.GovOrgOpenFeignClient; +import com.epmet.datareport.service.project.ProjectService; import com.epmet.feign.GovProjectOpenFeignClient; import com.epmet.module.project.service.ProjectService; import com.epmet.project.constant.ProjectConstant; import com.epmet.project.dto.FactAgencyProjectDailyDTO; +import com.epmet.project.dto.form.DifficultyRankFormDTO; import com.epmet.project.dto.form.ProjectIncrTrendFormDTO; import com.epmet.project.dto.result.*; import org.springframework.beans.BeanUtils; @@ -47,6 +58,9 @@ public class ProjectServiceImpl implements ProjectService { @Autowired private ScreenDifficultyDataService screenDifficultyDataService; + @Autowired + private GovOrgOpenFeignClient govOrgOpenFeignClient; + /** * @Author sun * @Description 数据-项目-获取汇总数据 @@ -218,4 +232,98 @@ public class ProjectServiceImpl implements ProjectService { return agencyId; } + /** + * @author jiangyy + * @Description 获取userId + */ + private String getLoginUserUserId(TokenDto tokenDto) { + LoginUserDetailsFormDTO dto = new LoginUserDetailsFormDTO(); + BeanUtils.copyProperties(tokenDto, dto); + LoginUserDetailsResultDTO data = epmetUserOpenFeignClient.getLoginUserDetails(dto).getData(); + String userId = data.getUserId(); + if (null == userId || "".equals(userId)) { + throw new RenException(ProjectConstant.GET_AGENCYID); + } + return userId; + } + + /** + * @Description 难点赌点-获取组织下拉框 + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @return + * @author jiangyy + * @date 2020.10.19 16:38 + **/ + @Override + public List getMyNextAgency(TokenDto tokenDto) { + List resultList = new ArrayList<>(); + + //1、根据token获取本级agencyId、获取userId + String agencyId = getLoginUserDetails(tokenDto); + String userId=getLoginUserUserId(tokenDto); + + //2、获取本级组织机构 + Result customerAgencyDTO = govOrgOpenFeignClient.getAgencyById(agencyId); + ProjectNextAgencyResultDTO angencyDto = new ProjectNextAgencyResultDTO(); + angencyDto.setOrgId(agencyId); + angencyDto.setOrgName(customerAgencyDTO.getData().getOrganizationName()); + angencyDto.setOrgType(customerAgencyDTO.getData().getLevel()); + resultList.add(angencyDto); + + + //3、获取下一级组织机构\网格 + if( customerAgencyDTO.getData().getLevel() == "community" ){ + //取下级网格 + Result> gridListResult = govOrgOpenFeignClient.listGridsbystaffid(userId); + List gridList = gridListResult.getData(); + for(int i=0;i SubAgencyResultDTO = govOrgOpenFeignClient.subAgencyList(form); + + List subAgencyList = SubAgencyResultDTO.getData().getAgencyList(); + for(int i=0;i(); + return resultList; + } + + /** + * @Description 难点赌点-耗时最长|涉及部门最多|处理次数 + * @NEI https://nei.netease.com/interface/detail/res/?pid=57068&id=321614 + * @param param + * @return + * @author jiangyy + * @date 2020.10.19 16:38 + **/ + @DataSource(value = DataSourceConstant.EVALUATION_INDEX,datasourceNameFromArg = true) + @Override + public List getDifficultyRank(DifficultyRankFormDTO param) { + List result = projectDao.difficultyRank(param); + for (int i = 0; i < result.size (); i ++){ + List imgUrlList ; + imgUrlList = projectDao.getDifficultyImgList(result.get(i).getProjectId()) ; + + result.get(i).setImgUrlList(imgUrlList); + } + if(null == result) return new ArrayList<>(); + return result; + } + } diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/project/ProjectDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/project/ProjectDao.xml index 21b472e4de..04fa7f0d4f 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/project/ProjectDao.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/project/ProjectDao.xml @@ -234,4 +234,39 @@ )a ORDER BY a.month_id DESC,a.type ASC + + + + + \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/ProjectOrgRelationDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/ProjectOrgRelationDTO.java new file mode 100644 index 0000000000..208112c9ab --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/ProjectOrgRelationDTO.java @@ -0,0 +1,114 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

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

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

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dto.project; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + + +/** + * 项目机关历时关系表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2020-10-19 + */ +@Data +public class ProjectOrgRelationDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * + */ + private String id; + + /** + * 关联PROJECT_STAFF,由此ID可以关联出PROJECT_ID、CUSTOMER_ID、PROCESS_ID + */ + private String projectStaffId; + + /** + * 流转到的日期 同CREATED_TIME + */ + private Date informedDate; + + /** + * 流转走或结案的日期 + */ + private Date handledDate; + + /** + * 节点耗时,从流转到自己到流转走共耗时,单位:分钟,如果项目还没有结案且该项目在这个组织下一直滞留,这一项为空 + * 8*60的倍数 + */ + private Integer totalPeriod; + + /** + * 第一次响应时间 + */ + private Date firstDealtDate; + + /** + * 首次响应时长,单位:分钟 + * 8*60的倍数 + */ + private Integer firstReplyPeriod; + + /** + * 来源动作,return(回退)、transfer(流转)、closed(结案)、response(响应)、created(立项时第一个流转到的) + */ + private String sourceOperation; + + /** + * 处理动作,return(回退)、transfer(流转)、closed(结案)、response(响应) + */ + private String operation; + + /** + * 删除标识 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * + */ + private Date createdTime; + + /** + * + */ + private String createdBy; + + /** + * + */ + private Date updatedTime; + + /** + * + */ + private String updatedBy; + +} \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/result/ProjectOrgPeriodResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/result/ProjectOrgPeriodResultDTO.java index b3e101295d..9bbd942efe 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/result/ProjectOrgPeriodResultDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/result/ProjectOrgPeriodResultDTO.java @@ -7,7 +7,6 @@ import java.util.Date; /** * @Description 从数据库中查询出的 项目 - 机关(网格、部门、机关)的响应时长 - * FIXME 注:查询的全都是已经结案的项目!!!!!!!!!!!!如果查询流转中的项目,需要修改逻辑(较为复杂) * @ClassName ProjectOrgPeriodResultDTO * @Auth wangc * @Date 2020-09-16 15:28 @@ -92,4 +91,6 @@ public class ProjectOrgPeriodResultDTO implements Serializable { private String isResolved; + private String projectStaffId; + } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java index a7d6eda645..13a418a773 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DemoController.java @@ -21,6 +21,7 @@ import com.epmet.dto.AgencySubTreeDto; import com.epmet.dto.extract.form.ExtractOriginFormDTO; import com.epmet.dto.extract.form.ExtractScreenFormDTO; import com.epmet.dto.indexcal.CalculateCommonFormDTO; +import com.epmet.dto.project.result.ProjectOrgPeriodResultDTO; import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO; import com.epmet.entity.evaluationindex.indexcoll.FactIndexGovrnAblityGridMonthlyEntity; import com.epmet.entity.evaluationindex.indexcoll.FactIndexPartyAblityGridMonthlyEntity; @@ -36,6 +37,7 @@ import com.epmet.service.StatsDemoService; import com.epmet.service.evaluationindex.extract.dataToIndex.*; import com.epmet.service.evaluationindex.extract.todata.FactOriginProjectLogDailyService; import com.epmet.service.evaluationindex.extract.todata.FactOriginTopicMainDailyService; +import com.epmet.service.evaluationindex.extract.todata.ProjectExtractService; import com.epmet.service.evaluationindex.extract.toscreen.*; import com.epmet.service.evaluationindex.indexcal.*; import com.epmet.service.stats.DimAgencyService; diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.java index 0007237a2f..8f29bf5ec9 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectOrgPeriodDailyDao.java @@ -47,7 +47,7 @@ public interface FactOriginProjectOrgPeriodDailyDao extends BaseDao { **/ List selectProjectOrgPeriod(@Param("customerId") String customerId,@Param("projectStatus")String projectStatus,@Param("dateId") String dateId); + /** + * @Description 根据项目业务改造,在数据抽取时,直接查询出项目节点的耗时 + * @param + * @return java.util.List + * @author wangc + * @date 2020.10.23 11:13 + */ + List selectProjectOrgPeriodDirectly(@Param("customerId") String customerId,@Param("projectStatus")String projectStatus,@Param("dateId") String dateId); + /** * @Description 查询项目-机关各个节点的响应列表 * @param projects @@ -115,6 +126,15 @@ public interface ProjectProcessDao extends BaseDao { **/ List selectResponseTrace(@Param("projects") List projects); + /** + * @Description 查询项目的节点 + * @param projects + * @return java.util.List + * @author wangc + * @date 2020.10.23 17:02 + */ + List selectProjectProcess(@Param("projects") List projects); + /** * 获取办结组织 * @author zhaoqifeng @@ -133,4 +153,6 @@ public interface ProjectProcessDao extends BaseDao { * @date 2020.09.28 14:45 */ List selectLatestOperation(@Param("list") List list); + + } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenDifficultyDataEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenDifficultyDataEntity.java index 35f4ca3ee4..f8f7595adf 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenDifficultyDataEntity.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenDifficultyDataEntity.java @@ -80,6 +80,11 @@ public class ScreenDifficultyDataEntity extends BaseEpmetEntity { */ private String eventContent; + /** + * 事件标题 + */ + private String eventTitle; + /** * 事件耗时 单位:分钟 */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/ProjectExtractService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/ProjectExtractService.java index 1011df61f6..9b7b5e35fe 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/ProjectExtractService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/ProjectExtractService.java @@ -2,6 +2,9 @@ package com.epmet.service.evaluationindex.extract.todata; import com.epmet.dto.extract.form.ExtractOriginFormDTO; +import com.epmet.dto.project.result.ProjectOrgPeriodResultDTO; + +import java.util.List; /** * @author zhaoqifeng @@ -29,4 +32,13 @@ public interface ProjectExtractService { * @date 2020.09.17 14:05 **/ void extractProjectPeriodData(ExtractOriginFormDTO param); + + /** + * @Description 项目节点耗时数据补齐 + * @param + * @return java.util.List + * @author wangc + * @date 2020.10.26 10:18 + */ + void projectProcessCostTimeDataCompensation(); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java index 66c59bf20f..5077794d49 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java @@ -16,6 +16,7 @@ import com.epmet.dto.issue.IssueDTO; import com.epmet.dto.party.PartyMemberDTO; import com.epmet.dto.project.FinishOrgDTO; import com.epmet.dto.project.ProcessInfoDTO; +import com.epmet.dto.project.ProjectOrgRelationDTO; import com.epmet.dto.project.result.ProjectOrgPeriodResultDTO; import com.epmet.dto.result.WorkDayResultDTO; import com.epmet.dto.topic.ResiTopicDTO; @@ -31,6 +32,7 @@ import com.epmet.service.evaluationindex.extract.todata.ProjectExtractService; import com.epmet.service.partymember.PartyMemberService; import com.epmet.service.project.ProjectProcessService; import com.epmet.service.project.ProjectService; +import com.epmet.service.stats.DimCustomerService; import com.epmet.service.topic.TopicService; import com.epmet.util.DimIdGenerator; import lombok.extern.slf4j.Slf4j; @@ -40,10 +42,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; +import java.util.*; +import java.util.stream.Collector; import java.util.stream.Collectors; /** @@ -73,6 +73,8 @@ public class ProjectExtractServiceImpl implements ProjectExtractService { private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient; @Autowired private FactOriginProjectOrgPeriodDailyDao factOriginProjectOrgPeriodDailyDao; + @Autowired + private DimCustomerService dimCustomerService; private final static String ONE_DAY = "<1"; @@ -398,7 +400,7 @@ public class ProjectExtractServiceImpl implements ProjectExtractService { param.setDateId(DateUtils.getBeforeNDay(NumConstant.ONE)); } List extractData = - projectProcessService.getProjectPeriod(isFirst, param.getCustomerId(), param.getDateId()); + projectProcessService.getProjectPeriodDirectly(isFirst, param.getCustomerId(), param.getDateId()); List formattingData = new LinkedList<>(); extractData.forEach(original -> { FactOriginProjectOrgPeriodDailyEntity dest @@ -447,6 +449,27 @@ public class ProjectExtractServiceImpl implements ProjectExtractService { } } + /** + * @Description 项目节点耗时数据补齐 + * @param + * @return java.util.List + * @author wangc + * @date 2020.10.26 10:18 + */ + @Override + public void projectProcessCostTimeDataCompensation() { + + List customers = dimCustomerService.getAllCustomerId(); + if(CollectionUtils.isEmpty(customers)) return ; + customers.forEach(local -> { + // projectProcessService.getProjectPeriod(true, local,null); + }); + + + + System.out.println("-------------EndPointHere----------------"); + } + /** * 工作日计算 diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectProcessService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectProcessService.java index 66dc3dfe10..48bd2488ee 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectProcessService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectProcessService.java @@ -93,16 +93,18 @@ public interface ProjectProcessService extends BaseService */ List getClosedProjectList(String customerId, String date); + + /** - * @Description 查询各机关项目节点历时 - * @param isFirst 是否首次 + * @Description 直接从项目业务改造获取项目节点耗时信息 + * @param isFirst * @param customerId * @param date - * @return + * @return java.util.List * @author wangc - * @date 2020.09.18 13:38 - **/ - List getProjectPeriod(Boolean isFirst,String customerId,String date); + * @date 2020.10.23 09:10 + */ + List getProjectPeriodDirectly(Boolean isFirst,String customerId, String date); /** * 获取办结组织 diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java index 074bff1979..23dc8128ba 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java @@ -20,11 +20,13 @@ package com.epmet.service.project.impl; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.constant.DataSourceConstant; import com.epmet.dao.project.ProjectProcessDao; import com.epmet.dto.form.CommonStaffIdFormDTO; import com.epmet.dto.project.FinishOrgDTO; import com.epmet.dto.project.ProcessInfoDTO; +import com.epmet.dto.project.ProjectOrgRelationDTO; import com.epmet.dto.project.result.ProjectLatestOperationResultDTO; import com.epmet.dto.project.result.ProjectOrgPeriodResultDTO; import com.epmet.dto.project.result.ProjectOrgRelationWhenResponseResultDTO; @@ -86,43 +88,24 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl * @author wangc - * @date 2020.09.18 13:38 - **/ + * @date 2020.10.23 09:10 + */ @Override - public List getProjectPeriod(Boolean isFirst,String customerId, String date) { - List projectNodePeriodPerOrgList; + public List getProjectPeriodDirectly(Boolean isFirst, String customerId, String date) { if(isFirst){ - projectNodePeriodPerOrgList = baseDao.selectProjectOrgPeriod(customerId,null,null); + return baseDao.selectProjectOrgPeriodDirectly(customerId,null,null); }else{ - projectNodePeriodPerOrgList = baseDao.selectProjectOrgPeriod(customerId,null,date); + return baseDao.selectProjectOrgPeriodDirectly(customerId,null,date); } - if(!CollectionUtils.isEmpty(projectNodePeriodPerOrgList)){ - - Map> processMap - = projectNodePeriodPerOrgList.stream().collect(Collectors.groupingBy(ProjectOrgPeriodResultDTO :: getProcessId)); - - List projects = - projectNodePeriodPerOrgList.stream().map(ProjectOrgPeriodResultDTO::getProjectId).distinct().collect(Collectors.toList()); - if(!projects.isEmpty()){ - List responseList = baseDao.selectResponseTrace(projects); - Map> sorted = - responseList.stream().collect(Collectors.groupingBy(ProjectOrgRelationWhenResponseResultDTO::getProjectId)); - skipLevelGrouping(processMap,sorted); - List result = new LinkedList<>(); - processMap.values().forEach(list -> {list.forEach(obj -> {result.add(obj);});}); - return result; - } - } - - return new ArrayList<>(); } @Override @@ -146,67 +129,6 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl transfer ; response response transfer ; return ; response close. - * @param dest - Map> 需要填充的数据 - * @param fillFactor - Map> 填充因子 - * @return - * @author wangc - * @date 2020.09.18 15:27 - **/ - private void skipLevelGrouping(Map> dest,Map> fillFactor){ - for(String projectId : fillFactor.keySet()){ - List projectTraceUnit = fillFactor.get(projectId); - if(!projectTraceUnit.isEmpty()){ - Map> staffResponseTrace = - projectTraceUnit.stream().collect(Collectors.groupingBy(ProjectOrgRelationWhenResponseResultDTO::getStaffId)); - if(!CollectionUtils.isEmpty(staffResponseTrace)){ - staffResponseTrace.keySet().forEach( staffId -> { - - if(!CollectionUtils.isEmpty(staffResponseTrace.get(staffId))){ - List staffResponseTraceUnit - = staffResponseTrace.get(staffId); - int lastEndCount = NumConstant.ONE_NEG; - for(int index = NumConstant.ZERO; index < staffResponseTraceUnit.size(); index ++){ - - if(StringUtils.equalsAny(staffResponseTraceUnit.get(index).getOperation(), - "transfer","return","close")){ - - replaceFirstResponseDate(dest,index,staffResponseTraceUnit,true); - - lastEndCount = index; - }else{ - if(lastEndCount == NumConstant.ONE_NEG) continue; - - if(index - NumConstant.ONE == lastEndCount){ - replaceFirstResponseDate(dest,index,staffResponseTraceUnit,false); - }else{continue;} - } - } - } - }); - } - - } - } - } - - private void replaceFirstResponseDate(Map> dest, int index, List staffResponseTraceUnit, boolean ifResponsed){ - List processSingleList = - dest.get(staffResponseTraceUnit.get(index).getProcessId()); - if(!CollectionUtils.isEmpty(processSingleList)){ - //ProjectOrgPeriodResultDTO element = processSingleList.get(NumConstant.ZERO); - ProjectOrgPeriodResultDTO element = processSingleList.stream().filter(node -> - StringUtils.equals(node.getStaffId(),staffResponseTraceUnit.get(index).getStaffId())).findFirst().get(); - if(!ifResponsed && null == element.getHandledDate()){ - log.warn("com.epmet.service.project.impl.ProjectProcessServiceImpl.skipLevelGrouping::已流出节点没有办结日期,节点ID{}",element.getProcessId() ); - } - element.setPeriodTillReplyFirstly(ifResponsed ? staffResponseTraceUnit.get(index).getCreatedTime() :element.getHandledDate()); - } } - } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml index ec08e185d4..4e70db274a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml @@ -324,6 +324,7 @@ project.GRID_ID AS orgId, project.AGENCY_ID AS parentId, project.TOPIC_ID AS eventImgUrl, + project.TITLE AS eventTitle, gridInfo.allPathName AS eventSource, gridInfo.gridName AS orgName, project.PROJECT_STATUS AS eventStatusCode, diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenDifficultyDataDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenDifficultyDataDao.xml index 36536a08b9..c56a4e85ab 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenDifficultyDataDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenDifficultyDataDao.xml @@ -137,6 +137,7 @@ EVENT_IMG_URL, EVENT_SOURCE, EVENT_CONTENT, + EVENT_TITLE, EVENT_COST_TIME, EVENT_RE_ORG, EVENT_HANDLED_COUNT, @@ -166,6 +167,7 @@ #{item.eventImgUrl}, #{item.eventSource}, #{item.eventContent}, + #{item.eventTitle}, #{item.eventCostTime}, #{item.eventReOrg}, #{item.eventHandledCount}, diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectProcessDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectProcessDao.xml index a1a4a7f483..7960594364 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectProcessDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectProcessDao.xml @@ -98,6 +98,7 @@ + + + + + + + \ No newline at end of file diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/CostDayFormDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/CostDayFormDTO.java new file mode 100644 index 0000000000..487a596d09 --- /dev/null +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/CostDayFormDTO.java @@ -0,0 +1,35 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author zhaoqifeng + * @dscription + * @date 2020/10/21 17:34 + */ +@Data +public class CostDayFormDTO implements Serializable { + private static final long serialVersionUID = -1002961480112906533L; + /** + * 项目ID + */ + private String id; + + /** + * 工作人员ID + */ + private String staffId; + + /** + * 起始日期 + */ + private Date startDate; + + /** + * 终止日期 + */ + private Date endDate; +} diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/TimestampIntervalFormDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/TimestampIntervalFormDTO.java new file mode 100644 index 0000000000..0a30dd2378 --- /dev/null +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/TimestampIntervalFormDTO.java @@ -0,0 +1,41 @@ +package com.epmet.dto.form; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; + +/** + * @Description 时间区间 + * @ClassName TimestampIntervalFormDTO + * @Auth wangc + * @Date 2020-10-21 15:55 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TimestampIntervalFormDTO implements Serializable { + + private static final long serialVersionUID = 8404199047657424778L; + + /*** + * 可以是任意的标志Id,用来区分多组传参的返回值 + */ + @NotNull(message = "时间区间标识Id不能为空",groups = WorkMinuteFormDTO.WorkTimeGroup.class) + private String id; + + /** + * 区间左段点 + */ + @NotNull(message = "开始时间不能为空",groups = WorkMinuteFormDTO.WorkTimeGroup.class) + private Date left; + + /*** + * 去边右段点 + */ + private Date right; + +} diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/WorkMinuteFormDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/WorkMinuteFormDTO.java new file mode 100644 index 0000000000..fe4ecd5868 --- /dev/null +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/form/WorkMinuteFormDTO.java @@ -0,0 +1,47 @@ +package com.epmet.dto.form; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; + +import javax.validation.Valid; +import java.io.Serializable; +import java.util.List; + +/** + * @Description 计算经历的多少分钟(只计算工作日) + * @ClassName WorkMinuteFromDTO + * @Auth wangc + * @Date 2020-10-21 15:48 + */ +@Data +public class WorkMinuteFormDTO implements Serializable { + + private static final long serialVersionUID = -7777345488803895645L; + + public interface WorkTimeGroup extends CustomerClientShowGroup{} + + /** + * 是否使用自定义起止时间 default - 24小时制计 custom - 使用自定义、但是一定要传递起止时间(目前只支持在同一天) + */ + private String ifCustom; + + /** + * 是否精准计算 默认不精准计算 Imprecise - 不精准 precise - 精准 + */ + private String ifPrecise; + + /*** + * 每天的计算起始时间 + * HH:mm:ss + */ + private String startTemplate; + + /*** + * 每天的计算截止时间 + * HH:mm:ss + */ + private String endTemplate; + + @Valid + private List timeList; +} diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/CostDayResultDTO.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/CostDayResultDTO.java new file mode 100644 index 0000000000..7087768d4b --- /dev/null +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/dto/result/CostDayResultDTO.java @@ -0,0 +1,37 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author zhaoqifeng + * @dscription + * @date 2020/10/21 17:53 + */ +@Data +public class CostDayResultDTO implements Serializable { + private static final long serialVersionUID = -1575208332115510050L; + /** + * 项目ID + */ + private String id; + + /** + * 工作人员ID + */ + private String staffId; + + /** + * 已滞留工作日 + */ + private Integer detentionDays; + + /** + * 起始日期 + */ + private Date startDate; + + +} diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java index c2471c0255..583c2c7912 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/EpmetCommonServiceOpenFeignClient.java @@ -2,9 +2,12 @@ package com.epmet.feign; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.form.CostDayFormDTO; import com.epmet.dto.form.ExternalAppAuthFormDTO; import com.epmet.dto.form.GetJwtAccessTokenFormDTO; import com.epmet.dto.form.WorkDayFormDTO; +import com.epmet.dto.result.CostDayResultDTO; +import com.epmet.dto.form.WorkMinuteFormDTO; import com.epmet.dto.result.AppIdInfoResultDTO; import com.epmet.dto.result.ExternalAppAuthResultDTO; import com.epmet.dto.result.WorkDayResultDTO; @@ -14,6 +17,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; +import java.util.Map; /** * 本服务对外开放的API,其他服务通过引用此client调用该服务 @@ -56,6 +60,36 @@ public interface EpmetCommonServiceOpenFeignClient { @PostMapping("/commonservice/externalapp/get-secret") Result getSecret(@RequestBody String appId); + /** + * 工作日计算 + * @author zhaoqifeng + * @date 2020/10/22 9:25 + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + */ + @PostMapping("commonservice/workday/workdays") + Result> costWorkDays(@RequestBody List formDTO); + + /** + * 日历天计算 + * @author zhaoqifeng + * @date 2020/10/22 9:25 + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + */ + @PostMapping("commonservice/workday/calendardays") + Result> costCalendarDays(@RequestBody List formDTO); + + /** + * @Description 计算经历的多少分钟(只计算工作日) + * @param param + * @return com.epmet.commons.tools.utils.Result> + * @author wangc + * @date 2020.10.21 16:34 + */ + @PostMapping("commonservice/workday/workminutes") + Result> workMinutes(@RequestBody WorkMinuteFormDTO param); + /** * @Description 获取AccessToken * @return Result diff --git a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/fallback/EpmetCommonServiceOpenFeignClientFallback.java b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/fallback/EpmetCommonServiceOpenFeignClientFallback.java index 198bd13203..7a670e0dd6 100644 --- a/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/fallback/EpmetCommonServiceOpenFeignClientFallback.java +++ b/epmet-module/epmet-common-service/common-service-client/src/main/java/com/epmet/feign/fallback/EpmetCommonServiceOpenFeignClientFallback.java @@ -3,16 +3,20 @@ package com.epmet.feign.fallback; 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.CostDayFormDTO; import com.epmet.dto.form.ExternalAppAuthFormDTO; import com.epmet.dto.form.GetJwtAccessTokenFormDTO; import com.epmet.dto.form.WorkDayFormDTO; import com.epmet.dto.result.AppIdInfoResultDTO; +import com.epmet.dto.form.WorkMinuteFormDTO; +import com.epmet.dto.result.CostDayResultDTO; import com.epmet.dto.result.ExternalAppAuthResultDTO; import com.epmet.dto.result.WorkDayResultDTO; import com.epmet.feign.EpmetCommonServiceOpenFeignClient; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Map; /** * 本服务对外开放的API,其他服务通过引用此client调用该服务 @@ -42,6 +46,37 @@ public class EpmetCommonServiceOpenFeignClientFallback implements EpmetCommonSer return ModuleUtils.feignConError(ServiceConstant.EPMET_COMMON_SERVICE, "getSecret", appId); } + /** + * 工作日计算 + * + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + * @author zhaoqifeng + * @date 2020/10/22 9:25 + */ + @Override + public Result> costWorkDays(List formDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_COMMON_SERVICE, "costWorkDays", formDTO); + } + + /** + * 日历天计算 + * + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + * @author zhaoqifeng + * @date 2020/10/22 9:25 + */ + @Override + public Result> costCalendarDays(List formDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_COMMON_SERVICE, "costCalendarDays", formDTO); + } + + @Override + public Result> workMinutes(WorkMinuteFormDTO param) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_COMMON_SERVICE, "workMinutes", param); + } + @Override public Result appIdInfo(String appId) { return ModuleUtils.feignConError(ServiceConstant.EPMET_COMMON_SERVICE, "appIdInfo", appId); diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/ProjectConstant.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/ProjectConstant.java index 8aa3dc2fc1..bf40e30351 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/ProjectConstant.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/constant/ProjectConstant.java @@ -8,4 +8,33 @@ public interface ProjectConstant { * 时间已存在 */ + /** + * 日期类型 工作日 + */ + String DAY_TYPE_WORK = "1"; + + /** + * 日期类型 周末 + */ + String DAY_TYPE_WEEKEND = "2"; + + /** + * 日期类型 假日 + */ + String DAY_TYPE_HOLIDAY = "3"; + + /*** + * 计算方式 使用自定应 + */ + String CALCULATION_TYPE_CUSTOM = "custom"; + + /** + * 计算方式 使用默认24小时制 + */ + String CALCULATION_TYPE_DEFAULT = "default"; + + /** + * 精准计算 + */ + String PRECISE_CALCULATION = "precise"; } diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/WorkDayController.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/WorkDayController.java index 0d975a0c31..abfd449ef3 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/WorkDayController.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/controller/WorkDayController.java @@ -1,7 +1,10 @@ package com.epmet.controller; import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.form.CostDayFormDTO; import com.epmet.dto.form.WorkDayFormDTO; +import com.epmet.dto.result.CostDayResultDTO; +import com.epmet.dto.form.WorkMinuteFormDTO; import com.epmet.dto.result.WorkDayResultDTO; import com.epmet.service.WorkDayService; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; /** * @Description 工作日计算 @@ -36,5 +40,45 @@ public class WorkDayController { List list = workDayService.detentionDays(formDTO); return new Result>().ok(list); } + + + /** + * 工作日计算 + * @author zhaoqifeng + * @date 2020/10/22 9:23 + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + */ + @PostMapping("workdays") + public Result> costWorkDays(@RequestBody List formDTO) { + List list = workDayService.costWorkDays(formDTO); + return new Result>().ok(list); + } + + /** + * 日历天计算 + * @author zhaoqifeng + * @date 2020/10/22 9:23 + * @param formDTO + * @return com.epmet.commons.tools.utils.Result> + */ + @PostMapping("calendardays") + public Result> costCalendarDays(@RequestBody List formDTO) { + List list = workDayService.costCalendarDays(formDTO); + return new Result>().ok(list); + } + + + /** + * @Description 计算经历的多少分钟(只计算工作日) + * @param param + * @return com.epmet.commons.tools.utils.Result> + * @author wangc + * @date 2020.10.21 16:34 + */ + @PostMapping("workminutes") + public Result> workMinutes(@RequestBody WorkMinuteFormDTO param){ + return new Result>().ok(workDayService.workMinutes(param)); + } } diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/WorkDayService.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/WorkDayService.java index 7433b154c1..8d4e4673cc 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/WorkDayService.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/WorkDayService.java @@ -1,9 +1,14 @@ package com.epmet.service; +import com.epmet.dto.form.CostDayFormDTO; import com.epmet.dto.form.WorkDayFormDTO; +import com.epmet.dto.result.CostDayResultDTO; +import com.epmet.dto.form.WorkMinuteFormDTO; import com.epmet.dto.result.WorkDayResultDTO; + import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -13,4 +18,31 @@ import java.util.Set; */ public interface WorkDayService { List detentionDays(List formDTO); + + /** + * 工作日计算 + * @author zhaoqifeng + * @date 2020/10/21 17:56 + * @param formDTO + * @return java.util.List + */ + List costWorkDays(List formDTO); + + /** + * 日历日计算 + * @author zhaoqifeng + * @date 2020/10/21 17:56 + * @param formDTO + * @return java.util.List + */ + List costCalendarDays(List formDTO); + + /** + * @Description 计算经历的多少分钟(只计算工作日) + * @param param + * @return java.util.Map + * @author wangc + * @date 2020.10.21 16:14 + */ + Map workMinutes(WorkMinuteFormDTO param); } diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java index 25ede12e88..80241a5a2e 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java +++ b/epmet-module/epmet-common-service/common-service-server/src/main/java/com/epmet/service/impl/WorkDayServiceImpl.java @@ -1,17 +1,30 @@ package com.epmet.service.impl; +import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.utils.DateUtils; +import com.epmet.commons.tools.utils.DateUtils; +import com.epmet.constant.ProjectConstant; import com.epmet.dao.CalenderDao; +import com.epmet.dto.form.CostDayFormDTO; +import com.epmet.dto.form.TimestampIntervalFormDTO; import com.epmet.dto.form.WorkDayFormDTO; +import com.epmet.dto.result.CostDayResultDTO; +import com.epmet.dto.form.WorkMinuteFormDTO; import com.epmet.dto.result.WorkDayResultDTO; import com.epmet.entity.CalenderEntity; import com.epmet.service.WorkDayService; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.*; /** @@ -25,6 +38,8 @@ public class WorkDayServiceImpl implements WorkDayService { @Autowired private CalenderDao calenderDao; + private static SimpleDateFormat format = new SimpleDateFormat(DateUtils.DATE_PATTERN); + private static SimpleDateFormat formatMinute = new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN); @Override public List detentionDays(List workDayFormDTO) { List list = new ArrayList<>(); @@ -44,6 +59,95 @@ public class WorkDayServiceImpl implements WorkDayService { return list; } + /** + * 工作日计算 + * + * @param formDTO + * @return java.util.List + * @author zhaoqifeng + * @date 2020/10/21 17:56 + */ + @Override + public List costWorkDays(List formDTO) { + List list = new ArrayList<>(); + if (formDTO.isEmpty()) { + throw new RenException("起始时间、终止时间不能为空"); + } + for (CostDayFormDTO form : formDTO) { + CostDayResultDTO result = new CostDayResultDTO(); + result.setId(form.getId()); + result.setStaffId(form.getStaffId()); + result.setDetentionDays(this.getWorkDays(form.getStartDate(), form.getEndDate())); + result.setStartDate(form.getStartDate()); + list.add(result); + } + return list; + } + + /** + * 日历日计算 + * + * @param formDTO + * @return java.util.List + * @author zhaoqifeng + * @date 2020/10/21 17:56 + */ + @Override + public List costCalendarDays(List formDTO) { + List list = new ArrayList<>(); + if (formDTO.isEmpty()) { + throw new RenException("起始时间、终止时间不能为空"); + } + for (CostDayFormDTO form : formDTO) { + CostDayResultDTO result = new CostDayResultDTO(); + result.setId(form.getId()); + result.setStaffId(form.getStaffId()); + result.setDetentionDays(this.getCalendarDays(form.getStartDate(), form.getEndDate())); + result.setStartDate(form.getStartDate()); + list.add(result); + } + return list; + } + + /** + * @Description 计算经历的多少分钟(只计算工作日) + * @param param + * @return java.util.Map + * @author wangc + * @date 2020.10.21 16:14 + */ + @Override + public Map workMinutes(WorkMinuteFormDTO param) { + List params = param.getTimeList(); + if(CollectionUtils.isEmpty(params)) return null; + Map result = new LinkedHashMap<>(); + //默认非精准计算 + if(StringUtils.isBlank(param.getIfPrecise()) || !StringUtils.equals(ProjectConstant.PRECISE_CALCULATION,param.getIfPrecise())){ + params.forEach(local -> { + result.put(local.getId(),calculateImpreciseDetentionMinutes(local.getLeft(),local.getRight())); + }); + return result; + } + //精准计算 + if(StringUtils.isBlank(param.getIfCustom()) || !StringUtils.equals(ProjectConstant.CALCULATION_TYPE_CUSTOM,param.getIfCustom())){ + //默认 + params.forEach(local -> { + result.put(local.getId(),calculateDetentionMinutes(local.getLeft(),local.getRight())); + }); + + }else{ + //自定义 + params.forEach(local -> { + try { + result.put(local.getId(), calculateDetentionMinutesWithStartEnd(local.getLeft(), local.getRight(), param.getStartTemplate(), param.getEndTemplate())); + }catch (Exception e){ + throw new RenException(e.getMessage()); + } + }); + } + return result; + } + //公式: 当前日期 - 被吹日期 - 期间的节假日 private String caculateDetentionDays(String startDateStr, String endDateStr) { if (startDateStr.equals(endDateStr)) { @@ -77,6 +181,249 @@ public class WorkDayServiceImpl implements WorkDayService { return "-1"; } + /*** + * @Description 计算两个日期之间的非准确时间差(只包括工作日),单位:分钟 不足一天按照一天计算 + * @param left + * @param right + * @return java.lang.Integer + * @author wangc + * @date 2020.10.21 17:09 + */ + private Integer calculateImpreciseDetentionMinutes(Date left, Date right){ + if(null == left){ logger.error("计算工作日,传入的开始日期为空!");return null;} + //给右区间赋值,默认当前时间 + if(null == right || right.compareTo(left) < NumConstant.ZERO) right = new Date(); + + List list = calenderDao.selectByStartAndEnd(format.format(left),format.format(right)); + if(!CollectionUtils.isEmpty(list)){ + //集合中只有一个元素,说明两个时间在同一天 + if(list.size() == NumConstant.ONE){ + return NumConstant.EIGHT * NumConstant.SIXTY; + } + //集合中有两个元素,说明两个时间是相连的 + //集合中有两个元素以上,说明两个时间存在跨度 + else{ + int costMin = NumConstant.ZERO; + if(NumConstant.TWO == list.size()) return costMin; + for(int index = NumConstant.ZERO ; index < list.size() ; index++) + if(StringUtils.equals(ProjectConstant.DAY_TYPE_WORK,list.get(index).getType())) + costMin += NumConstant.TWENTY_FOUR * NumConstant.SIXTY; + + return costMin; + } + + } + logger.warn("计算工作日,没有找到开始日期和结束日期,可能数据库中没有存储对应时段的数据,开始时间:{},结束时间:{}",left,right); + return null; + } + + /** + * @Description 计算两个日期之间的时间差(只包括工作日),单位:分钟 + * @param left + * @param right + * @return java.lang.Integer + * @author wangc + * @date 2020.10.21 14:00 + */ + private Integer calculateDetentionMinutes(Date left ,Date right){ + if(null == left){ logger.error("计算工作日,传入的开始日期为空!");return null;} + //给右区间赋值,默认当前时间 + if(null == right || right.compareTo(left) < NumConstant.ZERO) right = new Date(); + + List list = calenderDao.selectByStartAndEnd(format.format(left),format.format(right)); + if(!CollectionUtils.isEmpty(list)){ + //集合中只有一个元素,说明两个时间在同一天 + if(list.size() == NumConstant.ONE){ + if(ProjectConstant.DAY_TYPE_WORK.equals(list.get(NumConstant.ZERO).getType())) + return (int)((right.getTime() - left.getTime())/NumConstant.ONE_THOUSAND/NumConstant.SIXTY); + else { + logger.warn("计算工作日,传入的起始时间都在同一天且是在节假日,开始时间:{},结束时间:{},节日类型:{}(1工作日、2周末、3、节假日)",left,right); + return NumConstant.ZERO; + } + } + //集合中有两个元素,说明两个时间是相连的 + //集合中有两个元素以上,说明两个时间存在跨度 + else{ + String leftType = list.get(NumConstant.ZERO).getType(); + String rightType = list.get(list.size() - NumConstant.ONE).getType(); + int costMin = NumConstant.ZERO; + if(ProjectConstant.DAY_TYPE_WORK.equals(leftType)){ + LocalDateTime localDateTime = LocalDateTime.ofInstant(left.toInstant(), ZoneId.systemDefault()); + //获取第第二天零点时刻的实例 + LocalDateTime tomorrowTime = LocalDateTime.ofInstant(left.toInstant(), ZoneId.systemDefault()) + .plusDays(NumConstant.ONE).withHour(NumConstant.ZERO).withMinute(NumConstant.ZERO).withSecond(NumConstant.ZERO).withNano(NumConstant.ZERO); + //ChronoUnit日期枚举类,between方法计算两个时间对象之间的时间量 + costMin += ChronoUnit.SECONDS.between(localDateTime, tomorrowTime)/NumConstant.SIXTY; + } + if(ProjectConstant.DAY_TYPE_WORK.equals(rightType)){ + LocalDateTime localDateTime = LocalDateTime.ofInstant(right.toInstant(), ZoneId.systemDefault()); + //获取第第二天零点时刻的实例 + LocalDateTime initialTime = LocalDateTime.ofInstant(right.toInstant(), ZoneId.systemDefault()) + .withHour(NumConstant.ZERO).withMinute(NumConstant.ZERO).withSecond(NumConstant.ZERO).withNano(NumConstant.ZERO); + //ChronoUnit日期枚举类,between方法计算两个时间对象之间的时间量 + costMin += ChronoUnit.SECONDS.between(localDateTime, initialTime)/NumConstant.SIXTY; + } + if(NumConstant.TWO == list.size()) return costMin; + for(int index = NumConstant.ONE ; index < list.size() - NumConstant.ONE ; index++) + if(StringUtils.equals(ProjectConstant.DAY_TYPE_WORK,list.get(index).getType())) + costMin += NumConstant.TWENTY_FOUR * NumConstant.SIXTY; + + return costMin; + } + + } + logger.warn("计算工作日,没有找到开始日期和结束日期,可能数据库中没有存储对应时段的数据,开始时间:{},结束时间:{}",left,right); + return null; + } + + /*** + * @Description 根据可配置的工作起始时间计算两个日期之间的差 + * @param left + * @param right + * @param start 格式为 HH:mm:ss + * @param end 格式为 HH:mm:ss + * @return java.lang.Integer + * @author wangc + * @date 2020.10.20 18:05 + */ + private Integer calculateDetentionMinutesWithStartEnd(Date left ,Date right, String start, String end)throws Exception{ + if(null == left){ logger.error("计算工作日,传入的开始日期为空!");return null;} + if(null == start || null == end){start = "9:00:00"; end = "17:00:00";} + //给右区间赋值,默认当前时间 + if(null == right || right.compareTo(left) < NumConstant.ZERO) right = new Date(); + //自定义起始时间 + String standardStartDateStr = format.format(left).concat(" ").concat(start); + //自定义截至时间 + String standardEndDateStr = format.format(right).concat(" ").concat(end); + Date standardStartDate = formatMinute.parse(standardStartDateStr); + Date standardEndDate = formatMinute.parse(standardEndDateStr); + if(standardEndDate.compareTo(standardStartDate) < NumConstant.ZERO){ logger.error("计算工作日,自定义截止日期小于自定义起始日期!");return null;} + //单位时间内规定起止时间的时间差 + Integer delta_T = (int)(standardEndDate.getTime() - formatMinute.parse(format.format(right).concat(" ").concat(start)).getTime())/NumConstant.ONE_THOUSAND/NumConstant.SIXTY; + List list = calenderDao.selectByStartAndEnd(format.format(left),format.format(right)); + if(!CollectionUtils.isEmpty(list)){ + //集合中只有一个元素,说明两个时间在同一天 + if(list.size() == NumConstant.ONE){ + if(ProjectConstant.DAY_TYPE_WORK.equals(list.get(NumConstant.ZERO).getType())){ + //开始时间早于当天规定开始时间 + if(left.before(standardStartDate)){ + if(right.before(standardStartDate)){ + //结束时间早于当天规定开始时间 + logger.warn("计算工作日,开始时间与结数时间均早于当天规定的起止计算时间,开始时间:{},结束时间:{},当天开始时间:{}",left,right,standardStartDate); + return NumConstant.ZERO; + }else if(right.before(standardEndDate)){ + return (int)(right.getTime() - standardStartDate.getTime())/NumConstant.ONE_THOUSAND/NumConstant.SIXTY; + }else{ + //结束时间晚于当天规定截止时间 + return delta_T; + } + }else if(left.before(standardEndDate)){ + //开始时间在当天规定起止时间之间 + if(right.before(standardEndDate)){ + return (int)(right.getTime() - left.getTime())/NumConstant.ONE_THOUSAND/NumConstant.SIXTY; + }else{ + return (int)(standardEndDate.getTime() - left.getTime())/NumConstant.ONE_THOUSAND/NumConstant.SIXTY; + } + }else{ + logger.warn("计算工作日,开始时间与结数时间晚于当天规定的截止计算时间,开始时间:{},结束时间:{},当天截止时间:{}",left,right,standardEndDate); + return NumConstant.ZERO; + } + + }else { + logger.warn("计算工作日,传入的起始时间都在同一天且是在节假日,开始时间:{},结束时间:{},节日类型:{}(1工作日、2周末、3、节假日)",left,right); + return NumConstant.ZERO; + } + } + //集合中有两个元素,说明两个时间是相连的 + //集合中有两个元素以上,说明两个时间存在跨度 + else{ + String leftType = list.get(NumConstant.ZERO).getType(); + String rightType = list.get(list.size() - NumConstant.ONE).getType(); + int costMin = NumConstant.ZERO; + if(ProjectConstant.DAY_TYPE_WORK.equals(leftType)){ + if(left.before(standardStartDate)){ + costMin += delta_T; + }else if(left.before(standardEndDate)){ + costMin += (formatMinute.parse(format.format(left).concat(" ").concat(end)).getTime() - left.getTime())/NumConstant.ONE_THOUSAND/NumConstant.SIXTY; + }else{ + + } + } + if(ProjectConstant.DAY_TYPE_WORK.equals(rightType)){ + Date leftStandardStartDate = formatMinute.parse(format.format(right).concat(" ").concat(end)); + if(right.before(leftStandardStartDate)){ + + }else if(right.before(standardEndDate)){ + costMin += (left.getTime() - leftStandardStartDate.getTime())/NumConstant.ONE_THOUSAND/NumConstant.SIXTY; + }else{ + costMin += delta_T; + } + } + if(NumConstant.TWO == list.size()) return costMin; + for(int index = NumConstant.ONE ; index < list.size() - NumConstant.ONE ; index++) + if(StringUtils.equals(ProjectConstant.DAY_TYPE_WORK,list.get(index).getType())) + costMin += delta_T * NumConstant.SIXTY; + + return costMin; + } + + } + logger.warn("计算工作日,没有找到开始日期和结束日期,可能数据库中没有存储对应时段的数据,开始时间:{},结束时间:{}",left,right); + return null; + } + + + private Integer getWorkDays(Date start, Date end) { + String startDateStr = DateUtils.format(start, DateUtils.DATE_PATTERN_YYYYMMDD); + String endDateStr = DateUtils.format(end, DateUtils.DATE_PATTERN_YYYYMMDD); + if (startDateStr.equals(endDateStr)) { + logger.info(String.format("%s-%s起止时间一致,返回<1,",startDateStr,endDateStr)); + return 0; + } + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); + try { + Date startDate = simpleDateFormat.parse(startDateStr); + Date endDate = simpleDateFormat.parse(endDateStr); + long day = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000); + logger.info(String.format("当前日期[%s]-被吹日期[%s]=%s", endDateStr, startDateStr, day)); + List list = calenderDao.selectByStartAndEnd(startDateStr, endDateStr); + + long totalHoliday = 0; + for (CalenderEntity calenderEntity : list) { + if (!"1".equals(calenderEntity.getType())) { + totalHoliday += 1; + } + } + logger.info(String.format("期间的节假日[%s-%s]=%s", endDateStr, startDateStr, totalHoliday)); + long detentionDay = day - totalHoliday; + logger.info(String.format("当前日期[%s]-被吹日期[%s]-期间的节假日[%s]=%s", endDateStr, startDateStr, totalHoliday, detentionDay)); + return (int)detentionDay; + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + + private Integer getCalendarDays(Date start, Date end) { + String startDateStr = DateUtils.format(start, DateUtils.DATE_PATTERN_YYYYMMDD); + String endDateStr = DateUtils.format(end, DateUtils.DATE_PATTERN_YYYYMMDD); + if (startDateStr.equals(endDateStr)) { + logger.info(String.format("%s-%s起止时间一致,返回<1,",startDateStr,endDateStr)); + return 0; + } + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); + try { + Date startDate = simpleDateFormat.parse(startDateStr); + Date endDate = simpleDateFormat.parse(endDateStr); + long day = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000); + return (int)day; + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + } diff --git a/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/CalenderDao.xml b/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/CalenderDao.xml index b1a3ab8e8d..13a7758445 100644 --- a/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/CalenderDao.xml +++ b/epmet-module/epmet-common-service/common-service-server/src/main/resources/mapper/CalenderDao.xml @@ -61,4 +61,5 @@ AND QUERY_DATE BETWEEN #{begin} AND #{end} + \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/SubAgencyFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/SubAgencyFormDTO.java index 6cdf21a193..ce80929e97 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/SubAgencyFormDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/SubAgencyFormDTO.java @@ -39,5 +39,10 @@ public class SubAgencyFormDTO implements Serializable { @NotBlank(message = "机关组织ID不能为空") private String agencyId; + /** + * 机关组织数量 + */ + private Integer agencyNum = 10; + } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubListResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubListResultDTO.java index 17dc985695..b6bf347332 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubListResultDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/SubListResultDTO.java @@ -41,5 +41,9 @@ public class SubListResultDTO implements Serializable { */ private String agencyName = ""; + /** + * 机关组织级别 + */ + private String agencyLevel = ""; } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java index 2ebce80475..2856183dd3 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java @@ -250,4 +250,13 @@ public interface GovOrgOpenFeignClient { **/ @PostMapping("/gov/org/customeragency/userinfoext") Result userInfoExt(@RequestBody ExtUserInfoResultDTO result); + + /** + * @param formDTO + * @return + * @Author sun + * @Description 组织首页-下级机关列表 + */ + @PostMapping("/gov/org/agency/subagencylist") + Result subAgencyList(@RequestBody SubAgencyFormDTO formDTO); } diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java index 8f70da4530..b132ebec6a 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/fallback/GovOrgOpenFeignClientFallback.java @@ -146,4 +146,9 @@ public class GovOrgOpenFeignClientFallback implements GovOrgOpenFeignClient { public Result userInfoExt(ExtUserInfoResultDTO result) { return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "userInfoExt", result); } + + @Override + public Result subAgencyList(SubAgencyFormDTO formDTO) { + return ModuleUtils.feignConError(ServiceConstant.GOV_ORG_SERVER, "subAgencyList", formDTO); + } } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java index cb1865ba35..08154a921d 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java @@ -38,7 +38,6 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.xml.validation.Validator; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java index eeeecf60db..8c404a53c2 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java @@ -57,7 +57,7 @@ public interface CustomerAgencyDao extends BaseDao { * @Author sun * @Description 组织首页-下级机关列表 **/ - List selectSubAgencyById(@Param("pId") String pId); + List selectSubAgencyById(@Param("pId") String pId, @Param("agencyNum") Integer agencyNum); /** * @param pId diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java index 7595aafa33..8fbd617cf2 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java @@ -25,14 +25,12 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.CustomerAgencyConstant; import com.epmet.constant.RoleKeyConstants; -import com.epmet.constant.UserWorkType; import com.epmet.dao.CustomerAgencyDao; import com.epmet.dto.CustomerAgencyDTO; import com.epmet.dto.GovStaffRoleDTO; import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.entity.CustomerAgencyEntity; -import com.epmet.feign.EpmetUserFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.redis.CustomerAgencyRedis; import com.epmet.service.AgencyService; @@ -177,7 +175,7 @@ public class AgencyServiceImpl implements AgencyService { public Result removeAgency(RemoveAgencyFormDTO formDTO) { Result result = new Result(); //1:查询当前机关是否存在所属下级机关,存在下级的不能删除 - List agencyList = customerAgencyDao.selectSubAgencyById(formDTO.getAgencyId()); + List agencyList = customerAgencyDao.selectSubAgencyById(formDTO.getAgencyId(), 10); if (null != agencyList && agencyList.size() > NumConstant.ZERO) { result.setCode(EpmetErrorCode.NOT_DEL_AGENCY.getCode()); result.setMsg(EpmetErrorCode.NOT_DEL_AGENCY.getMsg()); @@ -238,7 +236,7 @@ public class AgencyServiceImpl implements AgencyService { public Result subAgencyList(SubAgencyFormDTO formDTO) { SubAgencyResultDTO subAgencyResultDTO = new SubAgencyResultDTO(); //1:根据当前机关Id查询直属下一级机关列表,只返回前十条 - List agencyList = customerAgencyDao.selectSubAgencyById(formDTO.getAgencyId()); + List agencyList = customerAgencyDao.selectSubAgencyById(formDTO.getAgencyId(),formDTO.getAgencyNum()); if (null == agencyList || agencyList.size() < NumConstant.ONE) { subAgencyResultDTO.setAgencyList(new ArrayList()); subAgencyResultDTO.setSubAgencyCount(NumConstant.ZERO); diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml index 4e295b44cf..43ed9bb5e3 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml @@ -62,11 +62,13 @@ + \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectOrgRelationDao.xml b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectOrgRelationDao.xml new file mode 100644 index 0000000000..6cbb71d1ae --- /dev/null +++ b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectOrgRelationDao.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + project_org_relation + + + FIRST_DEALT_DATE = #{firstDealtDate}, + UPDATED_TIME = #{firstDealtDate}, + FIRST_REPLY_PERIOD = #{firstReplyPeriod}, + + + HANDLED_DATE = #{handledDate}, + UPDATED_TIME = #{handledDate}, + TOTAL_PERIOD = #{totalPeriod}, + + OPERATION = #{operation} + + + DEL_FLAG = '0' + AND PROJECT_STAFF_ID = #{projectStaffId} + + AND FIRST_DEALT_DATE IS NULL + + + + + + + INSERT INTO project_org_relation( + ID, + PROJECT_STAFF_ID, + INFORMED_DATE, + CREATED_TIME, + UPDATED_TIME, + SOURCE_OPERATION, + CREATED_BY, + UPDATED_BY + ) values + + ( + (SELECT REPLACE(UUID(),'-','') as id), + #{item.projectStaffId}, + + + NOW(), + NOW(), + NOW(), + + + #{item.informedDate}, + #{item.informedDate}, + #{item.informedDate}, + + + + #{item.sourceOperation}, + #{item.createdBy}, + #{item.createdBy} + ) + + + + + + + + + + + INSERT INTO project_org_relation( + ID, + PROJECT_STAFF_ID, + INFORMED_DATE, + CREATED_TIME, + UPDATED_TIME, + SOURCE_OPERATION, + OPERATION, + TOTAL_PERIOD, + FIRST_DEALT_DATE, + FIRST_REPLY_PERIOD, + CREATED_BY, + UPDATED_BY + ) values + + ( + (SELECT REPLACE(UUID(),'-','') as id), + #{item.projectStaffId}, + #{item.informedDate}, + NOW(), + NOW(), + #{item.sourceOperation}, + #{item.OPERATION}, + #{item.totalPeriod}, + #{item.firstDealtDate}, + #{item.firstReplyPeriod}, + 'COMPENSATION_ROBOT', + 'COMPENSATION_ROBOT' + ) + + + + + + DELETE + project_org_relation + WHERE + + PROJECT_STAFF_ID = #{projectStaffId} + + + + \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectProcessDao.xml b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectProcessDao.xml index 788b589863..ceb579138d 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectProcessDao.xml +++ b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectProcessDao.xml @@ -60,4 +60,28 @@ AND project_id = #{projectId} + + \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml index b2fc15543a..ae9ebb16bb 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml +++ b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ProjectStaffDao.xml @@ -65,5 +65,114 @@ AND ps.STAFF_ID = #{staffId} AND IS_HANDLE = 'unhandled' + + + + + + + + + + + \ No newline at end of file