瀏覽代碼

工单创建新增行业字段

qinchaoyue 4 月之前
父節點
當前提交
537fb9874f

+ 12 - 0
src/Hotline.Api/Controllers/OrderController.cs

@@ -71,6 +71,7 @@ using Hotline.FlowEngine.Notifications;
 using Hotline.Share.Dtos.Order.Detail;
 using Hotline.Snapshot.Interfaces;
 using Hotline.Snapshot.Notifications;
+using Hotline.Snapshot;
 
 namespace Hotline.Api.Controllers;
 
@@ -3550,6 +3551,17 @@ public class OrderController : BaseController
 
         await _orderDomainService.AddAsync(order, true, HttpContext.RequestAborted);
 
+        if (_systemSettingCacheManager.Snapshot && dto.IndustryId.NotNullOrEmpty() && dto.IndustryName.NotNullOrEmpty())
+        {
+            var snapshot = new OrderSnapshot
+            {
+                Id = order.Id,
+                IndustryId = dto.IndustryId,
+                IndustryName = dto.IndustryName
+            };
+            await _orderSnapshotRepository.AddAsync(snapshot, HttpContext.RequestAborted);
+        }
+
         //订阅此事件的内部处理工单数据只能更新各自业务的字段,不能全部更新
         //新增工单其他处理事件  (受理短信)
         if (!string.IsNullOrEmpty(order.Contact) && order.Contact.Length == 11)

+ 38 - 3
src/Hotline.Application.Tests/Controller/OrderControllerTest.cs

@@ -15,6 +15,7 @@ using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar;
+using Hotline.Repository.SqlSugar.Snapshot;
 using Hotline.Settings;
 using Hotline.Settings.Hotspots;
 using Hotline.Share.Dtos.File;
@@ -64,8 +65,10 @@ public class OrderControllerTest : TestBase
     private readonly IRepository<CallidRelation> _callIdRelationRepository;
     private readonly XingTangCallApplication _defaultCallApplication;
     private readonly ISqlSugarClient _capSqlClient;
+    private readonly IIndustryRepository _industryRepository;
+    private readonly IOrderSnapshotRepository _orderSnapshotRepository;
 
-    public OrderControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IRepository<Hotspot> hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, OrderServiceMock orderServiceMock, IRepository<OrderPublish> orderPublishRepository, INotificationHandler<EndWorkflowNotify> orderPublishEndWorkflowHandler, IOrderVisitRepository orderVisitRepository, IRepository<SystemSetting> systemSettingRepository, ISystemSettingCacheManager systemSettingCacheManager, IRepository<CallNative> callNativeRepository, IRepository<CallidRelation> callIdRelationRepository, XingTangCallApplication defaultCallApplication, ISugarUnitOfWork<CapDbContext> capDbContext, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdService, IThirdAccountRepository thirdAccount) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService, thirdAccount)
+    public OrderControllerTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IRepository<Hotspot> hotspotRepository, OrderController orderController, IOrderRepository orderRepository, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, OrderServiceMock orderServiceMock, IRepository<OrderPublish> orderPublishRepository, INotificationHandler<EndWorkflowNotify> orderPublishEndWorkflowHandler, IOrderVisitRepository orderVisitRepository, IRepository<SystemSetting> systemSettingRepository, ISystemSettingCacheManager systemSettingCacheManager, IRepository<CallNative> callNativeRepository, IRepository<CallidRelation> callIdRelationRepository, XingTangCallApplication defaultCallApplication, ISugarUnitOfWork<CapDbContext> capDbContext, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdService, IThirdAccountRepository thirdAccount, IIndustryRepository industryRepository, IOrderSnapshotRepository orderSnapshotRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdService, thirdAccount)
     {
         _hotspotRepository = hotspotRepository;
         _orderController = orderController;
@@ -84,6 +87,8 @@ public class OrderControllerTest : TestBase
         _callIdRelationRepository = callIdRelationRepository;
         _defaultCallApplication = defaultCallApplication;
         _capSqlClient = capDbContext.Db;
+        _industryRepository = industryRepository;
+        _orderSnapshotRepository = orderSnapshotRepository;
     }
 
     /// <summary>
@@ -102,7 +107,7 @@ public class OrderControllerTest : TestBase
             .With(m => m.Id, Ulid.NewUlid().ToString())
             .With(m => m.CallNo, callNo)
             .With(m => m.Direction, ECallDirection.In)
-            .With(m => m.IsDeleted , false)
+            .With(m => m.IsDeleted, false)
             .Create();
         await _callNativeRepository.AddAsync(inDto);
 
@@ -111,7 +116,7 @@ public class OrderControllerTest : TestBase
             .With(m => m.Direction, ECallDirection.Out)
             .With(m => m.CallNo, callNo)
             .With(m => m.AudioFile, string.Empty)
-            .With(m => m.IsDeleted , false)
+            .With(m => m.IsDeleted, false)
             .Create();
         await _callNativeRepository.AddAsync(inDto2);
         var callOrder = new CallidRelation
@@ -167,6 +172,36 @@ public class OrderControllerTest : TestBase
         order.ShouldNotBeNull();
     }
 
+    /// <summary>
+    /// 创建随手拍工单
+    /// 验证随手拍工单是否能正常创建
+    /// </summary>
+    /// <returns></returns>
+    [Fact]
+    public async Task OrderSnapshot_Test()
+    {
+        var industryItems = await _industryRepository.Queryable() .Select(d => new { d.Id, d.Name, }) .ToListAsync();
+        var industry = industryItems.First();
+
+        SetZuoXi();
+        var order = _orderServiceMock.CreateOrder(industryId:industry.Id, industryName: industry.Name)
+            .办理到派单员()
+            .办理到归档(SetPaiDanYuan, data =>
+            {
+                data.IsEvasive = true;
+                data.IsInactively = true;
+            })
+            .GetCreateResult();
+        var orderEntity = await _orderRepository.GetAsync(order.Id);
+        orderEntity.ShouldNotBeNull();
+
+        var snapshot = await _orderSnapshotRepository.GetAsync(m => m.Id == order.Id);
+        snapshot.ShouldNotBeNull();
+        snapshot.IndustryId.ShouldBe(industry.Id);
+        snapshot.IndustryName.ShouldBe(industry.Name);
+    }
+
+
     /// <summary>
     /// 验证中心直办工单归档后 自动发布
     /// 是否推诿, 是否不积极

+ 4 - 2
src/Hotline.Application.Tests/Mock/OrderServiceMock.cs

@@ -79,7 +79,7 @@ public class OrderServiceMock
         return this;
     }
 
-    public OrderServiceMock CreateOrder(string callId = "")
+    public OrderServiceMock CreateOrder(string callId = "", string industryId = "", string industryName = "")
     {
         var json = "{\"sourceChannel\":\"因特网\",\"sourceChannelCode\":\"YTW\",\"transferPhone\":null,\"fromPhone\":null,\"acceptorName\":\"单元测试\",\"acceptorStaffNo\":\"\",\"fromName\":\"1233333333\",\"fromGender\":1,\"identityType\":1,\"licenceType\":null,\"licenceTypeCode\":null,\"licenceNo\":null,\"ageRange\":null,\"ageRangeCode\":null,\"contact\":\"12333333333\",\"isSecret\":false,\"acceptSms\":false,\"no\":null,\"title\":\"\",\"hotspotId\":\"1912\",\"eventCategoryId\":null,\"incidentTime\":null,\"incidentPurpose\":null,\"areaCode\":\"519800\",\"city\":\"省内\",\"street\":null,\"isRepeat\":\"false\",\"pushType\":null,\"pushTypeCode\":null,\"content\":\"单元测试内容\",\"duplicateIds\":[],\"duplicateTitle\":null,\"callAddress\":null,\"repeatableEventDetails\":[],\"orderExtension\":null,\"transpond\":false,\"isEnforcementOrder\":false,\"focusOnEventsArr\":[],\"focusOnEvents\":null,\"isFormalistWorkOrder\":false,\"isSensitiveWorkOrders\":false,\"isUrgent\":false,\"isThreePartyConference\":false,\"is24HoursComplete\":false,\"company\":null,\"orderPushTypes\":[],\"acceptType\":\"咨询\",\"acceptTypeCode\":\"10\",\"files\":[],\"hotspotSpliceName\":\"互联互通-转接乐山市12345\",\"hotspotName\":\"转接乐山市12345\",\"hotspotCode\":\"1912\",\"hotspotExternal\":\"19\",\"county\":\"\",\"town\":\"\"}";
         AddOrderDto = json.FromJson<AddOrderDto>();
@@ -89,6 +89,8 @@ public class OrderServiceMock
             AddOrderDto.SourceChannel = "电话";
             AddOrderDto.SourceChannelCode = AppDefaults.SourceChannel.DianHua;
         }
+        AddOrderDto.IndustryId = industryId;
+        AddOrderDto.IndustryName = industryName;
         AddOrderDto.Title = "单元测试" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
         CreateOrderOutDto = _orderController.Add(AddOrderDto).GetAwaiter().GetResult().ToJson().FromJson<CreateOrderOutDto>();
         return this;
@@ -301,7 +303,7 @@ public class OrderServiceMock
         aciton?.Invoke();
         var baseData = _orderController.PublishOrderPageBase(CreateOrderOutDto.Id).GetAwaiter().GetResult();
         var inDto = new PublishOrderDto
-        { 
+        {
             Id = CreateOrderOutDto.Id,
             PublishState = false,
             ArrangeTitle = baseData.OrderTitle,

+ 15 - 0
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -1335,6 +1335,21 @@ namespace Hotline.Share.Dtos.Order
         /// 工单推送分类
         /// </summary>
         public List<OrderPushTypeDto>? OrderPushTypes { get; set; }
+
+        #region 随手拍
+        /// <summary>
+        /// 行业Id
+        /// <inheritdoc cref="Industry"/> 表的Id
+        /// </summary>
+        public string? IndustryId { get; set; }
+
+        /// <summary>
+        /// 行业名称
+        /// <inheritdoc cref="Industry"/> 表的Name
+        /// </summary>
+        public string? IndustryName { get; set; }
+
+        #endregion
     }
 
     public record CanLinkCallRecordOrderDto : PagedKeywordRequest