| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- package com.xjrsoft.module.oa.service.impl;
- import cn.hutool.core.util.IdUtil;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.github.yulichang.base.MPJBaseServiceImpl;
- import com.github.yulichang.wrapper.MPJLambdaWrapper;
- import com.xjrsoft.module.oa.entity.OfficialDocumentReceived;
- import com.xjrsoft.module.oa.mapper.OfficialDocumentReceivedMapper;
- import com.xjrsoft.module.oa.service.IOfficialDocumentReceivedService;
- import com.xjrsoft.module.oa.utils.PostNumberUtil;
- import com.xjrsoft.module.oa.vo.NextReviewerListVo;
- import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
- import com.xjrsoft.module.organization.entity.Department;
- import com.xjrsoft.module.organization.entity.Post;
- import com.xjrsoft.module.organization.entity.User;
- import com.xjrsoft.module.organization.entity.UserPostRelation;
- import com.xjrsoft.module.organization.mapper.PostMapper;
- import com.xjrsoft.module.organization.mapper.UserMapper;
- import com.xjrsoft.module.organization.service.IWeChatService;
- import com.xjrsoft.module.teacher.entity.WfTeacherleave;
- import com.xjrsoft.module.teacher.entity.XjrUser;
- import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
- import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
- import com.xjrsoft.module.workflow.entity.WorkflowRecord;
- import com.xjrsoft.module.workflow.service.IWorkflowFormRelationService;
- import com.xjrsoft.module.workflow.service.IWorkflowRecordService;
- import lombok.AllArgsConstructor;
- import org.apache.commons.collections.CollectionUtils;
- import org.apache.commons.lang3.ObjectUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.Collectors;
- /**
- * @title: 公文收文
- * @Author szs
- * @Date: 2024-03-13
- * @Version 1.0
- */
- @Service
- @AllArgsConstructor
- public class OfficialDocumentReceivedServiceImpl extends MPJBaseServiceImpl<OfficialDocumentReceivedMapper, OfficialDocumentReceived> implements IOfficialDocumentReceivedService {
- private final OfficialDocumentReceivedMapper officialDocumentReceivedMapper;
- private final IWeChatService weChatService;
- private final UserMapper userMapper;
- private final IWorkflowFormRelationService workflowFormRelationService;
- private final IWorkflowRecordService workflowRecordService;
- private final PostMapper postMapper;
- private final XjrUserMapper xjrUserMapper;
- @Override
- public String getMaxReceivedNumber() {
- Integer maxReceivedNumber = officialDocumentReceivedMapper.getMaxReceivedNumber();
- return PostNumberUtil.initMaxPostNumber(maxReceivedNumber, 3);
- }
- @Override
- public String getMaxMeetingNumber() {
- Integer maxReceivedNumber = officialDocumentReceivedMapper.getMaxMeetingNumber();
- return PostNumberUtil.initMaxPostNumber(maxReceivedNumber, 3);
- }
- @Override
- public Boolean noticeHandleDutyUser(Long formId) {
- OfficialDocumentReceived documentReceived = this.getById(formId);
- if(documentReceived.getHandleDutyUserId() != null){
- User user = userMapper.selectById(documentReceived.getHandleDutyUserId());
- WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
- weChatSendMessageDto.setUserId(user.getOpenId());
- weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
- //weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
- weChatSendMessageDto.setMsgId(IdUtil.getSnowflakeNextIdStr());
- JSONObject data = new JSONObject();
- JSONObject thing23 = new JSONObject();
- thing23.put("value", "您有一个行政收文待处理");
- data.put("thing23", thing23);
- JSONObject data2 = new JSONObject();
- data2.put("value", user.getName());
- data.put("thing29", data2);
- JSONObject data3 = new JSONObject();
- data3.put("value", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
- data.put("time17", data3);
- weChatSendMessageDto.setContent(data);
- weChatService.sendTemplateMessage(weChatSendMessageDto);
- }
- return true;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void taskIdPersist(Long id) {
- // 根据当前表单数据获取流程信息
- LambdaQueryWrapper<WorkflowFormRelation> wrapper = new LambdaQueryWrapper<>();
- wrapper
- .eq(WorkflowFormRelation::getFormKeyValue, id)
- ;
- WorkflowFormRelation workflowFormRelation = workflowFormRelationService.getOne(wrapper);
- if(ObjectUtils.isNotEmpty(workflowFormRelation)){
- OfficialDocumentReceived update = new OfficialDocumentReceived();
- update.setId(id);
- update.setTaskId(workflowFormRelation.getProcessId());
- officialDocumentReceivedMapper.updateById(update);
- }
- }
- /**
- * 获取当前行政收文流程下一节点审核人列表
- * @param taskId
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public List<NextReviewerListVo> nextReviewerList(String taskId) {
- // 根据流程Id获取分管领导审核节点的审核人
- LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
- workflowRecordLambdaQueryWrapper
- .eq(WorkflowRecord::getNodeType, "开始节点")
- .eq(WorkflowRecord::getNodeName, "分管领导意见")
- .ne(WorkflowRecord::getCreateUserId, 0)
- .eq(WorkflowRecord::getProcessId, taskId)
- .orderByDesc(WorkflowRecord::getRecordTime)
- .last("limit 1")
- ;
- WorkflowRecord workflowRecord = workflowRecordService.getOne(workflowRecordLambdaQueryWrapper);
- if(ObjectUtils.isEmpty(workflowRecord)){
- return new ArrayList<>();
- }
- // 取出分管领导姓名
- String message = workflowRecord.getMessage();
- if(StringUtils.isEmpty(message)){
- return new ArrayList<>();
- }
- Pattern pattern = Pattern.compile("【(.*?)】");
- Matcher matcher = pattern.matcher(message);
- if (!matcher.find()) {
- return new ArrayList<>();
- }
- String name = matcher.group(1);
- // 根据当前分管领导获取其负责的部门
- MPJLambdaWrapper<Post> postMPJLambdaWrapper = new MPJLambdaWrapper<>();
- postMPJLambdaWrapper
- .select(Post::getId)
- .innerJoin(UserPostRelation.class, UserPostRelation::getPostId, Post::getId)
- .innerJoin(XjrUser.class, XjrUser::getId, UserPostRelation::getUserId)
- .eq(XjrUser::getName, name)
- ;
- List<Post> posts = postMapper.selectJoinList(Post.class, postMPJLambdaWrapper);
- List<Long> postIds = posts.stream()
- .map(Post::getId)
- .collect(Collectors.toList());
- if(CollectionUtils.isEmpty(postIds)){
- return new ArrayList<>();
- }
- // 根据部门获取部门管理人员
- MPJLambdaWrapper<XjrUser> xjrUserMPJLambdaWrapper = new MPJLambdaWrapper<>();
- xjrUserMPJLambdaWrapper
- .selectAs(XjrUser::getId, NextReviewerListVo::getValue)
- .selectAs(XjrUser::getName, NextReviewerListVo::getLabel)
- .selectAs(Department::getName, NextReviewerListVo::getDeptName)
- .innerJoin(UserPostRelation.class, UserPostRelation::getUserId, XjrUser::getId)
- .innerJoin(Post.class, Post::getId, UserPostRelation::getPostId)
- .leftJoin(Department.class, Department::getId, Post::getDeptId)
- .in(Post::getParentId, postIds)
- .and(wrapper ->
- wrapper
- .like(Post::getName, "主任")
- .or()
- .like(Post::getName, "书记")
- )
- ;
- List<NextReviewerListVo> voList = xjrUserMapper.selectJoinList(NextReviewerListVo.class, xjrUserMPJLambdaWrapper);
- for (NextReviewerListVo vo : voList){
- if(ObjectUtils.isNotEmpty(vo.getDeptName())){
- vo.setLabel(vo.getLabel() + "(" + vo.getDeptName() + ")");
- }
- }
- return voList;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public List<NextReviewerListVo> nextExecutorList(String taskId) {
- // 根据流程Id获取部门主任意见审核节点的审核人
- LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
- workflowRecordLambdaQueryWrapper
- .eq(WorkflowRecord::getNodeType, "开始节点")
- .eq(WorkflowRecord::getNodeName, "部门主任意见")
- .ne(WorkflowRecord::getCreateUserId, 0)
- .eq(WorkflowRecord::getProcessId, taskId)
- .orderByDesc(WorkflowRecord::getRecordTime)
- .last("limit 1")
- ;
- WorkflowRecord workflowRecord = workflowRecordService.getOne(workflowRecordLambdaQueryWrapper);
- if(ObjectUtils.isEmpty(workflowRecord)){
- return new ArrayList<>();
- }
- // 取出分管领导姓名
- String message = workflowRecord.getMessage();
- if(StringUtils.isEmpty(message)){
- return new ArrayList<>();
- }
- Pattern pattern = Pattern.compile("【(.*?)】");
- Matcher matcher = pattern.matcher(message);
- if (!matcher.find()) {
- return new ArrayList<>();
- }
- String name = matcher.group(1);
- // 根据当前主任获取其负责的部门
- MPJLambdaWrapper<Post> postMPJLambdaWrapper = new MPJLambdaWrapper<>();
- postMPJLambdaWrapper
- .select(Post::getId)
- .innerJoin(UserPostRelation.class, UserPostRelation::getPostId, Post::getId)
- .innerJoin(XjrUser.class, XjrUser::getId, UserPostRelation::getUserId)
- .eq(XjrUser::getName, name)
- ;
- List<Post> posts = postMapper.selectJoinList(Post.class, postMPJLambdaWrapper);
- List<Long> postIds = posts.stream()
- .map(Post::getId)
- .collect(Collectors.toList());
- if(CollectionUtils.isEmpty(postIds)){
- return new ArrayList<>();
- }
- // 根据部门获取部门管理人员
- MPJLambdaWrapper<XjrUser> xjrUserMPJLambdaWrapper = new MPJLambdaWrapper<>();
- xjrUserMPJLambdaWrapper
- .selectAs(XjrUser::getId, NextReviewerListVo::getValue)
- .selectAs(XjrUser::getName, NextReviewerListVo::getLabel)
- .selectAs(Department::getName, NextReviewerListVo::getDeptName)
- .innerJoin(UserPostRelation.class, UserPostRelation::getUserId, XjrUser::getId)
- .innerJoin(Post.class, Post::getId, UserPostRelation::getPostId)
- .leftJoin(Department.class, Department::getId, Post::getDeptId)
- .in(Post::getParentId, postIds)
- .and(wrapper ->
- wrapper
- .like(Post::getName, "副主任")
- .or()
- .like(Post::getName, "副书记")
- )
- ;
- List<NextReviewerListVo> voList = xjrUserMapper.selectJoinList(NextReviewerListVo.class, xjrUserMPJLambdaWrapper);
- for (NextReviewerListVo vo : voList){
- if(ObjectUtils.isNotEmpty(vo.getDeptName())){
- vo.setLabel(vo.getLabel() + "(" + vo.getDeptName() + ")");
- }
- }
- return voList;
- }
- }
|