diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs index 3bac6e71..a2fd9413 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmOutOrderController.cs @@ -177,6 +177,7 @@ namespace ZR.Admin.WebApi.Controllers [HttpGet("persistenceOutorderplan")] public IActionResult PersistenceOutorderplan(string shipment_num) { + if (shipment_num == null) { return SUCCESS(null); @@ -232,10 +233,13 @@ namespace ZR.Admin.WebApi.Controllers /// 出库单号 /// [HttpGet("checkProductionOut")] - public IActionResult CheckProductionOut(string production_packcode = "", string shipment_num = "") + public IActionResult CheckProductionOut( string parnumber,string production_packcode = "", string shipment_num = "") { + if(string.IsNullOrEmpty(parnumber)) { + return ToResponse(new ApiResult(200, "请选择物料号", false)); + } string msg = ""; - msg = _WmOutOrderService.CheckProductionOut(production_packcode, shipment_num); + msg = _WmOutOrderService.CheckProductionOut(parnumber,production_packcode, shipment_num); if(msg !="ok") { return ToResponse(new ApiResult(200, msg, false)); diff --git a/ZR.Admin.WebApi/appsettings.development.json b/ZR.Admin.WebApi/appsettings.development.json index b54b2ff5..a54e6cb4 100644 --- a/ZR.Admin.WebApi/appsettings.development.json +++ b/ZR.Admin.WebApi/appsettings.development.json @@ -35,7 +35,7 @@ "DbName": "ZrAdmin" //代码生成默认连接数据库 }, - "corsUrls": [ "http://localhost:8887", "http://localhost:8886" ], //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开 + "corsUrls": [ "http://localhost:8887", "http://localhost:8886", "http://127.0.0.1:8081" ], //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开 "JwtSettings": { "Issuer": "ZRAdmin.NET", //即token的签发者。 "Audience": "ZRAdmin.NET", //指该token是服务于哪个群体的(群体范围) diff --git a/ZR.Model/MES/wms/Dto/WmOutOrderDto.cs b/ZR.Model/MES/wms/Dto/WmOutOrderDto.cs index edb92ee7..6a8c7ea9 100644 --- a/ZR.Model/MES/wms/Dto/WmOutOrderDto.cs +++ b/ZR.Model/MES/wms/Dto/WmOutOrderDto.cs @@ -89,6 +89,7 @@ namespace ZR.Model.MES.wms.Dto /// public string[] PatchCode { get; set; } + } diff --git a/ZR.Model/MES/wms/WmOutOrderPlan.cs b/ZR.Model/MES/wms/WmOutOrderPlan.cs index 7fee393a..28653559 100644 --- a/ZR.Model/MES/wms/WmOutOrderPlan.cs +++ b/ZR.Model/MES/wms/WmOutOrderPlan.cs @@ -1,4 +1,5 @@ -using System; +using SqlSugar; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -21,7 +22,7 @@ namespace ZR.Model.MES.wms /// 出库单号 /// [SugarColumn(ColumnName = "fk_out_order_id")] - public string FkOutOrderId { get; set; } + public string FkOutOrderId { get; set; } /// /// 批次号(工单号+箱号) /// @@ -31,6 +32,7 @@ namespace ZR.Model.MES.wms /// /// 短批次号 /// + [SugarColumn(IsIgnore = true)] public string Patchcode_short { get; set; } /// /// 物料号 @@ -57,6 +59,15 @@ namespace ZR.Model.MES.wms /// [SugarColumn(ColumnName = "require_num")] public int? RequireNum { get; set; } + + + /// + /// 已经入库箱子数量 + /// + [SugarColumn(ColumnName = "received_pack_num")] + public int? ReceivedPackNum { get; set; } + + /// /// 批次时间 /// @@ -91,10 +102,13 @@ namespace ZR.Model.MES.wms /// /// 这一批次下的 库存箱子数 /// - public int Inventory_pack_num { get; set; } + [SugarColumn(IsIgnore = true)] + public int Inventory_pack_num { get; set; } /// /// 这一批次下的 库存零件数 /// + + [SugarColumn(IsIgnore = true)] public int Inventory_num { get; set; } } } diff --git a/ZR.Service/mes/wms/IService/IWmOutOrderService.cs b/ZR.Service/mes/wms/IService/IWmOutOrderService.cs index d1de2339..0fb9bda5 100644 --- a/ZR.Service/mes/wms/IService/IWmOutOrderService.cs +++ b/ZR.Service/mes/wms/IService/IWmOutOrderService.cs @@ -40,7 +40,7 @@ namespace ZR.Service.mes.wms.IService bool OverOutorderplan(string shipment_num); // 检查是否可出库 - string CheckProductionOut(string production_packcode, string shipment_num); + string CheckProductionOut(string parnumber,string production_packcode, string shipment_num); } diff --git a/ZR.Service/mes/wms/WmOutOrderService.cs b/ZR.Service/mes/wms/WmOutOrderService.cs index 42596e73..2d844ef7 100644 --- a/ZR.Service/mes/wms/WmOutOrderService.cs +++ b/ZR.Service/mes/wms/WmOutOrderService.cs @@ -26,7 +26,7 @@ namespace ZR.Service.mes.wms [AppService(ServiceType = typeof(IWmOutOrderService), ServiceLifetime = LifeTime.Transient)] public class WmOutOrderService : BaseService, IWmOutOrderService { - + /// /// 查询出货单(物料+客户)列表 @@ -38,9 +38,9 @@ namespace ZR.Service.mes.wms var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.ShipmentNum), it => it.ShipmentNum.Contains(parm.ShipmentNum)) .AndIF(!string.IsNullOrEmpty(parm.CustomNo), it => it.CustomNo.Contains(parm.CustomNo)) - .AndIF(parm.Year>0, it => it.Year == parm.Year) - .AndIF(parm.Week>0, it => it.Year == parm.Week) - .AndIF(parm.Date>0, it => it.Year == parm.Date) + .AndIF(parm.Year > 0, it => it.Year == parm.Year) + .AndIF(parm.Week > 0, it => it.Year == parm.Week) + .AndIF(parm.Date > 0, it => it.Year == parm.Date) ; var response = Queryable() .Where(predicate.ToExpression()) @@ -147,11 +147,11 @@ namespace ZR.Service.mes.wms /// /// /// - public int Delete_fk_matrial(string[] primarys) + public int Delete_fk_matrial(string[] primarys) { - if(primarys.Count()>0) + if (primarys.Count() > 0) { - for(int i = 0; i < primarys.Length; i++) + for (int i = 0; i < primarys.Length; i++) { Context.Deleteable().Where(it => it.FkOutorderId == primarys[i]).ExecuteCommand(); } @@ -223,7 +223,7 @@ namespace ZR.Service.mes.wms List materialList = Context.Queryable() .Where(predicate.ToExpression()) - + .OrderByDescending(it => it.CreatedTime) .ToPageList(parm.PageNum, parm.PageSize, ref total); @@ -251,13 +251,13 @@ namespace ZR.Service.mes.wms material_num = material_num + (int)product.GoodsNumLogic; } } - if(material_num>0) + if (material_num > 0) { wmMaterialQuery_Stock_item.stockQuantity = material_num; material_stockQuantity_list.Add(wmMaterialQuery_Stock_item); } - - + + } @@ -276,18 +276,18 @@ namespace ZR.Service.mes.wms public List Queryoutoder_matrials(string shipment_num) { - List stockList = Context.Queryable() - .LeftJoin((mo, m) => mo.FkMaterialId == m.Id) - .Where(mo => mo.FkOutorderId == shipment_num) - .Select((mo, m) => new WmMaterialQuery_print() - { - //物料号 - Partnumber = m.Partnumber, - // 描述 - ProductName = m.ProductName, - //需求零件数 - RequireOutNum = mo.OuthouseNum - }).ToList(); + List stockList = Context.Queryable() + .LeftJoin((mo, m) => mo.FkMaterialId == m.Id) + .Where(mo => mo.FkOutorderId == shipment_num) + .Select((mo, m) => new WmMaterialQuery_print() + { + //物料号 + Partnumber = m.Partnumber, + // 描述 + ProductName = m.ProductName, + //需求零件数 + RequireOutNum = mo.OuthouseNum + }).ToList(); if (stockList != null && stockList.Count > 0) @@ -305,16 +305,16 @@ namespace ZR.Service.mes.wms stock.ItemNum = num ?? 0; // 需求箱数 - List list= Context.Queryable() - .Where(it => it.Partnumber == stock.Partnumber).OrderByDescending(it=>it.PackageCodeClient).ToList(); + List list = Context.Queryable() + .Where(it => it.Partnumber == stock.Partnumber).OrderByDescending(it => it.PackageCodeClient).ToList(); int sum = 0; foreach (var item in list) { - sum = sum + item.GoodsNumLogic??0; - if(sum>= stock.RequireOutNum) + sum = sum + item.GoodsNumLogic ?? 0; + if (sum >= stock.RequireOutNum) { - stock.Require_pack_num=list.IndexOf(item)+1; + stock.Require_pack_num = list.IndexOf(item) + 1; break; } @@ -358,7 +358,7 @@ namespace ZR.Service.mes.wms .Where(it => it.Partnumber == partnumber) .OrderBy(it => it.PackageCodeClient) .ToList(); - + // 判断要出多少批次的货 List wmOutOrderPlans = new List(); // 当前累计批次货物总数 @@ -377,6 +377,7 @@ namespace ZR.Service.mes.wms // 获得批次的总零件数 orderPlan.PartnumberNum = witem.GoodsNumLogic; orderPlan.RequireNum = require_num; + orderPlan.ReceivedNum = 0; orderPlan.Patchtime = Resolution_bath(witem.PackageCodeOriginal); wmOutOrderPlans.Add(orderPlan); // 实际值计算 @@ -387,7 +388,7 @@ namespace ZR.Service.mes.wms if (wmOutOrderPlans.Count > 0) { // 根据批次号下划线前进行聚合 - List < WmOutOrderPlan > material_plan_item = wmOutOrderPlans.GroupBy(it => it.Patchcode_short).Select(g => new + List material_plan_item = wmOutOrderPlans.GroupBy(it => it.Patchcode_short).Select(g => new WmOutOrderPlan { FkOutOrderId = g.Max(p => p.FkOutOrderId), @@ -396,14 +397,15 @@ namespace ZR.Service.mes.wms WarehouseCode = g.Max(p => p.WarehouseCode), MaterialCode = g.Max(p => p.MaterialCode), PackageNum = g.Count(), - PartnumberNum = g.Sum(p=>p.PartnumberNum), + PartnumberNum = g.Sum(p => p.PartnumberNum), RequireNum = g.Max(p => p.RequireNum), + ReceivedNum = 0, Patchtime = g.Max(p => p.Patchtime), }).ToList(); - planList=planList.Concat(material_plan_item).ToList(); + planList = planList.Concat(material_plan_item).ToList(); } - + } } @@ -413,14 +415,14 @@ namespace ZR.Service.mes.wms { witem.Id = count; witem.Outorder = count; - + count++; witem.Inventory_pack_num = Context.Queryable() - .Where(it=>it.PackageCodeClient.Contains(witem.Patchcode)) + .Where(it => it.PackageCodeClient.Contains(witem.Patchcode)) .Count(); witem.Inventory_num = Context.Queryable() - .Where(it => it.PackageCodeClient.Contains( witem.Patchcode)) - .Sum(it=>it.GoodsNumLogic)??0; + .Where(it => it.PackageCodeClient.Contains(witem.Patchcode)) + .Sum(it => it.GoodsNumLogic) ?? 0; } @@ -444,36 +446,79 @@ namespace ZR.Service.mes.wms { foreach (var item in doMaterialOut.PatchCode) { - UseTran2(() => + //TODO 保证 同一出货单下 同一物料下最早批次 + // 取出同一出货单下 同一物料下 未满箱的最早批次 + WmOutOrderPlan plan_item =Context.Queryable() + .Where(it => it.FkOutOrderId == shipnumber) + .Where(it => it.Patchcode == item).First(); + var plan_earliest = Context.Queryable() + .Where(it => it.FkOutOrderId == shipnumber) + .Where(it=>it.MaterialCode== plan_item.MaterialCode) + .Where(it=>it.PackageNum>it.ReceivedPackNum) + .OrderBy(it=>it.Outorder) + .First(); + //已经出库完成,没有可以出库的了 + if(plan_earliest != null) + { + return (100, 100); + } + if (plan_earliest.Id == plan_earliest.Id) { - WmGoodsOutRecord record = new WmGoodsOutRecord(); - record.Id = SnowFlakeSingle.Instance.NextId().ToString(); - WmGoodsNowProduction nowProduction = Context.Queryable() - .Where(it => it.PackageCodeClient == item).First(); - if (nowProduction != null) + // TODO 每次出库要出库计划累加 + + Context.Updateable() + .SetColumns(it => it.ReceivedPackNum == it.ReceivedPackNum + 1) + .Where(it => it.FkOutOrderId == shipnumber) + .Where(it => it.Patchcode == item) + .ExecuteCommand(); + + + + + + + UseTran2(() => { - record.FkNowProductionId = nowProduction.Id; - record.PackageCodeClient = nowProduction.PackageCodeClient; - record.PackageCode = nowProduction.PackageCode; - record.PackageCodeOriginal = nowProduction.PackageCodeOriginal; - record.LocationCode = nowProduction.LocationCode; - record.Partnumber = nowProduction.Partnumber; - record.GoodsNumLogic = nowProduction.GoodsNumLogic; - record.GoodsNumAction = nowProduction.GoodsNumAction; - record.EntryWarehouseTime = nowProduction.EntryWarehouseTime; - record.OutTime = DateTime.Now; - record.CreatedTime = DateTime.Now; - record.CreatedBy = Createby; - record.FkOutOrderId = shipnumber; - sum_insert = Context.Insertable(record).ExecuteCommand(); - sum_delete += Context.Deleteable() - .Where(it => it.PackageCodeClient == item) - .ExecuteCommand(); - } + WmGoodsOutRecord record = new WmGoodsOutRecord(); + record.Id = SnowFlakeSingle.Instance.NextId().ToString(); + WmGoodsNowProduction nowProduction = Context.Queryable() + .Where(it => it.PackageCodeClient == item).First(); + + if (nowProduction != null) + { + record.FkNowProductionId = nowProduction.Id; + record.PackageCodeClient = nowProduction.PackageCodeClient; + record.PackageCode = nowProduction.PackageCode; + record.PackageCodeOriginal = nowProduction.PackageCodeOriginal; + record.LocationCode = nowProduction.LocationCode; + record.Partnumber = nowProduction.Partnumber; + record.GoodsNumLogic = nowProduction.GoodsNumLogic; + record.GoodsNumAction = nowProduction.GoodsNumAction; + record.EntryWarehouseTime = nowProduction.EntryWarehouseTime; + record.OutTime = DateTime.Now; + record.CreatedTime = DateTime.Now; + record.CreatedBy = Createby; + record.FkOutOrderId = shipnumber; + sum_insert = Context.Insertable(record).ExecuteCommand(); + sum_delete += Context.Deleteable() + .Where(it => it.PackageCodeClient == item) + .ExecuteCommand(); + } + + + }); + + } + else + { + // 不在最早批次内 + return (200, 200); + + } + - }); } } @@ -517,7 +562,7 @@ namespace ZR.Service.mes.wms /// /// /// - public string CheckProductionOut(string production_packcode, string shipment_num) + public string CheckProductionOut(string parnumber, string production_packcode, string shipment_num) { try { @@ -540,13 +585,19 @@ namespace ZR.Service.mes.wms { return "标签解析异常!请检查标签"; } - // 3.判断是否已入库 - bool isExistedWarehouse = Context.Queryable().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any(); - if (!isExistedWarehouse) + //3 判断箱子是否配置零件号 + if (parnumber != resultionPackage.PartNumner) { - return "该箱号未入库!请先入库"; + return "此箱子不在选择的物料号"; } + // 3.判断是否已入库 + //bool isExistedWarehouse = Context.Queryable().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any(); + //if (!isExistedWarehouse) + //{ + // return "该箱号未入库!请先入库"; + //} + // 4.获取出库单号对应的出库计划 List orderPlans = Generate_outorderplan(shipment_num); // 5.配对是否符合出库条件 @@ -565,7 +616,7 @@ namespace ZR.Service.mes.wms { return "此箱标签存在异常不可出库!"; } - + } @@ -577,7 +628,15 @@ namespace ZR.Service.mes.wms /// public int PersistenceOutorderplan(string shipment_num) { - throw new NotImplementedException(); + List orderPlans = Generate_outorderplan(shipment_num); + + var x = Context.Storageable(orderPlans) + .WhereColumns(it => it.FkOutOrderId) + .WhereColumns(it => it.MaterialCode) + .ToStorage(); + int result = x.AsInsertable.ExecuteCommand(); //执行插入 + x.AsUpdateable.ExecuteCommand(); //执行更新  + return result; }