/// <summary> /// 对设施控制设备编码进行更新 /// </summary> /// <param name="fac">设施控制设备</param> /// <param name="strCode1">编码1</param> /// <param name="strCode2">编码2</param> /// <param name="strCode3">编码3</param> private static void AquireControlCode(FacilityControlDeviceUnit fac, string strCode1, string strCode2, string strCode3) { var list = FacilityControlDeviceUnit.FindAllByFacilityIdAndControlDeviceGroupNum(fac.FacilityID, fac.ControlDeviceUnitGroupNum); //根据设施Id和控制设备组号查找设施控制设备 if (list.Count > 0) { if (!list[0].Code1.EqualIgnoreCase()) { fac.Code1 = list[0].Code1; //编码1不动 } else { fac.Code1 = ""; } if (!list[0].Code2.EqualIgnoreCase()) { fac.Code2 = list[0].Code2; //编码2不动 } else { fac.Code2 = ""; } if (!list[0].Code3.EqualIgnoreCase()) { fac.Code3 = list[0].Code3; //编码3不动 } else { fac.Code3 = ""; } } else { if (!strCode1.IsNullOrWhiteSpace()) { fac.Code1 = FacilityControlDeviceUnit.GetCode1(fac.FacilityID); } if (!strCode2.IsNullOrWhiteSpace()) { fac.Code2 = FacilityControlDeviceUnit.GetCode2(fac.FacilityID); } if (!strCode3.IsNullOrWhiteSpace()) { fac.Code3 = FacilityControlDeviceUnit.GetCode3(fac.FacilityID); } } }
/// <summary> /// 保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { // if (this.lstFarm.SelectedItems.Count == 0) return; if (this.txtName.Text.Trim().Equals("")) { MessageBox.Show("名称不能为空,请输入"); this.txtName.Focus(); return; } //if (this.txtCode1.Text.Trim().Equals("")) //{ // MessageBox.Show("编码1不能为空,请输入"); // this.txtName.Focus(); // return; //} //if (this.txtCode2.Text.Trim().Equals("")) //{ // MessageBox.Show("编码2不能为空,请输入"); // this.txtName.Focus(); // return; //} //if (this.txtCode3.Text.Trim().Equals("")) //{ // MessageBox.Show("编码3不能为空,请输入"); // this.txtName.Focus(); // return; //} //if (this.txtCompanySerialNum.Text.Trim().Equals("")) //{ // MessageBox.Show("公司不能为空,请输入"); // this.txtName.Focus(); // return; //} //List<Facility> facilityList = (from item in this.lstFacility.Items.Cast<ListViewItem>() where item.Checked select item.Tag as Facility).ToList();//设施列表 if (this.farmId != 0) { try { #region 更新基地 var farm = Farm.FindByID(this.farmId); if (farm == null) { farm = new Farm(); farm.Code1 = this.txtCode1.Text; } farm.Code1 = this.txtCode1.Text.Trim(); farm.Code2 = this.txtCode2.Text.Trim(); farm.Code3 = this.txtCode3.Text.Trim(); farm.Name = this.txtName.Text.Trim(); farm.CompanySerialnum = this.txtCompanySerialNum.Text.Trim(); farm.Address = this.txtAddress.Text.Trim(); //PhotoUrl = this.pbPhotoUrl.Text, farm.Lotitude = this.txtLotitude.Text; farm.Latitude = this.txtLatitude.Text; farm.Area = Convert.ToInt32(this.txtArea.Text.Trim()); farm.ContactMan = this.txtContactMan.Text.Trim(); farm.ContactPhone = this.txtContactPhone.Text.Trim(); farm.ContactMobile = this.txtContactMobile.Text.Trim(); //Status = Convert.ToBoolean(this.cbStatus.SelectedValue), farm.Status = this.rbtOnlineStatus.Checked; //CreateTime = this.dtCreateTime.Value, farm.UpdateTime = Convert.ToDateTime(DateTime.Now.ToString("G")); farm.APIKey = this.txtAPIKey.Text; //Upload = Convert.ToBoolean(this.cbUpLoad.SelectedValue), //Upload=this.rbtUpLoad.Checked, //Version = Convert.ToInt32(this.txtVersion.Text), ////Introduce = this.lstIntroduce.Text, farm.Remark = this.txtPwd.Text; farm.Save(); this.farmId = farm.ID; #endregion 更新基地 //MessageBox.Show("更新成功"); } catch (Exception ex) { XTrace.WriteException(ex); MessageBox.Show("更新失败"); return; } } else { try { // 保存 var farm = new Farm(); farm.Code1 = this.txtCode1.Text.Trim(); farm.Code2 = this.txtCode2.Text.Trim(); farm.Code3 = this.txtCode3.Text.Trim(); farm.Name = this.txtName.Text.Trim(); farm.CompanySerialnum = this.txtCompanySerialNum.Text.Trim(); farm.Address = this.txtAddress.Text.Trim(); //PhotoUrl = this.pbPhotoUrl.Text, farm.Lotitude = this.txtLotitude.Text; farm.Latitude = this.txtLatitude.Text; farm.Area = Convert.ToInt32(this.txtArea.Text.Trim()); farm.ContactMan = this.txtContactMan.Text.Trim(); farm.ContactPhone = this.txtContactPhone.Text.Trim(); farm.ContactMobile = this.txtContactMobile.Text.Trim(); //Status = Convert.ToBoolean(this.cbStatus.SelectedValue), farm.Status = this.rbtOnlineStatus.Checked; //CreateTime = this.dtCreateTime.Value, farm.UpdateTime = Convert.ToDateTime(DateTime.Now.ToString("G")); farm.APIKey = this.txtAPIKey.Text; //Upload = Convert.ToBoolean(this.cbUpLoad.SelectedValue), //Upload=this.rbtUpLoad.Checked, //Version = Convert.ToInt32(this.txtVersion.Text), ////Introduce = this.lstIntroduce.Text, farm.Remark = this.txtPwd.Text; farm.Save(); this.farmId = farm.ID; //this.InitFacilityListView(); //MessageBox.Show("保存成功"); } catch (Exception ex) { XTrace.WriteException(ex); MessageBox.Show("新增失败"); return; } } try { var facilityListChecked = new List <Facility>(); var facilityListUnchecked = new List <Facility>(); foreach (ListViewItem item in this.lstFacility.Items) { if (item.Checked == false) { var facility = item.Tag as Facility; //设施 facilityListUnchecked.Add(facility); } else { //facilityListChecked = (from i in this.lstFacility.Items.Cast<ListViewItem>() where i.Checked select i.Tag as Facility).ToList();//显示数据 foreach (ListViewItem lvi in lstFacility.Items) { if (lvi.Checked) { facilityListChecked.Add(lvi.Tag as Facility); } } } } var farm = Farm.FindByID(farmId); //未选中的设施不能删除,只删除编码 foreach (var item in facilityListUnchecked) { if (item.FarmID == this.farmId) { item.Code1 = ""; item.FarmID = 0; item.Update(); //删除映射关系 item.FacilitySensorDeviceUnits.Delete(true); item.FacilityControlDeviceUnits.Delete(true); item.FacilityCameras.Delete(true); } } //更新基地设施 foreach (var item in facilityListChecked) { #region 更新设施 //Facility fac = new Facility(); //fac.ID = item.ID; //fac.FarmID = this.farmId; var fac = Facility.FindByID(item.ID); fac.FarmID = farm.ID; if (this.txtCode1.Text.IsNullOrWhiteSpace()) { fac.Code1 = ""; } else if (!this.txtCode1.Text.IsNullOrWhiteSpace() && !(fac.Code1 + "").StartsWith(farm.Code1)) { fac.Code1 = fac.GetCode1(); } fac.Update(); #endregion 更新设施 #region 设施下的采集设备的更新 IEnumerable <FacilitySensorDeviceUnit> facilitySensorDeviceUnits = FacilitySensorDeviceUnit.FindAllByFacilityID(fac.ID).ToList().OrderBy(fas => fas.ID); if (facilitySensorDeviceUnits.Count() > 0) { foreach (var fas in facilitySensorDeviceUnits) { if (fac.Code1.IsNullOrWhiteSpace()) { fas.Code1 = ""; } else if (!fac.Code1.IsNullOrWhiteSpace() && !(fas.Code1 + "").StartsWith(fac.Code1)) { //XTrace.WriteLine("-->" + fas.Code1 + " -- " + fas.GetCode1()); fas.Code1 = fas.GetCode1(); //XTrace.WriteLine("<--" + fas.Code1); } fas.Save(); } } #endregion 设施下的采集设备的更新 #region 设施下的控制设备的更新 IEnumerable <FacilityControlDeviceUnit> facilityControlDeviceUnits = FacilityControlDeviceUnit.FindAllByFacilityID(fac.ID).ToList().OrderBy(fas => fas.ID); if (facilityControlDeviceUnits.Count() > 0) { foreach (var fas in facilityControlDeviceUnits) { if (fac.Code1.IsNullOrWhiteSpace()) { fas.Code1 = ""; } else if (!fac.Code1.IsNullOrWhiteSpace() && !(fas.Code1 + "").StartsWith(fac.Code1)) { fas.Code1 = fas.GetCode1(); } fas.Update(); } } #endregion 设施下的控制设备的更新 #region 设施下的摄像机设备的更新 IEnumerable <FacilityCamera> facilityCameras = FacilityCamera.FindAllByFacilityID(fac.ID).ToList().OrderBy(fas => fas.ID); if (facilityCameras.Count() > 0) { foreach (var fas in facilityCameras) { if (fac.Code1.IsNullOrWhiteSpace()) { fas.Code1 = ""; } else if (!fac.Code1.IsNullOrWhiteSpace() && !(fas.Code1 + "").StartsWith(fac.Code1)) { fas.Code1 = fas.GetCode1(); } fas.Update(); } } #endregion 设施下的摄像机设备的更新 } this.InitFacilityListView(); this.InitList(); MessageBox.Show("操作成功"); } catch (Exception ex) { XTrace.WriteException(ex); MessageBox.Show("更新设备编码失败"); return; } this.farmId = 0; }
private void advTreeData_DragDrop(object sender, DragEventArgs e) { //var item = e.Data.GetData(e.Data.GetFormats()[0]); if (status) { var location = this.advTreeData.PointToClient(new Point(e.X, e.Y)); var node = this.advTreeData.GetNodeAt(location.X, location.Y); if (node != null && node.Tag.Equals(parent)) { #region 采集设备 if (parent.Equals("SensorDeviceUnit")) { var device = SensorDeviceUnit.FindByID(dragId); var faciliy = node.Parent.Tag as Facility; if (MessageBox.Show("确定要将该设备移动到该设施下吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes) { var dbList = FacilitySensorDeviceUnit.FindAllByFacilityIdAndCollectDeviceId(faciliy.ID, device.ID); if (dbList == null || dbList.Count == 0) { var fas = new FacilitySensorDeviceUnit() { FacilityID = faciliy.ID, SensorDeviceUnitID = device.ID }; fas.Code1 = fas.GetCode1(); int i = fas.Insert(); if (i != 0) { FacilitySensorDeviceUnit.DeleteByFacilityAndSensorDeviceunit(facId, device.ID);//删除原有关系 } } else { var fas = dbList[0]; if (!(fas.Code1 + "").StartsWith(faciliy.Code1)) { fas.Code1 = fas.GetCode1(); fas.Update(); } } } } #endregion #region 控制设备 if (parent.Equals("ControlDeviceUnit")) { var device = ControlDeviceUnit.FindByID(dragId); var faciliy = node.Parent.Tag as Facility; if (MessageBox.Show("确定要将该设备移动到该设施下吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes) { var dbList = FacilityControlDeviceUnit.FindAllByFacilityIdAndControlDeviceGroupNum(faciliy.ID, device.GroupNum); if (dbList == null || dbList.Count == 0) { var fas = new FacilityControlDeviceUnit() { FacilityID = faciliy.ID, ControlDeviceUnitGroupNum = device.GroupNum }; fas.Code1 = fas.GetCode1(); int i = fas.Insert(); if (i != 0) { FacilityControlDeviceUnit.DeleteByFacilityAndControlDeviceunGroupNum(facId, device.GroupNum);//删除原有关系 } } else { var fas = dbList[0]; if (!(fas.Code1 + "").StartsWith(faciliy.Code1)) { fas.Code1 = fas.GetCode1(); fas.Update(); } } InitData(); } } #endregion #region 视频设备 if (parent.Equals("Camera")) { var device = Camera.FindByID(dragId); var faciliy = node.Parent.Tag as Facility; if (MessageBox.Show("确定要将该设备移动到该设施下吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes) { var dbList = FacilityCamera.FindAllByFacilityIdAndCameraId(faciliy.ID, device.ID); if (dbList == null || dbList.Count == 0) { var fas = new FacilityCamera() { FacilityID = faciliy.ID, CameraID = device.ID }; fas.Code1 = fas.GetCode1(); int i = fas.Insert(); if (i != 0) { FacilityCamera.GetDeviceByFacilityIdAndCameraId(facId, device.ID);//删除原有关系 } } else { var fas = dbList[0]; if (!(fas.Code1 + "").StartsWith(faciliy.Code1)) { fas.Code1 = fas.GetCode1(); fas.Update(); } } InitData(); } } #endregion } } else { return; } InitData(); }
/// <summary> /// 计算控制设备的原始值 /// </summary> /// <param name="dev">设施控制设备</param> /// <returns></returns> public static int CalcOriginal(FacilityControlDeviceUnit dev) { var value = 0; //控制设备数值 if (dev == null) { return(value); } var relayType = dev.ControlDeviceUnits[0].RelayTypeName; //Hold-Two if (GetRelayType(relayType) == ControlDeviceTypeEnum.Hold_Two_Status) { value = dev.ControlDeviceUnits[0].OriginalValue; } ////Hold-Three //if (GetRelayType(relayType) == ControlDeviceTypeEnum.Hold_Three_Status) //{ dev.ControlDeviceUnits.ForEach(d => { //负责正转的继电器 if (GetType(relayType, d.ControlJobTypeName) .controlJob.Equals(Hold_Three_ControlCommandEnum.Positive) && d.OriginalValue == 1) { value = 1; } //负责反转的继电器 if (GetType(relayType, d.ControlJobTypeName) .controlJob.Equals(Hold_Three_ControlCommandEnum.Reverse) && d.OriginalValue == 1) { value = -1; } //负责打开的继电器 if (GetType(relayType, d.ControlJobTypeName).controlJob.Equals(Pluse_Two_ControlCommandEnum.Open) && d.OriginalValue == 1) { value = 1; } //负责正转的继电器 if (GetType(relayType, d.ControlJobTypeName) .controlJob.Equals(Pluse_Three_ControlCommandEnum.Positive) && d.OriginalValue == 1) { value = 1; } //负责反转的继电器 if (GetType(relayType, d.ControlJobTypeName) .controlJob.Equals(Pluse_Three_ControlCommandEnum.Reverse) && d.OriginalValue == 1) { value = -1; } }); //} ////Pluse-Two //if (GetRelayType(relayType) == ControlDeviceTypeEnum.Pluse_Two_Status) //{ //dev.ControlDeviceUnits.ForEach(d => // { // }); //} ////Pluse-Three //if (GetRelayType(relayType) == ControlDeviceTypeEnum.Pluse_Three_Status) //{ //dev.ControlDeviceUnits.ForEach(d => //{ //}); //} return(value); }
/// <summary> /// 根据原始值计算控制设备的处理值 /// </summary> /// <param name="fc">设施控制设备</param> /// <returns></returns> public static string CalcProcessValue(FacilityControlDeviceUnit fc) { var value = "关闭"; var devs = fc.ControlDeviceUnits; devs.ForEach(dev => { //负责总控的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Hold_Two_ControlCommandEnum.Open) && dev.OriginalValue == 1) { value = "打开"; } //负责正转的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Hold_Three_ControlCommandEnum.Positive) && dev.OriginalValue == 1) { value = "正转"; } //负责反转的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Hold_Three_ControlCommandEnum.Reverse) && dev.OriginalValue == 1) { value = "反转"; } //负责停止的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Hold_Three_ControlCommandEnum.Stop) && dev.OriginalValue == 1) { value = "停止"; } //负责打开的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Pluse_Two_ControlCommandEnum.Open) && dev.OriginalValue == 1) { value = "打开"; } //负责正转的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Pluse_Three_ControlCommandEnum.Positive) && dev.OriginalValue == 1) { value = "正转"; } //负责反转的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Pluse_Three_ControlCommandEnum.Reverse) && dev.OriginalValue == 1) { value = "反转"; } //负责停止的继电器 if (GetType(dev.RelayTypeName, dev.ControlJobTypeName) .controlJob.Equals(Pluse_Three_ControlCommandEnum.Stop) && dev.OriginalValue == 1) { value = "停止"; } }); return(value); }
/// <summary> /// 获取控制指令 /// </summary> private List <DeviceControlCommand> GetControlCommand() { var controlDevices = ControlDeviceUnit.FindAllWithCache().ToList(); if (!controlDevices.Any() && controlDevices == null) { return(null); } //查询出Code1不为空的基地 var farms = Farm.FindAll().ToList().Where(f => !f.Code1.IsNullOrWhiteSpace()); var devCommands = new List <DeviceControlCommand>(); //校验所有编码 var enumerable = farms as Farm[] ?? farms.ToArray(); if (!CheckCode(enumerable)) { return(null); } enumerable.ToList().ForEach(farm => { //本地数据库中的设施 var facilitysInDb = farm.Facilitys; ////从接口获存在的设施 //var facs_platform = GetPlatformFacilitys(farm); if (facilitysInDb.Count > 0) { facilitysInDb.ToList().ForEach(fInDb => { var entity = AwEntityHelper.GetEntity(farm.Code1); #if DEBUG var sw = new Stopwatch(); var accessResult = false; sw.Start(); #endif var cmds = _facilityApi.GetControlCommand(entity, _transport, fInDb.Code1); var controlCmds = cmds as IList <ControlCmd> ?? cmds.ToList(); if (controlCmds.Any()) { accessResult = true; controlCmds.ToList().ForEach(cmdDb => { var devCommand = new DeviceControlCommand { Code1 = cmdDb.Serialnum, Command = cmdDb.Command.ToString(), ControlContinueTime = cmdDb.ContinueTime, CreateTime = DateTime.Now, ControlDeviceUnitGroupNum = FacilityControlDeviceUnit.FindAllByCode1(cmdDb.DeviceCode)[0] .ControlDeviceUnitGroupNum }; devCommand.Save(); //保存到本地数据库 devCommands.Add(devCommand); }); } else { accessResult = false; //Debugger.Break(); } LogHelper.Debug("{0}获取控制指令{1}条", fInDb.Name, controlCmds.Count()); #if DEBUG sw.Stop(); var apiAccesslog = new ApiAccessLog { ApiName = "获取控制指令", Result = accessResult, CreateTime = DateTime.Now, CostTime = Convert.ToInt32(sw.ElapsedMilliseconds) }; apiAccesslog.Save(); LogHelper.Debug("获取控制指令花费的时间:{0}", sw.ElapsedMilliseconds.ToString()); #endif }); } }); if (!devCommands.Any()) { return(devCommands); } var sw1 = new Stopwatch(); sw1.Start(); devCommands.ForEach(cmd => { LogHelper.Debug("正在执行控制指令"); Control( FacilityControlDeviceUnit.FindAllByControlDeviceUnitGroupNum(cmd.ControlDeviceUnitGroupNum)[0] .ControlDeviceUnitGroupNum, Convert.ToInt32(cmd.Command)); Thread.Sleep(50); }); sw1.Stop(); LogHelper.Debug("执行所有控制指令花费的时间:{0}", sw1.ElapsedMilliseconds.ToString()); return(devCommands); }
/// <summary> /// 控制设备 /// </summary> /// <param name="deviceId">控制设备ID</param> /// <param name="status">设备状态</param> private void Control(int deviceId, int status) { const bool result = false; List <FacilityControlDeviceUnit> fac = FacilityControlDeviceUnit.FindAllByControlDeviceUnitGroupNum(deviceId); if (fac == null || !fac.Any()) { return; } var device = ControlDeviceUnit.FindByID(deviceId); if (device == null) { return; } string reason = null; TransportTypeEnum type; if ( !Enum.TryParse(device.ModularDevice.CommunicateDevice.CommunicateDeviceTypeName, true, out type)) { type = TransportTypeEnum.Unknow; } var host = device.ModularDevice.CommunicateDevice.Args1; var e = Convert.ToInt32(device.ModularDevice.CommunicateDevice.Args2); var timeout = Convert.ToInt32(device.ModularDevice.CommunicateDevice.Args3); //获取Transport var transport = TransportFactory.GetTransport(type, host, e, timeout); var modbusControlDevice = new ModbusControlDevice(transport, Convert.ToByte(device.ModularDevice.Address)); try { //待编写控制指令 //if (device.IsComposite) //三态设备 正转 反转 停止 //{ // if (status == -1) // { // result = modbusControlDevice.Write(device.RegisterAddress1, true); // } // else if (status == 0) // { // result = modbusControlDevice.Write(device.RegisterAddress1, false); // result = modbusControlDevice.Write(device.RegisterAddress2, false); // } // else if (status == 1) // { // result = modbusControlDevice.Write(device.RegisterAddress2, true); // } //} //else //两态设备 开 关 //{ // result = modbusControlDevice.Write(device.RegisterAddress1, status == 1 ? true : false); //} } catch (Exception ex) { reason = ex.ToString(); } LogHelper.Debug("指令执行" + (result ? "成功" : "失败")); DeviceControlCommand.FindAllByControlDeviceUnitID(deviceId).ToList().ForEach(deviceControlCommand => { var controlResult = new ControlResult { Serialnum = deviceControlCommand.Code1, //Command = status, //FacilityCode = fac[0].Facility.Code1, //DeviceCode = fac[0].Code1, //ContinueTime = 5, Time = DateTime.Now, Result = result, FailReason = reason }; var devControlLog = new DeviceControlLog { Code1 = deviceControlCommand.Code1, ControlDeviceUnitID = deviceControlCommand.ControlDeviceUnitGroupNum, ControlResult = result, CreateTime = DateTime.Now, DeviceControlCommand = deviceControlCommand, DeviceControlCommandID = deviceControlCommand.ID, DeviceValue = Convert.ToInt32(CalcControlDeviceValue.CalcProcessValue(fac[0])), ShowValue = CalcControlDeviceValue.CalcOriginal(fac[0]).ToString(), FailReason = reason }; devControlLog.Save(); UploadControlCommand(controlResult, fac[0].Facility); //上传控制指令 Thread.Sleep(50); }); }
private void btnSave_Click(object sender, EventArgs e) { #region 判断条件 if (this.txtName.Text.IsNullOrWhiteSpace()) { MessageBox.Show("名称不能为空,请输入"); this.txtName.Focus(); return; } #endregion 判断条件 var facility = new Facility(); if (this.facilityId != 0) { #region 更新 facility = Facility.FindByID(this.facilityId); facility.Name = this.txtName.Text; facility.FacilityTypeSerialnum = this.cbFacilityType.SelectedValue.ToString(); facility.FarmID = Convert.ToInt32(this.cbFarm.SelectedValue); //facility.Code1 = facility.GetCode1(); //facility.Code2 = this.txtCode2.Text; //facility.Code3 = this.txtCode3.Text; facility.ContactPhone = this.txtContactPhone.Text; //facility.CreateTime = this.dtCreateTime.Value; facility.UpdateTime = DateTime.Now; //facility.Upload = this.rbtUpLoad.Checked; //facility.Version = Convert.ToInt32(this.txtVersion.Text); facility.Status = this.rbtOnlineStatus.Checked; facility.Address = this.txtAddress.Text; facility.Introduce = this.txtIntroduce.Text; facility.ContactMan = this.txtContactMan.Text; facility.ContactMobile = this.txtContactMobile.Text; //facility.Remark = this.txtRemark.Text; //facility.PhotoUrl = this.pbPhotoUrl.Text; try { // Facility.Update(facility); facility.Update(); } catch (Exception ex) { MessageBox.Show("更新失败" + ex.Message); } #endregion 更新 } else { #region 保存设施 facility.Name = this.txtName.Text; facility.FarmID = Convert.ToInt32(this.cbFarm.SelectedValue); if (!(facility.Code1 + "").StartsWith(facility.Farm.Code1 + "")) { facility.Code1 = facility.GetCode1(); } //if (!facility.Farm.Code2.IsNullOrWhiteSpace()) //{ // //facility.Code2 = facility.Farm.Code2 + "G00" + facility.ID; // facility.Code1 = Facility.GetCode2(facility.Farm.ID); //} //if (!facility.Farm.Code3.IsNullOrWhiteSpace()) //{ // //facility.Code3 = facility.Farm.Code3 + "G00" + facility.ID; // facility.Code1 = Facility.GetCode3(facility.Farm.ID); //} facility.FacilityTypeSerialnum = this.cbFacilityType.SelectedValue.ToString(); facility.FarmID = Convert.ToInt32(this.cbFarm.SelectedValue); facility.ContactPhone = this.txtContactPhone.Text; facility.CreateTime = DateTime.Now; facility.UpdateTime = DateTime.Now; //facility.Upload = Convert.ToBoolean(this.cbUpLoad.SelectedValue); //facility.Upload = this.rbtUpLoad.Checked; //facility.Version = Convert.ToInt32(this.txtVersion.Text); //facility.Status = Convert.ToBoolean(this.cbStatus.SelectedValue); facility.Status = this.rbtOnlineStatus.Checked; facility.Address = this.txtAddress.Text; facility.Introduce = this.txtIntroduce.Text; facility.ContactMan = this.txtContactMan.Text; facility.ContactMobile = this.txtContactMobile.Text; //facility.Remark = this.txtRemark.Text; //facility.PhotoUrl = this.pbPhotoUrl.Text; #endregion 保存设施 try { //Facility.Save(facility); facility.Insert(); } catch (Exception ex) { MessageBox.Show("新增失败" + ex); } } #region 获取所有选中的设备 //List<SensorDeviceUnit> sensorDeviceUnitList = (from item in this.listView2.Items.Cast<ListViewItem>() where item.Checked select item.Tag as SensorDeviceUnit).ToList(); var sensorDeviceUnitListChecked = new List <SensorDeviceUnit>(); var sensorDeviceUnitListUncheck = new List <SensorDeviceUnit>(); foreach (ListViewItem item in this.listView2.Items) { if (item.Checked == false) { var sensorDeviceUnit = item.Tag as SensorDeviceUnit; //未选中的采集设备 sensorDeviceUnitListUncheck.Add(sensorDeviceUnit); } else { sensorDeviceUnitListChecked = (from i in this.listView2.Items.Cast <ListViewItem>() where i.Checked select i.Tag as SensorDeviceUnit).ToList(); //选中的采集设备 } } //List<FacilityControlDeviceUnit> facilityControlDeviceUnitList = (from item in this.listView3.Items.Cast<ListViewItem>() where item.Checked select item.Tag as FacilityControlDeviceUnit).ToList();//控制设备 var controlDeviceUnitListChecked = new List <ControlDeviceUnit>(); var controlDeviceUnitListUnchecked = new List <ControlDeviceUnit>(); foreach (ListViewItem item in this.listView3.Items) { if (item.Checked == false) { var controlDeviceUnit = item.Tag as ControlDeviceUnit; //未选中的控制设备 controlDeviceUnitListUnchecked.Add(controlDeviceUnit); } else { controlDeviceUnitListChecked = (from i in this.listView3.Items.Cast <ListViewItem>() where i.Checked select i.Tag as ControlDeviceUnit).ToList(); //选中的控制设备 } } //List<FacilityCamera> facilityCameraList = (from item in this.listView4.Items.Cast<ListViewItem>() where item.Checked select item.Tag as FacilityCamera).ToList();//摄像机设备 var cameraListChecked = new List <Camera>(); var cameraListUnchecked = new List <Camera>(); foreach (ListViewItem item in this.listView4.Items) { if (item.Checked == false) { var camera = item.Tag as Camera; //未选中的摄像机设备 cameraListUnchecked.Add(camera); } else { cameraListChecked = (from i in this.listView4.Items.Cast <ListViewItem>() where i.Checked select i.Tag as Camera) .ToList(); //选中的摄像机设备 } } #endregion 获取所有选中的设备 #region 更新采集设备 foreach (var sensorDevice in sensorDeviceUnitListChecked) { var dbList = FacilitySensorDeviceUnit.FindAllByFacilityIdAndCollectDeviceId(this.facilityId, sensorDevice.ID); if (dbList == null || dbList.Count == 0) { var fas = new FacilitySensorDeviceUnit() { FacilityID = this.facilityId, SensorDeviceUnitID = sensorDevice.ID }; fas.Code1 = fas.GetCode1(); fas.Insert(); } else { var fas = dbList[0]; if (!(fas.Code1 + "").StartsWith(facility.Code1)) { fas.Code1 = fas.GetCode1(); fas.Update(); } } } foreach (var sensorDevice in sensorDeviceUnitListUncheck) { FacilitySensorDeviceUnit.DeleteByFacilityAndSensorDeviceunit(this.facilityId, sensorDevice.ID); } this.InitCollectDeviceListView(); #endregion 更新采集设备 #region 更新控制设备 foreach (var controlDevice in controlDeviceUnitListChecked) { var dbList = FacilityControlDeviceUnit.FindAllByFacilityIdAndControlDeviceGroupNum(this.facilityId, controlDevice.GroupNum); if (dbList == null || dbList.Count == 0) { var fac = new FacilityControlDeviceUnit() { FacilityID = this.facilityId, ControlDeviceUnitGroupNum = controlDevice.GroupNum, Name = controlDevice.Name.ToString().Substring(0, controlDevice.Name.ToString().IndexOf("-")) }; fac.Code1 = fac.GetCode1(); fac.Insert(); } else { var fac = dbList[0]; if (!(fac.Code1 + "").StartsWith(facility.Code1)) { fac.Code1 = fac.GetCode1(); fac.Update(); } } } foreach (var controlDevice in controlDeviceUnitListUnchecked) { FacilityControlDeviceUnit.DeleteByFacilityAndControlDeviceunGroupNum(this.facilityId, controlDevice.GroupNum); } this.InitControlDeviceListView(); #endregion 更新控制设备 #region 更新摄像机设备 foreach (var facilityCamera in cameraListChecked) { var dbList = FacilityCamera.FindAllByFacilityIdAndCameraId(this.facilityId, facilityCamera.ID); if (dbList == null || dbList.Count == 0) { var fac = new FacilityCamera() { FacilityID = this.facilityId, CameraID = facilityCamera.ID }; fac.Code1 = fac.GetCode1(); fac.Save(); } else { var fac = dbList[0]; if (!(fac.Code1 + "").StartsWith(facility.Code1)) { fac.Code1 = fac.GetCode1(); fac.Update(); } } } foreach (var camera in cameraListUnchecked) { FacilityCamera.DeleteByFacilityAndCamera(this.facilityId, camera.ID); } this.InitCameraDeviceListView(); #endregion 更新摄像机设备 this.InitFacilityListView(); MessageBox.Show("更新成功"); }
/// <summary> /// 加载树结构 /// </summary> private void InitTreeView() { this.treeView1.Nodes.Clear(); // 获取所有的设施列表 List <Facility> facilityList = Facility.FindAll(); if (facilityList.Count > 0 && facilityList.Any()) { var firstNode = new TreeNode(facilityList[0].FarmName) { Tag = "FisrtPag" }; this.treeView1.Nodes.Add(firstNode); foreach (var facility in facilityList) { var allnode = new TreeNode(facility.Name) { ImageIndex = 0, Tag = facility }; //采集设备 var collectnode = new TreeNode("采集设备") { ImageIndex = 1, Tag = "SensorDeviceUnit" }; List <FacilitySensorDeviceUnit> sensorDeviceUnitList = FacilitySensorDeviceUnit.FindAllByFacilityID(facility.ID); if (sensorDeviceUnitList == null) { return; } foreach (var sensorDeviceUnit in sensorDeviceUnitList) { var treeNode = new TreeNode(SensorDeviceUnit.FindByID(sensorDeviceUnit.SensorDeviceUnitID).Name.ToString()); treeNode.Tag = sensorDeviceUnit; collectnode.Nodes.Add(treeNode); } allnode.Nodes.Add(collectnode); //控制设备 var controlnode = new TreeNode("控制设备") { ImageIndex = 1, Tag = "ControlDeviceUnit" }; List <FacilityControlDeviceUnit> controlDeviceUnitList = FacilityControlDeviceUnit.FindAllByFacilityID(facility.ID); if (controlDeviceUnitList == null) { return; } foreach (var controlDeviceUnit in controlDeviceUnitList) { var treeNode = new TreeNode( ControlDeviceUnit.FindByGroupNum(controlDeviceUnit.ControlDeviceUnitGroupNum)[0].Name .ToString()); treeNode.Tag = controlDeviceUnit; controlnode.Nodes.Add(treeNode); } allnode.Nodes.Add(controlnode); ////摄像机设备 //var cameranode = new TreeNode("摄像机设备") { ImageIndex = 1, Tag = "facilityCamera" }; //List<FacilityCamera> cameraList = FacilityCamera.FindAllByFacilityID(facility.ID); //if (cameraList == null) //{ // return; //} //foreach (FacilityCamera facilityCamera in cameraList) //{ // var treeNode = new TreeNode(facilityCamera.CameraName); // treeNode.Tag = facilityCamera; // cameranode.Nodes.Add(treeNode); //} //allnode.Nodes.Add(cameranode); ////展示设备 //var showDevicenode = new TreeNode("显示设备") { ImageIndex = 1, Tag = "showDevice" }; //List<ShowDevice> showDeviceList = ShowDevice.FindAll(); //if (showDeviceList == null) //{ // return; //} //foreach (ShowDevice showDevice in showDeviceList) //{ // var treeNode = new TreeNode(showDevice.Name); // treeNode.Tag = showDevice; // showDevicenode.Nodes.Add(treeNode); //} //allnode.Nodes.Add(showDevicenode); this.treeView1.Nodes.Add(allnode); } this.treeView1.ExpandAll(); } }
/// <summary> /// 查询数据 /// </summary> /// <param name="id"> /// </param> private void SearchDataInfo(int id, string tag) { this.listView1.Items.Clear(); if (tag.EqualIgnoreCase("SensorDeviceUnit")) { string data; var fs = FacilitySensorDeviceUnit.FindByID(id); if (fs.SensorDeviceUnit.Sensor.Code.EqualIgnoreCase("collect-weather-YuXueGanZhi")) { data = fs.SensorDeviceUnit.ProcessedValue == 1 ? "有" : "无"; } else { data = fs.SensorDeviceUnit.ProcessedValue.ToString(); } var strings = new[] { fs.Code1, fs.SensorDeviceUnit.Name, data, fs.SensorDeviceUnit.Sensor.Unit, fs.SensorDeviceUnit.UpdateTime.ToString() }; var listViewItem = new ListViewItem(strings); this.listView1.Items.Add(listViewItem); } else if (tag.EqualIgnoreCase("ControlDeviceUnit")) { string data; var controlList = ControlDeviceUnit.FindByGroupNum(id); if (controlList.Count > 0) { controlList.ForEach(c => { data = c.ProcessedValue; var strings = new[] { c.FacilityControlDeviceUnits[0].Code1, c.Name, data, "", c.UpdateTime.ToString() }; var listViewItem = new ListViewItem(strings); this.listView1.Items.Add(listViewItem); }); } } var fsList = FacilitySensorDeviceUnit.FindAllByFacilityID(id); var fcList = FacilityControlDeviceUnit.FindAllByFacilityID(id); string data1; if (fsList.Count > 0) { fsList.ForEach( fs => { if (fs.SensorDeviceUnit.Sensor.Code.EqualIgnoreCase("collect-weather-YuXueGanZhi")) { data1 = fs.SensorDeviceUnit.ProcessedValue == 1 ? "有" : "无"; } else { data1 = fs.SensorDeviceUnit.ProcessedValue.ToString(); } var strings = new[] { fs.Code1, fs.SensorDeviceUnit.Name, data1, fs.SensorDeviceUnit.Sensor.Unit, fs.SensorDeviceUnit.UpdateTime.ToString() }; var listViewItem = new ListViewItem(strings); this.listView1.Items.Add(listViewItem); }); } if (fcList.Count > 0) { fcList.ForEach(fc => { var controls = ControlDeviceUnit.FindByGroupNum(fc.ControlDeviceUnitGroupNum); controls.ForEach(control => { data1 = control.ProcessedValue; var strings = new[] { fc.Code1, control.Name, data1, "", control.UpdateTime.ToString() }; var listViewItem = new ListViewItem(strings); this.listView1.Items.Add(listViewItem); }); }); } }
/// <summary> /// 同步控制设备 /// </summary> /// <returns></returns> private bool SyncControlDevices() { var syncResult = false; //控制设备 var controlDevices = FacilityControlDeviceUnit.FindAllWithCache() .ToList() .Where(c => c.Code1.Substring(13, 1).EqualIgnoreCase("K")); var facilityControlDeviceUnits = controlDevices as FacilityControlDeviceUnit[] ?? controlDevices.ToArray(); if (facilityControlDeviceUnits.Any()) { //逐个上传 facilityControlDeviceUnits.ToList().ForEach(cd => { #region 构建DeviceModel var code = cd.Code1; var devs = cd.ControlDeviceUnits; //改设施控制设备所拥有的所有控制设备继电器的集合 if (devs != null) { var originalValue = CalcControlDeviceValue.CalcOriginal(cd); var processedValue = CalcControlDeviceValue.CalcProcessValue(cd); var deviceModel = new DeviceModel { Serialnum = code, Name = cd.Name, DeviceTypeSerialnum = devs[0].DeviceTypeSerialnum, FacilitySerialnum = cd.Facility.Code1, ProcessedValue = originalValue, ShowValue = processedValue, UpdateTime = DateTime.Now, RelayType = devs[0].RelayTypeName }; #endregion 构建DeviceModel var entity = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1); #if DEBUG var sw = new Stopwatch(); sw.Start(); #endif try { var trans = ApiTransportHelper.GetTransport(); var responseResult = _deviceApi.QueryDevice(entity, trans, deviceModel.Serialnum); if (responseResult.Data != null) { var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1); var result = _deviceApi.UpdateDevice(entity1, trans, deviceModel); trans.Dispose(); LogHelper.Debug("更新控制设备{0}:{1}", deviceModel.Serialnum, result ? "成功" : "失败"); syncResult = result; } else { var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1); var result = _deviceApi.AddDevice(entity1, trans, deviceModel); trans.Dispose(); LogHelper.Debug("添加控制设备{0}:{1}", deviceModel.Serialnum, result ? "成功" : "失败"); syncResult = result; } } catch (Exception ex) { LogHelper.Fatal(ex.ToString()); } #if DEBUG sw.Stop(); var apiAccesslog = new ApiAccessLog { ApiName = "同步控制设备", Result = syncResult, CreateTime = DateTime.Now, CostTime = Convert.ToInt32(sw.ElapsedMilliseconds) }; apiAccesslog.Save(); LogHelper.Debug("同步控制设备耗时" + sw.ElapsedMilliseconds.ToString() + "ms"); #endif } }); } //return syncResult; return(true); }