You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

412 lines
16 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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