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;
|
|
|
|
|
|
|
|
|
|
|
|
//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, 60);
|
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, 60);
|
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["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, 60);
|
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();
|
//}
|
|
|
|
|
|
|
|
}
|
}
|
}
|