LR-20210131IOQH\Administrator
2021-08-10 d4a6d65f5e449c3e5464aa18ae97bf8953987217
zhengcaioa/zhengcaioa/Timer/TimerGetShopUsersService.cs
New file
@@ -0,0 +1,374 @@
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<TimerGetShopUsersService> logger, IServiceScopeFactory factory)
        {
            _logger = logger;
            _configuration = factory.CreateScope().ServiceProvider.GetRequiredService<IConfiguration>();
            _liaotianService = factory.CreateScope().ServiceProvider.GetRequiredService<ILiaotianService>();
            _clientFactory = factory.CreateScope().ServiceProvider.GetRequiredService<IHttpClientFactory>();
            _cooperatecustomCustomerService = factory.CreateScope().ServiceProvider.GetRequiredService<ICooperatecustomCustomerService>();
        }
        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();
            //}
        }
    }
}