using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Mesnac.Action.Base; using Mesnac.Controls.Base; using System.Windows.Forms; using Mesnac.Codd.Session; using Mesnac.Equips; using System.Xml; using System.IO; using Mesnac.Basic; using System.Threading; namespace Mesnac.Action.Feeding { /// /// 上辅机项目业务基类 /// public class FeedingAction : DatabaseAction { private static bool _isFirstRun = true; //是否首次运行 #region RunIni /// /// 初始化 /// /// private void Ini(RuntimeParameter runtime) { if (_isFirstRun) { Global.PublicVar.Instance.ProjectWizardName = runtime.ProjectWizardName; _isFirstRun = false; } } /// /// 接口方法 /// /// public new void RunIni(RuntimeParameter runtime) { this.Ini(runtime); base.RunIni(runtime); //必须调用 this.SetNetControlVisible(); } /// /// 设置网络版控件的可见性,如果是网络版则可见,如果是单机版则隐藏。 /// 以业务标识中是否包含NetType:Yes为网络控件评判标准 /// public void SetNetControlVisible() { List controls = base.GetAllMCControls(); //如果是单机版则把网络版控件隐藏 if (base.NetType == NetTypes.Local) { foreach (IBaseControl c in controls) { //如果是网络控件 if (c.MCKey != null && c.MCKey.ToLower().Contains("NetType:Yes".ToLower())) { if (c.MCVisible == true) { c.MCVisible = false; } } } } else { foreach (IBaseControl c in controls) { //如果是网络控件 if (c.MCKey != null && c.MCKey.ToLower().Contains("NetType:Yes".ToLower())) { if (c.MCVisible == false) { c.MCVisible = true; } } } } } #endregion #region 辅助方法 #region 数据库日志记录 /// /// 检测本地库中是否存在系统日志表,如果没有则创建系统日志表 /// private void CreateSysLogTable(DbHelper dbHelper) { dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string strSql = "if not exists(select * from sysobjects where name='SysLog') create table SysLog(ObjID int identity(1,1) primary key,EquipCode varchar(10),ClassID varchar(2),ShiftID varchar(2),UserID nvarchar(20) not null,UserName varchar(50),FormID int,FunctionID int,PerformResult nvarchar(500),WorkType nvarchar(50),OperDest nvarchar(50),OperMemo nvarchar(500),RecordTime datetime default getDate(),IsUpFlag int default 0)"; dbHelper.CommandText = strSql; dbHelper.ExecuteNonQuery(); } /// /// 数据库日志记录 /// /// 机台号 /// 用户ID /// /// 用户名 /// 一级菜单 /// 二级菜单 /// 执行结果 /// 备注 public void DBLog(string equipCode, string userId,string userName, int formID, int functionID, string performResult, string worktype, string operdest, string opermemo) { DbHelper dbHelper = this.NewDbHelper(DataSourceFactory.MCDbType.Local); if (dbHelper == null) { base.LogError("获取本地数据连接失败..."); return; } //获取班次、班组信息 int shiftId = 0; int classId = 0; PlanLog planLog = PlanCommon.PlanLog; if (planLog != null) { shiftId = planLog.LastSelectShiftID; classId = planLog.LastClassID; } this.CreateSysLogTable(dbHelper); dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; StringBuilder sb = new StringBuilder(); sb.Append("insert into SysLog(EquipCode,ClassID,ShiftID,UserID,UserName,FormID,FunctionID,PerformResult,WorkType,OperDest,OperMemo,RecordTime) values(@EquipCode,@ClassID,@ShiftID,@UserID,@UserName,@FormID,@FunctionID,@PerformResult,@WorkType,@OperDest,@OperMemo,getDate())"); string strSql = sb.ToString(); dbHelper.CommandText = strSql; dbHelper.AddParameter("@EquipCode", equipCode); dbHelper.AddParameter("@ClassID", classId); dbHelper.AddParameter("@ShiftID", shiftId); dbHelper.AddParameter("@UserID", userId); dbHelper.AddParameter("@UserName", userName); dbHelper.AddParameter("@FormID", formID); dbHelper.AddParameter("@FunctionID", functionID); dbHelper.AddParameter("@PerformResult", performResult); dbHelper.AddParameter("@WorkType", worktype); dbHelper.AddParameter("@OperDest", operdest); dbHelper.AddParameter("@OperMemo", opermemo); dbHelper.ExecuteNonQuery(); } /// /// 写入报警日志 /// /// 报警内容 public void AlarmLog(string remark) { DbHelper dbHelper = this.NewDbHelper(DataSourceFactory.MCDbType.Local); if (dbHelper == null) { base.LogError("获取本地数据连接失败..."); return; } this.CreateSysLogTable(dbHelper); dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; StringBuilder sb = new StringBuilder(); sb.Append("insert into pmtalarmcode(acdetail, acbz1, acbz2) values('',@acbz1,'')"); string strSql = sb.ToString(); dbHelper.CommandText = strSql; dbHelper.AddParameter("@acbz1", remark); dbHelper.ExecuteNonQuery(); } /// /// 数据库日志记录 /// /// 操作类别 /// 日志标题 /// 日志内容 public void DBLog(string operateType, string caption, string content) { //string remark = "{0}-{1}-{2}"; //remark = String.Format(remark, operateType, caption, content); this.DBLog(base.CurrEquipCode, UserInfo.Instance.UserID, UserInfo.Instance.UserName, 0, 0, String.Empty, operateType, caption, content); } #endregion #region SysKeyValue操作 /// /// 更新本地库SysKeyValue表中对应键的值,如果不存在则添加 /// /// 要更新的键 /// 新值 public void UpdateSysValue(string key, string value) { try { string strSql = String.Empty; DbHelper localHelper = base.NewDbHelper(DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("更新SysKeyValue表中对应键的值失败:获取本地数据连接失败!"); } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); if (this.ExistsKey(key)) { strSql = "update SysKeyValue set ssValue = '{0}' where ssKey = @ssKey "; } else { strSql = "insert into SysKeyValue(ssKey,ssValue) values(@ssKey,'{0}')"; } strSql = String.Format(strSql, value); localHelper.CommandText = strSql; localHelper.AddParameter("@ssKey", key); //localHelper.AddParameter("@ssValue", value); localHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("更新SysKeyValue表中对应键的值失败:" + ex.Message, ex); } } /// /// 获取本地库SysKeyValue表中对应键的值 /// /// 要查找的键 /// 返回对应键的值,获取失败返回String.Empty public string GetSysValue(string key) { try { DbHelper localHelper = base.NewDbHelper(DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("获取SysKeyValue表中对应键的值失败:获取本地数据连接失败!"); return String.Empty; } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); string strSql = "select top 1 ssValue from SysKeyValue where ssKey = @ssKey"; localHelper.CommandText = strSql; localHelper.AddParameter("@ssKey", key); object result = localHelper.ToScalar(); if (result == null || result == System.DBNull.Value) { return String.Empty; } else { return result.ToString(); } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("获取SysKeyValue表中对应键的值失败:" + ex.Message, ex); return String.Empty; } } /// /// 判断SysKeyValue中是否存在对应key的记录 /// /// 要检索的key /// 存在返回true,否则返回false public bool ExistsKey(string key) { try { DbHelper localHelper = base.NewDbHelper(DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("获取SysKeyValue表中对应键的值失败:获取本地数据连接失败!"); return false; } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); string strSql = "select count(1) from SysKeyValue where ssKey = @ssKey"; localHelper.CommandText = strSql; localHelper.AddParameter("@ssKey", key); object result = localHelper.ToScalar(); if (result == null || result == System.DBNull.Value || Convert.ToInt32(result) <= 0) { return false; } else { return true; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("获取SysKeyValue表中对应键的值失败:" + ex.Message, ex); return false; } } #endregion #region 根据用户工号 对应网络表中BasUser.HRCode 获取主机手ID /// /// 根据用户工号 对应网络表中BasUser.HRCode 获取主机手ID /// /// 用户工号 /// 成功返回对应主机手ID,失败返回String.Empty public string GetMainHanderCodeByUserCode(string userCode) { try { DbHelper serverHelper = base.NewDbHelper(DataSourceFactory.MCDbType.Server); if (serverHelper == null) { ICSharpCode.Core.LoggingService.Warn("根据用户工号获取主机手ID失败:获取网络数据连接失败!"); return String.Empty; } serverHelper.CommandType = CommandType.Text; serverHelper.ClearParameter(); string strSql = "select top 1 MainHanderCode from BasMainHander where UserCode = @UserID"; serverHelper.CommandText = strSql; serverHelper.AddParameter("@UserID", userCode); object result = serverHelper.ToScalar(); if (result != null && result != System.DBNull.Value) { return result.ToString().Trim(); } else { return String.Empty; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("根据用户工号获取主机手ID失败:" + ex.Message, ex); return String.Empty; } } #endregion #region 通过HRcode获取用户名 /// /// 通过HRcode获取用户名 /// /// HrCode /// public string GetHrName(string HrCode) { if (base.NetType == NetTypes.Local) return null; DbHelper dbHelper = this.NewDbHelper(DataSourceFactory.MCDbType.Server); if (dbHelper == null) { base.LogError("获取本地数据连接失败..."); return string.Empty; } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; StringBuilder sb = new StringBuilder(); sb.Append("SELECT UserName FROM BasUSER WHERE HRCODE=@HRcode"); string strSql = sb.ToString(); dbHelper.CommandText = strSql; dbHelper.AddParameter("@HRcode", HrCode); DataTable dt = dbHelper.ToDataTable(); if (dt.Rows.Count > 0) return dt.Rows[0]["UserName"].ToString(); else return string.Empty; } #endregion #region 刷新自定义设备变量 /// /// 异步刷新自定义设备变量 /// public void RefreshCustomEquip() { try { ThreadPool.QueueUserWorkItem(new WaitCallback(this.ReadEquip)); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("异步刷新自定义设备变量失败:" + ex.Message); } } private void ReadEquip(Object stateInfo) { try { string equipName = base.GetConfigValue("Customer.EquipName", "FeedingCustomer"); //获取PLC设备名称 if (Mesnac.Equips.Factory.Instance.AllEquips.ContainsKey(equipName)) { Mesnac.Equips.Factory.Instance.AllEquips[equipName].Read(); } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("刷新自定义设备变量失败:" + ex.Message); } } #endregion #endregion } }