using Microsoft.AspNetCore.Mvc;
using Ropin.Inspection.Service;
using System.Net.Http;
using Ropin.Inspection.Common.Helper;
using Microsoft.AspNetCore.Authorization;
using Ropin.Inspection.Api.Common;
using System.Threading.Tasks;
using Ropin.Inspection.Model;
using System.Collections.Generic;
using System;
using Newtonsoft.Json;
using Microsoft.Extensions.Configuration;
using Ropin.Inspection.Service.VMC.Interface;
using Newtonsoft.Json.Linq;
using System.IO;
namespace Ropin.Inspection.Api.Controllers.Base
{
public class AIController : BaseController
{
private readonly IHttpClientFactory _httpClientFactory;
private readonly AIProjectHelper aIHelper;
private readonly ITsysMessageService _TsysMessageService;
private readonly IPushMsgService _pushMsgService;
private readonly IVmcCameraService _vmcCameraService;
private string IsUpdateAI = "false";
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(AIController));
public AIController(IHttpClientFactory httpClientFactory, ITsysMessageService tsysMessageService, IPushMsgService pushMsgService, IConfiguration configuration, IVmcCameraService vmcCameraService)
{
aIHelper = new AIProjectHelper(httpClientFactory);
_TsysMessageService = tsysMessageService;
_pushMsgService = pushMsgService;
string IsUpdate = configuration.GetSection("AIIsUpdate")?.Value;
IsUpdateAI = !string.IsNullOrEmpty(IsUpdate) ? IsUpdate : "false";
_vmcCameraService = vmcCameraService;
}
///
/// AI登录
///
///
[HttpGet("AiLogin")]
[AllowAnonymous]
public async Task AiLogin()
{
var token = await aIHelper.GetToken();
return token;
}
///
/// AI-获取历史报警记录
///
///
[HttpGet("AiHistoricAlmrecord/{Devno}/{Page}/{pageSize}")]
[AllowAnonymous]
public async Task>> AiHistoricAlmrecord(string Devno, int Page = 1, int pageSize = 10, long? entityId = null)
{
var data = await aIHelper.GetHistoricAlmrecord(Devno, Page, pageSize, entityId);
return new ApiResult>(data, ReturnCode.Success);
}
///
/// AI-获取报警处理列表
///
///
[HttpGet("AiAlmDispose/{Devno}/{Page}/{pageSize}")]
[AllowAnonymous]
public async Task>> AiAlmDispose(string Devno, int Page = 1, int pageSize = 10, long? entityId = null)
{
var data = await aIHelper.GetAlmDispose(Devno, Page, pageSize, entityId);
return new ApiResult>(data, ReturnCode.Success);
}
///
/// AI-报警数据保存到环保消息表数据
///
///
[HttpGet("AiAlmSaveMessage")]
[AllowAnonymous]
public async Task AiAlmSaveMessage()
{
//40124884581189;33379713109829
var data = await aIHelper.GetAlmDispose("", 1, 10, 40124884581189);
//var data = await aIHelper.GetHistoricAlmrecord("", 1, 10, 40124884581189);
if (data != null)
{
foreach (var item in data.Items)
{
if (item != null)
{
var textJson = new
{
PanoramaId = item.PanoramaId,
PanoramaUrl = item.PanoramaUrl,
RoiJson = item.RoiJson,
NonRoiJson = item.NonRoiJson,
DetectionFrameJson = item.DetectionFrameJson
};
var datas = JsonConvert.SerializeObject(textJson);
MessageFile messageFile = new MessageFile();
messageFile.Text = datas;
messageFile.Type = "FILE_TYP_006";
string msg = item.Event_Name;
if (string.IsNullOrEmpty(msg))
{
msg = item.Event_Code;
}
TpushMsgModel model = new TpushMsgModel
{
C_DevStoreCode = "d705ceb5-7473-4b19-91dd-d3eff223f05b",
C_MsgTypeCode = "MSG_TYPE_024",
Subject = item.Device_TypeName + "报警",
Msg = msg,
UserName = "AI盒子",
UserMobile = "",
CreateOn = item.StartTime?.ToString("yyyy-MM-dd HH:mm:ss"),
GenerationType = 1,
msgStatus = 1,
FileList = new List { messageFile }
};
bool bol = await _pushMsgService.PushAlarmMsgAsync(model, model.Subject);
if (bol && IsUpdateAI == "true")
{
DateTime updTime = DateTime.Now;
var updData = new
{
Id = item.Id,
ConfrimContent = "环保测试数据,自动确认",
Mistake = false,
Confirmed = true,
ConfirmTime = updTime,
ConfirmUserName = "环保同步程序",
Closed = true,
CloseContent = "环保测试数据,自动关闭",
EndTime = updTime,
CloseUserName = "环保同步程序"
};
var dataStr = JsonConvert.SerializeObject(updData);
bool result = await aIHelper.UpdateAlm(dataStr);
//bool result = await aIHelper.UpdateAlmIsDelete(item.Id);
}
}
}
}
//TsysMessageSearchModel searchModel = new TsysMessageSearchModel();
//searchModel.IsPagination = true;
//searchModel.C_MsgTypeCode = "MSG_TYPE_024";
//var msgData = await _TsysMessageService.GetConditionAsync(searchModel);
return new ApiResult(ReturnCode.Success);
}
[HttpPost]
[AllowAnonymous]
[Route("/device/business/generalApp/pushData/alarmData/{deviceNo}")]
public async Task> AlarmData([FromRoute] string deviceNo, [FromBody] JObject alarmDataModel)
{
try
{
string startupDirectory = Directory.GetCurrentDirectory();
log.Info($"进入AI[/device/business/generalApp/pushData/alarmData/{deviceNo}]");
AlarmDataModel alarmData = JsonConvert.DeserializeObject(alarmDataModel.ToString());
log.Info("获取deviceNo="+ alarmData.deviceNo);
var devIds = await _vmcCameraService.GetCameraByTDH(alarmData.deviceNo);
log.Info($"获取到的设备ID:【{JsonConvert.SerializeObject(devIds)}】");
int row = 0;
foreach (var x in devIds)
{
List messageFiles = new List();
string fileRelativePath = "";
if (!string.IsNullOrEmpty(alarmData.panoramaDataId))
{
try
{
byte[] dataBytes = Convert.FromBase64String(s: alarmData.panoramaDataId);
var relativePath = Path.Combine("wwwroot/uploads/images/", DateTime.Now.ToString("yyyyMM"));
var directoryPath = Path.Combine(startupDirectory, relativePath);
string imgName = $"{alarmData.panoramaId}.png";
fileRelativePath = "/" + Path.Combine(relativePath + "/", imgName);
if (!Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
var filePath = Path.Combine(directoryPath + "/", imgName);// 替换为你想要保存的文件路径及名称
using FileStream fs = new FileStream(filePath, FileMode.Create);
fs.Write(dataBytes, 0, dataBytes.Length);
fs.Close();
}
catch (Exception ex)
{
log.Info("全景图异常:" + ex.Message);
}
}
var textJson = new
{
PanoramaId = alarmData.panoramaId,
PanoramaUrl = fileRelativePath,//alarmData.panoramaUrl,
RoiJson = alarmData.roiJson,
NonRoiJson = alarmData.nonRoiJson,
DetectionFrameJson = alarmData.detectionFrameJson
};
var datas = JsonConvert.SerializeObject(textJson);
MessageFile messageFile = new MessageFile();
messageFile.Text = datas;
messageFile.Type = "FILE_TYP_006";
messageFiles.Add(messageFile);
TpushMsgModel model = new TpushMsgModel
{
C_DevStoreCode = x,
C_MsgTypeCode = "MSG_TYPE_024",
Subject = "AI盒子报警",
Msg = alarmData.alarmTypeChineseName,
UserName = "AI盒子",
UserMobile = "",
CreateOn = alarmData.captureTime,
GenerationType = 1,
msgStatus = 1,
FileList = messageFiles
};
bool bol = await _pushMsgService.PushAlarmMsgAsync(model, model.Subject);
log.Info($"执行发送结果=[{bol}]");
if (bol) { row++; }
}
return ApiResultModel