From 02dd21ca9a064b98aacfdc8c6ffec5a2b575967d Mon Sep 17 00:00:00 2001
From: xiaojiao <xiaojiao@kaokeziliao.com>
Date: 星期四, 26 三月 2026 09:54:56 +0800
Subject: [PATCH] PDA优化选配确认页面
---
项目代码/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs | 365 +++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 274 insertions(+), 91 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
index 4329c02..ac3d80d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs"
@@ -1,5 +1,6 @@
锘縰sing HslCommunication;
using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -8,6 +9,7 @@
using System.Threading;
using WIDESEA_Common;
using WIDESEA_Common.CutomerModel;
+using WIDESEA_Common.LogEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.Tools;
using WIDESEA_Core.Utilities;
@@ -26,7 +28,9 @@
/// 鍑哄簱鐨勫眰
/// </summary>
private static List<string> OutboundStationLayerNo = new List<string>() { "60101", "60102", "60103", "60104", "60105", "60106", "60107" };
- //鍏ュ簱鎵樼洏鐢宠绔欏彴
+ /// <summary>
+ /// 鍏ュ簱鎵樼洏鐢宠绔欏彴
+ /// </summary>
private static string ReInboundRequestStationNo = "90101";
//鍑哄簱绔欏彴浜や簰
//private static string OutboundStationNo = "90201";
@@ -39,6 +43,84 @@
/// <param name="client"></param>
public static string currentModel = "Inbound";
static int flag = 0;
+ // 鍘嬭鍙扮紦瀛樹綅瀛楀吀
+ public static Dictionary<string, string> PlatformDict = new Dictionary<string, string>
+ {
+ ["70101"] = "80101",
+ ["70103"] = "80103",
+ ["70104"] = "80104",
+ ["70106"] = "80106"
+ };
+ // 鍑哄簱鍖哄煙鏍″噯缂撳瓨鏋舵牎鍑�
+ public static void OutboundAreaJZ(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
+ {
+ // 鍑哄簱鍖虹殑鍑哄簱浠诲姟 鍒扮紦瀛樻灦瀛愪簡 灏辫鎶婁换鍔″彿鍜屾墭鐩樺彿鍐欏叆鍒板搴斿眰鐨勭紦瀛樻灦
+ List<Dt_TaskWCSinfo> executingTasks = taskWCSinfoRepository.Find(r => (
+ r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString() ||
+ r.wcstask_state == TaskState.TaskState_Empty_Out_RGV_Finished.ToString())
+ && endStationNo.Contains(r.wcstask_endPoint)).ToList();
+ foreach (var item in executingTasks)
+ {
+ bool LoadSleep = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), item.wcstask_startPoint.ToString()).ToString());
+ int ReadNumber = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), item.wcstask_startPoint.ToString()).ToString());
+ int ReadBarcode = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), item.wcstask_startPoint.ToString()).ToString());
+ if (LoadSleep && (ReadNumber == 0 || ReadBarcode == 0))
+ {
+ //鍐欏叆鎵樼洏鏉$爜
+ bool writeTaskNumber = client.WriteValue(CLineInfoDBName.W_Line_TaskNumber.ToString(), item.wcstask_startPoint, item.wcstask_taskNumber);
+ bool writeBarcode = client.WriteValue(CLineInfoDBName.W_Line_Barcode.ToString(), item.wcstask_startPoint, item.wcstask_barcode);
+ }
+ }
+
+ foreach (var item in OutboundStationLayerNo)
+ {
+ bool LoadSleep = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), item.ToString()).ToString());
+ int ReadNumber = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), item.ToString()).ToString());
+ int ReadBarcode = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), item.ToString()).ToString());
+
+ Dt_TaskWCSinfo dt_TaskWCSinfo = taskWCSinfoRepository.Find(r =>
+ r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString()
+ && r.wcstask_state == TaskState.TaskState_Assigned.ToString()
+ && r.wcstask_startPoint == 90101.ToString()
+ && r.wcstask_endPoint == item
+ && r.wcstask_barcode == ReadBarcode.ToString()
+ && r.wcstask_taskNumber == ReadNumber
+ ).FirstOrDefault();
+
+ if (LoadSleep && dt_TaskWCSinfo != null)
+ {
+ // 璇佹槑璐х墿宸茬粡鍒颁簡缂撳瓨鏋� 浣嗕换鍔$姸鎬佹病鏈夋敼鍙� 杩樻槸鏂板缓鐘舵�� 灏辫鏀逛负 TaskState.TaskState_Empty_In_PLC_Finished.ToString()
+ dt_TaskWCSinfo.wcstask_state = TaskState.TaskState_Empty_In_PLC_Finished.ToString();
+ taskWCSinfoRepository.Update(dt_TaskWCSinfo, true);
+ string str = $"鍑哄簱鍖哄煙 绌烘墭鐩樺洖搴� 鎵樼洏閮藉埌缂撳瓨鏋跺瓙 浣嗕换鍔$姸鎬佹病鍙� {DateTime.Now}銆恵dt_TaskWCSinfo.wcstask_state}銆戯紝鎵樼洏鍙�:{dt_TaskWCSinfo.wcstask_barcode},浠诲姟鍙凤細{dt_TaskWCSinfo.wcstask_taskNumber}";
+ LogRecord.WriteLog(LogEnum.Errer, str.ToString());
+ }
+ }
+
+ // 杩欓噷瑕佸啓涓�涓� 鏈変竴浜涙墭鐩樺凡缁忓嚭鍒板闈㈠幓浜� 浣嗙姸鎬佽繕鏄彁鍗囨満杩愯涓� 瀵艰嚧鍚庨潰鐨勫彂涓嶅嚭鍘�
+ Dt_TaskWCSinfo OutTask = taskWCSinfoRepository.Find(r =>
+ r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()
+ && endStationNo.Contains(r.wcstask_endPoint)
+ ).FirstOrDefault();
+ if (OutTask != null)
+ {
+ double secondsPassend = (DateTime.Now - OutTask.wcstask_dispatcherTime.Value).TotalSeconds;
+ if (secondsPassend > 38) // 濡傛灉澶т簬38绉� 杩樻病鐢ㄦ彁鍗囨満瀹屾垚 灏辫鎵嬪姩
+ {
+ string state = TaskState.TaskState_Box_Out_Line_Executing.ToString();
+ if (OutTask.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
+ {
+ state = TaskState.TaskState_Empty_Out_Line_Executing.ToString();
+ }
+ OutTask.wcstask_state = state;
+ OutTask.wcstask_dispatcherTime = DateTime.Now;
+ taskWCSinfoRepository.Update(OutTask, true);
+ string str = $"鍑哄簱鍖� 鍑哄簱 鎻愬崌鏈哄凡缁忓唴鐨勬墭鐩樺凡缁忓嚭鍘� 浣嗙姸鎬佽繕鏄彁鍗囨満鎵ц涓�... {DateTime.Now}锛屾墭鐩樺彿:{OutTask.wcstask_barcode},浠诲姟鍙凤細{OutTask.wcstask_taskNumber}";
+ LogRecord.WriteLog(LogEnum.Errer, str.ToString());
+ }
+ }
+
+ }
public static void OutboundAreaDispathAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
{
try
@@ -49,7 +131,8 @@
//鐢熸垚鍙笅鍙戠殑RGV浠诲姟锛岃嚦缂撳瓨鍙�
List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => r.wcstask_state != TaskState.TaskState_Assigned.ToString()
&& endStationNo.Contains(r.wcstask_endPoint));
- if (executingTask.Count < 4) //灏忎簬4锛屽垯鍙敓鎴愬幓杩欒竟鐨勪换鍔�
+ // 杩欓噷瑕佸啓涓�涓�昏緫锛屽氨鏄垜鑾峰彇鐨勪换鍔★紝鍙湁瀵瑰簲鐨勭珯鍙颁负绌猴紝鎴戞墠鑳戒笅鍙戯紝杩欐牱鏀圭殑璇濓紝绌烘墭鐩樺叆搴撲篃瑕佹敼
+ if (executingTask.Count < 8) //灏忎簬8锛屽垯鍙敓鎴愬幓杩欒竟鐨勪换鍔�
{
//鐩存帴灏嗕换鍔℃坊鍔犲埌AGV浠诲姟
Dt_TaskWCSinfo outboundTask = GetOutboundTask(taskWCSinfoRepository, client);
@@ -66,7 +149,6 @@
|| outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString();
-
rgvInfo = GetRGVTask(taskRGVinfoRepository, outboundTask, rgvTaskType);
taskRGVinfoRepository.Add(rgvInfo, true);
@@ -76,14 +158,13 @@
}
}
- //缂撳瓨鍙h嚦杈撻�佺嚎
+ //缂撳瓨鍙�(缂撳瓨鏋�)鑷宠緭閫佺嚎
OutboundCZ_PLC(taskWCSinfoRepository, taskRGVinfoRepository, client);
-
//绌烘墭鍏ュ簱鐢宠(鐢熸垚浜嗙┖鎵樺叆搴撲换鍔�)
InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
- //绌烘墭鍒扮紦瀛樺彛
+ //绌烘墭鍒扮紦瀛樺彛(缂撳瓨鏋�)
ReInboundKTP(taskWCSinfoRepository, client);
//绌烘墭鍏ュ簱鍙o紝鐢熸垚RGV浠诲姟,杩涜鍏ュ簱
@@ -93,7 +174,7 @@
}
catch (Exception ex)
{
- WriteLog.Info("OutboundArea").Write($"{ DateTime.Now }鍑哄簱鍖哄煙璋冨害澶辫触:{ex.Message}", "OutboundArea");
+ WriteLog.Info("OutboundArea").Write($"{DateTime.Now}鍑哄簱鍖哄煙璋冨害澶辫触:{ex.Message}", "OutboundArea");
}
}
public static bool WriteRGVState(PLCClient client, bool value)
@@ -129,37 +210,43 @@
List<Dt_TaskWCSinfo> listTask = taskWCSinfoRepository.Find(r => r.wcstask_state == TaskState.TaskState_Assigned.ToString() &&
(r.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString() || r.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
- && OutboundStationLayerNo.Contains(r.wcstask_startPoint)).OrderBy(r => r.wcstask_createTime).ToList();//
+ && endStationNo.Contains(r.wcstask_endPoint)).OrderBy(r => r.wcstask_createTime).ToList();//
foreach (var item in listTask.GroupBy(r => r.wcstask_endPoint))
{
Dt_TaskWCSinfo wcsTask = item.OrderBy(r => r.wcstask_createTime).FirstOrDefault();
if (null != wcsTask)
{
- //鍒ゆ柇鍘嬭鍙版槸鍚︽湁璐�
- bool yzflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString());
- bool yznoflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString());
+ //鍒ゆ柇鍘嬭鍙版槸鍚︽湁璐� 涔熷氨鏄垽鏂�80101閭h竟
+ bool yzflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), PlatformDict[wcsTask.wcstask_endPoint]).ToString());
+ bool yznoflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), PlatformDict[wcsTask.wcstask_endPoint]).ToString());
if (yzflag || !yznoflag)
continue;
- //鍒ゆ柇缂撳瓨鏋舵槸鍚︽湁璐�
+ //鍒ゆ柇缂撳瓨鏋舵槸鍚︽湁璐�
bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString());
bool noflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString());
if (flag || !noflag)
continue;
-
//鍚屼竴灞傛湁鎵ц涓殑浠诲姟涓嶆坊鍔�
- Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_startPoint == wcsTask.wcstask_startPoint || r.wcstask_endPoint == wcsTask.wcstask_endPoint)
- && (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
+ //Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r =>
+ //(r.wcstask_startPoint == wcsTask.wcstask_startPoint || r.wcstask_endPoint == wcsTask.wcstask_endPoint)
+ //&& (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
+ //if (null != executingTask)
+ // continue;
+ // 鑲栦郊 灏嗕笂闈慨鏀规垚涓嬮潰
+ Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r =>
+ (r.wcstask_startPoint == wcsTask.wcstask_startPoint)
+ && (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString()));
if (null != executingTask)
continue;
-
List<Dt_TaskWCSinfo> listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == wcsTask.wcstask_endPoint &&
r.wcstask_state != TaskState.TaskState_Assigned.ToString());
string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), wcsTask.wcstask_endPoint).ToString();
+
if (string.IsNullOrEmpty(barcode) || "0".Equals(barcode))
{
if (null != listTarget && listTarget.Count > 1)
@@ -182,48 +269,6 @@
}
}
}
-
-
-
- //foreach (var item in listTask)
- //{
- // //鍚屼竴灞傛湁鎵ц涓殑浠诲姟涓嶆坊鍔�
- // Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_startPoint == item.wcstask_startPoint || r.wcstask_endPoint == item.wcstask_endPoint)
- // && (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
- // if (null != executingTask)
- // continue;
-
- // //鍚屼竴鐩爣浣嶇疆鐨勪笉鑳藉悓鏃跺嚭
- // // Dt_TaskWCSinfo endTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_endPoint == item.wcstask_endPoint &&
- // //(r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()));
- // // if (null != endTask)
- // // continue;
-
- // List<Dt_TaskWCSinfo> listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == item.wcstask_endPoint &&
- // r.wcstask_state != TaskState.TaskState_Assigned.ToString());
-
- // string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), item.wcstask_endPoint).ToString();
- // if (string.IsNullOrEmpty(barcode) || "0".Equals(barcode))
- // {
- // if (null != listTarget && listTarget.Count > 1)
- // continue;
- // else
- // {
- // wcsInfo = item;
- // break;
- // }
- // }
- // else
- // {
- // if (null != listTarget && listTarget.Count > 0)
- // continue;
- // else
- // {
- // wcsInfo = item;
- // break;
- // }
- // }
- //}
return wcsInfo;
}
@@ -245,78 +290,216 @@
return rgvInfo;
}
+ // 鍙敤涓�涓瓧鍏革細Key=鎵樼洏鍙凤紝Value=Tuple<閿佸璞�, 鏈�鍚庝娇鐢ㄦ椂闂�>
+ // Tuple<object, DateTime>锛欼tem1=閿佸璞★紝Item2=鏈�鍚庝娇鐢ㄦ椂闂�
+ private static readonly Dictionary<string, Tuple<object, DateTime>> BarcodeLockDict = new Dictionary<string, Tuple<object, DateTime>>();
+ private static readonly object GlobalLock = new object(); // 淇濇姢瀛楀吀鐨勫叏灞�閿�
+ private const int ExpireMinutes = 1; // 杩囨湡鏃堕棿锛�1鍒嗛挓
+
+ /// <summary>
+ /// 鑾峰彇鎵樼洏鍙蜂笓灞為攣锛堝崟瀛楀吀+1鍒嗛挓杩囨湡+鎳掓竻鐞嗭級
+ /// </summary>
+ private static object GetBarcodeLock(string barcode)
+ {
+
+ lock (GlobalLock) // 鍏ㄥ眬閿佷繚鎶ゅ瓧鍏告搷浣�
+ {
+ // ========== 绗竴姝ワ細鎳掓竻鐞嗭紙姣忔鑾峰彇閿佹椂锛屾竻鐞嗚秴杩�1鍒嗛挓鐨勯棽缃墭鐩樺彿锛� ==========
+ var expiredBarcodes = BarcodeLockDict
+ .Where(kv => (DateTime.Now - kv.Value.Item2).TotalMinutes > ExpireMinutes)
+ .Select(kv => kv.Key)
+ .ToList();
+
+ foreach (var expiredBarcode in expiredBarcodes)
+ {
+ BarcodeLockDict.Remove(expiredBarcode);
+ }
+
+ // ========== 绗簩姝ワ細澶勭悊褰撳墠鎵樼洏鍙风殑閿佸拰鏃堕棿 ==========
+ if (!BarcodeLockDict.ContainsKey(barcode))
+ {
+ // 鏃犺鎵樼洏鍙凤細鏂板閿佸璞�+褰撳墠鏃堕棿
+ BarcodeLockDict[barcode] = Tuple.Create(new object(), DateTime.Now);
+ }
+ // 杩斿洖褰撳墠鎵樼洏鍙风殑閿佸璞�
+ return BarcodeLockDict[barcode].Item1;
+ }
+ }
+ public static bool KtpHkflag = false; // 璁板綍绌烘墭鐩樺洖搴撶殑閿欒
+ public static DateTime curDate; // 璁板綍閿欒鍙戠敓鐨勬椂闂�
public static void InboundRequestAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
{
try
{
+ if (KtpHkflag)
+ {
+ double secondsPassend = (DateTime.Now - curDate).TotalSeconds;
+ if (secondsPassend > 6)
+ {
+ client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 1);
+ KtpHkflag = false;
+ }
+ }
+
+
int R_Line_PLCDispatch = int.Parse(client.ReadValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo).ToString());
bool load = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), ReInboundRequestStationNo).ToString());
- if (R_Line_PLCDispatch ==1 && load)
+ if (R_Line_PLCDispatch == 1 && load)
{
string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), ReInboundRequestStationNo).ToString();
+
if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode))
{
- Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode && r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString());
- if (null == wcsInfo)
+ if (int.Parse(barcode) < 800000 || int.Parse(barcode) > 890000)
{
- //鑾峰彇杞﹁酱鍑哄簱
- List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) ||
- r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) && endStationNo.Contains(r.wcstask_endPoint));
-
- //鑾峰彇鏈夊灏戞潯鍑哄簱鐨勪换鍔�
- int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString());
- if (LineExecucount >= 4)
+ return;
+ }
+ object barcodeLock = GetBarcodeLock(barcode);
+ lock (barcodeLock)
+ {
+ Dt_TaskWCSinfo IsTask = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == barcode
+ && (x.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString() || x.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString())
+ && (x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString() || x.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString())
+ && (endStationNo.Contains(x.wcstask_endPoint)));
+ if (IsTask != null)
{
- //鍒ゆ柇鏄惁鏈夊搴斿眰鐨勫嚭搴撲换鍔★紝
- //鐢宠鍏ュ簱浠诲姟
- WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
+ // 杩欓噷瑕佸姞涓�涓垽鏂紝濡傛灉鎷垮洖鏉ョ殑绌烘墭鐩樻槸800001锛屼絾鏄垜鏈変竴鏉¤繖涓墭鐩樼殑浠诲姟鏄�800001杩樻病鏈夊埌鎸囧畾鐨勫帇瑁呭彴锛屾墍浠ユ垜瑕佸畬鎴愯繖涓换鍔�
+ // 鍦ㄦ瀹屾垚璇ョ┖鎵樺嚭搴撲换鍔�
+ WebResponseContent content = taskWCSinfoRepository.DbContextBeginTransaction(() =>
+ {
+ //涓婃姤WMS浠诲姟瀹屾垚
+ content = WMSApi.TellWmsTaskFinished(IsTask.wcstask_barcode,IsTask.wcstask_backUp_2);
+ if (content.Status)
+ {
+ //绉诲姩浠诲姟鍒板巻鍙茶〃
+ Dt_TaskWCSinfo_HtyRepository taskWCSinfo_HtyRepository = new Dt_TaskWCSinfo_HtyRepository(taskWCSinfoRepository.DbContext);
+ IsTask.wcstask_state = TaskState.TaskState_Finished.ToString();
+ CommonFunction.AddWcsTaskToHistory(IsTask, taskWCSinfoRepository, taskWCSinfo_HtyRepository);
+ }
+ else
+ throw new Exception($"{DateTime.Now}涓婃姤WMS浠诲姟瀹屾垚鍑洪敊锛屽師鍥狅細銆恵content.Message}銆�");
+
+ return content;
+ });
+ string str = string.Empty;
if (content.Status)
- {
- WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
- wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
- taskWCSinfoRepository.Add(wcsInfo, true);
- client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
- }
+ str = $" {DateTime.Now}涓婃姤WMS鍑哄簱瀹屾垚鎴愬姛,銆愭墜鍔ㄥ共鎵板嚭搴撴病鏈夊埌杈炬寚瀹氬帇瑁呭彴鐐逛綅锛屾墜鍔ㄦ嬁鍥�90101銆戙�怲askState_ConveyorLineExecuting銆戯紝鎵樼洏鍙�:{IsTask.wcstask_barcode},浠诲姟鍙凤細{IsTask.wcstask_taskNumber}";
else
- {
- throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
- }
+ str = $" {DateTime.Now}涓婃姤WMS鍑哄簱瀹屾垚澶辫触銆愭墜鍔ㄥ共鎵板嚭搴撴病鏈夊埌杈炬寚瀹氬帇瑁呭彴鐐逛綅锛屾墜鍔ㄦ嬁鍥�90101銆戙�怲askState_ConveyorLineExecuting銆戯紝鎵樼洏鍙�:{IsTask.wcstask_barcode},浠诲姟鍙凤細{IsTask.wcstask_taskNumber}";
+ WriteLog.Info(IsTask.wcstask_endPoint).Write(str, IsTask.wcstask_endPoint);
+ LogRecord.WriteLog(LogEnum.Errer, str.ToString());
}
- else
+
+ Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode);
+ if (null == wcsInfo)
{
- //鍒ゆ柇鏈夊灏戞潯鍦ㄧ紦瀛樻灦鐨�
- int RGV_Finishedcount = executingTask.Count(x => x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
- && x.wcstask_state != TaskState.TaskState_Assigned.ToString());
- if (RGV_Finishedcount == 0)
+ //鑾峰彇杞﹁酱鍑哄簱
+ List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) ||
+ r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) && endStationNo.Contains(r.wcstask_endPoint));
+
+ //鑾峰彇鏈夊灏戞潯鍑哄簱鐨勪换鍔�
+ int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString()
+ || x.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString());
+ if (LineExecucount >= 8)
{
+ //鍒ゆ柇鏄惁鏈夊搴斿眰鐨勫嚭搴撲换鍔★紝
//鐢宠鍏ュ簱浠诲姟
WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
if (content.Status)
{
- WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
- wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
- taskWCSinfoRepository.Add(wcsInfo, true);
- client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
+ try
+ {
+ WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
+ wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
+ taskWCSinfoRepository.Add(wcsInfo, true);
+ }
+ catch (Exception)
+ {
+ string str = $"杩欓噷鍙兘鏄嚭鐜颁簡骞跺彂鐨勬儏鍐垫墭鐩樼爜 鍦ㄦ坊鍔犵殑鏃跺�欐嫤鎴殑銆恵wcsInfo.wcstask_barcode}銆�" +
+ $"浠诲姟鍙枫�恵wcsInfo.wcstask_taskNumber}銆�,浠诲姟鐘舵�侊細銆恵wcsInfo.wcstask_state}銆�";
+ LogRecord.WriteLog(LogEnum.Errer, str.ToString());
+ //throw;
+ }
}
else
{
+ if (content.Message.Contains("褰撳墠鎵樼洏鍙峰凡瀛樺湪搴撻噷"))
+ {
+ client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 4);
+ }
throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
}
-
}
+ else
+ {
+ //鍒ゆ柇鏈夊灏戞潯鍦ㄧ紦瀛樻灦鐨�
+ int RGV_Finishedcount = executingTask.Count(x =>
+ x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
+ && x.wcstask_state != TaskState.TaskState_Empty_Out_Line_Executing.ToString()
+ && x.wcstask_state != TaskState.TaskState_Assigned.ToString());
+
+ if (RGV_Finishedcount == 0)
+ {
+ // 鏍稿績锛氳幏鍙栧綋鍓嶆墭鐩樺彿鐨勪笓灞為攣锛屽悓涓�鎵樼洏鍙蜂覆琛屽鐞�
+ //鐢宠鍏ュ簱浠诲姟
+ WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
+ if (content.Status)
+ {
+ try
+ {
+ WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
+ wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
+ taskWCSinfoRepository.Add(wcsInfo, true);
+ }
+ catch (Exception)
+ {
+ string str = $"杩欓噷鍙兘鏄嚭鐜颁簡骞跺彂鐨勬儏鍐垫墭鐩樼爜锛屽湪娣诲姞鐨勬椂鍊欐嫤鎴殑銆恵wcsInfo.wcstask_barcode}銆�" +
+ $"浠诲姟鍙枫�恵wcsInfo.wcstask_taskNumber}銆�,浠诲姟鐘舵�侊細銆恵wcsInfo.wcstask_state}銆�";
+ LogRecord.WriteLog(LogEnum.Errer, str.ToString());
+ //throw;
+ }
+ }
+ else
+ {
+ if (content.Message.Contains("褰撳墠鎵樼洏鍙峰凡瀛樺湪搴撻噷"))
+ {
+ client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 4);
+ }
+ else if (content.Message.Contains("鏆傛棤璐т綅鍙垎閰�"))
+ {
+
+ }
+ else
+ {
+ throw new Exception("鍏ュ簱鐢宠澶辫触:" + content.Message);
+ }
+
+ }
+ }
+ }
+ }
+ else
+ {
+ string str = $"杩欓噷鍙兘鏄嚭鐜颁簡骞跺彂鐨勬儏鍐垫墭鐩樼爜 鍦ㄦ煡璇㈢殑鏃跺�欐嫤鎴殑銆恵wcsInfo.wcstask_barcode}銆�" +
+ $"浠诲姟鍙枫�恵wcsInfo.wcstask_taskNumber}銆�,浠诲姟鐘舵�侊細銆恵wcsInfo.wcstask_state}銆�";
+ LogRecord.WriteLog(LogEnum.Errer, str.ToString());
}
}
}
else
{
- throw new Exception("鍏ュ簱鐢宠澶辫触:璇诲彇鍒扮殑绌烘墭鐩樻潯鐮佷负绌猴紝璇诲彇鍐呭锛�"+ barcode);
+ throw new Exception("鍏ュ簱鐢宠澶辫触:璇诲彇鍒扮殑绌烘墭鐩樻潯鐮佷负绌猴紝璇诲彇鍐呭锛�" + barcode);
}
}
}
catch (Exception ex)
{
client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 3);
+ KtpHkflag = true;
+ curDate = DateTime.Now; // 鎶ラ敊浜嗭紝璁板綍涓�涓嬭繖涓敊璇拰鏃堕棿锛�
+ LogRecord.WriteLog(LogEnum.Errer, DateTime.Now.ToString() + ex.Message.ToString());
+
Console.Out.WriteLine(DateTime.Now + ex.Message);
}
}
--
Gitblit v1.9.3