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 } }