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;
}