|
|
|
|
using Furion;
|
|
|
|
|
using Furion.DataEncryption;
|
|
|
|
|
using Furion.Logging;
|
|
|
|
|
using Furion.RemoteRequest.Extensions;
|
|
|
|
|
using Furion.TaskScheduler;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Myshipping.Application.Entity;
|
|
|
|
|
using Myshipping.Core;
|
|
|
|
|
using Myshipping.Core.Entity;
|
|
|
|
|
using Myshipping.Core.Helper;
|
|
|
|
|
using Myshipping.Core.Service;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
|
using SqlSugar;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Net.Http;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Myshipping.Application.Job
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 和川数据与东胜比对
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class HCDataCompareWorker : ISpareTimeWorker
|
|
|
|
|
{
|
|
|
|
|
[SpareTime(60000, "HCDataCompareWorker", Description = "和川数据与东胜比对", DoOnce = false, StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)]
|
|
|
|
|
public async void CompareData(SpareTimer timer, long count)
|
|
|
|
|
{
|
|
|
|
|
Log.Information($"HCDataCompareWorker {DateTime.Now}");
|
|
|
|
|
|
|
|
|
|
var tenantId = 349708986646597L;
|
|
|
|
|
var _sugerClient = App.GetService<ISqlSugarClient>();
|
|
|
|
|
_sugerClient.QueryFilter.Clear();
|
|
|
|
|
var _repBooking = App.GetService<SqlSugarRepository<BookingOrder>>();
|
|
|
|
|
var _repCtn = App.GetService<SqlSugarRepository<BookingCtn>>();
|
|
|
|
|
var _cache = App.GetService<ISysCacheService>();
|
|
|
|
|
var _log = App.GetService<ILogger<HCDataCompareWorker>>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var jsonUrl = _cache.GetAllDictData().Result.FirstOrDefault(x => x.TypeCode == "url_set" && x.Code == "hc_ds_compare_url").Value;
|
|
|
|
|
if (!jsonUrl.EndsWith("/"))
|
|
|
|
|
{
|
|
|
|
|
jsonUrl += "/";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//找到主单未开船数据
|
|
|
|
|
var listZhu = _repBooking.AsQueryable()
|
|
|
|
|
.Filter(null, true)
|
|
|
|
|
.Where(x => x.IsDeleted == false
|
|
|
|
|
&& x.TenantId == tenantId
|
|
|
|
|
&& !x.ATD.HasValue
|
|
|
|
|
&& (x.ParentId == null || x.ParentId == 0))
|
|
|
|
|
.Select(x => new HCDataCompareSendModel
|
|
|
|
|
{
|
|
|
|
|
Id = x.Id,
|
|
|
|
|
MBLNO = x.MBLNO
|
|
|
|
|
})
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
//获取分单,构建数据对象
|
|
|
|
|
var zhuIdList = listZhu.Select(x => x.Id).ToList();
|
|
|
|
|
var listFen = _repBooking.AsQueryable()
|
|
|
|
|
.Where(x => x.IsDeleted == false
|
|
|
|
|
&& x.TenantId == tenantId
|
|
|
|
|
&& x.ParentId != null
|
|
|
|
|
&& zhuIdList.Contains(x.ParentId.Value))
|
|
|
|
|
.Select(x => new
|
|
|
|
|
{
|
|
|
|
|
x.Id,
|
|
|
|
|
x.MBLNO,
|
|
|
|
|
x.ParentId,
|
|
|
|
|
x.VERSION
|
|
|
|
|
})
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
foreach (var item in listZhu)
|
|
|
|
|
{
|
|
|
|
|
item.Sub = listFen
|
|
|
|
|
.Where(x => x.ParentId == item.Id)
|
|
|
|
|
.Select(x => new HCDataCompareSendSubModel
|
|
|
|
|
{
|
|
|
|
|
Id = x.Id,
|
|
|
|
|
MBLNO = x.MBLNO,
|
|
|
|
|
VERSION = x.VERSION
|
|
|
|
|
})
|
|
|
|
|
.ToList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//找到昨天至今删除的数据
|
|
|
|
|
var startTime = DateTime.Today.AddDays(-1);
|
|
|
|
|
var listDel = _repBooking.AsQueryable()
|
|
|
|
|
.Filter(null, true)
|
|
|
|
|
.Where(x => x.IsDeleted == true
|
|
|
|
|
&& x.TenantId == tenantId
|
|
|
|
|
&& x.CreatedTime > startTime)
|
|
|
|
|
.Select(x => new HCDataCompareSendModel
|
|
|
|
|
{
|
|
|
|
|
Id = x.Id,
|
|
|
|
|
MBLNO = x.MBLNO,
|
|
|
|
|
VERSION = x.VERSION
|
|
|
|
|
})
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
var sendModel = new
|
|
|
|
|
{
|
|
|
|
|
Normal = listZhu,
|
|
|
|
|
Deleted = listDel,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
_log.LogInformation($"发送待比较数据:{JsonConvert.SerializeObject(sendModel)}");
|
|
|
|
|
|
|
|
|
|
var rtn = await jsonUrl
|
|
|
|
|
.SetBody(sendModel)
|
|
|
|
|
.PostAsStringAsync();
|
|
|
|
|
|
|
|
|
|
_log.LogInformation($"调用比对返回结果:{rtn}");
|
|
|
|
|
|
|
|
|
|
StringBuilder sbMessage = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
var jobjRtn = JObject.Parse(rtn);
|
|
|
|
|
if (jobjRtn.GetIntValue("Code") == 200)
|
|
|
|
|
{
|
|
|
|
|
var data = jobjRtn.GetJObjectValue("Data");
|
|
|
|
|
if (data != null)
|
|
|
|
|
{
|
|
|
|
|
var normal = data.GetJArrayValue("Normal");
|
|
|
|
|
if (normal != null)
|
|
|
|
|
{
|
|
|
|
|
sbMessage.AppendLine("正常业务:");
|
|
|
|
|
foreach (JObject item in normal)
|
|
|
|
|
{
|
|
|
|
|
sbMessage.AppendLine($"{item.GetStringValue("MBLNO")}(ID:{item.GetStringValue("Id")}) 异常信息:{item.GetStringValue("Result")}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var deleted = data.GetJArrayValue("Deleted");
|
|
|
|
|
if (deleted != null)
|
|
|
|
|
{
|
|
|
|
|
sbMessage.AppendLine("已删除业务:");
|
|
|
|
|
foreach (JObject item in deleted)
|
|
|
|
|
{
|
|
|
|
|
sbMessage.AppendLine($"{item.GetStringValue("MBLNO")}(ID:{item.GetStringValue("Id")}) 异常信息:{item.GetStringValue("Result")}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (sbMessage.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
//推送钉钉消息
|
|
|
|
|
DingTalkGroupHelper.SendDingTalkGroupMessage("hechuanCompareNotify", "比对异常结果", sbMessage.ToString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var msg = jobjRtn.GetStringValue("Message");
|
|
|
|
|
_log.LogError($"和川数据比对失败:{msg}");
|
|
|
|
|
|
|
|
|
|
//推送钉钉消息
|
|
|
|
|
DingTalkGroupHelper.SendDingTalkGroupMessage("hechuanCompareNotify", "数据比对未能完成", msg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//发送比对模型对象
|
|
|
|
|
public class HCDataCompareSendModel
|
|
|
|
|
{
|
|
|
|
|
public long Id { get; set; }
|
|
|
|
|
|
|
|
|
|
public string MBLNO { get; set; }
|
|
|
|
|
|
|
|
|
|
public string VERSION { get; set; }
|
|
|
|
|
|
|
|
|
|
public List<HCDataCompareSendSubModel> Sub { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class HCDataCompareSendSubModel
|
|
|
|
|
{
|
|
|
|
|
public long Id { get; set; }
|
|
|
|
|
|
|
|
|
|
public string MBLNO { get; set; }
|
|
|
|
|
|
|
|
|
|
public string VERSION { get; set; }
|
|
|
|
|
}
|
|
|
|
|
}
|