zoukankan      html  css  js  c++  java
  • etl

    EtlCheckMethod.cs

    /* Copyright (c) 2015 Xiamen HaiHui Software Co., Ltd. All rights reserved
     *
     * Create by huanglc@holworth.com at 2015-04-23 21:52:52
     *
     */
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;

    namespace Contract.Domain
    {
        
                 [DataContract(Namespace = "Contract.Domain")]
        public class EtlCheckMethod: Framework.Domain.Entity
        {       
        
                          /// <summary>
                /// 验证函数名
                /// </summary>
                [DataMember]
                public virtual string Name
                {
                   get;
                   set;
                }                        
                        
                        /// <summary>
                /// 服务名
                /// </summary>
                [DataMember]
                public virtual string ServiceName
                {
                   get;
                   set;
                }                        
                        
                        /// <summary>
                /// 扩展参数值1
                /// </summary>
                [DataMember]
                public virtual string ExtendParameter
                {
                   get;
                   set;
                }                        
                        
                        /// <summary>
                /// 扩展参数值2
                /// </summary>
                [DataMember]
                public virtual string ExtendParameter2
                {
                   get;
                   set;
                }                        
                        
                        /// <summary>
                /// 扩展参数值3
                /// </summary>
                [DataMember]
                public virtual string ExtendParameter3
                {
                   get;
                   set;
                }                        
                        
               
        }
        
    }

    EtlColumn.cs

    /* Copyright (c) 2015 Xiamen HaiHui Software Co., Ltd. All rights reserved
     *
     * Create by huanglc@holworth.com at 2015-04-15 20:42:23
     *
     */

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;

    namespace Contract.Domain
    {

        [DataContract(Namespace = "Contract.Domain")]
        public class EtlColumn : Framework.Domain.Entity
        {

            /// <summary>
            /// 映射列索引
            /// </summary>
            [DataMember]
            public virtual int? MapIndex
            {
                get;
                set;
            }

            /// <summary>
            /// 映射列
            /// </summary>
            [DataMember]
            public virtual string MapColumn
            {
                get;
                set;
            }

            /// <summary>
            /// etl_id
            /// </summary>
            [DataMember]
            public virtual string EtlId
            {
                get;
                set;
            }
            [DataMember]
            public virtual Contract.Domain.ConstEnum.DataTypeDimesion DataType
            {
                get;
                set;
            }

        }

    }

    EtlDataMap.cs

    /* Copyright (c) 2015 Xiamen HaiHui Software Co., Ltd. All rights reserved
     *
     * Create by huanglc@holworth.com at 2015-04-15 20:42:33
     *
     */

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;

    namespace Contract.Domain
    {

        [DataContract(Namespace = "Contract.Domain")]
        public class EtlDataMap : Framework.Domain.Entity
        {

            /// <summary>
            /// 映射表名
            /// </summary>
            [DataMember]
            public virtual string MapTableName
            {
                get;
                set;
            }
            /// <summary>
            /// 导入名
            /// </summary>
             [DataMember]
            public virtual string ImportName
            {
                get;
                set;
            }
            

            /// <summary>
            /// 文件名开头
            /// </summary>
            [DataMember]
            public virtual string FileNameStart
            {
                get;
                set;
            }

            /// <summary>
            /// 数据开始行
            /// </summary>
            [DataMember]
            public virtual Int32 StartRow
            {
                get;
                set;
            }

            /// <summary>
            /// 数据结束标志
            /// </summary>
            [DataMember]
            public virtual string EndStandard
            {
                get;
                set;
            }
            /// <summary>
            /// 当前映射列
            /// </summary>
            [DataMember]
            public virtual IList<EtlColumn> ColumnList
            {
                get;
                set;
            }
           


        }

    }

    EtlTableDef.cs

      /* Copyright (c) 2015 Xiamen HaiHui Software Co., Ltd. All rights reserved
     *
     * Create by huanglc@holworth.com at 2015-05-01 14:33:23
     *
     */

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;

    namespace Contract.Domain
    {

        [DataContract(Namespace = "Contract.Domain")]
        public class EtlTableDef : Framework.Domain.Entity
        {

            /// <summary>
            /// table_name
            /// </summary>
            [DataMember]
            public virtual string TableName
            {
                get;
                set;
            }
            [DataMember]
            public virtual string PK_Id
            {
                get;
                set;
            }
            [DataMember]
            public virtual IList<VerifyCheck> VerifyCheckList
            {
                get;
                set;
            }


        }

    VerifyCheck.cs

    /* Copyright (c) 2015 Xiamen HaiHui Software Co., Ltd. All rights reserved
     *
     * Create by huanglc@holworth.com at 2015-04-26 09:11:41
     *
     */

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;

    namespace Contract.Domain
    {

        [DataContract(Namespace = "Contract.Domain")]
        public class VerifyCheck : Framework.Domain.Entity
        {

            /// <summary>
            /// table_name
            /// </summary>
            [DataMember]
            public virtual string TableName
            {
                get;
                set;
            }

            /// <summary>
            /// colum_name
            /// </summary>
            [DataMember]
            public virtual string ColumName
            {
                get;
                set;
            }

            /// <summary>
            /// check_method
            /// </summary>
            [DataMember]
            public virtual string CheckMethod
            {
                get;
                set;
            }
            /// <summary>
            /// 是否必须映射
            /// </summary>
            [DataMember]
            public virtual Int32? IsMustMap
            {
                get;
                set;
            }
            [DataMember]
            public virtual string TableId
            {
                get;
                set;
            }
            [DataMember]
            public virtual bool IsCheck
            {
                get;
                set;
            }


        }

    }

    EtlExcelService.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Contract.Domain;
    using Contract.IService;

    namespace ETLBLL
    {
        public class EtlExcelService : BaseService.BaseService<Framework.Domain.Entity>, IEtlExcelService
        {
            public void SaveEtlLog(Contract.Domain.EtlLog obj)
            {
                Dao.SaveOrUpdate(obj);
            }
          public int SaveImportExcel(string filePath)
          {
              string fileName = System.IO.Path.GetFileName(filePath).ToLower();
              string[] tableName = Holworth.Utility.ExcelUtil.GetExcelTableName(filePath);
              System.Data.DataTable table = Holworth.Utility.ExcelUtil.GetExcelSheetContent(filePath, tableName[0]);
              getEtlDataMap();
              int totalCount = 0;
              var k = mapList.Where(m => fileName.StartsWith(m.FileNameStart)).ToList();
              bool pkId = false;
              if (k != null && k.Count > 0)
              {
                  string extention = System.IO.Path.GetExtension(filePath).ToLower();
                  foreach (Contract.Domain.EtlDataMap m in k)
                  {

                      int start = m.StartRow;
                      if (extention.IndexOf("xlsx") > -1)
                      {
                          start--;
                      }
                      System.Text.StringBuilder sb = new StringBuilder();
                      table.TableName = m.MapTableName;
                      for (int i = start; i < table.Rows.Count; i++)
                      {
                          if (i < 0)
                          {
                              continue;
                          }
                          if (string.IsNullOrEmpty(table.Rows[i][0].ToString()) || table.Rows[i][0].ToString().Equals(m.EndStandard))
                          {
                              break;
                          }

                          if (m.ColumnList == null || m.ColumnList.Count == 0)
                          {
                              throw new Exception(string.Format("无法找到表名为{0}的映射列.", m.MapTableName));
                          }
                          sb.Append(string.Format("insert into {0}(", m.MapTableName));
                          bool first = false;
                          bool firstValue = false;
                          System.Text.StringBuilder valueSb = new StringBuilder();
                          EtlTableDef def = TablePrimaryKey[m.MapTableName] as EtlTableDef;
                          if (def.VerifyCheckList != null)
                          {
                              foreach (var v in def.VerifyCheckList)
                              {
                                  v.IsCheck = false;
                              }
                          }
                          foreach (var c in m.ColumnList)
                          {
                              if (!first)
                              {
                                  sb.Append(c.MapColumn);
                                  first = true;
                              }
                              else
                              {
                                  sb.Append("," + c.MapColumn);
                              }
                              if (!firstValue)
                              {
                                  firstValue = true;
                                  valueSb.Append(" values(");
                              }
                              else
                              {
                                  valueSb.Append(",");
                              }
                              if (c.MapColumn.ToLower().Equals(def.PK_Id.ToLower()))
                              {
                                  valueSb.Append("HIBERNATE_SEQUENCE.NEXTVAL");
                                  pkId = true;
                              }
                              else
                              {
                                  string valueObject = table.Rows[i][c.MapIndex.Value].ToString();
                                  string title = "";
                                  string columnName = "";
                                  if (c.MapIndex <= 90)
                                  {
                                      char cc = (char)(c.MapIndex.Value + 65);
                                      columnName = cc.ToString();
                                  }
                                  else
                                  {
                                      columnName = "A" + ((char)(c.MapIndex.Value + 65 - 26)).ToString();
                                  }
                                  object mValue = ChangeValue(valueObject, c.DataType, out title, i, columnName);
                                  if (mValue != null)
                                  {
                                      if (mValue is DateTime)
                                      {
                                          valueObject = ((DateTime)mValue).ToString("yyyy-MM-dd HH:mm:ss");
                                      }
                                      else
                                      {
                                          valueObject = mValue.ToString();
                                      }
                                  }
                                  if (!string.IsNullOrEmpty(title))
                                  {
                                      throw new Exception(title);
                                  }
                                  #region 表列验证并设置列值
                                  if (def.VerifyCheckList != null && def.VerifyCheckList.Count > 0)
                                  {
                                      var checkList = def.VerifyCheckList.Where(km => km.ColumName.Equals(c.MapColumn)).ToList();
                                      if (checkList != null && checkList.Count > 0)
                                      {
                                          object[] returnValue = null;
                                          foreach (var check in checkList)
                                          {
                                              check.IsCheck = true;
                                              string[] ss = check.CheckMethod.Split(new char[] { ';' });
                                              System.Collections.Hashtable ha = new System.Collections.Hashtable();
                                              ha.Add("obj", valueObject);
                                              ha.Add("table", table);
                                              ha.Add("row", table.Rows[i]);
                                              int jj = 0;
                                              foreach (string s in ss)
                                              {
                                                  if (!string.IsNullOrEmpty(s))
                                                  {
                                                      var eltlMehtod = MethodList.Where(mm => mm.ServiceName.Equals(s)).ToList();
                                                      if (eltlMehtod.Count == 0)
                                                      {
                                                          throw new Exception("系统无法找到验证码为" + ss[0] + "服务");
                                                      }
                                                      if (jj == 0)
                                                      {
                                                          ha.Add("column", eltlMehtod[0]);
                                                          ha.Add("etlDataMap", m);
                                                      }
                                                      jj++;
                                                      returnValue = (object[])Framework.Proxy.Expressions.ExpressionEvaluator.GetValue(null, s, ha);
                                                      if (returnValue[1] != null && !string.IsNullOrEmpty(returnValue[1].ToString()))
                                                      {
                                                          throw new Exception(string.Format("{0}行{1}列{2},{3}", i, columnName, valueObject, returnValue[1].ToString()));
                                                      }

                                                  }
                                              }
                                          }
                                          if (returnValue != null)
                                          {
                                              string realValue = string.Empty;
                                              switch (c.DataType)
                                              {
                                                  case ConstEnum.DataTypeDimesion.整型:
                                                  case ConstEnum.DataTypeDimesion.浮点型:
                                                      if (returnValue[2] == null)
                                                      {
                                                          realValue = "''";
                                                      }
                                                      else
                                                      {
                                                          realValue = returnValue[2].ToString();
                                                      }
                                                      break;
                                                  case ConstEnum.DataTypeDimesion.日期:
                                                      if (returnValue[2] == null)
                                                      {
                                                          realValue = "''";
                                                      }
                                                      else
                                                      {
                                                          if (returnValue[2] is DateTime)
                                                          {
                                                              realValue = ((DateTime)returnValue[2]).ToString("yyyy-MM-dd HH:mm:ss");
                                                          }
                                                          else
                                                          {
                                                              realValue = DateTime.Parse(returnValue[2].ToString()).ToString("yyyy-MM-dd HH:mm:ss");
                                                          }
                                                          realValue = string.Format("to_date('{0}','yyyy-mm-dd hh24:mi:ss')", realValue);
                                                      }
                                                      break;
                                                  default:
                                                      if (returnValue[2] == null)
                                                      {
                                                          realValue = "''";
                                                      }
                                                      else
                                                      {
                                                          realValue = "'" + returnValue[2].ToString() + "'";
                                                      }
                                                      break;
                                              }
                                              valueSb.Append(realValue);
                                          }
                                          else
                                          {
                                              valueSb.Append("''");
                                          }

                                      }
                                      else
                                      {
                                          switch (c.DataType)
                                          {
                                              case ConstEnum.DataTypeDimesion.整型:
                                              case ConstEnum.DataTypeDimesion.浮点型:
                                                  if (string.IsNullOrEmpty(valueObject))
                                                  {
                                                      valueObject = "''";
                                                  }
                                                  else
                                                  {
                                                      valueObject = mValue.ToString();
                                                  }

                                                  break;
                                              case ConstEnum.DataTypeDimesion.日期:
                                                  if (string.IsNullOrEmpty(valueObject))
                                                  {
                                                      valueObject = "''";
                                                  }
                                                  else
                                                  {
                                                      valueObject = string.Format("to_date('{0}','yyyy-mm-dd hh24:mi:ss')", DateTime.Parse(valueObject).ToString("yyyy-MM-dd HH:mm:ss"));
                                                  }
                                                  break;
                                              default:
                                                  valueObject = valueObject.Replace("'", "");
                                                  valueObject = "'" + valueObject + "'";
                                                  break;
                                          }
                                          valueSb.Append(valueObject);
                                      }

                                  }
                                  else
                                  {
                                      switch (c.DataType)
                                      {
                                          case ConstEnum.DataTypeDimesion.整型:
                                          case ConstEnum.DataTypeDimesion.浮点型:
                                              if (string.IsNullOrEmpty(valueObject))
                                              {
                                                  valueObject = "''";
                                              }
                                              else
                                              {
                                                  valueObject = mValue.ToString();
                                              }
                                              break;
                                          case ConstEnum.DataTypeDimesion.日期:
                                              if (string.IsNullOrEmpty(valueObject))
                                              {
                                                  valueObject = "''";
                                              }
                                              else
                                              {
                                                  valueObject = string.Format("to_date('{0}','yyyy-mm-dd hh24:mi:ss')", DateTime.Parse(valueObject).ToString("yyyy-MM-dd HH:mm:ss"));
                                              }
                                              break;
                                          default:
                                              valueObject = valueObject.Replace("'", "");
                                              valueObject = "'" + valueObject + "'";
                                              break;
                                      }
                                      valueSb.Append(valueObject);
                                  }
                                  #endregion
                              }
                          }
                          if (!pkId)
                          {
                              valueSb.Append(",HIBERNATE_SEQUENCE.NEXTVAL");
                              sb.Append(",Id");
                          }
                          valueSb.Append("); ");
                          sb.Append(")");
                          sb.Append(valueSb.ToString());
                          valueSb.Clear();
                          var tmpCheckList = def.VerifyCheckList.Where(vv => !vv.IsCheck).ToList();
                          if (tmpCheckList != null && tmpCheckList.Count > 0)
                          {
                              System.Text.StringBuilder errorColumn = new StringBuilder();
                              foreach (var tv in tmpCheckList)
                              {
                                  if (errorColumn.Length == 0)
                                  {
                                      errorColumn.Append("'" + tv.ColumName + "'");
                                  }
                                  else
                                  {
                                      errorColumn.Append(",'" + tv.ColumName + "'");
                                  }
                              }
                              string where = "(" + errorColumn.ToString() + ")";
                              Framework.QueryInfo errorInfo = new Framework.QueryInfo();
                              errorInfo.Parameters.Add("table_name", def.TableName);
                              errorInfo.CustomSQL = " select column_name,nvl((select t_s.comments  from all_col_comments t_s where t_s.column_name = t.column_name and t_s.table_name =:table_name) ,column_name))"
                                  + " comments from all_tab_columns t"
                                  + " where table_name = upper(:table_name) and column_name in " + where;
                              var cds = Dao.ExecuteDataSet(errorInfo);
                              where = string.Empty;
                              for (int ii = 0; ii < cds.Tables[0].Rows.Count; ii++)
                              {
                                  System.Data.DataRow row = cds.Tables[0].Rows[ii];
                                  if (ii == 0)
                                  {
                                      where = row["comments"].ToString();
                                  }
                                  else
                                  {
                                      where += "," + row["comments"].ToString();
                                  }
                              }
                              where += "属性必须存在,请设置该属性的映射列";
                              throw new Exception(where);

                          }
                          totalCount++;
                      }
                      if (sb.Length > 0)
                      {
                          Framework.QueryInfo info = new Framework.QueryInfo();
                          info.CustomSQL = "begin " + sb.ToString() + "end; ";
                          int count = Dao.ExecuteNonQuery(info);
                          return totalCount;
                      }

                  }
              }

              return 0;
          }
          public System.Data.DataSet ExcuteDataSet(Framework.QueryInfo info)
          {
              return Dao.ExecuteDataSet(info);
          }
          private object ChangeValue(string obj, Contract.Domain.ConstEnum.DataTypeDimesion type,out string title,int rowIndex,string column)
          {
              title = "";
              switch (type)
              {
                  case ConstEnum.DataTypeDimesion.字符串:
                      return obj;
                  case  ConstEnum.DataTypeDimesion.日期:
                      if (string.IsNullOrEmpty(obj))
                      {
                          title = "";
                          return null;
                      }
                      else
                      {
                          DateTime a = DateTime.Now;
                          if (!DateTime.TryParse(obj, out a))
                          {
                              title = string.Format("无法将{0}行{1}列{2}转为日期", rowIndex, column, obj);

                          }
                          return a;
                      }
                  case ConstEnum.DataTypeDimesion.整型:
                      int k = 0;
                     if(!int.TryParse(obj,out k))
                     {
                         title = string.Format("无法将{0}行{1}列{2}转为整型", rowIndex, column, obj);
                     }
                     return k;
                  case ConstEnum.DataTypeDimesion.浮点型:
                     decimal d = 0;
                     if (!decimal.TryParse(obj, out d))
                     {
                         title = string.Format("无法将{0}行{1}列{2}转为浮点型", rowIndex, column, obj);
                     }
                     return d;
                  default:
                      return obj;
              }
          }
          IList<EtlCheckMethod> _methodList = null;
          private IList<EtlCheckMethod> MethodList
          {
              get
              {
                  if (_methodList == null)
                  {
                      Framework.QueryInfo info = new Framework.QueryInfo();
                      info.QueryObject = "EtlCheckMethod";
                      _methodList = Holworth.Utility.Utility.ListToT<EtlCheckMethod>(Dao.FindList(info));
                  }
                  return _methodList;
              }
          }
          System.Collections.Hashtable _ha = null;
          private System.Collections.Hashtable TablePrimaryKey
          {
              get
              {
                  if (_ha == null)
                  {
                      Framework.QueryInfo info = new Framework.QueryInfo();
                      info.QueryObject = "EtlTableDef";
                      var list = Holworth.Utility.Utility.ListToT<EtlTableDef>(Dao.FindList(info));
                      _ha = new System.Collections.Hashtable();
                     foreach(var def in list)
                     {
                         if(!_ha.Contains(def.TableName))
                         {
                             var vlist = VerifyCheckList.Where(m => m.TableName.Equals(def.TableName)).ToList();
                             def.VerifyCheckList = vlist;
                             _ha.Add(def.TableName, def);
                         }
                     }

                  }
                  return _ha;
              }
          }
          IList<VerifyCheck> _verifyCheckList = null;
          private IList<VerifyCheck> VerifyCheckList
          {
              get
              {
                  if (_verifyCheckList == null)
                  {
                      Framework.QueryInfo info = new Framework.QueryInfo();
                      info.QueryObject = "VerifyCheck";
                      _verifyCheckList = Holworth.Utility.Utility.ListToT<VerifyCheck>(Dao.FindList(info));
                  }
                  return _verifyCheckList;
              }
          }
          private IList< EtlDataMap> mapList
          {
              get;
              set;
          }
       
          public IList<EtlDataMap> getEtlDataMap()
          {
              if (mapList == null)
              {
                  Framework.QueryInfo info = new Framework.QueryInfo();
                  info.QueryObject = "EtlDataMap";
                  mapList = Holworth.Utility.Utility.ListToT<EtlDataMap>(Dao.FindList(info));
                  info = new Framework.QueryInfo();
                  info.QueryObject = "EtlColumn";
                  var list = Holworth.Utility.Utility.ListToT<EtlColumn>(Dao.FindList(info));
                  var ds=InitColumnType();
                  System.Data.DataView view =new System.Data.DataView( ds.Tables[0]);
                  if (mapList != null)
                  {
                      foreach (EtlDataMap map in mapList)
                      {
                          view.RowFilter = "table_name='" + map.MapTableName + "'";
                          var t = list.Where(m => m.EtlId == map.Id).ToList();
                          map.ColumnList = t;
                          foreach (var c in map.ColumnList)
                          {
                              foreach (System.Data.DataRowView r in view)
                              {
                                  if (r["COLUMN_NAME"].ToString() ==c.MapColumn)
                                  {
                                      c.DataType = GetType(r["Data_Type"].ToString());
                                  }
                              }
                          }
                      }
                  }
              }
              return mapList;

          }
          private Contract.Domain.ConstEnum.DataTypeDimesion GetType(string oracleType)
          {
              oracleType = oracleType.ToLower();
              switch (oracleType)
              {
                  case "date":
                      return ConstEnum.DataTypeDimesion.日期;
                      break;
                  case "number":
                      return ConstEnum.DataTypeDimesion.浮点型;
                      break;
                  case "integer":
                      return ConstEnum.DataTypeDimesion.整型;
                      break;
                  default:
                      return ConstEnum.DataTypeDimesion.字符串;
                      break;
              }
          }
          private System.Data.DataSet InitColumnType()
          {
              Framework.QueryInfo info = new Framework.QueryInfo();
              info.CustomSQL = "select d.Code from SysDict d";
              info.AddParam("TypeCode", "ETLDataTable");
              var list = Dao.FindList(info);
              string tableName = "";
              foreach (string s in list)
              {
                  if (string.IsNullOrEmpty(tableName))
                  {
                      tableName = "'" + s + "'";
                  }
                  else
                  {
                      tableName += ",'" + s + "'";
                  }
              }
              info = new Framework.QueryInfo();
              info.CustomSQL = "select * from ALL_TAB_COLUMNS   where   table_name in(" + tableName + ")";
              var ds = Dao.ExecuteDataSet(info);
              return ds;
              
          }
        }
    }

    EtlDataMapService.cs

    /* Copyright (c) 2015 Xiamen Weixin Software Co., Ltd. All rights reserved
     *
     * Create by huanglc@holworth.com at 2015-04-15 21:01:15
     *
     */

    using System;
    using System.Text;
    using System.Collections.Generic;
    using Contract.IService;
    using Framework;
    using System.Collections;
    using Contract.Domain;
    using BaseService;
    using Contract.IService;
    namespace ETLBLL
    {
        public class EtlDataMapService : BaseService.EntityService<Contract.Domain.EtlDataMap>, IEtlDataMapService
        {
            public override EtlDataMap SaveOrUpdate(EtlDataMap obj)
            {
                if (!string.IsNullOrEmpty(obj.Id))
                {
                    Framework.QueryInfo info = new QueryInfo();
                    info.CustomSQL = "delete from EtlColumn ";
                    info.AddParam("EtlId", obj.Id);
                    Dao.ExecuteUpdate(info);
                }
                if (!obj.State.Deleted)
                {
                    if (obj.ColumnList != null)
                    {
                        var list = obj.ColumnList;
                        obj = base.SaveOrUpdate(obj);
                        foreach (var o in list)
                        {
                            o.EtlId = obj.Id;
                            o.State.MarkNew();
                        }
                        Dao.SaveOrUpdateAll<EtlColumn>(list);
                    }
                }
                else
                {
                    obj = base.SaveOrUpdate(obj);
                }
                return obj;

            }


        }
    }

    EtlCheckMethodService.cs

    /* Copyright (c) 2015 Xiamen Weixin Software Co., Ltd. All rights reserved
     *
     * Create by huanglc@holworth.com at 2015-04-23 21:52:45
     *
     */

    using System;
    using System.Text;
    using System.Collections.Generic;
    using Contract.IService;
    using Framework;
    using System.Collections;
    using Contract.Domain;
    using BaseService;
    using System.Linq;
    namespace ETLBLL
    {
        public class EtlCheckMethodService : BaseService.EntityService<Contract.Domain.EtlCheckMethod>, IEtlCheckMethodService
        {
            /// <summary>
            /// 检验是否>=0
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <returns></returns>
            public object[] GEZero(string obj, System.Data.DataTable table, System.Data.DataRow row, EtlCheckMethod column, EtlDataMap etlDataMap)
            {
                object[] returnObject = new object[3];
                if (string.IsNullOrEmpty(obj))
                {
                    returnObject[0] = false;
                    returnObject[1] = "不能空";
                    returnObject[2] = 0;
                }
                else
                {
                    decimal a = 0;
                    if (decimal.TryParse(obj, out a))
                    {
                        if (a >= 0)
                        {
                            returnObject[0] = true;
                            returnObject[1] = "";
                            returnObject[2] = a;
                        }
                        else
                        {
                            returnObject[0] = false;
                            returnObject[1] = "小于0";

                        }

                    }
                    else
                    {
                        returnObject[0] = false;
                        returnObject[1] = "不是数值";
                    }

                }
                return returnObject;
            }
            /// <summary>
            /// 检验日期
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <returns></returns>
            public object[] CheckDateTime(string obj, System.Data.DataTable table, System.Data.DataRow row, EtlCheckMethod column, EtlDataMap etlDataMap)
            {
                object[] returnObject = new object[3];
                if (string.IsNullOrEmpty(obj))
                {
                    returnObject[0] = true;
                    returnObject[2] = null;
                }
                else
                {
                    DateTime a = DateTime.Now;
                    if (DateTime.TryParse(obj, out a))
                    {
                        returnObject[0] = true;
                        returnObject[2] = a;
                    }
                    else
                    {
                        returnObject[0] = false;
                        returnObject[1] = "不是为日期类型";
                        
                    }
                }
                return returnObject;

            }
            /// <summary>
            /// 检验数值
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <returns></returns>
            public object[] CheckNumber(string obj, System.Data.DataTable table, System.Data.DataRow row, EtlCheckMethod column, EtlDataMap etlDataMap)
            {
                  object[] returnObject = new object[3];
                  if (string.IsNullOrEmpty(obj))
                  {
                      returnObject[0] = true;
                      returnObject[1] = "";
                      returnObject[2] = 0;
                  }
                  else
                  {
                      decimal a = 0;
                      if (decimal.TryParse(obj, out a))
                      {
                          returnObject[0] = true;
                          returnObject[2] = a;
                      }
                      else
                      {
                          returnObject[0] = false;
                          returnObject[1] = "不是为数值类型";
                      }
                  }
                  return returnObject;

            }
            public object[] CheckNull(string obj, System.Data.DataTable table, System.Data.DataRow row, EtlCheckMethod column, EtlDataMap etlDataMap)
            {
                object[] returnObject = new object[3];
                returnObject[0] = !string.IsNullOrEmpty(obj);
                returnObject[2] = obj;
                if (string.IsNullOrEmpty(obj))
                {
                    returnObject[1] = "不能空";
                }
                return returnObject;
            }
            /// <summary>
            /// 验证范围
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <returns></returns>
            public object[] CheckRange(string obj, System.Data.DataTable table, System.Data.DataRow row, EtlCheckMethod column, EtlDataMap etlDataMap)
            {
                object[] returnObject = new object[3];
                returnObject[2] = obj;
                if (string.IsNullOrEmpty(obj))
                {
                    returnObject[1] = "不能空";
                    returnObject[0] = false;
                }
                else
                {
                    if (obj.CompareTo(column.ExtendParameter) >= 0 && obj.CompareTo(column.ExtendParameter2) <= 0)
                    {
                        returnObject[0] = true;
                       
                    }
                    else
                    {
                        returnObject[0] = false;
                        returnObject[1] = string.Format("值不在{0}和{1}之间", column.ExtendParameter, column.ExtendParameter2);
                    }
                }
                return returnObject;
            }
            /// <summary>
            /// 验证某个列日期不能大于某列
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <param name="etlDataMap"></param>
            /// <returns></returns>
            public object[] CheckRangeDateTimeColumn(string obj, System.Data.DataTable table, System.Data.DataRow row, EtlCheckMethod column,EtlDataMap etlDataMap)
            {
                 object[] returnObject = new object[3];
                string errorColumn = string.Empty;
                if (etlDataMap.ColumnList.Where(m => m.MapColumn.Equals(column.ExtendParameter)).Count() <= 0)
                {
                    throw new Exception(string.Format("不存在映射列{0}",column.ExtendParameter));
                }
                if (etlDataMap.ColumnList.Where(m => m.MapColumn.Equals(column.ExtendParameter2)).Count() <= 0)
                {
                    throw new Exception(string.Format("不存在映射列{0}", column.ExtendParameter2));
                }
                var c1 = etlDataMap.ColumnList.Where(m => m.MapColumn.Equals(column.ExtendParameter)).First();
                var c2 = etlDataMap.ColumnList.Where(m => m.MapColumn.Equals(column.ExtendParameter2)).First();
                DateTime a = DateTime.Now;
                if (!DateTime.TryParse(row[c1.MapIndex.Value].ToString(), out a))
                {
                    returnObject[1] = "不是为日期类型";
                    returnObject[0] = false;
                    return returnObject;
                }
                DateTime v1 = a;
                if (!DateTime.TryParse(row[c2.MapIndex.Value].ToString(), out a))
                {
                    returnObject[1] = "不是为日期类型";
                    returnObject[0] = false;
                    return returnObject;
                }
                DateTime v2 = a;

                if (v1.CompareTo(v2) <= 0)
                {
                    returnObject[0] = true;
                    returnObject[2] = DateTime.Parse(obj);
                }
                else
                {
                    returnObject[0] = false;
                    string col1 = string.Empty;
                    string col2 = string.Empty;

                    if (c1.MapIndex <= 90)
                    {
                       col1 = ((char)(c1.MapIndex.Value + 65)).ToString();

                    }
                    else
                    {
                        col1 = "A" + ((char)(c1.MapIndex.Value + 65 - 26)).ToString();
                    }

                    if (c2.MapIndex <= 90)
                    {
                        col2 = ((char)(c2.MapIndex.Value + 65)).ToString();

                    }
                    else
                    {
                        col2 = "A" + ((char)(c2.MapIndex.Value + 65 - 26)).ToString();
                    }
                    returnObject[1] = string.Format("{0}大于{1}",col1,col2);
                }
                return returnObject;
            }
            /// <summary>
            /// 判断列不能同时存在
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="table"></param>
            /// <param name="row"></param>
            /// <param name="column"></param>
            /// <param name="etlDataMap"></param>
            /// <returns></returns>
            public object[] CheckColumnSimpleExist(string obj, System.Data.DataTable table, System.Data.DataRow row, EtlCheckMethod column, EtlDataMap etlDataMap)
            {
               object[] returnObject = new object[3];
               int i= etlDataMap.ColumnList.Where(m => m.MapColumn.Equals(column.ExtendParameter) || m.MapColumn.Equals(column.ExtendParameter2)).Count();
               if (i == 0)
               {
                   returnObject[0] = false;
                   returnObject[1] = string.Format("{0}、{1}必须存在一列", column.ExtendParameter, column.ExtendParameter2);
               }
               else if (i > 1)
               {
                   returnObject[0] = false;
                   returnObject[1] = string.Format("{0}、{1}不能同时存在", column.ExtendParameter, column.ExtendParameter2);
               }
               else
               {
                   returnObject[0] = true;
                   returnObject[2] = obj;
               }
                
                return returnObject;
            }

        }
    }

    Form1.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Contract.IService;
    using System.IO;
    using Contract.Domain;

    namespace ETLAPP
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                textBox1.ReadOnly = true;
                this.textBox1.Text = System.Windows.Forms.Application.StartupPath + @"ImportFile";
                watcher.Path = textBox1.Text;
                SetData();
                watcher.Changed += new FileSystemEventHandler(OnProcess);
                watcher.Created += new FileSystemEventHandler(OnProcess);
                watcher.Deleted += new FileSystemEventHandler(OnProcess);
                watcher.EnableRaisingEvents = true;
                time = new System.Timers.Timer(1000 * 10);
                time.Elapsed += monitor_Tick;
                time.Start();
                button1.Enabled = false;
            }
            private System.Data.DataSet ds = null;
            private void SetData()
            {
                Framework.QueryInfo info = new Framework.QueryInfo();
                info.CustomSQL = "select * from ETL_LOG";
                info.OrderBy.Add("CREATE_DATE desc");
                ds = svc.ExcuteDataSet(info);
                dataGridView1.AutoGenerateColumns = false;
                this.dataGridView1.DataSource = ds.Tables[0];
                this.dataGridView1.Refresh();

            }
            void OnProcess(object source, FileSystemEventArgs e)
            {
                change = true;
            }
            private System.Timers.Timer time = null;
            FileSystemWatcher watcher = new FileSystemWatcher();
            private void textBox1_Click(object sender, EventArgs e)
            {
                FolderBrowserDialog folder = new FolderBrowserDialog();
                if (folder.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    this.textBox1.Text = folder.SelectedPath;
                }
                // FileDialog
            }
            bool change = true;
            private void monitor_Tick(object sender, EventArgs e)
            {
                this.Invoke(new Action(() =>
                {
                    System.IO.DirectoryInfo path = new DirectoryInfo(watcher.Path);
                    System.IO.FileInfo[] files = path.GetFiles();
                    if (files != null && files.Length > 0)
                    {
                        change = true;
                        for (int i = 0; i < files.Length; i++)
                        {
                            string fileName = files[i].FullName;
                            try
                            {
                                int count = 0;
                                string extention = System.IO.Path.GetExtension(fileName);
                                if (extention.ToLower().IndexOf("xls") > -1)
                                {
                                    count = svc.SaveImportExcel(fileName);
                                }

                                string success = watcher.Path + @"成功文件" + DateTime.Now.ToString("yyyy-MM-ddHHmmss") + System.IO.Path.GetFileName(fileName);
                                System.IO.File.Move(fileName, success);
                                Contract.Domain.EtlLog log = new EtlLog();
                                log.CreateDate = DateTime.Now;
                                log.Status = "成功";
                                log.Remark = string.Format("共导入{0}条", count);
                                log.FileName = System.IO.Path.GetFileName(success);
                                log.State.MarkNew();
                                svc.SaveEtlLog(log);
                                var row = ds.Tables[0].NewRow();
                                row["FILE_NAME"] = System.IO.Path.GetFileName(success);
                                row["CREATE_DATE"] = DateTime.Now;
                                row["STATUS"] = "成功";
                                row["Remark"] = log.Remark;
                                ds.Tables[0].Rows.InsertAt(row, 0);
                                this.dataGridView1.DataSource = ds.Tables[0];
                                this.dataGridView1.Refresh();

                            }
                            catch (Exception ex)
                            {

                                Contract.Domain.EtlLog log = new Contract.Domain.EtlLog();
                                log.CreateDate = DateTime.Now;
                                log.Status = "失败";
                                log.Remark = string.Format("导入失败,因为{0}", ex.Message);
                                var row = ds.Tables[0].NewRow();
                                string errorFile = watcher.Path + @"错误文件" + DateTime.Now.ToString("yyyy-MM-ddHHmmss") + System.IO.Path.GetFileName(fileName);
                                row["FILE_NAME"] = System.IO.Path.GetFileName(errorFile);
                                log.FileName = System.IO.Path.GetFileName(fileName);
                                log.State.MarkNew();
                                svc.SaveEtlLog(log);
                                row["CREATE_DATE"] = DateTime.Now;
                                row["STATUS"] = "失败"; ;
                                row["Remark"] = log.Remark;
                                ds.Tables[0].Rows.InsertAt(row, 0);
                                this.dataGridView1.DataSource = ds.Tables[0];
                                this.dataGridView1.Refresh();
                                System.IO.File.Move(fileName, errorFile);
                                Utility.JSUtil.log(ex);

                            }
                        }
                    }
                    else
                    {
                        change = false;
                    }

                }));

            }

            protected Framework.Proxy.IApplicationContext ctx
            {
                get
                {
                    return Framework.Proxy.Context.ApplicationContext.GetContext();
                }
            }
            Contract.IService.IEtlExcelService _svc;
            Contract.IService.IEtlExcelService svc
            {
                get
                {
                    if (_svc == null)
                    {
                        _svc = (IEtlExcelService)ctx.GetObject("EtlExcelService");
                    }
                    return _svc;
                }
            }

            private void button1_Click(object sender, EventArgs e)
            {
                this.button2.Enabled = true;
                button1.Enabled = false;
                time.Start();
            }

            private void button2_Click(object sender, EventArgs e)
            {
                this.button2.Enabled = true;
                button1.Enabled = false;
                time.Stop();
            }
        }
    }



    }

  • 相关阅读:
    怎样搭建PHP开发环境
    求教Sublime Text2 SublimeLinter插件安装问题
    借助 SublimeLinter 编写高质量的 JavaScript & CSS 代码
    sublime 支持php语法错误提示的插件
    sublime text 2 配置php调试环境
    解决file_get_contents无法请求https连接的方法
    JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别
    JavaSE(五)JAVA对象向上转型和向下转型
    JavaSE(四)之接口、访问控制
    JavaSE(二)之继承、封装、多态
  • 原文地址:https://www.cnblogs.com/kexb/p/4502304.html
Copyright © 2011-2022 走看看