From 31a1f8a14941ef1e235bfd634ba05b3787bcbc72 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 4 Aug 2023 17:17:31 +0800 Subject: [PATCH] 1 --- .../Entity/BasMaterialInboundWh.cs | 42 ++++++++++++ .../Entity/BasMaterialSendWarehouse.cs | 42 ++++++++++++ .../Entity/WmsStockReportH.part.cs | 26 +++++++ .../Tnb.WarehouseMgr/WmsStockReportService.cs | 68 +++++++++++++++++-- 4 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs create mode 100644 BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs new file mode 100644 index 00000000..5e447404 --- /dev/null +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialInboundWh.cs @@ -0,0 +1,42 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.BasicData.Entities; + +/// +/// 物料入库仓库 +/// +[SugarTable("bas_material_inbound_wh")] +public partial class BasMaterialInboundWh : BaseEntity +{ + public BasMaterialInboundWh() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 物料id + /// + public string? material_id { get; set; } + + /// + /// 仓库id + /// + public string? wh_id { get; set; } + + /// + /// 最大库存 + /// + public int? max_stock { get; set; } + + /// + /// 最小库存 + /// + public int? min_stock { get; set; } + + /// + /// 安全库存 + /// + public int? safe_stock { get; set; } + +} diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs new file mode 100644 index 00000000..ac2eaca3 --- /dev/null +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasMaterialSendWarehouse.cs @@ -0,0 +1,42 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.BasicData.Entities; + +/// +/// 物料发料仓库 +/// +[SugarTable("bas_material_send_warehouse")] +public partial class BasMaterialSendWarehouse : BaseEntity +{ + public BasMaterialSendWarehouse() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 物料id + /// + public string? material_id { get; set; } + + /// + /// 仓库id + /// + public string? wh_id { get; set; } + + /// + /// 最大库存 + /// + public int? max_stock { get; set; } + + /// + /// 最小库存 + /// + public int? min_stock { get; set; } + + /// + /// 安全库存 + /// + public int? safe_stock { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs new file mode 100644 index 00000000..fef9ccbb --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs @@ -0,0 +1,26 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities; + +/// +/// 库存报表 +/// +public partial class WmsStockReportH +{ + /// + /// 物料名称 + /// + [SugarColumn(IsIgnore = true)] + public string mater_name { get; set; } + /// + /// 明细列表 + /// + [SugarColumn(IsIgnore =true)] + public List Details { get; set; } + [SugarColumn(IsIgnore = true)] + public decimal codeqty { get; set; } + +} + diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs index b4205ab5..bf83ccf9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs @@ -1,12 +1,19 @@ using System; using System.Collections.Generic; +using System.Dynamic; using System.Linq; using System.Text; using System.Threading.Tasks; +using JNPF.Common.Core.Manager; +using JNPF.Common.Security; using JNPF.VisualDev; using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; +using Mapster; using MimeKit.Cryptography; using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Enums; namespace Tnb.WarehouseMgr { @@ -14,17 +21,70 @@ namespace Tnb.WarehouseMgr /// 库存报表服务类 /// [OverideVisualDev(ModuleConsts.MODULE_WMSSTOCKREPORT_ID)] - public class WmsStockReportService:BaseWareHouseService + public class WmsStockReportService : BaseWareHouseService { - public WmsStockReportService() + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + + public WmsStockReportService(ISqlSugarRepository repository, IUserManager userManager) { + _db = repository.AsSugarClient(); + _userManager = userManager; OverideFuncs.GetListAsync = GetListAsync; } private async Task GetListAsync(VisualDevModelListQueryInput input) { - - return null; + var items = await _db.Queryable().InnerJoin((a, b) => a.material_id == b.id) + .InnerJoin((a, b, c) => b.id == c.material_id) + .InnerJoin((a, b, c, d) => a.carry_id == d.id) + .InnerJoin((a, b, c, d, e) => d.location_id == e.id) + .Where((a, b, c, d, e) => e.is_type == ((int)EnumLocationType.存储库位).ToString()) + .Select((a, b, c, d, e) => new WmsStockReportH + { + warehouse_id = a.warehouse_id, + mater_name = b.name, + create_time = a.create_time, + create_id = a.create_id, + }, true) + .ToListAsync(); + var carryCodes = await _db.Queryable().ToListAsync(); + var result = items.GroupBy(g => new { g.warehouse_id, g.material_id }).Select(itGroup => + { + WmsStockReportH stockReport = new(); + stockReport.material_code = items.Find(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id)?.material_code; + stockReport.mater_name = items.Find(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id)?.mater_name ?? string.Empty; + stockReport.existing_stock_qty = itGroup.Sum(d => d.codeqty); + stockReport.max_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.max_stock; + stockReport.safe_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.safe_stock; + stockReport.min_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.min_stock; + stockReport.min_stock = items.Find(t => t.warehouse_id == itGroup.Key.warehouse_id && t.material_id == itGroup.Key.material_id)?.min_stock; + stockReport.storage_valid_day = items.Find(t => t.material_id == itGroup.Key.material_id)?.storage_valid_day; + stockReport.early_warn_day = items.Find(t => t.material_id == itGroup.Key.material_id)?.early_warn_day; + stockReport.create_id = _userManager.UserId; + stockReport.create_time = DateTime.Now; + if (stockReport.storage_valid_day.HasValue) + { + decimal expired_warning_qty = 0; + foreach (var item in itGroup) + { + if (DateTime.Now.Subtract(item.create_time.Value).TotalDays >= (item.storage_valid_day - item.early_warn_day)) + { + expired_warning_qty += item.codeqty; + } + } + stockReport.expired_warning_qty = expired_warning_qty; + } + var curCarryCodes = carryCodes.FindAll(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id); + stockReport.Details = curCarryCodes.Adapt>(); + stockReport.Details.ForEach(x => + { + x.id = SnowflakeIdHelper.NextId(); + x.report_id = stockReport.id; + }); + return stockReport; + }); + return result; } } }