Browse Source

事件立项V1

dev_shibei_match
yinzuomei 4 years ago
parent
commit
a0169f6eef
  1. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  2. 23
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java
  3. 96
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java
  4. 17
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java
  5. 2
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java
  6. 18
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java
  7. 10
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java
  8. 11
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java
  9. 352
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java
  10. 37
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java

1
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_GOV(8605,"办结、立项处理后不可回复"),
CAN_NOT_REPLY_RESI_EVENT_SELF(8606,"当前事件待处理,不可回复"), CAN_NOT_REPLY_RESI_EVENT_SELF(8606,"当前事件待处理,不可回复"),
RESI_EVENT_CAN_NOT_CLOSE_CASE(8607,"事件尚未处理,请处理完成后进行办结"), RESI_EVENT_CAN_NOT_CLOSE_CASE(8607,"事件尚未处理,请处理完成后进行办结"),
RESI_EVENT_SHIFT_PROJECT(8608,"事件已立项,请勿重复操作"),
// 爱心互助 居民端 // 爱心互助 居民端
NOT_IN_THE_SIGN_IN_RANGE(8510, "您还未进入指定的签到范围~"), NOT_IN_THE_SIGN_IN_RANGE(8510, "您还未进入指定的签到范围~"),

23
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;
}

96
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<TickStaffFormDTO> staffList;
/**
* 项目所选分类集合不可为空
*/
@Valid
private List<CategoryOrTagFormDTO> categoryList;
/**
* 项目所选标签集合
*/
private List<CategoryOrTagFormDTO> tagList;
@Length(min = 1, max = 20, message = "项目标题不能超过20位", groups = {ApprovalCategory.class})
private String title;
/**
* 公开答复对应文件集合
*/
private List<FileDTO> publicFile;
/**
* 内部备注对应文件集合
*/
private List<FileDTO> 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;
}

17
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;
}

2
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 AGENCY = "agency";
String RESI_EVENT="resi_event";
/** /**
* 状态-待处理 * 状态-待处理
*/ */

18
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(); return new Result();
} }
/**
* 事件-立项
*
* @param tokenDto
* @param formDTO
* @return com.epmet.commons.tools.utils.Result<com.epmet.dto.result.EventToProjectResultDTO>
* @author yinzuomei
* @date 2021/8/5 15:37
*/
@PostMapping("eventToProject")
public Result<EventToProjectResultDTO> 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<EventToProjectResultDTO>().ok(projectTraceService.eventToProject(formDTO));
}
} }

10
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java

@ -173,4 +173,14 @@ public interface ProjectTraceService {
* @Description 项目立项 * @Description 项目立项
**/ **/
void projectApproval(ProjectApprovalFormDTO formDTO); void projectApproval(ProjectApprovalFormDTO formDTO);
/**
* 事件立项
*
* @param formDTO
* @return com.epmet.dto.result.EventToProjectResultDTO
* @author yinzuomei
* @date 2021/8/5 15:38
*/
EventToProjectResultDTO eventToProject(EventToProjectFormDTO formDTO);
} }

11
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java

@ -108,4 +108,15 @@ public interface ResiEventService extends BaseService<ResiEventEntity> {
*/ */
void closeResiEvent(CloseResiEventFormDTO formDTO); void closeResiEvent(CloseResiEventFormDTO formDTO);
/**
* 事件立项更新立项标志增加操作日志更新报事人被艾特的人红点
*
* @param eventShiftProjectDTO
* @return void
* @author yinzuomei
* @date 2021/8/5 16:17
*/
void shiftProject(EventShiftProjectDTO eventShiftProjectDTO);
ResiEventEntity getById(String eventId);
} }

352
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.ProjectOrgRelationDao;
import com.epmet.dao.ProjectProcessAttachmentDao; import com.epmet.dao.ProjectProcessAttachmentDao;
import com.epmet.dao.ProjectProcessDao; import com.epmet.dao.ProjectProcessDao;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.IssueProjectCategoryDictDTO; import com.epmet.dto.IssueProjectCategoryDictDTO;
import com.epmet.dto.IssueProjectTagDictDTO; import com.epmet.dto.IssueProjectTagDictDTO;
import com.epmet.dto.ProjectStaffDTO; import com.epmet.dto.ProjectStaffDTO;
@ -93,6 +92,8 @@ public class ProjectTraceServiceImpl<ProjectTagService> implements ProjectTraceS
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient; private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Autowired @Autowired
private LoginUserUtil loginUserUtil; private LoginUserUtil loginUserUtil;
@Autowired
private ResiEventService resiEventService;
@Override @Override
public List<PendProjectListResultDTO> getPendProjectList(TokenDto tokenDto, ProjectListFromDTO fromDTO) { public List<PendProjectListResultDTO> getPendProjectList(TokenDto tokenDto, ProjectListFromDTO fromDTO) {
@ -615,5 +616,354 @@ public class ProjectTraceServiceImpl<ProjectTagService> implements ProjectTraceS
return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList); 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<TickStaffFormDTO> staffList = formDTO.getStaffList();
//1.文字内容安全校验
List<String> 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<IssueProjectCategoryDictDTO> categoryList = categoryTagResultDTO.getCategoryList();
List<IssueProjectTagDictDTO> tagList = categoryTagResultDTO.getTagList();
//2-4.批量查询被勾选工作人员基础信息
List<StaffListResultDTO> 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<ProjectStaffEntity> 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<ProjectCategoryEntity> 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<ProjectTagsEntity> 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<String> projectStaffIds = entityList.stream().map(ProjectStaffEntity::getId).distinct().collect(Collectors.toList());
if(!org.apache.commons.collections4.CollectionUtils.isEmpty(projectStaffIds)){
List<ProjectOrgRelationEntity> 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<ProjectSendMsgFormDTO> 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<StaffListResultDTO> queryStaffListRes(List<TickStaffFormDTO> staffList,String currentUserId) {
List<String> staffIdList = staffList.stream().map(TickStaffFormDTO::getStaffId).collect(Collectors.toList());
staffIdList.add(currentUserId);
staffIdList = new ArrayList<String>(new LinkedHashSet<>(staffIdList));
Result<CustomerStaffListResultDTO> 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<String> categoryIdList = formDTO.getCategoryList().stream().map(CategoryOrTagFormDTO::getId).collect(Collectors.toList());
List<String> tagIdList = formDTO.getTagList().stream().map(CategoryOrTagFormDTO::getId).collect(Collectors.toList());
categoryTag.setCustomerId(formDTO.getCustomerId());
categoryTag.setCategoryIdList(categoryIdList);
categoryTag.setTagIdList(tagIdList);
Result<CategoryTagResultDTO> resultDTOResult = govIssueOpenFeignClient.getCategoryTagList(categoryTag);
if (!resultDTOResult.success()) {
throw new RenException("项目立项,调用issue服务查询分类、标签基础信息失败");
}
return resultDTOResult.getData();
}
private AgencyDeptGridResultDTO getAgencyDeptGridRes(List<TickStaffFormDTO> staffList, String userAgencyId) {
List<String> agencyIdList = staffList.stream().map(TickStaffFormDTO::getAgencyId).collect(Collectors.toList());
agencyIdList.add(userAgencyId);
agencyIdList = new ArrayList<String>(new LinkedHashSet<>(agencyIdList));
agencyIdList.removeAll(Collections.singleton(""));
List<String> deptIdList = staffList.stream().map(TickStaffFormDTO::getDepartmentId).collect(Collectors.toList());
deptIdList = new ArrayList<String>(new LinkedHashSet<>(deptIdList));
deptIdList.removeAll(Collections.singleton(""));
List<String> gridIdList = staffList.stream().map(TickStaffFormDTO::getGridId).collect(Collectors.toList());
gridIdList = new ArrayList<String>(new LinkedHashSet<>(gridIdList));
gridIdList.removeAll(Collections.singleton(""));
AgencyDeptGridFormDTO agencyDeptGridFormDTO = new AgencyDeptGridFormDTO();
agencyDeptGridFormDTO.setAgencyIdList(agencyIdList);
agencyDeptGridFormDTO.setDeptIdList(deptIdList);
agencyDeptGridFormDTO.setGridIdList(gridIdList);
Result<AgencyDeptGridResultDTO> 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<LoginUserDetailsResultDTO> 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<TickStaffFormDTO> staffList,String customerId,String title) {
List<UserMessageFormDTO> msgList = new ArrayList<>();
//1.创建项目工作人员消息对象
String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, title);
//所选人员如果即在部门下又在网格下则只发一条消息
Map<String,String> 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<TickStaffFormDTO> staffList,String customerId,String title) {
List<WxSubscribeMessageFormDTO> msgList = new ArrayList<>();
//1.创建项目工作人员消息对象
String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, title);
//所选人员如果即在部门下又在网格下则只发一条消息
Map<String,String> 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);
}
} }

37
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<ResiEventDao, ResiEven
// 3.3、目前Db设计支持报给多个层级(组织或网格),按理说应该更新非当前组织外,其他的组织,显示红点,先不做了吧 todo // 3.3、目前Db设计支持报给多个层级(组织或网格),按理说应该更新非当前组织外,其他的组织,显示红点,先不做了吧 todo
} }
/**
* 事件立项更新立项标志增加操作日志更新报事人被艾特的人红点
*
* @param formDTO
* @return void
* @author yinzuomei
* @date 2021/8/5 16:17
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void shiftProject(EventShiftProjectDTO formDTO) {
// 1、更新立项标志
ResiEventEntity resiEventEntity=getById(formDTO.getEventId());
resiEventEntity.setLatestOperatedTime(formDTO.getShiftProjectTime());
resiEventEntity.setShiftProject(true);
resiEventEntity.setRedDot(true);
baseDao.updateById(resiEventEntity);
// 2、记录操作日志
ResiEventOperationLogEntity reCallLog=new ResiEventOperationLogEntity();
reCallLog.setCustomerId(resiEventEntity.getCustomerId());
reCallLog.setResiEventId(resiEventEntity.getId());
reCallLog.setUserId(formDTO.getUserId());
reCallLog.setUserIdentity(EventConstant.STAFF);
reCallLog.setActionCode(ResiEventAction.SHIFIT_PROJECT.getCode());
reCallLog.setActionDesc(ResiEventAction.SHIFIT_PROJECT.getDesc());
reCallLog.setOperateTime(resiEventEntity.getCloseCaseTime());
resiEventOperationLogDao.insert(reCallLog);
//3、所有被艾特的人应该都通知
resiEventMentionDao.updateRedDotShow(formDTO.getEventId(),null);
// 4、目前只能报给一个组织,如果后续可以报给多个组织,要去把其他组织的红点改为显示 todo
}
@Override
public ResiEventEntity getById(String eventId) {
return baseDao.selectById(eventId);
}
} }
Loading…
Cancel
Save