基本满足四向车,AGV调试需求

This commit is contained in:
葛林强 2024-11-20 22:35:08 +08:00
parent ac52f86fc4
commit ad19053505
9 changed files with 156 additions and 80 deletions

View File

@ -4,6 +4,7 @@ using WcsMain.Constant;
using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.TableEntity;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.Constant.ExtendMethod; using WcsMain.Constant.ExtendMethod;
using System.Collections.Generic;
namespace WcsMain.ApiClient.AGV; namespace WcsMain.ApiClient.AGV;
@ -21,26 +22,48 @@ public class AGVWebApiAction(AGVBaseWebApi webApiPost)
/// <returns></returns> /// <returns></returns>
public string Send_NO_VERIFY_BUCKET_MOVE(AppWmsTask wmsTask) public string Send_NO_VERIFY_BUCKET_MOVE(AppWmsTask wmsTask)
{ {
AGVRequestLayout<AGVTaskRequest<AGVBucketMove>> request = new() //AGVRequestLayout<AGVTaskRequest<AGVBucketMove>> request = new()
{ //{
Header = new() // Header = new()
{ // {
AppKey = ApplicationBaseConfig.APP_KEY, // AppKey = ApplicationBaseConfig.APP_KEY,
AppSecret = ApplicationBaseConfig.APP_SECRET, // AppSecret = ApplicationBaseConfig.APP_SECRET,
RequestId = wmsTask.TaskId, // RequestId = wmsTask.TaskId,
TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), // TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
version = "2.9" // version = "2.9"
}, // },
Body = new() // Body = new()
// {
// RobotJobId = wmsTask.TaskId,
// WareHouseId = 100,
// RobotJobGroupId = wmsTask.TaskId,
// Sequence = 1,
// RobotJobGroupNum = 1,
// JobPriority = 1,
// JobProorytyType = 0,
// JobType = "NO_VERIFY_BUCKET_MOVE",
// JobData = new()
// {
// StartPoint = wmsTask.Origin,
// StartPointName = null,
// WorkFaces = "0",
// EndArea = wmsTask.Destination,
// EndPoint = wmsTask.Destination,
// EndPointName = null,
// BucketTypeCode = "00",
// LetDownFlag = 2,
// }
// }
//};
AGVTaskRequest<AGVBucketMove> request = new()
{ {
RobotJobId = wmsTask.TaskId, RobotJobId = wmsTask.TaskId,
WareHouseId = 100, WareHouseId = 1,
RobotJobGroupId = wmsTask.TaskId,
Sequence = 1,
RobotJobGroupNum = 1, RobotJobGroupNum = 1,
JobPriority = 1, JobPriority = 1,
JobProorytyType = 0, JobProorytyType = 0,
JobType = "NO_VERIFY_BUCKET_MOVE", JobType = "NO_VERIFY_BUCKET_MOVE",
OrderSource = "BK",
JobData = new() JobData = new()
{ {
StartPoint = wmsTask.Origin, StartPoint = wmsTask.Origin,
@ -49,24 +72,23 @@ public class AGVWebApiAction(AGVBaseWebApi webApiPost)
EndArea = wmsTask.Destination, EndArea = wmsTask.Destination,
EndPoint = wmsTask.Destination, EndPoint = wmsTask.Destination,
EndPointName = null, EndPointName = null,
BucketTypeCode = "00", BucketTypeCode = "TP",
LetDownFlag = 2, LetDownFlag = 2,
} }
}
}; };
var response = webApiPost.HttpPost<AGVRequestLayout<AGVTaskRequest<AGVBucketMove>>, AGVResponseLayout<AGVTaskResponse>>(request, CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? ""); var response = webApiPost.HttpPost<List<AGVTaskRequest<AGVBucketMove>>, AGVResponseBody<List<AGVTaskResponse>>> ([request], CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? "");
var responseData = response.ResponseEntity; var responseData = response.ResponseEntity;
if (!response.IsSend || responseData == null) if (!response.IsSend || responseData == null)
{ {
return "请求失败,网络故障"; return "请求失败,网络故障";
} }
if (responseData.Body!.Success == true && responseData.Body!.Code?.ToLower() == "success") if (responseData.Success == true && responseData.Code?.ToLower() == "success")
{ {
// 发送成功 // 发送成功
return string.Empty; return string.Empty;
} }
return responseData.Body.Message ?? "请求失败,未知原因"; return responseData.Message ?? "请求失败,未知原因";
} }
/// <summary> /// <summary>
@ -76,54 +98,76 @@ public class AGVWebApiAction(AGVBaseWebApi webApiPost)
/// <param name="origin"></param> /// <param name="origin"></param>
/// <param name="destination"></param> /// <param name="destination"></param>
/// <returns></returns> /// <returns></returns>
public string Send_AGV_TASK(string? taskId, string? origin, string? destination) public string Send_AGV_TASK(string? taskId, string? origin, string? destination, int needOut = 0)
{ {
AGVRequestLayout<AGVTaskRequest<AGVBucketMove>> request = new() //AGVRequestLayout<AGVTaskRequest<AGVBucketMove>> request = new()
{ //{
Header = new() // Header = new()
{ // {
AppKey = ApplicationBaseConfig.APP_KEY, // AppKey = ApplicationBaseConfig.APP_KEY,
AppSecret = ApplicationBaseConfig.APP_SECRET, // AppSecret = ApplicationBaseConfig.APP_SECRET,
RequestId = taskId, // RequestId = taskId,
TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), // TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
version = "2.9" // version = "2.9"
}, // },
Body = new() // Body = new()
// {
// RobotJobId = taskId,
// WareHouseId = 100,
// RobotJobGroupId = taskId,
// Sequence = 1,
// RobotJobGroupNum = 1,
// JobPriority = 1,
// JobProorytyType = 0,
// JobType = "NO_VERIFY_BUCKET_MOVE",
// JobData = new()
// {
// StartPoint = origin,
// StartPointName = null,
// WorkFaces = "0",
// EndArea = destination,
// EndPoint = destination,
// EndPointName = null,
// BucketTypeCode = "00",
// LetDownFlag = 2,
// }
// }
//};
AGVTaskRequest<AGVBucketMove> request = new()
{ {
RobotJobId = taskId, RobotJobId = taskId,
WareHouseId = 100, WareHouseId = 1,
RobotJobGroupId = taskId,
Sequence = 1,
RobotJobGroupNum = 1, RobotJobGroupNum = 1,
JobPriority = 1, JobPriority = 1,
JobProorytyType = 0, JobProorytyType = 0,
JobType = "NO_VERIFY_BUCKET_MOVE", JobType = "NO_VERIFY_BUCKET_MOVE",
OrderSource = "BK",
JobData = new() JobData = new()
{ {
StartPoint = origin, StartPoint = origin,
StartPointName = null, StartPointName = null,
WorkFaces = "0", WorkFaces = "0",
EndArea = destination,
EndPoint = destination, EndPoint = destination,
EndPointName = null, EndPointName = null,
BucketTypeCode = "00", BucketTypeCode = "TP",
LetDownFlag = 2, LetDownFlag = 2,
} NeedOut = needOut
} }
}; };
var response = webApiPost.HttpPost<AGVRequestLayout<AGVTaskRequest<AGVBucketMove>>, AGVResponseLayout<AGVTaskResponse>>(request, CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? "");
var response = webApiPost.HttpPost<List<AGVTaskRequest<AGVBucketMove>>, AGVResponseBody<List<AGVTaskResponse>>>([request], CommonData.AppApiBaseInfos.GetAddress("AGV_NO_VERIFY_BUCKET_MOVE") ?? "");
var responseData = response.ResponseEntity; var responseData = response.ResponseEntity;
if (!response.IsSend || responseData == null) if (!response.IsSend || responseData == null)
{ {
return "请求失败,网络故障"; return "请求失败,网络故障";
} }
if (responseData.Body!.Success == true && responseData.Body!.Code?.ToLower() == "success") if (responseData.Success == true && responseData.Code?.ToLower() == "success")
{ {
// 发送成功 // 发送成功
return string.Empty; return string.Empty;
} }
return responseData.Body.Message ?? "请求失败,未知原因"; return responseData.Message ?? "请求失败,未知原因";
} }

View File

@ -46,7 +46,7 @@ public class AGVBucketMove
/// <summary> /// <summary>
/// 货架类型编码 /// 货架类型编码
/// </summary> /// </summary>
[JsonProperty("buckTypeCode")] [JsonProperty("bucketTypeCode")]
public string? BucketTypeCode { get; set; } public string? BucketTypeCode { get; set; }
/// <summary> /// <summary>

View File

@ -57,7 +57,7 @@ public class AGVResponseHeader
} }
// {"code":"ERR_PARTIAL_FAILURE","message":"Partial failure","success":false,"data":[{"code":"ERR_ILLEGAL_WHI","message":"ERR_ILLEGAL_WHI","robotJobId":"1731831975323001000"}]}
/// <summary> /// <summary>
/// AGV 响应体 /// AGV 响应体
/// </summary> /// </summary>

View File

@ -97,6 +97,12 @@ public class AGVTaskRequest<T> where T : class, new()
[JsonProperty("jobType")] [JsonProperty("jobType")]
public string? JobType { get; set; } public string? JobType { get; set; }
/// <summary>
/// 订单来源
/// </summary>
[JsonProperty("orderSource")]
public string? OrderSource { get; set; }
/// <summary> /// <summary>
/// 任务数据 /// 任务数据
/// </summary> /// </summary>

View File

@ -25,5 +25,5 @@ public class AGVTaskResponse
[JsonProperty("robotJobId")] [JsonProperty("robotJobId")]
public string? RobotJobId { get; set; } public string? RobotJobId { get; set; }
// {"code":"ERR_PARTIAL_FAILURE","message":"Partial failure","success":false,"data":[{"code":"ERR_ILLEGAL_WHI","message":"ERR_ILLEGAL_WHI","robotJobId":"1731831975323001000"}]}
} }

View File

@ -8,6 +8,19 @@ namespace WcsMain.ApiServe.Dto.AGV;
public class AGVRequestBodyLayout<T> public class AGVRequestBodyLayout<T>
{ {
/// <summary>
/// 数据
/// </summary>
[JsonPropertyName("event")]
public AGVRequestBodyDataLayout<T>? Event { get; set; }
}
public class AGVRequestBodyDataLayout<T>
{
/// <summary> /// <summary>
/// 上游任务号 /// 上游任务号
/// </summary> /// </summary>
@ -18,7 +31,7 @@ public class AGVRequestBodyLayout<T>
/// 仓库编号 /// 仓库编号
/// </summary> /// </summary>
[JsonPropertyName("warehouseId")] [JsonPropertyName("warehouseId")]
public string? WarehouseId { get; set; } public int? WarehouseId { get; set; }
/// <summary> /// <summary>
/// 快仓系统内部任务号 /// 快仓系统内部任务号
@ -44,6 +57,4 @@ public class AGVRequestBodyLayout<T>
[JsonPropertyName("jobData")] [JsonPropertyName("jobData")]
public T? JobData { get; set; } public T? JobData { get; set; }
} }

View File

@ -26,8 +26,8 @@ public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecut
Body = new() { Code = "ERROR", Success = false, Message = "Body 未能正确解析" } Body = new() { Code = "ERROR", Success = false, Message = "Body 未能正确解析" }
}; };
} }
string? wmsTaskId = bodyData.RobotJobId; // 任务号 string? wmsTaskId = bodyData.Event?.RobotJobId; // 任务号
string? status = bodyData.State; // 状态 string? status = bodyData.Event?.State; // 状态
if(status == default || wmsTaskId == default) if(status == default || wmsTaskId == default)
{ {
return new() return new()

View File

@ -86,11 +86,15 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
/// <param name="wmsTask"></param> /// <param name="wmsTask"></param>
private void ExecuteInTask(AppWmsTask wmsTask) private void ExecuteInTask(AppWmsTask wmsTask)
{ {
string? midPoint = wmsTask.MidPoint;
if (string.IsNullOrEmpty(wmsTask.Origin)) return; if (string.IsNullOrEmpty(wmsTask.Origin)) return;
string? midPoint = GetEmptyInLift(wmsTask.Destination); if (string.IsNullOrEmpty(midPoint))
{
midPoint = GetEmptyInLift(wmsTask.Destination);
}
if (string.IsNullOrEmpty(midPoint)) return; // 没有可用的站台 if (string.IsNullOrEmpty(midPoint)) return; // 没有可用的站台
/* 发送AGV 搬运任务 */ /* 发送AGV 搬运任务 */
string errText = agvAction.Send_AGV_TASK(wmsTask.TaskId, wmsTask.Origin, midPoint); string errText = agvAction.Send_AGV_TASK(wmsTask.TaskId, wmsTask.Origin, midPoint, 1);
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】入库请求AGV搬运失败任务号{wmsTask.TaskId},异常信息:{errText}"); ConsoleLog.Warning($"【警告】入库请求AGV搬运失败任务号{wmsTask.TaskId},异常信息:{errText}");
@ -161,7 +165,7 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
(string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? ""); (string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? "");
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}"); //ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
continue; continue;
} }
if (model != 2 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue; // 不满足执行条件 if (model != 2 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue; // 不满足执行条件
@ -171,7 +175,7 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
var task = tasks.First(); var task = tasks.First();
if (string.IsNullOrEmpty(task.Destination)) continue; if (string.IsNullOrEmpty(task.Destination)) continue;
/* 下发任务 */ /* 下发任务 */
string agvErrText = agvAction.Send_AGV_TASK(task.TaskId, task.MidPoint, task.Destination); string agvErrText = agvAction.Send_AGV_TASK(task.TaskId, GetAgvNo(task.MidPoint), task.Destination);
if (!string.IsNullOrEmpty(agvErrText)) if (!string.IsNullOrEmpty(agvErrText))
{ {
ConsoleLog.Warning($"【警告】AGV出库任务请求AGV服务失败任务号{task.TaskId},异常信息:{agvErrText}"); ConsoleLog.Warning($"【警告】AGV出库任务请求AGV服务失败任务号{task.TaskId},异常信息:{agvErrText}");
@ -201,7 +205,7 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
(string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? ""); (string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? "");
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}"); //ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
continue; continue;
} }
if (model != 1 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue; if (model != 1 || allowAction != (short)TrueFalseEnum.TRUE || errCode != 0) continue;
@ -239,7 +243,7 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
(string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? ""); (string errText, short model, short allowAction, short errCode, string code) = stackerConveyOperation.GetLiftInfo(liftInfo.LiftId ?? "");
if (!string.IsNullOrEmpty(errText)) if (!string.IsNullOrEmpty(errText))
{ {
ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}"); //ConsoleLog.Warning($"【警告】提升机站台信息获取失败,异常信息:{errText}");
continue; continue;
} }
if (model != 2 || allowAction != (short)TrueFalseEnum.FALSE || errCode != 0) continue; if (model != 2 || allowAction != (short)TrueFalseEnum.FALSE || errCode != 0) continue;
@ -264,4 +268,15 @@ public class ExecuteWmsTask(AppWmsTaskDao wmsTaskDao, StackerConveyOperation sta
} }
private string? GetAgvNo(string? lift)
{
List<AppLiftInfo>? liftInfos = liftInfoDao.Query(new() { Status = (int)TrueFalseEnum.TRUE });
if (liftInfos == default || liftInfos.Count < 1) return default;
AppLiftInfo? appLiftInfo = liftInfos.Find(f => f.Tag!.Contains(lift!));
if (appLiftInfo == null) return default;
return appLiftInfo.Tag?.Split(',')[1];
}
} }

View File

@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<_PublishTargetUrl>F:\A开发项目\A菲达宝开项目\2024-08_上汽试制仓\应用程序\WcsService\WcsMain\bin\Release\net8.0\publish\</_PublishTargetUrl> <_PublishTargetUrl>F:\A开发项目\A菲达宝开项目\2024-08_上汽试制仓\应用程序\WcsService\WcsMain\bin\Release\net8.0\publish\</_PublishTargetUrl>
<History>True|2024-11-18T12:59:50.6846634Z||;True|2024-11-16T14:31:14.2653894+08:00||;True|2024-11-16T14:16:17.4271635+08:00||;True|2024-11-16T14:16:08.1284507+08:00||;True|2024-11-16T14:08:02.8639352+08:00||;True|2024-11-16T14:07:06.6785776+08:00||;True|2024-11-16T13:14:33.8282571+08:00||;True|2024-11-16T13:14:09.9233077+08:00||;True|2024-11-16T12:49:45.5891890+08:00||;True|2024-11-16T12:19:05.5997384+08:00||;True|2024-11-16T11:49:43.2660430+08:00||;True|2024-11-16T11:49:12.7318514+08:00||;True|2024-11-16T11:43:41.8128931+08:00||;True|2024-11-16T10:39:25.1387254+08:00||;True|2024-11-16T10:24:19.4879139+08:00||;True|2024-11-15T17:47:10.4630939+08:00||;True|2024-11-15T17:42:25.6985733+08:00||;True|2024-11-15T17:39:43.9409305+08:00||;True|2024-11-15T17:26:18.2886475+08:00||;True|2024-11-15T17:23:05.3112513+08:00||;True|2024-11-15T17:16:40.2960771+08:00||;True|2024-11-15T17:14:12.3416383+08:00||;True|2024-11-15T17:09:43.2642034+08:00||;True|2024-11-15T17:05:04.4694932+08:00||;False|2024-11-15T17:04:34.2335564+08:00||;False|2024-11-15T17:04:12.5281280+08:00||;True|2024-11-15T17:01:49.4325408+08:00||;False|2024-11-15T17:01:29.1872712+08:00||;True|2024-11-15T16:00:18.8617729+08:00||;True|2024-11-15T15:56:13.9285180+08:00||;True|2024-11-15T15:50:53.6121456+08:00||;True|2024-11-15T15:17:41.0508047+08:00||;True|2024-11-15T13:50:06.8021767+08:00||;True|2024-11-15T13:17:48.2695650+08:00||;True|2023-12-21T15:04:28.6290873+08:00||;True|2023-12-21T14:59:03.4454135+08:00||;True|2023-12-21T14:51:08.6690406+08:00||;True|2023-12-21T14:26:42.6801144+08:00||;False|2023-12-21T14:26:14.3256943+08:00||;True|2023-12-21T14:13:42.5511801+08:00||;True|2023-12-21T13:56:38.5871005+08:00||;True|2023-12-19T12:19:57.9900187+08:00||;True|2023-12-19T11:53:33.6930379+08:00||;True|2023-12-17T12:51:32.6510827+08:00||;False|2023-12-17T12:49:32.9022541+08:00||;</History> <History>True|2024-11-20T09:08:23.7162943Z||;True|2024-11-20T16:54:01.3629057+08:00||;True|2024-11-20T16:40:49.6894280+08:00||;True|2024-11-20T16:37:47.3670812+08:00||;False|2024-11-20T16:37:04.0777763+08:00||;True|2024-11-20T16:25:26.3145915+08:00||;True|2024-11-20T16:10:13.7558526+08:00||;True|2024-11-20T16:07:37.8681228+08:00||;True|2024-11-20T15:55:28.7196074+08:00||;True|2024-11-20T15:52:40.6653904+08:00||;True|2024-11-20T15:30:21.5138564+08:00||;True|2024-11-20T15:24:40.6286995+08:00||;True|2024-11-18T21:16:47.1821173+08:00||;True|2024-11-18T21:14:40.1209255+08:00||;True|2024-11-18T21:11:32.0010536+08:00||;True|2024-11-18T21:10:56.2142485+08:00||;True|2024-11-18T20:59:50.6846634+08:00||;True|2024-11-16T14:31:14.2653894+08:00||;True|2024-11-16T14:16:17.4271635+08:00||;True|2024-11-16T14:16:08.1284507+08:00||;True|2024-11-16T14:08:02.8639352+08:00||;True|2024-11-16T14:07:06.6785776+08:00||;True|2024-11-16T13:14:33.8282571+08:00||;True|2024-11-16T13:14:09.9233077+08:00||;True|2024-11-16T12:49:45.5891890+08:00||;True|2024-11-16T12:19:05.5997384+08:00||;True|2024-11-16T11:49:43.2660430+08:00||;True|2024-11-16T11:49:12.7318514+08:00||;True|2024-11-16T11:43:41.8128931+08:00||;True|2024-11-16T10:39:25.1387254+08:00||;True|2024-11-16T10:24:19.4879139+08:00||;True|2024-11-15T17:47:10.4630939+08:00||;True|2024-11-15T17:42:25.6985733+08:00||;True|2024-11-15T17:39:43.9409305+08:00||;True|2024-11-15T17:26:18.2886475+08:00||;True|2024-11-15T17:23:05.3112513+08:00||;True|2024-11-15T17:16:40.2960771+08:00||;True|2024-11-15T17:14:12.3416383+08:00||;True|2024-11-15T17:09:43.2642034+08:00||;True|2024-11-15T17:05:04.4694932+08:00||;False|2024-11-15T17:04:34.2335564+08:00||;False|2024-11-15T17:04:12.5281280+08:00||;True|2024-11-15T17:01:49.4325408+08:00||;False|2024-11-15T17:01:29.1872712+08:00||;True|2024-11-15T16:00:18.8617729+08:00||;True|2024-11-15T15:56:13.9285180+08:00||;True|2024-11-15T15:50:53.6121456+08:00||;True|2024-11-15T15:17:41.0508047+08:00||;True|2024-11-15T13:50:06.8021767+08:00||;True|2024-11-15T13:17:48.2695650+08:00||;True|2023-12-21T15:04:28.6290873+08:00||;True|2023-12-21T14:59:03.4454135+08:00||;True|2023-12-21T14:51:08.6690406+08:00||;True|2023-12-21T14:26:42.6801144+08:00||;False|2023-12-21T14:26:14.3256943+08:00||;True|2023-12-21T14:13:42.5511801+08:00||;True|2023-12-21T13:56:38.5871005+08:00||;True|2023-12-19T12:19:57.9900187+08:00||;True|2023-12-19T11:53:33.6930379+08:00||;True|2023-12-17T12:51:32.6510827+08:00||;False|2023-12-17T12:49:32.9022541+08:00||;</History>
<LastFailureDetails /> <LastFailureDetails />
</PropertyGroup> </PropertyGroup>
</Project> </Project>