From a0169f6eef639458e1e999ec1c96c1acb00a22b9 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 5 Aug 2021 16:29:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=AB=8B=E9=A1=B9V1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/exception/EpmetErrorCode.java | 1 + .../epmet/dto/form/EventShiftProjectDTO.java | 23 ++ .../epmet/dto/form/EventToProjectFormDTO.java | 96 +++++ .../dto/result/EventToProjectResultDTO.java | 17 + .../com/epmet/constant/ProjectConstant.java | 2 + .../controller/ProjectTraceController.java | 18 + .../epmet/service/ProjectTraceService.java | 10 + .../com/epmet/service/ResiEventService.java | 11 + .../service/impl/ProjectTraceServiceImpl.java | 352 +++++++++++++++++- .../service/impl/ResiEventServiceImpl.java | 37 ++ 10 files changed, 566 insertions(+), 1 deletion(-) create mode 100644 epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java create mode 100644 epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java create mode 100644 epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 3966217c18..96558433fc 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java @@ -100,6 +100,7 @@ public enum EpmetErrorCode { CAN_NOT_REPLY_RESI_EVENT_GOV(8605,"办结、立项处理后不可回复"), CAN_NOT_REPLY_RESI_EVENT_SELF(8606,"当前事件待处理,不可回复"), RESI_EVENT_CAN_NOT_CLOSE_CASE(8607,"事件尚未处理,请处理完成后进行办结"), + RESI_EVENT_SHIFT_PROJECT(8608,"事件已立项,请勿重复操作"), // 爱心互助 居民端 NOT_IN_THE_SIGN_IN_RANGE(8510, "您还未进入指定的签到范围~"), diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java new file mode 100644 index 0000000000..b5ef015258 --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java @@ -0,0 +1,23 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 事件立项,入参 + * + * @author yinzuomei@elink-cn.com + * @date 2021/8/5 16:15 + */ +@Data +public class EventShiftProjectDTO implements Serializable { + private static final long serialVersionUID = 5519721673862754305L; + //转项目的人 + private String userId; + private String eventId; + private String projectId; + private Date shiftProjectTime; + private String userAgencyId; +} diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java new file mode 100644 index 0000000000..758b7acbbb --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java @@ -0,0 +1,96 @@ +package com.epmet.dto.form; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.List; + +/** + * 事件-里项目 + * + * @author yinzuomei@elink-cn.com + * @date 2021/8/5 15:19 + */ +@Data +public class EventToProjectFormDTO implements Serializable { + private static final long serialVersionUID = 3392008990676159012L; + + public interface AddUserInternalGroup { + } + + public interface ApprovalCategory extends CustomerClientShowGroup { + } + + /** + * 事件id + */ + @NotBlank(message = "事件id不能为空", groups = AddUserInternalGroup.class) + private String eventId; + + /** + * 项目方案 1000 + */ + @Length(min = 1, max = 1000, message = "项目方案1000字", groups = {ApprovalCategory.class}) + private String publicReply; + /** + * 内部备注 1000 + */ + @Length(min = 1, max = 1000, message = "内部备注1000字", groups = {ApprovalCategory.class}) + private String internalRemark; + + /** + * 吹哨勾选的工作人员信息集合,不可为空 + */ + @Valid + private List staffList; + /** + * 项目所选分类集合,不可为空 + */ + @Valid + private List categoryList; + /** + * 项目所选标签集合 + */ + private List tagList; + + @Length(min = 1, max = 20, message = "项目标题不能超过20位", groups = {ApprovalCategory.class}) + private String title; + + /** + * 公开答复对应文件集合 + */ + private List publicFile; + /** + * 内部备注对应文件集合 + */ + private List internalFile; + + //定位地址[立项项目指的项目发生位置,议题转的项目指的话题发生位置] + private String locateAddress; + //定位经度 + private String locateLongitude; + //定位纬度 + private String locateDimension; + + + + //以下参数从token中获取 + /** + * 当前用户id + */ + @NotBlank(message = "userId不能为空",groups = AddUserInternalGroup.class) + private String userId; + + /** + * 当前客户id + */ + @NotBlank(message = "customerId不能为空",groups = AddUserInternalGroup.class) + private String customerId; + + private String app; + private String client; +} diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java new file mode 100644 index 0000000000..f17f2e6f34 --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java @@ -0,0 +1,17 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 描述一下 + * + * @author yinzuomei@elink-cn.com + * @date 2021/8/5 15:36 + */ +@Data +public class EventToProjectResultDTO implements Serializable { + private static final long serialVersionUID = -7544325891712303124L; + private String projectId; +} diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java index 43c87b57b5..b5acf5b2e7 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java @@ -14,6 +14,8 @@ public interface ProjectConstant { * 项目来源-组织(项目立项) */ String AGENCY = "agency"; + + String RESI_EVENT="resi_event"; /** * 状态-待处理 */ diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java index a91cc3513b..b3053bbd93 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java @@ -362,5 +362,23 @@ public class ProjectTraceController { return new Result(); } + /** + * 事件-立项 + * + * @param tokenDto + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + * @author yinzuomei + * @date 2021/8/5 15:37 + */ + @PostMapping("eventToProject") + public Result eventToProject(@LoginUser TokenDto tokenDto,@RequestBody EventToProjectFormDTO formDTO){ + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + formDTO.setApp(tokenDto.getApp()); + formDTO.setClient(tokenDto.getClient()); + ValidatorUtils.validateEntity(formDTO,EventToProjectFormDTO.ApprovalCategory.class,EventToProjectFormDTO.AddUserInternalGroup.class); + return new Result().ok(projectTraceService.eventToProject(formDTO)); + } } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java index d3d2cc3f3b..620f9577fc 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java @@ -173,4 +173,14 @@ public interface ProjectTraceService { * @Description 项目立项 **/ void projectApproval(ProjectApprovalFormDTO formDTO); + + /** + * 事件立项 + * + * @param formDTO + * @return com.epmet.dto.result.EventToProjectResultDTO + * @author yinzuomei + * @date 2021/8/5 15:38 + */ + EventToProjectResultDTO eventToProject(EventToProjectFormDTO formDTO); } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java index 64a6c5e6a7..6822dfe4fa 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java @@ -108,4 +108,15 @@ public interface ResiEventService extends BaseService { */ void closeResiEvent(CloseResiEventFormDTO formDTO); + /** + * 事件立项:更新立项标志、增加操作日志、更新(报事人、被艾特的人)红点 + * + * @param eventShiftProjectDTO + * @return void + * @author yinzuomei + * @date 2021/8/5 16:17 + */ + void shiftProject(EventShiftProjectDTO eventShiftProjectDTO); + + ResiEventEntity getById(String eventId); } \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java index 0d1c537388..676b3bdc56 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java @@ -22,7 +22,6 @@ import com.epmet.constant.UserMessageConstant; import com.epmet.dao.ProjectOrgRelationDao; import com.epmet.dao.ProjectProcessAttachmentDao; import com.epmet.dao.ProjectProcessDao; -import com.epmet.dto.CustomerStaffDTO; import com.epmet.dto.IssueProjectCategoryDictDTO; import com.epmet.dto.IssueProjectTagDictDTO; import com.epmet.dto.ProjectStaffDTO; @@ -93,6 +92,8 @@ public class ProjectTraceServiceImpl implements ProjectTraceS private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient; @Autowired private LoginUserUtil loginUserUtil; + @Autowired + private ResiEventService resiEventService; @Override public List getPendProjectList(TokenDto tokenDto, ProjectListFromDTO fromDTO) { @@ -615,5 +616,354 @@ public class ProjectTraceServiceImpl implements ProjectTraceS return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList); } + /** + * 事件立项 + * + * @param formDTO + * @return com.epmet.dto.result.EventToProjectResultDTO + * @author yinzuomei + * @date 2021/8/5 15:38 + */ + @Override + public EventToProjectResultDTO eventToProject(EventToProjectFormDTO formDTO) { + //事件已经立项,不能重复操作 + ResiEventEntity resiEventEntity=resiEventService.getById(formDTO.getEventId()); + if(null==resiEventEntity||resiEventEntity.getShiftProject()){ + throw new RenException(EpmetErrorCode.RESI_EVENT_SHIFT_PROJECT.getCode(),EpmetErrorCode.RESI_EVENT_SHIFT_PROJECT.getMsg()); + } + List staffList = formDTO.getStaffList(); + //1.文字内容安全校验 + List list = new ArrayList<>(); + list.add(formDTO.getTitle());list.add(formDTO.getPublicReply());list.add(formDTO.getPublicReply());list.add(formDTO.getInternalRemark()); + safetyCheck(list); + //2.数据准备 + //2-1获取当前工作人员基本信息 + LoginUserDetailsResultDTO loginUser=queryLoginUserInfo(formDTO); + + //2-2.调用gov-org服务,获取所有勾选人员以及议题数据对应的组织信息、部门信息、网格信息用于对处理部门和ORG_ID_PATH字段的赋值使用 + AgencyDeptGridResultDTO agencyDeptGrid = getAgencyDeptGridRes(formDTO.getStaffList(),loginUser.getAgencyId()); + + //2-3.调用issue服务,查询分类、标签数据信息 + CategoryTagResultDTO categoryTagResultDTO=queryCategoryTagRes(formDTO); + List categoryList = categoryTagResultDTO.getCategoryList(); + List tagList = categoryTagResultDTO.getTagList(); + + //2-4.批量查询被勾选工作人员基础信息 + List staffInfoList=queryStaffListRes(formDTO.getStaffList(),formDTO.getUserId()); + + //3.封装保存业务数据 + //3-1.项目主表新增数据 + ProjectEntity projectEntity = new ProjectEntity(); + projectEntity.setCustomerId(formDTO.getCustomerId()); + // 立项人的所属组织id + projectEntity.setAgencyId(loginUser.getAgencyId()); + // 项目来源新增:resi_event + projectEntity.setOrigin(ProjectConstant.RESI_EVENT); + projectEntity.setOriginId(formDTO.getEventId()); + projectEntity.setTitle(formDTO.getTitle()); + projectEntity.setBackGround(formDTO.getPublicReply()); + projectEntity.setStatus(ProjectConstant.PENDING); + projectEntity.setOrgIdPath(loginUser.getOrgIdPath()); + projectEntity.setLocateAddress(null == formDTO.getLocateAddress() ? "" : formDTO.getLocateAddress()); + projectEntity.setLocateLongitude(null == formDTO.getLocateLongitude() ? "" : formDTO.getLocateLongitude()); + projectEntity.setLocateDimension(null == formDTO.getLocateDimension() ? "" : formDTO.getLocateDimension()); + projectService.insert(projectEntity); + + //3-2.项目进展表新增第一个节点数据 + ProjectProcessEntity processEntity = new ProjectProcessEntity(); + processEntity.setProjectId(projectEntity.getId()); + processEntity.setCustomerId(formDTO.getCustomerId()); + processEntity.setStaffId(formDTO.getUserId()); + processEntity.setOperation(ProjectConstant.OPERATION_CREATED); + processEntity.setOperationName(ProjectConstant.OPERATION_PROJECT_APPROVAL); + processEntity.setPublicReply(formDTO.getPublicReply()); + processEntity.setInternalRemark(formDTO.getInternalRemark()); + agencyDeptGrid.getAgencyList().forEach(agency -> { + if (loginUser.getAgencyId().equals(agency.getId())) { + processEntity.setDepartmentName(agency.getOrganizationName()); + processEntity.setAgencyId(agency.getId()); + if(org.apache.commons.lang3.StringUtils.isBlank(agency.getPids()) || org.apache.commons.lang3.StringUtils.equals(NumConstant.ZERO_STR,agency.getPids().trim()) || "".equals(agency.getPids().trim())){ + processEntity.setOrgIdPath(agency.getId()); + }else{ + processEntity.setOrgIdPath(agency.getPids().concat(":").concat(agency.getId())); + } + } + }); + projectProcessService.insert(processEntity); + + //3-3.项目人员表批量新增数据 + List entityList = new ArrayList<>(); + staffList.forEach(ts -> { + ProjectStaffEntity entity = ConvertUtils.sourceToTarget(ts, ProjectStaffEntity.class); + entity.setOrgId(ts.getAgencyId()); + entity.setProjectId(projectEntity.getId()); + entity.setProcessId(processEntity.getId()); + entity.setIsHandle(ProjectConstant.UNHANDLED); + agencyDeptGrid.getAgencyList().forEach(agency -> { + if (ts.getAgencyId().equals(agency.getId())) { + entity.setCustomerId(agency.getCustomerId()); + entity.setOrgIdPath(("".equals(agency.getPids()) ? "" : agency.getPids() + ":") + agency.getId()); + entity.setDepartmentName(agency.getOrganizationName()); + } + }); + if (org.apache.commons.lang3.StringUtils.isNotBlank(ts.getDepartmentId())) { + agencyDeptGrid.getDeptList().forEach(dept -> { + if (ts.getDepartmentId().equals(dept.getId())) { + entity.setDepartmentName(entity.getDepartmentName() + "-" + dept.getDepartmentName()); + } + }); + } + if (org.apache.commons.lang3.StringUtils.isNotBlank(ts.getGridId())) { + agencyDeptGrid.getGridList().forEach(grid -> { + if (ts.getGridId().equals(grid.getId())) { + entity.setDepartmentName(entity.getDepartmentName() + "-" + grid.getGridName()); + } + }); + } + entityList.add(entity); + }); + projectStaffService.insertBatch(entityList); + + //3-4.项目附件表新增数据 + if ((null != formDTO.getPublicFile() && formDTO.getPublicFile().size() > NumConstant.ZERO) + || (null != formDTO.getInternalFile() && formDTO.getInternalFile().size() > NumConstant.ZERO)) { + projectService.saveFile(formDTO.getPublicFile(), formDTO.getInternalFile(), formDTO.getCustomerId(), projectEntity.getId(), processEntity.getId()); + } + + //3-5.项目分类表新增数据 + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(formDTO.getCategoryList())) { + List categoryEntityList = new ArrayList<>(); + formDTO.getCategoryList().forEach(item -> { + categoryList.forEach(ca->{ + if(item.getId().equals(ca.getId())){ + ProjectCategoryEntity entity = new ProjectCategoryEntity(); + entity.setCustomerId(formDTO.getCustomerId()); + entity.setProjectId(projectEntity.getId()); + entity.setCategoryId(item.getId()); + entity.setCategoryPids(ca.getPids()); + entity.setCategoryCode(ca.getCategoryCode()); + categoryEntityList.add(entity); + } + }); + }); + projectCategoryService.insertBatch(categoryEntityList); + } + + //3-6.项目标签表新增数据 + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(formDTO.getTagList())) { + List tagEntityList = new ArrayList<>(); + formDTO.getTagList().forEach(item -> { + tagList.forEach(ta->{ + if(item.getId().equals(ta.getId())){ + ProjectTagsEntity entity = new ProjectTagsEntity(); + entity.setCustomerId(formDTO.getCustomerId()); + entity.setProjectId(projectEntity.getId()); + entity.setTagId(item.getId()); + entity.setTagName(ta.getTagName()); + tagEntityList.add(entity); + } + }); + }); + projectTagsService.insertBatch(tagEntityList); + } + + //3-7:初始化机关-项目时间关联数据 + Date current = new Date(); + List projectStaffIds = entityList.stream().map(ProjectStaffEntity::getId).distinct().collect(Collectors.toList()); + if(!org.apache.commons.collections4.CollectionUtils.isEmpty(projectStaffIds)){ + List container = new LinkedList<>(); + projectStaffIds.forEach(o -> { + ProjectOrgRelationEntity period = new ProjectOrgRelationEntity(); + period.setProjectStaffId(o); + period.setInformedDate(current); + period.setSourceOperation(ProjectConstant.OPERATION_CREATED); + period.setCreatedBy(formDTO.getUserId()); + container.add(period); + }); + relationDao.insertBatch(container); + } + + //4.推送站内信、微信、短信消息 + //4-1.调用epmet-message服务,给工作端勾选的工作人员发送消息 + if (!shiftProjectMessage(formDTO.getStaffList(),formDTO.getCustomerId(),formDTO.getTitle()).success()) { + throw new RenException("事件转为项目,推送站内信失败"); + } + + //4-2.以及政府端调用epmet-message服务,给工作端工作人员推送微信订阅消息 + if (!wxmpShiftProjectMessage(formDTO.getStaffList(),formDTO.getCustomerId(),formDTO.getTitle()).success()) { + logger.error("事件转为项目,推送微信订阅消息失败!"); + } + + //4-3.吹哨短信消息 + List smsList = new ArrayList<>(); + staffList.forEach(staff -> { + staffInfoList.forEach(st->{ + if(staff.getStaffId().equals(st.getStaffId())){ + ProjectSendMsgFormDTO sms = new ProjectSendMsgFormDTO(); + sms.setCustomerId(st.getCustomerId()); + sms.setMobile(st.getMobile()); + sms.setAliyunTemplateCode(SmsTemplateConstant.PROJECT_TRANSFER); + sms.setParameterKey("send_msg"); + smsList.add(sms); + } + }); + }); + Result result = epmetMessageOpenFeignClient.projectSendMsg(smsList); + if (!result.success()) { + logger.error("项目吹哨,发送手机短信失败" + JSON.toJSONString(result)); + } + + //项目实时统计消息 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String mqMsgBrief = String.format("创建了\"%s\"的项目", formDTO.getTitle()); + ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_CREATED, + projectEntity.getId(), + formDTO.getUserId(), + new Date(), + mqMsgBrief, + IpUtils.getIpAddr(request), + loginUserUtil.getLoginUserApp(), + loginUserUtil.getLoginUserClient()); + boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(mqMsg); + if (!msgResult) { + log.error("项目实时统计消息发送失败"); + } + + // 报事人、被艾特的人显示红点 + EventShiftProjectDTO eventShiftProjectDTO=new EventShiftProjectDTO(); + eventShiftProjectDTO.setEventId(formDTO.getEventId()); + eventShiftProjectDTO.setProjectId(projectEntity.getId()); + eventShiftProjectDTO.setShiftProjectTime(projectEntity.getCreatedTime()); + eventShiftProjectDTO.setUserId(formDTO.getUserId()); + eventShiftProjectDTO.setUserAgencyId(projectEntity.getAgencyId()); + resiEventService.shiftProject(eventShiftProjectDTO); + EventToProjectResultDTO resultDTO=new EventToProjectResultDTO(); + resultDTO.setProjectId(projectEntity.getId()); + return resultDTO; + } + + private List queryStaffListRes(List staffList,String currentUserId) { + List staffIdList = staffList.stream().map(TickStaffFormDTO::getStaffId).collect(Collectors.toList()); + staffIdList.add(currentUserId); + staffIdList = new ArrayList(new LinkedHashSet<>(staffIdList)); + Result resultStaff = epmetUserOpenFeignClient.getCustomerStaffList(staffIdList); + if (!resultStaff.success() || null == resultStaff.getData()) { + throw new RenException("项目立项,调用user服务获取被勾选工作人员基本信息失败"); + } + return resultStaff.getData().getStaffList(); + } + + private CategoryTagResultDTO queryCategoryTagRes(EventToProjectFormDTO formDTO) { + CategoryTagListFormDTO categoryTag = new CategoryTagListFormDTO(); + List categoryIdList = formDTO.getCategoryList().stream().map(CategoryOrTagFormDTO::getId).collect(Collectors.toList()); + List tagIdList = formDTO.getTagList().stream().map(CategoryOrTagFormDTO::getId).collect(Collectors.toList()); + categoryTag.setCustomerId(formDTO.getCustomerId()); + categoryTag.setCategoryIdList(categoryIdList); + categoryTag.setTagIdList(tagIdList); + Result resultDTOResult = govIssueOpenFeignClient.getCategoryTagList(categoryTag); + if (!resultDTOResult.success()) { + throw new RenException("项目立项,调用issue服务查询分类、标签基础信息失败"); + } + return resultDTOResult.getData(); + } + + private AgencyDeptGridResultDTO getAgencyDeptGridRes(List staffList, String userAgencyId) { + List agencyIdList = staffList.stream().map(TickStaffFormDTO::getAgencyId).collect(Collectors.toList()); + agencyIdList.add(userAgencyId); + agencyIdList = new ArrayList(new LinkedHashSet<>(agencyIdList)); + agencyIdList.removeAll(Collections.singleton("")); + List deptIdList = staffList.stream().map(TickStaffFormDTO::getDepartmentId).collect(Collectors.toList()); + deptIdList = new ArrayList(new LinkedHashSet<>(deptIdList)); + deptIdList.removeAll(Collections.singleton("")); + List gridIdList = staffList.stream().map(TickStaffFormDTO::getGridId).collect(Collectors.toList()); + gridIdList = new ArrayList(new LinkedHashSet<>(gridIdList)); + gridIdList.removeAll(Collections.singleton("")); + AgencyDeptGridFormDTO agencyDeptGridFormDTO = new AgencyDeptGridFormDTO(); + agencyDeptGridFormDTO.setAgencyIdList(agencyIdList); + agencyDeptGridFormDTO.setDeptIdList(deptIdList); + agencyDeptGridFormDTO.setGridIdList(gridIdList); + Result resultDTO = govOrgFeignClient.getAgencyDeptGridList(agencyDeptGridFormDTO); + if (!resultDTO.success() || null == resultDTO.getData()) { + throw new RenException(ProjectConstant.SELECT_GOV_ORG_EXCEPTION); + } + return resultDTO.getData(); + } + + /** + * 获取当前工作人员的基本信息 + * + * @param formDTO + * @return com.epmet.dto.result.LoginUserDetailsResultDTO + * @author yinzuomei + * @date 2021/8/5 15:42 + */ + private LoginUserDetailsResultDTO queryLoginUserInfo(EventToProjectFormDTO formDTO) { + //2.数据准备,查询需要用到的数据 + //2-1.获取token用户所属组织信息 + LoginUserDetailsFormDTO dto = new LoginUserDetailsFormDTO(); + dto.setApp(formDTO.getApp()); + dto.setClient(formDTO.getClient()); + dto.setUserId(formDTO.getUserId()); + Result resultDto = epmetUserOpenFeignClient.getLoginUserDetails(dto); + if (!resultDto.success() || StringUtils.isEmpty(resultDto.getData().getAgencyId())) { + throw new RenException(String.format("事件立项调用user服务查询用户数据失败,userId->", formDTO.getUserId())); + } + return resultDto.getData(); + } + + /** + * @Description 项目立项给勾选的工作人员推送站内信消息 + * @author yinzuomei + */ + private Result shiftProjectMessage(List staffList,String customerId,String title) { + List msgList = new ArrayList<>(); + //1.创建项目工作人员消息对象 + String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, title); + //所选人员如果即在部门下又在网格下则只发一条消息 + Map map = new HashMap<>(); + staffList.forEach(staff->{ + if(!map.containsKey(staff.getStaffId())){ + UserMessageFormDTO msg = new UserMessageFormDTO(); + msg.setCustomerId(customerId); + msg.setGridId("*"); + msg.setApp(AppClientConstant.APP_GOV); + msg.setTitle(UserMessageConstant.PROJECT_TITLE); + msg.setMessageContent(projectStaffMessage); + msg.setReadFlag(ReadFlagConstant.UN_READ); + msg.setUserId(staff.getStaffId()); + msgList.add(msg); + map.put(staff.getStaffId(),staff.getStaffId()); + } + }); + return epmetMessageOpenFeignClient.saveUserMessageList(msgList); + } + + /** + * @Description 项目立项给勾选的工作人员推送微信订阅消息 + * @author yinzuomei + */ + private Result wxmpShiftProjectMessage(List staffList,String customerId,String title) { + List msgList = new ArrayList<>(); + //1.创建项目工作人员消息对象 + String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, title); + //所选人员如果即在部门下又在网格下则只发一条消息 + Map map = new HashMap<>(); + staffList.forEach(staff->{ + if(!map.containsKey(staff.getStaffId())){ + WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO(); + msg.setCustomerId(customerId); + msg.setClientType(AppClientConstant.APP_GOV); + msg.setUserId(staff.getStaffId()); + msg.setBehaviorType("项目消息"); + msg.setMessageContent(projectStaffMessage); + msg.setMessageTime(new Date()); + msg.setGridId("*"); + msgList.add(msg); + map.put(staff.getStaffId(),staff.getStaffId()); + } + }); + logger.info("事件立项,推送微信订阅消息"); + return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList); + } } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java index 632887c34f..f869c44886 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java @@ -581,5 +581,42 @@ public class ResiEventServiceImpl extends BaseServiceImpl