admin 2 年之前
父节点
当前提交
9075daa8b7

+ 47 - 18
src/Hotline.NewRock/DeviceManager.cs

@@ -18,6 +18,7 @@ using XF.Domain.Exceptions;
 using Group = NewRock.Sdk.Control.Request.Group;
 using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Enums.CallCenter;
+using Hotline.Caches;
 
 namespace Hotline.NewRock
 {
@@ -27,13 +28,19 @@ namespace Hotline.NewRock
         private readonly ICallRepository _callRepository;
         private readonly IOptionsSnapshot<DeviceConfigs> _options;
         private readonly IMapper _mapper;
+        private readonly ITelGroupRepository _telGroupRepository;
+        private readonly IUserCacheManager _userCacheManager;
+        private readonly ITelRestRepository _telRestRepository;
 
-        public DeviceManager(INewRockClient newRockClient, IOptionsSnapshot<DeviceConfigs> options, IMapper mapper, ICallRepository callRepository)
+        public DeviceManager(INewRockClient newRockClient, IOptionsSnapshot<DeviceConfigs> options, IMapper mapper, ICallRepository callRepository, ITelGroupRepository telGroupRepository,IUserCacheManager userCacheManager, ITelRestRepository telRestRepository)
         {
             _newRockClient = newRockClient;
             _options = options;
             _mapper = mapper;
             _callRepository = callRepository;
+            _telGroupRepository = telGroupRepository;
+            _userCacheManager = userCacheManager;
+            _telRestRepository = telRestRepository;
         }
 
         #region 查询
@@ -328,7 +335,7 @@ namespace Hotline.NewRock
         /// <param name="cancellationToken"></param>
         /// <param name="isAdd"></param>
         /// <returns></returns>
-        public async Task ModifyGroupExtAsync(string groupId,string ext,string voicefile="",bool isAdd=true,CancellationToken cancellationToken = default)
+        public async Task ModifyGroupExtAsync(string groupId, EDistribution distribution, string voicefile = "", string extId = "", bool isAdd = true, CancellationToken cancellationToken = default)
         {
             if (!int.TryParse(groupId, out int mId))
                 throw new UserFriendlyException("请输入数字");
@@ -336,31 +343,53 @@ namespace Hotline.NewRock
             if (mId < 1 || mId > 50)
                 throw new UserFriendlyException("分机组只允许在1-50范围内");
 
-            //查询原设备数据
-            var result = await _newRockClient.QueryExtGroup(
-                new QueryExtGroupRequest() { Attribute = "Query", Group = new QueryExtGroup() { Id = groupId } },
-                _options.Value.ReceiveKey,
-                _options.Value.Expired,
-                cancellationToken
-            );
+            #region 清除分机组设置
+
+            await _newRockClient.ConfigExtGroup(new AssginConfigGroupRequest() { Attribute = "Assign", Group = new Group() { Id = groupId } }, _options.Value.ReceiveKey, _options.Value.Expired, cancellationToken);
+
+            #endregion
+
+            var list = await _telGroupRepository.QueryExtAsync(d => d.No == groupId, d => d.Includes(x => x.Tels));
+            List<string> exts = new List<string>();
+            foreach (var ext in list[0].Tels)
+            {
+                var iswork = await _userCacheManager.IsWorkingByTelAsync(ext.No, cancellationToken);
+                if (iswork)
+                    exts.Add(ext.No);
+            }
+
+            //查询所有正在休息的分机
+            List<string> restexts = (await _telRestRepository.QueryAsync(x => x.EndTime == null)).Select(x => x.TelNo).ToList();
+            if (restexts != null && restexts.Count > 0)
+            {
+                foreach (var item in restexts)
+                {
+                    exts.Remove(item);
+                }
+            }
+
             //更新
-            var exts = result.Group[0].Ext;
             var groupModel = new Group()
             {
                 Id = groupId,
                 Voicefile = voicefile
             };
-
-            if (isAdd)
-            {
-                exts.Add(new QueryExtGroupExt(){ Id = ext });
-            }
-            else
+            switch (distribution)
             {
-                exts.Remove(exts.First(x => x.Id == ext));
+                case EDistribution.Sequential:
+                    groupModel.Distribution = "sequential";
+                    break;
+                case EDistribution.Group:
+                    groupModel.Distribution = "group";
+                    break;
+                case EDistribution.Circular:
+                    groupModel.Distribution = "circular";
+                    break;
+                default:
+                    break;
             }
 
-            groupModel.Ext = exts.Select(x => x.Id).ToList(); //Enumerable.Select<QueryExtGroupExt, string>(exts, x=>x.Id).ToList();
+            groupModel.Ext = exts;
             await _newRockClient.ConfigExtGroup(
                 new AssginConfigGroupRequest() { Attribute = "Assign", Group = groupModel, },
                 _options.Value.ReceiveKey,

+ 2 - 2
src/Hotline.Repository.SqlSugar/System/SystemAuthorityRepository.cs

@@ -43,7 +43,7 @@ namespace Hotline.Repository.SqlSugar.System
         {
             if (roles.Contains(RoleSeedData.AdminRole))
             {
-                return await Db.Queryable<SystemMenu>().Select(x => x.PermissionCode).ToListAsync();
+                return await Db.Queryable<SystemMenu>().Select(x => x.ForePermissionCode).ToListAsync();
             }
             var list = await Db.Queryable<SystemAuthority>()
                 .Where(x => roles.Contains(x.RoleCode)).ToListAsync();
@@ -53,7 +53,7 @@ namespace Hotline.Repository.SqlSugar.System
                 buttonarr.AddRange(item.SystemMenuArr);
             }
             var newbutton = buttonarr.Distinct().ToList();
-            return newbutton;
+            return await Db.Queryable<SystemMenu>().Where(x => newbutton.Contains(x.PermissionCode)).Select(x => x.ForePermissionCode).ToListAsync();
         }
 
         /// <summary>

+ 1 - 1
src/Hotline.Share/Dtos/Menu/MenuDto.cs

@@ -11,7 +11,6 @@ namespace Hotline.Share.Dtos.Menu
         public string PermissionCode { get; set; }
         public bool? IsHide { get; set; }
         public string Redirect { get; set; }
-
         public string Path { get; set; }
         public bool? IsKeepAlive { get; set; }
         public bool? IsAffix { get; set; }
@@ -23,6 +22,7 @@ namespace Hotline.Share.Dtos.Menu
         public string Link { get; set; }
         public bool? IsFast { get; set; }
         public string FastIcon { get; set; }
+        public string ForePermissionCode { get; set; }
     }
 
     public record UpdateMenuDto:AddMenuDto

+ 2 - 1
src/Hotline/CallCenter/Devices/IDeviceManager.cs

@@ -1,5 +1,6 @@
 using Hotline.CallCenter.Tels;
 using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Enums.CallCenter;
 
 namespace Hotline.CallCenter.Devices
 {
@@ -104,7 +105,7 @@ namespace Hotline.CallCenter.Devices
         /// <param name="cancellationToken"></param>
         /// <param name="isAdd"></param>
         /// <returns></returns>
-        Task ModifyGroupExtAsync(string groupId, string ext, string voicefile = "",bool isAdd= true, CancellationToken cancellationToken = default);
+        Task ModifyGroupExtAsync(string groupId, EDistribution distribution, string voicefile = "", string extId = "", bool isAdd= true, CancellationToken cancellationToken = default);
         #endregion
 
         #region 通话控制

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

@@ -307,6 +307,11 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName = "Flow", Name = "获取流程详情", Description = "获取流程详情")]
         GetFlow = 100664,
+        /// <summary>
+        /// 编辑流程(后端不使用)
+        /// </summary>
+        [Display(GroupName ="Flow", Name ="编辑流程",Description = "编辑流程")]
+        EditFlow = 100665,
         #endregion
         #endregion
 

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

@@ -110,6 +110,11 @@ namespace Hotline.Settings
         [SugarColumn(IsNullable = true)]
         public string FastIcon { get; set; }
 
+        /// <summary>
+        /// 前端权限编码
+        /// </summary>
+        public string ForePermissionCode { get; set; }
+
         [SugarColumn(IsIgnore = true)]
         public List<SystemMenu> children { get; set; }
 

+ 1 - 1
src/Hotline/Users/UserDomainService.cs

@@ -67,7 +67,7 @@ namespace Hotline.Users
             //更新分机组
             foreach (var group in tel.Groups)
             {
-                await _deviceManager.ModifyGroupExtAsync(group.No, tel.No, group.Voice, true, cancellationToken);
+                await _deviceManager.ModifyGroupExtAsync(group.No,group.Distribution, group.Voice,"", true, cancellationToken);
             }