|
|
#region << 版 本 注 释 >>
|
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
|
* 版权所有 (c) 2025 WenJY 保留所有权利。
|
|
|
* CLR版本:4.0.30319.42000
|
|
|
* 机器名称:Mr.Wen's MacBook Pro
|
|
|
* 命名空间:Sln.Iot.Business
|
|
|
* 唯一标识:97943988-8BBA-44B7-9139-BB7D4EC7FC3A
|
|
|
*
|
|
|
* 创建者:WenJY
|
|
|
* 电子邮箱:
|
|
|
* 创建时间:2025-05-09 13:55:47
|
|
|
* 版本:V1.0.0
|
|
|
* 描述:
|
|
|
*
|
|
|
*--------------------------------------------------------------------
|
|
|
* 修改人:
|
|
|
* 时间:
|
|
|
* 修改说明:
|
|
|
*
|
|
|
* 版本:V1.0.0
|
|
|
*--------------------------------------------------------------------*/
|
|
|
|
|
|
#endregion << 版 本 注 释 >>
|
|
|
|
|
|
using System;
|
|
|
using Newtonsoft.Json;
|
|
|
using Sln.Iot.Common;
|
|
|
using Sln.Iot.Config;
|
|
|
using Sln.Iot.Model.dto;
|
|
|
using Sln.Iot.Serilog;
|
|
|
using Sln.Iot.Socket;
|
|
|
using Sln.Iot.Socket.Adapter;
|
|
|
using TouchSocket.Core;
|
|
|
using TouchSocket.Rpc;
|
|
|
using TouchSocket.WebApi;
|
|
|
|
|
|
namespace Sln.Iot.Business
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 设备控制执行处理
|
|
|
/// </summary>
|
|
|
public class DevControlBusiness : RpcServer
|
|
|
{
|
|
|
private SerilogHelper _logger;
|
|
|
private StringChange _stringChange;
|
|
|
|
|
|
private readonly TcpServer _tcpServer;
|
|
|
|
|
|
public DevControlBusiness(SerilogHelper logger, StringChange stringChange, TcpServer tcpServer)
|
|
|
{
|
|
|
_logger = logger;
|
|
|
_stringChange = stringChange;
|
|
|
_tcpServer = tcpServer;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 开锁
|
|
|
/// </summary>
|
|
|
/// <param name="idStr"></param>
|
|
|
/// <param name="password"></param>
|
|
|
[EnableCors("cors")]
|
|
|
[WebApi(HttpMethodType.POST)]
|
|
|
public ApiResInfo Unlock(string idStr,string password)
|
|
|
{
|
|
|
BufferRequestInfo bufferRequestInfo = new BufferRequestInfo();
|
|
|
ApiResInfo apiResInfo = new ApiResInfo();
|
|
|
try
|
|
|
{
|
|
|
BufferPack(idStr, password,0x35,out byte[] buffer);
|
|
|
_logger.Info($"向客户端:{idStr};发送开锁指令:{_stringChange.bytesToHexStr(buffer,buffer.Length)}");
|
|
|
bufferRequestInfo = _tcpServer.SendMsgToClient(idStr, buffer).Result;
|
|
|
|
|
|
if (bufferRequestInfo.DataType == 0x35)
|
|
|
{
|
|
|
_logger.Info($"开锁指令下发成功,已收到设备回复");
|
|
|
apiResInfo = ApiResInfo.Success("开锁指令下发成功,已收到设备回复",bufferRequestInfo);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
throw new InvalidOperationException($"关锁指令下发成功,设备回复控制码不为 0x35");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
_logger.Info($"开锁异常:{e.Message}");
|
|
|
apiResInfo = ApiResInfo.Fail($"开锁异常:{e.Message}",bufferRequestInfo);
|
|
|
}
|
|
|
return apiResInfo;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 关锁
|
|
|
/// </summary>
|
|
|
/// <param name="idStr"></param>
|
|
|
/// <param name="password"></param>
|
|
|
[EnableCors("cors")]
|
|
|
[WebApi(HttpMethodType.POST)]
|
|
|
public ApiResInfo LockUp(string idStr,string password)
|
|
|
{
|
|
|
BufferRequestInfo bufferRequestInfo = new BufferRequestInfo();
|
|
|
ApiResInfo apiResInfo = new ApiResInfo();
|
|
|
try
|
|
|
{
|
|
|
BufferPack(idStr, password,0x37,out byte[] buffer);
|
|
|
_logger.Info($"向客户端:{idStr};发送关锁指令:{_stringChange.bytesToHexStr(buffer,buffer.Length)}");
|
|
|
bufferRequestInfo = _tcpServer.SendMsgToClient(idStr, buffer).Result;
|
|
|
if (bufferRequestInfo.DataType == 0x37)
|
|
|
{
|
|
|
_logger.Info($"关锁指令下发成功,已收到设备回复");
|
|
|
apiResInfo = ApiResInfo.Success("关锁指令下发成功,已收到设备回复",bufferRequestInfo);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
throw new InvalidOperationException($"关锁指令下发成功,设备回复控制码不为 0x37");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
_logger.Info($"关锁异常:{e.Message}");
|
|
|
apiResInfo = ApiResInfo.Fail($"关锁异常:{e.Message}",bufferRequestInfo);
|
|
|
}
|
|
|
return apiResInfo;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 指令封装
|
|
|
/// </summary>
|
|
|
/// <param name="idStr"></param>
|
|
|
/// <param name="password"></param>
|
|
|
/// <param name="dataType"></param>
|
|
|
/// <param name="buffer"></param>
|
|
|
private void BufferPack(string idStr,string password,byte dataType,out byte[] buffer)
|
|
|
{
|
|
|
ushort num = 0;
|
|
|
|
|
|
byte[] idBytes = _stringChange.HexStrTorbytes(idStr);
|
|
|
byte[] pwdBytes = _stringChange.HexStrTorbytes(password);
|
|
|
buffer = new byte[5 + idBytes.Length + pwdBytes.Length];
|
|
|
buffer[num] = 0x68;
|
|
|
num = (ushort)(num + 1);
|
|
|
Array.Copy(idBytes, 0, buffer, num, idBytes.Length);
|
|
|
num = (ushort)(num + idBytes.Length);
|
|
|
buffer[num] = 0x68;
|
|
|
num = (ushort)(num + 1);
|
|
|
buffer[num] = dataType;
|
|
|
num = (ushort)(num + 1);
|
|
|
Array.Copy(pwdBytes, 0, buffer, num, pwdBytes.Length);
|
|
|
num = (ushort)(num + pwdBytes.Length);
|
|
|
buffer[num] = _stringChange.CalculateVerifyToArray(buffer, buffer.Length - 1)[0];
|
|
|
num = (ushort)(num + 1);
|
|
|
buffer[num] = 0x16;
|
|
|
}
|
|
|
}
|
|
|
} |