Explorar o código

Merge branch 'feature/snapshot' into dev

qinchaoyue hai 5 meses
pai
achega
b88ce5033c

+ 1 - 1
src/Hotline.Api/Controllers/CommonPController.cs

@@ -95,7 +95,7 @@ namespace Hotline.Api.Controllers
 		[Obsolete("请调用sys/area/tree")]
 		public async Task<List<SystemArea>> GetAearTree()
 		{
-			return await _systemAreaDomainService.GetAreaTree();
+			return await _systemAreaDomainService.GetAreaTree(_appOptions.Value.IsZiGong ? 6 : 0);
 		}
 
 		#endregion

+ 8 - 4
src/Hotline.Api/Controllers/OrgController.cs

@@ -1,10 +1,12 @@
-using Hotline.Permissions;
+using Hotline.Configurations;
+using Hotline.Permissions;
 using Hotline.Settings;
 using Hotline.Share.Dtos.Org;
 using Hotline.Share.Enums.Order;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
 using System.Threading.Channels;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
@@ -22,20 +24,22 @@ namespace Hotline.Api.Controllers
         private readonly ISystemAreaDomainService _areaDomainService;
         private readonly IMapper _mapper;
         private readonly ISessionContext _sessionContext;
-
+		private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
 
         public OrgController(
             ISystemOrganizeRepository systemOrganizeRepository,
             ISystemDomainService systemDomainService,
             ISystemAreaDomainService areaDomainService,
             IMapper mapper,
-            ISessionContext sessionContext)
+            ISessionContext sessionContext,
+            IOptionsSnapshot<AppConfiguration> appOptions)
         {
             _systemOrganizeRepository = systemOrganizeRepository;
             _systemDomainService = systemDomainService;
             _areaDomainService = areaDomainService;
             _mapper = mapper;
             _sessionContext = sessionContext;
+            _appOptions = appOptions;
         }
 
         /// <summary>
@@ -231,7 +235,7 @@ namespace Hotline.Api.Controllers
             new
             {
                 OrgTypeOptions = EnumExts.GetDescriptions<EOrgType>(),
-                Areas = await _areaDomainService.GetAreaTree()
+                Areas = await _areaDomainService.GetAreaTree(_appOptions.Value.IsZiGong ? 6 : 0)
             };
     }
 }

+ 0 - 87
src/Hotline.Api/Controllers/Snapshot/SnapshotBaseController.cs

@@ -1,87 +0,0 @@
-using Hotline.Application.Snapshot;
-using Hotline.Share.Dtos;
-using Hotline.Share.Dtos.Article;
-using Hotline.Share.Dtos.Snapshot;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-
-namespace Hotline.Api.Controllers.Snapshot
-{
-    /// <summary>
-    /// 随手拍接口
-    /// </summary>
-    public class SnapshotController : BaseController
-    {
-        private readonly ISnapshotApplication _snapshotApplication;
-
-        public SnapshotController(ISnapshotApplication snapshotApplication)
-        {
-            _snapshotApplication = snapshotApplication;
-        }
-
-        /// <summary>
-        /// 获取小程序公告列表
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("bulletions")]
-        [AllowAnonymous]
-        public virtual async Task<IReadOnlyList<BulletinOutDto>> QueryBulletinsAsync([FromQuery] BulletinInDto dto)
-            => await _snapshotApplication.GetBulletinsAsync(dto);
-
-        /// <summary>
-        /// 公告详情
-        /// </summary>
-        /// <param name="id"></param>
-        /// <returns></returns>
-        [HttpGet("bulletions/{id}")]
-        [AllowAnonymous]
-        public virtual async Task<BulletinOutDto> QueryBulletionsDetailAsync([FromQuery] string id)
-            => await _snapshotApplication.GetBulletinsDetailAsync(id);
-
-        /// <summary>
-        /// 获取用户页面数据
-        /// </summary>
-        /// <returns></returns>
-        [AllowAnonymous]
-        [HttpGet("user")]
-        public virtual async Task<SnapshotUserInfoOutDto> GetUserInfo()
-            => await _snapshotApplication.GetSnapshotUserInfoAsync();
-
-        /// <summary>
-        /// 获取我提交的线索列表
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("order")]
-        public virtual async Task<PagedDto<OrderOutDto>> QueryOrderListAsync([FromQuery] OrderInDto dto)
-            => await _snapshotApplication.GetSnapshotOrdersAsync(dto);
-
-        /// <summary>
-        /// 获取我提交的线索详情
-        /// </summary>
-        /// <param name="id"></param>
-        /// <returns></returns>
-        [HttpGet("order/{id}")]
-        public virtual async Task<OrderDetailOutDto> QueryOrderListAsync([FromQuery] string id)
-            => await _snapshotApplication.GetSnapshotOrderDetailAsync(id);
-
-        /// <summary>
-        /// 统计红包金额, 每月的总金额
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("redpack")]
-        public virtual async Task<IReadOnlyList<RedPackDateOutDto>> QueryRedPackDateAsync([FromQuery] RedPackDateInDto dto)
-            => await _snapshotApplication.GetRedPackDateAsync(dto);
-
-        /// <summary>
-        /// 获取当月详细红包列表
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("redpack/month")]
-        public virtual async Task<PagedDto<RedPackOutDto>> QueryRedPackDateAsync([FromQuery] RedPacksInDto dto)
-            => await _snapshotApplication.GetRedPacksAsync(dto);
-    }
-}

+ 87 - 2
src/Hotline.Api/Controllers/SnapshotController.cs

@@ -1,18 +1,96 @@
-using Hotline.Orders;
+using Hotline.Application.Snapshot;
+using Hotline.Orders;
+using Hotline.Settings;
+using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.Article;
+using Hotline.Share.Dtos.Snapshot;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using XF.Domain.Repository;
 
 namespace Hotline.Api.Controllers;
 
+/// <summary>
+/// 随手拍接口
+/// </summary>
 public class SnapshotController : BaseController
 {
     private readonly IRepository<Order> _orderRepository;
+    private readonly ISnapshotApplication _snapshotApplication;
+    private readonly ISystemAreaDomainService _systemAreaDomainService;
 
-    public SnapshotController(IRepository<Order> orderRepository)
+    public SnapshotController(IRepository<Order> orderRepository, ISnapshotApplication snapshotApplication, ISystemAreaDomainService systemAreaDomainService)
     {
         _orderRepository = orderRepository;
+        _snapshotApplication = snapshotApplication;
+        _systemAreaDomainService = systemAreaDomainService;
     }
 
+    /// <summary>
+    /// 获取小程序公告列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("bulletions")]
+    [AllowAnonymous]
+    public virtual async Task<IReadOnlyList<BulletinOutDto>> QueryBulletinsAsync([FromQuery] BulletinInDto dto)
+        => await _snapshotApplication.GetBulletinsAsync(dto);
+
+    /// <summary>
+    /// 公告详情
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    [HttpGet("bulletions/{id}")]
+    [AllowAnonymous]
+    public virtual async Task<BulletinOutDto> QueryBulletionsDetailAsync(string id)
+        => await _snapshotApplication.GetBulletinsDetailAsync(id);
+
+    /// <summary>
+    /// 获取用户页面数据
+    /// </summary>
+    /// <returns></returns>
+    [AllowAnonymous]
+    [HttpGet("user")]
+    public virtual async Task<SnapshotUserInfoOutDto> GetUserInfo()
+        => await _snapshotApplication.GetSnapshotUserInfoAsync();
+
+    /// <summary>
+    /// 获取我提交的线索列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("order")]
+    public virtual async Task<PagedDto<OrderOutDto>> QueryOrderListAsync([FromQuery] OrderInDto dto)
+        => await _snapshotApplication.GetSnapshotOrdersAsync(dto);
+
+    /// <summary>
+    /// 获取我提交的线索详情
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    [HttpGet("order/{id}")]
+    public virtual async Task<OrderDetailOutDto> QueryOrderListAsync([FromQuery] string id)
+        => await _snapshotApplication.GetSnapshotOrderDetailAsync(id);
+
+    /// <summary>
+    /// 统计红包金额, 每月的总金额
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("redpack")]
+    public virtual async Task<IReadOnlyList<RedPackDateOutDto>> QueryRedPackDateAsync([FromQuery] RedPackDateInDto dto)
+        => await _snapshotApplication.GetRedPackDateAsync(dto);
+
+    /// <summary>
+    /// 获取当月详细红包列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("redpack/month")]
+    public virtual async Task<PagedDto<RedPackOutDto>> QueryRedPackDateAsync([FromQuery] RedPacksInDto dto)
+        => await _snapshotApplication.GetRedPacksAsync(dto);
+
     /// <summary>
     /// 获取随手拍电气焊动火作业待处理工单数量
     /// TODO 条件 电气焊作业申报
@@ -23,4 +101,11 @@ public class SnapshotController : BaseController
         => await _orderRepository
             .CountAsync(m => m.SourceChannelCode == "ZGSSP" && m.Status == Share.Enums.Order.EOrderStatus.WaitForAccept);
 
+    /// <summary>
+    /// 获取区域
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("area/tree")]
+    public async Task<List<SystemArea>> GetAreaTreeAsync()
+        => await _systemAreaDomainService.GetAreaTree(0);
 }

+ 7 - 2
src/Hotline.Api/Controllers/SysController.cs

@@ -3,6 +3,7 @@ using Hotline.Application.Systems;
 using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Ivrs;
 using Hotline.CallCenter.Tels;
+using Hotline.Configurations;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.Orders;
 using Hotline.Permissions;
@@ -22,6 +23,7 @@ using Hotline.YbEnterprise.Sdk;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
 using NPOI.SS.Formula.Functions;
 using StackExchange.Redis;
 using Wex.Sdk;
@@ -54,6 +56,7 @@ namespace Hotline.Api.Controllers
         private readonly IServiceScopeFactory _serviceScopeFactory;
         private readonly IRedisCachingProvider _redisCaching;
         private readonly IEasyCachingProvider _easyCaching;
+		private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
 
         /// <summary>
         /// 系统管理相关接口
@@ -88,7 +91,8 @@ namespace Hotline.Api.Controllers
             IServiceScopeFactory serviceScopeFactory,
             IRedisCachingProvider redisCaching,
             IEasyCachingProvider easyCaching
-            )
+,
+            IOptionsSnapshot<AppConfiguration> appOptions)
         {
             _mapper = mapper;
             _systemSettingsRepository = systemSettingsRepository;
@@ -106,6 +110,7 @@ namespace Hotline.Api.Controllers
             _serviceScopeFactory = serviceScopeFactory;
             _redisCaching = redisCaching;
             _easyCaching = easyCaching;
+            _appOptions = appOptions;
         }
 
         #region 菜单管理
@@ -370,7 +375,7 @@ namespace Hotline.Api.Controllers
         [HttpGet("area/tree")]
         public async Task<List<SystemArea>> GetAreaTree()
         {
-            return await _systemAreaDomainService.GetAreaTree();
+            return await _systemAreaDomainService.GetAreaTree(_appOptions.Value.IsZiGong ? 6 : 0);
         }
 
         /// <summary>

+ 37 - 0
src/Hotline.Application.Tests/Controller/SnapshotControllerTest.cs

@@ -0,0 +1,37 @@
+using Hotline.Api.Controllers;
+using Hotline.Identity.Accounts;
+using Hotline.Identity.Roles;
+using Hotline.Users;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Tests.Controller;
+public class SnapshotControllerTest : TestBase
+{
+    private readonly SnapshotController _snapshotController;
+    public SnapshotControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, SnapshotController snapshotController) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor)
+    {
+        _snapshotController = snapshotController;
+    }
+
+    [Fact]
+    public async Task GetAreaTreeTest()
+    {
+        var result = await _snapshotController.GetAreaTreeAsync();
+        result.ShouldNotBeNull();
+        var zgs = result.Where(m => m.AreaName == "自贡市").FirstOrDefault();
+        zgs.ShouldNotBeNull();
+        var rx = zgs.Children.Where(m => m.AreaName == "荣县").FirstOrDefault();
+        rx.ShouldNotBeNull();
+        var zzz = rx.Children.Where(m => m.AreaName == "正紫镇").FirstOrDefault();
+        zzz.ShouldNotBeNull();
+    }
+
+}

+ 1 - 0
src/Hotline.Application.Tests/Startup.cs

@@ -170,6 +170,7 @@ public class Startup
             services.AddScoped<IExportApplication, ExportApplication>();
             services.AddScoped<OrderController>();
             services.AddScoped<UserController>();
+            services.AddScoped<SnapshotController>();
             services.AddScoped<KnowledgeController>();
             services.AddScoped<PushMessageController>();
             services.AddHttpContextAccessor();

+ 3 - 0
src/Hotline.Share/Requests/PagedRequest.cs

@@ -1,6 +1,9 @@
 
 namespace Hotline.Share.Requests
 {
+    /// <summary>
+    /// PageIndex 从 1 开始计数
+    /// </summary>
     public record PagedRequest
     {
         public int PageIndex { get; set; } = 1;

+ 2 - 2
src/Hotline/Orders/Order.cs

@@ -559,7 +559,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 实际办理意见(办理中...or 最终办理意见)
         /// </summary>
-        [SugarColumn(Length = 8000, ColumnDescription = "实际办理意见")]
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "实际办理意见")]
         public string ActualOpinion { get; set; } = "办理中...";
 
         /// <summary>
@@ -836,7 +836,7 @@ namespace Hotline.Orders
         /// <summary>
         /// 归档意见
         /// </summary>
-        [SugarColumn(ColumnDataType = "varchar(8000)", ColumnDescription = "归档意见")]
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "归档意见")]
         public string? FileOpinion { get; set; }
 
         #endregion

+ 1 - 1
src/Hotline/Settings/ISystemAreaDomainService.cs

@@ -3,7 +3,7 @@ namespace Hotline.Settings
 {
     public interface ISystemAreaDomainService
     {
-        Task<List<SystemArea>> GetAreaTree();
+        Task<List<SystemArea>> GetAreaTree(int idLength = 0);
 
         Task AddArea(SystemArea model,CancellationToken cancellationToken);
 

+ 6 - 3
src/Hotline/Settings/SystemAreaDomainService.cs

@@ -1,4 +1,5 @@
-using XF.Domain.Dependency;
+using SqlSugar;
+using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
 
@@ -23,9 +24,11 @@ namespace Hotline.Settings
             await _systemAreaRepository.UpdateAsync(model,cancellationToken);
         }
 
-        public async Task<List<SystemArea>> GetAreaTree()
+        public async Task<List<SystemArea>> GetAreaTree(int idLength = 0)
         {
-           return await  _systemAreaRepository.Queryable().OrderBy(x=>x.Id).ToTreeAsync(x => x.Children,q=>q.ParentId, "510000");
+           return await  _systemAreaRepository.Queryable()
+                .WhereIF(idLength != 0, x => SqlFunc.Length(x.Id) == idLength)
+                .OrderBy(x=>x.Id).ToTreeAsync(x => x.Children,q=>q.ParentId, "510000");
         }
 
         public async Task<SystemArea?> GetArea(string id, CancellationToken cancellationToken)