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