From c9fe2c53364abe0e0e495a1b756267f865159e2e Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期三, 25 六月 2025 12:17:26 +0800
Subject: [PATCH] Merge branch 'csc'
---
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 1850 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 1,492 insertions(+), 358 deletions(-)
diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index a8be286..361b515 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -26,12 +26,17 @@
using System.Runtime.Intrinsics.X86;
using ZXing.OneD;
using System.Threading.Tasks;
+using System.Diagnostics;
+using System.Drawing.Drawing2D;
+using Model.ModelDto.LogDto;
+using AutoMapper.Internal;
namespace WMS.BLL.BllSoServer
{
public class ExportNoticeServer : DbHelper<BllExportNotice>, IExportNoticeServer
{
private static readonly SqlSugarScope Db = DataContext.Db;
+ private readonly object IssueOutLock = new object();
public ExportNoticeServer() : base(Db)
{
}
@@ -1009,10 +1014,11 @@
skuList = skuList.Where(m => m.SkuNo == "100088").ToList();
}
skuStrList = skuList.Select(m => m.SkuNo).ToList();
+ var areaStr = new List<string>() { "B06", "B07", "B09" };
var stockRst = new StockServer();
var stockDetailRst = new StockDetailServer();
Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
- .And(it => it.WareHouseNo == house)
+ .And(it => it.WareHouseNo == house || string.IsNullOrWhiteSpace(it.LocatNo) || (it.WareHouseNo == "W04" && !areaStr.Contains(it.AreaNo)))
.AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus))
.And(m => skuStrList.Contains(m.SkuNo))
.AndIF(type == "6", m => m.OwnerNo == ownerNo)//浠e偍鍑哄簱闇�瑕佸叧鑱旇揣涓�
@@ -1245,7 +1251,7 @@
IsWave = "0",
WaveNo = "",
IsDespatch = "0",
-
+ WareHouseNo = model.WareHouseNo,
CreateUser = userId,
};
@@ -2195,17 +2201,17 @@
var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
////瑙f瀽杩斿洖鏁版嵁
- var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
- if (wcsModel.StatusCode == 0)
+ var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response);
+ if (wcsModel.code == 200)
{
//鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
new TaskServer().EditTaskIssueOk(list2, time1, time2);
str += "涓嬪彂鎴愬姛";
}
- if (wcsModel.StatusCode == -1)
+ else
{
- new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
- throw new Exception(wcsModel.Msg);
+ new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message);
+ throw new Exception(wcsModel.message);
}
}
catch (Exception ex)
@@ -2419,12 +2425,9 @@
Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟
var qty = 0m;
var house = "";
- if (notice.Type == "0")
- {
- house = "W01";
- }
+
//鍒嗛厤璐х墿
- qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, house);
+ qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, notice.WareHouseNo);
foreach (var sc in stockQtyDic)
{
var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key);
@@ -2965,6 +2968,1477 @@
}
}
+ #endregion
+
+ #region 涓嬪彂鍑哄簱銆佸嚭搴撳畬鎴愩�侀噸鏂颁笅鍙戜换鍔°�佸彇娑堜换鍔°�佸紓甯稿鐞�
+
+ public string GetHouseBySo(string soNo)
+ {
+ try
+ {
+ var notcie = Db.Queryable<BllExportNotice>().First(m=>m.IsDel == "0" && m.SONo == soNo);
+ if (notcie == null)
+ {
+ throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曚俊鎭�");
+ }
+ return notcie.WareHouseNo;
+ }
+ catch (Exception e)
+ {
+ throw new Exception(e.Message);
+ }
+ }
+
+ public List<OutCommandDto> IssueOutHouseLk(string soNo, string outMode, int userId, string url, out string str)
+ {
+ try
+ {
+ var outDto1 = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚堬紙娣卞害涓�1鐨勫偍浣嶏級
+ //璁板綍閿欒淇℃伅鐨勯泦鍚� //1:褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�2 鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�3鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�4 瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱
+ var flagList = new List<int>();
+
+ var com = new Common();
+ var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0");
+ if (notice == null)
+ {
+ throw new Exception($"鏈壘鍒皗soNo}鍑哄簱鍗曚俊鎭�");
+ }
+ if (notice.WareHouseNo != "W02")
+ {
+ throw new Exception("浠撳簱鍙烽敊璇�");
+ }
+ //鎵�鏈夎鍑哄簱鐨勫嚭搴撳垎閰嶄俊鎭�(鏈笅鍙戠殑淇℃伅鍜屽緟鎷h揣鐨勪俊鎭�)
+ var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && (a.Status == "0" || a.Status == "2")).ToList();
+ if (list.Count == 0) //鍒ゆ柇鏄惁鏈夐渶瑕佷笅鍙戠殑鍑哄簱娴佹按
+ {
+ throw new Exception("褰撳墠鍑哄簱鍗曟嵁鏃犻渶瑕佷笅鍙戠殑鎵樼洏");
+ }
+
+ #region 闆嗗悎
+ //瑕佸嚭搴撶殑鎵樼洏闆嗗悎
+ var outLpnList = list.Select(m => m.PalletNo).ToList();
+ //瑕佸嚭搴撶殑鏄庣粏闆嗗悎
+ var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
+ //鐗╂枡缂栫爜琛�
+ var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0");
+ //鍖呰琛�
+ var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
+ Db.BeginTran();
+ try
+ {
+ List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴�
+ var i = 0;
+ var outLocatelist1 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B02" && m.Flag == "0").ToList();
+ var outLocatelist2 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B05" && m.Flag == "0").ToList();
+ //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔�
+ foreach (var item in list)
+ {
+ var outModeLocate = "";
+ if (outMode == "17")
+ {
+ if (i < outLocatelist1.Count)
+ {
+ outModeLocate = outLocatelist1[i].LocatNo;
+ }
+ else
+ {
+ var j = i % outLocatelist1.Count;
+
+ outModeLocate = outLocatelist1[j].LocatNo;
+ }
+ }
+ else if (outMode == "18")
+ {
+ if (i < outLocatelist1.Count)
+ {
+ outModeLocate = outLocatelist2[i].LocatNo;
+ }
+ else
+ {
+ var j = i % outLocatelist1.Count;
+
+ outModeLocate = outLocatelist2[j].LocatNo;
+ }
+ }
+ else
+ {
+ throw new Exception("鍑哄簱鍙e伐浣嶅紓甯�");
+ }
+
+ var taskNoStr = "";
+
+ // 鍌ㄤ綅鍙�
+ var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo;
+
+ #region 鍒ゆ柇
+
+ //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐�
+ if (string.IsNullOrWhiteSpace(locateNo)) //搴撳
+ {
+ //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ叆搴撲腑
+ var imBl = com.GetImTask(item.PalletNo);
+ if (imBl != null)
+ {
+ flagList.Add(4);
+ continue;
+ }
+ //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑锛�
+ if (item.Status == "0")
+ {
+ //濡傛灉涓嶅湪浠撳簱鍐咃紝褰撳墠鍒嗛厤淇℃伅鐩存帴鏇存柊鍑哄簱瀹屾垚
+ item.Status = "2";//鐘舵��
+ item.OutMode = outModeLocate;//鍑哄簱鍙�
+ Db.Updateable(item).ExecuteCommand();
+ var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+ if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+ {
+ noticeDetail.FactQty += item.Qty;
+ Db.Updateable(noticeDetail).ExecuteCommand();
+ }
+
+ //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+ if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+ {
+ var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+ if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+ {
+ notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+ Db.Updateable(notice).ExecuteCommand();
+ }
+ }
+ }
+ flagList.Add(0);
+ continue;
+
+ }
+
+ var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭�
+ if (locate == null)
+ {
+ flagList.Add(2);
+ continue;
+ }
+ //鍒ゆ柇鍌ㄤ綅鏍囧織鏄惁涓烘崯鍧�
+ if (locate.Flag == "2")
+ {
+ flagList.Add(3);
+ continue;
+ }
+
+ #endregion
+
+ if (locate.Status == "1") //鏈夌墿鍝�
+ {
+ #region 娣诲姞鍑哄簱浠诲姟
+
+ var taskNo = new Common().GetMaxNo("TK");
+ var exTask = new LogTask //鍑哄簱浠诲姟
+ {
+ TaskNo = taskNo,
+ Sender = "WMS",
+ Receiver = "WCS",
+ IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+ StartLocat = locate.LocatNo,//璧峰浣嶇疆
+ EndLocat = outModeLocate,//鐩爣浣嶇疆
+ PalletNo = item.PalletNo,//鎵樼洏鐮�
+ IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+ IsCancel = 1,//鏄惁鍙彇娑�
+ IsFinish = 1,//鏄惁鍙畬鎴�
+ Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟
+ Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+ OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗�
+ Msg = "浠�" + locate.LocatNo + "鍒�" + outModeLocate + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
+ };
+ Db.Insertable(exTask).ExecuteCommand();
+ logTaskList.Add(exTask);
+
+ outDto1.Add(new OutCommandDto()
+ {
+ TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+ TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉�
+
+ PalletNo = item.PalletNo,//鎵樼洏鍙�
+ StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+ StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
+ EndLocate = outModeLocate, // 鐩爣浣嶇疆
+
+ Order = 999,
+ Type = PLCTypeEnum.AGV
+
+ });
+ taskNoStr = exTask.TaskNo;
+
+ #endregion
+
+ #region 鏀瑰彉鏁版嵁
+ if (item.Status == "0")//鍒ゆ柇鎵樼洏鏄惁涓嬪彂杩�
+ {
+ var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+ if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+ {
+ noticeDetail.FactQty += item.Qty;
+ Db.Updateable(noticeDetail).ExecuteCommand();
+ }
+
+ //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+ if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+ {
+ var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+ if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+ {
+ notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+ Db.Updateable(notice).ExecuteCommand();
+ }
+ }
+ }
+ locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
+ Db.Updateable(locate).ExecuteCommand();
+ var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//褰撳墠鍑哄簱鐨勭洰鏍囧偍浣嶄俊鎭�
+ locate2.Status = "4";
+ Db.Updateable(locate2).ExecuteCommand();
+
+ item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
+ item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛�
+ //item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡
+ item.OutMode = outModeLocate;//鍑哄簱鍙�
+ //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//瑁呰溅鍙�
+ Db.Updateable(item).ExecuteCommand();
+
+ #endregion
+
+ flagList.Add(0);
+ i++;
+ }
+ else if (locate.Status == "3") //鍑哄簱涓�
+ {
+ #region 鏀瑰彉鏁版嵁
+ //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛�
+ if (item.Status == "0")
+ {
+ var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+ if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+ {
+ noticeDetail.FactQty += item.Qty;
+ Db.Updateable(noticeDetail).ExecuteCommand();
+ }
+
+ //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+ if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+ {
+ var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+ if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+ {
+ notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+ Db.Updateable(notice).ExecuteCommand();
+ }
+ }
+ }
+ var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
+ if (taskNo == null)
+ {
+ taskNo = logTaskList.FirstOrDefault(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱
+ }
+ if (taskNo == null)
+ {
+ throw new Exception($"鎵樼洏鍙凤細{item.PalletNo},鍑哄簱寮傚父");
+ }
+ item.TaskNo = taskNo.TaskNo;
+ item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛�
+ item.OutMode = item.OutMode;//鍑哄簱鍙�
+ //item.UnstackingMode = unstackingMode2;//鎷嗗灈妯″紡
+ Db.Updateable(item).ExecuteCommand();
+ flagList.Add(0);
+ #endregion
+ }
+ else if (locate.Status == "5") //绉诲嚭涓�
+ {
+ flagList.Add(1);
+ }
+ }
+
+ //娣诲姞鎿嶄綔鏃ュ織璁板綍
+ var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId);
+ Db.CommitTran();
+
+ str = string.Empty;
+ if (flagList.Count(m => m == 0) > 0)
+ {
+ str += "0.涓嬪彂鎴愬姛銆�";
+ }
+ if (flagList.Count(m => m == 1) > 0)
+ {
+ str += "1.褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�";
+ }
+ if (flagList.Count(m => m == 2) > 0)
+ {
+ str += "2.鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�";
+ }
+ if (flagList.Count(m => m == 3) > 0)
+ {
+ str += "4.鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�";
+ }
+ if (flagList.Count(m => m == 4) > 0)
+ {
+ str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�";
+ }
+ if (flagList.Count(m => m == 5) > 0)
+ {
+ str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鎷嗘墭璇风◢鍚庝笅鍙戙��";
+ }
+ if (outDto1.Count > 0)
+ {
+ // 姝e紡杩愯绋嬪簭鏀惧紑
+ var list2 = outDto1.Select(m => m.TaskNo).ToList();
+ var jsonData = JsonConvert.SerializeObject(outDto1);
+ string response = "";
+
+ try
+ {
+ var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+ //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+ var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+ //////瑙f瀽杩斿洖鏁版嵁
+ //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
+ //if (wcsModel.StatusCode == 0)
+ //{
+ // //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+ new TaskServer().EditTaskIssueOk(list2, time1, time2);
+ str += "涓嬪彂鎴愬姛";
+ //}
+ //if (wcsModel.StatusCode == -1)
+ //{
+ // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
+ // throw new Exception(wcsModel.Msg);
+ //}
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
+
+ }
+
+ return outDto1;
+ }
+ catch (Exception e)
+ {
+ Db.RollbackTran();
+ throw new Exception(e.Message);
+ }
+
+
+ #endregion
+ }
+ catch (Exception e)
+ {
+ throw new Exception(e.Message);
+ }
+ }
+
+ public List<OutCommandDto> IssueOutHouseMk(string soNo, string outMode, int userId, string url, out string str)
+ {
+ try
+ {
+ #region 闆嗗悎
+
+ var outDto1 = new List<OutCommandDto>(); //鍏堝嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负1鐨勫偍浣嶏級
+ var outDto2 = new List<OutCommandDto>(); //鍚庡嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负2鐨勫偍浣嶏級
+ var moveDto = new List<OutCommandDto>(); //瑕佺Щ搴撴暟鎹殑闆嗗悎
+ //璁板綍閿欒淇℃伅鐨勯泦鍚�
+ var flagList = new List<int>();//1:褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�2 鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�3鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�4 瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱
+
+ #endregion
+ var com = new Common();
+ var allot = new AllotLocation();
+
+ var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0");
+ if (notice == null)
+ {
+ throw new Exception($"鏈壘鍒皗soNo}鍑哄簱鍗曚俊鎭�");
+ }
+ //鎵�鏈夎鍑哄簱鐨勫嚭搴撳垎閰嶄俊鎭�(鏈笅鍙戠殑淇℃伅鍜屽緟鎷h揣鐨勪俊鎭�)
+ var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && (a.Status == "0" || a.Status == "2")).ToList();
+ if (list.Count == 0) //鍒ゆ柇鏄惁鏈夐渶瑕佷笅鍙戠殑鍑哄簱娴佹按
+ {
+ throw new Exception("褰撳墠鍑哄簱鍗曟嵁鏃犻渶瑕佷笅鍙戠殑鎵樼洏");
+ }
+
+ #region 闆嗗悎
+ //瑕佸嚭搴撶殑鎵樼洏闆嗗悎
+ var outLpnList = list.Select(m => m.PalletNo).ToList();
+ //瑕佸嚭搴撶殑鏄庣粏闆嗗悎
+ var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
+ //鎵�鏈夎鍑哄簱鐨勫偍浣嶉泦鍚�
+ var locateListStrs = outStockDetail.Where(m=> !string.IsNullOrWhiteSpace(m.LocatNo)).Select(m => m.LocatNo).Distinct().ToList();
+ //鐗╂枡缂栫爜琛�
+ var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0");
+ //鍖呰琛�
+ var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0");
+ Db.BeginTran();
+ try
+ {
+ List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴�
+
+
+ //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔�
+ foreach (var item in list)
+ {
+ var taskNoStr = "";
+
+ // 鍌ㄤ綅鍙�
+ var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo;
+
+ #region 鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐�
+
+ //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐�
+ if (string.IsNullOrWhiteSpace(locateNo)) //搴撳
+ {
+ //if (notice.Type == "0")
+ //{
+ // flagList.Add(5);
+ // continue;
+ //}
+ //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ叆搴撲腑
+ var imBl = com.GetImTask(item.PalletNo);
+ if (imBl != null)
+ {
+ flagList.Add(4);
+ continue;
+ }
+ //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛�
+ if (item.Status == "0")
+ {
+ //濡傛灉涓嶅湪浠撳簱鍐咃紝褰撳墠鍒嗛厤淇℃伅鐩存帴鏇存柊鍑哄簱瀹屾垚
+ item.Status = "2";//鐘舵��
+ item.OutMode = outMode;//鍑哄簱鍙�
+ Db.Updateable(item).ExecuteCommand();
+ var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+ if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+ {
+ noticeDetail.FactQty += item.Qty;
+ Db.Updateable(noticeDetail).ExecuteCommand();
+ }
+
+ //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+ if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+ {
+ var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+ if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+ {
+ notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+ Db.Updateable(notice).ExecuteCommand();
+ }
+ }
+ }
+ flagList.Add(0);
+ continue;
+ }
+
+ //鍒ゆ柇鍌ㄤ綅
+ var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭�
+ if (locate == null)
+ {
+ flagList.Add(2);
+ continue;
+ }
+ //鍒ゆ柇鍌ㄤ綅鏍囧織鏄惁涓烘崯鍧�
+ if (locate.Flag == "2")
+ {
+ flagList.Add(3);
+ continue;
+ }
+
+ #endregion
+
+ if (locate.Status == "1") //鏈夌墿鍝�
+ {
+ var row1 = int.Parse(locate.LocatNo.Substring(2,2));
+ var row2 = int.Parse(locate.AisleOne.Substring(2, 2));
+ //闇�瑕佺Щ搴撶殑淇℃伅
+ var NeedMoveInfo = IsNeedMoveLocate(locate, locateListStrs, out int isOut);
+ if (isOut == 1)
+ {
+ //宸烽亾缁勪腑鏈夊叆搴撴垨绉诲叆鐨勫偍浣嶏紝鎴栬�呮槸褰撳墠鍌ㄤ綅鍓嶆湁鍌ㄤ綅鏈笅鍙戞垚鍔熺殑浠诲姟
+ flagList.Add(2);
+ continue;
+ }
+ if (NeedMoveInfo.Count > 0)//闇�瑕佺Щ搴�
+ {
+ //鍒ゆ柇搴撳唴绌哄偍浣嶆槸鍚﹀
+ var okRoad = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == notice.WareHouseNo).Select(m => m.RoadwayNo).ToList();
+ var nullSlotNum = Db.Queryable<SysStorageLocat>().Count(m => m.RoadwayNo != locate.RoadwayNo && okRoad.Contains(m.RoadwayNo) && m.Status == "0");
+ //鍒ゆ柇绌哄偍浣嶇殑鏁伴噺鏄惁澶т簬闇�瑕佺Щ搴撶殑鏁伴噺
+ if (nullSlotNum >= NeedMoveInfo.Count)
+ {
+ var isYk = false;
+ foreach (var s in NeedMoveInfo)
+ {
+ //鍌ㄤ綅鍒�
+ var rows = int.Parse(s.Substring(2,2));
+
+ //鑾峰彇绉诲簱鍌ㄤ綅
+ var moveAddress = GetMiJiMoveAddress(s, locate.AisleOne);
+ var tary = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == s);
+ if (string.IsNullOrWhiteSpace(moveAddress)) // 鍒ゆ柇鏄惁鑾峰彇鍒扮Щ搴撶殑搴撲綅
+ {
+ isYk = true;
+ flagList.Add(5);//鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗘湭鏌ヨ鍒扮┖鍌ㄤ綅
+ break; //娌℃湁绉诲簱鐨勫簱浣嶄簡
+ }
+ else
+ {
+ //鍒ゆ柇鎵樼洏鏈夋病鏈夊洖绉荤殑浠诲姟
+ //var hy = GetHyTask(item.ExportStockCode);
+ //if (hy != null)
+ //{
+ // var hyentity = dataContext.WmsExportTask.FirstOrDefault(m => m.TaskId == hy.TaskId);
+ // if (hyentity != null)
+ // {
+ // isYk = true;
+ // msgList.Add(6);//鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗘槸鍥炵Щ鎵樼洏
+ // break; //娌℃湁绉诲簱鐨勫簱浣嶄簡
+ // }
+ //}
+ var ykTaskNo = new Common().GetMaxNo("TK");
+ var ykTask = new LogTask //鍑哄簱浠诲姟
+ {
+ TaskNo = ykTaskNo,
+ Sender = "WMS",
+ Receiver = "WCS",
+ IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+ StartLocat = s,//璧峰浣嶇疆
+ EndLocat = moveAddress,//outMode,//鐩爣浣嶇疆
+ PalletNo = tary.PalletNo,//鎵樼洏鐮�
+ IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+ IsCancel = 1,//鏄惁鍙彇娑�
+ IsFinish = 1,//鏄惁鍙畬鎴�
+ Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟
+ Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+ OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗�
+ Msg = "浠�" + locate.LocatNo + "鍒�" + moveAddress + "鐨勭Щ搴撲换鍔�", //鍏抽敭淇℃伅
+ };
+ Db.Insertable(ykTask).ExecuteCommand();
+ logTaskList.Add(ykTask);
+
+ outDto1.Add(new OutCommandDto()
+ {
+ PalletNo = item.PalletNo,//鎵樼洏鍙�
+ StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+ StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾
+ EndLocate = moveAddress,//outMode, // 鐩爣浣嶇疆
+ TaskNo = ykTaskNo, // 浠诲姟鍙�
+ TaskType = "2",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉�
+ Order = Math.Abs(row2 - rows),
+ Type = PLCTypeEnum.ShuttleCar
+
+ });
+ var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s);
+ var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress);
+
+ slotChange.Status = "5"; //鏀瑰彉鐘舵�侊紙姝e湪鍑哄簱锛�
+ slotChange2.Status = "4"; // 鏀瑰彉鐘舵�侊紙姝e湪绉诲叆锛�
+ Db.Updateable(slotChange).ExecuteCommand();
+ Db.Updateable(slotChange2).ExecuteCommand();
+ }
+ }
+ if (isYk)
+ {
+ break;
+ }
+ }
+ else
+ {
+ flagList.Add(5);
+ break;
+ }
+ }
+ #region 娣诲姞鍑哄簱浠诲姟
+
+ var taskNo = new Common().GetMaxNo("TK");
+ var exTask = new LogTask //鍑哄簱浠诲姟
+ {
+ TaskNo = taskNo,
+ Sender = "WMS",
+ Receiver = "WCS",
+ IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+ StartLocat = locate.LocatNo,//璧峰浣嶇疆
+ EndLocat = outMode,//outMode,//鐩爣浣嶇疆
+ PalletNo = item.PalletNo,//鎵樼洏鐮�
+ IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+ IsCancel = 1,//鏄惁鍙彇娑�
+ IsFinish = 1,//鏄惁鍙畬鎴�
+ Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟
+ Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+ OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗�
+ Msg = "浠�" + locate.LocatNo + "鍒�" + outMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
+ };
+ Db.Insertable(exTask).ExecuteCommand();
+ logTaskList.Add(exTask);
+ var endroad = allot.RoadwayToStationNum(locate.RoadwayNo, outMode);
+ outDto1.Add(new OutCommandDto()
+ {
+ PalletNo = item.PalletNo,//鎵樼洏鍙�
+ StartLocate = locate.LocatNo, // 璧峰浣嶇疆
+ StartRoadway = locate.RoadwayNo,//璧峰宸烽亾
+ EndLocate = outMode,//, // 鐩爣浣嶇疆
+ EndRoadway = endroad,
+ TaskNo = exTask.TaskNo, // 浠诲姟鍙�
+ TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉�
+ OutMode = outMode, //鍑哄簱鍙�
+ Order = Math.Abs(row2 - row1),
+ Type = PLCTypeEnum.ShuttleCar
+
+ });
+ taskNoStr = exTask.TaskNo;
+
+ #endregion
+
+ #region 鏀瑰彉鏁版嵁
+ if (item.Status == "0")//鍒ゆ柇鎵樼洏鏄惁涓嬪彂杩�
+ {
+ var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+ if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+ {
+ noticeDetail.FactQty += item.Qty;
+ Db.Updateable(noticeDetail).ExecuteCommand();
+ }
+
+ //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+ if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+ {
+ var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+ if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+ {
+ notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+ Db.Updateable(notice).ExecuteCommand();
+ }
+ }
+ }
+ locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱
+ Db.Updateable(locate).ExecuteCommand();
+
+ item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿
+ item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛�
+ //item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡
+ item.OutMode = outMode;//鍑哄簱鍙�
+ //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//瑁呰溅鍙�
+ Db.Updateable(item).ExecuteCommand();
+
+ #endregion
+
+ flagList.Add(0);
+ }
+ else if (locate.Status == "3") //鍑哄簱涓�
+ {
+ #region 鏀瑰彉鏁版嵁
+ //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛�
+ if (item.Status == "0")
+ {
+ var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
+ if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲�
+ {
+ noticeDetail.FactQty += item.Qty;
+ Db.Updateable(noticeDetail).ExecuteCommand();
+ }
+
+ //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo);
+ if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2")
+ {
+ var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList();
+ if (detailList.Count(m => m.Qty >= m.AllotQty) > 0)
+ {
+ notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц
+ Db.Updateable(notice).ExecuteCommand();
+ }
+ }
+ }
+ var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
+ if (taskNo == null)
+ {
+ taskNo = logTaskList.FirstOrDefault(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱
+ }
+ if (taskNo == null)
+ {
+ throw new Exception($"鎵樼洏鍙凤細{item.PalletNo},鍑哄簱寮傚父");
+ }
+ item.TaskNo = taskNo.TaskNo;
+ item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛�
+ item.OutMode = item.OutMode;//鍑哄簱鍙�
+ //item.UnstackingMode = unstackingMode2;//鎷嗗灈妯″紡
+ Db.Updateable(item).ExecuteCommand();
+ flagList.Add(0);
+ #endregion
+ }
+ else if (locate.Status == "5") //绉诲嚭涓�
+ {
+ flagList.Add(1);
+ }
+ }
+ outDto1.AddRange(moveDto);
+ outDto1.AddRange(outDto2);
+ //娣诲姞鎿嶄綔鏃ュ織璁板綍
+ var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId);
+ Db.CommitTran();
+
+ str = string.Empty;
+ if (flagList.Count(m => m == 0) > 0)
+ {
+ str += "0.涓嬪彂鎴愬姛銆�";
+ }
+ if (flagList.Count(m => m == 1) > 0)
+ {
+ str += "1.褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�";
+ }
+ if (flagList.Count(m => m == 2) > 0)
+ {
+ str += "2.鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�";
+ }
+ if (flagList.Count(m => m == 3) > 0)
+ {
+ str += "4.鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�";
+ }
+ if (flagList.Count(m => m == 4) > 0)
+ {
+ str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�";
+ }
+ if (flagList.Count(m => m == 5) > 0)
+ {
+ str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鎷嗘墭璇风◢鍚庝笅鍙戙��";
+ }
+ if (outDto1.Count > 0)
+ {
+ // 姝e紡杩愯绋嬪簭鏀惧紑
+ var list2 = outDto1.Select(m => m.TaskNo).ToList();
+ var jsonData = JsonConvert.SerializeObject(outDto1);
+ string response = "";
+
+ try
+ {
+ var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+ response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
+ var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+ ////瑙f瀽杩斿洖鏁版嵁
+ var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response);
+ if (wcsModel.code == 200)
+ {
+ //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+ new TaskServer().EditTaskIssueOk(list2, time1, time2);
+ str += "涓嬪彂鎴愬姛";
+ }
+ else
+ {
+ new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message);
+ throw new Exception(wcsModel.message);
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
+
+ }
+
+ return outDto1;
+ }
+ catch (Exception e)
+ {
+ Db.RollbackTran();
+ throw new Exception(e.Message);
+ }
+
+
+ #endregion
+ }
+ catch (Exception e)
+ {
+ throw new Exception(e.Message);
+ }
+ }
+
+ /// <summary>
+ /// 鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴撴搷浣�
+ /// </summary>
+ /// <param name="oldAddress">瑕佸嚭搴撶殑搴撲綅鍦板潃</param>
+ /// <param name="aisle">閫氶亾鍙�</param>
+ /// <param name="addressList">瑕佸嚭鍙g殑鍌ㄤ綅闆嗗悎</param>
+ /// <param name="isOut">鏄惁鍑哄簱 1:鏈夋湭涓嬪彂鐨勪换鍔″湪鍓嶉潰</param>
+ /// <returns>闇�瑕佺Щ搴撶殑闆嗗悎锛堝鏋滀负绌哄垯涓嶉渶绉诲簱锛�</returns>
+ private List<string> IsNeedMoveLocate(SysStorageLocat lcoate,List<string> locateStrList, out int isOut)
+ {
+ var nowAddress = new List<string>(); //闇�瑕佺Щ搴撶殑闆嗗悎
+ // 010101 娲惧垪灞�
+ //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne);
+
+ var sArray = lcoate.LocatNo.Substring(4,2);
+ var row = int.Parse(sArray);//鍌ㄤ綅鍒�
+ var sArray2 = lcoate.AisleOne.Substring(4, 2);
+ var row2 = int.Parse(sArray2); //閫氶亾鍙e垪
+
+ isOut = 0;
+
+ var bol = row2 - row > 0;
+
+ //鍚岀粍鐨勫偍浣嶉泦鍚�
+ var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == lcoate.RoadwayNo).ToList();
+ List<string> list;
+
+
+ if (bol)
+ {
+ //鍌ㄤ綅灏忎簬閫氶亾鍙� 鍊掑簭
+ list = slotList.Where(m => m.Column < row2 && m.Column > row).Select(m => m.LocatNo).ToList();
+ }
+ else
+ {
+ //鍌ㄤ綅澶т簬閫氶亾鍙� 姝e簭
+ list = slotList.Where(m => m.Column > row2 && m.Column < row).Select(m => m.LocatNo).ToList();
+ }
+
+ if (list.Any())
+ {
+ //鎺掗櫎鎺夊悓宸烽亾缁勪腑瑕佸嚭搴撶殑鍌ㄤ綅
+ if (locateStrList.Count != 0)
+ {
+ list = list.Where(m => !locateStrList.Contains(m)).ToList();
+ }
+ //鍒ゆ柇鏄惁鏈夊叆搴撲腑鎴栨鍦ㄧЩ鍏ョ殑
+ var s = slotList.Where(m => list.Contains(m.LocatNo) && (m.Status == "2" || m.Status == "4")).Select(m => m.LocatNo).ToList();
+ if (s.Count > 0)
+ {
+ isOut = 1;
+ return nowAddress;
+ }
+ //鍒ゆ柇鏄惁鏈夊湪褰撳墠鍌ㄤ綅鍓嶆湭涓嬪彂鐨勪换鍔★紙闃叉鎾炶溅锛�
+ var w = Db.Queryable<LogTask>().Where(m => list.Contains(m.StartLocat) && m.IsSuccess == 0).Select(m => m.StartLocat).ToList();
+ if (w.Count > 0)
+ {
+ isOut = 1;
+ return nowAddress;
+ }
+ if (bol)
+ {
+ //鍌ㄤ綅灏忎簬閫氶亾鍙� 鍊掑簭
+ nowAddress = slotList.Where(m => list.Contains(m.LocatNo) && m.Status == "1").OrderByDescending(m => m.LocatNo).Select(m => m.LocatNo).ToList();
+ }
+ else
+ {
+ //鍌ㄤ綅澶т簬閫氶亾鍙� 姝e簭
+ nowAddress = slotList.Where(m => list.Contains(m.LocatNo) && m.Status == "1").OrderBy(m => m.LocatNo).Select(m => m.LocatNo).ToList();
+
+ }
+ if (nowAddress.Count > 0)
+ {
+ return nowAddress;
+ }
+ }
+ else
+ {
+ return nowAddress;
+ }
+
+
+ return nowAddress;
+ }
+
+ /// <summary>
+ /// 鑾峰彇绉诲簱鐩爣搴撲綅 瀵嗛泦搴�
+ /// </summary>
+ /// <param name="oldAddress">闇�瑕佺Щ鍔ㄧ殑搴撲綅鍦板潃</param>
+ /// <param name="slotOut">闇�瑕佺Щ鍔ㄧ殑搴撲綅鐨勫嚭鍙d腑杞綅</param>
+ /// <param name="billCode">鍑哄簱鍗曟嵁鎴栨槸娉㈡鍗曟嵁</param>
+ /// <param name="flags">涓浆鍙�</param>
+ /// <param name="refLanWayId">闇�鍥炵Щ鐨勫贩閬搃d</param>
+ /// <param name="refLanOutCode">闇�鍥炵Щ鐨勫贩閬撲腑杞彛</param>
+ /// <returns>鐩爣搴撲綅鍦板潃 涓�"" 鐩存帴涓嬪彂涓ゆ鍑哄簱鎸囦护</returns>
+ public string GetMiJiMoveAddress(string oldAddress, string slotOut)
+ {
+ var newAddress = ""; //鏂板簱浣�
+ var newLaneWayAddress = ""; //鏂板贩閬撳彛搴撲綅
+
+ // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅
+
+ //
+ var sArray = oldAddress.Substring(4,2);
+ var ceng = int.Parse(sArray);
+ //
+ var sArray2 = slotOut.Substring(2, 2);
+ var row2 = sArray2;
+ //鍗佸瓧鍙�
+ var shiKou = new List<string>()
+ {
+ slotOut,
+ "070501",
+ "071301",
+ "070502",
+ "071302",
+ };
+ var shiKou3 = new List<addreClass>();
+ foreach (var item in shiKou)
+ {
+ var a = item.Substring(4, 2);
+ var b = item.Substring(2, 2);
+ if (int.Parse(a) != ceng) continue;
+ var s = Math.Abs(int.Parse(b) - int.Parse(row2));
+ if (shiKou3.Any(m => m.distNum == s)) continue;
+ shiKou3.Add(new addreClass()
+ {
+ slotCode = item,
+ distNum = s
+ });
+ }
+ //鏍规嵁鍗佸瓧鍙e樊鍊兼渶灏忕殑鎺掑簭
+ shiKou3 = shiKou3.OrderBy(m => m.distNum).ToList();
+
+ /**
+ //1 绉诲姩鍒版渶杩戠殑绌哄偍浣嶏紝蹇呴』鍥炵Щ銆�
+ //鏍规嵁鍥涘悜杞︾Щ鍔ㄨ建杩硅绠楀嚭鏈�杩戠┖鍌ㄤ綅銆�
+ //鍑哄簱瀹屾垚鍚庢牴鎹壒娆″彿 鐢熶骇鏃ユ湡 鍑哄彛璁$畻鍥炵Щ鍌ㄤ綅銆�
+
+ //2 绉诲姩閫傚悎瀛樻斁鐨勭粍锛岀郴缁熻嚜鍔ㄨ绠楁槸鍚﹀洖绉汇��
+ //鏍规嵁鎵规鍙� 鐢熶骇鏃ユ湡 鍑哄彛 鐗╂枡绛夎绠楀嚭绉诲簱鐩爣鍌ㄤ綅
+ //鍑哄簱瀹屾垚鍚庯紝鍒ゆ柇鏄惁鏈夋瘮褰撳墠搴撲綅鏇村悎閫傜殑瀛樺偍鍌ㄤ綅锛屾湁绉诲姩锛屾棤涓嶇Щ鍔ㄣ��
+ */
+
+ var oldSlot = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldAddress);
+ if (oldSlot == null)
+ {
+ throw new Exception("鏈兘鎵惧埌鍌ㄤ綅淇℃伅");
+ }
+ #region 1涓嶉渶瑕佸洖绉荤殑
+
+ //鍚庢湡搴撳瓨鎵樼洏琛ㄦ敼浜嗗悗闇�瑕佸姞绛涢�夋潯浠舵墭鐩樼殑鐘舵�侊紙閫�璐�/棰勬嫞锛�
+ var tray1 = Db.Queryable<DataStockDetail>().Where(m => m.LocatNo == oldAddress).ToList();
+ //鏍规嵁鐗╂枡銆佹壒娆°�佹墭鐩樼姸鎬侊紙閫�璐�/棰勬嫞/鏆傚瓨绛夛級鍒嗙粍鍒ゆ柇
+ var d = tray1.GroupBy(m => new { m.SkuNo, m.LotNo, m.PalletTags });
+ var location = string.Empty;
+ if (d.Any())
+ {
+ //鏃у偍浣嶅悓缁勭殑鍌ㄤ綅闆嗗悎
+ var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == oldSlot.RoadwayNo).Select(m => m.LocatNo).ToList();
+ foreach (var item in d)
+ {
+ foreach (var item2 in item)
+ {
+ var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0").Select(m => m.RoadwayNo).ToList();
+ var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo
+ && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList();
+ foreach (var s in tray2)
+ {
+ if (string.IsNullOrWhiteSpace(s.RoadwayNo))//鍒ゆ柇鏄惁鍦ㄥ簱澶栵紝濡傛槸璺宠繃
+ {
+ continue;
+ }
+ var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList();
+ //鍒ゆ柇鏄惁鏈夊叆搴撲腑銆佸嚭搴撲腑銆佺Щ鍏ヤ腑銆佺Щ鍑轰腑
+ if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0)
+ {
+ continue;
+ }
+ if (lan.Count(m => m.Status == "0") > 0)
+ {
+
+ var bol = GetBecomingLocation(s.RoadwayNo, ref location);
+ if (bol && !string.IsNullOrWhiteSpace(location))
+ {
+ newAddress = location;
+ return newAddress;
+
+ }
+
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+ #region 2闇�瑕佸洖绉荤殑
+
+ ////濡傛灉娌℃湁鎵惧埌鍚堥�傜殑鍌ㄤ綅
+ //if (string.IsNullOrWhiteSpace(newAddress))
+ //{
+ // foreach (var s in shiKou3)
+ // {
+
+ // var r = int.Parse(s.slotCode.Substring(0, 2));
+ // var l = int.Parse(s.slotCode.Substring(2, 2));
+ // var c = int.Parse(s.slotCode.Substring(4, 2));
+ // //鏌ヨ绌哄偍浣�
+ // var sqlString = $@"select LocatNo,Row,Column,Layer,(ABS(Row-{r}) + ABS(Column-{l}) ) as distNum
+ // from SysStorageLocat where (AisleOneRow = {r} or AisleTwoRow = {r}) and Status in (0) and
+ // RoadwayNo !='{oldSlot.RoadwayNo}' and RoadwayNo not in(select RoadwayNo from SysStorageRoadway where Status = 1) order by distNum,SlotCode";
+
+ // var addressModels = dataContext.ExecuteQuery<addreClass>(sqlString).ToList();
+ // foreach (var item in addressModels)
+ // { 銆�
+
+
+ // newAddress = item.slotCode;
+ // var dz = newAddress.Split(new char[] { '-' });
+ // var l1 = dz[1];
+ // var c1 = dz[0];
+ // newLaneWayAddress = $"{c1}-{l1}-{a[2]}";
+ // flags = newLaneWayAddress;
+
+ // var slotModel = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == item.slotCode);
+
+ // var lan = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
+ // if (slotModel.SlotRow > int.Parse(a[2]))
+ // {
+ // // 鍙栨渶涓婇潰涓�鎺�
+ // lan = lan.OrderBy(m => m.SlotCode).ToList();
+ // for (int i = 0; i < lan.Count; i++)
+ // {
+ // var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
+ // if (slot.SlotStatus == 0)
+ // {
+ // if (i == lan.Count - 1)
+ // {
+ // newAddress = lan[lan.Count - 1].SlotCode;
+
+ // break;
+ // }
+ // else
+ // {
+ // continue;
+ // }
+
+ // }
+ // else
+ // {
+ // newAddress = lan[i - 1].SlotCode;
+ // break;
+ // }
+ // }
+
+ // }
+ // else
+ // {
+ // // 鍙栨渶涓嬮潰涓�鎺�
+ // lan = lan.OrderByDescending(m => m.SlotCode).ToList();
+ // for (int i = 0; i < lan.Count; i++)
+ // {
+ // var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode);
+ // if (slot.SlotStatus == 0)
+ // {
+ // if (i == lan.Count - 1)
+ // {
+ // newAddress = lan[lan.Count - 1].SlotCode;
+ // break;
+ // }
+ // else
+ // {
+ // continue;
+ // }
+
+ // }
+ // else
+ // {
+ // newAddress = lan[i - 1].SlotCode;
+ // break;
+ // }
+ // }
+ // }
+ // //娣诲姞鍥炵Щ浠诲姟
+ // AddHyTask(oldAddress, newAddress, newLaneWayAddress, oldSlot.SlotLanewayId, slotOut, billCode);
+ // refLanWayId = slotModel.SlotLanewayId;
+ // refLanOutCode = newLaneWayAddress;
+ // //9锛氶攣瀹氬偍浣�
+ // var updateSlot = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList();
+ // var newAddressRow = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == newAddress);
+ // if (newAddressRow.SlotRow > int.Parse(a[2]))
+ // {
+ // updateSlot = updateSlot.Where(m => m.SlotRow < newAddressRow.SlotRow && m.SlotRow > int.Parse(a[2])).OrderBy(m => m.SlotCode).ToList();
+ // }
+ // else
+ // {
+ // updateSlot = updateSlot.Where(m => m.SlotRow > newAddressRow.SlotRow && m.SlotRow < int.Parse(a[2])).OrderByDescending(m => m.SlotCode).ToList();
+
+ // }
+ // foreach (var source in updateSlot)
+ // {
+ // if (source.SlotCode == newAddress)
+ // {
+ // continue;
+ // }
+ // if (source.SlotStatus == 0)
+ // {
+ // source.SlotStatus = 8;
+ // }
+ // }
+
+ // if (updateSlot.Count <= 0)
+ // {
+ // refLanWayId = "";
+ // refLanOutCode = "";
+ // }
+ // dataContext.SubmitChanges();
+ // return newAddress;
+
+
+
+ // }
+
+ // }
+
+ //}
+
+ return newAddress;
+ #endregion
+
+
+ }
+
+ /// <summary>
+ /// 鑾峰彇绉诲簱鍚堥�傜殑鍌ㄤ綅 瀵嗛泦搴�
+ /// </summary>
+ /// <param name="laneWayId">鍚堥�傜粍鐨勫贩閬撳彿</param>
+ /// <param name="location">鍒嗛厤鍌ㄤ綅</param>
+ /// <returns>true锛氬瓨鍦ㄥ悎閫傚偍浣� False锛氫笉瀛樺湪鍚堥�傚偍浣�</returns>
+ private bool GetBecomingLocation(string laneWayId, ref string location)
+ {
+ bool bl = false;
+
+ // 寰幆鍒ゆ柇褰撳墠缁勬槸鍚︽湁鍓╀綑鍌ㄤ綅
+ string sqlString = string.Empty;
+ location = "";
+
+ // 鍒ゆ柇鍌ㄤ綅缁勬槸鍚︽湁绌哄偍浣� 鍏宠仈搴撳瓨鏄庣粏琛ㄥ彲闃叉鍌ㄤ綅鐘舵�佷笉鍑嗙‘閬垮厤閫犳垚婊″叆寮傚父//not in ('1','2','4','6','7','8')
+ sqlString = $"select LocatNo,Column,AisleOne from SysStorageLocat where RoadwayNo = {laneWayId} and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = { laneWayId}) order by Row;";
+ var slotModel =Db.SqlQueryable<LocateInfo>(sqlString).ToList();
+ if (slotModel.Count == 0)
+ {
+ bl = false;
+ }
+ else // 瀛樺湪绌哄偍浣�
+ {
+ // 鍒ゆ柇褰撳墠缁勫悎閫傜殑鍌ㄤ綅鍦板潃
+ var numstr = slotModel[0].AisleOne.Substring(4,2);
+ int aisleRow = int.Parse(numstr);
+
+ if (slotModel[0].Column > aisleRow)
+ {
+ // 鍙栨渶涓婇潰涓�鎺�
+ location = slotModel[0].LocatNo;
+
+ }
+ else
+ {
+ // 鍙栨渶涓嬮潰涓�鎺�
+
+ location = slotModel[slotModel.Count - 1].LocatNo;
+ }
+
+ bl = true;
+ }
+
+
+
+ return bl;
+ }
+
+ private class addreClass
+ {
+ public string slotCode { get; set; }
+ public int distNum { get; set; }
+ }
+ public class LocateInfo
+ {
+ public string LocatNo { get; set; }
+ public int Column { get; set; }
+ public string AisleOne { get; set; }
+
+ }
+
+ /// <summary>
+ /// wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛�
+ /// </summary>
+ /// <param name="taskNo"></param>
+ /// <param name="userId"></param>
+ /// <exception cref="Exception"></exception>
+ public void ExportSuccess(string taskNo, int userId)
+ {
+ try
+ {
+ //褰撳墠浠诲姟淇℃伅
+ var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
+ if (task == null)
+ {
+ throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅");
+ }
+ if (task.Status == "2")
+ {
+ throw new Exception("褰撳墠浠诲姟宸插畬鎴�");
+ }
+ Db.BeginTran();
+ //搴撳瓨涓綋鍓嶆墭鐩樼殑淇℃伅
+ var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
+ var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault();
+ //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅
+ var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo);
+ try
+ {
+ task.Status = "2";//浠诲姟鐘舵��
+ task.IsSend = 0;
+ task.IsCancel = 0;
+ task.IsFinish = 0;
+ task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
+ Db.Updateable(task).ExecuteCommand();
+ if (locate != null)
+ {
+ locate.Status = "0"; // 鏇存敼褰撳墠浠诲姟涓殑鍌ㄤ綅鐘舵�侊紙鏀逛负0绌哄偍浣嶏級
+ Db.Updateable(locate).ExecuteCommand();
+ }
+ foreach (var item in stockDetail)
+ {
+ if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
+ {
+ //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺
+ var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099");
+
+ if (stock != null)
+ {
+ if (item.LockQty != null)
+ {
+ stock.Qty -= item.LockQty.Value;
+ stock.LockQty -= item.LockQty.Value;
+ Db.Updateable(stock).ExecuteCommand();
+ }
+
+ if (stock.Qty == 0)
+ {
+ Db.Deleteable(stock).ExecuteCommand();
+ }
+ }
+
+ //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤
+ var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo);
+ if (sCode != null)
+ {
+ sCode.Status = "0";
+ Db.Updateable(sCode).ExecuteCommand();
+ }
+ Db.Deleteable(item).ExecuteCommand();
+
+ continue;
+ }
+ item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛�
+ item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
+ item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
+ item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級
+
+ }
+ //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級
+ var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
+ var PalletType = "0"; //0锛氱墿鏂欐墭 1锛氱┖鎵樼洏鎵�
+
+ foreach (var item in allot)
+ {
+ if (item.SkuNo == "100099")
+ {
+ item.Status = "5";
+ item.CompleteQty += stockDetail[0].Qty;
+ PalletType = "1";
+ }
+ else
+ {
+ item.Status = "2";
+ }
+
+ }
+
+ var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m=>m.LocatNo).ToList();
+ //鍒ゆ柇鏄惁鏄師杈呮枡鍑哄簱浠诲姟 璐ф灦鍌ㄤ綅=銆嬪钩搴撳偍浣�
+ if ( endLocateList.Contains(task.EndLocat) && PalletType == "0")
+ {
+ //淇敼鐩爣鍦板潃鐘舵��
+ var endLocat = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == task.EndLocat);
+ endLocat.Status = "1";
+ Db.Updateable(endLocat).ExecuteCommand();
+ foreach (var item in stockDetail)
+ {
+ item.LocatNo = endLocat.LocatNo;//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛�
+ item.WareHouseNo = endLocat.WareHouseNo;//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
+ item.RoadwayNo = endLocat.RoadwayNo;//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
+ item.AreaNo = endLocat.AreaNo;//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級
+ }
+ }
+ Db.Updateable(stockDetail).ExecuteCommand();
+ Db.Updateable(allot).ExecuteCommand();
+
+ if (userId != 0)
+ {
+ //娣诲姞鎿嶄綔鏃ュ織璁板綍
+ var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId);
+ }
+
+ Db.CommitTran();
+ }
+ catch (Exception ex)
+ {
+ Db.RollbackTran();
+ throw new Exception(ex.Message);
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙绉诲簱鎴愬姛锛�
+ /// </summary>
+ /// <param name="taskNo">浠诲姟鍙�</param>
+ /// <param name="userId">鎿嶄綔浜�</param>
+ /// <exception cref="Exception"></exception>
+ public void RelocationSuccess(string taskNo, int userId)
+ {
+ try
+ {
+ //褰撳墠浠诲姟淇℃伅
+ var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
+ if (task == null)
+ {
+ throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅");
+ }
+ if (task.Status == "2")
+ {
+ throw new Exception("褰撳墠浠诲姟宸插畬鎴�");
+ }
+ Db.BeginTran();
+ //搴撳瓨涓綋鍓嶆墭鐩樼殑淇℃伅
+ var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
+ //褰撳墠浠诲姟涓殑鐩爣鍌ㄤ綅淇℃伅
+ //褰撳墠浠诲姟涓殑鍘熷偍浣�
+ var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat);
+ if (locate == null)
+ {
+ throw new Exception($"WMS绯荤粺涓病鏈夎{task.StartLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�");
+ }
+ var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
+ if (locate2 == null)
+ {
+ throw new Exception($"WMS绯荤粺涓病鏈夎{task.EndLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�");
+ }
+ //骞冲簱涓偍浣嶉泦鍚�
+ var pingKuLocate = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0").ToList();
+ var pingKuList = pingKuLocate.Select(m => m.LocatNo).ToList();
+ try
+ {
+
+ //task.Status = "5";//浠诲姟鐘舵��
+ ////鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱
+ //if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat))
+ //{
+ task.Status = "2";
+ //}
+
+ task.IsSend = 0;
+ task.IsCancel = 0;
+ task.IsFinish = 0;
+ task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
+ Db.Updateable(task).ExecuteCommand();
+
+ #region 淇敼鍌ㄤ綅鐘舵��
+
+ if (!pingKuList.Contains(task.StartLocat))
+ {
+ //鍘熷偍浣嶆敼涓虹┖鍌ㄤ綅 0
+ locate.Status = "0";
+ Db.Updateable(locate).ExecuteCommand();
+ }
+
+
+ //鐩爣鍌ㄤ綅鏀逛负鏈夎揣鐗� 1
+ locate2.Status = "1";
+ Db.Updateable(locate2).ExecuteCommand();
+ //鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱
+ if ( pingKuList.Contains(task.EndLocat))
+ {
+ foreach (var item in stockDetail)
+ {
+ item.WareHouseNo = locate2.WareHouseNo;
+ item.AreaNo = locate2.AreaNo;
+ item.RoadwayNo = locate2.RoadwayNo;
+ item.LocatNo = locate2.LocatNo;
+ }
+ Db.Updateable(stockDetail).ExecuteCommand();
+ }
+
+
+ #endregion
+
+ Db.CommitTran();
+ }
+ catch (Exception ex)
+ {
+ Db.RollbackTran();
+ throw new Exception(ex.Message);
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// AGV浠诲姟鍙栬揣瀹屾垚鍙嶉
+ /// </summary>
+ /// <param name="taskNo"></param>
+ public void AGVQuHuoSuccess(string taskNo)
+ {
+ try
+ {
+ Db.BeginTran();
+ var task = Db.Queryable<LogTask>().First(m=>m.IsDel =="0" && m.TaskNo == taskNo);
+ if (task == null)
+ {
+ throw new Exception("娌℃湁鏌ヨ鍒颁换鍔′俊鎭�");
+ }
+ if (task.Status!="1")
+ {
+ throw new Exception("浠诲姟鐘舵�佷笉鏄鍦ㄦ墽琛岋紝璇锋牳瀹�");
+ }
+ var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat && m.IsDel == "0");
+ if (locate == null)
+ {
+ throw new Exception("娌℃湁鏌ヨ鍒拌捣濮嬪偍浣嶄俊鎭�");
+ }
+ if (locate.WareHouseNo!="W04")
+ {
+ throw new Exception("璧峰鍌ㄤ綅涓嶆槸骞冲簱鍌ㄤ綅锛岃鏍稿疄");
+ }
+ locate.Status = "0"; //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣�
+ Db.Updateable(locate).ExecuteCommand();
+ //鏌ヨ鍑烘墭鐩樹俊鎭� 鏇存敼搴撳瓨鍌ㄤ綅淇℃伅
+ var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == task.PalletNo).ToList();
+ foreach (var item in stockDetail)
+ {
+ item.WareHouseNo = "";
+ item.AreaNo = "";
+ item.RoadwayNo = "";
+ item.LocatNo = "";
+ }
+ Db.Updateable(stockDetail).ExecuteCommand();
+ Db.CommitTran();
+ }
+ catch (Exception e)
+ {
+ Db.RollbackTran();
+ throw new Exception(e.Message);
+ }
+ }
+
+
#endregion
#endregion
@@ -4103,9 +5577,6 @@
OutMode = toLocation, //鍑哄簱鍙�
Order = 1,
- UnstackingMode=unstackingMode2,//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑� 1 浜哄伐鎷h揣鍑�
- CompleteQty= outCount2, //鎷嗙殑浠舵暟
- BoxexQty = outCount, //鎬讳欢鏁�
});
taskNoStr = exTask.TaskNo;
}
@@ -4220,9 +5691,7 @@
OutMode = toLocation, //鐩爣鍦板潃
Order = 1,
- UnstackingMode = "1",//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑� 1 浜哄伐鎷h揣鍑�
- CompleteQty = 0, //鎷嗙殑浠舵暟
- BoxexQty = 0, //鎬讳欢鏁�
+
});
#endregion
@@ -4278,9 +5747,6 @@
OutMode = toLocation, //鐩爣鍦板潃
Order = 1,
- UnstackingMode = unstackingMode2,//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑� 1 浜哄伐鎷h揣鍑�
- CompleteQty = outCount2, //鎷嗙殑浠舵暟
- BoxexQty = outCount, //鎬讳欢鏁�
});
taskNoStr = exTask1.TaskNo;
#endregion
@@ -4451,338 +5917,6 @@
}
}
- //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛�
- public void ExportSuccess(string taskNo, int userId)
- {
- try
- {
- //褰撳墠浠诲姟淇℃伅
- var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
- if (task == null)
- {
- throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅");
- }
- if (task.Status == "2")
- {
- throw new Exception("褰撳墠浠诲姟宸插畬鎴�");
- }
- Db.BeginTran();
- //搴撳瓨涓綋鍓嶆墭鐩樼殑淇℃伅
- var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
- var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault();
- //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅
- var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo);
- try
- {
- task.Status = "2";//浠诲姟鐘舵��
- task.IsSend = 0;
- task.IsCancel = 0;
- task.IsFinish = 0;
- task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
- Db.Updateable(task).ExecuteCommand();
- if (locate != null)
- {
- locate.Status = "0"; // 鏇存敼褰撳墠浠诲姟涓殑鍌ㄤ綅鐘舵�侊紙鏀逛负0绌哄偍浣嶏級
- Db.Updateable(locate).ExecuteCommand();
- }
- foreach (var item in stockDetail)
- {
- if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴�
- {
- //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺
- var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099");
-
- if (stock != null)
- {
- if (item.LockQty != null)
- {
- stock.Qty -= item.LockQty.Value;
- stock.LockQty -= item.LockQty.Value;
- Db.Updateable(stock).ExecuteCommand();
- }
-
- if (stock.Qty == 0)
- {
- Db.Deleteable(stock).ExecuteCommand();
- }
- }
-
- //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤
- var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo);
- if (sCode != null)
- {
- sCode.Status = "0";
- Db.Updateable(sCode).ExecuteCommand();
- }
- Db.Deleteable(item).ExecuteCommand();
-
- #region 鎷h揣淇℃伅
-
- //var pickQty = 0;//鎷h揣鐨勬暟閲�
- //var comList = new List<BllCompleteDetail>();
- // //娣诲姞鎷h揣鏄庣粏
- // var completeDetail = new BllCompleteDetail()
- // {
- // SONo = "",
- // SODetailNo = 0,
- // ExportAllotId = 0,
- // StockId = exportAllot.StockId,
- // BoxNo = item.BoxNo,
- // BoxNo2 = item.BoxNo2,
- // BoxNo3 = item.BoxNo3,
-
- // LotNo = exportAllot.LotNo,
- // LotText = exportAllot.LotText,
- // SupplierLot = exportAllot.SupplierLot,
- // SkuNo = exportAllot.SkuNo,
- // SkuName = exportAllot.SkuName,
- // Standard = exportAllot.Standard,
- // PalletNo = palletNo,
- // CompleteQty = item.Qty,
-
- // CreateUser = userId
- // };
- // comList.Add(completeDetail);
-
- // //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
- // Db.Deleteable(item).ExecuteCommand();
- // pickQty += item.Qty;
-
- // exportAllot.Status = "5"; //寰呭洖搴� : 宸插畬鎴�
- // exportAllot.CompleteQty += item.Qty; //鎷h揣鏁伴噺
- // exportAllot.UpdateUser = userId; //淇敼浜�
- // exportAllot.UpdateTime = serverTime; //淇敼鏃堕棿
-
- // Db.Updateable(exportAllot).ExecuteCommand();
-
- // //楠岃瘉鎷h揣淇℃伅鏄惁涓哄凡瀹屾垚
- // if (exportAllot.Status == "5")
- // {
- // break;
- // }
-
-
- //Db.Insertable(comList).ExecuteCommand();
-
-
- #endregion
-
- continue;
- }
- item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛�
- item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級
- item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級
- item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級
- Db.Updateable(item).ExecuteCommand();
- }
- //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級
- var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
- var PalletType = "0"; //0锛氱墿鏂欐墭 1锛氱┖鎵樼洏鎵�
- var soNo = "";
- var sku = "";
- foreach (var item in allot)
- {
- if (item.SkuNo == "100099")
- {
- item.Status = "5";
- item.CompleteQty += stockDetail[0].Qty;
- PalletType = "1";
- }
- else
- {
- item.Status = "2";
- soNo = item.SONo;
- sku = item.SkuNo;
- }
-
- }
- //涓嬪彂鍥涙ゼ璋冨害AGV鐨勪换鍔�
- if ((task.EndLocat == "outMode" || task.EndLocat == "outMode") && PalletType == "0")
- {
- foreach (var item in allot)
- {
- var detail = Db.Queryable<DataStockDetail>().First(m => m.Id == item.StockId);
- detail.SONo = item.SONo;
- Db.Updateable(detail).ExecuteCommand();
- }
-
- var locatePing = new AllotLocation().GetPingLocate(soNo, sku);
- if (locatePing == null)
- {
- throw new Exception("骞冲簱鏈煡璇㈠埌绌轰綅缃�");
- }
- var exTask = new LogTask //鍑哄簱浠诲姟
- {
- TaskNo = new Common().GetMaxNo("TK"),
- Sender = "WMS",
- Receiver = "AGV",
- IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
-
- StartLocat = task.EndLocat,//璧峰浣嶇疆
- EndLocat = locatePing.LocatNo,//outMode,//鐩爣浣嶇疆
- PalletNo = task.PalletNo,//鎵樼洏鐮�
- IsSend = 1,//鏄惁鍙啀娆′笅鍙�
- IsCancel = 1,//鏄惁鍙彇娑�
- IsFinish = 1,//鏄惁鍙畬鎴�
- Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟
- Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
- OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗�
- Msg = "浠�" + task.EndLocat + "鍒�" + locatePing.LocatNo + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅
- };
- Db.Insertable(exTask).ExecuteCommand();
-
- var outDto = new List<OutCommandDto>
- {
- new OutCommandDto()
- {
- PalletNo = task.PalletNo,//鎵樼洏鍙�
- StartLocate = task.EndLocat, // 璧峰浣嶇疆
- StartRoadway = "",//鍏跺疄宸烽亾
- EndLocate = locatePing.LocatNo,//outMode, // 鐩爣浣嶇疆
- TaskNo = exTask.TaskNo, // 浠诲姟鍙�
- TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉�
- OutMode = "", //鍑哄簱鍙�
- Order = 1,
-
- //UnstackingMode = unstackingMode2,//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑� 1 浜哄伐鎷h揣鍑�
- //CompleteQty = outCount2, //鎷嗙殑浠舵暟
- //BoxexQty = outCount, //鎬讳欢鏁�
- }
- };
- // 姝e紡杩愯绋嬪簭鏀惧紑
- var list2 = outDto.Select(m => m.TaskNo).ToList();
- var jsonData = JsonConvert.SerializeObject(outDto);
- string response = "";
-
- try
- {
- var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
- //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS");
- var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
-
- //////瑙f瀽杩斿洖鏁版嵁
- //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
- //if (wcsModel.StatusCode == 0)
- //{
- //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
- new TaskServer().EditTaskIssueOk(list2, time1, time2);
- //}
- //if (wcsModel.StatusCode == -1)
- //{
- // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
- // throw new Exception(wcsModel.Msg);
- //}
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
-
- Db.Updateable(allot).ExecuteCommand();
-
- if (userId != 0)
- {
- //娣诲姞鎿嶄綔鏃ュ織璁板綍
- var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId);
- }
-
-
-
- Db.CommitTran();
- }
- catch (Exception ex)
- {
- Db.RollbackTran();
- throw new Exception(ex.Message);
- }
- }
- catch (Exception ex)
- {
- throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message);
- }
- }
-
- /// <summary>
- /// wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙绉诲簱鎴愬姛锛�
- /// </summary>
- /// <param name="taskNo">浠诲姟鍙�</param>
- /// <param name="userId">鎿嶄綔浜�</param>
- /// <exception cref="Exception"></exception>
- public void RelocationSuccess(string taskNo, int userId)
- {
- try
- {
- //褰撳墠浠诲姟淇℃伅
- var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
- if (task == null)
- {
- throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅");
- }
- if (task.Status == "2")
- {
- throw new Exception("褰撳墠浠诲姟宸插畬鎴�");
- }
- Db.BeginTran();
- //搴撳瓨涓綋鍓嶆墭鐩樼殑淇℃伅
- var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
- //褰撳墠浠诲姟涓殑鐩爣鍌ㄤ綅淇℃伅
- //褰撳墠浠诲姟涓殑鍘熷偍浣�
- var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat);
- if (locate == null)
- {
- throw new Exception($"WMS绯荤粺涓病鏈夎{task.StartLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�");
- }
- var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
- if (locate2 == null)
- {
- throw new Exception($"WMS绯荤粺涓病鏈夎{task.EndLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�");
- }
-
- try
- {
- task.Status = "2";//浠诲姟鐘舵��
- task.IsSend = 0;
- task.IsCancel = 0;
- task.IsFinish = 0;
- task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿
- Db.Updateable(task).ExecuteCommand();
-
- #region 淇敼鍌ㄤ綅鐘舵��
-
- //鍘熷偍浣嶆敼涓虹┖鍌ㄤ綅 0
- locate.Status = "0";
- Db.Updateable(locate).ExecuteCommand();
-
- //鐩爣鍌ㄤ綅鏀逛负鏈夎揣鐗� 1
- locate2.Status = "1";
- Db.Updateable(locate2).ExecuteCommand();
- foreach (var item in stockDetail)
- {
- item.WareHouseNo = locate2.WareHouseNo;
- item.AreaNo = locate2.AreaNo;
- item.RoadwayNo = locate2.RoadwayNo;
- item.LocatNo = locate2.LocatNo;
- }
- Db.Updateable(stockDetail).ExecuteCommand();
-
- #endregion
-
- Db.CommitTran();
- }
- catch (Exception ex)
- {
- Db.RollbackTran();
- throw new Exception(ex.Message);
- }
- }
- catch (Exception ex)
- {
- throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message);
- }
- }
-
-
//閲嶆柊涓嬪彂鍑哄簱浠诲姟
public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url)
{
@@ -4839,17 +5973,17 @@
var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
////瑙f瀽杩斿洖鏁版嵁
- var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
- if (wcsModel.StatusCode == 0)
+ var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response);
+ if (wcsModel.code == 200)
{
//鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
new TaskServer().EditTaskIssueOk(list, time1, time2);
}
- if (wcsModel.StatusCode == -1)
+ else
{
- new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg);
- throw new Exception($"wcs杩斿洖鐘舵�佸紓甯革細{wcsModel.Msg}");
+ new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.message);
+ throw new Exception($"wcs杩斿洖鐘舵�佸紓甯革細{wcsModel.message}");
}
}
catch (Exception ex)
--
Gitblit v1.8.0