diff --git a/Reportapi/MyCode.Project.Domain/Message/Request/KingDee/SaveModel/PurchaseReturnModel.cs b/Reportapi/MyCode.Project.Domain/Message/Request/KingDee/SaveModel/PurchaseReturnModel.cs index 318ff28..5730357 100644 --- a/Reportapi/MyCode.Project.Domain/Message/Request/KingDee/SaveModel/PurchaseReturnModel.cs +++ b/Reportapi/MyCode.Project.Domain/Message/Request/KingDee/SaveModel/PurchaseReturnModel.cs @@ -1,143 +1,143 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MyCode.Project.Domain.Message.Request.KingDee.SaveModel -{ - /// - /// 采购退料单模型 - /// - public class PurchaseReturnModel - { - public int? FID { get; set; } - public FBillTypeID FBillTypeID { get; set; } - public string FDate { get; set; } - public string FMRTYPE { get; set; } - public string FMRMODE { get; set; } - public FStockOrgId FStockOrgId { get; set; } - public bool? FIsConvert { get; set; } - public FRequireOrgId FRequireOrgId { get; set; } - public FPurchaseOrgId FPurchaseOrgId { get; set; } - public FSupplierID FSupplierID { get; set; } - public FACCEPTORID FACCEPTORID { get; set; } - public string FAcceptAddress { get; set; } - public FSettleId FSettleId { get; set; } - public FCHARGEID FCHARGEID { get; set; } - public string FOwnerTypeIdHead { get; set; } - public FOwnerIdHead FOwnerIdHead { get; set; } - public int? FCDateOffsetValue { get; set; } - public FAcceptorContactID FAcceptorContactID { get; set; } - public FSalOutStockOrgId FSalOutStockOrgId { get; set; } - public string FACCTYPE { get; set; } - public FPURMRBFIN FPURMRBFIN { get; set; } - public List FPURMRBENTRY { get; set; } - } - - public class FRequireOrgId - { - public string FNumber { get; set; } - } - - public class FSupplierID - { - public string FNumber { get; set; } - } - - public class FACCEPTORID - { - public string FNumber { get; set; } - } - - public class FSettleId - { - public string FNumber { get; set; } - } - - public class FCHARGEID - { - public string FNumber { get; set; } - } - - public class FAcceptorContactID - { - public string FCONTACTNUMBER { get; set; } - } - - public class FPURMRBFIN - { - public FSettleOrgId FSettleOrgId { get; set; } - public FSettleCurrId FSettleCurrId { get; set; } - public bool? FIsIncludedTax { get; set; } - public string FPRICETIMEPOINT { get; set; } - public FLOCALCURRID FLOCALCURRID { get; set; } - public FEXCHANGETYPEID FEXCHANGETYPEID { get; set; } - public decimal? FEXCHANGERATE { get; set; } - public bool? FISPRICEEXCLUDETAX { get; set; } - public decimal? FHSExchangeRate { get; set; } - } - - public class FLOCALCURRID - { - public string FNumber { get; set; } - } - - public class FEXCHANGETYPEID - { - public string FNumber { get; set; } - } - - public class FPURMRBENTRY - { - public string FRowType { get; set; } - public FMATERIALID FMATERIALID { get; set; } - public string FMaterialDesc { get; set; } - public FUnitID FUnitID { get; set; } - public decimal? FRMREALQTY { get; set; } - public decimal? FREPLENISHQTY { get; set; } - public decimal? FKEAPAMTQTY { get; set; } - public FPRICEUNITID FPRICEUNITID { get; set; } - public decimal? FPrice { get; set; } - public decimal? FExtAuxUnitQty { get; set; } - public bool? FIsReceiveUpdateStock { get; set; } - public decimal? FInvoicedJoinQty { get; set; } - public bool? FGiveAway { get; set; } - public decimal? FPriceBaseQty { get; set; } - public FCARRYUNITID FCARRYUNITID { get; set; } - public decimal? FCarryQty { get; set; } - public decimal? FCarryBaseQty { get; set; } - public int? FPOORDERENTRYID { get; set; } - public bool? FBILLINGCLOSE { get; set; } - public decimal? FRMMUSTQTY { get; set; } - public decimal? FAUXUNITQTY { get; set; } - public string FOWNERTYPEID { get; set; } - public FOwnerId FOWNERID { get; set; } - public decimal? FENTRYTAXRATE { get; set; } - public decimal? FDISCOUNTRATE { get; set; } - public decimal? FTAXPRICE { get; set; } - public decimal? FPriceDiscount { get; set; } - public int? FReturnStockEntryId { get; set; } - public bool? FIsStock { get; set; } - public string FSRCBillTypeId { get; set; } - public string FSRCBillNo { get; set; } - public int? FSUBREQBILLSEQ { get; set; } - public int? FSUBREQENTRYID { get; set; } - } - - public class FMATERIALID - { - public string FNumber { get; set; } - } - - public class FPRICEUNITID - { - public string FNumber { get; set; } - } - - public class FCARRYUNITID - { - public string FNumber { get; set; } - } -} - +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MyCode.Project.Domain.Message.Request.KingDee.SaveModel +{ + /// + /// 采购退料单模型 + /// + public class PurchaseReturnModel + { + public int? FID { get; set; } + public FBillTypeID FBillTypeID { get; set; } + public string FDate { get; set; } + public string FMRTYPE { get; set; } + public string FMRMODE { get; set; } + public FStockOrgId FStockOrgId { get; set; } + public bool? FIsConvert { get; set; } + public FRequireOrgId FRequireOrgId { get; set; } + public FPurchaseOrgId FPurchaseOrgId { get; set; } + public FSupplierID FSupplierID { get; set; } + public FACCEPTORID FACCEPTORID { get; set; } + public string FAcceptAddress { get; set; } + public FSettleId FSettleId { get; set; } + public FCHARGEID FCHARGEID { get; set; } + public string FOwnerTypeIdHead { get; set; } + public FOwnerIdHead FOwnerIdHead { get; set; } + public int? FCDateOffsetValue { get; set; } + public FAcceptorContactID FAcceptorContactID { get; set; } + public FSalOutStockOrgId FSalOutStockOrgId { get; set; } + public string FACCTYPE { get; set; } + public FPURMRBFIN FPURMRBFIN { get; set; } + public List FPURMRBENTRY { get; set; } + } + + public class FRequireOrgId + { + public string FNumber { get; set; } + } + + public class FSupplierID + { + public string FNumber { get; set; } + } + + public class FACCEPTORID + { + public string FNumber { get; set; } + } + + public class FSettleId + { + public string FNumber { get; set; } + } + + public class FCHARGEID + { + public string FNumber { get; set; } + } + + public class FAcceptorContactID + { + public string FCONTACTNUMBER { get; set; } + } + + public class FPURMRBFIN + { + public FSettleOrgId FSettleOrgId { get; set; } + public FSettleCurrId FSettleCurrId { get; set; } + public bool? FIsIncludedTax { get; set; } + public string FPRICETIMEPOINT { get; set; } + public FLOCALCURRID FLOCALCURRID { get; set; } + public FEXCHANGETYPEID FEXCHANGETYPEID { get; set; } + public decimal? FEXCHANGERATE { get; set; } + public bool? FISPRICEEXCLUDETAX { get; set; } + public decimal? FHSExchangeRate { get; set; } + } + + public class FLOCALCURRID + { + public string FNumber { get; set; } + } + + public class FEXCHANGETYPEID + { + public string FNumber { get; set; } + } + + public class FPURMRBENTRY + { + public string FRowType { get; set; } + public FMATERIALID FMATERIALID { get; set; } + public string FMaterialDesc { get; set; } + public FUnitID FUnitID { get; set; } + public decimal? FRMREALQTY { get; set; } + public decimal? FREPLENISHQTY { get; set; } + public decimal? FKEAPAMTQTY { get; set; } + public FPRICEUNITID FPRICEUNITID { get; set; } + public decimal? FPrice { get; set; } + public decimal? FExtAuxUnitQty { get; set; } + public bool? FIsReceiveUpdateStock { get; set; } + public decimal? FInvoicedJoinQty { get; set; } + public bool? FGiveAway { get; set; } + public decimal? FPriceBaseQty { get; set; } + public FCARRYUNITID FCARRYUNITID { get; set; } + public decimal? FCarryQty { get; set; } + public decimal? FCarryBaseQty { get; set; } + public int? FPOORDERENTRYID { get; set; } + public bool? FBILLINGCLOSE { get; set; } + public decimal? FRMMUSTQTY { get; set; } + public decimal? FAUXUNITQTY { get; set; } + public string FOWNERTYPEID { get; set; } + public FOwnerId FOWNERID { get; set; } + public decimal? FENTRYTAXRATE { get; set; } + public decimal? FDISCOUNTRATE { get; set; } + public decimal? FTAXPRICE { get; set; } + public decimal? FPriceDiscount { get; set; } + public int? FReturnStockEntryId { get; set; } + public bool? FIsStock { get; set; } + public string FSRCBillTypeId { get; set; } + public string FSRCBillNo { get; set; } + public int? FSUBREQBILLSEQ { get; set; } + public int? FSUBREQENTRYID { get; set; } + } + + public class FMATERIALID + { + public string FNumber { get; set; } + } + + public class FPRICEUNITID + { + public string FNumber { get; set; } + } + + public class FCARRYUNITID + { + public string FNumber { get; set; } + } +} + diff --git a/Reportapi/MyCode.Project.Services/IServices/IPurchaseReturnService.cs b/Reportapi/MyCode.Project.Services/IServices/IPurchaseReturnService.cs index 3c3c8db..9711705 100644 --- a/Reportapi/MyCode.Project.Services/IServices/IPurchaseReturnService.cs +++ b/Reportapi/MyCode.Project.Services/IServices/IPurchaseReturnService.cs @@ -1,19 +1,19 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MyCode.Project.Services.IServices -{ - public interface IPurchaseReturnService - { - /// - /// 推送采购退料单到金蝶云星空 - /// - /// StorageGoodsDocOutHead表的主键ID(Guid格式的字符串) - /// 返回金蝶API的响应结果(JSON格式) - string PushPurchaseReturnToKingDee(string id); - } -} - +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MyCode.Project.Services.IServices +{ + public interface IPurchaseReturnService + { + /// + /// 推送采购退料单到金蝶云星空 + /// + /// StorageGoodsDocOutHead表的主键ID(Guid格式的字符串) + /// 返回金蝶API的响应结果(JSON格式) + string PushPurchaseReturnToKingDee(string id); + } +} + diff --git a/Reportapi/MyCode.Project.Services/Implementation/OrderPushService.cs b/Reportapi/MyCode.Project.Services/Implementation/OrderPushService.cs index 897ab60..8a2d6e8 100644 --- a/Reportapi/MyCode.Project.Services/Implementation/OrderPushService.cs +++ b/Reportapi/MyCode.Project.Services/Implementation/OrderPushService.cs @@ -43,7 +43,7 @@ namespace MyCode.Project.Services.Implementation , IJackYunService jackYunService , IKingDeeService kingDeeService, IWorkProcessService workProcessService) - {洋浦 + { _yTKJTShopParameterRepository = yTKJTShopParameterRepository; _pushKingDeeOrderRepository = pushKingDeeOrderRepository; _pushKingDeeOrderItemRepository = pushKingDeeOrderItemRepository; diff --git a/Reportapi/MyCode.Project.Services/Implementation/PurchaseReturnService.cs b/Reportapi/MyCode.Project.Services/Implementation/PurchaseReturnService.cs new file mode 100644 index 0000000..624f29f --- /dev/null +++ b/Reportapi/MyCode.Project.Services/Implementation/PurchaseReturnService.cs @@ -0,0 +1,381 @@ +using MyCode.Project.Domain.Message.Request.KingDee; +using MyCode.Project.Domain.Message.Request.KingDee.SaveModel; +using MyCode.Project.Domain.Message.Response.KingDee.K3Result; +using MyCode.Project.Domain.Message.Response.KingDee.K3Result.Model; +using MyCode.Project.Domain.Model; +using MyCode.Project.Domain.Repositories; +using MyCode.Project.Infrastructure.Common; +using MyCode.Project.Infrastructure.Exceptions; +using MyCode.Project.OutSideService; +using MyCode.Project.Services.IServices; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace MyCode.Project.Services.Implementation +{ + /// + /// 采购退料单服务实现 + /// 功能:处理采购退料单推送到金蝶云星空的业务逻辑 + /// + public class PurchaseReturnService : ServiceBase, IPurchaseReturnService + { + private const string BILL_TYPE_CODE = "TLD01_SYS"; + private const string OWNER_TYPE = "BD_OwnerOrg"; + private const string EXCHANGE_TYPE = "HLTX01_SYS"; + private const string DEFAULT_ORG = "100"; + private const string DEFAULT_CURRENCY = "PRE001"; + private const string DEFAULT_UNIT = "Pcs"; + private const string ROW_TYPE_STANDARD = "Standard"; + private const string ROW_TYPE_SERVICE = "Service"; + private const string FORM_ID = "PUR_MRB"; + private const string MR_TYPE = "B"; + private const string MR_MODE = "A"; + private const string ACCT_TYPE = "Q"; + private const int INOUT_TYPE_PURCHASE_RETURN = 205; // 采购退货 + + private IStorageGoodsDocOutHeadRepository _storageGoodsDocOutHeadRepository; + private IStorageGoodsDocOutDetailRepository _storageGoodsDocOutDetailRepository; + private IYTKJTShopParameterRepository _yTKJTShopParameterRepository; + private IKingDeeService _kingDeeService; + + public PurchaseReturnService( + IStorageGoodsDocOutHeadRepository storageGoodsDocOutHeadRepository, + IStorageGoodsDocOutDetailRepository storageGoodsDocOutDetailRepository, + IYTKJTShopParameterRepository yTKJTShopParameterRepository, + IKingDeeService kingDeeService) + { + _storageGoodsDocOutHeadRepository = storageGoodsDocOutHeadRepository; + _storageGoodsDocOutDetailRepository = storageGoodsDocOutDetailRepository; + _yTKJTShopParameterRepository = yTKJTShopParameterRepository; + _kingDeeService = kingDeeService; + } + + /// + /// 推送采购退料单到金蝶云星空 + /// + /// StorageGoodsDocOutHead表的主键ID(Guid格式的字符串) + /// 返回金蝶API的响应结果(JSON格式) + public string PushPurchaseReturnToKingDee(string id) + { + var outHead = _storageGoodsDocOutHeadRepository + .Queryable() + .Where(t => id == t.Id.ToString()) + .First(); + + if (outHead == null) + { + throw new BaseException($"未找到ID为 {id} 的采购退料单记录"); + } + + if (outHead.Status != 0 && outHead.Status != 1) + { + throw new BaseException($"采购退料单 {outHead.GoodsdocNo} 已经推送过,状态为:{outHead.Status},不允许重复推送"); + } + + // 校验出库类型是否为采购退货 + if (outHead.Inouttype != INOUT_TYPE_PURCHASE_RETURN) + { + throw new BaseException($"出库单类型 {outHead.Inouttype} 不是采购退货(Inouttype应为205),无法推送"); + } + + var param = _yTKJTShopParameterRepository + .Queryable() + .Where(t => t.FDOCUMENTSTATUS == "C") + .First(); + + if (param == null) + { + throw new BaseException("没有找到已审核的门店参数配置,请联系管理员检查门店参数表"); + } + + // 检查采购退货单同步配置(使用采购入库单的配置字段,如果没有则使用通用配置) + string syncConfig = param.FPURCHASERETURNORDER ?? param.FSYNCHRONIZEKINGDEE; + if (syncConfig == "0") + { + throw new BaseException("门店参数配置中采购退料单同步功能未启用,请联系管理员检查门店参数配置"); + } + + if (syncConfig == "1") + { + var response = PushKingdeePurchaseReturn(outHead, param); + string result = JsonHelper.ToJson(response); + + if (response.IsSuccess) + { + outHead.Status = 2; + _storageGoodsDocOutHeadRepository.Update(outHead); + } + + return result; + } + + return ""; + } + + /// + /// 推送到金蝶云星空 + /// + private K3CloudResponseStatus PushKingdeePurchaseReturn(StorageGoodsDocOutHead outHead, YTKJTShopParameter param) + { + // 从StorageGoodsDocOutDetail表获取明细数据 + var detailList = _storageGoodsDocOutDetailRepository + .Queryable() + .Where(t => outHead.Id == t.HeadId) + .ToList(); + + if (detailList == null || detailList.Count == 0) + { + throw new BaseException($"采购退料单 {outHead.GoodsdocNo} 没有找到明细数据,无法推送"); + } + + // 校验供应商编码(从VendCustomerId获取) + if (string.IsNullOrEmpty(outHead.VendCustomerId)) + { + throw new BaseException($"采购退料单 {outHead.GoodsdocNo} 供应商编码为空,无法推送"); + } + + // 获取采购组织ID + string purchaseOrgId = param.FPURCHASEORGID?.ToString() ?? param.FSALEORGID?.ToString() ?? DEFAULT_ORG; + + // 获取仓库编码 + string warehouseCode = outHead.WarehouseCode ?? param.FPURCHASINGWAREHOUSECODE ?? ""; + + if (string.IsNullOrEmpty(warehouseCode)) + { + throw new BaseException($"采购退料单 {outHead.GoodsdocNo} 仓库编码为空,无法推送"); + } + + // 构建金蝶API的明细行数据 + var entryList = detailList.Select(n => BuildEntryItem(n, param, purchaseOrgId, outHead)).ToList(); + + if (entryList.Count == 0) + { + throw new BaseException($"采购退料单 {outHead.GoodsdocNo} 明细数据转换失败,无法推送"); + } + + // 构建金蝶API的主表数据 + var model = BuildMainModel(outHead, param, purchaseOrgId, entryList); + + // 构建金蝶API请求对象 + BillSave billSave = new BillSave() + { + Model = model, + IsAutoSubmitAndAudit = true, + }; + + // 调用金蝶服务保存单据 + var responseStatus = _kingDeeService.Save(FORM_ID, billSave); + return responseStatus; + } + + /// + /// 构建明细行数据 + /// + private FPURMRBENTRY BuildEntryItem(StorageGoodsDocOutDetail detail, YTKJTShopParameter param, string orgId, StorageGoodsDocOutHead outHead) + { + // 根据物料类型动态设置FRowType(如果物料名称包含"服务"或"费用"等关键字,则设置为Service,否则为Standard) + string rowType = ROW_TYPE_STANDARD; + if (!string.IsNullOrEmpty(detail.GoodsName)) + { + string goodsName = detail.GoodsName.ToUpper(); + if (goodsName.Contains("服务") || goodsName.Contains("费用") || goodsName.Contains("运费") || + goodsName.Contains("SERVICE") || goodsName.Contains("FEE") || goodsName.Contains("FREIGHT")) + { + rowType = ROW_TYPE_SERVICE; + } + } + + // 计算数量 + decimal realQty = Math.Abs(detail.Quantity ?? 0); + + // 计算含税单价 + decimal taxPrice = detail.EstPrice ?? 0; + + // 计算无税单价 + decimal taxRate = detail.TaxRate ?? param.FTAXRATE; + decimal price = taxRate > 0 && taxPrice > 0 ? Math.Round(taxPrice / (1 + taxRate / 100), 10) : taxPrice; + + return new FPURMRBENTRY() + { + FRowType = rowType, + FMATERIALID = new FMATERIALID() + { + FNumber = detail.SkuBarcode ?? "" + }, + FMaterialDesc = detail.GoodsName ?? "", + FUnitID = new FUnitID() + { + FNumber = detail.UnitName ?? DEFAULT_UNIT + }, + FRMREALQTY = realQty, + FREPLENISHQTY = 0, + FKEAPAMTQTY = 0, + FPRICEUNITID = new FPRICEUNITID() + { + FNumber = detail.UnitName ?? DEFAULT_UNIT + }, + FPrice = price, + FExtAuxUnitQty = 0, + FIsReceiveUpdateStock = false, + FInvoicedJoinQty = 0, + FGiveAway = false, + FPriceBaseQty = realQty, + FCARRYUNITID = new FCARRYUNITID() + { + FNumber = detail.UnitName ?? DEFAULT_UNIT + }, + FCarryQty = 0, + FCarryBaseQty = 0, + FPOORDERENTRYID = 0, + FBILLINGCLOSE = false, + FRMMUSTQTY = realQty, + FAUXUNITQTY = 0, + FOWNERTYPEID = OWNER_TYPE, + FOWNERID = new FOwnerId() + { + FNumber = orgId + }, + FENTRYTAXRATE = taxRate, + FDISCOUNTRATE = 0, + FTAXPRICE = taxPrice, + FPriceDiscount = 0, + FReturnStockEntryId = 0, + FIsStock = false, + FSRCBillTypeId = "", + FSRCBillNo = detail.SourceDetailId ?? outHead.SourceBillNo ?? "", + FSUBREQBILLSEQ = 0, + FSUBREQENTRYID = 0 + }; + } + + /// + /// 构建主表数据 + /// + private PurchaseReturnModel BuildMainModel(StorageGoodsDocOutHead outHead, YTKJTShopParameter param, string orgId, List entryList) + { + // 解析出库日期 + DateTime? outDate = null; + if (!string.IsNullOrEmpty(outHead.InOutDate)) + { + if (DateTime.TryParse(outHead.InOutDate, out DateTime parsedDate)) + { + outDate = parsedDate; + } + } + string dateStr = outDate?.ToString("yyyy-MM-dd HH:mm:ss") ?? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + // 获取供应商编码 + string supplierCode = outHead.VendCustomerId ?? ""; + + // 构建收货地址(从收件人地址字段组合) + string acceptAddress = BuildAcceptAddress(outHead); + + return new PurchaseReturnModel() + { + FID = 0, + FBillTypeID = new FBillTypeID() + { + FNUMBER = BILL_TYPE_CODE + }, + FDate = dateStr, + FMRTYPE = MR_TYPE, + FMRMODE = MR_MODE, + FStockOrgId = new FStockOrgId() + { + FNumber = orgId + }, + FIsConvert = false, + FRequireOrgId = new FRequireOrgId() + { + FNumber = orgId + }, + FPurchaseOrgId = new FPurchaseOrgId() + { + FNumber = orgId + }, + FSupplierID = !string.IsNullOrEmpty(supplierCode) ? new FSupplierID() + { + FNumber = supplierCode + } : null, + FACCEPTORID = !string.IsNullOrEmpty(supplierCode) ? new FACCEPTORID() + { + FNumber = supplierCode + } : null, + FAcceptAddress = acceptAddress, + FSettleId = !string.IsNullOrEmpty(supplierCode) ? new FSettleId() + { + FNumber = supplierCode + } : null, + FCHARGEID = !string.IsNullOrEmpty(supplierCode) ? new FCHARGEID() + { + FNumber = supplierCode + } : null, + FOwnerTypeIdHead = OWNER_TYPE, + FOwnerIdHead = new FOwnerIdHead() + { + FNumber = orgId + }, + FCDateOffsetValue = 0, + FAcceptorContactID = null, // 如果需要联系人,可以从其他字段获取 + FSalOutStockOrgId = new FSalOutStockOrgId() + { + FNumber = orgId + }, + FACCTYPE = ACCT_TYPE, + FPURMRBFIN = new FPURMRBFIN() + { + FSettleOrgId = new FSettleOrgId() + { + FNumber = orgId + }, + FSettleCurrId = new FSettleCurrId() + { + FNumber = outHead.CurrencyCode ?? DEFAULT_CURRENCY + }, + FIsIncludedTax = true, + FPRICETIMEPOINT = "1", + FLOCALCURRID = new FLOCALCURRID() + { + FNumber = outHead.CurrencyCode ?? DEFAULT_CURRENCY + }, + FEXCHANGETYPEID = new FEXCHANGETYPEID() + { + FNumber = EXCHANGE_TYPE + }, + FEXCHANGERATE = outHead.CurrencyRate ?? 1m, + FISPRICEEXCLUDETAX = true, + FHSExchangeRate = 1m + }, + FPURMRBENTRY = entryList + }; + } + + /// + /// 构建收货地址 + /// + private string BuildAcceptAddress(StorageGoodsDocOutHead outHead) + { + if (string.IsNullOrEmpty(outHead.ReceiveAddress)) + { + return ""; + } + + // 组合地址信息 + var addressParts = new List(); + if (!string.IsNullOrEmpty(outHead.ReceiveProvinceName)) + addressParts.Add(outHead.ReceiveProvinceName); + if (!string.IsNullOrEmpty(outHead.ReceiveCityName)) + addressParts.Add(outHead.ReceiveCityName); + if (!string.IsNullOrEmpty(outHead.ReceiveTownName)) + addressParts.Add(outHead.ReceiveTownName); + if (!string.IsNullOrEmpty(outHead.ReceiveStreetName)) + addressParts.Add(outHead.ReceiveStreetName); + if (!string.IsNullOrEmpty(outHead.ReceiveAddress)) + addressParts.Add(outHead.ReceiveAddress); + + return string.Join("", addressParts); + } + } +} + diff --git a/Reportapi/MyCode.Project.WebApi/Controllers/TestController.cs b/Reportapi/MyCode.Project.WebApi/Controllers/TestController.cs index f65d226..c830976 100644 --- a/Reportapi/MyCode.Project.WebApi/Controllers/TestController.cs +++ b/Reportapi/MyCode.Project.WebApi/Controllers/TestController.cs @@ -1,329 +1,341 @@ -using MyCode.Project.Domain.Model; -using MyCode.Project.Infrastructure.Common; -using MyCode.Project.Services; -using MyCode.Project.Services.Implementation; -using MyCode.Project.Services.IServices; -using System; -using System.Collections.Generic; -using System.Text.RegularExpressions; -using System.Web.Http; - -namespace MyCode.Project.WebApi.Controllers -{ - /// - /// 测试接口 - /// - public class TestController : BaseAPIController - { - - private IJackYunTaskService _jackYunTaskService; - private IWMSService _wMSService; - private IJackYunStockinService _jackYunStockinService; - private IOrderPushService _orderPushService; - private IPurchaseStockInService _purchaseStockInService; - private ISalesOutboundService _salesOutboundService; - private ISalesReturnService _salesReturnService; - - public TestController(IJackYunTaskService jackYunTaskService, IWMSService wMSService - , IJackYunStockinService jackYunStockinService, IOrderPushService orderPushService - , IPurchaseStockInService purchaseStockInService, ISalesOutboundService salesOutboundService - , ISalesReturnService salesReturnService) - { - _jackYunTaskService = jackYunTaskService; - _wMSService = wMSService; - _jackYunStockinService = jackYunStockinService; - _orderPushService = orderPushService; - _purchaseStockInService = purchaseStockInService; - _salesOutboundService = salesOutboundService; - _salesReturnService = salesReturnService; - } - - /// - /// 测试推送销售数据到金蝶云星空和WMS - /// - [HttpGet] - [AllowAnonymous] - public string TaskSendKingdeeSaleOrderById(string id) - { - return _orderPushService.PushOrderToKingDee(id); - } - - /// - /// 测试推送采购入库单到金蝶云星空 - /// - [HttpGet] - [AllowAnonymous] - public string TaskSendKingdeePurchaseStockInById(string id) - { - return _purchaseStockInService.PushPurchaseStockInToKingDee(id); - } - - /// - /// 测试推送销售出库单到金蝶云星空 - /// - [HttpGet] - [AllowAnonymous] - public string TaskSendKingdeeSalesOutboundById(string id) - { - return _salesOutboundService.PushSalesOutboundToKingDee(id); - } - - /// - /// 测试推送销售退货单到金蝶云星空 - /// - [HttpGet] - [AllowAnonymous] - public string TaskSendKingdeeSalesReturnById(string id) - { - return _salesReturnService.PushSalesReturnToKingDee(id); - } - - - #region 调度运行抓吉客云销售订单 - - /// - /// 调度运行抓吉客云销售订单 - /// - [HttpGet] - [AllowAnonymous] - public void TaskGetJackYunOrder(string now) - { - _jackYunTaskService.TaskGetJackYunOrder(now); - } - #endregion - - - #region 调度运行抓吉客云退货订单 - - /// - /// 调度运行抓吉客云退货订单 - /// - [HttpGet] - [AllowAnonymous] - public void TaskGetReturnChangeList(string now) - { - _jackYunTaskService.TaskGetReturnChangeList(now); - } - #endregion - - #region 抓WMS订单 - /// - /// 抓WMS订单 - /// - [HttpGet] - [AllowAnonymous] - public List GetList(DateTime now) - { - return _wMSService.GetList(now); - } - #endregion - - #region 合并吉客云订单到新表 - /// - /// 合并吉客云订单到新表 - /// - [HttpGet] - [AllowAnonymous] - public string GetAndMergeJackYunOrder(string now) - { - return _jackYunTaskService.GetAndMergeJackYunOrder(now); - } - #endregion - - #region 合并吉客云退货订单到新表 - /// - /// 合并吉客云退货订单到新表 - /// - [HttpGet] - [AllowAnonymous] - public string GetAndMergeJackReturnYunOrder(string now) - { - return _jackYunTaskService.GetAndMergeJackReturnYunOrder(now); - } - #endregion - - /// - /// 替换或添加URL中的端口号(支持指定协议) - /// - /// - /// - /// - /// - [HttpGet] - [AllowAnonymous] - public string ReplaceOrAddPortAdvanced(string input, string newPort, string protocol = "http") - { - // 构建协议特定的模式 - string protocolPattern = string.IsNullOrEmpty(protocol) ? @"(https?|ftp)://" : $"{protocol}://"; - - // 匹配已有端口号 - string patternWithPort = $@"({protocolPattern}[^/]+?):\d+"; - // 匹配没有端口号 - string patternWithoutPort = $@"({protocolPattern}[^/:/]+)(?=/|$)"; - - // 先尝试替换已有端口号 - string result = Regex.Replace(input, patternWithPort, $"$1:{newPort}"); - - // 如果没有端口号被替换,尝试添加端口号 - if (result == input) - result = Regex.Replace(input, patternWithoutPort, $"$1:{newPort}"); - - return result; - } - - //#region 订单查询 - - ///// - ///// 订单查询 - ///// - //[HttpGet] - //[AllowAnonymous] - //public string testTradeFullInfoGet() - //{ - // return _jackYunService.testTradeFullInfoGet(); - //} - //#endregion - - - - //#region 订单查询 - - ///// - ///// 订单查询2 - ///// - //[HttpGet] - //[AllowAnonymous] - //public List testTradeFullInfoGet(DateTime now) - //{ - // return _jackYunService.testTradeFullInfoGet(now); - //} - //#endregion - - //#region AESEncrypt(AES加密) - ///// - ///// AES加密 - ///// - ///// - ///// - //[HttpGet] - //[AllowAnonymous] - //public string AESEncrypt(string text,string secretKey) - //{ - // return AESHelper.AESEncrypt(text, secretKey); - //} - //#endregion - - //#region AESDecrypt(AES解密) - ///// - ///// AES解密 - ///// - ///// - ///// - //[AllowAnonymous] - //[HttpGet] - //public string AESDecrypt(string text,string secretKey) - //{ - // if (string.IsNullOrWhiteSpace(secretKey)) - // { - // return AESHelper.AESDecrypt(text, ""); - // } - // return AESHelper.AESDecrypt(text, secretKey); - - //} - //#endregion - - #region HtmLToXls(测试html转成xls) - /// - /// 测试html转成xls - /// - [AllowAnonymous] - [HttpGet] - public void HtmLToXls() - { - ExcelHelper.HtmlToExcel(@"D:\App_File\2.html", @"D:\App_File\2.xlsx"); - } - #endregion - - //#region ReportExportAnsy(异步执行导出,有带websocket异步推送) - ///// - ///// 异步执行导出,有带websocket异步推送 - ///// - ///// - //[HttpPost] - //public void ReportExportAnsy(AnsyReportExportAct act) - //{ - // _reportService.ReportExportAnsy(act); - //} - //#endregion - - #region GenerateHS256Key(JWTKEY) - /// - /// GenerateHS256Key - /// - /// - /// - [HttpGet] - [AllowAnonymous] - public string GenerateHS256Key() - { - return JwtKeyGenerator.GenerateHS256Key(); - } - #endregion - - #region 调度运行上传申请出入库申请单 - - /// - /// 调度运行上传申请出入库申请单 - /// - [HttpGet] - [AllowAnonymous] - public void TaskSendJackYunInOrOutStock(string sheet) - { - _jackYunStockinService.TaskSendInventoryMovement( sheet); - } - #endregion - - - #region 调度运行获取吉客云采购入库 - - /// - /// 调度运行获取吉客云采购入库 - /// - [HttpGet] - [AllowAnonymous] - public void GetPurchaseInboundData(string now) - { - _jackYunTaskService.GetPurchaseInboundData(now); - } - #endregion - - #region 调度运行吉客云采购出库单 - - /// - /// 调度运行吉客云采购出库单 - /// - [HttpGet] - [AllowAnonymous] - public void GetStorageGoodsDocOutV2(string now) - { - _jackYunTaskService.GetStorageGoodsDocOutV2(now); - } - #endregion - - - #region 合并吉客云采购订单到新表 - /// - /// 合并吉客云采购订单到新表 - /// - [HttpGet] - [AllowAnonymous] - public string GetAndMergePushGoodsDocInOrder(string now) - { - return _jackYunTaskService.GetAndMergePushGoodsDocInOrder(now); - } - #endregion - - } - -} - +using MyCode.Project.Domain.Model; +using MyCode.Project.Infrastructure.Common; +using MyCode.Project.Services; +using MyCode.Project.Services.Implementation; +using MyCode.Project.Services.IServices; +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Web.Http; + +namespace MyCode.Project.WebApi.Controllers +{ + /// + /// 测试接口 + /// + public class TestController : BaseAPIController + { + + private IJackYunTaskService _jackYunTaskService; + private IWMSService _wMSService; + private IJackYunStockinService _jackYunStockinService; + private IOrderPushService _orderPushService; + private IPurchaseStockInService _purchaseStockInService; + private ISalesOutboundService _salesOutboundService; + private ISalesReturnService _salesReturnService; + private IPurchaseReturnService _purchaseReturnService; + + public TestController(IJackYunTaskService jackYunTaskService, IWMSService wMSService + , IJackYunStockinService jackYunStockinService, IOrderPushService orderPushService + , IPurchaseStockInService purchaseStockInService, ISalesOutboundService salesOutboundService + , ISalesReturnService salesReturnService, IPurchaseReturnService purchaseReturnService) + { + _jackYunTaskService = jackYunTaskService; + _wMSService = wMSService; + _jackYunStockinService = jackYunStockinService; + _orderPushService = orderPushService; + _purchaseStockInService = purchaseStockInService; + _salesOutboundService = salesOutboundService; + _salesReturnService = salesReturnService; + _purchaseReturnService = purchaseReturnService; + } + + /// + /// 测试推送销售数据到金蝶云星空和WMS + /// + [HttpGet] + [AllowAnonymous] + public string TaskSendKingdeeSaleOrderById(string id) + { + return _orderPushService.PushOrderToKingDee(id); + } + + /// + /// 测试推送采购入库单到金蝶云星空 + /// + [HttpGet] + [AllowAnonymous] + public string TaskSendKingdeePurchaseStockInById(string id) + { + return _purchaseStockInService.PushPurchaseStockInToKingDee(id); + } + + /// + /// 测试推送销售出库单到金蝶云星空 + /// + [HttpGet] + [AllowAnonymous] + public string TaskSendKingdeeSalesOutboundById(string id) + { + return _salesOutboundService.PushSalesOutboundToKingDee(id); + } + + /// + /// 测试推送销售退货单到金蝶云星空 + /// + [HttpGet] + [AllowAnonymous] + public string TaskSendKingdeeSalesReturnById(string id) + { + return _salesReturnService.PushSalesReturnToKingDee(id); + } + + /// + /// 测试推送采购退料单到金蝶云星空 + /// + [HttpGet] + [AllowAnonymous] + public string TaskSendKingdeePurchaseReturnById(string id) + { + return _purchaseReturnService.PushPurchaseReturnToKingDee(id); + } + + + #region 调度运行抓吉客云销售订单 + + /// + /// 调度运行抓吉客云销售订单 + /// + [HttpGet] + [AllowAnonymous] + public void TaskGetJackYunOrder(string now) + { + _jackYunTaskService.TaskGetJackYunOrder(now); + } + #endregion + + + #region 调度运行抓吉客云退货订单 + + /// + /// 调度运行抓吉客云退货订单 + /// + [HttpGet] + [AllowAnonymous] + public void TaskGetReturnChangeList(string now) + { + _jackYunTaskService.TaskGetReturnChangeList(now); + } + #endregion + + #region 抓WMS订单 + /// + /// 抓WMS订单 + /// + [HttpGet] + [AllowAnonymous] + public List GetList(DateTime now) + { + return _wMSService.GetList(now); + } + #endregion + + #region 合并吉客云订单到新表 + /// + /// 合并吉客云订单到新表 + /// + [HttpGet] + [AllowAnonymous] + public string GetAndMergeJackYunOrder(string now) + { + return _jackYunTaskService.GetAndMergeJackYunOrder(now); + } + #endregion + + #region 合并吉客云退货订单到新表 + /// + /// 合并吉客云退货订单到新表 + /// + [HttpGet] + [AllowAnonymous] + public string GetAndMergeJackReturnYunOrder(string now) + { + return _jackYunTaskService.GetAndMergeJackReturnYunOrder(now); + } + #endregion + + /// + /// 替换或添加URL中的端口号(支持指定协议) + /// + /// + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public string ReplaceOrAddPortAdvanced(string input, string newPort, string protocol = "http") + { + // 构建协议特定的模式 + string protocolPattern = string.IsNullOrEmpty(protocol) ? @"(https?|ftp)://" : $"{protocol}://"; + + // 匹配已有端口号 + string patternWithPort = $@"({protocolPattern}[^/]+?):\d+"; + // 匹配没有端口号 + string patternWithoutPort = $@"({protocolPattern}[^/:/]+)(?=/|$)"; + + // 先尝试替换已有端口号 + string result = Regex.Replace(input, patternWithPort, $"$1:{newPort}"); + + // 如果没有端口号被替换,尝试添加端口号 + if (result == input) + result = Regex.Replace(input, patternWithoutPort, $"$1:{newPort}"); + + return result; + } + + //#region 订单查询 + + ///// + ///// 订单查询 + ///// + //[HttpGet] + //[AllowAnonymous] + //public string testTradeFullInfoGet() + //{ + // return _jackYunService.testTradeFullInfoGet(); + //} + //#endregion + + + + //#region 订单查询 + + ///// + ///// 订单查询2 + ///// + //[HttpGet] + //[AllowAnonymous] + //public List testTradeFullInfoGet(DateTime now) + //{ + // return _jackYunService.testTradeFullInfoGet(now); + //} + //#endregion + + //#region AESEncrypt(AES加密) + ///// + ///// AES加密 + ///// + ///// + ///// + //[HttpGet] + //[AllowAnonymous] + //public string AESEncrypt(string text,string secretKey) + //{ + // return AESHelper.AESEncrypt(text, secretKey); + //} + //#endregion + + //#region AESDecrypt(AES解密) + ///// + ///// AES解密 + ///// + ///// + ///// + //[AllowAnonymous] + //[HttpGet] + //public string AESDecrypt(string text,string secretKey) + //{ + // if (string.IsNullOrWhiteSpace(secretKey)) + // { + // return AESHelper.AESDecrypt(text, ""); + // } + // return AESHelper.AESDecrypt(text, secretKey); + + //} + //#endregion + + #region HtmLToXls(测试html转成xls) + /// + /// 测试html转成xls + /// + [AllowAnonymous] + [HttpGet] + public void HtmLToXls() + { + ExcelHelper.HtmlToExcel(@"D:\App_File\2.html", @"D:\App_File\2.xlsx"); + } + #endregion + + //#region ReportExportAnsy(异步执行导出,有带websocket异步推送) + ///// + ///// 异步执行导出,有带websocket异步推送 + ///// + ///// + //[HttpPost] + //public void ReportExportAnsy(AnsyReportExportAct act) + //{ + // _reportService.ReportExportAnsy(act); + //} + //#endregion + + #region GenerateHS256Key(JWTKEY) + /// + /// GenerateHS256Key + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public string GenerateHS256Key() + { + return JwtKeyGenerator.GenerateHS256Key(); + } + #endregion + + #region 调度运行上传申请出入库申请单 + + /// + /// 调度运行上传申请出入库申请单 + /// + [HttpGet] + [AllowAnonymous] + public void TaskSendJackYunInOrOutStock(string sheet) + { + _jackYunStockinService.TaskSendInventoryMovement( sheet); + } + #endregion + + + #region 调度运行获取吉客云采购入库 + + /// + /// 调度运行获取吉客云采购入库 + /// + [HttpGet] + [AllowAnonymous] + public void GetPurchaseInboundData(string now) + { + _jackYunTaskService.GetPurchaseInboundData(now); + } + #endregion + + #region 调度运行吉客云采购出库单 + + /// + /// 调度运行吉客云采购出库单 + /// + [HttpGet] + [AllowAnonymous] + public void GetStorageGoodsDocOutV2(string now) + { + _jackYunTaskService.GetStorageGoodsDocOutV2(now); + } + #endregion + + + #region 合并吉客云采购订单到新表 + /// + /// 合并吉客云采购订单到新表 + /// + [HttpGet] + [AllowAnonymous] + public string GetAndMergePushGoodsDocInOrder(string now) + { + return _jackYunTaskService.GetAndMergePushGoodsDocInOrder(now); + } + #endregion + + } + +} +