Browse Source

泸州12345 - 酒城一通接口开发

libin 2 months ago
parent
commit
c7a4e3db42

+ 557 - 0
src/DataSharing.Host/Controllers/LuZhou/WineCityController.cs

@@ -0,0 +1,557 @@
+using DataSharing.FwDataExchange;
+using DataSharing.RawData;
+using DataSharing.Share.Dtos.HotlineSetting;
+using DataSharing.Share.Dtos.YiBin.ConvergenceMedia;
+using DataSharing.YiBin.ConvergenceMedia;
+using Hotline.Share.Dtos.DataSharingSearch;
+using Hotline.Share.Dtos.File;
+using Hotline.Share.Dtos.FlowEngine.Workflow;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Dtos;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json.Linq;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+using DataSharing.Share.Dtos;
+using DataSharing.Share.Dtos.ZiGong.DockingPlatform;
+using System.Net;
+using System.Text;
+using Newtonsoft.Json;
+using DataSharing.Share.Dtos.LuZhou;
+using Dm.filter;
+using Hotline.Share.Dtos.Snapshot;
+using DataSharing.Share.Dtos.CityStateDataExchange;
+using static Lucene.Net.Util.Fst.Util;
+
+namespace DataSharing.Host.Controllers.LuZhou
+{
+    /// <summary>
+    /// 泸州酒城一通
+    /// </summary>
+    public class WineCityController : BaseController
+    {
+        #region 注入
+        private readonly IMapper _mapper;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IRepository<DsReceiveMediaData> _dsReceiveMediaDataRepository;
+        private readonly FwClient _fwClient;
+        private readonly IDsUserTokenInfoService _dsUserTokenInfoService;
+        private readonly ISharingConfigurationManager _sharingConfigurationManager;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="dsReceiveMediaDataRepository"></param>
+        /// <param name="fwClient"></param>
+        /// <param name="dsUserTokenInfoService"></param>
+        /// <param name="sharingConfigurationManager"></param>
+        public WineCityController(IMapper mapper,
+            IChannelConfigurationManager channelConfigurationManager,
+            IRepository<DsReceiveMediaData> dsReceiveMediaDataRepository,
+            FwClient fwClient,
+            IDsUserTokenInfoService dsUserTokenInfoService,
+            ISharingConfigurationManager sharingConfigurationManager)
+        {
+            _mapper = mapper;
+            _channelConfigurationManager = channelConfigurationManager;
+            _dsReceiveMediaDataRepository = dsReceiveMediaDataRepository;
+            _fwClient = fwClient;
+            _dsUserTokenInfoService = dsUserTokenInfoService;
+            _sharingConfigurationManager = sharingConfigurationManager;
+        }
+        #endregion
+
+        #region 工单写信
+
+        /// <summary>
+        /// 工单写信
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("OrderWrite")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> OrderWrite([FromForm] WineCityDto dto)
+        {
+            #region 数据验证
+
+            var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.AcceptSign, HttpContext.RequestAborted);
+            if (accountDto is null || accountDto.IsCheckAccount == false)
+            {
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("-900", "密钥错误"));
+            }
+
+            //验证数据
+            WineCity winCity = System.Text.Json.JsonSerializer.Deserialize<WineCity>(dto.AcceptContent);
+            string strResult = winCity.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+            {
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("0", strResult));
+            }
+
+            //写入原始数据
+            DsReceiveMediaData dsReceiveMediaData = new()
+            {
+                ServiceInterface = "WriteOrder",
+                PlatformsName = accountDto.PlatformSourceName,
+                ReceiveData = System.Text.Json.JsonSerializer.Serialize(winCity)
+            };
+            dsReceiveMediaData.Id = await _dsReceiveMediaDataRepository.AddAsync(dsReceiveMediaData, HttpContext.RequestAborted);
+
+            #endregion
+
+            #region 绑定数据
+
+            AddOrderDto data = new()
+            {
+                Title = winCity.Title,
+                FromName = winCity.LinkName,
+                Contact = winCity.LinkTel,
+                FullAddress = winCity.Address,
+                Content = winCity.Content,
+                IsSecret = winCity.SFlag == "0" ? false : true,
+                Source = (Hotline.Share.Enums.Order.ESource)System.Enum.Parse(typeof(Hotline.Share.Enums.Order.ESource), accountDto.PlatformSource),
+                FromGender = winCity.LinkSex switch
+                {
+                    "1" => Hotline.Share.Enums.Order.EGender.Male,
+                    "2" => Hotline.Share.Enums.Order.EGender.Female,
+                    _ => Hotline.Share.Enums.Order.EGender.Unknown,
+                },
+                IdentityType = Hotline.Share.Enums.Order.EIdentityType.Citizen,
+                Transpond = false,
+                IsEnforcementOrder = false,
+                ExternalId = Guid.NewGuid().ToString()
+            };
+
+            switch (accountDto.PlatformSource)
+            {
+                case "WineCity":
+                    data.SourceChannel = "酒城一通";
+                    data.SourceChannelCode = accountDto.PlatformSource;
+                    break;
+                default:
+                    break;
+            }
+
+            #endregion
+
+            #region 受理类型
+
+            switch (winCity.PurTypeID)
+            {
+                case "17":
+                    data.AcceptType = "咨询";
+                    data.AcceptTypeCode = "10";
+                    break;
+                case "19":
+                    data.AcceptType = "投诉";
+                    data.AcceptTypeCode = "35";
+                    break;
+                case "20":
+                    data.AcceptType = "求助";
+                    data.AcceptTypeCode = "20";
+                    break;
+                case "22":
+                    data.AcceptType = "建议";
+                    data.AcceptTypeCode = "15";
+                    break;
+                default:
+                    data.AcceptType = "咨询";
+                    data.AcceptTypeCode = "10";
+                    break;
+            }
+
+            #endregion
+
+            #region 区域类型
+
+            string areaName = "";
+            switch (winCity.AeraID)
+            {
+                case "55":
+                    data.AreaCode = "510502"; areaName = "江阳区";
+                    break;
+                case "56":
+                    data.AreaCode = "510503"; areaName = "纳溪区";
+                    break;
+                case "57":
+                    data.AreaCode = "510504"; areaName = "龙马潭区";
+                    break;
+                case "58":
+                    data.AreaCode = "510521"; areaName = "泸县";
+                    break;
+                case "59":
+                    data.AreaCode = "510522"; areaName = "合江县";
+                    break;
+                case "60":
+                    data.AreaCode = "510524"; areaName = "叙永县";
+                    break;
+                case "61":
+                    data.AreaCode = "510525"; areaName = "古蔺县";
+                    break;
+                default:
+                    data.AreaCode = "510500";
+                    break;
+            }
+            data.Address = "四川省泸州市" + areaName;
+
+            #endregion
+
+            #region 写入工单
+
+            //调用工单创建接口
+            var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data));
+            if (result != null && result.code == 0)
+            {
+                dsReceiveMediaData.ExternalId = result.result.id;
+                dsReceiveMediaData.OrderCode = result.result.no;
+                await _dsReceiveMediaDataRepository.UpdateAsync(dsReceiveMediaData, HttpContext.RequestAborted);
+                WineCityCodePwdDto wccp = new() { AcceptCode = result.result.no, AcceptPwd = result.result.password };
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Success("1", wccp));
+            }
+            else
+            {
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("0", "接口调用失败"));
+            }
+
+            #endregion
+        }
+
+        #endregion
+
+        #region 工单明细
+
+        /// <summary>
+        /// 工单明细
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("OrderDetail")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> OrderDetail([FromForm] WineCityDto dto)
+        {
+            #region 数据验证
+
+            //验证密钥
+            var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.AcceptSign, HttpContext.RequestAborted);
+            if (accountDto is null || accountDto.IsCheckAccount == false)
+            {
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("-900", "密钥错误"));
+            }
+
+            WineCityCodePwd winCity = System.Text.Json.JsonSerializer.Deserialize<WineCityCodePwd>(dto.AcceptContent);
+            //验证数据
+            string strResult = winCity.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+            {
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("0", strResult));
+            }
+
+            #endregion
+
+            #region 查询工单
+
+            if (winCity.AcceptCode.Length == 12)
+            {
+                #region 查询老系统
+
+                Dictionary<string, object> dic = new Dictionary<string, object>
+                {
+                    { "AcceptSign", dto.AcceptSign },
+                    { "AcceptContent", dto.AcceptContent }
+                };
+                var strUrl = _sharingConfigurationManager.GetLuZhouConfig().LuZhouWineCity.SendDataAddress + "/_CityHotline/_Interface/WineCity/Api.asmx/OrderDetail";
+                var strResultData = e_SendHttpPostBySync(strUrl, dic);
+                if (!string.IsNullOrEmpty(strResultData))
+                {
+                    JObject job = (JObject)JsonConvert.DeserializeObject(strResultData);
+                    if (job != null && "1" == job["code"].ToString())
+                    {
+                        JObject jobData = (JObject)job["msg"]["data"][0];
+                        WinCityDetailInfoDto wcdi = new()
+                        {
+                            Code = jobData["Code"].ToString(),
+                            AddDate = Convert.ToDateTime(jobData["AddDate"]).ToString("yyyy-MM-dd HH:mm:ss"),
+                            Content = jobData["Content"].ToString(),
+                            Result = jobData["Result"].ToString()
+                        };
+                        WinCityDetailDataDto wddd = new() { data = wcdi };
+                        return OpenResponse.Ok(WriteOrderResponseWineCityDto.Success("1", wddd));
+
+                    }
+                }
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("0", "查询失败"));
+
+                #endregion
+            }
+            else
+            {
+                #region 查询新系统
+
+                GetOrderNoPwdDto getOrder = new()
+                {
+                    No = winCity.AcceptCode,
+                    Password = winCity.AcceptPwd,
+                };
+                var result = await _fwClient.RequestNoTokenAsync<HotlineClientDataSharingResponse<Hotline.Share.Dtos.Order.OrderDto>>("api/v1/DataSharing/get_order_detail_by_no_pwd",
+                    "Post", System.Text.Json.JsonSerializer.Serialize(getOrder));
+                List<MediaOrderDetailDataDto> items = new();
+                if (result != null && result.code == 0)
+                {
+                    if (result.result != null)
+                    {
+                        var item = result.result;
+                        WinCityDetailInfoDto wcdi = new()
+                        {
+                            Code = item.No,
+                            AddDate = item.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"),
+                            Content = item.Content,
+                            Result = item.ActualOpinion
+                        };
+                        WinCityDetailDataDto wddd = new() { data = wcdi };
+                        return OpenResponse.Ok(WriteOrderResponseWineCityDto.Success("1", wddd));
+                    }
+                }
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("0", "查询失败"));
+
+                #endregion
+            }
+
+            #endregion
+        }
+
+        #endregion
+
+        #region 上传附件
+
+        /// <summary>
+        /// 上传附件
+        /// </summary>
+        /// <param name="formData"></param>
+        /// <returns></returns>
+        [HttpPost("WriteFiles")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> WriteFiles([FromForm] IFormCollection formData)
+        {
+            #region 数据验证
+
+            string AcceptSign = formData["AcceptSign"];
+            string AcceptCode = formData["AcceptCode"];
+            string AcceptPwd = formData["AcceptPwd"];
+
+            //验证密钥
+            var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(AcceptSign, HttpContext.RequestAborted);
+            if (accountDto is null || accountDto.IsCheckAccount == false)
+            {
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("-900", "密钥错误"));
+            }
+
+            //验证数据
+            if (string.IsNullOrEmpty(AcceptCode) || string.IsNullOrEmpty(AcceptPwd))
+                return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("0", "编号、密码不能为空!"));
+
+            #endregion
+
+            #region 上传附件
+
+            var dataRaw = await _dsReceiveMediaDataRepository.GetAsync(p => p.OrderCode == AcceptCode, HttpContext.RequestAborted);
+            if (dataRaw != null)
+            {
+                IFormFileCollection files = formData.Files;//等价于Request.Form.Files
+
+                List<FileDto> fileDtos = new();
+
+                foreach (var item in files)
+                {
+                    //这里需要上文件服务器上传
+                    var businessFileDto = await SendFileData(item);
+
+                    string strFileName = item.FileName;
+                    string strSuffix = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(strFileName.LastIndexOf(".") + 1) : "";
+                    string strSubFileName = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(0, strFileName.LastIndexOf(".")) : strFileName;
+                    fileDtos.Add(new FileDto()
+                    {
+                        Name = strSubFileName,
+                        Type = strSuffix,
+                        Classify = "受理上传",
+                        Additions = businessFileDto.id,
+                        Path = businessFileDto.path,
+                        AllPath = businessFileDto.path,
+                        FileName = item.FileName,
+                    });
+                }
+
+                UpdateOrderFilesDto updateOrderFiles = new()
+                {
+                    Files = fileDtos,
+                    Id = dataRaw.ExternalId,
+                    OrderNo = dataRaw.OrderCode
+                };
+
+                //推送数据
+                var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/update-orderfiles", "Post", System.Text.Json.JsonSerializer.Serialize(updateOrderFiles));
+                if (result != null)
+                {
+                    return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("1", "上传成功"));
+                }
+            }
+            return OpenResponse.Ok(WriteOrderResponseWineCityDto.Failed("0", "上传失败"));
+
+            #endregion
+        }
+
+        #endregion
+
+        #region 私有方法-将文件转化为文件流
+
+        /// <summary>
+        /// 组装附件参数
+        /// </summary>
+        /// <param name="fileJson"></param>
+        /// <returns></returns>
+        private List<GetFiles> GetOrderFiles(List<FileJson> fileJson)
+        {
+            var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
+            var baseUrl = businessFile.BaseUrl.Remove(businessFile.BaseUrl.Length - 1);
+            List<GetFiles> getFiles = [];
+            if (fileJson != null && fileJson.Count > 0)
+            {
+                foreach (var item in fileJson)
+                {
+                    GetFiles files = new()
+                    {
+                        FileID = item.FileId,
+                        FileName = item.FileName + "." + item.FileType,
+                        FileContent = baseUrl + item.Path
+                    };
+                    getFiles.Add(files);
+                }
+            }
+            return getFiles;
+        }
+
+        private string GetChannelCode(string platformSource)
+        {
+            var sourceChannelCode = "";
+            switch (platformSource)
+            {
+                case "ZGTFTB":
+                    sourceChannelCode = "TFTB001";
+                    break;
+                case "ZGGC":
+                    sourceChannelCode = "observe";
+                    break;
+                default:
+                    break;
+            }
+            return sourceChannelCode;
+        }
+
+        /// <summary>
+        /// 将文件流上传到附件服务器    
+        /// </summary>
+        /// <param name="file"></param>
+        /// <returns></returns>
+        private async Task<BusinessFileDto> SendFileData(IFormFile file)
+        {
+            var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
+            // 文件名称
+            string fileName = file.FileName;
+
+            // 文件内容字节数据
+            using var memoryStream = new MemoryStream();
+            await file.CopyToAsync(memoryStream);
+            memoryStream.Seek(0, SeekOrigin.Begin);
+            byte[] fileContentBytes = memoryStream.ToArray();
+
+            // 构造字典文件数据
+            // 接口参数名称为files
+            CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("fileData", fileContentBytes, fileName, "multipart/form-data");
+
+            Dictionary<string, object> dicParam = new()
+            {
+                { fileName, fileParameter }
+            };
+            string url = string.Format("{0}{1}?source={2}", businessFile.BaseUrl, businessFile.UploadUrlAddress, businessFile.Source);
+            var result = CFormUpload.MultipartFormDataPost(url, null, dicParam, "");
+            if (!string.IsNullOrEmpty(result))
+            {
+                var resultData = Newtonsoft.Json.JsonConvert.DeserializeObject<BusinessFileResponse>(result);
+                if (resultData != null && resultData.code == 0)
+                {
+                    return resultData.result;
+                }
+            }
+            return new BusinessFileDto();
+        }
+
+        /// <summary>
+        /// POST 提交数据
+        /// </summary>
+        /// <param name="strUrl"> 地址</param>
+        /// <param name="headers">参数</param>
+        /// <param name="strEncoding"></param>
+        /// <param name="strContentType"></param>
+        /// <returns></returns>
+        private string e_SendHttpPostBySync(string strUrl, Dictionary<string, object> headers = null, string strEncoding = "UTF-8",
+            string strContentType = "application/x-www-form-urlencoded")
+        {
+            // 返回数据
+            string strResult = "";
+
+            try
+            {
+                ServicePointManager.Expect100Continue = false;
+                string postDataStr = SerializeDictionaryToParam2(headers);
+                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
+                request.Method = "POST";
+                request.ContentType = strContentType;
+                request.ContentLength = postDataStr.Length;
+
+                StreamWriter write = new StreamWriter(request.GetRequestStream(), Encoding.ASCII);
+                write.Write(postDataStr);
+                write.Flush();
+                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
+                string encoding = "UTF-8";
+                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
+                strResult = reader.ReadToEnd();
+            }
+            catch (Exception ex)
+            {
+                strResult = "";
+            }
+            finally
+            {
+            }
+            return strResult;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="TKey"></typeparam>
+        /// <typeparam name="TValue"></typeparam>
+        /// <param name="dict"></param>
+        /// <returns></returns>
+        private string SerializeDictionaryToParam2<TKey, TValue>(Dictionary<TKey, TValue> dict)
+        {
+            string strParam = "";
+            int nIndex = 0;
+            foreach (var item in dict)
+            {
+                if (0 == nIndex)
+                    strParam += item.Key + "=" + item.Value;
+                else
+                    strParam += "&" + item.Key + "=" + item.Value;
+                nIndex++;
+            }
+            return strParam;
+        }
+        #endregion
+
+
+    }
+}

+ 4 - 2
src/DataSharing.Host/Controllers/YiBin/ConvergenceMediaController.cs

@@ -756,7 +756,7 @@ namespace DataSharing.Host.Controllers.YiBin
                 PageIndex = pageIndex,
                 PageSize = pageSize,
             };
-       
+
             List<GetOrderMediaDataListDto> listData = [];
 
             //查询新系统
@@ -914,7 +914,9 @@ namespace DataSharing.Host.Controllers.YiBin
                     Type = strSuffix,
                     Classify = "受理上传",
                     Additions = businessFileDto.id,
-                    Path = businessFileDto.path
+                    Path = businessFileDto.path,
+                    AllPath = businessFileDto.path,
+                    FileName = item.FileName,
                 });
             }
 

+ 5 - 3
src/DataSharing.Host/Controllers/ZiGong/DockingPlatformController.cs

@@ -259,7 +259,7 @@ namespace DataSharing.Host.Controllers.ZiGong
             };
             GetOrderList orderList = new()
             {
-                SourceChannelCode = GetChannelCode( accountDto.PlatformSource),
+                SourceChannelCode = GetChannelCode(accountDto.PlatformSource),
                 No = dto.AcceptCode,
                 Title = dto.Title,
                 Mobile = dto.Mobile,
@@ -539,7 +539,7 @@ namespace DataSharing.Host.Controllers.ZiGong
                 {
                     No = dto.AcceptCode,
                     Password = dto.AcceptPwd,
-                   // SourceChannelCode = GetChannelCode(accountDto.PlatformSource)
+                    // SourceChannelCode = GetChannelCode(accountDto.PlatformSource)
                 };
                 var result = await _fwClient.RequestNoTokenAsync<HotlineClientDataSharingResponse<OrderDto>>("api/v1/DataSharing/get_order_detail_by_no_pwd",
                     "Post", System.Text.Json.JsonSerializer.Serialize(getOrder));
@@ -814,7 +814,9 @@ namespace DataSharing.Host.Controllers.ZiGong
                     Type = strSuffix,
                     Classify = "受理上传",
                     Additions = businessFileDto.id,
-                    Path = businessFileDto.path
+                    Path = businessFileDto.path,
+                    AllPath = businessFileDto.path,
+                    FileName = item.FileName,
                 });
             }
 

BIN
src/DataSharing.Host/DockingDocuments/luzhou/丰窝12345平台工单接入接口(酒城一通V1.0-20250219) .docx


+ 6 - 1
src/DataSharing.Host/config/appsettings.Development.json

@@ -81,7 +81,7 @@
 
     //业务系统附件上传配置
     "BusinessFile": {
-      "BaseUrl": "http://open.fs.12345lm.cn/",
+      "BaseUrl": "http://110.188.24.28:50120/",
       "UploadUrlAddress": "file/upload",
       "DownloadUrlAddress": "file/downloadfile",
       "Source": "datasharing"
@@ -321,6 +321,11 @@
         "SendDataAddress": "http://59.213.83.7:8123"
       },
 
+      //酒城一通地址
+      "LuZhouWineCity": {
+        "SendDataAddress": "https://www.luzhou12345.cn:81/"
+      },
+
       //110对接--海能达
       "PoliceHND": {
         "GXDWDM": "510500000000",

+ 5 - 0
src/DataSharing.Host/config/appsettings.json

@@ -320,6 +320,11 @@
         "IsSend": true
       },
 
+      //酒城一通地址
+      "LuZhouWineCity": {
+        "SendDataAddress": "https://www.luzhou12345.cn:81/"
+      },
+
       //110对接--海能达
       "PoliceHND": {
         "GXDWDM": "510500000000",

+ 190 - 0
src/DataSharing.Share/Dtos/LuZhou/WineCityDto.cs

@@ -0,0 +1,190 @@
+using DataSharing.Share.Dtos.CityStateDataExchange;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.Json.Serialization;
+using System.Threading.Tasks;
+
+namespace DataSharing.Share.Dtos.LuZhou
+{
+    public class WineCityDto
+    {
+        /// <summary>
+        /// 密钥
+        /// </summary>
+        [MDisplayName("密钥")]
+        [VRequired]
+        public string AcceptSign { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [MDisplayName("密钥")]
+        [VRequired]
+        public string AcceptContent { get; set; }
+    }
+
+    public class WineCityCodePwd
+    {
+        /// <summary>
+        /// 受理编号
+        /// </summary>
+        [MDisplayName("受理编号")]
+        [VRequired]
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 受理密码
+        /// </summary>
+        [MDisplayName("受理密码")]
+        [VRequired]
+        public string AcceptPwd { get; set; }
+    }
+
+    public class WineCity
+    {
+        /// <summary>
+        /// 区域编码
+        /// </summary>
+        [MDisplayName("区域编码")]
+        [VRequired]
+        public string AeraID { get; set; }
+
+        /// <summary>
+        /// 受理编码
+        /// </summary>
+        [MDisplayName("受理编码")]
+        [VRequired]
+        public string PurTypeID { get; set; }
+
+        /// <summary>
+        /// 热点编码
+        /// </summary>
+        public string ConTypeID { get; set; }
+
+        /// <summary>
+        /// 受理标题
+        /// </summary>
+        [MDisplayName("受理标题")]
+        [VRequired]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 受理内容
+        /// </summary>
+        [MDisplayName("受理内容")]
+        [VRequired]
+        public string Content { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        [MDisplayName("联系人")]
+        [VRequired]
+        public string LinkName { get; set; }
+
+        /// <summary>
+        /// 来电号码
+        /// </summary>
+        public string FromTel { get; set; }
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [MDisplayName("联系电话")]
+        [VRequired]
+        public string LinkTel { get; set; }
+
+        /// <summary>
+        /// 性别
+        /// </summary>
+        public string LinkSex { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 是否保密
+        /// </summary>
+        public string SFlag { get; set; }
+    }
+
+
+
+    public class WriteOrderResponseWineCityDto
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        [JsonPropertyName("code")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 消息
+        /// </summary>
+        [JsonPropertyName("msg")]
+        public object Msg { get; set; }
+
+        public static WriteOrderResponseWineCityDto Success(string Code, WineCityCodePwdDto wccpd)
+        {
+            return new WriteOrderResponseWineCityDto
+            {
+                Code = "1",
+                Msg = wccpd
+            };
+        }
+
+        public static WriteOrderResponseWineCityDto Success(string Code, WinCityDetailDataDto wcddd)
+        {
+            return new WriteOrderResponseWineCityDto
+            {
+                Code = "1",
+                Msg = wcddd
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static WriteOrderResponseWineCityDto Failed(string? Code = "0", string? Msg = "")
+        {
+            return new WriteOrderResponseWineCityDto
+            {
+                Code = "0",
+                Msg = Msg
+            };
+        }
+    }
+
+    public class WinCityDetailDataDto
+    {
+        public WinCityDetailInfoDto data { get; set; }
+    }
+
+    public class WinCityDetailInfoDto
+    {
+        public string Code { get; set; }
+        public string AddDate { get; set; }
+        public string Content { get; set; }
+        public string Result { get; set; }
+    }
+
+    public class WineCityCodePwdDto
+    {
+        /// <summary>
+        /// 受理编号
+        /// </summary>
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 受理密码
+        /// </summary>
+        public string AcceptPwd { get; set; }
+    }
+}

+ 12 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -493,4 +493,16 @@
         /// </summary>
         public string SendDataAddress { get; set; } = string.Empty;
     }
+
+
+    /// <summary>
+    /// 泸州酒城一通
+    /// </summary>
+    public class LuZhouWineCityConfiguration
+    {
+        /// <summary>
+        /// 请求的址
+        /// </summary>
+        public string SendDataAddress { get; set; } = string.Empty;
+    }
 }

+ 1 - 1
src/DataSharing/DataSharing.csproj

@@ -8,7 +8,7 @@
 
   <ItemGroup>
     <PackageReference Include="FluentValidation" Version="11.6.0" />
-    <PackageReference Include="Hotline.Share" Version="1.0.118" />
+    <PackageReference Include="Hotline.Share" Version="1.0.119" />
     <PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
     <PackageReference Include="Quartz.Jobs" Version="3.8.0" />
     <PackageReference Include="RestSharp" Version="110.2.0" />

+ 6 - 0
src/DataSharing/SharingConfiguration.cs

@@ -142,5 +142,11 @@
         /// 泸州110推送工单数据
         /// </summary>
         public LuZhou110Configuration LuZhou110 { get; set; }
+
+        /// <summary>
+        /// 泸州酒城一通
+        /// </summary>
+        public LuZhouWineCityConfiguration LuZhouWineCity { get; set; }
+        
     }
 }