Răsfoiți Sursa

Merge branch 'feature/snapshot' into dev

qinchaoyue 5 luni în urmă
părinte
comite
1af928e7bc

+ 9 - 0
src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs

@@ -214,4 +214,13 @@ public class SnapshotController : BaseController
     [HttpGet("area/tree")]
     public async Task<List<SystemAreaOutDto>> GetAreaTreeAsync()
         => (await _systemAreaDomainService.GetAreaTree()).Adapt<List<SystemAreaOutDto>>();
+
+    /// <summary>
+    /// 批量添加从业人员
+    /// </summary>
+    /// <param name="dtos"></param>
+    /// <returns></returns>
+    [HttpPost("practitioner")]
+    public async Task AddPractitionerAsync([FromBody]IList<AddPractitionerInDto> dtos)
+        => await _snapshotApplication.AddPractitionerAsync(dtos);
 }

+ 6 - 1
src/Hotline.Application/Mappers/SnapshotMapperConfigs.cs

@@ -1,5 +1,8 @@
-using Hotline.Orders;
+using AngleSharp.Text;
+using Hotline.Orders;
 using Hotline.Share.Dtos.Snapshot;
+using Hotline.Share.Enums.Order;
+using Hotline.Share.Tools;
 using Hotline.Snapshot;
 using Mapster;
 using System;
@@ -33,5 +36,7 @@ public class SnapshotMapperConfigs : IRegister
         config.ForType<Order, OrderPublishDetailOutDto>()
             .Map(m => m.Opinion, n => n.ActualOpinion);
 
+        config.ForType<AddPractitionerInDto, Practitioner>()
+            .Ignore(m => m.Gender);
     }
 }

+ 1 - 1
src/Hotline.Application/Snapshot/DefaultSnapshotApplication.cs

@@ -23,7 +23,7 @@ namespace Hotline.Application.Snapshot;
 public class DefaultSnapshotApplication : SnapshotApplicationBase
     , ISnapshotApplication, IScopeDependency
 {
-    public DefaultSnapshotApplication(IThirdIdentiyService thirdLoginService, IRepository<Industry> industryRepository, ISnapshotBulletinRepository bulletinRepository, ISessionContext sessionContext, IRepository<RedPackRecord> redPackRecordRepository, IRepository<Order> orderRepository, IThirdAccountRepository thirdAccountRepository, IRepository<OrderSnapshot> orderSnapshotRepository, ISystemSettingCacheManager systemSettingCacheManager, ISystemAreaDomainService systemAreaDomainService, IFileRepository fileRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, IRepository<WorkflowTrace> workflowTraceRepository) : base(thirdLoginService, industryRepository, bulletinRepository, sessionContext, redPackRecordRepository, orderRepository, thirdAccountRepository, orderSnapshotRepository, systemSettingCacheManager, systemAreaDomainService, fileRepository, systemDicDataCacheManager, snapshotOrderPublishRepository, workflowTraceRepository)
+    public DefaultSnapshotApplication(IThirdIdentiyService thirdLoginService, IRepository<Industry> industryRepository, ISnapshotBulletinRepository bulletinRepository, ISessionContext sessionContext, IRepository<RedPackRecord> redPackRecordRepository, IRepository<Order> orderRepository, IThirdAccountRepository thirdAccountRepository, IRepository<OrderSnapshot> orderSnapshotRepository, ISystemSettingCacheManager systemSettingCacheManager, ISystemAreaDomainService systemAreaDomainService, IFileRepository fileRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, IRepository<WorkflowTrace> workflowTraceRepository,  IPractitionerRepository practitionerRepository, IRepository<SystemArea> systemAreaRepository) : base(thirdLoginService, industryRepository, bulletinRepository, sessionContext, redPackRecordRepository, orderRepository, thirdAccountRepository, orderSnapshotRepository, systemSettingCacheManager, systemAreaDomainService, fileRepository, systemDicDataCacheManager, snapshotOrderPublishRepository, workflowTraceRepository, practitionerRepository,  systemAreaRepository)
     {
     }
 }

+ 15 - 0
src/Hotline.Application/Snapshot/ISnapshotApplication.cs

@@ -115,4 +115,19 @@ public interface ISnapshotApplication
     /// <param name="requestAborted"></param>
     /// <returns></returns>
     Task<string> GetRedPackReceivedTotalAsync(CancellationToken requestAborted);
+
+    /// <summary>
+    /// 获取从业人员集合
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    Task<IList<PractitionerItemOutDto>> GetPractitionerItemsAsync(PractitionerItemInDto dto, CancellationToken cancellationToken);
+
+    /// <summary>
+    /// 批量添加从业人员
+    /// </summary>
+    /// <param name="dtos"></param>
+    /// <returns></returns>
+    Task AddPractitionerAsync(IList<AddPractitionerInDto> dtos);
 }

+ 55 - 1
src/Hotline.Application/Snapshot/SnapshotApplicationBase.cs

@@ -51,12 +51,14 @@ public abstract class SnapshotApplicationBase
     private readonly IRepository<OrderSnapshot> _orderSnapshotRepository;
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
     private readonly ISystemAreaDomainService _systemAreaDomainService;
+    private readonly IRepository<SystemArea> _systemAreaRepository;
     private readonly IFileRepository _fileRepository;
     private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
     private readonly ISnapshotOrderPublishRepository _snapshotOrderPublishRepository;
     private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
+    private readonly IPractitionerRepository _practitionerRepository;
 
-    public SnapshotApplicationBase(IThirdIdentiyService thirdLoginService, IRepository<Industry> industryRepository, ISnapshotBulletinRepository bulletinRepository, ISessionContext sessionContext, IRepository<RedPackRecord> redPackRecordRepository, IRepository<Order> orderRepository, IThirdAccountRepository thirdAccountRepository, IRepository<OrderSnapshot> orderSnapshotRepository, ISystemSettingCacheManager systemSettingCacheManager, ISystemAreaDomainService systemAreaDomainService, IFileRepository fileRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, IRepository<WorkflowTrace> workflowTraceRepository)
+    public SnapshotApplicationBase(IThirdIdentiyService thirdLoginService, IRepository<Industry> industryRepository, ISnapshotBulletinRepository bulletinRepository, ISessionContext sessionContext, IRepository<RedPackRecord> redPackRecordRepository, IRepository<Order> orderRepository, IThirdAccountRepository thirdAccountRepository, IRepository<OrderSnapshot> orderSnapshotRepository, ISystemSettingCacheManager systemSettingCacheManager, ISystemAreaDomainService systemAreaDomainService, IFileRepository fileRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, IRepository<WorkflowTrace> workflowTraceRepository, IPractitionerRepository practitionerRepository, IRepository<SystemArea> systemAreaRepository)
     {
         _thirdLoginService = thirdLoginService;
         _industryRepository = industryRepository;
@@ -72,6 +74,8 @@ public abstract class SnapshotApplicationBase
         _systemDicDataCacheManager = systemDicDataCacheManager;
         _snapshotOrderPublishRepository = snapshotOrderPublishRepository;
         _workflowTraceRepository = workflowTraceRepository;
+        _practitionerRepository = practitionerRepository;
+        _systemAreaRepository = systemAreaRepository;
     }
 
     /// <summary>
@@ -451,4 +455,54 @@ public abstract class SnapshotApplicationBase
         await _bulletinRepository.UpdateAsync(bulletin);
     }
 
+    #region 从业人员
+
+    /// <summary>
+    /// 添加从业人员
+    /// </summary>
+    /// <param name="dtos"></param>
+    /// <returns></returns>
+    public async Task AddPractitionerAsync(IList<AddPractitionerInDto> dtos)
+    {
+        foreach (var item in dtos)
+        {
+            var entity = item.Adapt<Practitioner>();
+            switch (item.Gender.Trim())
+            {
+                case "男":
+                    entity.Gender = EGender.Male;
+                    break;
+                case "女":
+                    entity.Gender = EGender.Female;
+                    break;
+                default:
+                    entity.Gender = EGender.Unknown;
+                    break;
+            }
+            var area = await _systemAreaRepository.Queryable()
+                .Where(m => m.AreaName == item.AreaName)
+                .FirstAsync();
+            entity.SystemAreaId = area.Id;
+            entity.SystemAreaName = area.AreaName;
+            await _practitionerRepository.AddAsync(entity);
+        }
+    }
+
+    /// <summary>
+    /// 获取从业人员
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<IList<PractitionerItemOutDto>> GetPractitionerItemsAsync(PractitionerItemInDto dto, CancellationToken cancellationToken)
+    {
+        var items = await _practitionerRepository.Queryable()
+            .Where(m => m.SystemAreaId == dto.AreaId)
+            .OrderBy("RANDOM()")
+            .Select<PractitionerItemOutDto>()
+            .Take(dto.Count)
+            .ToListAsync(cancellationToken);
+        return items;
+    }
+    #endregion
 }

+ 1 - 1
src/Hotline.Application/Snapshot/ZiGongSnapshotApplication.cs

@@ -22,7 +22,7 @@ namespace Hotline.Application.Snapshot;
 [Injection(AppScopes = EAppScope.ZiGong)]
 public class ZiGongSnapshotApplication : SnapshotApplicationBase, ISnapshotApplication, IScopeDependency
 {
-    public ZiGongSnapshotApplication(IThirdIdentiyService thirdLoginService, IRepository<Industry> industryRepository, ISnapshotBulletinRepository bulletinRepository, ISessionContext sessionContext, IRepository<RedPackRecord> redPackRecordRepository, IRepository<Order> orderRepository, IThirdAccountRepository thirdAccountRepository, IRepository<OrderSnapshot> orderSnapshotRepository, ISystemSettingCacheManager systemSettingCacheManager, ISystemAreaDomainService systemAreaDomainService, IFileRepository fileRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, IRepository<WorkflowTrace> workflowTraceRepository) : base(thirdLoginService, industryRepository, bulletinRepository, sessionContext, redPackRecordRepository, orderRepository, thirdAccountRepository, orderSnapshotRepository, systemSettingCacheManager, systemAreaDomainService, fileRepository, systemDicDataCacheManager, snapshotOrderPublishRepository, workflowTraceRepository)
+    public ZiGongSnapshotApplication(IThirdIdentiyService thirdLoginService, IRepository<Industry> industryRepository, ISnapshotBulletinRepository bulletinRepository, ISessionContext sessionContext, IRepository<RedPackRecord> redPackRecordRepository, IRepository<Order> orderRepository, IThirdAccountRepository thirdAccountRepository, IRepository<OrderSnapshot> orderSnapshotRepository, ISystemSettingCacheManager systemSettingCacheManager, ISystemAreaDomainService systemAreaDomainService, IFileRepository fileRepository, ISystemDicDataCacheManager systemDicDataCacheManager, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, IRepository<WorkflowTrace> workflowTraceRepository, IPractitionerRepository practitionerRepository, IRepository<SystemArea> systemAreaRepository) : base(thirdLoginService, industryRepository, bulletinRepository, sessionContext, redPackRecordRepository, orderRepository, thirdAccountRepository, orderSnapshotRepository, systemSettingCacheManager, systemAreaDomainService, fileRepository, systemDicDataCacheManager, snapshotOrderPublishRepository, workflowTraceRepository, practitionerRepository, systemAreaRepository)
     {
     }
 }

+ 18 - 0
src/Hotline.Repository.SqlSugar/Snapshot/PractitionerRepository.cs

@@ -0,0 +1,18 @@
+using Hotline.Repository.SqlSugar.DataPermissions;
+using Hotline.Snapshot;
+using Hotline.Snapshot.Interfaces;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Dependency;
+
+namespace Hotline.Repository.SqlSugar.Snapshot;
+public class PractitionerRepository : BaseRepository<Practitioner>, IPractitionerRepository, IScopeDependency
+{
+    public PractitionerRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+    {
+    }
+}

+ 62 - 0
src/Hotline.Share/Dtos/Snapshot/PractitionerDto.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.Snapshot;
+public class AddPractitionerInDto
+{
+    /// <summary>
+    /// 名字
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 性别
+    /// </summary>
+    public string Gender { get; set; }
+
+    /// <summary>
+    /// 区域
+    /// </summary>
+    public string AreaName { get; set; }
+
+    /// <summary>
+    /// 电话
+    /// </summary>
+    public string PhoneNumber { get; set; }
+
+    /// <summary>
+    /// 街道
+    /// </summary>
+    public string Street { get; set; }
+}
+
+public class PractitionerItemInDto
+{
+    /// <summary>
+    /// 区域Id
+    /// </summary>
+    [Required]
+    public string AreaId { get; set; }
+
+    /// <summary>
+    /// 数量(默认:10)
+    /// </summary>
+    public int Count { get; set; } = 10;
+}
+
+public class PractitionerItemOutDto
+{
+    /// <summary>
+    /// Id
+    /// </summary>
+    public string Id { get; set; }
+
+    /// <summary>
+    /// 名字
+    /// </summary>
+    public string Name { get; set; }
+}

+ 12 - 0
src/Hotline/Snapshot/Interfaces/IPractitionerRepository.cs

@@ -0,0 +1,12 @@
+using Hotline.Settings;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Snapshot.Interfaces;
+public interface IPractitionerRepository : IRepository<Practitioner>
+{
+}

+ 53 - 0
src/Hotline/Snapshot/Practitioner.cs

@@ -0,0 +1,53 @@
+using Hotline.Share.Enums.Order;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Snapshot;
+
+/// <summary>
+/// 区域从业人员
+/// </summary>
+[Description("区域从业人员")]
+public class Practitioner : FullStateEntity
+{
+    /// <summary>
+    /// 名字
+    /// </summary>
+    [SugarColumn(ColumnDescription = "姓名")]
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 区域Id
+    /// </summary>
+    [SugarColumn(ColumnDescription = "区域Id")]
+    public string SystemAreaId { get; set; }
+
+    /// <summary>
+    /// 区域名称
+    /// </summary>
+    [SugarColumn(ColumnDescription = "区域名称")]
+    public string SystemAreaName { get; set; }
+
+    /// <summary>
+    /// 详细街道
+    /// </summary>
+    [SugarColumn(ColumnDescription = "街道")]
+    public string Street { get; set; }
+
+    /// <summary>
+    /// 电话
+    /// </summary>
+    [SugarColumn(ColumnDescription = "电话")]
+    public string PhoneNumber { get; set; }
+
+    /// <summary>
+    /// 性别
+    /// </summary>
+    public EGender Gender { get; set; }
+}