using DTO; using IServices; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; using System.Transactions; using zhengcaioa.IService; using zhengcaioa.Models; namespace zhengcaioa.Timer { public class TimerGetShopUsersService : BackgroundService { private readonly ILogger _logger; private readonly IConfiguration _configuration; private readonly ILiaotianService _liaotianService; private readonly IHttpClientFactory _clientFactory; private readonly ICooperatecustomCustomerService _cooperatecustomCustomerService; public TimerGetShopUsersService(ILogger logger, IServiceScopeFactory factory) { _logger = logger; _configuration = factory.CreateScope().ServiceProvider.GetRequiredService(); _liaotianService = factory.CreateScope().ServiceProvider.GetRequiredService(); _clientFactory = factory.CreateScope().ServiceProvider.GetRequiredService(); _cooperatecustomCustomerService = factory.CreateScope().ServiceProvider.GetRequiredService(); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("TimerGetShopUsersService is starting."); //stoppingToken.Register(() => File.Create($"E:\\dotnetCore\\Practice\\Practice\\{DateTime.Now.Millisecond}.txt")); DateTime datenow = DateTime.Now; while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("TimerGetShopUsersService 开始执行"); _logger.LogInformation(datenow.ToString("yyyy-MM-dd HH:mm:ss")); //每个小时计算一次 if (datenow.Hour == DateTime.Now.Hour) //if (true) { try { await this.huoquhuiyuanAsync(); } catch (Exception ex) { _logger.LogInformation(ex.ToString()); } datenow = DateTime.Now.AddHours(1); } await Task.Delay(TimeSpan.FromMinutes(10), stoppingToken); _logger.LogInformation("TimerGetShopUsersService 继续执行"); } _logger.LogInformation("TimerGetShopUsersService background task is stopping."); } public override void Dispose() { base.Dispose(); } public async Task huoquhuiyuanAsync() { string Shuchengurl = _configuration.GetSection("Shuchengurl").Value; string GetShopUsers = _configuration.GetSection("GetShopUsers").Value; string huiyuanurl = _configuration.GetSection("huiyuanurl").Value; string GetDateFirstOrderUser = _configuration.GetSection("GetDateFirstOrderUser").Value; string GetUserinfoAndRule = _configuration.GetSection("GetUserinfoAndRule").Value; ResultEntity resultEntity = new ResultEntity(); resultEntity.Result = false; // new TransactionScope(TransactionScopeOption.Required, // new TransactionOptions // { // IsolationLevel = IsolationLevel.ReadCommitted, // Timeout = TransactionManager.MaximumTimeout // } //) //using (TransactionScope scope = new TransactionScope()) //{ //获取最后更新时间 DateTime start = DateTime.Now.AddYears(-10); DateTime end = DateTime.Now; var ssss = _liaotianService.GetSysUpdatetime("getCustomers"); if (ssss != null) { start = ssss.Updatetime; } _logger.LogInformation("start:" + start); _logger.LogInformation("end:" + end); //获取客户并且保存到合作客户 #region 书城 string result = string.Empty; Uri getUrl = new Uri(Shuchengurl + GetShopUsers + "?start="+ start.ToString("yyyy-MM-dd HH:mm:ss") + "&end="+ end.ToString("yyyy-MM-dd HH:mm:ss")); var httpClient = _clientFactory.CreateClient(); httpClient.Timeout = new TimeSpan(0, 0, 10); var Result = await httpClient.GetAsync(getUrl); result = Result.Content.ReadAsStringAsync().Result; _logger.LogInformation("result:" + result); JObject jobjectresult = (JObject)JsonConvert.DeserializeObject(result); if (jobjectresult["code"] != null && jobjectresult["code"].ToString() == "1") { if(jobjectresult["returnObj"] != null && jobjectresult["returnObj"].ToString() != "") { JArray hits = (JArray)jobjectresult["returnObj"]; foreach (var hit in hits) { string id = hit["id"].ToString().ToLower(); CooperatecustomCustomerDTO cooperatecustomCustomerDTO = _cooperatecustomCustomerService.GetList(id).FirstOrDefault(); //如果不存在关联客户 if (cooperatecustomCustomerDTO == null) { string result2 = string.Empty; Uri postUrl2 = new Uri(huiyuanurl + GetUserinfoAndRule); JObject questions2 = new JObject(); questions2.Add("UserID", id); string requestJson2 = questions2.ToString(); using (HttpContent httpContent = new StringContent(requestJson2)) { httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var httpClient2 = _clientFactory.CreateClient(); httpClient2.Timeout = new TimeSpan(0, 0, 10); var Result2 = await httpClient2.PostAsync(postUrl2, httpContent); result2 = Result2.Content.ReadAsStringAsync().Result; } _logger.LogInformation("result2:" + result2); JObject jobjectresult2 = (JObject)JsonConvert.DeserializeObject(result2); if (jobjectresult2["code"] == null || jobjectresult2["code"].ToString() != "1") { throw new Exception(jobjectresult2["msg"].ToString()); } JObject jobjectkehu = (JObject)jobjectresult2["data"]; if (jobjectkehu == null || jobjectkehu["Name"] == null || jobjectkehu["Name"].ToString() == "") { throw new Exception("未找到对应的会员!"); } cooperatecustomCustomerDTO = _cooperatecustomCustomerService.GetList("", jobjectkehu["Name"].ToString()).FirstOrDefault(); //如果不存在当前名字的客户 if (cooperatecustomCustomerDTO == null) { cooperatecustomCustomerDTO = new CooperatecustomCustomerDTO(); cooperatecustomCustomerDTO.Name = jobjectkehu["Name"].ToString(); cooperatecustomCustomerDTO.Tel = jobjectkehu["phonecode"].ToString(); cooperatecustomCustomerDTO.Phone = jobjectkehu["phonecode"].ToString(); cooperatecustomCustomerDTO.HuiyuanId = id; //cooperatecustomCustomerDTO.Remark = hit["personal"].ToString() + "下单时间" + hit["Firsttime"].ToString(); cooperatecustomCustomerDTO.Khly = "01"; cooperatecustomCustomerDTO.Creater = "1"; cooperatecustomCustomerDTO.Createtime = DateTime.Now; cooperatecustomCustomerDTO.Modifier = cooperatecustomCustomerDTO.Creater; cooperatecustomCustomerDTO.Modifytime = cooperatecustomCustomerDTO.Createtime; cooperatecustomCustomerDTO.ShrName = hit["accept_name"].ToString(); cooperatecustomCustomerDTO.ShrTel = hit["mobile"].ToString(); cooperatecustomCustomerDTO.ShrAddress = hit["area"].ToString() + hit["address"].ToString(); resultEntity = _cooperatecustomCustomerService.save(cooperatecustomCustomerDTO); if (!resultEntity.Result) { throw new Exception("保存合作客户:" + cooperatecustomCustomerDTO.Name + "出错!"); } } else { cooperatecustomCustomerDTO.HuiyuanId = id; cooperatecustomCustomerDTO.ShrName = hit["accept_name"].ToString(); cooperatecustomCustomerDTO.ShrTel = hit["mobile"].ToString(); cooperatecustomCustomerDTO.ShrAddress = hit["area"].ToString() + hit["address"].ToString(); resultEntity = _cooperatecustomCustomerService.save(cooperatecustomCustomerDTO); if (!resultEntity.Result) { throw new Exception("保存合作客户:" + cooperatecustomCustomerDTO.Name + "出错!"); } } } else { cooperatecustomCustomerDTO.HuiyuanId = id; cooperatecustomCustomerDTO.ShrName = hit["accept_name"].ToString(); cooperatecustomCustomerDTO.ShrTel = hit["mobile"].ToString(); cooperatecustomCustomerDTO.ShrAddress = hit["area"].ToString() + hit["address"].ToString(); resultEntity = _cooperatecustomCustomerService.save(cooperatecustomCustomerDTO); if (!resultEntity.Result) { throw new Exception("保存合作客户:" + cooperatecustomCustomerDTO.Name + "出错!"); } } } } } else { throw new Exception(jobjectresult["error"].ToString()); } #endregion #region 会员 string result1 = string.Empty; Uri postUrl = new Uri(huiyuanurl + GetDateFirstOrderUser); JObject questions = new JObject(); questions.Add("start", start.ToString("yyyy-MM-dd HH:mm:ss")); questions.Add("end", end.ToString("yyyy-MM-dd HH:mm:ss")); string requestJson = questions.ToString(); using (HttpContent httpContent = new StringContent(requestJson)) { httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var httpClient1 = _clientFactory.CreateClient(); httpClient1.Timeout = new TimeSpan(0, 0, 10); var Result1 = await httpClient1.PostAsync(postUrl, httpContent); result1 = Result1.Content.ReadAsStringAsync().Result; } _logger.LogInformation("result1:" + result1); JObject jobject = (JObject)JsonConvert.DeserializeObject(result1); if (jobject["code"] != null && jobject["code"].ToString() == "1") { if (jobject["data"] != null && jobject["data"].ToString() != "") { JArray hits = (JArray)jobject["data"]; foreach (var hit in hits) { CooperatecustomCustomerDTO cooperatecustomCustomerDTO = _cooperatecustomCustomerService.GetList(hit["ID"].ToString()).FirstOrDefault(); //如果不存在关联客户 if (cooperatecustomCustomerDTO == null) { cooperatecustomCustomerDTO = _cooperatecustomCustomerService.GetList("", hit["Name"].ToString()).FirstOrDefault(); //如果不存在当前名字的客户 if (cooperatecustomCustomerDTO == null) { cooperatecustomCustomerDTO = new CooperatecustomCustomerDTO(); cooperatecustomCustomerDTO.Name = hit["Name"].ToString(); cooperatecustomCustomerDTO.Tel = hit["PhoneCode"].ToString(); cooperatecustomCustomerDTO.Phone = hit["PhoneCode"].ToString(); cooperatecustomCustomerDTO.HuiyuanId = hit["ID"].ToString(); cooperatecustomCustomerDTO.Remark = hit["personal"].ToString() + "下单时间" + hit["Firsttime"].ToString(); cooperatecustomCustomerDTO.Khly = "01"; cooperatecustomCustomerDTO.Creater = "1"; cooperatecustomCustomerDTO.Createtime = DateTime.Now; cooperatecustomCustomerDTO.Modifier = cooperatecustomCustomerDTO.Creater; cooperatecustomCustomerDTO.Modifytime = cooperatecustomCustomerDTO.Createtime; resultEntity = _cooperatecustomCustomerService.save(cooperatecustomCustomerDTO); if (!resultEntity.Result) { throw new Exception("保存合作客户:" + cooperatecustomCustomerDTO.Name + "出错!"); } } else { cooperatecustomCustomerDTO.HuiyuanId = hit["ID"].ToString(); resultEntity = _cooperatecustomCustomerService.save(cooperatecustomCustomerDTO); if (!resultEntity.Result) { throw new Exception("保存合作客户:" + cooperatecustomCustomerDTO.Name + "出错!"); } } } } } } else { throw new Exception(jobject["msg"].ToString()); } #endregion //保存最后更新时间 if (ssss != null) { ssss.Updatetime = end; } else { ssss = new SysUpdatetime(); ssss.Updatetime = end; ssss.Updatename = "getCustomers"; } resultEntity = _liaotianService.saveSysUpdatetime(ssss); if (!resultEntity.Result) { throw new Exception("保存更新时间出错!"); } // scope.Complete(); //} } } }