diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java index d9ceb0f3a0..5bfb7b698f 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/feign/CommonAggFeignClient.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.PostMapping; /** + * desc:通用工具包里的 agg feignClient * @Description * @Author sun */ diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java index 0a97ac36df..9d7855a468 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/EpmetUserController.java @@ -271,4 +271,13 @@ public class EpmetUserController { return new Result().ok(epmetUserService.getStaffInfo(staffId)); } + @GetMapping("export/staffpatroll") + public void export(@LoginUser TokenDto tokenDto, @RequestBody StaffListFormDTO formDTO, HttpServletResponse response) throws Exception { + ValidatorUtils.validateEntity(formDTO, StaffListFormDTO.Staff.class); + formDTO.setUserId(tokenDto.getUserId()); + //formDTO.setUserId("73ae6280e46a6653a5605d51d5462725"); + List resultDTOS = epmetUserService.staffPatrolList(formDTO); + ExcelUtils.exportExcelToTarget(response, null, resultDTOS, StaffPatrollExcel.class); + } + } diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/InfoServiceImpl.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/InfoServiceImpl.java index 8139440f91..cc73e3c1a5 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/InfoServiceImpl.java +++ b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/InfoServiceImpl.java @@ -107,6 +107,10 @@ public class InfoServiceImpl extends BaseServiceImpl implem totalReceiver.addAll(orgStaffIds); totalReceiver.addAll(roleStaffIds); totalReceiver.addAll(groupStaffIds); + if (CollectionUtils.isNotEmpty(totalReceiver) && totalReceiver.contains(formDTO.getUserId())) { + log.info("接收人列表包含自己,移除"); + totalReceiver.remove(formDTO.getUserId()); + } if(CollectionUtils.isEmpty(totalReceiver)){ throw new RenException(EpmetErrorCode.PLEASE_CHOOSE_RECEIVER.getCode(), EpmetErrorCode.PLEASE_CHOOSE_RECEIVER.getMsg()); } 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 5bbe9e25b0..ed50325a90 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 @@ -2,6 +2,7 @@ package com.epmet.controller; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.annotation.RequirePermission; +import com.epmet.commons.tools.aop.NoRepeatSubmit; import com.epmet.commons.tools.enums.RequirePermissionEnum; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; @@ -176,6 +177,7 @@ public class IssueManageController { * @param formDTO * @return com.epmet.commons.tools.utils.Result */ + @NoRepeatSubmit @PostMapping("shiftproject-v2") public Result shiftProjectV2(@LoginUser TokenDto tokenDTO, @RequestBody ShiftProjectFormDTO formDTO) { formDTO.setStaffId(tokenDTO.getUserId()); diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/StaffTransferRecordDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/StaffTransferRecordDTO.java index 79899e2e05..ce08a1e8f0 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/StaffTransferRecordDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/StaffTransferRecordDTO.java @@ -57,12 +57,15 @@ public class StaffTransferRecordDTO implements Serializable { * 调动前组织Id */ private String oldAgencyId; + private String oldOrgType; + private String oldOrgId; /** * 调动后组织Id */ private String agencyId; - + private String orgType; + private String orgId; /** * 备注说明 */ diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/StaffTransferV2FormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/StaffTransferV2FormDTO.java new file mode 100644 index 0000000000..dc26e0eef9 --- /dev/null +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/StaffTransferV2FormDTO.java @@ -0,0 +1,27 @@ +package com.epmet.dto.form; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2021/8/20 15:26 + */ +@NoArgsConstructor +@Data +public class StaffTransferV2FormDTO implements Serializable { + + private static final long serialVersionUID = 1217329965082876795L; + @NotBlank(message = "组织ID不能为空") + private String orgId; + @NotBlank(message = "组织类型不能为空") + private String orgType; + @NotBlank(message = "工作人员ID不能为空") + private String staffId; + @NotBlank(message = "备注说明不能为空") + private String remarks; +} diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/StaffController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/StaffController.java index 2dafc1e158..b95b96c0b9 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/StaffController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/StaffController.java @@ -145,6 +145,21 @@ public class StaffController { return new Result(); } + /** + * 工作人员调动V2 + * + * @author zhaoqifeng + * @date 2020/8/27 16:12 + * @param tokenDto + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + */ + @PostMapping("stafftransferv2") + public Result staffTransferV2(@LoginUser TokenDto tokenDto, @RequestBody StaffTransferV2FormDTO formDTO){ + staffService.staffTransferV2(tokenDto, formDTO); + return new Result(); + } + /** * 根据staffId查询用户基本信息 * @author sun diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/StaffTransferRecordEntity.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/StaffTransferRecordEntity.java index b52c91c45e..2b31698659 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/StaffTransferRecordEntity.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/StaffTransferRecordEntity.java @@ -53,15 +53,19 @@ public class StaffTransferRecordEntity extends BaseEpmetEntity { */ private String operatedStaffId; - /** - * 调动前组织Id - */ + /** + * 调动前组织Id + */ private String oldAgencyId; + private String oldOrgType; + private String oldOrgId; - /** - * 调动后组织Id - */ + /** + * 调动后组织Id + */ private String agencyId; + private String orgType; + private String orgId; /** * 备注说明 diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/StaffOrgRelationService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/StaffOrgRelationService.java index ce5d6ba496..be1286c28e 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/StaffOrgRelationService.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/StaffOrgRelationService.java @@ -92,4 +92,13 @@ public interface StaffOrgRelationService extends BaseService agencyStaffList = customerStaffAgencyDao.selectAgencyStaffList(canTick.getAgencyId()); //2:根据组织Id查询该组织下部门、人员列表 //2.1:查询组织下部门列表 @@ -257,8 +260,8 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl staffList = dto.getStaffList(); List roleList = dto.getRoleList(); - //有时间再优化成jdk8的遍历方式 - //5.0:先把在部门或网格下存在的人员在组织中去掉,组织中只展示在部门、网格下不存在的人员 + //2021.8.23 sun 表述同上,屏蔽此处程序,组织下的人不做去重处理 start + /*//5.0:先把在部门或网格下存在的人员在组织中去掉,组织中只展示在部门、网格下不存在的人员 //部门 Iterator itDept = agencyStaffList.iterator(); while (itDept.hasNext()) { @@ -280,7 +283,8 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl{ //人员信息 @@ -357,6 +361,9 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl projectStaffList = canTick.getProjectStaffList(); //1:根据组织Id查询该组织下工作人员列表(去除组织下已经在项目节点上的人员) + /*2021.8.23 sun 应产品要求工作人员可以在组织、部门、网格下新增,对于部门、网格下添加的人在选人时不在组织层级展示; + 对于在组织添加的人即使有加入部门、网格也要在选人的组织层级上展示,组织添加的人不在做去重处理。 + 程序的调整是查询组织下人员时只查询在组织层级添加的,同时下边程序对部门、网格有的人要在组织去重的程序做屏蔽处理*/ List agencyAllStaffList = customerStaffAgencyDao.selectAgencyStaffList(canTick.getAgencyId()); List agencyStaffList = new ArrayList<>(); //1.1:去除组织下已在项目节点上的人员 @@ -451,8 +458,8 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl staffList = dto.getStaffList(); List roleList = dto.getRoleList(); - //有时间再优化成jdk8的遍历方式 - //5.0:先把在部门或网格下存在的人员在组织中去掉,组织中只展示在部门、网格下不存在的人员 + //2021.8.23 sun 表述同上,屏蔽此处程序,组织下的人不做去重处理 start + /*//5.0:先把在部门或网格下存在的人员在组织中去掉,组织中只展示在部门、网格下不存在的人员 //部门 Iterator itDept = agencyStaffList.iterator(); while (itDept.hasNext()) { @@ -474,7 +481,8 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl{ //人员信息 diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffOrgRelationServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffOrgRelationServiceImpl.java index a4e528a1cc..084c100d91 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffOrgRelationServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffOrgRelationServiceImpl.java @@ -17,10 +17,12 @@ package com.epmet.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.dao.StaffOrgRelationDao; @@ -97,4 +99,21 @@ public class StaffOrgRelationServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StaffOrgRelationEntity::getStaffId, staffId); + wrapper.eq(StaffOrgRelationEntity::getDelFlag, NumConstant.ZERO_STR); + + return ConvertUtils.sourceToTarget(baseDao.selectOne(wrapper), StaffOrgRelationDTO.class); + } + } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java index 3aaa7a5484..811adc098c 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/StaffServiceImpl.java @@ -1,14 +1,17 @@ package com.epmet.service.impl; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.commons.tools.redis.RedisUtils; +import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.CustomerAgencyConstant; +import com.epmet.constant.OrgInfoConstant; import com.epmet.dao.CustomerAgencyDao; import com.epmet.dao.CustomerStaffAgencyDao; import com.epmet.dto.*; @@ -24,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -68,6 +72,8 @@ public class StaffServiceImpl implements StaffService { private CustomerStaffGridService customerStaffGridService; @Autowired private StaffOrgRelationService staffOrgRelationService; + @Resource + private CustomerStaffRedis customerStaffRedis; @Override public Result getStaffInfoForHome(StaffsInAgencyFromDTO fromDTO) { @@ -243,6 +249,7 @@ public class StaffServiceImpl implements StaffService { if (null != actInfoResult.getData() && actInfoResult.getData().size() > NumConstant.ZERO) { throw new RenException(EpmetErrorCode.EXIT_PUBLISHED_ACTIVITY.getCode()); } + //4.修改人员所属组织 CustomerStaffAgencyDTO staffAgency = new CustomerStaffAgencyDTO(); staffAgency.setId(staffAgencyDTO.getId()); @@ -283,6 +290,143 @@ public class StaffServiceImpl implements StaffService { //2021.6.7 添加逻辑-人员调动删除token sun end } + /** + * 工作人员调动 + * + * @param tokenDto + * @param fromDTO + * @return void + * @author zhaoqifeng + * @date 2020/8/27 16:13 + */ + @Override + public void staffTransferV2(TokenDto tokenDto, StaffTransferV2FormDTO fromDTO) { + if (tokenDto.getUserId().equals(fromDTO.getStaffId())) { + throw new RenException(EpmetErrorCode.CAN_NOT_SELF.getCode()); + } + //1.获取工作人员与机关关系 + CustomerStaffAgencyDTO staffAgencyDTO = customerStaffAgencyService.getInfoByUserId(fromDTO.getStaffId()); + String oldAgency = staffAgencyDTO.getAgencyId(); + //2.查询是否有未处理项目 + ProjectListFromDTO projectFromDTO = new ProjectListFromDTO(); + projectFromDTO.setCustomerId(staffAgencyDTO.getCustomerId()); + projectFromDTO.setUserId(fromDTO.getStaffId()); + projectFromDTO.setPageNo(1); + projectFromDTO.setPageSize(10); + Result> pendResult = govProjectOpenFeignClient.getPendProjectList(projectFromDTO); + if (!pendResult.success()) { + throw new RenException(pendResult.getCode(), pendResult.getMsg()); + } + if (null != pendResult.getData() && pendResult.getData().size() > NumConstant.ZERO) { + throw new RenException(EpmetErrorCode.EXIT_PEND_PROJECT.getCode()); + } + //3.查询是否有活动未结束 + Result> actInfoResult = epmetHeartOpenFeignClient.getPublishedAct(fromDTO.getStaffId()); + if (!actInfoResult.success()) { + throw new RenException(actInfoResult.getCode(), actInfoResult.getMsg()); + } + if (null != actInfoResult.getData() && actInfoResult.getData().size() > NumConstant.ZERO) { + throw new RenException(EpmetErrorCode.EXIT_PUBLISHED_ACTIVITY.getCode()); + } + //4.修改人员所属组织 + String agencyId = null; + String orgType = null; + String orgId = null; + if (OrgInfoConstant.AGENCY.equals(fromDTO.getOrgType())) { + agencyId = fromDTO.getOrgId(); + } else if (OrgInfoConstant.DEPT.equals(fromDTO.getOrgType())) { + orgType = fromDTO.getOrgType(); + orgId = fromDTO.getOrgId(); + CustomerDepartmentDTO departmentDTO = customerDepartmentService.get(orgId); + agencyId = departmentDTO.getAgencyId(); + } else { + orgType = fromDTO.getOrgType(); + orgId = fromDTO.getOrgId(); + CustomerGridDTO gridDTO = customerGridService.get(orgId); + agencyId = gridDTO.getPid(); + } + + CustomerStaffAgencyDTO staffAgency = new CustomerStaffAgencyDTO(); + staffAgency.setId(staffAgencyDTO.getId()); + staffAgency.setAgencyId(agencyId); + customerStaffAgencyService.update(staffAgency); + //原来组织总人数减一 + CustomerAgencyDTO oldAgencyDTO = customerAgencyService.get(oldAgency); + oldAgencyDTO.setTotalUser(oldAgencyDTO.getTotalUser() - NumConstant.ONE); + customerAgencyService.update(oldAgencyDTO); + //新组织总人数加一 + CustomerAgencyDTO newAgencyDTO = customerAgencyService.get(agencyId); + newAgencyDTO.setTotalUser(newAgencyDTO.getTotalUser() + NumConstant.ONE); + customerAgencyService.update(newAgencyDTO); + //逻辑删除工作人员原组织加入的部门、网格,部门、网格总人数减1 + customerDepartmentService.updateDepartment(fromDTO.getStaffId()); + customerGridService.updateGrid(fromDTO.getStaffId()); + if (OrgInfoConstant.DEPT.equals(orgType)) { + //添加新的部门关系 + CustomerStaffDepartmentDTO staffDepartmentDTO = new CustomerStaffDepartmentDTO(); + staffDepartmentDTO.setCustomerId(tokenDto.getCustomerId()); + staffDepartmentDTO.setDepartmentId(orgId); + staffDepartmentDTO.setUserId(fromDTO.getStaffId()); + customerStaffDepartmentService.save(staffDepartmentDTO); + //新部门总人数+1 + CustomerDepartmentDTO departmentDTO = customerDepartmentService.get(orgId); + departmentDTO.setTotalUser(departmentDTO.getTotalUser() + NumConstant.ONE); + departmentDTO.setUpdatedBy(null); + departmentDTO.setUpdatedTime(null); + customerDepartmentService.update(departmentDTO); + } + if (OrgInfoConstant.GRID.equals(orgType)) { + //添加新的网格关系 + CustomerStaffGridDTO staffGridDTO = new CustomerStaffGridDTO(); + staffGridDTO.setCustomerId(tokenDto.getCustomerId()); + staffGridDTO.setGridId(orgId); + staffGridDTO.setUserId(fromDTO.getStaffId()); + customerStaffGridService.save(staffGridDTO); + //新网格总人数+1 + CustomerGridDTO gridDTO = customerGridService.get(orgId); + gridDTO.setTotalUser(gridDTO.getTotalUser() + NumConstant.ONE); + gridDTO.setUpdatedBy(null); + gridDTO.setUpdatedTime(null); + customerGridService.update(gridDTO); + } + //6.更改工作人员组织角色 + StaffRoleDTO staffRoleDTO = new StaffRoleDTO(); + staffRoleDTO.setOrgId(agencyId); + staffRoleDTO.setStaffId(fromDTO.getStaffId()); + Result result = epmetUserOpenFeignClient.changeRoleOrg(staffRoleDTO); + if (!result.success()) { + throw new RenException(result.getCode(), result.getMsg()); + } + //7.操作记录表新增调动记录 + //获取工作人员注册组织关系 + StaffOrgRelationDTO staffOrgRelation = staffOrgRelationService.getByStaffId(fromDTO.getStaffId()); + StaffTransferRecordDTO staffTransferRecordDTO = new StaffTransferRecordDTO(); + staffTransferRecordDTO.setCustomerId(tokenDto.getCustomerId()); + staffTransferRecordDTO.setOperateStaffId(tokenDto.getUserId()); + staffTransferRecordDTO.setOperatedStaffId(fromDTO.getStaffId()); + staffTransferRecordDTO.setOldAgencyId(oldAgency); + if (!OrgInfoConstant.AGENCY.equals(staffOrgRelation.getOrgType())) { + staffTransferRecordDTO.setOldOrgType(staffOrgRelation.getOrgType()); + staffTransferRecordDTO.setOldOrgId(staffOrgRelation.getOrgId()); + } + staffTransferRecordDTO.setAgencyId(agencyId); + staffTransferRecordDTO.setOrgType(orgType); + staffTransferRecordDTO.setOrgId(orgId); + staffTransferRecordDTO.setRemarks(fromDTO.getRemarks()); + staffTransferRecordService.save(staffTransferRecordDTO); + //8.更改注册关系 + staffOrgRelation.setOrgId(fromDTO.getOrgId()); + staffOrgRelation.setOrgType(fromDTO.getOrgType()); + staffOrgRelation.setUpdatedBy(null); + staffOrgRelation.setUpdatedTime(null); + staffOrgRelationService.update(staffOrgRelation); + //9..清除可能存在的工作人员登陆token + String key = RedisKeys.getCpUserKey("gov", "wxmp", fromDTO.getStaffId()); + redisUtils.delete(key); + //10 清除工作人员缓存 + customerStaffRedis.delStaffInfoFormCache(tokenDto.getCustomerId(), fromDTO.getStaffId()); + } + /** * 根据staffId查询用户基本信息 * @author sun diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffAgencyDao.xml index 0235999cb4..c62306039f 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerStaffAgencyDao.xml @@ -96,13 +96,17 @@