2025-11-18 11:02:53 +08:00

457 lines
25 KiB
C#

using MyCode.Project.Domain.Message.Request.JackYun;
using MyCode.Project.Domain.Message.Response.JackYun;
using MyCode.Project.Domain.Repositories;
using MyCode.Project.Infrastructure.Common;
using MyCode.Project.Infrastructure.Enumeration;
using MyCode.Project.Infrastructure.Exceptions;
using MyCode.Project.Infrastructure.JackYun;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
namespace MyCode.Project.Services.Implementation
{
public class JackYunService : ServiceBase, IJackYunService
{
private IYTKJTShopParameterRepository _yTKJTShopParameterRepository;
public JackYunService(IYTKJTShopParameterRepository yTKJTShopParameterRepository)
{
_yTKJTShopParameterRepository = yTKJTShopParameterRepository;
}
DateTime startTime = DateTime.Parse("2025-11-01");
/// <summary>
/// 请求开放平台服务
/// </summary>
/// <param name="method">开放接口方法名</param>
/// <param name="version">开放接口版本号(null表示默认)</param>
/// <param name="bizData">请求业务数据</param>
/// <returns>OpenResponse返回对象</returns>
public JackyunResponse Call(string method, string version, BaseRequestBizData bizData)
{
//接口返回值
JackyunResponse response = null;
//返回值字符串
string strResponse = null;
try
{
//请求吉客云开放接口。
strResponse = JackyunOpenHttpUtils.Post(method, version, bizData);
}
catch (Exception ex)
{
response = new JackyunResponse();
response.onFail(ex.Message, "CLIENT_EXCEPTION");
return response;
}
return JsonHelper.ToObject<JackyunResponse>(strResponse);
}
#region
/// <summary>
/// 订单查询
/// </summary>
/// <param name="now">截止日期</param>
/// <returns></returns>
/// <exception cref="BaseException"></exception>
public List<TradesItem> testTradeFullInfoGet(DateTime now)
{
int total = 1;
var shopConfigs = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList();
OrderTradeFullInfoGetRequestBizData requestBizData = new OrderTradeFullInfoGetRequestBizData();
//string value = "2025-06-15 00:00:00";// DateTime.Now.Date.AddDays(-5).ToString("yyyy-MM-dd HH:mm:ss") ;
//string value1 = "2025-06-20 00:00:00";//DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss");
string value = now.Date.AddDays(-7).ToString("yyyy-MM-dd");
string value1 = now.Date.ToString("yyyy-MM-dd");
if (now.Date.AddDays(-7) < startTime)
{
value = startTime.ToString("yyyy-MM-dd");
}
requestBizData.StartModified = "";// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.EndModified = ""; //DateTime.ParseExact(value1, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.TradeNo = "";
requestBizData.HasTotal = total;
requestBizData.PageSize = 200;
requestBizData.PageIndex = 0;
requestBizData.Fields = "TradeType,tradeStatus,consignTime,payTime,goodsDetail.barcode,tradeNo,orderNo,shopName,companyName,warehouseName,logisticName,mainPostid,goodsDetail.goodsNo,flagNames,columnExt,sourceAfterNo,goodsDetail.outerId,pickUpCode,expense.expenseFee,expense.expenseItemName,billDate,goodsPlatDiscountFee,goodsDetail.shareOrderDiscountFee,goodsDetail.shareFavourableAfterFee,goodsDetail.shareOrderPlatDiscountFee,customizeGoodsColumn9,goodsDetail.goodsId,goodsDetail.sellCount,goodsDetail.needProcessCount,goodsDetail.baseUnitSellCount,goodsDetail.assessmentCost,goodsDetail.compassSourceContentTypem,sourceTradeNo,shopId,warehouseId,scrollId,goodsDetail.unit";
requestBizData.StartCreated = "";// DateTime.ParseExact(value, "yyyy -MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.EndCreated = "";// DateTime.ParseExact(value1, "yyyy -MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.StartAuditTime = "";// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.EndAuditTime = "";// DateTime.ParseExact(value1, "yyyy -MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.StartConsignTime = value;// value;// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.EndConsignTime = value1;// value1;// DateTime.ParseExact(value1, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
//requestBizData.TradeStatus = 1010;
requestBizData.TradeType = 1;
requestBizData.SourceTradeNos = "";
requestBizData.ShopIds = null; // new long[] { 378761130654261100, 378761130654261100 };
List<int> TradeTypeList = new List<int>();
TradeTypeList.Add(1);
TradeTypeList.Add(7);
TradeTypeList.Add(8);
TradeTypeList.Add(5);
List<TradesItem> trades = new List<TradesItem>();
TradeTypeList.ForEach(ty =>
{
requestBizData.TradeType = ty;
string lggl = JsonHelper.ToJson(requestBizData);
LogHelper.Info("TradeType:==" + ty.ToString() + " " + lggl);
JackyunResponse response = Call(EnumAttribute.GetAttribute(ApiEnum.TRADEFULLINFOGET).Value, "1.0", requestBizData);
string ll = JsonHelper.ToJson(response);
LogHelper.Info("TradeType:=="+ ty.ToString() + " "+ll);
if (response.code == "200")
{
var orderjson = JsonHelper.ToJson(response.result);
var list1 = JsonHelper.ToObject<TradeFullinfogetResp<TradeFullinfogetData>>(orderjson);
int pageIndex = 1;
while (list1.data.trades != null && list1.data.trades.Count > 0)
{
list1.data.trades.ForEach(h => h.TradeType = ty);
trades.AddRange(list1.data.trades);
requestBizData.PageIndex = pageIndex;
pageIndex++;
Thread.Sleep(100);
response = Call(EnumAttribute.GetAttribute(ApiEnum.TRADEFULLINFOGET).Value, "1.0", requestBizData);
if (response.code == "200")
{
orderjson = JsonHelper.ToJson(response.result);
list1 = JsonHelper.ToObject<TradeFullinfogetResp<TradeFullinfogetData>>(orderjson);
}
}
}
else
{
string msg = response.msg;
throw new BaseException(msg);
}
});
var shocodes = shopConfigs.Select(t => t.FSHOPCODE).ToList();
trades = trades.Where(t => shocodes.Contains(t.shopCode)).ToList();
return trades;
}
#endregion
#region 退
/// <summary>
/// 退货查询
/// </summary>
/// <param name="now">截止日期</param>
/// <returns></returns>
/// <exception cref="BaseException"></exception>
public List<TradesItem> GetReturnChangeList(DateTime now)
{
int total = 1;
var shopConfigs = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C").ToList();
ReturnChangeGetRequestBizData requestBizData = new ReturnChangeGetRequestBizData();
//string value = "2025-06-15 00:00:00";// DateTime.Now.Date.AddDays(-5).ToString("yyyy-MM-dd HH:mm:ss") ;
//string value1 = "2025-06-20 00:00:00";//DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss");
string value = now.Date.AddDays(-7).ToString("yyyy-MM-dd");
string value1 = now.Date.ToString("yyyy-MM-dd");
if (now.Date.AddDays(-7) < startTime)
{
value = startTime.ToString("yyyy-MM-dd");
}
requestBizData.StartModified = "";// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.StartDeliveryDate = value;
requestBizData.EndDeliveryDate = value1;
requestBizData.EndModified = ""; //DateTime.ParseExact(value1, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
requestBizData.TradeNo = "";
requestBizData.HasTotal = total;
requestBizData.PageSize = 200;
requestBizData.PageIndex = 0;
requestBizData.StartModified = null;// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
//requestBizData.TradeStatus = 1010;
requestBizData.ShopIds = null; // new long[] { 378761130654261100, 378761130654261100 };
List<int> TradeTypeList = new List<int>();
TradeTypeList.Add(1005);
List<TradesItem> reslut = new List<TradesItem>();
List<ReturnChangeListResp> trades = new List<ReturnChangeListResp>();
TradeTypeList.ForEach(ty =>
{
requestBizData.ProcessStatusList = "";
string lggl = JsonHelper.ToJson(requestBizData);
LogHelper.Info(lggl);
JackyunResponse response = Call(EnumAttribute.GetAttribute(ApiEnum.RETURNCHANGE).Value, "1.0", requestBizData);
string ll = JsonHelper.ToJson(response);
LogHelper.Info(ll);
if (response.code == "200")
{
var orderjson = JsonHelper.ToJson(response.result);
var list1 = JsonHelper.ToObject<TradeFullinfogetResp<ReturnChangeData>>(orderjson);
int pageIndex = 1;
int TotalResults = list1.data.TotalResults;
while (requestBizData.PageIndex* requestBizData.PageSize< TotalResults)
{
//list1.data.returnChangeList.ForEach(h => h.TradeType = ty);
trades.AddRange(list1.data.returnChangeList);
requestBizData.PageIndex = pageIndex;
pageIndex++;
Thread.Sleep(100);
response = Call(EnumAttribute.GetAttribute(ApiEnum.RETURNCHANGE).Value, "1.0", requestBizData);
if (response.code == "200")
{
orderjson = JsonHelper.ToJson(response.result);
list1 = JsonHelper.ToObject<TradeFullinfogetResp<ReturnChangeData>>(orderjson);
}
}
}
else
{
string msg = response.msg;
throw new BaseException(msg);
}
});
var shocodes = shopConfigs.Select(t => t.FSHOPCODE).ToList();
trades = trades.Where(t => shocodes.Contains(t.ShopCode)).ToList();
//reslut = trades.Select(t => new TradesItem { tradeId = t.TradeId, couponFee = 0, realFee = 0, shopCode = t.ShopCode ,orderNo=t.ReturnChangeNo, tradeNo =t.TradeNo
//,isDelete=0, mainPostid=t.MainPostid,
// companyName=t.CompanyName,
// flagNames=t.FlagNames,
// shopName=t.ShopName,
// warehouseName=t.WarehouseName
//}).ToList();
reslut = trades.Select(rc => new TradesItem
{
tradeId = rc.TradeAfterId.ToString(),
couponFee = 0,
realFee = 0,
shopCode = rc.ShopCode,
orderNo = rc.ReturnChangeNo,
tradeNo = rc.TradeNo,
isDelete = 0,
mainPostid = rc.MainPostid,
companyName = rc.CompanyName,
flagNames = rc.FlagNames,
shopName = rc.ShopName,
warehouseName = rc.WarehouseName,
warehouseCode = rc.WarehouseCode,
logisticName = rc.LogisticName,
shopId = rc.ShopId.ToString(),
TradeType = 8, // 假设这是售后退货类型
consignTime = !string.IsNullOrWhiteSpace(rc.DeliveryTime) ? (DateTime?)DateTime.Parse(rc.DeliveryTime) : null,
payTime = null, // 可根据需要设置
tradeStatus = int.Parse(rc.TradeAfterStatus), // 注意类型转换
warehouseId = rc.WarehouseId.ToString(),
shopTypeCode = "",
apiType = -114, // 默认值
ReturnChangeGoodsDetail = rc.ReturnChangeGoodsDetail
}).ToList();
return reslut;
}
#endregion
#region
/// <summary>
/// 获取吉客云采购入库
/// </summary>
/// <param name="now">截止日期</param>
/// <returns></returns>
/// <exception cref="BaseException"></exception>
public List<BusiOrderGoodsDocInResponse> GetPurchaseInboundData(DateTime now)
{
var shopConfigs = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C" && t.FPURCHASERECEIVING == "1").ToList();
BusiOrderGoodsDocInRequest requestBizData = new BusiOrderGoodsDocInRequest();
//string value = "2025-06-15 00:00:00";// DateTime.Now.Date.AddDays(-5).ToString("yyyy-MM-dd HH:mm:ss") ;
//string value1 = "2025-06-20 00:00:00";//DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss");
string value = now.Date.AddDays(-7).ToString("yyyy-MM-dd");
string value1 = now.Date.ToString("yyyy-MM-dd");
if (now.Date.AddDays(-7) < startTime)
{
value = startTime.ToString("yyyy-MM-dd");
}
//101-采购入库
requestBizData.Inouttypes = "101";
requestBizData.InOutDateStart = new DateTimeOffset(DateTime.Parse(value)).ToUnixTimeMilliseconds().ToString() ;
requestBizData.InOutDateEnd = new DateTimeOffset(DateTime.Parse(value1)).ToUnixTimeMilliseconds().ToString();
requestBizData.PageSize = 200;
requestBizData.PageIndex = 0;
requestBizData.Cols = "goodsdocNo,inOutDate,gmtCreate,inouttypeName,warehouseName,billNo,sourceBillNo,deliveryNo,currencyCode,currencyCodeName,currencyRate,createUserName,companyName,vendCustomerName,goodsdocRemark,receiveGoodsRemark,callbackStatus,applyCompanyName,applyDepartName,applyUserName,goodsNo,goodsName,skuName,skuBarcode,unitName,quantity,baceCurrencyCostPrice,baceCurrencyCostAmount,baceCurrencyNoTaxPrice,baceCurrencyNoTaxAmount,baceCurrencyWithTaxPrice,baceCurrencyWithTaxAmount,baceCurrencyTaxAmount,taxRate,transNoTaxPrice,transNoTaxAmount,transHasTaxPrice,transHasTaxAmount,transTaxAmount,isCertified,goodsDetailRemark,batchNo,serialNo,vendCode,warehouseCode,channelCode,serialSourceId,outBillNo,trackInOutNo,logisticName,logisticNo";
List<int> TradeTypeList = new List<int>();
TradeTypeList.Add(1005);
List<BusiOrderGoodsDocInResponse> reslut = new List<BusiOrderGoodsDocInResponse>();
List<BusiOrderGoodsDocInResponse> trades = new List<BusiOrderGoodsDocInResponse>();
TradeTypeList.ForEach(ty =>
{
string lggl = JsonHelper.ToJson(requestBizData);
LogHelper.Info(lggl);
JackyunResponse response = Call(EnumAttribute.GetAttribute(ApiEnum.STORAGEGOODSDOCINCOUNTS).Value, "1.0", requestBizData);
string ll = JsonHelper.ToJson(response);
LogHelper.Info(ll);
if (response.code == "200")
{
var orderjson = JsonHelper.ToJson(response.result);
var list1 = JsonHelper.ToObject<BusiOrderGoodsDocInResponse2>(orderjson);
int pageIndex = 1;
string TotalResults = list1.contextId;
while (list1.Data.Count>0)
{
trades.AddRange(list1.Data);
requestBizData.PageIndex = pageIndex;
requestBizData.contextId = TotalResults;
pageIndex++;
Thread.Sleep(100);
response = Call(EnumAttribute.GetAttribute(ApiEnum.STORAGEGOODSDOCINCOUNTS).Value, "1.0", requestBizData);
if (response.code == "200")
{
orderjson = JsonHelper.ToJson(response.result);
list1 = JsonHelper.ToObject<BusiOrderGoodsDocInResponse2>(orderjson);
TotalResults = list1.contextId;
}
else
{
TotalResults = "";
}
}
}
else
{
string msg = response.msg;
throw new BaseException(msg);
}
});
var warehouseCodes = shopConfigs.Select(t => t.FPURCHASINGWAREHOUSECODE).Distinct().ToList();
var guolv = shopConfigs.Select(t => new { t.FPURCHASINGWAREHOUSECODE, t.FPURCHASEDATE }).ToList();
trades = trades.Where(t => warehouseCodes.Contains(t.warehouseCode)).ToList();
foreach (var item in guolv)
{
trades.RemoveAll(t => item.FPURCHASINGWAREHOUSECODE == t.warehouseCode && item.FPURCHASEDATE > t.inOutDate2);
}
return trades;
}
#endregion
#region 退
/// <summary>
/// 获取吉客云采购退货出库单
/// </summary>
/// <param name="now">截止日期</param>
/// <returns></returns>
/// <exception cref="BaseException"></exception>
public List<ErpStorageGoodsDocOutV2ResponseBizData> GetStorageGoodsDocOutV2(DateTime now)
{
var shopConfigs = _yTKJTShopParameterRepository.Queryable().Where(t => t.FDOCUMENTSTATUS == "C" && t.FPURCHASERECEIVING == "1").ToList();
StorageGoodsDocOutV2Request requestBizData = new StorageGoodsDocOutV2Request();
//string value = "2025-06-15 00:00:00";// DateTime.Now.Date.AddDays(-5).ToString("yyyy-MM-dd HH:mm:ss") ;
//string value1 = "2025-06-20 00:00:00";//DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss");
string value = now.Date.AddDays(-7).ToString("yyyy-MM-dd");
string value1 = now.Date.ToString("yyyy-MM-dd");
if (now.Date.AddDays(-7) < startTime)
{
value = startTime.ToString("yyyy-MM-dd");
}
//205采购退货
requestBizData.Inouttype = 205;
requestBizData.StartDate = value;
requestBizData.EndDate = value1;
requestBizData.PageSize = 200;
requestBizData.PageIndex = 0;
requestBizData.SelelctFields = "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,vendCustomerId,applyDepartId,applyDepartName,outBillNo,logisticList,gmtModified,departCode,applyCompanyName,applyCompanyCode,applyCompanyId,applyUserId,applyUserName,companyCode,goodsDocDetailList,sendCompanyName,send,sendTel,sendPhone,sendEmail,sendCountryName,sendProvinceName,sendCityName,sendTownName,sendStreetName,sendAddress,receiveCompanyName,receive,receiveTel,receivePhone,receiveEmail,receiveCountryName,receiveProvinceName,receiveCityName,receiveTownName,receiveStreetName,receiveAddress" +
",goodsDocDetailList.recId,goodsDocDetailList.goodsId,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName,goodsDocDetailList.skuId,goodsDocDetailList.skuName,goodsDocDetailList.skuBarcode,goodsDocDetailList.unitName,goodsDocDetailList.cuPrice,goodsDocDetailList.cuValue,goodsDocDetailList.caseNumber,goodsDocDetailList.rowRemark,goodsDocDetailList.assistUnit,goodsDocDetailList.estCost,goodsDocDetailList.estTax,goodsDocDetailList.estPrice,goodsDocDetailList.estPriceNoTax,goodsDocDetailList.estCostNoTax,goodsDocDetailList.taxRate,goodsDocDetailList.batchNo,goodsDocDetailList.serialNo,goodsDocDetailList.productionDate,goodsDocDetailList.expirationDate,goodsDocDetailList.shelfLife,goodsDocDetailList.shelfLiftUnit,goodsDocDetailList.sourceDetailId,goodsDocDetailList.transNoTaxPrice,goodsDocDetailList.transNoTaxAmount,goodsDocDetailList.transHasTaxPrice,goodsDocDetailList.transHasTaxAmount" +
",goodsDocDetailList.transTaxAmount,goodsDocDetailList.detailField1,goodsDocDetailList.detailField2,goodsDocDetailList.detailField3,goodsDocDetailList.detailField4,goodsDocDetailList.detailField5,goodsDocDetailList.isCertified,goodsDocDetailList.registrationNumber,goodsDocDetailList.approvalDate,goodsDocDetailList.productionDepart,goodsDocDetailList.batchNumber,goodsDocDetailList.quantity,goodsDocDetailList.cateId,goodsDocDetailList.cateName,goodsDocDetailList.volume,goodsDocDetailList.skuWeight";
List<int> TradeTypeList = new List<int>();
TradeTypeList.Add(1005);
List<ErpStorageGoodsDocOutV2ResponseBizData> reslut = new List<ErpStorageGoodsDocOutV2ResponseBizData>();
List<ErpStorageGoodsDocOutV2ResponseBizData> trades = new List<ErpStorageGoodsDocOutV2ResponseBizData>();
TradeTypeList.ForEach(ty =>
{
string lggl = JsonHelper.ToJson(requestBizData);
LogHelper.Info(lggl);
JackyunResponse response = Call(EnumAttribute.GetAttribute(ApiEnum.ERPSTORAGEGOODSDOCOUTV2).Value, "1.0", requestBizData);
string ll = JsonHelper.ToJson(response);
LogHelper.Info("采购退货单: "+ll);
if (response.code == "200")
{
var orderjson = JsonHelper.ToJson(response.result);
var list1 = JsonHelper.ToObject<ErpStorageGoodsDocOutV2ResponseBizData2>(orderjson);
int pageIndex = 1;
string TotalResults = list1.contextId;
while (list1.Data.Count>0)
{
//list1.data.returnChangeList.ForEach(h => h.TradeType = ty);
trades.AddRange(list1.Data);
requestBizData.PageIndex = pageIndex;
requestBizData.contextId = TotalResults;
pageIndex++;
Thread.Sleep(100);
response = Call(EnumAttribute.GetAttribute(ApiEnum.ERPSTORAGEGOODSDOCOUTV2).Value, "1.0", requestBizData);
if (response.code == "200")
{
orderjson = JsonHelper.ToJson(response.result);
list1 = JsonHelper.ToObject<ErpStorageGoodsDocOutV2ResponseBizData2>(orderjson);
}
}
}
else
{
string msg = response.msg;
throw new BaseException(msg);
}
});
var warehouseCodes = shopConfigs.Select(t => t.FPURCHASINGWAREHOUSECODE).Distinct().ToList();
var guolv = shopConfigs.Select(t => new { t.FPURCHASINGWAREHOUSECODE, t.FPURCHASEDATE }).ToList();
trades = trades.Where(t => warehouseCodes.Contains(t.WarehouseCode)).ToList();
foreach (var item in guolv)
{
trades.RemoveAll(t => item.FPURCHASINGWAREHOUSECODE == t.WarehouseCode && item.FPURCHASEDATE > t.InOutDate);
}
return trades;
}
#endregion
}
}