|
|
|
|
using Furion;
|
|
|
|
|
using Furion.DataEncryption;
|
|
|
|
|
using Furion.LinqBuilder;
|
|
|
|
|
using Furion.Logging;
|
|
|
|
|
using Furion.RemoteRequest.Extensions;
|
|
|
|
|
using Furion.TaskScheduler;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Myshipping.Application.Entity;
|
|
|
|
|
using Myshipping.Application.Enum;
|
|
|
|
|
using Myshipping.Application.MQ;
|
|
|
|
|
using Myshipping.Core;
|
|
|
|
|
using Myshipping.Core.Entity;
|
|
|
|
|
using Myshipping.Core.Helper;
|
|
|
|
|
using Myshipping.Core.Service;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
|
using NPOI.HSSF.Record.Cont;
|
|
|
|
|
using RabbitMQ.Client;
|
|
|
|
|
using SqlSugar;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Net.Http;
|
|
|
|
|
using System.Runtime.ConstrainedExecution;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Myshipping.Application.Job
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取LARA提单号
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class GetLaraBlnoWorker : ISpareTimeWorker
|
|
|
|
|
{
|
|
|
|
|
private const string ListKey = "LaraBlnoTaskList";
|
|
|
|
|
|
|
|
|
|
[SpareTime(60000, "GetLaraBlnoWorker", Description = "获取LARA提单号", DoOnce = false, StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)]
|
|
|
|
|
public async void GetLaraBlno(SpareTimer timer, long count)
|
|
|
|
|
{
|
|
|
|
|
Log.Information($"GetLaraBlnoWorker {DateTime.Now}");
|
|
|
|
|
|
|
|
|
|
var cache = App.GetService<ISysCacheService>();
|
|
|
|
|
var sysConfig = await cache.GetAllSysConfig();
|
|
|
|
|
|
|
|
|
|
var cfgCsrToBlnoSpiderUrl = sysConfig.FirstOrDefault(x => x.Code == "LaraCsrToBlnoSpiderUrl" && x.GroupCode == "DJY_CONST");
|
|
|
|
|
if (cfgCsrToBlnoSpiderUrl == null || string.IsNullOrEmpty(cfgCsrToBlnoSpiderUrl.Value))
|
|
|
|
|
{
|
|
|
|
|
var msg = $"根据CS号从lara获取提单号,未配置爬虫URL地址";
|
|
|
|
|
Log.Error(msg);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var list = await cache.GetAsync<List<GetLaraBlnoModel>>(ListKey);
|
|
|
|
|
if (list != null)
|
|
|
|
|
{
|
|
|
|
|
list = list.Where(x => x.Start > DateTime.Now.AddHours(-8)).ToList(); //超过8小时不再处理
|
|
|
|
|
var toDoList = list.Where(x => x.Last < DateTime.Now.AddMinutes(-10)).ToList(); //10分钟处理一次
|
|
|
|
|
toDoList.ForEach(x => x.Last = DateTime.Now);
|
|
|
|
|
cache.Set(ListKey, list);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var item in toDoList)
|
|
|
|
|
{
|
|
|
|
|
Log.Information($"请求爬虫根据CS号从lara获取提单号,CSR:{item.CsrCode}");
|
|
|
|
|
string response = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var apiUrl = $"{cfgCsrToBlnoSpiderUrl.Value}?mblno=&refno={item.CsrCode}";
|
|
|
|
|
response = await apiUrl
|
|
|
|
|
.SetClientTimeout(30)
|
|
|
|
|
.GetAsStringAsync();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Log.Error($"请求爬虫根据CS号从lara获取提单号执行出错:{ex.Message},CSR:{item.CsrCode}");
|
|
|
|
|
Log.Error(ex.StackTrace);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Log.Information($"请求爬虫根据CS号从lara获取提单号({item.CsrCode}),返回:{response}");
|
|
|
|
|
var jobjResp = JObject.Parse(response);
|
|
|
|
|
if (jobjResp.GetIntValue("status") == 1)
|
|
|
|
|
{
|
|
|
|
|
var jobjData = jobjResp.GetJObjectValue("data");
|
|
|
|
|
var bno = jobjData.GetStringValue("bno");
|
|
|
|
|
if (bno != item.CsrCode) //不是CS号
|
|
|
|
|
{
|
|
|
|
|
//推送订舱自动化消息
|
|
|
|
|
var dto = new
|
|
|
|
|
{
|
|
|
|
|
Carrier = item.Carrier,
|
|
|
|
|
CompanyId = item.CompanyId,
|
|
|
|
|
TenantId = item.TenantId,
|
|
|
|
|
MBLNO = bno,
|
|
|
|
|
CsrCode = item.CsrCode
|
|
|
|
|
};
|
|
|
|
|
Log.Information($"准备推送订舱自动化消息LARA提单号:{JsonConvert.SerializeObject(dto)}");
|
|
|
|
|
ConnectionFactory factory = new ConnectionFactory();
|
|
|
|
|
factory.Uri = new Uri(App.Configuration["MQBookingAuto"]);
|
|
|
|
|
var mqConn = factory.CreateConnection("GetLaraBlnoWorker");
|
|
|
|
|
var exchangeName = "djy.booking.auto";
|
|
|
|
|
IModel model = mqConn.CreateModel();
|
|
|
|
|
model.ExchangeDeclare(exchange: exchangeName, type: ExchangeType.Topic);
|
|
|
|
|
model.BasicPublish(exchange: exchangeName,
|
|
|
|
|
routingKey: "LaraBlno",
|
|
|
|
|
basicProperties: null,
|
|
|
|
|
body: Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dto)));
|
|
|
|
|
|
|
|
|
|
mqConn.Close();
|
|
|
|
|
Log.Information($"推送订舱自动化消息LARA提单号完成");
|
|
|
|
|
|
|
|
|
|
//移除已完成
|
|
|
|
|
list = await cache.GetAsync<List<GetLaraBlnoModel>>(ListKey);
|
|
|
|
|
list = list.Where(x => x.CsrCode != item.CsrCode).ToList();
|
|
|
|
|
cache.Set(ListKey, list);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class GetLaraBlnoModel
|
|
|
|
|
{
|
|
|
|
|
public string CsrCode { get; set; }
|
|
|
|
|
public string Carrier { get; set; }
|
|
|
|
|
public string CompanyId { get; set; }
|
|
|
|
|
|
|
|
|
|
public long TenantId { get; set; }
|
|
|
|
|
|
|
|
|
|
public DateTime Start { get; set; } = DateTime.Now;
|
|
|
|
|
|
|
|
|
|
public DateTime Last { get; set; } = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
}
|