新增MES审批流设计功能,包括审批流定义、审批实例管理及审批办理接口,支持可视化设计与业务单据联动,提升审批流程的灵活性与用户体验。

This commit is contained in:
geht
2026-05-29 15:49:10 +08:00
parent 94132ea8da
commit aefa44b8a9
48 changed files with 5603 additions and 261 deletions

View File

@@ -48,6 +48,21 @@ public interface ISysImChatService {
SysImMessageVO sendMessage(String userId, Integer tenantId, SysImSendMessageDTO dto);
//update-begin---author:GHT ---date:2026-05-29 for【QH-MES审批流设计】系统单聊消息(绕过同部门校验,供审批等系统通知场景)-----
/**
* 系统消息:以 fromUser 身份给 toUser 发送单聊消息。
* 与 sendMessage 区别:自动获取/创建单聊会话,且不做"同部门/同租户聊天"校验,专供审批通知等系统场景。
*
* @param fromUserId 发送人用户ID一般为业务发起人
* @param toUserId 接收人用户ID
* @param tenantId 租户ID
* @param content 消息内容
* @param msgType 消息类型 text/biz_record 等,空则按 text
* @return 消息VO发送失败返回 null
*/
SysImMessageVO sendSystemSingleMessage(String fromUserId, String toUserId, Integer tenantId, String content, String msgType);
//update-end---author:GHT ---date:2026-05-29 for【QH-MES审批流设计】系统单聊消息(绕过同部门校验,供审批等系统通知场景)-----
void markRead(String userId, String conversationId);

View File

@@ -473,6 +473,57 @@ public class SysImChatServiceImpl implements ISysImChatService {
}
//update-end---author:cursor ---date:20260528 for【IM聊天-OA】发送消息-----------
//update-begin---author:GHT ---date:2026-05-29 for【QH-MES审批流设计】系统单聊消息(绕过同部门校验)-----
@Override
@Transactional(rollbackFor = Exception.class)
public SysImMessageVO sendSystemSingleMessage(String fromUserId, String toUserId, Integer tenantId, String content, String msgType) {
if (oConvertUtils.isEmpty(fromUserId) || oConvertUtils.isEmpty(toUserId) || oConvertUtils.isEmpty(content)) {
return null;
}
// 不给自己发送
if (fromUserId.equals(toUserId)) {
return null;
}
Integer tenant = tenantId == null ? 0 : tenantId;
Date now = new Date();
// 获取或创建单聊会话(系统通知场景,不做同部门校验)
String pairKey = buildPairKey(fromUserId, toUserId);
SysImConversation conversation = conversationMapper.selectOne(new LambdaQueryWrapper<SysImConversation>()
.eq(SysImConversation::getTenantId, tenant)
.eq(SysImConversation::getUserPairKey, pairKey));
if (conversation == null) {
conversation = new SysImConversation();
conversation.setConvType(CONV_TYPE_SINGLE);
conversation.setUserPairKey(pairKey);
conversation.setTenantId(tenant);
conversation.setCreateBy(fromUserId);
conversation.setCreateTime(now);
conversation.setUpdateTime(now);
conversationMapper.insert(conversation);
createMember(conversation.getId(), fromUserId, now);
createMember(conversation.getId(), toUserId, now);
}
// 写入消息
SysImMessage message = new SysImMessage();
message.setConversationId(conversation.getId());
message.setSenderId(fromUserId);
message.setContent(content.trim());
message.setMsgType(oConvertUtils.isEmpty(msgType) ? MSG_TYPE_TEXT : msgType);
message.setTenantId(tenant);
message.setCreateTime(now);
messageMapper.insert(message);
// 更新会话摘要与未读、推送
conversation.setLastContent(truncate(resolveLastContent(message.getMsgType(), message.getContent()), 200));
conversation.setLastTime(now);
conversation.setUpdateTime(now);
conversationMapper.updateById(conversation);
memberMapper.incrementUnreadExceptSender(conversation.getId(), fromUserId);
SysImMessageVO messageVo = toMessageVo(message, fromUserId);
pushChatMessage(conversation.getId(), fromUserId, messageVo, conversation.getConvType());
return messageVo;
}
//update-end---author:GHT ---date:2026-05-29 for【QH-MES审批流设计】系统单聊消息(绕过同部门校验)-----
//update-begin---author:cursor ---date:20260528 for【IM聊天-OA】标记已读-----------
@Override
@Transactional(rollbackFor = Exception.class)