From b2d25faa69ee7e9f24b6ac98d3b4dcbddada70bc Mon Sep 17 00:00:00 2001
From: yuyou_x <2336760928@qq.com>
Date: 星期四, 14 三月 2024 13:37:15 +0800
Subject: [PATCH] 修改pda托盘绑定同一物料多批次 无法具体选中批次问题。
---
Wms/WMS.BLL/Logic/AllotLocation.cs | 75 ++++++++++++++++++++++++-------------
1 files changed, 49 insertions(+), 26 deletions(-)
diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs
index a8dc8a5..960487f 100644
--- a/Wms/WMS.BLL/Logic/AllotLocation.cs
+++ b/Wms/WMS.BLL/Logic/AllotLocation.cs
@@ -18,9 +18,10 @@
/// 鑾峰彇鍚堥�傜殑搴撲綅
/// </summary>
/// <param name="houseNo">浠撳簱鍙�</param>
+ /// <param name="areaList">鍖哄煙闆嗗悎</param>
/// <param name="roadwayNo">宸烽亾鍙�(鍙┖)</param>
/// <returns></returns>
- public SysStorageLocat GetSuiTableLocate(string houseNo, string roadwayNo = "")
+ public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "")
{
try
{
@@ -33,6 +34,10 @@
{
throw new Exception($"鏈煡璇㈠埌{houseNo}浠撳簱淇℃伅");
}
+
+ var roadList = db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) )
+ .GroupBy(m=>m.RoadwayNo).Select(m=>m.RoadwayNo).ToList();
+
//鏁版嵁瀛楀吀(鑾峰彇瀛楀吀涓粨搴撶被鍨�)
var dic = db.Queryable<SysDictionary>().First(m => m.Id.ToString() == house.Type);
switch (dic.DictName)
@@ -46,6 +51,11 @@
{
throw new Exception($"鏈煡璇㈠埌{roadwayNo}宸烽亾淇℃伅");
}
+
+ if (!roadList.Contains(roadwayNo))
+ {
+ throw new Exception("褰撳墠鐗╂枡瀛樻斁鍖哄煙鏈湪鎸囧畾宸烽亾涓�");
+ }
if (roadway.Status == "1")
{
throw new Exception($"{roadwayNo}宸烽亾宸插仠鐢�");
@@ -53,7 +63,7 @@
//鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅
roadwayList.Add(roadway);
- var locate = GetLocateByRoadways(roadwayList);
+ var locate = GetLocateByRoadways(roadwayList,areaList,true);
if (locate == null)
{
throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�");
@@ -63,9 +73,9 @@
//绔嬩綋搴撴病鏈夋寚瀹氬贩閬擄紙寰幆宸烽亾鏍规嵁浼樺厛绾у垎閰嶏級
case "绔嬩綋搴�" when string.IsNullOrWhiteSpace(roadwayNo):
{
- var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0").OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList();
+ var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0" && roadList.Contains(m.RoadwayNo)).OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList();
- var locate = GetLocateByRoadways(roadwayList);
+ var locate = GetLocateByRoadways(roadwayList,areaList);
if (locate == null)
{
throw new Exception($"{houseNo}浠撳簱宸插惎鐢ㄧ殑宸烽亾涓病鏈夊悎閫傜殑绌哄偍浣�");
@@ -96,9 +106,10 @@
/// 鑾峰彇鍚堥�傜┖鍌ㄤ綅淇℃伅锛堟牴鎹贩閬撻泦鍚堝垽鏂級
/// </summary>
/// <param name="roadways">宸烽亾闆嗗悎</param>
- /// <param name="areaNo">鍖哄煙鍙�(瀛愭瘝鎵樼洏鍖�)</param>
+ /// <param name="areaList">鍖哄煙闆嗗悎</param>
+ /// <param name="isRoadway">鏄惁鎸囧畾宸烽亾</param>
/// <returns></returns>
- private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways)
+ private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false)
{
try
{
@@ -175,13 +186,17 @@
//鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅
foreach (var l in roadways)
{
- //濡傛灉涓婃鏄綋鍓嶅贩閬撳垯璺冲嚭
- if (log != null && l.RoadwayNo == log.RoadwayNo)
+ if (!isRoadway)
{
- continue;
+ //濡傛灉涓婃鏄綋鍓嶅贩閬撳垯璺冲嚭
+ if (log != null && l.RoadwayNo == log.RoadwayNo)
+ {
+ continue;
+ }
}
+
//鍙栧綋鍓嶅贩鏈�浼樹綅缃�
- locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight);
+ locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList);
//褰撳墠宸锋湁浣嶇疆鍒欓��鍑�
if (locate != null)
{
@@ -189,11 +204,14 @@
}
}
//濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ
- if (locate == null)
+ if (!isRoadway)
{
- if (log != null)
+ if (locate == null)
{
- locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight);
+ if (log != null)
+ {
+ locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList);
+ }
}
}
}
@@ -201,7 +219,11 @@
{
foreach (var item in roadways)
{
- locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight);
+ locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList);
+ if (locate != null)
+ {
+ break;
+ }
}
}
@@ -221,34 +243,35 @@
/// <param name="roadwayNo">宸烽亾鍙�</param>
/// <param name="topOrBom">鍌ㄤ綅鍒嗛厤涓婁笅 0 涓� 1 涓�</param>
/// <param name="leftOrRight">鍌ㄤ綅鍒嗛厤涓婁笅 0 宸� 1 鍙�</param>
- /// <param name="areaNo">鍖哄煙鍙�(瀛愭瘝鎵樼洏鍖�)</param>
+ /// <param name="areaList">鍖哄煙闆嗗悎</param>
/// <returns></returns>
- private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight)
+ private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList)
{
var db = DataContext.Db;
var str = "''";
//鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅
- do
+ SysStorageLocat data;
+
+ foreach (var area in areaList)
{
- var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and LocatNo not in({str}) ";
- //sql += !string.IsNullOrWhiteSpace(areaNo) ? $"and AreaNo = '{areaNo}' " : "";
+ var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) ";
sql += "order by ";
sql += topOrBom == 0 ? "Layer desc, " : "Layer, ";
sql += leftOrRight == 0 ? "[Column], " : "[Column] desc, ";
- sql += " Row desc; ";
+ sql += " Row desc, Depth desc; ";
var locateList = db.Ado.SqlQuery<SysStorageLocat>(sql);
- var data = locateList.FirstOrDefault();
+ data = locateList.FirstOrDefault();
if (data != null)
{
return data;
}
- else
- {
- return null;
- }
- } while (true);
+ }
+
+ return null;
+
+
}
}
--
Gitblit v1.8.0