瀏覽代碼

Merge branch 'master' of http://git.fwt.com/Hotline/hotline

dss 2 年之前
父節點
當前提交
333d36c293

+ 3 - 3
src/Hotline.Api/Controllers/OrderController.cs

@@ -68,7 +68,7 @@ public class OrderController : BaseController
     [HttpGet]
     public async Task<PagedDto<OrderDto>> Query([FromQuery] QueryOrderDto dto)
     {
-        var (total, items) = await _orderRepository.Queryable(workflowFilter: false)
+        var (total, items) = await _orderRepository.Queryable()
             .Includes(d => d.Employee)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword) || d.No.Contains(dto.Keyword))
             .WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content))
@@ -114,12 +114,12 @@ public class OrderController : BaseController
     [HttpGet("{id}")]
     public async Task<OrderDto> Get(string id)
     {
-        var order = await _orderRepository.Queryable(workflowFilter: false)
+        var order = await _orderRepository.Queryable()
             .Includes(d => d.Employee)
             .Includes(d => d.OrderComplain)
             .Includes(d => d.OrderReport)
             .FirstAsync(d => d.Id == id);
-        if (!string.IsNullOrEmpty(order.WorkflowId))
+        if (!string.IsNullOrEmpty(order?.WorkflowId))
             order.Workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSupplements: true, cancellationToken: HttpContext.RequestAborted);
 
         return _mapper.Map<OrderDto>(order);

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

@@ -275,6 +275,18 @@ public class WorkflowController : BaseController
         await _workflowDomainService.TerminateAsync(workflowId, HttpContext.RequestAborted);
     }
 
+    /// <summary>
+    /// 补充
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPost("supplement")]
+    public async Task Supplement([FromBody] SupplementDto dto)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId);
+        await _workflowDomainService.SupplementAsync(workflow, dto, HttpContext.RequestAborted);
+    }
+
     /// <summary>
     /// 获取跳转参数
     /// </summary>

+ 0 - 9
src/Hotline.Api/appsettings.Development.json

@@ -56,15 +56,6 @@
   "Cors": {
     "Origins": [ "http://localhost:8888", "http://admin.hotline.fw.com", "http://hotline.fw.com" ]
   },
-  "WorkTimeSettings": {
-    "MorningBegin": "08:00",
-    "MorningEnd": "12:00",
-    "AfterBegin": "15:00",
-    "AfterEnd": "21:00",
-    "WorkDay": [ 1, 2, 3, 4, 5, 0, 6 ],
-    "WorkCategory": "08da9b9f-a35d-4ade-8ea7-55e8abbcdefd",
-    "RestCategory": "08daa5f5-ac7a-4ced-8295-1c78baa15f9e"
-  },
   "IdentityConfiguration": {
     "Password": {
       "RequiredLength": 8,

+ 0 - 9
src/Hotline.Api/appsettings.json

@@ -72,15 +72,6 @@
   "Cors": {
     "Origins": [ "http://localhost:8888", "http://admin.hotline.fw.com", "http://hotline.fw.com" ]
   },
-  //"WorkTimeSettings": {
-  //  "MorningBegin": "08:00",
-  //  "MorningEnd": "12:00",
-  //  "AfterBegin": "15:00",
-  //  "AfterEnd": "21:00",
-  //  "WorkDay": [ 1, 2, 3, 4, 5, 0, 6 ],
-  //  "WorkCategory": "08da9b9f-a35d-4ade-8ea7-55e8abbcdefd",
-  //  "RestCategory": "08daa5f5-ac7a-4ced-8295-1c78baa15f9e"
-  //},
   "Exceptionless": {
     "InUse": false,
     "ServerUrl": "http://log.fw.com",

+ 16 - 2
src/Hotline.Application/Mappers/MapperConfigs.cs

@@ -31,7 +31,7 @@ namespace Hotline.Application.Mappers
                 .Map(d => d.State, x => x.IsDeleted ? "已删除" : "正常")
                 .IgnoreIf((s, d) => s.Account == null, d => d.UserName)
                 .IgnoreIf((s, d) => s.Account == null, d => d.Roles)
-                ;
+                .IgnoreNullValues(true);
 
             config.NewConfig<Role, RoleDto>()
                 .Map(d => d.AccountIds, x => x.Accounts.Select(d => d.Id))
@@ -45,6 +45,13 @@ namespace Hotline.Application.Mappers
             config.ForType<WorkflowStep, WorkflowStep>()
                 .Ignore(d => d.Id);
 
+            config.ForType<WorkflowStep, WorkflowTrace>()
+                .Ignore(d => d.Id)
+                .Map(d => d.StepId, s => s.Id);
+
+            config.ForType<WorkflowSupplement, WorkflowSupplementDto>()
+                .IgnoreIf((s, d) => s.Creator == null, d => d.Creator);
+
             #endregion
 
             #region order
@@ -56,7 +63,14 @@ namespace Hotline.Application.Mappers
                 .IgnoreIf((s, d) => s.Employee == null, d => d.EmployeeName, d => d.EmployeeStaffNo)
                 .Map(d => d.EmployeeName, x => x.Employee.Name)
                 .Map(d => d.EmployeeStaffNo, x => x.Employee.StaffNo)
-                ;
+                .IgnoreNullValues(true);
+
+            config.ForType<AddOrderDto, Order>()
+                .IgnoreIf((s, d) => s.OrderComplain == null, d => d.OrderComplain)
+                .IgnoreIf((s, d) => s.OrderReport == null, d => d.OrderReport);
+
+            config.ForType<UpdateOrderDto, Order>()
+                .Inherits<AddOrderDto, Order>();
 
             #endregion
         }

+ 2 - 1
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionFilterBuilder.cs

@@ -44,7 +44,8 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
         var userId = _sessionContext.RequiredUserId;
         var orgCode = _sessionContext.RequiredOrgCode;
 
-        return d => d.AssignUserIds.Contains(userId) || d.AssignOrgCodes.Contains(orgCode);
+        return d => SqlFunc.JsonArrayAny(d.AssignUserIds, userId); //||
+                    //SqlFunc.JsonArrayAny(d.AssignOrgCodes, orgCode);
     }
 
     //public Expression<Func<TEntity, bool>> BuildIncludeFlowData<TEntity>() where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()

+ 1 - 1
src/Hotline.Repository.SqlSugar/Extensions/SqlSugarStartupExtensions.cs

@@ -172,7 +172,7 @@ namespace Hotline.Repository.SqlSugar.Extensions
             /***写AOP等方法***/
             db.Aop.OnLogExecuting = (sql, pars) =>
             {
-                //Log.Information(sql);
+                Log.Information(sql);
             };
             db.Aop.OnError = (exp) =>//SQL报错
             {

+ 1 - 1
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -38,7 +38,7 @@ namespace Hotline.Repository.SqlSugar.Orders
                 else if (order.AcceptType == EAcceptType.Report)
                 {
                     order.OrderReport.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
-                    await AddNav(order).Include(d=>d.OrderReport).ExecuteCommandAsync();
+                    await AddNav(order).Include(d => d.OrderReport).ExecuteCommandAsync();
                 }
                 else
                 {

+ 5 - 0
src/Hotline.Share/Dtos/FlowEngine/EndWorkflowDto.cs

@@ -11,4 +11,9 @@ public class EndWorkflowDto
     /// 附件
     /// </summary>
     public List<string> Additions { get; set; } = new();
+}
+
+public class SupplementDto : EndWorkflowDto
+{
+    public string WorkflowId { get; set; }
 }

+ 4 - 1
src/Hotline.Share/Dtos/FlowEngine/WorkflowDto.cs

@@ -1,4 +1,5 @@
-using Hotline.Share.Enums.FlowEngine;
+using Hotline.Share.Dtos.Users;
+using Hotline.Share.Enums.FlowEngine;
 using XF.Utility.EnumExtensions;
 
 namespace Hotline.Share.Dtos.FlowEngine
@@ -75,5 +76,7 @@ namespace Hotline.Share.Dtos.FlowEngine
         /// 附件
         /// </summary>
         public List<string> Additions { get; set; } = new();
+
+        public UserDto Creator { get; set; }
     }
 }

+ 35 - 8
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -27,7 +27,7 @@ namespace Hotline.Share.Dtos.Order
         /// 工单状态
         /// </summary>
         public EOrderStatus Status { get; set; }
-        
+
         /// <summary>
         /// 开始时间
         /// </summary>
@@ -56,9 +56,6 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public string No { get; set; }
 
-        public string AcceptTypeText => AcceptType.GetDescription();
-        public string EmergencyLevelText => EmergencyLevel.GetDescription();
-
         /// <summary>
         /// 受理人姓名
         /// </summary>
@@ -70,12 +67,43 @@ namespace Hotline.Share.Dtos.Order
         public string? EmployeeStaffNo { get; set; }
 
         public string WorkflowId { get; set; }
+        public WorkflowDto Workflow { get; set; }
+
+        /// <summary>
+        /// 来源渠道
+        /// </summary>
+        public string ChannelText => Channel.GetDescription();
+
+        /// <summary>
+        /// 来电/信人性别
+        /// </summary>
+        public string FromGenderText => FromGender.GetDescription();
+
+        /// <summary>
+        /// 来电/信人身份
+        /// </summary>
+        public string IdentityTypeText => IdentityType.GetDescription();
+
+        /// <summary>
+        /// 工单类型
+        /// </summary>
+        public string OrderTypeText => OrderType.GetDescription();
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string AcceptTypeText => AcceptType.GetDescription();
+
+        /// <summary>
+        /// 紧急程度
+        /// </summary>
+        public string EmergencyLevelText => EmergencyLevel.GetDescription();
 
         /// <summary>
         /// 超期时间描述(需求:超期3天、0.5天后超期)
         /// </summary>
         public string ExpiredText => CalculateExpiredText();
-        
+
         private string CalculateExpiredText()
         {
             //todo 完整处理方案:1.创建待过期表,Id,过期时间,即将过期时间等字段。2.延迟消息通知处理过期,删除子表数据,处理order过期状态字段。3.此处即可采用expiredStatus进行判断
@@ -94,7 +122,6 @@ namespace Hotline.Share.Dtos.Order
             }
         }
 
-        public WorkflowDto Workflow { get; set; }
     }
 
     public class UpdateOrderDto : AddOrderDto
@@ -247,11 +274,11 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 投诉
         /// </summary>
-        public OrderComplainDto OrderComplain { get; set; } = new();
+        public OrderComplainDto OrderComplain { get; set; }
 
         /// <summary>
         /// 举报
         /// </summary>
-        public OrderReportDto OrderReport { get; set; } = new();
+        public OrderReportDto OrderReport { get; set; }
     }
 }

+ 0 - 35
src/Hotline/FileStorage/File.cs

@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using XF.Domain.Repository;
-
-namespace Hotline.FileStorage
-{
-    public class File //: FullStateEntity
-    {
-        public EFileSType FileSType { get; set; }
-
-        public string Name { get; set; }
-
-        public string Extention { get; set; }
-
-        public string FullName { get; set; }
-
-        /// <summary>
-        /// 相对路劲
-        /// </summary>
-        public string Path { get; set; }
-
-        public string FullPath { get; set; }
-
-        public string Size { get; set; }
-    }
-
-    public enum EFileSType
-    {
-        Image = 0,
-
-    }
-}

+ 1 - 1
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -112,7 +112,7 @@ namespace Hotline.FlowEngine.Workflows
             if (withDefine)
                 query = query.Includes(d => d.Definition);
             if (withSupplements)
-                query = query.Includes(d => d.Supplements);
+                query = query.Includes(d => d.Supplements, d => d.Creator);
             if (withAssigns)
                 query = query.Includes(d => d.Assigns);
 

+ 5 - 1
src/Hotline/FlowEngine/Workflows/WorkflowSupplement.cs

@@ -1,4 +1,5 @@
-using SqlSugar;
+using Hotline.Users;
+using SqlSugar;
 using XF.Domain.Repository;
 
 namespace Hotline.FlowEngine.Workflows;
@@ -21,4 +22,7 @@ public class WorkflowSupplement : CreationEntity
     /// </summary>
     [SugarColumn(ColumnDataType = "varchar(2000)", IsJson = true)]
     public List<string> Additions { get; set; } = new();
+
+    [Navigate(NavigateType.OneToOne, nameof(CreatorId))]
+    public User Creator { get; set; }
 }

+ 4 - 0
src/Hotline/Hotline.csproj

@@ -22,4 +22,8 @@
     <ProjectReference Include="..\XF.Domain.Repository\XF.Domain.Repository.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="FileStorage\" />
+  </ItemGroup>
+
 </Project>

+ 1 - 1
src/Hotline/Orders/OrderDomainService.cs

@@ -30,7 +30,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     {
         if (order.AcceptType == EAcceptType.Complain && order.OrderComplain == null)
             throw UserFriendlyException.SameMessage("非法投诉参数");
-        if (order.AcceptType == EAcceptType.Complain && order.OrderReport == null)
+        if (order.AcceptType == EAcceptType.Report && order.OrderReport == null)
             throw UserFriendlyException.SameMessage("非法举报参数");
 
         order.Init(_sessionContext.RequiredUserId);

+ 4 - 0
src/XF.Domain.Repository/Entity.cs

@@ -157,6 +157,7 @@ public abstract class WorkflowEntity : FullStateEntity, IWorkflow
 
     public void Assign(EFlowAssignType type, string handler)
     {
+        handler = handler.ToLower();
         switch (type)
         {
             case EFlowAssignType.Org:
@@ -175,6 +176,7 @@ public abstract class WorkflowEntity : FullStateEntity, IWorkflow
 
     public void Assign(EFlowAssignType type, IEnumerable<string> handlers)
     {
+        handlers.ToList().ForEach(d => d.ToLower());
         switch (type)
         {
             case EFlowAssignType.Org:
@@ -250,6 +252,7 @@ public abstract class PositionWorkflowEntity : PositionEntity, IWorkflow
 
     public void Assign(EFlowAssignType type, string handler)
     {
+        handler = handler.ToLower();
         switch (type)
         {
             case EFlowAssignType.Org:
@@ -268,6 +271,7 @@ public abstract class PositionWorkflowEntity : PositionEntity, IWorkflow
 
     public void Assign(EFlowAssignType type, IEnumerable<string> handlers)
     {
+        handlers.ToList().ForEach(d => d.ToLower());
         switch (type)
         {
             case EFlowAssignType.Org: