Procházet zdrojové kódy

telgroup
orderredorecord

Jason před 1 rokem
rodič
revize
4c3e601f30

+ 54 - 4
src/Hotline.Api/Controllers/OrderController.cs

@@ -54,6 +54,7 @@ public class OrderController : BaseController
     private readonly IOrderDelayRepository _orderDelayRepository;
     private readonly ITimeLimitApplication _timeLimitApplication;
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
+    private readonly IOrderRedoRecordRepository _orderRedoRecordRepository;
 
     public OrderController(
         IOrderDomainService orderDomainService,
@@ -74,7 +75,8 @@ public class OrderController : BaseController
         ICapPublisher capPublisher,
         IOrderDelayRepository orderDelayRepository,
         ITimeLimitApplication timeLimitApplication,
-        ISystemSettingCacheManager systemSettingCacheManager)
+        ISystemSettingCacheManager systemSettingCacheManager,
+        IOrderRedoRecordRepository orderRedoRecordRepository)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -95,6 +97,7 @@ public class OrderController : BaseController
         _orderDelayRepository = orderDelayRepository;
         _timeLimitApplication = timeLimitApplication;
         _systemSettingCacheManager = systemSettingCacheManager;
+        _orderRedoRecordRepository = orderRedoRecordRepository;
     }
 
     #region 工单发布
@@ -254,12 +257,13 @@ public class OrderController : BaseController
             throw UserFriendlyException.SameMessage("未知工单回访");
         }
 
-        int count =await _orderVisitedRepository.CountAsync(x => x.OrderId == orderVisit.OrderId && x.VisitState == Share.Enums.Order.EVisitState.Visited,HttpContext.RequestAborted);
+        int visitCount =await _orderVisitedRepository.CountAsync(x => x.OrderId == orderVisit.OrderId && x.VisitState == Share.Enums.Order.EVisitState.Visited,HttpContext.RequestAborted);
+        int againCount = await _orderVisitedRepository.CountAsync(x => x.OrderId == orderVisit.OrderId && x.AgainState == EAgainState.DoAgain, HttpContext.RequestAborted);
         var visitSatisfaction = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitSatisfaction);
         var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
         var visitManner = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitManner);
 
-        return new { OrderVisitModel = orderVisit ,Count = count , VisitSatisfaction = visitSatisfaction, DissatisfiedReason= dissatisfiedReason, VisitManner= visitManner };
+        return new { OrderVisitModel = orderVisit ,VisitCount = visitCount, AgainCount = againCount , VisitSatisfaction = visitSatisfaction, DissatisfiedReason= dissatisfiedReason, VisitManner= visitManner };
     }
 
     /// <summary>
@@ -297,10 +301,17 @@ public class OrderController : BaseController
 
         var first = dto.VisitDetails.First(x => x.VisitTarget == EVisitTarget.Org);
 
+        bool CanAgain = false;
+        if((visit.VisitState == EVisitState.WaitForVisit || visit.VisitState == EVisitState.Visiting) && dto.IsAgain)
+        {
+            CanAgain = true;
+        }
+
         //更新主表
         visit.VisitState = Share.Enums.Order.EVisitState.Visited;
         visit.VisitTime = DateTime.Now;
         visit.IsPutThrough = dto.IsPutThrough;
+        visit.AgainState = dto.IsAgain? EAgainState.NeedAgain : EAgainState.NoAgain;
         visit.EmployeeId = _sessionContext.UserId;
         visit.NowEvaluate = first.OrgProcessingResults;
         if (visit.FirstEvaluate is null)
@@ -313,12 +324,51 @@ public class OrderController : BaseController
         var visitDetails = _mapper.Map <List<OrderVisitDetail>>(dto.VisitDetails);
 
         await _orderVisitedDetailRepository.UpdateRangeAsync(visitDetails, HttpContext.RequestAborted);
+
         //推省上
         //_capPublisher.Publish(EventNames.HotlineOrderSubmitVisitInfo,new PublishVisitDto(){ OrderDto = null,NowVisit = null,FirstVisit=null })
     }
 
     #endregion
 
+    #region 工单重办
+
+    /// <summary>
+    /// 重办查询
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [Permission(EPermission.QueryOrderRedoRecord)]
+    [HttpGet("order-redorecord-list")]
+    public async Task<PagedDto<OrderRedoRecord>> QueryOrderRedoRecord([FromQuery]QueryOrderRedoRecordDto dto)
+    {
+        var (total,items) = await _orderRedoRecordRepository.Queryable()
+            .Includes(x => x.Order)
+            .Includes(x => x.Employee)
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
+            .OrderByDescending(x => x.CreationTime)
+            .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+
+        return new PagedDto<OrderRedoRecord>(total, items);
+    }
+
+    /// <summary>
+    /// 重办详情
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    [Permission(EPermission.OrderRedoRecord)]
+    [HttpGet("order-redorecord-entity/{id}")]
+    public async Task<OrderRedoRecord> OrderRedoRecord(string id)
+    {
+        return await _orderRedoRecordRepository.Queryable()
+            .Includes(x => x.Order)
+            .Includes(x => x.Employee)
+            .FirstAsync(x => x.Id == id);
+    }
+
+    #endregion
+
     #region 工单延期
 
     /// <summary>
@@ -422,7 +472,7 @@ public class OrderController : BaseController
 
     #region 工单甄别
 
-
+    //public async Task CanScreen
 
 
 

+ 29 - 33
src/Hotline.Api/Controllers/PbxController.cs

@@ -1006,7 +1006,7 @@ namespace Hotline.Api.Controllers
         [HttpGet("query-tel-list")]
         public async Task<PagedDto<TelListPageDto>> QueryTelList([FromQuery]QueryTelListDto dto)
         {
-            var rsp = await _wexClient.QueryTelsPageAsync(new QueryTelPageRequest() { PageIndex = dto.PageIndex, PageSize = dto.PageSize}, HttpContext.RequestAborted);
+            var rsp = await _wexClient.QueryTelsPageAsync(new QueryTelPageRequest() { PageIndex = dto.PageIndex, PageSize = dto.PageSize,input = new Input() { TelNo = dto.TelNo  } }, HttpContext.RequestAborted);
             var telList = rsp?.Data;
             var count = rsp.Count;
             if (telList!=null)
@@ -1028,47 +1028,43 @@ namespace Hotline.Api.Controllers
         }
 
         /// <summary>
-        /// 新增分机关联分机组
+        /// 新增或修改分机关联分机组
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [AllowAnonymous]
         [Permission(EPermission.AddTelGroup)]
-        [HttpGet("add-wextelgroup")]
-        public async Task AddWexTelGroup([FromBody]AddWexTelGroupDto dto)
+        [HttpPost("add-update-telgroup")]
+        public async Task AddOrUpdateTelGroup([FromBody]AddOrUpdateTelGroupDto dto)
         {
-            var telGroup = new WexTelGroup();
-            telGroup.TelNo = dto.TelNo;
-            telGroup.GroupId = dto.GroupId;
-            telGroup.GroupName = dto.GroupName;
-            telGroup.ZuoGroupName = dto.ZuoGroupName;
-            await _wexTelGroupRepository.AddAsync(telGroup, HttpContext.RequestAborted);
-        }
-
-        /// <summary>
-        /// 修改分机关联分机组
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [Permission(EPermission.UpdateTelGroup)]
-        [HttpGet("update-wextelgroup")]
-        public async Task UpdateWexTelGroup([FromBody]UpdateWexTelGroupDto dto)
-        {
-            var telGroup =await _wexTelGroupRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
-            if (telGroup is null)
-            {
-                throw UserFriendlyException.SameMessage("未找到对应数据,无法修改");
-            }
-            if (dto.GroupId == 0)
-            {
-                await _wexTelGroupRepository.RemoveAsync(dto.Id, false, HttpContext.RequestAborted);
-            }
-            else
+            if(string.IsNullOrEmpty(dto.Id))
             {
+                //新增
+                var telGroup = new WexTelGroup();
+                telGroup.TelNo = dto.TelNo;
                 telGroup.GroupId = dto.GroupId;
                 telGroup.GroupName = dto.GroupName;
                 telGroup.ZuoGroupName = dto.ZuoGroupName;
-                await _wexTelGroupRepository.UpdateAsync(telGroup);
+                await _wexTelGroupRepository.AddAsync(telGroup, HttpContext.RequestAborted);
+            }
+            else
+            {
+                //修改
+                var telGroup = await _wexTelGroupRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+                if (telGroup is null)
+                {
+                    throw UserFriendlyException.SameMessage("未找到对应数据,无法修改");
+                }
+                if (dto.GroupId == 0)
+                {
+                    await _wexTelGroupRepository.RemoveAsync(dto.Id, false, HttpContext.RequestAborted);
+                }
+                else
+                {
+                    telGroup.GroupId = dto.GroupId;
+                    telGroup.GroupName = dto.GroupName;
+                    telGroup.ZuoGroupName = dto.ZuoGroupName;
+                    await _wexTelGroupRepository.UpdateAsync(telGroup);
+                }
             }
         }
 

+ 14 - 0
src/Hotline.Repository.SqlSugar/Orders/OrderRedoRecordRepository.cs

@@ -0,0 +1,14 @@
+using Hotline.Orders;
+using Hotline.Repository.SqlSugar.DataPermissions;
+using SqlSugar;
+using XF.Domain.Dependency;
+
+namespace Hotline.Repository.SqlSugar.Orders
+{
+    public class OrderRedoRecordRepository : BaseRepository<OrderRedoRecord>, IOrderRedoRecordRepository, IScopeDependency
+    {
+        public OrderRedoRecordRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+        {
+        }
+    }
+}

+ 4 - 6
src/Hotline.Share/Dtos/CallCenter/TelGroupDto.cs

@@ -56,7 +56,7 @@ namespace Hotline.Share.Dtos.CallCenter
 
     public record class QueryTelListDto : PagedRequest
     {
-
+        public string TelNo { get; set; }
     }
 
     public record class TelListPageDto
@@ -69,18 +69,16 @@ namespace Hotline.Share.Dtos.CallCenter
     }
 
 
-    public record AddWexTelGroupDto
+
+    public record AddOrUpdateTelGroupDto
     {
+        public string Id { get; set; }
         public string TelNo { get; set; }
         public int GroupId { get; set; }
         public string GroupName { get; set; }
         public string ZuoGroupName { get; set; }
     }
 
-    public record UpdateWexTelGroupDto:AddWexTelGroupDto
-    {
-        public string Id { get; set; }
-    }
 
     public record WexTelGroupDto
     {

+ 10 - 0
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -149,6 +149,11 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public bool IsPutThrough { get; set; }
 
+        /// <summary>
+        /// 是否重办
+        /// </summary>
+        public bool IsAgain { get; set; }
+
         public List<VisitDetailDto> VisitDetails { get; set; }
     }
 
@@ -210,6 +215,11 @@ namespace Hotline.Share.Dtos.Order
         public EVisitTarget VisitTarget { get; set; }
     }
 
+    public record QueryOrderRedoRecordDto: PagedKeywordRequest
+    {
+
+    }
+
 
     public record CanDelayOrderListDto : PagedKeywordRequest
     {

+ 30 - 0
src/Hotline.Share/Enums/Order/EAgainState.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Enums.Order
+{
+    public enum EAgainState
+    {
+        /// <summary>
+        /// 不重办
+        /// </summary>
+        [Description("不重办")]
+        NoAgain = 0,
+
+        /// <summary>
+        /// 需要重办
+        /// </summary>
+        [Description("需要重办")]
+        NeedAgain = 10,
+
+        /// <summary>
+        /// 已重办
+        /// </summary>
+        [Description("已重办")]
+        DoAgain = 20,
+    }
+}

+ 10 - 0
src/Hotline/IOrderRedoRecordRepository.cs

@@ -0,0 +1,10 @@
+using Hotline.Orders;
+using XF.Domain.Repository;
+
+namespace Hotline
+{
+    public interface IOrderRedoRecordRepository: IRepository<OrderRedoRecord>
+    {
+
+    }
+}

+ 17 - 0
src/Hotline/Orders/IOrderRedoRecordDomainService.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Orders
+{
+    public interface IOrderRedoRecordDomainService
+    {
+        Task<string> AddOrderRedoRecord(OrderRedoRecord entity,CancellationToken cancellationToken);
+
+        Task<bool> DelOrderRedoRecord(string id,CancellationToken cancellationToken);
+
+        Task<bool> UpdateRedoRecord(OrderRedoRecord entity, CancellationToken cancellationToken);
+    }
+}

+ 109 - 0
src/Hotline/Orders/OrderRedoRecord.cs

@@ -0,0 +1,109 @@
+using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Enums.Settings;
+using Hotline.Users;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Hotline.Orders
+{
+    public class OrderRedoRecord:CreationEntity
+    {
+        /// <summary>
+        /// 工单编号(冗余)
+        /// </summary>
+        public string No { get; set; }
+
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 工单
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(OrderId))]
+        public Order Order { get; set; }
+
+
+        /// <summary>
+        /// 重办时限
+        /// </summary>
+        public int RedoNum { get; set; }
+
+        /// <summary>
+        /// 重办时间单位
+        /// </summary>
+        public ETimeType RedoUnit { get; set; }
+
+        /// <summary>
+        /// 重办理由
+        /// </summary>
+        public IdName OrderRedoReason { get; set; }
+
+        /// <summary>
+        /// 重办意见
+        /// </summary>
+        public string RedoOpinion { get; set; }
+
+        /// <summary>
+        /// 附件
+        /// </summary>
+        [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+        public string FileIds { get; set; }
+        
+
+        #region 一级部门
+        /// <summary>
+        /// 一级部门Code
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public string OrgLevelOneCode { get; set; }
+
+        /// <summary>
+        /// 一级部门名称
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public string OrgLevelOneName { get; set;}
+
+        #endregion
+
+        #region 实际办理部门
+
+        /// <summary>
+        /// 实际办理部门编码
+        /// </summary>
+        public string ActualHandleOrgCode { get; set; }
+
+        /// <summary>
+        /// 实际办理部门名称
+        /// </summary>
+        public string ActualHandleOrgName { get; set; }
+
+        #endregion
+
+        #region 要求重办部门和人
+
+        /// <summary>
+        /// 要求重办人
+        /// </summary>
+        public string EmployeeId { get; set; }
+
+        /// <summary>
+        /// 要求重办人
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(EmployeeId))]
+        public User Employee { get; set; }
+
+        /// <summary>
+        /// 要求重办部门编码
+        /// </summary>
+        public string RedoOrgCode { get; set; }
+
+        /// <summary>
+        /// 要求重办部门名称
+        /// </summary>
+        public string RedoOrgName { get; set; }
+
+        #endregion
+    }
+}

+ 47 - 0
src/Hotline/Orders/OrderRedoRecordDomainService.cs

@@ -0,0 +1,47 @@
+using XF.Domain.Dependency;
+
+namespace Hotline.Orders
+{
+    public class OrderRedoRecordDomainService : IOrderRedoRecordDomainService, IScopeDependency
+    {
+        private readonly IOrderRedoRecordRepository _orderRedoRecordRepository;
+
+
+        public OrderRedoRecordDomainService(IOrderRedoRecordRepository orderRedoRecordRepository)
+        {
+            _orderRedoRecordRepository = orderRedoRecordRepository;
+        }
+
+
+        public async Task<string> AddOrderRedoRecord(OrderRedoRecord entity, CancellationToken cancellationToken)
+        {
+            return await _orderRedoRecordRepository.AddAsync(entity,cancellationToken);
+        }
+
+        public async Task<bool> DelOrderRedoRecord(string id,CancellationToken cancellationToken)
+        {
+            try
+            {
+                await _orderRedoRecordRepository.RemoveAsync(id, false, cancellationToken);
+                return true;
+            }
+            catch
+            {
+                return false;
+            }
+        }
+
+        public async Task<bool> UpdateRedoRecord(OrderRedoRecord entity, CancellationToken cancellationToken)
+        {
+            try
+            {
+                await _orderRedoRecordRepository.UpdateAsync(entity, cancellationToken);
+                return true;
+            }
+            catch
+            {
+                return false;
+            }
+        }
+    }
+}

+ 20 - 0
src/Hotline/Orders/OrderScreenRecord.cs

@@ -0,0 +1,20 @@
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Hotline.Orders
+{
+    public class OrderScreenRecord: CreationEntity
+    {
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string No { get; set; }
+
+        public string OrderId { get; set; }
+
+        [Navigate(NavigateType.OneToOne, nameof(OrderId))]
+        public Order Order { get; set; }
+
+
+    }
+}

+ 8 - 2
src/Hotline/Orders/OrderVisit.cs

@@ -24,7 +24,7 @@ public class OrderVisit : CreationEntity
     /// <summary>
     /// 工单
     /// </summary>
-    [Navigate(NavigateType.OneToOne,nameof(OrderId))]
+    [Navigate(NavigateType.OneToOne, nameof(OrderId))]
     public Order Order { get; set; }
 
     /// <summary>
@@ -37,7 +37,7 @@ public class OrderVisit : CreationEntity
     /// </summary>
     [SugarColumn(IsNullable = true)]
     public EVisitType? VisitType { get; set; }
-    
+
 
     /// <summary>
     /// 发布时间
@@ -62,6 +62,12 @@ public class OrderVisit : CreationEntity
     [SugarColumn(IsNullable = true)]
     public bool? IsPutThrough { get; set; }
 
+    /// <summary>
+    /// 重办状态
+    /// </summary>
+    [SugarColumn(IsNullable = true)]
+    public EAgainState? AgainState { get; set; }
+
     /// <summary>
     /// 回访时间
     /// </summary>

+ 16 - 0
src/Hotline/Permissions/EPermission.cs

@@ -919,6 +919,22 @@ namespace Hotline.Permissions
         Visit = 500303,
         #endregion
 
+        #region 工单重办管理
+
+        /// <summary>
+        /// 工单重办列表
+        /// </summary>
+        [Display(GroupName = "QueryOrderRedoRecord",Name ="工单重办列表",Description = "工单重办列表")]
+        QueryOrderRedoRecord = 500400,
+        
+        /// <summary>
+        /// 重办详情
+        /// </summary>
+        [Display(GroupName = "OrderRedoRecord",Name ="重办详情",Description ="重办详情")]
+        OrderRedoRecord = 500401,
+
+        #endregion
+
         #region 工单延期管理
 
         /// <summary>