using FileDataUpload.Common; using FileDataUpload.Entity; using FileDataUpload.FileOperate; using FileDataUpload.Mqtt; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace FileDataUpload.viewModel { public class MainWindowViewModel: ViewModelBase { private readonly FileHelper fileHelper = FileHelper.Instance; private readonly JsonChange jsonChange = JsonChange.Instance; private readonly MqttClient client = MqttClient.Instance; private readonly LogHelper logHelper = LogHelper.Instance; private AppConfig appConfig = AppConfig.Instance; private ObservableCollection listItems = new ObservableCollection(); [Obsolete] public MainWindowViewModel() { try { client.PrintMessageReceivedEvent += PrintMessageToListBox; ConnectCommand = new RelayCommand(Connect); DisConnectCommand = new RelayCommand(DisConnect); SubscriptionCommand = new RelayCommand(Subscription); UnsubscribeCommand = new RelayCommand(Unsubscribe); UploadFileDataCommand = new RelayCommand(UploadFileData); ChooseFileCommand = new RelayCommand(ChooseFile); PushMessageCommand = new RelayCommand(PushMessage); borkerIp = "scada.midea.com"; borkerPort = "1883"; PrintMessageToListBox("文件数据上传程序初始化成功"); }catch(Exception ex) { PrintMessageToListBox($"文件数据上传程序初始化失败:{ex.Message}"); } } #region Command /// /// 连接 /// public RelayCommand ConnectCommand { get; set; } /// /// 断开 /// public RelayCommand DisConnectCommand { get; set; } /// /// 订阅 /// public RelayCommand SubscriptionCommand { get; set; } /// /// 取消订阅 /// public RelayCommand UnsubscribeCommand { get; set; } /// /// 选择文件 /// public RelayCommand ChooseFileCommand { get; set; } /// /// 上传文件数据 /// public RelayCommand UploadFileDataCommand { get; set; } /// /// 推送消息 /// public RelayCommand PushMessageCommand { get; set; } #endregion private IEnumerable listBoxData; /// /// LisBox数据模板 /// public IEnumerable ListBoxData { get { return listBoxData; } set { listBoxData = value; RaisePropertyChanged(() => ListBoxData); } } public String borkerIp = String.Empty; public String borkerPort = String.Empty; public String clientId = String.Empty; public String userName = String.Empty; public String password = String.Empty; public String topical = String.Empty; public String messageStr = String.Empty; public String BorkerIp { get { return borkerIp; } set { borkerIp = value; RaisePropertyChanged(()=> BorkerIp); } } public String BorkerPort { get { return borkerPort; } set { borkerPort = value; RaisePropertyChanged(()=> BorkerPort); } } public String ClientId { get { return clientId; } set { clientId = value; RaisePropertyChanged(()=> ClientId); } } public String UserName { get { return userName; } set { userName = value; RaisePropertyChanged(()=> UserName); } } public String Password { get { return password; } set { password = value; RaisePropertyChanged(()=> Password); } } public String Topical { get { return topical; } set { topical = value; RaisePropertyChanged(()=> Topical); } } public String MessageStr { get { return messageStr; } set { messageStr = value; RaisePropertyChanged(() => MessageStr); } } /// /// 建立连接 /// public void Connect() { if(string.IsNullOrEmpty(BorkerIp) || string.IsNullOrEmpty(BorkerPort)) { PrintMessageToListBox("连接失败:Borker IP、Port不允许为空"); return; } if (string.IsNullOrEmpty(ClientId) || string.IsNullOrEmpty(UserName) || string.IsNullOrEmpty(Password)) { PrintMessageToListBox("连接失败:ClientId、UserName、Password不允许为空"); return; } client.Connect(BorkerIp, Convert.ToInt32(BorkerPort), ClientId,UserName,Password); } /// /// 断开连接 /// public void DisConnect() { client.DisConnect(); } /// /// 订阅主题 /// public void Subscription() { if (string.IsNullOrEmpty(topical)) { PrintMessageToListBox("订阅主题不允许为空"); return; } client.SubscriptionAsync(topical); } /// /// 取消订阅 /// public void Unsubscribe() { if (string.IsNullOrEmpty(topical)) { PrintMessageToListBox("取消订阅主题不允许为空"); return; } client.Unsubscribe(topical); } /// /// 选择文件 /// [System.Obsolete] public void ChooseFile() { string fileName = ""; OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Multiselect = true; //该值确定是否可以选择多个文件 openFileDialog.Title = "请选择文件"; //弹窗的标题 openFileDialog.InitialDirectory = "D:\\"; //默认打开的文件夹的位置 openFileDialog.Filter = "MicroSoft Excel文件(*.xlsx)|*.xlsx|所有文件(*.*)|*.*"; //筛选文件 openFileDialog.ShowHelp = true; //是否显示“帮助”按钮 if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { fileName = openFileDialog.FileName; var info = fileHelper.ReadExcelFile_New(fileName); //var info = fileHelper.ReadExcelFile(fileName); if (info != null) { MessageStr = jsonChange.ModeToJson(info); PrintMessageToListBox($"文件读取成功:{MessageStr}"); } else { PrintMessageToListBox($"文件读取失败,请仔细检查文件格式"); } } } [Obsolete] public void UploadFileData() { string fileName = ""; OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Multiselect = true; //该值确定是否可以选择多个文件 openFileDialog.Title = "请选择文件"; //弹窗的标题 openFileDialog.InitialDirectory = "D:\\"; //默认打开的文件夹的位置 openFileDialog.Filter = "MicroSoft Excel文件(*.xlsx)|*.xlsx|所有文件(*.*)|*.*"; //筛选文件 openFileDialog.ShowHelp = true; //是否显示“帮助”按钮 if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { fileName = openFileDialog.FileName; UploadFileData(fileName); } } [Obsolete] private async void UploadFileData(string path) { try { int pushFlag = 0; Dictionary> info = fileHelper.ReadExcelFile_New(path); if (info != null) { borkerIp = "scada.midea.com"; borkerPort = "1883"; foreach (var item in info) { switch (item.Key) { case "铆压环": clientId = "EV62Q0000501YASM346"; userName = "EV62Q0000501YASM346|1"; password = "30dc225be0cb418b974b68eb10339b31"; pushFlag = appConfig.pushFlag_RivetingRing + 1; break; case "限位器": clientId = "EV33210110YTJDMC001"; userName = "EV33210110YTJDMC001|1"; password = "cebf88bcc61147c1a42a4749fadf2ed1"; pushFlag = appConfig.pushFlag_Stopper + 1; break; case "排气阀片": clientId = "EV33200210YTJDMC008"; userName = "EV33200210YTJDMC008|1"; password = "396bf2a332f64810a12a0385cae8c5a9"; pushFlag = appConfig.pushFlag_displacingValve + 1; break; } this.Connect(); await Task.Delay(1000 * 5); var @params = item.Value.OrderBy(x => Convert.ToInt32(x.data.propertyCode.Substring(3, x.data.propertyCode.Length - 3))).ToList(); foreach (var param in @params) { param.data.deviceCode = ClientId; PrintMessageToListBox($"{item.Key}---上传{param.data.propertyCode}数据:{jsonChange.ModeToJson(param)}"); topical = $"/sys/932e4a47e5414e058fdbd067a4942247/device/{clientId}/thing/property/{param.data.propertyCode}/post"; if (param.data.propertyCode == "tag10") { param.data.propertyValue = pushFlag; } messageStr = jsonChange.ModeToJson(param); this.PushMessage(); await Task.Delay(1000 * 1); } UpdatePushFlag(item.Key); this.DisConnect(); } } else { PrintMessageToListBox("文件读取失败,请仔细检查文件格式"); } }catch(Exception ex) { PrintMessageToListBox($"文件解析上传异常:{ex.Message}"); } } public void PushMessage() { try { if (string.IsNullOrEmpty(Topical) || string.IsNullOrEmpty(MessageStr)) { PrintMessageToListBox("推送消息主题、内容不允许为空"); return; } client.Publish(Topical, MessageStr); }catch(Exception ex) { PrintMessageToListBox($"消息推送异常:{ex.Message}"); } } /// /// listBox绑定日志 /// /// private void PrintMessageToListBox(string message) { logHelper.Info(message); listItems.Add($"{DateTime.Now.ToString("HH:mm:ss")}==>{message}"); ListBoxData = listItems.OrderByDescending(x=>x); } /// /// 更新推送标志位 /// /// private void UpdatePushFlag(string sheetName) { switch (sheetName) { case "铆压环": appConfig.pushFlag_RivetingRing = appConfig.pushFlag_RivetingRing + 1; break; case "限位器": appConfig.pushFlag_Stopper = appConfig.pushFlag_Stopper + 1; break; case "排气阀片": appConfig.pushFlag_displacingValve = appConfig.pushFlag_displacingValve + 1; break; } } } }