|
@@ -0,0 +1,146 @@
|
|
|
+using System;
|
|
|
+using System.Linq;
|
|
|
+using System.Threading;
|
|
|
+using Library;
|
|
|
+using LitJson;
|
|
|
+using MySystem.Models.Push;
|
|
|
+
|
|
|
+namespace MySystem
|
|
|
+{
|
|
|
+ public class SourceHelper
|
|
|
+ {
|
|
|
+ public readonly static SourceHelper Instance = new SourceHelper();
|
|
|
+ private SourceHelper()
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Start()//启动
|
|
|
+ {
|
|
|
+ Thread thread = new Thread(threadStart);
|
|
|
+ thread.IsBackground = true;
|
|
|
+ thread.Start();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void threadStart()
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ DoSomeThing();
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //要执行的方法
|
|
|
+ public void DoSomeThing()
|
|
|
+ {
|
|
|
+ WebCMSEntities db = new WebCMSEntities();
|
|
|
+ var sources = db.SourceData.Where(m => m.Status == 1).ToList();
|
|
|
+ foreach(var source in sources)
|
|
|
+ {
|
|
|
+ string Title = source.Title; //说明
|
|
|
+ string TableName = source.TableName; //数据表
|
|
|
+ string FieldList = source.FieldList; //原始数据字段
|
|
|
+ string TargetFieldList = source.TargetFieldList; //目标数据字段
|
|
|
+ string QueryField = "";
|
|
|
+ JsonData fieldJson = JsonMapper.ToObject(FieldList);
|
|
|
+ for (int i = 0; i < fieldJson.Count; i++)
|
|
|
+ {
|
|
|
+ JsonData item = fieldJson[i];
|
|
|
+ QueryField += item["name"].ToString() + ",";
|
|
|
+ }
|
|
|
+
|
|
|
+ //构造抓取数据
|
|
|
+ string sql = "select " + QueryField.TrimEnd(',') + " from " + TableName + " where 1=1";
|
|
|
+ var condiList = db.SourceCondition.Where(m => m.SourceId == source.Id).ToList();
|
|
|
+ foreach(var condi in condiList)
|
|
|
+ {
|
|
|
+ int QueryCondition = condi.QueryCondition;
|
|
|
+ if(QueryCondition == 1)
|
|
|
+ {
|
|
|
+ sql += " and " + condi.QueryField + "='" + condi.QueryVal + "'";
|
|
|
+ }
|
|
|
+ else if(QueryCondition == 2)
|
|
|
+ {
|
|
|
+ sql += " and " + condi.QueryField + " like '%" + condi.QueryVal + "%'";
|
|
|
+ }
|
|
|
+ else if(QueryCondition == 3)
|
|
|
+ {
|
|
|
+ string[] QueryValList = condi.QueryVal.Split('|');
|
|
|
+ sql += " and " + condi.QueryField + ">=" + QueryValList[0] + " and " + condi.QueryField + "<=" + QueryValList[1] + "";
|
|
|
+ }
|
|
|
+ else if(QueryCondition == 4)
|
|
|
+ {
|
|
|
+ string[] QueryValList = condi.QueryVal.Split('|');
|
|
|
+ sql += " and " + condi.QueryField + ">='" + QueryValList[0] + "' and " + condi.QueryField + "<='" + QueryValList[1] + "'";
|
|
|
+ }
|
|
|
+ else if(QueryCondition == 5)
|
|
|
+ {
|
|
|
+ sql += " and " + condi.QueryField + " in (" + condi.QueryVal + ")";
|
|
|
+ }
|
|
|
+ else if(QueryCondition == 6)
|
|
|
+ {
|
|
|
+ sql += " and " + condi.QueryField + " in ('" + condi.QueryVal.Replace(",", "','") + "')";
|
|
|
+ }
|
|
|
+ else if(QueryCondition == 7)
|
|
|
+ {
|
|
|
+ string[] QueryValList = condi.QueryVal.Split(',');
|
|
|
+ sql += " and (";
|
|
|
+ int index = 0;
|
|
|
+ foreach(string QueryVal in QueryValList)
|
|
|
+ {
|
|
|
+ index += 1;
|
|
|
+ sql += condi.QueryField + "=" + QueryVal;
|
|
|
+ if(index < QueryValList.Length)
|
|
|
+ {
|
|
|
+ sql += " or ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sql += ")";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ sql += " and " + condi.QueryField + "=" + condi.QueryVal;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建原始数据表
|
|
|
+ var sourceEdit = db.SourceData.FirstOrDefault(m => m.Id == source.Id && m.Version == 0);
|
|
|
+ if(sourceEdit != null)
|
|
|
+ {
|
|
|
+ CreateTable(Title, TableName, TargetFieldList);
|
|
|
+ sourceEdit.Version = 1;
|
|
|
+ db.SaveChanges();
|
|
|
+ }
|
|
|
+
|
|
|
+ //插入数据
|
|
|
+ string TargetQueryField = "";
|
|
|
+ JsonData TargetFieldJson = JsonMapper.ToObject(TargetFieldList);
|
|
|
+ for (int i = 0; i < TargetFieldJson.Count; i++)
|
|
|
+ {
|
|
|
+ JsonData item = TargetFieldJson[i];
|
|
|
+ TargetQueryField += item["name"].ToString() + ",";
|
|
|
+ }
|
|
|
+ string insertSql = "insert into " + TableName + " (" + TargetQueryField + ")" + sql;
|
|
|
+ CustomerSqlConn.op(insertSql, AppConfig.Base.SqlConnStr);
|
|
|
+ }
|
|
|
+ db.Dispose();
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建表
|
|
|
+ public void CreateTable(string Title, string tableName, string fieldList)
|
|
|
+ {
|
|
|
+ string sql = "CREATE TABLE `" + tableName + "` (\n";
|
|
|
+ sql += "`id` int(11) NOT NULL AUTO_INCREMENT,\n";
|
|
|
+ sql += "`status` int(11) NOT NULL,\n";
|
|
|
+ JsonData fieldJson = JsonMapper.ToObject(fieldList);
|
|
|
+ for (int i = 0; i < fieldJson.Count; i++)
|
|
|
+ {
|
|
|
+ JsonData item = fieldJson[i];
|
|
|
+ sql += "`" + item["name"].ToString() + "` varchar(" + item["len"].ToString() + ") DEFAULT NULL COMMENT '" + item["title"].ToString() + "',\n";
|
|
|
+ }
|
|
|
+ sql += "PRIMARY KEY (`id`)\n";
|
|
|
+ sql += ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='" + Title + "';";
|
|
|
+ CustomerSqlConn.op(sql, AppConfig.Base.SqlConnStr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|