Files
Web_AuthorityManagement_Mvc…/UI/Controllers/OtherApiController.cs

546 lines
22 KiB
C#
Raw Normal View History

2025-11-20 09:50:21 +08:00
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)
{
2025-12-22 17:47:19 +08:00
StackChangeRedisHelper.StringSet(token, new UserInfo() { Pwd = Pwd, Uid = Uid }, TimeSpan.FromMinutes(20));
2025-11-20 09:50:21 +08:00
}
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
{
2025-12-22 17:47:19 +08:00
var userinfo = StackChangeRedisHelper.StringGet<UserInfo>(Token);
2025-11-20 09:50:21 +08:00
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("-", "");
2025-12-22 17:47:19 +08:00
StackChangeRedisHelper.StringSet(token, userinfo);
2025-11-20 09:50:21 +08:00
resdata.Data = new { Token = token };
resdata.Status = 200;
}
2025-12-22 17:47:19 +08:00
StackChangeRedisHelper.StringSet(Token, userinfo, TimeSpan.FromSeconds(10));
2025-11-20 09:50:21 +08:00
}
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;
2025-12-22 17:47:19 +08:00
var userinfo = StackChangeRedisHelper.StringGet<UserInfo>(Token);
StackChangeRedisHelper.RemoveKey(Token);
2025-11-20 09:50:21 +08:00
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 };
2025-12-22 17:47:19 +08:00
var userinfo = StackChangeRedisHelper.StringGet<UserInfo>(Token);
2025-11-20 09:50:21 +08:00
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; }
}
}