From dfa59fc3bcbcf34974f2e26ffe7e6cff7a2597d2 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 16 Oct 2024 11:03:45 +0800 Subject: [PATCH 01/60] =?UTF-8?q?=E6=88=90=E5=93=81=E5=8D=B3=E6=97=B6?= =?UTF-8?q?=E5=BA=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../Controllers/ProductInventoryController.cs | 101 ++++++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml | 26 +++ src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 172 +++++++++++++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 114 +++++++++++ .../ProductInventoryQueryRequest.cs | 25 +++ .../ProductInventoryQueryResponse.cs | 69 +++++++ .../SingleData/UcStockHeadOfficeResponse.cs | 26 +++ .../Results/ResultPagedNumber2List.cs | 114 +++++++++++ .../Entitys/ProductInventory.cs | 64 +++++++ .../Infrastructure/IBasicsRepositories.cs | 5 + .../IProductInventoryRepositories.cs | 40 ++++ .../Values/FileDownLoadOrderType.cs | 6 + .../Values/ProductInventoryType.cs | 29 +++ .../Values/Single/SysConfigAction.cs | 4 + .../BasicsRepositories.cs | 17 +- .../Configuration/RepositoryDbContext.cs | 8 + .../AppBuilderExtensions.cs | 2 +- .../ProductInventoryRepositories.cs | 177 ++++++++++++++++++ 19 files changed, 996 insertions(+), 3 deletions(-) create mode 100644 src/WMS.Web.Api/Controllers/ProductInventoryController.cs create mode 100644 src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryRequest.cs create mode 100644 src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryResponse.cs create mode 100644 src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs create mode 100644 src/WMS.Web.Core/Internal/Results/ResultPagedNumber2List.cs create mode 100644 src/WMS.Web.Domain/Entitys/ProductInventory.cs create mode 100644 src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs create mode 100644 src/WMS.Web.Domain/Values/ProductInventoryType.cs create mode 100644 src/WMS.Web.Repositories/ProductInventoryRepositories.cs diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 3bcbb831a194ccecd7e19b51633b0fa6016a1f5e..5f18e85ff270641873548dec40f0b21d92454059 100644 GIT binary patch delta 3809 zcmai$d303O9mnUro4nscRz(8{m_oJKL#3ISgfMNjK}6Y-Ko$bXVkVQY1_*0dWCDmF z5CQ@7NPw_|1OZX;$-cUvNK0GmX=&;4fYL%e&adM+@<;XbduM)Osy%JzobTMvZ@Js= z&7J$cy3y{d8|{ow)){-1>GLjbI?`m=L!M46^9G9j=|OKW)9VWc10{igH&hlV@%z$> z(@H~LUvZ#M@1Q^AOHWTPEAjdQfy~mf-s!=TkiU=LpO)@1y*^LCxia7MFYlRcxIMGY z1FCqpQ5^7L*gkG`zUhD1d7{#M(li2YxYGQ*!0&4A%`7FU|7&gjeLePi2s;va?PW!vMagB(cvH=?bF8pO8=?Ph2T z)Cg^bwn5vW9nel_7qlDN19kE^+b)|a8M^4Ve9ss#Pu+GDaXY=FZKnrZIQPZ?K_ZO(z}pej_&gw zq{n(6x(Mn1Cu~pHa}w|Y^dWQ)2GE`VTgOX?Nk@-`+>c=Ei7rEWl3zhO-c=UzYw#=3 z6=)yS1nq}@1L=MT?QpzU|Fcj?d>c9neSa6n;A>ux-bfovtRJX;z?-1|`!G8qsrhN@ zGV5|Bq5ZAf`HDHm|AXJb)}JqOJf4VWX~bYw5yk&dkz|glJ1OqrB=t#7xT@-7No>si zPT~*?iP_ejlt}wpV=ez(>F+K0{%1SRu?9u);ap2M(TEx4p;nZKS)3=4{6wSxkwS}y zOQa|f8DT}8wgqa`Q#;k&amFKig2fXhduH<8$RtE2TRcS~A1C^hBQn+bv_N$UPm}2M z#4Htv&ailHW+@Y`(<{B(^s(+d@R1w|LQiju*CiM7hf1 z#S&VQm})6HylEo+D6sEx7o_#9?+vuJ0pwlg|>hj zp{>w1Xgjn6+6nEl+@p0xMKKsPT>H;DI7?5I!0RHWgl!STd<1t$<65}ZhUKyVWA5y8pC*9E5#e;UJZD=sJgOx#n6r%8dP6W{D<(aSO9$Jb450z+|WI zE_Hu+qfAgw+#tA#xTSR3Onk547UK4Tjl>TKZY6FlxQ)22;CA8;f;)%@%g%P<_z3PI z?i@?N4`Mg*8QIz%94g7!OPnf0yh7Yna366u!6xD#3hu}05`2~TT^Z~EPNfWX5QkFm z5OKcXYs7_N;lsp5g0JHt%V=*9zbQpILj0DXi++;uHt|vM9wR<3c!GG040e+Elz2}Q zua|CTh|k8o1Na>AdC9ndU#MifgMEniJsf7ii#W`J9}-^@{0L{6oTvAwtX?6R_K(D6 zf>((r2>uC2MEYDKo|Nn~?op{7Z;0zN;?D(d691Ll+j~?S(@EQ>dKm+par=~i$Ur;( z4l>Brw?*t7WUw9OAvR}ABqtHcMP#VW!z7ZIh~y(u;9T3MriBab94@qZxQ%aI9z`~f zuz94-qmTmsvo?>md5nzSQ(+7xz^dlpC|9(6IAkcAoRl4Rzd{WVLTI-RfKF zF{@J@;Wa^5a-#-asRj)V9`6YbueJx^ zg+>>lT2r;AHJa8qN55A7v>IDK$oM-&9>rcJ*4nXVUA(D{H|yig2B*s%^|0GvkV;kV Kvai*bKl>M;=cIT5 delta 4648 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 pI4f?{2W$oUn + /// 成品仓即时库存 + /// + [Route("api/[controller]")] + [ApiController] + public class ProductInventoryController : ControllerBase + { + private readonly ILoginService _loginService; + private readonly IBasicsRepositories _basicsRepositories; + private readonly IProductInventoryRepositories _repositories; + private readonly QiniuOptions _option; + private readonly IExportExcelService _exportExcelService; + public ProductInventoryController(ILoginService loginService, IBasicsRepositories basicsRepositories, + IProductInventoryRepositories repositories, IOptions option, IExportExcelService exportExcelServic) { + _loginService = loginService; + _basicsRepositories = basicsRepositories; + _repositories = repositories; + _option = option?.Value; + _exportExcelService = exportExcelServic; + } + + /// + /// 获取仓库 + /// + /// 仓库模糊匹配 不必填 + /// + [HttpGet] + [Route("GetUcStock")] + public async Task> GetUcStock([FromQuery] string name) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); + var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync(name, loginInfo.UserInfo.CompanyId); + return ResultList.ReSuccess(r); + } + + /// + /// 列表 + /// + /// + /// + [HttpPost] + [Route("GetList")] + public async Task> GetPagedList([FromBody] ProductInventoryQueryRequest dto) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return ResultPagedNumber2List.ReFailure(ResultCodes.Token_Invalid_Error); + + var (list, count, details) = await _repositories.GetListAsync(dto); + var result = ResultPagedNumber2List.ReSuccess(list,count,details); + return result; + } + /// + /// 导出 + /// + /// + /// + [HttpPost] + [Route("Export")] + public Task> Export([FromBody] OutStockQueryRequest dto) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null) + return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error)); + string fileName = FileDownLoadOrderType.ProductInventory.GetRemark() + loginInfo.UserInfo.CompanyId + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; + string res = _option.Url + fileName; + + Task.Run(async () => + { + await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.StaffId, loginInfo.UserInfo.CompanyId, FileDownLoadOrderType.OutStock); + }); + + return Task.FromResult(Result.ReSuccess(res)); + } + } +} diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 3dc39c57..4a712d9a 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -560,6 +560,32 @@ + + + 成品仓即时库存 + + + + + 获取仓库 + + 仓库模糊匹配 不必填 + + + + + 列表 + + + + + + + 导出 + + + + 获取序列号信息 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index f000040e..c53adb3b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -5534,6 +5534,86 @@ 每页条数 不传默认每页10 条 + + + 成品即时库存列表 + + + + + 物料编码 + + + + + 仓库编码 + + + + + 客户/店铺 + + + + + 成品即时库存 + + + + + 单据Id + + + + + 单据类型 + + + + + 物料编码 + + + + + 物料规格型号 + + + + + 物料名称 + + + + + 仓库 + + + + + 组织 + + + + + 客户/店铺 + + + + + 批号 + + + + + 可用量 + + + + + 库存量 + + 客户编码 @@ -5824,6 +5904,26 @@ 仓库名称 + + + 根据总公司查仓库 + + + + + 领星仓库编码 + + + + + 聚水潭仓库编码 + + + + + 用途 + + 仓库响应 @@ -6817,6 +6917,78 @@ + + + 实体分页集合结果 + + + + + 实体分页集合结果 + + 实体集合 + 总条数 + + + + 实体分页集合结果 + + + + + + + + Total count of Items. + + + + + 总数量 + + + + + 创建成功的返回消息 + + 实体集合 + 总条数 + + + + + 创建成功的返回消息 + + + + + + 创建返回信息(返回处理失败) + + 结果消息 + 结果状态 + + + + + 创建返回信息(返回处理失败) + + 结果消息 + + + + + 创建返回信息(返回处理失败) + + 结果 + + + + + 转换为 task + + + 分页列表结果对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 18545ba5..43b9bb7b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2075,6 +2075,56 @@ 已出库数量 + + + 成品仓即时库存 + + + + + 主键 订单编号 + + + + + 物料编码 + + + + + 单据类型 + + + + + 组织编码 + + + + + 仓库 + + + + + 客户/店铺 + + + + + 批号 + + + + + 可用量 + + + + + 库存量 + + 短信和邮箱发送日志表 @@ -2676,6 +2726,12 @@ + + + 获取仓库总公司 + + + 获取事务 用来处理即时库存 @@ -3364,6 +3420,34 @@ 删除实体集合 + + + 成品仓即时库存 + + + + + 添加 + + + + + + + + 删除 + + + + + + + 列表-分页 + + + + + 批量添加 @@ -6918,6 +7002,11 @@ 出库信息 + + + 成品即时库存 + + 入库状态 @@ -7163,6 +7252,26 @@ 组装拆卸出库 + + + 成品即时库存类型 + + + + + 金蝶 + + + + + 领星 + + + + + 聚水潭 + + 错误提示信息 @@ -7713,6 +7822,11 @@ 获取仓位详情:根据仓位Codes集合和公司ID + + + 获取仓库::根据总公司标记获取仓库 + + 同步金蝶状态 diff --git a/src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryRequest.cs b/src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryRequest.cs new file mode 100644 index 00000000..51a4edcd --- /dev/null +++ b/src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.ProductInventory +{ + /// + /// 成品即时库存列表 + /// + public class ProductInventoryQueryRequest : PaginationBaseRequestDto + { + /// + /// 物料编码 + /// + public string MaterialNumber { get; set; } + /// + /// 仓库编码 + /// + public string StockCode { get; set; } + /// + /// 客户/店铺 + /// + public string Customer { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryResponse.cs b/src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryResponse.cs new file mode 100644 index 00000000..ae55748d --- /dev/null +++ b/src/WMS.Web.Core/Dto/ProductInventory/ProductInventoryQueryResponse.cs @@ -0,0 +1,69 @@ +using Npoi.Mapper.Attributes; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.ProductInventory +{ + /// + /// 成品即时库存 + /// + public class ProductInventoryQueryResponse + { + /// + /// 单据Id + /// + [Ignore] + public int Id { get; set; } + /// + /// 单据类型 + /// + [Ignore] + public string Type { get; set; } + /// + /// 物料编码 + /// + [Column("物料编码")] + public string MaterialNumber { get; set; } + /// + /// 物料规格型号 + /// + [Column("规格型号")] + public string Specifications { get; set; } + /// + /// 物料名称 + /// + [Column("物料名称")] + public string MaterialName { get; set; } + /// + /// 仓库 + /// + [Column("仓库")] + public string Stock { get; set; } + /// + /// 组织 + /// + [Column("组织")] + public string Org { get; set; } + /// + /// 客户/店铺 + /// + [Column("客户/店铺")] + public string Customer { get; set; } + /// + /// 批号 + /// + [Column("批号")] + public string Batch { get; set; } + /// + /// 可用量 + /// + [Column("可用量")] + public decimal Qty { get; set; } = 0; + /// + /// 库存量 + /// + [Column("库存量")] + public decimal BeforeQty { get; set; } = 0; + } +} diff --git a/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs b/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs new file mode 100644 index 00000000..b36d5e5a --- /dev/null +++ b/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace WMS.Web.Core.Dto.SingleData +{ + /// + /// 根据总公司查仓库 + /// + public class UcStockHeadOfficeResponse: UcStockResponse + { + /// + /// 领星仓库编码 + /// + public string WarehouseCodeOfLingxing { get; set; } + /// + /// 聚水潭仓库编码 + /// + public string WarehouseCodeOfJushuitan { get; set; } + /// + /// 用途 + /// + public int? WarehouseUseTo { get; set; } + } +} diff --git a/src/WMS.Web.Core/Internal/Results/ResultPagedNumber2List.cs b/src/WMS.Web.Core/Internal/Results/ResultPagedNumber2List.cs new file mode 100644 index 00000000..589557d5 --- /dev/null +++ b/src/WMS.Web.Core/Internal/Results/ResultPagedNumber2List.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace WMS.Web.Core.Internal.Results +{ + public class ResultPagedNumber2List : ResultList + { + /// + /// 实体分页集合结果 + /// + public ResultPagedNumber2List() + { + } + + /// + /// 实体分页集合结果 + /// + /// 实体集合 + /// 总条数 + public ResultPagedNumber2List(IList data, int totalCount, List details) : base(data) + { + TotalCount = totalCount; + Details = details; + } + + /// + /// 实体分页集合结果 + /// + /// + /// + /// + public ResultPagedNumber2List(IList data, int totalCount, ValueTuple result) : base(data, result) + { + TotalCount = totalCount; + } + + /// + /// Total count of Items. + /// + public int TotalCount { get; set; } + /// + /// 总数量 + /// + public List Details { get; set; } + + /// + /// 创建成功的返回消息 + /// + /// 实体集合 + /// 总条数 + /// + public static ResultPagedNumber2List ReSuccess(IList data, int totalCount, List details) + { + return new ResultPagedNumber2List(data, totalCount, details); + } + + /// + /// 创建成功的返回消息 + /// + /// + public new static ResultPagedNumber2List ReSuccess() + { + return new ResultPagedNumber2List(new List(), 0, new List()); + } + + /// + /// 创建返回信息(返回处理失败) + /// + /// 结果消息 + /// 结果状态 + /// + public new static ResultPagedNumber2List ReFailure(string message, int status) + { + var result = new ResultPagedNumber2List(); + result.To(message, status); + return result; + } + + /// + /// 创建返回信息(返回处理失败) + /// + /// 结果消息 + /// + public new static ResultPagedNumber2List ReFailure(ValueTuple result) + { + var res = new ResultPagedNumber2List(); + res.To(result); + return res; + } + + /// + /// 创建返回信息(返回处理失败) + /// + /// 结果 + /// + public new static ResultPagedNumber2List ReFailure(Result result) + { + var re = new ResultPagedNumber2List(); + re.To(result); + return re; + } + + /// + /// 转换为 task + /// + /// + public new Task> AsTask() + { + return Task.FromResult(this); + } + } +} diff --git a/src/WMS.Web.Domain/Entitys/ProductInventory.cs b/src/WMS.Web.Domain/Entitys/ProductInventory.cs new file mode 100644 index 00000000..c5e98db4 --- /dev/null +++ b/src/WMS.Web.Domain/Entitys/ProductInventory.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; +using WMS.Web.Core; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Entitys +{ + /// + /// 成品仓即时库存 + /// + [Serializable] + [Table("t_wms_product_inventory")] + public class ProductInventory : EntityBase + { + public ProductInventory() { } + /// + /// 主键 订单编号 + /// + [Column("Id")] + public override int Id { get; set; } + /// + /// 物料编码 + /// + [Column("MaterialNumber")] + public string MaterialNumber { get; set; } + /// + /// 单据类型 + /// + [Column("Type")] + public ProductInventoryType Type { get; set; } = ProductInventoryType.JinDie; + /// + /// 组织编码 + /// + [Column("OrgCode")] + public string OrgCode { get; set; } + /// + /// 仓库 + /// + [Column("StockCode")] + public string StockCode { get; set; } + /// + /// 客户/店铺 + /// + [Column("Customer")] + public string Customer { get; set; } + /// + /// 批号 + /// + [Column("Batch")] + public string Batch { get; set; } + /// + /// 可用量 + /// + [Column("Qty")] + public decimal Qty { get; set; } = 0; + /// + /// 库存量 + /// + [Column("BeforeQty")] + public decimal BeforeQty { get; set; } = 0; + } +} diff --git a/src/WMS.Web.Domain/Infrastructure/IBasicsRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IBasicsRepositories.cs index 070d45f1..d4ee6000 100644 --- a/src/WMS.Web.Domain/Infrastructure/IBasicsRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IBasicsRepositories.cs @@ -71,6 +71,11 @@ namespace WMS.Web.Domain.Infrastructure /// /// Task> GetUcStockAsync(string systemCode,string name, int companyId); + /// + /// 获取仓库总公司 + /// + /// + Task> GetUcStockByHeadOfficeAsync(string name, int companyId); /// /// 获取事务 用来处理即时库存 diff --git a/src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs new file mode 100644 index 00000000..99021660 --- /dev/null +++ b/src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs @@ -0,0 +1,40 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.Inventory; +using WMS.Web.Core.Dto.ProductInventory; +using WMS.Web.Domain.Entitys; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Infrastructure +{ + /// + /// 成品仓即时库存 + /// + public interface IProductInventoryRepositories + { + /// + /// 添加 + /// + /// + /// + /// + Task AddRange(List entitys, bool isTransaction = true); + /// + /// 删除 + /// + /// + /// + Task Delete(ProductInventoryType type, bool isTransaction = true); + /// + /// 列表-分页 + /// + /// + /// + /// + Task<(List list, int total, List details)> GetListAsync(ProductInventoryQueryRequest dto, int companyId = 0); + } +} diff --git a/src/WMS.Web.Domain/Values/FileDownLoadOrderType.cs b/src/WMS.Web.Domain/Values/FileDownLoadOrderType.cs index 33b56314..cfb78d15 100644 --- a/src/WMS.Web.Domain/Values/FileDownLoadOrderType.cs +++ b/src/WMS.Web.Domain/Values/FileDownLoadOrderType.cs @@ -70,5 +70,11 @@ namespace WMS.Web.Domain.Values /// [EnumRemark("出库信息")] OutStockTaskInfo = 12, + /// + /// 成品即时库存 + /// + [EnumRemark("成品即时库存")] + ProductInventory = 13, + } } diff --git a/src/WMS.Web.Domain/Values/ProductInventoryType.cs b/src/WMS.Web.Domain/Values/ProductInventoryType.cs new file mode 100644 index 00000000..6a355305 --- /dev/null +++ b/src/WMS.Web.Domain/Values/ProductInventoryType.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core; + +namespace WMS.Web.Domain.Values +{ + /// + /// 成品即时库存类型 + /// + public enum ProductInventoryType + { + /// + /// 金蝶 + /// + [EnumRemark("金蝶")] + JinDie = 0, + /// + /// 领星 + /// + [EnumRemark("领星")] + LingXing = 1, + /// + /// 聚水潭 + /// + [EnumRemark("聚水潭")] + JushuiTan = 2, + } +} diff --git a/src/WMS.Web.Domain/Values/Single/SysConfigAction.cs b/src/WMS.Web.Domain/Values/Single/SysConfigAction.cs index c68861fd..04a0d128 100644 --- a/src/WMS.Web.Domain/Values/Single/SysConfigAction.cs +++ b/src/WMS.Web.Domain/Values/Single/SysConfigAction.cs @@ -211,5 +211,9 @@ namespace WMS.Web.Domain.Values.Single /// 获取仓位详情:根据仓位Codes集合和公司ID /// GetWmsSubWarehouseByCodesAndCompany = 48, + /// + /// 获取仓库::根据总公司标记获取仓库 + /// + GetWmsWarehouseByHeadOfficeAndNameAndCompany = 49, } } diff --git a/src/WMS.Web.Repositories/BasicsRepositories.cs b/src/WMS.Web.Repositories/BasicsRepositories.cs index 80212a37..6e645372 100644 --- a/src/WMS.Web.Repositories/BasicsRepositories.cs +++ b/src/WMS.Web.Repositories/BasicsRepositories.cs @@ -168,7 +168,20 @@ namespace WMS.Web.Repositories } return true; } - - + /// + /// 根据总公司获取仓位 + /// + /// + /// + /// + public async Task> GetUcStockByHeadOfficeAsync(string name, int companyId) + { + var result = await _singleDataService.GetSysConfigData, SystemCodeRequest> + (new SystemCodeRequest("", name, companyId), + SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany); + if (!result.Success) + return null; + return result.Data.ToList(); + } } } diff --git a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs index bfdfd3f1..5ffd3a6c 100644 --- a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs +++ b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs @@ -414,8 +414,16 @@ namespace WMS.Web.Repositories.Configuration .SetValueComparer(valueComparer); ; }); + //成品即时库存 + builder.Entity(ent => + { + ent.ToTable("t_wms_product_inventory"); + ent.HasKey(x => x.Id); + }); + base.OnModelCreating(builder); } + public DbSet ProductInventory { get; set; } public DbSet Materials { get; set; } public DbSet BoxMarkBillNo { get; set; } public DbSet BoxMark { get; set; } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs index 00475c06..f9cfa174 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs @@ -81,7 +81,7 @@ namespace Microsoft.Extensions.DependencyInjection services.AddTransient(); services.AddTransient(); - + services.AddTransient(); } } } diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs new file mode 100644 index 00000000..f97e08ec --- /dev/null +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -0,0 +1,177 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.Erp.Customer; +using WMS.Web.Core.Dto.Erp.Org; +using WMS.Web.Core.Dto.Erp; +using WMS.Web.Core.Dto.ProductInventory; +using WMS.Web.Domain.Entitys; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Values; +using WMS.Web.Repositories.Configuration; +using WMS.Web.Core.Dto.OutStockTask; +using WMS.Web.Domain.Values.Single; +using WMS.Web.Core; +using NPOI.SS.Formula.Functions; + +namespace WMS.Web.Repositories +{ + /// + /// 成品仓即时库存 + /// + public class ProductInventoryRepositories : IAllFielRepositories, IProductInventoryRepositories + { + private readonly IMapper _mapper; + private readonly IServiceProvider _serviceProvider; + private readonly ILoginRepositories _loginRepositories; + private readonly IBasicsRepositories _basicsRepositories; + private readonly RepositoryDbContext _context; + private readonly IErpService _erpService; + private readonly ISingleDataService _singleDataService; + private readonly IErpBasicDataExtendService _erpBasicDataExtendService; + + public ProductInventoryRepositories(RepositoryDbContext context, + IMapper mapper, + IErpService erpService, + IBasicsRepositories basicsRepositories, + ILoginRepositories loginRepositories, + IServiceProvider serviceProvider, + ISingleDataService singleDataService, + IErpBasicDataExtendService erpBasicDataExtendService) + { + _erpService = erpService; + _context = context; + _mapper = mapper; + _basicsRepositories = basicsRepositories; + _serviceProvider = serviceProvider; + _loginRepositories = loginRepositories; + _singleDataService = singleDataService; + _erpBasicDataExtendService = erpBasicDataExtendService; + } + + public async Task AddRange(List entitys, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + if (entitys != null && entitys.Count != 0) + { + await _context.ProductInventory.AddRangeAsync(entitys); + await _context.SaveChangesAsync(); + } + if (_transaction != null) + _transaction.Commit(); + return true; + } + catch + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + } + + public async Task Delete(ProductInventoryType type, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + var list = await _context.ProductInventory.Where(w => w.Type == type).ToListAsync(); + _context.RemoveRange(list); + + if (_transaction != null) + _transaction.Commit(); + return true; + } + catch + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + } + + public async Task<(List list, int total, List details)> GetListAsync(ProductInventoryQueryRequest dto, int companyId = 0) + { + if (companyId == 0) + companyId = _loginRepositories.CompanyId; + #region erp基础资料 + List mNumber = new List(); + var materials_result = await _erpService.BillQueryForMaterial(); + List materials = new List(); + if (materials_result.IsSuccess) + materials = materials_result.Data.ToList(); + //物料集合;模糊查询后的物料集合 + if (!string.IsNullOrEmpty(dto.MaterialNumber)) + { + if (materials != null) + mNumber = materials.Where(w => w.MaterialNumber.Contains(dto.MaterialNumber) + || w.MaterialName.Contains(dto.MaterialNumber) + || w.Specifications.Contains(dto.MaterialNumber) + ).Select(s => s.MaterialNumber).ToList(); + } + + //取组织 + var org_result = await _erpService.BillQueryForOrg(); + List orgs = new List(); + if (org_result.IsSuccess) + orgs = org_result.Data.ToList(); + + + #endregion + + var query = _context.ProductInventory + .OrderByDescending(o => o.Id) + .Where(adv => 1 == 1); + + if (!string.IsNullOrEmpty(dto.MaterialNumber)) + query = query.Where(w => mNumber.Contains(w.MaterialNumber)); + if (!string.IsNullOrEmpty(dto.Customer)) + query = query.Where(w => dto.Customer.Contains(w.MaterialNumber)); + if (!string.IsNullOrEmpty(dto.StockCode)) + query = query.Where(w => dto.StockCode.Contains(w.StockCode)); + + //组装 + int total = await query.CountAsync(); + decimal qty = await query.SumAsync(s => s.Qty); + decimal beforeQty = await query.SumAsync(s => s.BeforeQty); + List details = new List(); + details.Add(qty); + details.Add(beforeQty); + var list = await query.Select(s => new ProductInventoryQueryResponse() + { + #region dto组装 + Id = s.Id, + Type = s.Type.GetRemark(), + Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, companyId, s.StockCode + s.OrgCode), + Org = _erpBasicDataExtendService.GetOrgName(orgs, s.OrgCode), + MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber), + MaterialNumber = s.MaterialNumber, + Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.MaterialNumber), + Batch = s.Batch, + Customer = s.Customer, + Qty = s.Qty, + BeforeQty = s.BeforeQty + #endregion + + }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); + return (list, total, details); + } + + public async Task<(object obj, int total)> GetListField(ProductInventoryQueryRequest dto, int companyId) + { + var (list, count, qty) = await GetListAsync(dto, companyId); + return (list, count); + } + } +} From 04c758d6d74dd6b74dc645eb5da77cb866453014 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 16 Oct 2024 11:41:53 +0800 Subject: [PATCH 02/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../Controllers/ProductInventoryController.cs | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 5f18e85ff270641873548dec40f0b21d92454059..03701273681fbae1b2ecc8f693ec54c95a8181dc 100644 GIT binary patch delta 41908 zcmeHQ2bdH^+TN+^o*qD8cVSub5=D}14g$v@l5>_MZX{h%t+5JNG(W9%SbOwEyznL%*!vx&d5v7%+F5A$xcg6&dx3<$V<&D zC`wCB$;!>j%qq$*$SN#ME6B*pEnQiMrDt!rpDh}ke%|b9qX*2KRxl@jcF(C76;7Q! zZRVvX5d-HG&b)L`;fy(jvu2;2KPx8V$GldrTu^u8gNu&%TDBHugC|TKH@Wb<+}XLK zhvpBSJuQDykHXx7{zXL-@(TwQ&YC`L>a46!V-xw%Ez$wkRIskzCiMVUESsVRA>sX1BL%c7i&%-sCkqN1Gq?5w=P zyo|K8^z{7n!o0i~mYE!r<1QTKOS`&FUtd|9zHBFpON!iG_eg(sq+4=wT6RiyR$5ki za!PV$YIc5VdTMfhN?}%ZR$*>xc1~e#PIhK;c42m2R$6XRdUjDkUV1L#D$L2q%P7c3 zXBk;BbzS<*SEDR#AgdYg9?oTzVk0{%>ypoG%dJ|(;!dv19>?A~qjtk#xsx%{Cmn?{ zdp7Iq>z0w9mw^s*GxPHEvvPCuvT^uRQ*%?Z((+Ra3(~WS(hIWFGn4a@vr_ZZvkJ1Z zQ*-lEG71V(3X77H^9u@MSV~4rD|f>yte(5~NoJKjK8J1STeD@CX;Wv-QjU}BEJjij{$entE^VW1Hca=J%scy zQXTj_f_wwgpO7{pJ&Gj!A47T^sm!gkmDMZW1o$-4Gf4L%ZAN+)={cn5kzPQ05s9J6 zEy!O&;=nH>*JU5dub?dQSH1ebA{Xt6HiZ3FulySF>L`owwgqB}WlY;qC_@rXJCHB9l;1?Ej0WHw^UwU=3iI>B_HC5KzQ2Pc`uH1?XtzO3YZb}6D2Ty&4=H@W z-bYzDis1h2#%*Oa`u(#3i;O#R0IMMmaSX*Vy%Qd zFG>E$J-mKZY5J;xkI4BzshP)={F7KN3lm3cY6BhAi0k^bgG2@S5v*D=25qjv@4 zKJ=E}lU+V~Us9zB+G@9tK9GKIYoonB+9QqH6l$aWKH4X#c28pb4w&E$`sje<=fOKu zj^BqqIwU9+qQD|zl>vNYd_VS~Ai{gi_WKl9NM zN%b&P$VW#dHN#M!`-mh}vI#p|%9m$~l$FC`C}-Y;`y6V&0rgXOt$5cfxp#G|ps{0ZQ)MD)*!B|}~dNAq^N{>Q!=5Cmw&3iHGDb07z(B1W6 z)LT-MU(!@RMtvok1H8o;Q(q@FZZgBT5z)ILz7lg7cd$lth{Lrj7?Cg zhq0!I3mJ`-z71Z{J>)UUmDG+|nkrzFFR7BfdN_(06-uh%Y;853(KtzMhn2cEO=L7d zP~pP?LPasjL@}AsBWpt^elK1NoxQx*}Nli3X3mDCp zR4FJm0t*=x3o5)z5UR@()8*xiN~Gr=)7X`au8>ryrH*0|qpKv<_BBmi!{};Bbv~d2 zyOz;nNzF4>OBpSZ)CyRsz?L&wCaCbhK&Zf0n7~#tS|L66z_VD+@l}jULFq#Sj7?C= zceU}oj?wDKEy6nOM%PE0fly|yF}s0LH8-qZm$@aa^^~}Y(T$=F_qNu0WNv1( zR#LmSY3f!+w@9k=5>2gVv`$iOwrlEkMz={Sct{WFos8~~)LdirM@Dx^>NZenNbg~E zx1hp@6olH5d(DpA$LL<^dDJxa0HgZ_wWh5O;vq&4N~4ZDH1!Chhb1-eLmk(j7;TW$ z5@Yo!qm7bU2P+lV6J~36>K>nD^n`3H?rcr{h0#-z>SwGr zG5V{deDk!`GmM^=)Xm1~Sw@>B^~gs$`sW!vC#g@2)r*W?kW}33dQ@Lxv_(+i(SuOY zzigs^h0)8>b1Xd7=g3w@uS#lqJ56n4^qQm|G*&wpZI{&Mk9A7VEk_?Xd0 zlDh9r9pNX8{w}GVpwz_rl+j^9g^vIT)&3FF{%4GiNYA9VbYme#M~Y5L8-oNZvF}2WDDQ$5J4z2 z$Cw2;IkJoT@8~WnbE*{91u!;2Dc>r__Y6)|BD(;g%&Ho*YMiRdE|N;PcZrYXR6VQ< zU~Ga?zH!Dko>N?87a){b4P#c5Q;kS75XvmUnAO6VB#3_9MxQb7-<#T;5+hwfDAzj1 zwJxVR(sR1;tk0=lq$ddF*}!-<@SgFs^R-9T2O3eU)v3VIlYZGA`jzWbYurO2^ zKwD#YHb)_1PJxgcwKHbP4o6AM+YayPd7sKDMN&tv&}Vl#r?kk{K&aL-Olz5(GNkAF zkUmMXIb}&|mudeTPC1hL%vg2c)Lv4p-q%t5fm26G4K!4cQzt>Kxk?+I%c-+8T4#*T zc3t%h(KEUE8})i6#&B^6t)n?Ik^a7p#~K#%=MP9p>resut$#(tC; z`_Y_6Nza?%>D~Hs8UsqtDqw7aQodu2?}ePkO5ac5t3ELEIOR$zZnvfiIOR*~nX5Hb z#HmnHV~y2#PU9ps;|sl06FE(g)Pu%qGN(zBdKy;hLOqq!6hVdWCkPemG!yG|PSd1k z^)Ge%GdaxwwZ*-l1OB6*WlU#tnibh12-V^oV|EdzIl|pL`GBzrN*P|vSNT@aB|J!% zBF#mql;-jC%IPvr^HEw8s@zpLEZ{ObyIAE5RaT<1%T;!T^uCgJqpLVALSe1DelPEo zPB-%IbQ7nw$ZqCz3u;!;t-MD${*==?0oDPm2QMG2_AIC8-OY=6i`qMUz~Y(b>jH>p znr{m5X4%xQSZAm9ERKR0ggF9;-Mme-QL}9OcdV)}<5jhjA$+E7Mcr$hw((wKw<)Y< zJ8E`t+No>YxF6WK;(Zma`(bc^(?QQ5tmY7EKIHV#$u%FN=I@+7Il1OAYCh$31aYpU z&t$Z8C-04z?(hytIo-qEBR{a^Ew)PDixn2zBg(I<^7Xg#cEukU@BNZJYRZQq${$CR z4@Z9Qo54&DaRlB98s6^&>8fFs9d=41MfjO^^1uK#at2cHKH$hh|^a*WYaPJ zb*)ehv45&5aZGM;=lXcZVxJ{voj4-Q!rg*JmZgqJxr~==OVs&M=U5c*>MB)uRYpw} zi_Y+B-c@@ke5#_Rnnl%5u8BoWoJH|gFV$6zisovfD#4;!o>N#&B5G<|ROjTHx~QpV zxler0>J6&zRX3<;vLULIEZXHAdhfW12zO%;_i*nVYh;}#&#}f91}fy}*>H<{fbkZ3 zoN&zjmY5rAbi~Z9EX&@Apj=g!y>UP}Hlkcpmc1QAePTqpZbbPdF&o;`7BhVsN&{~P z(ZFswUCeX~1y;qZRMR5tlrKKTDSsU`v2dn0!T2;4peaBz0h$5mi$JK7xHdGmI)|!Y zww-BF3lE-Uh2q5^iEm%No8+UGRu}K8^=&L_EvnspmcB(f z+oHCTS}wk@X=hqWwy2%tx81FuSEpK(64p4dI0z~ONHf0a77FNQjbFQFT9gsy3M^bz z2Jjz$f0S5|WqQxHC@ZWlV9}S#0CJ4sITi{Pg9R)MRR*xtr$_atzLqNZ`M;KGZ=&pA zQF}!Bw!7zE{aO46i#keblB21hMV%zo_C9?#ajr$31r`1&3qo$x#k7B(g@R~*K0MXk zL^q4Ng3=$8z+zxj2GHI3_OMV8zR3X{NH2?eN~+p$P4%&;x1<&rt9};sl~nM4Z8gB6 z{*u~itOi*$P*Tf{)ewsYOKPWSewal=CDpl-ZtHxDhD$2xd`*qCXoRFz7^~41jgr*B z2ej1%7LAeA2gd3`i^fW7ow3TZC|6RgD{IFBi}EFP#8?$sR4A$B5!!0JMdKv3-Z)OQ zXo92`7^}$^O_J1S#%iiXQzZ4sgSxHh7EO~>hbo$yY0(TxeQ&I0TQo~jokwb`i!7QW zsSU>Q5{oXD)CyxY*P=@$^@Fjx%%XXc+We4iYk@`cCDr!~O)a#jSW?v=*3{(|l}Ku> zvAWWtDSS_;XDoL#$#S@CJHk0fci>?-Y_&f%o=J8@i>5pjYI*V3I>bS95 zW6|}J+AvyM-C&U`sb1AIb(2LmN@@lub^Cm?MQa5WJ|G}eV7HjSZnfwZ>G`y2Y`sP6 zBvrCOKj*mJqT9k6b2n_z|MlK!(H+uwCydqS#~&@a3)B{OOm$wrqx`S=9*gb{^A|w~ zLIrcL3FbbF?iHTio%g+#JMd4uhHBygi|!Ar0~U>_4B$c2$U_zi6+71~l4;^mi#CSU0b>)C+~_gW$m13YVNrD6s7LJ27L|z_H+Q4H zls;+E6Jf0aV-u8W^(oWpUo3h``aTR_HQJjj`m3b+jn&jM7CkMg?~K*67HyW)&Bp3^ zi=LCzBXQdCMT=gL)F;O3C5yI5D(*sU^@>F=OX`_NHMP~ES0y#pSZ%ZDHAz)_Ok3@+ zXuG5yG*+)$v{O=>NT|0-z<7ZQaera?^*P&q^9R;t6dho zFR7%*HMQHK45sN-?K9FKz*9f&joq09~$vkxsg z1T*|Ynupt`j|~5@MIT9iZB2cr^@&A)m(`@ z=}tlx9hFq41jIwe`*Vv(@(cc~@5#Qfs9aFqDG7{CP--7PFt=tA#K}{yKp)V5SoDpgN^0qA-*Jn+6;$}q1EE6x&NTMDMc+x!m8P*6 zn|_c~=@YtrW|PkrUG6qkmQ7qzd!FD4b!=PT0{U&T1@HCi=02%U`hZQ2^eB0fC;T(T z&RBV^{0YTQCDU7Fn<}AAeQ1Eips5U?iZMLHMnUYs_9yjDRkNw8r0N%GD%Pgzl4|gj zrs8dilhj0GRnw*#k}3tIK51&%lpv_^(FUPLJJCc@+onY6xyN|cwW&^|CkW+P&v@3i zsh;#~H%?zM8`{(Wl-_q>Y=Tn0NyfL4O-a&sK73WYO>Al$*((U;+0=M8v#F`{-1Zmk zd8SRxBRxSV&!gs42p2jf#&Tu!sGi95 zbfSK$t!eRWo7&12_m0=cGTEkflG^uI{i&X6Q%YDTZrmn4UDIt!lg25VctX7l({83s z8Q}G>XV~rr_^4scwka#DH4&;HRLK8C+NHi2(b6vO8UvY^@KqT=j_Lj!8-<9O210ew z-k5c;slABOy{5jt;{CyKWD(Fg8Ic!xMCDX+NKk zEg`2vtB@R_g3*#BJRrl!vsKc;f)Yj&fbO?|^g5?G9+$^d?oa=65T z{$~FgLWLBzf52k@R0c4>7!I^isF=LK!cb)ZN#+1I3X{|&wjX2~7;Mv^um*rd11bY( zY#M0ts}SG~F@X=YX-HV$z#?#!0Stp-mJ;B#VJKCM5wNgS8NhJU=31d4RaT5zd4gGj?h$h%HUfd73w`Ac7dYU;T z|AuBUpgv1xLcA+Ru189;jzP*mjTeT5YjIiB#3*)J$^ zoN8w2G@GV|%~D`7OH~GN+Gn`1U44 zfDC}=h4fJhBNN;~AMyAmTLmFr9^WQ_cx60NFX?{0m^UaZ{)iuD?yOIEyrblkK6guy zH*n*Z@pyOXS6DA0t~2k^#J16jjnEtc#1}jVM7!c0>_Y+^^0~{G@r#=@71d2q-CTg? z07pf&cpJKfU|QI2@^W6&A;FT*ZFep|({1`GkB==EjCd9LO98(0xfh?yJI8hxPU7it zPXT(`Zrm}}!09aty=}M6F_!K06@|XG+qw(Sc5gby;+ymrjCevgKmhRsFo^*q;Yq_F z!3?t9sYkGn@4~qC5W$FNWy1szkHUrvARcv%5I{WJ8YRFe+l9XR={mzjTf@=T2mwX_ zj1kpiYAd(t|;W%?!a$Yp_4BP`F7d1uADRXnQvLVQz)oHcoM?- zN-#x&DYD(2U-CkC_HhI_UNGW1pC*K?Y4}{o5Fi6!qNozr>d693#&;CQ+4qnEqac*8 zQw58O9;)1vF0n(E#boSBm)c@Z8d+?prVw+^wa>-8ZEgVwW!+pmREy@>q1tqrP4i(5 zqF$(es6nWqRQ_HE)2?E6FR*1+tg?k7YgA6*V&6~_X77W(P@`a|aWK>*NF{FHUc6q` z<#v#+K)Mp?Dx^h7S0i0x2SaUxp|gXbc0pPU;#v^N!B9#tlo|}Bl|9^x5A?O8J*e4> zv=3=NEYgE?0PrBvA*2tHJ_4N`4CMqv=eX_q@Hz?f8Q7ypAtXX=`(UVpJEjkB+ljsd z^*z!LNHP9ksB@5f{va_Vj^epNvH)!)KaztKK&phQF2T@w?(_rr_K2#3ibaY;ibqxV zV5mnh)H6sm+?6o!)pUR8!|Sz6Ky@utj|fsCvXQ~is9b@z^I|Sp)ZP=B|AQ(Crq-JQVxx4-lzo5yPfGv>DLb9-Ig^lD#a*zT@E&cBIJ6NswR;X`{ z)CQ?7Qk>7dt3SV}xHoVgq`pY~koqHuWiSRH$1)fT7w+~n!1wj_G{8y%JkSpb@F4%m z65!*pG}x~cxI_Hn>RK*Du|xehA^kMmt2tlS6yvl*)kr^$@~TGbDx8O?xxi0jy_yRv zYI0GN=cjzHrl6vx5H&@98t2uFuc(=Tnu&gz7*B+uGmity}J7=x++1<<$k)NqCwr>m8iMOPm8>ot1E)I1~rTQo<6zw zTK{>c5-8&+4)qI3vUd!DM#!>vR7#S)fkypBvfdkBl;_Ga232jeK$g`=iuOxn*&98SuSB^` zIaN4ZBMrQv!o2;DG|wl!_#iaTt8u+nn&%~cTIyGDnV*(>aD_ii{ygH8@@Kc>5MJ-U zpn3j}h0CY8@XfDHVXUN7=l*L7fKPsz@s%5>CKdP3+Df|;^*{G;hT=1fz z)~KizkF@a?*8lG{FcaFZG9Ue`{j@6VqaRqD2`U4KN?4WFKPq7r|LR7U&D8JeMVHM~ zcUR(K@s@t^A-Zhl5u^D3eJq<9m9VOhho565&8UR+*RZlmb#00@C=h-5q(V&#lvmPj;7g;%(i} zm+*a3RO(lvQWtA-=KPnGq}?Kwq+(qK2qAMIV_fM65RYh&36ZJzNu6&55Wk<(RoHZe zjVC!hNol(9U(%JvM(RpWLp-|5Sta6I<^NCgqK>B*En9Y+HSztJ7*sEesuZBt`Go>> zrcKxR2|AIBM=o*+p?1`5H{W7~zWjCp8t;%lpkC&Av=|RtA zMh_Zl8VofHhMEUMX9h#~IjvhDSZo;#wF-t>2SaUwbPAoQ(T9fVLS5)WYq`_+@oU`U z`*^aOyr0)}`|RhVnw>%_8p;TUGJ~P4)7FRP{)hU|AXSDm@>c9x*I=ld5s5|!L~FV? z-N5TKJq>wim?SjKx9;?$pscCiE#AQxtR1J|R0oT}DLBo+LT?IAcd*);f-@Yf(iP9ISPv;AIYe znN7j@4t|nN!37R}imh1TVh2lBDYy_ldln@QUI zT!fxIcr}iJXL}90@Yux;UF+>e@e&6s-l*1=I#}sO!DS9sxKVJqgJoqSmWTA$rN-Qtgo%$4Gtvpor~qXyV1eVk}3Ko?5GFV zI#^mou{S$-BSFDi9J#y<>0r(6#S!u-wIRk zZVY^!hwpLllVpm%*TL_GDR`fQHy;$d-@&^N3O?ZA?FR)Pbnvo>f)6=(6+*#>9sF9D zf{!>@*F?b$4t_99!9O|pL9ouDVsYAS#JT3tk2?6#LS^w7PF}CI$8qj@u*|`$6w2Vw z4qm2E@CgU6Qz-Z(4!PIZQx5&b8M4`deO7m;@};1 z)#6JIz3j2CIP|Iqw_`8Cg*? z3N@nxwD;t-$p77y&5M6*X>)O>v5Lk7`XSK;0sO^H#@GN|7@*t$!QxIz`umrs#UmxJGQ$ z@2y1T<5Br|bUkSA^|hb+A@isJJt{ztt_O{ekLY^PV)17q7>}+8ji+>4OdnkjTKpqg z$tYneGZe&XPXi|N`oH{o(22#jI{Hvd3E&xK#WV#Lp{WdDy)m2`K%v4ASQx4d;C5p; zEr3FWA+Ru189;UHbu}dkiDf8>-F_%ZKc9YjJ!4p(p&%MK@*ayWNG+6%tr#8! zR}3An7&?^!L>Hv?ei1p7;VE~;I01`sQW-#&nPS-tg@~o!K*)`9jM+I11tGDnvPJ(Q zatB83!@2+#U8oG8qw)O%Lm{FI5UPu)c7JH(*nm)D6J3y64FqP>1U)8`%(R-!Xp)?g zN&8rIL28_urCarHoGfHi9675%s99BFM(}b*C2|D!z*DW(awVfHBo%6@sYQ&gl2qH* zG<6N5t0mR>fc|CRYZ)z;)I4Lgl+hANt$>w!^KCh!Wr9+ld@3Fg3al`Jtz@)9dhR*E zq6<>rA%|k_c0Kx0HNPH-sG47$I`|t^^V4B{A&IK_F(0^GfX&NLw$19eevU%KMHqy- z2s_3sz{UF0Ctj;TD6{B-)MlKb3sOfHq*f5u1OoQ8@kh#On3Zxf>n zQlD_|`Gf5^o&p*K?- z4GxIaJ_l(h2+c$p%Cpg)!6-?1f-_X@mkk^>4IGLne;iRh98q3`FxI;3_wr7~bR+Lh zH*s2v>}D=k8NRn-mElNL`OLsis>)Ai_2D2b!TP{Uk;DT*C8HW6GHR>L7Ei^ z(rlzT7@UE@(4b&wa4<9^7#bQ34GV^b2kA7F=+KG(atjrY)KYb^Q1L~G^i-1di@{%l zR0YcOGmxqxRYSTI++3u2NS7gLIlH%z@g*Pf%&cp{FF{(0v`ET|Lv=^Huf7`>KDu zuX^Z(HKC!=qT>AYqRfn}ob0UJ{JhB-MO`wp5sLE*yJQz;XJ+MP$uG*vOfN{ET%3^!>n?>^#hKaJ*(F68nfdv-lS@!(Q86mb zO3$t!GBPXV`=KGBtjj(c94h^2u-Gm9eZ$0Sy|X6gOfD`dD$dABM`QD{^3wA&x)f#< z7w4pBX6EE%WEbTW6_(^@WoH%_=455%=HwP;=4Vbu19I|n3i2~ibY7`@s%TrYbYQUv zIi(BE6pvRfEj(ZJ3H2!`=u%jam!FfJmziHsQc{qUms3zsP?A+RIj^udr??~=O`n{d zUWkU~73O6ZmE>e)WKYh{E-2|zP?DRQT_KcTp`E{Ij%ZR^d5+jNxb)q}gd2%n6RA*P z9fFTgy+VZw*CM_SVST`DK)ey*dW1~~n-R7k+<@>Kgc}iVLijDh?-1&vjNc>v1H#P+ zw;O5bi|S8mZv-ep=Ls{Sk>jA(SGhLhnVm58=-U_ai)j@F0Rf;SV8x z7(oI*g4m=(NN-14#eWI%??J4}Q)MXqqe1#H#MO{i4ShUPA;ztH0twYJW%MM1D(tTa ze?v%Y#NUyA3gI{u0OJbZWw#^2E)4C{NUKqJ20_)a6G4^R81-{Yb|ImLZ8t*V&^?Q^ zGBm@s4frmEyAf1D-!*#4ok$+ds%Vrt)qa2c*?{mv&a)b3)gTA)bBNV3%|Cgkm@PJk z{5yPEuXNW=ahV%k8~XA^dL-1VjJAi$%IGg4B+BSfU>pjUM@TKuiYP)7jITj4)LNR$hKl~6|jFIeG= z=^>=bmB31=BY>Bz^5qZ`s=EjNDH?U*R=*meR}yT2m935dUbD8ZhmcUVJzg;5@->wcM5bHA4qs2cNCr<)U0Q&0`2Cca|kZf!xen3`l&bp_R7YMWKn6O_i( znr5b~27>A{^~Pg{Y9y#3QypG4V|Tou#)=BY4p{XWGs8f)8qMtLz|OW6{Hw#>Dbd4h5issP5JC@svl!mfhyxr$e3$p(6Uo+zkWaup!7Wp`_NlA!Kv z+2LH%*QlT#idwfv1ie35P)`=kg-CxF^cK_$l<7S%4n^q-`q&Ek3hJY56T1pR%lcVa ze?k3{WgxU{fR&vhsKbC{9SE%(Xmx`G4OB9}$9bk(Lj(XBB48YXBcQ!A|MR6)a; zDtN>6{xm@&n0f^&ef~xYIvtehJunVM>2{2=?KnfwC}o@2dk|VS+RDZV8m-Fnht0+{ zGS>3r1dZjYx6C%@b%LPr$t8l&B~G-KlLSp<%Q!6c94-`8z|^cZhAI|R#MDXW8>&Rm zWTqarsxt*mVd_e#^yHr^=qylX0Dy5QO1ER0ZO7Syrm^j$w?r^ArwckqQHf&$LR-$T zmNNy-V9Twr)IB&?&@85gUtpR$ThMt-eQi}22s)ps%~o}xpgBx6ZD+=DuAqw)mDmap zx)t+mE9MKD$Clmam?|$8w1BDYdriX@3W_nc+^Q}Sw1}x{`%K3#6|`7UiB*EoRW7kr zE)}#y$<|$HYFsAhGA?UTdqZ6z=yIlpSk;w+mNT^zDt($(3R(fmoF-r#iqdtivURQ& zw2Ez;zAb_|zE;p0MJ2WtgtolOT3#*as)QM=dO_E*4daeR5$SbYYuqVOs=kX3KAEVZRY{15*n-n(}WF zbR$!P=NjsFf_}@??sv>-|AV04Gqu60ZV_}dQ%&}p(|((vTNRZ!kRWu!Znq7)L(uJP zS$&?Va;u;_nOf7yPx<}C6Ozp9%KMDFHQ@2^wy@E=aN`Kch|IdQ%W9oCO zdO*1wGGHql=BHw5j0%v{32I25IYZ(8A7g5KmRCS{saw@=XCyEjK?j%`3Y9)jaX|+amDo`b zx)o$w@sS{6%jiN=<;Q}`nA)CYs80ob!qiHuIxOfAQ`NGK>T^M#G4-ldeJSV*rY0RQ z&Hq}^S4_2AWNvFJNcskp8Es%3iqfqON&DY~q>xPN6bLPoR^~{O$ubaH=2}@;QYRNW zQ!g+M(h-1Xl@W;q>h%vUl649zTK+gm6_YChp)0CnWtAmWN~i}|)uSVTDppukBBAPe zD923L>XND@R{=s-QNvo+lvE?33Sd=*jsR*|VQq13|5Oi3BZg@Mq8W!b{AC1tVY_$B63qKl-QWJ?g*GS^z> zNy=r*TVbgOsH>!WrZPSsyY(5Cx{86^~XGj{wmYZRzZ`;O5 z8V$g+fUMOuezpP{opp zm|AXCC6XpH)#-B6(K97YQB-0_LFg*avQd&3lewxnrXR;asdpfAzslFk8T zx_*xIcV8}pOLV5B87wDMt!Lo5l4dEnzwr%O|E#s4wKQ8s>3oC>uq-698;H?^$H9~+W4 zw0?@opf$*TCMo?ar+53!h3p*rAeb*@^d{5g>3vD*{YmM6aYGK^?;2Vt2bJLueTX(5 zl<~?GSD6bJ{v&uce_%+33h@ey@idfVT+&A}?oydNTsPjXmgEod1pOlZ* zrzrK1^hwC>%?~n7AxE7U;ozyELyn_Qnd|V>_lHYaEB1W3eMQKQbEr}vOUS8=oGK1g z4RWgK0#wn}kyFE=nn&lKvU@7ddGT{YCX4hJk;yya|t?3y({x7Z}wquc!fx z8ani1(CwGXZC-}WD>AsC8aciBf@dJ+(Nfbn z?5LR%j1W*oP6tDQbmgRUbxsEZg8W)Z>AFej$GF;{$Iv%W`S}!d6vWFc2)b8R7LTm0 zuv$-(@4V14AFlQvI3!!fDymDqnbR{~33KZNhnfelg%hu-hT`GS+R#_iLe$df75viE z%0Z(1^9)#xf{p-MTVWdqiE<&Z66y$`trF_bymk&!>N78Py157G;81&}nuZP4$)S!+ z?Y63PhdMLW_-5H?BHs~ZI+UTP;Eo7b)v6%C&XpIh2cvj`$`6!3X7ASyu;%BpC=T>t*jxWQTf!GG_%ChoW>1y=)D=9qPrl&%jpSb@X+pkD?O4j6rD2e%7+T zL;cvY(;22Ar#Li#sr3~NHOQfXOl=3H%OB#<;N(CmeZn3JX9lDCC z-IiMC&^1iexXTz`>yXb>lL>}e@6dHjO|+_w4sBrS9IM*o(Dh8+ZdF?x+RW7bQ0d1` zzj5dWP-cLDaVSc6^G4gvn;g1P*(Qz#2rc`qmHp14->UNbP1TK`z#km?eL@w$I25IA zZ??9#ICOJz6(F?iRx7*Bp<9z>AhhguE4u?z>-L0tfpL(I0PeKPtqv09V*sp#Is({c zg?BkfB#i+GKIm>MyT?I7$%g7I^;a=`&>yYtPYx30^#bEilopm+;k^!(ssjDvCz;9l zXNT@fZVCu(dB3%Mz@huuayl&aOnk_p2bsFKrlB5j=wYUY{n1c=acDbJJFMz4haP2W zlT|(8(Bn*H6d1$5I`kw{J!={2?+*QqshCymaOf$fR$0|E4n56O!JmxbE{Aq9^_o>Z z>(Fkd?zF0ZIP@G-?Q0vue>(I$Q(sxtiw?cO)apW`dfB0unA&0uUv=mere3$I*ByF| zsSmB{4TttH^+>5~(1Y)s-g4+oQ06)U#-S*EM)uk>vd^Kt3BtXOzo^LkNBfRLZ>v22 zh9a4kzbjTj2CSN;BY+RA?Y|r(RMj2on%k@o z9Xg<>b=KJ>?$ALNU0fG8UjKPFo3t3&27TlZCA1t^wOmI4WmfpHgGACr34#y$#L7N( zkVuk&(6U2;?6@*I?9d^l^RG`c^W<}fK4WUepAGe;Ltikpb+VzpcIYdn9<-_oE`7t) z*H$H53c0HIN%hR7?6@QqmH5dDLbq&>odo~J`6#WM>zerzcF9GFW-SX!P4x{`-KAH&#{8r8K4r8kn#61}@bHWjYItLs7c54Q*>1xzvzt?}V-X zia*|^#)?WDdJx*OiM4F%QWLiP2A29$^aPihF}3?aS*PZ=du657Y;KEa;Zk$f4{m6R zXysB%rkXs2B3fH%8<$!$KLdQX19k%Z8}F{Rwt#jnwdDe~o@F}P!KLi0A60=q!3yID zB7j477Qs<3_7iyOB~C23?&;?Bv(4-8Qa{_gSeZ(w_UQ=VE8D)G%Fiztm=J!u^IN?v zYUp$7{8TP~18mn%acO|+y1!yOzBK=Tx&o%v9BBK~0KQb*pM_0iT5OQz2fH-Lp5iiv z)fv_iKtub>Zll0^FgPO(^^dALf^di}aj1(#`J4t;CF%&EF-pwU4%Em0)ZT~s@mQT7AxPvtAAJw-=; zzpvzIJ7LGTG#V53i0?-be87v+-0Plk%r2GgXq@L?oKK~`5j`{TsSLh3`68ZT+)T#W zF&XF5SiXpxwZM1DFUGC1PPg&4i4$BJpYVYMj6+d;!0*zWxC{T+oG|OuoM=aBl1mf$ zL@wHa6Pa?ny zoJ(e%DO2r?o#xWigsBazrnZg%X4%WfIB*6}Sm4a5ggOFHUWRMq#|>62l4rZ{yE@13 z`6eDjO?M4DL$Nc1OH;|Fmt(AkRz)1`892*@tKck`&P6lNQ-Nj1dsI1beszv=mgqf*}GI>YK8rNm8X8$drtxNd)@~MsNd@jD4>3&JE*`x$G>o;Z0r}E zENl9!PnP{p*rUo&Yu4XX;7tJ61;9^1_~8e@bNw2tIyt!i4FBL5nP`^*K zRzUqAaX@L*`tr7lQNJ*>SD?M?-_c99I^m$oR;$WM0kxJqM`h#LJRZ9P!+B0u0O1|tnJ@^ShVm4C}x1`?>sC{IbonmsHcpB6i|;98wvnCBgErBfFZ8m z_A}AB{Ve$zAUQnLIi4M*Js{pd zcoX3*guO7#i^lV#@vc$Y2jXpncM$fw{?@^=ew}!?X#B(|eF*9xLL7ly|MkJLV~=>x zD1C+W*9hOBoRgzeAsnR;fG|7d(b zl&bj|AVSss)k9>%&NZN^3Cqz@s)cAwG(I*O9~X^}kH#lNsWx)!Ak;-jL#XFp|F-Ne z>WBRYc8Nyyr~ynCMdO!5+H}iY$mlGa ztr6NFv_+`l*BCBq`E7>F*|7&gQ5p#Dp-^<;!si1g3zyOGFr6CYj401J4LPTWX=IQyDy*D?wb2>K8XcxFLDtxE zqjAU?AEpUG&cyPZNysS(Q(=%(RGw3eoXKG-336^McO{;JoHN68R*)0J2d`7*3LLpFLgw5s%?r$aUtZOG2PXvSDVz>Y1JYAD zjj`wR58@mq%AK&cvX68y(8!;~`N8laeLkmyK}Gr^PV13G8)-hLgV94emZV?I=}W?` zf*u`<6Lt(v*mS&uMHa{7+pmcNO#qHse-Vd|_Eoq8&_3Er!*p3#!)0N*Jb+h(6Wp~& zADg>&RJ9d%0Oo0Cn`7|T=7(JEez3cCTDPCi@A_BlOkJmD%2Areq#ULHryZsBuT92L zI`P-0CB_%-f5s%{oumH#M|_nr zo_@1QGEL98l)JKZME;e!E60w}UHPZl7%&GDj$Zt^HwH|3EC(MO%7vK^JZ&=f#3_$u zOv#kTvUN&L-jDKE?6F*QtRBnD!{%zaGEB?ygur<40^?AWzO2gZWp%`cochNuvmvLx ziBX$#Dq9@^^t2D+{}WEfDPQ7Xn13!`;*`%YrF@3J!)G|<$!i@7yQX$MRiFAl!>*?( zPu^e^Sjn$ychoxFR@l3dm0?b)tVLIAMRM|!?CtuY1OYqTF5{1kgS>HV!JA=Tx_Siv?@&S>sl3ti|y(#Tx{2b zX)QVrBGJWm9i;4AdsUdDt95jZj@IeO*U?c9x6K6{ZvAb(tb4+>@bzpPjkk-&+ehOa zqI9&&t^fK?QMYE2OKp^v`yaj~m-`F$%5;C*UN{*)y;n|a0Uz6VPBh*n8qfXFj2V2_3vJk+CM1`qe>RE06wMtF2u08jU@4ghQn z^hghmfLbxi!(spp&+xDbtA?XJY`&`D7!RASYB<)z&Z-)Y^RQw-!|@(g31~RM!#V*C zCwh2qpN5k>ysuBg0*_)l0$k|f1$~+>@~}CmhQ%H>JJfKphi&~dEb*{OpN3OB?8K+x znI87M)9@@0`{Zdj)x(Z-8cy@Db(w}|d)V7d!59``c-XZ})6+eg5e(2w4+|7DJIlkO z1r5*juv$UG^E|9q&~Ubg*Ys(4zK3`5X?TH$7w~B~$HUHF8eWK+1NI`1_QV1_*TbR) zt(fOw_a_bKqq;z_0PP9j#i%)eF`R=yyAX8*>>`gY3A(Y^!@>n!*rgt}1=4Vdhkbt- zHln2-cKgxvWgd3<(QuiE&3F8*H^|ztD}$m|c-ZDf=dSed@;MDxdD!7x!_^)Z5NNo@ z!+Ym6T#KFs@G1{)kJIec9u`Yzc#TKvf+~EEt_|RI9<67HGql0O`{cBEqlY)cX?VSd zH^OPS$-|rAG~DdrEpr-f@$h0f4R7%9UN{YZ<6&inhBxB!3E)j0R%dATw;q4$rT0lN{KoI4JOC4{Q8% z*{^t5*r(yEnEZjw>mF80`7>{lwd=hVPn2%W#CR9(V_V^bkFEX@ zwSeHrg-&X-^J~9*vvV2{(JKs2iKyqnyux5$1S@nRG&pifx}s=EdDc*54U5q5!06QS zoDs-5Epp8c**uo8%lwbue_pM+Sxcu!h9J<$2>#-3U{r+8h|uT=jX`bT$3|#egvLj( z=w?Dh-8`J?(S%q;eXLJV`iT+TJxq#F0puWpy9c$a`5G#W45gw-;JjZPVdwn>ukq=} z<~7a(bfnXGNBHQO-~6$lOpTz90C<=0AL%t7?3JCK+T=SJiNrV9rZ)Kwe!w~pXH>raN%Cf|HJlG@}O(;?X1JGIHTxqW>_ zyPfI?j8(8%c4dK7xe{0@bp%kwj%rnb1cd&K zN3qXXHOp5QcrL8?s?*K8LTU;;R#w!+SIp~jYYRMHR@5Y`sw?oASy9`ps-D1uWks!N zhB{KajN=5Pb{Rk7a&K?8LGEZLU?)KxF=?Ll<1@{Msp*0`Gc~J)c`-<)z+-<*tzfkd zu$t#O0?4w(WeX%!aSy{*Z`s#HP>!O4j~ccF!3X79%RGTZc@@Ao6s3jvR+w6wz$24d zo3LfJc_qsPLF1FB7zjOcCfb=ZNzg=|oN-v{ch3|GDqw0>8$%TfDq`xS^9^;x+Jw|D z<4xO{fuAerqU3=Gp$C4R9r*cz=JAkrpJRsfVnGX-+P>Gk;C!K=7*orw>JmYVn5wqV zyp8=*L5mfY_;CV4SGmMixm3^+C0lo)sd1U0%ebsX?G1H>pv##WVpUfPTF%tY_IQ&} zYM1fNc0^Ol6H?0)Qp*!?Pm)@mkXoLgzHX?J-oz09=h;nnt4bu){qI9LvO#K>aeb53 zN>WP<%A@|qT=P$E8%eF1+7TCxenHCnep~-etU*V|F7yGXh7mv$W?Me*iZNeoN-W`|NM`DQ~d) zN$|;xCHxV!18m@92Q-w^aI7;sw2ojR@TY^|buQooTfm!1>3vD*{YmLd(2NbVSoWh! zB`ra;RMKULmPxuC(G`-GBf3)h!w!jd9`8Z@hme1VFYAw*8u@qr@W1*ksB2V*^Zc+V zO^Zb7Y=mZ+BmT^dvhK(kXz)ygN^r8Tj8FxkD#9#q=OUbk zFdM-*BRp7Xb}m1 diff --git a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs index e0ffbeb6..d66eafa6 100644 --- a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs +++ b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs @@ -82,7 +82,7 @@ namespace WMS.Web.Api.Controllers /// [HttpPost] [Route("Export")] - public Task> Export([FromBody] OutStockQueryRequest dto) + public Task> Export([FromBody] ProductInventoryQueryRequest dto) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null) @@ -92,7 +92,7 @@ namespace WMS.Web.Api.Controllers Task.Run(async () => { - await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.StaffId, loginInfo.UserInfo.CompanyId, FileDownLoadOrderType.OutStock); + await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.StaffId, loginInfo.UserInfo.CompanyId, FileDownLoadOrderType.ProductInventory); }); return Task.FromResult(Result.ReSuccess(res)); From f85e04fe973b1c99b8ff0056241dbaac2ef40770 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 16 Oct 2024 17:47:34 +0800 Subject: [PATCH 03/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes src/WMS.Web.Api/Controllers/TestController.cs | 16 +- src/WMS.Web.Api/appsettings.json | 5 + src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml | 2 +- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 30 ++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 42 +++ .../Dto/LingXing/LingXingInventoryRequest.cs | 20 ++ .../Dto/LingXing/LingXingInventoryResponse.cs | 41 +++ .../Dto/LingXing/LingXingLoginRequest.cs | 24 ++ .../Dto/LingXing/LingXingRequest.cs | 24 ++ .../Dto/LingXing/LingXingResponse.cs | 23 ++ .../Dto/LingXing/LingXingStockResponse.cs | 17 + .../IService/Public/IHttpClientService.cs | 1 + .../IService/Public/ILingXingService.cs | 26 ++ src/WMS.Web.Domain/Options/lingXingOptions.cs | 16 + .../Services/Public/HttpClientService.cs | 15 + .../Services/Public/LingXingService.cs | 300 ++++++++++++++++++ src/WMS.Web.Domain/Values/ResultCodes.cs | 4 + .../DependencyInjection/AppBuilder.cs | 5 +- 19 files changed, 608 insertions(+), 3 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingInventoryResponse.cs create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingLoginRequest.cs create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs create mode 100644 src/WMS.Web.Domain/IService/Public/ILingXingService.cs create mode 100644 src/WMS.Web.Domain/Options/lingXingOptions.cs create mode 100644 src/WMS.Web.Domain/Services/Public/LingXingService.cs diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 03701273681fbae1b2ecc8f693ec54c95a8181dc..497f3f1757d48ea081744a9ab316a45f1fe39320 100644 GIT binary patch literal 275060 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 z z2e6mIUO;;VJ+ZKpLMNcBLRa7j1+GiL*>8ZJ0yjWm0C1ARNx(FPX~1-a>A)<7S-?Dn zdB6gN1SzSbi0Wu0 z&B*F#6wRpW=q#GEs-w{~qdBEs573z-byesJ9IBvaH}p`@6Bv$G&~p@yQ#cMdQ9;i% z7^0vj6AV}2^nhqA#~sV$f0{AO@26p6|3$i2=k8yrz-)Xb-vdmzXMR1PlkD$Q(0TOt zD(F=C2NiTS{9_6_;r$r}rm#ojIqvvsCZ*HYnd!?Fbn^KJ3Oc|1V+Cf6M-x#ea>lRr zbt3pT3Od*Odj)21M-wn6R5Kr&zD~-nP^bXvDbxeDP++ojG#Pa==d);^DbLX)`je`o zDKt}b&NAgaC{Lq5jhV+Z)0tdMGlTiVG&7kZOvBvZgVjBlWA|5JLT@yi9ZcdKu6>=S zd$xj3#XVO+XWLFvn1nhPl^L^_Yo9r=(LDO|nBhvZkV&jG%wAondl$0zZu)mK+mvPz z6H00BWzHzg{Y(p`S0(AqDk`zvoL8MW1=O^Q_Q8Ld4=hcG;c5? zlICqDJ<_aTUL(!tOkJc|&Fn;)hzW=^%sedD*Lj^>SWiJ`4{oQxTtMde0ZjH|A|Id= z{PtAP8GL&y=oGynwE>-jH$p+D*`1@HGwIG((8+T9s;u+juGGqvRIXFdIc+y7=(M#v z6?9(O{R%qu>_G*cUG{{6P9S?hLFb6QuE3lxrg#B5&+8KfoysK&I$LY4f=4Ajr_sz*(3vuG6m&Ao z1ignk-(`VTbVAD_1)a05I=`W{LTjMCLVKW- zf=)y@L_y~o^i*K>0FwoPzQBnJIw@e7g8tqA%>S>1`)6q@48SNJDu_sW!54)R#Gx4! zq*($w6a*G*$*JN2#SkXkhIc2BGQ0JKx`38uuBj@s)LJzgM*@j;^1IjQfLPS z&qSojg!K`F4z+$?|nhUrdb2S z^{KE;p9}Nzm9Q}12_y1@APZB0fhqV&SbJO2z@XbMY_>s|Wi!I^`dS!Q-w6BZnV^Ug zK!FwXr+3xRdFK^N=Djdh{uTDf|H9;$dI_wGt-^5FE^LE|F#mN33ty+`1h0ghu3L12 ztgyEAi9V1MHnY6QgF!*&qG|!t);nRn8WZ#=@)ICAk&^&TiG&2~Nbdz@h!6y4GL&Yl< zu2e-8T>FqY;8wWzpZO5`J##&{05`%}{$9Ae*M#GGUAUkB6Herh;t`}0kV^Rd5G|lh zw1KopgAU>7+$G$VGa>_eL=VV{Ea(-zpkMTZoXCN^aEcue1K_Q2P#qFOU|2Ydj))O3 zF2)n4Navou8>nnAua{?Lbkv{{1BW3nfnTHCAj+4wt41uJ$?#)W%P3x zt#e=;TvKamLv5&%Dh2+S6`PaYuEzLcGM)tfJM|=Qaj!2dJOk=Q%M<_r literal 275060 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
    NnD1($ z&;-~-VH03h2AD;|`NHH?CQ8K4Cd$QeN4itsX|!MK#2bY&qYw|5*f7(EOKrH!hHvBV z)xPqR<*ZC+IXfdGbDe9W)!F4~r*Ut8@6+f|eL@_{kL#XB+vpFw4L_`VHoGTQ>B<6i zewU)kuDlr>RmM*vjy}&OevNt3Ox31@Tm?ms<8Z!V29MJ8zxhyu_feTrZ9IZwr&bY11O+gkCN?QUZN`=r)>+Sk~#D8!5ONiEt6_VFzWX7x`k z8X5QZEed80N-f$F5ArPvW(`fPVR;$qTNKPXCbeiUe2i~Vh?nTp{ewi*C0IeT#xwPp8&%+Wpph{!xgR=#1pZzm$*8C?5GUbR&g$q4RAb(eL)J{+=k9 z^>%8}^!9DvqF~lXskN9!yuL-jtj|*G3vGYv-FFJ{5}lLWt*`UZImP>aj&7t7FLc38 zB--G9L7B585HuyFChKEl;gq^0M5wD8x&2R&s-7h3Kr}y*f)bQivDH@uw~R z3qrfxT*13N3T9QN7Cmz-eT#xwtELu>b652(3TCaHT6E7{+qWphOLSgxw>Bt5=N0e! zdAgB8yh!78Pc+nR?C*&}yhP_FdumpQ&MofgT-`{)obwZ>MIk!B=$s!r@mGH9Tc)@6 zmjdh^DGIiyiOHU}EkqNGdzu*UDgMf>PEMTd3(@4FGdXtRuQ(SaPP;;MQPH_5cH*x% z(-NnBA(~cnro~SD73bo_=~9R;E;<*-PW+XhtXuk%(Q3Av|C3RO7kbeqyBcJDX;=Dx z4UKB!CAuV$h8Chrinn)(Zln+|a!k6X;|j2MBq^A6VrrdS;Ei?9qF~mT)H*4_P5W=RI_;T6ffpIC^la2Cj7Uy-Mz`nYNIlV`>7GUolQHYmlZnCGl z3(?%-p614TiobGecO=e(h3Jl=b4TpNUvcIo&J%@bUeTEsJMmYX`HAyfA(~%w=EqL_ z73coMdA$(bUv%z|o%k!xgNgG&A$qXrJQzFiSDa@P=d(ieY|(i(cH*x%FC

    h+Zf< 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 diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 93c4a50e..8c363eef 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -28,6 +28,8 @@ using System.Reflection; using WMS.Web.Domain.Services; using SkiaSharp; using Google.Protobuf.Collections; +using NPOI.SS.Formula.Functions; +using System.Text.Json; namespace WMS.Web.Api.Controllers { @@ -57,11 +59,12 @@ namespace WMS.Web.Api.Controllers private readonly IMemoryCache _memoryCache; private readonly IRedisConcurrentProcessService _redisConcurrentProcessService; private IInStockService _inStockService; + private readonly ILingXingService _lingXingService; public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories, IRedisConcurrentProcessService redisConcurrentProcessService, IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService, IBasicsRepositories basicsRepositories, IMemoryCache memoryCache, IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IOptions options, ILoginService loginService, ISendMessageService sendMessageService, ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService, IInStockTaskRepositories inStockTaskRepositories, - IWebHostEnvironment env, IMaterialService materialService, IOutStockRepositories outStockRepositories, IInStockService inStockService) + IWebHostEnvironment env, IMaterialService materialService, IOutStockRepositories outStockRepositories, IInStockService inStockService, ILingXingService lingXingService) { _inStockService = inStockService; _redisConcurrentProcessService = redisConcurrentProcessService; @@ -85,12 +88,23 @@ namespace WMS.Web.Api.Controllers _outStockService = outStockService; _outStockRepositories = outStockRepositories; _env = env; + _lingXingService = lingXingService; } [HttpGet] [Route("hj")] public async Task TestHJ() { + ////var myJson = "{\"name\":\"小明\",\"address\":\"威海\"}";//json字符串 + //var myJson= "{\"code\":\"200\",\"msg\":\"OK\",\"data\":{\"access_token\":\"05895ad6-e318-41da-9b2c-579dedd18fd1\",\"refresh_token\":\"ad9145cf-8af9-4617-9dbe-187b0ff3edf9\",\"expires_in\":7162}}"; + //var myObj = JsonConvert.DeserializeObject(myJson);//反序列化为 dynamic 对象 + //var my2 = System.Text.Json.JsonSerializer.Deserialize(myJson); + //string m = myObj.code; + //var m2 = my2.Object; + //var md = m2.code; + + await _lingXingService.GetStock(); + //List list = new List(); //list.Add("GD-02-15"); //list.Add("GD-01-15"); diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index 8d69e2a9..7b63d062 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -46,6 +46,11 @@ "UserName": "admin", "PassWord": "888888" }, + "LingXingOptions": { + "Url": "https://openapi.lingxing.com", + "AppId": "ak_QGK2J8TssERmu", + "AppSecret": "n/HUKD2wVdTbvhnFZbVBPw==" + }, "Qiniu": { "AccessKey": "dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms", "SecretKey": "KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q", diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 4a712d9a..0e430568 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -579,7 +579,7 @@ - +

    导出 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index c53adb3b..d6112558 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -3969,6 +3969,36 @@ wms箱ID + + + 领星登录 + + + + + id + + + + + Secret + + + + + 领星请求 + + + + + 页码 + + + + + 页条数 + + 客户端名称 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 43b9bb7b..9989a112 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4310,6 +4310,11 @@ + + + 领星服务接口 + + 登录服务接口 @@ -6271,6 +6276,43 @@ + + + 领星服务接口 + + + + + 获取所有仓库 + + + + + + 32位MD5加密 + + 要加密字符串 + 是否以小写方式返回 + + + + + AES加密 + + 需要加密的字符串 + 32位密钥 + 向量(默认偏移量) + 加密后的字符串 + + + + 类实体的属性与值转化成键值对形式 + + + + + + 创建token diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs new file mode 100644 index 00000000..1f7d10d7 --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs @@ -0,0 +1,20 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + /// + /// 领星即时库存 + /// + [Serializable] + public class LingXingInventoryRequest:LingXingRequest + { + /// + /// 仓库Id 1,3,234,33 + /// + [JsonProperty("offset")] + public string wid { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryResponse.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryResponse.cs new file mode 100644 index 00000000..030c15ba --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryResponse.cs @@ -0,0 +1,41 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + /// + /// 领星即时库存 + /// + [Serializable] + public class LingXingInventoryResponse + { + /// + /// 仓库Id + /// + [JsonProperty("wid")] + public int StockId { get; set; } + /// + /// SKU + /// + [JsonProperty("sku")] + public string SKU { get; set; } + /// + /// 店铺id + /// + [JsonProperty("seller_id")] + public string SellerId { get; set; } + /// + /// 库存总量 + /// + [JsonProperty("product_total")] + public decimal Product_Total { get; set; } + /// + /// 可用量 + /// + [JsonProperty("product_valid_num")] + public decimal Product_Valid_Num { get; set; } + + } +} diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingLoginRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingLoginRequest.cs new file mode 100644 index 00000000..b785544c --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingLoginRequest.cs @@ -0,0 +1,24 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + /// + /// 领星登录 + /// + public class LingXingLoginRequest + { + /// + /// id + /// + [JsonProperty("appId")] + public string AppId { get; set; } + /// + /// Secret + /// + [JsonProperty("appSecret")] + public string AppSecret { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs new file mode 100644 index 00000000..2c388b5a --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs @@ -0,0 +1,24 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + /// + /// 领星请求 + /// + public class LingXingRequest + { + /// + /// 页码 + /// + [JsonProperty("offset")] + public int offset { get; set; } = 1; + /// + /// 页条数 + /// + [JsonProperty("ength")] + public int ength { get; set; } = 1000; + } +} diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs new file mode 100644 index 00000000..99499c51 --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + [Serializable] + public class LingXingResponse + { + public LingXingResponse() { } + [JsonProperty("code")] + public int Code { get; set; } + [JsonProperty("message")] + public string Message { get; set; } + [JsonProperty("error_details")] + public List Error_details { get; set; } + [JsonProperty("total")] + public int Total { get; set; } + [JsonProperty("data")] + public List Data { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs new file mode 100644 index 00000000..9d45b70d --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs @@ -0,0 +1,17 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + [Serializable] + public class LingXingStockResponse + { + public LingXingStockResponse() { } + [JsonProperty("wid")] + public int Id { get; set; } + [JsonProperty("name")] + public string Name { get; set; } + } +} diff --git a/src/WMS.Web.Domain/IService/Public/IHttpClientService.cs b/src/WMS.Web.Domain/IService/Public/IHttpClientService.cs index 42a5e48c..6e340c73 100644 --- a/src/WMS.Web.Domain/IService/Public/IHttpClientService.cs +++ b/src/WMS.Web.Domain/IService/Public/IHttpClientService.cs @@ -13,6 +13,7 @@ namespace WMS.Web.Domain.IService.Public Task GetAsync(string url, Dictionary dicHeaders, int timeoutSecond = 180); Task PostAsync(string url, string requestBody, int timeoutSecond = 180); Task PostAsync(string url, string requestBody, Dictionary dicHeaders, int timeoutSecond = 180); + Task PostAsync(string url, HttpContent content, Dictionary dicHeaders, int timeoutSecond = 180); Task ExecuteAsync(string url, HttpMethod method, string requestBody, Dictionary dicHeaders, int timeoutSecond = 180); } } diff --git a/src/WMS.Web.Domain/IService/Public/ILingXingService.cs b/src/WMS.Web.Domain/IService/Public/ILingXingService.cs new file mode 100644 index 00000000..285487b0 --- /dev/null +++ b/src/WMS.Web.Domain/IService/Public/ILingXingService.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.LingXing; +using WMS.Web.Core.Internal.Results; + +namespace WMS.Web.Domain.IService.Public +{ + /// + /// 领星服务接口 + /// + public interface ILingXingService + { + /// + /// 获取领星所有仓库 + /// + /// + public Task>> GetStock(); + /// + /// 获取即时库存 + /// + /// + public Task>> GetInventory(LingXingInventoryRequest dto); + } +} diff --git a/src/WMS.Web.Domain/Options/lingXingOptions.cs b/src/WMS.Web.Domain/Options/lingXingOptions.cs new file mode 100644 index 00000000..8027ea61 --- /dev/null +++ b/src/WMS.Web.Domain/Options/lingXingOptions.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Domain.Options +{ + /// + /// 领星配置 + /// + public class lingXingOptions + { + public string Url { get; set; } + public string AppId { get; set; } + public string AppSecret { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Services/Public/HttpClientService.cs b/src/WMS.Web.Domain/Services/Public/HttpClientService.cs index 016bd2dd..c88020b7 100644 --- a/src/WMS.Web.Domain/Services/Public/HttpClientService.cs +++ b/src/WMS.Web.Domain/Services/Public/HttpClientService.cs @@ -226,5 +226,20 @@ namespace WMS.Web.Domain.Services.Public if (timeoutSecond != null) httpClient.Timeout = TimeSpan.FromSeconds(timeoutSecond.Value); return httpClient; } + + public async Task PostAsync(string url, HttpContent content, Dictionary dicHeaders, int timeoutSecond = 180) + { + var client = BuildHttpClient(dicHeaders, timeoutSecond); + var response = await client.PostAsync(url, content); + var responseContent = await response.Content.ReadAsStringAsync(); + if (response.IsSuccessStatusCode) + { + var t = Newtonsoft.Json.JsonConvert.DeserializeObject(responseContent); + return t; + } + + _logger.LogError($"HttpGet:{url} Error:{responseContent}"); + throw new WebHttpException(response.StatusCode.ToString(), responseContent); + } } } diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs new file mode 100644 index 00000000..537d6838 --- /dev/null +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -0,0 +1,300 @@ +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Options; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Core.Dto.LingXing; +using System.Json; +using System.Net.Http; +using NPOI.POIFS.Crypt.Dsig; +using NPOI.SS.Formula.Functions; +using System.Configuration; +using System.Linq; +using System.Net; +using System.Text.RegularExpressions; +using System.Security.Cryptography; +using System.Reflection; +using WMS.Web.Core.Help; +using static System.Net.WebRequestMethods; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Services.Public +{ + /// + /// 领星服务接口 + /// + public class LingXingService : ILingXingService + { + private readonly IHttpClientService _httpClientService; + private readonly ILogger _logger; + private readonly IMemoryCache _memoryCache; + private int hours = 10;//过期时间 默认10小时 + private readonly lingXingOptions _option; + + public LingXingService(IHttpClientService httpClientService, ILogger logger, + IMemoryCache memoryCache, IOptions option) + { + this._memoryCache = memoryCache; + this._httpClientService = httpClientService; + this._logger = logger; + _option = option?.Value; + } + + public async Task> Login() + { + string endStr = "/api/auth-server/oauth/access-token"; + + var formData = new MultipartFormDataContent(); + formData.Add(new StringContent(_option.AppId), "appId"); + formData.Add(new StringContent(_option.AppSecret), "appSecret"); + + var res = await _httpClientService.PostAsync(_option.Url + endStr, formData, null); + + if (res.code != "200") + { + _logger.LogInformation($"领星获取授权失败:{res.msg}"); + return Result.ReFailure(ResultCodes.LingXingTokenError); + } + string token = res.data.access_token; + return Result.ReSuccess(token); + } + /// + /// 获取所有仓库 + /// + /// + public async Task>> GetStock() + { + var request = new LingXingRequest(); + var resUrl =await GetStr("/erp/sc/data/local_inventory/warehouse", request); + if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + + var res = await _httpClientService.PostAsync>(resUrl.Data, JsonConvert.SerializeObject(request), null); + if (res.Code!=0) return Result>.ReFailure(ResultCodes.LingXingDataError); + + return Result>.ReSuccess(res.Data); + } + /// + /// 获取即使库存 + /// + /// + /// + /// + public async Task>> GetInventory(LingXingInventoryRequest dto) + { + var resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); + if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + + var res = await _httpClientService.PostAsync>(resUrl.Data, JsonConvert.SerializeObject(dto), null); + if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + + return Result>.ReSuccess(res.Data); + } + #region 基础函数 + public async Task> GetStr(string urlStr,T data) + { + var res = await Login(); + if (!res.IsSuccess)return res; + + LxSignInfo lxSign = new LxSignInfo(); + + lxSign.access_token = res.Data; + lxSign.app_key = _option.AppId; + lxSign.timestamp = DateTime.Now.DateTimeToTimeStamp().ToString(); + + #region ASCII排序 + Dictionary testParamDics = new Dictionary(); + var ssi = GetEntityPropertyToDic(testParamDics, lxSign.GetType().GetProperties(), lxSign);//把签名参数实体转化为键值对 + var ssdata = GetEntityPropertyToDic(testParamDics, data.GetType().GetProperties(), data);//把参数实体转化为键值对 + + // List> list = new List>(); + Dictionary list = new Dictionary(); + //string[] arrays = new string[data]; + + foreach (var item in typeof(LxSignInfo).GetProperties()) + { + //KeyValueInfo keys = new KeyValueInfo(); + //keys.Key = item.Name; + //keys.Value = ssi[$"{item.Name}"].ToString(); + //list.Add(keys); + list.Add(item.Name, ssi[$"{item.Name}"].ToString()); + } + + foreach (var item in typeof(T).GetProperties()) + { + //KeyValueInfo keys = new KeyValueInfo(); + //keys.Key = item.Name; + //keys.Value = JsonConvert.SerializeObject(ssdata[$"{item.Name}"]); + + //if (ssdata[$"{item.Name}"] == null) { list.Add(keys); continue; } + //if (string.IsNullOrEmpty(ssdata[$"{item.Name}"].ToString())) + //{ + // continue;//跳过值为NULL的 + //} + + if (ssdata[$"{item.Name}"] == null) { list.Add(item.Name, JsonConvert.SerializeObject(ssdata[$"{item.Name}"])); continue; } + if (string.IsNullOrEmpty(ssdata[$"{item.Name}"].ToString())) + { + continue;//跳过值为NULL的 + } + + list.Add(item.Name, JsonConvert.SerializeObject(ssdata[$"{item.Name}"])); + } + + string[] arrays = new string[list.Count]; + + int i = 0; + foreach (var item in list) + { + arrays[i] = item.Key; + + i++; + } + + Array.Sort(arrays, string.CompareOrdinal); //ASCII排序 + + string sig = null; + int j = 0; + foreach (var item in arrays) + { + string key = list.Where(a => a.Key == item).ToList()[0].Key.ToString(); + string value = list.Where(a => a.Key == item).ToList()[0].Value.ToString(); + + #region 清除嵌套外的字段值的双引号 + if (value.IndexOf("{", StringComparison.OrdinalIgnoreCase) > -1) { } + else + { + value = Regex.Replace(value, @"[\""]+", "");//去掉双引号 + } + #endregion + + if (j == i - 1) + { + sig += $"{key}={value}"; + } + else + { + sig += $"{key}={value}&"; + } + + j++; + } + #endregion + + #region MD5加密转大写+AES/ECB/PKCS5PADDING加密 + //sig = Regex.Replace(sig, @"[\""]+", "");//去掉双引号 + var md5 = MD5Encrypt(sig, false); + var signs = Encrypt(md5, lxSign.app_key); + #endregion + + #region 字符转义 + + signs = WebUtility.UrlEncode(signs); + #endregion + + #region 形成签名地址 + var url = _option.Url + urlStr; + var ret = $"{url}?app_key={lxSign.app_key}&access_token={lxSign.access_token}×tamp={lxSign.timestamp}&sign={signs}"; + return Result.ReSuccess(ret); + #endregion + } + + /// + /// 32位MD5加密 + /// + /// 要加密字符串 + /// 是否以小写方式返回 + /// + public static string MD5Encrypt(string strText, bool IsLower = true) + { + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] bytes = System.Text.Encoding.UTF8.GetBytes(strText); + bytes = md5.ComputeHash(bytes); + md5.Clear(); + + string ret = ""; + for (int i = 0; i < bytes.Length; i++) + { + ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0'); + + } + if (IsLower == false) { return ret.PadLeft(32, '0').ToUpper(); } + return ret.PadLeft(32, '0'); + } + /// + /// AES加密 + /// + /// 需要加密的字符串 + /// 32位密钥 + ///向量(默认偏移量) + /// 加密后的字符串 + public static string Encrypt(string str, string key) + { + try + { + + Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key); + Byte[] toEncryptArray = System.Text.Encoding.UTF8.GetBytes(str); + var rijndael = new System.Security.Cryptography.RijndaelManaged(); + rijndael.Key = keyArray; + rijndael.Mode = System.Security.Cryptography.CipherMode.ECB; + rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7; + rijndael.IV = System.Text.Encoding.UTF8.GetBytes(key); + System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateEncryptor(); + Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); + return Convert.ToBase64String(resultArray, 0, resultArray.Length); + + } + catch (Exception ex) + { + //YellowJLog("调用AES加密方法异常,异常原因:" + ex.Message, "加密异常"); + return ""; + } + } + + /// + /// 类实体的属性与值转化成键值对形式 + /// + /// + /// + /// + /// + public static Dictionary GetEntityPropertyToDic(Dictionary inParam, PropertyInfo[] infos, T Entity) + { + foreach (var info in infos) + { + var itemTpe = info.PropertyType; + //实体中有嵌套类的处理 + if (itemTpe.IsClass && !itemTpe.Name.Equals("String", StringComparison.OrdinalIgnoreCase)) + { + //if (info.GetValue(Entity) == null) continue; + //GetEntityPropertyToDic(inParam, itemTpe.GetProperties(), info.GetValue(Entity)); + //inParam.Add(info.Name, info.GetValue(JsonConvert.SerializeObject(Entity), null)); + inParam.Add(info.Name, info.GetValue(Entity, null)); + } + else + { + + inParam.Add(info.Name, info.GetValue(Entity, null)); + //sig = Regex.Replace(sig, @"[\""]+", "");//去掉双引号 + } + } + + return inParam; + } + + #endregion + } + public class LxSignInfo + { + public string access_token { get; set; } + public string app_key { get; set; } + public string timestamp { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 06a356cc..046d1bbe 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -97,5 +97,9 @@ namespace WMS.Web.Domain.Values public static ValueTuple SubscribeNotificationNoData = (700001, "订阅通知信息不存在"); public static ValueTuple GetBarCodeSerialNumberError = (800001, "获取序列码异常"); + + public static ValueTuple LingXingTokenError = (810001, "获取领星授权失败"); + public static ValueTuple LingXingUrlError = (810002, "拼接领星请求参数失败"); + public static ValueTuple LingXingDataError = (810003, "请求领星数据失败"); } } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index bde012a3..c9a72a1e 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -182,7 +182,9 @@ namespace WMS.Web.Repositories.DependencyInjection Services.Configure(Configuration.GetSection("EmailOptions")); Services.AddOptions(); Services.Configure(Configuration.GetSection("SmsOptions")); - + Services.AddOptions(); + Services.Configure(Configuration.GetSection("LingXingOptions")); + } @@ -345,6 +347,7 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); + Services.AddTransient(); } From 7499682041d076f2f58a161127b975a51e2769a2 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 17 Oct 2024 10:05:32 +0800 Subject: [PATCH 04/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../Controllers/ProductInventoryController.cs | 3 + src/WMS.Web.Api/Controllers/TestController.cs | 6 ++ src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 64 +++++++++++++++++- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 25 +++++++ .../Dto/LingXing/LingXingRequest.cs | 6 +- .../Dto/LingXing/LingXingResponse.cs | 2 +- .../Dto/LingXing/LingXingStockResponse.cs | 7 +- .../SingleData/UcStockHeadOfficeResponse.cs | 6 +- .../Services/Public/HttpClientService.cs | 17 +++-- 10 files changed, 122 insertions(+), 14 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 497f3f1757d48ea081744a9ab316a45f1fe39320..a502b74111b24bacc0c2cd7b63fe838852b0f4a0 100644 GIT binary patch literal 275060 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�s-@NJ9IizyG591`3PSO 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 z z2e6mIUO;;VJ+ZKpLMNcBLRa7j1+GiL*>8ZJ0yjWm0C1ARNx(FPX~1-a>A)<7S-?Dn zdB6gN1SzSbi0Wu0 z&B*F#6wRpW=q#GEs-w{~qdBEs573z-byesJ9IBvaH}p`@6Bv$G&~p@yQ#cMdQ9;i% z7^0vj6AV}2^nhqA#~sV$f0{AO@26p6|3$i2=k8yrz-)Xb-vdmzXMR1PlkD$Q(0TOt zD(F=C2NiTS{9_6_;r$r}rm#ojIqvvsCZ*HYnd!?Fbn^KJ3Oc|1V+Cf6M-x#ea>lRr zbt3pT3Od*Odj)21M-wn6R5Kr&zD~-nP^bXvDbxeDP++ojG#Pa==d);^DbLX)`je`o zDKt}b&NAgaC{Lq5jhV+Z)0tdMGlTiVG&7kZOvBvZgVjBlWA|5JLT@yi9ZcdKu6>=S zd$xj3#XVO+XWLFvn1nhPl^L^_Yo9r=(LDO|nBhvZkV&jG%wAondl$0zZu)mK+mvPz z6H00BWzHzg{Y(p`S0(AqDk`zvoL8MW1=O^Q_Q8Ld4=hcG;c5? zlICqDJ<_aTUL(!tOkJc|&Fn;)hzW=^%sedD*Lj^>SWiJ`4{oQxTtMde0ZjH|A|Id= z{PtAP8GL&y=oGynwE>-jH$p+D*`1@HGwIG((8+T9s;u+juGGqvRIXFdIc+y7=(M#v z6?9(O{R%qu>_G*cUG{{6P9S?hLFb6QuE3lxrg#B5&+8KfoysK&I$LY4f=4Ajr_sz*(3vuG6m&Ao z1ignk-(`VTbVAD_1)a05I=`W{LTjMCLVKW- zf=)y@L_y~o^i*K>0FwoPzQBnJIw@e7g8tqA%>S>1`)6q@48SNJDu_sW!54)R#Gx4! zq*($w6a*G*$*JN2#SkXkhIc2BGQ0JKx`38uuBj@s)LJzgM*@j;^1IjQfLPS z&qSojg!K`F4z+$?|nhUrdb2S z^{KE;p9}Nzm9Q}12_y1@APZB0fhqV&SbJO2z@XbMY_>s|Wi!I^`dS!Q-w6BZnV^Ug zK!FwXr+3xRdFK^N=Djdh{uTDf|H9;$dI_wGt-^5FE^LE|F#mN33ty+`1h0ghu3L12 ztgyEAi9V1MHnY6QgF!*&qG|!t);nRn8WZ#=@)ICAk&^&TiG&2~Nbdz@h!6y4GL&Yl< zu2e-8T>FqY;8wWzpZO5`J##&{05`%}{$9Ae*M#GGUAUkB6Herh;t`}0kV^Rd5G|lh zw1KopgAU>7+$G$VGa>_eL=VV{Ea(-zpkMTZoXCN^aEcue1K_Q2P#qFOU|2Ydj))O3 zF2)n4Navou8>nnAua{?Lbkv{{1BW3nfnTHCAj+4wt41uJ$?#)W%P3x zt#e=;TvKamLv5&%Dh2+S6`PaYuEzLcGM)tfJM|=Qaj!2dJOk=Q%M<_r diff --git a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs index d66eafa6..548b9acd 100644 --- a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs +++ b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs @@ -55,6 +55,9 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync(name, loginInfo.UserInfo.CompanyId); + var response = r.Where(w => w.ManagementSystem == 1 || w.ManagementSystem == 4 + || (w.ManagementSystem == 2 && !string.IsNullOrEmpty(w.WarehouseCodeOfJushuitan)) + ||(w.ManagementSystem == 3 && !string.IsNullOrEmpty(w.WarehouseCodeOfLingxing))).ToList(); return ResultList.ReSuccess(r); } diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 8c363eef..741a52ca 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -30,6 +30,7 @@ using SkiaSharp; using Google.Protobuf.Collections; using NPOI.SS.Formula.Functions; using System.Text.Json; +using WMS.Web.Core.Dto.LingXing; namespace WMS.Web.Api.Controllers { @@ -103,6 +104,11 @@ namespace WMS.Web.Api.Controllers //var m2 = my2.Object; //var md = m2.code; + //LingXingResponse r = new LingXingResponse(); + + //string str = "{\"code\":0,\"message\":\"success\",\"error_details\":[],\"request_id\":\"7A739491-8740-01AC-304E-0203AF887AE2\",\"response_time\":\"2024-10-16 17:58:57\",\"data\":[{\"wid\":437,\"type\":1,\"name\":\"ORICO_OD\",\"is_delete\":0}],\"total\":1}"; + //var ss=JsonConvert.DeserializeObject>(str); + //var b = System.Text.Json.JsonSerializer.Deserialize>(str); await _lingXingService.GetStock(); //List list = new List(); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index d6112558..f7fad6dd 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -3969,6 +3969,46 @@ wms箱ID + +

    + 领星即时库存 + + + + + 仓库Id 1,3,234,33 + + + + + 领星即时库存 + + + + + 仓库Id + + + + + SKU + + + + + 店铺id + + + + + 库存总量 + + + + + 可用量 + + 领星登录 @@ -3994,11 +4034,26 @@ 页码 - + 页条数 + + + id + + + + + id + + + + + name + + 客户端名称 @@ -5951,7 +6006,12 @@ - 用途 + 用途 0 总公司 + + + + + 管理系统 1 金蝶 2 聚水潭 3 领星 4WMS diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 9989a112..56a49871 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4315,6 +4315,18 @@ 领星服务接口 + + + 获取领星所有仓库 + + + + + + 获取即时库存 + + + 登录服务接口 @@ -4749,6 +4761,11 @@ erp-Id + + + 领星配置 + + 老ops对接 @@ -6287,6 +6304,14 @@ + + + 获取即使库存 + + + + + 32位MD5加密 diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs index 2c388b5a..a8651d13 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs @@ -14,11 +14,11 @@ namespace WMS.Web.Core.Dto.LingXing /// 页码 /// [JsonProperty("offset")] - public int offset { get; set; } = 1; + public int offset { get; set; } = 0; /// /// 页条数 /// - [JsonProperty("ength")] - public int ength { get; set; } = 1000; + [JsonProperty("length")] + public int length { get; set; } = 800; } } diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs index 99499c51..021499cc 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs @@ -2,10 +2,10 @@ using System; using System.Collections.Generic; using System.Text; +using System.Text.Json.Serialization; namespace WMS.Web.Core.Dto.LingXing { - [Serializable] public class LingXingResponse { public LingXingResponse() { } diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs index 9d45b70d..31f53838 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingStockResponse.cs @@ -5,12 +5,17 @@ using System.Text; namespace WMS.Web.Core.Dto.LingXing { - [Serializable] public class LingXingStockResponse { public LingXingStockResponse() { } + /// + /// id + /// [JsonProperty("wid")] public int Id { get; set; } + /// + /// name + /// [JsonProperty("name")] public string Name { get; set; } } diff --git a/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs b/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs index b36d5e5a..9aa26f52 100644 --- a/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs +++ b/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs @@ -19,8 +19,12 @@ namespace WMS.Web.Core.Dto.SingleData /// public string WarehouseCodeOfJushuitan { get; set; } /// - /// 用途 + /// 用途 0 总公司 /// public int? WarehouseUseTo { get; set; } + /// + /// 管理系统 1 金蝶 2 聚水潭 3 领星 4WMS + /// + public int? ManagementSystem { get; set; } } } diff --git a/src/WMS.Web.Domain/Services/Public/HttpClientService.cs b/src/WMS.Web.Domain/Services/Public/HttpClientService.cs index c88020b7..5f9b5d3f 100644 --- a/src/WMS.Web.Domain/Services/Public/HttpClientService.cs +++ b/src/WMS.Web.Domain/Services/Public/HttpClientService.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Net.Http; @@ -48,8 +49,9 @@ namespace WMS.Web.Domain.Services.Public var responseContent = await response.Content.ReadAsStringAsync(); //2.当前使用这里是为了迎合错误信息观看 if (response.IsSuccessStatusCode) { - var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + //var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); //var t = await JsonSerializer.DeserializeAsync(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });//3.配合1的ReadAsStream使用 + var t = JsonConvert.DeserializeObject(responseContent); return t; } @@ -80,8 +82,9 @@ namespace WMS.Web.Domain.Services.Public var responseContent = await response.Content.ReadAsStringAsync(); //2.当前使用这里是为了迎合错误信息观看 if (response.IsSuccessStatusCode) { - var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + //var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); //var t = await JsonSerializer.DeserializeAsync(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });//3.配合1的ReadAsStream使用 + var t = JsonConvert.DeserializeObject(responseContent); return t; } @@ -111,7 +114,8 @@ namespace WMS.Web.Domain.Services.Public var responseContent = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { - var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + //var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + var t = JsonConvert.DeserializeObject(responseContent); return t; } @@ -135,7 +139,8 @@ namespace WMS.Web.Domain.Services.Public var responseContent = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { - var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + //var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + var t = JsonConvert.DeserializeObject(responseContent); if (t == null) _logger.LogInformation($"获取单点数据为空---{responseContent}"); return t; @@ -163,8 +168,8 @@ namespace WMS.Web.Domain.Services.Public var responseContent = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { - var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); - + //var t = JsonSerializer.Deserialize(responseContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); + var t = JsonConvert.DeserializeObject(responseContent); return t; } From a1716aa75ace5ea4307dc91db8b0d56faae72a65 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 17 Oct 2024 11:57:22 +0800 Subject: [PATCH 05/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes src/WMS.Web.Api/Controllers/TestController.cs | 13 +- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 5 - .../Dto/LingXing/LingXingInventoryRequest.cs | 2 +- .../Dto/LingXing/LingXingResponse.cs | 4 +- .../IService/IProductInventoryService.cs | 16 +++ .../Services/ProductInventoryService.cs | 131 ++++++++++++++++++ .../Services/Public/LingXingService.cs | 40 ++++-- .../DependencyInjection/AppBuilder.cs | 2 +- .../AppBuilderExtensions.cs | 2 + 10 files changed, 189 insertions(+), 26 deletions(-) create mode 100644 src/WMS.Web.Domain/IService/IProductInventoryService.cs create mode 100644 src/WMS.Web.Domain/Services/ProductInventoryService.cs diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index a502b74111b24bacc0c2cd7b63fe838852b0f4a0..283ff789d555ef092d6441ab232e644afae2295d 100644 GIT binary patch delta 3434 zcma);33OED702`5OL8v>OB4w~1d58H6wNSANNT|Zh=LSQFexISS&c@v2!fza5O6`X zLR(+86a`$s5D^upZY(N@EV9G}rMR-VA@lFhmLgsLFLPsT&+(kTbN+LG-~H~l-S6F* zId&l9*nte^>)Fmc$64#R%SR3>E6dK!DGgOtmW9f4$}1|W^1|WD?A+2&MMY&^-@N?1 z%F=LtUY~G9Re4ojC?~hHJg2I(tgj<6)1n{NxcgK6^K0F-|Mo{~-Q1MukeO~tv0u2$o$0$X+~C1-Cj0w# zxu+IoBqbh?W~C-2Jw?@1fqxZk1NF4|R?|L1t)ZT!o}-?p*7{u=-HvXjB!5z)n;8kh zH&7d?*QnR2H>ge2X6j993-uPYmD)zVKy9aXP;XN^sa@1=%H>w}&^A)RHs7IbZaZwh z%XVPjOY}#YCJ!bICJ6?-PaCxNQtjA&nf3!J*yx8;u*qOU`>0^DKU4duA8z6!wm+uQ zI6fHrW8*&2NXx)f27k)nV4=^bV3E(MVB#*ekptvcsDsq2)H-TCb%+YaHD~bu&ECF2 z9Q4Ce{BJtja^c`sgIiur{rHWx39=fjpG){v}?f zlNl{8@pcwDy`nu9dz&OOS_*I#wb?1a7}_mPL0#QfHfBLdQc^5wPRzk~Ud+SQ5=+5Y zIi3}3wa7VHk8x5MOUE_`;|13=^RNiR0*y#j8qFQOisA37laIN z5QGhD1UZH`3i=vO5ab(96kKFDN$|Flm~673pLwSUE;g(c?6H8G1n)S7k){nz6})He zX@b3mHw%W^xaoq0hBE~9hPMb-8_pE0F`OlM(ePG5)bKXJdc)fVM+_qo!Pmxhf}@7B z1$S72<_P|3-noLf;XJ|L4eu2E!|*P_=eGB|1qTi95gaz0FZj-4@8!buMuPiTAo$WE z?h~|2No4ST!C8jC=5iMB0QY0KkSiN5;vHD*Z@7kee=GQ%9pgbkp#}JYfrh`A2#Sm! z5?pHduwaPc9|R)|7YqJqvn>%kV)&>)+{A{L3epXi38s4q?{dK`!^Z?|EZ}jTGr$Os z|Ae5uxt|n_vgK9?R@xd*@yZQX2^tKa7Id&-s|B46pAmF1TqEda_^hC#;d6pchR+Kk z-Hq1@if!c=1SN)1K@SV~lVGdm^+myG3wTLzo&~%tIM?tMK`+Bs1-%W|vD6IL3wAY4 z7HN$Qf-yGRM!{Ia*97AXUuSh2zQN))+{7!l*)|K_w4`hiyk)qR!z^H%V7qyDutW`a z@@t^^P1q&aZSFn1XB*eZ8a3~`EK$Sv`MO%bUcm?AH>~iwMLxFPPXwPDe#Uw*JivM| zJj8l1{DLzXe#Lq){6;X*4tYc{+3;IIt>IBY%wi#!+T>*-|HAq-_c2z9;on$0hR0bj zh9_7hh9?F8H2jy~--byFM-y+btMCky6)A?P3NchgtB7%$BHggHqK#o&MLWX`#VLlT zD%u;Krs!apspx2!rRZdMx}vk;8Hz53T@~FD7{N~z-OYWb;w;0n6+H~kQJiboQ*oZ* z`HEhKKUMTLyg+fGVYVV<*hdjI{Fx%hFjvu6BZ*w)De}$zbHzo5zfklu?60`kus~60 zI6yJbaFC+N@DjzPhJzJD3@=j*HTqWwVu+Jo-+27D=Ms~ zvZberJ=du}KEM>96KY{CDt`2i=2g+rXz5(qRtB%)1&)i?Y!YNDcxMhS2bR;7nzsC6F8hCJdp2J1`!dQR{u=Mss?4 z!%p{c&>NFFOL?eU{VNW67xWyjLm6ioCY3d{Ew5}>HMJ|%-=69X_KzO&YTet^FI?<( zkIp^p&3Dso*8)VSI*qm- z<6bm1{0K`dInJL!`eu1?Ea$!WcvJ_+`N1444QOdV%K}k7<*6JYk+lm?slvg}>s2cXo8*Ltc9)y8pQ6=l=&P9* delta 4110 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 diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 741a52ca..a47b119a 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -31,6 +31,7 @@ using Google.Protobuf.Collections; using NPOI.SS.Formula.Functions; using System.Text.Json; using WMS.Web.Core.Dto.LingXing; +using WMS.Web.Domain.Services.Public; namespace WMS.Web.Api.Controllers { @@ -61,11 +62,13 @@ namespace WMS.Web.Api.Controllers private readonly IRedisConcurrentProcessService _redisConcurrentProcessService; private IInStockService _inStockService; private readonly ILingXingService _lingXingService; + private readonly IProductInventoryService _productInventoryService; public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories, IRedisConcurrentProcessService redisConcurrentProcessService, IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService, IBasicsRepositories basicsRepositories, IMemoryCache memoryCache, IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IOptions options, ILoginService loginService, ISendMessageService sendMessageService, ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService, IInStockTaskRepositories inStockTaskRepositories, - IWebHostEnvironment env, IMaterialService materialService, IOutStockRepositories outStockRepositories, IInStockService inStockService, ILingXingService lingXingService) + IWebHostEnvironment env, IMaterialService materialService, IOutStockRepositories outStockRepositories, IInStockService inStockService, ILingXingService lingXingService + , IProductInventoryService productInventoryService) { _inStockService = inStockService; _redisConcurrentProcessService = redisConcurrentProcessService; @@ -90,6 +93,7 @@ namespace WMS.Web.Api.Controllers _outStockRepositories = outStockRepositories; _env = env; _lingXingService = lingXingService; + _productInventoryService = productInventoryService; } [HttpGet] @@ -109,8 +113,11 @@ namespace WMS.Web.Api.Controllers //string str = "{\"code\":0,\"message\":\"success\",\"error_details\":[],\"request_id\":\"7A739491-8740-01AC-304E-0203AF887AE2\",\"response_time\":\"2024-10-16 17:58:57\",\"data\":[{\"wid\":437,\"type\":1,\"name\":\"ORICO_OD\",\"is_delete\":0}],\"total\":1}"; //var ss=JsonConvert.DeserializeObject>(str); //var b = System.Text.Json.JsonSerializer.Deserialize>(str); - await _lingXingService.GetStock(); - + //await _productInventoryService.LingXing(); + //var s = await _lingXingService.GetStock(); + //string str = string.Join(",", s.Data.Select(s => s.Id).ToList()); + var sd= await _lingXingService.GetInventory(new LingXingInventoryRequest() { wid = "437" }); + string sdsdf = sd.Message; //List list = new List(); //list.Add("GD-02-15"); //list.Add("GD-01-15"); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index f7fad6dd..733752ad 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -4044,11 +4044,6 @@ id - - - id - - name diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs index 1f7d10d7..580423a4 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs @@ -14,7 +14,7 @@ namespace WMS.Web.Core.Dto.LingXing /// /// 仓库Id 1,3,234,33 /// - [JsonProperty("offset")] + [JsonProperty("wid")] public string wid { get; set; } } } diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs index 021499cc..17beb7b5 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingResponse.cs @@ -6,7 +6,7 @@ using System.Text.Json.Serialization; namespace WMS.Web.Core.Dto.LingXing { - public class LingXingResponse + public class LingXingResponse { public LingXingResponse() { } [JsonProperty("code")] @@ -18,6 +18,6 @@ namespace WMS.Web.Core.Dto.LingXing [JsonProperty("total")] public int Total { get; set; } [JsonProperty("data")] - public List Data { get; set; } + public object Data { get; set; } } } diff --git a/src/WMS.Web.Domain/IService/IProductInventoryService.cs b/src/WMS.Web.Domain/IService/IProductInventoryService.cs new file mode 100644 index 00000000..7acb4cc9 --- /dev/null +++ b/src/WMS.Web.Domain/IService/IProductInventoryService.cs @@ -0,0 +1,16 @@ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Internal.Results; + +namespace WMS.Web.Domain.IService +{ + public interface IProductInventoryService + { + Task LingXing(); + Task Erp(); + Task JuShuiTan(); + } +} diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs new file mode 100644 index 00000000..1a41f023 --- /dev/null +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -0,0 +1,131 @@ +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; +using NPOI.POIFS.FileSystem; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using WMS.Web.Core.Dto.Erp; +using WMS.Web.Core.Dto.Login; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Services +{ + public class ProductInventoryService : IProductInventoryService + { + private readonly IErpService _erpService; + private readonly ISingleDataService _singleDataService; + private readonly IErpBasicDataExtendService _erpBasicDataExtendService; + private readonly IProductInventoryRepositories _repositories; + private readonly ILingXingService _lingXingService; + private readonly IBasicsRepositories _basicsRepositories; + public readonly IBasicsRepositories _transactionRepositories; + public ProductInventoryService(IErpService erpService, + ISingleDataService singleDataService, + IErpBasicDataExtendService erpBasicDataExtendService, + IProductInventoryRepositories repositories, + ILingXingService lingXingService, + IBasicsRepositories basicsRepositories, + IBasicsRepositories transactionRepositories) + { + _erpService = erpService; + _singleDataService = singleDataService; + _erpBasicDataExtendService = erpBasicDataExtendService; + _repositories = repositories; + _lingXingService = lingXingService; + _basicsRepositories = basicsRepositories; + _transactionRepositories = transactionRepositories; + } + + + public Task Erp() + { + throw new NotImplementedException(); + } + + public Task JuShuiTan() + { + throw new NotImplementedException(); + } + + public async Task LingXing() + { + //获取单点配置 + var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); + var listNames = r.Where(w => + w.ManagementSystem == 3 && !string.IsNullOrEmpty(w.WarehouseCodeOfLingxing)) + .Select(s => s.WarehouseCodeOfLingxing) + .ToList(); + //获取领星仓库 + var resStock = await _lingXingService.GetStock(); + if (!resStock.IsSuccess) return resStock; + + var ids = resStock.Data.Where(w => listNames.Contains(w.Name)).Select(s => s.Id).ToList(); + string strIds = string.Join(",", ids); + //获取领星库存 + var resInventory = await _lingXingService.GetInventory(new Core.Dto.LingXing.LingXingInventoryRequest() { wid = strIds }); + if (!resInventory.IsSuccess) return resStock; + + //物料 + var materials_result = await _erpService.BillQueryForMaterial(); + List materials = new List(); + if (materials_result.IsSuccess) + materials = materials_result.Data.ToList(); + + List inventoryList = new List(); + foreach (var item in resInventory.Data) + { + //如果物料不匹配 过滤 + var m = materials.FirstOrDefault(f => f.Specifications.Equals(item.SKU)); + if (m == null) continue; + //找仓库 + var l_stock = resStock.Data.FirstOrDefault(f => f.Id == item.StockId); + if (l_stock == null) continue; + var stock = r.FirstOrDefault(f => f.WarehouseCodeOfLingxing.Equals(l_stock.Name)); + if (stock == null) continue; + + var entity = new ProductInventory() + { + Type=ProductInventoryType.LingXing, + MaterialNumber = m.MaterialNumber, + Customer = item.SellerId, + OrgCode = stock.Code, + StockCode = stock.ErpOrgCode, + Qty = item.Product_Valid_Num, + BeforeQty = item.Product_Total + }; + inventoryList.Add(entity); + } + + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + Result res_Rollback = Result.ReSuccess(); + bool isSuccess = true; + //修改库存 + //先删除之前的再添加 + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.Delete(ProductInventoryType.LingXing, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.AddRange(inventoryList, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + //提交事务 + isSuccess = _transactionRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction); + if (!res_Rollback.IsSuccess) return res_Rollback; + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + + return Result.ReSuccess(); + } + } +} diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index 537d6838..f01832ca 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -56,7 +56,7 @@ namespace WMS.Web.Domain.Services.Public formData.Add(new StringContent(_option.AppSecret), "appSecret"); var res = await _httpClientService.PostAsync(_option.Url + endStr, formData, null); - + if (res.code != "200") { _logger.LogInformation($"领星获取授权失败:{res.msg}"); @@ -72,13 +72,13 @@ namespace WMS.Web.Domain.Services.Public public async Task>> GetStock() { var request = new LingXingRequest(); - var resUrl =await GetStr("/erp/sc/data/local_inventory/warehouse", request); + var resUrl = await GetStr("/erp/sc/data/local_inventory/warehouse", request); if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); - - var res = await _httpClientService.PostAsync>(resUrl.Data, JsonConvert.SerializeObject(request), null); - if (res.Code!=0) return Result>.ReFailure(ResultCodes.LingXingDataError); - - return Result>.ReSuccess(res.Data); + + var res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(request), null); + if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + + return Result>.ReSuccess(JsonConvert.DeserializeObject>(res.Data.ToString())); } /// /// 获取即使库存 @@ -88,19 +88,31 @@ namespace WMS.Web.Domain.Services.Public /// public async Task>> GetInventory(LingXingInventoryRequest dto) { - var resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); + var resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); - - var res = await _httpClientService.PostAsync>(resUrl.Data, JsonConvert.SerializeObject(dto), null); + List list = new List(); + var res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(dto), null); if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); - return Result>.ReSuccess(res.Data); + int num = res.Total / 800; + for (int i = 1; i <= num; i++) + { + dto.offset = i; + if (i == num) dto.length = res.Total - (num * 800); + resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); + if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(dto), null); + if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); + } + return Result>.ReSuccess(list.Where(w => w.Product_Total > 0 && w.Product_Valid_Num > 0).ToList()); } #region 基础函数 - public async Task> GetStr(string urlStr,T data) + public async Task> GetStr(string urlStr, T data) { var res = await Login(); - if (!res.IsSuccess)return res; + if (!res.IsSuccess) return res; LxSignInfo lxSign = new LxSignInfo(); @@ -131,7 +143,7 @@ namespace WMS.Web.Domain.Services.Public //KeyValueInfo keys = new KeyValueInfo(); //keys.Key = item.Name; //keys.Value = JsonConvert.SerializeObject(ssdata[$"{item.Name}"]); - + //if (ssdata[$"{item.Name}"] == null) { list.Add(keys); continue; } //if (string.IsNullOrEmpty(ssdata[$"{item.Name}"].ToString())) //{ diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index c9a72a1e..d8490860 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -348,7 +348,7 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); - + Services.AddTransient(); } } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs index f9cfa174..27fdecb2 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs @@ -8,6 +8,7 @@ using WMS.Web.Core.Dto.Inventory; using WMS.Web.Core.Dto.MoveBoxRecord; using WMS.Web.Core.Dto.OutStock; using WMS.Web.Core.Dto.OutStockTask; +using WMS.Web.Core.Dto.ProductInventory; using WMS.Web.Core.Dto.TakeStock; using WMS.Web.Domain.Infrastructure; using WMS.Web.Repositories; @@ -57,6 +58,7 @@ namespace Microsoft.Extensions.DependencyInjection services.AddTransient, InventoryInOutDetailsRepositories>(); services.AddTransient, BoxInventoryRepositories>(); services.AddTransient, BackRecordRepositories>(); + services.AddTransient, ProductInventoryRepositories>(); #endregion From ea8ac33a5696eb3002dfd16c83d7cf5935657b43 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 17 Oct 2024 14:03:12 +0800 Subject: [PATCH 06/60] =?UTF-8?q?=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 3 ++- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 15 +++++++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 13 ++++++++++ .../Dto/LingXing/LingXingKongRequest.cs | 10 ++++++++ .../Dto/LingXing/LingXingSellerResponse.cs | 25 +++++++++++++++++++ .../IService/Public/ILingXingService.cs | 5 ++++ .../Services/ProductInventoryService.cs | 24 ++++++++++++------ .../Services/Public/LingXingService.cs | 20 +++++++++++++++ 8 files changed, 106 insertions(+), 9 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingKongRequest.cs create mode 100644 src/WMS.Web.Core/Dto/LingXing/LingXingSellerResponse.cs diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index a47b119a..7f3eff22 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -114,7 +114,8 @@ namespace WMS.Web.Api.Controllers //var ss=JsonConvert.DeserializeObject>(str); //var b = System.Text.Json.JsonSerializer.Deserialize>(str); //await _productInventoryService.LingXing(); - //var s = await _lingXingService.GetStock(); + //var s = await _lingXingService.GetSeller(); + //var ns = s.Data.Where(w =>w.Id== "2101").ToList(); //string str = string.Join(",", s.Data.Select(s => s.Id).ToList()); var sd= await _lingXingService.GetInventory(new LingXingInventoryRequest() { wid = "437" }); string sdsdf = sd.Message; diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 733752ad..018bf731 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -4039,6 +4039,21 @@ 页条数 + + + 店铺信息 + + + + + id + + + + + name + + id diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 56a49871..231aad46 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4321,6 +4321,12 @@ + + + 获取领星所有仓库 + + + 获取即时库存 @@ -6304,6 +6310,13 @@ + + + 获取所有店铺 + + + + 获取即使库存 diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingKongRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingKongRequest.cs new file mode 100644 index 00000000..0a81b7a9 --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingKongRequest.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + public class LingXingKongRequest + { + } +} diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingSellerResponse.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingSellerResponse.cs new file mode 100644 index 00000000..69ecef32 --- /dev/null +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingSellerResponse.cs @@ -0,0 +1,25 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.LingXing +{ + /// + /// 店铺信息 + /// + public class LingXingSellerResponse + { + public LingXingSellerResponse() { } + /// + /// id + /// + [JsonProperty("sid")] + public string Id { get; set; } + /// + /// name + /// + [JsonProperty("name")] + public string Name { get; set; } + } +} diff --git a/src/WMS.Web.Domain/IService/Public/ILingXingService.cs b/src/WMS.Web.Domain/IService/Public/ILingXingService.cs index 285487b0..121676db 100644 --- a/src/WMS.Web.Domain/IService/Public/ILingXingService.cs +++ b/src/WMS.Web.Domain/IService/Public/ILingXingService.cs @@ -18,6 +18,11 @@ namespace WMS.Web.Domain.IService.Public /// public Task>> GetStock(); /// + /// 获取领星所有仓库 + /// + /// + public Task>> GetSeller(); + /// /// 获取即时库存 /// /// diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 1a41f023..33697c87 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -78,28 +78,36 @@ namespace WMS.Web.Domain.Services List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); + //获取店铺 + var sellerList = await _lingXingService.GetSeller(); + //合并 + var group = resInventory.Data.GroupBy(g => (g.StockId, g.SKU, g.SellerId)); List inventoryList = new List(); - foreach (var item in resInventory.Data) + foreach (var item in group) { //如果物料不匹配 过滤 - var m = materials.FirstOrDefault(f => f.Specifications.Equals(item.SKU)); + var m = materials.FirstOrDefault(f => f.Specifications.Equals(item.Key.SKU)); if (m == null) continue; //找仓库 - var l_stock = resStock.Data.FirstOrDefault(f => f.Id == item.StockId); + var l_stock = resStock.Data.FirstOrDefault(f => f.Id == item.Key.StockId); if (l_stock == null) continue; var stock = r.FirstOrDefault(f => f.WarehouseCodeOfLingxing.Equals(l_stock.Name)); if (stock == null) continue; - + //店铺 + var seller = sellerList.Data.FirstOrDefault(f=>f.Id== item.Key.SellerId); + if (seller == null) continue; + var pList = resInventory.Data.Where(w => w.SKU == item.Key.SKU + && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).ToList(); var entity = new ProductInventory() { - Type=ProductInventoryType.LingXing, + Type = ProductInventoryType.LingXing, MaterialNumber = m.MaterialNumber, - Customer = item.SellerId, + Customer = seller.Name, OrgCode = stock.Code, StockCode = stock.ErpOrgCode, - Qty = item.Product_Valid_Num, - BeforeQty = item.Product_Total + Qty = pList.Sum(s => s.Product_Valid_Num), + BeforeQty = pList.Sum(s => s.Product_Total) }; inventoryList.Add(entity); } diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index f01832ca..fd75cfd9 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -71,6 +71,7 @@ namespace WMS.Web.Domain.Services.Public /// public async Task>> GetStock() { + //默认获取本地仓库 如果需要海外仓 另外需传参数type var request = new LingXingRequest(); var resUrl = await GetStr("/erp/sc/data/local_inventory/warehouse", request); if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); @@ -80,6 +81,24 @@ namespace WMS.Web.Domain.Services.Public return Result>.ReSuccess(JsonConvert.DeserializeObject>(res.Data.ToString())); } + + /// + /// 获取所有店铺 + /// + /// + /// + public async Task>> GetSeller() + { + var request = new LingXingKongRequest(); + var resUrl = await GetStr("/erp/sc/data/seller/lists", request); + if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + + var res = await _httpClientService.GetAsync(resUrl.Data); + if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + + return Result>.ReSuccess(JsonConvert.DeserializeObject>(res.Data.ToString())); + } + /// /// 获取即使库存 /// @@ -301,6 +320,7 @@ namespace WMS.Web.Domain.Services.Public return inParam; } + #endregion } public class LxSignInfo From 46817280e7b35518b275d72d32616ff6d8cf2f46 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 17 Oct 2024 17:39:29 +0800 Subject: [PATCH 07/60] =?UTF-8?q?=E9=87=91=E8=9D=B6=E5=8D=B3=E6=97=B6?= =?UTF-8?q?=E5=BA=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes src/WMS.Web.Api/Controllers/TestController.cs | 9 +- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 20 +++- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 2 +- src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs | 18 +++- .../IService/Public/IErpService.cs | 2 +- .../Services/ProductInventoryService.cs | 50 ++++++++- .../Services/Public/ErpService.cs | 100 ++++++++++++------ .../Services/TakeStockService.cs | 23 ++-- 9 files changed, 162 insertions(+), 62 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 283ff789d555ef092d6441ab232e644afae2295d..e1dbf467c2fed9dfe4596e91234d8ebac7117f45 100644 GIT binary patch delta 41161 zcmeHw2bdJa_B~V8Jw0TW;F6<)wBW2{7>ELsu>17L%xHQ(;2_3e&Y zq4Fi6LA|o_vrCGzO1gCIUYJu-ke{1VQj(ohlGU{^KPS5+Kc^t8B(ESZzo=VY_kxn_ z-2B4s-AfC)<&_lYWtHS~>)w6I4E(@4)CJ&UvkX{ApHtGo_yJ<_B8lue>e>{Y+Du-^&ncahgboa(`QNUDQdke)|UW!^_pb!|oZAW|vD6_`$J1Gyck z3Mx>A|F41{!lxQm<-&;l2)Sx#2a;;!VEo&l>a>kQy)8yFA4P+i`J zW@_-Ld=nz#vVQX>PCdWbyCU3;9p8qiBB@efRjJMZ{%$M%M+ky3TGknW6lPXB0tODU|9*4XP#?XpAeX7-?}>&n9)yS>Pf>bgRb3T|(4exdtcsw@ zNv#5_K%D_pwSmNv$<&&bW}q7iYQR+0$%bkys1Z{GUNlrw zK~0z%VWXN0YR1%Z8`V-!3#L{~#_?@s`*^URR*GM?)$DO=L5FZ;TT2}(s0~xIrkGaS z32MvK(||HGAgJS*Sfv6Y*?2k$dQ72C)Mg_w2^i68QND+pQMU_)gI{#;3(VT z(E^6rqo2`NJ!kp}I)YL602HU_B1q{`# zVgVzmiqJV2rKe3;{z8MdNm+uV)Gx%haTg%v>BVXdF|u&M{FF z1x;XTi7hx;&?Kft+Ni05rZDwEJ6X?fzC*bBh)x$YP4US`6a;T{mhIiy0!CsafYom3 z4B#9ac&>n^n&SPqJdqd3ntp7e<_Vh1 z)U1sr>H-zvw_zO7;5}`b&^37HwwBTwFwZqiRHHBO@fvuH36)e&>6tZHt;V3 zhH4_d+3eV@f^K1I+oxubZWnYLQ%AgNqV5!Q2UDA88tQIAcQLiVM%^pu9;TYjGEw&n zx{s-wIvZ-GpcPDoUNh7Kf>tp_pP5cPBj5b%Tw1T+m}o zWz9C#KPl)5rdDMc>S;kwF*V0VJuB!LruNvV=LD@`YV_--;PZn1%G3!vO($Ly^a4}& z+o+cW{f(*Kb4nx&F;qm7$5h$Z=3csrq{@m){;UGQ8&#Ekg0G9!B#gw!0;`eL z89;R#SVO`{sSkv%uci&FCF$gvsc|55T!xLSEh!_ZU0`gA(t&ksU|mUdRDFKU3(RNa zL6YjFHUUDH%(NxzOUg`Y0vMa3bYKG;*icdfZem-WtQTu!`NonOrM3e?7jI(2no4St z)DAE)Gk}A2;pS#6Sog{T+YO;;W zlGK^0o4zq$JGw~9W@dS1dq#Q-*sjIN+ug(Cv+J1DCFjD3u2)$c*Hmtj(JQe0g zE6j;}n52BBu7BU0Lx)T1!BppqWy4&)p+7=W&(!)s==yuv`lFJ1amm>zsc+hkl+>H4 z!?zl$ucSUqt+i1{OFD|F!QYyW^^$#jVv&1WF}24=4U{y1sYN#G z1WALK8t{QBc%r1iOl`4ICrKK@RKejU>J*&BOtqVDsM92!%G6*>4V82{Q?<64sNs@^ zF}2)Ajg&NksgX8nw4_l?mD{L7Nd-*Zizqz{iX{~(D)|EpgdY47JNTuNN)Toy3otfC z>A*2I@C->~xQWXyHQhZ^(paW4zBA)LUeY+GrffG+6D3Vh)UwMAGg;Ck4tmB0O_el- zsev|Xx}<4LRsYZwJX_LPOkIyC{mkQBN#`gkc{f4m-k)cCKSR=a2s670j7?EGaHb8M zC23}AeIRt$Y#TNQb9Q!8g}~TIX8!de!u;y=Di zG;Vs7Dt4*l>@p5pAdjYnk`}?Z&M)63`nNlVZk2Q!?4@+O>{o$56?BIJcL3Z8o}Xa$ z$J0uG*8-VU^W6}zdV07;fi0_V{$3pG#b!$ws?T?+5_Rcrc`Wz&9=&&QTukqU_dZGY z2c8uP&q{b!NqQjgJecr21kb~g9tk|F6P`!mc}&vd+7qKE60RrVdP>sML7`_7o@e1% zBk8%o^Vfvud3aus^kU%oTf*}aJTFUnCGf0Gc-FzQUeX45Vrrl_CS04~+AQhSpwMdx z&+G8KA?eM1J#WGDwxoCV^}Gwudy=*Up7#^AZH4CpN!wz9YkR`=AzU9x+7Wm@PIx|n z=Tk|a1)k3no}KV~A?eF~J>~FxCF$#ZJ#lz2Bk7xcT@`SBE9vi;5{u~{dScuwkHb&} z(*kHE+reaj{Se#16oCCG+rfc{{UqDL(T4pj+p*vvgLs~a;LyT;iS6Kk!d}OAa2R24 zVmml?uwQ38IAXBhO0nNfv9~HaM!`Wrfe$$#I1;cwVLKRq*gM(&PLDe5@)SFsVppWt zyLdRi$KNHiKptO#KNR}`L;a(SSEJp^TUNF+_`d`VtW+sp>3lrx{z=9q{Vd}y?UB0< ziq}!cL|3Iw*&C>mqtDooqfXokb;b$@kBJ>}0*{;UgyHcViUgj@v4pD%TvZ*a7Px-o z{iN!Ss;~xpH65xI_%afuYQs~u=OBkN_x03=r-4Ha;o)H#4zPQ11nJoTTopT>nK+vyX0SL))xz-O?()-(6Gxenzp zHS1JEb#tgIQ%xd<>h4e;QyWgjv+sOc;b9KtGd~HT`gY)Ohk7U~xc3EChd^flJ#E<| z92ki}U=^q{fZzTP!OHY2{}IeA?qyq#I@Bwvbzs%H&H#Gbz#|~%+%vH>NJN=WokPp{XJ%=L#Hb$xwjy6Z-?1V40mW4m+V~4G&$0t5lm$aGt_8@ zMlm(pMin|#z|<%kRqRj^Q)_KhsY4}9ty*C^c7{V^6qVdD5V~VyZO6`ZXe^hERyQTb zJ2Wn}BnVw{f-O1Gp$S}a5lZT>W|JM7#MI>BhMMZo6sES=sOb((W9n%eb+$uiG1aby zDR{0!=P)%GlpgCD4xOi{0Mgj&}FG5 zLFkeTZOKIrE##6v+iom&=yImEjg<8Ym)Ovy4lPNo5rnSs3LAE%LsuZod>8^_Q(Dh^au!PJ339zd*D;lmVW=A&x`C-zY}8E- zEoTbfWrK10i$ganDtUxK=q7KmP2TFzEnKqKXjAfbhi*$P2||~=!$;{eONX=h@X-?Ch8NbwAV&$6ddZ=`F}27>z2eZzOxu2mZ4Q0F)NuzH>O+UNGnM_Ap>{a*5mPH|!A~6en5k!N!OtA}l&PO>)J}&! zXR1b~ISsya=nF+9pFkk=>@2s3=qrcH5w_7EnQ88@;tqYy)Qu%Fvyg1)Hx7~Fb&U$E z!>%)c15_bZ*!sS8s6y4Z%xa1L;n3f?<+hgE<pN1y}{@3}BB9tc34! z2!zC~F= zhzFl?)m*B|RMRsIRl}v~OqDg1_3~@l3TwGkQ}M~|g3#@LVaIbXaaZvHi@P#xJGEWP zKs#n;0b^5?ZmEt9tm{%8?r4p%rtb&2RFA32jSN-arA(%V+o*;vHDKy#8`apQMoisp zqnf(ZgsIJ-^w2kVshOgZhX91`SPR>+mM*p6lFiOEx|oAqYL!|Ngf4lAE!o6 z{Sen*)!2N9AL>#Yu61)`vv2KOYRlA9Xh>g1I=IxHsb)=Nz1kgZ&7EB8$owSmJ-)Mt z>sKUhooxkKE_LP#hK-XAhw(|##ieXTB@YJ(y;C{1WUfm&sbL^=*e`47GV{CI;@w>8 znpzx$E}mz@y1SIe{cAqnjKyItbiMZmy3F>+4b<)i3|LX67^RXqS#k z>MAfcMd`A~*s}dxI)=-ZqpbcKe5_0Tlga|CvN{7e&Xzsig^?H!U=^q{fB`mepbH~q z7J%T52HCI^PIY0W#DUOpgKgZ2E)7m<7Z{tObl^W#`8dS3dXh^+l3E2;t?CTm_edl= z9k52SI-aimpAt#^wYc{0lt}V!)G;!blkNVV;?l`#e|OkoX;4~X}x(h??;dtmN^+o*9Ky|4`yucrR-%rxJ3ro~aY@GtSRE^!0i>0v7=#BzT8XN^l%W+ZWJMtS;2SMQ0+FGMX;e)az?t&o@;F)b$sCE&H_}tQhrVR0;rzM~1EfE`Xw9^z&PsrLR7aoG)`4+%X*Z=wl(YgI_ zWvE9^BNb53m_{j}o*@+|pq?BRDNyA4yO+wB{PG_~Wv@grC18$`$NER?1~W!6V_bjW zZggp^GRC_8ge&E6f17fTQ_MJbb*R6rCj8w$gPNeI39jFCmuy|Dk&-4i!ql6n*om&+ z-j@^om3t63SuvAc|JgmFZmp@xP@m1y6`1b&>wWoiY^Ewb6Q$2qEar8*N`ESI<5kq` z>rZoCH3>0|;lx~y*Hx;_dG3*zs2v>uC0?87#t)+N-FSVvz@-Zj4Wd!JalA>qDa*C5 zMCeg!I$z{+cCpSbQCaf}N)~R%n_;@%7m7EJ##=<=Eu%EwpFco0%DdE!(q%{skQO2> zLb@Dju^WwdjK(`fKdQU+XoqVc}|PlIHWI@ADELr}*=Q-8m_`Mj(FsohJcVH@3LmSKvK3UEaFxJS8m2Kpp)(SmvGAN3rg4F1e8MvUo{3?a z6nG{lJX7GA8m4K1C(v~(?eBDW&I(iP?7)T3VznvPIdGjDrt<<%lK6K9JTt>a<^KyJ z|5-tq*@-U9L77;X$^y^aglC@eoFAqO0@sD?3be@=!Fh3*E(v^r0$p`)K0KF(>9Tz* zTma9)Ff9r^mnWK949}8q@NUM^a9^wbjU~x{aTG^{mHsz4hCl^u2S*Ne3ERQpf<2b) z;2^=Cz;xHif)0JTjuL{$$0Q%u1 z>G0{lBpnX^r;`o6h5x1}GxUR(+<%&iIJ3uZ7yka5?)Uev1oR&f=<27#$L~*|o7UZ? zb+`XJy4(B%)ZM1#v=y|MoVEx5gD^!-t8OTizLqzrWXnts3rL>?`sjbt3)?Rq9wblPu3RCVY(V$ zus8b8oQwaB?6LaUO3ABWYO$)=|0950Sg(pTMt?=CHr`H-yuQeLHZJ1tb^v}B1XjUP^opbD z6-WQuRvi5o$vBt%l8p24-!IP`%JR%kVXeyKRY>;|T>21PR$iUaTXqTgSzpTW{+c6Y zM}Nnca%asH5vGsDO7s7Xvdfmem1wXxo{U}{22jr|_b7>``l+6f(oBYgzwIblx8;Ee zGRs;Xp!BjH081wsUsLsHVl;mBFq_+=n% zTyV->(#8=Uq>UrJUG!RtHJt8Yg+vX{^6;x`y<^;=vpxLWnx@b3uu!sw=XzLKP{Z>)tdgeT3=a!@X*kov z+FcsX@~~!?hO<2^v8CZ04-0T<81t|=mWE{>)>hJRF6iPTj>jSo z8g@-z?qSIt4HtV@lt#lPXf6m?iv9%f3bY)+D{%~h*sIV+z%KL14|d~f56hY8%C7OS zW{HN^dNHh2qVaVemLt*ddJhYZXn2DM@w zC>X0oPk4~!Yx+qKKMAJcQyvzg(C}#wzY3<|Gah~oOv7h!Mg?$e`8TPBQzyKQzLi_Vp>Gq28{6l)Cc-B6+S(J+kmqo zbT*4gwBZ!qH`mGy!yNd%d3;*y%T>)-kV+-n4;;Gfsex*S$n;83_|~N zBE2#&-U~^u46J7Z{;H*d^~^}G46J{?IK48k67-~32F6*DUKu#OGO$_FG`%t~rB?=~ z^vb~ceZlm~!0DBN^?hS{Wng~AJH0Y+dSzh!{ULc};LO_hct*}YBSQChO3q*Qf>~I0 zW`yojR3Ib-#-=FVXoW31D*_`C2&@8i29Rmjl&mjcs7BVbH1AU#bmsa(8@M@u;4XQHZI#L(rWVGt0qsc zL5!(oo?7`CZOnr6eFgPVlP)+*fYs#J8Ng9?79K5Ns4uTSPcy4$^%HaqQ?WLNN=w%5 z7_a(J)JaR$e}iN_y#}#4i!K#3pHHmqADbU8ULfc)rh08MQHumEWUBKgCTg*u%b8ke zqm~Ln&xN)mO9h1#;ZQ#+4u+RzEXeueRM=E z1{r9*fQs3Mz-zcJN@p+;=(-TFQ>p^r1)n8YG&seMr`Q!K_9ArSI=_6E=r6J0qJP8= z+2WX3Bw0Egr9a`)vKft`uRbA4WsxY&MVc4!dz~ON|8Psq*04*>LUDb5#9wlvJgD0R z=fx*5JsyC1Tz#Jc>LK+C1y*?ejX#Lq2l|G_|I*^v9i9Gkb3}ar+I6z& zHhl8<^p{A#3jDz*eX>boAfrVv(pO-GBVPO+7=9HTbNapS(KgECM!KFyKS5FcG(3*ZL;z*+U4ct z7v*PXwaL%U%gRn~Q<#&Umz7sI@0wa7l=3koxeiZX_@&dF$-nU|N7kzUv? zC6qm5chAtu-93floRpuRo{jp85SyP>P*^ymU1nxcdUjq$VPR3bw(WA-73F2-v}>JN zIHX`myNs;tyn?JDs;TLjnRz)`8R;n^qg_gEf5|1H>dNkY#q>!{mPS%i?nSx}DK#Y} z<$mPLkRAxI<;Yj~U#$_%8`gsPNvKaDJ&m*q=@}&D`Yh6Oe!I1zdGTWq-$YuCv<7J{ z(mJH|NCHJ{K>ikzg#0#gqlcis16}3s2KHBxtMXJC%KyDUe;;`z=&Cs%AgLy7M0!4w zQk|N6yJy~(6=HTh5}S@5O`4BM{#js_-=!)D*6~n)$s|EDz|RXkWV2$ z6)8?h`3yq*0DTT!1)_B+FCe{y^fJ;bNUEUMkX}c611Wy=5<8JNniWy8+E;4dEk{~` z^q?PGBbruMgQ%)=kbi+(Z43Oy>&1AnG~};XBx|mGXuVkO4x1m^|31AQ>QqW^gi1^4 z%@CAQS`8VSlFKsaYpmni5R@`U$jVV?5Y}18^&u#5^mEI}Iu*E*w?edmpVoQiNtH_XF zv8Gd_{Z?!EC`4P?pd%n-Q;^oTS;vn6dv>nvg(!2AcTaOk3v96*u4OF zBWc|n0R?V;g@&@W?oU{d%h1{nMeSl9kBA@-kf{~2s#RwY%Gu%$6HpRr1)ys^+`5$) zba-5OkX3m)gHXXbR`dikHQpmPnek2)REeQcqh*}|+`cM;DkoM8Kv!GUmR3zr)wpUQ zt7>%yp}KXfA)u&QD{VHl))bV+Q0f@7k7^65#ZaF0sw3zKhH{TIUiAdkWoVWSY#^vU zL#tmlUX27bWN5SXYAonThU&i})7m$&jXO$E6NLv;0J7?Z&LA|kjzB?j1Yc^rfqylNnl$T6IIZ2|9(L)He*&UC^lv_1-3G*We!a6x0Kd>2VL?uOBa~ zwqaXuLA{i_o)Wqh0JPA@Hs>@!eYn&IY(=LF>dR2>g{JN^1)agre(QC%ptBgd#(MP= zbPhwQ%}n6Ag8DNw_Dur~6f}UL2R}CFlEH!o0W$r7j7>qhwRyI+`GWFPY<#BxXtx6E zRw$?-t~|)t6r>%Ctm6>O=%T~|0cgLW*6%z)LzSD~{TS1Y^92oKXz?dznvM`OoT2E& z#%q+IkqkX&1IGv&&Cnd{HBQi2hAK5T({8+=3jmoRfs9Q-x@i~Mrd=fHLKPc7BmlJA z#nx?tpo_VRXV;jvT_R{AL(5RBo_3Q3O;XUp&rF{#6*PsNmP{~CQw0?>)YE!R6I8;` z?g_GbmFc$D%LGklyyHX@eTAUQ8G5#bfvyxZgQ14&40M&CnG99_+_Yr2pjix!wqA1t zUCq!S>or%Ltepqt~WfQ(H+I(D&*y;acS#3}%2w#tk(mA zmNB%hl?hxSXgNa}ZyD$zK@T$2aJy;5BZ3}gsMvZvCg@RyMq96c2wKU|YU}lcpvM^+ zJjE3Ml%OXW+LmshRf3*o=mG2Xte|HYYL#KUo)`2SLv!CY(2IgzU})+N)6|y*y~NNK z>-DOjR~Q<5sR?{t&}$5}c*j6*3VMT~XROy6L8}>xwl-et1g&Lgi4EK!Xgx#ocA7@K zE$A(Vc3ZD^1---2R_pb?p!XQ+@UAI-qo5BMT32kKO@cmTs86PWwg}qHP`#-J`bf}L zh8A0|j|FX0(8BkO)2D(yVW-$vrlp??`i!BT*6T|_Uof-{rR$?>hoJ3%%+UoIn}YP5 z-f8FbSAuq`*!ZIhfOh-Zy6qD5HCOSKtu-cSH$%lGrn%n;A_XnXGRU`rO4%vzeFJ?j z=sSk`>@t1&QP2+zEw^5K1?^#IvGv+7XdgpAS+Ac3{lw7RX{PuTNxv{uIom)&Qb?j% z{ub-yNRkWIjb?YHN~#oBDr9U5(y^6oY!ykB6RQBA-Ktu*YLcpQ6&){=!R<^9 zN!8=3s4o4`ho<2*C8Z^n3P6`y%a&SOQY|huwVe#UsML{kL|mzmu_;K$*0r(qB-Kr< z0)Td_Z`~S5svlP#WNZr3jt#A2qhd)76AJ{O{f@MLjU^o!S0H3;3et{Etm9FVnk1G7 zK)W@yZbwUM%HF{PrmF6=l-If;b< z(1o?Pg&i-cJx30jVG27zQU``UIu17{9j$9rQb)#@!BtmsqNLo!N&x6eI@!q1k~(qZ zK3mC2lDaTd@~t^#bd_{6L)*5PrgW2Z3PWSAG*EX*r!v%PtATn->cP+|>(yIQFNUUA zuhS&;VW|8}6L`9$z6{Mf-auzcI)kBp*6VCZXE9V_p?;FiVJP~M2|QO)e}>jtuYr;V zFf_+{4VE;Bp}JR@z^G@7B^)@z)ku?$^my~azr zfT0c_o4|`CUC7Xz@X}v8CrG*&km(v^YzopHm}on2iKK}tHt45c(ot5`Pf{jJniN+A zWL1RDAWV_-L-XlU8Kq*RsnF(8iR@fT(B7Zq@s37&8PHCYkxY9xbyx2FprG{|GFP2bN+~^aM;#N_r|VJzW;G3YKRiJsVh_E3-Tg z%L|fT3@k5|SzdjKmIvY-vHyd~-F zgDvmC@~))!4z|1x%LkG+29^)YO4|g>W=UHD%T|f{v8g6}1k*N29|xvS%7Q+H03Q9?v=W#N47}>$Rz0eaK4m=^f9PMb{++e&Owe~F=#-#; z&%^lxKIhR@vU@2$=tqq79vLf7#e0=?>eMfT-zlhPN=htcIv!~6lQBvAWz40YfWIIwuuQcMw;$~kmcVA{jQ z(czAoljUKn;84ZDR>_7@DlC;9suEa&(Ni&1VX5X&^@A-nU`cbRW?-qMN(+v^+AtmA zP@Q;_Zh2i;>N!;ZU`qp78af9a&IcULje?jX%bML7F-@GfgRJcM3yv~v~YpU5uNG4+auaaa9J&W?zj2y*BGS zR%&Nb-2}Zsf}VJIG-i7+1c*aMorEOT?( z#-U7xw%u!>Y=^QKIyGXTb`G^=Xul0S&Y>KJZibh>Tp#aHdj;tWxsp{obOzxs{Q0jO z#sB`7R;7dO@(B)g;AZZQ;CF$J7LPjAF|MtURakFt@%WUa#6Fn z-Qjux@J5}iTW1G~y7wP>j=9M?$)PR`tvJj;T^%}^p(m|ZH-}DP=x2E82MXOCIu(%F zF_5t-NLSj!R@&2{9x68emJ@(>>t)?~JJgG-NbhGFa+*VZ7`o|j1D)6IM<>6961P)`YG)|hXyc|+uuNg9U8>Y zGV7J^P##0qSg%5d3K-gFy@ohc#L%|oreWtfG*m(H4FjMXHq18ce20c{jUC2;B>ovil ziy0~bq`%i);?P6|#disSZrCK-u*nWh;>fkOuuC19!q9^QOe>~3RLoG_N(P$dPzgi7 zSg*?*n$FO0>ve@gmowDoA=9uc9h#w__=W+{4V!5jc9lajIr1YErn@xTp;?KM0CeQl zHgb+bS99dCsiv`W9lD00)IsLZneWg%K<3baj7>qhxCOSjYaLpUSStYScAa%w=+Jds z#XwY{+k3r3eqtm59l6Lx-r&$8j=Ud{dT!k0(2We`RyNQr4&BVqUh8$MLyH+|IM`Hq zn?p+!6hF8Cbd|T;D(`UUc8(lvBkywP&csLnI`VECd5=SPbL7*A)Q!E@p`{E}e$+gG zy5FJu0GYvsj7>qhxMjAu2OL_KSStYSw%od{aAdQf@#u`04o zHU3%f5r-a*tHa;+sQK;lF^3*i7C-cutgZPH|8Qufiq`|EWL1;SAUtksdcuLCDw zRP>ZXPsUeN@|dY;l|xT+MN3eTK6O9q&@*urK~@#%48n7^qURkb3A+>kZ}ft7d(nZS z`Z6Zp?3kAwdWoT_)eQ8iL$5Hj%6h%-&}$5>v0iUF^aexa3rye|hgLIGr@DdGIkc9c ze%5P)L+cqTvC!KNy~WTx8~Cn6?=ZC1dcE(^dkk&0UK<_yfT6mDrp8SUeaKMD8V1_p z&}N2)Td$8C+RD%*>-Dii+Zf7w+ys8=&?gLiWCK5U=re|5Htjos_ep14@ZDpqF@ zKC#XIXCx9rSgnhOt`yD8%Df6BL)8Z$K|Lo9Dzz;a_0pN{(v2H0Y z6m^s=u4VS8a4F;}Xx2~zIW9?tzJ`}Rmxo<)6%>DB1)$6KTys+yamiC|3(qrU9p+Lw zF00|w1}g8;;SBY(UKL%cz|e}?cwoETj^3d#z0&e4+4@sms)TaPOoWV0LAs%ptz#9J zDys_P`vX9`Rkd!_T&l|LI$@Y;eGQkYGj!__2CC^&8bhp0wuy~B%B3c8 zRruTLnDg|}E;Z#+Lv>Bxj&Z3OLtmpJeZgztQgeoS)s@xrzq32bP~dda6&+4BKxYtI z+6El!LP_W&0Nu`3)-BzoR$R}l;bwGNyOfa_2|!2wU|Vtk^KNjaEwPPDnTg>5ba<9^ z%XTR%(G7rhYir%wxzv{1*L#E+n&Vu`VQB1g=0bP8OYH%f-2xe#f^=~mY;h;J)FH7} z0NU+$u?N%gJK9pCE_F;S6@V@^*SekPQf^!;A!AdJcI;#wJG<0LIr^_zmf}e+bz$hi z=gs%(t}dO-&=C#Hm*{RTof20AWL1OCAe?Gz=mFgLwZ=Zo-XxBbOWH>dRe#L zE}hXUu3pI4NM{iKY_4SW;y$+S(_HEkS2bi+way@T_J{1qpUAAt!eK|{51Cr|PnebZ z>|f=#n3a8Pe@}O*uj;R#`y!r6{Kqja)2f_dyV4l+H}1;KjbvKknHE3Gr8DDpDP*-v zbq3*(`I%?i63=nzY_4gnds~ z2UvWdO9SExfUFA88H7RBaj*+T6|laEx%10+DK9P-vWnFigd~ep4M&ni`lh+I4*cCL z(gHjE3SBC|Tsz>d3IK25mzvwx{6i+2o>73`DarTjMMnrVEoX_8x6HRIM0QmPAdbNj==dY4dW3Q(*j=zlLS?D_md>3nsa87pc;HkQZGRmRwg#=10yul;k6!`;s~i(lZZ)fI(E{*4znciNeoiNGH%zr|NRdmAnvBP=hEPE_b6!Pyd?G@(q!uQ{rSgUNG~T(IdTxilHAnxYcB8S1U#!TvN- zQIf!UZG|6BGL(=3AyWyNPN_dvlC(NPH<9l!V0 z@+dD?DY=e6izVV3T^57V|L4GsXr)Gy`r9} z&`j4~(M7hZwMU`q1@(POP_LwSROXJZziGGZ=Fi$Ij!5mJ5cO=+6A(P%_le0?USEaw zb^VQdMYmdKC`CO(J5vejp;;5<+eG-W`Ldedai3`1yq_|uCs5}qK|Ns_pak_uX^;}s zBcnVeTpR-@|^@@~ICsq5G}byA%Z$=IVDsIDH^>?*yY`fwLQP|B zqO=|04y2t(Um<;spmxz%PBeC0ly(8w?fQ8)%7ztU?W3{dqx2)7J(v%@WLDc)Zj`)m zlp;vw!qM1?Q92Cb;Yj6?Dj-!vssvM~XsmOTQlV82``vrXx{YEdM`K;1u~VW{3-)f& z*s0N2_h_s~G}bd3>lLNiVL$yQS-aH{h^YgQbD~riS-)tke>8S(G&Ud_8yKZ}u+~Rv zfYcDFkw5Y#*;O1F_HWrB>eQsh2q}rirbT1Zqp{1PvCE^eE27lI&-hX{4jtte_mPiO zYYLyW(b&3ZY<)DgAsTxtN=N(kw##EGHG}1oXzbG{9fPu)`%_Po1Ix95*b?bjf9x$X zO|%O8d2fpvwbKD*AhkxyM5-K$QXAx1VgKm9a$51r(9eYaYA8B&>h^$TyQ;?lEZeif zVA-A>KA2^@Kb6i2Ycg%WFrU8^!?k}H(>+WB0?WWM%OF?=hbb?xqslC!VHp#qv4JI^W2?rEgXMxSjSnovI4_ze zTnN)eVY)al#c_5gz%ns>5IG;k1>F2gf|yBVO_+?BDPg+QR8(e}3QI|trYQ^hPt(~H zP>L^u@$xWT5rhTAan!482wj`cED{DrJz>@~j_ zmoo;+XugTG_{nS!h8G1+Wxd!o=rY#zNTQ7xEY+bh+Wl1t{&QHrI$S^K(Qndxi$U|H zqaD0Iax|`W&6Lm#!a=W=#J~bxfGe|R0nZE5{IC`mgz4Hqye=F^2tMb~2*GKpk^eVF zu>LC0E?@))H}7pVu|sF5;a|q}{WI74`PZ;?`!n0DTfowd|BiHuA)@rKM3kOMLT-|f zs~EbxfrD#)f|>mPj*weDCrP%&nf3RRZL8=1g+yBC5AtZM*Lu><0CNr+XqC5K3e z9mp5ZKZg+eZ(h1D$!f*@4<%WxhPRnywc1CZNmi?(x$4`#zlPPiFl=rn{V*-W*L(9z z3}kgW))|DKEMfS7g*J;1d7;fem$YiAs2Qas{*-k)|I4_j`X`Cs-2BO|D5-${Le0boY&c}jMwQ;28**&0*g~EcbXp0)I3TtHCu=Lc_+#d{*JF? zOTXFIvb2&VZkDZ#n(qBYW_j>Rm4a2Qhg64 z^l<%|dqv$}C2_X%Kiexh9twFgHIck|5JPjmcfD%T_2EM%W%?jxE_xJy>J;+7-6N|c zurqH6D|Y4tmu?6Xm_s*&!Opxf40h&CVY(Up1`yBATnJaDW!@6zY_ZO6)!7oA-KMjH zxSGucxSIaMi)4*Pw}VR9EE+o|8fzYnwTO~tYewlR@F`~@&364~*NYle0+wc!767~! z={i5Rr<~=l>nYQHrx!S{4SLDpbwJ&WWkqAz(OBC<=4%8hsM9GX!)11&!Vx<{gTt<0GH{PntFLxK)t*h4Kvis zRM0FH_3|EIOT#N4xWOJlFfNrXrW^zmEoZpp@bN z*l3_fgN!`bqdX($dsJZLLXV1+jF~mWqoIL#o(H-&&|<*DJn+i2$N3&O-&!2*VKGT9 zj_|OEq!vedSUggTqdcq-sm0MAh~ZisSfXPV%r|mlh{`SkX(1Q#`D> zrNv7qUgd$uuEklXIY4K7w7ocxul7J?*B)~`tZAdgYfxR_Fc<9! z#CfPW5a(kb1ilMUM}S`I(RD#L7J69YL>K0JSlC31*LzsdgvDZ7Czqoqfx!l9wjcMx&4}UYJ#Ron7y_gms^6;-^T71~U zzm;k65f6Vhro~4+F!iud2J9+;0>eB8qi2};D=c*4Vfh-vsq4}UYJ z#iu;{jhGgn_VD*%T3m%gDiELX@M?rcpY_21*Wz;?-T=_z^B&#-(Bca?h6C|M9KwP4 z5_W8HP}<8Ly%LQ2s~)`;h_53qaCpO`Hv@Dvj>JG*i=#a#ZJkH!19SuSW)Sukj>G_c z$D?-x@jc8+?GUE-J^H}&kGxBc$QczB^|gmrvUJOLd3Xy;i@QCF1@YwJ4H%7ng9FD~ z`RZNrI8n^21RvTPSPs6*o)^RF|>1&P%I_~e4b_A$n(nmw*F`~sWgKT~0HL1O(>2cJp) zv!7g$n182AE=bJ7kX(=$CxzsK#O624n34+;8%Aq#LE_|s#C-p#Rw&j& zazWzcg2Z^3v&pZ}&|Emff?S5yeklISNZ@~bLE^$gCWkNe%;|PQ1W#Mb7}b!mDM%lB z_gTk@5xP$~`VYKh{$Ajc2rY|?g{)$A2BErLtg?oHqGBs;7Qt)ZH3gp7Dkyb~SyH>U zz>`}A}M z$7&SXn-xYo*y(wKpbnTUX6;;`jxv825Eax>S^UaP&1&~23d&V8D_A}OvMN<)5IWgX zI}0dfrLr3U-jb^xk4@6t|5TcLa@Au#PCHICcL-Mqx}2eBTNvm{K{FU?xXwUV37W}J z< z=0OQfHsf@!prs5wwZTC53%ZY?Ue+tgbvJ{Psenj$#n+3VZfzM zu6j(#Rgdw7#8T@!ODO8g%)S}sI&zYvE)11?Yi@tKN;;XLZCi|2H%X^3H0DYJb(eH1 zL#?(NsHdbJ46U+Wy(RTxXo~eZO;R6*%Fi@`r%UR~P?Gij|B&^*;8$7ihrH@>bH}WX zJShTN)MQQL;xF6HgSFRK`IgCJiT_MLFrrq73vH(+dICp8tU$IEmsxc+E_m7{Xr}|twu=--@{l4((|}J$IvjF&qzXtCkuC#v zInotKGms4T+bp|#C9s(hztRqQS{=3Q?k&)<>@M*_++z=XVWVww*==5SyLqteb}9J6 zc-^8Zz7{U^AgBk|_bEX=m|muYWuCuyzRW$8w>$pbOLMOer7w request = new List<(string orgCode, string stockCode)>(); + request.Add(("101", "CK001")); + request.Add(("101", "CK002")); + var list = await _erpService.BillQueryForInventory(request); + //LingXingResponse r = new LingXingResponse(); //string str = "{\"code\":0,\"message\":\"success\",\"error_details\":[],\"request_id\":\"7A739491-8740-01AC-304E-0203AF887AE2\",\"response_time\":\"2024-10-16 17:58:57\",\"data\":[{\"wid\":437,\"type\":1,\"name\":\"ORICO_OD\",\"is_delete\":0}],\"total\":1}"; @@ -117,8 +122,8 @@ namespace WMS.Web.Api.Controllers //var s = await _lingXingService.GetSeller(); //var ns = s.Data.Where(w =>w.Id== "2101").ToList(); //string str = string.Join(",", s.Data.Select(s => s.Id).ToList()); - var sd= await _lingXingService.GetInventory(new LingXingInventoryRequest() { wid = "437" }); - string sdsdf = sd.Message; + //var sd= await _lingXingService.GetInventory(new LingXingInventoryRequest() { wid = "437" }); + //string sdsdf = sd.Message; //List list = new List(); //list.Add("GD-02-15"); //list.Add("GD-01-15"); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 018bf731..d3357fe3 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -1006,15 +1006,25 @@ 仓库 - + - 子仓库(跟金蝶交互字段) + 子仓库 + + + 批号 + + - - 数量 - + + 可用量 + + + + + 库存量 + diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 231aad46..9b51cd52 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4304,7 +4304,7 @@ - + 及时库存 diff --git a/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs index 39a786f7..30597164 100644 --- a/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs +++ b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs @@ -19,12 +19,20 @@ namespace WMS.Web.Core.Dto.Erp /// public string StockCode { get; set; } /// - /// 子仓库(跟金蝶交互字段) + /// 子仓库 /// - public int Erp_SubStockId { get; set; } + public string Erp_SubStockName { get; set; } /// - /// 数量 - /// - public decimal Qty { get; set; } + /// 批号 + /// + public string Batch { get; set; } + /// + /// 可用量 + /// + public decimal Qty { get; set; } = 0; + /// + /// 库存量 + /// + public decimal BeforeQty { get; set; } = 0; } } diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index f561fa68..5d7510c5 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -178,7 +178,7 @@ namespace WMS.Web.Domain.IService.Public /// 及时库存 /// /// - Task> BillQueryForInventory(List<(string materialNumber, string orgCode, string stockCode, int subStockId)> request); + Task> BillQueryForInventory(List<(string orgCode, string stockCode)> request); //同步数据(保存提交审核) Task> Save(T dto, string formId); //提交 diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 33697c87..096d6cce 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -45,9 +45,53 @@ namespace WMS.Web.Domain.Services } - public Task Erp() + public async Task Erp() { - throw new NotImplementedException(); + //获取单点配置 + var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); + var codes = r.Where(w => + w.ManagementSystem == 1 || w.ManagementSystem == 4).Select(s => (s.Code, s.ErpOrgCode)).ToList(); + + var res = await _erpService.BillQueryForInventory(codes); + if (!res.IsSuccess) return res; + List inventoryList = new List(); + + foreach (var item in res.Data) + { + var entity = new ProductInventory() + { + Type = ProductInventoryType.JinDie, + MaterialNumber = item.MaterialNumber, + Customer = item.Erp_SubStockName, + OrgCode = item.OrgCode, + StockCode = item.StockCode, + Qty = item.Qty, + BeforeQty = item.BeforeQty + }; + inventoryList.Add(entity); + } + + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + Result res_Rollback = Result.ReSuccess(); + bool isSuccess = true; + //修改库存 + //先删除之前的再添加 + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.Delete(ProductInventoryType.JinDie, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.AddRange(inventoryList, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + //提交事务 + isSuccess = _transactionRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction); + if (!res_Rollback.IsSuccess) return res_Rollback; + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReSuccess(); } public Task JuShuiTan() @@ -95,7 +139,7 @@ namespace WMS.Web.Domain.Services var stock = r.FirstOrDefault(f => f.WarehouseCodeOfLingxing.Equals(l_stock.Name)); if (stock == null) continue; //店铺 - var seller = sellerList.Data.FirstOrDefault(f=>f.Id== item.Key.SellerId); + var seller = sellerList.Data.FirstOrDefault(f => f.Id == item.Key.SellerId); if (seller == null) continue; var pList = resInventory.Data.Where(w => w.SKU == item.Key.SKU && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).ToList(); diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index e0c5f6f3..d3d397d6 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -160,7 +160,7 @@ namespace WMS.Web.Domain.Services.Public /// 模糊搜索 /// 单据编号集合精确查找 /// - public async Task> BillQueryForPurchaseInStock(List sourceBillNos = null, DateTime? beginTime = null,bool isCheck=true) + public async Task> BillQueryForPurchaseInStock(List sourceBillNos = null, DateTime? beginTime = null, bool isCheck = true) { string result_json = ""; try @@ -194,7 +194,7 @@ namespace WMS.Web.Domain.Services.Public //5.仓库:wms系统的仓库值---现在这个没有加,因为还单点没有和金蝶同步 //param.FilterString = " FDocumentStatus='C' and (FBillTypeID='83d822ca3e374b4ab01e5dd46a0062bd' or FBillTypeID='6d01d059713d42a28bb976c90a121142') and FMRPCloseStatus='A'"; param.FilterString = " FMRPCloseStatus='A'"; - if(isCheck) param.FilterString += " and FDocumentStatus='C'"; + if (isCheck) param.FilterString += " and FDocumentStatus='C'"; for (int i = 0; i < stocks.Count(); i++) { if (i == 0) @@ -2635,7 +2635,7 @@ namespace WMS.Web.Domain.Services.Public } } - public async Task> BillQueryForInventory(List<(string materialNumber, string orgCode, string stockCode, int subStockId)> request) + public async Task> BillQueryForInventory(List<(string orgCode, string stockCode)> request) { try { @@ -2648,51 +2648,76 @@ namespace WMS.Web.Domain.Services.Public //3.获取金蝶采购订单:拼接参数和条件 var query = new ErpBillQueryDto(token_result.Data); var param = new ErpBillQueryParamDto(FormIdParam.STK_Inventory.ToString()); - param.FieldKeys = "FBASEQTY,FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber,FSTOCKLOCID"; - param.Limit = 100; - //param.FilterString = $"FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}'"; - //param.FilterString = $""; + // ORICO_AD,FF100004 ORICO_GD,FF100005 ORICO_HD,FF100007 ORICO_JD,FF100008 + param.FieldKeys = "FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber,FLot.FNumber,FBASEQTY,FSTOREURNOM,FSTOREURNUM,FSTOCKLOCID.FF100004.FName,FSTOCKLOCID.FF100005.FName,FSTOCKLOCID.FF100007.FName,FSTOCKLOCID.FF100008.FName"; + param.Limit = 10000; + //param.FilterString = $" FMATERIALID.FNumber='G01-11-572474' and FSTOCKID.FNumber='AD' and FBASEQTY>0"; + param.FilterString = $" FBASEQTY>0"; for (int i = 0; i < request.Count(); i++) { if (i == 0) { - param.FilterString = $"(FMATERIALID.FNumber='{request[0].materialNumber}' and FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}' and FSTOCKLOCID={request[0].subStockId})"; + param.FilterString += $" and ((FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}' )"; + if (request.Count() == 1) param.FilterString += ")"; } else { - param.FilterString += $" or (FMATERIALID.FNumber='{request[i].materialNumber}' and FSTOCKORGID.FNumber='{request[i].orgCode}' and FSTOCKID.FNumber='{request[i].stockCode}' and FSTOCKLOCID={request[i].subStockId})"; + param.FilterString += $" or (FSTOCKORGID.FNumber='{request[i].orgCode}' and FSTOCKID.FNumber='{request[i].stockCode}' ))"; } } - query.Data = JsonConvert.SerializeObject(param); - var json = JsonConvert.SerializeObject(query); - - //4.请求查询接口 - var result_json = await _client.ExecuteBillQueryAsync(json); - var result = JsonConvert.DeserializeObject>>(result_json); + bool isHave = true; var erp_list = new List(); - foreach (var item in result) + int skip = 0; + + + while (isHave) { + //4.1.页码:页码按照金蝶的要求从0开始 + param.StartRow = (Convert.ToInt32(skip) * param.Limit); - var lis = erp_list.FirstOrDefault(f => f.MaterialNumber.Equals(item[1]) - && f.OrgCode.Equals(item[2]) - && f.StockCode.Equals(item[3])); + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); - if (lis == null) + //4.请求查询接口 + var result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + //4.4.判断数据是否全部拉取完成:并停止循环的条件 + if (result == null || result.Count == 0) + isHave = false; + + foreach (var item in result) { - lis = new ErpInventoryDto(); - lis.Qty = Convert.ToDecimal(item[0]); - lis.MaterialNumber = item[1]; - lis.OrgCode = item[2]; - lis.StockCode = item[3]; - lis.Erp_SubStockId = Convert.ToInt32(item[4]); - erp_list.Add(lis); - } - else - lis.Qty = lis.Qty + Convert.ToDecimal(item[0]); - } + string name = GetName(item[7], item[8], item[9], item[10]); + var lis = erp_list.FirstOrDefault(f => f.MaterialNumber.Equals(item[0]) + && f.OrgCode.Equals(item[1]) + && f.StockCode.Equals(item[2]) && f.Erp_SubStockName.Equals(name)); - return ResultList.ReSuccess(erp_list); + if (lis == null) + { + lis = new ErpInventoryDto(); + lis.MaterialNumber = item[0]; + lis.OrgCode = item[1]; + lis.StockCode = item[2]; + lis.Batch = item[3]; + //查询库存单位数量FQTY:FMaterialid.FSTOREURNOM,FMaterialid.FSTOREURNUM, + //查出结果后用(FBASEQTY*FSTOREURNOM/FSTOREURNUM)计算得到库存单位数量。 + lis.BeforeQty = Convert.ToDecimal(item[4]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6]); + //lis.Qty= Convert.ToDecimal(item[10]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6]); + lis.Erp_SubStockName = name; + erp_list.Add(lis); + } + else + { + lis.BeforeQty = lis.BeforeQty + (Convert.ToDecimal(item[4]) * Convert.ToDecimal(item[5]) / Convert.ToDecimal(item[6])); + //lis.Qty = lis.Qty + Convert.ToDecimal(item[5]); + } + } + //4.6页面的叠加 + skip++; + } + var list = erp_list.Where(w => w.BeforeQty > 0 || w.Qty > 0).ToList(); + return ResultList.ReSuccess(list); } catch (Exception ex) { @@ -2700,9 +2725,16 @@ namespace WMS.Web.Domain.Services.Public return ResultList.ReFailure(ResultCodes.Erp_Inventory_Error); } } + - - + public string GetName(string name1,string name2,string name3,string name4) + { + if (!string.IsNullOrEmpty(name1)) return name1; + if (!string.IsNullOrEmpty(name2)) return name2; + if (!string.IsNullOrEmpty(name3)) return name3; + if (!string.IsNullOrEmpty(name4)) return name4; + return ""; + } #endregion } diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index 76440189..80a2220e 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -262,14 +262,14 @@ namespace WMS.Web.Domain.Services int subStockId = subs.Data.FirstOrDefault(w => w.OrgCode.Equals(d.OrgCode) && w.StockCode.Equals(d.Erp_SubStockCode))?.Id ?? 0; requestInventory.Add((d.MaterialNumber, d.OrgCode, d.StockCode, subStockId)); }; - var res_s = await sc_erpService.BillQueryForInventory(requestInventory); - if (!res_s.IsSuccess) - { - entity.Sync(false, res_s.Message, SyncStatus.Fail, ""); - await sc_takeStockRepositories.Edit(entity, true); - _logger.LogInformation($"及时库存获取异常->错误:{res_s.Message} 数据: {JsonConvert.SerializeObject(entity)}"); - return Result.ReFailure(res_s.Message, res_s.Status); - } + //var res_s = await sc_erpService.BillQueryForInventory(requestInventory); + //if (!res_s.IsSuccess) + //{ + // entity.Sync(false, res_s.Message, SyncStatus.Fail, ""); + // await sc_takeStockRepositories.Edit(entity, true); + // _logger.LogInformation($"及时库存获取异常->错误:{res_s.Message} 数据: {JsonConvert.SerializeObject(entity)}"); + // return Result.ReFailure(res_s.Message, res_s.Status); + //} //组装dto #region 组装dto //子仓库 ORICO_JD:1000008 GD:1000005 HD:1000007 AD:1000004 @@ -278,9 +278,10 @@ namespace WMS.Web.Domain.Services { int subStockId = subs.Data.FirstOrDefault(w => w.OrgCode.Equals(d.OrgCode) && w.StockCode.Equals(d.Erp_SubStockCode))?.Id ?? 0; var number = d.MaterialNumber; - var erpInventory = res_s.Data.FirstOrDefault(f => f.MaterialNumber == number && f.StockCode == d.StockCode - && f.OrgCode == d.OrgCode && f.Erp_SubStockId == subStockId); - decimal qty = erpInventory?.Qty ?? 0; + //var erpInventory = res_s.Data.FirstOrDefault(f => f.MaterialNumber == number && f.StockCode == d.StockCode + //&& f.OrgCode == d.OrgCode && f.Erp_SubStockId == subStockId); + //decimal qty = erpInventory?.Qty ?? 0; + decimal qty = 0; var unitNumber = _erpBasicDataExtendService.GetMaterialUnitNumber(materials, d.MaterialNumber); detils.Add(new ErpTakeStockDetailsSaveDto() { From 6189bc29120cf6100fefa52080e4095681915e4c Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 18 Oct 2024 14:45:42 +0800 Subject: [PATCH 08/60] =?UTF-8?q?=E8=81=9A=E6=B0=B4=E6=BD=AD=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes src/WMS.Web.Api/Controllers/TestController.cs | 14 +- src/WMS.Web.Api/appsettings.json | 6 + src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 86 +++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 24 ++ .../Dto/JuShuiTan/JuShuiTanInventoryRequst.cs | 36 +++ .../JuShuiTan/JuShuiTanInventoryResponse.cs | 55 +++++ .../Dto/JuShuiTan/JuShuiTanStockRequst.cs | 21 ++ .../JuShuiTan/JuShuiTanStockResResponse.cs | 13 ++ .../Dto/JuShuiTan/JuShuiTanStockResponse.cs | 21 ++ .../IService/Public/IJuShuiTanService.cs | 16 ++ .../Options/JuShuiTanOptions.cs | 14 ++ .../Services/ProductInventoryService.cs | 91 +++++++- .../Services/Public/JuShuiTanService.cs | 218 ++++++++++++++++++ .../DependencyInjection/AppBuilder.cs | 5 +- 15 files changed, 607 insertions(+), 13 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryRequst.cs create mode 100644 src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryResponse.cs create mode 100644 src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockRequst.cs create mode 100644 src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResResponse.cs create mode 100644 src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResponse.cs create mode 100644 src/WMS.Web.Domain/IService/Public/IJuShuiTanService.cs create mode 100644 src/WMS.Web.Domain/Options/JuShuiTanOptions.cs create mode 100644 src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index e1dbf467c2fed9dfe4596e91234d8ebac7117f45..49033e0ef335f56c508069ba2525917df47212ba 100644 GIT binary patch literal 275060 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

    $7F3K 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%0D8+kx@aMJsUa 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 options, ILoginService loginService, ISendMessageService sendMessageService, ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService, IInStockTaskRepositories inStockTaskRepositories, IWebHostEnvironment env, IMaterialService materialService, IOutStockRepositories outStockRepositories, IInStockService inStockService, ILingXingService lingXingService - , IProductInventoryService productInventoryService) + , IProductInventoryService productInventoryService, IJuShuiTanService juShuiTanService) { _inStockService = inStockService; _redisConcurrentProcessService = redisConcurrentProcessService; @@ -94,6 +95,7 @@ namespace WMS.Web.Api.Controllers _env = env; _lingXingService = lingXingService; _productInventoryService = productInventoryService; + _juShuiTanService = juShuiTanService; } [HttpGet] @@ -108,10 +110,12 @@ namespace WMS.Web.Api.Controllers //var m2 = my2.Object; //var md = m2.code; - List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); - request.Add(("101", "CK001")); - request.Add(("101", "CK002")); - var list = await _erpService.BillQueryForInventory(request); + //List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); + //request.Add(("101", "CK001")); + //request.Add(("101", "CK002")); + //var list = await _erpService.BillQueryForInventory(request); + + await _juShuiTanService.GetTest(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index 7b63d062..0cfe7887 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -51,6 +51,12 @@ "AppId": "ak_QGK2J8TssERmu", "AppSecret": "n/HUKD2wVdTbvhnFZbVBPw==" }, + "JuShuiTanOptions": { + "Url": "https://openapi.jushuitan.com", + "AppKey": "17231841286c45f99eb9acf445404349", + "AppSecret": "5ce9641ae6db4abb8b96eea7df6a81e9", + "AccessToken": "4605358c37374780a8a4395e6cdb1c3f" //一年后过期(2025/10/18) + }, "Qiniu": { "AccessKey": "dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms", "SecretKey": "KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q", diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index d3357fe3..c2dee348 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -3979,6 +3979,92 @@ wms箱ID + +

    + 页码 + +
    + + + 页条数 + + + + + 仓库Id + + + + + 开始时间 + + + + + 结算时间 + + + + + 商品 + + + + + 总量 + + + + + 可用数:可用数[同步线上的库存数]= + 主仓实际库存-订单占有数+虚拟库存+采购在途(业务设置)+进货仓(业务设置)+销退仓库存(业务设置) + + + + + 订单占有数 + + + + + 虚拟库存 + + + + + 采购在途 + + + + + 销退仓库存 + + + + + 进货仓 + + + + + 页码 + + + + + 页条数 + + + + + 仓库id + + + + + 仓库名 + + 领星即时库存 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 9b51cd52..431439ff 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -5821,6 +5821,25 @@ + + + 金蝶 + + + + + + 聚水潭 + + + + + + + 领星 + + + 同步erp基础数据 @@ -6299,6 +6318,11 @@ + + + 调用接口 + + 领星服务接口 diff --git a/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryRequst.cs b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryRequst.cs new file mode 100644 index 00000000..591b36f5 --- /dev/null +++ b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryRequst.cs @@ -0,0 +1,36 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.JuShuiTan +{ + public class JuShuiTanInventoryRequst + { + /// + /// 页码 + /// + [JsonProperty("page_index")] + public int page_index { get; set; } = 1; + /// + /// 页条数 + /// + [JsonProperty("page_size")] + public int page_size { get; set; } = 30; + /// + /// 仓库Id + /// + [JsonProperty("wms_co_id")] + public int wms_co_id { get; set; } + /// + /// 开始时间 + /// + [JsonProperty("modified_begin")] + public string modified_begin { get; set; } + /// + /// 结算时间 + /// + [JsonProperty("modified_end")] + public string modified_end { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryResponse.cs b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryResponse.cs new file mode 100644 index 00000000..7b570426 --- /dev/null +++ b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanInventoryResponse.cs @@ -0,0 +1,55 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; +using Ubiety.Dns.Core.Common; + +namespace WMS.Web.Core.Dto.JuShuiTan +{ + public class JuShuiTanInventoryResponse + { + /// + /// 商品 + /// + [JsonProperty("sku_id")] + public string sku_id { get; set; } + [JsonProperty("wms_co_id")] + public int wms_co_id { get; set; } + /// + /// 总量 + /// + [JsonProperty("qty")] + public int? qty { get; set; } + /// + /// 可用数:可用数[同步线上的库存数]= + /// 主仓实际库存-订单占有数+虚拟库存+采购在途(业务设置)+进货仓(业务设置)+销退仓库存(业务设置) + /// + [JsonProperty("ky_qty")] + public int ky_qty { get; set; } + /// + /// 订单占有数 + /// + [JsonProperty("order_lock")] + public int? order_lock { get; set; } + /// + /// 虚拟库存 + /// + [JsonProperty("virtual_qty")] + public int? virtual_qty { get; set; } + /// + /// 采购在途 + /// + [JsonProperty("purchase_qty")] + public int? purchase_qty { get; set; } + /// + /// 销退仓库存 + /// + [JsonProperty("return_qty")] + public int? return_qty { get; set; } + /// + /// 进货仓 + /// + [JsonProperty("in_qty")] + public int? in_qty { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockRequst.cs b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockRequst.cs new file mode 100644 index 00000000..d18528a1 --- /dev/null +++ b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockRequst.cs @@ -0,0 +1,21 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.JuShuiTan +{ + public class JuShuiTanStockRequst + { + /// + /// 页码 + /// + [JsonProperty("page_index")] + public int page_index { get; set; } = 1; + /// + /// 页条数 + /// + [JsonProperty("page_size")] + public int page_size { get; set; } = 30; + } +} diff --git a/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResResponse.cs b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResResponse.cs new file mode 100644 index 00000000..2f187e00 --- /dev/null +++ b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResResponse.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.JuShuiTan +{ + public class JuShuiTanStockResResponse + { + public int code { get; set; } + public string msg { get; set; } + public object data { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResponse.cs b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResponse.cs new file mode 100644 index 00000000..3cfebdc3 --- /dev/null +++ b/src/WMS.Web.Core/Dto/JuShuiTan/JuShuiTanStockResponse.cs @@ -0,0 +1,21 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.JuShuiTan +{ + public class JuShuiTanStockResponse + { + /// + /// 仓库id + /// + [JsonProperty("wms_co_id")] + public int Id { get; set; } + /// + /// 仓库名 + /// + [JsonProperty("name")] + public string Name { get; set; } + } +} diff --git a/src/WMS.Web.Domain/IService/Public/IJuShuiTanService.cs b/src/WMS.Web.Domain/IService/Public/IJuShuiTanService.cs new file mode 100644 index 00000000..9b6af1ca --- /dev/null +++ b/src/WMS.Web.Domain/IService/Public/IJuShuiTanService.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.JuShuiTan; +using WMS.Web.Core.Internal.Results; + +namespace WMS.Web.Domain.IService.Public +{ + public interface IJuShuiTanService + { + Task GetTest(); + Task>> GetStock(); + Task>> GetInventory(List StockId); + } +} diff --git a/src/WMS.Web.Domain/Options/JuShuiTanOptions.cs b/src/WMS.Web.Domain/Options/JuShuiTanOptions.cs new file mode 100644 index 00000000..960b6ac9 --- /dev/null +++ b/src/WMS.Web.Domain/Options/JuShuiTanOptions.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Domain.Options +{ + public class JuShuiTanOptions + { + public string Url { get; set; } + public string AppKey { get; set; } + public string AppSecret { get; set; } + public string AccessToken { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 096d6cce..e4366235 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -27,13 +27,15 @@ namespace WMS.Web.Domain.Services private readonly ILingXingService _lingXingService; private readonly IBasicsRepositories _basicsRepositories; public readonly IBasicsRepositories _transactionRepositories; + public readonly IJuShuiTanService _juShuiTanService; public ProductInventoryService(IErpService erpService, ISingleDataService singleDataService, IErpBasicDataExtendService erpBasicDataExtendService, IProductInventoryRepositories repositories, ILingXingService lingXingService, IBasicsRepositories basicsRepositories, - IBasicsRepositories transactionRepositories) + IBasicsRepositories transactionRepositories, + IJuShuiTanService juShuiTanService) { _erpService = erpService; _singleDataService = singleDataService; @@ -42,9 +44,13 @@ namespace WMS.Web.Domain.Services _lingXingService = lingXingService; _basicsRepositories = basicsRepositories; _transactionRepositories = transactionRepositories; + _juShuiTanService = juShuiTanService; } - + /// + /// 金蝶 + /// + /// public async Task Erp() { //获取单点配置 @@ -93,12 +99,85 @@ namespace WMS.Web.Domain.Services return Result.ReFailure(ResultCodes.DateWriteError); return Result.ReSuccess(); } - - public Task JuShuiTan() + /// + /// 聚水潭 + /// + /// + /// + public async Task JuShuiTan() { - throw new NotImplementedException(); - } + //获取单点配置 + var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); + var listNames = r.Where(w => + w.ManagementSystem == 2 && !string.IsNullOrEmpty(w.WarehouseCodeOfJushuitan)) + .Select(s => s.WarehouseCodeOfJushuitan) + .ToList(); + //获取领星仓库 + var resStock = await _juShuiTanService.GetStock(); + if (!resStock.IsSuccess) return resStock; + var ids = resStock.Data.Where(w => listNames.Contains(w.Name)).Select(s => s.Id).ToList(); + //获取领星库存 + var resInventory = await _juShuiTanService.GetInventory(ids); + if (!resInventory.IsSuccess) return resStock; + + //物料 + var materials_result = await _erpService.BillQueryForMaterial(); + List materials = new List(); + if (materials_result.IsSuccess) + materials = materials_result.Data.ToList(); + + List inventoryList = new List(); + foreach (var item in resInventory.Data) + { + //如果物料不匹配 过滤 + var m = materials.FirstOrDefault(f => f.Specifications.Equals(item.sku_id)); + if (m == null) continue; + //找仓库 + var l_stock = resStock.Data.FirstOrDefault(f => f.Id == item.wms_co_id); + if (l_stock == null) continue; + var stock = r.FirstOrDefault(f => f.WarehouseCodeOfLingxing.Equals(l_stock.Name)); + if (stock == null) continue; + + var entity = new ProductInventory() + { + Type = ProductInventoryType.JushuiTan, + MaterialNumber = m.MaterialNumber, + Customer = "", + OrgCode = stock.Code, + StockCode = stock.ErpOrgCode, + Qty = item.ky_qty, + BeforeQty = item.qty ?? 0 + }; + inventoryList.Add(entity); + } + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + Result res_Rollback = Result.ReSuccess(); + bool isSuccess = true; + //修改库存 + //先删除之前的再添加 + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.Delete(ProductInventoryType.LingXing, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + if (res_Rollback.IsSuccess) + { + isSuccess = await _repositories.AddRange(inventoryList, false); + if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); + } + //提交事务 + isSuccess = _transactionRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction); + if (!res_Rollback.IsSuccess) return res_Rollback; + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + + return Result.ReSuccess(); + } + /// + /// 领星 + /// + /// public async Task LingXing() { //获取单点配置 diff --git a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs new file mode 100644 index 00000000..7fdf76ca --- /dev/null +++ b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs @@ -0,0 +1,218 @@ +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.JuShuiTan; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Options; + +namespace WMS.Web.Domain.Services.Public +{ + public class JuShuiTanService : IJuShuiTanService + { + private readonly IHttpClientService _httpClientService; + private readonly ILogger _logger; + private readonly IMemoryCache _memoryCache; + private int hours = 10;//过期时间 默认10小时 + private readonly JuShuiTanOptions _option; + + public JuShuiTanService(IHttpClientService httpClientService, ILogger logger, + IMemoryCache memoryCache, IOptions option) + { + this._memoryCache = memoryCache; + this._httpClientService = httpClientService; + this._logger = logger; + _option = option?.Value; + } + public async Task GetTest() + { + //await GetStock(); + var list = new List(); + list.Add(10923342); + await GetInventory(list); + } + + public async Task>> GetStock() + { + List list = new List(); + + JuShuiTanStockRequst request = new JuShuiTanStockRequst(); + var resContent = PostUrl("/open/wms/partner/query", JsonConvert.SerializeObject(request)); + JObject resData = JObject.Parse(resContent); + + if (Convert.ToInt32(resData["code"]) != 0) + _logger.LogInformation($"聚水潭获取仓库失败:{resData["msg"].ToString()}"); + string json = resData["data"]["datas"].ToString(); + var datas = JsonConvert.DeserializeObject>(json); + list.AddRange(datas); + + int count = Convert.ToInt32(resData["data"]["page_count"]); + for (int i = 1; i < count; i++) + { + request.page_index++; + resContent = PostUrl("/open/wms/partner/query", JsonConvert.SerializeObject(request)); + resData = JObject.Parse(resContent); + + if (Convert.ToInt32(resData["code"]) != 0) + _logger.LogInformation($"聚水潭获取仓库失败:{resData["msg"].ToString()}"); + json = resData["data"]["datas"].ToString(); + datas = JsonConvert.DeserializeObject>(json); + list.AddRange(datas); + } + return Result>.ReSuccess(list); + } + + + public async Task>> GetInventory(List StockId) + { + List list = new List(); + foreach (var id in StockId) + { + JuShuiTanInventoryRequst request = new JuShuiTanInventoryRequst(); + request.wms_co_id = id;//10923342; + request.page_size = 100; + request.modified_begin = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss"); + request.modified_end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + var resContent = PostUrl("/open/inventory/query", JsonConvert.SerializeObject(request)); + JObject resData = JObject.Parse(resContent); + + if (Convert.ToInt32(resData["code"]) != 0) + _logger.LogInformation($"聚水潭获取即时库存失败:{resData["msg"].ToString()}"); + string json = resData["data"]["inventorys"].ToString(); + var datas = JsonConvert.DeserializeObject>(json); + list.AddRange(datas); + + int count = Convert.ToInt32(resData["data"]["page_count"]); + for (int i = 1; i < count; i++) + { + request.page_index++; + resContent = PostUrl("/open/inventory/query", JsonConvert.SerializeObject(request)); + resData = JObject.Parse(resContent); + + if (Convert.ToInt32(resData["code"]) != 0) + _logger.LogInformation($"聚水潭获取即时库存失败:{resData["msg"].ToString()}"); + json = resData["data"]["inventorys"].ToString(); + datas = JsonConvert.DeserializeObject>(json); + list.AddRange(datas); + } + } + //主仓实际库存-订单占有数+虚拟库存+采购在途(业务设置)+进货仓(业务设置)+销退仓库存(业务设置) + foreach (var item in list) + { + item.qty = item.qty == null ? 0 : item.qty; + item.ky_qty = (item.qty ?? 0) - (item.order_lock ?? 0) + (item.virtual_qty ?? 0) + + (item.purchase_qty ?? 0) + (item.in_qty ?? 0) + (item.return_qty ?? 0); + } + var resList = list.Where(w => w.qty > 0 || w.ky_qty > 0).ToList(); + return Result>.ReSuccess(resList); + } + + /// + /// 调用接口 + /// + private string PostUrl(string urlStr, string biz) + { + Hashtable ht = new Hashtable(); + System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + string time = Math.Floor((System.DateTime.Now - starttime).TotalSeconds).ToString(); + string app_key = _option.AppKey;// "17231841286c45f99eb9acf445404349"; + string app_secret = _option.AppSecret;// "5ce9641ae6db4abb8b96eea7df6a81e9"; + string access_token = _option.AccessToken;// "4605358c37374780a8a4395e6cdb1c3f"; + + + //string biz = "{\"modified_begin\":\"2022-06-10 00:00:00\",\"modified_end\":\"2022-06-12 00:00:00\",\"page_index\":1,\"page_size\":30}"; + + ht.Add("access_token", access_token); + ht.Add("app_key", app_key); + ht.Add("biz", biz); + ht.Add("charset", "utf-8"); + ht.Add("timestamp", time); + ht.Add("version", "2"); + string sign = getSign(app_secret, ht); + ht.Add("sign", sign); + string posturl = _option.Url + urlStr; + Encoding datacode = Encoding.UTF8; + string paramData = GetParamData(ht); + return PostWebRequest(posturl, paramData, datacode); + } + + string getSign(string signKey, Hashtable param) + { + + ArrayList keys = new ArrayList(param.Keys); + keys.Sort(); //按字母顺序进行排序 + string resultStr = ""; + foreach (string key in keys) + { + if (key != null && key != "" && key != "sign") + { + resultStr = resultStr + key + param[key]; + } + } + resultStr = signKey + resultStr; + MD5 md5 = MD5.Create(); + byte[] rstRes = md5.ComputeHash(Encoding.UTF8.GetBytes(resultStr)); + string hex = BitConverter.ToString(rstRes, 0).Replace("-", string.Empty).ToLower(); + + return hex; + + } + + + private string PostWebRequest(string postUrl, string paramData, Encoding dataEncode) + { + string ret = string.Empty; + try + { + + byte[] byteArray = dataEncode.GetBytes(paramData); + //转化 + HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl)); + webReq.Method = "POST"; + webReq.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; + webReq.ContentLength = byteArray.Length; + + Stream newStream = webReq.GetRequestStream(); + newStream.Write(byteArray, 0, byteArray.Length); + //写入参数 + newStream.Close(); + + HttpWebResponse response = (HttpWebResponse)webReq.GetResponse(); + StreamReader sr = new StreamReader(response.GetResponseStream(), dataEncode); + ret = sr.ReadToEnd(); + sr.Close(); + response.Close(); + newStream.Close(); + } + catch (Exception ex) + { + + } + return ret; + } + + private string GetParamData(Hashtable ht) + { + string str = ""; + foreach (DictionaryEntry items in ht) + { + + str += items.Key.ToString() + "=" + System.Web.HttpUtility.UrlEncode(items.Value.ToString(), System.Text.Encoding.UTF8) + "&"; + } + + return str.Substring(0, str.Length - 1); + } + + } +} diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index d8490860..1d24b33e 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -184,7 +184,8 @@ namespace WMS.Web.Repositories.DependencyInjection Services.Configure(Configuration.GetSection("SmsOptions")); Services.AddOptions(); Services.Configure(Configuration.GetSection("LingXingOptions")); - + Services.AddOptions(); + Services.Configure(Configuration.GetSection("JuShuiTanOptions")); } @@ -349,7 +350,7 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); - + Services.AddTransient(); } } } From 958578d8a7fdbc0fae9d7c6ed927d6823bb8861f Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 18 Oct 2024 14:55:15 +0800 Subject: [PATCH 09/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../Services/ProductInventoryService.cs | 3 +++ 2 files changed, 3 insertions(+) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 49033e0ef335f56c508069ba2525917df47212ba..ccaca5217029d34f3c21fc87e508f06ed4c99f71 100644 GIT binary patch delta 3119 zcmai$3vg7`8OQhDlk9gy%ByVz0ycFzwu3g4-Ry3%Os5ltQUxInrsyz;vq?540*Qr0 zL?p{YMG%xk<;Ge;9tz~aBO$rq1A`A#1c5+!h}IWMu$1oSQcVle{!jLcOgqzdXMX$r z&Ue4_xaaQf+4H9coIf?d{+nK4x7yac{4vp-KyIWcCnr!?7!F6Wf}vnew74jkn_E;^ z?91^7iVL$sImKarB*zyi3IxN^tdfvF6wb}cF7!tN;i$(B=6J%+EmN)R#ohUq+nsM8 zP-9ApeZK6dFDDqv3J1gfY+qI&+voTBLc!cf$X^&K4u%RtMSIe> zLTJ$*&vwuXOuh}#1v@0S6Y(YRGI#~N3U-0lKs(qCUI%Z0H^C5(^GS!D7Bv0$g7?5a zuphh+4uFH;5a_#-3()vazfgl zO8Ya!{-}Ek@pE97bPAZ|m_AHOb1euZn&(c?w! zpV2lGodsr+zW{T6xGdxxd=L05cpJO}-UV@B`t8%PUBmdb0qT<67mJdM|Se{aoZ7Xj+G=tJu2WZqHhc3p7lgq8D~|_)E%2>i z8)ybCU^{39ZNT-qBiE^BJGLLi#gxYfti1X2&&x(EoAhrR5hZLy33U&SUr}paY~Z`; zhWM4-VR0#OS+CziJgwKK6VK@Na^ec(*sptue=j=dg#G@rUmw1fmgTyDKU>@;F(Q4w@N8&N!k45JbPn3QO zi0ecb5;u!3B5o6XhslpCY!U_G!#4*_Ficn7BinCKYwW zBSfFUbW-pKtVi@&%xouT{v)1&)INtfB)f`uwcN(@#5YO78sf2{Yl&}3YK+$rPmuI_ z;#);uAf6=pBJl(+=Gac$D%wWuitZpDCPVBbzDD#V;-87WOnj~AE5uiezDk@Sx{LT1qOsSA zr^w9h#CMABCca)OUMD^z8~+CJT~hESah4RkMVu+RhuAOrHgQ1o9emeB-z7dKgY6}b zq}~wg`P#ilTqFbUBQ6%*Ph2AUK5?n&0X%XU?I4yWo6hPH?GCaGB^m$W(J^ zZgel5Q@`{MX`!1FJ^R;c#O#l2#HF@zs@WUxr`*h&H2YJq&kFg4D#7)5J`UIGo1o^_ z8;ms=Yc$sAjJT+>vzoMdaLK<971Z;;VYBWDTasaGGHgqRW@q_Db*-EKtQu{()wimE L<$iNPRfqls*qa-@ delta 3854 zcmb7_3v^Re7KZNw?!HCn6wp!uX=OlXv9vU4)22*iwV)kQXc?X}tdUNd+(4jBY7#7< z5FQGO2(%~{2bG5?(DD+6tAo5mK@=*E&01gffA;~pl5^o$(uHG5Qj3JC(nd*~R9xuHac6nG_8cwS;nkcTSGLDdn&o!6T`tY;%5^w0 z99eF!-IeWiYPJl!C$rSr2yWL~Y5~M7LkgN9}DQ3>BFBXmZVyR9p)NGDS zx6NVmIvtsIPp(VTY|h+lo70h_IdgL}b91~lkHbmhW@dRbEi1>Bk(r&FRa)w@c{4IH zyk6?nDRk6rL!|ab+7M}1tK{~7(ZWMq!BJYcFz71RDg(i>At6WqW}?(d|7VE=`u1~T za-{umpWhRx4Ba(M3x<3F|2;YB8G=&apU`*UP+^9gSK#sZ!jyNF4GadxXznnD3N0A+ zX`$Y2TBW7s-7rL25sh_ESHBi^2ZEZbq9QZh)-~oN?_jOW+c)43yL^7l(>t%{U@dZe z!s?G)CH+G8jn~}c!miRXja<#!Z0Z*pf-(;DW)QxcNniGgLVus0Aa9}w{S z#?m1X)P{_Z+HA&rEDD2xay~0Uha38A>?5h+LAS=E*{0d{2?-6OgoMoaTR7^Zk)qAg zsrs2Zsolu7Li{6B*sKb|+r$pHZU@D8h@Hf{#CyapVmI+Vv4{A8_>kC3 z+$!i(_DjhTtNtMIF>#1EOngEdAwDHOBR(g-AigAy5>|g-5nmJkA-*BLCB7phn%gmo z#|dlR-&1U8i_|_rZ7ZIPKaa#Zw>q>su?kL6wAw!qf1vh0il+%{qGt$elGcRI5>{vD zi2oATPr{@&60NA-s{N(9^J=82P$6@a%+^2`2y2l45mv{y@kD+k{Sk4Is3Z0h2Z(yY zs%u!m-@1BdBUE(#Tim#uH`BmBk>?U|nYcn+C9V-a6GDO@?4bC2wmy-{tfONcrQW}{ z*xEbmEn83&6O6wdl-|meqy(eAB3~{_TV^dHedHoRFoo%+h*Aqv#*vEI5=)f&4o3P= z`Jyv#sZuRg;WDMjY>h7~xLmhMx(e^ ziG_9Xus$AMi-!&IFpvCISS1%?wQQzVi&yWK%(Q&-_I$HzzWK*|vs=E|T~AshtJ3R= zo>wg2Zv1(Xe2XN$q5t(o`GmO9n0-o46ZO9@mM4pw^r9hhhjxaNk4_?&ND}k0t!Q*# zB5#l)9>_+Fa66f>b(yi$t+ zC@^orgCbS{KHQ*#fT0E*1{@dH5fL8&th5@mn&SZ{u$%~(-6EcS6wt}?F~D9dCjsWM zoDA5TWdtyvNqNWtZuo}g2Dn7zbDx02+rzaEi(3;#3u3~P^5NY~Yx+ze5OQZ2=l^RV((v~qE zNNj5~&Q__>WF&1Fp%~cJ$8Ed3gI8V*TDx%uheNrAON%K{G$6`4- z`&r68N8Cg=Tx+5Ykw`3{oK7qxo+lcv&0chMwiWeRr{!MVS5kfzQA5-ctBEzlT4Ehx o-J0u-J*VZnm6XlUFSd%bG9;`O+h&PvM&fzdP>f5L<%!w<2MbLIDgXcg diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index e4366235..068c3a29 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -57,6 +57,7 @@ namespace WMS.Web.Domain.Services var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); var codes = r.Where(w => w.ManagementSystem == 1 || w.ManagementSystem == 4).Select(s => (s.Code, s.ErpOrgCode)).ToList(); + if (codes.Count() <= 0) return Result.ReSuccess(); var res = await _erpService.BillQueryForInventory(codes); if (!res.IsSuccess) return res; @@ -112,6 +113,7 @@ namespace WMS.Web.Domain.Services w.ManagementSystem == 2 && !string.IsNullOrEmpty(w.WarehouseCodeOfJushuitan)) .Select(s => s.WarehouseCodeOfJushuitan) .ToList(); + if (listNames.Count() <= 0) return Result.ReSuccess(); //获取领星仓库 var resStock = await _juShuiTanService.GetStock(); if (!resStock.IsSuccess) return resStock; @@ -186,6 +188,7 @@ namespace WMS.Web.Domain.Services w.ManagementSystem == 3 && !string.IsNullOrEmpty(w.WarehouseCodeOfLingxing)) .Select(s => s.WarehouseCodeOfLingxing) .ToList(); + if (listNames.Count() <= 0) return Result.ReSuccess(); //获取领星仓库 var resStock = await _lingXingService.GetStock(); if (!resStock.IsSuccess) return resStock; From 747257c7e7d8ca4134f7da3021fde577dc8fbff2 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 18 Oct 2024 16:48:52 +0800 Subject: [PATCH 10/60] =?UTF-8?q?=E9=87=91=E8=9D=B6=E4=BA=8C=E5=BC=80?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 16 +- src/WMS.Web.Api/appsettings.json | 5 +- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 17 + src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs | 10 +- .../IService/Public/IErpInventoryService.cs | 14 + src/WMS.Web.Domain/Options/ErpOptions.cs | 4 + .../Services/ProductInventoryService.cs | 5 +- .../Services/Public/ErpInventoryService.cs | 299 ++++++++++++++++++ .../Services/Public/ErpService.cs | 2 +- .../DependencyInjection/AppBuilder.cs | 1 + 10 files changed, 362 insertions(+), 11 deletions(-) create mode 100644 src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs create mode 100644 src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index d50e867e..91f1ddc1 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -64,12 +64,13 @@ namespace WMS.Web.Api.Controllers private readonly ILingXingService _lingXingService; private readonly IProductInventoryService _productInventoryService; private readonly IJuShuiTanService _juShuiTanService; + private readonly IErpInventoryService _erpInventoryService; public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories, IRedisConcurrentProcessService redisConcurrentProcessService, IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService, IBasicsRepositories basicsRepositories, IMemoryCache memoryCache, IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IOptions options, ILoginService loginService, ISendMessageService sendMessageService, ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService, IInStockTaskRepositories inStockTaskRepositories, IWebHostEnvironment env, IMaterialService materialService, IOutStockRepositories outStockRepositories, IInStockService inStockService, ILingXingService lingXingService - , IProductInventoryService productInventoryService, IJuShuiTanService juShuiTanService) + , IProductInventoryService productInventoryService, IJuShuiTanService juShuiTanService, IErpInventoryService erpInventoryService) { _inStockService = inStockService; _redisConcurrentProcessService = redisConcurrentProcessService; @@ -96,6 +97,7 @@ namespace WMS.Web.Api.Controllers _lingXingService = lingXingService; _productInventoryService = productInventoryService; _juShuiTanService = juShuiTanService; + _erpInventoryService = erpInventoryService; } [HttpGet] @@ -110,12 +112,14 @@ namespace WMS.Web.Api.Controllers //var m2 = my2.Object; //var md = m2.code; - //List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); - //request.Add(("101", "CK001")); - //request.Add(("101", "CK002")); - //var list = await _erpService.BillQueryForInventory(request); + List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); + request.Add(("101", "CK001")); + request.Add(("101", "CK002")); + var list = await _erpService.BillQueryForInventory(request); - await _juShuiTanService.GetTest(); + //await _juShuiTanService.GetTest(); + string codes = "AD"; + var b = await _erpInventoryService.Get(codes); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index 0cfe7887..a37022d5 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -37,9 +37,10 @@ }, "ErpOptions": { "EndpointAddress": "http://erp.orico.com.cn/k3cloud/ERPGW.asmx", //原:119.23.206.129 - "UserName": "mes", //测试账号密码 mes/A1B2C3Dh/ce20210909 正式账号密码 orico/A123321./Orico + "UserName": "mes", //测试账号密码 mes/A1B2C3Dh/ce20210909/666a6c4a522823 正式账号密码 orico/A123321./Orico "Password": "A1B2C3Dh.", - "ErpId": "ce20210909" + "ErpId": "ce20210909", + "ZhangTaoId": "666a6c4a522823" }, "OpsOptions": { "Url": "https://api.opsscm.test.f2b211.com/", //https://api.opsscm.test.f2b211.com/ diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 431439ff..cabb95dc 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4767,6 +4767,11 @@ erp-Id + + + 账号Id + + 领星配置 @@ -6018,6 +6023,18 @@ + + + + + + + + + + + + erp数据交互服务 diff --git a/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs index 30597164..173e7c87 100644 --- a/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs +++ b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Text; @@ -9,30 +10,37 @@ namespace WMS.Web.Core.Dto.Erp /// /// 物料编码 /// + [JsonProperty("FMATERIALNUMBER")] public string MaterialNumber { get; set; } /// /// 组织编码 /// + [JsonProperty("FSTOCKORGNUMBER")] public string OrgCode { get; set; } /// /// 仓库 /// + [JsonProperty("FSTOCKNUMBER")] public string StockCode { get; set; } /// /// 子仓库 /// + [JsonProperty("FSTOCKLOC")] public string Erp_SubStockName { get; set; } /// /// 批号 /// + [JsonProperty("FLOTNUMBER")] public string Batch { get; set; } /// /// 可用量 /// + [JsonProperty("FAVBQTY")] public decimal Qty { get; set; } = 0; /// /// 库存量 /// + [JsonProperty("FQTY")] public decimal BeforeQty { get; set; } = 0; } } diff --git a/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs b/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs new file mode 100644 index 00000000..e5fbb1f8 --- /dev/null +++ b/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.Erp; +using WMS.Web.Core.Internal.Results; + +namespace WMS.Web.Domain.IService.Public +{ + public interface IErpInventoryService + { + Task>> Get(string stockCodes); + } +} diff --git a/src/WMS.Web.Domain/Options/ErpOptions.cs b/src/WMS.Web.Domain/Options/ErpOptions.cs index f61280ea..588f3629 100644 --- a/src/WMS.Web.Domain/Options/ErpOptions.cs +++ b/src/WMS.Web.Domain/Options/ErpOptions.cs @@ -28,6 +28,10 @@ namespace WMS.Web.Domain.Options /// erp-Id /// public string ErpId { get; set; } + /// + /// 账号Id + /// + public string ZhangTaoId { get; set; } public readonly string cache_materail_all_key = "erp_materials_list_all"; public readonly string cache_materail_key = "erp_materials_list"; public readonly string cache_org_key = "erp_org_list"; diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 068c3a29..76bdd28e 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -28,6 +28,7 @@ namespace WMS.Web.Domain.Services private readonly IBasicsRepositories _basicsRepositories; public readonly IBasicsRepositories _transactionRepositories; public readonly IJuShuiTanService _juShuiTanService; + public readonly IErpInventoryService _erpInventoryService; public ProductInventoryService(IErpService erpService, ISingleDataService singleDataService, IErpBasicDataExtendService erpBasicDataExtendService, @@ -35,7 +36,8 @@ namespace WMS.Web.Domain.Services ILingXingService lingXingService, IBasicsRepositories basicsRepositories, IBasicsRepositories transactionRepositories, - IJuShuiTanService juShuiTanService) + IJuShuiTanService juShuiTanService, + IErpInventoryService erpInventoryService) { _erpService = erpService; _singleDataService = singleDataService; @@ -45,6 +47,7 @@ namespace WMS.Web.Domain.Services _basicsRepositories = basicsRepositories; _transactionRepositories = transactionRepositories; _juShuiTanService = juShuiTanService; + _erpInventoryService = erpInventoryService; } /// diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs new file mode 100644 index 00000000..5e2efb6f --- /dev/null +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -0,0 +1,299 @@ +using Microsoft.Extensions.Options; +using MySqlX.XDevAPI.Common; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.Erp; +using WMS.Web.Core.Dto.JuShuiTan; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Options; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Services.Public +{ + public class ErpInventoryService : IErpInventoryService + { + private ErpOptions _erpOptions; + public ErpInventoryService(IOptions erpOptions) + { + _erpOptions = erpOptions?.Value; + } + + private bool Login(HttpClientEx httpClient) + { + string baseUrl = _erpOptions.EndpointAddress.Replace("/ERPGW.asmx", ""); //"http://192.168.1.1/k3cloud";//服务器地址 + + httpClient.Url = string.Format("{0}/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc", baseUrl); + List Parameters = new List(); + Parameters.Add(_erpOptions.ZhangTaoId);//帐套Id + Parameters.Add(_erpOptions.UserName);//用户名 + Parameters.Add(_erpOptions.Password);//密码 + Parameters.Add(2052);//多语言:中文 + + httpClient.Content = JsonConvert.SerializeObject(Parameters); + string response = httpClient.AsyncRequest(); + var iResult = JObject.Parse(response)["LoginResultType"].Value(); + return iResult == 1 ? true : false; + } + public async Task>> Get(string stockCodes) + { + List list = new List(); + HttpClientEx httpClient = new HttpClientEx(); + var isSuccess = Login(httpClient); + string baseUrl = _erpOptions.EndpointAddress.Replace("/ERPGW.asmx", ""); + httpClient.Url = string.Format("{0}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc", baseUrl); + List Parameters = new List(); + var model = new InventoryParamModel(); + model.fstocknumbers = stockCodes; + //model.fmaterialnumbers = "G01-11-572474"; + model.isshowauxprop = true; + model.isshowstockloc = true; + model.pageindex = 1; + model.pagerows = 10000; + Parameters.Add(model); + + httpClient.Content = JsonConvert.SerializeObject(Parameters); + + string content = httpClient.AsyncRequest(); + JObject resData = JObject.Parse(content); + + if (resData["success"].ToString().ToLower() != "true") + return Result>.ReFailure(ResultCodes.Erp_Inventory_Error); + + string json = resData["data"].ToString(); + var datas = JsonConvert.DeserializeObject>(json); + list.AddRange(datas); + + int num = Convert.ToInt32(resData["rowcount"]) / 10000; + for (int i = 1; i <= num; i++) + { + model.pageindex++; + + httpClient.Content = JsonConvert.SerializeObject(Parameters); + + content = httpClient.AsyncRequest(); + resData = JObject.Parse(content); + + if (resData["success"].ToString().ToLower() != "true") + return Result>.ReFailure(ResultCodes.Erp_Inventory_Error); + + json = resData["data"].ToString(); + datas = JsonConvert.DeserializeObject>(json); + list.AddRange(datas); + } + + var blist = list.Where(w => w.Qty > 0 || w.BeforeQty > 0).ToList(); + + return Result>.ReSuccess(blist); + } + + } + class HttpClientEx + + { + + /// + + /// Seivice URL + + /// + + public string Url { get; set; } + + /// + + /// 内容 + + /// + + public string Content { get; set; } + + /// + + /// Cookie,保证登录后,所有访问持有一个Cookie; + + /// + + static CookieContainer Cookie = new CookieContainer(); + + + + /// + + /// HTTP访问 + + /// + + public string AsyncRequest() + + { + + HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest; + + httpRequest.Method = "POST"; + + httpRequest.ContentType = "application/json"; + + httpRequest.CookieContainer = Cookie; + + httpRequest.Timeout = 1000 * 60 * 10;//10min + + + + using (Stream reqStream = httpRequest.GetRequestStream()) + + { + + JObject jObj = new JObject(); + + jObj.Add("format", 1); + + jObj.Add("useragent", "ApiClient"); + + jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString()); + + jObj.Add("parameters", Content); + + jObj.Add("timestamp", DateTime.Now); + + jObj.Add("v", "1.0"); + + string sContent = jObj.ToString(); + + var bytes = UnicodeEncoding.UTF8.GetBytes(sContent); + + reqStream.Write(bytes, 0, bytes.Length); + + reqStream.Flush(); + + } + + using (var repStream = httpRequest.GetResponse().GetResponseStream()) + + { + + using (var reader = new StreamReader(repStream)) + + { + + return ValidateResult(reader.ReadToEnd()); + + } + + } + + } + + + + private static string ValidateResult(string responseText) + + { + + if (responseText.StartsWith("response_error:")) + + { + + return responseText.TrimStart("response_error:".ToCharArray()); + + } + + return responseText; + + } + + + + } + class InventoryParamModel + + { + + /// + + /// 库存组织编码,多个使用英文逗号【,】分隔 + + /// + + public string fstockorgnumbers { get; set; } + + + + /// + + /// 物料编码,多个使用英文逗号【,】分隔 + + /// + + public string fmaterialnumbers { get; set; } + + + + /// + + /// 仓库编码,多个使用英文逗号【,】分隔 + + /// + + public string fstocknumbers { get; set; } + + + + /// + + /// 批号编码,多个使用英文逗号【,】分隔 + + /// + + public string flotnumbers { get; set; } + + + + /// + + /// 是否查询仓位 + + /// + + public bool isshowstockloc { get; set; } + + + + /// + + /// 是否查询辅助属性 + + /// + + public bool isshowauxprop { get; set; } + + + + /// + + /// 当前页码 + + /// + + public int pageindex { get; set; } + + + + /// + + /// 每页显示行数 + + /// + + public int pagerows { get; set; } + + } + +} diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index d3d397d6..2103b6a6 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -2652,7 +2652,7 @@ namespace WMS.Web.Domain.Services.Public param.FieldKeys = "FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber,FLot.FNumber,FBASEQTY,FSTOREURNOM,FSTOREURNUM,FSTOCKLOCID.FF100004.FName,FSTOCKLOCID.FF100005.FName,FSTOCKLOCID.FF100007.FName,FSTOCKLOCID.FF100008.FName"; param.Limit = 10000; //param.FilterString = $" FMATERIALID.FNumber='G01-11-572474' and FSTOCKID.FNumber='AD' and FBASEQTY>0"; - param.FilterString = $" FBASEQTY>0"; + //param.FilterString = $" FBASEQTY>0"; for (int i = 0; i < request.Count(); i++) { if (i == 0) diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index 1d24b33e..e74e61a9 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -351,6 +351,7 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); + Services.AddTransient(); } } } From 9ac131f2862a97e887b75644c8bc287c9f40a319 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 18 Oct 2024 17:29:51 +0800 Subject: [PATCH 11/60] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes src/WMS.Web.Api/Controllers/TestController.cs | 2 +- src/WMS.Web.Api/appsettings.json | 2 +- .../IService/Public/IErpInventoryService.cs | 2 +- .../Services/ProductInventoryService.cs | 15 ++++++++++++--- .../Services/Public/ErpInventoryService.cs | 2 +- 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index ccaca5217029d34f3c21fc87e508f06ed4c99f71..3aac70a11f73110235631866a06505975d8b9411 100644 GIT binary patch delta 2580 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 F`~y+1Kgj?9 diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 91f1ddc1..5d177a25 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -119,7 +119,7 @@ namespace WMS.Web.Api.Controllers //await _juShuiTanService.GetTest(); string codes = "AD"; - var b = await _erpInventoryService.Get(codes); + var b = await _erpInventoryService.GetInventory(codes); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index a37022d5..2cf62c82 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -37,7 +37,7 @@ }, "ErpOptions": { "EndpointAddress": "http://erp.orico.com.cn/k3cloud/ERPGW.asmx", //原:119.23.206.129 - "UserName": "mes", //测试账号密码 mes/A1B2C3Dh/ce20210909/666a6c4a522823 正式账号密码 orico/A123321./Orico + "UserName": "mes", //测试账号密码 mes/A1B2C3Dh/ce20210909/666a6c4a522823 正式账号密码 orico/A123321./Orico/663a26829afbdd "Password": "A1B2C3Dh.", "ErpId": "ce20210909", "ZhangTaoId": "666a6c4a522823" diff --git a/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs b/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs index e5fbb1f8..65f01a97 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs @@ -9,6 +9,6 @@ namespace WMS.Web.Domain.IService.Public { public interface IErpInventoryService { - Task>> Get(string stockCodes); + Task>> GetInventory(string stockCodes); } } diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 76bdd28e..a0b82261 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -36,7 +36,7 @@ namespace WMS.Web.Domain.Services ILingXingService lingXingService, IBasicsRepositories basicsRepositories, IBasicsRepositories transactionRepositories, - IJuShuiTanService juShuiTanService, + IJuShuiTanService juShuiTanService, IErpInventoryService erpInventoryService) { _erpService = erpService; @@ -62,11 +62,20 @@ namespace WMS.Web.Domain.Services w.ManagementSystem == 1 || w.ManagementSystem == 4).Select(s => (s.Code, s.ErpOrgCode)).ToList(); if (codes.Count() <= 0) return Result.ReSuccess(); - var res = await _erpService.BillQueryForInventory(codes); + var str = string.Join(",", codes.Select(s => s.Code).ToList()); + + var res = await _erpInventoryService.GetInventory(str); if (!res.IsSuccess) return res; + //过滤掉不符合要求的组织和仓库组合 + List listOld = new List(); + foreach (var item in codes) + { + var zList = res.Data.Where(w => w.OrgCode == item.ErpOrgCode && w.StockCode == item.Code).ToList(); + listOld.AddRange(zList); + } List inventoryList = new List(); - foreach (var item in res.Data) + foreach (var item in listOld) { var entity = new ProductInventory() { diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index 5e2efb6f..838dc253 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -42,7 +42,7 @@ namespace WMS.Web.Domain.Services.Public var iResult = JObject.Parse(response)["LoginResultType"].Value(); return iResult == 1 ? true : false; } - public async Task>> Get(string stockCodes) + public async Task>> GetInventory(string stockCodes) { List list = new List(); HttpClientEx httpClient = new HttpClientEx(); From c7134674e38a89c8ded7364591a8b239219f1091 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 21 Oct 2024 10:00:57 +0800 Subject: [PATCH 12/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../Controllers/ProductInventoryController.cs | 20 ++++++++++++++- src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml | 6 +++++ .../IService/IProductInventoryService.cs | 2 ++ .../Services/ProductInventoryService.cs | 23 +++++++++++++++++- .../Services/Public/JuShuiTanService.cs | 10 +++++++- .../Services/Public/LingXingService.cs | 21 ++++++++++++++-- 7 files changed, 77 insertions(+), 5 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 3aac70a11f73110235631866a06505975d8b9411..3594c178f647095168e7d6563f1983ba80d70430 100644 GIT binary patch delta 309 zcmXBMJxT*X0EXe6nZhkB0%DUU7GjZV{(lY-5s{=xCkUCHnL})$SOu&?3b(ZsQVAxb zCKjH+#v|kaE*m5%1UII7-s0n1EgP$4WAq3CyPZrY;H!Houwcr18@$Xc$qaYWa!-X8 z%BX>IlG@BU#)OvEDxo>gC{>0iA{nOMCy>y@6c<;34c9#o*FE@&I)P$=t#j5B7KGx; zX*U?uw?TVql-Jg9=0#oD8{vq_>b>J3n1JiOOn^z61?j_sc+`jb1j(dbe9U2MnCCF& zIl8=w*FWe1g6E>OL5Iz0dRCRw^n1UYZELozxUE=pH;CbvbPPu29U6oCGT-Y|RaL&G W|Ge#(?^x`3FP=8&IJSS$x%dP5D0W%^ delta 454 zcmZ9FyGjE=6oz+qWKCfau(QxcEv)9YJG-TzQBkz9QV{ks^9qJo1Z@IV!NPq7Nh6x* zdci_00uo4LZ<7beFo6(3a5k%mp5pxf&-u2SyD zf)b5l7I4Z?=;>9A1g9|%33CJ$VThst>50cN#UvntavTfKiS-}K1aU*husmeUB+Gl| zbUM3hd5gd|mJ)bm&DF{kD=k;Rel^|x01FnpDo8w` option, IExportExcelService exportExcelServic) { + IProductInventoryRepositories repositories, IOptions option, + IExportExcelService exportExcelServic, IProductInventoryService roductInventoryService) { _loginService = loginService; _basicsRepositories = basicsRepositories; _repositories = repositories; _option = option?.Value; _exportExcelService = exportExcelServic; + _roductInventoryService = roductInventoryService; } /// @@ -100,5 +104,19 @@ namespace WMS.Web.Api.Controllers return Task.FromResult(Result.ReSuccess(res)); } + /// + /// 刷新数据 + /// + /// + [HttpPost] + [Route("Refresh")] + public async Task Refresh() + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return Result.ReFailure(ResultCodes.Token_Invalid_Error); + + return await _roductInventoryService.Refresh(); + } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 0e430568..f6c1bbe0 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -586,6 +586,12 @@ + + + 刷新数据 + + + 获取序列号信息 diff --git a/src/WMS.Web.Domain/IService/IProductInventoryService.cs b/src/WMS.Web.Domain/IService/IProductInventoryService.cs index 7acb4cc9..85b3aee9 100644 --- a/src/WMS.Web.Domain/IService/IProductInventoryService.cs +++ b/src/WMS.Web.Domain/IService/IProductInventoryService.cs @@ -12,5 +12,7 @@ namespace WMS.Web.Domain.IService Task LingXing(); Task Erp(); Task JuShuiTan(); + + Task Refresh(); } } diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index a0b82261..fce77817 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using NPOI.POIFS.FileSystem; using System; using System.Collections.Generic; @@ -29,6 +30,7 @@ namespace WMS.Web.Domain.Services public readonly IBasicsRepositories _transactionRepositories; public readonly IJuShuiTanService _juShuiTanService; public readonly IErpInventoryService _erpInventoryService; + private readonly ILogger _logger; public ProductInventoryService(IErpService erpService, ISingleDataService singleDataService, IErpBasicDataExtendService erpBasicDataExtendService, @@ -37,7 +39,8 @@ namespace WMS.Web.Domain.Services IBasicsRepositories basicsRepositories, IBasicsRepositories transactionRepositories, IJuShuiTanService juShuiTanService, - IErpInventoryService erpInventoryService) + IErpInventoryService erpInventoryService, + ILogger logger) { _erpService = erpService; _singleDataService = singleDataService; @@ -48,6 +51,7 @@ namespace WMS.Web.Domain.Services _transactionRepositories = transactionRepositories; _juShuiTanService = juShuiTanService; _erpInventoryService = erpInventoryService; + _logger = logger; } /// @@ -273,5 +277,22 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + + public async Task Refresh() + { + _logger.LogInformation($"同步成品仓库存->开始 {DateTime.Now}"); + + var res = await this.Erp(); + if(!res.IsSuccess)return res; + + res = await this.JuShuiTan(); + if (!res.IsSuccess) return res; + + res = await this.LingXing(); + if (!res.IsSuccess) return res; + + _logger.LogInformation($"同步成品仓库存->结束 {DateTime.Now}"); + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs index 7fdf76ca..ddf98708 100644 --- a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs +++ b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs @@ -12,7 +12,9 @@ using System.Net; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; +using WMS.Web.Core.Dto.Erp; using WMS.Web.Core.Dto.JuShuiTan; +using WMS.Web.Core.Help; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Options; @@ -26,7 +28,6 @@ namespace WMS.Web.Domain.Services.Public private readonly IMemoryCache _memoryCache; private int hours = 10;//过期时间 默认10小时 private readonly JuShuiTanOptions _option; - public JuShuiTanService(IHttpClientService httpClientService, ILogger logger, IMemoryCache memoryCache, IOptions option) { @@ -45,6 +46,10 @@ namespace WMS.Web.Domain.Services.Public public async Task>> GetStock() { + var stock_list = _memoryCache.Get>("jushuitan_stock"); + if (stock_list != null && stock_list.Count > 0) + return Result>.ReSuccess(stock_list); + List list = new List(); JuShuiTanStockRequst request = new JuShuiTanStockRequst(); @@ -70,6 +75,9 @@ namespace WMS.Web.Domain.Services.Public datas = JsonConvert.DeserializeObject>(json); list.AddRange(datas); } + + //设置缓存 + _memoryCache.Set("jushuitan_stock", list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); return Result>.ReSuccess(list); } diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index fd75cfd9..44876dcc 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -24,6 +24,7 @@ using System.Reflection; using WMS.Web.Core.Help; using static System.Net.WebRequestMethods; using WMS.Web.Domain.Values; +using WMS.Web.Core.Dto.JuShuiTan; namespace WMS.Web.Domain.Services.Public { @@ -71,6 +72,10 @@ namespace WMS.Web.Domain.Services.Public /// public async Task>> GetStock() { + var stock_list = _memoryCache.Get>("lingxing_stock"); + if (stock_list != null && stock_list.Count > 0) + return Result>.ReSuccess(stock_list); + //默认获取本地仓库 如果需要海外仓 另外需传参数type var request = new LingXingRequest(); var resUrl = await GetStr("/erp/sc/data/local_inventory/warehouse", request); @@ -79,7 +84,11 @@ namespace WMS.Web.Domain.Services.Public var res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(request), null); if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); - return Result>.ReSuccess(JsonConvert.DeserializeObject>(res.Data.ToString())); + var list = JsonConvert.DeserializeObject>(res.Data.ToString()); + //设置缓存 + _memoryCache.Set("lingxing_stock", list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); + + return Result>.ReSuccess(list); } /// @@ -89,6 +98,10 @@ namespace WMS.Web.Domain.Services.Public /// public async Task>> GetSeller() { + var seller_list = _memoryCache.Get>("lingxing_seller"); + if (seller_list != null && seller_list.Count > 0) + return Result>.ReSuccess(seller_list); + var request = new LingXingKongRequest(); var resUrl = await GetStr("/erp/sc/data/seller/lists", request); if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); @@ -96,7 +109,11 @@ namespace WMS.Web.Domain.Services.Public var res = await _httpClientService.GetAsync(resUrl.Data); if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); - return Result>.ReSuccess(JsonConvert.DeserializeObject>(res.Data.ToString())); + var list = JsonConvert.DeserializeObject>(res.Data.ToString()); + //设置缓存 + _memoryCache.Set("lingxing_seller", list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); + + return Result>.ReSuccess(list); } /// From 2b56446765dc81365b1aa159c1d3b7fbcfb11a42 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 21 Oct 2024 10:24:56 +0800 Subject: [PATCH 13/60] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E5=99=A8=E6=89=A7?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ProductInventoryController.cs | 8 ++-- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 7 +++ .../QuartzJob/InventoryQuartzJob.cs | 46 +++++++++++++++++++ .../DependencyInjection/AppBuilder.cs | 13 ++++++ 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs diff --git a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs index 89fc3756..a8927f55 100644 --- a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs +++ b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs @@ -34,16 +34,16 @@ namespace WMS.Web.Api.Controllers private readonly IProductInventoryRepositories _repositories; private readonly QiniuOptions _option; private readonly IExportExcelService _exportExcelService; - private readonly IProductInventoryService _roductInventoryService; + private readonly IProductInventoryService _productInventoryService; public ProductInventoryController(ILoginService loginService, IBasicsRepositories basicsRepositories, IProductInventoryRepositories repositories, IOptions option, - IExportExcelService exportExcelServic, IProductInventoryService roductInventoryService) { + IExportExcelService exportExcelServic, IProductInventoryService productInventoryService) { _loginService = loginService; _basicsRepositories = basicsRepositories; _repositories = repositories; _option = option?.Value; _exportExcelService = exportExcelServic; - _roductInventoryService = roductInventoryService; + _productInventoryService = productInventoryService; } /// @@ -116,7 +116,7 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); - return await _roductInventoryService.Refresh(); + return await _productInventoryService.Refresh(); } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index cabb95dc..7db0df75 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -5043,6 +5043,13 @@ + + + 执行方法 + + + + 物料同步执行定时任务 diff --git a/src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs b/src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs new file mode 100644 index 00000000..afc71b7d --- /dev/null +++ b/src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs @@ -0,0 +1,46 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Quartz; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Domain.IService; + +namespace WMS.Web.Domain.QuartzJob +{ + //成品即时库存 + public class InventoryQuartzJob : IJob + { + private readonly ILogger _logger; + private readonly IServiceScopeFactory _serviceScopeFactory; + private readonly IProductInventoryService _productInventoryService; + + public InventoryQuartzJob(ILogger logger, + IServiceScopeFactory serviceScopeFactory, IProductInventoryService productInventoryService) + { + this._logger = logger; + _serviceScopeFactory = serviceScopeFactory; + _productInventoryService = productInventoryService; + } + + /// + /// 执行方法 + /// + /// + /// + public async Task Execute(IJobExecutionContext context) + { + try + { + if (DateTime.Now.Hour < 8 || DateTime.Now.Hour > 20) return; + var result = await _productInventoryService.Refresh(); + } + catch (Exception ex) + { + _logger.LogInformation($"同步成品即时库存:定时任务执行失败->{ex.Message}"); + } + + } + } +} diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index e74e61a9..686ff939 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -203,6 +203,7 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient();//添加注入定时服务 Services.AddTransient();//添加注入定时服务 //Services.AddTransient();//添加注入定时服务 + Services.AddTransient();//添加注入定时服务 Services.AddQuartz(q => { q.UsePersistentStore(x => @@ -301,6 +302,18 @@ namespace WMS.Web.Repositories.DependencyInjection //.WithCronSchedule(CronScheduleBuilder.DailyAtHourAndMinute(options.JobStartHour[5], options.JobStartMinute[5])) .WithDescription("ErpDeleteQuartzJobTriggerDecs")); #endregion + + #region 成品即时库存 + var jobKey_Inventory = new JobKey("InventoryQuartzJob", options.QuartzJobValue); + q.AddJob(jobKey, j => j.WithDescription("InventoryQuartzJob")); + q.AddTrigger(t => t + .WithIdentity("InventoryQuartzJobTrigger") + .ForJob(jobKey) + .StartNow() + .WithCronSchedule(options.JobStartExpre) + //.WithCronSchedule(CronScheduleBuilder.DailyAtHourAndMinute(options.JobStartHour[5], options.JobStartMinute[5])) + .WithDescription("InventoryQuartzJobTriggerDecs")); + #endregion }); //.net core核心托管-添加Quartz服务器 Services.AddQuartzServer(options => From 7ee8c6580636a18326bead1c3827a80a1912c17a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 21 Oct 2024 14:32:22 +0800 Subject: [PATCH 14/60] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../IProductInventoryRepositories.cs | 2 + .../Mappers/ProductInventoryMapper.cs | 17 +++++++ .../Services/ProductInventoryService.cs | 22 ++++++-- .../ProductInventoryRepositories.cs | 47 ++++++++++++++++++ 5 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 src/WMS.Web.Domain/Mappers/ProductInventoryMapper.cs diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 3594c178f647095168e7d6563f1983ba80d70430..5c42c02b2dd40e7f390c872912d167970f40f616 100644 GIT binary patch delta 3311 zcmZve33ycH6^7^Do8%k>BcP>hNfD`9tC*R|Hk8`1NZCp(MQTyBlbH-CLNE{z5QarW z76l?YT5D@tt8Lh3l;sUsUI3I%oHZJEfAL7H)d7f|n_bmVUxBK6j zBYWE(+1u7RHpf}#I5VpUgo5R<%941jA{dNURK{bWa7|fdBvu*@1uNq5aI~~05{o2i zBeju4sHQYj7LP^CB9W3{Wwf?78m)~7+)ywONe#Ky2`@NW?WB)ZyIZ{h;fiQ1nkWfZ zmV{&B^0M+^S$Q~E8Vi-h5|L;yQETzqNU$_s6HJtrMQUPkD;JAahAK)E;Y2J{5^#f+ zfzGKuqnxwT#UtDi#jOTSm{L1oa$Wtj^r(9G%h5&aH4sRfHkjH50)fY^Z8mN6eW~f& z+)Il#8+NkLv(`RmdfxPc=|$7V)Fw+wzH0ci={3_X)9a=;OuJ2Qnq2F?$J)0{p7Gn( zp0pja-!a>7-(`HKwSGOnhM&Ke_C9ORGTWcZev?1T_cV|UY&GyZy>If1ePH^~^vy{e zF#DkC3@hMwwvPX|-$&*@*{{HI51H)`^s&hwBV+R8MVtuqyxhhdHs?1tCu_Ff(VyJ5 z)UIuAm&oZGb^3fy-?%~>!#|GPQMB`q!rv#qVxF}}(hu)&o5Rj0>1cu1GOX37=J!7@ zrxRCt`!9EcZmN2}*C{>bes8lR6H*ZL-OshtxWhHKqKAG0o;b5HL#*;i=FySQE2_~N8n*{YfXWC$rU^1~mP@c@oxu*y! ziBko=h&Ky*6Q>C-BTg4o5oZYc5^oXgbaKUJ3i{JKOE7?#6uicS*@D+|n8X~xZo20R z_7LX@hO^(Tf_sVc1&e0Th<6DB`MC-!1RrwlcMA>@?-3j#rUWi?@3oQXP2MNSkbfoU zz>NC^7ZHDL!!h9jn-B3fHnN)=`L}ik%ze|CJqx%uT6~sRYMiT!lXkxXMf>p%TfzN!NnYpo5eWI;zq@IMkbt!)LCSr;wDDwPemqKWO8c! zO0O>2pu^Chn442$)_Qxrs{b=S%TG^grXyx6 z=2*5lx@5X$iZaC+X>^uju2y57Vu9xyw`%_^7J8ZXjm|P`a~hq`Cpak2>zBTIm6z?D zTrd5y_HV*gHec=Co5f4U_VM{tWA=ux6K_*9P9+-qiMht0`Rl|5YR0KVV?Qz17<6^} zWz$H!xZ0S`G!>ebo3GJymuZEmvY-kP zQ!i6HC-uw$Z)B?`^ZWnQR;Ifh^e!prv|a|C*dAN5fxi{aJ~T^eQH$Fr{m5ajp`c`y z-L$-{{R&!Su9roV9YzYPbzs)MY_V&6TI17NpVp>^9{0k9kE(x4i!ApZJMYwr Wy42d^UXS$Bq23fXUDx8}mwyG#*qxgI delta 3358 zcmZXW3w)F16~^=BYkLm2iiixMRB?*TDYi+|G|ahj9RgCvu-lmEnkErZL8^#|5H2cL z1u8Ray3K8FbKG<~2nBV{Z3?0S6-7iq6p8|39#TOZ=+4(ZwftOuzbEhiocDRpd-*O& ze;jcxiRCxH?i2D~*=K1EI1|I1;W3$4Udy>R2oo z43(8eqv23lNlA4e5RMdwi%Ww=fq2~KFAn%3sbM!b!8s=?ob-tb{}y*pB2W}6ipFBm zcyTZh3YUaqWwEL%E1M{b2O{BkSu|1-jE9Vh;*n6SI8tr?SVlf$9dNEilsK1Hkn>E zZ8mwf*HZhH_e{G@ejC2W+Px;%_0{HGi#TNQVN+Wx;0@-${~LGYjB$D9 z{lsE#qN65nj!#Wq-5y*>#(1M9eLfhRc{s-`_6FMOd|OQ0O!cNWO2j>irZ?96*9V=(^z1zM)QC2pS>F59 zr{`YhHVkr#(i0wa_et_~ryL0>#}=o2#*E`MEv)qUGQQav2mYLli<=~qi?Q-~*G!vQ z=hO<^Ed4U=Q14)z;FcD?Rd8Dij~7g6;oAihJ4Kd!Bn7*OGX%-qxgp%FB0bpULejByiA-gXe2HW9Baa4dn^X>c7JNZmBKVS6EAZtu@A+ZDA+CL?;0W=Tf}_Mo1b%u`HZ!x!1eqlHSAs5d{914+ z@ll(OhR19@#NXJ={^pr~YuA9@-`O0@J}&q@xA6zT5E}j{7)pFXFuWO)_>*7+(|;CR zOZ2|5v13#PlxOM6N%i}h&Cd!( zbGp9^)^Lusf;4fRppLj+P{0x!1Q!yY6I?`mUeJs9f}oK255Wb*7X`hE$$tv2=gcn& z#t{D{xQvc}3%2p#|0B4OhL;6JG`u3{L)<6`5H|@*h_BkSM%*me!D6oos&e}!n;yH@ z1=TG4h9E}VB1jOo3dRz**(GPSdcm7KlrQt=bwPZd8Sj#m7fc)el_@dm|>#9t_?S`IU+sAf8*h!YcvJ~_3{ z;#BwkZm%4>R5ztMuW*CcjMbr8``~8vnrz0O#W>C47R9aXxvjNly!A{_+|Hhftvxl? zbBCs$%yGviGo5RlTHL84Oqitho#}$R6q6NqE2fy!^7kmFD(=-xA*N}6ThBx>@P5~) zdG_g=>58OchPf@#JyVeBktxhbt+NC(wF0vgb6hW&tpl@|=Vm(D-mulFbxx<3<~@M zvgt#6{N0^&{w8-^LEap-4bDwXKj8N1Jx+(2g~x3)zA5G*TU^r=Pt;VGJa_wu~1Yvk&tGqZCr@Xn{sgSzyBV{SSx zxIz)g$=dIu2A2Pr2>ReM-H{Hs8iP jVmH7b?-ZZb)Uzkuo~iby-NN*O;qGJp^n_DxZt4F3;fSWk diff --git a/src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs index 99021660..fa0bcd53 100644 --- a/src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IProductInventoryRepositories.cs @@ -29,6 +29,8 @@ namespace WMS.Web.Domain.Infrastructure /// /// Task Delete(ProductInventoryType type, bool isTransaction = true); + Task EditEntityList(List entitys, bool isTransaction = true); + Task> GetEntityList(ProductInventoryType type); /// /// 列表-分页 /// diff --git a/src/WMS.Web.Domain/Mappers/ProductInventoryMapper.cs b/src/WMS.Web.Domain/Mappers/ProductInventoryMapper.cs new file mode 100644 index 00000000..182a829a --- /dev/null +++ b/src/WMS.Web.Domain/Mappers/ProductInventoryMapper.cs @@ -0,0 +1,17 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core.Dto.Erp; +using WMS.Web.Domain.Entitys; + +namespace WMS.Web.Domain.Mappers +{ + public class ProductInventoryMapper : Profile + { + public ProductInventoryMapper() + { + CreateMap().ReverseMap(); + } + } +} diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index fce77817..94d6c0c0 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -130,6 +130,9 @@ namespace WMS.Web.Domain.Services .Select(s => s.WarehouseCodeOfJushuitan) .ToList(); if (listNames.Count() <= 0) return Result.ReSuccess(); + //获取原数据 + var yList = await _repositories.GetEntityList(ProductInventoryType.JushuiTan); + //获取领星仓库 var resStock = await _juShuiTanService.GetStock(); if (!resStock.IsSuccess) return resStock; @@ -139,6 +142,8 @@ namespace WMS.Web.Domain.Services var resInventory = await _juShuiTanService.GetInventory(ids); if (!resInventory.IsSuccess) return resStock; + + //物料 var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); @@ -146,6 +151,7 @@ namespace WMS.Web.Domain.Services materials = materials_result.Data.ToList(); List inventoryList = new List(); + List update_List = new List(); foreach (var item in resInventory.Data) { //如果物料不匹配 过滤 @@ -167,7 +173,17 @@ namespace WMS.Web.Domain.Services Qty = item.ky_qty, BeforeQty = item.qty ?? 0 }; - inventoryList.Add(entity); + + var old_Entity = yList.FirstOrDefault(f => f.MaterialNumber.Equals(entity.MaterialNumber) && + f.OrgCode.Equals(entity.OrgCode) && f.StockCode.Equals(entity.StockCode)); + if (old_Entity != null) + { + old_Entity.Qty = entity.Qty; + old_Entity.BeforeQty = entity.BeforeQty; + update_List.Add(old_Entity); + } + else + inventoryList.Add(entity); } IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); Result res_Rollback = Result.ReSuccess(); @@ -176,7 +192,7 @@ namespace WMS.Web.Domain.Services //先删除之前的再添加 if (res_Rollback.IsSuccess) { - isSuccess = await _repositories.Delete(ProductInventoryType.LingXing, false); + isSuccess = await _repositories.EditEntityList(update_List, false); if (isSuccess == false) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); } if (res_Rollback.IsSuccess) @@ -283,7 +299,7 @@ namespace WMS.Web.Domain.Services _logger.LogInformation($"同步成品仓库存->开始 {DateTime.Now}"); var res = await this.Erp(); - if(!res.IsSuccess)return res; + if (!res.IsSuccess) return res; res = await this.JuShuiTan(); if (!res.IsSuccess) return res; diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs index f97e08ec..ecea21f5 100644 --- a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -19,6 +19,8 @@ using WMS.Web.Core.Dto.OutStockTask; using WMS.Web.Domain.Values.Single; using WMS.Web.Core; using NPOI.SS.Formula.Functions; +using WMS.Web.Domain.Mappers; +using WMS.Web.Core.Help; namespace WMS.Web.Repositories { @@ -173,5 +175,50 @@ namespace WMS.Web.Repositories var (list, count, qty) = await GetListAsync(dto, companyId); return (list, count); } + /// + /// 批量修改 + /// + /// + /// + /// + public async Task EditEntityList(List entitys, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + List list = entitys.Select(s => s.Id).ToList(); + + var res = await _context.ProductInventory + .Where(f => list.Contains(f.Id)).ToListAsync(); + + _mapper.ToMapList(entitys, res); + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + return true; + + } + /// + /// 获取数据 + /// + /// + /// + public async Task> GetEntityList(ProductInventoryType type) + { + var res = await _context.ProductInventory + .Where(f => f.Type==type) + .ToListAsync(); + + return res.Clone(); + } } } From a00e01332a494b5f3eda89f747cb9f68515d5c6c Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 22 Oct 2024 09:57:41 +0800 Subject: [PATCH 15/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../ProductInventoryRepositories.cs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 5c42c02b2dd40e7f390c872912d167970f40f616..ef3c8f3ede6d4855d55683464d2677858b6b271a 100644 GIT binary patch delta 4373 zcmb7`33yc1702Jam(00gldTXSkU-HY#V}h!Vk1oeBdCNF5GzILWabSFgqb**u*GArUf#SZV z$7NOp9Hwa&y8NC%z~u{gJzl5B<8(Tl9!+=k)r#ZS-fVNvJ3iEwI6hS0Zj=YAiaiCM zf-0w3P!RCCybjY}?(Boye^lku&BW2C~|t8KEEqayx z2UK3K-C>lJ`TfBt+r8DCVZ7;!a>EIuL9@1B%Vv3bB|nIsSHWqn>=81fzHr3k#kupH zJsLdOceq&{7!VFcy}^*_?^n`ixEX6|u;Q`Tn8CGIO)-6SQEyeX$zB)s#c6Quu%N$e zY$#kC4f^^;BXwp;p9^i`IDA~VuG-(<9OLx zykIjocx#8(n7&{j*s!rNKR#$pFX_`*wO(>4T%nRaKUHfjd&%NO+08Y|_tn<$NoYOJ z9U|#kZoK;uTW;JlO&?(EWewye9-5{nN5rxR@xp?kvDIc{MoFl3NE<4vz0p88GI2;a z6r8|UKvRttE%$=;$f1`%uUgdT(>owNvtSziJSX)_d zvbM3_Vr^&bV0GdcJGtG(dYiSIwTETJdxy1GX)*0xhJCE}SnsnwV13B?i1jh+6V|6J zE5T>1&sqCf2UrJLU$Ase^d-0dVObkF#BF2W#{I9jZ?%VI+=^|*JD_6e3I7$t5pFMH zM{Ctzv#gaSS=J)0NnlyQjflAL5& zfxF5=zGJpZc#74ujHkJ8&1Pk&MTFIYvBiWn!uJw32-XwU2`(XQ7QByeOz?ifQNg8zZw2F=PU`a@;j~yE zB77(KFyXA=BLpq8EY?uhM+t{y@qZ#57JQ6wMDTHfo|&%CpE4o?z# z3I3JSiNoJ`J%WGd%z8T5GCsTh;`|TJA?BwD%Vi%c2!q7oX~H#v&k(K?e3nol_#B~9 z@Oi>W!Igv;B-o3DRf4MttvFlEx>gB7TgkkJFw;n{Z7pGr;6DlN#o;C1sNlZ{ody3* z7$xb}5!OqN4TOz?FB3KizCy^6X|MAA?;*UI&{Oa=!X<*Q6S@g*A>;|ZLAX?KD`B)` zev@#M;5I^Uad?ZcQwqPGFh(495FD06jJLm&kT1@=2rj|52_C`S{9O~=L)a_P-XVA; z+FpWB@Lhsma33Kc_#R=L;QM^y66^!Q&<~|5AMy7`@DrXV9-k6E6YJ-M{elPh7fGTW zBzz&(F9}cT@ixnh+*nekA0d1#qe%h;j}lUX#|YmDeoHtmc!F?J@H@gO!PA5@f@cZe z3u+2BmA){#LS4hM+O~k9Fjpx}6g34+xM69q#G zVZj=O{ET|r;&_+-#w8j26}~0je!1Zu5>eNr_(83*np9FxA*xcSQksa;u6j%P_{plI`nl^_Z!KvJg}J$^ZYe6lN>TQJBk~Y`;z6c7;1svK!{9 z{=A;)#9;kh&$Ha`RLN}2S6IN_Y>>BwWW$@rLRE>o6y_P$YscMcU<&h%WLw@FcG&7| zXA;v_7$-Z&*3*C#zcBFD?os^nn!;{oek?xUaDU@D$3==e=N*|X$8^K6>73(Y#hvqx z%$8%iVaU-3q!Ncd(!1Cat+p8BbL{sj-e7%v<^d!B(x|$YU8LMhQyThGWbV&s=ucPi z4t8TuJm;Vhu`Nj~I%urWo86~MaX)LRN{k$4jL<9M+{xfKuuPVnMJ&a7fb9>mnlrax zwPdwoJ;b($S&y(DWfj>=QOvr6)y5WYe%L6yY&qLku%2c;!+MtW9P4@3O4bW3>+SEw zMEPOka(niA8r)D*t`mb*zfBfwN-R8TB<${03a*S4|1Gj@j*-Gsd}?v5R)bRf!Bt6E yl(1-xMQfPiqq2;P<6BP~&0DQi*0C<&IZOG1#J@UibhoXG+s_z16Ol89UhqE#M&>L4 delta 3701 zcmb7`36xaT5r+G{H`7%tBI|@5B*YMc*vo893>j8ggfRwC34%S{Goqm2AR=qChzNqh zAUs?X6HKBYC<4tQn+uAdz`y{Ch$t$H%KL2uL`YJ1x<*J&a!&Hj`MbVbw{F#4`o8Yd zM{A!xTH8LyQ|wi?HKDM3D3}||55!}6!C*WuKOPH(i*oWKvFvatm=}+SquE7~Sfr#l zQXDA>6=jEV;<0E>BoYYbM~jQ2(c-wz4h4M?xA$NxJmYMkl{{N$?{vC{^P;h6Ng$jb z2*<*?Ik~}{+;A{E7Rrg0M54ixV(BlA1heBs!IJEpNKq^<>0;6RP+oRPxFi+|`0QZ5 zud&-{pj9u~qMtphX>!L%dv-N<joy;Es|LiZLgmdc1KRIo6Ik8GTm+E z_N`W)X}5CcjrSKn)5H;6WhHiGrn%XAKl{X}G@dPHnh+miOD(l+)p?KiniK9j@5A7x*n(($=Ct`x^RV!sfXwS6ht zDKdkOiA=KNq7$OaCvj5RUx}*Acr*6Djr;ntaej&YM%wE+;q#pmFhx8KXr>c^w6}@A z6}>CkF4`eViOdAe`qZ8j6i5PO=F_C9-U z*#3@_8>%@!^lf=Ydd#!0k1W$S&9h)goKg3qgvWG)<`OQbcOK!qVj1D@it`D+%=DTc zC!El^FCcuSxRCITqD!zfc9B$8?-K+sq5LEvOCz2lv{igs%4xteG9SffrLvu_{0BJ$ zjs2t4Q15euKj||5Oz5EjiwV6HpC{aq#svOC=&SC(5^hxd8)1Or3xpRn+Y-W3#g_=R zwA?a6UB%^uNltodFB7IJzCx(40V`ykimwtH+lh4WO2R-bw@MCIYb51x71t8hDXu3p z)fBH0S}ATIv{u|mxLR=&p}FE_LQBOhgf@za*9n8P@*9NP6yGGY(}=eSyLIEY5{78N z+k}7yyhCWOxQ!4}e3y`|xLxj=;ts-oP4*rkn%OB)dF|dO#5D0vLR@hdp+s>vVW?uc z9JyxOL)fdEQbE|KxL<~8zyY~->itlzo#IFGrqE=E$kpKVSIT18iVh<~F_Ym}BnB&1V^mkH!KkTt1*4YY zm5kbobr^LO>oMwAqP#^KFtXJB6GlVDMvTUaO&CoTn=zUzwqUeWyo%9E@u!T|ia%pq zt@v|B8^vER+A98%(JrBU4Wqr{wTysbkP%W0GqM$P7`cjhjC{oiql4nF7}qKOn$c15 zH;e+sPK?fJOrQ&+tGc@}x+`AK=%Lt?(Mz#6;|9e(jJ}G6j2jhy%eYDLcZ`0D{TTxk zZ)V)0cq?Nd_e>x8?-_&CeH&x2;tnS;<5Hlo2}~P-rgoQ9a`<*zC7LI`GSPg|gx#^U1jla=q>RGvkvMmB;yVe<4NA7d3vpD&}8K!i#cLE?(juDfy5MS!QUNq2-2_yC*L=;lRsm&Ty8*E|hOWH?yU$ zaHUz1Hm|15%CuSK_Pyw|PIfx)jI&#;{Ern^ne3~ij=SrE)4)A-!MV1 mNumber.Contains(w.MaterialNumber)); if (!string.IsNullOrEmpty(dto.Customer)) - query = query.Where(w => dto.Customer.Contains(w.MaterialNumber)); + query = query.Where(w => dto.Customer.Contains(w.Customer)); if (!string.IsNullOrEmpty(dto.StockCode)) query = query.Where(w => dto.StockCode.Contains(w.StockCode)); From 63dc01b64b4261bfc380547ce4aef10791ebc5c3 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 22 Oct 2024 10:36:21 +0800 Subject: [PATCH 16/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 18 +++++++++------ .../SingleData/UcStockHeadOfficeResponse.cs | 4 ++-- .../BasicsRepositories.cs | 22 +++++++++++++++++++ 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 5d177a25..98ce27f2 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -112,14 +112,18 @@ namespace WMS.Web.Api.Controllers //var m2 = my2.Object; //var md = m2.code; - List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); - request.Add(("101", "CK001")); - request.Add(("101", "CK002")); - var list = await _erpService.BillQueryForInventory(request); + //var b33= await _juShuiTanService.GetStock(); + // var bc = await _lingXingService.GetStock(); - //await _juShuiTanService.GetTest(); - string codes = "AD"; - var b = await _erpInventoryService.GetInventory(codes); + //List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); + //request.Add(("101", "CK001")); + //request.Add(("101", "CK002")); + //var list = await _erpService.BillQueryForInventory(request); + + ////await _juShuiTanService.GetTest(); + //string codes = "AD"; + //var b = await _erpInventoryService.GetInventory(codes); + //var bcd=await _productInventoryService.Refresh(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs b/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs index 9aa26f52..09901b16 100644 --- a/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs +++ b/src/WMS.Web.Core/Dto/SingleData/UcStockHeadOfficeResponse.cs @@ -13,11 +13,11 @@ namespace WMS.Web.Core.Dto.SingleData /// /// 领星仓库编码 /// - public string WarehouseCodeOfLingxing { get; set; } + public string WarehouseCodeOfLingxing { get; set; } = ""; /// /// 聚水潭仓库编码 /// - public string WarehouseCodeOfJushuitan { get; set; } + public string WarehouseCodeOfJushuitan { get; set; } = ""; /// /// 用途 0 总公司 /// diff --git a/src/WMS.Web.Repositories/BasicsRepositories.cs b/src/WMS.Web.Repositories/BasicsRepositories.cs index 6e645372..759e179e 100644 --- a/src/WMS.Web.Repositories/BasicsRepositories.cs +++ b/src/WMS.Web.Repositories/BasicsRepositories.cs @@ -182,6 +182,28 @@ namespace WMS.Web.Repositories if (!result.Success) return null; return result.Data.ToList(); + + //List list = new List(); + //list.Add(new UcStockHeadOfficeResponse() + //{ + // ManagementSystem=1, + // Code="CK001", + // ErpOrgCode="101" + //}); + //list.Add(new UcStockHeadOfficeResponse() + //{ + // ManagementSystem = 1, + // Code = "AD", + // ErpOrgCode = "101" + //}); + //list.Add(new UcStockHeadOfficeResponse() + //{ + // ManagementSystem=2, + // Code = "CK002", + // ErpOrgCode = "101", + // WarehouseCodeOfJushuitan = "深圳市元创时代科技有限公司." + //}) ; + //return list; } } } From 66425370c5788d68b3ca685f579983e260454f45 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 22 Oct 2024 14:11:35 +0800 Subject: [PATCH 17/60] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Repositories/ProductInventoryRepositories.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs index 601e2930..eb3fcf39 100644 --- a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -141,7 +141,10 @@ namespace WMS.Web.Repositories if (!string.IsNullOrEmpty(dto.Customer)) query = query.Where(w => dto.Customer.Contains(w.Customer)); if (!string.IsNullOrEmpty(dto.StockCode)) - query = query.Where(w => dto.StockCode.Contains(w.StockCode)); + { + var split = dto.StockCode.Split("_$"); + query = query.Where(w => w.StockCode == split[0] && w.OrgCode == split[1]); + } //组装 int total = await query.CountAsync(); From a6a0864c66af02033b74b647c233765a57e453fe Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 23 Oct 2024 17:18:13 +0800 Subject: [PATCH 18/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../BasicsRepositories.cs | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index ef3c8f3ede6d4855d55683464d2677858b6b271a..2b78b0d10f0dd8d08fc662881bbea6ace83665fc 100644 GIT binary patch delta 3513 zcmb7`33OED702hjm*id+k*z7alv0Wo>11XyGohA-wJee-3Mxf#GLsPn1%rq{G6A3ET-j}&Cw&(Pm_MP*e`}^+q|MvOb zOx4N8RVN#p7kIk4&NNC3`^J3UVt;Nh6!%5qA#W@%5RDWE{l46&zc}m-7e#VozIZ$* zCmxFha>CwtARdYNi(-*L&>M{gBDuL9Gsox2a|Vtu{IjbIjYM^!xyS0`FA4_Z{%9Z+ zjs}ClP$UxZ75n}ENGK2shVsHW;ixYVj>SSTZ*h@y9?JE4z5Z}CUL44aMT12Vj}i2= za(WCink6o~-puQiSX*ii9%A^NaiwPKMfp~yvunS3lM!;u9h?P|&1|Q`0n<04u_ygl z64tZFlMrnXx%rI}D@2<#_p-#zqAjAWqHUt>qE|$(igt)z6YUheE^6s<-l;URjZMyp zO0${0Pg46u2Sf)&m7+tU!=fW1w~Kd0M@8?6-WMGceIPPrI>#k`C~~KILSk*%kn%@T zcH_rd@AmEX=l0?HPqN3ZNqi!SOC|A!#7{-;+CCHQ5xI>{iQLXki_VCCI*GGV{#;aF z+PiK4Te~lQ(k@H9UrKos+aAw30e6t38rteaAmv@6uS9Q(c8lH;r9|!o-O240{ja#Tf+qxbjTGU~P9lVX5LQ!WzW~ z28BQI`Wj>03 zmXXc$$bXSDQ14%549z}C_?s@{?}UD8SV0(|_!Qx4#eWbA(rDvp!Zn(HhA>p|S;BML z+e*SJ#pel)bhvUtQ^nPUsaASwFA!!ZzDQ`UhBdNK#g_=J6xR}lW!mX>>*R2CjD#Gn z;zmM+;wC~HZTB*vgW_gFN5w6KPKsLz?G(2W+AD4+bXI(YFkIJZze>1Sc?Y43I$k5} z(~aLr7^#NW30^h4LFlTui{MjylMqncEq6`vEy7{#>}^6sJ9~!^&Fo><+|fORn5Op< z;)?qSqZIeck!x=U2nTgjDhY=a4@)yO9Fc3M*`spp6yKLOg?4s~@PTHJ%N<>z?LH)& z(DX-yj}=eK_f-v_5I)uHXM|IVr{x|fo|Su`_=Vg9#dFewBIF(@rsQ4<=DM$_ujMvs zx|(o7@f*Sfo$ODVq90t_G*SM+U=Gv=|wRnT#w&Vz6R8Mt#Kw zjE0JrFd8Xd%4n?Egwa&78KZd(%B$mNjBHK+oY6wDC8L#MYepNzwv2X)moeHa{({j# z@t2H_ioarXQv5Zev*P89D-?gj=wd5h$>^&1TZUILhv8H7GXjdajG$tO5mwA&bW{8t z<0{49GrBAOfswD+gV8gMHhM97Yq}4kui_sW{S^B%1}F|>T&*~WQJ`4JxJL0>#$d(k z7}qNfVGLEgfpMeaO^jjOKYiqXVhq>x&5RL>BN?|SMi@nkQASL$m=RaJ)frxHd5uxd z{Bp}b=r$gZk_Wf58&XL#h0&bC7{(o1b7x)6Sg9GuxJzqF>T1SI&E4#rAZwJJY+h!R zVFDM3a1YC8G8+>a_cA6iCW}+@Qy8U;`#9MSQ@N+yiV}IPvitKr)wSE4Y=LQv>Ef0| z>tvf`+hn^Wl^F{$g9|Z}G23zr_jB(Q=2*$5WyS*RHOh?d6IH9NZ(7;wsaHz=KgiN% zvAk_lI4CTS%XLA@8-6rCz*49)3cJR15UBXkIGd$VXB2jg=^)U??3GH4*=@~goAn^e z(&jkTr>w4>NAp0b)QuJzTT|BUmGbzSatS+y^{jr*;?q`%F*m_ytW{?Hhd3YeMDy8c za@fpHJT=7XZki9vhTmXi4|_yv7Kj=c`DiG*MAS&MP;zCWMWRPV;jDb*iMolJNd02T zEfG1QrJ~0~kBgRxo)9f(=azF;F!OEku1st_XI+`qay|90*+SVC0e8D9T&N)DNyl1| zc=o*2G|Rh6ZevDDejBA`hLyr|a#RkU=YA>qkPRt!sobU2F0FRXUbOt)7uY?+x#C?S t--bT!mcGa}VNE)`ln!gtVVzU(z112aCG z0f%Xt=`Oz~5ODbdUXR!5@i?6hr$^IW8Cq6s@K~FB!I=VE{7iwq)5r@HXL-^*X~j-6 zEiK@6c^#%d(;x6S{KbJZr>nR)%a!i-d0j47dS;r>k?Hh0eSTLU)9G}1vK;PApQgJV zTH9Fe7+b4&$B}wgx8zngnURs+@HjJ)7xqpvr-Z^2%e9QyvBjE}&yVvD5aU3x|R8ivZXBK)( zf_`tr^yk)#K0Im$%&=MNv-141=S9c5RbIB4(cbbAWu`9}2-a+@=;sHm>Dj&Ns@6je zhAWia>z8V+r7T~vIHj>hslM_uJ_)VM#e>wfPO)oF*gC}vr|Tm|MN zl0!?bH4H29MgpPmq@khG;6y%kP1RYnPM0k~&N(j}nk0v>wYehZ#Td=&2D)CnYE3UY z4=t%KOS$H*S^M%FqhV~@PW={})9QDM&D^E8jJD8fAA_5XO4By6HnW;@|21x_SX;#Q zI=5R{Z?N8Ey~WzbdYiSKwS)BzYbR?L>uQd%o7+9CcUgN``&d@I_gMRt7S-NoIKcXV zb&&NT>m%03tV66%Sf8@21fQ`!XB}o8VST~+lBIK^qud^2SsVF^+q%Au`(Jb4YLCmf z72Aq;L`7>Sd?SVv++M|w)~df{Su0JjtVLRrz_Nm!WL2~3FX9yUzhgDx`PST@n|He2 zJUi#t&alBsbe3f$`JQD3?jQ>}$844GJga^gFL2+QS69JbTfO?5h+4b2vYf3s@egeO zk@XWxOXBjebe6$t!1{mhLNg9y-6iX8)tl@7RTs%RJ8PE>xNVpeKe|U>=hp2>@u%&^ z`TWikh|T=8$>*YL^Aa}b4H5>%+7k^?WIx*`zG0NHWoQ&ZT4q~{36!5`f{BC@!X!c| zVWq(a?oFUXGM=&{L?|OnrfSR5F3~>GA<=R6Y~oE@&%(mXvV&Y#cuSwf}kV-;b5csxfKB)FO|MDTe+zTgXl zVS+Cb3I*2?UXoxh6J8NqOK2vGh!a{0Mqee&GHMsGjxbm7--OoUv7R?7_#Z-B!T%D* zNV*M#jgn&%VYA?Cget);g!VG+bwU@xt%R<6ZnS3mZxFhP`AtGc!M6yV1-B8d6?~g; zt7P6zxJ_^ep{F>!L)a~a-$^JEhg}4RIP4~*3hv=o$tCe{gu3O+IW6->c^!Z^Y43PHgM3KIoO z6ebClDue{fV)jbIVVfMws5IO|!fH@8KPXpLQ=QPO5mD8sP`F)2rd%4C$|KVhrpw5T zOCvLR}BT1;!6$pH(zvIthjT@k=b&rZ5XO9IxbP%x#Y-fIo37|?e+fE@uWj~J6rrh*r>9_ zpXhE3<^S0pF~-=JD&E?%*po+$)b0^An7yUKOjB$6QdjQJtm)5)ojzi$*O#mK_5$Ns zy%8QzIe3t@B0lbzF-q5CDt7ZqBRTycwmr;hY|B9tR#R3p)+20tl=T?vaaN{12U)D% ztQNLd>Tx6ex=OaMVm-%N&3c~o0_#QA8rDm!9USZBc<{J!y**_k4XmjoSBJr>T9pM= Q@zp1dxIMo9g0U{`f2p~rod5s; diff --git a/src/WMS.Web.Repositories/BasicsRepositories.cs b/src/WMS.Web.Repositories/BasicsRepositories.cs index 759e179e..1d0eb823 100644 --- a/src/WMS.Web.Repositories/BasicsRepositories.cs +++ b/src/WMS.Web.Repositories/BasicsRepositories.cs @@ -135,7 +135,7 @@ namespace WMS.Web.Repositories public async Task> GetUcStockAsync(string systemCode, string name, int companyId) { var result = await _singleDataService.GetSysConfigData, SystemCodeRequest> - (new SystemCodeRequest(systemCode,name, companyId), + (new SystemCodeRequest(systemCode, name, companyId), SysConfigAction.GetWmsWarehouseBySystemCodeAndNameAndCompany); if (!result.Success) return null; @@ -181,7 +181,7 @@ namespace WMS.Web.Repositories SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany); if (!result.Success) return null; - return result.Data.ToList(); + return result.Data.Where(w => w.ManagementSystem != null).ToList(); //List list = new List(); //list.Add(new UcStockHeadOfficeResponse() From 4b4a65c1c8032918368a1446e19ab76f5dd76cb5 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 23 Oct 2024 17:37:24 +0800 Subject: [PATCH 19/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs | 2 ++ src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs b/src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs index afc71b7d..ff670cc5 100644 --- a/src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs +++ b/src/WMS.Web.Domain/QuartzJob/InventoryQuartzJob.cs @@ -34,6 +34,8 @@ namespace WMS.Web.Domain.QuartzJob try { if (DateTime.Now.Hour < 8 || DateTime.Now.Hour > 20) return; + + _logger.LogInformation($"同步成品即时库存->开始定时任务"); var result = await _productInventoryService.Refresh(); } catch (Exception ex) diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index 686ff939..217939c5 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -305,10 +305,10 @@ namespace WMS.Web.Repositories.DependencyInjection #region 成品即时库存 var jobKey_Inventory = new JobKey("InventoryQuartzJob", options.QuartzJobValue); - q.AddJob(jobKey, j => j.WithDescription("InventoryQuartzJob")); + q.AddJob(jobKey_Inventory, j => j.WithDescription("InventoryQuartzJob")); q.AddTrigger(t => t .WithIdentity("InventoryQuartzJobTrigger") - .ForJob(jobKey) + .ForJob(jobKey_Inventory) .StartNow() .WithCronSchedule(options.JobStartExpre) //.WithCronSchedule(CronScheduleBuilder.DailyAtHourAndMinute(options.JobStartHour[5], options.JobStartMinute[5])) From 90c2dad7d5038b6a6aad63bfba67cc8c11f91f79 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 24 Oct 2024 09:36:48 +0800 Subject: [PATCH 20/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes src/WMS.Web.Api/Controllers/TestController.cs | 9 +-- .../BasicsRepositories.cs | 54 +++++++++--------- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 2b78b0d10f0dd8d08fc662881bbea6ace83665fc..5050fef474bae4820f7f0807a71d27039776d59c 100644 GIT binary patch delta 3248 zcmZwJ33yc16$kKn?}ePhVg$7m35lo_ELE5#nM|m)ES4fmq84aNU7DFm1Vwg1Ko|iP zMNo*#*v+kWBM4|K1B6;zt#yG4)Y>8Zkye?K2vsq(- z?&(3}oU=2fqusf^3!G@6Z+hxn_q@!8Iqse@B^eC_)>~|_=o|*a-*$In#5tOIve0X(a*kyl z8{;*NN*%ZB{%h%2+jd}4)`44)^)NxQ?Qo+U@0M*}@3b`FCK;6Ni0uw03T{5-NrK6z zJVh||l&1-%`_6X448bkrOhL3DpPeO$<(a~*f&om=7F!WG_2fN* z7sw@o=gE5oFOy3J&Ezt{5%NC4Q8IPEU^x$Hg`kD$dcjHZ0l|OC2L*w4`3*lLIKcaO zSa66;3l5Wy2wc|w#8zhZr-Cf`GeOsOgHo+e>F0vJEdGTp$BIX7KjdS!vYTJ|aeD@= zeZtmY_DR7nc^gj&hOyvRg5l(^1tZDd2&%~6+5@|i{+(bfxl+);*;WajCRYoJxZE1S zS>#&5d@sMXX9Nq$X9ef5;P-Z;#*)Y_*jCCS51UaE|$nAphM4%fBY2n@ljkVD zLUvVrmF%WCm+Y=6CVMDK$Wq05d8W`)aX!-*C@v&>DZWPbR`ek+Qhc54tM~?avEmZ4 zpQ1k*RD{T|B0`oa%E_prLizn0Q&ciNK=DoTQpLB(%M{-x2Py`UgB3%_%N5@thbq2H z4pUq~4p)pIM=C~1hPSsaFhB?F6-tnQFFLiF^N|u zw_TZHSEeea@yhhJD>LlME$MX)-sJH!wF)y8v()}(yW&>GY{eYKTr08sZHjq{`I;?7 zN(bAQ!*u(Ms{b>d^2=}6Y&R@WEVOD%6lZ&6OR}X|sdrXjkyhgl#bVFz+?iRn%Ii>^ z%E*wM{o7!-aF^PbYz}Xl?d7|zvHpfH3Ky$&+6v8nVZJdmeo=V0TBohh>=))6Ll1XI zF4KOuTkK?7rg<+qnMeD0qwGK2CU0EfJ!-eMB>hB_*RRh+9bwfxVbhe>KF`(qGg|x8 z(?^@UM)zLLY_9fJx*f1o2V$AUeVH5fdt+SpeobHXxYsqh+;S@{IywW<$>I!)B8z&< zJz(*m#X}ac!hxu?7+}%GNf#aR#qJyQHvNMy_Z*DZ6`ve=3bW8Z)bp zc$vcB(~59G&VKVOx6sRBr5$}5t94k;{@4w!@wLX+T3>6^2V1;I(KA}_EXNY7eb}CE Wde;f>d}m#{>NBrbrsqj-bnJf&qJzQ! delta 3237 zcmZXW3wTu35y$u58!{u0h!5V6h*h*yVUyi#Hb`v%p@2xN1=>1aBUiqxhO(O5W{j3z27LT*`ksLDS)+l?$dTH|Do*0@`}A(7fxEFDQk zE91#nELNFFB+Ba|kw~I4nu=9c#mnN!@@PDjs!WCJYAtzXMK~Oe#FOc|XjLj1t4)NQ zSg5N%aGY~iwsf>RtGCm~@3p}#&90y6?j6%>jfO&5(^^yeP$=|_wT-5A^gZjZ+vfJ` z(Z#wpnroBkCDY5M&88r1i!a;Vewh~xUo-78y>5ELwA=Ki$+h8otbNPm8Sk~W#dgeo z+w7oyhy6RP4e|v!g7|&3_gj0q*}+oYH3ieZXWFWvOeh%iz9~p{!1RIX)I}UL`;e)% zB?ty{;Qx*L@RV`I7JJz2V4{yq!5leLkhcdH0^?0u8VY@EaB6Y#W(Napb)jv3r|oWO z)u~1L>RP{Av=Yl797S+6g=1(J)F{YSWbKjc!5wa6#Q7xqSh3eM%K0?Ae2lmM3g@W5 zXt~!dGrss(=iF)aPE!M}m4Uf7*x_KJ;JOx`B)GnXCkt+9;Tr{00?xI?RKZQeX@Xc$ z!F#hHPMj|2PrOAifH*^NX;G#SJX26j_bkC6;%vcArw}kla2dUG1w)A$!D|e-Rq#4- zo?tg|zF-gWHo;XKcDvxAmJAC7Pm%8stRXHGtR>zl*g#w)c#gPO@FMXp!4cx!f{%&! z2tFm=E4YvKSt4kncd6ib(ZEb|1?vST=)PYNYE{_tGQkI2`~!kR#0Le3iN3&P>_av) zy+0G=h(8x}WWd9MKEz+xYz+9NRj`TtE1TIZ%=~LR0|x)b=Aietg5Pl;%LT(2@Q7dp z@lnA@;$wnQ#NP|9B>q7#miR}(3QLv=9-s!nN+y0>P{Qd}3C<+07R>buOM5~vpZKKU zYz91K8zufp(3SXS!8lI$w4E)d$lBQwpOFk2$?F8&Iqq4(xy1E?^N7z0dK3R5=tb=38rPZ;^Ttp#QzFr5Ss*_Gx&sH7QJ8CMbX03 z=qOyGrzj$}QWO(Kp~TY^t%+?EZ3~z|J4FfIrz_eM&rqC6JWFvlv4f%`v6G@Rv5TTB zv74ehv4^53u~cymv6tdp;@1@CDc`^6D|*v?f#O2q*A;z;-%wmcyjanf*iR8AmMO}K z5k-_(p@(yfqCYWniDCfxn~F<`-%?Z)2Py^;2P-Zk4p9sxep@k&I9xG;c)4OE z@e0K#VvXWT;&&8RDc`@}Rg9*4jAAVDdy4N9f1nsg{GsA%;x&pN5yvZjOiU@O0RXd%o-V- zw?7cJg#~Kw+dN(|wokw(8?)Db8F+`9aWc?22rM)Pjb8>XR5MNn8V7-e#-O`9IG^ph z(Ob}?_)fK*Eb<@S@AbW4qF!#DEU3}sW}9U+dup>i#Xr8^Tjws;?6w+jh1(i;X*KRP z-IJYoz#HQ__xjHt^g8vw&sG&0{msj~WOl%CucSCyUNjsl?RpjE z?WfN|=6iXpu)6zrT!-cD%eK2Jpj82_4rsN1u*r*bctV56Y_Y{YXh%CFDA<$g@A}N^ W<&XZ{>zQ3W(tFs=W}CeA75@Y25{L-^ diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 98ce27f2..607bc7d5 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -112,15 +112,16 @@ namespace WMS.Web.Api.Controllers //var m2 = my2.Object; //var md = m2.code; - //var b33= await _juShuiTanService.GetStock(); - // var bc = await _lingXingService.GetStock(); + //var b33= await _juShuiTanService.GetStock(); + // var bc = await _lingXingService.GetStock(); //List<(string orgCode, string stockCode)> request = new List<(string orgCode, string stockCode)>(); //request.Add(("101", "CK001")); //request.Add(("101", "CK002")); //var list = await _erpService.BillQueryForInventory(request); - - ////await _juShuiTanService.GetTest(); + //var b33 = await _juShuiTanService.GetStock(); + //var b = b33.Data.Where(w => w.Id == 10923342).FirstOrDefault(); + //await _juShuiTanService.GetTest(); //string codes = "AD"; //var b = await _erpInventoryService.GetInventory(codes); //var bcd=await _productInventoryService.Refresh(); diff --git a/src/WMS.Web.Repositories/BasicsRepositories.cs b/src/WMS.Web.Repositories/BasicsRepositories.cs index 1d0eb823..0eb7f6f4 100644 --- a/src/WMS.Web.Repositories/BasicsRepositories.cs +++ b/src/WMS.Web.Repositories/BasicsRepositories.cs @@ -176,34 +176,34 @@ namespace WMS.Web.Repositories /// public async Task> GetUcStockByHeadOfficeAsync(string name, int companyId) { - var result = await _singleDataService.GetSysConfigData, SystemCodeRequest> - (new SystemCodeRequest("", name, companyId), - SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany); - if (!result.Success) - return null; - return result.Data.Where(w => w.ManagementSystem != null).ToList(); + //var result = await _singleDataService.GetSysConfigData, SystemCodeRequest> + //(new SystemCodeRequest("", name, companyId), + //SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany); + //if (!result.Success) + // return null; + //return result.Data.Where(w => w.ManagementSystem != null).ToList(); - //List list = new List(); - //list.Add(new UcStockHeadOfficeResponse() - //{ - // ManagementSystem=1, - // Code="CK001", - // ErpOrgCode="101" - //}); - //list.Add(new UcStockHeadOfficeResponse() - //{ - // ManagementSystem = 1, - // Code = "AD", - // ErpOrgCode = "101" - //}); - //list.Add(new UcStockHeadOfficeResponse() - //{ - // ManagementSystem=2, - // Code = "CK002", - // ErpOrgCode = "101", - // WarehouseCodeOfJushuitan = "深圳市元创时代科技有限公司." - //}) ; - //return list; + List list = new List(); + list.Add(new UcStockHeadOfficeResponse() + { + ManagementSystem = 1, + Code = "CK001", + ErpOrgCode = "101" + }); + list.Add(new UcStockHeadOfficeResponse() + { + ManagementSystem = 1, + Code = "AD", + ErpOrgCode = "101" + }); + list.Add(new UcStockHeadOfficeResponse() + { + ManagementSystem = 2, + Code = "CK002", + ErpOrgCode = "101", + WarehouseCodeOfJushuitan = "ORICO_JD" + }); + return list; } } } From 98674ceced4ac3aa393cddf6b0bb6700cd224af8 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 24 Oct 2024 09:54:46 +0800 Subject: [PATCH 21/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes src/WMS.Web.Api/Controllers/TestController.cs | 4 ++-- .../Services/Public/JuShuiTanService.cs | 15 ++++++++++++++- .../Services/Public/LingXingService.cs | 18 +++++++++++++++--- src/WMS.Web.Domain/Values/ResultCodes.cs | 1 + 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 5050fef474bae4820f7f0807a71d27039776d59c..efe74924d9db3e21306a29dd04c3d906505fcce0 100644 GIT binary patch delta 3308 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 diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 607bc7d5..1efb3d9e 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -121,10 +121,10 @@ namespace WMS.Web.Api.Controllers //var list = await _erpService.BillQueryForInventory(request); //var b33 = await _juShuiTanService.GetStock(); //var b = b33.Data.Where(w => w.Id == 10923342).FirstOrDefault(); - //await _juShuiTanService.GetTest(); + //await _juShuiTanService.GetTest(); //string codes = "AD"; //var b = await _erpInventoryService.GetInventory(codes); - //var bcd=await _productInventoryService.Refresh(); + var bcd=await _productInventoryService.JuShuiTan(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs index ddf98708..5136f26e 100644 --- a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs +++ b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs @@ -18,6 +18,7 @@ using WMS.Web.Core.Help; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Options; +using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Services.Public { @@ -57,7 +58,10 @@ namespace WMS.Web.Domain.Services.Public JObject resData = JObject.Parse(resContent); if (Convert.ToInt32(resData["code"]) != 0) + { _logger.LogInformation($"聚水潭获取仓库失败:{resData["msg"].ToString()}"); + return Result>.ReFailure(ResultCodes.JuShuiTanDataError); + } string json = resData["data"]["datas"].ToString(); var datas = JsonConvert.DeserializeObject>(json); list.AddRange(datas); @@ -70,7 +74,10 @@ namespace WMS.Web.Domain.Services.Public resData = JObject.Parse(resContent); if (Convert.ToInt32(resData["code"]) != 0) + { _logger.LogInformation($"聚水潭获取仓库失败:{resData["msg"].ToString()}"); + return Result>.ReFailure(ResultCodes.JuShuiTanDataError); + } json = resData["data"]["datas"].ToString(); datas = JsonConvert.DeserializeObject>(json); list.AddRange(datas); @@ -90,13 +97,16 @@ namespace WMS.Web.Domain.Services.Public JuShuiTanInventoryRequst request = new JuShuiTanInventoryRequst(); request.wms_co_id = id;//10923342; request.page_size = 100; - request.modified_begin = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd HH:mm:ss"); + request.modified_begin = DateTime.Now.AddDays(-6).AddHours(-23).ToString("yyyy-MM-dd HH:mm:ss"); request.modified_end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var resContent = PostUrl("/open/inventory/query", JsonConvert.SerializeObject(request)); JObject resData = JObject.Parse(resContent); if (Convert.ToInt32(resData["code"]) != 0) + { _logger.LogInformation($"聚水潭获取即时库存失败:{resData["msg"].ToString()}"); + return Result>.ReFailure(ResultCodes.JuShuiTanDataError); + } string json = resData["data"]["inventorys"].ToString(); var datas = JsonConvert.DeserializeObject>(json); list.AddRange(datas); @@ -109,7 +119,10 @@ namespace WMS.Web.Domain.Services.Public resData = JObject.Parse(resContent); if (Convert.ToInt32(resData["code"]) != 0) + { _logger.LogInformation($"聚水潭获取即时库存失败:{resData["msg"].ToString()}"); + return Result>.ReFailure(ResultCodes.JuShuiTanDataError); + } json = resData["data"]["inventorys"].ToString(); datas = JsonConvert.DeserializeObject>(json); list.AddRange(datas); diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index 44876dcc..df6f5415 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -107,7 +107,11 @@ namespace WMS.Web.Domain.Services.Public if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); var res = await _httpClientService.GetAsync(resUrl.Data); - if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + if (res.Code != 0) + { + _logger.LogInformation($"领星获取数据失败{res.Message}"); + return Result>.ReFailure(ResultCodes.LingXingDataError); + } var list = JsonConvert.DeserializeObject>(res.Data.ToString()); //设置缓存 @@ -128,7 +132,11 @@ namespace WMS.Web.Domain.Services.Public if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); List list = new List(); var res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(dto), null); - if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + if (res.Code != 0) + { + _logger.LogInformation($"领星获取数据失败{res.Message}"); + return Result>.ReFailure(ResultCodes.LingXingDataError); + } list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); int num = res.Total / 800; @@ -139,7 +147,11 @@ namespace WMS.Web.Domain.Services.Public resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(dto), null); - if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + if (res.Code != 0) + { + _logger.LogInformation($"领星获取数据失败{res.Message}"); + return Result>.ReFailure(ResultCodes.LingXingDataError); + } list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); } return Result>.ReSuccess(list.Where(w => w.Product_Total > 0 && w.Product_Valid_Num > 0).ToList()); diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 046d1bbe..6365ac6c 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -101,5 +101,6 @@ namespace WMS.Web.Domain.Values public static ValueTuple LingXingTokenError = (810001, "获取领星授权失败"); public static ValueTuple LingXingUrlError = (810002, "拼接领星请求参数失败"); public static ValueTuple LingXingDataError = (810003, "请求领星数据失败"); + public static ValueTuple JuShuiTanDataError = (810004, "请求聚水潭数据失败"); } } From 3e8ece487f716994b319c9543fd288fc49e8c632 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 24 Oct 2024 09:57:44 +0800 Subject: [PATCH 22/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs index 5136f26e..919ae39f 100644 --- a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs +++ b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs @@ -60,7 +60,7 @@ namespace WMS.Web.Domain.Services.Public if (Convert.ToInt32(resData["code"]) != 0) { _logger.LogInformation($"聚水潭获取仓库失败:{resData["msg"].ToString()}"); - return Result>.ReFailure(ResultCodes.JuShuiTanDataError); + return Result>.ReFailure(ResultCodes.JuShuiTanDataError); } string json = resData["data"]["datas"].ToString(); var datas = JsonConvert.DeserializeObject>(json); @@ -76,7 +76,7 @@ namespace WMS.Web.Domain.Services.Public if (Convert.ToInt32(resData["code"]) != 0) { _logger.LogInformation($"聚水潭获取仓库失败:{resData["msg"].ToString()}"); - return Result>.ReFailure(ResultCodes.JuShuiTanDataError); + return Result>.ReFailure(ResultCodes.JuShuiTanDataError); } json = resData["data"]["datas"].ToString(); datas = JsonConvert.DeserializeObject>(json); From a709de05f017c31e386400586f6dbd923f3c7a4a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 24 Oct 2024 10:25:18 +0800 Subject: [PATCH 23/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 275060 bytes .../Services/ProductInventoryService.cs | 2 +- .../Services/Public/JuShuiTanService.cs | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index efe74924d9db3e21306a29dd04c3d906505fcce0..3172391247ca5f7dc5fe80d27f80164f3c3cb4e3 100644 GIT binary patch delta 3512 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 f.Id == item.wms_co_id); if (l_stock == null) continue; - var stock = r.FirstOrDefault(f => f.WarehouseCodeOfLingxing.Equals(l_stock.Name)); + var stock = r.FirstOrDefault(f => f.WarehouseCodeOfJushuitan.Equals(l_stock.Name)); if (stock == null) continue; var entity = new ProductInventory() diff --git a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs index 919ae39f..384357c7 100644 --- a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs +++ b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs @@ -109,6 +109,7 @@ namespace WMS.Web.Domain.Services.Public } string json = resData["data"]["inventorys"].ToString(); var datas = JsonConvert.DeserializeObject>(json); + datas.ForEach(f => f.wms_co_id = id); list.AddRange(datas); int count = Convert.ToInt32(resData["data"]["page_count"]); @@ -125,6 +126,7 @@ namespace WMS.Web.Domain.Services.Public } json = resData["data"]["inventorys"].ToString(); datas = JsonConvert.DeserializeObject>(json); + datas.ForEach(f => f.wms_co_id = id); list.AddRange(datas); } } From 5fb483f455c048b9dd1f171147d151f08ff2f19e Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 24 Oct 2024 10:32:57 +0800 Subject: [PATCH 24/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BasicsRepositories.cs | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/WMS.Web.Repositories/BasicsRepositories.cs b/src/WMS.Web.Repositories/BasicsRepositories.cs index 0eb7f6f4..8d48f1cd 100644 --- a/src/WMS.Web.Repositories/BasicsRepositories.cs +++ b/src/WMS.Web.Repositories/BasicsRepositories.cs @@ -176,34 +176,34 @@ namespace WMS.Web.Repositories /// public async Task> GetUcStockByHeadOfficeAsync(string name, int companyId) { - //var result = await _singleDataService.GetSysConfigData, SystemCodeRequest> - //(new SystemCodeRequest("", name, companyId), - //SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany); - //if (!result.Success) - // return null; - //return result.Data.Where(w => w.ManagementSystem != null).ToList(); + var result = await _singleDataService.GetSysConfigData, SystemCodeRequest> + (new SystemCodeRequest("", name, companyId), + SysConfigAction.GetWmsWarehouseByHeadOfficeAndNameAndCompany); + if (!result.Success) + return null; + return result.Data.Where(w => w.ManagementSystem != null).ToList(); - List list = new List(); - list.Add(new UcStockHeadOfficeResponse() - { - ManagementSystem = 1, - Code = "CK001", - ErpOrgCode = "101" - }); - list.Add(new UcStockHeadOfficeResponse() - { - ManagementSystem = 1, - Code = "AD", - ErpOrgCode = "101" - }); - list.Add(new UcStockHeadOfficeResponse() - { - ManagementSystem = 2, - Code = "CK002", - ErpOrgCode = "101", - WarehouseCodeOfJushuitan = "ORICO_JD" - }); - return list; + //List list = new List(); + //list.Add(new UcStockHeadOfficeResponse() + //{ + // ManagementSystem = 1, + // Code = "CK001", + // ErpOrgCode = "101" + //}); + //list.Add(new UcStockHeadOfficeResponse() + //{ + // ManagementSystem = 1, + // Code = "AD", + // ErpOrgCode = "101" + //}); + //list.Add(new UcStockHeadOfficeResponse() + //{ + // ManagementSystem = 2, + // Code = "CK002", + // ErpOrgCode = "101", + // WarehouseCodeOfJushuitan = "ORICO_JD" + //}); + //return list; } } } From c06db35af476b5501e3623452e4ddd8c9294eeb8 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 09:56:36 +0800 Subject: [PATCH 25/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 275060 -> 276926 bytes src/WMS.Web.Api/appsettings.json | 1 + .../Options/QuartzJobOptions.cs | 5 +++++ .../Services/ProductInventoryService.cs | 2 ++ .../DependencyInjection/AppBuilder.cs | 2 +- 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 3172391247ca5f7dc5fe80d27f80164f3c3cb4e3..2d8d064f70085b1a01a65a1d3e54c9d00a3990df 100644 GIT binary patch delta 45189 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 delta 42873 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 XW1&doJb9y{?9pV@^%bMJ8UOzUMysC< diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index 2cf62c82..a87d8d73 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -101,6 +101,7 @@ "JobStartExpreSend": "0 0 12,16,20 * * ?", "JobStartExpreMaterial": "0 30 23 * * ?", "JobStartErpDelete": "0 5 * * * ?", + "JobStartProductInventory": "0 0/30 * * * ?", //a.是否启用集群:键和值 "JobStoreClusteredKey": "quartz.jobStore.clustered", "JobStoreClusteredValue": true, diff --git a/src/WMS.Web.Domain/Options/QuartzJobOptions.cs b/src/WMS.Web.Domain/Options/QuartzJobOptions.cs index cb2c89ef..20ec9889 100644 --- a/src/WMS.Web.Domain/Options/QuartzJobOptions.cs +++ b/src/WMS.Web.Domain/Options/QuartzJobOptions.cs @@ -103,6 +103,11 @@ namespace WMS.Web.Domain.Options /// 监测金蝶删单 /// public string JobStartErpDelete { get; set; } + /// + /// 成品仓库即时库存 + /// + public string JobStartProductInventory { get; set; } + /// /// 是否启用集群:键 /// diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 45bdb651..9c1da60d 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -62,6 +62,7 @@ namespace WMS.Web.Domain.Services { //获取单点配置 var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); + //r = r.Where(w => w.Code.Equals("CK001")).ToList(); var codes = r.Where(w => w.ManagementSystem == 1 || w.ManagementSystem == 4).Select(s => (s.Code, s.ErpOrgCode)).ToList(); if (codes.Count() <= 0) return Result.ReSuccess(); @@ -69,6 +70,7 @@ namespace WMS.Web.Domain.Services var str = string.Join(",", codes.Select(s => s.Code).ToList()); var res = await _erpInventoryService.GetInventory(str); + _logger.LogInformation($"拉去金蝶数据结果:{res.IsSuccess} {res.Message} {res.Data.Count()}"); if (!res.IsSuccess) return res; //过滤掉不符合要求的组织和仓库组合 List listOld = new List(); diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index 217939c5..0279e877 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -310,7 +310,7 @@ namespace WMS.Web.Repositories.DependencyInjection .WithIdentity("InventoryQuartzJobTrigger") .ForJob(jobKey_Inventory) .StartNow() - .WithCronSchedule(options.JobStartExpre) + .WithCronSchedule(options.JobStartProductInventory) //.WithCronSchedule(CronScheduleBuilder.DailyAtHourAndMinute(options.JobStartHour[5], options.JobStartMinute[5])) .WithDescription("InventoryQuartzJobTriggerDecs")); #endregion From e8284d9c80a7a04d4f8d22c3724d48c91a5557e7 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 10:23:13 +0800 Subject: [PATCH 26/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 5 ++++ .../Services/ProductInventoryService.cs | 22 +++++++++++++----- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 2d8d064f70085b1a01a65a1d3e54c9d00a3990df..11ebb1fdc07c8cfa54c4a7d919ec5ada359f4c98 100644 GIT binary patch delta 3142 zcmZXW37k!37{>28XJ+1a7))XsGQ*^0QkJMBEtZ5Nv?wKs7VVo#<-5mPy>rhU<( zjf~D(fHN<{hs;$@B2O9a^CNJ_s-%}?&4Igmp#^-;CXXB ze`1N(BEn+7X>xXnpV_}?i6#>7nwFY!6N$t!Ys*c`nR_qFUG29nXk=YqSgOLb%Cy?F z#^h{YM)?(f>+n;`7NfeH4!GA!pZZ_ygq{CjL@ zBHM~%@=bv$!<1>tGNq5FPF-`kQ*)=tlq;uOIKx^=_Fe7gtq9ddxX+aSiA0TOOF^y9dD1QBt%;8o%b!CYdgAW6Je@HX*2!6M@Qf^y~7t2S}Ipe~nNAgE7VC>R~2xAvxB9Puqd0~!_y@`#HC zjfrmy2DsHid;E6pQ1l`8RrDjCsW^*xw&EOOf5o}P^FqY{ z^7)DjhyxWD5(gBgXm-!+vi zE)I?;h?;K*&d<76?fLGD#%~B(6_3zf=3uprMpnnHvBjgS;}VT#Wd}W?qRQY#|9*}7 zlm$h}d6mIrzt&9cgvj)OMuXS*dC9?>f|Gpj!KiF=aKP~oS;xbs+FmE*nCh77njW#- zqo!G=GE@7kPB_lg!L*;f%|ZXnPmJd!d&NP^to$X?v$|MT00UQ;atGzf>05(j zR=cEK+KiO_99nK%kiu*`jtKL$N6P-#^Dc0-z|lfS3yq>5a)LvmvZ|nV!#CBP*JK+r b(@wsdE8klh&94fIqIFe4VRC0xu&m=h>=I|p delta 3126 zcmZ|R37Ae*7zgn0-uunG?=U8WY%^MrmLW??Du#qKp`v}?v~RXBZipfkQ`|~u-}mAx zN)e-#WQpEWpti6#>7SuC}vn@A*Fl87VEoqE62aLcBRF7 z_G9*8?LJoLuKc@&yQ#FrItw@F4-2=}HjC{RHa|>kFu0re(_)83EnC1%{=bPkZOmQR z&C9mhzpQl^+GXJ`vfILq=krD?&2Ag^Sp0h{_F8|rO6KmqiVDm9W*w^b#qvK}{9^In z8~)XD)z^0S+#nInU*i|}k`t|1?YFJtwm#3U>)uG_ZParqw|8z2lGbXfxWaF=D$L2T zj(w&MP9);QgxG_hi~|gnI19sMN8>oB)Z6_WhD%Xg8=rX?AsAWhTLh!3Jz6lP+9iUq z&T%e6!L8&t!I8;KcD$f-h9M>hx-fm4pes31a2z>F(2cxZP(=Z#S z@=n1QESM@-N8Tm)n!H=^trupNxJNLM^QH+Ra=PFZvQ#jSyjPGS?-RU3&Jes!&J-*o zBSD(HUjXs}!8S5{P%w)d^pIc|)3XIT$vJ{ba;{)6`LJLkpW_k1X7W+N7V?WTTB>c>3&)GX*?ehYk*%t&a@-bc# z^k%`!g1+P{f_~(yf@1PDJ0Jb&*9C*fd4l;|EhTt^d{dCe%PkPpCl}gb3o^I%mS8;j zwx9tE76}@W?+BWb?+VVctA*~6E*31|HQo~}C6@`x$mN3OocF%qK=K1YOY%cOYw{yO z0r|0DfASMS8*+u<96skt32`p{so-!{tP-r^#(yR_p9QN0N3ft=(3V^y=s;EoI+1Gy zN0FZk)^f2g1Q&9#F9jDnhW7aD1eY-VmEbb+Yrz%dH-a8q?OVZj+?4MHKaf8PE@#0{ zf}ffFMer-RUT`fJ+h8Y`*-e7*an9Q;_>Ji;f~{n1=amJpQ_O5y@CUg~u$}x0_ShnTFiqfPF$^Q`XBgt_n(ewA|(D3WBBVkqx8TQQsz#Yj>WIjpUv7{zRDMJ}^- z6nW%6in?SyMSXH#MT3xTsAxp)r)W$zQ8Xo+DVme{iUP8QVt?`g#ew8Oik4(6MQie4 zMH})E#i1F7I81Rk(}jw*WIM$XWP3#ivZJCCd8Fbfva{l7vWwyvva8})@;JruWH&{3 zvPjWG`Tg5daRSr56ep6s6@AFQij&BGij&D=#VKTe#Q<`k;#Bf9#p&cA#bELb#hGMy zmf~#s9L2fhd5ZJN3ltZU7bz|#FHu}dUZ%L5yh1UAyi#!$d9~si@><1p1toYX_TAo<6P5Nf9XGkrD~m;LbEH(G={Q&3h!0x z)D)UsVWu%O_j{&Ot=a^K2a&)S=b@TT@j+Yfv61x^c`7CJ37Mc?EG nt)f|#LG8S^)V;bXHfN?Cf@oo7aDcZss;CTFruI|@?{@tg?5=8b diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 7db0df75..dbe907eb 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4907,6 +4907,11 @@ 监测金蝶删单 + + + 成品仓库即时库存 + + 是否启用集群:键 diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 9c1da60d..650dfd5d 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -300,14 +300,24 @@ namespace WMS.Web.Domain.Services { _logger.LogInformation($"同步成品仓库存->开始 {DateTime.Now}"); - var res = await this.Erp(); - if (!res.IsSuccess) return res; + try + { + var res = await this.Erp(); + _logger.LogInformation($"同步成品仓库存(物料) {res.IsSuccess} {res.Message}"); + if (!res.IsSuccess) return res; - res = await this.JuShuiTan(); - if (!res.IsSuccess) return res; + res = await this.JuShuiTan(); + _logger.LogInformation($"同步成品仓库存(聚水潭) {res.IsSuccess} {res.Message}"); + if (!res.IsSuccess) return res; - res = await this.LingXing(); - if (!res.IsSuccess) return res; + res = await this.LingXing(); + _logger.LogInformation($"同步成品仓库存(领星) {res.IsSuccess} {res.Message}"); + if (!res.IsSuccess) return res; + } + catch (Exception ex) + { + _logger.LogError($"同步成品仓库异常:{ex.ToString()}"); + } _logger.LogInformation($"同步成品仓库存->结束 {DateTime.Now}"); return Result.ReSuccess(); From 5814988f0f3456dbeff0efbb6e8ea2cf63f1a692 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 10:46:07 +0800 Subject: [PATCH 27/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 2 +- .../Services/Public/ErpInventoryService.cs | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 1efb3d9e..01507450 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -124,7 +124,7 @@ namespace WMS.Web.Api.Controllers //await _juShuiTanService.GetTest(); //string codes = "AD"; //var b = await _erpInventoryService.GetInventory(codes); - var bcd=await _productInventoryService.JuShuiTan(); + var bcd=await _productInventoryService.Erp(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index 838dc253..dab0796a 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Options; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using MySqlX.XDevAPI.Common; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -21,9 +22,11 @@ namespace WMS.Web.Domain.Services.Public public class ErpInventoryService : IErpInventoryService { private ErpOptions _erpOptions; - public ErpInventoryService(IOptions erpOptions) + private readonly ILogger _logger; + public ErpInventoryService(IOptions erpOptions, ILogger logger) { _erpOptions = erpOptions?.Value; + _logger = logger; } private bool Login(HttpClientEx httpClient) @@ -62,6 +65,7 @@ namespace WMS.Web.Domain.Services.Public httpClient.Content = JsonConvert.SerializeObject(Parameters); string content = httpClient.AsyncRequest(); + _logger.LogInformation($"金蝶返回数据{content}"); JObject resData = JObject.Parse(content); if (resData["success"].ToString().ToLower() != "true") @@ -79,6 +83,7 @@ namespace WMS.Web.Domain.Services.Public httpClient.Content = JsonConvert.SerializeObject(Parameters); content = httpClient.AsyncRequest(); + _logger.LogInformation($"金蝶返回数据{content}"); resData = JObject.Parse(content); if (resData["success"].ToString().ToLower() != "true") From 2d09baa3409c4892304e5fbe72cfabf2f39762cc Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 10:56:29 +0800 Subject: [PATCH 28/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes .../Services/ProductInventoryService.cs | 2 +- .../Services/Public/ErpInventoryService.cs | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 11ebb1fdc07c8cfa54c4a7d919ec5ada359f4c98..5aeefe763a1a4c35280eda8a5ecba1a9c496151c 100644 GIT binary patch delta 29773 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 PZ#O8CU;c#g(E0xd%7J1w delta 30115 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 YyoX_ryX#Y9NHr6*|2?-@TR!N&0ZmeDBme*a diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 650dfd5d..a8926ba3 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -62,7 +62,7 @@ namespace WMS.Web.Domain.Services { //获取单点配置 var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); - //r = r.Where(w => w.Code.Equals("CK001")).ToList(); + r = r.Where(w => w.Code.Equals("CK001")).ToList(); var codes = r.Where(w => w.ManagementSystem == 1 || w.ManagementSystem == 4).Select(s => (s.Code, s.ErpOrgCode)).ToList(); if (codes.Count() <= 0) return Result.ReSuccess(); diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index dab0796a..d0c02786 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -55,7 +55,7 @@ namespace WMS.Web.Domain.Services.Public List Parameters = new List(); var model = new InventoryParamModel(); model.fstocknumbers = stockCodes; - //model.fmaterialnumbers = "G01-11-572474"; + model.fmaterialnumbers = "G01-11-572474"; model.isshowauxprop = true; model.isshowstockloc = true; model.pageindex = 1; @@ -63,7 +63,7 @@ namespace WMS.Web.Domain.Services.Public Parameters.Add(model); httpClient.Content = JsonConvert.SerializeObject(Parameters); - + _logger.LogInformation($"1.开始进行连接"); string content = httpClient.AsyncRequest(); _logger.LogInformation($"金蝶返回数据{content}"); JObject resData = JObject.Parse(content); From 87b7060430b037ac96bc8af9565babd155a7d34e Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 11:01:53 +0800 Subject: [PATCH 29/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index d0c02786..70e10103 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -55,7 +55,7 @@ namespace WMS.Web.Domain.Services.Public List Parameters = new List(); var model = new InventoryParamModel(); model.fstocknumbers = stockCodes; - model.fmaterialnumbers = "G01-11-572474"; + //model.fmaterialnumbers = "G01-11-572474"; model.isshowauxprop = true; model.isshowstockloc = true; model.pageindex = 1; From aaa6b57789b26077a6cc351f2195e2a8187ffa6a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 11:02:21 +0800 Subject: [PATCH 30/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index 70e10103..50ba3a60 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -63,7 +63,7 @@ namespace WMS.Web.Domain.Services.Public Parameters.Add(model); httpClient.Content = JsonConvert.SerializeObject(Parameters); - _logger.LogInformation($"1.开始进行连接"); + _logger.LogInformation($"1.开始进行连接 {stockCodes}"); string content = httpClient.AsyncRequest(); _logger.LogInformation($"金蝶返回数据{content}"); JObject resData = JObject.Parse(content); From 9276b29a81328bdcff924bb2e223cb55af5b1580 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 11:17:12 +0800 Subject: [PATCH 31/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IService/Public/IErpInventoryService.cs | 2 +- .../Services/ProductInventoryService.cs | 6 +- .../Services/Public/ErpInventoryService.cs | 68 ++++++++++--------- 3 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs b/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs index 65f01a97..b347db5f 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpInventoryService.cs @@ -9,6 +9,6 @@ namespace WMS.Web.Domain.IService.Public { public interface IErpInventoryService { - Task>> GetInventory(string stockCodes); + Task>> GetInventory(List stockCodes); } } diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index a8926ba3..e8bd3d92 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -62,14 +62,14 @@ namespace WMS.Web.Domain.Services { //获取单点配置 var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); - r = r.Where(w => w.Code.Equals("CK001")).ToList(); + //r = r.Where(w => w.Code.Equals("CK001")).ToList(); var codes = r.Where(w => w.ManagementSystem == 1 || w.ManagementSystem == 4).Select(s => (s.Code, s.ErpOrgCode)).ToList(); if (codes.Count() <= 0) return Result.ReSuccess(); - var str = string.Join(",", codes.Select(s => s.Code).ToList()); + //var str = string.Join(",", codes.Select(s => s.Code).ToList()); - var res = await _erpInventoryService.GetInventory(str); + var res = await _erpInventoryService.GetInventory(codes.Select(s => s.Code).ToList()); _logger.LogInformation($"拉去金蝶数据结果:{res.IsSuccess} {res.Message} {res.Data.Count()}"); if (!res.IsSuccess) return res; //过滤掉不符合要求的组织和仓库组合 diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index 50ba3a60..4cf1ed93 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -45,53 +45,57 @@ namespace WMS.Web.Domain.Services.Public var iResult = JObject.Parse(response)["LoginResultType"].Value(); return iResult == 1 ? true : false; } - public async Task>> GetInventory(string stockCodes) + public async Task>> GetInventory(List stockCodes) { List list = new List(); HttpClientEx httpClient = new HttpClientEx(); var isSuccess = Login(httpClient); string baseUrl = _erpOptions.EndpointAddress.Replace("/ERPGW.asmx", ""); httpClient.Url = string.Format("{0}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc", baseUrl); - List Parameters = new List(); - var model = new InventoryParamModel(); - model.fstocknumbers = stockCodes; - //model.fmaterialnumbers = "G01-11-572474"; - model.isshowauxprop = true; - model.isshowstockloc = true; - model.pageindex = 1; - model.pagerows = 10000; - Parameters.Add(model); - httpClient.Content = JsonConvert.SerializeObject(Parameters); - _logger.LogInformation($"1.开始进行连接 {stockCodes}"); - string content = httpClient.AsyncRequest(); - _logger.LogInformation($"金蝶返回数据{content}"); - JObject resData = JObject.Parse(content); - - if (resData["success"].ToString().ToLower() != "true") - return Result>.ReFailure(ResultCodes.Erp_Inventory_Error); - - string json = resData["data"].ToString(); - var datas = JsonConvert.DeserializeObject>(json); - list.AddRange(datas); - - int num = Convert.ToInt32(resData["rowcount"]) / 10000; - for (int i = 1; i <= num; i++) + foreach (var code in stockCodes) { - model.pageindex++; + List Parameters = new List(); + var model = new InventoryParamModel(); + model.fstocknumbers = code; + //model.fmaterialnumbers = "G01-11-572474"; + model.isshowauxprop = true; + model.isshowstockloc = true; + model.pageindex = 1; + model.pagerows = 10000; + Parameters.Add(model); httpClient.Content = JsonConvert.SerializeObject(Parameters); - - content = httpClient.AsyncRequest(); - _logger.LogInformation($"金蝶返回数据{content}"); - resData = JObject.Parse(content); + _logger.LogInformation($"1.开始进行连接 {code}"); + string content = httpClient.AsyncRequest(); + //_logger.LogInformation($"金蝶返回数据{content}"); + JObject resData = JObject.Parse(content); if (resData["success"].ToString().ToLower() != "true") return Result>.ReFailure(ResultCodes.Erp_Inventory_Error); - json = resData["data"].ToString(); - datas = JsonConvert.DeserializeObject>(json); + string json = resData["data"].ToString(); + var datas = JsonConvert.DeserializeObject>(json); list.AddRange(datas); + + int num = Convert.ToInt32(resData["rowcount"]) / 10000; + for (int i = 1; i <= num; i++) + { + model.pageindex++; + + httpClient.Content = JsonConvert.SerializeObject(Parameters); + + content = httpClient.AsyncRequest(); + //_logger.LogInformation($"金蝶返回数据{content}"); + resData = JObject.Parse(content); + + if (resData["success"].ToString().ToLower() != "true") + return Result>.ReFailure(ResultCodes.Erp_Inventory_Error); + + json = resData["data"].ToString(); + datas = JsonConvert.DeserializeObject>(json); + list.AddRange(datas); + } } var blist = list.Where(w => w.Qty > 0 || w.BeforeQty > 0).ToList(); From 286fbdb25c889bc18ff6c8a1bef8b0696e40a653 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 11:24:13 +0800 Subject: [PATCH 32/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index 4cf1ed93..7d52610f 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -76,7 +76,8 @@ namespace WMS.Web.Domain.Services.Public string json = resData["data"].ToString(); var datas = JsonConvert.DeserializeObject>(json); - list.AddRange(datas); + if (datas != null && datas.Count() > 0) + list.AddRange(datas); int num = Convert.ToInt32(resData["rowcount"]) / 10000; for (int i = 1; i <= num; i++) @@ -94,7 +95,8 @@ namespace WMS.Web.Domain.Services.Public json = resData["data"].ToString(); datas = JsonConvert.DeserializeObject>(json); - list.AddRange(datas); + if (datas != null && datas.Count() > 0) + list.AddRange(datas); } } From c17b75ce44b8e22b685a144cd63cea7635ad0982 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 11:47:14 +0800 Subject: [PATCH 33/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 1 + .../Services/Public/ErpInventoryService.cs | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 01507450..f8c8d459 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -124,6 +124,7 @@ namespace WMS.Web.Api.Controllers //await _juShuiTanService.GetTest(); //string codes = "AD"; //var b = await _erpInventoryService.GetInventory(codes); + int count = 4 / 5; var bcd=await _productInventoryService.Erp(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index 7d52610f..a2932eff 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -52,9 +52,14 @@ namespace WMS.Web.Domain.Services.Public var isSuccess = Login(httpClient); string baseUrl = _erpOptions.EndpointAddress.Replace("/ERPGW.asmx", ""); httpClient.Url = string.Format("{0}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc", baseUrl); - - foreach (var code in stockCodes) + int count = stockCodes.Count() / 5; + count = count + 1; + for (int ic = 1; ic <= count; ic++) { + var codes = stockCodes.Skip((ic-1) * 5).Take(5).ToList(); + string code = string.Join(",", codes); + //foreach (var code in stockCodes) + //{ List Parameters = new List(); var model = new InventoryParamModel(); model.fstocknumbers = code; From 389bca19f5af881b2974c4dd299351b37c0600ff Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 11:56:56 +0800 Subject: [PATCH 34/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 2 +- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index f8c8d459..ea17182b 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -124,7 +124,7 @@ namespace WMS.Web.Api.Controllers //await _juShuiTanService.GetTest(); //string codes = "AD"; //var b = await _erpInventoryService.GetInventory(codes); - int count = 4 / 5; + int count = 10 / 5; var bcd=await _productInventoryService.Erp(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index a2932eff..d214354c 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -57,7 +57,12 @@ namespace WMS.Web.Domain.Services.Public for (int ic = 1; ic <= count; ic++) { var codes = stockCodes.Skip((ic-1) * 5).Take(5).ToList(); + if (codes.Count() <= 0) + { + return Result>.ReSuccess(list.Where(w => w.Qty > 0 || w.BeforeQty > 0).ToList()); + } string code = string.Join(",", codes); + //foreach (var code in stockCodes) //{ List Parameters = new List(); From 6f0ebbb55ef4fb82c36a0941100a4f2bec6f596f Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 13:35:09 +0800 Subject: [PATCH 35/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index d214354c..45231ded 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -52,11 +52,11 @@ namespace WMS.Web.Domain.Services.Public var isSuccess = Login(httpClient); string baseUrl = _erpOptions.EndpointAddress.Replace("/ERPGW.asmx", ""); httpClient.Url = string.Format("{0}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc", baseUrl); - int count = stockCodes.Count() / 5; + int count = stockCodes.Count() / 10; count = count + 1; for (int ic = 1; ic <= count; ic++) { - var codes = stockCodes.Skip((ic-1) * 5).Take(5).ToList(); + var codes = stockCodes.Skip((ic-1) * 10).Take(10).ToList(); if (codes.Count() <= 0) { return Result>.ReSuccess(list.Where(w => w.Qty > 0 || w.BeforeQty > 0).ToList()); From b1facce5193ea1b2a94b0f1728fef69f58c9c95e Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 13:48:49 +0800 Subject: [PATCH 36/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index 45231ded..d214354c 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -52,11 +52,11 @@ namespace WMS.Web.Domain.Services.Public var isSuccess = Login(httpClient); string baseUrl = _erpOptions.EndpointAddress.Replace("/ERPGW.asmx", ""); httpClient.Url = string.Format("{0}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc", baseUrl); - int count = stockCodes.Count() / 10; + int count = stockCodes.Count() / 5; count = count + 1; for (int ic = 1; ic <= count; ic++) { - var codes = stockCodes.Skip((ic-1) * 10).Take(10).ToList(); + var codes = stockCodes.Skip((ic-1) * 5).Take(5).ToList(); if (codes.Count() <= 0) { return Result>.ReSuccess(list.Where(w => w.Qty > 0 || w.BeforeQty > 0).ToList()); From 7585d71ea256283c1a2a4d8c51e718dfca5ad22f Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 13:49:54 +0800 Subject: [PATCH 37/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index d214354c..d8194514 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -52,11 +52,11 @@ namespace WMS.Web.Domain.Services.Public var isSuccess = Login(httpClient); string baseUrl = _erpOptions.EndpointAddress.Replace("/ERPGW.asmx", ""); httpClient.Url = string.Format("{0}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc", baseUrl); - int count = stockCodes.Count() / 5; + int count = stockCodes.Count() / 10; count = count + 1; for (int ic = 1; ic <= count; ic++) { - var codes = stockCodes.Skip((ic-1) * 5).Take(5).ToList(); + var codes = stockCodes.Skip((ic-1) * 10).Take(10).ToList(); if (codes.Count() <= 0) { return Result>.ReSuccess(list.Where(w => w.Qty > 0 || w.BeforeQty > 0).ToList()); @@ -72,7 +72,7 @@ namespace WMS.Web.Domain.Services.Public model.isshowauxprop = true; model.isshowstockloc = true; model.pageindex = 1; - model.pagerows = 10000; + model.pagerows = 5000; Parameters.Add(model); httpClient.Content = JsonConvert.SerializeObject(Parameters); @@ -89,7 +89,7 @@ namespace WMS.Web.Domain.Services.Public if (datas != null && datas.Count() > 0) list.AddRange(datas); - int num = Convert.ToInt32(resData["rowcount"]) / 10000; + int num = Convert.ToInt32(resData["rowcount"]) / 5000; for (int i = 1; i <= num; i++) { model.pageindex++; From 324a33ab1e7ae607e3d972ba12c610eae21cb8b8 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 13:59:45 +0800 Subject: [PATCH 38/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs index d8194514..bc67173d 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpInventoryService.cs @@ -76,7 +76,7 @@ namespace WMS.Web.Domain.Services.Public Parameters.Add(model); httpClient.Content = JsonConvert.SerializeObject(Parameters); - _logger.LogInformation($"1.开始进行连接 {code}"); + //_logger.LogInformation($"1.开始进行连接 {code}"); string content = httpClient.AsyncRequest(); //_logger.LogInformation($"金蝶返回数据{content}"); JObject resData = JObject.Parse(content); From 0ec23858e7160d4900c881103acdf94248ca70db Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 17:35:16 +0800 Subject: [PATCH 39/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes src/WMS.Web.Api/Controllers/TestController.cs | 2 +- .../Services/ProductInventoryService.cs | 4 +++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 5aeefe763a1a4c35280eda8a5ecba1a9c496151c..845061d2a1e468a406928c9cbc7faf730f236cff 100644 GIT binary patch delta 3142 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 Y?F~9d$$ddd`iCg!;-&k47gP`Y5&zU^lK=n! diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index ea17182b..5dcf507d 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -125,7 +125,7 @@ namespace WMS.Web.Api.Controllers //string codes = "AD"; //var b = await _erpInventoryService.GetInventory(codes); int count = 10 / 5; - var bcd=await _productInventoryService.Erp(); + var bcd=await _productInventoryService.LingXing(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index e8bd3d92..c63da746 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -70,7 +70,7 @@ namespace WMS.Web.Domain.Services //var str = string.Join(",", codes.Select(s => s.Code).ToList()); var res = await _erpInventoryService.GetInventory(codes.Select(s => s.Code).ToList()); - _logger.LogInformation($"拉去金蝶数据结果:{res.IsSuccess} {res.Message} {res.Data.Count()}"); + _logger.LogInformation($"拉取金蝶数据结果:{res.IsSuccess} {res.Message} {res.Data.Count()}"); if (!res.IsSuccess) return res; //过滤掉不符合要求的组织和仓库组合 List listOld = new List(); @@ -142,6 +142,7 @@ namespace WMS.Web.Domain.Services var ids = resStock.Data.Where(w => listNames.Contains(w.Name)).Select(s => s.Id).ToList(); //获取领星库存 var resInventory = await _juShuiTanService.GetInventory(ids); + _logger.LogInformation($"拉取聚水潭数据结果:{resInventory.IsSuccess} {resInventory.Message} {resInventory.Data.Count()}"); if (!resInventory.IsSuccess) return resStock; @@ -231,6 +232,7 @@ namespace WMS.Web.Domain.Services string strIds = string.Join(",", ids); //获取领星库存 var resInventory = await _lingXingService.GetInventory(new Core.Dto.LingXing.LingXingInventoryRequest() { wid = strIds }); + _logger.LogInformation($"拉取领星数据结果:{resInventory.IsSuccess} {resInventory.Message} {resInventory.Data.Count()}"); if (!resInventory.IsSuccess) return resStock; //物料 From 755dde844d32ff95634447405117779bdecd1a3e Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Wed, 30 Oct 2024 17:38:04 +0800 Subject: [PATCH 40/60] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/ProductInventoryService.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index c63da746..e6596b3b 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Newtonsoft.Json; using NPOI.POIFS.FileSystem; using System; using System.Collections.Generic; @@ -16,6 +17,7 @@ using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Values; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace WMS.Web.Domain.Services { @@ -226,6 +228,7 @@ namespace WMS.Web.Domain.Services if (listNames.Count() <= 0) return Result.ReSuccess(); //获取领星仓库 var resStock = await _lingXingService.GetStock(); + _logger.LogInformation($"拉取领星仓库:{JsonConvert.SerializeObject(resStock)}"); if (!resStock.IsSuccess) return resStock; var ids = resStock.Data.Where(w => listNames.Contains(w.Name)).Select(s => s.Id).ToList(); From 14a1eac0eaa2c115e37d2e6171090f92262e151e Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 09:26:45 +0800 Subject: [PATCH 41/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes .../Services/ProductInventoryService.cs | 6 +++--- .../Services/Public/LingXingService.cs | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 845061d2a1e468a406928c9cbc7faf730f236cff..a2bfa09e0e112381d00a4742a5832c583525db76 100644 GIT binary patch delta 5277 zcma);33yXg7RQtK+IMf+WYJQftfMF{rEO^1Vqsbk1Q%df)lqAjq!1`cZByBbuk003 zXsJ8|skmVUWD^XCgNTSbn=3euE1(XeImQJY(D~owlu+i=nS9@$`#a0s&b_bPU6Izi zBCWNgq*>ZF%|3JZ;A}^>!;@8%>2??AW;=>=GF*Lfirj8TR#s+ic1})qc4n?KJ3Ax8 zk>l~YoVgB{J2S(RS>!BoxQjC~Go3cgnQqIq!j+n1!KvZ)(5d0tem%L}wcg-pSJ`-P zaB!JxvUf_LY*M*xptX9s)@j*6t(VzuoX_tGOew!|thcP(7x4GXPD{5L1^#IRM~tz} z*YgTI9$yfCSILO7z(lV*h^EwA7W8?``?qY?ty|uCgLfN-S^D+xdxP#knb%cX>PXAz z5zR#IC~ryez<@vK^7*}<{&~GedChYjYCL2W4lN%v)$6VZx{6A?$ZBeH($MmeK2O1T zf1o_*bN3IHRe1AyH}!Gis0o3J63+ndSXYV9;|h8`1?P-D()1R4%e;QKn&*!*&n7mm zvdLz~xynbCdfmQaUvy)IzaLcH^LjT{?Q%X7R4A|aAJy8Hvb1J#N^_e?bC;LmBy5*O z&(Ioiv%RHeyTqDRsHH@WA+~%+uG5)Ol+h>K;dEr=IMOp6MMb$;>27D1wo+pU8vh=ZAMSc?g-US*V>FR zQ-)xpKL7XE7SR5#ud}F}xn}jQ6lZ_r**CzYpOEkDFFqv`E8MclVcU`#XDPQf9MGIruY=kovyCnG)6wjfHrtEP9;h|!m(cEoUS{7u zw68#~La#xuLvKKDLT^F)p##uC=n&KaV;n~NHuMhkF7zIx#(N+7K-x6h5v$)Jt&{l) z>`$T3AT`$K&==4#=s0u&`V!JG=2vLHhSZw>iMG+U!#)XHwg2My$7t1fY7CYC4cp(M zy#TgaUs&4A=%NV55lD6V4pM_fpzon`7x4q^AE9O#0G(~W*YBru`WeVQ1zTtXbcOtpgRn58B}DD+o07t9Iy(Fa57aVlE)ygLB&Qyc{+tt z!=1xjs;UGwr+!Co#KGC-gzcmygmoHkgcE6k_2L*k+4LFLMew7EhH4^VEkctpN{K;} zIpU8;0*I6vbSFp3;*oMhf(BJ^Z#^Jj@}!eYZ0RN8FW8K7RMt? z5UDY!mLp4}5o(*Did2W#0|qVQ*!K8r79z_Hdhox;TVeE!&`N_I;?S!2RQ2feFczqWstjd*oru~`F#+7=uX5VU^Sf!t^ zZwno$*X!-}XD$C~y?xt|kxw~LF4WqdPi^d>ovZadnmIw_lMk8*O@d0G$&eokK&8-I z=x`_61NQu?D#>5_qOncB_A-I5y5Cg?jxOVE#u%LP5i^;se4G<#PH`i1c!LBBGt5@bt^ z?YUmi*Sz+J1)XGEjS_#u{D>fplOM&*?0rm7nDKEz$(-uH_1K1~w*R!CA)K*6&~=O(1>L~7NzgFH&4NZSZV@z=@fkr|xhUIE zc*c;RRy^HyL2Vg#;DYI~r9CH1n$5gZ(1o1wJT}VsH$fd4cL}-E@OOC(5*c4TY_$5+%M=# zPB^1nX8cgl1jfJP$a%1j1pR}H^0A;#7(Yd~Xo8~!eJ1F0c7Gx07~^q4eje?FpfB0` zm7vEpt8ate)eQ3l-{OLDlyGesBlwIMf55lH_>-Vhj6dUpVf;6)E#nznX2#!egJtZR z*d=Lk1j6yKq4{GBqBV zhRAf>Opa8>BQp`X+j@ST9xzQgoJ>ho693|jGE35INpmF4MGE}$B+Zw!K!&?ewNy`< zN&!&+cUP(xk!$n`_MP~2EAWigGaL-ZmYI-&|Ygl-9)SbGK-Gm@St0iyMEKf$>wW=nsE_8xxmE81Y1~N{lsty=N0^B#d|>SS7|9 zK&mz{5=wnlpV!%_mDu1?>&at!+NBjzy_UJoplMN?s|$N()ULEnAJcbgb<*0jQtuu* zdR$+qB|RYXX&GdNCV!=m(S|JtC*Wn32pN!oB=jKsE1>4!7Env56|@q*hoDtZJ=FM| z>x(B{8@tu#r0(ps9{#7H4bVnt6SNuH0zCt5h16?qTPSc+zsl&aTi|i33cE*vD%@TL zdxdrAv{qp4uhZS3{zLUvMs{YxP-SaI#Ooqc&*|LEegpY5&VN1ZCA8i(GEpB tK$e-LUt+C1qc^|kIjIgg_N=WG(f905X>C2DcefIL(Yu7^oYAk&`w!OLFUkM_ delta 4708 zcmb7{2Y6If7RTqkJM+$^8c-u(Xs*k;u3}~~WHPpmA}mfZh50*{ps?<_GbfDY+wa?b-}is_cgijA+`Kn8J5o72 zQaScvJ;~l^TN8SAjmP3ek)m)>yd)7zlol3-!}+C!(XvkQM53@D5$j(TDUBo|;gU!q zUJ{KLMvF?~(Re{gxI8~nmf$O3M~eb+@6x_j!SuSGmS5M?epz)Xj>aPKl1Tr;Sf^;L zu(T{(RMIIw7EP3vCt^hfC6S_dQGPfakC(;@%1g^5<%#~$a9Lp@Qd$s>#p01fLBQ@5 z_TAq0f)2{=6!n`;u$%R=3cSbr+9!MaciSzk&KbV^Dyxb2)>C$#cX+owsBcanb180o z9SCe@ZDASzR&KYkwu|o(Zg;RAWj)4vob?3jN!C-Wr&-Uio@G79Y8mj}+hgZi+db^D zk9T*o>owNvtUatZSZ}i4V!h2WL%hS<%X*i!kM$nweU{D3+0X3!{{jBUmnN9~-X0U^-FIc}^#FuP;#cIg? zP2d04@9SUmb2#@9+uOAp2qYQIB#?yGvXF1seu0%@?PR^kdWrQd%Pi0=?p4 z2nOqN{Vy7*y*=Ejsvjiroy&fe*w^92eokF(^7v|N0gftjU&Hq!Ik?WbIK>wdj%iX! zJB1P_g;ED)66v3flyl^I2LmK>LpCzdNx2y0V6cRSWJ5!_(~S;>No067Qo)f*2O}hM zQ#LY^BcmLQmdFNmY;j{aGSQJPKOk#9o!&yT9rhm6vn8iD_gj2hif$w(G&8kduPo}vy z)7#}K4G!bReB30(!N2yaWmB*I?7$pm+w@D#%Pf>Q}sNWW=> zrGhsT)(cK2Y!aM7*ep1c@R;B%!VbaNgl7cj5WW?hOZX;@Zez?Nd@t_#gauNdg@hyG zttR{^cnjg*f{O@&Q0AEz6AsGSmk_=b^ax)IE+yEKdn?Z@-erWOD|{OvS2AuVoG!SW zr;~&lUXNfc&unLAzJvEba#!#i;=PlwQXbY$j|G+)CIcxSfzELp(w_MQ{hU4$~hR|(~Uy9omXU*j#8(O&1*PKxpd4=nf=cawy-3Gaw^FX3ImeT1Ph*n9kr zzAx_mguA5Q2ZRsB`w`(|!B6<_RT4fWd?wz{2?qoZ621`plJJ$_*MviYNdg4FA*2{x z^VRv5@SV87C;T8-M>s6_BY(JL#Xk{72_7Mg5j@H-isb%G7$@FP+; z+ex@kBPLj+5f?mL;~c?rHO><}U*oTW#Tpj~UZ~Mo@FI;af?YNKCfH4*yWqtdm!y%u zzn5xUChi^@Jq0h<_`Bd08vhXdr$#Tq-Wpd5{!8O3!9E&S3tppftzch`euCF&Bm_$| zO4|sRY4jH?*SKDAfH!1~%C~OtYSyTN%LeMqaeI(92a@!0d$3Mnh{jNf+?b6FQCrRcoIz{)yR4pgdY5JlRW~yX!^Do3MtJ*s1ht{dX ztz4h#4{A4S{`h7OYRr5YSNh_waed-+%|Ps^e*cwK+XYp_zuIZ7DC?Bhq%I_WCtY-Mm!?RE0fTd(CQ9d;gq+ zYL?w_jxNSr);#UCf78zO=C4p4{Jp(Y3)`O0wZBs3_F2H;g{($=0&C1_!fMK@X5THW zMXbfF`lH?1d~7pEyCv-NSW8*AvX-%KW8KbL&Z^Pg@I$IFWKMPu_`43NGo6+`@j2C0 zc8dX1xorlvk-y^-wcd$Fg5B|;MkJWxA59KSRw>-ihg1)1bhi}WxHM}Gtu?gH&^qtP z5mk`?kT$!SInY*8`Xswvr<;c}&4x^~G1F}F`W;oL`l}DCR+ck7#8VCTcK)dHoeIMh zp7oO&?Tj!y!gGI8C+3VaJTjERXal1|eqy;ID>2qsV?(KA!|s?GN;XVkVyHW&g}6x} s%unO<7w7j+v)QbCvw4OshPD{mYG|vWjzOl5-0Q4hH-E}eb s.Code).ToList()); var res = await _erpInventoryService.GetInventory(codes.Select(s => s.Code).ToList()); - _logger.LogInformation($"拉取金蝶数据结果:{res.IsSuccess} {res.Message} {res.Data.Count()}"); + _logger.LogInformation($"拉取金蝶数据结果:{res.IsSuccess} {res.Message}"); if (!res.IsSuccess) return res; //过滤掉不符合要求的组织和仓库组合 List listOld = new List(); @@ -144,7 +144,7 @@ namespace WMS.Web.Domain.Services var ids = resStock.Data.Where(w => listNames.Contains(w.Name)).Select(s => s.Id).ToList(); //获取领星库存 var resInventory = await _juShuiTanService.GetInventory(ids); - _logger.LogInformation($"拉取聚水潭数据结果:{resInventory.IsSuccess} {resInventory.Message} {resInventory.Data.Count()}"); + _logger.LogInformation($"拉取聚水潭数据结果:{resInventory.IsSuccess} {resInventory.Message}"); if (!resInventory.IsSuccess) return resStock; @@ -235,7 +235,7 @@ namespace WMS.Web.Domain.Services string strIds = string.Join(",", ids); //获取领星库存 var resInventory = await _lingXingService.GetInventory(new Core.Dto.LingXing.LingXingInventoryRequest() { wid = strIds }); - _logger.LogInformation($"拉取领星数据结果:{resInventory.IsSuccess} {resInventory.Message} {resInventory.Data.Count()}"); + _logger.LogInformation($"拉取领星数据结果:{resInventory.IsSuccess} {resInventory.Message}"); if (!resInventory.IsSuccess) return resStock; //物料 diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index df6f5415..2c097ac7 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -25,6 +25,7 @@ using WMS.Web.Core.Help; using static System.Net.WebRequestMethods; using WMS.Web.Domain.Values; using WMS.Web.Core.Dto.JuShuiTan; +using System.Threading; namespace WMS.Web.Domain.Services.Public { @@ -142,6 +143,7 @@ namespace WMS.Web.Domain.Services.Public int num = res.Total / 800; for (int i = 1; i <= num; i++) { + Thread.Sleep(1000);//怕拉取过于频繁接口限制 dto.offset = i; if (i == num) dto.length = res.Total - (num * 800); resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); From 148d8b702a0060a90090f9ec16dbf0bdd4e0cbd1 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 09:49:28 +0800 Subject: [PATCH 42/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/ProductInventoryService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 03e2d19c..b09effa7 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -269,8 +269,8 @@ namespace WMS.Web.Domain.Services Type = ProductInventoryType.LingXing, MaterialNumber = m.MaterialNumber, Customer = seller.Name, - OrgCode = stock.Code, - StockCode = stock.ErpOrgCode, + OrgCode = stock.ErpOrgCode, + StockCode = stock.Code, Qty = pList.Sum(s => s.Product_Valid_Num), BeforeQty = pList.Sum(s => s.Product_Total) }; From 0e2b6c259e25aabcf7d7247fdcc8ba373f0323f6 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 10:03:29 +0800 Subject: [PATCH 43/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/ProductInventoryService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index b09effa7..5a749c36 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -173,8 +173,8 @@ namespace WMS.Web.Domain.Services Type = ProductInventoryType.JushuiTan, MaterialNumber = m.MaterialNumber, Customer = "", - OrgCode = stock.Code, - StockCode = stock.ErpOrgCode, + OrgCode = stock.ErpOrgCode, + StockCode = stock.Code, Qty = item.ky_qty, BeforeQty = item.qty ?? 0 }; From 21d7595a363c6cfc5bdb0be5aa9cccc7c291bd15 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 11:57:49 +0800 Subject: [PATCH 44/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 5 +++++ .../Dto/LingXing/LingXingInventoryRequest.cs | 6 ++++++ .../Services/ProductInventoryService.cs | 9 +++++---- .../Services/Public/LingXingService.cs | 17 ++++++++++------- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index c2dee348..5f2cd6fd 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -4075,6 +4075,11 @@ 仓库Id 1,3,234,33 + + + 物料规格型号 + + 领星即时库存 diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs index 580423a4..9d770042 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingInventoryRequest.cs @@ -16,5 +16,11 @@ namespace WMS.Web.Core.Dto.LingXing /// [JsonProperty("wid")] public string wid { get; set; } + /// + /// 物料规格型号 + /// + [JsonProperty("sku")] + public string sku { get; set; } + } } diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 5a749c36..0646e2e6 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -247,6 +247,7 @@ namespace WMS.Web.Domain.Services var sellerList = await _lingXingService.GetSeller(); //合并 var group = resInventory.Data.GroupBy(g => (g.StockId, g.SKU, g.SellerId)); + //int cc = group.Count(); List inventoryList = new List(); foreach (var item in group) @@ -262,8 +263,8 @@ namespace WMS.Web.Domain.Services //店铺 var seller = sellerList.Data.FirstOrDefault(f => f.Id == item.Key.SellerId); if (seller == null) continue; - var pList = resInventory.Data.Where(w => w.SKU == item.Key.SKU - && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).ToList(); + var first = resInventory.Data.Where(w => w.SKU == item.Key.SKU + && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).First(); var entity = new ProductInventory() { Type = ProductInventoryType.LingXing, @@ -271,8 +272,8 @@ namespace WMS.Web.Domain.Services Customer = seller.Name, OrgCode = stock.ErpOrgCode, StockCode = stock.Code, - Qty = pList.Sum(s => s.Product_Valid_Num), - BeforeQty = pList.Sum(s => s.Product_Total) + Qty = first.Product_Valid_Num,//pList.Sum(s => s.Product_Valid_Num), + BeforeQty = first.Product_Total//pList.Sum(s => s.Product_Total) }; inventoryList.Add(entity); } diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index 2c097ac7..3fa38da3 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -129,6 +129,7 @@ namespace WMS.Web.Domain.Services.Public /// public async Task>> GetInventory(LingXingInventoryRequest dto) { + //dto.sku = "NTONPOWER-OSP-3A2U-US-BK-4.6M"; var resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); List list = new List(); @@ -136,26 +137,28 @@ namespace WMS.Web.Domain.Services.Public if (res.Code != 0) { _logger.LogInformation($"领星获取数据失败{res.Message}"); - return Result>.ReFailure(ResultCodes.LingXingDataError); + return Result>.ReFailure(ResultCodes.LingXingDataError); } list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); - + //var b = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); int num = res.Total / 800; for (int i = 1; i <= num; i++) { Thread.Sleep(1000);//怕拉取过于频繁接口限制 dto.offset = i; if (i == num) dto.length = res.Total - (num * 800); - resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); - if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); - res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(dto), null); - if (res.Code != 0) + var resUrl_f = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); + if (!resUrl_f.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + var res_f = await _httpClientService.PostAsync(resUrl_f.Data, JsonConvert.SerializeObject(dto), null); + if (res_f.Code != 0) { _logger.LogInformation($"领星获取数据失败{res.Message}"); return Result>.ReFailure(ResultCodes.LingXingDataError); } - list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); + list.AddRange(JsonConvert.DeserializeObject>(res_f.Data.ToString())); + //var bc = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); } + //var bcd = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); return Result>.ReSuccess(list.Where(w => w.Product_Total > 0 && w.Product_Valid_Num > 0).ToList()); } #region 基础函数 From 3c1f064d8ac052b32cd4e7bf68d33e1b92f64952 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 14:16:46 +0800 Subject: [PATCH 45/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/LingXingService.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index 3fa38da3..e6c543dd 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -129,6 +129,7 @@ namespace WMS.Web.Domain.Services.Public /// public async Task>> GetInventory(LingXingInventoryRequest dto) { + //dto.length = 50; //dto.sku = "NTONPOWER-OSP-3A2U-US-BK-4.6M"; var resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); @@ -155,8 +156,12 @@ namespace WMS.Web.Domain.Services.Public _logger.LogInformation($"领星获取数据失败{res.Message}"); return Result>.ReFailure(ResultCodes.LingXingDataError); } - list.AddRange(JsonConvert.DeserializeObject>(res_f.Data.ToString())); - //var bc = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); + var d = JsonConvert.DeserializeObject>(res_f.Data.ToString()); + //var bc = d.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).Any(); + //_logger.LogInformation($"次数:{i} 是否存在{bc}"); + + list.AddRange(d); + } //var bcd = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); return Result>.ReSuccess(list.Where(w => w.Product_Total > 0 && w.Product_Valid_Num > 0).ToList()); From b5165016d2257fb95cf6a1b1654daa04385a3643 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 17:02:51 +0800 Subject: [PATCH 46/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs | 2 +- src/WMS.Web.Domain/Services/Public/LingXingService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs index a8651d13..79042351 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs @@ -11,7 +11,7 @@ namespace WMS.Web.Core.Dto.LingXing public class LingXingRequest { /// - /// 页码 + /// 不是页码 是从第几条数据开始 如果是第二页的话 就是1*800 /// [JsonProperty("offset")] public int offset { get; set; } = 0; diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index e6c543dd..71d100c6 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -146,7 +146,7 @@ namespace WMS.Web.Domain.Services.Public for (int i = 1; i <= num; i++) { Thread.Sleep(1000);//怕拉取过于频繁接口限制 - dto.offset = i; + dto.offset = i * 800; if (i == num) dto.length = res.Total - (num * 800); var resUrl_f = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); if (!resUrl_f.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); From 65cc5d731e83d54e8fd9535cc967800cfccfcdb9 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 17:08:48 +0800 Subject: [PATCH 47/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/ProductInventoryService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 0646e2e6..f39f880b 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -263,8 +263,8 @@ namespace WMS.Web.Domain.Services //店铺 var seller = sellerList.Data.FirstOrDefault(f => f.Id == item.Key.SellerId); if (seller == null) continue; - var first = resInventory.Data.Where(w => w.SKU == item.Key.SKU - && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).First(); + var pList = resInventory.Data.Where(w => w.SKU == item.Key.SKU + && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).ToList(); var entity = new ProductInventory() { Type = ProductInventoryType.LingXing, @@ -272,8 +272,8 @@ namespace WMS.Web.Domain.Services Customer = seller.Name, OrgCode = stock.ErpOrgCode, StockCode = stock.Code, - Qty = first.Product_Valid_Num,//pList.Sum(s => s.Product_Valid_Num), - BeforeQty = first.Product_Total//pList.Sum(s => s.Product_Total) + Qty = pList.Sum(s => s.Product_Valid_Num), + BeforeQty = pList.Sum(s => s.Product_Total) }; inventoryList.Add(entity); } From a2fa293414d69b4345704528947005ed4912c71f Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 31 Oct 2024 17:27:00 +0800 Subject: [PATCH 48/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/ProductInventoryService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index f39f880b..d1e6be2e 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -262,14 +262,14 @@ namespace WMS.Web.Domain.Services if (stock == null) continue; //店铺 var seller = sellerList.Data.FirstOrDefault(f => f.Id == item.Key.SellerId); - if (seller == null) continue; + var pList = resInventory.Data.Where(w => w.SKU == item.Key.SKU && w.StockId == item.Key.StockId && w.SellerId == item.Key.SellerId).ToList(); var entity = new ProductInventory() { Type = ProductInventoryType.LingXing, MaterialNumber = m.MaterialNumber, - Customer = seller.Name, + Customer = seller != null ? seller.Name : "", OrgCode = stock.ErpOrgCode, StockCode = stock.Code, Qty = pList.Sum(s => s.Product_Valid_Num), From 9f62fad75643624517e44d7a932cc7cbd0c1e72a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 1 Nov 2024 11:46:00 +0800 Subject: [PATCH 49/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes src/WMS.Web.Api/Controllers/TestController.cs | 6 +++--- src/WMS.Web.Api/appsettings.json | 4 ++-- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 2 +- .../Services/ProductInventoryService.cs | 1 + 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index a2bfa09e0e112381d00a4742a5832c583525db76..6bf88877c9140240f18f83439a2b66519987e711 100644 GIT binary patch delta 3346 zcmZ{m33wIN702JqBsnJ`0-+ERBy5F1ts)H+Su72UmPI191;r|nC?|&YY-0Uz!>>DVCX<7;SE!X}{@R z(|e|<&^LAO>kskuZnm^dIab@vx0`25Go_m{Ok&c^;GH_RuvO!eY-*FDgH9cCe&eC2 z^U)sD%x1=OcDW}iv&zIAyIPk7&Bl7IoYwI!W4(ZCDVttEkAby+qf%F?O`EnV|zWE%Y!^!gSmzr}DzgDyP00lVo7n z1lt`<7EC$McL}DR=V^lS^E_SPM;vCOLVV01R|eTa7p`VnUdE+^h27(l#N zP)xi}Fo-x?Q0JtI%@GV?bgtk^;yl5gD8aW~+%MS6xhd4HN-%$nYh?Gaf1Aa;5hM7!Aas{g2&mPCj|A3E)kp|E)|?3 zJ}HQ$r=EG4;4t_8l;8;QX~9wAGXgi6>u2Lnwlc%d3PR#@f?QVnv*04)Uu-!hJa79U zR@=&MYURJ$88G*6wg#ii1%KybydW6LgntNz`{WgZtBC&;lo0a#nj+@E)7;zTgAmhc=A~2LvB6`mx}k4D^%lfkT4ZSnaUj6J{I{Ji~dP+E16! zWA+;*!jK8a1qnt^2tFg86nsuRB{)qyBlv{8T!#{u(=|K;TDQ-5nC!+5pxx-iFt~AVjIPU z#I}k8Vmn29Vh2S>VkgD7iJcW)h=uB-E4iEEJH(3=-z8qGxP;hUaVfEf;(Np*MNeWc z#rKK56_*kFDEbonDf$yHSNtHt=>0oD@k54-6$6Qb6oZLF6ju&iNTWPUeA$t z>hOeJn52u#p)WK)eZl*s{v0LZx19!c4Wh zeIDGcn5DQ!aj#`s{658O#T*UWVXh9c6STjgxoZE-?QZGwG|a>OiU%y)0{oZ=CHm}` zucNTQ3VD&UP=_Qi+Y4J%ISa7WsdCQ7(_ipTxA8Z~;Dmin*rQdcy?hhcX>3=-4aWRU zUnM@M<}@T4M~Nw8Q2SNlLuyV#qH&a%G6rqk!HIbJYu>DajEB`8ZBd|yyzbp5>j)cU zqm8B|eYV&9ilpyrP@3rt4W2#ZmAQciIZM5c@&1RsId0ZsEyg3JM>XiU+szH;FY^lH zdq;bDuKSqv{#q}$_v1GFgsF*BjBL{drlzJP7F%k1(zMLfC!-jBP5n$cPEdZ#E6G`D z@l~d{=?$B+I==OocS%P61{s#@nsve;>QHS2wGyux;jPH%Rg^XiFDi=C>|i|`sPqze z-VP_gOFA@RH*3L~h}J~3HlnpbeZAMS$IBX>+8oPWWaocH)WjN1npaY0UCOLanOB3- NvtH-8cg|bW|Nk;2u;~B* delta 3392 zcmZXW349gR6~^DpBsnLt2n17zAyP$9s+bZ)K#PGO1q7s4Xr)?fwMsW^)u?FVBteu- z4N(|SajUIuq+n_Bfk@aQ*jid3ECxl~P(haWIjE=vdv4wbLHmBc@7@1B_q*q=Gw;>K z?dsxoUiK{S*}y;lg38({wce6if794Zzi&|@FB&x7%SqOZ^ZR#?hL`&#K~bV-)PA*p zT5@5zzkY1geyyJ$buITLT6w_BjY=E*foHGML}ImRjj3HCkyvYGz3FAf)>*mU^h&g` z!S8WqXR~a!YJ+KuX{%|Q$=SD?UNbdD`CI%R;ReHZP4Ag@o8C8lVEWMHTbeyq?llF* zA6a>r_BiF|3?pkX3$#NfnDYO=cPXtPV~ zFuh^gX?oM-61`=5+w_j<#NGSmBEGqs9c|#F*5@lzBHMP(k;9!**)`sg=WweGO0~jf52b?Jj`8h+JC5-r!JWtWEWS50Ss3OE+S4A3?$woC?-x33?|+y*y^RT-6t5r=v2W_ z;xs`c4bug$6K4o^5@!m+UF7=(m$Tmkg1N*81&fK*f)|Lh1WSoEf>p$a1a-uR1?z~j z1&4@p1RoP4!Kcj_w#Hn+JZ{hV;-73dI-a%p5dUl=`{|MYVrM{at&PFxbAkn2#$N@) zXjmv1L0lvlNqk-~I*lRzCK$u;V!=4#-v$3*wk5Xl#H64thg&M>KwM@wEJ#o7ML`vD zxu7ErFWEwgD+GDOI>GqNFx_vZ9V5qBEm%WbE2t;FEXZfSb%N80>jmA2uL!ym|0yUS z{!7r6_^RM6;=ct~ah>4?!PVsd2+pD7zk*HN_>F>VXxJnuq+zq57qLOmo47^Lhq%?A zHR3kGb|%{{xR%LY6I_=$C~SU48wJ-hyhCsU@pZuj;v074%(heTCO2i5;4R|Y){TaD z1n)BXo?tieeZfQ~`#|s^qkHU?@C^Iy6@0|-KEZzC0lTj>95iGUcA<%}Jz&I7?5QGt zCOAy|+@2)jmv*0tO?Jx-L-&gM%I>zNFM_A=iGiY&GtN-lPRvwHB4#OsURB)1Xtv@c zMq4Rb6Wb`-5>HmNBevHN9mqL~j>Jm{d=~eC&S-SoI^ZU(TjMVqLBDqMQ>t}q7U(WMPK3tihjiYiUGt6 z6&De|rx-}QSP>SJ2Pp;L~B2M`+N;Sr9b|cwxM@!2j zYq`^|B3sH@TFR~E?r8p^;HEIt%MdCmZ1Xjhi%Lb6VzS~MvsiqJ;$Fplnkv9l9c21g_$}A_gmkt)f-J;8GC z;pDu%!2&;fwiaWKDN2ssAB^?=xf)eA`niMWS?m#0E3X)>O>InVO^;gaG1Gk0JDkTdFR-1U*dLa zxi%LsrHd8mqAp#mjCM5z-7b!Co()x)VR;G-76b+hf;go$iE1=ivTDoHlDIsb_;|)> iMN^O$?QRNkI#y;5jZ-;ht*CICogHInGB_G6zwm!~|I%mx diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 5dcf507d..a706af45 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -123,9 +123,9 @@ namespace WMS.Web.Api.Controllers //var b = b33.Data.Where(w => w.Id == 10923342).FirstOrDefault(); //await _juShuiTanService.GetTest(); //string codes = "AD"; - //var b = await _erpInventoryService.GetInventory(codes); - int count = 10 / 5; - var bcd=await _productInventoryService.LingXing(); + //var b = await _erpInventoryService.GetInventory(new List() { "111"}); + //int count = 10 / 5; + //var bcd=await _productInventoryService.LingXing(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Api/appsettings.json b/src/WMS.Web.Api/appsettings.json index a87d8d73..b80a9f8e 100644 --- a/src/WMS.Web.Api/appsettings.json +++ b/src/WMS.Web.Api/appsettings.json @@ -37,10 +37,10 @@ }, "ErpOptions": { "EndpointAddress": "http://erp.orico.com.cn/k3cloud/ERPGW.asmx", //原:119.23.206.129 - "UserName": "mes", //测试账号密码 mes/A1B2C3Dh/ce20210909/666a6c4a522823 正式账号密码 orico/A123321./Orico/663a26829afbdd + "UserName": "mes", //测试账号密码 mes/A1B2C3Dh/ce20210909/6723b1acf19987 正式账号密码 orico/A123321./Orico/663a26829afbdd "Password": "A1B2C3Dh.", "ErpId": "ce20210909", - "ZhangTaoId": "666a6c4a522823" + "ZhangTaoId": "6723b1acf19987" }, "OpsOptions": { "Url": "https://api.opsscm.test.f2b211.com/", //https://api.opsscm.test.f2b211.com/ diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 5f2cd6fd..23377e50 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -4132,7 +4132,7 @@ - 页码 + 不是页码 是从第几条数据开始 如果是第二页的话 就是1*800 diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index d1e6be2e..c7505401 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -93,6 +93,7 @@ namespace WMS.Web.Domain.Services OrgCode = item.OrgCode, StockCode = item.StockCode, Qty = item.Qty, + Batch=item.Batch, BeforeQty = item.BeforeQty }; inventoryList.Add(entity); From a5b28bbb47d62087d66d674920869f26f0bc4c0c Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 1 Nov 2024 13:52:37 +0800 Subject: [PATCH 50/60] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ProductInventoryController.cs | 20 +++++++++---------- .../AuthorizationTokenSecurityPolicy.cs | 2 +- .../ProductInventoryRepositories.cs | 6 ++++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs index a8927f55..5eb31ea1 100644 --- a/src/WMS.Web.Api/Controllers/ProductInventoryController.cs +++ b/src/WMS.Web.Api/Controllers/ProductInventoryController.cs @@ -55,10 +55,10 @@ namespace WMS.Web.Api.Controllers [Route("GetUcStock")] public async Task> GetUcStock([FromQuery] string name) { - var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); - if (loginInfo == null || loginInfo.UserInfo == null) - return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); - var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync(name, loginInfo.UserInfo.CompanyId); + //var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + //if (loginInfo == null || loginInfo.UserInfo == null) + // return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); + var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync(name, 1); var response = r.Where(w => w.ManagementSystem == 1 || w.ManagementSystem == 4 || (w.ManagementSystem == 2 && !string.IsNullOrEmpty(w.WarehouseCodeOfJushuitan)) ||(w.ManagementSystem == 3 && !string.IsNullOrEmpty(w.WarehouseCodeOfLingxing))).ToList(); @@ -74,9 +74,9 @@ namespace WMS.Web.Api.Controllers [Route("GetList")] public async Task> GetPagedList([FromBody] ProductInventoryQueryRequest dto) { - var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); - if (loginInfo == null || loginInfo.UserInfo == null) - return ResultPagedNumber2List.ReFailure(ResultCodes.Token_Invalid_Error); + //var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + //if (loginInfo == null || loginInfo.UserInfo == null) + // return ResultPagedNumber2List.ReFailure(ResultCodes.Token_Invalid_Error); var (list, count, details) = await _repositories.GetListAsync(dto); var result = ResultPagedNumber2List.ReSuccess(list,count,details); @@ -112,9 +112,9 @@ namespace WMS.Web.Api.Controllers [Route("Refresh")] public async Task Refresh() { - var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); - if (loginInfo == null || loginInfo.UserInfo == null) - return Result.ReFailure(ResultCodes.Token_Invalid_Error); + //var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + //if (loginInfo == null || loginInfo.UserInfo == null) + // return Result.ReFailure(ResultCodes.Token_Invalid_Error); return await _productInventoryService.Refresh(); } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs b/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs index 4304d74c..e387b15d 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs @@ -49,7 +49,7 @@ namespace WMS.Web.Repositories.DependencyInjection string[] pathlist = path.Split('/'); bool isLogin = pathlist.Where(x => x == "login" || x.ToLower() == "heart" || x.ToLower() == "test" || x.ToLower() == "serialnumber" || x.ToLower() == "barcode" || - x.ToLower() == "swagger").Any(); + x.ToLower() == "swagger" || x.ToLower() == "productinventory").Any(); if (isLogin) { context.Response.StatusCode = 200; diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs index eb3fcf39..69d03534 100644 --- a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -105,8 +105,10 @@ namespace WMS.Web.Repositories public async Task<(List list, int total, List details)> GetListAsync(ProductInventoryQueryRequest dto, int companyId = 0) { - if (companyId == 0) - companyId = _loginRepositories.CompanyId; + //因为要开放给别的系统用 固定死 + companyId = 1; + //if (companyId == 0) + // companyId = _loginRepositories.CompanyId; #region erp基础资料 List mNumber = new List(); var materials_result = await _erpService.BillQueryForMaterial(); From 12c37bc88f23ced7d241250013ecfce1a970ddf9 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 1 Nov 2024 17:19:39 +0800 Subject: [PATCH 51/60] =?UTF-8?q?=E9=98=B2=E6=AD=A2=E9=A2=91=E7=B9=81?= =?UTF-8?q?=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes src/WMS.Web.Api/Controllers/TestController.cs | 2 +- .../Services/Public/JuShuiTanService.cs | 3 +++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 6bf88877c9140240f18f83439a2b66519987e711..ef3222e1a00db412260917043c264e13abeb8e90 100644 GIT binary patch delta 3956 zcmai$33OD|8OLYdP2Trd3s@sdfavkq9!{Hv$z&PZ(+05?EDan_;Z#etWRjFMEFr8R z6V|Xp!t&Tch#(4tg#AGSVaEkgkVOFz+(3|JJ_m&=Y5Tu3Ul^tB>74VQ`}>x=y!*|( zd+S0i>Ow7ye^?WZ?S{Ls=QBQknlH!OxwAjXla}sF^QL)|ay?1jK)2mwn=-5$E1*Uq5YheE2k6XQ20?51_NqAv^w*(Jo+Mwo5QShV)84LEB)vVSfr+ zx1UK|52I(iAok~CUq<^Q222A6@&I`%jtc_*p-~{4IKKz znRrasy`el z#`nDz{8#hY5I)?`)J-U8ggDC#vESruiR45hxrqGDbYxN8I*?l`5fkrTG*V6^P|Zld;N5 zGZ@D&o59w++T=AD9FBIu_+a~B2cC(tEk^2Z^(?QL;bv{5c{S3!7HQVm2^Gp?tT*jt z*VLm70P!<|#l&YNVIuK)!AZn{3&N9$FA7c} zeop#LC0-&pjd+V-3GoiW>BKt)XAtiboJm|KIE(m*;B4aCf^&$!3S*!t&n5mw-1CU% z%LbJa-xF^c@wb8ti2o_Lkk}O)dFDmL*JSOBiLVRV#5V<(5F3)a6f=u=8F4Tmyqq{r zGFA|G5-i7blCTo%5v;(>Mr7tysDb2GVh-`XOuSkiV-0aPNqB|$S;4i$Jt7$3SBW#l z{TgvE!F9xa1lJR9kkP7$Hwso0H<#&Zh+7G6A}&&qrEMmjB)En6$C9uW&ndW#xUJDR zlDwVx1^f0ol@O?v@plu)OX42l#{}z$9~az9{Dj~>;tqoQi4z155dT#0AaP%LnnT2Y z5j;%%Gf6l?d?LKN_&vN%{E}q6L7XHRZxSa8zD4X2JWA{pd>j8L!DGblORe4^?k9u2 zOY9dsPMj@xf;d<3J>vcW;gcw=jCKltF4>eb7+CNF^pk|M#OK6&p7=w-3&eRc*hlzp ziT4um8tL{i@h9T_l=!mGLn*@v-)ERjN~KvLe3;%i>0YjV*3sIqR#GGVEK`D$zZ_ z?ogwWdknN9cc?*@K1;%PsKHiaXI9z?H-y{4*+MzgI9o&(KwGHdhP`h2Z&dIi0#Ora5u({gm7Qz?yqefGW xrcIhQ*@g8gIcc+{3mLg`UDy!5impv5;*F5IBrNXWRhs)B(kEoF5!p<*W+%S%yeK#G81Pe zgrDgU{vUxrr1{9lA4Wh>1V`5uQAF5XmCyQJbrlsqh&a#jw+gzid){OKkDl#w?$mwn zzIs*ls;8=V#j|$Bv$P%=GqjzWI=yOSiL1orE3Pf_dh5zcTy>>|o?)f6UazaTxTvh8 zw6vt8sLWkbQdsCJ^%)*_nakrXD)bfAx@%qDy27F&x1zZVlrrnYbj>yQ+bT8sZI$-2 z=-cNSBXXlBG~S4e40#%jmSCtpY#lkEjWqj=^9OvvmhffOMkwqL2Cgj0FHmGp4Srwc z_&_im@q33yLd{0`&@+7;ICes?xxsgpQSE8)`#cfDS9x0Y8%(3l2pIvdJ$byM zwz}WC;*i$ge2?@ag!c&_5I!UvB^)GtMEIES3E@-1F~VmAjq)F-_H%+g_6cf}wo3LF zWZP|wbvw76&(2}TBimo0PBD_v`gYYIn$w+jxC-)BFUBdrU zy|Wi_Ml~;{Bz-BjO35{XAfyq}36cN=JtMV!nY}33-q*c)%Gt{SE6VSZIk_f+bm-_xJBZ_l$RX*cf$p=S1Ty=YI}gK(rLCO znnx1Nqlsp_v^G?UY^!69=&wB{t%Fr!Q1rkWah|5`u#T=3AFDf~1;<35YJI+5v}%t_ ztKc;)yLVJpU@4)Dkfm1OxoY&u4dOY?oB$Q*Crl*N6B-DOga9E(Xd=8s9d4)g0JVuj zB?P~8sD!{-qV!(HpE&+U(=~BQOxSQDlxRUuY z!0k+z13u2Q6YvS9cLDBZx&m+)Qw#6~rYixzV!8_OOQx#E8fbMPdq11GY2W1=yDZo}mRX-3@pF(`Ny1;Srt#+{1Hx z9&j(y7XbG$-4B@SbTiMvzXJ~D6#oFci0MB8FJby3;DtPf&;On(IY39Nmj<~Q>=pkoVD zUB@X*Gjz<<6K_io9jB#7GaeE`tMIdLqK@@U8+2@B8qhJwv`NR?nTB)>GmTi8n?-@z zY+bQgxUQe1C%&#)bo&-^KCUL~ah#&#R92>?lds9DMC>zmp&h-I+x7nIm^$L2DU-R9V) z_5D%tlxFEsx@() { "111"}); //int count = 10 / 5; - //var bcd=await _productInventoryService.LingXing(); + var bcd=await _productInventoryService.JuShuiTan(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs index 384357c7..b2630e74 100644 --- a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs +++ b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs @@ -11,6 +11,7 @@ using System.Linq; using System.Net; using System.Security.Cryptography; using System.Text; +using System.Threading; using System.Threading.Tasks; using WMS.Web.Core.Dto.Erp; using WMS.Web.Core.Dto.JuShuiTan; @@ -94,6 +95,7 @@ namespace WMS.Web.Domain.Services.Public List list = new List(); foreach (var id in StockId) { + Thread.Sleep(1000);//不能太频繁请求 JuShuiTanInventoryRequst request = new JuShuiTanInventoryRequst(); request.wms_co_id = id;//10923342; request.page_size = 100; @@ -115,6 +117,7 @@ namespace WMS.Web.Domain.Services.Public int count = Convert.ToInt32(resData["data"]["page_count"]); for (int i = 1; i < count; i++) { + Thread.Sleep(1000);//不能太频繁请求 request.page_index++; resContent = PostUrl("/open/inventory/query", JsonConvert.SerializeObject(request)); resData = JObject.Parse(resContent); From ec0be490e17a9e3248d3dce66404fb3f33a72bae Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 1 Nov 2024 17:47:48 +0800 Subject: [PATCH 52/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs | 5 +++-- src/WMS.Web.Repositories/ProductInventoryRepositories.cs | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs index b2630e74..b7cc5e52 100644 --- a/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs +++ b/src/WMS.Web.Domain/Services/Public/JuShuiTanService.cs @@ -140,8 +140,9 @@ namespace WMS.Web.Domain.Services.Public item.ky_qty = (item.qty ?? 0) - (item.order_lock ?? 0) + (item.virtual_qty ?? 0) + (item.purchase_qty ?? 0) + (item.in_qty ?? 0) + (item.return_qty ?? 0); } - var resList = list.Where(w => w.qty > 0 || w.ky_qty > 0).ToList(); - return Result>.ReSuccess(resList); + //这里不能过滤掉都是0的 因为要修改 + //var resList = list.Where(w => w.qty > 0 || w.ky_qty > 0).ToList(); + return Result>.ReSuccess(list); } /// diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs index 69d03534..bc1df4b0 100644 --- a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -136,7 +136,7 @@ namespace WMS.Web.Repositories var query = _context.ProductInventory .OrderByDescending(o => o.Id) - .Where(adv => 1 == 1); + .Where(adv => 1 == 1 && (adv.Qty > 0 || adv.BeforeQty > 0)); if (!string.IsNullOrEmpty(dto.MaterialNumber)) query = query.Where(w => mNumber.Contains(w.MaterialNumber)); @@ -220,7 +220,7 @@ namespace WMS.Web.Repositories public async Task> GetEntityList(ProductInventoryType type) { var res = await _context.ProductInventory - .Where(f => f.Type==type) + .Where(f => f.Type == type) .ToListAsync(); return res.Clone(); From 94040ba63dc5d4ed584a0e99d9ef2e7150ecbe1e Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 4 Nov 2024 16:06:32 +0800 Subject: [PATCH 53/60] =?UTF-8?q?=E9=A2=86=E6=98=9F=E6=B5=B7=E5=A4=96?= =?UTF-8?q?=E4=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes .../Dto/LingXing/LingXingRequest.cs | 5 +++++ .../Services/Public/LingXingService.cs | 17 ++++++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index ef3222e1a00db412260917043c264e13abeb8e90..fc3f0c8a2f8629df326301a2e231ba9496b6cd30 100644 GIT binary patch delta 29446 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 AZvX%Q delta 28791 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 diff --git a/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs index 79042351..d4df39b9 100644 --- a/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs +++ b/src/WMS.Web.Core/Dto/LingXing/LingXingRequest.cs @@ -20,5 +20,10 @@ namespace WMS.Web.Core.Dto.LingXing /// [JsonProperty("length")] public int length { get; set; } = 800; + /// + /// 海外仓 + /// + [JsonProperty("type")] + public int type { get; set; } = 1; } } diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index 71d100c6..805e8021 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -77,6 +77,8 @@ namespace WMS.Web.Domain.Services.Public if (stock_list != null && stock_list.Count > 0) return Result>.ReSuccess(stock_list); + List list = new List(); + //默认获取本地仓库 如果需要海外仓 另外需传参数type var request = new LingXingRequest(); var resUrl = await GetStr("/erp/sc/data/local_inventory/warehouse", request); @@ -85,7 +87,20 @@ namespace WMS.Web.Domain.Services.Public var res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(request), null); if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); - var list = JsonConvert.DeserializeObject>(res.Data.ToString()); + list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); + + //海外仓 + request = new LingXingRequest(); + request.type = 3; + resUrl = await GetStr("/erp/sc/data/local_inventory/warehouse", request); + if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + + res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(request), null); + if (res.Code != 0) return Result>.ReFailure(ResultCodes.LingXingDataError); + + list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); + + //设置缓存 _memoryCache.Set("lingxing_stock", list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); From 541630305633f55c34cf717fa14d89096ca82832 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 5 Nov 2024 09:34:06 +0800 Subject: [PATCH 54/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes src/WMS.Web.Api/Controllers/TestController.cs | 2 +- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 5 +++++ .../Services/ProductInventoryService.cs | 5 +++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index fc3f0c8a2f8629df326301a2e231ba9496b6cd30..08d6c8c4a6f97d58032cc58236edb11622a80498 100644 GIT binary patch delta 3339 zcmZ{m33ye-702JbH+koT#0Ua02#G*tu@yv7kWwp4QIJ(DwA2lu0$pqiVnDW=1aU!B z2+Bo4!D=^DC@uID1Qj7@t+gxxEh?g-B1_)iD+ofsGkJeZ>i2oS@Bij^&YU?jb7pdL z*ToIj#SOg%W!_BBTjlwcQ@yUyUS6x zwR+ia84cL#7ZWM++x~lYGxtZtgSL_H|;RJ zW!e<&+UmCpKQR2z^pWXJ(;m~urcX?tn)aGLGx?TgpSAl+-oAE_k(V{B9ZPWTEnQvp7sOTX=#ov*FCd`{ogzj#OAq8jufVID!k)Q zp+tJ7bFsz4M8Tv}e7j(Bc*>X}n0kt*38p)?1%!f9VwvFLtcp$Mf)w#VLHHv1A;DVWe8EOyB#4O%1Ry>vI7ECzu#ojxBsfOzqk^Nv z#{@OR#e$Q>C4$dt*B<8KalwA>16N;$H

    wcxR2$6D;V*2K|kUOL4V>u1Otix6bvS=6bvP< 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 MpOQIIAFLhpKL*vvKmY&$ diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 1fec84d5..10eccd69 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -125,7 +125,7 @@ namespace WMS.Web.Api.Controllers //string codes = "AD"; //var b = await _erpInventoryService.GetInventory(new List() { "111"}); //int count = 10 / 5; - var bcd=await _productInventoryService.JuShuiTan(); + var bcd=await _productInventoryService.LingXing(); //LingXingResponse r = new LingXingResponse(); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 23377e50..a86b572f 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -4140,6 +4140,11 @@ 页条数 + +

    + 海外仓 + +
    店铺信息 diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index c7505401..f6c81147 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -239,6 +239,11 @@ namespace WMS.Web.Domain.Services _logger.LogInformation($"拉取领星数据结果:{resInventory.IsSuccess} {resInventory.Message}"); if (!resInventory.IsSuccess) return resStock; + foreach(var i in ids) + { + _logger.LogInformation($"拉取领星数据{i} 数据总数:{resInventory.Data.Where(w=>w.StockId==i).Count()}"); + } + //物料 var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); From e0f0c786b9e9f93ad1b6409c72167887dba0380a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 5 Nov 2024 09:48:57 +0800 Subject: [PATCH 55/60] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes .../IService/Public/ILingXingService.cs | 2 +- .../Services/ProductInventoryService.cs | 2 +- .../Services/Public/LingXingService.cs | 58 ++++++++++-------- 4 files changed, 34 insertions(+), 28 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 08d6c8c4a6f97d58032cc58236edb11622a80498..3146152c809b5fd073a192ac2c7a5f5a414d9018 100644 GIT binary patch delta 3142 zcmZXW37k!37{>28XJ+1a7))XsGQ*^0QkJMBEtZ5Nv?wKs7VVo#<-5mPy>rhU<( zjf~D(fHN<{hs;$@B2O9a^CNJ_s-%}?&4Igmp#^-;CXXB ze`1N(BEn+7X>xXnpV_}?i6#>7nwFY!6N$t!Ys*c`nR_qFUG29nXk=YqSgOLb%Cy?F z#^h{YM)?(f>+n;`7NfeH4!GA!pZZ_ygq{CjL@ zBHM~%@=bv$!<1>tGNq5FPF-`kQ*)=tlq;uOIKx^=_Fe7gtq9ddxX+aSiA0TOOF^y9dD1QBt%;8o%b!CYdgAW6Je@HX*2!6M@Qf^y~7t2S}Ipe~nNAgE7VC>R~2xAvxB9Puqd0~!_y@`#HC zjfrmy2DsHid;E6pQ1l`8RrDjCsW^*xw&EOOf5o}P^FqY{ z^7)DjhyxWD5(gBgXm-!+vi zE)I?;h?;K*&d<76?fLGD#%~B(6_3zf=3uprMpnnHvBjgS;}VT#Wd}W?qRQY#|9*}7 zlm$h}d6mIrzt&9cgvj)OMuXS*dC9?>f|Gpj!KiF=aKP~oS;xbs+FmE*nCh77njW#- zqo!G=GE@7kPB_lg!L*;f%|ZXnPmJd!d&NP^to$X?v$|MT00UQ;atGzf>05(j zR=cEK+KiO_99nK%kiu*`jtKL$N6P-#^Dc0-z|lfS3yq>5a)LvmvZ|nV!#CBP*JK+r b(@wsdE8klh&94fIqIFe4VRC0xu&m=h>=I|p delta 3126 zcmZ|R37Ae*7zgn0-uunG?=U8WY%^MrmLW??Du#qKp`v}?v~RXBZipfkQ`|~u-}mAx zN)e-#WQpEWpti6#>7SuC}vn@A*Fl87VEoqE62aLcBRF7 z_G9*8?LJoLuKc@&yQ#FrItw@F4-2=}HjC{RHa|>kFu0re(_)83EnC1%{=bPkZOmQR z&C9mhzpQl^+GXJ`vfILq=krD?&2Ag^Sp0h{_F8|rO6KmqiVDm9W*w^b#qvK}{9^In z8~)XD)z^0S+#nInU*i|}k`t|1?YFJtwm#3U>)uG_ZParqw|8z2lGbXfxWaF=D$L2T zj(w&MP9);QgxG_hi~|gnI19sMN8>oB)Z6_WhD%Xg8=rX?AsAWhTLh!3Jz6lP+9iUq z&T%e6!L8&t!I8;KcD$f-h9M>hx-fm4pes31a2z>F(2cxZP(=Z#S z@=n1QESM@-N8Tm)n!H=^trupNxJNLM^QH+Ra=PFZvQ#jSyjPGS?-RU3&Jes!&J-*o zBSD(HUjXs}!8S5{P%w)d^pIc|)3XIT$vJ{ba;{)6`LJLkpW_k1X7W+N7V?WTTB>c>3&)GX*?ehYk*%t&a@-bc# z^k%`!g1+P{f_~(yf@1PDJ0Jb&*9C*fd4l;|EhTt^d{dCe%PkPpCl}gb3o^I%mS8;j zwx9tE76}@W?+BWb?+VVctA*~6E*31|HQo~}C6@`x$mN3OocF%qK=K1YOY%cOYw{yO z0r|0DfASMS8*+u<96skt32`p{so-!{tP-r^#(yR_p9QN0N3ft=(3V^y=s;EoI+1Gy zN0FZk)^f2g1Q&9#F9jDnhW7aD1eY-VmEbb+Yrz%dH-a8q?OVZj+?4MHKaf8PE@#0{ zf}ffFMer-RUT`fJ+h8Y`*-e7*an9Q;_>Ji;f~{n1=amJpQ_O5y@CUg~u$}x0_ShnTFiqfPF$^Q`XBgt_n(ewA|(D3WBBVkqx8TQQsz#Yj>WIjpUv7{zRDMJ}^- z6nW%6in?SyMSXH#MT3xTsAxp)r)W$zQ8Xo+DVme{iUP8QVt?`g#ew8Oik4(6MQie4 zMH})E#i1F7I81Rk(}jw*WIM$XWP3#ivZJCCd8Fbfva{l7vWwyvva8})@;JruWH&{3 zvPjWG`Tg5daRSr56ep6s6@AFQij&BGij&D=#VKTe#Q<`k;#Bf9#p&cA#bELb#hGMy zmf~#s9L2fhd5ZJN3ltZU7bz|#FHu}dUZ%L5yh1UAyi#!$d9~si@><1p1toYX_TAo<6P5Nf9XGkrD~m;LbEH(G={Q&3h!0x z)D)UsVWu%O_j{&Ot=a^K2a&)S=b@TT@j+Yfv61x^c`7CJ37Mc?EG nt)f|#LG8S^)V;bXHfN?Cf@oo7aDcZss;CTFruI|@?{@tg?5=8b diff --git a/src/WMS.Web.Domain/IService/Public/ILingXingService.cs b/src/WMS.Web.Domain/IService/Public/ILingXingService.cs index 121676db..e099b3e5 100644 --- a/src/WMS.Web.Domain/IService/Public/ILingXingService.cs +++ b/src/WMS.Web.Domain/IService/Public/ILingXingService.cs @@ -26,6 +26,6 @@ namespace WMS.Web.Domain.IService.Public /// 获取即时库存 /// /// - public Task>> GetInventory(LingXingInventoryRequest dto); + public Task>> GetInventory(List ids); } } diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index f6c81147..0817feec 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -235,7 +235,7 @@ namespace WMS.Web.Domain.Services var ids = resStock.Data.Where(w => listNames.Contains(w.Name)).Select(s => s.Id).ToList(); string strIds = string.Join(",", ids); //获取领星库存 - var resInventory = await _lingXingService.GetInventory(new Core.Dto.LingXing.LingXingInventoryRequest() { wid = strIds }); + var resInventory = await _lingXingService.GetInventory(ids); _logger.LogInformation($"拉取领星数据结果:{resInventory.IsSuccess} {resInventory.Message}"); if (!resInventory.IsSuccess) return resStock; diff --git a/src/WMS.Web.Domain/Services/Public/LingXingService.cs b/src/WMS.Web.Domain/Services/Public/LingXingService.cs index 805e8021..5ec6b350 100644 --- a/src/WMS.Web.Domain/Services/Public/LingXingService.cs +++ b/src/WMS.Web.Domain/Services/Public/LingXingService.cs @@ -142,41 +142,47 @@ namespace WMS.Web.Domain.Services.Public /// /// /// - public async Task>> GetInventory(LingXingInventoryRequest dto) + public async Task>> GetInventory(List ids) { - //dto.length = 50; - //dto.sku = "NTONPOWER-OSP-3A2U-US-BK-4.6M"; - var resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); - if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); List list = new List(); - var res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(dto), null); - if (res.Code != 0) + foreach (var id in ids) { - _logger.LogInformation($"领星获取数据失败{res.Message}"); - return Result>.ReFailure(ResultCodes.LingXingDataError); - } - list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); - //var b = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); - int num = res.Total / 800; - for (int i = 1; i <= num; i++) - { - Thread.Sleep(1000);//怕拉取过于频繁接口限制 - dto.offset = i * 800; - if (i == num) dto.length = res.Total - (num * 800); - var resUrl_f = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); - if (!resUrl_f.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); - var res_f = await _httpClientService.PostAsync(resUrl_f.Data, JsonConvert.SerializeObject(dto), null); - if (res_f.Code != 0) + LingXingInventoryRequest dto = new LingXingInventoryRequest(); + dto.wid = id.ToString(); + //dto.length = 50; + //dto.sku = "NTONPOWER-OSP-3A2U-US-BK-4.6M"; + var resUrl = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); + if (!resUrl.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + + var res = await _httpClientService.PostAsync(resUrl.Data, JsonConvert.SerializeObject(dto), null); + if (res.Code != 0) { _logger.LogInformation($"领星获取数据失败{res.Message}"); return Result>.ReFailure(ResultCodes.LingXingDataError); } - var d = JsonConvert.DeserializeObject>(res_f.Data.ToString()); - //var bc = d.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).Any(); - //_logger.LogInformation($"次数:{i} 是否存在{bc}"); + list.AddRange(JsonConvert.DeserializeObject>(res.Data.ToString())); + //var b = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); + int num = res.Total / 800; + for (int i = 1; i <= num; i++) + { + Thread.Sleep(1000);//怕拉取过于频繁接口限制 + dto.offset = i * 800; + if (i == num) dto.length = res.Total - (num * 800); + var resUrl_f = await GetStr("/erp/sc/routing/data/local_inventory/inventoryDetails", dto); + if (!resUrl_f.IsSuccess) return Result>.ReFailure(ResultCodes.LingXingUrlError); + var res_f = await _httpClientService.PostAsync(resUrl_f.Data, JsonConvert.SerializeObject(dto), null); + if (res_f.Code != 0) + { + _logger.LogInformation($"领星获取数据失败{res.Message}"); + return Result>.ReFailure(ResultCodes.LingXingDataError); + } + var d = JsonConvert.DeserializeObject>(res_f.Data.ToString()); + //var bc = d.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).Any(); + //_logger.LogInformation($"次数:{i} 是否存在{bc}"); - list.AddRange(d); + list.AddRange(d); + } } //var bcd = list.Where(w => w.SKU.Equals("NTONPOWER-OSP-3A2U-US-BK-4.6M")).ToList(); return Result>.ReSuccess(list.Where(w => w.Product_Total > 0 && w.Product_Valid_Num > 0).ToList()); From 9be1d8a28aa212fb98bc1825fd63d5cd1848a5d0 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 5 Nov 2024 17:15:04 +0800 Subject: [PATCH 56/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Repositories/ProductInventoryRepositories.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs index bc1df4b0..d4e08f36 100644 --- a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -21,6 +21,7 @@ using WMS.Web.Core; using NPOI.SS.Formula.Functions; using WMS.Web.Domain.Mappers; using WMS.Web.Core.Help; +using WMS.Web.Core.Dto.SingleData; namespace WMS.Web.Repositories { @@ -131,7 +132,7 @@ namespace WMS.Web.Repositories if (org_result.IsSuccess) orgs = org_result.Data.ToList(); - + var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); #endregion var query = _context.ProductInventory @@ -160,7 +161,7 @@ namespace WMS.Web.Repositories #region dto组装 Id = s.Id, Type = s.Type.GetRemark(), - Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, companyId, s.StockCode + s.OrgCode), + Stock = r.FirstOrDefault(f=>f.Code.Equals(s.StockCode)).Name, Org = _erpBasicDataExtendService.GetOrgName(orgs, s.OrgCode), MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber), MaterialNumber = s.MaterialNumber, From b276540af3c78794bc9952808c2a5d582d83f967 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 5 Nov 2024 17:24:09 +0800 Subject: [PATCH 57/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Repositories/ProductInventoryRepositories.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs index d4e08f36..3669e732 100644 --- a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -161,7 +161,7 @@ namespace WMS.Web.Repositories #region dto组装 Id = s.Id, Type = s.Type.GetRemark(), - Stock = r.FirstOrDefault(f=>f.Code.Equals(s.StockCode)).Name, + Stock = GetStockName(r, s.StockCode), Org = _erpBasicDataExtendService.GetOrgName(orgs, s.OrgCode), MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber), MaterialNumber = s.MaterialNumber, @@ -176,6 +176,13 @@ namespace WMS.Web.Repositories return (list, total, details); } + private string GetStockName(List list, string code) + { + var stock = list.FirstOrDefault(f => f.Code.Equals(code)); + if (stock == null) return ""; + return stock.Name; + } + public async Task<(object obj, int total)> GetListField(ProductInventoryQueryRequest dto, int companyId) { var (list, count, qty) = await GetListAsync(dto, companyId); From f15aa1eac5c04a11a803a28a493542599b94ece5 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 5 Nov 2024 17:33:22 +0800 Subject: [PATCH 58/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IService/Public/IErpBasicDataExtendService.cs | 8 ++++++++ .../Services/Public/ErpBasicDataExtendService.cs | 15 ++++++++++++++- .../ProductInventoryRepositories.cs | 11 ++--------- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs b/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs index 5a5267b5..512a46d9 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs @@ -5,6 +5,7 @@ using WMS.Web.Core.Dto.Erp; using WMS.Web.Core.Dto.Erp.Customer; using WMS.Web.Core.Dto.Erp.Org; using WMS.Web.Core.Dto.Erp.Supplier; +using WMS.Web.Core.Dto.SingleData; namespace WMS.Web.Domain.IService.Public { @@ -173,5 +174,12 @@ namespace WMS.Web.Domain.IService.Public /// /// string GetSubStockName(List erpStocks, string code); + /// + /// 成品即时库存仓库 + /// + /// + /// + /// + string GetProductInventoryStockName(List list, string code); } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs b/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs index 3710980d..a927b6d7 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs @@ -7,6 +7,7 @@ using WMS.Web.Core.Dto.Erp; using WMS.Web.Core.Dto.Erp.Customer; using WMS.Web.Core.Dto.Erp.Org; using WMS.Web.Core.Dto.Erp.Supplier; +using WMS.Web.Core.Dto.SingleData; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService.Public; @@ -407,6 +408,18 @@ namespace WMS.Web.Domain.Services.Public var stock = erpStocks.Where(x => x.Code == code).FirstOrDefault(); return stock == null ? "" : stock.Name; } - + /// + /// 成品即时库存仓库 + /// + /// + /// + /// + public string GetProductInventoryStockName(List list, string code) + { + if (list == null || list.Count == 0) + return ""; + var stock = list.Where(x => x.Code == code).FirstOrDefault(); + return stock == null ? "" : stock.Name; + } } } diff --git a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs index 3669e732..45937649 100644 --- a/src/WMS.Web.Repositories/ProductInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/ProductInventoryRepositories.cs @@ -132,7 +132,7 @@ namespace WMS.Web.Repositories if (org_result.IsSuccess) orgs = org_result.Data.ToList(); - var r = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); + var p_stocks = await _basicsRepositories.GetUcStockByHeadOfficeAsync("", 1); #endregion var query = _context.ProductInventory @@ -161,7 +161,7 @@ namespace WMS.Web.Repositories #region dto组装 Id = s.Id, Type = s.Type.GetRemark(), - Stock = GetStockName(r, s.StockCode), + Stock = _erpBasicDataExtendService.GetProductInventoryStockName(p_stocks, s.StockCode), Org = _erpBasicDataExtendService.GetOrgName(orgs, s.OrgCode), MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber), MaterialNumber = s.MaterialNumber, @@ -176,13 +176,6 @@ namespace WMS.Web.Repositories return (list, total, details); } - private string GetStockName(List list, string code) - { - var stock = list.FirstOrDefault(f => f.Code.Equals(code)); - if (stock == null) return ""; - return stock.Name; - } - public async Task<(object obj, int total)> GetListField(ProductInventoryQueryRequest dto, int companyId) { var (list, count, qty) = await GetListAsync(dto, companyId); From 9165db58cca4fc8d30fa050dc1f58dc02c3e00a1 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 5 Nov 2024 17:45:24 +0800 Subject: [PATCH 59/60] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProductInventoryService.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/WMS.Web.Domain/Services/ProductInventoryService.cs b/src/WMS.Web.Domain/Services/ProductInventoryService.cs index 0817feec..74dd41fc 100644 --- a/src/WMS.Web.Domain/Services/ProductInventoryService.cs +++ b/src/WMS.Web.Domain/Services/ProductInventoryService.cs @@ -85,15 +85,19 @@ namespace WMS.Web.Domain.Services foreach (var item in listOld) { + string subStock = ""; + if (!string.IsNullOrEmpty(item.Erp_SubStockName)) + subStock = item.Erp_SubStockName.Split(':')[1].Replace(";", ""); + var entity = new ProductInventory() { Type = ProductInventoryType.JinDie, MaterialNumber = item.MaterialNumber, - Customer = item.Erp_SubStockName, + Customer = subStock, OrgCode = item.OrgCode, StockCode = item.StockCode, Qty = item.Qty, - Batch=item.Batch, + Batch = item.Batch, BeforeQty = item.BeforeQty }; inventoryList.Add(entity); @@ -239,9 +243,9 @@ namespace WMS.Web.Domain.Services _logger.LogInformation($"拉取领星数据结果:{resInventory.IsSuccess} {resInventory.Message}"); if (!resInventory.IsSuccess) return resStock; - foreach(var i in ids) + foreach (var i in ids) { - _logger.LogInformation($"拉取领星数据{i} 数据总数:{resInventory.Data.Where(w=>w.StockId==i).Count()}"); + _logger.LogInformation($"拉取领星数据{i} 数据总数:{resInventory.Data.Where(w => w.StockId == i).Count()}"); } //物料 From e075f153a478f3410e976440ed6138e32e89189d Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 7 Nov 2024 09:44:21 +0800 Subject: [PATCH 60/60] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 276926 -> 276926 bytes src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 20 ++++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 3146152c809b5fd073a192ac2c7a5f5a414d9018..08d6c8c4a6f97d58032cc58236edb11622a80498 100644 GIT binary patch delta 3126 zcmZ|R37Ae*7zgn0-uunG?=U8WY%^MrmLW??Du#qKp`v}?v~RXBZipfkQ`|~u-}mAx zN)e-#WQpEWpti6#>7SuC}vn@A*Fl87VEoqE62aLcBRF7 z_G9*8?LJoLuKc@&yQ#FrItw@F4-2=}HjC{RHa|>kFu0re(_)83EnC1%{=bPkZOmQR z&C9mhzpQl^+GXJ`vfILq=krD?&2Ag^Sp0h{_F8|rO6KmqiVDm9W*w^b#qvK}{9^In z8~)XD)z^0S+#nInU*i|}k`t|1?YFJtwm#3U>)uG_ZParqw|8z2lGbXfxWaF=D$L2T zj(w&MP9);QgxG_hi~|gnI19sMN8>oB)Z6_WhD%Xg8=rX?AsAWhTLh!3Jz6lP+9iUq z&T%e6!L8&t!I8;KcD$f-h9M>hx-fm4pes31a2z>F(2cxZP(=Z#S z@=n1QESM@-N8Tm)n!H=^trupNxJNLM^QH+Ra=PFZvQ#jSyjPGS?-RU3&Jes!&J-*o zBSD(HUjXs}!8S5{P%w)d^pIc|)3XIT$vJ{ba;{)6`LJLkpW_k1X7W+N7V?WTTB>c>3&)GX*?ehYk*%t&a@-bc# z^k%`!g1+P{f_~(yf@1PDJ0Jb&*9C*fd4l;|EhTt^d{dCe%PkPpCl}gb3o^I%mS8;j zwx9tE76}@W?+BWb?+VVctA*~6E*31|HQo~}C6@`x$mN3OocF%qK=K1YOY%cOYw{yO z0r|0DfASMS8*+u<96skt32`p{so-!{tP-r^#(yR_p9QN0N3ft=(3V^y=s;EoI+1Gy zN0FZk)^f2g1Q&9#F9jDnhW7aD1eY-VmEbb+Yrz%dH-a8q?OVZj+?4MHKaf8PE@#0{ zf}ffFMer-RUT`fJ+h8Y`*-e7*an9Q;_>Ji;f~{n1=amJpQ_O5y@CUg~u$}x0_ShnTFiqfPF$^Q`XBgt_n(ewA|(D3WBBVkqx8TQQsz#Yj>WIjpUv7{zRDMJ}^- z6nW%6in?SyMSXH#MT3xTsAxp)r)W$zQ8Xo+DVme{iUP8QVt?`g#ew8Oik4(6MQie4 zMH})E#i1F7I81Rk(}jw*WIM$XWP3#ivZJCCd8Fbfva{l7vWwyvva8})@;JruWH&{3 zvPjWG`Tg5daRSr56ep6s6@AFQij&BGij&D=#VKTe#Q<`k;#Bf9#p&cA#bELb#hGMy zmf~#s9L2fhd5ZJN3ltZU7bz|#FHu}dUZ%L5yh1UAyi#!$d9~si@><1p1toYX_TAo<6P5Nf9XGkrD~m;LbEH(G={Q&3h!0x z)D)UsVWu%O_j{&Ot=a^K2a&)S=b@TT@j+Yfv61x^c`7CJ37Mc?EG nt)f|#LG8S^)V;bXHfN?Cf@oo7aDcZss;CTFruI|@?{@tg?5=8b delta 3142 zcmZXW37k!37{>28XJ+1a7))XsGQ*^0QkJMBEtZ5Nv?wKs7VVo#<-5mPy>rhU<( zjf~D(fHN<{hs;$@B2O9a^CNJ_s-%}?&4Igmp#^-;CXXB ze`1N(BEn+7X>xXnpV_}?i6#>7nwFY!6N$t!Ys*c`nR_qFUG29nXk=YqSgOLb%Cy?F z#^h{YM)?(f>+n;`7NfeH4!GA!pZZ_ygq{CjL@ zBHM~%@=bv$!<1>tGNq5FPF-`kQ*)=tlq;uOIKx^=_Fe7gtq9ddxX+aSiA0TOOF^y9dD1QBt%;8o%b!CYdgAW6Je@HX*2!6M@Qf^y~7t2S}Ipe~nNAgE7VC>R~2xAvxB9Puqd0~!_y@`#HC zjfrmy2DsHid;E6pQ1l`8RrDjCsW^*xw&EOOf5o}P^FqY{ z^7)DjhyxWD5(gBgXm-!+vi zE)I?;h?;K*&d<76?fLGD#%~B(6_3zf=3uprMpnnHvBjgS;}VT#Wd}W?qRQY#|9*}7 zlm$h}d6mIrzt&9cgvj)OMuXS*dC9?>f|Gpj!KiF=aKP~oS;xbs+FmE*nCh77njW#- zqo!G=GE@7kPB_lg!L*;f%|ZXnPmJd!d&NP^to$X?v$|MT00UQ;atGzf>05(j zR=cEK+KiO_99nK%kiu*`jtKL$N6P-#^Dc0-z|lfS3yq>5a)LvmvZ|nV!#CBP*JK+r b(@wsdE8klh&94fIqIFe4VRC0xu&m=h>=I|p diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index dbe907eb..78e1ee1a 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4130,6 +4130,14 @@ + + + 成品即时库存仓库 + + + + + 查单据类型的值 @@ -4327,7 +4335,7 @@ - + 获取即时库存 @@ -6035,6 +6043,14 @@ + + + 成品即时库存仓库 + + + + + @@ -6370,7 +6386,7 @@ - + 获取即使库存