|
|
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
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 上辅机项目业务基类
|
|
|
/// </summary>
|
|
|
public class FeedingAction : DatabaseAction
|
|
|
{
|
|
|
private static bool _isFirstRun = true; //是否首次运行
|
|
|
#region RunIni
|
|
|
/// <summary>
|
|
|
/// 初始化
|
|
|
/// </summary>
|
|
|
/// <param name="runtime"></param>
|
|
|
private void Ini(RuntimeParameter runtime)
|
|
|
{
|
|
|
if (_isFirstRun)
|
|
|
{
|
|
|
Global.PublicVar.Instance.ProjectWizardName = runtime.ProjectWizardName;
|
|
|
_isFirstRun = false;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 接口方法
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
public new void RunIni(RuntimeParameter runtime)
|
|
|
{
|
|
|
this.Ini(runtime);
|
|
|
base.RunIni(runtime); //必须调用
|
|
|
this.SetNetControlVisible();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设置网络版控件的可见性,如果是网络版则可见,如果是单机版则隐藏。
|
|
|
/// 以业务标识中是否包含NetType:Yes为网络控件评判标准
|
|
|
/// </summary>
|
|
|
public void SetNetControlVisible()
|
|
|
{
|
|
|
List<IBaseControl> 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 数据库日志记录
|
|
|
/// <summary>
|
|
|
/// 检测本地库中是否存在系统日志表,如果没有则创建系统日志表
|
|
|
/// </summary>
|
|
|
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();
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 数据库日志记录
|
|
|
/// </summary>
|
|
|
/// <param name="equipCode">机台号</param>
|
|
|
/// <param name="userId">用户ID</param>
|
|
|
/// /// <param name="userName">用户名</param>
|
|
|
/// <param name="formID">一级菜单</param>
|
|
|
/// <param name="functionID">二级菜单</param>
|
|
|
/// <param name="performResult">执行结果</param>
|
|
|
/// <param name="remark">备注</param>
|
|
|
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();
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 写入报警日志
|
|
|
/// </summary>
|
|
|
/// <param name="remark">报警内容</param>
|
|
|
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();
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 数据库日志记录
|
|
|
/// </summary>
|
|
|
/// <param name="operateType">操作类别</param>
|
|
|
/// <param name="caption">日志标题</param>
|
|
|
/// <param name="content">日志内容</param>
|
|
|
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操作
|
|
|
|
|
|
/// <summary>
|
|
|
/// 更新本地库SysKeyValue表中对应键的值,如果不存在则添加
|
|
|
/// </summary>
|
|
|
/// <param name="key">要更新的键</param>
|
|
|
/// <param name="value">新值</param>
|
|
|
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);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取本地库SysKeyValue表中对应键的值
|
|
|
/// </summary>
|
|
|
/// <param name="key">要查找的键</param>
|
|
|
/// <returns>返回对应键的值,获取失败返回String.Empty</returns>
|
|
|
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;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 判断SysKeyValue中是否存在对应key的记录
|
|
|
/// </summary>
|
|
|
/// <param name="key">要检索的key</param>
|
|
|
/// <returns>存在返回true,否则返回false</returns>
|
|
|
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
|
|
|
|
|
|
/// <summary>
|
|
|
/// 根据用户工号 对应网络表中BasUser.HRCode 获取主机手ID
|
|
|
/// </summary>
|
|
|
/// <param name="userCode">用户工号</param>
|
|
|
/// <returns>成功返回对应主机手ID,失败返回String.Empty</returns>
|
|
|
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获取用户名
|
|
|
/// <summary>
|
|
|
/// 通过HRcode获取用户名
|
|
|
/// </summary>
|
|
|
/// <param name="HrCode">HrCode</param>
|
|
|
/// <returns></returns>
|
|
|
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 刷新自定义设备变量
|
|
|
|
|
|
/// <summary>
|
|
|
/// 异步刷新自定义设备变量
|
|
|
/// </summary>
|
|
|
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
|
|
|
}
|
|
|
}
|