using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using System.Linq; using Microsoft.Extensions.Hosting; using MySystem; using MySystem.Models; using Library; using LitJson; public class PublicService : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { ProgressStart(); int timespan = 1; await Task.Delay(timespan); } } private void ProgressStart() { List BrandList = RedisDbconn.Instance.GetList("brands", 1, 100); foreach(Brand brand in BrandList) { Dictionary data = new Dictionary(); try { data = RedisDbconn.Instance.RPop>(brand.QueueName); if (data != null) { DoQueue(data["Content"], brand); } } catch (Exception ex) { if (!data.ContainsKey("ErrNum")) { data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); data.Add("ErrMsg", ex.ToString()); data.Add("ErrNum", "1"); RedisDbconn.Instance.AddList(brand.QueueName + "_err", data); } else { int ErrNum = int.Parse(data["ErrNum"]) + 1; data["ErrTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); data["ErrMsg"] = ex.ToString(); data["ErrNum"] = ErrNum.ToString(); if (ErrNum > 2) { RedisDbconn.Instance.AddList(brand.QueueName + "_dead", data); } else { RedisDbconn.Instance.AddList(brand.QueueName + "_err", data); } } } } } // private void ProgressStart() // { // List BrandList = RedisDbconn.Instance.GetList("brands", 1, 100); // Parallel.ForEach(BrandList, brand => // { // Dictionary data = new Dictionary(); // try // { // data = RedisDbconn.Instance.RPop>(brand.QueueName); // if (data != null) // { // DoQueue(data["Content"], brand); // } // } // catch (Exception ex) // { // if (!data.ContainsKey("ErrNum")) // { // data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); // data.Add("ErrMsg", ex.ToString()); // data.Add("ErrNum", "1"); // RedisDbconn.Instance.AddList(brand.QueueName + "_err", data); // } // else // { // int ErrNum = int.Parse(data["ErrNum"]) + 1; // data["ErrTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // data["ErrMsg"] = ex.ToString(); // data["ErrNum"] = ErrNum.ToString(); // if (ErrNum > 2) // { // RedisDbconn.Instance.AddList(brand.QueueName + "_dead", data); // } // else // { // RedisDbconn.Instance.AddList(brand.QueueName + "_err", data); // } // } // } // }); // } //要执行的方法 public void DoQueue(string data, Brand brand) { //数据开始入库 JsonData jsonObj = JsonMapper.ToObject(data); string fields = ""; string fieldvals = ""; foreach (FieldRelationTable field in brand.FieldRelation) { string fType = field.TargetFieldType; string val = jsonObj[field.SourceFieldName].ToString(); fields += field.TargetFieldName + ","; if (fType == "int") { fieldvals += int.Parse(function.CheckInt(val)) + ","; } else if (fType == "decimal") { fieldvals += decimal.Parse(function.CheckNum(val)) + ","; } else if (fType == "datetime") { fieldvals += "'" + DateTime.Parse(val) + "',"; } else { fieldvals += "'" + val + "',"; } } fields = fields.TrimEnd(','); fieldvals = fieldvals.TrimEnd(','); string sql = "insert into " + brand.TargetTableName + " (" + fields + ") values (" + fieldvals + ")"; dbconn.op(sql); } }