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 } }