2025-11-26 11:18:26 +08:00
using DB_Server ;
using Microsoft.AspNetCore.Mvc ;
using Microsoft.EntityFrameworkCore ;
using Models ;
using Models.Models ;
using Models.Models.LOGDB ;
using SERVER ;
using System ;
using System.Collections.Generic ;
using System.Configuration ;
using System.IO ;
using System.Linq ;
using System.Text ;
using WebUI.Model ;
using System.Security.Cryptography ;
2026-03-11 14:23:30 +08:00
using NLog ;
2025-11-26 11:18:26 +08:00
namespace WebUI.Controllers
{
/// <summary>
///
/// </summary>
public class publicApiController : Controller
{
private readonly HotelServiceContext _db ;
/// <summary>
/// 注入服务
/// </summary>
/// <param name="db"></param>
public publicApiController ( HotelServiceContext db )
{
_db = db ;
}
#region 通 过 mac地址获取房间类型 ( 暂 无 用 )
///// <summary>
///// 通过mac地址获取房间类型 (暂无用)
///// </summary>
///// <param name="mac"></param>
///// <returns></returns>
//[HttpPost]
//[Route("OTApi/GetRoomType")]
//public IActionResult GetRoomType(string mac)
//{
// try
// {
// if (!string.IsNullOrEmpty(mac))
// {
// var data = (from a in _db.TBL_ROOM_BASIC_INFOS join b in _db.TBL_ROOM_TYPE_LISTS on a.ROOM_TYPE_OLD_ID equals b.ROOM_TYPE_OLD_ID
// where a.MAC == mac
// select b).FirstOrDefault();
// return Json(new
// {
// data,
// messages = "请求成功",
// Status = 200
// });
// }
// else
// return Json(new
// {
// messages = "mac为空值",
// Status = 50
// });
// }
// catch (System.Exception ex)
// {
// return Json(new
// {
// messages = ex.Message,
// Status = 404
// });
// }
//}
#endregion
#region 同 步 API
/// <summary>
/// 同步API
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("OTApi/SyncData")]
2026-03-11 14:23:30 +08:00
public IActionResult SyncData ( string Pwd , int stepid = 0 )
2025-11-26 11:18:26 +08:00
{
if ( Pwd = = "fs%sd" )
{
var res = SYNC_DATA . SYNC_DATA_ALL ( stepid ) ;
string erMsg = GlobalSyncLockTest . recentErrMsg ;
//return Json(res);
if ( res )
{
return Json ( new
{
messages = "同步成功" ,
Status = true
} ) ;
}
else
{
return Json ( new
{
messages = erMsg ,
Status = false
} ) ;
}
2026-03-11 14:23:30 +08:00
2025-11-26 11:18:26 +08:00
}
else
return Json ( new
{
messages = "同步密码错误" ,
Status = false
} ) ;
}
#endregion
#region 通 过 房 间 类 型 id获取文件路径 ( 暂 不 使 用 )
/// <summary>
/// 通过房间类型id获取文件路径
/// </summary>
/// <param name="RoomTypeid"></param>
/// <returns></returns>
//public IActionResult GainFile(int RoomTypeid)
//{
// FTPOperation operation = new FTPOperation();
// string hexPath2 = "";//App_Cfg_For_L2升级文件tfp路径
// string hexPath4 = ""; //App_Cfg_For_L4升级文件tfp路径
// string BinPath = ""; //二进制配置文件tfp路径
// try
// {
// if (RoomTypeid != 0)
// {
// //获取对应的房间类型表的中的字段
// var data = (
// from a in _db.TBL_ROOM_TYPE_LISTS
// join b in _db.TBL_HOTEL_BASIC_INFOS on a.HOTEL_OLD_ID equals b.IDOLD
// join c in _db.TBL_HOTEL_GROUP_INFOS on b.HOTEL_OLD_GROUP equals c.HOTEL_GROUP_OLD_ID
// where a.ROOM_TYPE_OLD_ID == RoomTypeid
// select new
// {
// a.CONFIG_BIN,
// a.App_Cfg_For_L2,
// a.App_Cfg_For_L4,
// a.HOTEL_OLD_ID,
// c.HOTEL_GROUP_NAME,
// b.HOTEL_NAME_CN,
// b.PROJECT_NUMBER,
// a.Hex_Code_For_L2,
// a.Hex_Code_For_L4,
// a.APPTYPE,
// a.Hex_Code_For_L2_MD5,
// a.Hex_Code_For_L4_MD5,
// a.App_Cfg_For_L2_MD5,
// a.App_Cfg_For_L4_MD5
// }).FirstOrDefault();
// //获取对应的酒店编号,酒店名称,酒店分组
// //var hotelgroup = (from a in _db.TBL_HOTEL_BASIC_INFOS join b in _db.TBL_HOTEL_GROUP_INFOS on a.HOTEL_OLD_GROUP equals b.HOTEL_GROUP_OLD_ID where a.IDOLD == data.HOTEL_OLD_ID select new { b.HOTEL_GROUP_NAME ,a.PROJECT_NUMBER ,a.HOTEL_NAME_CN }).FirstOrDefault();
// if (data == null)
// {
// return Json(new
// {
// messages = "未找到数据",
// Status = 100
// });
// }
// if (data.CONFIG_BIN != null)
// {
// //BinPath = @"BLV_Studio\Data\Config\" + data.HOTEL_GROUP_NAME + @"\" + data.PROJECT_NUMBER + "-" + data.HOTEL_NAME_CN + @"\" + data.CONFIG_BIN;
// BinPath = "ftp://auth.blv-oa.com:50/BLV_Studio/Data/Config/"+ data.HOTEL_GROUP_NAME+ @"/" + data.PROJECT_NUMBER+"-"+data.HOTEL_NAME_CN+ @"/" + data.CONFIG_BIN;
// }
// if (data.APPTYPE != "")
// {
// if (data.APPTYPE == "App_Cfg")
// {
// if (data.App_Cfg_For_L2 != null)
// {
// //校验MD5是否给修改过
// if (MD5Verify.getMD5Hash(operation.GetFile(data.App_Cfg_For_L2)) == data.App_Cfg_For_L2_MD5)
// {
// hexPath2 = "ftp://auth.blv-oa.com:50/BLV_Studio/Data/Firmware/" + data.App_Cfg_For_L2;
// }
// else
// {
// hexPath2 = "文件修改过对不上MD5";
// }
// }
// if (data.App_Cfg_For_L4 != null)
// {
// if (MD5Verify.getMD5Hash(operation.GetFile(data.App_Cfg_For_L4)) == data.App_Cfg_For_L4_MD5)
// {
// hexPath4 = "ftp://auth.blv-oa.com:50/BLV_Studio/Data/Firmware/" + data.App_Cfg_For_L4;
// }
// else
// {
// hexPath4 = "文件修改过对不上MD5";
// }
// }
// }
// else if (data.APPTYPE == "Hex_Code")
// {
// if (data.Hex_Code_For_L2 != null)
// {
// if (MD5Verify.getMD5Hash(operation.GetFile(data.Hex_Code_For_L2)) == data.Hex_Code_For_L2_MD5)
// {
// hexPath2 = "ftp://auth.blv-oa.com:50/BLV_Studio/Data/Firmware/" + data.Hex_Code_For_L2;
// }
// else
// {
// hexPath2 = "文件修改过对不上MD5";
// }
// }
// if (data.Hex_Code_For_L4 != null)
// {
// if (MD5Verify.getMD5Hash(operation.GetFile(data.Hex_Code_For_L4)) == data.Hex_Code_For_L4_MD5)
// {
// hexPath4 = "ftp://auth.blv-oa.com:50/BLV_Studio/Data/Firmware/" + data.Hex_Code_For_L4;
// }
// else
// {
// hexPath4 = "文件修改过对不上MD5";
// }
// }
// }
// }
// var Filedata = new
// {
// BinPath = BinPath,
// hexPath2 = hexPath2,
// hexPath4 = hexPath4,
// };
// return Json(new
// {
// Filedata,
// messages = "请求成功",
// Status = 200
// });
// }
// else
// return Json(new
// {
// messages = "参数为空值",
// Status = 50
// });
// }
// catch (System.Exception ex)
// {
// return Json(new
// {
// messages = ex.Message,
// Status = 404
// });
// }
//}
#endregion
#region 获 取 对 应 的 文 件 下 发
2026-03-11 14:23:30 +08:00
2025-11-26 11:18:26 +08:00
[HttpPost]
[Route("OTApi/GainFiles")]
2026-03-11 14:23:30 +08:00
public IActionResult GainFile1s ( int RoomTypeid , int DataType )
2025-11-26 11:18:26 +08:00
{
FTPOperation operation = new FTPOperation ( ) ;
HexFile hexFile = new HexFile ( ) ;
// Luncher版本
string LuncherVer = "" ;
//数据主题
string data = "" ;
//状态
bool Status = false ;
//最后获取的文件
2026-03-11 14:23:30 +08:00
List < string > FileName = new List < string > ( ) ;
2025-11-26 11:18:26 +08:00
//错误信息
string MrrMsg = null ;
//机型
string ModelName = "" ;
//Hex起初地址
string HexStart = "" ;
//总数据
List < SendFileLuncher > datalist = new List < SendFileLuncher > ( ) ;
//房型名称
string RoomTypeName = "" ;
//项目id
2026-03-11 14:23:30 +08:00
int hotelId = 0 ;
2025-11-26 11:18:26 +08:00
//项目名称
string hotelName = "" ;
//文件数量
int FileCount = 0 ;
int coun = 0 ;
//写入日志
TBL_EQUIPMENTISSUELOG eqlog = new TBL_EQUIPMENTISSUELOG ( ) ;
try
{
if ( RoomTypeid ! = 0 )
{
//获取对应的房间类型表的中的字段
var selectdata = (
from a in _db . TBL_ROOM_TYPE_LISTS
join b in _db . TBL_HOTEL_BASIC_INFOS on a . HOTEL_OLD_ID equals b . IDOLD
join c in _db . TBL_HOTEL_GROUP_INFOS on b . HOTEL_OLD_GROUP equals c . HOTEL_GROUP_OLD_ID
where a . ROOM_TYPE_OLD_ID = = RoomTypeid
select new
{
a . ROOM_TYPE_NAME ,
a . CONFIG_BIN ,
a . App_Cfg_For_L2 ,
a . App_Cfg_For_L4 ,
a . HOTEL_OLD_ID ,
c . HOTEL_GROUP_NAME ,
b . HOTEL_NAME_CN ,
b . PROJECT_NUMBER ,
a . Hex_Code_For_L2 ,
a . Hex_Code_For_L4 ,
a . APPTYPE ,
a . Hex_Code_For_L2_MD5 ,
a . Hex_Code_For_L4_MD5 ,
a . App_Cfg_For_L2_MD5 ,
a . App_Cfg_For_L4_MD5 ,
a . CONFIG_BIN_MD5
} ) . FirstOrDefault ( ) ;
if ( selectdata ! = null )
{
//房型名称
RoomTypeName = selectdata . ROOM_TYPE_NAME ;
//项目名称
hotelName = selectdata . HOTEL_NAME_CN ;
//项目id
hotelId = selectdata . HOTEL_OLD_ID ;
//升级文件
if ( DataType = = 2 )
{
//发送类
SendFileLuncher send = new SendFileLuncher ( ) ;
if ( selectdata . CONFIG_BIN ! = null )
{
//校验MD5
2026-03-11 14:23:30 +08:00
var NNN = "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ;
logger . Error ( "开始校验配置文件MD5, 文件路径: " + NNN ) ;
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( NNN ) ) ) = = selectdata . CONFIG_BIN_MD5 )
2025-11-26 11:18:26 +08:00
{
var sety = operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ;
2026-03-11 14:23:30 +08:00
var btys = operation . ByteArrayToHexStr ( sety ) ;
var ssety = HexFile . Crc16 ( sety , 4 , sety . Length ) ;
byte [ ] suz = new byte [ 10000 ] ;
var ssety2 = HexFile . NetCRC16_Data ( sety , sety . Length , 4 ) ;
2025-11-26 11:18:26 +08:00
2026-03-11 14:23:30 +08:00
HexFile . StrToHex ( suz , sety , 100 ) ;
2025-11-26 11:18:26 +08:00
//找到文件头
if ( ( sety [ 0 ] = = 0xCC ) & & ( sety [ 1 ] = = 0xC0 ) )
{
int data_len = sety [ 3 ] ;
data_len < < = 8 ;
data_len | = sety [ 2 ] ;
if ( data_len < = 1024 ) //文件长度超出范围,不处理
{
byte [ ] vaslen = new byte [ data_len ] ;
int crc_val = 0 ;
int temp_crc = 0 ;
Array . Copy ( sety , vaslen , data_len ) ;
crc_val = sety [ 5 ] ;
crc_val < < = 8 ;
crc_val | = sety [ 4 ] ;
temp_crc = HexFile . NetCRC16_Data ( vaslen , data_len , 4 ) ;
if ( temp_crc = = crc_val )
{
/*数据校验成功*/
if ( vaslen [ 10 ] = = 0x01 )
{
var zunsons = vaslen . Skip ( 157 ) . Take ( 64 ) . ToArray ( ) ;
var seyu = operation . ByteArrayToHexStr ( zunsons ) ;
var setysssy = operation . UnHexs ( seyu ) ;
2026-03-11 14:23:30 +08:00
setysssy = setysssy . Replace ( "\0" , null ) ;
setysssy = setysssy . Replace ( "_" , "-" ) ;
2025-11-26 11:18:26 +08:00
ModelName = setysssy ;
data = Convert . ToBase64String ( sety ) ;
FileName . Add ( selectdata . CONFIG_BIN ) ;
send . md5 = GetMd5FromString ( data ) ;
send . Filenumber = + + coun ;
send . data = data ;
send . filename = selectdata . CONFIG_BIN ;
datalist . Add ( send ) ;
Status = true ;
}
}
else
{
MrrMsg = "文件数据CRC校验失败,请检查文件是否正确" ;
}
}
}
else
{
MrrMsg = "配置文件头错误,请检查文件是否正确" ;
}
}
else
{
MrrMsg = "固件( APP) 文件校验失败, 请检查网络或联系管理员" ;
}
}
else
{
MrrMsg = "“获取文件”失败所选房型没上传固件( APP) 文件, 请检查网络或联系管理员" ;
}
}
//配置文件
else if ( DataType = = 1 )
{
//判断是代码烧录还是工具烧录
if ( selectdata . APPTYPE ! = "" )
{
if ( selectdata . APPTYPE = = "App_Cfg" )
{
if ( string . IsNullOrEmpty ( selectdata . App_Cfg_For_L2 ) & & string . IsNullOrEmpty ( selectdata . App_Cfg_For_L4 ) )
{
MrrMsg = "“获取文件”失败所选房型没上传固件( APP) 或配置文件, 请检查网络或联系管理员" ;
}
if ( ! string . IsNullOrEmpty ( selectdata . App_Cfg_For_L2 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L2 ) ) ) = = selectdata . App_Cfg_For_L2_MD5 )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ) ) = = selectdata . CONFIG_BIN_MD5 )
{
var sety = operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ;
var btys = operation . ByteArrayToHexStr ( sety ) ;
var ssety = HexFile . Crc16 ( sety , 4 , sety . Length ) ;
byte [ ] suz = new byte [ 10000 ] ;
var ssety2 = HexFile . NetCRC16_Data ( sety , sety . Length , 4 ) ;
HexFile . StrToHex ( suz , sety , 100 ) ;
//找到文件头
if ( ( sety [ 0 ] = = 0xCC ) & & ( sety [ 1 ] = = 0xC0 ) )
{
int data_len = sety [ 3 ] ;
data_len < < = 8 ;
data_len | = sety [ 2 ] ;
if ( data_len < = 1024 ) //文件长度超出范围,不处理
{
byte [ ] vaslen = new byte [ data_len ] ;
int crc_val = 0 ;
int temp_crc = 0 ;
Array . Copy ( sety , vaslen , data_len ) ;
crc_val = sety [ 5 ] ;
crc_val < < = 8 ;
crc_val | = sety [ 4 ] ;
temp_crc = HexFile . NetCRC16_Data ( vaslen , data_len , 4 ) ;
if ( temp_crc = = crc_val )
{
/*数据校验成功*/
if ( vaslen [ 10 ] = = 0x01 )
{
var zunsons = vaslen . Skip ( 157 ) . Take ( 64 ) . ToArray ( ) ;
var seyu = operation . ByteArrayToHexStr ( zunsons ) ;
var setysssy = operation . UnHexs ( seyu ) ;
setysssy = setysssy . Replace ( "\0" , null ) ;
setysssy = setysssy . Replace ( "_" , "-" ) ;
ModelName = setysssy ;
}
}
else
{
MrrMsg = "文件数据CRC校验失败,请检查文件是否正确" ;
}
}
}
else
{
MrrMsg = "获取机型错误,请检查文件是否正确" ;
}
}
else
{
MrrMsg = "获取机型失败" ;
}
FileName . Add ( selectdata . App_Cfg_For_L2 ) ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L2 ) ) ) ) ;
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V02" ;
if ( selectdata . App_Cfg_For_L2 . Substring ( selectdata . App_Cfg_For_L2 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . App_Cfg_For_L2 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . App_Cfg_For_L2 ;
}
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
send . Filenumber = + + coun ;
send . md5 = GetMd5FromString ( data ) ;
send . data = data ;
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员 " ;
}
}
if ( ! string . IsNullOrEmpty ( selectdata . App_Cfg_For_L4 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L4 ) ) ) = = selectdata . App_Cfg_For_L4_MD5 )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ) ) = = selectdata . CONFIG_BIN_MD5 )
{
var sety = operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ;
var btys = operation . ByteArrayToHexStr ( sety ) ;
var ssety = HexFile . Crc16 ( sety , 4 , sety . Length ) ;
byte [ ] suz = new byte [ 10000 ] ;
var ssety2 = HexFile . NetCRC16_Data ( sety , sety . Length , 4 ) ;
HexFile . StrToHex ( suz , sety , 100 ) ;
//找到文件头
if ( ( sety [ 0 ] = = 0xCC ) & & ( sety [ 1 ] = = 0xC0 ) )
{
int data_len = sety [ 3 ] ;
data_len < < = 8 ;
data_len | = sety [ 2 ] ;
if ( data_len < = 1024 ) //文件长度超出范围,不处理
{
byte [ ] vaslen = new byte [ data_len ] ;
int crc_val = 0 ;
int temp_crc = 0 ;
Array . Copy ( sety , vaslen , data_len ) ;
crc_val = sety [ 5 ] ;
crc_val < < = 8 ;
crc_val | = sety [ 4 ] ;
temp_crc = HexFile . NetCRC16_Data ( vaslen , data_len , 4 ) ;
if ( temp_crc = = crc_val )
{
/*数据校验成功*/
if ( vaslen [ 10 ] = = 0x01 )
{
var zunsons = vaslen . Skip ( 157 ) . Take ( 64 ) . ToArray ( ) ;
var seyu = operation . ByteArrayToHexStr ( zunsons ) ;
var setysssy = operation . UnHexs ( seyu ) ;
setysssy = setysssy . Replace ( "\0" , null ) ;
setysssy = setysssy . Replace ( "_" , "-" ) ;
ModelName = setysssy ;
}
}
else
{
MrrMsg = "文件数据CRC校验失败,请检查文件是否正确" ;
}
}
}
else
{
MrrMsg = "获取机型错误,请检查文件是否正确" ;
}
}
else
{
MrrMsg = "获取机型失败" ;
}
FileName . Add ( selectdata . App_Cfg_For_L4 ) ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L4 ) ) ) ) ;
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V04" ;
if ( selectdata . App_Cfg_For_L4 . Substring ( selectdata . App_Cfg_For_L4 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . App_Cfg_For_L4 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . App_Cfg_For_L4 ;
}
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
send . Filenumber = + + coun ;
send . data = data ;
send . md5 = GetMd5FromString ( data ) ;
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员" ;
}
}
}
else if ( selectdata . APPTYPE = = "Hex_Code" )
{
if ( string . IsNullOrEmpty ( selectdata . Hex_Code_For_L2 ) & & string . IsNullOrEmpty ( selectdata . Hex_Code_For_L4 ) )
{
MrrMsg = "获取文件”失败所选房型没上传固件( APP) 或配置文件, 请检查网络或联系管理员" ;
}
else
{
if ( ! string . IsNullOrEmpty ( selectdata . Hex_Code_For_L2 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L2 ) ) ) = = selectdata . Hex_Code_For_L2_MD5 )
{
FileName . Add ( selectdata . Hex_Code_For_L2 ) ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L2 ) ) ) ) ;
ModelName = hexFile . GetHexInfo ( ) ;
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V02" ;
if ( selectdata . Hex_Code_For_L2 . Substring ( selectdata . Hex_Code_For_L2 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . Hex_Code_For_L2 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . Hex_Code_For_L2 ;
}
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
send . Filenumber = + + coun ;
send . data = data ;
send . md5 = GetMd5FromString ( data ) ;
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员" ;
}
}
if ( ! string . IsNullOrEmpty ( selectdata . Hex_Code_For_L4 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L4 ) ) ) = = selectdata . Hex_Code_For_L4_MD5 )
{
FileName . Add ( selectdata . Hex_Code_For_L4 ) ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L4 ) ) ) ) ;
ModelName = hexFile . GetHexInfo ( ) ;
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V04" ;
if ( selectdata . Hex_Code_For_L4 . Substring ( selectdata . Hex_Code_For_L4 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . Hex_Code_For_L4 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . Hex_Code_For_L4 ;
}
send . Filenumber = + + coun ;
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
send . data = data ;
send . md5 = GetMd5FromString ( data ) ;
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员" ;
}
}
}
}
}
else
{
MrrMsg = "无烧录模式," ;
}
}
FileCount = datalist . Count ;
string sum = "" ;
//写入日志
eqlog . CreationTime = DateTime . Now ;
eqlog . Succeed = Status ;
foreach ( var item in FileName )
{
2026-03-11 14:23:30 +08:00
sum + = item + "/" ;
2025-11-26 11:18:26 +08:00
}
eqlog . Content = "房间类型id是:" + RoomTypeid + ",升级类型是:" + DataType + ",luncher版本是:" + LuncherVer + ",升级文件名:" + sum + ",机型是:" + ModelName ;
_db . TBL_EQUIPMENTISSUELOGs . AddRange ( eqlog ) ;
_db . SaveChanges ( ) ;
}
else
{
return Json ( new
{
RoomTypeid ,
RoomTypeName ,
hotelId ,
hotelName ,
Status = false ,
ModelName ,
//FileName,
FileCount ,
datalist ,
MrrMsg = "未找到对应的房型,请检查网络或联系管理员"
} ) ;
}
}
//if (!string.IsNullOrEmpty(FileName))
//{
// if (FileName.Substring(FileName.Length - 4, 4) == ".hex")
// {
// FileName = FileName.Replace(".hex", ".bin");
// }
//}
}
2026-03-11 14:23:30 +08:00
catch ( Exception ex )
2025-11-26 11:18:26 +08:00
{
2026-03-11 14:23:30 +08:00
logger . Error ( ex . Message ) ;
logger . Error ( ex . StackTrace ) ;
2025-11-26 11:18:26 +08:00
return Json ( new
{
RoomTypeid ,
RoomTypeName ,
hotelId ,
hotelName ,
2026-03-11 14:23:30 +08:00
Status = false ,
2025-11-26 11:18:26 +08:00
ModelName ,
//FileName,
FileCount ,
datalist ,
MrrMsg = ex . Message
} ) ;
}
return Json ( new
{
RoomTypeid ,
RoomTypeName ,
hotelId ,
hotelName ,
Status ,
ModelName ,
//FileName,
FileCount ,
datalist ,
MrrMsg
} ) ;
}
2026-03-11 14:23:30 +08:00
public static Logger logger = LogManager . GetCurrentClassLogger ( ) ;
2025-11-26 11:18:26 +08:00
/// <summary>
/// 获取文件名
/// </summary>
/// <param name="RoomTypeid"></param>
/// <param name="DataType"></param>
/// <returns></returns>
[HttpPost]
[Route("OTApi/GainFileName")]
2026-03-11 14:23:30 +08:00
public IActionResult GainFileName ( int RoomTypeid , int DataType )
2025-11-26 11:18:26 +08:00
{
2026-03-11 15:33:44 +08:00
logger . Error ( "RoomTypeID:" + RoomTypeid . ToString ( ) + " DataType:" + DataType . ToString ( ) ) ;
2025-11-26 11:18:26 +08:00
FTPOperation operation = new FTPOperation ( ) ;
HexFile hexFile = new HexFile ( ) ;
// Luncher版本
string LuncherVer = "" ;
//数据主题
string data = "" ;
//状态
bool Status = false ;
//最后获取的文件
2026-03-11 14:23:30 +08:00
List < string > FileName = new List < string > ( ) ;
2025-11-26 11:18:26 +08:00
//错误信息
string MrrMsg = null ;
//机型
string ModelName = "" ;
//Hex起初地址
string HexStart = "" ;
//总数据
List < SendFileLuncher > datalist = new List < SendFileLuncher > ( ) ;
//房型名称
string RoomTypeName = "" ;
//项目id
2026-03-11 14:23:30 +08:00
int hotelId = 0 ;
2025-11-26 11:18:26 +08:00
//项目名称
string hotelName = "" ;
//文件数量
int FileCount = 0 ;
int coun = 0 ;
//写入日志
TBL_EQUIPMENTISSUELOG eqlog = new TBL_EQUIPMENTISSUELOG ( ) ;
try
{
if ( RoomTypeid ! = 0 )
{
//获取对应的房间类型表的中的字段
var selectdata = (
from a in _db . TBL_ROOM_TYPE_LISTS
join b in _db . TBL_HOTEL_BASIC_INFOS on a . HOTEL_OLD_ID equals b . IDOLD
join c in _db . TBL_HOTEL_GROUP_INFOS on b . HOTEL_OLD_GROUP equals c . HOTEL_GROUP_OLD_ID
where a . ROOM_TYPE_OLD_ID = = RoomTypeid
select new
{
a . ROOM_TYPE_NAME ,
a . CONFIG_BIN ,
a . App_Cfg_For_L2 ,
a . App_Cfg_For_L4 ,
a . HOTEL_OLD_ID ,
c . HOTEL_GROUP_NAME ,
b . HOTEL_NAME_CN ,
b . PROJECT_NUMBER ,
a . Hex_Code_For_L2 ,
a . Hex_Code_For_L4 ,
a . APPTYPE ,
a . Hex_Code_For_L2_MD5 ,
a . Hex_Code_For_L4_MD5 ,
a . App_Cfg_For_L2_MD5 ,
a . App_Cfg_For_L4_MD5 ,
a . CONFIG_BIN_MD5
} ) . FirstOrDefault ( ) ;
if ( selectdata ! = null )
{
//房型名称
RoomTypeName = selectdata . ROOM_TYPE_NAME ;
//项目名称
hotelName = selectdata . HOTEL_NAME_CN ;
//项目id
hotelId = selectdata . HOTEL_OLD_ID ;
//升级文件
if ( DataType = = 2 )
{
//发送类
SendFileLuncher send = new SendFileLuncher ( ) ;
if ( selectdata . CONFIG_BIN ! = null )
{
//校验MD5
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ) ) = = selectdata . CONFIG_BIN_MD5 )
{
var sety = operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ;
2026-03-11 14:23:30 +08:00
var btys = operation . ByteArrayToHexStr ( sety ) ;
var ssety = HexFile . Crc16 ( sety , 4 , sety . Length ) ;
byte [ ] suz = new byte [ 10000 ] ;
var ssety2 = HexFile . NetCRC16_Data ( sety , sety . Length , 4 ) ;
2025-11-26 11:18:26 +08:00
2026-03-11 14:23:30 +08:00
HexFile . StrToHex ( suz , sety , 100 ) ;
2025-11-26 11:18:26 +08:00
//找到文件头
if ( ( sety [ 0 ] = = 0xCC ) & & ( sety [ 1 ] = = 0xC0 ) )
{
int data_len = sety [ 3 ] ;
data_len < < = 8 ;
data_len | = sety [ 2 ] ;
if ( data_len < = 1024 ) //文件长度超出范围,不处理
{
byte [ ] vaslen = new byte [ data_len ] ;
int crc_val = 0 ;
int temp_crc = 0 ;
Array . Copy ( sety , vaslen , data_len ) ;
crc_val = sety [ 5 ] ;
crc_val < < = 8 ;
crc_val | = sety [ 4 ] ;
temp_crc = HexFile . NetCRC16_Data ( vaslen , data_len , 4 ) ;
if ( temp_crc = = crc_val )
{
/*数据校验成功*/
if ( vaslen [ 10 ] = = 0x01 )
{
var zunsons = vaslen . Skip ( 157 ) . Take ( 64 ) . ToArray ( ) ;
var seyu = operation . ByteArrayToHexStr ( zunsons ) ;
var setysssy = operation . UnHexs ( seyu ) ;
2026-03-11 14:23:30 +08:00
setysssy = setysssy . Replace ( "\0" , null ) ;
setysssy = setysssy . Replace ( "_" , "-" ) ;
2025-11-26 11:18:26 +08:00
ModelName = setysssy ;
//data = Convert.ToBase64String(sety);
FileName . Add ( selectdata . CONFIG_BIN ) ;
//send.md5 = GetMd5FromString(data);
send . Filenumber = + + coun ;
send . filename = selectdata . CONFIG_BIN ;
datalist . Add ( send ) ;
Status = true ;
}
}
else
{
MrrMsg = "文件数据CRC校验失败,请检查文件是否正确" ;
}
}
}
else
{
MrrMsg = "配置文件头错误,请检查文件是否正确" ;
}
}
else
{
MrrMsg = "固件( APP) 文件校验失败, 请检查网络或联系管理员" ;
}
}
else
{
MrrMsg = "“获取文件”失败所选房型没上传固件( APP) 文件, 请检查网络或联系管理员" ;
}
}
//配置文件
else if ( DataType = = 1 )
{
//判断是代码烧录还是工具烧录
if ( selectdata . APPTYPE ! = "" )
{
if ( selectdata . APPTYPE = = "App_Cfg" )
{
if ( string . IsNullOrEmpty ( selectdata . App_Cfg_For_L2 ) & & string . IsNullOrEmpty ( selectdata . App_Cfg_For_L4 ) )
{
MrrMsg = "“获取文件”失败所选房型没上传固件( APP) 或配置文件, 请检查网络或联系管理员" ;
}
if ( ! string . IsNullOrEmpty ( selectdata . App_Cfg_For_L2 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L2 ) ) ) = = selectdata . App_Cfg_For_L2_MD5 )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ) ) = = selectdata . CONFIG_BIN_MD5 )
{
var sety = operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ;
var btys = operation . ByteArrayToHexStr ( sety ) ;
var ssety = HexFile . Crc16 ( sety , 4 , sety . Length ) ;
byte [ ] suz = new byte [ 10000 ] ;
var ssety2 = HexFile . NetCRC16_Data ( sety , sety . Length , 4 ) ;
HexFile . StrToHex ( suz , sety , 100 ) ;
//找到文件头
if ( ( sety [ 0 ] = = 0xCC ) & & ( sety [ 1 ] = = 0xC0 ) )
{
int data_len = sety [ 3 ] ;
data_len < < = 8 ;
data_len | = sety [ 2 ] ;
if ( data_len < = 1024 ) //文件长度超出范围,不处理
{
byte [ ] vaslen = new byte [ data_len ] ;
int crc_val = 0 ;
int temp_crc = 0 ;
Array . Copy ( sety , vaslen , data_len ) ;
crc_val = sety [ 5 ] ;
crc_val < < = 8 ;
crc_val | = sety [ 4 ] ;
temp_crc = HexFile . NetCRC16_Data ( vaslen , data_len , 4 ) ;
if ( temp_crc = = crc_val )
{
/*数据校验成功*/
if ( vaslen [ 10 ] = = 0x01 )
{
var zunsons = vaslen . Skip ( 157 ) . Take ( 64 ) . ToArray ( ) ;
var seyu = operation . ByteArrayToHexStr ( zunsons ) ;
var setysssy = operation . UnHexs ( seyu ) ;
setysssy = setysssy . Replace ( "\0" , null ) ;
setysssy = setysssy . Replace ( "_" , "-" ) ;
ModelName = setysssy ;
}
}
else
{
MrrMsg = "文件数据CRC校验失败,请检查文件是否正确" ;
}
}
}
else
{
MrrMsg = "获取机型错误,请检查文件是否正确" ;
}
}
else
{
MrrMsg = "获取机型失败" ;
}
FileName . Add ( selectdata . App_Cfg_For_L2 ) ;
//data = Convert.ToBase64String(hexFile.DealHexFile(operation.BytesToStream(operation.GetFile("Firmware/" + selectdata.App_Cfg_For_L2))));
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V02" ;
if ( selectdata . App_Cfg_For_L2 . Substring ( selectdata . App_Cfg_For_L2 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . App_Cfg_For_L2 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . App_Cfg_For_L2 ;
}
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
send . Filenumber = + + coun ;
//send.md5 = GetMd5FromString(data);
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员 " ;
}
}
if ( ! string . IsNullOrEmpty ( selectdata . App_Cfg_For_L4 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L4 ) ) ) = = selectdata . App_Cfg_For_L4_MD5 )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ) ) = = selectdata . CONFIG_BIN_MD5 )
{
var sety = operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ;
var btys = operation . ByteArrayToHexStr ( sety ) ;
var ssety = HexFile . Crc16 ( sety , 4 , sety . Length ) ;
byte [ ] suz = new byte [ 10000 ] ;
var ssety2 = HexFile . NetCRC16_Data ( sety , sety . Length , 4 ) ;
HexFile . StrToHex ( suz , sety , 100 ) ;
//找到文件头
if ( ( sety [ 0 ] = = 0xCC ) & & ( sety [ 1 ] = = 0xC0 ) )
{
int data_len = sety [ 3 ] ;
data_len < < = 8 ;
data_len | = sety [ 2 ] ;
if ( data_len < = 1024 ) //文件长度超出范围,不处理
{
byte [ ] vaslen = new byte [ data_len ] ;
int crc_val = 0 ;
int temp_crc = 0 ;
Array . Copy ( sety , vaslen , data_len ) ;
crc_val = sety [ 5 ] ;
crc_val < < = 8 ;
crc_val | = sety [ 4 ] ;
temp_crc = HexFile . NetCRC16_Data ( vaslen , data_len , 4 ) ;
if ( temp_crc = = crc_val )
{
/*数据校验成功*/
if ( vaslen [ 10 ] = = 0x01 )
{
var zunsons = vaslen . Skip ( 157 ) . Take ( 64 ) . ToArray ( ) ;
var seyu = operation . ByteArrayToHexStr ( zunsons ) ;
var setysssy = operation . UnHexs ( seyu ) ;
setysssy = setysssy . Replace ( "\0" , null ) ;
setysssy = setysssy . Replace ( "_" , "-" ) ;
ModelName = setysssy ;
}
}
else
{
MrrMsg = "文件数据CRC校验失败,请检查文件是否正确" ;
}
}
}
else
{
MrrMsg = "获取机型错误,请检查文件是否正确" ;
}
}
else
{
MrrMsg = "获取机型失败" ;
}
FileName . Add ( selectdata . App_Cfg_For_L4 ) ;
//data = Convert.ToBase64String(hexFile.DealHexFile(operation.BytesToStream(operation.GetFile("Firmware/" + selectdata.App_Cfg_For_L4))));
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V04" ;
if ( selectdata . App_Cfg_For_L4 . Substring ( selectdata . App_Cfg_For_L4 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . App_Cfg_For_L4 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . App_Cfg_For_L4 ;
}
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
send . Filenumber = + + coun ;
//send.md5 = GetMd5FromString(data);
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员" ;
}
}
}
else if ( selectdata . APPTYPE = = "Hex_Code" )
{
if ( string . IsNullOrEmpty ( selectdata . Hex_Code_For_L2 ) & & string . IsNullOrEmpty ( selectdata . Hex_Code_For_L4 ) )
{
MrrMsg = "获取文件”失败所选房型没上传固件( APP) 或配置文件, 请检查网络或联系管理员" ;
}
else
{
if ( ! string . IsNullOrEmpty ( selectdata . Hex_Code_For_L2 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L2 ) ) ) = = selectdata . Hex_Code_For_L2_MD5 )
{
FileName . Add ( selectdata . Hex_Code_For_L2 ) ;
//data = Convert.ToBase64String(hexFile.DealHexFile(operation.BytesToStream(operation.GetFile("Firmware/" + selectdata.Hex_Code_For_L2))));
ModelName = hexFile . GetHexInfo ( ) ;
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V02" ;
if ( selectdata . Hex_Code_For_L2 . Substring ( selectdata . Hex_Code_For_L2 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . Hex_Code_For_L2 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . Hex_Code_For_L2 ;
}
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
send . Filenumber = + + coun ;
//send.md5 = GetMd5FromString(data);
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员" ;
}
}
if ( ! string . IsNullOrEmpty ( selectdata . Hex_Code_For_L4 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L4 ) ) ) = = selectdata . Hex_Code_For_L4_MD5 )
{
FileName . Add ( selectdata . Hex_Code_For_L4 ) ;
//data = Convert.ToBase64String(hexFile.DealHexFile(operation.BytesToStream(operation.GetFile("Firmware/" + selectdata.Hex_Code_For_L4))));
ModelName = hexFile . GetHexInfo ( ) ;
SendFileLuncher send = new SendFileLuncher ( ) ;
send . LuncherVer = "Launcher_C1F_V04" ;
if ( selectdata . Hex_Code_For_L4 . Substring ( selectdata . Hex_Code_For_L4 . Length - 4 , 4 ) = = ".hex" )
{
send . filename = selectdata . Hex_Code_For_L4 . Replace ( ".hex" , ".bin" ) ;
}
else
{
send . filename = selectdata . Hex_Code_For_L4 ;
}
send . Filenumber = + + coun ;
send . HexStart = hexFile . Get_HexStart_C1 ( ) ;
//send.md5 = GetMd5FromString(data);
datalist . Add ( send ) ;
Status = true ;
}
else
{
MrrMsg = "配置文件校验失败,请检查网络或联系管理员" ;
}
}
}
}
}
else
{
MrrMsg = "无烧录模式," ;
}
}
FileCount = datalist . Count ;
string sum = "" ;
//写入日志
eqlog . CreationTime = DateTime . Now ;
eqlog . Succeed = Status ;
foreach ( var item in FileName )
{
2026-03-11 14:23:30 +08:00
sum + = item + "/" ;
2025-11-26 11:18:26 +08:00
}
eqlog . Content = "房间类型id是:" + RoomTypeid + ",升级类型是:" + DataType + ",luncher版本是:" + LuncherVer + ",升级文件名:" + sum + ",机型是:" + ModelName ;
_db . TBL_EQUIPMENTISSUELOGs . AddRange ( eqlog ) ;
_db . SaveChanges ( ) ;
}
else
{
return Json ( new
{
RoomTypeid ,
RoomTypeName ,
hotelId ,
hotelName ,
Status = false ,
ModelName ,
FileCount ,
datalist ,
MrrMsg = "未找到对应的房型,请检查网络或联系管理员"
} ) ;
}
}
}
2026-03-11 14:23:30 +08:00
catch ( Exception ex )
2025-11-26 11:18:26 +08:00
{
2026-03-11 14:23:30 +08:00
2025-11-26 11:18:26 +08:00
return Json ( new
{
RoomTypeid ,
RoomTypeName ,
hotelId ,
hotelName ,
2026-03-11 14:23:30 +08:00
Status = false ,
2025-11-26 11:18:26 +08:00
ModelName ,
FileCount ,
datalist ,
MrrMsg = ex . Message
} ) ;
}
return Json ( new
{
RoomTypeid ,
RoomTypeName ,
hotelId ,
hotelName ,
Status ,
ModelName ,
FileCount ,
datalist ,
MrrMsg
} ) ;
}
#endregion
/// <summary>
/// 生成字符串的MD5码
/// </summary>
/// <param name="sInput"></param>
/// <returns></returns>
public static string GetMd5FromString ( string sInput )
{
var lstData = Encoding . GetEncoding ( "utf-8" ) . GetBytes ( sInput ) ;
var lstHash = new MD5CryptoServiceProvider ( ) . ComputeHash ( lstData ) ;
var result = new StringBuilder ( 32 ) ;
for ( int i = 0 ; i < lstHash . Length ; i + + )
{
2026-03-11 14:23:30 +08:00
result . Append ( lstHash [ i ] . ToString ( "x2" ) . ToUpper ( ) ) ;
2025-11-26 11:18:26 +08:00
}
return result . ToString ( ) ;
}
#region 获 取 对 应 的 文 件 下 发
[HttpPost]
[Route("OTApi/GainFile")]
public IActionResult GainFile1 ( int RoomTypeid , int DataType , string LuncherVer )
{
if ( string . IsNullOrEmpty ( LuncherVer ) )
{
LuncherVer = "L02" ;
}
FTPOperation operation = new FTPOperation ( ) ;
HexFile hexFile = new HexFile ( ) ;
//数据主题
string data = "" ;
//状态
bool Status = false ;
//最后获取的文件
string FileName = "" ;
//错误信息
string MrrMsg = null ;
//机型
string ModelName = "" ;
//Hex起初地址
string HexStart = "" ;
//
//写入日志
TBL_EQUIPMENTISSUELOG eqlog = new TBL_EQUIPMENTISSUELOG ( ) ;
try
{
if ( RoomTypeid ! = 0 )
{
//获取对应的房间类型表的中的字段
var selectdata = (
from a in _db . TBL_ROOM_TYPE_LISTS
join b in _db . TBL_HOTEL_BASIC_INFOS on a . HOTEL_OLD_ID equals b . IDOLD
join c in _db . TBL_HOTEL_GROUP_INFOS on b . HOTEL_OLD_GROUP equals c . HOTEL_GROUP_OLD_ID
where a . ROOM_TYPE_OLD_ID = = RoomTypeid
select new
{
a . CONFIG_BIN ,
a . App_Cfg_For_L2 ,
a . App_Cfg_For_L4 ,
a . HOTEL_OLD_ID ,
c . HOTEL_GROUP_NAME ,
b . HOTEL_NAME_CN ,
b . PROJECT_NUMBER ,
a . Hex_Code_For_L2 ,
a . Hex_Code_For_L4 ,
a . APPTYPE ,
a . Hex_Code_For_L2_MD5 ,
a . Hex_Code_For_L4_MD5 ,
a . App_Cfg_For_L2_MD5 ,
a . App_Cfg_For_L4_MD5 ,
a . CONFIG_BIN_MD5
} ) . FirstOrDefault ( ) ;
//升级文件
if ( DataType = = 2 )
{
if ( selectdata . CONFIG_BIN ! = null )
{
//校验MD5
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ) ) = = selectdata . CONFIG_BIN_MD5 )
{
var sety = operation . GetFile ( "Config/" + selectdata . HOTEL_GROUP_NAME + @"/" + selectdata . PROJECT_NUMBER + "-" + selectdata . HOTEL_NAME_CN + @"/" + selectdata . CONFIG_BIN ) ;
data = Convert . ToBase64String ( sety ) ;
FileName = selectdata . CONFIG_BIN ;
Status = true ;
}
else
{
MrrMsg = "配置dat文件校验失败" ;
}
}
else
{
MrrMsg = "无配置文件" ;
}
}
//配置文件
else if ( DataType = = 1 )
{
string lum ;
if ( ! string . IsNullOrEmpty ( LuncherVer ) )
{
lum = LuncherVer . Substring ( 0 , 1 ) + LuncherVer . Substring ( LuncherVer . Length - 2 , 2 ) ;
if ( lum = = "L02" | | lum = = "L04" )
{
//判断是代码烧录还是工具烧录
if ( selectdata . APPTYPE ! = "" )
{
if ( selectdata . APPTYPE = = "App_Cfg" )
{
switch ( lum )
{
case "L02" :
if ( ! string . IsNullOrEmpty ( selectdata . App_Cfg_For_L2 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L2 ) ) ) = = selectdata . App_Cfg_For_L2_MD5 )
{
FileName = selectdata . App_Cfg_For_L2 ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L2 ) ) ) ) ;
ModelName = hexFile . GetHexInfo ( ) ;
HexStart = hexFile . Get_HexStart_C1 ( ) ;
Status = true ;
}
else
{
MrrMsg = "配置App_Cfg_L2文件校验失败" ;
}
}
else
{
MrrMsg = "无App_Cfg_L2文件" ;
}
break ;
case "L04" :
if ( ! string . IsNullOrEmpty ( selectdata . App_Cfg_For_L4 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L4 ) ) ) = = selectdata . App_Cfg_For_L4_MD5 )
{
FileName = selectdata . App_Cfg_For_L4 ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . App_Cfg_For_L4 ) ) ) ) ;
ModelName = hexFile . GetHexInfo ( ) ;
HexStart = hexFile . Get_HexStart_C1 ( ) ;
Status = true ;
}
else
{
MrrMsg = "配置App_Cfg_L4文件校验失败" ;
}
}
else
{
MrrMsg = "无App_Cfg_L4文件" ;
}
break ;
}
}
else if ( selectdata . APPTYPE = = "Hex_Code" )
{
switch ( lum )
{
case "L02" :
if ( ! string . IsNullOrEmpty ( selectdata . Hex_Code_For_L2 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L2 ) ) ) = = selectdata . Hex_Code_For_L2_MD5 )
{
FileName = selectdata . Hex_Code_For_L2 ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L2 ) ) ) ) ;
ModelName = hexFile . GetHexInfo ( ) ;
HexStart = hexFile . Get_HexStart_C1 ( ) ;
Status = true ;
}
else
{
MrrMsg = "配置Hex_Code_For_L2文件校验失败" ;
}
}
else
{
MrrMsg = "无Hex_Code_For_L2文件" ;
}
break ;
case "L04" :
if ( ! string . IsNullOrEmpty ( selectdata . Hex_Code_For_L4 ) )
{
if ( MD5Verify . getMD5Hash ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L4 ) ) ) = = selectdata . Hex_Code_For_L4_MD5 )
{
FileName = selectdata . Hex_Code_For_L4 ;
data = Convert . ToBase64String ( hexFile . DealHexFile ( operation . BytesToStream ( operation . GetFile ( "Firmware/" + selectdata . Hex_Code_For_L4 ) ) ) ) ;
ModelName = hexFile . GetHexInfo ( ) ;
HexStart = hexFile . Get_HexStart_C1 ( ) ;
Status = true ;
}
else
{
MrrMsg = "配置Hex_Code_For_L4文件校验失败" ;
}
}
else
{
MrrMsg = "无Hex_Code_For_L4文件" ;
}
break ;
}
}
}
else
{
MrrMsg = "无烧录模式" ;
}
}
else
{
MrrMsg = "luncher未找到对应的升级文件" ;
}
}
}
}
//写入日志
eqlog . CreationTime = DateTime . Now ;
eqlog . Succeed = Status ;
eqlog . Content = "房间类型id是:" + RoomTypeid + ",升级类型是:" + DataType + ",luncher版本是:" + LuncherVer + ",升级文件名:" + FileName + ",机型是:" + ModelName ;
_db . TBL_EQUIPMENTISSUELOGs . AddRange ( eqlog ) ;
_db . SaveChanges ( ) ;
if ( ! string . IsNullOrEmpty ( FileName ) )
{
if ( FileName . Substring ( FileName . Length - 4 , 4 ) = = ".hex" )
{
FileName = FileName . Replace ( ".hex" , ".bin" ) ;
}
}
}
catch ( Exception ex )
{
if ( ! string . IsNullOrEmpty ( FileName ) )
{
if ( FileName . Substring ( FileName . Length - 4 , 4 ) = = ".hex" )
{
FileName = FileName . Replace ( ".hex" , ".bin" ) ;
}
}
return Json ( new
{
data ,
Status = false ,
ModelName ,
HexStart ,
FileName ,
MrrMsg = ex . Message
} ) ;
}
return Json ( new
{
data ,
Status ,
ModelName ,
HexStart ,
FileName ,
MrrMsg
} ) ;
}
#endregion
#region 同 步 选 住 的 数 据
/// <summary>
/// 同步选住的数据
/// </summary>
/// <returns></returns>
///
[HttpPost]
[Route("OTApi/RoomChange")]
2026-03-11 14:23:30 +08:00
public IActionResult RoomChange ( string projectCode , string roomNumber , string roomLayout , string projectName )
2025-11-26 11:18:26 +08:00
{
var db = new DbHelperSQL ( DbHelperSQL . DBSel . BLV_RCU_DB ) ;
2026-03-11 14:23:30 +08:00
if ( ! string . IsNullOrEmpty ( projectCode ) & & ! string . IsNullOrEmpty ( roomNumber ) & & ! string . IsNullOrEmpty ( roomLayout ) & & ! string . IsNullOrEmpty ( projectName ) )
2025-11-26 11:18:26 +08:00
{
var selectdata = (
2026-03-11 14:23:30 +08:00
from a in _db . TBL_HOTEL_BASIC_INFOS
where a . HOTEL_NAME_CN = = projectName
2025-11-26 11:18:26 +08:00
select new
{
2026-03-11 14:23:30 +08:00
a . HOTEL_ID
2025-11-26 11:18:26 +08:00
} ) . FirstOrDefault ( ) ;
var roomdata = (
from a in _db . TBL_ROOM_TYPE_LISTS
where a . ROOM_TYPE_NAME = = roomNumber
select new
{
a . ROOM_TYPE_ID
} ) . FirstOrDefault ( ) ;
if ( selectdata = = null )
{
if ( db . ExecuteSql ( $"INSERT INTO tbl_hotel_basic_info(PROJECT_NUMBER, HOTEL_NAME_CN, KEY_ID, IsApprove, HOTEL_GROUP, VALID_STATUS,`STATUS`, SORT, IDOLD, IsDel, HOTEL_OLD_GROUP, BRANDID) VALUES('{projectCode}', '{projectName}', 0, 1, 0, 0, 2, 0, 0, 0, 0, 2); " ) ! = - 1 )
{
}
}
}
else
{
return Json ( new
{
2026-03-11 14:23:30 +08:00
retmsg = "参数不可为空" ,
retcode = "404"
2025-11-26 11:18:26 +08:00
} ) ;
}
return Json ( "" ) ;
}
#endregion
}
}