You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

548 lines
21 KiB

using Container.Common;
using Container.Model;
using Container.Services;
using Container.Viewmodel;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.IO;
using Microsoft.Win32;
using System.Diagnostics;
namespace Container.ChildWindows
{
/// <summary>
/// ServiceInfo.xaml 的交互逻辑
/// </summary>
public partial class ServiceInfo : Window
{
BackgroundWorker backgroundWorker;
DispatcherTimer timer = new DispatcherTimer();
App app;
int type = 1;
string ErrorLog = "";
private Class_Log log = new Class_Log();
string BuildingName = "";
string BuildingId = "";
string FloorName = "";
string FloorId = "";
string DeviceType = "";
string FileType = "";
int second = 10;
public ServiceInfo()
{
InitializeComponent();
this.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;
}
//SelectBox mytest;
private void Services_Loaded(object sender, RoutedEventArgs e)
{
try
{
app = ((App)System.Windows.Application.Current);
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;
backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
backgroundWorker.DoWork += BackgroundWorker_DoWork;
backgroundWorker.RunWorkerAsync();
second = 60;
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = TimeSpan.FromSeconds(1);
timer.Start();
Text_Device.Text = app.devicemark = System.Net.Dns.GetHostName();
this.Text_FilePath.Text = app.HttpUrl;
HttpMessage httpclient = new HttpMessage();
string ErrorLog = "";
if (httpclient.GetDeviceTypeList(ref ErrorLog)) {
if (app.DeviceTypeList.Count() > 0)
{
//app.Floors = list.ElementAt(0);
this.ComBox_Type.ItemsSource = (new BuildingOperate(3)).BuildingMenu;
ComBox_Type.SelectedValuePath = "code";
ComBox_Type.DisplayMemberPath = "name";
ComBox_Type.SelectedIndex = 0;
ComBox_Type.IsDropDownOpen = false;
}
}
this.ComBox_File.ItemsSource = (new BuildingOperate(4)).BuildingMenu;
ComBox_File.SelectedValuePath = "code";
ComBox_File.DisplayMemberPath = "code";
ComBox_File.SelectedIndex = 0;
ComBox_File.IsDropDownOpen = false;
}
catch (Exception ex)
{
log.WriteLogFile("异常" + ex.ToString(), "ServiceInfoError");
}
}
//倒计时
private void timer_Tick(object sender, EventArgs e)
{
if (second > 0)
{
second--;
if (Loading.Visibility == System.Windows.Visibility.Visible)
this.Time.Text = "倒计时" + second.ToString() + "s";
}
else
{
if (Loading.Visibility == System.Windows.Visibility.Visible)
{
if (backgroundWorker.IsBusy == true)
{
timer.Stop();
backgroundWorker.ReportProgress(1, null);
}
}
else if (UpdateSuccess.Visibility == System.Windows.Visibility.Visible)
{
timer.Stop();
this.DialogResult = true;
}
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
lab_msg.Visibility = System.Windows.Visibility.Hidden;
//if (type == 1)
//{
BuildingName = "";
BuildingId = "";
if (ComBox_Building.Text == "" || ComBox_Building.SelectedValue == null)
{
lab_msg.Content = "请先选择楼栋信息";
lab_msg.Visibility = System.Windows.Visibility.Visible;
return;
}
BuildingName = ComBox_Building.Text.ToString();
BuildingId = ComBox_Building.SelectedValue.ToString();
//}
//else if (type == 2)
//{
FloorName = "";
FloorId = "";
if (ComBox_Building.Text == "" || ComBox_Building.SelectedValue == null)
{
lab_msg.Content = "请先选择楼层信息";
lab_msg.Visibility = System.Windows.Visibility.Visible;
return;
}
FloorName = ComBox_Floor.Text.ToString();
FloorId = ComBox_Floor.SelectedValue.ToString();
log.WriteLogFile("ComBox_Type.Text="+ ComBox_Type.Text+ ";ComBox_Type.SelectedValue="+ ComBox_Type.SelectedValue, "123");
if (ComBox_Type.Text == "" || ComBox_Type.SelectedValue == null) {
lab_msg.Content = "请选择设备类型";
lab_msg.Visibility = System.Windows.Visibility.Visible;
return;
}
DeviceType = ComBox_Type.SelectedValue.ToString();
if (ComBox_File.Text == "" || ComBox_File.SelectedValue == null)
{
lab_msg.Content = "请先选择文件存储";
lab_msg.Visibility = System.Windows.Visibility.Visible;
return;
}
FileType= ComBox_File.SelectedValue.ToString();
//if (Text_Device.Text.Trim() == "")
{
//lab_msg.Content = "请填写设备标识";
//lab_msg.Visibility = System.Windows.Visibility.Visible;
//return;
app.devicemark = Text_Device.Text.Trim();
}
switch (FileType)
{
case "本地部署":
app.FileServerPath = app.HttpUrl;
break;
case "前置离线":
app.FileServerPath = Text_FilePath.Text.Trim();
break;
case "直联云":
app.FileServerPath = app.OBSPath;
break;
default:
break;
}
if (string.IsNullOrEmpty(app.FileServerPath))
{
lab_msg.Content = "文件服务地址不能为空";
lab_msg.Visibility = System.Windows.Visibility.Visible;
return;
}
//}
if (backgroundWorker.IsBusy)
{
lab_msg.Content = "线程正忙,请稍后再试";
lab_msg.Visibility = System.Windows.Visibility.Visible;
}
else
{
type = 2;
this.deviceinfo.Visibility = System.Windows.Visibility.Hidden;
this.Loading.Visibility = System.Windows.Visibility.Visible;
string errorMsg = "";
StartExE(app.configstartexe, (app.HttpUrl.Replace("http://", "")).Split('/')[0] + "|" + app.LocalIP + "|" + app.configwebsocket + "|1");
HttpMessage httpmessage = new HttpMessage();
httpmessage.LoadAppConfig(ref errorMsg);
httpmessage.LoadBG();
httpmessage.LoadScreenTime();
backgroundWorker.RunWorkerAsync();
app.IsCanConnect = true;
}
}
private void StartExE(string path, string param = "")
{
try
{
timer.Stop();
if (!File.Exists(path) && !path.StartsWith("http:"))
{
if (!File.Exists(System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").Substring(0, System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").LastIndexOf("/")) + path))
{
return;
}
else
{
path = System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").Substring(0, System.Windows.Forms.Application.ExecutablePath.Replace("\\", "/").LastIndexOf("/")) + path;
}
}
log.WriteLogFile(path.Substring(path.Length - 4, 4).ToLower(), "startlog");
if (path.Substring(path.Length - 4, 4).ToLower().Equals(".bat"))
{
param = "";
Process myprocess = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo(path, param);
path = path.Replace("\\", "/");
startInfo.WorkingDirectory = path.Substring(0, path.LastIndexOf("/"));//设置应用程序在其所在目录
startInfo.Verb = "runas";
startInfo.CreateNoWindow = true;
myprocess.StartInfo = startInfo;
myprocess.StartInfo.UseShellExecute = false;
myprocess.Start();
app.AppPlayName = "chrome";
app.CurAppPlayName = app.AppPlayName;
app.NowAppType = "bat";
timer.Start();
log.WriteLogFile("打开成功", "startlog");
}
else
{
Process myprocess = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo(path, param);
path = path.Replace("\\", "/");
startInfo.WorkingDirectory = path.Substring(0, path.LastIndexOf("/"));//设置应用程序在其所在目录
startInfo.Verb = "runas";
startInfo.CreateNoWindow = true;
myprocess.StartInfo = startInfo;
myprocess.StartInfo.UseShellExecute = false;
myprocess.Start();
app.AppPlayName = myprocess.ProcessName;
app.CurAppPlayName = app.AppPlayName;
app.NowAppType = "exe";
timer.Start();
}
}
catch (Exception ex)
{
log.WriteLogFile(ex.ToString());
}
}
void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
//BackgroundWorker worker = sender as BackgroundWorker;
HttpMessage httpclient = new HttpMessage();
try
{
ErrorLog = "";
if (type == 1)
{
if (httpclient.GetBuildinginfo(ref ErrorLog))
{
if (app.Buildinginfo.Count > 0)
{
//查询成功
backgroundWorker.ReportProgress(0, null);
}
else
{
if (ErrorLog.Trim() == "")
ErrorLog = "未查到楼栋相关记录";//未查到
backgroundWorker.ReportProgress(1, null);
}
}
else
{
//ErrorLog = "连接服务器失败。";
backgroundWorker.ReportProgress(1, null);
}
}
else
{
int i = 0;
string AddressIP = string.Empty;
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
{
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
{
AddressIP = _IPAddress.ToString();
}
}
// string[] IP = AddressIP.Split('.');
// if (IP.Count() == 4)
//app.deviceid = BuildingName + FloorName + IP[2] + IP[3];
while (true)
{
if (httpclient.UploadDeviceInfo(BuildingId, FloorId, DeviceType, ref ErrorLog))
{
WebSocketManageForLive webForLive = new WebSocketManageForLive();
webForLive.OpenWebSocket();
backgroundWorker.ReportProgress(0, null);//上传成功
break;
}
else
{
i++;
if (i > 3)
{
//if (ErrorLog.Trim() == "")
// ErrorLog = "上传失败";
backgroundWorker.ReportProgress(1, null);
break;
}
}
}
}
}
catch (Exception ex)
{
ErrorLog = "操作失败";
log.WriteLogFile("异常" + ex.ToString(),"ServiceInfoError");
backgroundWorker.ReportProgress(1, null);
}
e.Cancel = true;
return;
}
void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
int progressPercentage = e.ProgressPercentage;
string userState = (string)e.UserState;
try
{
switch (progressPercentage)
{
case 0:
//reclient.Visibility = System.Windows.Visibility.Hidden;
if (type == 1)
{
timer.Stop();
this.ComBox_Building.ItemsSource = app.Buildinginfo;
this.ComBox_Building.ItemsSource = (new BuildingOperate(type)).BuildingMenu;
ComBox_Building.SelectedValuePath = "code";
ComBox_Building.DisplayMemberPath = "name";
ComBox_Building.IsDropDownOpen = true;
this.Loading.Visibility = System.Windows.Visibility.Hidden;
this.deviceinfo.Visibility = Visibility.Visible;
}
else
{
second = 2;
this.Loading.Visibility = System.Windows.Visibility.Hidden;
this.UpdateSuccess.Visibility = System.Windows.Visibility.Visible;
timer.Start();
}
backgroundWorker.CancelAsync();
break;
case 1:
if (type == 1)
{
this.ConnectFailed.Visibility = System.Windows.Visibility.Visible;
this.Loading.Visibility = System.Windows.Visibility.Hidden;
}
else
{
UpdateErrorInfo.Text = ErrorLog;
UpdateErrorInfo.Visibility = System.Windows.Visibility.Visible;
this.UpdateFailed.Visibility = System.Windows.Visibility.Visible;
this.Loading.Visibility = System.Windows.Visibility.Hidden;
}
timer.Stop();
lab_msg.Content = ErrorLog;
lab_msg.Visibility = System.Windows.Visibility.Visible;
backgroundWorker.CancelAsync();
break;
case 2:
break;
default: break;
}
}
catch (System.Exception ex)
{
log.WriteLogFile("异常" + ex.ToString());
}
}
private void ButtonBack_Click(object sender, RoutedEventArgs e)
{
lab_msg.Visibility = System.Windows.Visibility.Hidden;
if (backgroundWorker.IsBusy)
{
lab_msg.Content = "线程正忙,请稍后再试";
lab_msg.Visibility = System.Windows.Visibility.Visible;
}
else
{
type = 1;
backgroundWorker.RunWorkerAsync();
}
}
private void reclient_Click(object sender, RoutedEventArgs e)
{
Button_Click(null,null);
}
private void Services_Closed(object sender, EventArgs e)
{
if (backgroundWorker.IsBusy)
backgroundWorker.CancelAsync();
timer.Stop();
}
string buildingid = "";
private void Combox_Building_changed(object sender, SelectionChangedEventArgs e)
{
this.ComBox_Floor.Text = "";
this.ComBox_Floor.ItemsSource = null;
if (buildingid.Trim().Equals(this.ComBox_Building.SelectedValue.ToString().Trim()))
{
return;
}
else
{
buildingid = this.ComBox_Building.SelectedValue.ToString();
}
IEnumerable<List<Floor>> list = (app.Buildinginfo.Where(i => i.code.ToString() == this.ComBox_Building.SelectedValue.ToString()).Select(i => i.floors));
if (list.Count() > 0)
{
app.Floors = list.ElementAt(0);
this.ComBox_Floor.ItemsSource = (new BuildingOperate(2)).BuildingMenu;
ComBox_Floor.SelectedValuePath = "code";
ComBox_Floor.DisplayMemberPath = "name";
ComBox_Floor.IsDropDownOpen = true;
}
else
{
}
}
private void Combox_File_changed(object sender, SelectionChangedEventArgs e)
{
if (this.ComBox_File.SelectedValue.ToString() == "前置离线")
{
Label_FilePath.Visibility = Visibility.Visible;
Text_FilePath.Visibility = Visibility.Visible;
}
else {
Label_FilePath.Visibility = Visibility.Hidden;
Text_FilePath.Visibility = Visibility.Hidden;
}
}
private void Btn_ReConnection(object sender, RoutedEventArgs e)
{
this.Close();
//if (backgroundWorker.IsBusy)
//{
// ErrorInfo.Content = "线程正忙,请稍后再试";
// ErrorInfo.Visibility = System.Windows.Visibility.Visible;
//}
//else
//{
// ErrorInfo.Visibility = System.Windows.Visibility.Hidden;
// type = 1;
// second = 60;
// timer.Start();
// this.ConnectFailed.Visibility = System.Windows.Visibility.Hidden;
// this.Loading.Visibility = System.Windows.Visibility.Visible;
// backgroundWorker.RunWorkerAsync();
//}
}
private void Btn_ReUpdate(object sender, RoutedEventArgs e)
{
if (backgroundWorker.IsBusy)
{
this.UpdateErrorInfo.Text = "线程正忙,请稍后再试";
UpdateErrorInfo.Visibility = System.Windows.Visibility.Visible;
}
else
{
//type = 2;
//second = 60;
//timer.Start();
UpdateErrorInfo.Visibility = System.Windows.Visibility.Hidden;
this.UpdateFailed.Visibility = System.Windows.Visibility.Hidden;
this.Loading.Visibility = System.Windows.Visibility.Hidden;
deviceinfo.Visibility = System.Windows.Visibility.Visible;
//backgroundWorker.RunWorkerAsync();
}
}
private void Combox_LeftButtonDown(object sender, MouseButtonEventArgs e)
{
ComboBox cm = (ComboBox)sender;
cm.IsDropDownOpen = true;
}
}
}