2025-10-21 11:27:52 +08:00

153 lines
6.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using MyCode.Project.Domain.Message.Request.JackYun;
using MyCode.Project.Domain.Model;
using MyCode.Project.Domain.Repositories;
using MyCode.Project.Domain.Repositories.ZHMDRepositories;
using MyCode.Project.Domain.ZHMDModel;
using MyCode.Project.Infrastructure.Common;
using MyCode.Project.Infrastructure.Enumeration;
using MyCode.Project.Infrastructure.Exceptions;
using MyCode.Project.Infrastructure.JackYun;
using MyCode.Project.Repositories;
using MyCode.Project.Repositories.Common;
using MyCode.Project.Repositories.ZHMD;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
namespace MyCode.Project.Services.Implementation
{
public class WMSService : ServiceBase , IWMSService
{
DateTime startTime = DateTime.Parse("2025-08-01");
private IWMStoJackyunInventoryMovementView2Repository _wMStoJackyunInventoryMovementView3Repository;
private IRepository _repository;
private IWorkProcessService _workProcessService;
public WMSService(IWMStoJackyunInventoryMovementView2Repository wMStoJackyunInventoryMovementView3Repository, IRepository repository
, IWorkProcessService workProcessService)
{
_workProcessService = workProcessService;
_wMStoJackyunInventoryMovementView3Repository = wMStoJackyunInventoryMovementView3Repository;
_repository = repository;
}
#region AddTask()
/// <summary>
/// 添加抓单的调度
/// </summary>
public void AddTask()
{
DateTime now = DateTime.Now.Date;
_workProcessService.Add<IWMSService>(this.MerchantId, "GetList", "抓取WMS订单到本地数据库", now.AddDays(-3).ToString("yyyy-MM-dd"), 1);
_workProcessService.Add<IJackYunTaskService>(this.MerchantId, "TaskGetJackYunOrder", "调度运行抓吉客云销售订单", now.ToString("yyyy-MM-dd"), 1);
_workProcessService.Add<IJackYunTaskService>(this.MerchantId, "TaskGetReturnChangeList", "调度运行抓吉客云退货订单", now.ToString("yyyy-MM-dd"), 1);
}
#endregion
#region AddWMSTask(WMS抓单的调度)
/// <summary>
/// 添加WMS抓单的调度
/// </summary>
public void AddWMSTask()
{
DateTime now = DateTime.Now.Date;
_workProcessService.Add<IWMSService>(this.MerchantId, "GetList", "抓取WMS订单到本地数据库", now.Date.ToString("yyyy-MM-dd"), 1);
}
#endregion
public List<WMStoJackyunInventoryMovementView1> GetList(object now2)
{
DateTime now = DateTime.Parse(now2.ToString());
if (now < startTime)
now = startTime;
var list= _wMStoJackyunInventoryMovementView3Repository.GetList(now);
LogHelper.Info("WMS订单行数:" + list.Count);
if (list.Count>0)
SetWMSOrder(list);
return list;
}
#region SetWMSOrder(WMS订单存进本地数据库)
/// <summary>
/// 把WMS订单存进本地数据库
/// </summary>
/// <param name="trades"></param>
[TransactionCallHandler]
public void SetWMSOrder(List<WMStoJackyunInventoryMovementView1> trades)
{
var ids = trades.Select(t => t.).ToList();
var oldids = _repository.Queryable<WMStoJackyunInventoryMovementView1>().Where(t => ids.Contains(t.))
.Select(t => new { t., t. }).ToList();
if (oldids.Count > 0)
{
//trades = (from p in trades
// join k in oldids on new { p.WMS单号, p.单据行号 } equals new { k.WMS单号, k.单据行号 }
// where k.单据行号 == null
// select p).ToList();
// 方法1使用左外连接推荐 - 高效且符合SQL思维
trades = (
from p in trades
join k in oldids
on new { p., p. }
equals new { k., k. }
into temp
from k in temp.DefaultIfEmpty()
where k == null // 只保留未匹配的记录
select p
).ToList();
//// 方法2使用Any()进行条件过滤(更简洁)
//var excludedTrades = trades
// .Where(p => !oldids.Any(k =>
// k.WMS单号 == p.WMS单号 &&
// k.单据行号 == p.单据行号))
// .ToList();
//trades = trades.Where(t => !oldids.Contains(new { t.WMS单号, t.单据行号 })).ToList();
}
if (trades.Count > 0)
{
_repository.Add<WMStoJackyunInventoryMovementView1>(trades);
string now = DateTime.Now.ToString();
List<string> inSheet = trades.Where(t => t. == "+").Select(t => t.).Distinct().ToList();
inSheet.ForEach(t =>
{
_workProcessService.Add<IJackYunStockinService>(this.MerchantId, "SendInStock", "上传WMS的入库数据到吉客云", t, 1);
Thread.Sleep(500);
});
inSheet = trades.Where(t => t. != "+").Select(t => t.).Distinct().ToList();
inSheet.ForEach(t =>
{
_workProcessService.Add<IJackYunStockinService>(this.MerchantId, "SendOutStock", "上传WMS的出库数据到吉客云", t, 1);
Thread.Sleep(500);
});
}
}
#endregion
#region AddMergeJackYunOrder()
/// <summary>
/// 添加“合并吉客云订单到新表”的任务
/// </summary>
public void AddMergeJackYunOrder()
{
string now = DateTime.Now.ToString();
_workProcessService.Add<IJackYunTaskService>(this.MerchantId, "GetAndMergeJackYunOrder", "合并吉客云订单到新表", now, 1);
}
#endregion
}
}