فهرست منبع

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

dss 2 سال پیش
والد
کامیت
06b9a65155
31فایلهای تغییر یافته به همراه209 افزوده شده و 98 حذف شده
  1. 52 0
      src/Hotline.Api/Controllers/HotSpotController.cs
  2. 9 1
      src/Hotline.Api/Controllers/OrderController.cs
  3. 2 1
      src/Hotline.Application/Handlers/FlowEngine/NextStepHandler.cs
  4. 1 1
      src/Hotline.Application/Handlers/FlowEngine/StartWorkflowHandler.cs
  5. 10 0
      src/Hotline.Application/Mappers/MapperConfigs.cs
  6. 22 4
      src/Hotline.Repository.SqlSugar/BaseRepository.cs
  7. 10 12
      src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionFilterBuilder.cs
  8. 3 2
      src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionManager.cs
  9. 3 2
      src/Hotline.Repository.SqlSugar/DataPermissions/IDataPermissionManager.cs
  10. 32 0
      src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs
  11. 16 8
      src/Hotline.Share/Dtos/Order/OrderComplainDto.cs
  12. 3 1
      src/Hotline.Share/Dtos/Order/OrderDto.cs
  13. 1 1
      src/Hotline.Share/Dtos/Order/OrderReportDto.cs
  14. 0 13
      src/Hotline.Share/Enums/Order/EAgeRange.cs
  15. 0 6
      src/Hotline.Share/Enums/Order/ECitizenStatus1.cs
  16. 8 9
      src/Hotline.Share/Enums/Order/EComplainType.cs
  17. 0 6
      src/Hotline.Share/Enums/Order/ENationality.cs
  18. 0 6
      src/Hotline.Share/Enums/Order/EPatentType.cs
  19. 0 6
      src/Hotline.Share/Enums/Order/EProviderType.cs
  20. 0 6
      src/Hotline.Share/Enums/Order/ESalesMode.cs
  21. 6 1
      src/Hotline/Orders/Citizen.cs
  22. 4 1
      src/Hotline/Orders/HotSpotType.cs
  23. 1 1
      src/Hotline/Orders/IOrderDomainService.cs
  24. 1 0
      src/Hotline/Orders/IOrderRepository.cs
  25. 1 1
      src/Hotline/Orders/Order.cs
  26. 2 1
      src/Hotline/Orders/OrderComplain.cs
  27. 3 5
      src/Hotline/Orders/OrderDomainService.cs
  28. 6 2
      src/Hotline/Orders/OrderExtensionEntity.cs
  29. 5 0
      src/Hotline/Settings/SysDicTypeConsts.cs
  30. 1 1
      src/Hotline/Settings/SystemDataAuthority.cs
  31. 7 0
      src/XF.Domain.Repository/IRepositorySqlSugar.cs

+ 52 - 0
src/Hotline.Api/Controllers/HotSpotController.cs

@@ -0,0 +1,52 @@
+using Hotline.Orders;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Hotline.Api.Controllers
+{
+    /// <summary>
+    /// 热点
+    /// </summary>
+    public class HotSpotController : BaseController
+    {
+        private readonly IHotSpotTypeRepository _hotSpotTypeRepository;
+
+        public HotSpotController(IHotSpotTypeRepository hotSpotTypeRepository)
+        {
+            _hotSpotTypeRepository = hotSpotTypeRepository;
+        }
+
+        /// <summary>
+        /// 查询子项
+        /// </summary>
+        [HttpGet("children")]
+        public async Task<IReadOnlyList<HotSpotType>> GetChildren([FromQuery] string? id)
+        {
+            return await _hotSpotTypeRepository.Queryable()
+                .Where(x => x.ParentId == id)
+                .OrderBy(d=>d.HotSpotName)
+                .ToListAsync();
+        }
+
+        /// <summary>
+        /// 查询热点数据(包含所有根目录及所查热点的所有上级对象)
+        /// <remarks>
+        /// 编辑页面使用
+        /// </remarks>
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpGet("{id}/with-parents")]
+        public async Task<IReadOnlyList<HotSpotType>> GetWithParents(string id)
+        {
+            var targetList = await _hotSpotTypeRepository.Queryable()
+                .ToTreeAsync(d => d.Children, d => d.ParentId, null, new[] { id });
+            var topIds = targetList.Select(d => d.Id);
+            var hotspots = await _hotSpotTypeRepository.Queryable()
+                .Where(d => string.IsNullOrEmpty(d.ParentId) && !topIds.Contains(d.Id))
+                .ToListAsync();
+            hotspots.AddRange(targetList);
+            return hotspots.OrderBy(d=>d.HotSpotName).ToList();
+        }
+    }
+}

+ 9 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -30,6 +30,7 @@ public class OrderController : BaseController
     private readonly IHotSpotTypeRepository _hotSpotTypeRepository;
     private readonly ISystemDomainService _systemDomainService;
     private readonly ISystemOrganizeRepository _organizeRepository;
+    private readonly ISessionContext _sessionContext;
     private readonly IMapper _mapper;
 
     public OrderController(
@@ -40,6 +41,7 @@ public class OrderController : BaseController
         IHotSpotTypeRepository hotSpotTypeRepository,
         ISystemDomainService systemDomainService,
         ISystemOrganizeRepository organizeRepository,
+        ISessionContext sessionContext,
         IMapper mapper)
     {
         _orderDomainService = orderDomainService;
@@ -49,6 +51,7 @@ public class OrderController : BaseController
         _hotSpotTypeRepository = hotSpotTypeRepository;
         _systemDomainService = systemDomainService;
         _organizeRepository = organizeRepository;
+        _sessionContext = sessionContext;
         _mapper = mapper;
     }
 
@@ -61,6 +64,7 @@ public class OrderController : BaseController
     public async Task<PagedDto<OrderDto>> Query([FromQuery] QueryOrderDto dto)
     {
         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))
             .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptType))
@@ -104,6 +108,7 @@ public class OrderController : BaseController
     public async Task<OrderDto> Get(string id)
     {
         var order = await _orderRepository.Queryable()
+            .Includes(d=>d.Employee)
             .Includes(d => d.OrderComplain)
             .Includes(d => d.OrderReport)
             .FirstAsync(d => d.Id == id);
@@ -122,6 +127,7 @@ public class OrderController : BaseController
     public async Task<string> Add([FromBody] AddOrderDto dto)
     {
         var order = _mapper.Map<Order>(dto);
+        order.EmployeeId = _sessionContext.RequiredUserId;
         return await _orderDomainService.AddAsync(order, HttpContext.RequestAborted);
     }
 
@@ -248,21 +254,23 @@ public class OrderController : BaseController
             ReportClassifyOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ReportClassify),
             SalesModeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.SalesMode),
             ECommercePlatformOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ECommercePlatform),
+            PatentTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.PatentType),
             ComplainTypeOptions = EnumExts.GetDescriptions<EComplainType>(),
             ComplainTargetOptions = EnumExts.GetDescriptions<EOrderTarget>(),
         };
         return rsp;
     }
 
-
     /// <summary>
     /// 获取热点
     /// </summary>
     /// <param name="parentId">父级ID</param>
     /// <returns></returns>
     [HttpGet("hotspottype-list-parent")]
+    [Obsolete]
     public async Task<List<HotSpotType>> GetHotSpotType(string? parentId)
     {
         return await _hotSpotTypeRepository.Queryable().Where(x => x.ParentId == parentId).ToListAsync();
     }
+
 }

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/NextStepHandler.cs

@@ -39,7 +39,8 @@ public class NextStepHandler : INotificationHandler<NextStepNotify>
             case WorkflowModuleConsts.OrderManage:
                 await _orderDomainService.OrderManageAsync(EOrderStatus.WaitForSign,
                     assignMode, notification.IsCountersignEnd, notification.IsCountersignStart,
-                    workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, cancellationToken);
+                    workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, workflow.ExpiredTime,
+                    cancellationToken);
                 break;
         }
     }

+ 1 - 1
src/Hotline.Application/Handlers/FlowEngine/StartWorkflowHandler.cs

@@ -45,7 +45,7 @@ namespace Hotline.Application.Handlers.FlowEngine
                 case WorkflowModuleConsts.OrderManage:
                     await _orderDomainService.OrderManageAsync(EOrderStatus.WaitForSign, assignMode,
                         false, notification.IsCountersignStart,
-                        workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, cancellationToken);
+                        workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, workflow.ExpiredTime, cancellationToken);
                     break;
             }
         }

+ 10 - 0
src/Hotline.Application/Mappers/MapperConfigs.cs

@@ -2,8 +2,10 @@
 using Hotline.FlowEngine.Definitions;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Identity.Roles;
+using Hotline.Orders;
 using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Roles;
 using Hotline.Share.Dtos.Users;
 using Hotline.Users;
@@ -44,6 +46,14 @@ namespace Hotline.Application.Mappers
                 .Ignore(d => d.Id);
 
             #endregion
+
+            #region order
+
+            config.NewConfig<Order, OrderDto>()
+                .Map(d => d.EmployeeName, x => x.Employee.Name)
+                .Map(d => d.EmployeeStaffNo, x => x.Employee.StaffNo);
+
+            #endregion
         }
     }
 }

+ 22 - 4
src/Hotline.Repository.SqlSugar/BaseRepository.cs

@@ -167,12 +167,30 @@ namespace Hotline.Repository.SqlSugar
 
         public UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities, UpdateNavRootOptions options) => Db.UpdateNav(entities, options);
 
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity) => Db.InsertNav(entity);
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity)
+        {
+            var dataPermissionManager = _dataPermissionFilterBuilder.DataPermissionManager;
+            entity.InitDatePermission(dataPermissionManager);
+            return Db.InsertNav(entity);
+        }
+
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity, InsertNavRootOptions options)
+        {
+            entity.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
+            return Db.InsertNav(entity, options);
+        }
 
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity, InsertNavRootOptions options) => Db.InsertNav(entity, options);
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities) => Db.InsertNav(entities);
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities)
+        {
+            entities.ForEach(d => d.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager));
+            return Db.InsertNav(entities);
+        }
 
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities, InsertNavRootOptions options) => Db.InsertNav(entities, options);
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities, InsertNavRootOptions options)
+        {
+            entities.ForEach(d => d.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager));
+            return Db.InsertNav(entities, options);
+        }
 
         public DeleteNavTaskInit<TEntity, TEntity> RemoveNav(TEntity entity) => Db.DeleteNav(entity);
         public DeleteNavTaskInit<TEntity, TEntity> RemoveNav(List<TEntity> entities) => Db.DeleteNav(entities);

+ 10 - 12
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionFilterBuilder.cs

@@ -22,15 +22,16 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
     public Expression<Func<TEntity, bool>> Build<TEntity>() where TEntity : class, IEntity<string>, IDataPermission, new()
     {
         var userId = _sessionContext.RequiredUserId;
-        var scheme = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
-        switch (scheme.QueryFilter)
+        var orgCode = _sessionContext.RequiredOrgCode;
+        var queryFilterType = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
+        switch (queryFilterType)
         {
             case EAuthorityType.Create:
                 return d => d.CreatorId == userId;
             case EAuthorityType.Org:
-                return d => d.CreatorOrgCode == scheme.OrgCode;
+                return d => d.CreatorOrgCode == orgCode;
             case EAuthorityType.OrgAndBelow:
-                return d => d.CreatorOrgCode.StartsWith(scheme.OrgCode);
+                return d => d.CreatorOrgCode.StartsWith(orgCode);
             case EAuthorityType.All:
                 return d => true;
             default:
@@ -41,25 +42,22 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
     public Expression<Func<TEntity, bool>> BuildIncludeFlowData<TEntity>() where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
     {
         var userId = _sessionContext.RequiredUserId;
-        var roles = _sessionContext.Roles;
         var orgCode = _sessionContext.RequiredOrgCode;
-        var scheme = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
+        var queryFilterType = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
 
-        switch (scheme.QueryFilter)
+        switch (queryFilterType)
         {
             case EAuthorityType.Create:
                 return d => d.CreatorId == userId
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignOrgCodes.Contains(orgCode);
             case EAuthorityType.Org:
-                return d => d.CreatorOrgCode == scheme.OrgCode
+                return d => d.CreatorOrgCode == orgCode
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignOrgCodes.Contains(orgCode)
-
-                            //todo 扩展sqlfunc || d.AssignRoles.Intersect(roles).Any()
-                            ;
+                    ;
             case EAuthorityType.OrgAndBelow:
-                return d => d.CreatorOrgCode.StartsWith(scheme.OrgCode)
+                return d => d.CreatorOrgCode.StartsWith(orgCode)
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignOrgCodes.Contains(orgCode);
             case EAuthorityType.All:

+ 3 - 2
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionManager.cs

@@ -20,10 +20,11 @@ public class DataPermissionManager : IDataPermissionManager, IScopeDependency
         _sessionContext = sessionContext;
     }
 
-    public DataPermissionScheme GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new()
+    public EAuthorityType GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new()
     {
         EAuthorityType queryFilter = GetCurrentQueryFilter(sessionContext.Roles, typeof(TEntity).Name);
-        return new DataPermissionScheme(queryFilter);
+        //return new DataPermissionScheme(queryFilter);
+        return queryFilter;
     }
 
     public (string orgId, string orgCode, string creatorId, string? areaId) GetDataPermissionOptions()

+ 3 - 2
src/Hotline.Repository.SqlSugar/DataPermissions/IDataPermissionManager.cs

@@ -1,10 +1,11 @@
-using XF.Domain.Authentications;
+using Hotline.Share.Enums.Settings;
+using XF.Domain.Authentications;
 using XF.Domain.Entities;
 
 namespace Hotline.Repository.SqlSugar.DataPermissions;
 
 public interface IDataPermissionManager
 {
-    DataPermissionScheme GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new();
+    EAuthorityType GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new();
     (string orgId, string orgCode, string creatorId, string? areaId) GetDataPermissionOptions();
 }

+ 32 - 0
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -5,15 +5,47 @@ using System.Text;
 using System.Threading.Tasks;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.DataPermissions;
+using Hotline.Repository.SqlSugar.Extensions;
+using Hotline.Share.Enums.Order;
 using SqlSugar;
 using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
 
 namespace Hotline.Repository.SqlSugar.Orders
 {
     public class OrderRepository : BaseRepositoryWorkflow<Order>, IOrderRepository, IScopeDependency
     {
+        private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
+
         public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
         {
+            _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
+        }
+
+        public async Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken)
+        {
+            if (order.OrderType == EOrderType.MarketSupervisionBy12315)
+            {
+                if (order.AcceptType == EAcceptType.Complain)
+                {
+                    if (order.OrderComplain == null)
+                        throw UserFriendlyException.SameMessage("非法投诉参数");
+                    order.OrderComplain.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
+                    await AddNav(order).Include(d => d.OrderComplain).ExecuteCommandAsync();
+                }
+                else if (order.AcceptType == EAcceptType.Report)
+                {
+                    if (order.OrderReport == null)
+                        throw UserFriendlyException.SameMessage("非法举报参数");
+                    order.OrderReport.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
+                    await AddNav(order).Include(d=>d.OrderReport).ExecuteCommandAsync();
+                }
+            }
+            else
+            {
+                await AddAsync(order, cancellationToken);
+            }
+            return order.Id;
         }
     }
 }

+ 16 - 8
src/Hotline.Share/Dtos/Order/OrderComplainDto.cs

@@ -34,7 +34,7 @@ public class OrderComplainDto : OrderExtensionDto
     /// <summary>
     /// 诉求类型,多选
     /// </summary>
-    public EComplainType? ComplainType { get; set; }
+    public List<EComplainType> ComplainTypes { get; set; } = new();
 
     #endregion
 }
@@ -56,19 +56,25 @@ public class OrderExtensionDto
     public string? LicenceNo { get; set; }
 
     /// <summary>
-    /// 提供方类型(投诉人类型)
+    /// 提供方身份类型
     /// </summary>
-    public EProviderType? ProviderType { get; set; }
+    public string? IdentityTypeCode { get; set; }
+
+    public string? IdentityType { get; set; }
 
     /// <summary>
     /// 提供方身份(投诉人身份)
     /// </summary>
-    public ECitizenStatus1? ProviderStatus { get; set; }
+    public string? IdentityCode { get; set; }
+
+    public string? Identity { get; set; }
 
     /// <summary>
     /// 国籍或地区
     /// </summary>
-    public ENationality? Nationality { get; set; }
+    public string? NationalityCode { get; set; }
+
+    public string? Nationality { get; set; }
 
     /// <summary>
     /// 民族
@@ -162,7 +168,8 @@ public class OrderExtensionDto
     /// <summary>
     /// 销售方式
     /// </summary>
-    public ESalesMode SalesMode { get; set; }
+    public string SalesModeCode { get; set; }
+    public string SalesMode { get; set; }
 
     /// <summary>
     /// 电商平台,销售方式为“网购”时展示该字段且必填
@@ -200,7 +207,8 @@ public class OrderExtensionDto
     /// <summary>
     /// 专利类型,“投诉问题类别”为“专利”时展示该字段,选填
     /// </summary>
-    public EPatentType? PatentType { get; set; }
+    public string? PatentTypeCode { get; set; }
+    public string? PatentType { get; set; }
 
     /// <summary>
     /// 专利号,“投诉问题类别”为“专利”时展示该字段,选填
@@ -230,7 +238,7 @@ public class OrderExtensionDto
     /// <summary>
     /// 产品有效期
     /// </summary>
-    public DateTime ProductExpriedTime { get; set; }
+    public DateTime ProductExpiredTime { get; set; }
 
     /// <summary>
     /// 生产厂家

+ 3 - 1
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -151,7 +151,9 @@ namespace Hotline.Share.Dtos.Order
         /// <summary>
         /// 年龄段
         /// </summary>
-        public EAgeRange? AgeRange { get; set; }
+        public string? AgeRangeCode { get; set; }
+
+        public string? AgeRange { get; set; }
 
         /// <summary>
         /// 联系电话

+ 1 - 1
src/Hotline.Share/Dtos/Order/OrderReportDto.cs

@@ -2,7 +2,7 @@
 
 namespace Hotline.Share.Dtos.Order;
 
-public class OrderReportDto
+public class OrderReportDto : OrderExtensionDto
 {
     #region 举报详情
 

+ 0 - 13
src/Hotline.Share/Enums/Order/EAgeRange.cs

@@ -1,13 +0,0 @@
-namespace Hotline.Share.Enums.Order;
-
-/// <summary>
-/// 年龄段
-/// </summary>
-public enum EAgeRange
-{
-    Unknown = 0,
-    LessThan12 = 1,
-    Between12And18 = 2,
-    Between19And65 = 3,
-    MoreThan65 = 4,
-}

+ 0 - 6
src/Hotline.Share/Enums/Order/ECitizenStatus1.cs

@@ -1,6 +0,0 @@
-namespace Hotline.Share.Enums.Order;
-
-public enum ECitizenStatus1
-{
-    //城镇、农村、港澳台同胞、外籍、军人、学生、其他
-}

+ 8 - 9
src/Hotline.Share/Enums/Order/EComplainType.cs

@@ -2,7 +2,6 @@
 
 namespace Hotline.Share.Enums.Order;
 
-[Flags]
 public enum EComplainType
 {
     //修理、重做、更换、退货、补足商品数量、退赔费用、赔偿损失、停止侵权、核定侵权责任
@@ -11,26 +10,26 @@ public enum EComplainType
     Repair = 1,
 
     [Description("重做")]
-    Redo = 1 << 1,
+    Redo = 2,
 
     [Description("更换")]
-    Change = 1 << 2,
+    Change = 3,
 
     [Description("退货")]
-    ReturnGoods = 1 << 3,
+    ReturnGoods = 4,
 
     [Description("补足商品数量")]
-    Complement = 1 << 4,
+    Complement = 5,
 
     [Description("退赔费用")]
-    Refund = 1 << 5,
+    Refund = 6,
 
     [Description("赔偿损失")]
-    Compensation = 1 << 6,
+    Compensation = 7,
 
     [Description("停止侵权")]
-    StopInfringement = 1 << 7,
+    StopInfringement = 8,
 
     [Description("核定侵权责任")]
-    AuthorizedInfringement = 1 << 8
+    AuthorizedInfringement = 9
 }

+ 0 - 6
src/Hotline.Share/Enums/Order/ENationality.cs

@@ -1,6 +0,0 @@
-namespace Hotline.Share.Enums.Order;
-
-public enum ENationality
-{
-    //中国、外国、港澳台地区
-}

+ 0 - 6
src/Hotline.Share/Enums/Order/EPatentType.cs

@@ -1,6 +0,0 @@
-namespace Hotline.Share.Enums.Order;
-
-public enum EPatentType
-{
-    //发明专利、实用新型专利、外观设计专利
-}

+ 0 - 6
src/Hotline.Share/Enums/Order/EProviderType.cs

@@ -1,6 +0,0 @@
-namespace Hotline.Share.Enums.Order;
-
-public enum EProviderType
-{
-    //生产企业、销售企业、服务企业、其他企业、个体工商户、自然人、群诉、其他类型
-}

+ 0 - 6
src/Hotline.Share/Enums/Order/ESalesMode.cs

@@ -1,6 +0,0 @@
-namespace Hotline.Share.Enums.Order;
-
-public enum ESalesMode
-{
-    //网购、现场、电视购物、电话购物、邮购
-}

+ 6 - 1
src/Hotline/Orders/Citizen.cs

@@ -43,7 +43,12 @@ namespace Hotline.Orders
         /// <summary>
         /// 年龄段
         /// </summary>
-        public EAgeRange? AgeRange { get; set; }
+        /// <summary>
+        /// 年龄段
+        /// </summary>
+        public string? AgeRangeCode { get; set; }
+
+        public string? AgeRange { get; set; }
 
         /// <summary>
         /// 联系电话

+ 4 - 1
src/Hotline/Orders/HotSpotType.cs

@@ -7,7 +7,7 @@ namespace Hotline.Orders
     /// <summary>
     /// 热点基础数据
     /// </summary>
-    public class HotSpotType: CreationSoftDeleteEntity
+    public class HotSpotType : CreationSoftDeleteEntity
     {
         public string HotSpotName { get; set; }
         [SugarColumn(IsNullable = true)]
@@ -23,5 +23,8 @@ namespace Hotline.Orders
         /// 生成的时候写入
         /// </summary>
         public string HotSpotFullName { get; set; }
+
+        [SugarColumn(IsIgnore = true)]
+        public List<HotSpotType> Children { get; set; }
     }
 }

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

@@ -22,6 +22,6 @@ namespace Hotline.Orders
         /// 工单办理(每个节点都会触发)
         /// </summary>
         Task OrderManageAsync(EOrderStatus status, FlowAssignMode assignMode, bool isCountersignEnd, bool isCountersignStart,
-            string workflowId, DateTime? currentStepTime, string? CurrentStepName, CancellationToken cancellationToken);
+            string workflowId, DateTime? currentStepTime, string? CurrentStepName, DateTime expiredTime, CancellationToken cancellationToken);
     }
 }

+ 1 - 0
src/Hotline/Orders/IOrderRepository.cs

@@ -9,5 +9,6 @@ namespace Hotline.Orders
 {
     public interface IOrderRepository : IRepositoryWorkflow<Order>
     {
+        Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken);
     }
 }

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

@@ -188,7 +188,7 @@ namespace Hotline.Orders
         public DateTime? ExpiredTime { get; set; }
 
         /// <summary>
-        /// 过期状态
+        /// 过期状态 //todo 延迟消息更新此字段
         /// </summary>
         public EExpiredStatus ExpiredStatus { get; set; }
 

+ 2 - 1
src/Hotline/Orders/OrderComplain.cs

@@ -41,7 +41,8 @@ public class OrderComplain : OrderExtensionEntity
     /// <summary>
     /// 诉求类型,多选
     /// </summary>
-    public EComplainType? ComplainType { get; set; }
+    [SugarColumn(ColumnDataType = "varchar(600)", IsJson = true)]
+    public List<EComplainType> ComplainTypes { get; set; } = new();
 
     #endregion
 }

+ 3 - 5
src/Hotline/Orders/OrderDomainService.cs

@@ -32,10 +32,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         order.No = GenerateNewOrderNo();
         //order.ExpiredTime = Calculate();//todo 根据配置获取办理时长再计算过期时间
 
-        await _orderRepository.AddNav(order)
-            .Include(d => d.OrderComplain)
-            .ExecuteCommandAsync();
-        return order.Id;
+        return await _orderRepository.AddOrderNavAsync(order, cancellationToken);
     }
 
     /// <summary>
@@ -55,7 +52,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     /// </summary>
     public async Task OrderManageAsync(EOrderStatus status, FlowAssignMode assignMode,
         bool isCountersignEnd, bool isCountersignStart,
-        string workflowId, DateTime? currentStepTime, string? CurrentStepName,
+        string workflowId, DateTime? currentStepTime, string? CurrentStepName, DateTime expiredTime,
         CancellationToken cancellationToken)
     {
         var order = await _orderRepository.GetAsync(d => d.WorkflowId == workflowId, cancellationToken);
@@ -78,6 +75,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 
         order.CurrentStepTime = currentStepTime;
         order.CurrentStepName = CurrentStepName;
+        order.ExpiredTime = expiredTime;
         order.Status = status;
 
         await _orderRepository.UpdateAsync(order, cancellationToken);

+ 6 - 2
src/Hotline/Orders/OrderExtensionEntity.cs

@@ -198,7 +198,11 @@ public class OrderExtensionEntity : FullStateEntity
     /// <summary>
     /// 专利类型,“投诉问题类别”为“专利”时展示该字段,选填
     /// </summary>
-    public EPatentType? PatentType { get; set; }
+    [SugarColumn(IsNullable = true)]
+    public string? PatentTypeCode { get; set; }
+
+    [SugarColumn(IsNullable = true)]
+    public string? PatentType { get; set; }
 
     /// <summary>
     /// 专利号,“投诉问题类别”为“专利”时展示该字段,选填
@@ -233,7 +237,7 @@ public class OrderExtensionEntity : FullStateEntity
     /// <summary>
     /// 产品有效期
     /// </summary>
-    public DateTime ProductExpriedTime { get; set; }
+    public DateTime ProductExpiredTime { get; set; }
 
     /// <summary>
     /// 生产厂家

+ 5 - 0
src/Hotline/Settings/SysDicTypeConsts.cs

@@ -89,4 +89,9 @@ public class SysDicTypeConsts
     /// 紧急程度
     /// </summary>
     public const string Urgency = "Urgency";
+
+    /// <summary>
+    /// 专利类型
+    /// </summary>
+    public const string PatentType = "PatentType";
 }

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

@@ -9,7 +9,7 @@ using XF.Domain.Repository;
 namespace Hotline.Settings
 {
     [Description("数据权限分配")]
-    public class SystemDataAuthority: CreationEntity
+    public class SystemDataAuthority : CreationEntity
     {
         /// <summary>
         /// 角色ID

+ 7 - 0
src/XF.Domain.Repository/IRepositorySqlSugar.cs

@@ -64,8 +64,15 @@ namespace XF.Domain.Repository
         UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities);
         UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities, UpdateNavRootOptions options);
 
+        /// <summary>
+        /// 未实现统一为子表赋值creatorId, creatorOrg等字段,插入前需手动赋值
+        /// </summary>
         InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity);
         InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity, InsertNavRootOptions options);
+
+        /// <summary>
+        /// 未实现统一为子表赋值creatorId, creatorOrg等字段,插入前需手动赋值
+        /// </summary>
         InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities);
         InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities, InsertNavRootOptions options);