Jelajahi Sumber

增加政民互动公开

tangjiang 10 bulan lalu
induk
melakukan
506d1aa106

+ 139 - 0
src/Hotline.Api/Controllers/OrderProvinceZmhdController.cs

@@ -0,0 +1,139 @@
+using DotNetCore.CAP;
+using Hotline.Orders;
+using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using StackExchange.Redis;
+using System.Reflection;
+using XF.Domain.Authentications;
+using XF.Domain.Exceptions;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers
+{
+    public class OrderProvinceZmhdController : BaseController
+    {
+        private readonly ILogger<OrderProvinceZmhdController> _logger;
+        private readonly ISessionContext _sessionContext;
+        private readonly IMapper _mapper;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IOrderRepository _orderRepository;
+        private readonly IRepository<OrderProvinceZmhd> _orderProvinceZmhdRepository;
+
+        public OrderProvinceZmhdController(ILogger<OrderProvinceZmhdController> logger,
+            ISessionContext sessionContext,
+            IMapper mapper,
+            ICapPublisher capPublisher,
+            IOrderRepository orderRepository,
+            IRepository<OrderProvinceZmhd> orderProvinceZmhdRepository)
+        {
+            _logger = logger;
+            _sessionContext = sessionContext;
+            _mapper = mapper;
+            _capPublisher = capPublisher;
+            _orderRepository = orderRepository;
+            _orderProvinceZmhdRepository = orderProvinceZmhdRepository;
+        }
+
+        /// <summary>
+        /// 查询列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("getorderlist")]
+        public async Task<PagedDto<OrderDto>> GetOrderList([FromQuery] OrderProvinceZmhdDto dto)
+        {
+            RefAsync<int> total = 0;
+            var items = await _orderRepository.Queryable()
+                .Where(p => p.SourceChannelCode == "SZMHD" && p.IsProvince == false && p.Status > EOrderStatus.Filed)
+                .WhereIF(!string.IsNullOrEmpty(dto.No), p => p.No == dto.No)
+                .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), p => p.ProvinceNo == dto.ProvinceNo)
+                .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.StartsWith(dto.Title!))
+                .WhereIF(!string.IsNullOrEmpty(dto.AnswerOu), p => p.ActualHandleOrgName == dto.AnswerOu)
+                .WhereIF(!string.IsNullOrEmpty(dto.AuditFirstName), p => p.AuditFirstName == dto.AuditFirstName)
+                .WhereIF(dto.IsProvinceZmhd.HasValue, p => p.IsProvinceZmhd == dto.IsProvinceZmhd)
+                .WhereIF(dto.StartTime.HasValue, d => d.AuditFirstTime >= dto.StartTime) //初审时间开始
+                .WhereIF(dto.EndTime.HasValue, d => d.AuditFirstTime <= dto.EndTime) //初审时间结束
+                .OrderByDescending(d => d.CreationTime)
+                .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
+
+            return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
+        }
+
+        /// <summary>
+        /// 查询政民互动发布详情
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [HttpGet("getorderprovincezmhdinfo")]
+        public async Task<PublicOrderProvinceZmhdDto> GetOrderProvinceZmhdInfo(string Id)
+        {
+            var info = await _orderProvinceZmhdRepository.GetAsync(p => p.Id == Id, HttpContext.RequestAborted);
+            if (info == null)
+                throw UserFriendlyException.SameMessage("查询失败");
+
+            return _mapper.Map<PublicOrderProvinceZmhdDto>(info);
+        }
+
+        /// <summary>
+        /// 政民互动发布
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task AddOrderProvinceZmhd([FromBody] AddOrderProvinceZmhdDto dto)
+        {
+            if (string.IsNullOrEmpty(dto.AnswerContent))
+                throw UserFriendlyException.SameMessage("整理结果不能为空!");
+
+            if (string.IsNullOrEmpty(dto.PublicOpinion))
+                throw UserFriendlyException.SameMessage("公开意见不能为空!");
+
+            if (dto.PublicOpinion.Length > 300)
+                throw UserFriendlyException.SameMessage("公开意见不能超过300字符!");
+
+            var order = await _orderRepository.GetAsync(p => p.Id == dto.OrderId, HttpContext.RequestAborted);
+            if (order == null)
+                throw UserFriendlyException.SameMessage("工单查询失败!");
+
+            OrderProvinceZmhd orderProvinceZmhd = new()
+            {
+                No = order.No,
+                ProvinceNo = order.ProvinceNo,
+                OrderId = order.Id,
+                Title = order.Title,
+                AnswerTime = order.ActualHandleTime,
+                AnswerOu = order.ActualHandleOrgName,
+                AnswerContent = dto.AnswerContent,
+                AuditFirstName = _sessionContext.UserName,
+                AuditFirstTime = DateTime.Now,
+                AuditSecondName = _sessionContext.UserName,
+                PublishDate = DateTime.Now,
+                PublicOpinion = dto.PublicOpinion
+            };
+            //查询是否已经发布过
+            var info = await _orderProvinceZmhdRepository.GetAsync(p => p.OrderId == order.Id, HttpContext.RequestAborted);
+            if (info != null)
+                throw UserFriendlyException.SameMessage("此工单已公开!");
+
+            //发布
+            var id = await _orderProvinceZmhdRepository.AddAsync(orderProvinceZmhd, HttpContext.RequestAborted);
+            if (string.IsNullOrEmpty(id))
+                throw UserFriendlyException.SameMessage("公开失败!");
+
+            //修改工单发布数据
+            order.IsProvinceZmhd = true;
+            order.AuditFirstName = _sessionContext.UserName;
+            order.AuditFirstTime = orderProvinceZmhd.AuditFirstTime;
+            order.OrderProvinceZmhdId = orderProvinceZmhd.Id;
+            await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
+
+            //推送数据
+            var publishPublishOrder = _mapper.Map<PublicOrderProvinceZmhdDto>(orderProvinceZmhd);
+            await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderProvinceZmhd, publishPublishOrder);
+        }
+
+    }
+}

+ 20 - 0
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -812,6 +812,26 @@ namespace Hotline.Share.Dtos.Order
         /// 是否紧急
         /// </summary>
         public bool IsUrgent { get; set; }
+
+        /// <summary>
+        /// 是否政民互动公开
+        /// </summary>
+        public bool IsProvinceZmhd { get; set; }
+
+        /// <summary>
+        /// 初审人姓名
+        /// </summary>
+        public string? AuditFirstName { get; set; }
+
+        /// <summary>
+        /// 初审时间
+        /// </summary>
+        public DateTime? AuditFirstTime { get; set; }
+
+        /// <summary>
+        /// 政民互动公开ID
+        /// </summary>
+        public string? OrderProvinceZmhdId { get; set; }
     }
 
     public record CanLinkCallRecordOrderDto : PagedKeywordRequest

+ 135 - 0
src/Hotline.Share/Dtos/Order/OrderProvinceZmhdDto.cs

@@ -0,0 +1,135 @@
+using Hotline.Share.Requests;
+
+namespace Hotline.Share.Dtos.Order
+{
+    /// <summary>
+    /// 政民互动查询
+    /// </summary>
+    public record OrderProvinceZmhdDto : PagedRequest
+    {
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 省工单编号
+        /// </summary>
+        public string? ProvinceNo { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string? Title { get; set; }
+
+        /// <summary>
+        /// 答复部门名称
+        /// </summary>
+        public string? AnswerOu { get; set; }
+
+        /// <summary>
+        /// 初审人姓名
+        /// </summary>
+        public string? AuditFirstName { get; set; }
+
+        /// <summary>
+        /// 审核开始时间
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+        /// <summary>
+        /// 审核结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary>
+        /// 是否政民互动公开
+        /// </summary>
+        public bool? IsProvinceZmhd { get; set; }
+    }
+
+    public class AddOrderProvinceZmhdDto
+    {
+        /// <summary>
+        /// 工单Id
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 整理结果
+        /// </summary>
+        public string AnswerContent { get; set; }
+
+        /// <summary>
+        /// 公开意见(长度300)
+        /// </summary>
+        public string? PublicOpinion { get; set; }
+    }
+
+    public class PublicOrderProvinceZmhdDto
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string No { get; set; }
+
+        /// <summary>
+        /// 省工单编号
+        /// </summary>
+        public string ProvinceNo { get; set; }
+
+        /// <summary>
+        /// 工单Id
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 部门答复时间
+        /// </summary>
+        public DateTime? AnswerTime { get; set; }
+
+        /// <summary>
+        /// 答复部门名称
+        /// </summary>
+        public string AnswerOu { get; set; }
+
+        /// <summary>
+        /// 答复内容
+        /// </summary>
+        public string AnswerContent { get; set; }
+
+        /// <summary>
+        /// 初审人姓名
+        /// </summary>
+        public string? AuditFirstName { get; set; }
+
+        /// <summary>
+        /// 初审时间
+        /// </summary>
+        public DateTime? AuditFirstTime { get; set; }
+
+        /// <summary>
+        /// 二审人姓名
+        /// </summary>
+        public string? AuditSecondName { get; set; }
+
+        /// <summary>
+        /// 公开时间
+        /// </summary>
+        public DateTime? PublishDate { get; set; }
+
+        /// <summary>
+        /// 公开意见
+        /// </summary>
+        public string? PublicOpinion { get; set; }
+    }
+}

+ 1 - 1
src/Hotline.Share/Hotline.Share.csproj

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.79</Version>
+    <Version>1.0.80</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 7 - 2
src/Hotline.Share/Mq/EventNames.Order.cs

@@ -95,6 +95,11 @@ namespace Hotline.Share.Mq
         /// </summary>
         public const string HotlineOrderTranspondCity = "hotline.order.transpond.city";
 
-		#endregion
-	}
+        /// <summary>
+        /// 政民互动公开
+        /// </summary>
+        public const string HotlineOrderProvinceZmhd = "hotline.order.province.zmhd";
+
+        #endregion
+    }
 }

+ 24 - 0
src/Hotline/Orders/Order.cs

@@ -800,6 +800,30 @@ namespace Hotline.Orders
         /// 待发布人Id
         /// </summary>
         public string? WaitForPublisherId { get; set; }
+
+        /// <summary>
+        /// 是否政民互动公开
+        /// </summary>
+        [SugarColumn(DefaultValue = "f")]
+        public bool IsProvinceZmhd { get; set; }
+
+        /// <summary>
+        /// 初审人姓名
+        /// </summary>
+        [SugarColumn(ColumnDescription = "初审人姓名")]
+        public string? AuditFirstName { get; set; }
+
+        /// <summary>
+        /// 初审时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "初审时间")]
+        public DateTime? AuditFirstTime { get; set; }
+
+        /// <summary>
+        /// 政民互动公开ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "政民互动公开ID")]
+        public string? OrderProvinceZmhdId { get; set; }
     }
 
     public partial class Order

+ 48 - 10
src/Hotline/Orders/OrderProvinceZmhd.cs

@@ -1,8 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using SqlSugar;
 using XF.Domain.Repository;
 
 namespace Hotline.Orders
@@ -10,36 +6,78 @@ namespace Hotline.Orders
     /// <summary>
     /// 政民互动公开
     /// </summary>
-    public  class OrderProvinceZmhd: CreationEntity
+    public class OrderProvinceZmhd : CreationEntity
     {
         /// <summary>
         /// 工单编号
         /// </summary>
+        [SugarColumn( ColumnDescription = "工单编号")]
         public string No { get; set; }
 
         /// <summary>
         /// 省工单编号
         /// </summary>
-        public string ProvinceNo {  get; set; }
+        [SugarColumn(ColumnDescription = "省工单编号")]
+        public string ProvinceNo { get; set; }
 
         /// <summary>
-        /// 工单编号
+        /// 工单Id
         /// </summary>
+        [SugarColumn(ColumnDescription = "工单Id")]
         public string OrderId { get; set; }
 
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        [SugarColumn(ColumnDescription = "工单标题")]
+        public string Title { get; set; }
+
         /// <summary>
         /// 部门答复时间
         /// </summary>
-        public DateTime? AnswerTime {  get; set; }
+        [SugarColumn(ColumnDescription = "部门答复时间")]
+        public DateTime? AnswerTime { get; set; }
 
         /// <summary>
         /// 答复部门名称
         /// </summary>
-        public string AnswerOu {  get; set; }
+        [SugarColumn(ColumnDescription = "答复部门名称")]
+        public string AnswerOu { get; set; }
 
         /// <summary>
         /// 答复内容
         /// </summary>
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "答复内容")]
         public string AnswerContent { get; set; }
+
+        /// <summary>
+        /// 初审人姓名
+        /// </summary>
+        [SugarColumn(ColumnDescription = "初审人姓名")]
+        public string? AuditFirstName { get; set; }
+
+        /// <summary>
+        /// 初审时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "初审时间")]
+        public DateTime? AuditFirstTime { get; set; }
+
+        /// <summary>
+        /// 二审人姓名
+        /// </summary>
+        [SugarColumn(ColumnDescription = "二审人姓名")]
+        public string? AuditSecondName { get; set; }
+
+        /// <summary>
+        /// 公开时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "公开时间")]
+        public DateTime? PublishDate { get; set; }
+
+        /// <summary>
+        /// 公开意见
+        /// </summary>
+        [SugarColumn(Length = 300, ColumnDescription = "公开意见")]
+        public string? PublicOpinion { get; set; }
     }
 }