Files
2025-11-20 09:51:24 +08:00

260 lines
11 KiB
C#

using Models;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Models.ModelItems;
using Services.Tool;
using static Services.Tool.HttpRequestHelp;
using SqlSugar;
using UI.Lib;
namespace Services.Manager
{
public class FaceServer
{
public static List<Hosts> CheckfaceSNHosts(string faceSN)
{
var RES = CheckfaceSN(faceSN);
List<Hosts> RESDATA = new List<Hosts>();
List<Hosts> HOS = new List<Hosts>();
if (RES == null)
{
return null;
}
else
{
foreach (var item in RES)
{
int HOTELID = 0;
int RoomId = 0;
if (!int.TryParse(item.HotelCode, out HOTELID))
{
HOTELID = 0;
};
RoomId = int.Parse(item.RoomId == null ? 0.ToString() : item.RoomId.ToString());
// 已经分配酒店
if (HOTELID > 0 )
{
//未分配房间
if (RoomId == 0)
{
RESDATA.Add(new Hosts { Id = RoomId,HotelID = HOTELID,HotelName = Cache.CacheHelp.cacheHotels.Single(x=> x.Id == HOTELID ).Name,RoomNumber = "暂无绑定房间" });
}
else
{
var TEMP = HOS.FirstOrDefault(X => X.Id == RoomId);
if (TEMP == null)
{
HOS.AddRange(HttpRequestHelp.GetHosts(int.Parse(item.HotelCode)));
var str = JsonConvert.SerializeObject(HOS.Select(x=>x.Id));
TEMP = HOS.FirstOrDefault(X => X.Id == RoomId);
}
if (TEMP != null)
RESDATA.Add(TEMP);
else
{
RESDATA.Add(new Hosts { Id = RoomId, HotelID = HOTELID, HotelName = Cache.CacheHelp.cacheHotels.Single(x => x.Id == HOTELID).Name, RoomNumber = "绑定房间已经被删除" });
// 绑定的房间被删除了
//throw new Exception("人脸机绑定的房间ID没有在房间列表找到 ~");
}
//return null;
}
}
}
}
return RESDATA;
}
/// <summary>
/// 检查人脸机是否已经被绑定的
/// </summary>
/// <param name="faceSN"></param>
/// <returns></returns>
public static List<DeviceManage> CheckfaceSN(string faceSN)
{
return Test_Feac.Db.Queryable<DeviceManage>().Where(X=>X.SerialNo == faceSN).ToList();
//($"select * from DeviceManage WHERE SerialNo = '{faceSN}'").ToList();
}
public static DeviceManage SelfaceSN_RoomId(int RoomId)
{
return Test_Feac.Db.Queryable<DeviceManage>().Where(X => X.RoomId == RoomId).First();
}
public static List<DeviceManage> SelfaceSN_HotelID(int HotelID)
{
return Test_Feac.Db.Queryable<DeviceManage>().Where(X => X.HotelCode == HotelID+"").ToList();
//using (AuthorityDB DB = new AuthorityDB())
//{
// SqlSugarBase.Db.Queryable<DeviceManage>()
// return DB.Database.SqlQuery<DeviceManage>($"select * from Face.DBO.DeviceManage WHERE HotelCode = @HotelID", new SqlParameter("@HotelID", HotelID)).ToList();
//}
}
/// <summary>
/// 根据房间号绑定人脸机 往人脸机表添加字段
/// RETURN
/// 0 成功
/// 1 已经注册已经绑定酒店
/// 2 已经注册更新失败
/// 3 未注册为分配酒店 添加注册 添加酒店是啊比
/// 4 未能预计的结果--
/// 5 数据不符合
/// 6 解绑失败
/// </summary>
/// <param name="faceSN"></param>
/// <param name="roomNumber"></param>
/// <param name="hotelID"></param>
/// <returns></returns>
public static int GetfaceSN(UserInfo userinfo = null, string faceSN = "", string roomNumber = "", int hotelID = 0, string faceAddress = "",string roomID = "", bool isjb = false)
{
int RES = 5;
// 如果传入 酒店房间号 就是绑定 判断是否已经绑定
if (!isjb)
{
var olddata = CheckfaceSN(faceSN);
//已经注册已经绑定酒店
if (olddata != null && olddata.Count > 0 && olddata[0].HotelCode != "0" && olddata[0].RoomId > 0)
{
//已经绑定 房间
RES = 1;
}
else
{
Test_Feac.Db.Ado.ExecuteCommand($"UPDATE DeviceManage SET bindingStatus = 0, RoomId = '0',faceAddress = @faceAddress, HotelCode = 0 WHERE RoomId = @roomID and HotelCode = @hotelID; ", new SugarParameter("@SerialNo", faceSN), new SugarParameter("@roomID", roomID), new SugarParameter("@hotelID", hotelID), new SugarParameter("@faceAddress", faceAddress));
//AuthorityDB DB = new AuthorityDB();
////如果之前有 SN 绑定房间 直接解绑
//DB.Database.ExecuteSqlCommand($"UPDATE Face.DBO.DeviceManage SET bindingStatus = 'false', RoomId = '0',faceAddress = @faceAddress, HotelCode = 0 WHERE RoomId = @roomID and HotelCode = @hotelID; ", new SqlParameter("@SerialNo", faceSN), new SqlParameter("@roomID", roomID), new SqlParameter("@hotelID", hotelID), new SqlParameter("@faceAddress", faceAddress));
//已经注册
if (olddata != null && olddata.Count > 0)
{
if (Test_Feac.Db.Ado.ExecuteCommand($"UPDATE DeviceManage SET bindingStatus = 1,RoomId = @roomID ,faceAddress = @faceAddress, HotelCode = @hotelID WHERE SerialNo = @SerialNo", new SugarParameter("@SerialNo", faceSN), new SugarParameter("@roomID", roomID), new SugarParameter("@hotelID", hotelID), new SugarParameter("@faceAddress", faceAddress)) > 0)
{
RES = 0;
}
else
{
RES = 2;
}
}
else
{
//未注册为分配酒店 添加注册 添加酒店 [Status], faceAddress, bindingStatus) values('6926895501368', 2, '968', 'false',
if (olddata == null || olddata.Count <= 0)
{
if (Test_Feac.Db.Ado.ExecuteCommand($"insert DeviceManage(SerialNo, HotelCode, RoomId,`Status`, faceAddress, bindingStatus) values(@SerialNo, @hotelID, @roomID,0, @faceAddress, 1); ", new SugarParameter("@SerialNo", faceSN), new SugarParameter("@roomID", roomID), new SugarParameter("@hotelID", hotelID), new SugarParameter("@faceAddress", faceAddress)) > 0)
{
RES = 0;
}
else
{
RES = 3;
}
}
else
{
LogHelp.WriteExceptionLog(new Exception("未能预计的结果--" + JsonConvert.SerializeObject(olddata)));
RES = 4;
}
}
};
}
else
{
//执行解绑
if (!string.IsNullOrEmpty(faceSN) && roomID != "0" && hotelID != 0)
{
//using (AuthorityDB DB = new AuthorityDB())
//{
if (Test_Feac.Db.Ado.ExecuteCommand($"UPDATE DeviceManage SET RoomId = '0' ,faceAddress = @faceAddress, HotelCode ='0' WHERE SerialNo = @SerialNo and HotelCode = @hotelID and RoomId = @roomID", new SugarParameter("@SerialNo", faceSN), new SugarParameter("@roomID", roomID), new SugarParameter("@hotelID", hotelID), new SugarParameter("@faceAddress", faceAddress)) >= 0)
{
RES = 0;
}
else
{
RES = 6;
}
//}
}
}
if (RES == 0)
{
List<MACLogs> logs = new List<MACLogs>();
var Ip = IPHelper.GetIP();
logs.Add(new MACLogs()
{
HotelID = hotelID,
MAC = faceSN,
roomNumber = roomNumber,
userid = userinfo.Id,
roomID = roomID,
AppType = 1,
type = isjb? 1 : 0
});
Task.Run(() =>
{
try
{
if (faceAddress == null)
{
Data locs = HttpRequestHelp.GetIp($@"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={Ip}&co=&resource_id=6006&oe=utf8");
if (locs != null && locs.status == 0)
{
if (locs.data.Count > 0)
{
faceAddress = locs.data[0].location;
}
}
}
}
catch (Exception ex)
{
LogHelp.WriteExceptionLog(ex, "日志错误");
}
finally
{
try
{
lock (HostsServer.LOCK)
{
var maclogs = SqlSugarBase.Db.Queryable<MACLogs>().Select(x => x.ActionId).ToList();
int ActionId = (maclogs.Count > 0 ? maclogs.Max() : 0) + 1;
foreach (var item in logs)
{
item.Ip = Ip;
item.location = faceAddress;
item.ActionId = ActionId;
item.createtime = DateTime.Now;
item.Status = 0;
SqlSugarBase.Db.Insertable(item).ExecuteCommand();
}
}
}
catch (Exception ex)
{
LogHelp.WriteExceptionLog(ex);
}
}
});
}
return RES;
}
}
}