Browse Source

1、站内信发送改造
2、通用事项审批发送站内信

dongpo 7 months ago
parent
commit
c2a97e9b3c

+ 32 - 0
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ProcessKeyEnum.java

@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.bpm.enums;
+
+public enum ProcessKeyEnum {
+
+    OA_UNIVERSAL("oa_universal", "通用事项");
+
+
+    private final String processKey;
+    private final String processName;
+
+    ProcessKeyEnum(String processKey, String processName) {
+        this.processKey = processKey;
+        this.processName = processName;
+    }
+
+    public String getProcessKey() {
+        return processKey;
+    }
+
+    public String getProcessName() {
+        return processName;
+    }
+
+    public static String getByProcessKey(String processKey) {
+        for (ProcessKeyEnum value : values()) {
+            if (value.getProcessKey().equals(processKey)) {
+                return value.processName;
+            }
+        }
+        return null;
+    }
+}

+ 80 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalServiceImpl.java

@@ -21,14 +21,17 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.universal.OaUniversalDO;
 import cn.iocoder.yudao.module.bpm.dal.mysql.oa.universal.OaUniversalMapper;
 import cn.iocoder.yudao.module.bpm.enums.DictDataConstants;
 import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants;
+import cn.iocoder.yudao.module.bpm.enums.ProcessKeyEnum;
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
 import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
+import cn.iocoder.yudao.module.bpm.util.OANotifyContentUtil;
 import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.apache.commons.lang3.StringUtils;
@@ -82,6 +85,9 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     @Resource
     private EmployeeApi employeeApi;
 
+    @Resource
+    private NotifyMessageSendApi notifyMessageSendApi;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long stagingOaUniversal(OaUniversalSaveReqVO stagingReqVO) {
@@ -199,7 +205,22 @@ public class OaUniversalServiceImpl implements OaUniversalService {
                 .setStartUserSelectAssignees(selectAssignees.stream().map(String::valueOf).collect(Collectors.joining(","))));
         // 保存业务uuid到附件中
         fileApi.updateFileBiz(commitReqVO.getFileIdList(), oaUniversal.getUniversalId());
-        // TODO DP 发送提交成功站内信
+        // 给审批人发送审批站内信
+        Long assigneeId = -1L;
+        String assigneeName = "";
+        String applyName = loginEmployee.getName();
+        String processName = ProcessKeyEnum.getByProcessKey(PROCESS_KEY);
+
+        String assignee = nextTask.getAssignee();
+        if (StrUtil.isNotBlank(assignee)) {
+            EmployeeRespDTO employeeAssignee = employeeApi.getEmployeeById(Long.valueOf(assignee));
+            if (employeeAssignee != null) {
+                assigneeId = employeeAssignee.getId();
+                assigneeName = employeeAssignee.getName();
+            }
+        }
+        StringBuilder content = OANotifyContentUtil.buildContentSendToAssignee(assigneeName, applyName, processName);
+        notifyMessageSendApi.sendSingleMessageToMemberForOA(assigneeId, content.toString());
         return oaUniversal.getId();
     }
 
@@ -261,6 +282,32 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         }
         oaUniversalMapper.updateById(oaUniversalDO);
         // 发送通知
+        Long assignId = -1L;
+        String assigneeName = "";
+        Long applyId = -1L;
+        String applyName = "";
+        String processName = ProcessKeyEnum.getByProcessKey(PROCESS_KEY);
+
+        EmployeeRespDTO applyEmployee = employeeApi.getEmployeeById(oaUniversal.getEmployeeId());
+        if (applyEmployee != null) {
+            applyId = applyEmployee.getId();
+            applyName = applyEmployee.getName();
+        }
+        if (nextTask != null) {
+            EmployeeRespDTO employeeAssignee = employeeApi.getEmployeeById(Long.valueOf(nextTask.getAssignee()));
+            if (employeeAssignee != null) {
+                assignId = employeeAssignee.getId();
+                assigneeName = employeeAssignee.getName();
+            }
+            // 给审批人发送审批站内信
+            StringBuilder content = OANotifyContentUtil.buildContentSendToAssignee(assigneeName, applyName, processName);
+            notifyMessageSendApi.sendSingleMessageToMemberForOA(assignId, content.toString());
+        } else {
+            // 给申请人发送审批完成站内信
+            StringBuilder content = OANotifyContentUtil.buildContentSendToApplyForComplete(applyName, processName);
+            notifyMessageSendApi.sendSingleMessageToMemberForOA(applyId, content.toString());
+        }
+
 
         // 返回
         return 1L;
@@ -293,7 +340,21 @@ public class OaUniversalServiceImpl implements OaUniversalService {
                 .eq(OaUniversalDO::getProcInstId, currentTask.getProcessInstanceId());
         oaUniversalMapper.update(updateWrapper);
 
-        // 发送通知
+        // 给申请人发送驳回站内信
+        String assigneeName = loginEmployee.getName();
+        Long applyId = -1L;
+        String applyName = "";
+        String processName = ProcessKeyEnum.getByProcessKey(PROCESS_KEY);
+        OaUniversalDO oaUniversalDO = oaUniversalMapper.selectOne(OaUniversalDO::getProcInstId, currentTask.getProcessInstanceId());
+        if (oaUniversalDO != null) {
+            EmployeeRespDTO applyEmployee = employeeApi.getEmployeeById(oaUniversalDO.getEmployeeId());
+            if (applyEmployee != null) {
+                applyId = applyEmployee.getId();
+                applyName = applyEmployee.getName();
+            }
+        }
+        StringBuilder content = OANotifyContentUtil.buildContentSendToApplyForDisagree(assigneeName, applyName, processName);
+        notifyMessageSendApi.sendSingleMessageToMemberForOA(applyId, content.toString());
 
         return 1L;
     }
@@ -388,6 +449,23 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         // 保存业务uuid到附件中
         fileApi.updateFileBiz(reCommitReqVO.getFileIdList(), oaUniversalNew.getUniversalId());
 
+        // 给审批人发送审批站内信
+        Long assigneeId = -1L;
+        String assigneeName = "";
+        String applyName = loginEmployee.getName();
+        String processName = ProcessKeyEnum.getByProcessKey(PROCESS_KEY);
+
+        String assignee = nextTask.getAssignee();
+        if (StrUtil.isNotBlank(assignee)) {
+            EmployeeRespDTO assigneeEmployee = employeeApi.getEmployeeById(Long.valueOf(assignee));
+            if (assigneeEmployee != null) {
+                assigneeId = assigneeEmployee.getId();
+                assigneeName = assigneeEmployee.getName();
+            }
+        }
+        StringBuilder content = OANotifyContentUtil.buildContentSendToAssignee(assigneeName, applyName, processName);
+        notifyMessageSendApi.sendSingleMessageToMemberForOA(assigneeId, content.toString());
+
         return 1L;
     }
 

+ 46 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/util/OANotifyContentUtil.java

@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.bpm.util;
+
+public class OANotifyContentUtil {
+
+    /**
+     * 构建审批通知内容
+     *
+     * @param assigneeName 审批人姓名
+     * @param applyName    申请人姓名
+     * @param processName  流程名称
+     * @return 通知内容
+     */
+    public static StringBuilder buildContentSendToAssignee(String assigneeName, String applyName, String processName) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(assigneeName).append(":您好,").append(applyName).append("发起的")
+                .append(processName).append("申请单已到您处,请及时处理。详情请在审批中心-我的待办查看,谢谢!");
+        return builder;
+    }
+
+    /**
+     * 构建审批驳回通知内容
+     *
+     * @param assigneeName 当前审批人姓名
+     * @param applyName    申请人姓名
+     * @param processName  流程名称
+     * @return 通知内容
+     */
+    public static StringBuilder buildContentSendToApplyForDisagree(String assigneeName, String applyName, String processName) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(applyName).append(":您好,您的").append(processName).append("申请单已被").append(assigneeName).append("驳回。详情请在审批中心-我的待办查看,谢谢!");
+        return builder;
+    }
+
+    /**
+     * 构建审批完成通知内容
+     *
+     * @param applyName    申请人姓名
+     * @param processName  流程名称
+     * @return 通知内容
+     */
+    public static StringBuilder buildContentSendToApplyForComplete(String applyName, String processName) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(applyName).append(":您好,您的").append(processName).append("申请单已审批通过。详情请在审批中心-已发起中查看,谢谢!");
+        return builder;
+    }
+}

+ 9 - 0
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApi.java

@@ -27,4 +27,13 @@ public interface NotifyMessageSendApi {
      */
     Long sendSingleMessageToMember(@Valid NotifySendSingleToUserReqDTO reqDTO);
 
+    /**
+     * OA模块发送站内信
+     *
+     * @param employeeId 收信员工id
+     * @param content    内容
+     * @return 发送消息 ID
+     */
+    Long sendSingleMessageToMemberForOA(Long employeeId, String content);
+
 }

+ 11 - 0
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/notify/NotifyTemplateTypeConstants.java

@@ -0,0 +1,11 @@
+package cn.iocoder.yudao.module.system.enums.notify;
+
+public interface NotifyTemplateTypeConstants {
+
+    /**
+     * 系统消息
+     */
+    String SYSTEM_MESSAGE = "SYSTEM_MESSAGE";
+
+
+}

+ 16 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApiImpl.java

@@ -1,10 +1,14 @@
 package cn.iocoder.yudao.module.system.api.notify;
 
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
+import cn.iocoder.yudao.module.system.enums.notify.NotifyTemplateTypeConstants;
 import cn.iocoder.yudao.module.system.service.notify.NotifySendService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 站内信发送 API 实现类
@@ -29,4 +33,16 @@ public class NotifyMessageSendApiImpl implements NotifyMessageSendApi {
                 reqDTO.getTemplateCode(), reqDTO.getTemplateParams());
     }
 
+    @Override
+    public Long sendSingleMessageToMemberForOA(Long employeeId, String content) {
+        if (employeeId == null || StrUtil.isBlank(content)) {
+            return -1L;
+        }
+        // 使用定义好的模版
+        String templateCode = NotifyTemplateTypeConstants.SYSTEM_MESSAGE;
+        Map<String, Object> templateParams = new HashMap<>();
+        templateParams.put("content", content);
+        return notifySendService.sendSingleNotifyToMember(employeeId, templateCode, templateParams);
+    }
+
 }

+ 13 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notify/NotifyMessageController.java

@@ -5,6 +5,8 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageMyPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessagePageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.notify.vo.message.NotifyMessageRespVO;
@@ -21,8 +23,10 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.List;
 
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+import static cn.iocoder.yudao.module.employee.enums.ErrorCodeConstants.EMPLOYEE_INFO_NOT_EXISTS;
 
 @Tag(name = "管理后台 - 我的站内信")
 @RestController
@@ -33,6 +37,9 @@ public class NotifyMessageController {
     @Resource
     private NotifyMessageService notifyMessageService;
 
+    @Resource
+    private EmployeeApi employeeApi;
+
     // ========== 管理所有的站内信 ==========
 
     @GetMapping("/get")
@@ -82,8 +89,13 @@ public class NotifyMessageController {
     @Parameter(name = "size", description = "10")
     public CommonResult<List<NotifyMessageRespVO>> getUnreadNotifyMessageList(
             @RequestParam(name = "size", defaultValue = "10") Integer size) {
+        Long loginUserId = getLoginUserId();
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            throw exception(EMPLOYEE_INFO_NOT_EXISTS);
+        }
         List<NotifyMessageDO> list = notifyMessageService.getUnreadNotifyMessageList(
-                getLoginUserId(), UserTypeEnum.ADMIN.getValue(), size);
+                loginEmployee.getId(), UserTypeEnum.MEMBER.getValue(), size);
         return success(BeanUtils.toBean(list, NotifyMessageRespVO.class));
     }