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"); /// /// 请求开放平台服务 /// /// 开放接口方法名 /// 开放接口版本号(null表示默认) /// 请求业务数据 /// OpenResponse返回对象 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(strResponse); } #region 订单查询 /// /// 订单查询 /// /// 截止日期 /// /// public List 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 TradeTypeList = new List(); TradeTypeList.Add(1); TradeTypeList.Add(7); TradeTypeList.Add(8); TradeTypeList.Add(5); List trades = new List(); 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>(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>(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 退货查询 /// /// 退货查询 /// /// 截止日期 /// /// public List 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 TradeTypeList = new List(); TradeTypeList.Add(1005); List reslut = new List(); List trades = new List(); 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>(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>(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 获取吉客云采购入库 /// /// 获取吉客云采购入库 /// /// 截止日期 /// /// public List 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 TradeTypeList = new List(); TradeTypeList.Add(1005); List reslut = new List(); List trades = new List(); 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(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(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 获取吉客云采购退货出库单 /// /// 获取吉客云采购退货出库单 /// /// 截止日期 /// /// public List 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 TradeTypeList = new List(); TradeTypeList.Add(1005); List reslut = new List(); List trades = new List(); 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(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(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 } }