using System; using System.Collections; using System.Collections.Generic; using System.Text; using SiaSun.LMS.Interface; using System.Data; using SiaSun.LMS.Persistence; using System.ServiceModel; using System.Reflection; using System.IO; using System.Xml; using System.Linq; using IBatisNet.Common; using log4net; using SiaSun.LMS.Model; [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)] namespace SiaSun.LMS.Implement { [ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = int.MaxValue)] public partial class S_BaseService : SiaSun.LMS.Interface.I_BaseService { public S_BaseService() { dicDataAccess.Add("HouseMap", _P_Base_House); dicDataAccess.Add("ERPMap", _P_Base_ERP); } /// /// 消息转换文档 /// public static XmlDocument xmlDocMessage = null; /// /// 日志操作 /// public ILog _log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); IDictionary dicDataAccess = new Dictionary(); public SiaSun.LMS.Persistence.P_Base_House _P_Base_House = new SiaSun.LMS.Persistence.P_Base_House(); public SiaSun.LMS.Persistence.P_Base_ERP _P_Base_ERP = new P_Base_ERP(); #region ------数据持久层实例 public SiaSun.LMS.Persistence.P_FIELD_DESCRIPTION _P_FIELD_DESCRIPTION = new P_FIELD_DESCRIPTION(); public SiaSun.LMS.Persistence.P_FLOW_ACTION _P_FLOW_ACTION = new SiaSun.LMS.Persistence.P_FLOW_ACTION(); public SiaSun.LMS.Persistence.P_FLOW_NODE _P_FLOW_NODE = new SiaSun.LMS.Persistence.P_FLOW_NODE(); public SiaSun.LMS.Persistence.P_FLOW_PARA _P_FLOW_PARA = new SiaSun.LMS.Persistence.P_FLOW_PARA(); public SiaSun.LMS.Persistence.P_FLOW_TYPE _P_FLOW_TYPE = new SiaSun.LMS.Persistence.P_FLOW_TYPE(); public SiaSun.LMS.Persistence.P_GOODS_CLASS _P_GOODS_CLASS = new SiaSun.LMS.Persistence.P_GOODS_CLASS(); public SiaSun.LMS.Persistence.P_GOODS_MAIN _P_GOODS_MAIN = new SiaSun.LMS.Persistence.P_GOODS_MAIN(); public SiaSun.LMS.Persistence.P_GOODS_TEMPLATE _P_GOODS_TEMPLETE = new SiaSun.LMS.Persistence.P_GOODS_TEMPLATE(); public SiaSun.LMS.Persistence.P_GOODS_TEMPLATE_LIST _P_GOODS_TEMPLETE_LIST = new SiaSun.LMS.Persistence.P_GOODS_TEMPLATE_LIST(); public SiaSun.LMS.Persistence.P_GOODS_TYPE _P_GOODS_TYPE = new SiaSun.LMS.Persistence.P_GOODS_TYPE(); public SiaSun.LMS.Persistence.P_GOODS_PROPERTY _P_GOODS_PROPERTY = new SiaSun.LMS.Persistence.P_GOODS_PROPERTY(); public SiaSun.LMS.Persistence.P_IO_CONTROL _P_IO_CONTROL = new SiaSun.LMS.Persistence.P_IO_CONTROL(); public SiaSun.LMS.Persistence.P_IO_CONTROL_APPLY _P_IO_CONTROL_APPLY = new SiaSun.LMS.Persistence.P_IO_CONTROL_APPLY(); public SiaSun.LMS.Persistence.P_IO_CONTROL_APPLY_HIS _P_IO_CONTROL_APPLY_HIS = new SiaSun.LMS.Persistence.P_IO_CONTROL_APPLY_HIS(); public SiaSun.LMS.Persistence.P_IO_CONTROL_ROUTE _P_IO_CONTROL_ROUTE = new SiaSun.LMS.Persistence.P_IO_CONTROL_ROUTE(); public SiaSun.LMS.Persistence.P_RECORD_DETAIL _P_RECORD_DETAIL = new SiaSun.LMS.Persistence.P_RECORD_DETAIL(); public SiaSun.LMS.Persistence.P_RECORD_LIST _P_RECORD_LIST = new SiaSun.LMS.Persistence.P_RECORD_LIST(); public SiaSun.LMS.Persistence.P_RECORD_MAIN _P_RECORD_MAIN = new SiaSun.LMS.Persistence.P_RECORD_MAIN(); public SiaSun.LMS.Persistence.P_MANAGE_DETAIL _P_MANAGE_DETAIL = new SiaSun.LMS.Persistence.P_MANAGE_DETAIL(); public SiaSun.LMS.Persistence.P_MANAGE_LIST _P_MANAGE_LIST = new SiaSun.LMS.Persistence.P_MANAGE_LIST(); public SiaSun.LMS.Persistence.P_MANAGE_MAIN _P_MANAGE_MAIN = new SiaSun.LMS.Persistence.P_MANAGE_MAIN(); public SiaSun.LMS.Persistence.P_MANAGE_TYPE _P_MANAGE_TYPE = new SiaSun.LMS.Persistence.P_MANAGE_TYPE(); public SiaSun.LMS.Persistence.P_MANAGE_TYPE_PARAM _P_MANAGE_TYPE_PARAM = new SiaSun.LMS.Persistence.P_MANAGE_TYPE_PARAM(); public SiaSun.LMS.Persistence.P_PLAN_DETAIL _P_PLAN_DETAIL = new SiaSun.LMS.Persistence.P_PLAN_DETAIL(); public SiaSun.LMS.Persistence.P_PLAN_LIST _P_PLAN_LIST = new SiaSun.LMS.Persistence.P_PLAN_LIST(); public SiaSun.LMS.Persistence.P_PLAN_MAIN _P_PLAN_MAIN = new SiaSun.LMS.Persistence.P_PLAN_MAIN(); public SiaSun.LMS.Persistence.P_PLAN_TYPE _P_PLAN_TYPE = new SiaSun.LMS.Persistence.P_PLAN_TYPE(); public SiaSun.LMS.Persistence.P_STORAGE_DETAIL _P_STORAGE_DETAIL = new SiaSun.LMS.Persistence.P_STORAGE_DETAIL(); public SiaSun.LMS.Persistence.P_STORAGE_LIST _P_STORAGE_LIST = new SiaSun.LMS.Persistence.P_STORAGE_LIST(); public SiaSun.LMS.Persistence.P_STORAGE_MAIN _P_STORAGE_MAIN = new SiaSun.LMS.Persistence.P_STORAGE_MAIN(); public SiaSun.LMS.Persistence.P_SYS_ITEM _P_SYS_ITEM = new SiaSun.LMS.Persistence.P_SYS_ITEM(); public SiaSun.LMS.Persistence.P_SYS_ITEM_LIST _P_SYS_ITEM_LIST = new SiaSun.LMS.Persistence.P_SYS_ITEM_LIST(); public SiaSun.LMS.Persistence.P_SYS_MENU _P_SYS_MENU = new SiaSun.LMS.Persistence.P_SYS_MENU(); public SiaSun.LMS.Persistence.P_SYS_ROLE _P_SYS_ROLE = new SiaSun.LMS.Persistence.P_SYS_ROLE(); public SiaSun.LMS.Persistence.P_SYS_ROLE_WINDOW _P_SYS_ROLE_WINDOW = new SiaSun.LMS.Persistence.P_SYS_ROLE_WINDOW(); public SiaSun.LMS.Persistence.P_SYS_USER _P_SYS_USER = new SiaSun.LMS.Persistence.P_SYS_USER(); public SiaSun.LMS.Persistence.P_SYS_TABLE_CONVERTER _P_SYS_TABLE_CONVERTER = new SiaSun.LMS.Persistence.P_SYS_TABLE_CONVERTER(); public SiaSun.LMS.Persistence.P_SYS_TABLE_CONVERTER_LIST _P_SYS_TABLE_CONVERTER_LIST = new SiaSun.LMS.Persistence.P_SYS_TABLE_CONVERTER_LIST(); public SiaSun.LMS.Persistence.P_SYS_RELATION _P_SYS_RELATION = new SiaSun.LMS.Persistence.P_SYS_RELATION(); public SiaSun.LMS.Persistence.P_SYS_RELATION_LIST _P_SYS_RELATION_LIST = new SiaSun.LMS.Persistence.P_SYS_RELATION_LIST(); public SiaSun.LMS.Persistence.P_TECHNICS_MAIN _P_TECHNICS_MAIN = new P_TECHNICS_MAIN(); public SiaSun.LMS.Persistence.P_TECHNICS_ROUTE _P_TECHNICS_ROUTE = new P_TECHNICS_ROUTE(); public SiaSun.LMS.Persistence.P_WH_AREA _P_WH_AREA = new SiaSun.LMS.Persistence.P_WH_AREA(); public SiaSun.LMS.Persistence.P_WH_CELL _P_WH_CELL = new SiaSun.LMS.Persistence.P_WH_CELL(); public SiaSun.LMS.Persistence.P_WH_DESCRIPTION _P_WH_DESCRIPTION = new SiaSun.LMS.Persistence.P_WH_DESCRIPTION(); public SiaSun.LMS.Persistence.P_WH_LOGIC _P_WH_LOGIC = new SiaSun.LMS.Persistence.P_WH_LOGIC(); public SiaSun.LMS.Persistence.P_WH_WAREHOUSE _P_WH_WAREHOUSE = new SiaSun.LMS.Persistence.P_WH_WAREHOUSE(); public SiaSun.LMS.Persistence.P_LED_MAIN _P_LED_MAIN = new SiaSun.LMS.Persistence.P_LED_MAIN(); public SiaSun.LMS.Persistence.P_LED_LIST _P_LED_LIST = new SiaSun.LMS.Persistence.P_LED_LIST(); #endregion #region ------业务层实例 /// /// 系统处理类 /// /// private SiaSun.LMS.Implement.S_SystemService _s_systemservice = null; public SiaSun.LMS.Implement.S_SystemService _S_SystemService { get { if (_s_systemservice == null) _s_systemservice = new SiaSun.LMS.Implement.S_SystemService(); return _s_systemservice; } } /// /// 工作流处理类 /// private SiaSun.LMS.Implement.S_FlowService _s_flowservice = null; public SiaSun.LMS.Implement.S_FlowService _S_FlowService { get { if (_s_flowservice == null) _s_flowservice = new S_FlowService(); return _s_flowservice; } } /// /// 仓库处理类 /// private SiaSun.LMS.Implement.S_CellService _s_cellservice = null; public SiaSun.LMS.Implement.S_CellService _S_CellService { get { if (_s_cellservice == null) _s_cellservice = new S_CellService(); return _s_cellservice; } } /// /// 计划单据类 /// private SiaSun.LMS.Implement.S_PlanService _s_planservice = null; public SiaSun.LMS.Implement.S_PlanService _S_PlanService { get { if (_s_planservice == null) _s_planservice = new S_PlanService(); return _s_planservice; } } /// /// 任务处理类 /// private SiaSun.LMS.Implement.S_ManageService _s_manageservice = null; public SiaSun.LMS.Implement.S_ManageService _S_ManageService { get { if (_s_manageservice == null) _s_manageservice = new S_ManageService(); return _s_manageservice; } } /// /// 物料、库存处理类 /// private SiaSun.LMS.Implement.S_StorageService _s_storageservice = null; public SiaSun.LMS.Implement.S_StorageService _S_StorageService { get { if (_s_storageservice == null) _s_storageservice = new S_StorageService(); return _s_storageservice; } } /// /// 物料类 /// private SiaSun.LMS.Implement.S_GoodsService _s_goodsservice = null; public SiaSun.LMS.Implement.S_GoodsService _S_GoodsService { get { if (_s_goodsservice == null) _s_goodsservice = new S_GoodsService(); return _s_goodsservice; } } /// /// 发送屏幕 /// private SiaSun.LMS.Implement.S_LEDService _s_ledsservice = null; public SiaSun.LMS.Implement.S_LEDService _S_LEDService { get { if (_s_ledsservice == null) _s_ledsservice = new S_LEDService(); return _s_ledsservice; } } /// ERP接口 /// private SiaSun.LMS.Implement.S_ERPService _s_erpsservice = null; public SiaSun.LMS.Implement.S_ERPService _S_ERPService { get { if (_s_erpsservice == null) _s_erpsservice = new S_ERPService(); return _s_erpsservice; } } #endregion #region 操作方法 public bool Invoke(string sPlanType, string sMethod, object[] inParams, out string sResult) { bool bResult = true; sResult = string.Empty; string sClassFullName = string.Format("SiaSun.LMS.Implement.{0}", sPlanType); List oPara = inParams.ToList(); oPara.Add(sResult); Type t = this.GetType(); Assembly complierAssembly = t.Assembly; object complierInstance = complierAssembly.CreateInstance(sClassFullName); Type type = complierInstance.GetType(); object[] obj = oPara.ToArray(); object oResult = null; //创建反射的所有公用方法 MethodInfo[] lsMethodInfo = type.GetMethods(); foreach (MethodInfo methodInfo in lsMethodInfo) { if (methodInfo.Name.Equals(sMethod) && oPara.Count.Equals(methodInfo.GetParameters().Length)) { oResult = methodInfo.Invoke(complierInstance, obj); break; } } bResult = Convert.ToBoolean(oResult); sResult = obj[oPara.Count - 1].ToString(); return bResult; } public bool Invoke(string sPlanType, string sMethod, object[] inParams, out object[] outParams) { bool bResult = true; string sClassFullName = string.Format("SiaSun.LMS.Implement.{0}", sPlanType); List oPara = inParams.ToList(); Type t = this.GetType(); Assembly complierAssembly = t.Assembly; object complierInstance = complierAssembly.CreateInstance(sClassFullName); Type type = complierInstance.GetType(); outParams = oPara.ToArray(); object oResult = null; //创建反射的所有公用方法 MethodInfo[] lsMethodInfo = type.GetMethods(); foreach (MethodInfo methodInfo in lsMethodInfo) { if (methodInfo.Name.Equals(sMethod) && oPara.Count.Equals(methodInfo.GetParameters().Length)) { oResult = methodInfo.Invoke(complierInstance, outParams); break; } } bResult = Convert.ToBoolean(oResult); return bResult; } public void ExecuteNonQuery_ReturnVoid(string strSQL, string DataAccess = "HouseMap") { try { this.dicDataAccess[DataAccess].ExecuteNonQuery(strSQL, "dynamicSQL"); } catch (Exception ex) { throw new Exception(string.Format("ExecuteNonQuery({0}):", strSQL) + ex.Message, ex); } return; } public int ExecuteNonQuery_ReturnInt(string strSQL,string DataAccess="HouseMap") { try { int intResult = this.dicDataAccess[DataAccess].ExecuteNonQuery(strSQL, "dynamicSQL"); return intResult; } catch (Exception ex) { throw new Exception(string.Format("ExecuteNonQuery({0}):", strSQL) + ex.Message, ex); } } public DataTable GetList(string strSQL,string DataAccess="HouseMap") { DataTable dtResult = new DataTable(); try { dtResult = this.dicDataAccess[DataAccess].ExecuteQueryForDataTable("dynamicSQL", strSQL); } catch(Exception ex) { throw ex; } return dtResult; } /// /// 执行查询语句返回结果 /// public object ExecuteScalar(string strSQL, string DataAccess = "HouseMap") { try { object objResult = this.dicDataAccess[DataAccess].ExecuteScalar(strSQL); return objResult; } catch (Exception ex) { throw new Exception(string.Format("ExecuteScalar({0}):", strSQL) + ex.Message, ex); } } public DataTable GetTableXmlSql(string statementsql, object paramObject,string DataAccess="HouseMap") { DataTable dtResult = new DataTable(); try { dtResult = this.dicDataAccess[DataAccess].ExecuteQueryForDataTable(statementsql, paramObject); } catch(Exception ex) { throw ex; } return dtResult; } public ObjectT GetModel(string statementName, object parameterObject, string DataAccess = "HouseMap") { try { return this.dicDataAccess[DataAccess].ExecuteQueryForObject(statementName, parameterObject); } catch (Exception ex) { throw ex; } } public ObjectList GetListObject(string statementName, object parameterObject, string DataAccess = "HouseMap") { try { return this.dicDataAccess[DataAccess].ExecuteQueryForList(statementName, parameterObject); } catch (Exception ex) { throw ex; } } public int Save(DataTable dt, string tablename,string DataAccess="HouseMap") { int iResult = 0; try { iResult = this.dicDataAccess[DataAccess].SaveDataTable(dt, tablename); } catch (Exception ex) { } return iResult; } #endregion /// /// 添加日志 /// public void AddLog(string Message) { try { this._log.Info(Message); } catch (Exception ex) { string strResult = ex.Message; } } /// /// 读取日志文件列表 /// public IList ReadLogFileList() { IList listFile = new List(); try { string strDicPath = string.Format(@"{0}log\", AppDomain.CurrentDomain.BaseDirectory); DirectoryInfo dicInfo = new DirectoryInfo(strDicPath); foreach (FileInfo flInfo in dicInfo.GetFiles("*.log")) { if (flInfo.Length >= 0) { listFile.Add(flInfo.Name); } } } catch (Exception ex) { throw ex; } return listFile; } /// /// 读取副本日志文件 /// public IList GetLogFromFile(string FileName) { //日志数据列表 IList listLog = new List(); //获得文件路径 string strFilePath = string.Format(@"{0}log\{1}", AppDomain.CurrentDomain.BaseDirectory, FileName); //副本文件路径 string strCopyFilePath = string.Format(@"{0}log\{1}.copy", AppDomain.CurrentDomain.BaseDirectory, FileName); //由于线程占用,所以复制一个副本 if (File.Exists(strFilePath)) { try { //复制副本文件 File.Copy(strFilePath, strCopyFilePath, true); if (File.Exists(strCopyFilePath)) { //读取文件 using (FileStream flStream = File.OpenRead(strCopyFilePath)) { Encoding encode = Encoding.GetEncoding("gb2312"); using (StreamReader reader = new StreamReader(flStream, encode)) { //获得内容 string strContent = reader.ReadToEnd(); //释放 reader.Close(); reader.Dispose(); flStream.Close(); flStream.Dispose(); //删除文件 this.DeleteLogFile(new string[] { string.Format("{0}.copy", FileName) }); //XML文档 listLog = this.GetLogFromContent(strContent); } } } } catch (Exception ex) { throw ex; } } return listLog; } /// /// 删除日志文件 /// public void DeleteLogFile(string[] FileList) { try { foreach (string strFile in FileList) { string strFilePath = string.Format(@"{0}log\{1}", AppDomain.CurrentDomain.BaseDirectory, strFile); File.Delete(strFilePath); } } catch (Exception ex) { throw ex; } } /// /// 清除指定日期以前的日志 /// public void ClearLogFile(DateTime date) { string strDicPath = string.Format(@"{0}log\", AppDomain.CurrentDomain.BaseDirectory); DirectoryInfo dicInfo = new DirectoryInfo(strDicPath); foreach (FileInfo flInfo in dicInfo.GetFiles("*.log")) { if (Convert.ToDateTime(flInfo.Name.Replace(".log", null)) < date) { flInfo.Delete(); } } } /// /// 根据文件内容,解析并获得日志数据 /// public IList GetLogFromContent(string XmlContent) { IList listLog = new List(); //构造XML文档 XmlContent = XmlContent.Replace("log4net:", "").Replace(@"\n", "").Replace(" ", ""); string strXmlDocDeclar = string.Format(@"", '"'); string strXml = string.Format("{0}{1}{2}{3}", strXmlDocDeclar, "", XmlContent, ""); //加载XML XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(strXml); //解析文档 foreach (XmlNode nodeEvent in xmlDoc.SelectNodes("log/event")) { string strTimeStamp = nodeEvent.Attributes["timestamp"].InnerText; //获得消息 XmlNode nodeMessage = nodeEvent.SelectSingleNode("message"); if (nodeMessage != null) { string strMessage = nodeMessage.InnerText.TrimEnd(' '); //添加日志 listLog.Add(new Model.Log(strTimeStamp, strMessage)); } } return listLog; } /// /// 根据关键字获得信息描述 /// public string MessageConverter_GetKeyValue(string Key, params object[] Param) { string strMessage = null; try { string strLanguge = SiaSun.LMS.Common.AppSettings.GetValue("Language"); if (xmlDocMessage == null) { xmlDocMessage = MessageConverter_GetXmlDoc(); } System.Xml.XmlNode xmlNode = xmlDocMessage.SelectSingleNode(string.Format("MessageDictionary/Message[@Key='{0}']", Key)); if (xmlNode != null) { //获得消息值 strMessage = string.Format(xmlNode.Attributes[strLanguge].Value.ToString(), (Param == null || Param.Length == 0 ? new object[] { string.Empty } : Param)); } } catch { strMessage = Key; } return string.IsNullOrEmpty(strMessage) ? Key : strMessage; } /// /// 根据关键字获得信息描述 /// private System.Xml.XmlDocument MessageConverter_GetXmlDoc() { try { string strMessageXmlFile = AppDomain.CurrentDomain.BaseDirectory + string.Format(@"Files\MessageDictionary.xml"); return new Common.XmlFiles(strMessageXmlFile); } catch (Exception ex) { throw ex; } } /// 系统初始化 /// 系统初始化 /// public void InitSystem() { this._P_Base_House.InitSystem(); } } }