From 1b6ccb64675e5262a2f7135697edc7466ffc14bf Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期二, 04 三月 2025 17:20:05 +0800
Subject: [PATCH] 优化
---
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs | 187 +++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 164 insertions(+), 23 deletions(-)
diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
index e211435..514860b 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1,18 +1,10 @@
-锘縰sing Castle.Components.DictionaryAdapter.Xml;
-using log4net.Core;
-using Masuit.Tools;
-using System.CodeDom;
-using System.Threading.Tasks;
-using WIDESEA_Common;
+锘縰sing Masuit.Tools;
using WIDESEA_Common.CustomModels;
//using WIDESEA_Common.CustomModels;
-using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.Const;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
-using WIDESEA_StorageTaskRepository;
-using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
@@ -123,7 +115,6 @@
{
throw new Exception(ex.Message);
}
-
}
/// <summary>
@@ -411,7 +402,7 @@
////// 璋冪敤GetProcessResponseAsync鏂规硶锛岃幏鍙栧伐鑹哄搷搴�
////var processResponse = await GetProcessResponseAsync(process, input.Position);
var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
- #endregion
+ #endregion 鍏ュ簱浠诲姟
}
var task = new Dt_Task
@@ -444,11 +435,12 @@
return task;
}
- #endregion 鍏ュ簱浠诲姟
+ #endregion 璇锋眰浠诲姟鍏ュ簱
#region 搴撲綅鍒嗛厤
#region 鑾峰彇璐т綅
+
/// <summary>
///
/// </summary>
@@ -467,6 +459,10 @@
else
{
locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Distribute && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 1);
+ if (locations == null)
+ {
+ locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 1);
+ }
}
if (locations == null)
@@ -482,9 +478,11 @@
return null;
}
}
+
#endregion 鑾峰彇璐т綅
#region 寮傚父鍙e叆搴撹幏鍙栧簱浣�
+
private async Task<DtLocationInfo> RequestLocationByAbnormal(RequestTaskDto requestTask, bool isCheckRequest = false)
{
try
@@ -512,7 +510,8 @@
return null;
}
}
- #endregion
+
+ #endregion 寮傚父鍙e叆搴撹幏鍙栧簱浣�
#endregion 搴撲綅鍒嗛厤
@@ -535,6 +534,7 @@
#endregion 璇锋眰浠诲姟鍏ュ簱
#region 鍒涘缓绌烘鍑哄簱浠诲姟
+
public async Task<Dt_Task> CreateEmptyOutTaskAsync(RequestTaskDto input, Dt_StationManager stationManager)
{
try
@@ -576,6 +576,7 @@
throw new Exception(ex.Message);
}
}
+
#endregion
#region 鐩存帴鍑哄簱浠诲姟瀹屾垚
@@ -599,11 +600,13 @@
return content.Error(ex.Message);
}
}
+
#endregion
#region 寮傚父鍙d换鍔℃娴�
+
/// <summary>
- /// 寮傚父鎺掑嚭鍙e叆搴撴牎楠� 鎵�鏈夊紓甯镐氦缁橶CS鍋氬師鍦板潃NG澶勭悊
+ /// 寮傚父鎺掑嚭鍙e叆搴撴牎楠� 鎵�鏈夊紓甯镐氦缁橶CS鍋氬師鍦板潃NG澶勭悊
/// </summary>
/// <param name="input"></param>
/// <param name="stationManager"></param>
@@ -627,7 +630,7 @@
// 璋冪敤GetTrayCellStatusAsync鏂规硶锛岃幏鍙栨暣鐩樼數鑺�
WebResponseContent content = await GetTrayCellStatusAsync(trayCells);
// 濡傛灉鐘舵�佷负false锛屽垯杩斿洖content
- if (!content.Status) //鑾峰彇鏁寸洏鐢佃姱鏁版嵁锛� 濡傚紓甯� 浣跨敤绌烘绫诲瀷鍏ュ簱
+ if (!content.Status) //鑾峰彇鏁寸洏鐢佃姱鏁版嵁锛� 濡傚紓甯� 浣跨敤绌烘绫诲瀷鍏ュ簱
{
ConsoleHelper.WriteErrorLine(content.Message);
throw new Exception("MOM鏁寸洏鐢佃姱灞炴�ц幏鍙栧紓甯�");
@@ -742,9 +745,11 @@
throw new Exception(ex.Message);
}
}
+
#endregion
#region 绉诲簱浠诲姟浜嬪姟
+
private async Task<bool> ExecuteTransaction(DtStockInfo stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId)
{
_unitOfWorkManage.BeginTran();
@@ -787,6 +792,7 @@
#endregion MyRegion
#region 妫�娴嬮珮娓╁簱鏄惁鏈夊彲鍑哄簱搴撳瓨
+
public WebResponseContent StockCheckingAsync()
{
WebResponseContent webResponseContent = new WebResponseContent();
@@ -798,14 +804,21 @@
{
try
{
- Thread.Sleep(10000);
+ Thread.Sleep(TimeSpan.FromMinutes(10));
+
var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == "GWSC1");
+ var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
+ .Where(x => x.DeviceStatus == "1")
+ .Where(x => x.DeviceCode.Contains("GWSC"))
+ .ToList();
+ var deviceCode = devices.Select(x => x.DeviceCode).ToList();
var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
.Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo
.Includes(x => x.StockInfoDetails) // 棰勫姞杞絊tockInfoDetails
.Where(x => x.AreaCode == area.AreaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // 杩囨护鏉′欢
.Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 杩囨护鏉′欢
+ .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
.OrderBy(x => x.OutboundTime) // 鎺掑簭
.ToListAsync(); // 鑾峰彇绗竴涓厓绱�
@@ -871,12 +884,13 @@
#endregion 妫�娴嬮珮娓╁簱鏄惁鏈夊彲鍑哄簱搴撳瓨
#region 甯告俯琛ョ┖鎵樼洏鑷冲垎瀹�
+
public async Task<WebResponseContent> GetFROutTrayToCW(RequestTaskDto taskDTO)
{
WebResponseContent content = new WebResponseContent();
try
{
- var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskDTO.Position);
+ var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskDTO.Position && x.stationStatus == "1");
var locations = _locationRepository.QueryData(x => x.RoadwayNo == station.Roadway && x.LocationStatus == (int)LocationEnum.Free && x.LocationType == 1);
if (locations.Count > 10)
@@ -934,7 +948,6 @@
ConsoleHelper.WriteColorLine(station.Roadway, ConsoleColor.Magenta);
var stackers = station.Roadway.Split(',').ToList();
-
var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
.Where(x => x.DeviceStatus == "1")
.Where(x => stackers.Contains(x.DeviceCode))
@@ -960,23 +973,64 @@
#endregion
+ #region 甯告俯3鍑哄簱鑷冲寘瑁�
+
+ // 鐢ㄤ簬杩借釜姣忎釜璇锋眰鐨勮皟鐢ㄦ鏁板拰鏈�鍚庤姹傛椂闂淬��
+ private static readonly Dictionary<string, (int Count, DateTime LastRequestTime)> requestTracker = new();
+
+ /// <summary>
+ /// 甯告俯3鍑哄簱鑷冲寘瑁�
+ /// </summary>
+ /// <param name="json"></param>
+ /// <returns></returns>
public async Task<WebResponseContent> RequestOutTaskToBZAsync(RequestTaskDto json)
{
WebResponseContent content = new WebResponseContent();
try
{
- Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call");
+ //string requestKey = JsonConvert.SerializeObject(json);
+ //// 妫�鏌ヨ姹傛鏁板拰鏃堕棿闄愬埗
+ //if (requestTracker.TryGetValue(requestKey, out var requestInfo))
+ //{
+ // if (requestInfo.Count >= 9 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(5))
+ // {
+ // // 濡傛灉璇锋眰娆℃暟瓒呰繃闄愬埗涓旀湭瓒呰繃10鍒嗛挓锛屾姏鍑哄紓甯�
+ // throw new InvalidOperationException("璇锋眰娆℃暟宸茶揪鍒伴檺鍒讹紝璇风◢鍚庡啀璇曘��");
+ // }
+ //}
+ //// 鏇存柊璇锋眰璺熻釜淇℃伅
+ //if (requestTracker.ContainsKey(requestKey))
+ //{
+ // requestTracker[requestKey] = (requestInfo.Count + 1, DateTime.Now);
+ //}
+ //else
+ //{
+ // requestTracker[requestKey] = (1, DateTime.Now);
+ //}
+ //LogFactory.GetLog("甯告俯3鍑哄簱鑷冲寘瑁�").Info(true, $"甯告俯3鍑哄簱鑷冲寘瑁呬紶鍏ュ弬鏁帮細" + JsonConvert.SerializeObject(json, Formatting.Indented));
+
+ Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call");
+ if (station == null) { throw new Exception($"鏈壘鍒板寘瑁呯珯鍙颁俊鎭紝璇锋鏌ヤ紶鍏ュ弬鏁皗json.Position}"); }
+
+ var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
+ .Where(x => x.DeviceStatus == "1")
+ .Where(x => x.DeviceCode.Contains("CWSC")) // 杩囨护鏉′欢
+ .ToList();
+ var deviceCode = devices.Select(x => x.DeviceCode).ToList();
+
+ //LogFactory.GetLog("甯告俯3鍑哄簱鑷冲寘瑁�").Info(true, $"甯告俯3鍑哄簱鑷冲寘瑁呬紶鍏ュ弬鏁帮細" + JsonConvert.SerializeObject(json, Formatting.Indented));
var stockInfo = _stockInfoRepository.Db.Queryable<DtStockInfo>()
.Where(x => x.ProductionLine == station.productLine)
.Includes(x => x.LocationInfo) // 棰勫姞杞絃ocationInfo
.Where(x => x.AreaCode == "CWSC3" && x.IsFull == true) // 杩囨护鏉′欢
.Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock) // 杩囨护鏉′欢
+ .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
.OrderBy(x => x.OutboundTime) // 鎺掑簭
.First(); // 鑾峰彇绗竴涓厓绱�
//DtStockInfo stockInfo = _stockInfoRepository.QueryFirst(X => X.IsFull && X.AreaCode == "CWSC3" && X.ProductionLine == station.productLine);
- if (stockInfo == null) throw new Exception("搴撳唴鏃犳弧瓒虫潯浠剁殑搴撳瓨鍙嚭搴�");
+ if (stockInfo == null) throw new Exception($"搴撳唴{station.productLine}鏃犳弧瓒虫潯浠剁殑搴撳瓨鍙嚭搴�");
DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.AreaId == 5 && x.LocationCode == stockInfo.LocationCode);
@@ -1022,9 +1076,10 @@
}
}
-
+ #endregion
#region 鐏鍑哄簱
+
public WebResponseContent EmergencyTask(object obj)
{
WebResponseContent content = new WebResponseContent();
@@ -1070,7 +1125,6 @@
{
throw new Exception("宸叉坊鍔犵伀璀﹀嚭搴撲换鍔�");
}
-
int taskNum = BaseDal.GetTaskNo().Result;
Dt_Task task = new Dt_Task
@@ -1134,7 +1188,6 @@
LogFactory.GetLog("DTS鐏鍑哄簱").Info(true, $"\r\r--------------------------------------");
LogFactory.GetLog("DTS鐏鍑哄簱").Info(true, obj.ToJsonString());
return content.OK();
-
}
catch (Exception ex)
{
@@ -1143,5 +1196,93 @@
return content.Error(ex.Message);
}
}
+
+ #endregion
+
+ #region 鍒嗗绌烘鍏ュ簱鏀逛负鐩存帴鍑哄簱
+
+ public async Task<WebResponseContent> SetEmptyOutbyInToOutAsync(RequestTaskDto request)
+ {
+ WebResponseContent content = new WebResponseContent();
+ var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode);
+ if (!task.IsNullOrEmpty())
+ {
+ var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position);
+ var toStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 7 && x.productLine == fromStation.productLine && x.stationArea == fromStation.stationArea);
+ if (!toStation.IsNullOrEmpty())
+ {
+ var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.AreaId == int.Parse(fromStation.stationArea));
+ task.TargetAddress = toStation.stationLocation;
+ task.NextAddress = toStation.stationChildCode;
+ task.Grade = 3;
+ task.TaskType = (int)TaskOutboundTypeEnum.InToOut;
+ task.TaskState = (int)TaskOutStatusEnum.OutNew;
+
+ location.LocationStatus = (int)LocationEnum.Free;
+
+ await _locationRepository.UpdateDataAsync(location);
+ await BaseDal.UpdateDataAsync(task);
+ return content.OK("鎴愬姛");
+ }
+ else
+ {
+ ConsoleHelper.WriteErrorLine("鍒嗗绌烘鍏ュ簱鏀逛负鐩存帴鍑哄簱:鏈壘鍒板搴旂珯鍙�");
+ content.Error("鏈壘鍒板搴旂珯鍙�");
+ }
+ }
+ else
+ {
+ ConsoleHelper.WriteErrorLine("鍒嗗绌烘鍏ュ簱鏀逛负鐩存帴鍑哄簱:鏈壘鍒颁换鍔�");
+ content.Error("鏈壘鍒颁换鍔�");
+ }
+ return content;
+ }
+
+ #endregion
+
+ #region 鍒嗗绌烘鍑哄簱鏀逛负鐩存帴鍑哄簱
+
+ /// <summary>
+ /// 鍒嗗绌烘鍑哄簱鏀逛负鐩存帴鍑哄簱
+ /// </summary>
+ /// <param name="request"></param>
+ /// <returns></returns>
+ public async Task<WebResponseContent> SetEmptyOutbyInToOutOneAsync(RequestTaskDto request)
+ {
+ WebResponseContent content = new WebResponseContent();
+ var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode);
+ if (!task.IsNullOrEmpty())
+ {
+ var toStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position);
+ var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == toStation.productLine && x.stationArea == toStation.stationArea);
+ if (!fromStation.IsNullOrEmpty())
+ {
+ //var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.AreaId == int.Parse(fromStation.stationArea));
+ task.SourceAddress = toStation.stationLocation;
+ task.CurrentAddress = toStation.stationChildCode;
+ task.Grade = 3;
+ task.TaskType = (int)TaskOutboundTypeEnum.InToOut;
+ task.TaskState = (int)TaskOutStatusEnum.OutNew;
+
+ //location.LocationStatus = (int)LocationEnum.Free;
+
+ //await _locationRepository.UpdateDataAsync(location);
+ await BaseDal.UpdateDataAsync(task);
+ return content.OK("鎴愬姛");
+ }
+ else
+ {
+ ConsoleHelper.WriteErrorLine("鍒嗗绌烘鍑哄簱鏀逛负鐩存帴鍑哄簱:鏈壘鍒板搴旂珯鍙�");
+ content.Error("鏈壘鍒板搴旂珯鍙�");
+ }
+ }
+ else
+ {
+ ConsoleHelper.WriteErrorLine("鍒嗗绌烘鍑哄簱鏀逛负鐩存帴鍑哄簱:鏈壘鍒颁换鍔�");
+ content.Error("鏈壘鍒颁换鍔�");
+ }
+ return content;
+ }
+
#endregion
}
\ No newline at end of file
--
Gitblit v1.9.3