ソースを参照

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

tangjiang 4 ヶ月 前
コミット
c3768b0bbb

+ 2 - 1
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -1055,6 +1055,7 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpPost("visit-measure-statistics-export")]
+        [AllowAnonymous]
         public async Task<FileStreamResult> VisitMeasureStatisticsExport([FromBody] ExportExcelDto<VisitMeasureStatisticsRequest> dto)
         {
             var query = _orderVisitRepository.Queryable()
@@ -1081,7 +1082,7 @@ namespace Hotline.Api.Controllers.Bi
             list.Add(SumModel);
             dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
             var dtos = list
-             .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
+             .Select(stu => _mapper.Map(stu, typeof(VisitMeasureStatisticsModelDto), dynamicClass))
              .Cast<object>()
              .ToList();
 

+ 0 - 1
src/Hotline.Api/Controllers/PushMessageController.cs

@@ -199,7 +199,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="pagedDto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AllMessage)]
         [HttpGet("getlist")]
         public async Task<PagedDto<MessageDataDto>> AllMessage([FromQuery] MessagePagedDto pagedDto)
         {

+ 3 - 13
src/Hotline.Api/Controllers/SysController.cs

@@ -279,7 +279,6 @@ namespace Hotline.Api.Controllers
         /// 获取字典类型列表
         /// </summary>
         /// <returns></returns>
-        [Permission(EPermission.GetSysDicType)]
         [HttpPost("dictype-list")]
         public async Task<List<SystemDicType>> GetSysDicType()
         {
@@ -291,7 +290,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.GetSysDicData)]
         [HttpGet("dictdata-type")]
         public async Task<List<SystemDicData>> GetSysDicData([FromQuery] GetSysDicDataDto dto)
         {
@@ -315,7 +313,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.SysDicDataModel)]
         [HttpGet("dicdata/{id}")]
         public async Task<SystemDicData> SysDicDataModel(string id)
         {
@@ -330,7 +327,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddDicData)]
         [HttpPost("add-dicdata")]
         public async Task AddDicData([FromBody] AddDicDataDto dto)
         {
@@ -349,7 +345,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.UpdateDicData)]
         [HttpPost("update-dicdata")]
         public async Task UpdateDicData([FromBody] UpdateDicDataDto dto)
         {
@@ -384,7 +379,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.AddArea)]
         [HttpPost("area")]
         public async Task AddArea([FromBody] AddAreaDto dto)
         {
@@ -423,7 +417,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.ModifyArea)]
         [HttpPut("area")]
         public async Task ModifyArea([FromBody] ModifyAreaDto dto)
         {
@@ -450,7 +443,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.DelArea)]
         [HttpDelete("area/{id}")]
         public async Task DelArea(string id)
         {
@@ -468,7 +460,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        [Permission(EPermission.GetArea)]
         [HttpGet("area/{id}")]
         public async Task<SystemArea?> GetArea(string id)
         {
@@ -489,8 +480,9 @@ namespace Hotline.Api.Controllers
         [HttpGet("common-list")]
         public async Task<IReadOnlyList<SystemCommonOpinion>> GetCommon([FromQuery] ECommonType commonType, bool isOpen)
         {
-            return await _commonOpinionRepository.Queryable().Where(x => x.CommonType == commonType && x.IsOpen == isOpen)
-                .WhereIF(isOpen == false, x => x.CreatorId == _sessionContext.RequiredUserId).ToListAsync();
+            return await _commonOpinionRepository.Queryable().Where(x => x.CommonType == commonType )
+			    .WhereIF(isOpen == true, x =>(x.IsOpen == true || (x.CreatorOrgId == _sessionContext.RequiredOrgId && x.AttributionType == ECommonAttributionType.Org && x.IsOpen == false)))
+				.WhereIF(isOpen == false, x => x.IsOpen == false && x.CreatorId == _sessionContext.RequiredUserId).ToListAsync();
         }
 
         /// <summary>
@@ -538,7 +530,6 @@ namespace Hotline.Api.Controllers
         /// 查询公开常用意见
         /// </summary>
         /// <returns></returns>
-        [Permission(EPermission.QueryOpenCommonOpinionList)]
         [HttpGet("open-common")]
         public async Task<PagedDto<SystemCommonOpinion>> QueryOpenCommonOpinionList([FromQuery] QueryCommonDto dto)
         {
@@ -556,7 +547,6 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [Permission(EPermission.CommonModify)]
         [HttpPost("common-modify")]
         public async Task CommonModify([FromBody] CommonModifyDto dto)
         {

+ 1 - 1
src/Hotline.Api/Controllers/TestController.cs

@@ -519,7 +519,7 @@ ICallApplication callApplication,
         //var r = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToCenter, batchId);
         //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2024-09-12 14:45:47"), Share.Enums.Settings.ETimeType.WorkDay, 2, 80, 50);
         //_capPublisher.PublishDelay((DateTime.Now.AddMinutes(2) - DateTime.Now), EventNames.OrderRelateCall, "123");
-        var times = _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-09 18:37:13"), DateTime.Parse("2024-12-09 18:37:13"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode="15"});
+        var times = _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-11 00:31:36"), DateTime.Parse("2024-12-11 00:31:36"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode= "15" });
         //await _capPublisher.PublishDelay(EventNames.OrderRelateCall, "123", cancellationToken: HttpContext.RequestAborted);
         return OpenResponse.Ok(times.Result);
     }

+ 1 - 1
src/Hotline.Application/Handlers/Order/OrderVisitSmsHandler.cs

@@ -36,7 +36,7 @@ public class OrderVisitSmsHandler : INotificationHandler<ReceiveMessageNotify>
         var msg = await _messageRepository
             .Queryable()
             .Where(m => m.TelNumber == notification.NotifyDto.TelNumber)
-            .Where(m => m.PushBusiness == EPushBusiness.VisitSms)
+            .Where(m => m.PushBusiness == EPushBusiness.VisitSms || m.PushBusiness == EPushBusiness.SearchSms)
             .Where(m => m.SendState == ESendState.Success)
             .OrderByDescending(m => m.CreationTime)
             .FirstAsync();

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

@@ -1467,16 +1467,16 @@ namespace Hotline.Repository.SqlSugar.Orders
             {
                 AiVisitCount = list.Count,
                 AiVisitSuccessCount =list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == true).Count(),
-                AiVisitCallTwoFailCount = list.Where(x=> x.CallTimes>=1 && x.AiIsContact ==null && x.AiVolved ==null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)).Count(),
+                AiVisitCallTwoFailCount = list.Where(x=> x.CallTimes>=1 && x.AiIsContact ==null && x.AiVolved ==null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults?.Key == null)).Count(),
                 AiVisitHaveOneAnswerCount = list.Where(x=>x.OrderVisit.IsEffectiveAiVisit == false &&
                                                                             (x.AiIsContact!= null && x.AiVolved==null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)) ||
-                                                                            (x.AiIsContact == null && x.AiVolved != null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)) ||
-                                                                            (x.AiIsContact == null && x.AiVolved == null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null))).Count(), //只有一个答案
+                                                                            (x.AiIsContact == null && x.AiVolved != null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults?.Key == null)) ||
+                                                                            (x.AiIsContact == null && x.AiVolved == null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults?.Key != null))).Count(), //只有一个答案
                 AiVisitHaveTwoAnswerCount = list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == false &&
-                                                                            (x.AiIsContact != null && x.AiVolved != null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults.Key == null)) ||
-                                                                            (x.AiIsContact != null && x.AiVolved == null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null)) ||
-                                                                            (x.AiIsContact == null && x.AiVolved != null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null))).Count(),//只有两个答案
-                AiVisitHaveThreeAnswerCount = list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == false && x.AiIsContact != null && x.AiVolved != null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults.Key != null)).Count()//有三个答案
+                                                                            (x.AiIsContact != null && x.AiVolved != null && (x.AiOrgProcessingResults == null || x.AiOrgProcessingResults?.Key == null)) ||
+                                                                            (x.AiIsContact != null && x.AiVolved == null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults?.Key != null)) ||
+                                                                            (x.AiIsContact == null && x.AiVolved != null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults?.Key != null))).Count(),//只有两个答案
+                AiVisitHaveThreeAnswerCount = list.Where(x=> x.OrderVisit.IsEffectiveAiVisit == false && x.AiIsContact != null && x.AiVolved != null && (x.AiOrgProcessingResults != null || x.AiOrgProcessingResults?.Key != null)).Count()//有三个答案
             };
         }
 

+ 11 - 0
src/Hotline.Share/Enums/Settings/ECommonType.cs

@@ -43,4 +43,15 @@ namespace Hotline.Share.Enums.Settings
         [Description("延期")]
         Delay = 13,
     }
+
+    public enum ECommonAttributionType
+	{
+		[Description("全部")]
+		All = 0,
+		[Description("机构")]
+		Org = 1,
+		[Description("用户")]
+		User = 2
+
+	}
 }

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

@@ -124,6 +124,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     public async Task OrderAutomaticPublishAsync(Order order, CancellationToken cancellationToken)
     {
         var name = "中心直办件归档后默认自动发布";
+        var msg = $"OrderId: {order.Id}, No: {order.No}";
         try
         {
             if (_systemSettingCacheManager.AutomaticPublishOrder == false)
@@ -133,13 +134,13 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
             var checkResult = order.AutoPublishCheck();
             if (checkResult.NotNullOrEmpty())
             {
-                _systemLogRepository.Add(name, order.Id, checkResult);
+                _systemLogRepository.Add(name, msg, checkResult);
                 return;
             }
 
-            if (order.ProcessType != EProcessType.Zhiban)
+            if (order.FileOrgIsCenter == null || order.FileOrgIsCenter == false)
             {
-                _systemLogRepository.Add(name, order.Id, "非中心直办件");
+                _systemLogRepository.Add(name, msg, "非中心直办件");
                 return;
             }
 
@@ -147,7 +148,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         }
         catch (Exception e)
         {
-            _systemLogRepository.Add(name, order.Id, $"系统异常: {e.Message}");
+            _systemLogRepository.Add(name, msg, $"系统异常: {e.Message}");
         }
     }
 

+ 16 - 3
src/Hotline/Settings/CommonOpinions/SystemCommonOpinion.cs

@@ -1,13 +1,16 @@
 using Hotline.Share.Enums.Settings;
 using SqlSugar;
+using System.ComponentModel;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
 
 namespace Hotline.Settings.CommonOpinions
 {
-    public class SystemCommonOpinion : CreationEntity
+	[Description("惯用语")]
+	public class SystemCommonOpinion : CreationEntity
     {
-        public string Content { get; set; }
+	    [SugarColumn(ColumnDataType = "text")]
+		public string Content { get; set; }
 
         public int OrderBy { get; set; }
 
@@ -16,7 +19,17 @@ namespace Hotline.Settings.CommonOpinions
 
         public ECommonType CommonType { get; set; }
 
-        [SugarColumn(IsIgnore = true)]
+        /// <summary>
+        /// 归属类型
+        /// </summary>
+        public ECommonAttributionType? AttributionType { get; set; }
+
+        /// <summary>
+        /// 老系统Id
+        /// </summary>
+        public string? OldId { get; set; }
+
+		[SugarColumn(IsIgnore = true)]
         public string CommonTypeText => CommonType.GetDescription();
     }
 }

+ 6 - 5
src/Hotline/Settings/TimeLimitDomain/ExpireTimeHandler.cs

@@ -525,14 +525,15 @@ public class ExpireTimeHandler : IExpireTimeHandler, IScopeDependency
     /// <param name="Percentage">即将超期百分比</param>
     /// <param name="PercentageOne">超期百分比第一级</param>
     /// <returns></returns>
-    public async Task<TimeResult> CalcEndTimeAsync(DateTime beginTime,DateTime startTime, ETimeType timeType, IList<string>? workTime, int timeValue, int Percentage, int PercentageOne)
+    public async Task<TimeResult> CalcEndTimeAsync(DateTime beginTime,DateTime startTime,  IList<string>? workTime,TimeLimitSetting setting)
     {
-        return await _expireTimeFactory.GetSupplier(timeType).CalcEndTimeNewAsync(beginTime,startTime, new TimeConfig
+        return await _expireTimeFactory.GetSupplier(setting.TimeType).CalcEndTimeNewAsync(beginTime,startTime, new TimeConfig
         {
             WorkTime = workTime,
-            Count = timeValue,
-            Percentage = Percentage,
-            PercentageOne = PercentageOne,
+            Count = setting.TimeValue,
+            Percentage = setting.Percentage,
+            PercentageOne = setting.PercentageOne,
+             EndType = setting.EndType ?? 1
         });
 
         //var startTime = beginTime;

+ 6 - 5
src/Hotline/Settings/TimeLimitDomain/ExpireTimeLimitBase.cs

@@ -229,7 +229,7 @@ public abstract class ExpireTimeLimitBase
         if (setting == null) return null;
 
         var workTime = GetWorkTimes(SettingConstants.WorkTime);
-        var result = await _expireTimeHandler.CalcEndTimeAsync(beginTime,startTime, setting.TimeType, workTime, setting.TimeValue, setting.Percentage, setting.PercentageOne);
+        var result = await _expireTimeHandler.CalcEndTimeAsync(beginTime,startTime, workTime,setting);
         var expiredTimeWithConfig = new ExpiredTimeWithConfig
         {
             TimeText = setting.TimeValue + "个" + setting.TimeType.GetDescription(),
@@ -248,7 +248,7 @@ public abstract class ExpireTimeLimitBase
         var workTime = GetWorkTimes(SettingConstants.WorkTime);
         var setting = _timeLimitSettingRepository.Queryable().First(x => x.BusCode == busCode);
         if (setting == null) return null;
-        return await _expireTimeHandler.CalcEndTimeAsync(beginTime,startTime, timeType, workTime, timeValue, setting.Percentage, setting.PercentageOne);
+        return await _expireTimeHandler.CalcEndTimeAsync(beginTime,startTime, workTime,setting);
     }
 
     /// <summary>
@@ -263,7 +263,7 @@ public abstract class ExpireTimeLimitBase
     public virtual async Task<TimeResult> CalcEndTime(DateTime beginTime,DateTime startTime, ETimeType timeType, int timeValue, int Percentage, int PercentageOne)
     {
         var workTime = GetWorkTimes(SettingConstants.WorkTime);
-        return await _expireTimeHandler.CalcEndTimeAsync(beginTime,startTime, timeType, workTime, timeValue, Percentage, PercentageOne);
+        return await _expireTimeHandler.CalcEndTimeAsync(beginTime,startTime,  workTime, new TimeLimitSetting() { TimeType = timeType,TimeValue = timeValue,Percentage=Percentage,PercentageOne=PercentageOne });
     }
 
     /// <summary>
@@ -321,10 +321,11 @@ public abstract class ExpireTimeLimitBase
             case EFlowDirection.CenterToOrg:
                 if (!timeType.HasValue || !timeValue.HasValue)
                     throw new UserFriendlyException("无效参数");
-                return await _expireTimeHandler.CalcEndTimeAsync(DateTime.Now,DateTime.Now, timeType.Value, workTime, timeValue.Value, Percentage, PercentageOne);
+                return await _expireTimeHandler.CalcEndTimeAsync(DateTime.Now,DateTime.Now, workTime, new TimeLimitSetting() { TimeType = timeType.Value, TimeValue = timeValue.Value, Percentage = Percentage, PercentageOne = PercentageOne });
             case EFlowDirection.OrgToCenter:
                 //todo 根据配置
-                return await _expireTimeHandler.CalcEndTimeAsync(DateTime.Now,DateTime.Now, ETimeType.Day, workTime, 1, Percentage, PercentageOne);
+                //return await _expireTimeHandler.CalcEndTimeAsync(DateTime.Now,DateTime.Now, ETimeType.Day, workTime, 1, Percentage, PercentageOne);
+                return await _expireTimeHandler.CalcEndTimeAsync(DateTime.Now, DateTime.Now, workTime, new TimeLimitSetting() { TimeType =  ETimeType.Day, TimeValue = 1, Percentage = Percentage, PercentageOne = PercentageOne });
             default:
                 throw new ArgumentOutOfRangeException(nameof(flowDirection), flowDirection, null);
         }

+ 19 - 9
src/Hotline/Settings/TimeLimitDomain/ExpireTimeSupplier/WorkDaySupplier.cs

@@ -137,6 +137,10 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
         DateTime WorkBeginTime = DateTime.Parse(beginTime.ToShortDateString() + " " + timeConfig.WorkTime[0] + ":00");
         DateTime WorkEndTime = DateTime.Parse(beginTime.ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00");
 
+        if (timeConfig.EndType == null)
+        {
+            timeConfig.EndType = 1;
+        }
         //获取期满时间收尾方式
         var endType = timeConfig.EndType;
 
@@ -183,16 +187,19 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
                     beginTime = WorkBeginTime;
                 }
                 int w = timeConfig.Count;
+                int days = 1;
                 while (true && w != 0)
                 {   
-                    if (await IsWorkDay(beginTime))
+                    if (await IsWorkDay(beginTime.AddDays(days)))
                     {
-                        beginTime = beginTime.AddDays(1);
+                        beginTime = beginTime.AddDays(days);
                         w--;
+                        days = 1;
                     }
                     else
                     {
-                        beginTime = beginTime.AddDays(1);
+                        //beginTime = beginTime.AddDays(1);
+                        days++;
                     }
                 }
                 beginTime = beginTime.AddSeconds(-1);
@@ -204,16 +211,19 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
                         {
                             beginTime = DateTime.Parse(beginTime.AddDays(-1).ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00");
                         }
-                        break;
+                        else
+                        {
+                            break;
+                        }
                     }
-                    else if(!await IsWorkDay(beginTime) && beginTime> DateTime.Parse(beginTime.ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00"))
+                    else if(!await IsWorkDay(beginTime))
                     {
                         beginTime = DateTime.Parse(beginTime.AddDays(-1).ToShortDateString() +" "+ timeConfig.WorkTime[1] + ":00");
                     }
-                    else
-                    {
-                        beginTime = beginTime.AddDays(1);
-                    }
+                    //else
+                    //{
+                    //    beginTime = beginTime.AddDays(1);
+                    //}
                 }
 
                 var scondsPlan = (beginTime - startTime).TotalSeconds * (timeConfig.Percentage / 100.00);

+ 1 - 1
src/Hotline/Settings/TimeLimitDomain/IExpireTimeHandler.cs

@@ -52,7 +52,7 @@ public interface IExpireTimeHandler
     /// <param name="Percentage">即将超期百分比</param>
     /// <param name="PercentageOne">超期百分比第一级</param>
     /// <returns></returns>
-    public Task<TimeResult> CalcEndTimeAsync(DateTime beginTime,DateTime startTime, ETimeType timeType, IList<string>? workTime, int timeValue, int Percentage, int PercentageOne);
+    public Task<TimeResult> CalcEndTimeAsync(DateTime beginTime,DateTime startTime,IList<string>? workTime, TimeLimitSetting setting);
 
     Task<TimeResult> CalcEndTimeAsync(DateTime beginTime,DateTime startTime, TimeConfig timeConfig);