using MyCode.Project.Domain.Message.Response.JackYun; using MyCode.Project.Domain.Model; using MyCode.Project.Domain.Repositories; using MyCode.Project.Infrastructure.Common; using MyCode.Project.Infrastructure.JackYun; using MyCode.Project.Repositories; using MyCode.Project.Repositories.Common; using MyCode.Project.Services.IServices; using System; using System.Collections.Generic; using System.Linq; using System.Threading; namespace MyCode.Project.Services.Implementation { public class JackYunTaskService : ServiceBase, IJackYunTaskService { private IJackYunService _jackYunService; private IJackOrdersRepository _jackOrdersRepository; private IJackOrdersItemRepository _jackOrdersItemRepository; private IPushKingDeeOrderRepository _pushKingDeeOrderRepository; private IPushKingDeeOrderItemRepository _pushKingDeeOrderItemRepository; private IYTKJTShopParameterRepository _yTKJTShopParameterRepository; private IReturnChangeGoodsDetailRepository _ReturnChangeGoodsDetailRepository; private IBusiOrderGoodsDocInRepository _busiOrderGoodsDocInRepository; private IPushKingDeeGoodsDocInRepository _PushKingDeeGoodsDocInRepository; private IStorageGoodsDocOutHeadRepository _storageGoodsDocOutHeadRepository; private IStorageGoodsDocOutDetailRepository _storageGoodsDocOutDetailRepository; private IWorkProcessService _workProcessService; public JackYunTaskService(IJackOrdersRepository jackOrdersRepository , IJackOrdersItemRepository jackOrdersItemRepository , IPushKingDeeOrderRepository pushKingDeeOrderRepository , IPushKingDeeOrderItemRepository pushKingDeeOrderItemRepository , IYTKJTShopParameterRepository yTKJTShopParameterRepository , IReturnChangeGoodsDetailRepository returnChangeGoodsDetailRepository , IBusiOrderGoodsDocInRepository busiOrderGoodsDocInRepository , IPushKingDeeGoodsDocInRepository pushKingDeeGoodsDocInRepository , IStorageGoodsDocOutDetailRepository storageGoodsDocOutDetailRepository , IStorageGoodsDocOutHeadRepository storageGoodsDocOutHeadRepository , IJackYunService jackYunService, IWorkProcessService workProcessService) { _yTKJTShopParameterRepository = yTKJTShopParameterRepository; _pushKingDeeOrderRepository = pushKingDeeOrderRepository; _pushKingDeeOrderItemRepository = pushKingDeeOrderItemRepository; _jackOrdersRepository = jackOrdersRepository; _jackOrdersItemRepository = jackOrdersItemRepository; _ReturnChangeGoodsDetailRepository = returnChangeGoodsDetailRepository; _busiOrderGoodsDocInRepository = busiOrderGoodsDocInRepository; _PushKingDeeGoodsDocInRepository = pushKingDeeGoodsDocInRepository; _storageGoodsDocOutHeadRepository = storageGoodsDocOutHeadRepository; _storageGoodsDocOutDetailRepository = storageGoodsDocOutDetailRepository; _jackYunService = jackYunService; _workProcessService = workProcessService; } #region TaskGetJackYunOrder(调度运行抓吉客云销售订单) /// /// 调度运行抓吉客云销售订单 /// /// public void TaskGetJackYunOrder(string now) { DateTime runTime = DateTime.Parse(now); var list = _jackYunService.testTradeFullInfoGet(runTime); SetOrder(list); _workProcessService.Add(this.MerchantId, "GetAndMergeJackYunOrder", "合并吉客云订单到新表", now, 1); } #endregion #region SetOrder(把吉客云订单存进本地数据库) /// /// 把吉客云订单存进本地数据库 /// /// [TransactionCallHandler] public void SetOrder(List trades) { var ids = trades.Select(t => t.tradeId).Distinct().ToList(); ids = _jackOrdersRepository.Queryable().Where(t => ids.Contains(t.TradeId)).Select(t => t.TradeId).Distinct().ToList(); if (ids.Count > 0) trades = trades.Where(t => !ids.Contains(t.tradeId)).ToList(); List jackOrdersList = new List(); List ordersItemList = new List(); var shopConfig = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList(); var shopCodeList = shopConfig.Select(t => t.FSHOPCODE).ToList(); trades.ForEach(t => { if (shopCodeList.Contains(t.shopCode)) { JackOrders jackOrders = new JackOrders(); jackOrders = AutoMapperHelper.AutoMappToSingle(t); jackOrders.Id = Guid.NewGuid(); jackOrders.Status = 0; jackOrders.UpdateTime = DateTime.Now; jackOrders.CreateTime = DateTime.Now; if (t.goodsDetail != null) { var items = AutoMapperHelper.AutoMappToList(t.goodsDetail); items.ForEach(k => { k.JackOrdersId = jackOrders.Id; }); jackOrdersList.Add(jackOrders); ordersItemList.AddRange(items); } } }); if (jackOrdersList.Count > 0) { _jackOrdersRepository.Add(jackOrdersList); _jackOrdersItemRepository.Add(ordersItemList); } } #endregion #region GetAndMergeJackYunOrder(合并吉客云订单到新表) /// /// 合并吉客云订单到新表 /// /// [TransactionCallHandler] public string GetAndMergeJackYunOrder(string now) { var list = _jackOrdersItemRepository.GetPushOrder(); List mesg = new List(); var shopParemList = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList(); List pushKingDeeOrderItems = new List(); List pushKingDeeOrders = new List(); list.ForEach(sheet => { if (pushKingDeeOrders.Where(t => t.ShopId == sheet.ShopId && t.WarehouseId == sheet.WarehouseId && t.ConsignTime.Value.ToString("yyyy-MM-dd")==sheet.ConsignTime && t.TradeType != 8).Count() > 0) { return; } PushKingDeeOrder pushKingDeeOrder = new PushKingDeeOrder(); pushKingDeeOrder = AutoMapperHelper.AutoMappToSingle(sheet); pushKingDeeOrder.Id = Guid.NewGuid(); pushKingDeeOrder.CreateTime = DateTime.Now; pushKingDeeOrder.UpdateTime = DateTime.Now; pushKingDeeOrders.Add(pushKingDeeOrder); var tempList = list.Where(t => t.ShopId == sheet.ShopId && t.WarehouseId == sheet.WarehouseId && sheet.ConsignTime == t.ConsignTime).ToList(); tempList.ForEach(item => { PushKingDeeOrderItem pushKingDeeOrderItem = new PushKingDeeOrderItem(); pushKingDeeOrderItem = AutoMapperHelper.AutoMappToSingle(item); pushKingDeeOrderItem.PushKingDeeOrderId = pushKingDeeOrder.Id; pushKingDeeOrderItem.Id = Guid.NewGuid(); pushKingDeeOrderItems.Add(pushKingDeeOrderItem); }); //var shopParem = shopParemList.Where(h => h.FSHOPCODE == sheet.ShopId.Value.ToString()&& h.FWAREHOUSE.Value.ToString()==sheet.WarehouseId ).FirstOrDefault(); //if (shopParem != null) //{ //} //else //{ // mesg.Add($@"店铺{sheet.ShopName}没有配置店铺参数或者配置的仓库不是 {sheet.WarehouseCode}"); //} }); if (pushKingDeeOrders.Count > 0) { var oldList = _jackOrdersRepository.Queryable().Where(t => t.Status == 0).ToList(); oldList.ForEach(t => { if (pushKingDeeOrders.Count(h => h.ShopId == t.ShopId && t.WarehouseId == h.WarehouseId) > 0) { t.Status = 1; t.UpdateTime = DateTime.Now; } }); oldList = oldList.Where(t => t.Status == 1).ToList(); _jackOrdersRepository.Update(oldList); _pushKingDeeOrderRepository.Add(pushKingDeeOrders); _pushKingDeeOrderItemRepository.Add(pushKingDeeOrderItems); } pushKingDeeOrders.ForEach(t => { _workProcessService.Add(this.MerchantId, "PushSalesOutboundToKingDee", "推送销售出库单到金蝶云星空", t.Id, 1); Thread.Sleep(300); }); return JsonHelper.ToJson(list); } #endregion #region TaskGetReturnChangeList(调度运行抓吉客云退货订单) /// /// 调度运行抓吉客云退货订单 /// /// public void TaskGetReturnChangeList(string now) { DateTime runTime = DateTime.Parse(now); var list = _jackYunService.GetReturnChangeList(runTime); SetReturnOrder(list); _workProcessService.Add(this.MerchantId, "GetAndMergeJackReturnYunOrder", "合并吉客云退货订单到新表", now, 1); } #endregion #region SetReturnOrder(把吉客云退货订单存进本地数据库) /// /// 把吉客云退货订单存进本地数据库 /// /// [TransactionCallHandler] public void SetReturnOrder(List trades) { var ids = trades.Select(t => t.tradeId).Distinct().ToList(); ids = _jackOrdersRepository.Queryable().Where(t => ids.Contains(t.TradeId)).Select(t => t.TradeId).Distinct().ToList(); if (ids.Count > 0) trades = trades.Where(t => !ids.Contains(t.tradeId)).ToList(); List jackOrdersList = new List(); List ordersItemList = new List(); var shopConfig = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList(); var shopCodeList = shopConfig.Select(t => t.FSHOPCODE).ToList(); trades.ForEach(t => { if (shopCodeList.Contains(t.shopCode)) { JackOrders jackOrders = new JackOrders(); jackOrders = AutoMapperHelper.AutoMappToSingle(t); jackOrders.Id = Guid.NewGuid(); jackOrders.Status = 0; jackOrders.UpdateTime = DateTime.Now; jackOrders.CreateTime = DateTime.Now; if (t.ReturnChangeGoodsDetail != null) { var items = AutoMapperHelper.AutoMappToList< ReturnChangeGoodsDetail, JkyReturnChangeGoodsDetail>(t.ReturnChangeGoodsDetail); items.ForEach(k => { k.JackOrdersId = jackOrders.Id; }); jackOrdersList.Add(jackOrders); ordersItemList.AddRange(items); } } }); if (jackOrdersList.Count > 0) { _jackOrdersRepository.Add(jackOrdersList); _ReturnChangeGoodsDetailRepository.Add(ordersItemList); } } #endregion #region GetAndMergeJackReturnYunOrder(合并吉客云退货订单到新表) /// /// 合并吉客云退货订单到新表 /// /// [TransactionCallHandler] public string GetAndMergeJackReturnYunOrder(string now) { var list = _jackOrdersItemRepository.GetPushReturnOrder(); List mesg = new List(); var shopParemList = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList(); List pushKingDeeOrderItems = new List(); List pushKingDeeOrders = new List(); list.ForEach(sheet => { if (pushKingDeeOrders.Where(t => t.ShopId == sheet.ShopId && t.WarehouseId == sheet.WarehouseId && t.ConsignTime.Value.ToString("yyyy-MM-dd") == sheet.ConsignTime && t.TradeType==8).Count() > 0) { return; } PushKingDeeOrder pushKingDeeOrder = new PushKingDeeOrder(); pushKingDeeOrder = AutoMapperHelper.AutoMappToSingle(sheet); pushKingDeeOrder.Id = Guid.NewGuid(); pushKingDeeOrder.CreateTime = DateTime.Now; pushKingDeeOrder.UpdateTime = DateTime.Now; pushKingDeeOrders.Add(pushKingDeeOrder); var tempList = list.Where(t => t.ShopId == sheet.ShopId && t.WarehouseId == sheet.WarehouseId && sheet.ConsignTime == t.ConsignTime).ToList(); tempList.ForEach(item => { PushKingDeeOrderItem pushKingDeeOrderItem = new PushKingDeeOrderItem(); pushKingDeeOrderItem = AutoMapperHelper.AutoMappToSingle(item); pushKingDeeOrderItem.PushKingDeeOrderId = pushKingDeeOrder.Id; pushKingDeeOrderItem.Id = Guid.NewGuid(); pushKingDeeOrderItems.Add(pushKingDeeOrderItem); }); //var shopParem = shopParemList.Where(h => h.FSHOPCODE == sheet.ShopId.Value.ToString()&& h.FWAREHOUSE.Value.ToString()==sheet.WarehouseId ).FirstOrDefault(); //if (shopParem != null) //{ //} //else //{ // mesg.Add($@"店铺{sheet.ShopName}没有配置店铺参数或者配置的仓库不是 {sheet.WarehouseCode}"); //} }); if (pushKingDeeOrders.Count > 0) { var oldList = _jackOrdersRepository.Queryable().Where(t => t.Status == 0).ToList(); oldList.ForEach(t => { if (pushKingDeeOrders.Count(h => h.ShopId == t.ShopId && t.WarehouseId == h.WarehouseId) > 0) { t.Status = 1; t.UpdateTime = DateTime.Now; } }); oldList = oldList.Where(t => t.Status == 1).ToList(); _jackOrdersRepository.Update(oldList); _pushKingDeeOrderRepository.Add(pushKingDeeOrders); _pushKingDeeOrderItemRepository.Add(pushKingDeeOrderItems); } pushKingDeeOrders.ForEach(t => { _workProcessService.Add(this.MerchantId, "PushSalesReturnToKingDee", "推送销售退货单到金蝶云星空", t.Id, 1); Thread.Sleep(300); }); return JsonHelper.ToJson(list); } #endregion #region GetPurchaseInboundData(调度运行获取吉客云采购入库) /// /// 调度运行获取吉客云采购入库 /// /// public void GetPurchaseInboundData(string now) { DateTime runTime = DateTime.Parse(now); var list = _jackYunService.GetPurchaseInboundData(runTime); SetPurchaseInboundData(list); //_workProcessService.Add(this.MerchantId, "GetAndMergePushGoodsDocInOrder", "合并吉客云采购订单到新表", now, 1); } #endregion #region SetPurchaseInboundData(把吉客云采购订单存进本地数据库) /// /// 把吉客云采购订单存进本地数据库 /// /// [TransactionCallHandler] public void SetPurchaseInboundData(List trades) { var ids = trades.Select(t => t.RecId).Distinct().ToList(); ids = _busiOrderGoodsDocInRepository.Queryable().Where(t =>t.RecId!=null && ids.Contains(t.RecId.Value)).Select(t => t.RecId.Value).ToList(); trades = trades.Where(t => !ids.Contains(t.RecId)).ToList(); List addList = new List(); addList = AutoMapperHelper.AutoMappToList(trades); addList.ForEach(item => { item.ID = Guid.NewGuid(); DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); item.InOutDate2 = startTime.AddMilliseconds(item.InOutDate.Value).ToLocalTime(); item.GmtCreate2 = startTime.AddMilliseconds(item.GmtCreate.Value).ToLocalTime(); item.Status = 0; item.CreateTime = DateTime.Now; item.CreateUserName = ""; }); if (addList.Count > 0) { _busiOrderGoodsDocInRepository.Add(addList); } } #endregion #region GetStorageGoodsDocOutV2(调度运行吉客云采购退货出库单) /// /// 调度运行吉客云采购退货出库单 /// /// public void GetStorageGoodsDocOutV2(string now) { DateTime runTime = DateTime.Parse(now); var list = _jackYunService.GetStorageGoodsDocOutV2(runTime); SetStorageGoodsDocOutV2Order(list); //_workProcessService.Add(this.MerchantId, "GetAndMergeJackReturnYunOrder", "合并吉客云退货订单到新表", now, 1); } #endregion #region GetAndMergeJackGoodsDocInOrder(合并吉客云采购订单到新表) /// /// 合并吉客云采购订单到新表 /// /// [TransactionCallHandler] public string GetAndMergePushGoodsDocInOrder(string now) { var list = _busiOrderGoodsDocInRepository.GetPushGoodsDocInOrder(); List mesg = new List(); //var shopParemList = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C" && t.FPURCHASERECEIVING=="1").ToList(); List pushKingDeeOrders = new List(); //var warehouseCodes = shopParemList.Select(t => t.FPURCHASINGWAREHOUSECODE).Distinct().ToList(); //list = list.Where(t => warehouseCodes.Contains(t.WarehouseCode)).ToList(); list.ForEach(sheet => { PushKingDeeGoodsDocIn pushKingDeeOrder = new PushKingDeeGoodsDocIn(); pushKingDeeOrder = AutoMapperHelper.AutoMappToSingle(sheet); pushKingDeeOrder.ID = Guid.NewGuid(); pushKingDeeOrder.CreateTime = DateTime.Now; pushKingDeeOrder.UpdateTime = DateTime.Now; pushKingDeeOrder.Status = 0; pushKingDeeOrders.Add(pushKingDeeOrder); }); if (pushKingDeeOrders.Count > 0) { var oldList = _busiOrderGoodsDocInRepository.Queryable().Where(t => t.Status == 0).ToList(); oldList.ForEach(t => { if (pushKingDeeOrders.Count(h => h.WarehouseCode == t.WarehouseCode && t.InOutDate2.Value.ToString("yyyy-MM-dd") == h.InOutDate2.Value.ToString("yyyy-MM-dd")) > 0) { t.Status = 1; t.UpdateTime = DateTime.Now; } }); oldList = oldList.Where(t => t.Status == 1).ToList(); _busiOrderGoodsDocInRepository.Update(oldList); _PushKingDeeGoodsDocInRepository.Add(pushKingDeeOrders); } //pushKingDeeOrders.ForEach(t => //{ // _workProcessService.Add(this.MerchantId, "PushOrderToKingDee", "推送退货订单到云星空或者WMS", t.Id, 1); // Thread.Sleep(300); //}); return JsonHelper.ToJson(list); } #endregion #region SetReturnOrder(把吉客云退货订单存进本地数据库) /// /// [TransactionCallHandler] public void SetStorageGoodsDocOutV2Order(List trades) { var ids = trades.Select(t => t.RecId).Distinct().ToList(); ids = _storageGoodsDocOutHeadRepository.Queryable().Where(t => ids.Contains(t.RecId)).Select(t => t.RecId).Distinct().ToList(); if (ids.Count > 0) trades = trades.Where(t => !ids.Contains(t.RecId)).ToList(); List jackOrdersList = new List(); List ordersItemList = new List(); var shopConfig = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList(); var shopCodeList = shopConfig.Select(t => t.FSHOPCODE).ToList(); trades.ForEach(t => { StorageGoodsDocOutHead jackOrders = new StorageGoodsDocOutHead(); jackOrders = AutoMapperHelper.AutoMappToSingle(t); jackOrders.Id = Guid.NewGuid(); jackOrders.Status = 0; jackOrders.UpdateTime = DateTime.Now; jackOrders.CreateTime = DateTime.Now; if (t.GoodsDocDetailList != null) { var items = AutoMapperHelper.AutoMappToList(t.GoodsDocDetailList); items.ForEach(k => { k.HeadId = jackOrders.Id; k.CreateTime = DateTime.Now; k.UpdateTime = DateTime.Now; }); jackOrdersList.Add(jackOrders); ordersItemList.AddRange(items); } }); if (jackOrdersList.Count > 0) { _storageGoodsDocOutHeadRepository.Add(jackOrdersList); _storageGoodsDocOutDetailRepository.Add(ordersItemList); } } #endregion } }