Просмотр исходного кода

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 год назад
Родитель
Сommit
82a44f4029

+ 3 - 0
src/Hotline.Api/Controllers/AiController.cs

@@ -171,6 +171,7 @@ namespace Hotline.Api.Controllers
                             aiOrderVisitDetail.OrderVisit.VisitState = Share.Enums.Order.EVisitState.Visited;
                             aiOrderVisitDetail.OrderVisit.AiVisitCount++;
                             aiOrderVisitDetail.OrderVisit.VisitTime = DateTime.Now;
+                            aiOrderVisitDetail.OrderVisit.IsPutThrough = false;
                             aiOrderVisitDetail.OrderVisit.VisitType = Share.Enums.Order.EVisitType.ChipVoiceVisit;
                             aiOrderVisitDetail.OrderVisit.AiVisitTime();
                             await _orderVisitRepository.UpdateAsync(aiOrderVisitDetail.OrderVisit, HttpContext.RequestAborted);
@@ -190,6 +191,8 @@ namespace Hotline.Api.Controllers
                             aiOrderVisit.TaskState = Share.Enums.Ai.EAiOrderVisitTaskState.Ended;
                         }
                         await _aiOrderVisitRepository.UpdateAsync(aiOrderVisit, HttpContext.RequestAborted);
+
+                        //处理不满意结果TODO(不满意设置为失效,生成新的人工回访记录)
                     }
                     
                 }

+ 2 - 2
src/Hotline.Api/Controllers/DataSharing/ConvergenceMediaController.cs

@@ -244,7 +244,7 @@ namespace Hotline.Api.Controllers.DataSharing
             .Select(it => new
             {
                 FlowID = it.Id,
-                RowID = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'AddDate' desc ) "),
+                RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),// SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'AddDate' desc ) "),
                 //  RowID= SqlFunc.RowNumber(it.CaseDate),
                 Code = it.OrderNo,
                 Title = it.Title,
@@ -406,7 +406,7 @@ namespace Hotline.Api.Controllers.DataSharing
             .Select(it => new
             {
                 FlowID = it.Id,
-                RowID = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'AddDate' desc ) "),
+                RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),// SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'AddDate' desc ) "),
                 Code = it.OrderNo,
                 Title = it.Title,
                 AddDate = it.CaseDate,

+ 191 - 42
src/Hotline.Api/Controllers/DataSharing/WebPortalController.cs

@@ -1,4 +1,4 @@
-using Fw.Utility.UnifyResponse;
+using Hotline.DataSharing;
 using Hotline.DataSharing.Order;
 using Hotline.DataSharing.Province.Notifications;
 using Hotline.DataSharing.WebPortal;
@@ -11,7 +11,6 @@ using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
-using MongoDB.Driver.Linq;
 using Sharing.Share.Dtos.DataSharing.WebPortal;
 using SqlSugar;
 using XF.Domain.Filters;
@@ -31,6 +30,7 @@ namespace Hotline.Api.Controllers.DataSharing
         private readonly IRepository<DsWebFlowAccept> _webFlowAcceptRepository;
         private readonly IRepository<DsWebUserRegister> _webUserRegisterRepository;
         private readonly IRepository<DsWebUserAuth> _webUserAuthRepository;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
 
         /// <summary>
         /// 
@@ -42,12 +42,14 @@ namespace Hotline.Api.Controllers.DataSharing
         /// <param name="webFlowAcceptRepository"></param>
         /// <param name="webUserRegisterRepository"></param>
         /// <param name="webUserAuthRepository"></param>
+        /// <param name="channelConfigurationManager"></param>
         public WebPortalController(IMapper mapper, IMediator mediator,
             IRepository<DsBulletin> bulletinRepository,
                IRepository<DsOrder> dataOrderRepository,
             IRepository<DsWebFlowAccept> webFlowAcceptRepository,
               IRepository<DsWebUserRegister> webUserRegisterRepository,
-            IRepository<DsWebUserAuth> webUserAuthRepository)
+            IRepository<DsWebUserAuth> webUserAuthRepository,
+            IChannelConfigurationManager channelConfigurationManager)
         {
             _mapper = mapper;
             _mediator = mediator;
@@ -56,7 +58,7 @@ namespace Hotline.Api.Controllers.DataSharing
             _webFlowAcceptRepository = webFlowAcceptRepository;
             _webUserRegisterRepository = webUserRegisterRepository;
             _webUserAuthRepository = webUserAuthRepository;
-
+            _channelConfigurationManager = channelConfigurationManager;
         }
 
         #region 通知
@@ -72,13 +74,13 @@ namespace Hotline.Api.Controllers.DataSharing
             RefAsync<int> total = 0;
             var items = await _bulletinRepository.Queryable()
                 .Where(p => p.LoseEfficacyTime >= DateTime.Now)
-                 .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
+                 //  .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
                  .Where(p => p.BulletinTypeId == dto.NoticeType)
                  .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
                  .OrderByDescending(p => p.BulletinTime)
                  .Select(it => new
                  {
-                     Page = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate' desc ) "),
+                     Page = SqlFunc.RowNumber($"{it.BulletinTime} desc "),// SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate'  ) "),
                      NoticeID = it.Id,
                      NoticeContent = it.Content,
                      NoticeTypeName = it.BulletinTypeName,
@@ -101,36 +103,69 @@ namespace Hotline.Api.Controllers.DataSharing
             return OpenResponse.Ok(WebPortalDeResponse<ArticleListDataDto>.Success(dataDto));
         }
 
+        /// <summary>
+        /// 获取通知公告前几条数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getarticlelistbynum")]
+        public async Task<OpenResponse> GetArticleListByNum([FromBody] ArticleIdByNumDto dto)
+        {
+            Kv kv = new() { Key = "2", Value = "门户网站" };
+
+            var items = await _bulletinRepository.Queryable()
+                .Where(p => p.LoseEfficacyTime >= DateTime.Now)
+                 //  .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
+                 .Where(p => p.BulletinTypeId == dto.BulletinTypeId)
+                 .WhereIF(!string.IsNullOrEmpty(dto.CheckChar), p => p.Content.Contains(dto.CheckChar))
+                 .OrderByDescending(p => p.BulletinTime)
+                 .Select(it => new
+                 {
+                     DataID = it.Id,
+                     Title = it.Title,
+                     CreateDate = it.BulletinTime,
+                     Content = it.Content
+                 })
+                 .Take(dto.Num)
+                .ToListAsync();
+
+            var data = _mapper.Map<IReadOnlyList<DataListTopDto>>(items);
+            return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<DataListTopDto>>.Success(data, "成功"));
+        }
+
         /// <summary>
         /// 获取详情,修改阅读次数
         /// </summary>
-        /// <param name="id"></param>
+        /// <param name="dto"></param>
         /// <returns></returns>
         [AllowAnonymous]
         [HttpPost("getarticledetails")]
-        public async Task<OpenResponse> GetArticleDetails(string id)
+        public async Task<OpenResponse> GetArticleDetails([FromBody] ArticleIdDto dto)
         {
-            var data = await _bulletinRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
-
+            var data = await _bulletinRepository.GetAsync(p => p.Id == dto.Id, HttpContext.RequestAborted);
+            ArticleDetailsDto detailsDto = null;
             if (data != null)
             {
                 data.ReadedNum = data.ReadedNum++;
                 await _bulletinRepository.UpdateAsync(data, HttpContext.RequestAborted);
-            }
 
-            ArticleDetailsDto detailsDto = new()
-            {
-                NoticeID = data.Id,
-                NoticeTypeName = data.BulletinTypeName,
-                NoticeTitle = data.Title,
-                NoticeBMName = data.SourceOrgName,
-                NoticeCreateDate = data.BulletinTime,
-                NoticeRCount = data.ReadedNum,
-                WNED_VideoUrl = "",
-                NoticeContent = data.Content
-            };
-
-            return OpenResponse.Ok(WebPortalDeResponse<ArticleDetailsDto>.Success(detailsDto));
+                detailsDto = new()
+                {
+                    NoticeID = data.Id,
+                    NoticeTypeName = data.BulletinTypeName,
+                    NoticeTitle = data.Title,
+                    NoticeBMName = data.SourceOrgName,
+                    NoticeCreateDate = data.BulletinTime,
+                    NoticeRCount = data.ReadedNum,
+                    WNED_VideoUrl = "",
+                    NoticeContent = data.Content
+                };
+            }
+            else
+                detailsDto = new();
+            List<ArticleDetailsDto> dataDto = new() { detailsDto };
+            return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<ArticleDetailsDto>>.Success(dataDto));
         }
 
         /// <summary>
@@ -144,10 +179,11 @@ namespace Hotline.Api.Controllers.DataSharing
         {
             var sugar = _bulletinRepository.Queryable()
                 .Where(p => p.LoseEfficacyTime >= DateTime.Now)
-                 .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }));
+                // .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
+                ;
             if (dto.FullSearch == "1")//全文搜索
             {
-                sugar.Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3")
+                sugar.Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3" || p.BulletinTypeId == "4")
                     .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Content.Contains(dto.Condition) || p.Title.Contains(dto.Condition));
             }
             else//指定分类
@@ -159,7 +195,7 @@ namespace Hotline.Api.Controllers.DataSharing
             var list = await sugar.OrderByDescending(p => p.BulletinTime)
                 .Select(it => new
                 {
-                    Page = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate' desc ) "),
+                    Page = SqlFunc.RowNumber($"{it.BulletinTime} desc "),// SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate'  ) "),
                     NoticeID = it.Id,
                     NoticeTitle = it.Title,
                     NoticeCreateDate = it.BulletinTime
@@ -216,13 +252,13 @@ namespace Hotline.Api.Controllers.DataSharing
             RefAsync<int> total = 0;
             var items = await _bulletinRepository.Queryable()
                 .Where(p => p.LoseEfficacyTime >= DateTime.Now)
-                 .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
-                 .Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3")
+                 // .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
+                 .Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3" || p.BulletinTypeId == "4")
                  .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
                  .OrderByDescending(p => p.BulletinTime)
                  .Select(it => new
                  {
-                     Page = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate' desc ) "),
+                     Page = SqlFunc.RowNumber($"{it.BulletinTime} desc "),// SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate'  ) "),
                      NoticeID = it.Id,
                      Content = it.Content,
                      NoticeTypeID = it.BulletinTypeId,
@@ -247,12 +283,37 @@ namespace Hotline.Api.Controllers.DataSharing
         #endregion
 
         #region 办件
+        /// <summary>
+        /// 获取信件前6条数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("getorderlistbynum")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetOrderListByNum([FromBody] QueryOrderListByNumDto dto)
+        {
+            var items = await _dataOrderRepository.Queryable()
+                .Where(p => p.IsPublish == EDsPublishState.Open)
+                .Where(p => p.HandleState == "办理完成")
+                .OrderByDescending(p => p.PublishDate)
+               .Select(it => new
+               {
+                   DataID = it.OrderId,
+                   Title = it.Title,
+                   CreateDate = it.PublishDate
+               })
+                .Take(dto.Num)
+                .ToListAsync();
+            var data = _mapper.Map<IReadOnlyList<DataListTopDto>>(items);
+            return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<DataListTopDto>>.Success(data, "成功"));
+        }
+
         /// <summary>
         /// 办件摘编列表数据
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        [HttpPost("GetOrderList")]
+        [HttpPost("getorderlist")]
         [AllowAnonymous]
         public async Task<OpenResponse> GetOrderList([FromBody] QueryOrderListDto dto)
         {
@@ -285,30 +346,48 @@ namespace Hotline.Api.Controllers.DataSharing
         /// <summary>
         /// 办件摘编详情
         /// </summary>
-        /// <param name="id"></param>
+        /// <param name="dto"></param>
         /// <returns></returns>
         [AllowAnonymous]
         [HttpPost("getorderdetailbyid")]
-        public async Task<OpenResponse> GetOrderDetailById(string id)
+        public async Task<OpenResponse> GetOrderDetailById([FromBody] ArticleIdDto dto)
         {
-            var data = await _dataOrderRepository.GetAsync(p => p.OrderId == id);
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dto.Id);
 
             var orderDetail = _mapper.Map<OrderDetail>(data);
-            return OpenResponse.Ok(WebPortalDeResponse<OrderDetail>.Success(orderDetail));
+            if (data != null)
+            {
+                orderDetail.IsProvinceOrder = data.IsProvince == true ? "1" : "0";
+                switch (data.VisitTypeState)
+                {
+                    case EVisitTypeState.UnVisit:
+                        orderDetail.VisitType = "0";
+                        break;
+                    case EVisitTypeState.Visit:
+                        orderDetail.VisitType = "1";
+                        break;
+                    case EVisitTypeState.Reviewed:
+                        orderDetail.VisitType = "2";
+                        break;
+                    default:
+                        break;
+                }
+            }
+            List<OrderDetail> dataDto = new List<OrderDetail>() { orderDetail };
+            return OpenResponse.Ok(WebPortalDeResponse<IReadOnlyList<OrderDetail>>.Success(dataDto));
         }
 
         /// <summary>
         /// 根据编号和密码查询信件ID
         /// </summary>
-        /// <param name="OrderNo"></param>
-        /// <param name="Pwd"></param>
+        /// <param name="dto"></param>
         /// <returns></returns>
         [AllowAnonymous]
         [HttpPost("getorderid")]
-        public async Task<OpenResponse> GetOrderId(string OrderNo, string Pwd)
+        public async Task<OpenResponse> GetOrderId([FromBody] GetOrderCodePwd dto)
         {
-            var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == OrderNo && p.Password == Pwd);
-
+            //var data = await _webFlowAcceptRepository.GetAsync(p => p.Code == dto.OrderNo && p.Pwd == dto.Pwd);
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == dto.OrderNo && p.Password == dto.Pwd);
             return OpenResponse.Ok(WebPortalDeResponse<string>.Success(data?.OrderId));
         }
 
@@ -324,14 +403,20 @@ namespace Hotline.Api.Controllers.DataSharing
             var data = _mapper.Map<AddOrderDto>(dto);
             data.SourceChannel = "网站";
             data.SourceChannelCode = "WZ";
-            data.Source = ESource.Hotline;
+            data.Source = ESource.WebPortal;
             if (!string.IsNullOrEmpty(data.LicenceNo))
             {
                 data.LicenceTypeCode = "10";
                 data.LicenceType = "中华人民共和国居民身份证";
             }
+            data.ExternalId = Guid.NewGuid().ToString();
             var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data }, HttpContext.RequestAborted);
-
+            //var result = new AddOrderResponse
+            //{
+            //    Id = Guid.NewGuid().ToString(),
+            //    No = "20231221000009",
+            //    Password = "123456"
+            //};
             OrderAcceptanceReturnDto returnDto = new();
             if (result != null && !string.IsNullOrEmpty(result.Id))
             {
@@ -488,6 +573,70 @@ namespace Hotline.Api.Controllers.DataSharing
             else
                 return OpenResponse.Ok(WebPortalDeResponse<string>.Failed());
         }
+
+
+        /// <summary>
+        /// 用户中心用户写信数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("getorderbyuserlist")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetOrderByUserList([FromBody] QueryOrderListByUserDto dto)
+        {
+            var dataUser = await _webUserAuthRepository.GetAsync(p => p.DataId == dto.UserId, HttpContext.RequestAborted);
+            if (dataUser != null)
+            {
+                RefAsync<int> total = 0;
+                var items = await _webFlowAcceptRepository.Queryable()
+                   .LeftJoin<DsOrder>((o, or) => o.OrderId == or.OrderId)
+                   .Where(o=>o.WebUserID== dataUser.WebUserID)
+               //重新构建数据
+               .Select((o, or) => new
+               {
+                   FlowID = o.OrderId,
+                   FlowCode = o.Code,
+                   FlowPwd = o.Pwd,
+                   FlowTitle = o.Title,
+                   FlowFromName = or.CaseSource,
+                   FlowPurTypeName = o.PurTypeName,
+                   ConTypeName = or.HotspotName,
+                   FlowAddDate = o.CreationTime,
+                   RSFlagName = or.HandleState,
+                   WebUserID=o.WebUserID
+               })
+           //将结果合并成一个表
+           .MergeTable()
+            //   .Where(p => p.WebUserID == dataUser.WebUserID)
+               .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
+
+                //计算总页数
+                int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
+                OrderListReturnDto returnDto = new()
+                {
+                    PageNum = dto.PageIndex,
+                    PageCount = nPageCount,
+                    Data = _mapper.Map<IReadOnlyList<OrderListDto>>(items)
+                };
+
+                return OpenResponse.Ok(WebPortalDeResponse<OrderListReturnDto>.Success(returnDto, "成功"));
+            }
+            return OpenResponse.Ok(WebPortalDeResponse<OrderListReturnDto>.Success(new OrderListReturnDto(), "成功"));
+
+        }
         #endregion
+
+        /// <summary>
+        /// 系统主题颜色
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getsystemsettingstheme")]
+        public async Task<OpenResponse> GetSystemSettingsTheme()
+        {
+            var data = _channelConfigurationManager.GetConfigurationWebPortal();
+            return OpenResponse.Ok(WebPortalDeResponse<string>.Success(data.SystemSettingsTheme));
+
+        }
     }
 }

+ 4 - 0
src/Hotline.Api/config/appsettings.Development.json

@@ -129,6 +129,10 @@
     "CityCode": {
       "AreaCode": "511500"
     },
+    "WebPortal": {
+     // "SystemSettingsTheme": "class=gray2",
+      "SystemSettingsTheme": ""
+    },
     //业务系统附件上传配置
     "BusinessFile": {
       "BaseUrl": "http://open.fs.12345lm.cn/",

+ 30 - 1
src/Hotline.Application/Handlers/Order/AddVisitNotifyHandler.cs

@@ -3,6 +3,7 @@ using Hotline.Orders.Notifications;
 using Hotline.Settings;
 using Hotline.Share.Dtos;
 using Hotline.Share.Enums.Order;
+using MapsterMapper;
 using MediatR;
 using XF.Domain.Repository;
 
@@ -17,13 +18,15 @@ namespace Hotline.Application.Handlers.Order
         private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
         private readonly IRepository<SystemDicData> _systemDicDataRepository;
         private readonly IOrderRepository _orderRepository;
+        private readonly IMapper _mapper;
 
-        public AddVisitNotifyHandler(IRepository<OrderVisit> orderVisitRepository, IRepository<OrderVisitDetail> orderVisitedDetailRepository,IRepository<SystemDicData> systemDicDataRepository,IOrderRepository orderRepository)
+        public AddVisitNotifyHandler(IRepository<OrderVisit> orderVisitRepository, IRepository<OrderVisitDetail> orderVisitedDetailRepository,IRepository<SystemDicData> systemDicDataRepository,IOrderRepository orderRepository,IMapper mapper)
         {
             _orderVisitRepository = orderVisitRepository;
             _orderVisitedDetailRepository = orderVisitedDetailRepository;
             _systemDicDataRepository = systemDicDataRepository;
             _orderRepository = orderRepository;
+            _mapper = mapper;
         }
 
 
@@ -77,6 +80,32 @@ namespace Hotline.Application.Handlers.Order
                         //工单
                         orderVisit.Order.Visited(orgProcessingResults.Key, orgProcessingResults.Value);
                         await _orderRepository.UpdateAsync(orderVisit.Order);
+
+                        //处理网站通知差评数据
+                        if(orderVisit.Order.Source== ESource.Hotline && orderVisit.OrderVisitDetails.Any(x=> x.OrgHandledAttitude?.Key=="1" || x.OrgHandledAttitude?.Key == "2" || x.OrgProcessingResults?.Key=="1" || x.OrgProcessingResults?.Key == "2"))
+                        {
+                            //包含不满意数据,重新生成新的回访
+                            var newOrderVisit = _mapper.Map<OrderVisit>(orderVisit);
+                            newOrderVisit.InitId();
+                            newOrderVisit.VisitState = EVisitState.NoSatisfiedWaitForVisit;
+                            newOrderVisit.VisitTime = null;
+                            newOrderVisit.IsCanHandle = false;
+                            newOrderVisit.IsCanAiVisit = false;
+                            newOrderVisit.AiVisitCount = 0;
+                            await _orderVisitRepository.AddAsync(newOrderVisit,cancellationToken);
+                            var list = _mapper.Map<List<OrderVisitDetail>>(orderVisit.OrderVisitDetails);
+                            list.ForEach(x =>
+                            {
+                                x.VisitId = newOrderVisit.Id;
+                                x.VoiceEvaluate = null;
+                                x.VoiceEvaluate = null;
+                                x.OrgHandledAttitude = null;
+                                x.OrgNoSatisfiedReason = null;
+                                x.OrgProcessingResults = null;
+                                x.VisitContent = "";
+                            });
+                            await _orderVisitedDetailRepository.AddRangeAsync(list, cancellationToken);
+                        }
                     }
                 }
             }

+ 1 - 0
src/Hotline.Application/Handlers/Order/ReceiveOrderNotifyHandler.cs

@@ -54,6 +54,7 @@ namespace Hotline.Application.Handlers.Order
                 case ESource.Police110:
                 case ESource.CityDataExchangeLz:
                 case ESource.ConvergenceMedia:
+                case ESource.WebPortal:
                     return ReceiveOrderFromOtherPlatformAsync(dto, files, cancellationToken);
                 case ESource.Hotline:
                 case ESource.HotlineImport:

+ 16 - 2
src/Hotline.Application/Mappers/DataSharing/DsMapperConfigs.cs

@@ -715,15 +715,29 @@ namespace Hotline.Application.Mappers.DataSharing
             config.ForType<DsWebFlowAccept, AddOrderDto>()
             .Map(d => d.FromName, x => x.LKName)
             .Map(d => d.FromGender, x => x.Sex == "男" ? EGender.Male : x.Sex == "女" ? EGender.Female : EGender.Unknown)
-            .Map(d => d.IsSecret, x => x.IsSecret)
+            .Map(d => d.IsSecret, x => x.IsSecret=="1"?true:false)
             .Map(d => d.LicenceNo, x => x.IDCard)
             .Map(d => d.Contact, x => x.Mobile)
-            .Map(d => d.FullAddress, x => x.Address)
+           // .Map(d => d.FullAddress, x => x.Address)
             .Map(d => d.Title, x => x.Title)
             .Map(d => d.Content, x => x.Content)
             .Map(d => d.AcceptType, x => x.PurTypeName)
             .Map(d => d.AcceptTypeCode, x => x.PurTypeID)
             ;
+
+          //  //用户中心用户写信数据
+          //  config.ForType<DsWebFlowAccept, OrderListDto>()
+          //     .Ignore(d => d.Source)
+          //     .Map(d => d.FlowID, x => x.OrderId)
+          //     .Map(d => d.FlowCode, x => x.Code)
+          //     .Map(d => d.FlowPwd, x => x.Pwd)
+          //     .Map(d => d.FlowTitle, x => x.Title)
+          //     .Map(d => d.FlowFromName, x => x.Order.CaseSource)
+          //     .Map(d => d.FlowPurTypeName, x => x.PurTypeName)
+          //     .Map(d => d.ConTypeName, x => x.Order.HotspotName)
+          //     .Map(d => d.FlowAddDate, x => x.CreationTime)
+          //     .Map(d => d.RSFlagName, x => x.Order.HandleState)
+          //;
             #endregion
         }
     }

+ 1 - 1
src/Hotline.Repository.SqlSugar/System/SystemMenuRepository.cs

@@ -75,7 +75,7 @@ namespace Hotline.Repository.SqlSugar.System
             if (model != null)
             {
                 var perList = codes.Intersect(model.FastMenuArr).ToList();
-                return await Db.Queryable<SystemMenu>().Where(x => perList.Contains(x.PermissionCode) && x.MenuType == Share.Enums.Settings.EMenuType.Menu).ToListAsync();
+                return await Db.Queryable<SystemMenu>().Where(x => perList.Contains(x.PermissionCode) && x.MenuType == Share.Enums.Settings.EMenuType.Page).ToListAsync();
             }
             return new List<SystemMenu>();
         }

+ 29 - 0
src/Hotline.Share/Dtos/DataSharing/WebPortal/ArticleDetailsDto.cs

@@ -3,6 +3,35 @@ using Hotline.Share.Requests;
 
 namespace Sharing.Share.Dtos.DataSharing.WebPortal
 {
+    /// <summary>
+    /// 
+    /// </summary>
+    public class ArticleIdDto
+    {
+        /// <summary>
+        /// 公告ID
+        /// </summary>
+        public string Id { get; set; }
+    }
+
+    public class ArticleIdByNumDto
+    {
+        /// <summary>
+        /// 公告分类
+        /// </summary>
+        public string? BulletinTypeId { get; set; }
+
+        /// <summary>
+        /// 条数
+        /// </summary>
+        public int Num { get; set; }
+
+        /// <summary>
+        /// 是否查询图片
+        /// </summary>
+        public string CheckChar { get; set; }
+    }
+
     /// <summary>
     /// 公告上一条下一条
     /// </summary>

+ 52 - 0
src/Hotline.Share/Dtos/DataSharing/WebPortal/QueryOrderDto.cs

@@ -2,6 +2,34 @@
 
 namespace Sharing.Share.Dtos.DataSharing.WebPortal
 {
+    /// <summary>
+    /// 
+    /// </summary>
+    public class GetOrderCodePwd
+    {
+        public string OrderNo { get; set; }
+        public string Pwd { get; set; }
+    }
+
+    /// <summary>
+    /// 获取前几条数据
+    /// </summary>
+    public class QueryOrderListByNumDto
+    {
+        public int Num { get; set; }
+    }
+
+    /// <summary>
+    /// 会员中心查询用户信件
+    /// </summary>
+    public record QueryOrderListByUserDto : PagedRequest
+    {
+        /// <summary>
+        /// 信件编号
+        /// </summary>
+        public string? UserId { get; set; }
+    }
+
     /// <summary>
     /// 办件摘编列表查询参数
     /// </summary>
@@ -215,6 +243,16 @@ namespace Sharing.Share.Dtos.DataSharing.WebPortal
         /// 
         /// </summary>
         public string PubFlag { get; set; }
+
+        /// <summary>
+        /// 是否是省工单 0:否,1:是
+        /// </summary>
+        public string IsProvinceOrder { get; set; }
+
+        /// <summary>
+        /// 是否可以评价 0:不能评价,1:可以评价,2:已评价
+        /// </summary>
+        public string VisitType { get; set; }
     }
 
     /// <summary>
@@ -302,4 +340,18 @@ namespace Sharing.Share.Dtos.DataSharing.WebPortal
         /// </summary>
         public int DayTrandCount { get; set; }
     }
+
+    /// <summary>
+    /// 返回数据
+    /// </summary>
+    public class DataListTopDto
+    {
+        public string DataID { get; set; }
+
+        public string Title { get; set; }
+
+        public DateTime? CreateDate { get; set; }
+
+        public string? Content { get; set; }
+    }
 }

+ 25 - 0
src/Hotline.Share/Enums/DataSharing/EVisitTypeState.cs

@@ -0,0 +1,25 @@
+using System.ComponentModel;
+
+namespace Hotline.Share.Enums.DataSharing
+{
+    public enum EVisitTypeState
+    {
+        /// <summary>
+        /// 不能评价
+        /// </summary>
+        [Description("不能评价")]
+        UnVisit = 0,
+
+        /// <summary>
+        /// 可以评价
+        /// </summary>
+        [Description("可以评价")]
+        Visit = 1,
+
+        /// <summary>
+        /// 已评价
+        /// </summary>
+        [Description("已评价")]
+        Reviewed = 2,
+    }
+}

+ 5 - 0
src/Hotline.Share/Enums/Order/ESource.cs

@@ -7,6 +7,11 @@ public enum ESource
     /// </summary>
     Hotline = 0,
 
+    /// <summary>
+    /// 门户网站
+    /// </summary>
+    WebPortal=2,
+
     /// <summary>
     /// 热线平台导入工单
     /// </summary>

+ 16 - 0
src/Hotline/DataSharing/ChannelConfiguration.cs

@@ -36,6 +36,11 @@ public class ChannelConfiguration
     /// 业务系统附件上传配置
     /// </summary>
     public ConfigurationBusinessFile BusinessFile { get; set; }
+
+    /// <summary>
+    /// 门户网站配置
+    /// </summary>
+    public ConfigurationWebPortal WebPortal { get; set; }
 }
 
 /// <summary>
@@ -220,4 +225,15 @@ public class ConfigurationPoliceDS
     public string token6_sm2_private { get; set; }
     public string token6_sm4 { get; set; }
     public string token6_sm4_mw { get; set; }
+}
+
+/// <summary>
+/// 门户网站
+/// </summary>
+public class ConfigurationWebPortal
+{
+    /// <summary>
+    /// 系统主题
+    /// </summary>
+    public string SystemSettingsTheme { get; set; }
 }

+ 9 - 1
src/Hotline/DataSharing/ChannelConfigurationManager.cs

@@ -81,6 +81,14 @@ namespace Hotline.DataSharing
         {
             return _channelOption.Value.BusinessFile;
         }
-        
+
+        /// <summary>
+        /// 门户网站配置
+        /// </summary>
+        /// <returns></returns>
+        public ConfigurationWebPortal GetConfigurationWebPortal()
+        {
+            return _channelOption.Value.WebPortal;
+        }
     }
 }

+ 6 - 0
src/Hotline/DataSharing/IChannelConfigurationManager.cs

@@ -43,4 +43,10 @@ public interface IChannelConfigurationManager
     /// </summary>
     /// <returns></returns>
     ConfigurationBusinessFile GetConfigurationBusinessFile();
+
+    /// <summary>
+    /// 门户网站配置
+    /// </summary>
+    /// <returns></returns>
+    ConfigurationWebPortal GetConfigurationWebPortal();
 }

+ 6 - 0
src/Hotline/DataSharing/Order/DsOrder.cs

@@ -269,4 +269,10 @@ public class DsOrder : CreationModificationEntity
     /// </summary>
     [SugarColumn(ColumnDescription = "整理结果", IsNullable = true, ColumnDataType = "varchar(2000)")]
     public string? ArrangeOpinion { get; set; }
+
+    /// <summary>
+    /// 是否可以评价
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否可以评价", IsNullable = true)]
+    public EVisitTypeState VisitTypeState { get; set; } = EVisitTypeState.UnVisit;
 }

+ 19 - 1
src/Hotline/DataSharing/Province/Services/ProvinceService.cs

@@ -574,6 +574,7 @@ namespace Hotline.DataSharing.Province.Services
         /// <returns></returns>
         public async Task SubmitVisitInfo(PublishVisitDto dto, CancellationToken cancellationToken)
         {
+
             await SubmitVisitInfoData(dto, cancellationToken);
         }
 
@@ -1013,7 +1014,7 @@ namespace Hotline.DataSharing.Province.Services
                     data.AssessOpinion = "1";
                     data.AssessContent = "";
                 }
-                
+
                 //将上报信息写入本地库
                 data.Id = await _getCaseResultReceiveRepository.AddAsync(data, cancellationToken);
 
@@ -1043,6 +1044,14 @@ namespace Hotline.DataSharing.Province.Services
                 //将待推送数据写入待推送表
                 await InitPushData("ZmhdCaseInfoPublic", System.Text.Json.JsonSerializer.Serialize(data), "zmhd_case_info_public", data.Id, 0, cancellationToken);
             }
+
+            //修改为可以评价
+            var dataOrder = await _dataOrderRepository.GetAsync(p => p.OrderId == dto.Order.Id, cancellationToken);
+            if (dataOrder != null)
+            {
+                dataOrder.VisitTypeState = EVisitTypeState.Visit;
+                await _dataOrderRepository.UpdateAsync(dataOrder, cancellationToken);
+            }
         }
 
         #region 私有方法
@@ -1054,6 +1063,14 @@ namespace Hotline.DataSharing.Province.Services
         /// <returns></returns>
         private async Task SubmitVisitInfoData(PublishVisitDto dto, CancellationToken cancellationToken)
         {
+            //修改为可以评价
+            var dataOrder = await _dataOrderRepository.GetAsync(p => p.OrderId == dto.Order.Id, cancellationToken);
+            if (dataOrder != null)
+            {
+                dataOrder.VisitTypeState = EVisitTypeState.Reviewed;
+                await _dataOrderRepository.UpdateAsync(dataOrder, cancellationToken);
+            }
+
             string visitType = "";
             switch (dto.VisitType)
             {
@@ -1149,6 +1166,7 @@ namespace Hotline.DataSharing.Province.Services
 
                 }
             }
+
         }
 
         /// <summary>

+ 3 - 1
src/Hotline/DataSharing/WebPortal/DsWebFlowAccept.cs

@@ -1,4 +1,6 @@
-using SqlSugar;
+using Hotline.DataSharing.Order;
+using Hotline.Users;
+using SqlSugar;
 using XF.Domain.Repository;
 
 namespace Hotline.DataSharing.WebPortal

+ 2 - 2
src/Hotline/Permissions/EPermission.cs

@@ -1605,7 +1605,7 @@ namespace Hotline.Permissions
 
         #endregion
 
-        #region 大屏管理(120000)
+        #region 大屏管理(12,00,00)
         /// <summary>
         /// 大屏管理
         /// </summary>
@@ -1617,7 +1617,7 @@ namespace Hotline.Permissions
         /// 数据大屏
         /// </summary>
         [Display(GroupName ="大屏管理",Name = "数据大屏",Description ="数据大屏")]
-        ScreenData = 100100,
+        ScreenData = 120100,
 
         #endregion
         #endregion