From 2e6e8628468a563dfe15f1b5ae0e46ac310106bd Mon Sep 17 00:00:00 2001 From: dxfeng Date: Wed, 27 Aug 2025 19:49:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=8F=91=E9=80=81=E5=8A=A8?= =?UTF-8?q?=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entry/action/SendMessageAction.java | 163 ++++++++++++++++++ .../entry/entity/MessageSendConfig.java | 31 ++++ .../entry/mapper/SendMessageMapper.java | 34 ++++ .../mapper/entry/action/SendMessageMapper.xml | 59 +++++++ 4 files changed, 287 insertions(+) create mode 100644 src/main/java/com/weaver/seconddev/entry/action/SendMessageAction.java create mode 100644 src/main/java/com/weaver/seconddev/entry/entity/MessageSendConfig.java create mode 100644 src/main/java/com/weaver/seconddev/entry/mapper/SendMessageMapper.java create mode 100644 src/main/resources/mapper/entry/action/SendMessageMapper.xml diff --git a/src/main/java/com/weaver/seconddev/entry/action/SendMessageAction.java b/src/main/java/com/weaver/seconddev/entry/action/SendMessageAction.java new file mode 100644 index 0000000..aea3db7 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/entry/action/SendMessageAction.java @@ -0,0 +1,163 @@ +package com.weaver.seconddev.entry.action; + +import cn.hutool.core.convert.Convert; +import com.alibaba.fastjson.JSON; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.hrm.dao.HrmCommonEmployeeDao; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuOpenIdUtil; +import com.weaver.seconddev.chapanda.feishu.util.Esb2FeishuSendMessageUtil; +import com.weaver.seconddev.entry.entity.MessageSendConfig; +import com.weaver.seconddev.entry.mapper.SendMessageMapper; +import com.weaver.seconddev.portal.entity.param.BaseParam; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author:dxfeng + * @createTime: 2025/08/26 + * @version: 1.0 + */ +@Slf4j +@Service("SendMessageAction") +public class SendMessageAction implements EsbServerlessRpcRemoteInterface { + + @Autowired + Esb2FeishuSendMessageUtil esb2FeishuSendMessageUtil; + + @Autowired + SendMessageMapper sendMessageMapper; + + @Autowired + HrmCommonEmployeeDao hrmCommonEmployeeDao; + + @Autowired + Esb2FeishuOpenIdUtil esb2FeishuOpenIdUtil; + + @Override + public WeaResult> execute(Map params) { + // ID + String employeeId = Convert.toStr(params.get("employeeId"), ""); + //if(null==employeeId){ + // return WeaResult.fail("动作流配置[employeeId]参数获取异常",true); + //} + + // 当前部门ID + String departmentId = Convert.toStr(params.get("departmentId"), ""); + String templateId = (String) params.get("templateId"); + String templateVersionName = (String) params.get("templateVersionName"); + String content = (String) params.get("content"); + + log.error("params===" + JSON.toJSONString(params)); + + BaseParam baseParam = new BaseParam(); + MessageSendConfig messageSendConfig = sendMessageMapper.getMessageSendConfig(baseParam, departmentId); + + while (messageSendConfig == null && StringUtils.isNotBlank(departmentId)) { + String parentDepartmentId = sendMessageMapper.getParentDepartmentId(baseParam, departmentId); + // 防止无限循环:如果parentDepartmentId为空或与当前departmentId相同,则跳出循环 + if (StringUtils.isBlank(parentDepartmentId) || parentDepartmentId.equals(departmentId)) { + log.error("部门上下级数据异常,departmentId==" + departmentId); + break; + } + departmentId = parentDepartmentId; + messageSendConfig = sendMessageMapper.getMessageSendConfig(baseParam, departmentId); + } + + if (null == messageSendConfig) { + return WeaResult.success(); + } + log.error("messageSendConfig===" + JSON.toJSONString(messageSendConfig)); + + Set userIdList = new HashSet<>(); + + if (1 == messageSendConfig.getZjsj() && StringUtils.isNotBlank(employeeId)) { + // 发送消息给直接上级 + String superior = sendMessageMapper.getSuperior(baseParam, employeeId); + if (StringUtils.isBlank(superior)) { + superior = sendMessageMapper.getSuperiorFromEntry(baseParam, employeeId); + } + userIdList.add(superior); + } + + if (1 == messageSendConfig.getJgsjzjssj() && StringUtils.isNotBlank(employeeId)) { + // 发送消息给间接上级 + String superior = sendMessageMapper.getSuperior(baseParam, employeeId); + if (StringUtils.isBlank(superior)) { + superior = sendMessageMapper.getSuperiorFromEntry(baseParam, employeeId); + if (StringUtils.isNotBlank(superior)) { + superior = sendMessageMapper.getSuperiorFromEntry(baseParam, superior); + } + } else { + superior = sendMessageMapper.getSuperior(baseParam, superior); + } + userIdList.add(superior); + } + + if (1 == messageSendConfig.getXxsj() && StringUtils.isNotBlank(employeeId)) { + // 发送消息给虚线上级 + String otherSuperior = sendMessageMapper.getOtherSuperior(baseParam, employeeId); + if (StringUtils.isBlank(otherSuperior)) { + otherSuperior = sendMessageMapper.getOtherSuperiorFromEntry(baseParam, employeeId); + } + userIdList.add(otherSuperior); + } + + Map departmentCustomData = sendMessageMapper.getDepartmentCustomData(baseParam, departmentId); + if (1 == messageSendConfig.getBmfzr()) { + // 发送消息给部门负责人 + String bmfzr = Convert.toStr(departmentCustomData.get("bmfzr"), ""); + userIdList.add(bmfzr); + } + + if (1 == messageSendConfig.getTbmyg()) { + // 发送消息给同部门员工 + List employeeIdsByDeptId = sendMessageMapper.getEmployeeIdsByDeptId(baseParam, departmentId); + userIdList.addAll(employeeIdsByDeptId); + } + + if (1 == messageSendConfig.getHrbp()) { + // 发送消息给HRBP + String hrbp = Convert.toStr(departmentCustomData.get("hrbp"), ""); + userIdList.add(hrbp); + } + + if (1 == messageSendConfig.getFgld()) { + // 发送消息给分管领导 + String fgld = Convert.toStr(departmentCustomData.get("fgld"), ""); + userIdList.add(fgld); + } + + + for (String userId : userIdList) { + if (StringUtils.isBlank(userId)) { + continue; + } + // 获取飞书ID + String openId = this.esb2FeishuOpenIdUtil.queryFeishuOpenId(userId); + if (StringUtils.isBlank(openId)) { + log.error("userId=={},未获取到飞书openId", userId); + } + + // 发送消息 + if (0 == messageSendConfig.getXxlx()) { + // 文本消息 + esb2FeishuSendMessageUtil.senTextMessage(content, openId); + } else if (1 == messageSendConfig.getXxlx()) { + // 卡片消息 + esb2FeishuSendMessageUtil.senCardMessage(templateId, templateVersionName, openId, params); + } + + } + + + return WeaResult.success(); + } +} diff --git a/src/main/java/com/weaver/seconddev/entry/entity/MessageSendConfig.java b/src/main/java/com/weaver/seconddev/entry/entity/MessageSendConfig.java new file mode 100644 index 0000000..8aa43ad --- /dev/null +++ b/src/main/java/com/weaver/seconddev/entry/entity/MessageSendConfig.java @@ -0,0 +1,31 @@ +package com.weaver.seconddev.entry.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2025/08/26 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MessageSendConfig { + private String bm; + private Long ry; + private int xxlx; + private String ms; + private int zjsj; + private int jgsjzjssj; + private int xxsj; + private int bmfzr; + private int tbmyg; + private int hrbp; + private int fgld; + + +} diff --git a/src/main/java/com/weaver/seconddev/entry/mapper/SendMessageMapper.java b/src/main/java/com/weaver/seconddev/entry/mapper/SendMessageMapper.java new file mode 100644 index 0000000..d03e1ce --- /dev/null +++ b/src/main/java/com/weaver/seconddev/entry/mapper/SendMessageMapper.java @@ -0,0 +1,34 @@ +package com.weaver.seconddev.entry.mapper; + +import com.weaver.seconddev.entry.entity.MessageSendConfig; +import com.weaver.seconddev.portal.entity.param.BaseParam; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2025/08/26 + * @version: 1.0 + */ +@Mapper +public interface SendMessageMapper { + + String getParentDepartmentId(@Param("param") BaseParam param, @Param("departmentId") String departmentId); + + MessageSendConfig getMessageSendConfig(@Param("param") BaseParam param, @Param("departmentId") String departmentId); + + String getSuperior(@Param("param") BaseParam param, @Param("employeeId") String employeeId); + + String getOtherSuperior(@Param("param") BaseParam param, @Param("employeeId") String employeeId); + + String getSuperiorFromEntry(@Param("param") BaseParam param, @Param("employeeId") String employeeId); + + String getOtherSuperiorFromEntry(@Param("param") BaseParam param, @Param("employeeId") String employeeId); + + Map getDepartmentCustomData(@Param("param") BaseParam param, @Param("departmentId") String departmentId); + + List getEmployeeIdsByDeptId(@Param("param") BaseParam param, @Param("departmentId") String departmentId); +} diff --git a/src/main/resources/mapper/entry/action/SendMessageMapper.xml b/src/main/resources/mapper/entry/action/SendMessageMapper.xml new file mode 100644 index 0000000..12b0b0e --- /dev/null +++ b/src/main/resources/mapper/entry/action/SendMessageMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + +