using Antlr.Runtime.Tree; using Face.Domain.Application; using Face.Domain.Entities; using Face.Services.Cache; using Face.Services.DBUtility.Custom; using Face.Web.Areas.App.Models; using MySql.Data.MySqlClient; using PagedList; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Drawing.Printing; using System.Linq; using System.Net.Http.Headers; using System.Web; using System.Web.Mvc; using static Face.Web.Areas.App.Controllers.InterfaceController; using static Face.Web.Areas.App.Models.Roominfo; namespace Face.Web.Areas.App.Controllers { public class HistoryStatusSearchCondition { public int page { set; get; } public string sn { get; set; } public int[] arrReason { get; set; } public string st { get; set; } public string ed { get; set; } //true; show count /* * SELECT SN, COUNT(*) as cnt, '链路重新OnOpen, onError,onClose触发' as reason FROM `devicestatushistory` WHERE CreateTime > '2023-08-09 00:00:00' AND CreateTime < '2023-08-10 00:00:00' AND (Reason = '链路重新OnOpen触发' OR Reason = '链路重新OnOpen触发' OR Reason = '链路OnError触发') GROUP BY SN HAVING cnt > 2 ORDER BY cnt desc */ //false; show original data /* * SELECT * FROM `devicestatushistory` WHERE CreateTime > '2023-08-09 00:00:00' AND CreateTime < '2023-08-10 00:00:00' AND (Reason = '链路重新OnOpen触发' OR Reason = '链路重新OnOpen触发' OR Reason = '链路OnError触发') ORDER BY CreateTime DESC */ //public bool isShowCount { get; set; } } public class countstatushistory { public string SN { get; set; } public string Factory { get; set; } public int cnt { get; set; } public string reason { get; set; } } public class combineddeviceinfo { public string SerialNo { get; set; } public string DeviceStatus { get; set; } public string HotelName { get; set; } public string RoomNumber { get; set; } } public class expendcountstatushistory : countstatushistory { public string hotel { get; set; } public string room { get; set; } public string currentstatus { get; set; } public string onlinetime { get; set; } public string offlinetime { get; set; } public string offrateperc { get; set; } } public class snaggritem { public string SN { get; set; } public string Factory { get; set; } public int cnt { get; set; } public Dictionary dicReason { get; set; } public List evtlist { get; set; } } public class HistoryStatusRange { public DateTime breakPoint { get; set; } public int status { get; set; } } public class errohandling { public int HotelID { get; set; } /// /// 页数据最大 /// public int dataMax { get; set; } /// /// 页数据最小 /// public int dataMin { get; set; } /// /// 页 /// public int Pages { get; set; } /// /// 时间 /// public DateTime RoomMinDate { get; set; } /// /// 时间 /// public DateTime RoomMaxDate { get; set; } /// /// 错误信息 /// public string FaceName { get; set; } } public class LogController : BaseController { List li = new List(); // GET: App/Log public ActionResult FacebindingMessage(int? page)//人脸机绑定/解绑 { List lit = (List)Session["list"]; using (SqlSugarClient db = SqlSugarBase.GesmartDb()) { var userList = db.Queryable().ToList(); int pageNumber = page ?? 1; //每页显示多少条 int pageSize = 8; for (int i = 0; i < lit.Count; i++) { var id = Convert.ToInt32(lit[i]); li.AddRange(userList.Where(x => x.HotelCode == id).ToList()); li = li.OrderByDescending(x => x.bindingDate).ToList(); } IPagedList userPagedList = li.ToPagedList(pageNumber, pageSize); //将分页处理后的列表传给View return View(userPagedList); } } public ActionResult PmsMessage(int? page, string date = null, string state = null, string roomname = null)//pms数据记录 { List lit = (List)Session["list"]; List ZongRoominfo = (List)Session["ZongRoominfo"]; List li = new List(); using (SqlSugarClient db = SqlSugarBase.GesmartDb()) { var userList = db.Queryable().ToList(); ViewData["pmsLog"] = db.Queryable().ToList(); for (int i = 0; i < lit.Count; i++) { var id = Convert.ToInt32(lit[i]); li.AddRange(userList.Where(x => x.hotelid == id).ToList()); } li.AddRange(userList.Where(x => x.hotelid == null).ToList()); int pageNumber = page ?? 1; var message = db.Queryable().ToList(); ViewData["facemessage"] = message; //每页显示多少条 int pageSize = 11; li = li.OrderByDescending(x => x.pmsId).ToList(); if (state != null && state != "3") { ViewData["pmsstate"] = state; li = li.Where(x => x.pmstype == int.Parse(state)).ToList(); } if (date != null) { ViewData["pmsdate"] = date; li = li.Where(x => x.DateTime.ToString("yyyy/MM/dd").Contains(date)).ToList(); } if (roomname != null) { ViewData["pmsroomname"] = roomname; var ser = ZongRoominfo.Where(s => s.ROOM_NUMBER == roomname).ToList(); List list = new List(); foreach (var item in ser) { list.AddRange(li.Where(x => x.room == item.ROOM_OLD_ID)); } li = list; } IPagedList userPagedList = li.ToPagedList(pageNumber, pageSize); var hotelsList = SqlSugarBase.authoriydb.Queryable().ToList(); ViewData["hotelsS"] = hotelsList; return View(userPagedList); } } public ActionResult PmsMessageLog() { return View(); } public ActionResult InquirePmsMessageLog(Condition data) { List ZongRoominfo = (List)Session["ZongRoominfo"]; List lit = (List)Session["list"]; string strSql = ""; string strFinalSql = ""; string strNumberSql = ""; string strSqlHeader = "select * from pmsInterface where 0=0 and "; string sqlnumberHeader = "select * from pmsInterface where 0=0 and "; //根据酒店id查询 if (data.HotelID != 0) { strSql += (" hotelid=" + data.HotelID + " "); } else { strSql += " ("; for (int i = 0; i < lit.Count; i++) { strSql += (" hotelid=" + lit[i] + " or"); } strSql = strSql.Substring(0, strSql.Length - 2); strSql += ")"; } //根据房间状态查询 if (data.RoomStatus != 3) { strSql += " and pmstype=" + data.RoomStatus; } //根据房间编号查询 if (data.RoomName != "" && data.RoomName != null) { IEnumerable roomArr = data.RoomName.Split(';').Where(x => !String.IsNullOrWhiteSpace(x)); List ser = new List(); List roomInnerIDList = new List(); if (data.HotelID != 0) { Func lamCondition0 = (s) => { if (s.HOTEL_OLD_ID == data.HotelID && roomArr.Contains(s.ROOM_NUMBER)) return true; return false; }; ser = ZongRoominfo.Where(lamCondition0).ToList(); } else { Func lamCondition = (s) => { if (roomArr.Contains(s.ROOM_NUMBER) && lit.Contains(s.HOTEL_OLD_ID)) return true; return false; }; ser = ZongRoominfo.Where(lamCondition).ToList(); } strSql += " and ( 0=0 "; /*for (int j = 0; j < ser.Count; j++) { strSql += (" or room=" + ser[j].ROOM_OLD_ID); }*/ if (ser.Count > 0) { List ids = new List(); for (int j = 0; j < ser.Count; j++) { ids.Add(ser[j].ROOM_OLD_ID.ToString()); } strSql += "and room in (" + String.Join(",", ids.ToArray()) + ") "; } strSql += ")"; } //根据时间查询 if ( (data.RoomMinDate != null && data.RoomMinDate.ToString() != "0001/1/1 0:00:00") && (data.RoomMaxDate != null && data.RoomMinDate.ToString() != "0001/1/1 0:00:00") ) { strSql += " and DateTime>='" + data.RoomMinDate.ToString("yyyy/MM/dd") + " 00:00:00' and DateTime<'" + data.RoomMaxDate.ToString("yyyy/MM/dd") + " 23:59:59'"; } //根据步骤查询 if (data.showS8 != 1) { //strSql += " and ( pmsId not in(SELECT pmsid FROM `pmslog` WHERE ( step = 10 or step = 9 or step = 11) ) ) "; strSql += " and ( pmsId not in(SELECT pmsid FROM `pmslog` WHERE ( step = 291 or step = 297 or step = 299 or step = 304 or step = 309 or step = 314 or step = 303 or step = 315 or step = 318 ) ) ) "; } //展示的16条数据 strFinalSql = strSqlHeader + strSql + " ORDER BY `pmsId` DESC LIMIT " + (data.dataMin) + ",16;"; var countNum = new DALHelperCustom("pmsInterface").SqlQueryGetList(strFinalSql.ToString()); //总数 strNumberSql = sqlnumberHeader + strSql + " ORDER BY `pmsId` DESC"; var countNumCount = new DALHelperCustom("pmsInterface").SqlQueryGetList(strNumberSql.ToString()); //每个开房记录的通信发送流程步骤 List listint = new List(); if (countNum != null) { string strAmountSql = "SELECT * FROM pmslog "; strAmountSql += "WHERE "; foreach (var item in countNum) { strAmountSql += "pmsid=" + item.pmsId + " OR "; } strAmountSql = strAmountSql.Substring(0, strAmountSql.Length - 3); var retNum = new DALHelperCustom("pmslog").SqlQueryGetList(strAmountSql.ToString()); ViewData["pmsLog"] = retNum; } //计算分页 if (countNumCount != null && countNumCount.Count > 0) { ViewBag.count = countNumCount.Count; ViewBag.allpage = (countNumCount.Count + 16 - 1) / 16; } else { countNum = null; } return PartialView("InquirePmsMessageLog", countNum); } public ActionResult InquirePmsMessageLoginfo(Condition data) { try { List lit = (List)Session["list"]; List ZongRoominfo = (List)Session["ZongRoominfo"]; //查询登录用户权限下的所有酒店 //List Hotellist = SqlSugarBase.Db.Queryable().Where(x => lit.Contains(x.hotelid)).ToList();//所有酒店 List Hotellist = new List(); List facesgsd = new List(); /* SqlSugarBase.Db.Queryable().Where(x => lit.Contains(int.Parse(x.hotelid))).ToList();//错误信息*/ if ((data.RoomMinDate != null && data.RoomMinDate.ToString() != "0001/1/1 0:00:00") && (data.RoomMaxDate != null && data.RoomMaxDate.ToString() != "0001/1/1 0:00:00")) { string RoomMinDate = data.RoomMinDate.ToString("yyyy/MM/dd") + " 00:00:00"; // and DateTime<'" string RoomMaxDate = data.RoomMaxDate.ToString("yyyy/MM/dd") + " 23:59:59"; DateTime RoomMin = DateTime.Parse(RoomMinDate); DateTime RoomMax = DateTime.Parse(RoomMaxDate); facesgsd = SqlSugarBase.Db.Queryable().Where(x => lit.Contains(int.Parse(x.hotelid)) && x.creationtime > RoomMin && x.creationtime < RoomMax).ToList();//错误信息 } else { facesgsd = SqlSugarBase.Db.Queryable().Where(x => lit.Contains(int.Parse(x.hotelid)) && x.creationtime > DateTime.Now.AddDays(-3)).ToList();//错误信息 } List hid = new List(); //Dictionary pairs = new Dictionary(); if (facesgsd.Count() > 0) { string facesgsd0 = facesgsd[0].hotelid; hid.Add(int.Parse(facesgsd0)); foreach (var item in facesgsd) { if (item.hotelid != facesgsd0) { hid.Add(int.Parse(item.hotelid)); } } } if (data.HotelID == 0) { //data.HotelID = 1; Hotellist = SqlSugarBase.authoriydb.Queryable().Where(x => hid.Contains(x.Id)).ToList();//所有酒店 } else { Hotellist = SqlSugarBase.authoriydb.Queryable().Where(x => x.Id == data.HotelID).ToList();//所有酒店 } List infolist = new List(); foreach (var item in Hotellist) { Hotelnameinfo hotelnameinfo = new Hotelnameinfo(); //在线数量 int onlinenumber = 0; //总数量 int totalnumber = 0; //离线数量 int offnumber = 0; //出现问题的设备数量 int probemnumber = 0; #region //List faceerrormsg = new List(); //if ((data.RoomMinDate != null && data.RoomMinDate.ToString() != "0001/1/1 0:00:00") && (data.RoomMaxDate != null && data.RoomMaxDate.ToString() != "0001/1/1 0:00:00")) //{ // string RoomMinDate = data.RoomMinDate.ToString("yyyy/MM/dd") + " 00:00:00"; // // and DateTime<'" // string RoomMaxDate = data.RoomMaxDate.ToString("yyyy/MM/dd") + " 23:59:59"; // DateTime RoomMin = DateTime.Parse(RoomMinDate); // DateTime RoomMax = DateTime.Parse(RoomMaxDate); // faceerrormsg = SqlSugarBase.Db.Queryable().Where(x => x.hotelid == item.Id.ToString() && x.creationtime > RoomMin && x.creationtime< RoomMax).ToList();//错误信息 //} //else //{ // faceerrormsg = SqlSugarBase.Db.Queryable().Where(x => x.hotelid == item.Id.ToString() && x.creationtime > DateTime.Now.AddDays(-3)).ToList();//错误信息 //} //if (faceerrormsg.Count() > 0) //{ #endregion List devices = SqlSugarBase.Db.Queryable().Where(X => X.HotelCode == item.Id.ToString()).ToList(); hotelnameinfo.Roomanddevname = new List(); foreach (var itemF in devices) { totalnumber++; if (itemF.Status) { onlinenumber++; } else { offnumber++; } TBL_ROOM_BASIC_INFO list = ZongRoominfo.FirstOrDefault(s => s.ROOM_OLD_ID == itemF.RoomId); if (list != null) { Roomanddevname RD = new Roomanddevname(); RD.roomNmae = list.ROOM_NUMBER; RD.LabelName = itemF.Factory; RD.VersionNumber = itemF.APKVersion; RD.pmsidinfo = new List(); List msg = new List(); if ((data.RoomMinDate != null && data.RoomMinDate.ToString() != "0001/1/1 0:00:00") && (data.RoomMaxDate != null && data.RoomMaxDate.ToString() != "0001/1/1 0:00:00")) { string RoomMinDate = data.RoomMinDate.ToString("yyyy/MM/dd") + " 00:00:00"; // and DateTime<'" string RoomMaxDate = data.RoomMaxDate.ToString("yyyy/MM/dd") + " 23:59:59"; DateTime RoomMin = DateTime.Parse(RoomMinDate); DateTime RoomMax = DateTime.Parse(RoomMaxDate); msg = SqlSugarBase.Db.Queryable().Where(x => x.Roomid == itemF.RoomId.ToString() && x.creationtime > RoomMin && x.creationtime < RoomMax).ToList();//错误信息 } else { msg = SqlSugarBase.Db.Queryable().Where(x => x.Roomid == itemF.RoomId.ToString() && x.creationtime > DateTime.Now.AddDays(-3)).ToList();//错误信息 } //List msg = SqlSugarBase.Db.Queryable(x => x.Roomid == itemF.RoomId.ToString()).Where().ToList();//错误信息 foreach (var items in msg) { tableinfo rid = new tableinfo(); rid.pmsid = items.pmsid; rid.type = items.cmd; RD.SN = items.sn; rid.datainfo = items.errormsg; rid.GetDateTime = (DateTime)items.creationtime; rid.Rremary = items.remary; rid.errorcode = items.errorcode; probemnumber++; RD.pmsidinfo.Add(rid); } hotelnameinfo.Roomanddevname.Add(RD); } } hotelnameinfo.onlinenumber = onlinenumber; hotelnameinfo.totalnumber = totalnumber; hotelnameinfo.offnumber = offnumber; hotelnameinfo.HotelName = item.Name; hotelnameinfo.hotelids = item.Id; hotelnameinfo.probemnumber = probemnumber; infolist.Add(hotelnameinfo); //} } #region //foreach (var item in faceerrormsg) //{ // Face.Domain.Entities.Hotels Hotellist = SqlSugarBase.authoriydb.Queryable().First(x => x.Id== int.Parse(item.hotelid)); // //在线数量 // int onlinenumber = 0; // //总数量 // int totalnumber = 0; // //离线数量 // int offnumber = 0; // //出现问题的设备数量 // int probemnumber = 0; // List devices = SqlSugarBase.Db.Queryable().Where(X => X.HotelCode == Hotellist.Id.ToString()).ToList(); // foreach (var itemF in devices) // { // totalnumber++; // if (itemF.Status) // { // onlinenumber++; // } // else // { // offnumber++; // } // } // TBL_ROOM_BASIC_INFO list = ZongRoominfo.FirstOrDefault(s => s.ROOM_OLD_ID ==int.Parse(item.Roomid)); //} //////查询登录用户下酒店对应的所有设备 //foreach (var item in Hotellist) //{ // Hotelnameinfo hotelnameinfo = new Hotelnameinfo(); // //在线数量 // int onlinenumber = 0; // //总数量 // int totalnumber = 0; // //离线数量 // int offnumber = 0; // //出现问题的设备数量 // int probemnumber = 0; // //List arr = new List(); // List devices = SqlSugarBase.Db.Queryable().Where(X => X.HotelCode == item.Id.ToString()).ToList(); // if (devices.Count() != 0) // { // hotelnameinfo.Roomanddevname = new List(); // foreach (var itemF in devices) // { // Roomanddevname RD = new Roomanddevname(); // totalnumber++; // if (itemF.Status) // { // onlinenumber++; // } // else // { // offnumber++; // } // RD.SN = itemF.SerialNo; // //TBL_ROOM_BASIC_INFO list = ZongRoominfo.FirstOrDefault(s => s.ROOM_OLD_ID == itemF.RoomId); // //if (list != null) // //{ // // RD.roomNmae = list.ROOM_NUMBER; // // RD.LabelName = itemF.Factory; // // RD.VersionNumber = itemF.APKVersion; // // RD.pmsidinfo = new List(); // // //查询酒店房间里面产生的所有pmsid // // List asd = SqlSugarBase.Db.Queryable().Where(X => X.hotelid == item.Id && X.room == itemF.RoomId && X.DateTime >= DateTime.Now.AddDays(-3)).ToList(); // // if (asd.Count() > 0) // // { // // foreach (var itemsfsa in asd) // // { // // pmsLog pms = SqlSugarBase.Db.Queryable().First(X => X.pmsid == itemsfsa.pmsId && X.step == 7); // // if (pms != null) // // { // // pmsLog pmssdd = SqlSugarBase.Db.Queryable().First(X => X.pmsid == pms.pmsid && X.step == 5); // // if (pmssdd!=null) // // { // // tableinfo rid = new tableinfo(); // // rid.pmsid = pms.pmsid; // // rid.type = (int)itemsfsa.pmstype; // // rid.datainfo = pmssdd.Data; // // rid.GetDateTime = (DateTime)pmssdd.Creationtime; // // probemnumber++; // // RD.pmsidinfo.Add(rid); // // } // // } // // } // // hotelnameinfo.Roomanddevname.Add(RD); // // } // //} // } // hotelnameinfo.onlinenumber = onlinenumber; // hotelnameinfo.totalnumber = totalnumber; // hotelnameinfo.offnumber = offnumber; // hotelnameinfo.HotelName = item.Name; // hotelnameinfo.hotelids = item.Id; // hotelnameinfo.probemnumber = probemnumber; // infolist.Add(hotelnameinfo); // } //} #endregion ViewBag.info = infolist; } catch (Exception ex) { Console.WriteLine(ex); } return PartialView("InquirePmsMessageLoginfo"); } public ActionResult operationLog(int? page)//人脸机操作 { List lit = (List)Session["list"]; List ZongRoominfo = (List)Session["ZongRoominfo"]; List uLogs = new List(); using (SqlSugarClient db = SqlSugarBase.GesmartDb()) { var userList = db.Queryable().ToList(); int pageNumber = page ?? 1; //每页显示多少条 int pageSize = 8; for (int i = 0; i < lit.Count; i++) { var id = Convert.ToInt32(lit[i]); uLogs.AddRange(userList.Where(x => x.hotelcode == id).ToList()); } uLogs = uLogs.OrderByDescending(x => x.id).ToList(); //userList = userList.OrderByDescending(x => x.Creationtime); IPagedList userPagedList = uLogs.ToPagedList(pageNumber, pageSize); return View(userPagedList); } } public ActionResult errormessagehandling() { //List pmsinfo = SqlSugarBase.Db.Queryable().ToList(); int totalCount = 0; var pmsinfos = SqlSugarBase.Db.Queryable().ToPageList(1, 10, ref totalCount).ToList(); ViewBag.errorinfos = pmsinfos; //计算分页 if (totalCount > 0) { ViewBag.count = totalCount; ViewBag.allpages = (totalCount + 10 - 1) / 10; } else { pmsinfos = null; } return View(); } //[HttpPost] public ActionResult geterrorinfo(errohandling dara) { int totalCount = 0; List pmsinfos = SqlSugarBase.Db.Queryable().OrderByDescending(x => x.creationdata).ToList(); //.ToPageList(dara.Pages, 10, ref totalCount) //时间范围 if ( (dara.RoomMinDate != null && dara.RoomMinDate.ToString() != "0001/1/1 0:00:00") && (dara.RoomMaxDate != null && dara.RoomMinDate.ToString() != "0001/1/1 0:00:00") ) { pmsinfos = pmsinfos.Where(x => x.creationdata >= dara.RoomMinDate && x.creationdata < dara.RoomMaxDate).OrderByDescending(x => x.creationdata).ToList(); //.ToPageList(dara.Pages, 10, ref totalCount) } if (dara.HotelID != -1) { pmsinfos = pmsinfos.Where(x => x.isVerify == dara.HotelID).OrderByDescending(x => x.creationdata).ToList(); //.ToPageList(dara.Pages, 10, ref totalCount) } if (!string.IsNullOrEmpty(dara.FaceName)) { pmsinfos = pmsinfos.Where(x => x.ErrorNmae.Contains(dara.FaceName)).OrderByDescending(x => x.creationdata).ToList(); } List data = (pmsinfos.Skip((dara.Pages - 1) * 10).Take(10)).ToList(); ViewBag.errorinfos = data; //计算分页 if (pmsinfos.Count() > 0) { ViewBag.count = pmsinfos.Count();//总数 int ad = (pmsinfos.Count() + 10 - 1) / 10; ViewBag.allpages = (pmsinfos.Count() + 10 - 1) / 10;//分页数 } else { pmsinfos = null; } return PartialView("geterrorinfo"); } [HttpPost] public ActionResult updateerrorinfo(int id) { errormessagehandling pmsinfo = SqlSugarBase.Db.Queryable().Where(x => x.id == id).First(); pmsinfo.isVerify = 1; int count = SqlSugarBase.Db.Updateable(pmsinfo).Where(x => x.id == id).ExecuteCommand(); return Json(count); } public ActionResult everydayLog(int? page)//日常操作日志 { List lit = (List)Session["list"]; List ZongRoominfo = (List)Session["ZongRoominfo"]; List dn = new List(); using (SqlSugarClient db = SqlSugarBase.GesmartDb()) { var userList = db.Queryable().ToList(); int pageNumber = page ?? 1; //每页显示多少条 int pageSize = 8; for (int i = 0; i < lit.Count; i++) { var id = Convert.ToInt32(lit[i]); dn.AddRange(userList.Where(x => x.hotelCode == id).ToList()); } //userList = userList.OrderByDescending(x => x.Creationtime); IPagedList userPagedList = dn.ToPagedList(pageNumber, pageSize); return View(userPagedList); } } /// /// 返回一个json格式的数据 /// /// public ActionResult FaceStatusHistoryLogGetData(HistoryStatusSearchCondition searchObj) { List expcntlist = new List(); Dictionary dicReason = new Dictionary(); dicReason.Add(0, "链路第一次OnOpen触发"); dicReason.Add(1, "链路OnError触发"); dicReason.Add(2, "链路OnClose触发"); dicReason.Add(3, "链路重新OnOpen触发"); dicReason.Add(4, "Ping周期采样状态反转触发"); List cntlist = new List(); List listCol = new List(); if (!String.IsNullOrWhiteSpace(searchObj.sn)) { listCol.Add(new ConditionalModel() { FieldName = "SN", ConditionalType = ConditionalType.Equal, FieldValue = searchObj.sn }); } if (!String.IsNullOrWhiteSpace(searchObj.st) && !String.IsNullOrWhiteSpace(searchObj.ed)) { listCol.Add(new ConditionalModel() { FieldName = "CreateTime", ConditionalType = ConditionalType.GreaterThan, FieldValue = (searchObj.st + " 00:00:00") }); listCol.Add(new ConditionalModel() { FieldName = "CreateTime", ConditionalType = ConditionalType.LessThan, FieldValue = (searchObj.ed + " 23:59:59") }); } string strResultCombineReson = ""; string curReason = ""; searchObj.arrReason = new int[] { 0, 1, 2, 3, 4 }; strResultCombineReson = "链路"; ConditionalCollections tmpOrList = new ConditionalCollections(); tmpOrList.ConditionalList = new List>(); for (int i = 0; i < searchObj.arrReason.Length; i++) { curReason = dicReason[searchObj.arrReason[i]]; if (searchObj.arrReason[i] == 0) strResultCombineReson += "第一次OnOpen" + ","; else if (searchObj.arrReason[i] == 1) strResultCombineReson += "OnError" + ","; else if (searchObj.arrReason[i] == 2) strResultCombineReson += "OnClose" + ","; else if (searchObj.arrReason[i] == 3) strResultCombineReson += "重新OnOpen" + ","; else if (searchObj.arrReason[i] == 4) strResultCombineReson += "Ping周期采样状态反转" + ","; var tmpCn = new KeyValuePair(i == 0 ? WhereType.And : WhereType.Or, new ConditionalModel() { FieldName = "Reason", ConditionalType = ConditionalType.Equal, FieldValue = curReason }); tmpOrList.ConditionalList.Add(tmpCn); } listCol.Add(tmpOrList); strResultCombineReson = strResultCombineReson.Substring(0, strResultCombineReson.Length - 1); strResultCombineReson += "触发"; cntlist = SqlSugarBase.Db.Queryable() .Where(listCol) .OrderBy(it => it.CreateTime) .ToList(); //I can group by myself //snaggritem Dictionary tmpDic = new Dictionary(); foreach (var p in cntlist) { string curSn = p.SN; if (tmpDic.ContainsKey(curSn)) { var curItem = tmpDic[curSn]; curItem.cnt++; if (curItem.dicReason.ContainsKey(p.Reason)) { curItem.dicReason[p.Reason]++; } else { curItem.dicReason.Add(p.Reason, 1); } tmpDic[curSn].evtlist.Add(p); } else { Dictionary reasonDic = new Dictionary(); reasonDic.Add(p.Reason, 1); tmpDic.Add(curSn, new snaggritem { SN = curSn, Factory = p.Factory, cnt = 1, dicReason = reasonDic, evtlist = new List { p } }); } } List aggrList = tmpDic.Values.ToList(); aggrList.Sort((a, b) => { //return a.cnt - b.cnt; return b.cnt - a.cnt; //降序排序 }); List snList = new List(); foreach (var p in aggrList) { snList.Add(p.SN); } var combineList = SqlSugarBase.Db.Queryable().AS("face.devicemanage") .LeftJoin((d, h) => d.HotelCode == h.Id.ToString()).AS("authoritydb.hotels") .LeftJoin((d, h, r) => d.RoomId == r.ROOM_OLD_ID).AS("blv_rcu_db.tbl_room_basic_info") .Where((d, h, r) => snList.Contains(d.SerialNo)) .Select((d, h, r) => new combineddeviceinfo { SerialNo = d.SerialNo, HotelName = h.Name, RoomNumber = r.ROOM_NUMBER, DeviceStatus = (d.Status == true ? "在线" : "离线") }) .ToList(); Dictionary dicTmp = new Dictionary(); foreach (var it in combineList) { dicTmp.Add(it.SerialNo, it); } foreach (var p in aggrList) { //查找每一个sn指定时间范围内的区间列表 //每一个区间开始有跳变原因,跳变后状态,跳变时间,持续时间 //所有跳变后状态为1的区间,其持续时间求和就是在线时间 //所有跳变后状态为0的区间,其持续时间求和就是离线时间 //off/(off+on) 就是总的 offrate List rangeList = new List(); if (!String.IsNullOrWhiteSpace(searchObj.st)) { rangeList.Add(new HistoryStatusRange { breakPoint = DateTime.Parse(searchObj.st + " 00:00:00"), status = 1 //不知道,应该根据下一个节点反推。 }); } foreach (var it in p.evtlist) { rangeList.Add(new HistoryStatusRange { breakPoint = it.CreateTime, status = it.Status }); } if (!String.IsNullOrWhiteSpace(searchObj.ed)) { rangeList.Add(new HistoryStatusRange { breakPoint = DateTime.Parse(searchObj.ed + " 23:59:59"), status = 1 //不知道,应该根据上一个节点反推。 }); } HistoryStatusRange[] tmpArr = rangeList.ToArray(); TimeSpan onSumTp = new TimeSpan(0); TimeSpan offSumTp = new TimeSpan(0); for (int i = 1; i < tmpArr.Length; i++) { if (i == 1)//第一个区间认为是第二个区间反转 { if (tmpArr[i].status == 0) { onSumTp += (tmpArr[i].breakPoint - tmpArr[i - 1].breakPoint); } else { offSumTp += (tmpArr[i].breakPoint - tmpArr[i - 1].breakPoint); } } else//计算当前点前一个区间 { if (tmpArr[i - 1].status == 1) { onSumTp += (tmpArr[i].breakPoint - tmpArr[i - 1].breakPoint); } else { offSumTp += (tmpArr[i].breakPoint - tmpArr[i - 1].breakPoint); } } } string strReasons = ""; if (p.dicReason.Count > 0) { string[] tmpReasonArr = p.dicReason.Keys.ToArray(); strReasons = String.Join(",", tmpReasonArr); } string percVal = ""; double rate = offSumTp.TotalSeconds / (onSumTp.TotalSeconds + offSumTp.TotalSeconds); percVal = Convert.ToDouble(rate).ToString("P"); expcntlist.Add(new expendcountstatushistory { SN = p.SN, Factory = p.Factory, cnt = p.cnt, reason = strReasons, hotel = dicTmp[p.SN].HotelName, room = dicTmp[p.SN].RoomNumber, currentstatus = dicTmp[p.SN].DeviceStatus, onlinetime = onSumTp.ToString(), offlinetime = offSumTp.ToString(), offrateperc = percVal }); } //return Json(cntlist, JsonRequestBehavior.AllowGet); return Json(expcntlist, JsonRequestBehavior.AllowGet); } /// /// 返回一个json格式的数据 /// /// public ActionResult FaceStatusHistoryLogGetDataSingle(HistoryStatusSearchCondition searchObj) { Dictionary dicReason = new Dictionary(); dicReason.Add(0, "链路第一次OnOpen触发"); dicReason.Add(1, "链路OnError触发"); dicReason.Add(2, "链路OnClose触发"); dicReason.Add(3, "链路重新OnOpen触发"); dicReason.Add(4, "Ping周期采样状态反转触发"); List cntlist = new List(); List listCol = new List(); if (!String.IsNullOrWhiteSpace(searchObj.sn)) { listCol.Add(new ConditionalModel() { FieldName = "SN", ConditionalType = ConditionalType.Equal, FieldValue = searchObj.sn }); } if (!String.IsNullOrWhiteSpace(searchObj.st) && !String.IsNullOrWhiteSpace(searchObj.ed)) { searchObj.st += " 00:00:00"; searchObj.ed += " 23:59:59"; listCol.Add(new ConditionalModel() { FieldName = "CreateTime", ConditionalType = ConditionalType.GreaterThan, FieldValue = searchObj.st }); listCol.Add(new ConditionalModel() { FieldName = "CreateTime", ConditionalType = ConditionalType.LessThan, FieldValue = searchObj.ed }); } string strResultCombineReson = ""; string curReason = ""; if (searchObj.arrReason != null && searchObj.arrReason.Length > 0) { strResultCombineReson = "链路"; ConditionalCollections tmpOrList = new ConditionalCollections(); tmpOrList.ConditionalList = new List>(); for (int i = 0; i < searchObj.arrReason.Length; i++) { curReason = dicReason[searchObj.arrReason[i]]; if (searchObj.arrReason[i] == 0) strResultCombineReson += "第一次OnOpen" + ","; else if (searchObj.arrReason[i] == 1) strResultCombineReson += "OnError" + ","; else if (searchObj.arrReason[i] == 2) strResultCombineReson += "OnClose" + ","; else if (searchObj.arrReason[i] == 3) strResultCombineReson += "重新OnOpen" + ","; else if (searchObj.arrReason[i] == 4) strResultCombineReson += "Ping周期采样状态反转" + ","; var tmpCn = new KeyValuePair(i == 0 ? WhereType.And : WhereType.Or, new ConditionalModel() { FieldName = "Reason", ConditionalType = ConditionalType.Equal, FieldValue = curReason }); tmpOrList.ConditionalList.Add(tmpCn); } listCol.Add(tmpOrList); strResultCombineReson = strResultCombineReson.Substring(0, strResultCombineReson.Length - 1); strResultCombineReson += "触发"; } cntlist = SqlSugarBase.Db.Queryable() .Where(listCol) //普通过滤 .OrderBy(x => x.CreateTime) .ToList(); return Json(cntlist, JsonRequestBehavior.AllowGet); } public ActionResult FaceStatusHistoryLog() { return View(); } } } public class Hotelnameinfo { public int onlinenumber { get; set; } public int totalnumber { get; set; } public int offnumber { get; set; } public int probemnumber { get; set; } public string HotelName { get; set; } public List Roomanddevname { get; set; } public int hotelids { get; set; } } public class Roomanddevname { public string roomNmae { get; set; } public string SN { get; set; } public string LabelName { get; set; } public string VersionNumber { get; set; } public List pmsidinfo { get; set; } //public int Roomids { get; set; } } public class tableinfo { public int pmsid { get; set; } public string type { get; set; } public string datainfo { get; set; } public DateTime GetDateTime { get; set; } public string Rremary { get; set; } public int errorcode { get; set; } public string errormsg { get; set; } } public class faceerrormsg { public int Id { get; set; } public string hotelid { get; set; } public string Roomid { get; set; } public string brandinfo { get; set; } public string sn { get; set; } public int pmsid { get; set; } public int step { get; set; } public int errorcode { get; set; } public string errormsg { get; set; } public string remary { get; set; } public string APKVersion { get; set; } public string cmd { get; set; } public DateTime creationtime { get; set; } }