226 lines
13 KiB
C#
226 lines
13 KiB
C#
|
|
using APT.BaseData.Domain.ApiModel.EX;
|
|||
|
|
using APT.BaseData.Domain.ApiModel.Platform;
|
|||
|
|
using APT.BaseData.Domain.Entities;
|
|||
|
|
using APT.BaseData.Domain.Enums.PF;
|
|||
|
|
using APT.BaseData.Domain.IServices.FM;
|
|||
|
|
using APT.Infrastructure.Api;
|
|||
|
|
using APT.Infrastructure.Api.Redis;
|
|||
|
|
using APT.Infrastructure.Core;
|
|||
|
|
using APT.Utility;
|
|||
|
|
using Newtonsoft.Json;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using static APT.BaseData.Domain.ApiModel.SocketInfo;
|
|||
|
|
|
|||
|
|
namespace APT.BaseData.Services.Services.EX
|
|||
|
|
{
|
|||
|
|
public static class WebSocketService
|
|||
|
|
{
|
|||
|
|
//private IFMNotificatoinService _notificatoinService;
|
|||
|
|
//public WebSocketService(IFMNotificatoinService notificatoinService)
|
|||
|
|
|
|||
|
|
//{
|
|||
|
|
// _notificatoinService = notificatoinService;
|
|||
|
|
//}
|
|||
|
|
/// <summary>
|
|||
|
|
/// webscoket 打开
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="clientInfo"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static WebSocketResponseInfo OnOpenWebSocket(WebSocketClientInfo clientInfo)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine($"Socket连接:{clientInfo?.UserId}");
|
|||
|
|
//clientInfo.WebSocketConnection.Close();
|
|||
|
|
//var tenant = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<TenantInfo>();
|
|||
|
|
//clientInfo.Tenant = tenant?.Name;
|
|||
|
|
//BaseFilter baseFilter = new BaseFilter();
|
|||
|
|
//baseFilter.IgnoreOrgRule = true;
|
|||
|
|
//baseFilter.IsMultipleDb = true;
|
|||
|
|
//var commonService = ServiceLocator.Instance.GetService<ICommonService>();
|
|||
|
|
//var consumeService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<ISOConsumeChargingOrderService>();
|
|||
|
|
//var cueerntInfo = commonService.GetEntity<T_CP_CHARGING_PILE>(x=>x.CURRENT_CLIENT_ID == clientInfo.UserId, baseFilter);//当前占用充电桩
|
|||
|
|
//if (cueerntInfo!=null && cueerntInfo.CURRENT_CLIENT_ID!=null)
|
|||
|
|
//{
|
|||
|
|
// var user = commonService.GetEntity<T_OP_CLINET_OPENID>(x => x.CLIENT_ID == clientInfo.UserId, baseFilter);
|
|||
|
|
// baseFilter.Sort = "CREATE_TIME";
|
|||
|
|
// baseFilter.Order = DbOrder.DESC;
|
|||
|
|
// var order = commonService.GetEntity<T_SO_CHARGING_ORDER>(x => x.OPEN_ID == user.OPEN_ID && x.CHARGING_PILE_ID == cueerntInfo.ID, baseFilter, "Nav_ChargingPile");
|
|||
|
|
// if (order!=null && order.ORDER_STATUS == (int)FCOrderStatus.充电中)//充电中
|
|||
|
|
// {
|
|||
|
|
// SocketData socketData = new SocketData()
|
|||
|
|
// {
|
|||
|
|
// status = (int)MQChargingStatusEnum.充电进行
|
|||
|
|
// };
|
|||
|
|
// OrderReallyData orderReallyData = new OrderReallyData()
|
|||
|
|
// {
|
|||
|
|
// code = order.CODE,
|
|||
|
|
// chargeMode = order.CHARGE_TYPE,
|
|||
|
|
// };
|
|||
|
|
// ChargeInfo charge = new ChargeInfo()
|
|||
|
|
// {
|
|||
|
|
// stakeId = order.CHARGING_PILE_ID.ToString(),
|
|||
|
|
// stakeCode = order.Nav_ChargingPile.CODE,
|
|||
|
|
// stakeName = order.Nav_ChargingPile.NAME
|
|||
|
|
// };
|
|||
|
|
// if (order.CHARGE_TYPE == 1)//固定金额
|
|||
|
|
// {
|
|||
|
|
// orderReallyData.chargeMoney = order.CHARGE_VALUE;
|
|||
|
|
// }
|
|||
|
|
// else if (order.CHARGE_TYPE == 2)//固定时长
|
|||
|
|
// {
|
|||
|
|
// orderReallyData.chargeTime = order.CHARGE_VALUE;
|
|||
|
|
// }
|
|||
|
|
// orderReallyData.stake = charge;
|
|||
|
|
// #region 计算金额/充电时长
|
|||
|
|
// var model = consumeService.ConsumeOrder(order.CODE);
|
|||
|
|
// var time = Convert.ToInt32((order.END_TIME - order.START_TIME)?.TotalMinutes);
|
|||
|
|
// orderReallyData.time = time;
|
|||
|
|
// orderReallyData.used = model.Order.ENERGY_USED;
|
|||
|
|
// orderReallyData.amount = model.Order.AMOUNT;
|
|||
|
|
// #endregion
|
|||
|
|
// socketData.data = orderReallyData;
|
|||
|
|
// var notificatoinService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<ISONotificatoinService>();
|
|||
|
|
// notificatoinService.SendNotification(user.CLIENT_ID, socketData);
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// websocket 关闭
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="userId"></param>
|
|||
|
|
public static void OnCloseWebSocket(Guid userId, WebSocketClientInfo clientInfo)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine($"Socket连接断开:{userId}");
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// websocket 信息
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="clientInfo"></param>
|
|||
|
|
/// <param name="requestInfo"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static WebSocketResponseInfo OnMessageWebSocket(WebSocketClientInfo clientInfo,
|
|||
|
|
WebSocketRequestInfo requestInfo)
|
|||
|
|
{
|
|||
|
|
if (requestInfo != null)
|
|||
|
|
{
|
|||
|
|
switch (requestInfo.TypeCode)
|
|||
|
|
{
|
|||
|
|
case "M0002":
|
|||
|
|
{
|
|||
|
|
var service = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<IFMNotificatoinService>();
|
|||
|
|
var clientInfoByManu = JsonConvert.DeserializeObject<SendNotificationModel>(requestInfo.Data);
|
|||
|
|
List<WebSocketClientInfo> ingoreClientInfos = new List<WebSocketClientInfo>();
|
|||
|
|
ingoreClientInfos.Add(clientInfo);
|
|||
|
|
service.SendNotification(clientInfoByManu, ingoreClientInfos);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case "M0003":
|
|||
|
|
{
|
|||
|
|
var service = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<IFMNotificatoinService>();
|
|||
|
|
var clientInfoByManu = JsonConvert.DeserializeObject<SendNotificationModel>(requestInfo.Data);
|
|||
|
|
List<WebSocketClientInfo> ingoreClientInfos = new List<WebSocketClientInfo>();
|
|||
|
|
ingoreClientInfos.Add(clientInfo);
|
|||
|
|
service.SendAlarmNotification(clientInfoByManu, ingoreClientInfos);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case "P0001":
|
|||
|
|
{
|
|||
|
|
BaseFilter baseFilter = new BaseFilter();
|
|||
|
|
baseFilter.IgnoreOrgRule = true;
|
|||
|
|
baseFilter.IsMultipleDb = true;
|
|||
|
|
var commonService = ServiceLocator.Instance.GetService<ICommonService>();
|
|||
|
|
//var consumeService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<ISOConsumeChargingOrderService>();
|
|||
|
|
//var cueerntInfo = commonService.GetEntity<T_CP_CHARGING_PILE>(x => x.CURRENT_CLIENT_ID == clientInfo.UserId, baseFilter);//当前占用充电桩
|
|||
|
|
//if (cueerntInfo != null && cueerntInfo.CURRENT_CLIENT_ID != null)
|
|||
|
|
//{
|
|||
|
|
// //var user = commonService.GetEntity<T_OP_CLINET_OPENID>(x => x.CLIENT_ID == clientInfo.UserId, baseFilter);
|
|||
|
|
// baseFilter.Sort = "CREATE_TIME";
|
|||
|
|
// baseFilter.Order = DbOrder.DESC;
|
|||
|
|
// var order = commonService.GetEntity<T_SO_CHARGING_ORDER>(x => x.CLIENT_ID == clientInfo.UserId.ToString() && x.CHARGING_PILE_ID == cueerntInfo.ID, baseFilter, "Nav_ChargingPile");
|
|||
|
|
// if (order != null && order.ORDER_STATUS == (int)FCOrderStatus.充电中)//充电中
|
|||
|
|
// {
|
|||
|
|
// SocketData socketData = new SocketData()
|
|||
|
|
// {
|
|||
|
|
// status = (int)MQChargingStatusEnum.充电进行
|
|||
|
|
// };
|
|||
|
|
// OrderReallyData orderReallyData = new OrderReallyData()
|
|||
|
|
// {
|
|||
|
|
// code = order.CODE,
|
|||
|
|
// tenantCode = order.CODE.Substring(2, 4),
|
|||
|
|
// chargeMode = order.CHARGE_TYPE,
|
|||
|
|
// orderStatus = order.ORDER_STATUS
|
|||
|
|
// };
|
|||
|
|
// Domain.ApiModel.SocketInfo.ChargeInfo charge = new Domain.ApiModel.SocketInfo.ChargeInfo()
|
|||
|
|
// {
|
|||
|
|
// stakeId = order.CHARGING_PILE_ID.ToString(),
|
|||
|
|
// stakeCode = order.Nav_ChargingPile.CODE,
|
|||
|
|
// stakeName = order.Nav_ChargingPile.NAME
|
|||
|
|
// };
|
|||
|
|
// if (order.CHARGE_TYPE == 1)//固定金额
|
|||
|
|
// {
|
|||
|
|
// orderReallyData.chargeMoney = order.CHARGE_VALUE;
|
|||
|
|
// }
|
|||
|
|
// else if (order.CHARGE_TYPE == 2)//固定时长
|
|||
|
|
// {
|
|||
|
|
// orderReallyData.chargeTime = order.CHARGE_VALUE;
|
|||
|
|
// }
|
|||
|
|
// orderReallyData.stake = charge;
|
|||
|
|
// #region 计算金额/充电时长
|
|||
|
|
// var model = consumeService.ConsumeOrder(order.CODE);
|
|||
|
|
// var time = Convert.ToInt32((order.END_TIME - order.START_TIME)?.TotalMinutes);
|
|||
|
|
// orderReallyData.time = time;
|
|||
|
|
// orderReallyData.used = model.Order.ENERGY_USED;
|
|||
|
|
// orderReallyData.amount = model.Order.AMOUNT;
|
|||
|
|
// #endregion
|
|||
|
|
// socketData.data = orderReallyData;
|
|||
|
|
// var notificatoinService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<IFMNotificatoinService>();
|
|||
|
|
// notificatoinService.SendNotification((Guid)clientInfo.UserId, socketData);
|
|||
|
|
// }
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case "MQ02":
|
|||
|
|
{
|
|||
|
|
BaseFilter filter = new BaseFilter();
|
|||
|
|
filter.Sort = "CREATE_TIME";
|
|||
|
|
filter.Order = DbOrder.DESC;
|
|||
|
|
filter.IgnoreOrgRule = true;
|
|||
|
|
filter.IsMultipleDb = true;
|
|||
|
|
var commonService = ServiceLocator.Instance.GetService<ICommonService>();
|
|||
|
|
//var endInfo = JsonConvert.DeserializeObject<EndStake>(requestInfo.Data);
|
|||
|
|
//var order = commonService.GetEntity<T_SO_CHARGING_ORDER>(x => x.CODE == endInfo.code, filter, "Nav_ChargingPile");
|
|||
|
|
//var orgId = (Guid)order.ORG_ID;
|
|||
|
|
//#region 发送指令
|
|||
|
|
//MqttMesage mqttMesage = new MqttMesage()
|
|||
|
|
//{
|
|||
|
|
// cmd = ((int)PFThemeTypeEnum.P_结束充电).ToString().PadLeft(3, '0'),
|
|||
|
|
// title = order.Nav_ChargingPile.CODE,
|
|||
|
|
// charge_no = order.CODE,
|
|||
|
|
// //terminal_sn = order.Nav_ChargingPile.SEQUENCE,
|
|||
|
|
// //terminal_no = order.Nav_ChargingPile.CODE,
|
|||
|
|
// timestamp = DataHelper.GetTimeSpanFrom1970Ticks(DateTime.Now)
|
|||
|
|
//};
|
|||
|
|
//filter.OrgId = order.ORG_ID;
|
|||
|
|
//var mqConfs = commonService.GetEntitiesByRedis<T_PF_MQTT_CONFIG>(null, filter, "", "Nav_MqttConfigTheme");
|
|||
|
|
//if (mqConfs == null || !mqConfs.Any())
|
|||
|
|
// throw new Exception("主题配置不存在");
|
|||
|
|
//var mqConf = mqConfs.FirstOrDefault();
|
|||
|
|
//BaseFilter basefilter = new BaseFilter();
|
|||
|
|
//basefilter.OrgId = mqConf.ORG_ID;
|
|||
|
|
//basefilter.IsSpecifyDb = true;
|
|||
|
|
//basefilter.SpecifyDbConn = order.DbConn;
|
|||
|
|
//var org = commonService.GetEntity<T_FM_ORGANIZATION>(null, basefilter);
|
|||
|
|
//var mqName = org.TENANT_CODE + "_" + mqConf.NAME;
|
|||
|
|
//CsRedisManager.GetClient().RPush<MqttMesage>(mqName.GetPubRedisKey(), mqttMesage);
|
|||
|
|
//#endregion
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|