ITeamMemberAppService.cs 3.49 KB
using FoodLabeling.Application.Contracts.Dtos.Common;
using FoodLabeling.Application.Contracts.Dtos.TeamMember;
using Microsoft.AspNetCore.Mvc;

namespace FoodLabeling.Application.Contracts.IServices;

public interface ITeamMemberAppService
{
    /// <summary>
    /// 成员分页列表。数据范围:系统管理员(<c>admin</c> / 超管)可查全部成员;其它账号仅返回其
    /// <c>userlocation</c> 绑定门店所属公司下的成员(与 partner 列表 Token 范围一致),再与 Query 筛选求交。
    /// </summary>
    Task<PagedResultWithPageDto<TeamMemberGetListOutputDto>> GetListAsync(TeamMemberGetListInputVo input);

    Task<TeamMemberGetOutputDto> GetAsync(Guid id);

    /// <summary>
    /// 新增成员(POST <c>/api/app/team-member</c>)。<c>locationIds</c> / <c>regionIds</c> / <c>groupIds</c> / <c>locations</c> 可传 <c>ALL</c> 哨兵。
    /// </summary>
    Task<TeamMemberGetOutputDto> CreateAsync(TeamMemberCreateInputVo input);

    /// <summary>
    /// 更新成员(PUT <c>/api/app/team-member/{id}</c>)。范围传参规则与 <see cref="CreateAsync"/> 相同。
    /// </summary>
    Task<TeamMemberGetOutputDto> UpdateAsync(Guid id, TeamMemberUpdateInputVo input);

    Task DeleteAsync(Guid id);

    /// <summary>
    /// 下载 Team Member 批量导入模板(服务器 batchImportOfFiles 目录下 xlsx)
    /// </summary>
    Task<IActionResult> DownloadTeamMemberImportTemplateAsync();

    /// <summary>
    /// 按列表筛选条件全量导出成员为 PDF(与列表相同过滤;不分页、不限条数)
    /// </summary>
    Task<IActionResult> ExportTeamMembersPdfAsync(TeamMemberGetListInputVo input);

    /// <summary>
    /// 批量导入成员(Excel,multipart/form-data 字段 <c>file</c>)
    /// </summary>
    Task<TeamMemberBatchImportResultDto> ImportTeamMembersBatchAsync(TeamMemberBatchImportInputVo input);

    /// <summary>
    /// 批量编辑成员(JSON 一次提交多行)
    /// </summary>
    Task<TeamMemberBulkUpdateResultDto> UpdateTeamMembersBulkAsync(TeamMemberBulkUpdateInputVo input);

    /// <summary>
    /// JSON 在线批量导入成员(逐行调用 <see cref="CreateAsync"/>,部分成功)
    /// </summary>
    /// <remarks>
    /// 请求体为 JSON,每行字段与单条新增 <see cref="TeamMemberCreateInputVo"/> 一致;
    /// <c>password</c> 为空时使用配置 <c>TeamMemberImportDefaultPassword</c>。
    ///
    /// 示例请求:
    /// ```json
    /// {
    ///   "items": [
    ///     {
    ///       "fullName": "John Doe",
    ///       "userName": "john@example.com",
    ///       "email": "john@example.com",
    ///       "roleId": "ROLE_GUID",
    ///       "locationIds": ["LOCATION_GUID"],
    ///       "state": true
    ///     }
    ///   ]
    /// }
    /// ```
    ///
    /// 参数说明:
    /// - items: 待导入行数组;<c>index</c> 从 0 起;单次最多 <c>MaxImportRows</c> 条(默认 5000)
    /// </remarks>
    /// <param name="input">批量导入请求体</param>
    /// <returns>成功数、失败数及失败明细(<c>index</c>、<c>userName</c>、<c>message</c>)</returns>
    /// <response code="200">全部或部分行处理完成,见返回体中的计数与 errors</response>
    /// <response code="400">整单校验失败(如 items 为空、超过单次条数上限)</response>
    /// <response code="500">服务器错误</response>
    Task<TeamMemberBatchImportOnlineResultDto> BatchImportOnlineAsync(TeamMemberBatchImportOnlineInputVo input);
}