using DataEntity.Device;
using DataEntity.Share;
using DataRWDAL.Device;
using HandyControl.Data;
using HxEnum;
using HxSocketImplement.Sockets;
using Microsoft.Win32;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using XCommon.file;
using XCommon.Log;
using XCommon.Tip;
using XImagingXhandler.XDAL;
using static HxEnum.StateEnum;
using static XHandler.View.Device.DeviceStatusCom;
using System.IO;
using System.Windows.Media.Imaging;
namespace XHandler.View.Device
{
///
/// DeviceStatus.xaml 的交互逻辑
///
public partial class DeviceStatus : UserControl
{
#region 构造函数
///
/// 构造函数
///
public DeviceStatus()
{
InitializeComponent();
}
#endregion
#region 初始化
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
try
{
#region 获取图片信息
if (!string.IsNullOrWhiteSpace(Shared.SoftwareInformation.deviceBackgroundImg))
{
#region 更改为不写入数据库,直接存到某个文件夹
//backgrougImg.Source = ImportFile.GetImage(Shared.SoftwareInformation.deviceBackgroundImg);
#endregion
}
#endregion
string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
string currentDirect = basePath + "image";
string[] strfileList = Directory.GetFiles(currentDirect);
string strFirstPagePath = string.Empty;
for (int i = 0; i < strfileList.Length; i++)
{
if (strfileList[i].Contains("FistPage"))
{
strFirstPagePath = strfileList[i];
break;
}
}
if (!string.IsNullOrEmpty(strFirstPagePath))
{
backgrougImg.Source = new BitmapImage(new Uri(strFirstPagePath, UriKind.Absolute));
}
// 设置设备状态
SetDevStatus();
}
catch(Exception ex)
{
}
}
///
/// 设置设备状态
///
///
private void SetDevStatus()
{
Application.Current.Dispatcher.Invoke(() =>
{
List devicePositionList = DevicePositionDB.GetInfoALL(Shared.SoftwareInformation.software_information_id);
var deviceConfigResult = DeviceConfigDB.GetDeviceConfigListByProjectId(Shared.SoftwareInformation.software_information_id);
bool connectStatus = false;
string statusTitle = string.Empty;
#region 清除设备状态组件
canvasStatus.Children.Clear();
canvasStatus.Children.Add(backgrougImg);
#endregion
foreach (var deviceItem in deviceConfigResult)
{
if (deviceItem.CommunicateType == EnumManagement.GetEnumValue(CommunicateTypeEnum.Socket)) //Socket
{
var strVirtualState = deviceItem.VirtualConnectionState == EnumManagement.GetEnumValue(VirtualConnectionStateEnum.Virtually) ? "虚拟" : string.Empty;
string toolTip = "厂商:" + deviceItem.Manufactor + '\n' + "设备型号:" + deviceItem.EquipmentModel + '\n' + "IP:" + deviceItem.Ip + ":" + deviceItem.Port + '\n' + "设备ID:" + deviceItem.EquipmentId;
#region 检查连接
var checkConnectedResult = HxSocketParameterService.CheckConnected(deviceItem.Type, deviceItem.Ip, Convert.ToInt32(deviceItem.Port), deviceItem.EquipmentId);
if (checkConnectedResult != null && checkConnectedResult.status == StateEnum_Equipment.Completed)
{
connectStatus = true;
statusTitle = " " + deviceItem.Name + "【在线】" + strVirtualState;
}
else
{
connectStatus = false;
statusTitle = " " + deviceItem.Name + "【离线】" + strVirtualState;
}
#endregion
#region 设备参数信息
var devicePosition = devicePositionList.FirstOrDefault(it => it.Id.Equals(deviceItem.Id));
DeviceStatusInfo statusInfo = new DeviceStatusInfo();
statusInfo.DeviceId = deviceItem.Id;
statusInfo.Status = connectStatus;
statusInfo.StatusTitle = statusTitle;
statusInfo.ToolTip = toolTip;
if (devicePosition != null)
{
statusInfo.DeviceLeft = devicePosition.DeviceLeft;
statusInfo.DeviceTop = devicePosition.DeviceTop;
}
#endregion
// 动态添加设备状态组件
DeviceStatusCom statusCom = new DeviceStatusCom(statusInfo);
statusCom.MouseUp -= DraggedEvent;
statusCom.MouseUp += DraggedEvent;
canvasStatus.Children.Add(statusCom);
}
}
});
}
#region 拖拽完鼠标松开事件
///
/// 拖拽完鼠标松开事件
///
///
///
private void DraggedEvent(object sender, EventArgs e)
{
DeviceStatusInfo statusInfo = (DeviceStatusInfo)sender;
var devicePositionModel = DevicePositionDB.GetInfodById(Shared.SoftwareInformation.software_information_id, statusInfo.DeviceId);
if (devicePositionModel != null)
{
devicePositionModel.DeviceLeft = statusInfo.DeviceLeft;
devicePositionModel.DeviceTop = statusInfo.DeviceTop;
devicePositionModel.ModifyTime = DateTime.Now;
devicePositionModel.ModifyName = Shared.User.username;
DevicePositionDB.Update(devicePositionModel);
}
else
{
devicePositionModel = new DevicePositionModel();
devicePositionModel.Id = statusInfo.DeviceId;
devicePositionModel.ProjectId = Shared.SoftwareInformation.software_information_id;
//devicePositionModel.ControlId = lab.Name;
devicePositionModel.Name = statusInfo.StatusTitle;
devicePositionModel.DeviceLeft = statusInfo.DeviceLeft;
devicePositionModel.DeviceTop = statusInfo.DeviceTop;
DevicePositionDB.Add(devicePositionModel);
}
}
#endregion
#endregion
#region 启动连接
///
/// 启动连接
///
///
///
private void btnStartConnect_Click(object sender, RoutedEventArgs e)
{
//// 开启服务端监听
//SocketInteriorService.OpenService();
//// 【启用中】状态
//GetButStateConnect();
//Task.Run(() =>
//{
// // 作为客户端连接外部服务
// ConnectExternalService();
//});
//ShowTip.Show("启动服务【成功】", InfoType.Success);
}
#endregion
#region 断开连接
private void btnEndConnect_Click(object sender, RoutedEventArgs e)
{
//// 停止服务端监听
//var result = SocketInteriorService.BreakConnect();
//// 断开与设备的通讯
//bool isOk = EquConnect.BreakDeviceConnect();
//if (isOk)
//{
// SetBtnStateBreak();
// //ShowTip.Show("断开服务【成功】", InfoType.Success);
// ShowTip.ShowNotice("外部设备【断开成功】", InfoType.Success);
//}
//else
//{
// GetButStateConnect();
//}
}
#endregion
#region 刷新连接
///
/// 刷新连接
///
///
///
private void btnRefreshConnect_Click(object sender, RoutedEventArgs e)
{
ShowTip.ShowNotice("执行中,请等待...", InfoType.Warning, 6);
//// 【启用中】状态
//GetButStateConnect();
new Thread(() =>
{
// 作为客户端连接外部服务
((MainWindow)Shared.Main).ConnectService();
// 设置设备状态
SetDevStatus();
}).Start();
}
#endregion
#region 启用+断开 按钮
///
/// 【启用中】状态
///
private void GetButStateConnect()
{
Application.Current.Dispatcher.Invoke(() =>
{
//btnStartConnect.IsEnabled = false;
//btnEndConnect.IsEnabled = true;
});
}
///
/// 【断开中】状态
///
private void SetBtnStateBreak()
{
Application.Current.Dispatcher.Invoke(() =>
{
//btnStartConnect.IsEnabled = true;
//btnEndConnect.IsEnabled = false;
});
}
#endregion
#region 更换背景图片
///
/// 更换背景图片
///
///
///
private void btnBackgrougImg_Click(object sender, RoutedEventArgs e)
{
try
{
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.Multiselect = false;
fileDialog.Title = "请选择文件";
fileDialog.Filter = "JPG类型图片(*jpg*)|*.jpg|PNG类型图片(*png*)|*.png*"; //设置要选择的文件的类型
if (fileDialog.ShowDialog() == true)
{
#region 更改为不写入数据库,直接存到某个文件夹
var tempFilePath = fileDialog.FileName;
/*// 获取图片Base64字符串
string imgBase64String = ImportFile.GetImageByString(tempFilePath);
// 图片更新
Shared.SoftwareInformation.deviceBackgroundImg = imgBase64String;
SoftwareInformationDB.Update(Shared.SoftwareInformation);
backgrougImg.Source = ImportFile.GetImage(imgBase64String);*/
#endregion
string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
string postfix = tempFilePath.Split('.')[1];
if (!Directory.Exists(basePath + "image"))
{
Directory.CreateDirectory(basePath + "image");
}
File.Copy(tempFilePath, basePath + "image\\FistPage" + "." + postfix,true);
backgrougImg.Source = new BitmapImage(new Uri(basePath + "image\\FistPage" + "." + postfix, UriKind.Absolute));
}
}
catch (Exception ex)
{
LoggerHelper.ErrorLog("ERROR:", ex);
}
}
#endregion
}
}