using Face.Domain.Entities; using Face.Domain.ViewModels; using Face.Services.DBUtility.Common; using Face.Services.Manager; using Face.Web.Areas.App.Models; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Hosting; using System.Web.Mvc; using WebSocketToolsConsole; using Face.Web.Areas.App.Controllers; using System.Threading; using Newtonsoft.Json; using TencentCloud.Common.Profile; using TencentCloud.Common; using TencentCloud.Sms.V20210111; using TencentCloud.Sms.V20210111.Models; using System.Data; using System.Diagnostics; using System.Xml; using AUTS.Services.Enums; using System.Text.RegularExpressions; using static WebSocketToolsConsole.Entity; using static Face.Web.Areas.App.Models.Roominfo; using static Face.Web.Areas.App.Controllers.InterfaceController; using System.Web.Helpers; using Newtonsoft.Json.Linq; using System.Web.Services.Description; namespace Face.Web.Areas.App.Controllers { /* * hotel, room, facedevice * no device: * step 9: error hotel or error room * step 8: success without facedevice * has device * step 7: error with face device * step 6: success with face device */ public class InterfaceController : Controller { private static readonly TimeSpan Interval = TimeSpan.FromMilliseconds(1000); #region 接口 /// /// 接口1 (入住人员信息) /// /// https://gitee.com/My_yaoyao/blog/pages [HttpPost] public ActionResult checkinInterface(string key, string data) { //酒店编号 string hc = ""; //房间编号 string ridname = ""; //List tblsdsas = SqlSugarBase.GesmartDb().Queryable().ToList(); DateTime dateTimess = DateTime.Now; Logs.WriteLog(data); string sn = ""; string sendMsg, img, pictures; int pmsid = -1; string messageid = Guid.NewGuid().ToString(); ReturnResult result = new ReturnResult(); Hotels hotel = new Hotels(); List logList = new List(); bool offLineSend = false; threadinfo ti = new threadinfo(); try { portinfo ci = JsonConvert.DeserializeObject(data); hc = ci.HotelCode; ridname = ci.roomid; if (key == "abc") { hotel = SqlSugarBase.authoriydb.Queryable().First(x => x.Code == ci.HotelCode); //把酒店id转换成string类型 //ci.HotelCode = hotel.Id.ToString(); pmsInterface info = new pmsInterface() { pmstype = 1, DateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), pmsContent = data, hotelid = hotel.Id, }; pmsid = ci.pmsinfoid; //SqlSugarBase.Db.Updateable(info).Where(x => x.pmsId == pmsid); messageid = pmsid.ToString(); if (hotel.Id == 916) { pmsLog pmslogerr = new pmsLog { pmsid = pmsid, app = 1, step = 201, Data = data, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "请求过于频繁,已拒绝本酒店访问!", HotelCode = hc, roomid = ridname }; SqlSugarBase.Db.Insertable(pmslogerr).ExecuteCommand(); result.Status = 200; result.Message = $"请求过于频繁,已拒绝本酒店访问!"; return Json(result); } pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 201, Data = data, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "收到pms信息", HotelCode = hc, roomid = ridname }; SqlSugarBase.Db.Insertable(pmslog).ExecuteCommand(); if (ci.HotelCode != "") { hotel = SqlSugarBase.authoriydb.Queryable().First(x => x.Code == ci.HotelCode); ci.HotelCode = hotel.Id.ToString(); GetRoomInterface.test test = new GetRoomInterface.test { code = hotel.Code.ToString(), creatDate = hotel.CreateTime.ToString("yyyy-MM-dd") }; Roominfo.Root asd = GetRoomInterface.Roomport(test); if (asd.IsSuccess == true) { //根据房间id使用三元运算符取通过api:https://www.boonlive-rcu.com/api/GetHostLis返回的房间信息 var Hotelroomid = asd.Result.FirstOrDefault(x => x.RoomNumber == ci.roomid) != null ? asd.Result.FirstOrDefault(x => x.RoomNumber == ci.roomid) : null; //没有找到对应酒店的房间 if (Hotelroomid == null) { logList.Clear(); //创建s2 错误信息 logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 202, Data = "", message = $"已校验数据,未找到{ridname}房间", HotelCode = hc, roomid = ridname }); //创建s9错误信息 logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 203, Data = "", message = $"无需处理,未找到{ridname}房间", HotelCode = hc, roomid = ridname }); //添加到pmsLog数据库 SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = $"未找到{ridname}房间"; return Json(result); } //否则吧房间id转换成string类型 ci.roomid = Hotelroomid.ID.ToString(); } else { logList.Clear(); //创建s2 错误信息 logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 204, Data = "", message = $"已校验数据,未找到{ci.HotelCode}酒店code", HotelCode = hc, roomid = ridname }); //创建s9 错误信息 logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 205, Data = "", message = $"无需处理,未找到{ci.HotelCode}酒店code", HotelCode = hc, roomid = ridname }); //添加到pmsLog数据库 SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "酒店输入错误"; return Json(result); } } else { logList.Clear(); //创建S2错误信息 logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 206, Data = "", message = $"已校验数据,{ci.HotelCode}酒店code错误", HotelCode = hc, roomid = ridname }); //创建S9错误信息 logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 207, Data = "", message = $"无需处理,{ci.HotelCode}酒店code错误", HotelCode = hc, roomid = ridname }); //添加到pmslog数据库 SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "酒店code错误"; return Json(result); } //查询房间是否是公区并且关联公区 tbl_room_basic_info tbl_room_basic_info = SqlSugarBase.Gesmartblv_rcu_db().Queryable().First(x => x.IsDel == 0 && x.ROOM_OLD_ID == int.Parse(ci.roomid)); //是公区 if (tbl_room_basic_info.isPublicArea == 1) { #region 公区房间下发 sn = SqlOperationsData.selectFace(ci.HotelCode, ci.roomid);//是否有此SN号 DeviceManage device = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); string Factorys = ""; if (device.Factory == "移海") { Factorys = "yh"; } else if (device.Factory == "实义德") { Factorys = "devs"; } else if (device.Factory == "深圳嘉禾兴") { Factorys = "szjhx"; } else { Factorys = " "; } using (var sex = SqlSugarBase.GesmartDb()) { ///添加pms酒店,房间,sn号,信息索引 pmsInterface pms = new pmsInterface() { faceSN = sn, hotelid = int.Parse(ci.HotelCode), room = int.Parse(ci.roomid), messageid = messageid, pmsId = pmsid }; SqlOperationsData.revisepms(pms); //添加人脸机下发表 FaceIssue fi = new FaceIssue() { creationtime = DateTime.Now, faceSn = sn, issuestate = 0, messageid = messageid, picture = ci.picture, Factory = Factorys, APKVersion = device.APKVersion }; //添加到数据库FaceIssue SqlSugarBase.Db.Insertable(fi).ExecuteCommand(); ///修改人脸机下发表 if (messageid != "") { string id = pms.pmsId.ToString(); SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == id).Where(x => x.messageid == messageid).ExecuteCommand(); } if (sn != "" && sn != "") { //有人脸机,但是状态不在线 var sea = sex.Queryable().Where(s => s.SerialNo == sn).First(j => j.Status == false); #region //if (sea != null) //{ // logList.Clear(); // logList.Add(new pmsLog // { // pmsid = pmsid, // app = 1, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // step = 2, // Data = "", // message = $"已校验数据,{sn}号人脸机不在线" // }); // logList.Add(new pmsLog // { // pmsid = pmsid, // app = 1, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // step = 7, // Data = "", // message = $"无需处理,{sn}号人脸机不在线" // }); // SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); // result.Status = 505; // result.Message = "人脸机不在线"; // SqlOperationsData.preserve(data, ci.HotelCode, ci.roomid, sn, 3, 1); // return Json(result); //} #endregion //改为尝试下发 if (sea != null) { //虽然不在线,依然尝试下发。 //不要return, 会跳到397行 logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 208, Data = "", message = $"已校验数据,{sn}号人脸机不在线,但仍然尝试下发,房号" + ridname + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); offLineSend = true; } } } if (sn == null || sn == "") { img = ci.picture; pictures = Down(ci.picture, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 //if (pictures == "图片路径错误") if (pictures.Contains("图片路径错误")) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 209, Data = "", message = "已校验数据,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 210, Data = "", message = "无需处理,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:是"; return Json(result); } ci.picture = pictures; Lodger lodgers = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, checkOutTime = Convert.ToDateTime("2000/01/01"), //checkOutTime = ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers) > 0) { if (SqlOperationsData.additionCheck(cf) > 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 211, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房已经开房,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 212, Data = "", message = "无需处理,此房间没有人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "添加入住信息成功,房号" + ridname + ",SN:" + sn + ",是否公区:是"; return Json(result); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 213, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房开房失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 214, Data = "", message = "此房间没有人脸机,但是客房开房失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败"; return Json(result); } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 215, Data = "", message = "已校验数据,图片路径正确,入住客户添加失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 216, Data = "", message = "此房间没有人脸机,但是入住客户添加失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:是"; return Json(result); } } else { //checkin.checkinRoom(data, ci.HotelCode, ci.roomid,sn, tbl_room_basic_info.isPublicArea); img = ci.picture; string pictures1 = Down(ci.picture, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 if (pictures1 == "图片路径错误") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 217, Data = "", message = "已校验数据,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 218, Data = "", message = "无需处理,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:是"; return Json(result); } ci.picture = pictures1; Lodger lodgers1 = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf2 = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, checkOutTime = Convert.ToDateTime("2000/01/01"), //checkOutTime = ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers1) > 0) { if (SqlOperationsData.additionCheck(cf2) > 0) { StringBuilder sbperson = new StringBuilder(); sbperson.Append("key=abc"); sbperson.Append("&id=" + ci.IDNumber); sbperson.Append("&name=" + ci.LodgerNmae); sbperson.Append("&IC_NO=0001"); sbperson.Append("&ID_NO=" + ci.IDNumber); sbperson.Append("&photo=<" + img + ">"); sbperson.Append("&startTs=-1"); sbperson.Append("&endTs=-1"); sbperson.Append("&passCount=10000"); //追加酒店id和房间id sbperson.Append("&HotelID=" + ci.HotelCode); sbperson.Append("&RoomID=" + ci.roomid); //协议里面没有的字段是否公区 sbperson.Append("&isPublicArea=1"); Entity.Rootinfo msgx = new Entity.Rootinfo(); List rootinfos = new List(); Entity.msgx ms = new Entity.msgx(); ms.msgid = messageid; ms.sn = sn; ms.cmd = "setPerson"; ms.msg = System.Web.HttpUtility.HtmlDecode(sbperson.ToString()); msgx.msgx = ms; msgx.pmsid = pmsid; transferFace tf = new transferFace() { faceSN = sn, faultState = 0, infoid = msgx.msgx.msgid, creationTime = DateTime.Now }; SqlSugarBase.Db.Insertable(tf).ExecuteCommand(); rootinfos.Add(msgx);//存储 sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); pmsLog log = null; if (offLineSend) { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 219, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }; } else { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 220, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }; } SqlSugarBase.Db.Insertable(log).ExecuteCommand(); string infods = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 225, Data = sendMsg, message = infods }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg);//下发数据给控制台 result.Status = 200; result.Message = "开房成功"; Thread.Sleep(Interval); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 226, Data = "", message = "已校验数据,添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 227, Data = "", message = "无需处理,添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败"; } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 228, Data = "", message = "已校验数据,添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 229, Data = "", message = "无需处理,添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败"; } } #endregion } //不是公区 else { //没有关联公区 if (string.IsNullOrEmpty(tbl_room_basic_info.AssociatedPublicArea)) { #region 非公区房间下发 sn = SqlOperationsData.selectFace(ci.HotelCode, ci.roomid);//是否有此SN号 DeviceManage device = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); string Factorys = ""; if (device.Factory == "移海") { Factorys = "yh"; } else if (device.Factory == "实义德") { Factorys = "devs"; } else if (device.Factory == "深圳嘉禾兴") { Factorys = "szjhx"; } else { Factorys = " "; } using (var sex = SqlSugarBase.GesmartDb()) { ///添加pms酒店,房间,sn号,信息索引 pmsInterface pms = new pmsInterface() { faceSN = sn, hotelid = int.Parse(ci.HotelCode), room = int.Parse(ci.roomid), messageid = messageid, pmsId = pmsid }; SqlOperationsData.revisepms(pms); //添加人脸机下发表 FaceIssue fi = new FaceIssue() { creationtime = DateTime.Now, faceSn = sn, issuestate = 0, messageid = messageid, picture = ci.picture, Factory = Factorys, APKVersion = device.APKVersion }; //添加到数据库FaceIssue SqlSugarBase.Db.Insertable(fi).ExecuteCommand(); ///修改人脸机下发表 if (messageid != "") { string id = pms.pmsId.ToString(); SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == id).Where(x => x.messageid == messageid).ExecuteCommand(); } if (sn != "" && sn != "") { //有人脸机,但是状态不在线 var sea = sex.Queryable().Where(s => s.SerialNo == sn).First(j => j.Status == false); //if (sea != null) //{ // logList.Clear(); // logList.Add(new pmsLog // { // pmsid = pmsid, // app = 1, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // step = 2, // Data = "", // message = $"已校验数据,{sn}号人脸机不在线" // }); // logList.Add(new pmsLog // { // pmsid = pmsid, // app = 1, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // step = 7, // Data = "", // message = $"无需处理,{sn}号人脸机不在线" // }); // SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); // result.Status = 505; // result.Message = "人脸机不在线"; // SqlOperationsData.preserve(data, ci.HotelCode, ci.roomid, sn, 3, 1); // return Json(result); //} //改为尝试下发 if (sea != null) { //虽然不在线,依然尝试下发。 //不要return, 会跳到397行 logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 230, Data = "", message = $"已校验数据,{sn}号人脸机不在线,但仍然尝试下发,房号" + ridname + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); offLineSend = true; } } } if (sn == null || sn == "") { img = ci.picture; //pictures = Down(ci.picture, DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss fff"));//云端地址转换ftp图片 pictures = Down(ci.picture, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 if (pictures == "图片路径错误") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 231, Data = "", message = "已校验数据,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 232, Data = "", message = "无需处理,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } ci.picture = pictures; Lodger lodgers = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, checkOutTime = Convert.ToDateTime("2000/01/01"), //checkOutTime =ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers) > 0) { if (SqlOperationsData.additionCheck(cf) > 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 235, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房已经开房,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 236, Data = "", message = "无需处理,此房间没有人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "添加入住信息成功,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 237, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房开房失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 238, Data = "", message = "此房间没有人脸机,但是客房开房失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 239, Data = "", message = "已校验数据,图片路径正确,入住客户添加失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 240, Data = "", message = "此房间没有人脸机,但是入住客户添加失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } } else { img = ci.picture; string pictures1 = Down(ci.picture, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 if (pictures1 == "图片路径错误") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 244, Data = "", message = "已校验数据,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 245, Data = "", message = "无需处理,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } ci.picture = pictures1; Lodger lodgers1 = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf2 = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, checkOutTime = Convert.ToDateTime("2000/01/01"), //checkOutTime = ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers1) > 0) { if (SqlOperationsData.additionCheck(cf2) > 0) { StringBuilder sbperson = new StringBuilder(); sbperson.Append("key=abc"); sbperson.Append("&id=" + ci.IDNumber); sbperson.Append("&name=" + ci.LodgerNmae); sbperson.Append("&IC_NO=0001"); sbperson.Append("&ID_NO=" + ci.IDNumber); sbperson.Append("&photo=<" + img + ">"); sbperson.Append("&startTs=-1"); sbperson.Append("&endTs=-1"); sbperson.Append("&passCount=10000"); //追加酒店id和房间id sbperson.Append("&HotelID=" + ci.HotelCode); sbperson.Append("&RoomID=" + ci.roomid); //协议里面没有的字段是否公区 sbperson.Append("&isPublicArea=0"); Entity.Rootinfo msgx = new Entity.Rootinfo(); List rootinfos = new List(); Entity.msgx ms = new Entity.msgx(); ms.msgid = messageid; ms.sn = sn; ms.cmd = "setPerson"; ms.msg = System.Web.HttpUtility.HtmlDecode(sbperson.ToString()); msgx.msgx = ms; msgx.pmsid = pmsid; transferFace tf = new transferFace() { faceSN = sn, faultState = 0, infoid = msgx.msgx.msgid, creationTime = DateTime.Now }; SqlSugarBase.Db.Insertable(tf).ExecuteCommand(); rootinfos.Add(msgx);//存储 sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); pmsLog log = null; if (offLineSend) { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 246, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }; } else { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 247, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }; } SqlSugarBase.Db.Insertable(log).ExecuteCommand(); //UdpCommunication.QueueSend(sendMsg); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); //发送信息给控制台程序 string infods = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 248, Data = sendMsg, message = infods }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg);//下发数据给控制台 result.Status = 200; result.Message = "开房成功"; Thread.Sleep(Interval); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 249, Data = "", message = "已校验数据,添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 251, Data = "", message = "无需处理,添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 252, Data = "", message = "已校验数据,添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 253, Data = "", message = "无需处理,添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; } } #endregion } //关联了公区的 else { img = ci.picture; List ints = new List(); string guanlian = tbl_room_basic_info.AssociatedPublicArea; string[] arr = guanlian.Split(','); //ints.Add(ci.roomid); ints.AddRange(arr); #region 关联公区的房间,公区下发 for (int i = 0; i < ints.Count(); i++) { //根据酒店编号和房间编号查找人脸机编号 sn = SqlOperationsData.selectFace(ci.HotelCode, ints[i]);//是否有此SN号 DeviceManage deviced = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); tbl_room_basic_info tbl = SqlSugarBase.Gesmartblv_rcu_db().Queryable().First(x => x.IsDel == 0 && x.ROOM_OLD_ID == int.Parse(ints[i])); string Factorysd = ""; if (deviced != null) { if (deviced.Factory == "移海") { Factorysd = "yh"; } else if (deviced.Factory == "实义德") { Factorysd = "devs"; } else if (deviced.Factory == "深圳嘉禾兴") { Factorysd = "szjhx"; } else { Factorysd = " "; } } using (var sex = SqlSugarBase.GesmartDb()) { ///添加pms酒店,房间,sn号,信息索引 pmsInterface pms = new pmsInterface() { faceSN = sn, hotelid = int.Parse(ci.HotelCode), room = int.Parse(ints[i]), messageid = messageid, pmsId = pmsid }; SqlOperationsData.revisepms(pms); //添加人脸机下发表 FaceIssue fi = new FaceIssue() { creationtime = DateTime.Now, faceSn = sn, issuestate = 0, messageid = messageid, picture = ci.picture, Factory = Factorysd, APKVersion = deviced.APKVersion }; //添加到数据库FaceIssue SqlSugarBase.Db.Insertable(fi).ExecuteCommand(); ///修改人脸机下发表 if (messageid != "") { string id = pms.pmsId.ToString(); SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == id).Where(x => x.messageid == messageid).ExecuteCommand(); } if (sn != "" && sn != "") { //有人脸机,但是状态不在线 var sea = sex.Queryable().Where(s => s.SerialNo == sn).First(j => j.Status == false); //改为尝试下发 if (sea != null) { //虽然不在线,依然尝试下发。 //不要return, 会跳到397行 logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 254, Data = "", message = $"已校验数据,{sn}号人脸机不在线,但仍然尝试下发,房号" + tbl.ROOM_NUMBER + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); offLineSend = true; } } } if (sn == null || sn == "") { //img = ci.picture; //pictures = Down(ci.picture, DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss fff"));//云端地址转换ftp图片 pictures = Down(img, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 if (pictures == "图片路径错误") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 255, Data = "", message = "已校验数据,图片路径错误,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 256, Data = "", message = "无需处理,图片路径错误,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是"; return Json(result); } ci.picture = pictures; Lodger lodgers = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, //checkOutTime = Convert.ToDateTime("2000/01/01"), checkOutTime = ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers) > 0) { if (SqlOperationsData.additionCheck(cf) > 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 257, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房已经开房,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 258, Data = "", message = "无需处理,此房间没有人脸机,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "添加入住信息成功"; return Json(result); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 259, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房开房失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 260, Data = "", message = "此房间没有人脸机,但是客房开房失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败"; return Json(result); } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 261, Data = "", message = "已校验数据,图片路径正确,入住客户添加失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 262, Data = "", message = "此房间没有人脸机,但是入住客户添加失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是"; return Json(result); } } else { //img = ci.picture; string pictures1 = Down(img, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 if (pictures1 == "图片路径错误") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 263, Data = "", message = "已校验数据,图片路径错误,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 264, Data = "", message = "无需处理,图片路径错误,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是"; return Json(result); } ci.picture = pictures1; Lodger lodgers1 = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf2 = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, //checkOutTime = Convert.ToDateTime("2000/01/01"), checkOutTime = ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers1) > 0) { if (SqlOperationsData.additionCheck(cf2) > 0) { //Thread revT = new Thread(IssueFacemachine); //ti.roomid = ints[i]; //ti.IDNumber = ci.IDNumber; //ti.LodgerNmae = ci.LodgerNmae; //ti.IDNumber = ci.IDNumber; //ti.picture = img; //ti.HotelCode= ci.HotelCode; //ti.offLineSend = offLineSend; //ti.pmsid = pmsid; //ti.SN = sn; //ti.messageid = messageid; //revT.Start(ti); StringBuilder sbperson = new StringBuilder(); sbperson.Append("key=abc"); sbperson.Append("&id=" + ci.IDNumber); sbperson.Append("&name=" + ci.LodgerNmae); sbperson.Append("&IC_NO=0001"); sbperson.Append("&ID_NO=" + ci.IDNumber); sbperson.Append("&photo=<" + img + ">"); sbperson.Append("&startTs=" + ci.CheckTime); sbperson.Append("&endTs=" + ci.checkOutTime); sbperson.Append("&passCount=10000"); //追加酒店id和房间id sbperson.Append("&HotelID=" + ci.HotelCode); sbperson.Append("&RoomID=" + ints[i]); //协议里面没有的字段是否公区 sbperson.Append("&isPublicArea=1"); //sbperson.Append("&Groupid=" + ci.Groupid); Entity.Rootinfo msgx = new Entity.Rootinfo(); List rootinfos = new List(); Entity.msgx ms = new Entity.msgx(); ms.msgid = messageid; ms.sn = sn; ms.cmd = "setPerson"; ms.msg = System.Web.HttpUtility.HtmlDecode(sbperson.ToString()); msgx.msgx = ms; msgx.pmsid = pmsid; transferFace tf = new transferFace() { faceSN = sn, faultState = 0, infoid = msgx.msgx.msgid, creationTime = DateTime.Now }; SqlSugarBase.Db.Insertable(tf).ExecuteCommand(); rootinfos.Add(msgx);//存储 sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); pmsLog log = null; if (offLineSend) { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 265, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }; } else { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 266, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }; } SqlSugarBase.Db.Insertable(log).ExecuteCommand(); string infos = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 267, Data = sendMsg, message = infos, HotelCode = hc, roomid = tbl.ROOM_NUMBER }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg);//下发数据给控制台 result.Status = 200; result.Message = "开房成功"; Thread.Sleep(Interval); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 268, Data = "", message = "已校验数据,添加入住信息失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 269, Data = "", message = "无需处理,添加入住信息失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是"; } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 270, Data = "", message = "已校验数据,添加客户信息失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 271, Data = "", message = "无需处理,添加客户信息失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbl.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败,房号" + tbl.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是"; } } } #endregion #region 关联公区的房间,非公区下发 sn = SqlOperationsData.selectFace(ci.HotelCode, ci.roomid);//是否有此SN号 DeviceManage device = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); string Factorys = ""; if (device.Factory == "移海") { Factorys = "yh"; } else if (device.Factory == "实义德") { Factorys = "devs"; } else if (device.Factory == "深圳嘉禾兴") { Factorys = "szjhx"; } else { Factorys = " "; } using (var sex = SqlSugarBase.GesmartDb()) { ///添加pms酒店,房间,sn号,信息索引 pmsInterface pms = new pmsInterface() { faceSN = sn, hotelid = int.Parse(ci.HotelCode), room = int.Parse(ci.roomid), messageid = messageid, pmsId = pmsid }; SqlOperationsData.revisepms(pms); //添加人脸机下发表 FaceIssue fi = new FaceIssue() { creationtime = DateTime.Now, faceSn = sn, issuestate = 0, messageid = messageid, picture = ci.picture, Factory = Factorys, APKVersion = device.APKVersion }; //添加到数据库FaceIssue SqlSugarBase.Db.Insertable(fi).ExecuteCommand(); ///修改人脸机下发表 if (messageid != "") { string id = pms.pmsId.ToString(); SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == id).Where(x => x.messageid == messageid).ExecuteCommand(); } if (sn != "" && sn != "") { //有人脸机,但是状态不在线 var sea = sex.Queryable().Where(s => s.SerialNo == sn).First(j => j.Status == false); //if (sea != null) //{ // logList.Clear(); // logList.Add(new pmsLog // { // pmsid = pmsid, // app = 1, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // step = 2, // Data = "", // message = $"已校验数据,{sn}号人脸机不在线" // }); // logList.Add(new pmsLog // { // pmsid = pmsid, // app = 1, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // step = 7, // Data = "", // message = $"无需处理,{sn}号人脸机不在线" // }); // SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); // result.Status = 505; // result.Message = "人脸机不在线"; // SqlOperationsData.preserve(data, ci.HotelCode, ci.roomid, sn, 3, 1); // return Json(result); //} //改为尝试下发 if (sea != null) { //虽然不在线,依然尝试下发。 //不要return, 会跳到397行 logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 272, Data = "", message = $"已校验数据,{sn}号人脸机不在线,但仍然尝试下发,房号" + ridname + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); offLineSend = true; } } } if (sn == null || sn == "") { //img = ci.picture; //pictures = Down(ci.picture, DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss fff"));//云端地址转换ftp图片 pictures = Down(img, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 if (pictures == "图片路径错误") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 273, Data = "", message = "已校验数据,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 274, Data = "", message = "无需处理,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } ci.picture = pictures; Lodger lodgers = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, checkOutTime = Convert.ToDateTime("2000/01/01"), //checkOutTime = ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers) > 0) { if (SqlOperationsData.additionCheck(cf) > 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 275, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房已经开房,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 276, Data = "", message = "无需处理,此房间没有人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "添加入住信息成功,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 277, Data = "", message = "已校验数据,图片路径正确,入住客户已经添加,客房开房失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 278, Data = "", message = "此房间没有人脸机,但是客房开房失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 279, Data = "", message = "已校验数据,图片路径正确,入住客户添加失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 280, Data = "", message = "此房间没有人脸机,但是入住客户添加失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } } else { //img = ci.picture; string pictures1 = Down(img, ci.LodgerNmae + ci.IDNumber + DateTime.Now.ToString("ss fff"));//云端地址转换ftp图片 if (pictures1 == "图片路径错误") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 281, Data = "", message = "已校验数据,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 282, Data = "", message = "无需处理,图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 50; result.Message = "图片路径错误,房号" + ridname + ",SN:" + sn + ",是否公区:否"; return Json(result); } ci.picture = pictures1; Lodger lodgers1 = new Lodger { CheckInDate = DateTime.Now, IDNumber = ci.IDNumber, LodgerNmae = ci.LodgerNmae, Sex = ci.Sex, remark = ci.remark, Sourcedian = 1, phonenumber = ci.phonenumber }; CheckInInfo cf2 = new CheckInInfo { Name = ci.LodgerNmae, IdNumber = ci.IDNumber, picture = ci.picture, HotelCode = int.Parse(ci.HotelCode), Roomid = int.Parse(ci.roomid), InfoSource = 0, CheckTime = ci.CheckTime, checkOutTime = Convert.ToDateTime("2000/01/01"), //checkOutTime = ci.checkOutTime, CreationTime = DateTime.Now, }; if (SqlOperationsData.addClient(lodgers1) > 0) { if (SqlOperationsData.additionCheck(cf2) > 0) { StringBuilder sbperson = new StringBuilder(); sbperson.Append("key=abc"); sbperson.Append("&id=" + ci.IDNumber); sbperson.Append("&name=" + ci.LodgerNmae); sbperson.Append("&IC_NO=0001"); sbperson.Append("&ID_NO=" + ci.IDNumber); sbperson.Append("&photo=<" + img + ">"); sbperson.Append("&startTs=-1"); sbperson.Append("&endTs=-1"); sbperson.Append("&passCount=10000"); //追加酒店id和房间id sbperson.Append("&HotelID=" + ci.HotelCode); sbperson.Append("&RoomID=" + ci.roomid); //协议里面没有的字段是否公区 sbperson.Append("&isPublicArea=0"); Entity.Rootinfo msgx = new Entity.Rootinfo(); List rootinfos = new List(); Entity.msgx ms = new Entity.msgx(); ms.msgid = messageid; ms.sn = sn; ms.cmd = "setPerson"; ms.msg = System.Web.HttpUtility.HtmlDecode(sbperson.ToString()); msgx.msgx = ms; msgx.pmsid = pmsid; transferFace tf = new transferFace() { faceSN = sn, faultState = 0, infoid = msgx.msgx.msgid, creationTime = DateTime.Now }; SqlSugarBase.Db.Insertable(tf).ExecuteCommand(); rootinfos.Add(msgx);//存储 sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); pmsLog log = null; if (offLineSend) { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 283, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }; } else { log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 284, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }; } SqlSugarBase.Db.Insertable(log).ExecuteCommand(); //UdpCommunication.QueueSend(sendMsg); string infods = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 285, Data = sendMsg, message = infods }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg);//下发数据给控制台 result.Status = 200; result.Message = "开房成功"; Thread.Sleep(Interval); } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 286, Data = "", message = "已校验数据,添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 287, Data = "", message = "无需处理,添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 400; result.Message = "添加入住信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; } } else { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 288, Data = "", message = "已校验数据,添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 289, Data = "", message = "无需处理,添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "添加客户信息失败,房号" + ridname + ",SN:" + sn + ",是否公区:否"; } } #endregion } } } else { result.Status = 100; result.Message = "密钥错误"; } } catch (Exception e) { result.Status = 500; result.Message = e.Message; LogHelp.WriteExceptionLog(e, "开房接口"); } return Json(result); } /// /// string转 byte数组 /// /// /// public static byte[] stringToByteArray(string data) { return Encoding.Default.GetBytes(data); } /// /// 16进制原码字符串转字节数组 /// /// "AABBCC"或"AA BB CC"格式的字符串 /// public static byte[] ConvertHexStringToBytes(string hexString) { hexString = hexString.Replace(" ", ""); if (hexString.Length % 2 != 0) { throw new ArgumentException("参数长度不正确,必须是偶数位。"); } byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) { returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); } return returnBytes; } /// /// 接口2 (删除人员) /// /// /// /// [HttpPost] public ActionResult CheckOut(string key, string data) { //酒店编号 string hc = ""; //房间编号 string ridname = ""; int pmsid = -1; List message = new List(); string messageid = ""; string sn = ""; data da = JsonConvert.DeserializeObject(data); ReturnResult result = new ReturnResult(); Hotels hotel = new Hotels(); List logList = new List(); try { hc = da.HotelCode; ridname = da.roomid; //密码出错,直接返回。不跟踪。 if (key != "abc") { result.Status = 100; result.Message = "密钥错误"; return Json(result); } hotel = SqlSugarBase.authoriydb.Queryable().First(x => x.Code == da.HotelCode); #region 产生入口记录,产生跟踪用pmsid //记录入口,产生pmsid以备跟踪 pmsInterface info = new pmsInterface { pmstype = 0, DateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), pmsContent = data, hotelid = hotel.Id, }; //pmsid = SqlSugarBase.Db.Insertable(info).ExecuteReturnIdentity(); pmsid = da.pmsinfoid; SqlSugarBase.Db.Updateable(info).Where(x => x.pmsId == pmsid); messageid = pmsid.ToString(); pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 201, Data = data, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "收到pms信息", HotelCode = hc, roomid = ridname }; SqlSugarBase.Db.Insertable(pmslog).ExecuteCommand(); #endregion //酒店出错:酒店为空。跟踪记录到 step 9, 返回酒店code错误。 if (da.HotelCode == "") { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 290, Data = "", message = $"已校验数据,酒店code输入错误", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 291, Data = "", message = $"无需处理,未找到{da.HotelCode}(code)输入错误", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 350; result.Message = "酒店code错误"; return Json(result); } hotel = SqlSugarBase.authoriydb.Queryable().First(x => x.Code == da.HotelCode); //酒店出错,直接返回。跟踪记录到 step 9, 返回无编号酒店错误。 if (hotel == null) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 292, Data = "", message = "已校验数据,无酒店", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 293, Data = "", message = $"无需处理,无编号为{da.HotelCode}酒店", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 121; result.Message = "无酒店"; return Json(result); } da.HotelCode = hotel.Id.ToString(); GetRoomInterface.test test = new GetRoomInterface.test { code = hotel.Code.ToString(), creatDate = hotel.CreateTime.ToString("yyyy-MM-dd") }; Roominfo.Root asd = GetRoomInterface.Roomport(test); //酒店出错,直接返回。跟踪记录到 step 9, 返回酒店输入错误。 if (asd != null && asd.IsSuccess == false) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 290, Data = "", message = $"已校验数据,酒店code输入错误", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 291, Data = "", message = $"无需处理,未找到{da.HotelCode}(code)输入错误", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 300; result.Message = "酒店输入错误"; return Json(result); } var Hotelroomid = asd.Result.FirstOrDefault(x => x.RoomNumber == da.roomid); //房间出错,直接返回。跟踪记录到 step 9, 返回无房间错误。 if (Hotelroomid == null) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 296, Data = "", message = $"已校验数据,无{da.roomid}此房间", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 297, Data = "", message = $"无需处理,未找到{da.roomid}此房间", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 120; result.Message = "无房间"; return Json(result); } #region 房间,住客,人脸机。并订正到日志。 da.roomid = Hotelroomid.ID.ToString(); //查询房间是否关联公区 tbl_room_basic_info tbl_room_basic_info = SqlSugarBase.Gesmartblv_rcu_db().Queryable().First(x => x.IsDel == 0 && x.ROOM_OLD_ID == int.Parse(da.roomid)); //是公区 if (tbl_room_basic_info.isPublicArea == 1) { #region 公区下发 //da.HotelCode = "1287"; List sdres = SqlOperationsData.getCheck(da.HotelCode, da.roomid); sn = SqlOperationsData.selectFace(da.HotelCode, da.roomid); DeviceManage deviced = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); string Factorysd = ""; if (deviced != null) { if (deviced.Factory == "移海") { Factorysd = "yh"; } else if (deviced.Factory == "实义德") { Factorysd = "devs"; } else if (deviced.Factory == "深圳嘉禾兴") { Factorysd = "szjhx"; } else { Factorysd = " "; } } pmsInterface pmss = new pmsInterface { faceSN = sn, hotelid = int.Parse(da.HotelCode), room = int.Parse(da.roomid), messageid = messageid, pmsId = pmsid, }; SqlOperationsData.revisepms(pmss); //住客错误。直接返回。跟踪记录到 step 8, 返回无客人错误。 if (sdres.Count == 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 298, Data = "", message = "已校验数据,此房间无人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 299, Data = "", message = $"无需处理,房间无客人入住,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 404; result.Message = "此房间无客人入住,房号" + ridname + ",SN:" + sn + ",是否公区:是"; //return Json(result); } if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 { Entity.Rootinfo msgx = new Entity.Rootinfo(); Entity.msgx mx = new Entity.msgx(); //mx.msgid = Guid.NewGuid().ToString(); //messageid = mx.msgid;//保存信息id mx.msgid = messageid; mx.sn = sn; mx.cmd = "removePerson"; StringBuilder builder = new StringBuilder(); builder.Append("key=abc"); builder.Append("&id=[]"); builder.Append("&HotelID=" + da.HotelCode); builder.Append("&RoomID=" + da.roomid); //协议里面没有的字段是否公区 builder.Append("&isPublicArea=1"); mx.msg = System.Web.HttpUtility.HtmlDecode(builder.ToString()); msgx.pmsid = pmsid; msgx.msgx = mx; string sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); string Number = sdres[0]; var sdete = SqlSugarBase.Db.Queryable().First(x => x.IdNumber == Number).picture; FaceIssue issue = new FaceIssue() { faceSn = sn, creationtime = DateTime.Now, messageid = messageid, issuestate = 0, picture = "http://face.blv-oa.com/ImgServer/FileImage?url=" + sdete, Factory = Factorysd, APKVersion = deviced.APKVersion }; SqlSugarBase.Db.Insertable(issue).ExecuteCommand(); message.Add(messageid); pmsLog log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 300, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); #region /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg); //Thread.Sleep(100); //DateTime dateTimess = DateTime.Now; //DateTime dateTime = DateTime.Now; //TimeSpan ss = dateTime - dateTimess; //string times = ss.TotalSeconds.ToString(); //float ssd = float.Parse(times); //if (ssd > 4) //{ // if (log.message == "已校验数据,准备向控制台发送") // { // DateTime nowtime = DateTime.Now.AddDays(-1); // string infos = "已校验数据,准备向控制台发送"; // var logspms = SqlSugarBase.Db.Queryable().Where(x => x.step == 2 && x.Creationtime >= nowtime && x.message.Contains(infos)).ToList(); // if (logspms.Count() > 10) // { // smsconts = smsconts + 1; // //Responsesd info = SMSinfo.SMSNotify(); // } // } //} //if (smsconts >= 10) //{ // Responsesd responsesd = SMSinfo.SMSNotify(); // if (responsesd.SendStatusSet[0].Code == "ok" || responsesd.SendStatusSet[0].Code == "Ok") // { // GetProcess(); // smsconts = 0; // } //} #endregion //UdpCommunication.QueueSend(sendMsg); string infods = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 301, Data = sendMsg, message = infods }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); result.Status = 200; result.Message = "退房成功"; //每次调用都会记录FaceIssue日志 foreach (var item in message) { SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == pmsid.ToString()).Where(x => x.messageid == item).ExecuteCommand(); } //return Json(result); }//end of if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 302, Data = "", message = "已校验数据,此房间无人脸机,房号" + da.roomid + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 303, Data = "", message = $"无需处理,此房间无人脸机,房号" + da.roomid + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "退房成功"; //return Json(result); } //end of else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 #endregion } //不是公区 else { //没有关联公区 if (string.IsNullOrEmpty(tbl_room_basic_info.AssociatedPublicArea)) { #region 没有关联公区的有非公区下发 List sdre = SqlOperationsData.getCheck(da.HotelCode, da.roomid); sn = SqlOperationsData.selectFace(da.HotelCode, da.roomid.ToString()); DeviceManage deviced = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); string Factorysd = ""; if (deviced != null) { if (deviced.Factory == "移海") { Factorysd = "yh"; } else if (deviced.Factory == "实义德") { Factorysd = "devs"; } else if (deviced.Factory == "深圳嘉禾兴") { Factorysd = "szjhx"; } else { Factorysd = " "; } } pmsInterface pms = new pmsInterface { faceSN = sn, hotelid = int.Parse(da.HotelCode), room = int.Parse(da.roomid), messageid = messageid, pmsId = pmsid, }; SqlOperationsData.revisepms(pms); //住客错误。直接返回。跟踪记录到 step 8, 返回无客人错误。 if (sdre.Count == 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 304, Data = "", message = "已校验数据,此房间无人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 305, Data = "", message = $"无需处理,房间无客人入住,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 404; result.Message = "此房间无客人入住,房号" + ridname + ",SN:" + sn + ",是否公区:否"; //return Json(result); } if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 { Entity.Rootinfo msgx = new Entity.Rootinfo(); Entity.msgx mx = new Entity.msgx(); //mx.msgid = Guid.NewGuid().ToString(); //messageid = mx.msgid;//保存信息id mx.msgid = messageid; mx.sn = sn; mx.cmd = "removePerson"; StringBuilder builder = new StringBuilder(); builder.Append("key=abc"); builder.Append("&id=[]"); builder.Append("&HotelID=" + da.HotelCode); builder.Append("&RoomID=" + da.roomid); //协议里面没有的字段是否公区 builder.Append("&isPublicArea=0"); mx.msg = System.Web.HttpUtility.HtmlDecode(builder.ToString()); msgx.pmsid = pmsid; msgx.msgx = mx; string sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); string Number = sdre[0]; var sdete = SqlSugarBase.Db.Queryable().First(x => x.IdNumber == Number).picture; FaceIssue issue = new FaceIssue() { faceSn = sn, creationtime = DateTime.Now, messageid = messageid, issuestate = 0, picture = "http://face.blv-oa.com/ImgServer/FileImage?url=" + sdete, Factory = Factorysd, APKVersion = deviced.APKVersion }; SqlSugarBase.Db.Insertable(issue).ExecuteCommand(); message.Add(messageid); pmsLog log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 306, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); #region /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg); //Thread.Sleep(100); //DateTime dateTimess = DateTime.Now; //DateTime dateTime = DateTime.Now; //TimeSpan ss = dateTime - dateTimess; //string times = ss.TotalSeconds.ToString(); //float ssd = float.Parse(times); //if (ssd > 4) //{ // if (log.message == "已校验数据,准备向控制台发送") // { // DateTime nowtime = DateTime.Now.AddDays(-1); // string infos = "已校验数据,准备向控制台发送"; // var logspms = SqlSugarBase.Db.Queryable().Where(x => x.step == 2 && x.Creationtime >= nowtime && x.message.Contains(infos)).ToList(); // if (logspms.Count() > 10) // { // smsconts = smsconts + 1; // //Responsesd info = SMSinfo.SMSNotify(); // } // } //} //if (smsconts >= 10) //{ // Responsesd responsesd = SMSinfo.SMSNotify(); // if (responsesd.SendStatusSet[0].Code == "ok" || responsesd.SendStatusSet[0].Code == "Ok") // { // GetProcess(); // smsconts = 0; // } //} #endregion string infods = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 307, Data = sendMsg, message = infods }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); result.Status = 200; result.Message = "退房成功"; //每次调用都会记录FaceIssue日志 foreach (var item in message) { SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == pmsid.ToString()).Where(x => x.messageid == item).ExecuteCommand(); } //return Json(result); }//end of if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 308, Data = "", message = "已校验数据,此房间无人脸机,房号" + da.roomid + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 309, Data = "", message = $"无需处理,此房间无人脸机,房号" + da.roomid + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "退房成功"; return Json(result); } //end of else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 #endregion } //有关联公区 else { //删除公区用户人的信息 List ints = new List(); string guanlian = tbl_room_basic_info.AssociatedPublicArea; string[] arr = guanlian.Split(','); //ints.Add(da.roomid); ints.AddRange(arr); for (int j = 0; j < ints.Count(); j++) { #region 关联公区的有公区的公区下发 List sdres = SqlOperationsData.getCheck(da.HotelCode, ints[j]); sn = SqlOperationsData.selectFace(da.HotelCode, ints[j].ToString()); DeviceManage deviceds = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); tbl_room_basic_info tbbasicinfo = SqlSugarBase.Gesmartblv_rcu_db().Queryable().First(x => x.IsDel == 0 && x.ROOM_OLD_ID == int.Parse(ints[j])); string Factorysds = ""; if (deviceds != null) { if (deviceds.Factory == "移海") { Factorysds = "yh"; } else if (deviceds.Factory == "实义德") { Factorysds = "devs"; } else if (deviceds.Factory == "深圳嘉禾兴") { Factorysds = "szjhx"; } else { Factorysds = " "; } } pmsInterface pmss = new pmsInterface { faceSN = sn, hotelid = int.Parse(da.HotelCode), room = int.Parse(ints[j]), messageid = messageid, pmsId = pmsid, }; SqlOperationsData.revisepms(pmss); //住客错误。直接返回。跟踪记录到 step 8, 返回无客人错误。 if (sdres.Count == 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 310, Data = "", message = "已校验数据,此房间无人脸机,房号" + tbbasicinfo.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbbasicinfo.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 311, Data = "", message = $"无需处理,房间无客人入住,房号" + tbbasicinfo.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbbasicinfo.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 404; result.Message = "此房间无客人入住,房号" + tbbasicinfo.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是"; } if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 { Entity.Rootinfo msgx = new Entity.Rootinfo(); Entity.msgx mx = new Entity.msgx(); //mx.msgid = Guid.NewGuid().ToString(); //messageid = mx.msgid;//保存信息id mx.msgid = messageid; mx.sn = sn; mx.cmd = "removePerson"; StringBuilder builder = new StringBuilder(); builder.Append("key=abc"); builder.Append("&id=[]"); builder.Append("&HotelID=" + da.HotelCode); builder.Append("&RoomID=" + ints[j]); builder.Append("&Groupid=1"); //协议里面没有的字段是否公区 builder.Append("&isPublicArea=1"); mx.msg = System.Web.HttpUtility.HtmlDecode(builder.ToString()); msgx.pmsid = pmsid; msgx.msgx = mx; string sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); string Number = ""; if (sdres.Count != 0) { Number = sdres[0]; } //string Number = sdres[0]; var sdete = SqlSugarBase.Db.Queryable().First(x => x.IdNumber == Number).picture; FaceIssue issue = new FaceIssue() { faceSn = sn, creationtime = DateTime.Now, messageid = messageid, issuestate = 0, picture = "http://face.blv-oa.com/ImgServer/FileImage?url=" + sdete, Factory = Factorysds, APKVersion = deviceds.APKVersion }; SqlSugarBase.Db.Insertable(issue).ExecuteCommand(); message.Add(messageid); pmsLog log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 312, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + tbbasicinfo.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbbasicinfo.ROOM_NUMBER }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); #region /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg); //Thread.Sleep(100); //DateTime dateTimess = DateTime.Now; //DateTime dateTime = DateTime.Now; //TimeSpan ss = dateTime - dateTimess; //string times = ss.TotalSeconds.ToString(); //float ssd = float.Parse(times); //if (ssd > 4) //{ // if (log.message == "已校验数据,准备向控制台发送") // { // DateTime nowtime = DateTime.Now.AddDays(-1); // string infos = "已校验数据,准备向控制台发送"; // var logspms = SqlSugarBase.Db.Queryable().Where(x => x.step == 2 && x.Creationtime >= nowtime && x.message.Contains(infos)).ToList(); // if (logspms.Count() > 10) // { // smsconts = smsconts + 1; // //Responsesd info = SMSinfo.SMSNotify(); // } // } //} //if (smsconts >= 10) //{ // Responsesd responsesd = SMSinfo.SMSNotify(); // if (responsesd.SendStatusSet[0].Code == "ok" || responsesd.SendStatusSet[0].Code == "Ok") // { // GetProcess(); // smsconts = 0; // } //} #endregion string infods = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 313, Data = sendMsg, message = infods }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); result.Status = 200; result.Message = "退房成功"; //每次调用都会记录FaceIssue日志 foreach (var item in message) { SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == pmsid.ToString()).Where(x => x.messageid == item).ExecuteCommand(); } //return Json(result); }//end of if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 314, Data = "", message = "已校验数据,此房间无人脸机,房号" + tbbasicinfo.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbbasicinfo.ROOM_NUMBER }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 315, Data = "", message = $"无需处理,此房间无人脸机,房号" + tbbasicinfo.ROOM_NUMBER + ",SN:" + sn + ",是否公区:是", HotelCode = hc, roomid = tbbasicinfo.ROOM_NUMBER }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "退房成功"; //return Json(result); } //end of else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 #endregion } #region 关联公区的有公区的非公区下发 //删除房间所有人信息 List sdre = SqlOperationsData.getCheck(da.HotelCode, da.roomid); sn = SqlOperationsData.selectFace(da.HotelCode, da.roomid.ToString()); DeviceManage deviced = SqlSugarBase.GesmartDb().Queryable().First(x => x.SerialNo == sn); string Factorysd = ""; if (deviced != null) { if (deviced.Factory == "移海") { Factorysd = "yh"; } else if (deviced.Factory == "实义德") { Factorysd = "devs"; } else if (deviced.Factory == "深圳嘉禾兴") { Factorysd = "szjhx"; } else { Factorysd = " "; } } pmsInterface pms = new pmsInterface { faceSN = sn, hotelid = int.Parse(da.HotelCode), room = int.Parse(da.roomid), messageid = messageid, pmsId = pmsid, }; SqlOperationsData.revisepms(pms); //住客错误。直接返回。跟踪记录到 step 8, 返回无客人错误。 if (sdre.Count == 0) { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 314, Data = "", message = "已校验数据,此房间无人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 315, Data = "", message = $"无需处理,房间无客人入住,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 404; result.Message = "此房间无客人入住"; //return Json(result);不管房间住没有住人都下发一次删除人脸的动作2024-04-11 17:24:13做出的修改 } if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 { Entity.Rootinfo msgx = new Entity.Rootinfo(); Entity.msgx mx = new Entity.msgx(); //mx.msgid = Guid.NewGuid().ToString(); //messageid = mx.msgid;//保存信息id mx.msgid = messageid; mx.sn = sn; mx.cmd = "removeGroup"; StringBuilder builder = new StringBuilder(); builder.Append("key=abc"); //builder.Append("&id=[]"); builder.Append("&Group=1"); //协议里面没有的字段是否公区 builder.Append("&isPublicArea=0"); //builder.Append("&RoomID=" + da.roomid); mx.msg = System.Web.HttpUtility.HtmlDecode(builder.ToString()); msgx.pmsid = pmsid; msgx.msgx = mx; string sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); string Number = sdre[0]; var sdete = SqlSugarBase.Db.Queryable().First(x => x.IdNumber == Number).picture; FaceIssue issue = new FaceIssue() { faceSn = sn, creationtime = DateTime.Now, messageid = messageid, issuestate = 0, picture = "http://face.blv-oa.com/ImgServer/FileImage?url=" + sdete, APKVersion = deviced.APKVersion }; SqlSugarBase.Db.Insertable(issue).ExecuteCommand(); message.Add(messageid); pmsLog log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 316, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); #region /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg); //Thread.Sleep(100); //DateTime dateTimess = DateTime.Now; //DateTime dateTime = DateTime.Now; //TimeSpan ss = dateTime - dateTimess; //string times = ss.TotalSeconds.ToString(); //float ssd = float.Parse(times); //if (ssd > 4) //{ // if (log.message == "已校验数据,准备向控制台发送") // { // DateTime nowtime = DateTime.Now.AddDays(-1); // string infos = "已校验数据,准备向控制台发送"; // var logspms = SqlSugarBase.Db.Queryable().Where(x => x.step == 2 && x.Creationtime >= nowtime && x.message.Contains(infos)).ToList(); // if (logspms.Count() > 10) // { // smsconts = smsconts + 1; // //Responsesd info = SMSinfo.SMSNotify(); // } // } //} //if (smsconts >= 10) //{ // Responsesd responsesd = SMSinfo.SMSNotify(); // if (responsesd.SendStatusSet[0].Code == "ok" || responsesd.SendStatusSet[0].Code == "Ok") // { // GetProcess(); // smsconts = 0; // } //} #endregion string infods = UdpCommunication.QueueSend(sendMsg); log = new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 317, Data = sendMsg, message = infods }; SqlSugarBase.Db.Insertable(log).ExecuteCommand(); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(pmsid, log.message); result.Status = 200; result.Message = "退房成功"; //每次调用都会记录FaceIssue日志 foreach (var item in message) { SqlSugarBase.Db.Updateable().SetColumns(x => x.pmsid == pmsid.ToString()).Where(x => x.messageid == item).ExecuteCommand(); } //return Json(result); }//end of if (sn != null && sn != "")// 有人脸机退房。跟踪记录到 step 2, 返回退房成功。 else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 { logList.Clear(); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 317, Data = "", message = "已校验数据,此房间无人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); logList.Add(new pmsLog { pmsid = pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 318, Data = "", message = $"无需处理,此房间无人脸机,房号" + ridname + ",SN:" + sn + ",是否公区:否", HotelCode = hc, roomid = ridname }); SqlSugarBase.Db.Insertable(logList).ExecuteCommand(); result.Status = 200; result.Message = "退房成功"; //return Json(result); } //end of else // 普通退房,没有人脸机。跟踪记录到 step 8, 返回退房成功。 } #endregion } #endregion } catch (Exception e) { LogHelp.WriteExceptionLog(e); result.Status = 500; result.Message = e.Message; } return Json(result); } public class data { public string HotelCode { get; set; } public string roomid { get; set; } public string checkOutTime { get; set; } public int pmsinfoid { get; set; } } /// /// 网络图片保存到项目目录 /// /// /// public string Down(string url, string dtnow) { string tmp_ErrIdx = "0"; try { tmp_ErrIdx = "1"; WebRequest wreq = WebRequest.Create(url); tmp_ErrIdx = "2"; HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse(); tmp_ErrIdx = "3"; Stream s = wresp.GetResponseStream(); tmp_ErrIdx = "4"; System.Drawing.Image img; using (img = System.Drawing.Image.FromStream(s)) { tmp_ErrIdx = "5"; string TimePath = HostingEnvironment.MapPath("~/Upload/Image/");//保存路径 if (!Directory.Exists(TimePath))//判断文件夹是否存在 { Directory.CreateDirectory(TimePath);//不存在则创建文件夹 } tmp_ErrIdx = "6"; string TimePathMake = HostingEnvironment.MapPath("~/Upload/Img/");//小图 if (!Directory.Exists(TimePathMake))//判断文件夹是否存在 { Directory.CreateDirectory(TimePathMake);//不存在则创建文件夹 } tmp_ErrIdx = "7"; img.Save(TimePath + dtnow + "_1" + ".jpg", ImageFormat.Jpeg); tmp_ErrIdx = "8"; string res = MakeThumbnail(img, TimePathMake, 800, 800, "", dtnow); //System.IO.File.Delete(TimePath + "1" + name + ".jpg"); //MemoryStream ms = new MemoryStream(); //img.Dispose(); string ftpURL = "auth.blv-oa.com:50/uts_Manager/oyl_FTP/Image"; //string ftpURLTwo = "auth.blv-oa.com:50/uts_Manager/oyl_FTP/Img"; //FtpUploadShow(TimePathMake + dtnow + ".jpg", ftpURLTwo); return FtpUploadShow(res, ftpURL); } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex, "图片"); return "图片路径错误-" + tmp_ErrIdx; } } /// /// 上传到FTP /// /// /// /// public string FtpUploadShow(string filename, string ftpServerIP) { //filename += ".jpg"; string ftpUserID = "uts_manager";//ftp账号 string ftpPassword = "uts_Inhaos@all";//ftp密码 FileInfo fileInf = new FileInfo(filename); FtpWebRequest reqFTP; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name)); string s = fileInf.Name; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = true; //如果要连接的 FTP 服务器要求凭据并支持安全套接字层 (SSL),则应将 EnableSsl 设置为 true。如果不写会报出421错误(服务不可用) reqFTP.EnableSsl = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定数据传输类型 reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为 10kb int buffLength = 10480; byte[] buff = new byte[buffLength]; int contentLen; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); try { // 把上传的文件写入流 Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的buffLength kb contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入 upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 关闭两个流 strm.Close(); fs.Close(); return fileInf.Name; } catch (Exception ex) { Response.Write("Upload Error:" + ex.Message); } } catch (Exception e) { Response.Write("Upload Error:" + e.Message); } return null; } public static bool ValidateServerCertificate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } public string MakeThumbnail(Image originalImage, string thumbnailPath, int width, int height, string mode, string name) { try { ReturnResult result = new ReturnResult(); int towidth = width; int toheight = height; int x = 0; int y = 0; int ow = originalImage.Width; int oh = originalImage.Height; if (mode == "") { if (ow > oh) { mode = "W"; } else { mode = "H"; } } switch (mode) { case "HW"://指定高宽缩放(可能变形) break; case "W"://指定宽,高按比例 toheight = originalImage.Height * width / originalImage.Width; break; case "H"://指定高,宽按比例 towidth = originalImage.Width * height / originalImage.Height; break; case "Cut"://指定高宽裁减(不变形) if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight) { oh = originalImage.Height; ow = originalImage.Height * towidth / toheight; y = 0; x = (originalImage.Width - ow) / 2; } else { ow = originalImage.Width; oh = originalImage.Width * height / towidth; x = 0; y = (originalImage.Height - oh) / 2; } break; default: break; } using (Image bitmap = new System.Drawing.Bitmap(towidth, toheight)) { //新建一个画板 using (Graphics g = System.Drawing.Graphics.FromImage(bitmap)) { //设置高质量插值法 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //设置高质量,低速度呈现平滑程度 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //清空画布并以透明背景色填充 g.Clear(Color.Transparent); //在指定位置并且按指定大小绘制原图片的指定部分 g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel); if (!Directory.Exists(thumbnailPath)) { Directory.CreateDirectory(thumbnailPath); } //以jpg格式保存缩略图 bitmap.Save(thumbnailPath + "2" + name + ".jpg"); ImgServerController.CompressImage(thumbnailPath + "2" + name + ".jpg", thumbnailPath + name + ".jpg"); //System.IO.File.Delete(thumbnailPath + "2" + name + ".jpg"); //originalImage.Dispose(); //bitmap.Dispose(); //g.Dispose(); return thumbnailPath + name + ".jpg"; //return thumbnailPath + info.Name; //g.Dispose(); //bitmap.Dispose(); } } } catch (Exception) { //LogHelp.WriteExceptionLog(ex, this.GetType().Name); return null; } finally { //originalImage.Dispose(); } } /// /// 图片是否合格 /// /// /// public ActionResult VisitImg(string Imgurl) { try { WebRequest wreq = WebRequest.Create(Imgurl); HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse(); Stream s = wresp.GetResponseStream(); System.Drawing.Image img; img = System.Drawing.Image.FromStream(s); if (img.Width > 900 || img.Height > 900) { return Json(new { Status = false, Message = "图片不符合要求,注释:照片要求宽高640*480像素,分辨率最大支持1080*1080" }); } return Json(new { Status = true, Message = "图片符合要求" }); } catch (Exception ex) { throw; } } #endregion //开启进程方法 public string GetProcess() { //找到所有进程 Process[] ps = Process.GetProcesses(); DataTable ProcessTable = new DataTable(); ProcessTable.Columns.Add("Name", typeof(string)); ProcessTable.Columns.Add("Start Time", typeof(DateTime)); ProcessTable.Columns.Add("CPU %", typeof(TimeSpan)); ProcessTable.Columns.Add("Threads", typeof(string)); ProcessTable.Columns.Add("Session ID", typeof(int)); ProcessTable.Columns.Add("Unique ID", typeof(int)); ProcessTable.Columns.Add("RAM", typeof(float)); ProcessTable.Columns.Add("Machine", typeof(string)); ProcessTable.Columns.Add("Priority", typeof(int)); foreach (Process Process in ps) { try { //找到具有指定名称的进程 // 换成你的exe名字 去掉exe if (!Process.ProcessName.ToUpper().Contains("TESTWEBSOCKET")) continue; string pName = Process.ProcessName; DateTime pStartTime = Process.StartTime; TimeSpan pProcTime = Process.TotalProcessorTime; string pThreads = Process.Threads.ToString(); int pSessionId = Process.SessionId; int pId = Process.Id; long pRam = Process.VirtualMemorySize64; string pMachineName = Process.MachineName; int pPriority = Process.BasePriority; //杀死进程 Process.Kill(); ProcessTable.Rows.Add(pName , pStartTime , pProcTime , pThreads , pSessionId , pId , pRam , pMachineName , pPriority); } catch (Exception e) { Logs.WriteLog("重新启动进成功" + e); } } // 换成你的exe路径 Process.Start(@"C:\FaceConsole\bin6\Release\TestWebSocket.exe"); return JsonConvert.SerializeObject(ProcessTable); } /// /// 关闭进程 /// /// public string GetProcessKill() { //找到所有进程 Process[] ps = Process.GetProcesses(); DataTable ProcessTable = new DataTable(); ProcessTable.Columns.Add("Name", typeof(string)); ProcessTable.Columns.Add("Start Time", typeof(DateTime)); ProcessTable.Columns.Add("CPU %", typeof(TimeSpan)); ProcessTable.Columns.Add("Threads", typeof(string)); ProcessTable.Columns.Add("Session ID", typeof(int)); ProcessTable.Columns.Add("Unique ID", typeof(int)); ProcessTable.Columns.Add("RAM", typeof(float)); ProcessTable.Columns.Add("Machine", typeof(string)); ProcessTable.Columns.Add("Priority", typeof(int)); foreach (Process Process in ps) { try { //找到具有指定名称的进程 // 换成你的exe名字 去掉exe if (!Process.ProcessName.ToUpper().Contains("TESTWEBSOCKET")) continue; string pName = Process.ProcessName; DateTime pStartTime = Process.StartTime; TimeSpan pProcTime = Process.TotalProcessorTime; string pThreads = Process.Threads.ToString(); int pSessionId = Process.SessionId; int pId = Process.Id; long pRam = Process.VirtualMemorySize64; string pMachineName = Process.MachineName; int pPriority = Process.BasePriority; //杀死进程 Process.Kill(); ProcessTable.Rows.Add(pName , pStartTime , pProcTime , pThreads , pSessionId , pId , pRam , pMachineName , pPriority); } catch (Exception e) { } } // 换成你的exe路径 Process.Start(@"C:\FaceConsole\bin6\Release\TestWebSocket.exe"); return JsonConvert.SerializeObject(ProcessTable); } public static void IssueFacemachine(object issueinfo) { ReturnResult result = new ReturnResult(); string sendMsg; try { threadinfo faceinfo = (issueinfo as threadinfo); StringBuilder sbperson = new StringBuilder(); sbperson.Append("key=abc"); sbperson.Append("&id=" + faceinfo.IDNumber); sbperson.Append("&name=" + faceinfo.LodgerNmae); sbperson.Append("&IC_NO=0001"); sbperson.Append("&ID_NO=" + faceinfo.IDNumber); sbperson.Append("&photo=<" + faceinfo.picture + ">"); sbperson.Append("&startTs=-1"); sbperson.Append("&endTs=-1"); sbperson.Append("&passCount=10000"); //追加酒店id和房间id sbperson.Append("&HotelID=" + faceinfo.HotelCode); sbperson.Append("&RoomID=" + faceinfo.roomid); //协议里面没有的字段是否公区 sbperson.Append("&isPublicArea=1"); //sbperson.Append("&Groupid=" + ci.Groupid); Entity.Rootinfo msgx = new Entity.Rootinfo(); List rootinfos = new List(); Entity.msgx ms = new Entity.msgx(); ms.msgid = faceinfo.messageid; ms.sn = faceinfo.SN; ms.cmd = "setPerson"; ms.msg = System.Web.HttpUtility.HtmlDecode(sbperson.ToString()); msgx.msgx = ms; msgx.pmsid = faceinfo.pmsid; transferFace tf = new transferFace() { faceSN = faceinfo.SN, faultState = 0, infoid = msgx.msgx.msgid, creationTime = DateTime.Now }; SqlSugarBase.Db.Insertable(tf).ExecuteCommand(); rootinfos.Add(msgx);//存储 sendMsg = Newtonsoft.Json.JsonConvert.SerializeObject(msgx); pmsLog log = null; if (faceinfo.offLineSend) { log = new pmsLog { pmsid = faceinfo.pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 319, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + faceinfo.roomid + ",SN:" + faceinfo.SN + ",是否公区:是" }; } else { log = new pmsLog { pmsid = faceinfo.pmsid, app = 1, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), step = 320, Data = sendMsg, message = "已校验数据,准备向控制台发送,房号" + faceinfo.roomid + ",SN:" + faceinfo.SN + ",是否公区:是" }; } SqlSugarBase.Db.Insertable(log).ExecuteCommand(); UdpCommunication.QueueSend(sendMsg); Errormessageinfo errorinfo = new Errormessageinfo(); errorinfo.Errormessage(faceinfo.pmsid, log.message); /*改成MSMQ,消息队列*/ //UdpCommunication.UdpState(sendMsg);//下发数据给控制台 result.Status = 200; result.Message = "开房成功"; //return result; Thread.Sleep(Interval); } catch (Exception e) { result.Status = 500; result.Message = e.Message; LogHelp.WriteExceptionLog(e, "开房接口多线程错误"); } } } public static class SMSinfo { public static Responsesd SMSNotify() { Responsesd shujiu = new Responsesd(); try { // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential { SecretId = "AKID99vRlvskQs52khPs78uQhkbKwaCkDeHo", //SecretId = "AKID99vRIvskQs52khPs78uQhkbKwaCkDeHo", SecretKey = "RhmgMn37xZyAFPQSFn14uhQ3a4QgzJby" //SecretKey = "RhmgMn37xZyAFPQSFn14uhQ3a4QgzJby" }; // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); // 实例化一个http选项,可选的,没有特殊需求可以跳过 HttpProfile httpProfile = new HttpProfile(); httpProfile.Endpoint = ("sms.tencentcloudapi.com"); clientProfile.HttpProfile = httpProfile; // 实例化要请求产品的client对象,clientProfile是可选的 //SmsClient client = new SmsClient(cred, "", clientProfile); SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 SendSmsRequest req = new SendSmsRequest(); req.PhoneNumberSet = new string[] { "13509214696" }; req.SmsSdkAppId = "1400871751"; req.SignName = "东莞市英皓思科技有限公司"; req.TemplateId = "2000581"; // 返回的resp是一个SendSmsResponse的实例,与请求对象对应 SendSmsResponse resp = client.SendSmsSync(req); var abs = AbstractModel.ToJsonString(resp); shujiu = JsonConvert.DeserializeObject(abs); } catch (Exception e) { Console.WriteLine(e.ToString()); } return shujiu; } } public class Responsesd { public List SendStatusSet { get; set; } public string RequestId { get; set; } } public class SendStatusSetsdf { public string PhoneNumber { get; set; } public string SerialNo { get; set; } public int Fee { get; set; } public string SessionContext { get; set; } public string Code { get; set; } public string Message { get; set; } public string IsoCode { get; set; } } public class threadinfo : portinfo { public bool offLineSend { get; set; } public int pmsid { get; set; } public string SN { get; set; } public string messageid { get; set; } } }