2025-11-28 11:51:30 +08:00

548 lines
26 KiB
C#

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.Extensions;
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()
/// <summary>
/// 调度运行抓吉客云销售订单
/// </summary>
/// <param name="now"></param>
public void TaskGetJackYunOrder(string now)
{
DateTime runTime = DateTime.Parse(now);
var list = _jackYunService.testTradeFullInfoGet(runTime);
SetOrder(list);
_workProcessService.Add<IJackYunTaskService>(this.MerchantId, "GetAndMergeJackYunOrder", "合并吉客云订单到新表", now, 1);
}
#endregion
#region SetOrder()
/// <summary>
/// 把吉客云订单存进本地数据库
/// </summary>
/// <param name="trades"></param>
[TransactionCallHandler]
public void SetOrder(List<TradesItem> 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<JackOrders> jackOrdersList = new List<JackOrders>();
List<JackOrdersItem> ordersItemList = new List<JackOrdersItem>();
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<JackOrders, TradesItem>(t);
jackOrders.Id = Guid.NewGuid();
jackOrders.Status = 0;
jackOrders.UpdateTime = DateTime.Now;
jackOrders.CreateTime = DateTime.Now;
if (t.goodsDetail != null)
{
var items = AutoMapperHelper.AutoMappToList<JackOrdersItem, GoodsDetailItem>(t.goodsDetail);
items = items.Where(h => h.IsFit == 0).ToList();
items.ForEach(k =>
{
k.Id = Guid.NewGuid();
k.JackOrdersId = jackOrders.Id;
});
ordersItemList.AddRange(items);
jackOrdersList.Add(jackOrders);
}
if(t.tradeOrderAssemblyGoodsDtoList!=null &&t.tradeOrderAssemblyGoodsDtoList.Count>0)
{
var items = AutoMapperHelper.AutoMappToList<JackOrdersItem, ComboItem>(t.tradeOrderAssemblyGoodsDtoList);
var goods = t.goodsDetail.Where(h => h.subTradeId == items[0].SubTradeId).FirstOrDefault();
decimal price = 0;
if (goods != null)
price = goods.ShareFavourableAfterFee.SafeValue();
items.ForEach(k =>
{
k.ShareFavourableAfterFee = price;
k.Id = Guid.NewGuid();
k.JackOrdersId = jackOrders.Id;
});
ordersItemList.AddRange(items);
}
}
});
if (jackOrdersList.Count > 0)
{
_jackOrdersRepository.Add(jackOrdersList);
_jackOrdersItemRepository.Add(ordersItemList);
}
}
#endregion
#region GetAndMergeJackYunOrder()
/// <summary>
/// 合并吉客云订单到新表
/// </summary>
/// <returns></returns>
[TransactionCallHandler]
public string GetAndMergeJackYunOrder(string now)
{
var list = _jackOrdersItemRepository.GetPushOrder();
List<string> mesg = new List<string>();
var shopParemList = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList();
List<PushKingDeeOrderItem> pushKingDeeOrderItems = new List<PushKingDeeOrderItem>();
List<PushKingDeeOrder> pushKingDeeOrders = new List<PushKingDeeOrder>();
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<PushKingDeeOrder, PushOrderListResp>(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<PushKingDeeOrderItem, PushOrderListResp>(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<ISalesOutboundService>(this.MerchantId, "PushSalesOutboundToKingDee", "推送销售出库单到金蝶云星空", t.Id, 1);
Thread.Sleep(300);
});
return JsonHelper.ToJson(list);
}
#endregion
#region TaskGetReturnChangeList(退)
/// <summary>
/// 调度运行抓吉客云退货订单
/// </summary>
/// <param name="now"></param>
public void TaskGetReturnChangeList(string now)
{
DateTime runTime = DateTime.Parse(now);
var list = _jackYunService.GetReturnChangeList(runTime);
SetReturnOrder(list);
_workProcessService.Add<IJackYunTaskService>(this.MerchantId, "GetAndMergeJackReturnYunOrder", "合并吉客云退货订单到新表", now, 1);
}
#endregion
#region SetReturnOrder(退)
/// <summary>
/// 把吉客云退货订单存进本地数据库
/// </summary>
/// <param name="trades"></param>
[TransactionCallHandler]
public void SetReturnOrder(List<TradesItem> 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<JackOrders> jackOrdersList = new List<JackOrders>();
List<ReturnChangeGoodsDetail> ordersItemList = new List<ReturnChangeGoodsDetail>();
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<JackOrders, TradesItem>(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(退)
/// <summary>
/// 合并吉客云退货订单到新表
/// </summary>
/// <returns></returns>
[TransactionCallHandler]
public string GetAndMergeJackReturnYunOrder(string now)
{
var list = _jackOrdersItemRepository.GetPushReturnOrder();
List<string> mesg = new List<string>();
var shopParemList = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList();
List<PushKingDeeOrderItem> pushKingDeeOrderItems = new List<PushKingDeeOrderItem>();
List<PushKingDeeOrder> pushKingDeeOrders = new List<PushKingDeeOrder>();
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<PushKingDeeOrder, PushOrderListResp>(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<PushKingDeeOrderItem, PushOrderListResp>(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<ISalesReturnService>(this.MerchantId, "PushSalesReturnToKingDee", "推送销售退货单到金蝶云星空", t.Id, 1);
Thread.Sleep(300);
});
return JsonHelper.ToJson(list);
}
#endregion
#region GetPurchaseInboundData()
/// <summary>
/// 调度运行获取吉客云采购入库
/// </summary>
/// <param name="now"></param>
public void GetPurchaseInboundData(string now)
{
DateTime runTime = DateTime.Parse(now);
var list = _jackYunService.GetPurchaseInboundData(runTime);
SetPurchaseInboundData(list);
if(list.Count>0)
_workProcessService.Add<IJackYunTaskService>(this.MerchantId, "GetAndMergePushGoodsDocInOrder", "合并吉客云采购订单到新表", now, 1);
}
#endregion
#region SetPurchaseInboundData()
/// <summary>
/// 把吉客云采购订单存进本地数据库
/// </summary>
/// <param name="trades"></param>
[TransactionCallHandler]
public void SetPurchaseInboundData(List<BusiOrderGoodsDocInResponse> 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<BusiOrderGoodsDocIn> addList = new List<BusiOrderGoodsDocIn>();
addList = AutoMapperHelper.AutoMappToList<BusiOrderGoodsDocIn, BusiOrderGoodsDocInResponse>(trades);
var shopConfigs = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C" && t.FPURCHASERECEIVING == "1").ToList();
var guolv = shopConfigs.Select(t => new { t.FPURCHASINGWAREHOUSECODE, t.FPURCHASEDATE }).ToList();
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 = "";
var one = guolv.Max(t=>t.FPURCHASEDATE);
if (one == null || one > item.InOutDate2)
{
item.ID = Guid.Empty;
}
});
addList = addList.Where(t => t.ID != Guid.Empty).ToList();
if (addList.Count > 0)
{
_busiOrderGoodsDocInRepository.Add(addList);
}
}
#endregion
#region GetStorageGoodsDocOutV2(退)
/// <summary>
/// 调度运行吉客云采购退货出库单
/// </summary>
/// <param name="now"></param>
public void GetStorageGoodsDocOutV2(string now)
{
DateTime runTime = DateTime.Parse(now);
var list = _jackYunService.GetStorageGoodsDocOutV2(runTime);
SetStorageGoodsDocOutV2Order(list);
//_workProcessService.Add<IJackYunTaskService>(this.MerchantId, "GetAndMergeJackReturnYunOrder", "合并吉客云退货订单到新表", now, 1);
}
#endregion
#region GetAndMergeJackGoodsDocInOrder()
/// <summary>
/// 合并吉客云采购订单到新表
/// </summary>
/// <returns></returns>
[TransactionCallHandler]
public string GetAndMergePushGoodsDocInOrder(string now)
{
var list = _busiOrderGoodsDocInRepository.GetPushGoodsDocInOrder();
List<string> mesg = new List<string>();
//var shopParemList = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C" && t.FPURCHASERECEIVING=="1").ToList();
List<PushKingDeeGoodsDocIn> pushKingDeeOrders = new List<PushKingDeeGoodsDocIn>();
//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<PushKingDeeGoodsDocIn, BusiOrderGoodsDocInSummary>(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.VendCode == t.VendCode && 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<IPurchaseStockInService>(this.MerchantId, "PushPurchaseStockInToKingDee", "推送采购入库单到金蝶云星空", t.ID, 1);
Thread.Sleep(300);
});
return JsonHelper.ToJson(list);
}
#endregion
#region SetReturnOrder(退)
/// <summarySetStorageGoodsDocOutV2Order
/// 把吉客云退货订单存进本地数据库
/// </summary>
/// <param name="trades"></param>
[TransactionCallHandler]
public void SetStorageGoodsDocOutV2Order(List<ErpStorageGoodsDocOutV2ResponseBizData> 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<StorageGoodsDocOutHead> jackOrdersList = new List<StorageGoodsDocOutHead>();
List<StorageGoodsDocOutDetail> ordersItemList = new List<StorageGoodsDocOutDetail>();
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<StorageGoodsDocOutHead, ErpStorageGoodsDocOutV2ResponseBizData>(t);
jackOrders.Id = Guid.NewGuid();
jackOrders.Status = 0;
jackOrders.UpdateTime = DateTime.Now;
jackOrders.CreateTime = DateTime.Now;
if (t.GoodsDocDetailList != null)
{
var items = AutoMapperHelper.AutoMappToList<StorageGoodsDocOutDetail, GoodsDocDetailList>(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);
jackOrdersList.ForEach(t =>
{
_workProcessService.Add<IPurchaseReturnService>(this.MerchantId, "PushPurchaseReturnToKingDee", "推送采购退料单到金蝶云星空", t.Id, 1);
});
}
}
#endregion
}
}