diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankRecordController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankRecordController.cs index 12136ec7..447c6a1e 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankRecordController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmBlankRecordController.cs @@ -109,7 +109,7 @@ namespace ZR.Admin.WebApi.Controllers } catch (Exception ex) { - return ToResponse(new ApiResult(500, ex.Message, "添加记录失败")); + return ToResponse(new ApiResult(500, ex.Message, "添加入库记录失败")); } } @@ -153,7 +153,76 @@ namespace ZR.Admin.WebApi.Controllers } catch (Exception ex) { - return ToResponse(new ApiResult(500, ex.Message, "添加记录失败")); + return ToResponse(new ApiResult(500, ex.Message, "添加出库记录失败")); + } + } + + /// + /// 3.盘点库存 + /// + /// 库存id + /// 毛坯号 + /// 变动量 + /// 操作时间(出库时间) + /// 备注 + /// + [HttpGet("doStocktakingBlankInventory")] + public IActionResult DoStocktakingBlankInventory( + string fkBlankInventoryId, + string blankNum, + int changeQuantity, + string remark, + DateTime? actionTime + ) + { + try + { + if (string.IsNullOrEmpty(fkBlankInventoryId)) + { + return ToResponse(new ApiResult(500, "库存id为空!", "库存id为空!")); + } + if (string.IsNullOrEmpty(blankNum)) + { + return ToResponse(new ApiResult(500, "毛坯号为空!", "毛坯号为空!")); + } + var response = _WmBlankRecordService.DoStocktakingBlankInventory( + fkBlankInventoryId, + blankNum, + changeQuantity, + HttpContext.GetName(), + remark, + actionTime + ); + return SUCCESS(response); + } + catch (Exception ex) + { + return ToResponse(new ApiResult(500, ex.Message, "添加盘点记录失败")); + } + } + + /// + /// 4.根据工单号出库毛坯 + /// + [HttpGet("doOutboundByWorkOrderId")] + public IActionResult DoOutboundByWorkOrderId(string workOrderId) + { + try + { + if (string.IsNullOrEmpty(workOrderId)) + { + return ToResponse(new ApiResult(500, "工单id为空!", "工单id为空!")); + } + var response = _WmBlankRecordService.DoOutboundByWorkOrderId( + workOrderId, + 0, + HttpContext.GetName() + ); + return SUCCESS(response); + } + catch (Exception ex) + { + return ToResponse(new ApiResult(500, ex.Message, "根据工单号出库毛坯失败")); } } diff --git a/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs b/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs index a43cf9c4..233c3918 100644 --- a/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs +++ b/ZR.Service/mes/wms/IService/IWmBlankInventoryService.cs @@ -16,6 +16,7 @@ namespace ZR.Service.mes.wms.IService WmBlankInventory AddWmBlankInventory(WmBlankInventory parm); int UpdateWmBlankInventory(WmBlankInventory parm); + /// /// 数据与物料清单同步 /// diff --git a/ZR.Service/mes/wms/IService/IWmBlankRecordService.cs b/ZR.Service/mes/wms/IService/IWmBlankRecordService.cs index 06cda91c..8d9c1e70 100644 --- a/ZR.Service/mes/wms/IService/IWmBlankRecordService.cs +++ b/ZR.Service/mes/wms/IService/IWmBlankRecordService.cs @@ -17,6 +17,7 @@ namespace ZR.Service.mes.wms.IService WmBlankRecord AddWmBlankRecord(WmBlankRecord parm); int UpdateWmBlankRecord(WmBlankRecord parm); + /// /// 入库 /// @@ -35,6 +36,7 @@ namespace ZR.Service.mes.wms.IService string remark, DateTime? actionTime ); + /// /// 出库 /// @@ -53,5 +55,26 @@ namespace ZR.Service.mes.wms.IService string remark, DateTime? actionTime ); + + /// + /// 库存盘点 + /// + /// + /// + int DoStocktakingBlankInventory( + string fkBlankInventoryId, + string blankNum, + int changeQuantity, + string username, + string remark, + DateTime? actionTime + ); + + /// + /// 根据工单出库毛坯 + /// + /// + /// + int DoOutboundByWorkOrderId(string workOrderId, int changeQuantity, string username); } } diff --git a/ZR.Service/mes/wms/WmBlankInventoryService.cs b/ZR.Service/mes/wms/WmBlankInventoryService.cs index 2ea28f13..89b88d9f 100644 --- a/ZR.Service/mes/wms/WmBlankInventoryService.cs +++ b/ZR.Service/mes/wms/WmBlankInventoryService.cs @@ -1,7 +1,8 @@ -using Infrastructure.Attribute; -using SqlSugar; using System; using System.Linq; +using Infrastructure.Attribute; +using JinianNet.JNTemplate; +using SqlSugar; using ZR.Model; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; @@ -13,7 +14,10 @@ namespace ZR.Service.mes.wms /// /// 毛坯库存表Service业务层处理 /// - [AppService(ServiceType = typeof(IWmBlankInventoryService), ServiceLifetime = LifeTime.Transient)] + [AppService( + ServiceType = typeof(IWmBlankInventoryService), + ServiceLifetime = LifeTime.Transient + )] public class WmBlankInventoryService : BaseService, IWmBlankInventoryService { /// @@ -23,11 +27,14 @@ namespace ZR.Service.mes.wms /// public PagedInfo GetList(WmBlankInventoryQueryDto parm) { - var predicate = Expressionable.Create() - .AndIF(!string.IsNullOrEmpty(parm.BlankNum), it => it.BlankNum.Contains(parm.BlankNum)) + var predicate = Expressionable + .Create() + .AndIF( + !string.IsNullOrEmpty(parm.BlankNum), + it => it.BlankNum.Contains(parm.BlankNum) + ) .AndIF(parm.Status > -1, it => it.Status == parm.Status) - .AndIF(parm.Type > 0, it => it.Type == parm.Type) - ; + .AndIF(parm.Type > 0, it => it.Type == parm.Type); var response = Queryable() .Where(predicate.ToExpression()) @@ -37,10 +44,11 @@ namespace ZR.Service.mes.wms { foreach (WmBlankInventoryDto item in response.Result) { - WmMaterial material = Context.Queryable() - .Where(it => it.BlankNum == item.BlankNum) - .Where(it => it.Type == 2) - .First(); + WmMaterial material = Context + .Queryable() + .Where(it => it.BlankNum == item.BlankNum) + .Where(it => it.Type == 2) + .First(); if (material == null) { item.Description = "此毛坯号不在物料清单内!"; @@ -50,13 +58,14 @@ namespace ZR.Service.mes.wms item.Unit = material.Unit; item.Version = material.Version; item.Specification = material.Specification; - item.Description = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; + item.Description = !string.IsNullOrEmpty(material.Description) + ? material.Description + : material.ProductName; } } return response; } - /// /// 获取详情 /// @@ -64,9 +73,7 @@ namespace ZR.Service.mes.wms /// public WmBlankInventory GetInfo(string Id) { - var response = Queryable() - .Where(x => x.Id == Id) - .First(); + var response = Queryable().Where(x => x.Id == Id).First(); return response; } @@ -78,10 +85,11 @@ namespace ZR.Service.mes.wms /// public WmBlankInventory AddWmBlankInventory(WmBlankInventory model) { - bool hasRecord = Context.Queryable() - .Where(it => it.BlankNum == model.BlankNum) - .Where(it => it.Type == model.Type) - .Any(); + bool hasRecord = Context + .Queryable() + .Where(it => it.BlankNum == model.BlankNum) + .Where(it => it.Type == model.Type) + .Any(); if (hasRecord) { throw new Exception("毛坯仓库已有相同类别的毛坯号记录"); @@ -121,13 +129,15 @@ namespace ZR.Service.mes.wms try { int num = 0; - List materials = Context.Queryable() - .Where(it => it.Type == 2) - .Where(it => !string.IsNullOrEmpty(it.BlankNum)) - .OrderBy(it => it.BlankNum) - .ToList(); + List materials = Context + .Queryable() + .Where(it => it.Type == 2) + .Where(it => !string.IsNullOrEmpty(it.BlankNum)) + .OrderBy(it => it.BlankNum) + .ToList(); var uniqueBlankNums = materials.Select(m => m.BlankNum).Distinct().ToList(); - var wmBlankInventories = Context.Queryable() + var wmBlankInventories = Context + .Queryable() .Where(it => uniqueBlankNums.Contains(it.BlankNum)) .ToList() .GroupBy(it => it.BlankNum) @@ -135,22 +145,44 @@ namespace ZR.Service.mes.wms foreach (WmMaterial item in materials) { int result = 0; - if (!wmBlankInventories.TryGetValue(item.BlankNum, out WmBlankInventory wmBlank)) + if ( + !wmBlankInventories.TryGetValue(item.BlankNum, out WmBlankInventory wmBlank) + ) { - // 没有找到匹配的BlankNum,添加两种类型的库存 - result += AddBlankInventory(item.BlankNum, 1, parm.CreatedBy, parm.CreatedTime); - result += AddBlankInventory(item.BlankNum, 2, parm.CreatedBy, parm.CreatedTime); + // 没有找到匹配的BlankNum,添加两种类型的库存 + result += AddBlankInventory( + item.BlankNum, + 1, + parm.CreatedBy, + parm.CreatedTime + ); + result += AddBlankInventory( + item.BlankNum, + 2, + parm.CreatedBy, + parm.CreatedTime + ); } else { - // 找到了匹配的BlankNum,根据Type添加库存 + // 找到了匹配的BlankNum,根据Type添加库存 if (wmBlank.Type == 1) { - result = AddBlankInventory(item.BlankNum, 2, parm.CreatedBy, parm.CreatedTime); + result = AddBlankInventory( + item.BlankNum, + 2, + parm.CreatedBy, + parm.CreatedTime + ); } else { - result = AddBlankInventory(item.BlankNum, 1, parm.CreatedBy, parm.CreatedTime); + result = AddBlankInventory( + item.BlankNum, + 1, + parm.CreatedBy, + parm.CreatedTime + ); } } if (result > 0) @@ -164,43 +196,50 @@ namespace ZR.Service.mes.wms { throw new Exception("同步异常:" + ex.Message); } - } + /// /// 自动添加毛坯库存记录 /// /// /// /// - public int AddBlankInventory(string blankNum, int type, string createBy = "", DateTime? createTime = null) + public int AddBlankInventory( + string blankNum, + int type, + string createBy = "", + DateTime? createTime = null + ) { - bool hasRecord = Context.Queryable() - .Where(it => it.BlankNum == blankNum) - .Where(it => it.Type == type) - .Any(); + bool hasRecord = Context + .Queryable() + .Where(it => it.BlankNum == blankNum) + .Where(it => it.Type == type) + .Any(); if (hasRecord) { return 0; } - WmBlankInventory wmBlank = new() - { - Id = SnowFlakeSingle.Instance.NextId().ToString(), - FkPaintId = string.Empty, - BlankNum = blankNum, - Quantity = 0, - MaxNum = 0, - MinNum = 0, - WarnNum = 0, - Type = type, - Status = 1, - Remark = string.Empty, - CreatedBy = createBy, - CreatedTime = createTime, - UpdatedBy = createBy, - UpdatedTime = createTime, - }; + WmBlankInventory wmBlank = + new() + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + FkPaintId = string.Empty, + BlankNum = blankNum, + Quantity = 0, + MaxNum = 0, + MinNum = 0, + WarnNum = 0, + Type = type, + Status = 1, + Remark = string.Empty, + CreatedBy = createBy, + CreatedTime = createTime, + UpdatedBy = createBy, + UpdatedTime = createTime, + }; return Context.Insertable(wmBlank).ExecuteCommand(); } } -} \ No newline at end of file +} diff --git a/ZR.Service/mes/wms/WmBlankRecordService.cs b/ZR.Service/mes/wms/WmBlankRecordService.cs index cc8976fd..fcaee294 100644 --- a/ZR.Service/mes/wms/WmBlankRecordService.cs +++ b/ZR.Service/mes/wms/WmBlankRecordService.cs @@ -1,7 +1,9 @@ using System; using Infrastructure.Attribute; +using Model.DBModel; using SqlSugar; using ZR.Model; +using ZR.Model.MES.pro; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; using ZR.Repository; @@ -56,7 +58,7 @@ namespace ZR.Service.mes.wms WmMaterial material = Context .Queryable() .Where(it => it.BlankNum == item.BlankNum) - .Where(it => it.Remarks == "毛坯") + .Where(it => it.Type == 2) .First(); if (material == null) { @@ -239,5 +241,151 @@ namespace ZR.Service.mes.wms } return resut; } + + /// + /// 盘点库存 + /// + /// + /// + /// + /// + /// + /// + /// + /// + public int DoStocktakingBlankInventory( + string fkBlankInventoryId, + string blankNum, + int changeQuantity, + string username, + string remark, + DateTime? actionTime + ) + { + try + { + Context.Ado.BeginTran(); + DateTime nowTime = DateTime.Now.ToLocalTime(); + // 原始数据记录 + WmBlankInventory oldInfo = Context + .Queryable() + .Where(it => it.Id == fkBlankInventoryId) + .First(); + if (oldInfo == null) + { + throw new Exception("毛坯记录不存在!"); + } + WmBlankInventory updateInfo = + new() + { + Id = fkBlankInventoryId, + Quantity = changeQuantity, + UpdatedBy = username, + UpdatedTime = nowTime + }; + int res1 = Context + .Updateable(updateInfo) + .IgnoreColumns(ignoreAllNullColumns: true) + .ExecuteCommand(); + WmBlankRecord res = + new() + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + FkBlankInventoryId = fkBlankInventoryId, + BlankNum = blankNum, + ChangeQuantity = changeQuantity, + Type = 4, + Status = 1, + ActionTime = actionTime, + Remark = + remark + "\n自动添加备注:盘点原箱数" + oldInfo.Quantity + ",新箱数" + changeQuantity, + CreatedBy = username, + CreatedTime = nowTime + }; + //填写库存记录 + Context.Insertable(res).ExecuteCommand(); + Context.Ado.CommitTran(); + return res1; + } + catch (Exception e) + { + Context.Ado.RollbackTran(); + throw new Exception(e.Message); + } + } + + public int DoOutboundByWorkOrderId(string workOrderId, int changeQuantity, string username) + { + try + { + Context.Ado.BeginTran(); + int type = 1; + DateTime nowTime = DateTime.Now.ToLocalTime(); + // 提出工单 + ProWorkorder_v2 workOrderInfo = Context + .Queryable() + .Where(it => it.ClientWorkorder == workOrderId) + .First(); + if (workOrderInfo == null) + { + throw new Exception("工单记录不存在!" + workOrderId); + } + if (workOrderInfo.Remark1.Contains("返工")) + { + type = 2; + } + // 根据工单查看毛坯库存数据记录 + WmBlankInventory blankInventory = Context + .Queryable() + .Where(it => it.BlankNum == workOrderInfo.BlankNumber) + .Where(it => it.Status == 1) + .Where(it => it.Type == type) + .First(); + if (blankInventory == null) + { + throw new Exception("毛坯记录不存在!请检查毛坯仓库,毛坯号:" + workOrderInfo.BlankNumber); + } + WmBlankInventory updateInfo = + new() + { + Id = blankInventory.Id, + Quantity = blankInventory.Quantity - workOrderInfo.PreviousNumber, + UpdatedBy = username, + UpdatedTime = nowTime + }; + int res1 = Context + .Updateable(updateInfo) + .IgnoreColumns(ignoreAllNullColumns: true) + .ExecuteCommand(); + WmBlankRecord res = + new() + { + Id = SnowFlakeSingle.Instance.NextId().ToString(), + FkBlankInventoryId = blankInventory.Id, + BlankNum = blankInventory.BlankNum, + ChangeQuantity = workOrderInfo.PreviousNumber, + Type = 2, + Status = 1, + ActionTime = nowTime, + Remark = + "自动添加备注:工单号" + + workOrderId + + ",上件数" + + workOrderInfo.PreviousNumber + + "包装完成自动出库。", + CreatedBy = username, + CreatedTime = nowTime + }; + //添加库存记录 + Context.Insertable(res).ExecuteCommand(); + Context.Ado.CommitTran(); + return res1; + } + catch (Exception e) + { + Context.Ado.RollbackTran(); + throw new Exception(e.Message); + } + } } } diff --git a/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs b/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs index 56bd07c3..b1ec7e32 100644 --- a/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs +++ b/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs @@ -54,6 +54,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -100,6 +101,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -155,6 +157,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -201,6 +204,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -258,6 +262,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -306,6 +311,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -361,6 +367,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -406,6 +413,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { @@ -499,6 +507,7 @@ namespace ZR.Service.Business { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { diff --git a/ZR.Service/mes/wms/WmGoodsNowProductionService.cs b/ZR.Service/mes/wms/WmGoodsNowProductionService.cs index 832b6b11..edd5f16b 100644 --- a/ZR.Service/mes/wms/WmGoodsNowProductionService.cs +++ b/ZR.Service/mes/wms/WmGoodsNowProductionService.cs @@ -78,6 +78,7 @@ namespace ZR.Service.mes.wms WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == item.Partnumber) + .Where(it => it.Type == 1) .First(); if (material == null) { diff --git a/ZR.Service/mes/wms/WmGoodsOutProductionService.cs b/ZR.Service/mes/wms/WmGoodsOutProductionService.cs index a461151b..0af6158f 100644 --- a/ZR.Service/mes/wms/WmGoodsOutProductionService.cs +++ b/ZR.Service/mes/wms/WmGoodsOutProductionService.cs @@ -32,6 +32,7 @@ namespace ZR.Service.mes.wms partnumberByDescription = Context .Queryable() .Where(it => it.Description.Contains(parm.Description)) + .Where(it => it.Type == 1) .Select(it => it.Partnumber) .ToList(); } diff --git a/ZR.Service/mes/wms/WmMaterialService.cs b/ZR.Service/mes/wms/WmMaterialService.cs index 2ad66e9d..c668df2d 100644 --- a/ZR.Service/mes/wms/WmMaterialService.cs +++ b/ZR.Service/mes/wms/WmMaterialService.cs @@ -25,6 +25,7 @@ namespace ZR.Service.mes.wms var predicate = Expressionable.Create() .AndIF(parm.Partnumber != null, it => it.Partnumber.Contains(parm.Partnumber)) .AndIF(parm.U8InventoryCode != null, it => it.U8InventoryCode.Contains(parm.U8InventoryCode)) + .AndIF(parm.BlankNum != null, it => it.BlankNum.Contains(parm.BlankNum)) .AndIF(parm.ProductName != null, it => it.ProductName.Contains(parm.ProductName)) .AndIF(parm.Color != null, it => it.Color.Contains(parm.Color)) .AndIF(parm.Specification != null, it => it.Specification.Contains(parm.Specification))