From 51f7eb771322a65ee552ca9b60280632f72760e6 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期三, 15 十月 2025 16:55:08 +0800
Subject: [PATCH] 修改物料管理列表
---
Wms/WMS.BLL/Logic/AllotLocation.cs | 387 +++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 347 insertions(+), 40 deletions(-)
diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs
index 9462f76..10284fe 100644
--- a/Wms/WMS.BLL/Logic/AllotLocation.cs
+++ b/Wms/WMS.BLL/Logic/AllotLocation.cs
@@ -1,5 +1,6 @@
锘縰sing System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using Model.ModelDto.SysDto;
using SqlSugar;
@@ -7,6 +8,7 @@
using WMS.Entity.BllAsnEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
+using WMS.Entity.LogEntity;
using WMS.Entity.SysEntity;
namespace WMS.BLL.Logic
@@ -16,6 +18,273 @@
/// </summary>
public class AllotLocation
{
+
+
+ /// <summary>
+ /// 鑾峰彇瀵嗛泦搴撳悎閫傜殑宸烽亾锛堥�傜敤椤圭洰锛欽C34锛�
+ /// </summary>
+ /// <param name="roadways">宸烽亾闆嗗悎</param>
+ /// <param name="areaList">鍖哄煙闆嗗悎</param>
+ /// <param name="lotNo">鎵规鍙�</param>
+ /// <returns></returns>
+ public string GetMiJiSuiTableRoad(string house, List<string> roadways, List<string> areaList, string sku, string lotNo = "")
+ {
+
+ var db = DataContext.Db;
+
+ var dataStock = db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.WareHouseNo == house && m.SkuNo == sku);
+ if (!string.IsNullOrWhiteSpace(lotNo))
+ {
+ dataStock = dataStock.Where(m => m.LotNo == lotNo);
+ }
+ //搴撳瓨鏌ユ壘鐩稿悓鐗╂枡/鎵规鐨勫贩閬�
+ var yiYouRoad = dataStock.GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
+ foreach (var l in yiYouRoad.OrderBy(m=>m).ToList())
+ {
+ // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣�
+
+ var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.IsDel=="0" && m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l);
+
+ var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l)
+ .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+ if (locateCount - bindNum > 0)
+ {
+ return l;
+ }
+
+ }
+ //鑾峰彇搴撳瓨鍐呭凡鏈夌墿鏂欑殑宸烽亾
+ var dataStockRoad = db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.WareHouseNo == house).GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
+ //鎺掗櫎鎺夊凡鏈夌墿鏂欑殑宸烽亾
+ roadways = roadways.Where(m => !dataStockRoad.Contains(m)).ToList();
+ foreach (var l in roadways)
+ {
+ var bl = true;
+ //鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈変换鍔�
+ var taskList = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && m.EndRoadway == l && (m.Status == "0" || m.Status == "1")).ToList();
+ if (taskList.Count > 0)
+ {
+ //鍒ゆ柇鐗╂枡鎵规鏄惁鍜屽綋鍓嶄竴鑷�
+ foreach (var item in taskList)
+ {
+ var palletBind = db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.TaskNo == item.TaskNo);
+ if (palletBind != null)
+ {
+ if (palletBind.SkuNo !=sku || palletBind.LotNo != lotNo)
+ {
+ bl = false;
+ continue;
+ }
+
+ }
+ }
+ }
+ if (bl)
+ {
+ // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣�
+
+ var locateCount = db.Queryable<SysStorageLocat>().Count(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo) && m.RoadwayNo == l);
+
+ var bindNum = db.Queryable<LogTask>().Where(m => m.IsDel == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l)
+ .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
+ if (locateCount - bindNum > 0)
+ {
+ return l;
+ }
+ }
+ }
+ return "";
+
+ }
+
+ /// <summary>
+ /// 鑾峰彇瀵嗛泦搴撳悎閫傜殑鍌ㄤ綅锛堥�傜敤椤圭洰锛欽C34锛�
+ /// </summary>
+ /// <param name="roadways">宸烽亾闆嗗悎</param>
+ /// <param name="areaList">鍖哄煙闆嗗悎</param>
+ /// <param name="lotNo">鎵规鍙�</param>
+ /// <returns></returns>
+ public SysStorageLocat GetMiJiSuiTableLocate(string roadwayNo, List<string> areaList)
+ {
+
+ var db = DataContext.Db;
+
+ // 鍒ゆ柇褰撳墠宸烽亾(缁�)鏄惁鏈夌┖浣欏偍浣�
+ var locateList = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == roadwayNo && areaList.Contains(m.AreaNo) && m.Status == "0").ToList();
+ if (locateList.Count(m => m.Status == "0") > 0)
+ {
+ var bl = GetLocateASCOrDesc(roadwayNo);
+
+ var locate = locateList.OrderBy(m => m.LocatNo).First();
+
+ if (bl)
+ {
+ locate = locateList.OrderByDescending(m => m.LocatNo).First();
+ }
+ var bl2 = MiJiLocateIsOk(locate, bl); //楠岃瘉鍌ㄤ綅鏄惁鍙叆搴撴柟娉�
+ if (bl2)
+ {
+ return locate;
+ }
+ }
+
+
+ return null;
+
+ }
+
+ /// <summary>
+ /// 鑾峰彇鍌ㄤ綅鐨勬帓鍒楅『搴�
+ /// </summary>
+ /// <param name="roadStr"></param>
+ /// <returns>true锛歞esc鍊掑簭 false锛歛sc姝e簭</returns>
+ public bool GetLocateASCOrDesc(string roadStr)
+ {
+ var db = DataContext.Db;
+
+ var locate = db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.RoadwayNo == roadStr);
+ var a = locate.LocatNo.Substring(2,2);//鍌ㄤ綅鍒�
+ var b = locate.AisleOne.Substring(2, 2);//閫氶亾鍙e垪
+ return int.Parse(a) > int.Parse(b);
+ }
+
+ /// <summary>
+ /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴�
+ /// </summary>
+ /// <param name="locate"></param>
+ /// <returns></returns>
+ private bool MiJiLocateIsOk(SysStorageLocat locate,bool bl)
+ {
+
+ var db = DataContext.Db;
+ var a = int.Parse(locate.LocatNo.Substring(2, 2));//鍌ㄤ綅鍒�
+ var b = int.Parse(locate.AisleOne.Substring(2, 2));//閫氶亾鍙e垪
+ var str1 = new List<string>() { "0", "3", "5" };
+ var str2 = new List<string>() { "1", "2", "4" };
+ var locatList1 = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == locate.RoadwayNo && m.Column < a).ToList();
+ var locatList2 = db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.RoadwayNo == locate.RoadwayNo && m.Column > a).ToList();
+ if (bl)
+ {
+ if (locatList1.Count(m => str2.Contains(m.Status)) > 0)
+ {
+ return false;
+ }
+ if (locatList2.Count(m => str1.Contains(m.Status)) > 0)
+ {
+ return false;
+ }
+ }
+ else
+ {
+ if (locatList1.Count(m => str1.Contains(m.Status)) > 0)
+ {
+ return false;
+ }
+ if (locatList2.Count(m => str2.Contains(m.Status)) > 0)
+ {
+ return false;
+ }
+ }
+ return true;
+
+ }
+
+ /// <summary>
+ /// 鏍规嵁璧峰缁勮幏鍙栦綅缃渶浼樼殑鍥涢」杞﹀彇璐у伐浣�
+ /// </summary>
+ /// <param name="straRoadway">璧峰缁�</param>
+ /// <param name="outModel">鍑哄簱鍙e伐浣� 9銆� 17銆� 18</param>
+ /// <returns></returns>
+ public string RoadwayToStationNum(string straRoadway, string outModel)
+ {
+ var db = DataContext.Db;
+ string stationNum = "";
+
+ string[] lists = straRoadway.Split("MR");
+ var model = db.Queryable<SysStorageLocat>().First(m => m.RoadwayNo == straRoadway && m.IsDel == "0");
+ string stat = model.AisleOne;
+
+ if (model.Layer == 1)
+ { // 涓�灞�
+ switch (outModel) // 鐢宠鐨勫叆搴撳彛
+ {
+ case "9":
+
+ var path13 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(6 - int.Parse(stat.Substring(2, 2)));
+ var path14 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2)));
+
+ if (path13 <= path14)
+ {
+ stationNum = "190601";
+ }
+ else
+ {
+ stationNum = "191201";
+ }
+ break;
+ case "17":
+ stationNum = "030401";
+ break;
+ case "18":
+ var path03 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(06 - int.Parse(stat.Substring(2, 2)));
+ var path05 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2)));
+
+ if (path03 <= path05)
+ {
+ stationNum = "030601";
+ }
+ else
+ {
+ stationNum = "031201";
+ }
+ break;
+ default: break;
+ }
+ }
+ else
+ { // 浜屽眰
+ switch (outModel) // 鐢宠鐨勫叆搴撳彛
+ {
+ case "9":
+
+ var path15 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(6 - int.Parse(stat.Substring(2, 2)));
+ var path16 = Math.Abs(19 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2)));
+
+ if (path15 <= path16)
+ {
+ stationNum = "190602";
+ }
+ else
+ {
+ stationNum = "191202";
+ }
+
+ break;
+ case "17":
+ stationNum = "030402";
+ break;
+ case "18":
+ var path03 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(06 - int.Parse(stat.Substring(2, 2)));
+ var path05 = Math.Abs(03 - int.Parse(stat.Substring(0, 2))) + Math.Abs(12 - int.Parse(stat.Substring(2, 2)));
+
+ if (path03 <= path05)
+ {
+ stationNum = "030602";
+ }
+ else
+ {
+ stationNum = "031202";
+ }
+
+ break;
+ default: break;
+ }
+ }
+
+ return stationNum;
+ }
+
+
/// <summary>
/// 鑾峰彇鍚堥�傜殑搴撲綅
/// </summary>
@@ -23,10 +292,14 @@
/// <param name="areaList">鍖哄煙闆嗗悎</param>
/// <param name="roadwayNo">宸烽亾鍙�(鍙┖)</param>
/// <returns></returns>
- public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "")
+ public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "",string ceng = "")
{
try
{
+ if (string.IsNullOrWhiteSpace(ceng))
+ {
+ throw new Exception($"鐢宠璐ф灦搴撲綅灞傛暟涓嶈兘涓虹┖");
+ }
var db = DataContext.Db;
/* 1.鍏堝垽鏂粨搴擄紙绔嬪簱鎴栬�呭钩搴擄級
* 2.濡傛灉鏄珛搴� 鍐嶅垽鏂槸鍚︽寚瀹氬贩閬撳彿
@@ -40,11 +313,27 @@
var roadList = db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) )
.GroupBy(m=>m.RoadwayNo).Select(m=>m.RoadwayNo).ToList();
+ if (houseNo == "W02")
+ {
+ //涓�妤煎贩閬�
+ var conveyList1 = new List<string>() { "LR01", "LR02", "LR03", "LR04", "LR05", "LR06", "LR07", "LR08" };
+ //浜屾ゼ宸烽亾
+ var conveyList2 = new List<string>() { "LR09", "LR10", "LR11", "LR12" };
+ if (ceng == "1")
+ {
+ roadList = roadList.Where(m => conveyList1.Contains(m)).ToList();
+ }
+ else if (ceng == "2")
+ {
+ roadList = roadList.Where(m => conveyList2.Contains(m)).ToList();
+ }
+ }
+
//鏁版嵁瀛楀吀(鑾峰彇瀛楀吀涓粨搴撶被鍨�)
var dic = db.Queryable<SysDictionary>().First(m => m.Id.ToString() == house.Type);
switch (dic.DictName)
{
- //鏄惁鎸囧畾宸烽亾
+ //鎸囧畾宸烽亾
case "绔嬩綋搴�" when !string.IsNullOrWhiteSpace(roadwayNo):
{
var roadwayList = new List<SysStorageRoadway>();
@@ -65,7 +354,7 @@
//鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅
roadwayList.Add(roadway);
- var locate = GetLocateByRoadways(roadwayList,areaList,true);
+ var locate = GetLocateByRoadways(roadwayList,areaList,true,houseNo, ceng);
if (locate == null)
{
throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�");
@@ -77,7 +366,7 @@
{
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,areaList);
+ var locate = GetLocateByRoadways(roadwayList,areaList,false, houseNo,ceng);
if (locate == null)
{
throw new Exception($"{houseNo}浠撳簱宸插惎鐢ㄧ殑宸烽亾涓病鏈夊悎閫傜殑绌哄偍浣�");
@@ -111,7 +400,7 @@
/// <param name="areaList">鍖哄煙闆嗗悎</param>
/// <param name="isRoadway">鏄惁鎸囧畾宸烽亾</param>
/// <returns></returns>
- private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false)
+ private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false ,string houseNo = "W02",string ceng = "")
{
try
{
@@ -176,14 +465,14 @@
SysStorageLocat locate = null; // 鍌ㄤ綅淇℃伅
//SysStorageLocat log = db.Ado.SqlQuerySingle<SysStorageLocat>("select * from SysStorageLocat where LocatNo = (select Top(1) LocatNo from BllPalletBind order by CreateTime desc)"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰�
- SysRoadwayUseLog log= db.Ado.SqlQuerySingle<SysRoadwayUseLog>("select Top(1) * from SysRoadwayUseLog where IsDel=0 order by CreateTime desc"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰�
+ SysRoadwayUseLog log= db.Ado.SqlQuerySingle<SysRoadwayUseLog>($"select Top(1) * from SysRoadwayUseLog where IsDel=0 and WareHouseNo ='{houseNo}' order by CreateTime desc"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰�
if (laneAllot == 0)//璺冲贩閬撳钩鍧囧垎閰�
{
//濡傛灉鍚岀骇宸烽亾鏈夊鏉″垯鏌ヤ笂娆′綅缃棩蹇�
if (roadways.Count > 1)
{
- log = db.Queryable<SysRoadwayUseLog>().OrderByDescending(l => l.Id).First();
+ log = db.Queryable<SysRoadwayUseLog>().Where(m=>m.WareHouseNo == houseNo).OrderByDescending(l => l.Id).First();
}
//鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅
foreach (var l in roadways)
@@ -200,24 +489,28 @@
var count = 0;
do
{
- locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
+ locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count, ceng);
if (locate != null)
{
- list.Add(locate.LocatNo);
- var isOk = LocateIsOk(locate);
- if (!isOk)
- {
- locate = null;
- }
- if (isOk)
- {
- break;
- }
+ break;
+ //list.Add(locate.LocatNo);
+ //var isOk = LocateIsOk(locate);
+ //if (!isOk)
+ //{
+ // locate = null;
+ //}
+ //if (isOk)
+ //{
+ // break;
+ //}
}
} while (count != 0 && locate == null);//褰撴煡璇㈠偍浣嶆暟閲忎笉绛�0 骞朵笖鍌ㄤ綅涓虹┖鏃讹紝鍐嶆寰幆宸烽亾銆佸尯鍩熸煡鎵惧偍浣�
-
+ if (locate!=null)
+ {
+ break;
+ }
}
//濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ
if (!isRoadway)
@@ -230,15 +523,16 @@
var count = 0;
do
{
- locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
+ locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng);
if (locate != null)
{
- list.Add(locate.LocatNo);
- var isOk = LocateIsOk(locate);
- if (!isOk)
- {
- locate = null;
- }
+ break;
+ //list.Add(locate.LocatNo);
+ //var isOk = LocateIsOk(locate);
+ //if (!isOk)
+ //{
+ // locate = null;
+ //}
}
@@ -257,24 +551,28 @@
var count = 0;
do
{
- locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count);
+ locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList, list, ref count,ceng);
if (locate != null)
{
- list.Add(locate.LocatNo);
- var isOk = LocateIsOk(locate);
- if (!isOk)
- {
- locate = null;
- }
- if (isOk)
- {
- break;
- }
+ break;
+ //list.Add(locate.LocatNo);
+ //var isOk = LocateIsOk(locate);
+ //if (!isOk)
+ //{
+ // locate = null;
+ //}
+ //if (isOk)
+ //{
+ // break;
+ //}
}
} while (count != 0 && locate == null);//褰撴煡璇㈠偍浣嶆暟閲忎笉绛�0 骞朵笖鍌ㄤ綅涓虹┖鏃讹紝鍐嶆寰幆宸烽亾銆佸尯鍩熸煡鎵惧偍浣�
-
+ if (locate != null)
+ {
+ break;
+ }
}
}
@@ -297,7 +595,7 @@
/// <param name="areaList">鍖哄煙闆嗗悎</param>
/// <param name="locateNoStr">鎺掗櫎鐨勫偍浣嶉泦鍚�</param>
/// <returns></returns>
- private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count)
+ private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList,List<string> locateNoStr,ref int count,string ceng = "")
{
var db = DataContext.Db;
var str = "";
@@ -318,7 +616,11 @@
foreach (var area in areaList)
{
- 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}) ";
+ var sql = $@"select * from SysStorageLocat where IsDel = 0 and Layer!= '3' and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) ";
+ //if (!string.IsNullOrWhiteSpace(ceng))
+ //{
+ // sql += $"and Layer = '{ceng}' ";
+ //}
sql += "order by ";
sql += topOrBom == 0 ? "Layer desc, " : "Layer, ";
sql += leftOrRight == 0 ? "[Column], " : "[Column] desc, ";
@@ -340,6 +642,11 @@
}
+ /// <summary>
+ /// 楠岃瘉鍌ㄤ綅鏄惁鍙叆搴� 鍙屾繁浣嶉獙璇�
+ /// </summary>
+ /// <param name="locate"></param>
+ /// <returns></returns>
private bool LocateIsOk(SysStorageLocat locate)
{
try
--
Gitblit v1.8.0