using Models; using Models.ModelItems; using Services.Api; using Services.Manager; using Services.Tool; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using System.Web.UI.WebControls; using static Services.Tool.HttpRequestHelp; using static System.Runtime.CompilerServices.RuntimeHelpers; namespace UI.Controllers { //给第三方调用的Api public class OtherApiController : Controller { [HttpPost] [Route("OTApi/SynAuthority")] public ActionResult Synchronization() { ApiController api = new ApiController(); return api.Clear2(); } /// /// 登录 /// /// /// /// /// /// 是否多点登录 /// /// [HttpPost] [Route("OTApi/Login")] public ActionResult Index(string Uid, string Pwd, int appid, string Ip = "", bool moreLogin = false, string UserAgent = "") { var resdata = new ReturnResult(); try { Ip = Ip == "" ? IPHelper.GetIP() : Ip; var res = OTApi.GetUserLoginByApi(Uid, Pwd, appid); DbLog log = new DbLog() { Uid = Uid, Ip = Ip, Client = UserAgent == "" ? HttpContext.Request.UserAgent : UserAgent }; var Message = res.Message; Task.Run(() => { Data loc = HttpRequestHelp.GetIp($@"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={log.Ip}&co=&resource_id=6006&oe=utf8"); if (loc != null && loc.status == 0) { if (loc.data.Count > 0) { log.location = loc.data[0].location; } } DbLogServer.WriteDbLog($"{Uid}请求应用 {Message[3]}({appid}) 授权" + (res.Status == 200 ? "请求成功~" : "请求失败~"), 0, log); if (res.Status == 200) DBlog.WirtDB(Message[2], Message[0], appid); res.Message = "请求成功~"; }); resdata.Status = res.Status; if (res.Status == 200) { var token = (Uid + Pwd + DateTime.Now); var md5 = new MD5CryptoServiceProvider(); token = (BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(token)), 4, 8)).Replace("-", ""); if (moreLogin == true) { StackChangeRedisHelper.StringSet(token, new UserInfo() { Pwd = Pwd, Uid = Uid }, TimeSpan.FromMinutes(20)); } resdata.Data = new { Userinfo = new { Uid = Uid, HeadImg = Message[1] }, HotelData = res.Data, Token = moreLogin ? token : string.Empty }; resdata.Message = "请求成功~"; } else resdata.Message = res.Message; } catch (Exception ex) { resdata.Data = ""; resdata.Status = 500; resdata.Message = ex.Message; LogHelp.WriteExceptionLog(ex); } return Json(resdata); } [HttpPost] [Route("OTApi/Apps")] public ActionResult Apps(string Uid, int appid = 0, string Ip = "", string UserAgent = "") { var resdata = new ReturnResult(); var app = new ApplicationDomain() { AppName = "全部", Id = appid }; if (appid != 0) { app = Services.Cache.CacheHelp.cacheSysApp.FirstOrDefault(x => x.Id == appid); } try { DbLog log = new DbLog() { Uid = Uid, Ip = Ip == "" ? IPHelper.GetIP() : Ip, Client = UserAgent == "" ? HttpContext.Request.UserAgent : UserAgent }; var user = Services.Cache.CacheHelp.cacheSysUserInfo.FirstOrDefault(x => x.Uid == Uid); if (user == null || app == null) { new ApplicationDomain() { AppName = "全部", Id = appid }; resdata.Status = 100; resdata.Message = "用户或app不存在~"; resdata.Data = string.Empty; } else { //返回 查询的app 正常的权限 resdata.Data = AppServer.GetAppInfo(appid, 0, 1, false); resdata.Status = 200; } Task.Run(() => { Data loc = HttpRequestHelp.GetIp($@"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={log.Ip}&co=&resource_id=6006&oe=utf8"); if (loc.status == 0) { if (loc.data.Count > 0) { log.location = loc.data[0].location; } } DbLogServer.WriteDbLog($"{Uid}查询 {app.AppName} App信息 {(resdata.Status == 200 ? "成功" : "失败")}", 0, log); }); } catch (Exception ex) { resdata.Status = 500; resdata.Data = ""; resdata.Message = ex.Message; LogHelp.WriteExceptionLog(ex); } return Json(resdata); } /// /// 全局登录 退出登录 通过链接点入无法登录 /// /// /// [HttpPost] [Route("OTApi/OutLogin")] public ActionResult OutLogin(string Token, string Ip, bool IsNew = false) { var resdata = new ReturnResult(); try { var userinfo = StackChangeRedisHelper.StringGet(Token); if (IsNew) { Ip = Ip == "" ? IPHelper.GetIP() : Ip; if (userinfo == default(UserInfo)) { resdata.Status = 100; resdata.Data = ""; return Json(resdata); } var token = (userinfo.Uid + userinfo.Pwd + DateTime.Now); var md5 = new MD5CryptoServiceProvider(); token = (BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(token)), 4, 8)).Replace("-", ""); StackChangeRedisHelper.StringSet(token, userinfo); resdata.Data = new { Token = token }; resdata.Status = 200; } StackChangeRedisHelper.StringSet(Token, userinfo, TimeSpan.FromSeconds(10)); } catch (Exception ex) { resdata.Data = ""; resdata.Status = 500; resdata.Message = ex.Message; LogHelp.WriteExceptionLog(ex); } return Json(resdata); } /// /// 全局登录 登录 通过链接点入登录 返回用户信息 /// /// /// [HttpPost] [Route("OTApi/MoreLogin")] public ActionResult MoreLogin(string Token, int appid, string Ip = "", string UserAgent = "", bool IsData = true) { var resdata = new ReturnResult(); try { Logs.WriteTimingUDPLog($"传入token {Token}"); Ip = Ip == "" ? IPHelper.GetIP() : Ip; var userinfo = StackChangeRedisHelper.StringGet(Token); StackChangeRedisHelper.RemoveKey(Token); if (userinfo == default(UserInfo)) { if (IsData == false) { resdata.Status = 200; resdata.Message = "清除成功~"; return Json(resdata); } resdata.Status = 100; resdata.Message = "无效凭证~"; return Json(resdata); } var res = OTApi.GetUserLoginByApi(userinfo.Uid, userinfo.Pwd, appid); DbLog log = new DbLog() { Uid = userinfo.Uid, Ip = Ip == "" ? IPHelper.GetIP() : Ip, Client = UserAgent == "" ? HttpContext.Request.UserAgent : UserAgent }; var Message = res.Message; Task.Run(() => { Data loc = HttpRequestHelp.GetIp($@"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={log.Ip}&co=&resource_id=6006&oe=utf8"); if (loc.status == 0) { if (loc.data.Count > 0) { log.location = loc.data[0].location; } } DbLogServer.WriteDbLog($"{userinfo.Uid}请求应用 {Message[3]}({appid}) 授权" + (res.Status == 200 ? "请求成功~" : "请求失败~"), 0, log); if (res.Status == 200) DBlog.WirtDB(Message[2], Message[0], appid); res.Message = "请求成功~"; //AppServer.AddDown(appid, 1); }); resdata.Status = res.Status; if (res.Status == 200) { resdata.Data = new { Userinfo = new { Uid = userinfo.Uid, HeadImg = Message[1] }, HotelData = res.Data }; resdata.Message = "请求成功~"; } else resdata.Message = res.Message; } catch (Exception ex) { resdata.Data = null; resdata.Status = 500; resdata.Message = ex.Message; LogHelp.WriteExceptionLog(ex); } return Json(resdata); } [HttpPost] #region 下载量统计 [Route("OTApi/AppDownSum")] public ActionResult DownSum(int appid = 0, string Token = "", string Ip = "", string UserAgent = "", int sum = 1) { var resdata = new ReturnResult(); var app = new ApplicationDomain() { AppName = "全部", Id = appid }; if (appid != 0) { app = Services.Cache.CacheHelp.cacheSysApp.FirstOrDefault(x => x.Id == appid); } try { DbLog log = new DbLog() { Ip = Ip == "" ? IPHelper.GetIP() : Ip, Client = UserAgent == "" ? HttpContext.Request.UserAgent : UserAgent }; var userinfo = StackChangeRedisHelper.StringGet(Token); string Uid = userinfo.Uid; if (userinfo == null) { resdata.Status = 100; resdata.Message = "TOKEN_ERROR~"; resdata.Data = string.Empty; Uid = "非法用户"; } else { Uid = userinfo.Uid; var user = Services.Cache.CacheHelp.cacheSysUserInfo.FirstOrDefault(x => x.Uid == Uid); if (user == null || app == null) { resdata.Status = 100; resdata.Message = "用户或app不存在~"; resdata.Data = string.Empty; } else { //返回 查询的app resdata.Data = AppServer.AddDown(appid, sum); resdata.Status = 200; } } log.Uid = Uid; Task.Run(() => { Data loc = HttpRequestHelp.GetIp($@"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={log.Ip}&co=&resource_id=6006&oe=utf8"); if (loc.status == 0) { if (loc.data.Count > 0) { log.location = loc.data[0].location; } } DbLogServer.WriteDbLog($"{Uid}点击跳转了 {app.AppName} App统计数量{(resdata.Status == 200 ? "成功" : "失败")}", 0, log); }); } catch (Exception ex) { resdata.Status = 500; resdata.Data = ""; resdata.Message = ex.Message; LogHelp.WriteExceptionLog(ex); } return Json(resdata); } #endregion /// /// 同步数据 /// /// /// /// [HttpPost] [Route("OuterSyncApi/SyncData")] public ActionResult OuterSyncApi(string Pwd, int stepid = 0) { DbLogServer.WriteDbLog($"从巫工数据库同步数据到mysql数据库"); if (Pwd == "fs%sd") { var res = SyncAllFromOutterDB.SYNC_DATA.SYNC_DATA_ALL(stepid); string erMsg = SyncAllFromOutterDB.GlobalSyncLockTest.recentErrMsg; //return Json(res); if (res) { return Json(new { messages = "同步成功", Status = true }); } else { return Json(new { messages = erMsg, Status = false }); } } else { return Json(new { messages = "同步密码错误", Status = false }); } } [HttpPost] [Route("OuterSyncApi/GetRoomTypeAndRoomInfo")] public ActionResult GetRoomTypeAndRoomInfo(string HotelCode) { ReturnInfo ri = new ReturnInfo(); try { DbLog dlog = new DbLog { location = "", Ip = "::1", Client = "", CreateTime = DateTime.Now, Uid = "宝镜", Type = 0, Content = "宝镜获取酒店" + HotelCode + "的房型和房间信息" }; SqlSugarBase.Db.Insertable(dlog).ExecuteCommand(); TBL_HOTEL_BASIC_INFO hotel = SqlSugarBase.RcuDb.Queryable().First(it => it.PROJECT_NUMBER == HotelCode && it.IsDel != 1); if (hotel != null) { List roomList = SqlSugarBase.RcuDb.Queryable().Where(it => it.HOTEL_OLD_ID == hotel.IDOLD && it.IsDel != 1).ToList(); if (roomList.Count > 0) { dlog = new DbLog { location = "", Ip = "::1", Client = "", CreateTime = DateTime.Now, Uid = "宝镜", Type = 0, Content = "宝镜获取酒店" + HotelCode + "的房型和房间信息,成功" }; SqlSugarBase.Db.Insertable(dlog).ExecuteCommand(); ri.ErrMsg = "成功"; ri.ErrCode = 0; ri.HotelCode = HotelCode; ri.RoomTypeCnt = roomList.Count; ri.RoomNoCnt = 0; ri.HotelNane = hotel.HOTEL_NAME_CN; foreach (var item in roomList) { RoomTypeAllinfo rmt = new RoomTypeAllinfo(); rmt.RoomTypeID = item.ROOM_TYPE_OLD_ID; rmt.RoomTypeName = item.ROOM_TYPE_NAME; //房间集合 List roominfo = SqlSugarBase.RcuDb.Queryable().Where(it => it.ROOM_TYPE_OLD_ID == item.ROOM_TYPE_OLD_ID && it.IsDel != 1).ToList(); if (roominfo.Count > 0) { rmt.RoomCnt = roominfo.Count; foreach (var items in roominfo) { RoomAllInfo rmtinfo = new RoomAllInfo(); rmtinfo.RoomNoID = items.ROOM_OLD_ID; rmtinfo.RoomNumber = items.ROOM_NUMBER; rmt.RoomList.Add(rmtinfo); ri.RoomNoCnt++; } } else { rmt.RoomCnt = 0; rmt.RoomList = null; } ri.RoomTypelist.Add(rmt); } } else { dlog = new DbLog { location = "", Ip = "::1", Client = "", CreateTime = DateTime.Now, Uid = "宝镜", Type = 0, Content = "宝镜获取酒店" + HotelCode + "的房型和房间信息,成功" }; SqlSugarBase.Db.Insertable(dlog).ExecuteCommand(); ri.ErrMsg = "成功"; ri.ErrCode = 0; ri.HotelCode = HotelCode; ri.RoomTypeCnt = 0; ri.RoomNoCnt = 0; ri.RoomTypelist = null; } } else { dlog = new DbLog { location = "", Ip = "::1", Client = "", CreateTime = DateTime.Now, Uid = "宝镜", Type = 0, Content = "宝镜获取酒店" + HotelCode + "的房型和房间信息,未查询到指定code的酒店" }; SqlSugarBase.Db.Insertable(dlog).ExecuteCommand(); ri.ErrMsg = "未查询到指定code的酒店"; ri.ErrCode = 4040; ri.HotelCode = HotelCode; ri.RoomTypeCnt = 0; ri.RoomNoCnt = 0; ri.RoomTypelist = null; } } catch (Exception ex) { DbLog dlog = new DbLog { location = "", Ip = "::1", Client = "", CreateTime = DateTime.Now, Uid = "宝镜", Type = 0, Content = "宝镜获取酒店" + HotelCode + "的房型和房间信息,服务器繁忙,请稍后再查询" }; SqlSugarBase.Db.Insertable(dlog).ExecuteCommand(); ri.ErrMsg = "服务器繁忙,请稍后再查询"; ri.ErrCode = 5050; ri.HotelCode = HotelCode; ri.RoomTypeCnt = 0; ri.RoomNoCnt = 0; ri.RoomTypelist = null; LogHelp.WriteExceptionLog(ex); } //房型集合 return Json(ri, JsonRequestBehavior.AllowGet); } } public class ReturnInfo { public ReturnInfo() { RoomTypelist = new List(); } public int ErrCode { get; set; } public string ErrMsg { get; set; } public string HotelCode { get; set; } public string HotelNane { get; set; } public int RoomTypeCnt { get; set; } public int RoomNoCnt { get; set; } public List RoomTypelist { get; set; } } public class RoomTypeAllinfo { public RoomTypeAllinfo() { RoomList = new List(); } public string RoomTypeName { get; set; } public int RoomTypeID { get; set; } public int RoomCnt { get; set; } public List RoomList { get; set; } } public class RoomAllInfo { public int RoomNoID { get; set; } public string RoomNumber { get; set; } } }