ILocationAppService.cs 3.5 KB
using FoodLabeling.Application.Contracts.Dtos.Location;
using FoodLabeling.Application.Contracts.Dtos.Common;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;

namespace FoodLabeling.Application.Contracts.IServices;

/// <summary>
/// 门店管理接口(美国版)
/// </summary>
public interface ILocationAppService : IApplicationService
{
    /// <summary>
    /// 门店分页列表;管理员返回全部门店,非管理员仅返回其绑定门店所属 Region(Partner + GroupName)下的门店。
    /// </summary>
    /// <param name="input">查询条件</param>
    Task<PagedResultWithPageDto<LocationGetListOutputDto>> GetListAsync(LocationGetListInputVo input);

    /// <summary>
    /// 新增门店
    /// </summary>
    /// <param name="input">门店信息</param>
    Task<LocationGetListOutputDto> CreateAsync(LocationCreateInputVo input);

    /// <summary>
    /// 编辑门店
    /// </summary>
    /// <param name="id">门店Id</param>
    /// <param name="input">门店信息</param>
    Task<LocationGetListOutputDto> UpdateAsync(Guid id, LocationUpdateInputVo input);

    /// <summary>
    /// 删除门店(逻辑删除)
    /// </summary>
    /// <param name="id">门店Id</param>
    Task DeleteAsync(Guid id);

    /// <summary>
    /// 下载 Location Manager 批量导入模板(读取服务器 <c>batchImportOfFiles</c> 目录下 xlsx)
    /// </summary>
    Task<IActionResult> DownloadLocationImportTemplateAsync();

    /// <summary>
    /// 按列表筛选条件全量导出门店为 Excel(与列表相同过滤与排序,不分页、不限条数)
    /// </summary>
    Task<IActionResult> ExportLocationsExcelAsync(LocationGetListInputVo input);

    /// <summary>
    /// 批量导入门店(Excel,multipart/form-data 字段 <c>file</c>)
    /// </summary>
    Task<LocationBatchImportResultDto> ImportLocationsBatchAsync(LocationBatchImportInputVo input);

    /// <summary>
    /// 批量编辑门店(网格保存全部,JSON 一次提交多行)
    /// </summary>
    /// <remarks>
    /// 每行通过 <c>id</c> 定位门店,字段与单条 <c>PUT /location/{id}</c> 一致;<c>id</c> 为 <see cref="Guid.Empty"/> 的项忽略。
    ///
    /// 示例请求:
    /// ```json
    /// {
    ///   "items": [
    ///     {
    ///       "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    ///       "partner": "MedVantage Cafe Group",
    ///       "groupName": "NC Region",
    ///       "locationName": "UNCC store",
    ///       "street": "222 School House Lane",
    ///       "city": "Charlotte",
    ///       "stateCode": "NC",
    ///       "country": "USA",
    ///       "zipCode": "29889",
    ///       "phone": "2123456789",
    ///       "email": "nc@example.com",
    ///       "latitude": 35.3,
    ///       "longitude": -80.7,
    ///       "state": true
    ///     }
    ///   ]
    /// }
    /// ```
    ///
    /// 参数说明:
    /// - items: 编辑行数组;单行失败不影响其它行提交结果汇总
    /// </remarks>
    /// <param name="input">批量编辑请求体</param>
    /// <returns>成功数、失败数及失败明细</returns>
    /// <response code="200">全部或部分行处理完成,见返回体中的计数与 errors</response>
    /// <response code="400">整单校验失败(如超过单次条数上限、items 为空)</response>
    /// <response code="500">服务器错误</response>
    Task<LocationBulkUpdateResultDto> UpdateLocationsBulkAsync(LocationBulkUpdateInputVo input);
}