using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Linq; using System.Net.Http; using System.Runtime.Remoting.Messaging; using System.Threading; using System.Threading.Tasks; using System.Web.Http; using Lottomat.Application.Busines.CommonManage; using Lottomat.Application.Busines.PublicInfoManage; using Lottomat.Application.Code; using Lottomat.Application.Entity.CommonEntity; using Lottomat.Application.Entity.PublicInfoManage; using Lottomat.SOA.API.Controllers.Base; using Lottomat.Util.Extension; using Lottomat.Application.Cache; using Lottomat.Util.WebControl; using Lottomat.Application.Entity.ViewModel.ConsultationMangerModel; using Lottomat.Application.Entity.InformationManage; using Lottomat.Application.Busines.SystemManage; using Lottomat.Application.Entity.SystemManage; using Lottomat.Application.Entity.SystemManage.ViewModel; using Lottomat.Util; namespace Lottomat.SOA.API.Controllers.V1 { public class ZxNewsController : BaseApiController { #region 实例 /// /// 新闻bll /// public static readonly NewsBLL newsBll = new NewsBLL(); /// /// 字典缓存bll /// private static readonly DataItemCache dataItemCache = new DataItemCache(); private static readonly CommonBLL commonBll = new CommonBLL(); /// /// 彩种编码 /// //主分类名称 private static readonly string[] types = { "FC3D", "SSQ", "PL3", "QT" }; //主分类下面的预测名称 private static readonly string[] itemValue = { "3DYC", "P3YC", "SSQYC", "DLT" }; /// /// 锁 /// private static readonly object _lock = new Object(); /// /// 获取文章详情 /// private static string GetNewsDetailSql = "SELECT [PK],[FullHead],[CreateDate],[CreateUserName],[NewsContent],[PeriodsNumber],[IsRecommend],[IsHot],[PV],[TitleElement],[DescriptionElement],[KeywordElement] FROM [dbo].[Base_News] WHERE [PK] = {0}"; /// /// 获取新闻摘要 /// private static string GetNewsAbstractSql = "SELECT [PK],[FullHead] FROM [dbo].[Base_News] WHERE [PK] = {0}"; #endregion #region 查询咨询首页的分类下面最新的5条数据 /// /// 查询咨询首页的分类下面最新的5条数据 /// /// [HttpPost] public HttpResponseMessage GetHomeNewsList() { BaseJson> resultMsg = new BaseJson> { Status = (int)JsonObjectStatus.Error, Message = "服务器未知错误。", Data = null }; Logger(typeof(ZxNewsController), "", "查询咨询首页的分类下面最新的5条数据-GetHomeNewsList", () => { List res = Cache.Factory.CacheFactory.Cache().GetCache>("HttpResponseMessage_GetHomeNewsList"); if (res == null || res.Count == 0) { res = new List(); var data = dataItemCache.GetDataItemList("FC3D|SSQ|PL3|QT").Where(n => itemValue.Contains(n.ItemValue)); foreach (string code in types) { #region 不用 //foreach (string value in itemValue) //{ // var data = dataItemCache.GetDataItemList(code).Where(n => n.ItemValue.Equals(value)); // string[] ids = data.Select(d => d.ItemDetailId).ToArray(); // List news = newsBll.FindList(n => n.IsDelete == false && n.TypeId == 1 && ids.Contains(n.CategoryId), "CreateDate", false, 5, 1, out int records).ToList(); // //newsBll.GetPageList(n => n.IsDelete == false && n.TypeId == 1 && ids.Contains(n.CategoryId), page).ToList(); // if (news.Count > 0) // { // News_Preview preview = new News_Preview // { // NewsType = code // }; // DataItemEntity list = dataItemCache.GetDataItemEntityByCode(code); // preview.ItemName = list.ItemName; // List newsPreviewItem = new List(); // foreach (NewsEntity n in news) // { // NewsPreviewItem preItem = new NewsPreviewItem // { // AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), // NewsId = n.NewsId, // Title = n.FullHead // }; // newsPreviewItem.Add(preItem); // } // preview.NewsPreviewItem = newsPreviewItem; // res.Add(preview); // } //} #endregion List news = GetHomeNewsList(code); if (news.Count > 0) { News_Preview preview = new News_Preview { NewsType = code }; var tmpbaseitme = data.Single(w => w.EnCode == code); preview.ItemName = tmpbaseitme.ItemName; List newsPreviewItem = new List(); foreach (NewsEntity n in news) { NewsPreviewItem preItem = new NewsPreviewItem { AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), NewsId = n.PK.ToString(), Title = n.FullHead }; newsPreviewItem.Add(preItem); } preview.NewsPreviewItem = newsPreviewItem; res.Add(preview); } } Cache.Factory.CacheFactory.Cache().WriteCache(res, "HttpResponseMessage_GetHomeNewsList"); } resultMsg = new BaseJson> { Status = (int)JsonObjectStatus.Success, Data = res, Message = JsonObjectStatus.Success.GetEnumText(), BackUrl = null }; }, e => { resultMsg = new BaseJson> { Status = (int)JsonObjectStatus.Exception, Data = null, Message = JsonObjectStatus.Exception.GetEnumText() + ",异常信息:" + e.Message, BackUrl = null }; }); return resultMsg.TryToJson().ToHttpResponseMessage(); } /// /// 查询咨询首页的分类下面最新的5条数据 详情看sql语句 2018/9/25加上缓存 /// /// private static List GetHomeNewsList(string code) { string key = $"Cache-NewssList-{code}"; List list = webCache.GetObject>(key); if (list == null) { string strSql = @"select top 5 * from Base_News where CategoryId in( SELECT d.ItemDetailId FROM Base_DataItemDetail d LEFT JOIN Base_DataItem i ON i.ItemId = d.ItemId WHERE 1 = 1 AND d.EnabledMark = 1 AND d.DeleteMark = 0 AND i.ItemCode ='{0}' AND d.ItemValue in('3DYC','P3YC','SSQYC','DLT') )AND IsDelete = 0 AND TypeId = 1 order by CreateDate desc"; string sql = string.Format(strSql, code); list = commonBll.ExcuteSqlDataTable(sql, DatabaseLinksEnum.Base, null).DataTableToList(); if (list != null) webCache.AddObject(key, list, 5);//缓存时间5分钟 } return list; } #endregion #region 彩种下面的文章列表 /// /// 彩种下面的文章列表 /// /// [HttpPost] public HttpResponseMessage GetColorNewsList(ColorNews arg) { BaseJson4Page resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Error, Message = "服务器未知错误。", Data = null }; Logger(typeof(ZxNewsController), arg.TryToJson(), "彩种下面的文章列表-GetColorNewsList", () => { if (!string.IsNullOrEmpty(arg.Category)) { Pagination page = new Pagination { rows = arg.PageSize, page = arg.PageIndex, sidx = "CreateDate", sord = "desc", records = 0, conditionJson = "" }; //获取分类信息 List data = dataItemCache.GetDataItemList(arg.Category); //分类Ids string[] ids = data.Select(d => d.ItemDetailId).ToArray(); string key = $"Cache-NewssList-Category-{arg.Category}"; List news = webCache.GetObject>(key); if (news == null) { //获取数据 news = newsBll.GetPageList(n => n.IsDelete == false && n.TypeId == 1 && ids.Contains(n.CategoryId), page).ToList(); if (news != null) webCache.AddObject(key, news, 5);//缓存时间5分钟 } if (news.Count > 0 || news.Any()) { //分类名称 News_Preview preview = new News_Preview { NewsType = arg.Category }; //项目名称 DataItemEntity entity = dataItemCache.GetDataItemEntityByCode(arg.Category); preview.ItemName = entity.ItemName; List newsPreviewItem = news.Select(n => new NewsPreviewItem { AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), NewsId = n.NewsId, Title = n.FullHead }).ToList(); preview.NewsPreviewItem = newsPreviewItem; PageData pageData = new PageData { TotalRow = page.records, TotalPage = Math.Ceiling(page.records * 1.0 / arg.PageSize).TryToInt32(), PageIndex = arg.PageIndex, Rows = new List { preview } }; resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Success, Data = pageData, Message = JsonObjectStatus.Success.GetEnumText(), BackUrl = null }; } else { resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Fail, Data = null, Message = JsonObjectStatus.Fail.GetEnumText(), BackUrl = null }; } } else { resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Fail, Data = null, Message = JsonObjectStatus.Fail.GetEnumText() + ",请求参数Category为空。", BackUrl = null }; } }, e => { resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Exception, Data = null, Message = JsonObjectStatus.Exception.GetEnumText() + ",异常信息:" + e.Message, BackUrl = null }; }); return resultMsg.TryToJson().ToHttpResponseMessage(); } #endregion #region 新闻详情 /// /// 新闻详情 /// /// [HttpPost] public HttpResponseMessage GetNewsDetails(NewsDetail arg) { BaseJson resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Error, Message = "服务器未知错误。", Data = null }; Logger(typeof(ZxNewsController), arg.TryToJson(), "新闻详情-GetNewsDetails", () => { if (!string.IsNullOrEmpty(arg.NewsId)) { #region 不用 //NewsEntity data = newsBll.GetEntity(arg.NewsId); ////获取数据 //GetZX_NewsDetails res = new GetZX_NewsDetails(); //if (data != null) //{ // res = new GetZX_NewsDetails // { // NewsId = data.NewsId, // PK = data.PK, // FullHead = data.FullHead, // CreateDate = data.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), // CreateUserName = data.CreateUserName, // NewsContent = data.NewsContent, // PeriodsNumber = data.PeriodsNumber, // IsRecommend = data.IsRecommend ?? false, // IsHot = data.IsHot ?? false, // PV = data.PV ?? 0, // TitleElement = data.TitleElement, // DescriptionElement = data.DescriptionElement, // KeywordElement = data.KeywordElement, // }; // #region 新增上一期、下一期预告 // List preAndNext = GetNewsListByPk(res.PK ?? 1); // res.PreAndNextNewsList = preAndNext; // #endregion //} #endregion string key = $"Cache-DataTable-{arg.NewsId}"; DataTable data = webCache.GetObject(key); if (data == null) { data = commonBll.ExcuteSqlDataTable(string.Format(GetNewsDetailSql, arg.NewsId), DatabaseLinksEnum.Base); if (data != null) webCache.AddObject(key, data, 5);//缓存时间5分钟 } if (data != null && data.Rows.Count > 0) { NewsEntity entity = data.DataTableToObject(); GetZX_NewsDetails res = new GetZX_NewsDetails { NewsId = entity.NewsId, PK = entity.PK, FullHead = entity.FullHead, CreateDate = entity.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), CreateUserName = entity.CreateUserName, NewsContent = entity.NewsContent, PeriodsNumber = entity.PeriodsNumber, IsRecommend = entity.IsRecommend ?? false, IsHot = entity.IsHot ?? false, PV = entity.PV ?? 0, TitleElement = entity.TitleElement, DescriptionElement = entity.DescriptionElement, KeywordElement = entity.KeywordElement, }; #region 新增上一期、下一期预告 List preAndNext = GetNewsListByPk(res.PK ?? 1); res.PreAndNextNewsList = preAndNext; #endregion resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Success, Data = res, Message = JsonObjectStatus.Success.GetEnumText(), BackUrl = null }; } } else { resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Fail, Data = null, Message = JsonObjectStatus.Fail.GetEnumText() + ",请求参数有误。", BackUrl = null }; } }, e => { resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Exception, Data = null, Message = JsonObjectStatus.Exception.GetEnumText() + ",异常信息:" + e.Message, BackUrl = null }; }); return resultMsg.TryToJson().ToHttpResponseMessage(); } /// /// 获取上一期、下一期文章集合 /// /// /// private List GetNewsListByPk(int pk) { List list = new List(); try { #region 上一期 NewsEntity dataPre = GetPreNewsByPk(pk); if (dataPre != null) { //上一期 PreAndNextNews onThene = new PreAndNextNews { Which = 1, Title = dataPre.FullHead, NewsId = dataPre.PK.ToString() }; list.Add(onThene); } else { //上一期 PreAndNextNews onThene = new PreAndNextNews { Which = 1, Title = "已经是最新一期啦", NewsId = "" }; list.Add(onThene); } #endregion #region 下一期 NewsEntity dataNext = GetNextNewsByPk(pk); if (dataNext != null) { //下一期 PreAndNextNews onThene = new PreAndNextNews { Which = 2, Title = dataNext.FullHead, NewsId = dataNext.PK.ToString() }; list.Add(onThene); } else { //下一期 PreAndNextNews onThene = new PreAndNextNews { Which = 2, Title = "已经是最后一期啦", NewsId = "" }; list.Add(onThene); } #endregion } catch (Exception e) { return new List(); } return list; } /// /// 递归获取上一期文章 /// /// /// private NewsEntity GetPreNewsByPk(int pk) { NewsEntity entity = null; int tempPrePk = pk; lock (_lock) { do { //数据库45524为第一条 tempPrePk = (tempPrePk - 1) <= 0 ? 45524 : (tempPrePk - 1); //entity = newsBll.GetEntity(n => n.PK == tempPrePk); string key = $"Cache-GetPreNewsByPk-{pk}"; DataTable table = webCache.GetObject(key); if (table == null) { table = commonBll.ExcuteSqlDataTable(string.Format(GetNewsAbstractSql, tempPrePk.ToString()), DatabaseLinksEnum.Base); if (table != null) webCache.AddObject(key, table, 5);//缓存时间5分钟 } entity = table.DataTableToObject(); } while (entity == null); } return entity; } /// /// 获取下一期 /// /// /// private NewsEntity GetNextNewsByPk(int pk) { NewsEntity entity = null; int tempPrePk = pk; lock (_lock) { do { tempPrePk = (tempPrePk + 1) <= 0 ? 45524 : (tempPrePk + 1); string key = $"Cache-GetNextNewsByPk-{pk}"; DataTable table = webCache.GetObject(key); if (table == null) { table = commonBll.ExcuteSqlDataTable(string.Format(GetNewsAbstractSql, tempPrePk.ToString()), DatabaseLinksEnum.Base); if (table != null) webCache.AddObject(key, table, 5);//缓存时间5分钟 } entity = table.DataTableToObject(); } while (entity == null); //return newsBll.GetEntity(n => n.PK == tempPrePk); } return entity; } #endregion #region 彩种下面的分类名称和文章列表 /// /// 彩种下面的分类名称和文章列表 /// /// [HttpPost] public HttpResponseMessage GetClassiFicationNewsList(GetClassiFicationNewsList arg) { BaseJson resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Error, Message = "服务器未知错误。", Data = null }; Logger(typeof(ZxNewsController), arg.TryToJson(), "彩种下面的分类名称和文章列表-GetClassiFicationNewsList", () => { if (!string.IsNullOrEmpty(arg.Category)) { //获取分类信息 List data = dataItemCache.GetDataItemList(arg.Category); List res = data.Select(d => new ItemList { ItemId = d.ItemDetailId, SimpleSpelling = d.SimpleSpelling.ToUpper(), ItemName = d.ItemName }).ToList(); //文章Ids string firstId = res[0].ItemId; //加缓存 string key = $"Cache-NewssList-GetClassiFicationNewsList-{arg.Category}"; List news = webCache.GetObject>(key); if (news == null) { news = newsBll.GetList(t => t.CategoryId.Equals(firstId)).Take(GlobalStaticConstant.SYSTEM_DEFAULT_PAGE_SIZE).ToList(); if(news != null) webCache.AddObject(key, news, 5);//缓存时间5分钟 } List newsPreviewItem = new List(); if (news.Count > 0) { foreach (NewsEntity n in news) { NewsPreviewItem preItem = new NewsPreviewItem { AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), NewsId = n.NewsId, Title = n.FullHead }; newsPreviewItem.Add(preItem); } } ClassiFication result = new ClassiFication { ItemList = res, NewsList = newsPreviewItem }; resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Success, Data = result, Message = JsonObjectStatus.Success.GetEnumText(), BackUrl = null }; } else { resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Fail, Data = null, Message = JsonObjectStatus.Fail.GetEnumText() + ",请求参数Category为空。", BackUrl = null }; } }, e => { resultMsg = new BaseJson { Status = (int)JsonObjectStatus.Exception, Data = null, Message = JsonObjectStatus.Exception.GetEnumText() + ",异常信息:" + e.Message, BackUrl = null }; }); return resultMsg.TryToJson().ToHttpResponseMessage(); } #endregion #region 彩种下面的文章列表 /// /// 彩种下面的文章列表 /// /// [HttpPost] public HttpResponseMessage GetNewsList(GetNewsList arg) { BaseJson4Page resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Error, Message = "服务器未知错误。", Data = null }; Logger(typeof(ZxNewsController), arg.TryToJson(), "彩种下面的文章列表-GetNewsList", () => { if (!string.IsNullOrEmpty(arg.CategoryId)) { //Pagination page = new Pagination //{ // rows = arg.PageSize, // page = arg.PageIndex, // sidx = "CreateDate", // sord = "desc", // records = 0, // conditionJson = "" //}; //分类Ids string id = arg.CategoryId; List newsPreviewItem = new List(); int records = 0; //加缓存 string key = $"Cache-NewssList-GetNewsList-{arg.CategoryId}"; List news = webCache.GetObject>(key); if (news == null) { //获取数据 news = newsBll.FindList(t => t.CategoryId.Equals(id), "CreateDate", false, arg.PageSize, arg.PageIndex, out records).ToList(); if (news != null) webCache.AddObject(key, news, 5);//缓存时间5分钟 } if (news.Count > 0) { newsPreviewItem = news.Select(n => new NewsPreviewItem { AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), //NewsId = n.NewsId, NewsId = n.PK.ToString(), Title = n.FullHead }).ToList(); } else { //如果为空,则默认查询太湖字谜和彩神通字谜下面子分类咨询 List list = dataItemCache.GetDataItemListById(arg.CategoryId); if (list != null) { List itemDetailIds = list.Select(d => d.ItemDetailId).ToList(); //加缓存 key = $"Cache-NewssList-GetNewsList-temp-{arg.CategoryId}"; List temp = webCache.GetObject>(key); if (news == null) { //获取数据 temp = newsBll.FindList(t => itemDetailIds.Contains(t.CategoryId), "CreateDate", false, arg.PageSize, arg.PageIndex, out records).ToList(); if (temp != null) webCache.AddObject(key, temp, 5);//缓存时间5分钟 } newsPreviewItem = temp.Select(n => new NewsPreviewItem { AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), NewsId = n.PK.ToString(), Title = n.FullHead }).ToList(); } } #region 不用 2018-9-25 //lock (_lock) //{ // Trace.WriteLine("========加锁时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")); // Task task = Task.Factory.StartNew(() => // { // //获取数据 // List news = newsBll.FindList(t => t.CategoryId.Equals(id), "CreateDate", false, arg.PageSize, arg.PageIndex, out records).ToList();//.GetPageList(t => t.CategoryId.Equals(id), page).ToList(); // Trace.WriteLine("========请求到数据:" + news.Count); // if (news.Count > 0) // { // newsPreviewItem = news.Select(n => new NewsPreviewItem // { // AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), // //NewsId = n.NewsId, // NewsId = n.PK.ToString(), // Title = n.FullHead // }).ToList(); // } // else // { // //如果为空,则默认查询太湖字谜和彩神通字谜下面子分类咨询 // List list = dataItemCache.GetDataItemListById(arg.CategoryId); // if (list != null) // { // List itemDetailIds = list.Select(d => d.ItemDetailId).ToList(); // //获取数据 // List temp = newsBll.FindList(t => itemDetailIds.Contains(t.CategoryId), "CreateDate", false, arg.PageSize, arg.PageIndex, out records).ToList();//.GetPageList(t => t.CategoryId.Equals(id), page).ToList(); // //newsBll.GetPageList(t => itemDetailIds.Contains(t.CategoryId), page).ToList(); // newsPreviewItem = temp.Select(n => new NewsPreviewItem // { // AddTime = n.CreateDate.TryToDateTimeToString("yyyy-MM-dd"), // NewsId = n.PK.ToString(), // Title = n.FullHead // }).ToList(); // } // } // }); // task.Wait(); //} //Trace.WriteLine("当前线程ID:" + Thread.CurrentThread.ManagedThreadId); //Trace.WriteLine("========离开时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")); #endregion PageData pageData = new PageData { TotalRow = records, TotalPage = Math.Ceiling(records * 1.0 / arg.PageSize).TryToInt32(), PageIndex = arg.PageIndex, Rows = newsPreviewItem }; resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Success, Data = pageData, Message = JsonObjectStatus.Success.GetEnumText(), BackUrl = null }; } else { resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Fail, Data = null, Message = JsonObjectStatus.Fail.GetEnumText() + ",请求参数CategoryId为空。", BackUrl = null }; } }, e => { resultMsg = new BaseJson4Page { Status = (int)JsonObjectStatus.Exception, Data = null, Message = JsonObjectStatus.Exception.GetEnumText() + ",异常信息:" + e.Message, BackUrl = null }; }); return resultMsg.TryToJson().ToHttpResponseMessage(); } #endregion } }