From d39859c1056444bf97d440305669694623b14631 Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Tue, 9 Jul 2024 14:06:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=8A=A5=E8=A1=A8=EF=BC=8C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/RedisBackGround.cs | 2 +- .../Consts/ModuleConsts.cs | 4 + .../Consts/WmsWareHouseConst.cs | 15 + .../Dto/Inputs/CarryStockInput.cs | 8 + .../Entity/WmsCarryH.cs | 6 +- .../Entity/WmsCarryStockReportH.cs | 257 ++++++++++++++++++ .../Tnb.WarehouseMgr/WareHouseService.cs | 7 +- .../WmsCarryStockReportService.cs | 191 +++++++++++++ .../WmsMaterialTransferService.cs | 7 +- .../Tnb.WarehouseMgr/WmsPrdReturnService.cs | 25 +- .../Tnb.WarehouseMgr/WmsSaleReleaseService.cs | 13 +- .../Tnb.WarehouseMgr/WmsSaleService.cs | 27 ++ 12 files changed, 549 insertions(+), 13 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 72c6e841..fc43353c 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -1021,7 +1021,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 开始码垛 bool result_开始码垛 = await Floor2UpDownMachinecode_SetTag(MechanicalArmConsts.上升降机当前码垛位, target.stackingposition.ToString()); - LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】码垛结果 {result_开始码垛}"); + LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】码垛位{target.stackingposition}码垛结果 {result_开始码垛}"); if (!result_开始码垛) { throw new Exception($@"【上升降机】码垛结果 {result_开始码垛}"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs index 97161545..dddc50e5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs @@ -166,6 +166,10 @@ public class ModuleConsts /// public const string MODULE_WMSSTOCKREPORT_ID = "27895417124373"; /// + /// 模块标识-载具库存报表 todo + /// + public const string MODULE_WMSCARRYSTOCKREPORT_ID = "MODULE_WMSCARRYSTOCKREPORT_ID"; + /// /// 模块标识-载具台账 /// public const string MODULE_WMSCARRY_ID = "26038721525029"; diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index 35e062e1..3e7f663f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -41,6 +41,21 @@ /// public const string WAREHOUSE_ZZXBK_ID = "26257716248101"; + /// + /// 四楼包材库 + /// + public const string WAREHOUSE_BCK_ID = "35410826423061"; + /// + /// 四楼待灭菌仓 + /// + public const string WAREHOUSE_DMJC_ID = "35412479754517"; + /// + /// 四楼灭菌仓 + /// + public const string WAREHOUSE_MJC_ID = "35412482304021"; + + + /// /// 长管出库 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs new file mode 100644 index 00000000..bce45b10 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryStockInput.cs @@ -0,0 +1,8 @@ +using JNPF.Common.Filter; + +namespace Tnb.WarehouseMgr.Entities.Dto +{ + public class CarryStockInput : PageInputBase + { + } +} \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs index c83331eb..be1aaa56 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs @@ -139,5 +139,9 @@ public partial class WmsCarryH : BaseEntity /// 配送工位 /// public string? work_station { get; set; } - + + /// + /// 入库时间 + /// + public DateTime? instock_time { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs new file mode 100644 index 00000000..d3a98f88 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryStockReportH.cs @@ -0,0 +1,257 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities; + +/// +/// 载具库存集合 +/// +public partial class WmsCarryStockReport +{ + public int 序号 { get; set; } + ///// + ///// 所属组织 + ///// + //public string? 组织 { get; set; } + + /// + /// 载具ID + /// + public string? carry_id { get; set; } + + /// + /// 载具编码 + /// + public string? 载具编码 { get; set; } + + /// + /// 载具名称 + /// + public string? 载具名称 { get; set; } + + /// + /// 子载具编码 + /// + public string? 子载具编码 { get; set; } + + /// + /// 子载具名称 + /// + public string? 子载具名称 { get; set; } + + /// + /// 物料ID + /// + public string? material_id { get; set; } + + /// + /// 物料编码 + /// + public string? 物料编码 { get; set; } + + /// + /// 物料名称 + /// + public string? 物料名称 { get; set; } + + /// + /// 仓库名称 + /// + public string? 仓库名称 { get; set; } + + /// + /// 库位编码 + /// + public string? 库位编码 { get; set; } + + /// + /// 库位名称 + /// + public string? 库位名称 { get; set; } + + /// + /// 载具状态 + /// + public string? 载具状态 { get; set; } + + /// + /// 库位状态 + /// + public string? 库位状态 { get; set; } + + /// + /// 载具类型 + /// + public string? 载具类型 { get; set; } + + /// + /// 入库时间 + /// + public string? 入库时间 { get; set; } + + /// + /// 条码 + /// + public string? 条码 { get; set; } + + /// + /// 批次 + /// + public string? 批次 { get; set; } + + /// + /// 数量 + /// + public decimal? 数量 { get; set; } + + /// + /// 单位 + /// + public string? 单位 { get; set; } + + /// + /// 操作用户 + /// + public string? 操作用户 { get; set; } + + /// + /// 绑定时间 + /// + public string? 绑定时间 { get; set; } + +} + +/// +/// 载具库存报表 +/// +public partial class WmsCarryStockReportH +{ + public int 序号 { get; set; } + ///// + ///// 所属组织 + ///// + //public string? 组织 { get; set; } + + ///// + ///// 载具ID + ///// + //public string? carry_id { get; set; } + + /// + /// 载具编码 + /// + public string? 载具编码 { get; set; } + + /// + /// 载具名称 + /// + public string? 载具名称 { get; set; } + + /// + /// 仓库名称 + /// + public string? 仓库名称 { get; set; } + + /// + /// 库位编码 + /// + public string? 库位编码 { get; set; } + + /// + /// 库位名称 + /// + public string? 库位名称 { get; set; } + + /// + /// 载具状态 + /// + public string? 载具状态 { get; set; } + + /// + /// 库位状态 + /// + public string? 库位状态 { get; set; } + + /// + /// 载具类型 + /// + public string? 载具类型 { get; set; } + + /// + /// 入库时间 + /// + public string? 入库时间 { get; set; } + + public List Details { get; set; } +} + + +/// +/// 载具库存报表条码表 +/// +public partial class WmsCarryStockReportCode +{ + public int 序号 { get; set; } + ///// + ///// 载具ID + ///// + //public string? carry_id { get; set; } + + /// + /// 载具编码 + /// + public string? 载具编码 { get; set; } + + /// + /// 载具名称 + /// + public string? 载具名称 { get; set; } + + ///// + ///// 物料ID + ///// + //public string? material_id { get; set; } + + /// + /// 物料编号 + /// + public string? 物料编号 { get; set; } + + /// + /// 物料名称 + /// + public string? 物料名称 { get; set; } + + /// + /// 条码编号 + /// + public string? 条码 { get; set; } + + /// + /// 批次 + /// + public string? 批次 { get; set; } + + /// + /// 条码数量 + /// + public decimal? 数量 { get; set; } + + /// + /// 单位 + /// + public string? 单位 { get; set; } + + ///// + ///// 操作用户 + ///// + //public string? 创建用户 { get; set; } + + /// + /// 绑定时间 + /// + public string? 绑定时间 { get; set; } + +} + diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 9300b693..3ed458a6 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -494,6 +494,7 @@ namespace Tnb.WarehouseMgr } #region 只解决少数情况(比如只有60 59 60 60四个料箱,下发180,要取60 60 60) 其它情况不考虑 + var itemsASC = await cyDb.Queryable().LeftJoin((a, b) => a.id == b.carry_id) .LeftJoin((a, b, c) => a.location_id == c.id) .Where(whereExpr) @@ -527,6 +528,7 @@ namespace Tnb.WarehouseMgr WmsCarryCode _wmsCarryCode = itemsASC[j].wmsCarryCode; if (_wmsCarryCode.codeqty == input.needOut) { + input.needOut -= _wmsCarryCode.codeqty; WmsCarryH _wmsCarryH = itemsASC[j].wmsCarryH; BasLocation _endlocation_ssx = await _db.Queryable().Where(r => new string[2] { "32609229889045", "32609238573589" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); @@ -2125,7 +2127,8 @@ namespace Tnb.WarehouseMgr id = multiList[i].carry_id, is_lock = 0, location_id = multiList[i].endlocation_id, - location_code = multiList[i].endlocation_code + location_code = multiList[i].endlocation_code, + instock_time = DateTime.Now }; string endLocId = multiList[i].endlocation_id; @@ -2172,7 +2175,7 @@ namespace Tnb.WarehouseMgr locIts.Add(loc); } - _ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code }).ExecuteCommandAsync(); + _ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code, it.instock_time }).ExecuteCommandAsync(); Logger.Information($"【TaskComplate】 更新载具 {JsonConvert.SerializeObject(carryIts)}"); //更新条码的库位和仓库信息 _ = await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs new file mode 100644 index 00000000..4c0d1e0d --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs @@ -0,0 +1,191 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Extension; +using JNPF.Common.Filter; +using JNPF.Common.Security; +using JNPF.VisualDev; +using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Dto; +using Tnb.WarehouseMgr.Entities.Dto.ErpInputs; +using Tnb.WarehouseMgr.Entities.Dto.Outputs; +using Tnb.WarehouseMgr.Entities.Enums; + +namespace Tnb.WarehouseMgr +{ + /// + /// 库存报表服务类 + /// + [OverideVisualDev(ModuleConsts.MODULE_WMSCARRYSTOCKREPORT_ID)] + public class WmsCarryStockReportService : BaseWareHouseService + { + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + + public WmsCarryStockReportService(ISqlSugarRepository repository, IUserManager userManager) + { + _db = repository.AsSugarClient(); + _userManager = userManager; + } + + /// + /// 转库单 + /// + [HttpPost, NonUnify, AllowAnonymous] + public async Task CarryStock(CarryStockInput input) + { + var warehouse_id = ""; + var carry_id = ""; + var material_id = ""; + if (!input.queryJson.IsNullOrWhiteSpace()) + { + warehouse_id = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.warehouse_id)); + carry_id = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.carry_id)); + material_id = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.material_id)); + } + + + + List items = await _db.Queryable() + .LeftJoin((a, b) => b.location_id == a.id) + .InnerJoin((a, b, c) => a.wh_id == c.id) + .LeftJoin((a, b, c, d) => d.id == b.carrystd_id) + .LeftJoin((a, b, c, d, e) => e.carry_id == b.id) + .LeftJoin((a, b, c, d, e, f) => f.id == e.material_id) + .Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1" + && ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code))) + .WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id) + .WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d) => b.id == carry_id) + .WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f) => f.id == material_id) + .OrderByDescending((a, b, c, d, e, f) => b.carry_code) + .Select((a, b, c, d, e, f) => new WmsCarryStockReport + { + 仓库名称 = c.whname, + carry_id = b.id, + 载具编码 = string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code, + 载具名称 = string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name, + 载具状态 = b.is_lock == 1 ? "锁定" : "未锁定", + 载具类型 = d.carrystd_name, + 库位编码 = a.location_code, + 库位名称 = a.location_name, + 库位状态 = b.is_lock == 1 ? "锁定" : "未锁定", + 入库时间 = b.instock_time != null ? b.instock_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", + 条码 = e.barcode, + 批次 = e.code_batch, + 数量 = e.codeqty, + material_id = e.material_id, + 物料编码 = e.material_code, + 物料名称 = f.name, + 单位 = e.unit_id, + 操作用户 = e.create_id, + 绑定时间 = e.create_time != null ? e.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "" + }) + .ToListAsync(); + + + // 料架 + List items_LJ = await _db.Queryable() + .LeftJoin((a, b) => b.location_id == a.id) + .InnerJoin((a, b, c) => a.wh_id == c.id) + .InnerJoin((a, b, c, d) => d.id == b.carrystd_id) + .InnerJoin((a, b, c, d, e) => e.carry_id == b.id) + .InnerJoin((a, b, c, d, e, f) => f.carry_id == e.membercarry_id) + .InnerJoin((a, b, c, d, e, f, g) => g.id == f.material_id) + .InnerJoin((a, b, c, d, e, f, g, h) => h.id == e.membercarry_id) + .Where((a, b, c, d, e) => a.is_type == ((int)EnumLocationType.存储库位).ToString() && a.is_use == "1" && b.carry_status != "0" && b.carry_status != "6") + .WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id) + .WhereIF(!string.IsNullOrEmpty(carry_id), (a, b, c, d, e) => b.id == carry_id || e.membercarry_id == carry_id) + .WhereIF(!string.IsNullOrEmpty(material_id), (a, b, c, d, e, f, g) => g.id == material_id) + .Select((a, b, c, d, e, f, g, h) => new WmsCarryStockReport + { + 仓库名称 = c.whname, + carry_id = b.id, + 载具编码 = b.carry_code, + 载具名称 = b.carry_name, + 子载具编码 = h.carry_code, + 子载具名称 = h.carry_name, + 载具状态 = b.is_lock == 1 ? "锁定" : "未锁定", + 载具类型 = d.carrystd_name, + 库位编码 = a.location_code, + 库位名称 = a.location_name, + 库位状态 = b.is_lock == 1 ? "锁定" : "未锁定", + 入库时间 = b.instock_time != null ? b.instock_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", + 条码 = f.barcode, + 批次 = f.code_batch, + 数量 = f.codeqty, + material_id = f.material_id, + 物料编码 = f.material_code, + 物料名称 = g.name, + 单位 = f.unit_id, + 操作用户 = f.create_id, + 绑定时间 = f.create_time != null ? f.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : "" + }) + .ToListAsync(); + + items.AddRange(items_LJ); + + // d.carrystd_name != "料架" + var storeMap = items.DistinctBy(x => new { x.carry_id }).ToDictionary(x => new { x.carry_id }, x => x); + + IEnumerable result = items.GroupBy(g => new { g.carry_id }).Select(itGroup => + { + _ = storeMap.TryGetValue(itGroup.Key, out WmsCarryStockReport? report); + WmsCarryStockReportH stockReport = report.Adapt(); + + if (report.载具编码 != "空托盘堆垛") + { + List curCarryCodes = items.FindAll(x => x.carry_id == itGroup.Key.carry_id); + + List wmsCarryStockReportCodes = new List(); + int index = 0; + curCarryCodes.ForEach(x => + { + index++; + WmsCarryStockReportCode wmsCarryStockReportCode = new(); + wmsCarryStockReportCode.序号 = index; + //wmsCarryStockReportCode.carry_id = x.carry_id; + wmsCarryStockReportCode.载具编码 = !string.IsNullOrEmpty(x.子载具编码) ? x.子载具编码 : x.载具编码; + wmsCarryStockReportCode.载具名称 = !string.IsNullOrEmpty(x.子载具名称) ? x.子载具名称 : x.载具名称; + //wmsCarryStockReportCode.material_id = x.material_id; + wmsCarryStockReportCode.物料编号 = x.物料编码; + wmsCarryStockReportCode.物料名称 = x.物料编码; + wmsCarryStockReportCode.条码 = x.条码; + wmsCarryStockReportCode.批次 = x.批次; + wmsCarryStockReportCode.数量 = x.数量; + wmsCarryStockReportCode.单位 = x.单位; + //wmsCarryStockReportCode.创建用户 = x.操作用户; + wmsCarryStockReportCode.绑定时间 = x.绑定时间; + + wmsCarryStockReportCodes.Add(wmsCarryStockReportCode); + }); + + stockReport.Details = wmsCarryStockReportCodes; + } + + return stockReport; + }); + + int rowIndex = 0; + List pages = result.Skip((input.currentPage - 1) * input.pageSize).Take(input.pageSize).ToList(); + pages.ForEach(page => { rowIndex++; page.序号 = rowIndex; }); + + SqlSugarPagedList pagedList = new() + { + list = pages, + pagination = new() + { + CurrentPage = input.currentPage, + PageSize = input.pageSize, + Total = result.Count() + } + }; + return PageResult.SqlSugarPageResult(pagedList); + } + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index d0bffb3d..916f4876 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -97,6 +97,7 @@ namespace Tnb.WarehouseMgr try { JObject queryJson = null; + if (!string.IsNullOrEmpty(input.queryJson)) { queryJson = JObject.Parse(input.queryJson); @@ -111,7 +112,8 @@ namespace Tnb.WarehouseMgr .LeftJoin((a, b, c, d, e, f) => a.type == f.EnCode) // 只显示未完成的单据 .Where(a => a.status != "25065149810453") - .WhereIF(queryJson != null, a => a.type == queryJson["type"].ToString()) + .WhereIF(queryJson != null && queryJson["type"] != null, a => a.type == queryJson["type"].ToString()) + .WhereIF(queryJson != null && queryJson["bill_code"] != null, a => a.bill_code.Contains(queryJson["bill_code"].ToString())) .Select((a, b, c, d, e, f) => new WmsMaterialTransfer { id = a.id, @@ -136,6 +138,7 @@ namespace Tnb.WarehouseMgr arrival_date = a.arrival_date, order_code = a.order_code, }) + .OrderBy("a.bill_code desc") .ToPagedListAsync(input.currentPage, input.pageSize); var _data = PageResult.SqlSugarPageResult(result); @@ -176,7 +179,7 @@ namespace Tnb.WarehouseMgr foreach (JObject wmsTransferInstockH in mainTable) { - wmsTransferInstockH["tablefield121"] = JArray.Parse(JsonConvert.SerializeObject(wmsTransferInstockDs.Where(r => r.bill_id == wmsTransferInstockH["id"].ToString()))); + wmsTransferInstockH["tablefield120"] = JArray.Parse(JsonConvert.SerializeObject(wmsTransferInstockDs.Where(r => r.bill_id == wmsTransferInstockH["id"].ToString()))); } return data; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs index befb0b8a..7141ebd5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdReturnService.cs @@ -13,6 +13,7 @@ using Microsoft.Extensions.Logging; using NPOI.POIFS.Storage; using SqlSugar; using Tnb.BasicData.Entities; +using Tnb.ProductionMgr.Entities; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; @@ -53,7 +54,7 @@ namespace Tnb.WarehouseMgr } /// - /// 从产线呼叫装料架到暂存仓/缓存仓 + /// 从产线呼叫装料架到暂存仓/缓存仓(退料) /// /// /// @@ -350,6 +351,9 @@ namespace Tnb.WarehouseMgr { WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == input.carryIds[0]).FirstAsync(); + // 用于回写prd_material_receipt_d is_all_feeding + List carryHs = new List(); + List wmsCarryCodes = null; // 料架到暂存仓 if (wmsCarryH.carrystd_id == "26037267399717") @@ -358,28 +362,37 @@ namespace Tnb.WarehouseMgr .InnerJoin((a, b) => a.membercarry_id == b.id) .InnerJoin((a, b, c) => b.id == c.carry_id) .Where((a, b, c) => a.carry_id == wmsCarryH.id).Select((a, b, c) => c).ToList(); + + carryHs = _db.Queryable() + .InnerJoin((a, b) => a.membercarry_id == b.id) + .Where((a, b) => a.carry_id == wmsCarryH.id).Select((a, b) => b).ToList(); } // 载运小车和载运料架到缓存仓 else if (wmsCarryH.carrystd_id == "26103233723941" || wmsCarryH.carrystd_id == "34995839046677") { - + carryHs.Add(wmsCarryH); wmsCarryCodes = _db.Queryable() .InnerJoin((a, b) => a.id == b.carry_id) .Where((a, b) => a.id == wmsCarryH.id).Select((a, b) => b).ToList(); } else { - Logger.LogError($"【WmsPrdReturnService ModifyAsync】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!"); - return; + throw new Exception($"【WmsPrdReturnService ModifyAsync】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!"); } if (wmsCarryCodes.Count == 0) { - Logger.LogWarning($"【WmsPrdReturnService ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码"); - return; + throw new Exception($"【WmsPrdReturnService ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码"); } await _db.Ado.BeginTranAsync(); + + int row_is_all_feeding = await _db.Updateable().SetColumns(r => r.is_all_feeding == 1) + .Where(r => r.is_all_feeding == 0 && carryHs.Select(x => x.id).Contains(r.member_carry_id)).ExecuteCommandAsync(); + + Logger.LogInformation($"【WmsPrdReturnService ModifyAsync】更新签收表is_all_feeding 影响记录条数 {row_is_all_feeding}条 影响载具为{string.Join(',', carryHs.Select(x => x.carry_code).ToList())}"); + + // 更新已转数量 List wmsPrdReturnDs = _db.Queryable().Where(r => r.bill_id == input.source_id).ToList(); foreach (WmsPrdReturnD wmsPrdReturnD in wmsPrdReturnDs) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs index f2208b1a..dddc8491 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs @@ -13,6 +13,7 @@ using JNPF.VisualDev.Interfaces; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.CodeAnalysis; +using Microsoft.Extensions.Logging; using NPOI.HSSF.Record; using NPOI.SS.Formula; using SqlSugar; @@ -133,6 +134,7 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task Distribute(SaleReleaseDistributeInput input) { + Logger.LogInformation($"【Distribute】 销售出库下发"); try { if (input.qty <= 0) @@ -160,6 +162,7 @@ namespace Tnb.WarehouseMgr List> items_sorttask = items.Where(r => r.Item1 == "分拣任务").ToList(); List> items_pretask = items.Where(r => r.Item1 == "预任务").ToList(); + Logger.LogInformation($"【Distribute】 预计生成{items_pretask.Count}条预任务"); // 预任务逻辑 foreach (Tuple item in items_pretask) { @@ -167,8 +170,12 @@ namespace Tnb.WarehouseMgr WmsCarryCode carryCode = item.Item3; BasLocation startLocation = item.Item4; // 根据一楼工位任务数平均分配任务 确定一楼工位 - BasLocation endLocation = await _db.Queryable().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); + BasLocation endLocation = await _db.Queryable().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync(); + if (endLocation == null) + { + throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500); + } WmsPointH sPoint = null!; WmsPointH ePoint = null!; @@ -281,6 +288,7 @@ namespace Tnb.WarehouseMgr } } + Logger.LogInformation($"【Distribute】 预计生成{items_sorttask.Count}条分拣任务"); // 分拣任务逻辑 foreach (Tuple item in items_sorttask) { @@ -321,10 +329,13 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(r => r.purchase_arriveqty == r.purchase_arriveqty + input.qty).Where(r => r.id == input.source_id).ExecuteCommandAsync(); await _db.Ado.CommitTranAsync(); + Logger.LogInformation($"【Distribute】 销售出库下发完成"); } catch (Exception ex) { await _db.Ado.RollbackTranAsync(); + Logger.LogError($"【Distribute】 {ex.Message}"); + Logger.LogError($"【Distribute】 {ex.StackTrace}"); return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message); } finally diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs index 4823df98..b7629dfd 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleService.cs @@ -17,6 +17,11 @@ using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.WarehouseMgr.Interfaces; using Tnb.QcMgr.Interfaces; using Tnb.WarehouseMgr.Entities.Consts; +using JNPF.Common.Enums; +using JNPF.FriendlyException; +using Microsoft.Extensions.Logging; +using Tnb.ProductionMgr.Entities; +using Tnb.WarehouseMgr.Entities.Entity; namespace Tnb.WarehouseMgr { @@ -99,5 +104,27 @@ namespace Tnb.WarehouseMgr return await UpdateChackStatus(input); } + public override async Task ModifyAsync(WareHouseUpInput input) + { + //if (input == null) + //{ + // throw new ArgumentNullException(nameof(input)); + //} + + //try + //{ + // WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == input.carryIds[0]).FirstAsync(); + + + // await _db.Ado.CommitTranAsync(); + //} + //catch (Exception ex) + //{ + // Logger.LogError("【WmsSaleService ModifyAsync】" + ex.Message); + // Logger.LogError("【WmsSaleService ModifyAsync】" + ex.StackTrace); + // await _db.Ado.RollbackTranAsync(); + //} + + } } }