TANG JIANG 1 year ago
parent
commit
a7b133a9d2

+ 1 - 1
src/Sharing.Api/Controllers/HotlineMessageReceiveController.cs

@@ -361,7 +361,7 @@ namespace Sharing.Api.Controllers
                         SyncInterval = 0,
                         IsTimelyUpload = true,
                         CaseSource = dto.SourceChannel,
-                        CaseSourceCode=dto.SourceChannelCode
+                        CaseSourceCode=dto.SourceChannelCode,
                         ExpiredTime = submitCaseInfo.TfdBackTimeBf,
                         CaseType = submitCaseInfo.CaseType,
                         CaseTypeCode = dto.AcceptTypeCode,

+ 3 - 0
src/Sharing.Api/config/appsettings.Development.json

@@ -46,6 +46,9 @@
       "BaseUrl": "http://localhost:6028/",
       "UrlAddress": "CityHandOver.asmx/FlowWrite"
     },
+    "MediaCode": {
+      "MediaCode": "123456"
+    },
     //系统市州编码
     "CityCode": {
       "AreaCode": "511500"

+ 16 - 16
src/Sharing.Application/Mappers/MapperConfigs.cs

@@ -68,27 +68,27 @@ namespace Sharing.Application.Mappers
             //服务工单处理过程
             config.ForType<OrderFlowDto, SubmitCaseProcess>()
             .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
-            .Map(d => d.DeptName, x => x.WorkflowTrace.OrgName)
-            .Map(d => d.ProcessTime, x => x.WorkflowTrace.CompleteTime)
-            .Map(d => d.ProcessName, x => x.WorkflowTrace.UserName)
-            .Map(d => d.ProcessNote, x => x.WorkflowTrace.Opinion)
-            .Map(d => d.EndAreaCode, x => x.WorkflowTrace.OrgAreaCode)
-            .Map(d => d.EndAreaName, x => x.WorkflowTrace.OrgAreaName)
-            .Map(d => d.CaseId, x => x.WorkflowTrace.Id)
-            .Map(d => d.AreaCode, x => x.Order.AreaCode)
+            .Map(d => d.DeptName, x => x.WorkflowTrace.HandlerOrgName)
+          //  .Map(d => d.ProcessTime, x => x.WorkflowTrace.CompleteTime)
+            //.Map(d => d.ProcessName, x => x.WorkflowTrace.UserName)
+            //.Map(d => d.ProcessNote, x => x.WorkflowTrace.Opinion)
+            //.Map(d => d.EndAreaCode, x => x.WorkflowTrace.OrgAreaCode)
+            //.Map(d => d.EndAreaName, x => x.WorkflowTrace.OrgAreaName)
+            //.Map(d => d.CaseId, x => x.WorkflowTrace.Id)
+            //.Map(d => d.AreaCode, x => x.Order.AreaCode)
             ;
 
             //服务工单交办处理过程
             config.ForType<OrderFlowDto, GetCaseProcessReceive>()
            .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
-           .Map(d => d.DeptName, x => x.WorkflowTrace.OrgName)
-           .Map(d => d.ProcessTime, x => x.WorkflowTrace.CompleteTime)
-           .Map(d => d.ProcessName, x => x.WorkflowTrace.UserName)
-           .Map(d => d.ProcessNote, x => x.WorkflowTrace.Opinion)
-           .Map(d => d.EndAreaCode, x => x.WorkflowTrace.OrgAreaCode)
-           .Map(d => d.EndAreaName, x => x.WorkflowTrace.OrgAreaName)
-           .Map(d => d.TrowGuid, x => x.WorkflowTrace.Id)
-           .Map(d => d.AreaCode, x => x.Order.AreaCode)
+         //  .Map(d => d.DeptName, x => x.WorkflowTrace.OrgName)
+           //.Map(d => d.ProcessTime, x => x.WorkflowTrace.CompleteTime)
+           //.Map(d => d.ProcessName, x => x.WorkflowTrace.UserName)
+           //.Map(d => d.ProcessNote, x => x.WorkflowTrace.Opinion)
+           //.Map(d => d.EndAreaCode, x => x.WorkflowTrace.OrgAreaCode)
+           //.Map(d => d.EndAreaName, x => x.WorkflowTrace.OrgAreaName)
+           //.Map(d => d.TrowGuid, x => x.WorkflowTrace.Id)
+           //.Map(d => d.AreaCode, x => x.Order.AreaCode)
            ;
 
             //服务工单回访评价

+ 1 - 1
src/Sharing.Application/Sharing.Application.csproj

@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Hotline.Share" Version="1.0.25" />
+    <PackageReference Include="Hotline.Share" Version="1.0.26" />
     <PackageReference Include="XF.EasyCaching" Version="1.0.0" />
   </ItemGroup>
 

+ 163 - 0
src/Sharing.ConvergenceMedia/Controllers/ConvergenceMediaController.cs

@@ -0,0 +1,163 @@
+using DotNetCore.CAP;
+using Hotline.Share.Dtos.Order;
+using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Sharing.ConvergenceMedia.Dtos;
+using Sharing.WebCore;
+using XF.Domain.Repository;
+
+namespace Sharing.ConvergenceMedia.Controllers
+{
+    public class ConvergenceMediaController : BaseController
+    {
+        private readonly IMapper _mapper;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IRepository<MediaDataReceive> _mediaDataReceiveRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="capPublisher"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="mediaDataReceiveRepository"></param>
+        public ConvergenceMediaController(IMapper mapper, ICapPublisher capPublisher, IChannelConfigurationManager channelConfigurationManager, IRepository<MediaDataReceive> mediaDataReceiveRepository)
+        {
+            _mapper = mapper;
+            _capPublisher = capPublisher;
+            _channelConfigurationManager = channelConfigurationManager;
+            _mediaDataReceiveRepository = mediaDataReceiveRepository;
+        }
+
+        /// <summary>
+        /// 融媒体写信
+        /// </summary>
+        /// <param name="mediaDataReceiveDto"></param>
+        /// <returns></returns>
+        [HttpPost("WriteOrder")]
+        [AllowAnonymous]
+        public async Task<DeReponse<WriteOrderResponseDto>> WriteOrder([FromBody] MediaDataReceiveDto mediaDataReceiveDto)
+        {
+            // 验证
+            if (mediaDataReceiveDto is null)
+                return DeReponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "数据解析失败", Code = "0" }, "1", "数据解析失败");
+
+            //验证数据
+            string strResult = mediaDataReceiveDto.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return DeReponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = strResult, Code = "0" }, "1", description: strResult);
+
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != mediaDataReceiveDto.Code.ToLower().Trim())
+                return DeReponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "密钥错误", Code = "-900" }, "1", "密钥错误");
+
+            //转换数据
+            var dto = _mapper.Map<MediaDataReceive>(mediaDataReceiveDto);
+            //添加数据
+            var id = await _mediaDataReceiveRepository.AddAsync(dto, HttpContext.RequestAborted);
+            if (!string.IsNullOrEmpty(id))
+            {
+                OrderDto data = new()
+                {
+                    Title = mediaDataReceiveDto.Title,
+                    FromName = mediaDataReceiveDto.LinkName,
+                    Contact = mediaDataReceiveDto.Mobile,
+                    Address = mediaDataReceiveDto.Address,
+                    Content = mediaDataReceiveDto.Content,
+                    IsSecret = mediaDataReceiveDto.Secrecy == 0 ? false : true,
+                    Source = Hotline.Share.Enums.Order.ESource.ConvergenceMedia,
+                    FromGender = mediaDataReceiveDto.Gender switch
+                    {
+                        "1" => Hotline.Share.Enums.Order.EGender.Male,
+                        "2" => Hotline.Share.Enums.Order.EGender.Female,
+                        _ => Hotline.Share.Enums.Order.EGender.Unknown,
+                    }
+                };
+                switch (mediaDataReceiveDto.PurTypeName)
+                {
+                    case 17:
+                        data.AcceptType = "咨询";
+                        data.AcceptTypeCode = "10";
+                        break;
+                    case 18:
+                        data.AcceptType = "举报";
+                        data.AcceptTypeCode = "30";
+                        break;
+                    case 19:
+                        data.AcceptType = "投诉";
+                        data.AcceptTypeCode = "35";
+                        break;
+                    case 20:
+                        data.AcceptType = "求助";
+                        data.AcceptTypeCode = "20";
+                        break;
+                    case 21:
+                        data.AcceptType = "建议";
+                        data.AcceptTypeCode = "15";
+                        break;
+                    case 25:
+                        data.AcceptType = "其他";
+                        data.AcceptTypeCode = "40";
+                        break;
+                    default:
+                        data.AcceptType = "其他";
+                        data.AcceptTypeCode = "40";
+                        break;
+                }
+
+                string areaName = "";
+                switch (mediaDataReceiveDto.AreaID)
+                {
+                    case 2:
+                        data.AreaCode = "511504"; areaName = "叙州区";
+                        break;
+                    case 3:
+                        data.AreaCode = "511503"; areaName = "翠屏区";
+                        break;
+                    case 4:
+                        data.AreaCode = "511504"; areaName = "南溪区";
+                        break;
+                    case 5:
+                        data.AreaCode = "511524"; areaName = "长宁县";
+                        break;
+                    case 6:
+                        data.AreaCode = "511528"; areaName = "兴文县";
+                        break;
+                    case 7:
+                        data.AreaCode = "511526"; areaName = "珙县";
+                        break;
+                    case 8:
+                        data.AreaCode = "511525"; areaName = "高县";
+                        break;
+                    case 9:
+                        data.AreaCode = "511527"; areaName = "筠连县";
+                        break;
+                    case 10:
+                        data.AreaCode = "511523"; areaName = "江安县";
+                        break;
+                    case 11:
+                        data.AreaCode = "511529"; areaName = "屏山县";
+                        break;
+                    case 12:
+                        data.AreaCode = "511504"; areaName = "叙州区";
+                        break;
+                    default:
+                        break;
+                }
+                data.Address = "四川省宜宾市" + areaName;
+                data.Password = Convert.ToString(DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + "0000").Substring(0, 4);
+
+                //向业务系统推送消息
+                await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderCreation, data, cancellationToken: HttpContext.RequestAborted);
+
+                return DeReponse<WriteOrderResponseDto>.Success(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = data.Password, msg = "写信成功", Code = "1" }, "您已成功提交数据!");
+            }
+            else
+                return DeReponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "接口调用失败", Code = "0" }, "1", description: "接口调用失败!");
+        }
+
+
+    }
+}

+ 59 - 0
src/Sharing.ConvergenceMedia/Dtos/DeReponse.cs

@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Sharing.ConvergenceMedia.Dtos
+{
+    public class DeReponse<TData>
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public TData data { get; set; }
+
+        /// <summary>
+        /// 成功
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DeReponse<TData> Success(TData data, string? description = "")
+        {
+            return new DeReponse<TData>
+            {
+                code = "1",
+                data = data,
+                msg = (description ?? "您已成功提交数据!")
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="code"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DeReponse<TData> Failed(TData data,string? code = "0", string? description = "")
+        {
+            return new DeReponse<TData>
+            {
+                code = code,
+                data=data,
+                msg = (description ?? "接口调用失败!")
+            };
+        }
+    }
+}

+ 87 - 0
src/Sharing.ConvergenceMedia/Dtos/MediaDataReceiveDto.cs

@@ -0,0 +1,87 @@
+namespace Sharing.ConvergenceMedia.Dtos
+{
+    public class MediaDataReceiveDto
+    {
+        /// <summary>
+        /// 密钥
+        /// </summary>
+        [MDisplayName("密钥")]
+        [VRequired]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 受理类型编码
+        /// </summary>
+        [MDisplayName("受理类型编码")]
+        [VRequired]
+        public int PurTypeName { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        [MDisplayName("标题")]
+        [VRequired]
+        [VStringLength(0, 200)]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 来电人名称
+        /// </summary>
+        [MDisplayName("来电人名称")]
+        [VRequired]
+        [VStringLength(0, 20)]
+        public string LinkName { get; set; }
+
+        /// <summary>
+        /// 性别 0:未知,1:男,2:女
+        /// </summary>
+        [MDisplayName("性别")]
+        public string Gender { get; set; } = "0";
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [MDisplayName("联系电话")]
+        [VRequired]
+        [VStringLength(0, 12)]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 邮箱
+        /// </summary>
+        [MDisplayName("邮箱")]
+        [VStringLength(0, 100)]
+        public string Mail { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        [MDisplayName("地址")]
+        [VRequired]
+        [VStringLength(0, 200)]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [MDisplayName("内容")]
+        [VRequired]
+        [VStringLength(0, 7000)]
+        public string Content { get; set; }
+
+        /// <summary>
+        /// 是否保密: 0、不保密 ;1、保密
+        /// </summary>
+        [MDisplayName("是否保密")]
+        [VRequired]
+        public int Secrecy { get; set; }
+
+        /// <summary>
+        /// 区域类型编码
+        /// </summary>
+        [MDisplayName("区域类型编码")]
+        [VRequired]
+        public int AreaID { get; set; }
+
+    }
+}

+ 25 - 0
src/Sharing.ConvergenceMedia/Dtos/WriteOrderResponseDto.cs

@@ -0,0 +1,25 @@
+namespace Sharing.ConvergenceMedia.Dtos
+{
+    public class WriteOrderResponseDto
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 消息
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 受理编号
+        /// </summary>
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 受理密码
+        /// </summary>
+        public string AcceptPwd { get; set; }
+    }
+}

+ 4 - 0
src/Sharing.ConvergenceMedia/Sharing.ConvergenceMedia.csproj

@@ -10,4 +10,8 @@
     <ProjectReference Include="..\Sharing.WebCore\Sharing.WebCore.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Extensions\" />
+  </ItemGroup>
+
 </Project>

+ 182 - 0
src/Sharing.ConvergenceMedia/ValidationData.cs

@@ -0,0 +1,182 @@
+using System.Reflection;
+using System.Text;
+
+namespace Sharing.ConvergenceMedia
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Property)]
+    public abstract class AbstractValidateAttribute : Attribute
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="objValue"></param>
+        /// <param name="strError"></param>
+        /// <returns></returns>
+        public abstract bool Validate(object objValue, out string strError);
+    }
+
+    /// <summary>
+    /// 必填验证
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Property)]
+    public class VRequiredAttribute : AbstractValidateAttribute
+    {
+        public override bool Validate(object objValue, out string strError)
+        {
+            strError = "";
+            if (objValue == null || string.IsNullOrEmpty(objValue.ToString()))
+            {
+                strError = "不能为空";
+                return false;
+            }
+
+            return true;
+        }
+    }
+
+    /// <summary>
+    /// 长度验证
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Property)]
+    public class VStringLengthAttribute : AbstractValidateAttribute
+    {
+        private readonly int m_nMin;
+
+        private readonly int m_nMax;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="min"></param>
+        /// <param name="max"></param>
+        public VStringLengthAttribute(int min, int max)
+        {
+            m_nMin = min;
+            m_nMax = max;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="str"></param>
+        /// <returns></returns>
+        public static int GetStrLength(string str)
+        {
+            if (string.IsNullOrEmpty(str))
+            {
+                return 0;
+            }
+
+            return Encoding.Default.GetBytes(str).Length;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="objValue"></param>
+        /// <param name="strError"></param>
+        /// <returns></returns>
+        public override bool Validate(object objValue, out string strError)
+        {
+            strError = "";
+            if (objValue == null)
+            {
+                if (m_nMin != 0)
+                {
+                    strError = "不能为空";
+                    return false;
+                }
+            }
+            else
+            {
+                int strLength = GetStrLength(objValue.ToString());
+                if (strLength < m_nMin || strLength > m_nMax)
+                {
+                    strError = $"长度不能小于{m_nMin} 也不能大于{m_nMax}";
+                    return false;
+                }
+            }
+
+            return true;
+        }
+    }
+
+    /// <summary>
+    /// 描述
+    /// </summary>
+    public class MDisplayNameAttribute : Attribute
+    {
+        private readonly string m_strRemark;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="strRemark"></param>
+        public MDisplayNameAttribute(string strRemark)
+        {
+            m_strRemark = strRemark;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public virtual string GetRemark()
+        {
+            return m_strRemark;
+        }
+    }
+
+    /// <summary>
+    /// 数据验证
+    /// </summary>
+    public static class AOPExtend
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="t"></param>
+        /// <returns></returns>
+        public static string Validate<T>(this T t) where T : class, new()
+        {
+            PropertyInfo[] properties = t.GetType().GetProperties();
+            foreach (PropertyInfo propertyInfo in properties)
+            {
+                if (!propertyInfo.IsDefined(typeof(AbstractValidateAttribute), inherit: true))
+                {
+                    continue;
+                }
+
+                object value = propertyInfo.GetValue(t);
+                string empty = string.Empty;
+                if (propertyInfo.IsDefined(typeof(MDisplayNameAttribute), inherit: true))
+                {
+                    MDisplayNameAttribute mDisplayNameAttribute = (MDisplayNameAttribute)propertyInfo.GetCustomAttribute(typeof(MDisplayNameAttribute), inherit: true);
+                    empty = "『" + mDisplayNameAttribute.GetRemark() + "』";
+                }
+                else
+                {
+                    empty = "『" + propertyInfo.Name + "未设置描述』";
+                }
+
+                string strError = string.Empty;
+                object[] customAttributes = propertyInfo.GetCustomAttributes(typeof(AbstractValidateAttribute), inherit: true);
+                for (int j = 0; j < customAttributes.Length; j++)
+                {
+                    if (!((AbstractValidateAttribute)customAttributes[j]).Validate(value, out strError))
+                    {
+                        return empty + strError;
+                    }
+                }
+            }
+
+            return "";
+        }
+
+    }
+
+}

+ 16 - 0
src/Sharing/ChannelConfiguration.cs

@@ -21,6 +21,11 @@ public class ChannelConfiguration
     /// 系统市州编码
     /// </summary>
     public ConfigurationCityCode CityCode { get; set; }
+
+    /// <summary>
+    /// 融媒体
+    /// </summary>
+    public ConvergenceMediaCode MediaCode { get; set; }
 }
 
 /// <summary>
@@ -97,6 +102,17 @@ public class ConfigurationCityHandOver
     public string UrlAddress { get; set; } = string.Empty;
 }
 
+/// <summary>
+///融媒体
+/// </summary>
+public class ConvergenceMediaCode
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public string MediaCode { get; set; }
+}
+
 /// <summary>
 /// 系统市州编码
 /// </summary>

+ 9 - 0
src/Sharing/ChannelConfigurationManager.cs

@@ -46,6 +46,15 @@ namespace Sharing
             return _channelOption.Value.CityHandOver;
         }
 
+        /// <summary>
+        /// 融媒体
+        /// </summary>
+        /// <returns></returns>
+        public ConvergenceMediaCode GetConfigurationMediaCode()
+        {
+            return _channelOption.Value.MediaCode;
+        }
+
         /// <summary>
         /// 系统市州编码
         /// </summary>

+ 73 - 0
src/Sharing/ConvergenceMedia/MediaDataReceive.cs

@@ -0,0 +1,73 @@
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace Sharing.ConvergenceMedia
+{
+    /// <summary>
+    ///融媒体
+    /// </summary>
+    [Description("融媒体-接收")]
+    public class MediaDataReceive : CreationModificationEntity
+    {
+        /// <summary>
+        /// 受理类型编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "受理类型编码")]
+        public int PurTypeName { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        [SugarColumn(ColumnDescription = "标题", ColumnDataType = "varchar(200)")]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 来电人名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "来电人名称", ColumnDataType = "varchar(20)")]
+        public string LinkName { get; set; }
+
+        /// <summary>
+        /// 性别 0:未知,1:男,2:女
+        /// </summary>
+        [SugarColumn(ColumnDescription = "性别 0:未知,1:男,2:女", IsNullable = true)]
+        public string? Gender { get; set; } = "0";
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [SugarColumn(ColumnDescription = "联系电话", ColumnDataType = "varchar(20)")]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 邮箱
+        /// </summary>
+        [SugarColumn(ColumnDescription = "邮箱", ColumnDataType = "varchar(100)", IsNullable = true)]
+        public string? Mail { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "地址", ColumnDataType = "varchar(200)", IsNullable = true)]
+        public string? Address { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [SugarColumn(ColumnDescription = "内容", ColumnDataType = "varchar(7000)")]
+        public string Content { get; set; }
+
+        /// <summary>
+        /// 是否保密: 0、不保密 ;1、保密
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否保密", ColumnDataType = "varchar(50)")]
+        public int Secrecy { get; set; }
+
+        /// <summary>
+        /// 区域类型编码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "区域类型编码", ColumnDataType = "varchar(50)")]
+        public int AreaID { get; set; }
+    }
+}

+ 6 - 0
src/Sharing/IChannelConfigurationManager.cs

@@ -25,4 +25,10 @@ public interface IChannelConfigurationManager
     /// </summary>
     /// <returns></returns>
     ConfigurationCityCode GetConfigurationCityCode();
+
+    /// <summary>
+    /// 融媒体
+    /// </summary>
+    /// <returns></returns>
+    ConvergenceMediaCode GetConfigurationMediaCode();
 }