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
|
{
|
/// <summary>
|
/// DeviceStatus.xaml 的交互逻辑
|
/// </summary>
|
public partial class DeviceStatus : UserControl
|
{
|
#region 构造函数
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
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)
|
{
|
|
}
|
}
|
|
/// <summary>
|
/// 设置设备状态
|
/// </summary>
|
/// <returns></returns>
|
private void SetDevStatus()
|
{
|
Application.Current.Dispatcher.Invoke(() =>
|
{
|
List<DevicePositionModel> 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 拖拽完鼠标松开事件
|
/// <summary>
|
/// 拖拽完鼠标松开事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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 启动连接
|
/// <summary>
|
/// 启动连接
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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 刷新连接
|
/// <summary>
|
/// 刷新连接
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void btnRefreshConnect_Click(object sender, RoutedEventArgs e)
|
{
|
ShowTip.ShowNotice("执行中,请等待...", InfoType.Warning, 6);
|
//// 【启用中】状态
|
//GetButStateConnect();
|
|
new Thread(() =>
|
{
|
// 作为客户端连接外部服务
|
((MainWindow)Shared.Main).ConnectService();
|
// 设置设备状态
|
SetDevStatus();
|
}).Start();
|
}
|
#endregion
|
|
#region 启用+断开 按钮
|
/// <summary>
|
/// 【启用中】状态
|
/// </summary>
|
private void GetButStateConnect()
|
{
|
Application.Current.Dispatcher.Invoke(() =>
|
{
|
//btnStartConnect.IsEnabled = false;
|
//btnEndConnect.IsEnabled = true;
|
});
|
}
|
/// <summary>
|
/// 【断开中】状态
|
/// </summary>
|
private void SetBtnStateBreak()
|
{
|
Application.Current.Dispatcher.Invoke(() =>
|
{
|
//btnStartConnect.IsEnabled = true;
|
//btnEndConnect.IsEnabled = false;
|
});
|
}
|
#endregion
|
|
#region 更换背景图片
|
/// <summary>
|
/// 更换背景图片
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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
|
}
|
}
|