Files
Web_AuthorityManagement_Mvc…/UI/Controllers/OtherApiController.cs
2025-11-20 09:51:24 +08:00

546 lines
22 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
/// <summary>
/// 登录
/// </summary>
/// <param name="Uid"></param>
/// <param name="Pwd"></param>
/// <param name="appid"></param>
/// <param name="Ip"></param>
/// <param name="moreLogin">是否多点登录</param>
/// <param name="UserAgent"></param>
/// <returns></returns>
[HttpPost]
[Route("OTApi/Login")]
public ActionResult Index(string Uid, string Pwd, int appid, string Ip = "", bool moreLogin = false, string UserAgent = "")
{
var resdata = new ReturnResult<dynamic>();
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)
{
RedisHelper.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<dynamic>();
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);
}
/// <summary>
/// 全局登录 退出登录 通过链接点入无法登录
/// </summary>
/// <param name="Token"></param>
/// <returns></returns>
[HttpPost]
[Route("OTApi/OutLogin")]
public ActionResult OutLogin(string Token, string Ip, bool IsNew = false)
{
var resdata = new ReturnResult<dynamic>();
try
{
var userinfo = RedisHelper.StringGet<UserInfo>(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("-", "");
RedisHelper.StringSet(token, userinfo);
resdata.Data = new { Token = token };
resdata.Status = 200;
}
RedisHelper.StringSet(Token, userinfo, TimeSpan.FromSeconds(10));
}
catch (Exception ex)
{
resdata.Data = "";
resdata.Status = 500;
resdata.Message = ex.Message;
LogHelp.WriteExceptionLog(ex);
}
return Json(resdata);
}
/// <summary>
/// 全局登录 登录 通过链接点入登录 返回用户信息
/// </summary>
/// <param name="Token"></param>
/// <returns></returns>
[HttpPost]
[Route("OTApi/MoreLogin")]
public ActionResult MoreLogin(string Token, int appid, string Ip = "", string UserAgent = "", bool IsData = true)
{
var resdata = new ReturnResult<dynamic>();
try
{
Logs.WriteTimingUDPLog($"传入token {Token}");
Ip = Ip == "" ? IPHelper.GetIP() : Ip;
var userinfo = RedisHelper.StringGet<UserInfo>(Token);
RedisHelper.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<dynamic>();
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 = RedisHelper.StringGet<UserInfo>(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
/// <summary>
/// 同步数据
/// </summary>
/// <param name="Pwd"></param>
/// <param name="stepid"></param>
/// <returns></returns>
[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<TBL_HOTEL_BASIC_INFO>().First(it => it.PROJECT_NUMBER == HotelCode && it.IsDel != 1);
if (hotel != null)
{
List<TBL_ROOM_TYPE_LIST> roomList = SqlSugarBase.RcuDb.Queryable<TBL_ROOM_TYPE_LIST>().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<TBL_ROOM_BASIC_INFO> roominfo = SqlSugarBase.RcuDb.Queryable<TBL_ROOM_BASIC_INFO>().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<RoomTypeAllinfo>();
}
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<RoomTypeAllinfo> RoomTypelist { get; set; }
}
public class RoomTypeAllinfo
{
public RoomTypeAllinfo()
{
RoomList = new List<RoomAllInfo>();
}
public string RoomTypeName { get; set; }
public int RoomTypeID { get; set; }
public int RoomCnt { get; set; }
public List<RoomAllInfo> RoomList { get; set; }
}
public class RoomAllInfo
{
public int RoomNoID { get; set; }
public string RoomNumber { get; set; }
}
}