From 5c272c606bdf2da3577dbaa5f48d0ee163f1e7d2 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期四, 26 三月 2026 10:35:24 +0800
Subject: [PATCH] 纸张淋膜半成品入库逻辑优化
---
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs | 791 +++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 520 insertions(+), 271 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index f8398a4..0afff24 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -14,21 +14,11 @@
*
*----------------------------------------------------------------*/
#endregion << 鐗� 鏈� 娉� 閲� >>
-
using AutoMapper;
-using HslCommunication.Enthernet;
using Newtonsoft.Json;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
+using System.Net.Http.Headers;
using WIDESEA_DTO.Agv;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.APIEnum;
@@ -37,18 +27,16 @@
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
-using WIDESEAWCS_DTO.BasicInfo;
-using WIDESEAWCS_DTO.System;
+using WIDESEAWCS_Core.LogHelper;
+using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
-using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
-using WIDESEAWCS_TaskInfoRepository;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_TaskInfoService
@@ -79,6 +67,8 @@
public List<int> TaskInboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 500 && x < 900).ToList();
public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList();
+
+ public List<int> TaskRelocationTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 900 && x < 1000).ToList();
public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository) : base(BaseDal)
{
@@ -112,33 +102,83 @@
}
}
}
-
+ private readonly static object lockerCompleted = new object();
+ /// <summary>
+ /// 浠诲姟瀹屾垚
+ /// </summary>
public WebResponseContent TaskCompleted(int taskNum)
+ {
+ try
+ {
+ lock (lockerCompleted)
+ {
+ Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+ if (task != null)
+ {
+ task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+ BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ }
+ string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
+ if (string.IsNullOrEmpty(url))
+ {
+ _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ }
+ string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
+ WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},鏈帴鏀跺埌浠诲姟瀹屾垚杩斿洖鍊�");
+ return content;
+ }
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ /// <summary>
+ /// 浠诲姟閲嶆柊涓嬪彂
+ /// </summary>
+ /// <param name="taskNum"></param>
+ /// <returns></returns>
+ public WebResponseContent ResendTask(int taskNum)
{
try
{
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task != null)
{
- task.TaskState = TaskStatusEnum.Finish.ObjToInt();
- BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ if (task.TaskState == (int)TaskStatusEnum.SC_Executing)
+ {
+ task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
+ }
+ else if(task.TaskState == (int)TaskStatusEnum.AGV_Executing)
+ {
+ task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
+
+ }else if(task.TaskState == (int)TaskStatusEnum.AGV_Exception)
+ {
+ task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
+ task.Remark = "";
+ }
+ else
+ {
+ return WebResponseContent.Instance.Error($"姝や换鍔� { taskNum } 鏆傛椂涓嶈兘閲嶆柊涓嬪彂浠诲姟");
+ }
+ BaseDal.UpdateData(task);
}
- string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
- if (string.IsNullOrEmpty(url))
+ else
{
- _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔℃秷鎭�");
}
- string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
- WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},鏈帴鏀跺埌浠诲姟瀹屾垚杩斿洖鍊�");
- return content;
+ return WebResponseContent.Instance.OK("浠诲姟閲嶆柊涓嬪彂鎴愬姛");
}
catch (Exception ex)
{
return WebResponseContent.Instance.Error(ex.Message);
}
}
+
/// <summary>
/// 鎺ユ敹WMS浠诲姟淇℃伅
/// </summary>
@@ -191,7 +231,7 @@
return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃俊鎭�");
}
//鑾峰彇璺敱淇℃伅
- List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi));
+ List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi || stationManger.StationDeviceCode==x.StartPosi) && x.Depth==1);
router = routers.FirstOrDefault();
if (router == null)
{
@@ -203,9 +243,18 @@
//鍏ュ簱
if (taskTypeGroup == TaskTypeGroup.InboundGroup)
{
- task.CurrentAddress = router.StartPosi;
- task.NextAddress = router.NextPosi;
- task.DeviceCode = router.ChildPosiDeviceCode;
+ if (router.NextPosi == "AGV" && router.StartPosi=="AGV") //鍙夎溅AGV鎼繍鍏ュ簱
+ {
+ task.CurrentAddress = item.SourceAddress;
+ task.NextAddress = item.TargetAddress;
+ task.DeviceCode = router.ChildPosiDeviceCode;
+ }
+ else
+ {
+ task.CurrentAddress = router.StartPosi == "AGV" ? item.SourceAddress : router.StartPosi;
+ task.NextAddress = router.NextPosi;
+ task.DeviceCode = router.ChildPosiDeviceCode;
+ }
}
else //鍑哄簱
{
@@ -216,8 +265,7 @@
}
else
{
- //鎴愬搧鐮佸灈浠诲姟鐢熸垚
- if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL"))
+ if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL")) //鎴愬搧鐮佸灈浠诲姟鐢熸垚
{
task.CurrentAddress = router.StartPosi;
task.NextAddress = "";
@@ -236,12 +284,27 @@
{
//鎴愬搧鍏ュ簱
List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && x.StartPosi=="AGV" && x.ChildPosiDeviceCode==item.RoadWay);
- router = routers.FirstOrDefault();
- if (routers.Count == 1)
+ if (routers.Count==0)
{
+ router = _routerRepository.QueryFirst(x => x.InOutType == item.TaskType && x.StartPosi == "AGV");
+ if (router==null)
+ return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢遍厤缃俊鎭�");
task.NextAddress = router.NextPosi;
task.DeviceCode = router.ChildPosi;
}
+ else
+ {
+ router = routers.FirstOrDefault();
+ if (routers.Count == 1)
+ {
+ task.NextAddress = router.NextPosi;
+ if (task.Roadway.Contains("StackPlate"))
+ task.DeviceCode = router.ChildPosiDeviceCode;
+ else
+ task.DeviceCode = router.ChildPosi;
+ }
+ }
+
}
tasks.Add(task);
}
@@ -259,17 +322,15 @@
}
/// <summary>
- /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟
+ /// 鏍规嵁缁堢偣鍦板潃鍚慦MS璇锋眰浠诲姟
/// </summary>
- /// <param name="palletCode">鎵樼洏鍙�</param>
- /// <param name="sourceAddress">璧峰鍦板潃</param>
/// <returns></returns>
- public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, string materielBoxCode = "")
+ public WebResponseContent RequestPlateOutTask(string targetAddress)
{
WebResponseContent content = new WebResponseContent();
try
{
- Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == sourceAddress);
+ Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == targetAddress);
if (stationManger == null)
{
return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙颁俊鎭�");
@@ -279,29 +340,135 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
}
- string responseStr = "";
- if (!string.IsNullOrEmpty(materielBoxCode))
+ string responseStr = HttpHelper.Get($"{address}/api/Task/PlateOutbound?stationCode={targetAddress}");
+
+ WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+
+ content = responseContent;
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ // <summary>
+ /// 璇锋眰鍏ュ簱浠诲姟
+ /// </summary>
+ /// <param name="palletCode">鎵樼洏鍙�</param>
+ /// <param name="sourceAddress">璧峰鍦板潃</param>
+ /// /// <param name="roadWay">宸烽亾</param>
+ /// <returns></returns>
+ public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress,int taskNum=0)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string address = AppSettings.Get("WMSApiAddress");
+ if (string.IsNullOrEmpty(address))
{
- responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={stationManger.StackerCraneCode}&palletCode={palletCode}&materielBoxCode={materielBoxCode}");
+ return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+ }
+ string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}&taskNum{taskNum}");
+ WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+ if (responseContent != null && responseContent.Status && responseContent.Data != null)
+ {
+ WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
+ if (taskDTO != null)
+ {
+ content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+ }
}
else
{
- responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={stationManger.StackerCraneCode}&palletCode={palletCode}");
- }
- WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- if (responseContent != null && responseContent.Status && responseContent.Data != null)
- {
- WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
- if (taskDTO != null)
- {
- content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
- }
+ content = responseContent;
}
}
catch (Exception ex)
{
- content = WebResponseContent.Instance.Error(ex.Message);
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ // <summary>
+ /// 鍏ュ簱鐢宠
+ /// </summary>
+ public WebResponseContent YLPurchaseBoxing(string palletCode, decimal weight = 0, decimal thickness = 0, decimal wide = 0,string stationCode="")
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string address = AppSettings.Get("WMSApiAddress");
+ if (string.IsNullOrEmpty(address))
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+ }
+ string responseStr = HttpHelper.Get($"{address}/api/Task/YLPurchaseBoxing?palletCode={palletCode}&weight={weight}&thickness={thickness}&wide={wide}&stationCode={stationCode}");
+ WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+
+ content = responseContent;
+
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ // <summary>
+ /// 璇锋眰鎴愬搧鍏ュ簱宸烽亾
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent AssignCPRoadwayNo()
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string address = AppSettings.Get("WMSApiAddress");
+ if (string.IsNullOrEmpty(address))
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+ }
+ string responseStr = HttpHelper.Get($"{address}/api/Task/AssignCPRoadwayNo");
+
+ if (!responseStr.IsNullOrEmpty())
+ {
+ content.OK("鎴愬姛", responseStr);
+ }
+
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+
+ // <summary>
+ /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent AssignYLRoadwayNo(string palletCode, int wide = 0, int thickness = 0, int weight = 0)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string address = AppSettings.Get("WMSApiAddress");
+ if (string.IsNullOrEmpty(address))
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
+ }
+ string responseStr = HttpHelper.Get($"{address}/api/Task/AssignYLRoadwayNo?palletCode={palletCode}&wide={wide}&thickness={thickness}&weight={weight}");
+
+ WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+
+ content = responseContent;
+
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
}
return content;
}
@@ -312,7 +479,7 @@
/// <param name="sourceAddress">璧峰鍦板潃</param>
/// /// <param name="roadWay">宸烽亾</param>
/// <returns></returns>
- public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress)
+ public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress,string roadWay="", int taskType=630)
{
WebResponseContent content = new WebResponseContent();
try
@@ -322,9 +489,9 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
}
- string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}");
- WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- if (responseContent != null && responseContent.Status && responseContent.Data != null)
+ string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTaskSimple?stationCode={sourceAddress}");
+ WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("缁撴灉杩斿洖涓虹┖");
+ if (responseContent.Status && responseContent.Data != null)
{
WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
if (taskDTO != null)
@@ -332,56 +499,10 @@
content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
}
}
-
- }
- catch (Exception ex)
- {
- content = WebResponseContent.Instance.Error(ex.Message);
- }
- return content;
- }
- // <summary>
- /// 璇锋眰鍏ュ簱浠诲姟
- /// </summary>
- /// <param name="palletCode">鎵樼洏鍙�</param>
- /// <param name="sourceAddress">璧峰鍦板潃</param>
- /// /// <param name="roadWay">宸烽亾</param>
- /// <returns></returns>
- public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType=630)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- //string address = AppSettings.Get("WMSApiAddress");
- //if (string.IsNullOrEmpty(address))
- //{
- // return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
- //}
- //string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}");
- //WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- //if (responseContent != null && responseContent.Status && responseContent.Data != null)
- //{
- // WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
- // if (taskDTO != null)
- // {
- WMSTaskDTO? taskDTO = new WMSTaskDTO()
+ else
{
- Id = 1,
- TaskNum = DateTime.Now.ToString("mmss").ObjToInt(),
- PalletCode= palletCode,
- RoadWay= roadWay ?? "",
- TaskType= taskType,
- PalletType=1,
- TaskStatus=TaskStatusEnum.New.ObjToInt(),
- SourceAddress= sourceAddress,
- TargetAddress="",
- WarehouseId=1,
- Grade=0,
- };
- content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
- // }
- //}
-
+ content = responseContent;
+ }
}
catch (Exception ex)
{
@@ -389,51 +510,7 @@
}
return content;
}
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="palletCode"></param>
- /// <param name="sourceAddress"></param>
- /// <param name="roadway"></param>
- /// <returns></returns>
- //public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, string roadway)
- //{
- // WebResponseContent content = new WebResponseContent();
- // try
- // {
- // string address = AppSettings.Get("WMSApiAddress");
- // if (string.IsNullOrEmpty(address))
- // {
- // return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
- // }
- // string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={roadway}&palletCode={palletCode}");
- // WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- // if (responseContent != null && responseContent.Status && responseContent.Data != null)
- // {
- // WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
- // if (taskDTO != null)
- // {
- // content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
- // }
- // }
-
- // }
- // catch (Exception ex)
- // {
- // content = WebResponseContent.Instance.Error(ex.Message);
- // }
- // return content;
- //}
-
-
- /// <summary>
- /// 鍒嗛厤宸烽亾
- /// </summary>
- /// <param name="taskNum"></param>
- /// <param name="roadwayNos"></param>
- /// <returns></returns>
- public WebResponseContent RequestWMSAssignRoadway(int taskNum, List<string> roadwayNos)
+ public WebResponseContent MESBoxCodeNotice(string boxCode)
{
WebResponseContent content = new WebResponseContent();
try
@@ -443,13 +520,8 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
}
- string responseStr = HttpHelper.Post($"{address}/api/Task/AssignRoadway?taskNum={taskNum}", roadwayNos.Serialize());
- WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- if (responseContent != null && responseContent.Status && responseContent.Data != null)
- {
- return responseContent;
- }
-
+ string responseStr = HttpHelper.Get($"{address}/api/Mes/MESBoxCodeNotice?boxCode={boxCode}");
+ return content.OK(responseStr);
}
catch (Exception ex)
{
@@ -457,15 +529,56 @@
}
return content;
}
-
/// <summary>
- ///
+ /// 鍒ゆ柇鍏佽鏀捐揣
/// </summary>
- /// <param name="roadwayNos"></param>
- /// <param name="palletCode"></param>
- /// <param name="heightType"></param>
/// <returns></returns>
- public WebResponseContent RequestWMSAssignRoadway(List<string> roadwayNos, string palletCode, int heightType)
+ public string MESAvgArriveNotice(RequestAGVArriveDTO requestAGVArriveDTO)
+ {
+ Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.MESAvgArriveNotice.ToString());
+
+ string response = Post(apiInfo.ApiAddress, JsonConvert.SerializeObject(requestAGVArriveDTO));
+
+ return response;
+ }
+ public static string Post(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
+ {
+ string result = string.Empty;
+ DateTime beginDate = DateTime.Now;
+ try
+ {
+ using (HttpContent httpContent = new StringContent(requestJson))
+ {
+ httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
+
+ using HttpClient httpClient = new HttpClient();
+ httpClient.Timeout = new TimeSpan(0, 0, 30);
+ string LoginToken = AppSettings.Get("MESLoginToken");
+ headers = new Dictionary<string, string>
+ {
+ //姝e紡
+ { "LoginToken", LoginToken }
+ };
+ if (headers != null)
+ {
+ foreach (var header in headers)
+ httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
+ }
+ HttpResponseMessage responseMessage = httpClient.PostAsync(serviceAddress, httpContent).Result;
+ result = responseMessage.Content.ReadAsStringAsync().Result;
+ }
+ return result;
+ }
+ catch (Exception e)
+ {
+ throw new Exception(e.Message);
+ }
+ finally
+ {
+ Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
+ }
+ }
+ public WebResponseContent CPEmptyInbound(string palletCode,string SourceAddress)
{
WebResponseContent content = new WebResponseContent();
try
@@ -475,75 +588,9 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
}
- string responseStr = HttpHelper.Post($"{address}/api/Task/AssignRoadwayByHeightAndCode?palletCode={palletCode}&heightType={heightType}", roadwayNos.Serialize());
- WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- if (responseContent != null && responseContent.Status && responseContent.Data != null)
- {
- return responseContent;
- }
+ var result = HttpHelper.Get($"{address}/api/Task/EmptyBackTask?barCode={palletCode}&startPoint={SourceAddress}");
- }
- catch (Exception ex)
- {
- content = WebResponseContent.Instance.Error(ex.Message);
- }
- return content;
- }
-
- /// <summary>
- /// 鍒嗛厤宸烽亾
- /// </summary>
- /// <param name="roadwayNos"></param>
- /// <param name="taskNum"></param>
- /// <param name="heightType"></param>
- /// <returns></returns>
- public WebResponseContent RequestWMSAssignRoadway(List<string> roadwayNos, int taskNum, int heightType)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- string address = AppSettings.Get("WMSApiAddress");
- if (string.IsNullOrEmpty(address))
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
- }
- string responseStr = HttpHelper.Post($"{address}/api/Task/AssignRoadway?taskNum={taskNum}&heightType={heightType}", roadwayNos.Serialize());
- WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- if (responseContent != null && responseContent.Status && responseContent.Data != null)
- {
- return responseContent;
- }
-
- }
- catch (Exception ex)
- {
- content = WebResponseContent.Instance.Error(ex.Message);
- }
- return content;
- }
-
- /// <summary>
- /// 鍒嗛厤宸烽亾
- /// </summary>
- /// <param name="roadwayNos"></param>
- /// <returns></returns>
- public WebResponseContent RequestWMSAssignRoadway(List<string> roadwayNos)
- {
- WebResponseContent content = new WebResponseContent();
- try
- {
- string address = AppSettings.Get("WMSApiAddress");
- if (string.IsNullOrEmpty(address))
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
- }
- string responseStr = HttpHelper.Post($"{address}/api/Task/SingleAssignRoadway", roadwayNos.Serialize());
- WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
- if (responseContent != null && responseContent.Status && responseContent.Data != null)
- {
- return responseContent;
- }
-
+ content = JsonConvert.DeserializeObject<WebResponseContent>(result);
}
catch (Exception ex)
{
@@ -572,20 +619,45 @@
return "";
}
-
/// <summary>
- /// 鍚慦MS鐢宠鍒嗛厤璐т綅
+ /// 鍚慦MS鎴愬搧鍏ュ簱鎵爜璇锋眰鏇存柊鏉$爜
/// </summary>
- /// <param name="taskNum"></param>
- /// <param name="roadwayNo"></param>
- /// <param name="heightType"></param>
+ /// <param name="taskNum">浠诲姟鍙�</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
- public string? RequestAssignLocationByHeight(int taskNum, string roadwayNo, int heightType)
+ public WebResponseContent RequestInBoundPalletCode(int taskNum,string barCode)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string address = AppSettings.Get("WMSApiAddress");
+ if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
+ string responseStr = HttpHelper.Get($"{address}/api/Task/InBoundPalletCode?taskNum={taskNum}&barCode={barCode}");
+ WebResponseContent responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? throw new Exception("鏈敹鍒拌繑鍥炲弬鏁�");
+ if (!responseContent.Status)
+ {
+ return responseContent;
+ }
+ content.OK();
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+
+ }
+ /// <summary>
+ /// 鍚慦MS鐢宠鍑哄簱AGV缁堢偣
+ /// </summary>
+ /// <param name="taskNum">浠诲姟鍙�</param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public string? RequestTargetAddress(int taskNum)
{
string address = AppSettings.Get("WMSApiAddress");
if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
- string responseStr = HttpHelper.Get($"{address}/api/Task/AssignInboundTaskLocationByHeight?taskNum={taskNum}&roadwayNo={roadwayNo}&heightType={heightType}");
+ string responseStr = HttpHelper.Get($"{address}/api/Task/AssignOutTargetAddress?taskNum={taskNum}");
WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
if (responseContent != null && responseContent.Status && responseContent.Data != null)
@@ -610,6 +682,8 @@
return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
+ if (taskTypeGroup.Value == TaskTypeGroup.RelocationGroup)
+ return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
return null;
}
@@ -626,6 +700,89 @@
return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
else
return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.CurrentAddress == currentAddress && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
+ }
+ private static Dictionary<string, int> dict = new Dictionary<string, int>
+ {
+ { "SC01_YL", 0 },
+ { "SC02_YL", 0 },
+ { "SC03_YLDual", 0 },
+ { "SC04_YLDual", 0 },
+ { "SC05_YLDual", 0 }
+ };
+ private readonly static object lockerOldorNew = new object();
+ /// <summary>
+ /// 鍘熸枡搴撲换鍔℃煡璇�
+ /// </summary>
+ /// <param name="deviceNo">璁惧缂栧彿</param>
+ /// <param name="currentAddress">褰撳墠鍦板潃</param>
+ /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+ public Dt_Task QueryStackerYLTask(string deviceNo,TaskTypeGroup? taskTypeGroup= null)
+ {
+ lock (lockerOldorNew)
+ {
+ int OldorNew = dict[deviceNo];
+ if (taskTypeGroup == null)
+ {
+ Dt_Task taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt(), TaskOrderBy);
+ if (taskSend == null || OldorNew == 0)
+ {
+ dict[deviceNo] = 1;
+ List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .ToList();
+ if (specificTasks.Any())
+ {
+ //鏍规嵁鏃堕棿绛涙煡涓ユ牸鎺掑簭
+ Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .FirstOrDefault();
+ Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
+ if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
+ {
+ taskSend = taskCheckSend;
+ }
+ }
+ }
+ else
+ {
+ dict[deviceNo] = 0;
+ }
+ return taskSend;
+ }
+ else
+ {
+ Dt_Task taskSend = null;
+ if (OldorNew == 0)
+ {
+ dict[deviceNo] = 1;
+ List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .ToList();
+ if (specificTasks.Any())
+ {
+ //鏍规嵁鏃堕棿绛涙煡涓ユ牸鎺掑簭
+ Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .FirstOrDefault();
+ Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
+ if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
+ {
+ taskSend = taskCheckSend;
+ }
+ }
+ }
+ else
+ {
+ dict[deviceNo] = 0;
+ taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt() && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
+ }
+ return taskSend;
+ }
+ }
}
/// <summary>
@@ -684,7 +841,7 @@
task.ModifyDate = DateTime.Now;
BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, task.ExceptionMessage);
content = WebResponseContent.Instance.OK();
}
@@ -726,7 +883,7 @@
BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
content = WebResponseContent.Instance.OK();
}
@@ -767,7 +924,7 @@
BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskState}銆�");
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskState}銆�");
content = WebResponseContent.Instance.OK();
}
@@ -778,35 +935,7 @@
return content;
}
- public WebResponseContent SendSecureReplyToAgv(int taskNum)
- {
- try
- {
- Dt_Task WaitToTask = BaseDal.QueryFirst(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && x.TaskNum == taskNum);
- AgvSecureReplyDTO replyDTO = new AgvSecureReplyDTO()
- {
- ReqCode = Guid.NewGuid().ToString().Replace("-", ""), //WaitToTask.TaskNum.ToString(),
- taskCode = WaitToTask.AgvTaskNum,
- };
- WebResponseContent content = AgvSecureReply(replyDTO);
- if (content.Status)
- {
- WaitToTask.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
- }
- else
- {
- WaitToTask.TaskState = TaskStatusEnum.Exception.ObjToInt();
- WaitToTask.ExceptionMessage = content.Message;
- }
- UpdateData(WaitToTask);
-
- return WebResponseContent.Instance.OK();
- }
- catch (Exception ex)
- {
- return WebResponseContent.Instance.Error(ex.Message);
- }
- }
+
/// <summary>
/// //鍒ゆ柇绉诲簱璐т綅浠诲姟鏄惁宸插瓨鍦紝濡傚瓨鍦ㄥ厛鎵ц
/// </summary>
@@ -836,5 +965,125 @@
return WebResponseContent.Instance.Error(ex.Message);
}
}
+
+ public Dt_Task QueryBarCodeAGVFinishTask(int TaskNum, string currentAddress)
+ {
+ return BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.AGV_Finish && x.CurrentAddress == currentAddress && x.TaskNum == TaskNum, TaskOrderBy);
+ }
+
+ public Dt_Task QueryExecutingTaskByBarcode(int TaskNum, string nextAddress)
+ {
+ return BaseDal.QueryFirst(x => x.TaskNum == TaskNum && x.NextAddress == nextAddress && x.TaskState == (int)TaskStatusEnum.Line_Executing, TaskOrderBy);
+ }
+
+ public Dt_Task QueryLineExecuteTaskByBarcode(int TaskNum, string nextAddress)
+ {
+ return BaseDal.QueryFirst(x => x.TaskNum == TaskNum && x.CurrentAddress == nextAddress && x.TaskState == (int)TaskStatusEnum.Line_Execute, TaskOrderBy);
+ }
+
+ public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task, Dt_StationManger stationManger = null)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ TaskStatusEnum nextStatus = new TaskStatusEnum();
+ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+ {
+ if (task.TaskState == (int)TaskStatusEnum.SC_Executing)
+ {
+ Dt_Router router = _routerRepository.QueryFirst(x => x.InOutType == task.TaskType && x.StartPosi == stationManger.StationCode && x.ChildPosi == stationManger.StationDeviceCode);
+ if (router == null)
+ {
+ UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
+ return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
+ }
+ task.CurrentAddress = task.NextAddress;
+ task.NextAddress = router.NextPosi;
+ task.TaskState = (int)TaskStatusEnum.Line_Executing;
+ nextStatus = TaskStatusEnum.Line_Executing;
+ }
+ else if (task.TaskState == (int)TaskStatusEnum.SC_Execute)
+ {
+ task.TaskState = (int)TaskStatusEnum.SC_Executing;
+ nextStatus = TaskStatusEnum.SC_Executing;
+ }
+ }
+ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
+ {
+ if (task.TaskState == (int)TaskStatusEnum.Line_Executing)
+ {
+ #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+ string? local = RequestAssignLocation(task.TaskNum, task.Roadway);
+ //string? local = "SC03_YLDual-002-090-001-01";
+ if (!string.IsNullOrEmpty(local))
+ {
+ task.CurrentAddress = stationManger.StackerCraneStationCode;
+ task.TargetAddress = local;
+ task.NextAddress = local;
+ task.DeviceCode = stationManger.StackerCraneCode;
+ task.TaskState = (int)TaskStatusEnum.SC_Execute;
+ nextStatus = TaskStatusEnum.SC_Execute;
+ content.OK($"鑾峰彇璐т綅鍙穥local}");
+ }
+ else
+ {
+ return content.Error($"璇锋眰鍏ュ簱璐т綅澶辫触");
+ }
+ #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃
+ }
+ else if (task.TaskState == (int)TaskStatusEnum.AGV_Finish)
+ {
+ content = AssignYLRoadwayNo(task.PalletCode);
+ if (!content.Status)
+ {
+ return content.Error($"璇锋眰鍏ュ簱澶辫触锛歿content.Message}");
+ }
+ //string roadWay = "SC03_YLDual";
+ string roadWay = content.Data.ToString();
+
+ List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi && x.ChildPosiDeviceCode == roadWay);
+ Dt_Router router = routers.FirstOrDefault();
+ if (router == null)
+ {
+ return content.Error($"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+ }
+
+ task.Roadway = roadWay;
+ task.NextAddress = router.NextPosi;
+ task.TaskState = (int)TaskStatusEnum.Line_Execute;
+ nextStatus = TaskStatusEnum.Line_Execute;
+ }
+ else if (task.TaskState == (int)TaskStatusEnum.Line_Execute)
+ {
+ task.TaskState = (int)TaskStatusEnum.Line_Executing;
+ nextStatus = TaskStatusEnum.Line_Executing;
+ }
+ else if (task.TaskState == (int)TaskStatusEnum.SC_Execute)
+ {
+ task.TaskState = (int)TaskStatusEnum.SC_Executing;
+ nextStatus = TaskStatusEnum.SC_Executing;
+ }
+ }
+ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+ {
+ task.TaskState = (int)TaskStatusEnum.SC_Executing;
+ nextStatus = TaskStatusEnum.SC_Executing;
+ }
+ else
+ {
+ throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
+ }
+ task.ModifyDate = DateTime.Now;
+ task.Modifier = "System";
+ //BaseDal.UpdateData(task);
+ UpdateTask(task, nextStatus);
+ content = WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ content = WebResponseContent.Instance.Error(ex.Message);
+ }
+ return content;
+ }
}
}
--
Gitblit v1.9.3