Skip to content

Commit

Permalink
⚡ refactor: Add enterprise WeChat recipient import and code optimizat…
Browse files Browse the repository at this point in the history
…ion (#583)
  • Loading branch information
wzh425 authored Jul 24, 2024
1 parent b3282a4 commit 67e89fd
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Masa.Mc.Contracts.Admin.Dtos.MessageTasks.Imports;

public class AppReceiverImportDto
{
[ImporterHeader(Name = "用户Id", IsAllowRepeat = false)]
[Required(ErrorMessage = "用户Id是必填的")]
public Guid UserId { get; set; }
[ImporterHeader(Name = "客户端注册Id", IsAllowRepeat = false)]
[Required(ErrorMessage = "客户端注册Id是必填的")]
public string ClientId { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the Apache License. See LICENSE.txt in the project root for license information.

namespace Masa.Mc.Contracts.Admin.Dtos.MessageTasks.Imports;

public class WeixinWorkReceiverImportDto
{
[ImporterHeader(Name = "用户名", IsAllowRepeat = false)]
[Required(ErrorMessage = "用户名是必填的")]
public string Account { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ public class MessageTaskReceiverDto
{
public Guid SubjectId { get; set; }

public string ChannelUserIdentity { get; set; } = string.Empty;

public string DisplayName { get; set; } = string.Empty;

public string Account { get; set; } = string.Empty;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,19 +78,15 @@ private string GetImporterHeaderDisplayName(Type type, string name)

private async Task<ImportResult<dynamic>> GetDynamicImportDtos(ChannelTypes channelType, Stream stream)
{
switch (channelType)
return channelType switch
{
case ChannelTypes.Sms:
return await _importer.DynamicImport<SmsReceiverImportDto>(stream);
case ChannelTypes.Email:
return await _importer.DynamicImport<EmailReceiverImportDto>(stream);
case ChannelTypes.WebsiteMessage:
return await _importer.DynamicImport<WebsiteMessageReceiverImportDto>(stream);
case ChannelTypes.App:
return await _importer.DynamicImport<AppReceiverImportDto>(stream);
default:
throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE);
}
ChannelTypes.Sms => await _importer.DynamicImport<SmsReceiverImportDto>(stream),
ChannelTypes.Email => await _importer.DynamicImport<EmailReceiverImportDto>(stream),
ChannelTypes.WebsiteMessage => await _importer.DynamicImport<WebsiteMessageReceiverImportDto>(stream),
ChannelTypes.App => await _importer.DynamicImport<AppReceiverImportDto>(stream),
ChannelTypes.WeixinWork => await _importer.DynamicImport<WeixinWorkReceiverImportDto>(stream),
_ => throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE)
};
}

private MessageTaskReceiverDto GetMessageTaskReceiverDto(ChannelTypes channelType, ExpandoObject obj)
Expand All @@ -99,26 +95,25 @@ private MessageTaskReceiverDto GetMessageTaskReceiverDto(ChannelTypes channelTyp
switch (channelType)
{
case ChannelTypes.Sms:
receiver.PhoneNumber = obj?.GetOrDefault(GetImporterHeaderDisplayName(typeof(SmsReceiverImportDto), nameof(SmsReceiverImportDto.PhoneNumber)))?.ToString() ?? string.Empty;
receiver.ChannelUserIdentity = obj?.GetOrDefault(GetImporterHeaderDisplayName(typeof(SmsReceiverImportDto), nameof(SmsReceiverImportDto.PhoneNumber)))?.ToString() ?? string.Empty;
receiver.PhoneNumber = receiver.ChannelUserIdentity;
break;
case ChannelTypes.Email:
receiver.Email = obj?.GetOrDefault(GetImporterHeaderDisplayName(typeof(EmailReceiverImportDto), nameof(EmailReceiverImportDto.Email)))?.ToString() ?? string.Empty;
receiver.ChannelUserIdentity = obj?.GetOrDefault(GetImporterHeaderDisplayName(typeof(EmailReceiverImportDto), nameof(EmailReceiverImportDto.Email)))?.ToString() ?? string.Empty;
receiver.Email = receiver.ChannelUserIdentity;
break;
case ChannelTypes.WebsiteMessage:
receiver.SubjectId = Guid.Empty;
object? subjectIdObj = obj.GetOrDefault(GetImporterHeaderDisplayName(typeof(WebsiteMessageReceiverImportDto), nameof(WebsiteMessageReceiverImportDto.UserId)));
if (Guid.TryParse(subjectIdObj?.ToString(), out var subjectId))
receiver.ChannelUserIdentity = obj?.GetOrDefault(GetImporterHeaderDisplayName(typeof(WebsiteMessageReceiverImportDto), nameof(WebsiteMessageReceiverImportDto.UserId)))?.ToString() ?? string.Empty;
if (Guid.TryParse(receiver.ChannelUserIdentity, out var subjectId))
{
receiver.SubjectId = subjectId;
}
break;
case ChannelTypes.App:
receiver.SubjectId = Guid.Empty;
object? userIdObj = obj.GetOrDefault(GetImporterHeaderDisplayName(typeof(AppReceiverImportDto), nameof(AppReceiverImportDto.UserId)));
if (Guid.TryParse(userIdObj?.ToString(), out var userId))
{
receiver.SubjectId = userId;
}
receiver.ChannelUserIdentity = obj?.GetOrDefault(GetImporterHeaderDisplayName(typeof(AppReceiverImportDto), nameof(AppReceiverImportDto.ClientId)))?.ToString() ?? string.Empty;
break;
case ChannelTypes.WeixinWork:
receiver.ChannelUserIdentity = obj?.GetOrDefault(GetImporterHeaderDisplayName(typeof(WeixinWorkReceiverImportDto), nameof(WeixinWorkReceiverImportDto.Account)))?.ToString() ?? string.Empty;
break;
default:
throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,19 +209,15 @@ private async Task FillMessageTaskListDtos(List<MessageTaskDto> dtos)

private Type GetReceiverImportDtoType(ChannelTypes channelType)
{
switch (channelType)
return channelType switch
{
case ChannelTypes.Sms:
return typeof(SmsReceiverImportDto);
case ChannelTypes.Email:
return typeof(EmailReceiverImportDto);
case ChannelTypes.WebsiteMessage:
return typeof(WebsiteMessageReceiverImportDto);
case ChannelTypes.App:
return typeof(AppReceiverImportDto);
default:
throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE);
}
ChannelTypes.Sms => typeof(SmsReceiverImportDto),
ChannelTypes.Email => typeof(EmailReceiverImportDto),
ChannelTypes.WebsiteMessage => typeof(WebsiteMessageReceiverImportDto),
ChannelTypes.App => typeof(AppReceiverImportDto),
ChannelTypes.WeixinWork => typeof(WeixinWorkReceiverImportDto),
_ => throw new UserFriendlyException(errorCode: UserFriendlyExceptionCodes.UNKNOWN_CHANNEL_TYPE)
};
}

public async Task<string> GetMessageContentAsync(MessageEntityTypes entityType, Guid entityId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,18 @@
@T("Email")
</th>
}
@if (ChannelType == ChannelTypes.App)
{
<th class="text-left body2 regular3--text rounded-0">
@T("ClientId")
</th>
}
@if (ChannelType == ChannelTypes.WeixinWork)
{
<th class="text-left body2 regular3--text rounded-0">
@T("Account")
</th>
}
@if (Value.Count > 0)
{
foreach (var item in Value[0].Variables)
Expand All @@ -38,18 +50,7 @@
@foreach (var item in _items)
{
<tr class="body2 regular--text mt-4 mb-6">
@if (ChannelType == ChannelTypes.WebsiteMessage)
{
<td class="body2 regular--text border-bottom-none">@item.SubjectId</td>
}
@if (ChannelType == ChannelTypes.Sms)
{
<td class="body2 regular--text border-bottom-none">@item.PhoneNumber</td>
}
@if (ChannelType == ChannelTypes.Email)
{
<td class="body2 regular--text border-bottom-none">@item.Email</td>
}
<td class="body2 regular--text border-bottom-none">@item.ChannelUserIdentity</td>
@foreach (var v in item.Variables)
{
<td class="body2 regular--text border-bottom-none">@v.Value</td>
Expand Down
3 changes: 2 additions & 1 deletion src/Web/Masa.Mc.Web.Admin/wwwroot/i18n/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -415,5 +415,6 @@
"production": "生产环境",
"TemplateType": "模板类型",
"Text": "文本",
"TextCard": "文本卡片"
"TextCard": "文本卡片",
"ClientId": "客户端注册Id"
}

0 comments on commit 67e89fd

Please sign in to comment.