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(添加抓单的调度)
///
/// 添加抓单的调度
///
public void AddTask()
{
DateTime now = DateTime.Now.Date;
_workProcessService.Add(this.MerchantId, "TaskGetJackYunOrder", "调度运行抓吉客云销售订单", now.ToString("yyyy-MM-dd"), 1);
_workProcessService.Add(this.MerchantId, "TaskGetReturnChangeList", "调度运行抓吉客云退货订单", now.ToString("yyyy-MM-dd"), 1);
//_workProcessService.Add(this.MerchantId, "GetPurchaseInboundData", "调度运行吉客云采购入库", now.ToString("yyyy-MM-dd"), 1);
//_workProcessService.Add(this.MerchantId, "GetStorageGoodsDocOutV2", "获取吉客云采购退货出库单", now.ToString("yyyy-MM-dd"), 1);
}
#endregion
#region AddWMSTask(添加WMS抓单的调度)
///
/// 添加WMS抓单的调度
///
public void AddWMSTask()
{
DateTime now = DateTime.Now.Date;
_workProcessService.Add(this.MerchantId, "GetList", "抓取WMS订单到本地数据库", now.Date.ToString("yyyy-MM-dd"), 1);
}
#endregion
public List 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订单存进本地数据库)
///
/// 把WMS订单存进本地数据库
///
///
[TransactionCallHandler]
public void SetWMSOrder(List trades)
{
var ids = trades.Select(t => t.单据号).ToList();
var oldids = _repository.Queryable().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(trades);
string now = DateTime.Now.ToString();
List inSheet = trades.Where(t => t.变动方向 == "+").Select(t => t.单据号).Distinct().ToList();
inSheet.ForEach(t =>
{
_workProcessService.Add(this.MerchantId, "SendInStock", "上传WMS的入库数据到吉客云", t, 1);
Thread.Sleep(500);
});
inSheet = trades.Where(t => t.变动方向 != "+").Select(t => t.单据号).Distinct().ToList();
inSheet.ForEach(t =>
{
_workProcessService.Add(this.MerchantId, "SendOutStock", "上传WMS的出库数据到吉客云", t, 1);
Thread.Sleep(500);
});
}
}
#endregion
#region AddMergeJackYunOrder(添加“合并吉客云订单到新表”的任务)
///
/// 添加“合并吉客云订单到新表”的任务
///
public void AddMergeJackYunOrder()
{
string now = DateTime.Now.ToString();
_workProcessService.Add(this.MerchantId, "GetAndMergeJackYunOrder", "合并吉客云订单到新表", now, 1);
}
#endregion
}
}