using AutoMapper;
using LinqKit;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Ropin.Inspection.Common;
using Ropin.Inspection.Common.Accessor.Interface;
using Ropin.Inspection.Common.Helper;
using Ropin.Inspection.Model;
using Ropin.Inspection.Model.Entities;
using Ropin.Inspection.Model.ViewModel;
using Ropin.Inspection.Repository;
using Ropin.Inspection.Repository.SYS.Interface;
using Ropin.Inspection.Service.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.NetworkInformation;
using System.Threading.Tasks;

namespace Ropin.Inspection.Service
{
    public class PushMsgService : IPushMsgService
    {
        private readonly IClaimsAccessor _claims;
        private readonly IMapper _mapper;
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly IHttpClientFactory _httpClientFactory;
        private readonly ITsysUserRepository _tsysUserRepository;
        private readonly ITmtnPushMsgToRepository _tmtnPushMsgToRepository;
        private readonly ITmtnPushMsgResultRepository _tmtnPushMsgResultRepository;
        private readonly ITbdmCodeDetailRepository _tbdmCodeDetailRepository;
        private readonly ITdevDevStoreRepository _tdevDevStoreRepository;
        private readonly ITsysUserService _tsysUserService;
        private readonly ITsysMessageRepository _messageRepository;
        private readonly ITsysMessageFileRepository _tsysMessageFileRepository;
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(PushMsgService));
        private string IsSendEmail = "true";
        public PushMsgService(IClaimsAccessor claims, 
            ITmtnPushMsgToRepository tmtnPushMsgToRepository,
            ITbdmCodeDetailRepository tbdmCodeDetailRepository,
            ITmtnPushMsgResultRepository tmtnPushMsgResultRepository,
            ITdevDevStoreRepository tdevDevStoreRepository,
            IMapper mapper,
            ITsysUserService tsysUserService,
            IHttpClientFactory httpClientFactory, 
            ITsysUserRepository tsysUserRepository
            , IConfiguration configuration, ITsysMessageRepository messageRepository, ITsysMessageFileRepository tsysMessageFileRepository)
        {
            _mapper = mapper;
            _claims = claims;
            _httpClientFactory = httpClientFactory;
            _tsysUserRepository = tsysUserRepository;
            _tmtnPushMsgToRepository = tmtnPushMsgToRepository;
            _tbdmCodeDetailRepository = tbdmCodeDetailRepository;
            _tmtnPushMsgResultRepository = tmtnPushMsgResultRepository;
            _tdevDevStoreRepository = tdevDevStoreRepository;
            _tsysUserService = tsysUserService;
            _messageRepository = messageRepository;
            _tsysMessageFileRepository= tsysMessageFileRepository;
            string IsEmail = configuration.GetSection("IsSendEmail")?.Value;
            IsSendEmail = !string.IsNullOrEmpty(IsEmail)? IsEmail :"true";
        }


        public async Task<bool> PushAlarmMsgAsync(TpushMsgModel pushModel,string Subject=null,RabbitMQModel rabbitMQModel=null)
        {
            try
            {
                List<MessageFile> messageFiles = pushModel.FileList;
                pushModel.FileList = null;
                log.Info($"发送消息-Begin");
                log.Info($"发送消息-接收数据【{JsonConvert.SerializeObject(pushModel)}】");
                int msgStatus = DataDictionaryHelper.GetMsgStatus(pushModel.C_MsgTypeCode);
                pushModel.msgStatus = msgStatus;
                string createBy = "6e864cbc-5252-11ec-8681-fa163e02b3e4";
                var devStore = await _tdevDevStoreRepository.GetByIdAsync(pushModel.C_DevStoreCode);
                if(devStore == null) return await Task.FromResult(false);
                pushModel.DevName = devStore.C_Name;
                pushModel.DevNumber = devStore.C_NumberCode;
                var predicate = PredicateBuilder.New<TMTN_PushMsgTo>(true);//查询条件,推荐后台使用这种方式灵活筛选

                if (!string.IsNullOrEmpty(pushModel.C_DevStoreCode))
                {
                    predicate = predicate.And(i => i.C_DevStoreCode.Equals(pushModel.C_DevStoreCode));
                }
                if (!string.IsNullOrEmpty(pushModel.C_MsgTypeCode))
                {
                    predicate = predicate.And(i => i.C_MsgTypeCode.Equals(pushModel.C_MsgTypeCode));
                }
                IEnumerable<TMTN_PushMsgTo> pushMsgTo = await _tmtnPushMsgToRepository.GetByConditionAsync(predicate);
                IList<TMTN_PushMsgTo> pushMsgTolist = pushMsgTo.ToList();
                //IEnumerable<TSYS_User> users = await _tsysUserRepository.GetByConditionAsync(x=>x.C_Status == "1");
                IList<TSYS_User> userList = _tsysUserRepository.GetUserList();//users.ToList();
                IEnumerable<TBDM_CodeDetail> tBDMCodeDetail = await _tbdmCodeDetailRepository.GetAllAsync();
                IList<TBDM_CodeDetail> tBDMCodeDetailList = tBDMCodeDetail.ToList();
                List<string> sendUserWechatIDList = new List<string>();
                List<TMTN_PushMsgResult> pushMsgResultList = new List<TMTN_PushMsgResult>();
                log.Info($"发送消息-pushMsgTolist【{JsonConvert.SerializeObject(pushMsgTolist)}】");
                foreach (var pushMsgToItem in pushMsgTolist)
                {
                    var user = userList.Where(x => x.C_UserID.ToString() == pushMsgToItem.C_PushPersonCode)?.FirstOrDefault();
                    if (user is null)
                        continue;
                    if (string.IsNullOrWhiteSpace(pushModel.UserName))
                    {
                        var creadUser = await _tsysUserService.GetByIdAsync(_claims.ApiUserId);
                        createBy = _claims.ApiUserId.ToString();
                        pushModel.UserName = creadUser?.C_Name;
                        pushModel.UserMobile = creadUser?.C_Mobile;
                    }
                     
                    if (pushMsgToItem.C_PushTypeCode == "PUSH_TYPE_001")//Email
                    {
                        if (!string.IsNullOrEmpty(user.C_Email))
                        {
                            if (!string.IsNullOrEmpty(user.C_Email))
                            {

                                switch (pushModel.C_MsgTypeCode)
                                {
                                    case "MSG_TYPE_001"://通知维修消息

                                        break;
                                    case "MSG_TYPE_002"://通知运维消息

                                        break;
                                    case "MSG_TYPE_003"://通知巡检消息

                                        break;
                                    case "MSG_TYPE_004"://巡检异常消息

                                        break;
                                    case "MSG_TYPE_005"://异常消除消息

                                        break;
                                    case "MSG_TYPE_006"://维修确认消息

                                        break;
                                    case "MSG_TYPE_007"://维修取消消息

                                        break;
                                    case "MSG_TYPE_008"://维修完成消息

                                        break;
                                    case "MSG_TYPE_009"://运维取消消息

                                        break;
                                    case "MSG_TYPE_010"://异常确认消息

                                        break;
                                    case "MSG_TYPE_011"://设备启停消息

                                        break;
                                    case "MSG_TYPE_012"://设备点报警

                                        break;
                                    case "MSG_TYPE_013"://设备点报警取消
                                        break;
                                    case "MSG_TYPE_014"://正在维修消息
                                        break;
                                    case "MSG_TYPE_015"://维修返工消息
                                        break;
                                    case "MSG_TYPE_016"://维修完成确认
                                        break;
                                    default:
                                        break;
                                }
                                string msg =
                                    "<p><td>设备编号:</td>" + pushModel.DevNumber + "</p>" +
                                    "<p><td>设备名称:</td>" + pushModel.DevName + "</p>" +
                                    "<p><td>消息内容:</td>" + pushModel.Msg + "</p>" +
                                    "<p><td>设备地址:</td>" + pushModel.DevAddress + "</p>" +
                                    "<p><td> 报警时间:</td> " + pushModel.CreateOn + "</p>" +
                                    "<p><td> 上报人:</td> " + pushModel.UserName + "</p>"
                                    //+"<p><td> 上报人手机号:</td> " + pushModel.UserMobile + "</p>"
                                         ;
                                if (IsSendEmail== "true")
                                {
                                   var bols= EmailHelper.SendEmail(user.C_Email, tBDMCodeDetailList.Where(i => i.C_Code == pushMsgToItem.C_MsgTypeCode).Select(x => x.C_Name).FirstOrDefault(), pushModel.Subject, msg);
                                    if (!bols)
                                    {
                                        log.Info($"发送邮件失败【C_Email={user.C_Email},C_MsgTypeCode={pushMsgToItem.C_MsgTypeCode} ,C_DevStoreCode={pushModel.C_DevStoreCode}】");
                                    }
                                }
                            }

                        }
                        pushMsgResultList.Add(new TMTN_PushMsgResult
                        {
                            C_ID = Guid.NewGuid().ToString(),
                            C_PushMsgToCode = pushMsgToItem.C_PushPersonCode,
                            //C_Content = "消息主题:" + pushModel.Subject + " 设备编号:" + pushModel.DevNumber + " 设备名称:" + pushModel.DevName + " 设备地址:" + pushModel.DevAddress + " 消息内容:" + pushModel.Msg,
                            C_Content = JsonConvert.SerializeObject(pushModel),
                            C_PushTypeCode = pushMsgToItem.C_PushTypeCode,
                            C_DevStoreCode = pushMsgToItem.C_DevStoreCode,
                            C_MsgTypeCode = pushModel.C_MsgTypeCode,
                            C_Subject = Subject,
                            C_CreateBy = new Guid(createBy),
                            D_CreateOn = DateTime.Now,
                            C_Status = "1"
                        }) ;
                    }
                    if (pushMsgToItem.C_PushTypeCode == "PUSH_TYPE_002")//wx
                    {
                        //if (!string.IsNullOrEmpty(user.C_WechatID)&& IsSendEmail == "true")
                        //{
                        //    if (!sendUserWechatIDList.Contains(user.C_WechatID))
                        //        sendUserWechatIDList.Add(user.C_WechatID);
                        //}
                        log.Info($"发送消息-获取微信C_WxopenID【{user.C_WxopenID}】用户名字【{user.C_Name}】IsSendEmail【{IsSendEmail}】");
                        if (!string.IsNullOrEmpty(user.C_WxopenID) && IsSendEmail == "true")
                        {
                            if (!sendUserWechatIDList.Contains(user.C_WxopenID))
                                sendUserWechatIDList.Add(user.C_WxopenID);
                        }
                        pushMsgResultList.Add(new TMTN_PushMsgResult
                        {
                            C_ID = Guid.NewGuid().ToString(),
                            C_PushMsgToCode = pushMsgToItem.C_PushPersonCode,
                            //C_Content = "消息主题:" + pushModel.Subject + " 设备编号:" + pushModel.DevNumber + " 设备名称:" + pushModel.DevName + " 设备地址:" + pushModel.DevAddress + " 消息内容:" + pushModel.Msg,
                            C_Content = JsonConvert.SerializeObject(pushModel),
                            C_PushTypeCode = pushMsgToItem.C_PushTypeCode,
                            C_DevStoreCode = pushMsgToItem.C_DevStoreCode,
                            C_MsgTypeCode = pushModel.C_MsgTypeCode,
                            C_Subject = Subject,
                            C_CreateBy = new Guid(createBy),
                            D_CreateOn = DateTime.Now,
                            C_Status = "1"
                        });
                    }


                }
                log.Info($"发送消息-sendUserWechatIDList【{JsonConvert.SerializeObject(sendUserWechatIDList)}】pushMsgResultList=【{JsonConvert.SerializeObject(pushMsgResultList)}】");
                string GenerationCode = "";
                switch (pushModel.GenerationType)
                {
                    case 1:  GenerationCode = pushModel.C_DevStoreCode; break;
                    case 2: GenerationCode = _claims.ApiUserId.ToString(); break;
                    case 3: GenerationCode = "6e864cbc-5252-11ec-8681-fa163e02b3e4"; break;
                }
                TSYS_Message message = new TSYS_Message
                {
                    C_ID = Guid.NewGuid().ToString(),
                    C_LicenseCode= "SYSTEM",
                    C_Content = JsonConvert.SerializeObject(pushModel),
                    C_MsgTypeCode = pushModel.C_MsgTypeCode,
                    C_Subject = Subject,
                    D_MsgCreateOn = Convert.ToDateTime(pushModel.CreateOn),
                    C_GenerationCode= GenerationCode,
                    I_GenerationType = pushModel.GenerationType,
                    I_MsgStatus = pushModel.msgStatus,
                    C_DevStoreCode = pushModel.C_DevStoreCode,
                    C_Remark = "",
                    C_CreateBy = createBy,
                    C_Creator = "Api",
                    D_CreateOn = DateTime.Now,
                    C_Status = "1"
                };
                List<TSYS_MessageFile> FileList = null;
                if (messageFiles != null)
                {
                    FileList=new List<TSYS_MessageFile>();
                    foreach (var item in messageFiles)
                    {
                        TSYS_MessageFile mesFile = new TSYS_MessageFile
                        {
                            C_ID = Guid.NewGuid().ToString(),
                            C_MessageCode= message.C_ID,
                            C_Url=item.Url,
                            C_Text = item.Text,
                            C_Type = item.Type,
                            C_CreateBy = createBy,
                            D_CreateOn = DateTime.Now,
                            C_Status = "1"
                        };
                        FileList.Add(mesFile);
                    }
                }
                if (sendUserWechatIDList.Any())
                {
                    try
                    {
                        #region 一次性订阅 -不用了【2025-2-11】
                        //switch (pushModel.C_MsgTypeCode)
                        //{
                        //    case "MSG_TYPE_001"://通知维修消息
                        //                        //var MSG_TYPE_001 = new
                        //                        //{
                        //                        //    character_string19 = new { value = pushModel.DevNumber ?? "" },
                        //                        //    name4 = new { value = pushModel.UserName ?? "" },
                        //                        //    thing7 = new { value = pushModel.Subject ?? "" },
                        //                        //    time15 = new { value = pushModel.DevName ?? "" },
                        //                        //    thing16 = new { value = pushModel.Msg ?? "" }
                        //                        //};
                        //                        //new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_001, "jGFacWkS9keOmvN71DN-7qX-wR30NdqOuQaPSNIMfnk");//
                        //        var MSG_TYPE_001 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_001);//
                        //        break;
                        //    case "MSG_TYPE_002"://通知运维消息
                        //                        //var MSG_TYPE_002 = new
                        //                        //{
                        //                        //    character_string19 = new { value = pushModel.DevNumber ?? "" },
                        //                        //    name4 = new { value = pushModel.UserName ?? "" },
                        //                        //    thing7 = new { value = pushModel.Subject ?? "" },
                        //                        //    time15 = new { value = pushModel.DevName ?? "" },
                        //                        //    thing16 = new { value = pushModel.Msg ?? "" }
                        //                        //};
                        //                        //new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_002, "jGFacWkS9keOmvN71DN-7qX-wR30NdqOuQaPSNIMfnk");//
                        //        var MSG_TYPE_002 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_002);//
                        //        break;
                        //    case "MSG_TYPE_003"://通知巡检消息
                        //                        //var MSG_TYPE_003 = new
                        //                        //{
                        //                        //    character_string19 = new { value = pushModel.DevNumber ?? "" },
                        //                        //    name4 = new { value = pushModel.UserName ?? "" },
                        //                        //    thing7 = new { value = pushModel.Subject ?? "" },
                        //                        //    time15 = new { value = pushModel.DevName ?? "" },
                        //                        //    thing16 = new { value = pushModel.Msg ?? "" }
                        //                        //};
                        //                        //new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_003, "jGFacWkS9keOmvN71DN-7qX-wR30NdqOuQaPSNIMfnk");//
                        //        var MSG_TYPE_003 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_003);//
                        //        break;
                        //    case "MSG_TYPE_004"://巡检异常消息
                        //        var MSG_TYPE_004 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_004);
                        //        break;
                        //    case "MSG_TYPE_005"://异常消除消息
                        //        var MSG_TYPE_005 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_005);
                        //        break;
                        //    case "MSG_TYPE_006"://维修确认消息
                        //        var MSG_TYPE_006 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_006);
                        //        break;
                        //    case "MSG_TYPE_007"://维修取消消息
                        //        var MSG_TYPE_007 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_007);
                        //        break;
                        //    case "MSG_TYPE_008"://维修完成消息
                        //    case "MSG_TYPE_014"://正在维修消息
                        //    case "MSG_TYPE_015"://维修返工消息
                        //    case "MSG_TYPE_016"://维修完成确认
                        //        var MSG_TYPE_008 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_008);
                        //        break;
                        //    case "MSG_TYPE_009"://运维取消消息
                        //        var MSG_TYPE_009 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_009);
                        //        break;
                        //    case "MSG_TYPE_010"://异常确认消息
                        //        var MSG_TYPE_010 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_010);
                        //        break;
                        //    case "MSG_TYPE_011"://设备启停消息
                        //        var MSG_TYPE_011 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_011);
                        //        break;
                        //    case "MSG_TYPE_012"://设备点报警
                        //        var MSG_TYPE_012 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_012);
                        //        break;
                        //    case "MSG_TYPE_013"://设备点报警取消
                        //        var MSG_TYPE_013 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_013);
                        //        break;
                        //    case "MSG_TYPE_019"://上报报警
                        //    case "MSG_TYPE_020"://报警取消
                        //    case "MSG_TYPE_021"://报警确认
                        //    case "MSG_TYPE_022"://报警完成
                        //        var MSG_TYPE_020 = new
                        //        {
                        //            character_string1 = new { value = pushModel.DevNumber ?? "" },
                        //            thing2 = new { value = pushModel.DevName ?? "" },
                        //            thing16 = new { value = pushModel.Subject ?? "" },
                        //            time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //            thing6 = new { value = pushModel.Msg ?? "" }
                        //        };
                        //        new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, MSG_TYPE_020);
                        //        break;
                        //    default:
                        //        break;
                        //}
                        #endregion

                        string typeName = tBDMCodeDetailList.Where(i => i.C_Code == pushModel.C_MsgTypeCode).Select(x => x.C_Name).FirstOrDefault();
                        #region 长期订阅 【2025-2-11】
                        //var content = new
                        //{
                        //    character_string1 = new { value = devStore.C_NumberCode ?? "" },
                        //    time2 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                        //    short_thing3 = new { value = typeName ?? "" }
                        //};
                        //new WeChatHelper(_httpClientFactory).PushMessageToUser(sendUserWechatIDList, content, WXConstModel.WatchHealthAlarm_TemplateId);
                        #endregion

                        #region 公众号模板【2025-3-5】
                        string msg = pushModel.Msg;
                        if (msg.Length>20)
                        {
                            msg=msg.Substring(0,17)+"...";
                        }
                        string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm");
                        if (!string.IsNullOrEmpty(pushModel.CreateOn))
                        {
                            time=Convert.ToDateTime(pushModel.CreateOn).ToString("yyyy-MM-dd HH:mm");
                        }
                        #region //_wP22WQxAlfYGfS8zlnHTl_-KgKS8j_FP5HDeqfsPtU
                        //设备编号{ { character_string2.DATA} }
                        //设备名称{ { thing1.DATA} }
                        //关闭状态{ { thing3.DATA} }
                        //关闭时间{ { time4.DATA} }
                        //var data = new
                        //{
                        //    thing1 = new { value = devStore.C_Name }, //异常位置
                        //    character_string2 = new { value = devStore.C_NumberCode },//异常点位
                        //    thing3 = new { value = typeName }, //上报人
                        //    time4 = new { value = pushModel.CreateOn}//上报时间
                        //};
                        #endregion

                        #region 7eGjzIBAyysTOLfcn-oqkpOCEL_My5ItXHkd_DdniGw
                        //设备名称{ { thing2.DATA} }
                        //设备编号{ { character_string20.DATA} }
                        //报警时间{ { time4.DATA} }
                        //报警内容{ { thing5.DATA} }
                        var data = new
                        {
                            thing2 = new { value = devStore.C_Name }, //异常位置
                            character_string20 = new { value = devStore.C_NumberCode },//异常点位
                            thing5 = new { value = msg }, //上报人
                            time4 = new { value = time }//上报时间
                        };
                        #endregion
                        var row = new WeChatHelper(_httpClientFactory).PushGZHMessageToUser(sendUserWechatIDList, WXConstModel.GZHDevAlarmTemplateId, "", data, "", "");
                        #endregion

                    }
                    catch (Exception ex)
                    {
                        log.Info($" 发送消息-WeChatHelper-发送异常【C_MsgTypeCode={pushModel.C_MsgTypeCode}】 异常信息:{ex.Message}");
                        throw;
                    }
                }
                if (pushMsgResultList.Any())
                {
                    _messageRepository.Create(message);
                    bool messResult = await _messageRepository.SaveAsync();
                    if (messResult)
                    {
                        if (FileList!=null&& FileList.Count>0)
                        {
                            int fileSaveResult = await _tsysMessageFileRepository.CreateRangeAsync(FileList);
                        }
                        //await _tmtnPushMsgResultRepository.CreateRangeAsync(pushMsgResultList);
                        foreach (var content in pushMsgResultList)
                        {
                            try
                            {
                                content.C_MessageCode = message.C_ID;
                                _tmtnPushMsgResultRepository.Create(content);
                                bool bols = await _tmtnPushMsgResultRepository.SaveAsync();
                            }
                            catch (Exception ex)
                            {
                                log.Info($" 发送消息-pushMsgResultList-TMTN_PushMsgResult-保存异常【数据:{JsonConvert.SerializeObject(content)}】 异常信息:{ex.Message}");
                                Console.WriteLine(ex.Message);
                            }

                        }
                        //
                        if (pushModel.C_MsgTypeCode == "MSG_TYPE_012" && rabbitMQModel != null)
                        {
                            rabbitMQModel.msgStr = JsonConvert.SerializeObject(message);
                            bool bol = await RabbitMQHelper.SnedRabbitMQ_ExchangeDirect(rabbitMQModel);
                            if (!bol)
                            {
                                log.Info($" 发送消息-[MSG_TYPE_012]发送RabbitMQ消息失败【TMTN_PushMsgResult:{rabbitMQModel.msgStr}】");
                            }
                        }
                    }
                    else
                    {
                        log.Info($"发送消息-TSYS_Message 数据添加失败【{JsonConvert.SerializeObject(message)}】");
                    }
                }
                log.Info($"发送消息-END");
                return await Task.FromResult(true);
            }
            catch (Exception ex)
            {
                log.Info($"发送消息-Error【{ex.Message}】");
                return await Task.FromResult(false);
            }
        }
    
        public async Task PushRecordMsgAsync(string type,TispRecordItemAlarmDetailViewModel viewModel)
        {
            try
            {
                IEnumerable<TSYS_User> users = await _tsysUserRepository.GetByRecordItemCodeAsync(viewModel.C_ID.ToString());
                if (!users.Any())
                {
                    return;
                }
                //List<string> openIds = users.Where(u => u.C_WechatID != null).Select(i => i.C_WechatID).ToList();
                //var content = new
                //{
                //    thing2 = new { value = itemDetail.ReportUserName ?? "" },
                //    time4 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm") },
                //    thing5 = new { value = "巡检异常取消" ?? "" },
                //    thing6 = new { value = itemDetail.C_Name ?? "" },
                //    thing9 = new { value = itemDetail.SpotName ?? "" }
                //};
                //new WeChatHelper(_httpClientFactory).PushMessageToUser(openIds, content);

                List<string> openIds = users.Where(u => u.C_WxopenID != null).Select(i => i.C_WxopenID).ToList();
                //var data = new
                //{
                //    thing4 = new { value = viewModel.SpotName }, //异常位置
                //    thing6 = new { value = viewModel.C_Name },//异常点位
                //    thing2 = new { value = viewModel.ReportUserName }, //上报人
                //    time3 = new { value = DateTime.Now.ToString("yyyy-MM-dd HH:mm") }//上报时间
                //};
                string statusStr = "未知";
                //1 = 正常; 0 = 异常; 2 = 恢复; 3 = 确认异常; 4 = 取消异常
                switch (viewModel.SecurityStatus)
                {
                    case "0":  statusStr = "异常"; break;
                    case "1": statusStr = "正常"; break;
                    case "2": statusStr = "恢复"; break;
                    case "3": statusStr = "确认异常"; break;
                    case "4": statusStr = "取消异常"; break;
                }
                var data = new
                {
                    thing1 = new { value = viewModel.SpotName }, //异常位置
                    character_string2 = new { value = viewModel.SpotNumber },//异常点位
                    thing3 = new { value = statusStr }, //上报人
                    time4 = new { value = DateTime.Now.ToString("yyyy-MM-dd HH:mm") }//上报时间
                };
                var row = new WeChatHelper(_httpClientFactory).PushGZHMessageToUser(openIds, null, "", data, "", "");
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}