diff --git a/Sln.Wcs.Model/Domain/BaseLocation.cs b/Sln.Wcs.Model/Domain/BaseLocation.cs index 6088d9c..c31beb4 100644 --- a/Sln.Wcs.Model/Domain/BaseLocation.cs +++ b/Sln.Wcs.Model/Domain/BaseLocation.cs @@ -40,7 +40,7 @@ namespace Sln.Wcs.Model.Domain /// 所属机台 /// [SugarColumn(ColumnName = "machine_id", ColumnDescription = "所属机台")] - public int? MachineId { get; set; } + public string? MachineId { get; set; } /// /// 库位编码 diff --git a/Sln.Wcs/Controllers/TaskController.cs b/Sln.Wcs/Controllers/TaskController.cs index 1324cfa..6f44ce1 100644 --- a/Sln.Wcs/Controllers/TaskController.cs +++ b/Sln.Wcs/Controllers/TaskController.cs @@ -25,7 +25,6 @@ namespace Sln.Wcs.Controllers public class TaskController : ControllerBase { private readonly CreateMainTask createMainTask; - private readonly ISqlSugarClient sqlSugarClient; private readonly IServiceProvider _serviceProvider; private readonly ISqlSugarClient _db; @@ -33,7 +32,6 @@ namespace Sln.Wcs.Controllers { _serviceProvider = serviceProvider; _db = _serviceProvider.GetService(); - sqlSugarClient = serviceProvider.GetRequiredService(); createMainTask = new CreateMainTask(_serviceProvider); } @@ -59,6 +57,9 @@ namespace Sln.Wcs.Controllers [HttpPost("agvCallback")] public void AgvCallback(AgvCallbackDto agvCallbackDto) { + //_db.AsTenant().ChangeDatabase("wcs"); + var sqlSugarClient = _db.CopyNew(); + sqlSugarClient.AsTenant().ChangeDatabase("wcs"); SubTaskInstance subTaskInstance = sqlSugarClient.Queryable().First(t => t.TaskCode == agvCallbackDto.taskCode); var mainTaskInstance = sqlSugarClient.Queryable().First(t => t.TaskCode == subTaskInstance.MaintaskCode); if (agvCallbackDto.method.ToLower() == "end") @@ -66,16 +67,15 @@ namespace Sln.Wcs.Controllers try { mainTaskInstance.ResultCode = 1; - var result = sqlSugarClient.Updateable(mainTaskInstance).ExecuteCommandAsync(); + var result = sqlSugarClient.Updateable(mainTaskInstance).UpdateColumns(x => new { + x.ResultCode, + }).ExecuteCommandAsync(); + sqlSugarClient.Deleteable(subTaskInstance).ExecuteCommandAsync(); + sqlSugarClient.AsTenant().CommitTranAsync(); } catch(Exception ex) { - mainTaskInstance.ResultCode = 1; - var result = sqlSugarClient.Updateable(mainTaskInstance).ExecuteCommandAsync(); - } - finally - { - sqlSugarClient.Deleteable(subTaskInstance); + sqlSugarClient.AsTenant().RollbackTranAsync(); } } } diff --git a/Sln.Wcs/Function/CreateMainTask.cs b/Sln.Wcs/Function/CreateMainTask.cs index 0ebe1d8..02cd030 100644 --- a/Sln.Wcs/Function/CreateMainTask.cs +++ b/Sln.Wcs/Function/CreateMainTask.cs @@ -27,325 +27,384 @@ namespace Sln.Wcs.Function public void CreateMainTaskByMessage(TaskInfo taskInfo) { - WcsTaskInstance taskInstance = new WcsTaskInstance(); - BaseTasktypeInfo baseTasktypeInfo = new BaseTasktypeInfo(); - List subTaskInstances = new List(); - taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); - taskInstance.Status = "Starting"; - taskInstance.CurrentSubtaskNo = 1; - taskInstance.CreateTime = DateTime.Now; - taskInstance.CreateUser = "wcs"; - - var startPoint = sqlSugarClient.Queryable().Where(x => x.LocationCode == taskInfo.TaskStartPoint).First(); - var endPoint = sqlSugarClient.Queryable().Where(x => x.LocationCode == taskInfo.TaskStartPoint).First(); - taskInstance.SourceLocation = startPoint.LocationCode; - taskInstance.TargetLocation = endPoint.LocationCode; - - - if (startPoint.WorkshopId == endPoint.WorkshopId) + try { - //同楼同层任务 - if (startPoint.WorkshopLevel == endPoint.WorkshopLevel) + sqlSugarClient.AsTenant().ChangeDatabase("wcs"); + sqlSugarClient.AsTenant().BeginTranAsync(); + WcsTaskInstance taskInstance = new WcsTaskInstance(); + BaseTasktypeInfo baseTasktypeInfo = new BaseTasktypeInfo(); + List subTaskInstances = new List(); + taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); + taskInstance.Status = "Starting"; + taskInstance.CurrentSubtaskNo = 0; + taskInstance.CreateTime = DateTime.Now; + taskInstance.CreateUser = "wcs"; + + var startPoint = sqlSugarClient.Queryable().Where(x => x.LocationCode == taskInfo.TaskStartPoint).First(); + var endPoint = sqlSugarClient.Queryable().Where(x => x.LocationCode == taskInfo.TaskEndPoint).First(); + taskInstance.SourceLocation = startPoint.LocationCode; + taskInstance.TargetLocation = endPoint.LocationCode; + + //同楼 + if (startPoint.WorkshopId == endPoint.WorkshopId) { - taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); - taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层运输任务"; - baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); - taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; - taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; - taskInstance.SubtaskCount = 1; - - SubTaskInstance subTaskInstance1 = new SubTaskInstance() + //同楼同层任务 + if (startPoint.WorkshopLevel == endPoint.WorkshopLevel) { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletXTGTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = startPoint.LocationCode, - EndPointId = endPoint.LocationCode, - CurrPointId = startPoint.LocationCode, - StartAGVPoint = startPoint.AgvPositionCode, - EndAGVPoint = endPoint.AgvPositionCode, - CurrAGVPoint = startPoint.AgvPositionCode, - CreatedBy = "wcs", - CreatedTime = DateTime.Now, - }; - subTaskInstances.Add(subTaskInstance1); - taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; - } - else //同楼不同层任务 - { - taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); - taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层到{endPoint.WorkshopId}楼-{endPoint.WorkshopLevel}层运输任务"; - baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); - taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; - taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; - taskInstance.SubtaskCount = 3; - var elevatorPoint1 = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == startPoint.WorkshopLevel).First(); - var elevatorPoint2 = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == endPoint.WorkshopLevel).First(); - - SubTaskInstance subTaskInstance1 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletGTXTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTXTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = startPoint.LocationCode, - EndPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", - CurrPointId = startPoint.LocationCode, - StartAGVPoint = startPoint.AgvPositionCode, - EndAGVPoint = elevatorPoint1.AgvPositionCode, - CurrAGVPoint = startPoint.AgvPositionCode, - CreatedBy = "wcs", - CreatedTime = DateTime.Now, - }; - - SubTaskInstance subTaskInstance2 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.ElevatorBoxTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.ElevatorBoxTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", - EndPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - CurrPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", - StartAGVPoint = elevatorPoint1.AgvPositionCode, - EndAGVPoint = elevatorPoint2.AgvPositionCode, - CurrAGVPoint = elevatorPoint1.AgvPositionCode, - CreatedBy = "wcs", - }; - - SubTaskInstance subTaskInstance3 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletXTGTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - EndPointId = endPoint.LocationCode, - CurrPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - StartAGVPoint = elevatorPoint2.AgvPositionCode, - EndAGVPoint = endPoint.AgvPositionCode, - CurrAGVPoint = elevatorPoint2.AgvPositionCode, - CreatedBy = "wcs", - }; - subTaskInstances.Add(subTaskInstance1); - subTaskInstances.Add(subTaskInstance2); - subTaskInstances.Add(subTaskInstance3); - taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; - } - } - else if (startPoint.WorkshopId != endPoint.WorkshopId) - { - //起点终点不包括15楼 - if (startPoint.WorkshopId != 15 && endPoint.WorkshopId != 15) - { - if (startPoint.WorkshopLevel != 2) - { - //预留 + SSTask(taskInstance, subTaskInstances, startPoint, endPoint); } + else //同楼不同层任务 + { + SDTask(taskInstance, subTaskInstances, startPoint, endPoint); + } + } + + //不同楼 + else if (startPoint.WorkshopId != endPoint.WorkshopId) + { + //起点终点不包括15楼 + if (startPoint.WorkshopId != 15 && endPoint.WorkshopId != 15) + { + if (startPoint.WorkshopLevel != 2) + { + //预留 + } + else + { + //预留 + } + } + //起点终点包括15楼 else { - //预留 + //前往连廊部分 + ArrivingTPTask(taskInstance, subTaskInstances, startPoint, endPoint); + + //离开连廊部分 + LeavingTPTask(taskInstance, subTaskInstances, endPoint); } } - //起点终点包括15楼 else { - //前往连廊部分 - if (startPoint.WorkshopLevel != 2) //如果不和连廊同层 - { - taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); - taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层到{endPoint.WorkshopId}楼-{endPoint.WorkshopLevel}层运输任务"; - baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); - taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; - taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; - taskInstance.SubtaskCount = 3; - var elevatorPoint1 = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == startPoint.WorkshopLevel).First(); - var elevatorPoint2 = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == 2).First(); - var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); - SubTaskInstance subTaskInstance1 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletXTGTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = startPoint.LocationCode, - EndPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", - CurrPointId = startPoint.LocationCode, - StartAGVPoint = startPoint.AgvPositionCode, - EndAGVPoint = elevatorPoint1.AgvPositionCode, - CurrAGVPoint = startPoint.AgvPositionCode, - CreatedBy = "wcs", - CreatedTime = DateTime.Now, - }; - if (startPoint.WorkshopId == 15) - { - subTaskInstance1.TaskType = StaticTaskType.MovePalletHTGTask; - subTaskInstance1.TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletHTGTask); - } - - SubTaskInstance subTaskInstance2 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.ElevatorBoxTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.ElevatorBoxTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", - EndPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - CurrPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", - StartAGVPoint = elevatorPoint1.AgvPositionCode, - EndAGVPoint = elevatorPoint2.AgvPositionCode, - CurrAGVPoint = elevatorPoint1.AgvPositionCode, - CreatedBy = "wcs", - }; - - SubTaskInstance subTaskInstance3 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletGTXJTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTXJTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - EndPointId = "连廊中转点", - CurrPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - StartAGVPoint = elevatorPoint2.AgvPositionCode, - EndAGVPoint = transformPoint.AgvPositionCode, - CurrAGVPoint = elevatorPoint2.AgvPositionCode, - CreatedBy = "wcs", - }; - subTaskInstances.Add(subTaskInstance1); - subTaskInstances.Add(subTaskInstance2); - subTaskInstances.Add(subTaskInstance3); - } - else //和连廊同层 - { - taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); - taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层到{endPoint.WorkshopId}楼-{endPoint.WorkshopLevel}层运输任务"; - baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); - taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; - taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; - taskInstance.SubtaskCount = 1; - var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); - SubTaskInstance subTaskInstance1 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletHTGJTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletHTGJTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = startPoint.LocationCode, - EndPointId = $"{transformPoint.WorkshopId}楼{transformPoint.WorkshopLevel}层中转点位", - CurrPointId = startPoint.LocationCode, - StartAGVPoint = startPoint.AgvPositionCode, - EndAGVPoint = transformPoint.AgvPositionCode, - CurrAGVPoint = startPoint.AgvPositionCode, - CreatedBy = "wcs", - CreatedTime = DateTime.Now, - }; - } - if (endPoint.WorkshopLevel != 2) - { - taskInstance.SubtaskCount = taskInstance.SubtaskCount + 3; - var elevatorPoint1 = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == endPoint.WorkshopId && x.WorkshopLevel == 2).First(); - var elevatorPoint2 = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == endPoint.WorkshopId && x.WorkshopLevel == endPoint.WorkshopLevel).First(); - var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); - SubTaskInstance subTaskInstance1 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletXTGJTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGJTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = "连廊中转点", - EndPointId = $"{elevatorPoint1.WorkshopId}楼2层提升机点位", - CurrPointId = "连廊中转点", - StartAGVPoint = transformPoint.AgvPositionCode, - EndAGVPoint = elevatorPoint1.AgvPositionCode, - CurrAGVPoint = transformPoint.AgvPositionCode, - CreatedBy = "wcs", - CreatedTime = DateTime.Now, - }; - - SubTaskInstance subTaskInstance2 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.ElevatorBoxTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.ElevatorBoxTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = $"{elevatorPoint1.WorkshopId}楼2层提升机点位", - EndPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - CurrPointId = $"{elevatorPoint1.WorkshopId}楼2层提升机点位", - StartAGVPoint = elevatorPoint1.AgvPositionCode, - EndAGVPoint = elevatorPoint2.AgvPositionCode, - CurrAGVPoint = elevatorPoint1.AgvPositionCode, - CreatedBy = "wcs", - }; - - SubTaskInstance subTaskInstance3 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletGTHTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTHTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - EndPointId = endPoint.LocationCode, - CurrPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", - StartAGVPoint = elevatorPoint2.AgvPositionCode, - EndAGVPoint = endPoint.AgvPositionCode, - CurrAGVPoint = elevatorPoint2.AgvPositionCode, - CreatedBy = "wcs", - }; - - if (endPoint.WorkshopId == 15) - { - subTaskInstance3.TaskType = StaticTaskType.MovePalletGTHJTask; - subTaskInstance3.TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTHJTask); - } - - subTaskInstances.Add(subTaskInstance1); - subTaskInstances.Add(subTaskInstance2); - subTaskInstances.Add(subTaskInstance3); - } - else - { - taskInstance.SubtaskCount++; - var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); - SubTaskInstance subTaskInstance1 = new SubTaskInstance() - { - TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), - TaskType = StaticTaskType.MovePalletGTHJTask, - TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTHJTask), - MaintaskCode = taskInstance.TaskCode, - TaskStatus = 0, - StartPointId = $"{transformPoint.WorkshopId}楼{transformPoint.WorkshopLevel}层中转点位", - EndPointId = endPoint.LocationCode, - CurrPointId = $"{transformPoint.WorkshopId}楼{transformPoint.WorkshopLevel}层中转点位", - StartAGVPoint = transformPoint.AgvPositionCode, - EndAGVPoint = endPoint.AgvPositionCode, - CurrAGVPoint = transformPoint.AgvPositionCode, - CreatedBy = "wcs", - CreatedTime = DateTime.Now, - }; - - subTaskInstances.Add(subTaskInstance1); - } } + + sqlSugarClient.Insertable(taskInstance).ExecuteCommand(); + } + catch (Exception ex) + { + _logger.Error(ex.Message); + sqlSugarClient.AsTenant().RollbackTranAsync(); + } + finally { + sqlSugarClient.AsTenant().CommitTranAsync(); + } + } + + private void LeavingTPTask(WcsTaskInstance taskInstance, List subTaskInstances, BaseLocation endPoint) + { + if (endPoint.WorkshopLevel != 2) + { + taskInstance.SubtaskCount = taskInstance.SubtaskCount + 3; + var elevator = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == endPoint.WorkshopId && x.WorkshopLevel == endPoint.WorkshopLevel).First(); + var elevatorPoint1 = sqlSugarClient.Queryable().Where(x => x.MachineId == elevator.EquipNo && x.WorkshopId == endPoint.WorkshopId && x.WorkshopLevel == 2).First(); + var elevatorPoint2 = sqlSugarClient.Queryable().Where(x => x.MachineId == elevator.EquipNo && x.WorkshopId == endPoint.WorkshopId && x.WorkshopLevel == endPoint.WorkshopLevel).First(); + var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); + SubTaskInstance subTaskInstance1 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletXTGJTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGJTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = "连廊中转点", + EndPointId = $"{elevatorPoint1.WorkshopId}楼2层提升机点位", + CurrPointId = "连廊中转点", + StartAGVPoint = transformPoint.AgvPositionCode, + EndAGVPoint = elevatorPoint1.AgvPositionCode, + CurrAGVPoint = transformPoint.AgvPositionCode, + CreatedBy = "wcs", + CreatedTime = DateTime.Now, + }; + + SubTaskInstance subTaskInstance2 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.ElevatorBoxTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.ElevatorBoxTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = $"{elevatorPoint1.WorkshopId}楼2层提升机点位", + EndPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + CurrPointId = $"{elevatorPoint1.WorkshopId}楼2层提升机点位", + StartAGVPoint = elevatorPoint1.AgvPositionCode, + EndAGVPoint = elevatorPoint2.AgvPositionCode, + CurrAGVPoint = elevatorPoint1.AgvPositionCode, + CreatedBy = "wcs", + }; + + SubTaskInstance subTaskInstance3 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletGTHTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTHTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + EndPointId = endPoint.LocationCode, + CurrPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + StartAGVPoint = elevatorPoint2.AgvPositionCode, + EndAGVPoint = endPoint.AgvPositionCode, + CurrAGVPoint = elevatorPoint2.AgvPositionCode, + CreatedBy = "wcs", + }; + + if (endPoint.WorkshopId == 15) + { + subTaskInstance3.TaskType = StaticTaskType.MovePalletGTHJTask; + subTaskInstance3.TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTHJTask); + } + + subTaskInstances.Add(subTaskInstance1); + subTaskInstances.Add(subTaskInstance2); + subTaskInstances.Add(subTaskInstance3); + + taskInstance.TaskParams = JsonConvert.SerializeObject(subTaskInstances); + taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; + sqlSugarClient.Insertable(taskInstance).ExecuteCommand(); } else { + taskInstance.SubtaskCount++; + var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); + SubTaskInstance subTaskInstance1 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletGTHJTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTHJTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = $"{transformPoint.WorkshopId}楼{transformPoint.WorkshopLevel}层中转点位", + EndPointId = endPoint.LocationCode, + CurrPointId = $"{transformPoint.WorkshopId}楼{transformPoint.WorkshopLevel}层中转点位", + StartAGVPoint = transformPoint.AgvPositionCode, + EndAGVPoint = endPoint.AgvPositionCode, + CurrAGVPoint = transformPoint.AgvPositionCode, + CreatedBy = "wcs", + CreatedTime = DateTime.Now, + }; + subTaskInstances.Add(subTaskInstance1); + taskInstance.TaskParams = JsonConvert.SerializeObject(subTaskInstances); + + taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; } - sqlSugarClient.Insertable(taskInstance).ExecuteCommand(); + } + + private void ArrivingTPTask(WcsTaskInstance taskInstance, List subTaskInstances, BaseLocation startPoint, BaseLocation endPoint) + { + BaseTasktypeInfo baseTasktypeInfo; + if (startPoint.WorkshopLevel != 2) //如果不和连廊同层 + { + taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); + taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层到{endPoint.WorkshopId}楼-{endPoint.WorkshopLevel}层运输任务"; + baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); + taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; + taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; + taskInstance.SubtaskCount = 3; + var elevator = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == startPoint.WorkshopLevel).First(); + var elevatorPoint1 = sqlSugarClient.Queryable().Where(x => x.MachineId == elevator.EquipNo && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == startPoint.WorkshopLevel).First(); + var elevatorPoint2 = sqlSugarClient.Queryable().Where(x => x.MachineId == elevator.EquipNo && x.WorkshopId == endPoint.WorkshopId && x.WorkshopLevel == 2).First(); + var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); + SubTaskInstance subTaskInstance1 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletXTGTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = startPoint.LocationCode, + EndPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", + CurrPointId = startPoint.LocationCode, + StartAGVPoint = startPoint.AgvPositionCode, + EndAGVPoint = elevatorPoint1.AgvPositionCode, + CurrAGVPoint = startPoint.AgvPositionCode, + CreatedBy = "wcs", + CreatedTime = DateTime.Now, + }; + + if (startPoint.WorkshopId == 15) + { + subTaskInstance1.TaskType = StaticTaskType.MovePalletHTGTask; + subTaskInstance1.TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletHTGTask); + } + + SubTaskInstance subTaskInstance2 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.ElevatorBoxTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.ElevatorBoxTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", + EndPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + CurrPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", + StartAGVPoint = elevatorPoint1.AgvPositionCode, + EndAGVPoint = elevatorPoint2.AgvPositionCode, + CurrAGVPoint = elevatorPoint1.AgvPositionCode, + CreatedBy = "wcs", + }; + + SubTaskInstance subTaskInstance3 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletGTXJTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTXJTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + EndPointId = "连廊中转点", + CurrPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + StartAGVPoint = elevatorPoint2.AgvPositionCode, + EndAGVPoint = transformPoint.AgvPositionCode, + CurrAGVPoint = elevatorPoint2.AgvPositionCode, + CreatedBy = "wcs", + }; + subTaskInstances.Add(subTaskInstance1); + subTaskInstances.Add(subTaskInstance2); + subTaskInstances.Add(subTaskInstance3); + taskInstance.TaskParams = JsonConvert.SerializeObject(subTaskInstances); + taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; + } + else //和连廊同层 + { + taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); + taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层到{endPoint.WorkshopId}楼-{endPoint.WorkshopLevel}层运输任务"; + baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); + taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; + taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; + taskInstance.SubtaskCount = 1; + var transformPoint = sqlSugarClient.Queryable().Where(x => x.EquipType == 4 && x.WorkshopId == 1415 && x.WorkshopLevel == 2 && x.ContainerCode == null).First(); + SubTaskInstance subTaskInstance1 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletHTGJTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletHTGJTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = startPoint.LocationCode, + EndPointId = $"{transformPoint.WorkshopId}楼{transformPoint.WorkshopLevel}层中转点位", + CurrPointId = startPoint.LocationCode, + StartAGVPoint = startPoint.AgvPositionCode, + EndAGVPoint = transformPoint.AgvPositionCode, + CurrAGVPoint = startPoint.AgvPositionCode, + CreatedBy = "wcs", + CreatedTime = DateTime.Now, + }; + taskInstance.TaskParams = JsonConvert.SerializeObject(subTaskInstances); + taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; + } + + + } + + private void SDTask(WcsTaskInstance taskInstance, List subTaskInstances, BaseLocation startPoint, BaseLocation endPoint) + { + BaseTasktypeInfo baseTasktypeInfo; + taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); + taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层到{endPoint.WorkshopId}楼-{endPoint.WorkshopLevel}层运输任务"; + baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); + taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; + taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; + taskInstance.SubtaskCount = 3; + var elevator = sqlSugarClient.Queryable().Where(x => x.EquipType == 3 && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == startPoint.WorkshopLevel).First(); + var elevatorPoint1 = sqlSugarClient.Queryable().Where(x => x.MachineId == elevator.EquipNo && x.WorkshopId == startPoint.WorkshopId && x.WorkshopLevel == startPoint.WorkshopLevel).First(); + var elevatorPoint2 = sqlSugarClient.Queryable().Where(x => x.MachineId == elevator.EquipNo && x.WorkshopId == endPoint.WorkshopId && x.WorkshopLevel == endPoint.WorkshopLevel).First(); + + SubTaskInstance subTaskInstance1 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletGTXTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletGTXTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = startPoint.LocationCode, + EndPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", + CurrPointId = startPoint.LocationCode, + StartAGVPoint = startPoint.AgvPositionCode, + EndAGVPoint = elevatorPoint1.AgvPositionCode, + CurrAGVPoint = startPoint.AgvPositionCode, + CreatedBy = "wcs", + CreatedTime = DateTime.Now, + }; + + SubTaskInstance subTaskInstance2 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.ElevatorBoxTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.ElevatorBoxTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", + EndPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + CurrPointId = $"{elevatorPoint1.WorkshopId}楼{elevatorPoint1.WorkshopLevel}层提升机点位", + StartAGVPoint = elevatorPoint1.AgvPositionCode, + EndAGVPoint = elevatorPoint2.AgvPositionCode, + CurrAGVPoint = elevatorPoint1.AgvPositionCode, + CreatedBy = "wcs", + }; + + SubTaskInstance subTaskInstance3 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletXTGTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + EndPointId = endPoint.LocationCode, + CurrPointId = $"{elevatorPoint2.WorkshopId}楼{elevatorPoint2.WorkshopLevel}层提升机点位", + StartAGVPoint = elevatorPoint2.AgvPositionCode, + EndAGVPoint = endPoint.AgvPositionCode, + CurrAGVPoint = elevatorPoint2.AgvPositionCode, + CreatedBy = "wcs", + }; + subTaskInstances.Add(subTaskInstance1); + subTaskInstances.Add(subTaskInstance2); + subTaskInstances.Add(subTaskInstance3); + taskInstance.TaskParams = JsonConvert.SerializeObject(subTaskInstances); + taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; + } + + private void SSTask(WcsTaskInstance taskInstance, List subTaskInstances, BaseLocation startPoint, BaseLocation endPoint) + { + BaseTasktypeInfo baseTasktypeInfo; + taskInstance.TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(); + taskInstance.TaskName = $"{startPoint.WorkshopId}楼-{startPoint.WorkshopLevel}层运输任务"; + baseTasktypeInfo = sqlSugarClient.Queryable().Where(x => x.TaskTypeKey == "001").First(); + taskInstance.TaskTypeKey = baseTasktypeInfo.TaskTypeKey; + taskInstance.TaskTypeName = baseTasktypeInfo.TaskTypeName; + taskInstance.SubtaskCount = 1; + + SubTaskInstance subTaskInstance1 = new SubTaskInstance() + { + TaskCode = SnowflakeIdGenerator.GenerateSnowflakeId(), + TaskType = StaticTaskType.MovePalletXTGTask, + TaskName = StaticTaskType.GetDescription(StaticTaskType.MovePalletXTGTask), + MaintaskCode = taskInstance.TaskCode, + TaskStatus = 0, + StartPointId = startPoint.LocationCode, + EndPointId = endPoint.LocationCode, + CurrPointId = startPoint.LocationCode, + StartAGVPoint = startPoint.AgvPositionCode, + EndAGVPoint = endPoint.AgvPositionCode, + CurrAGVPoint = startPoint.AgvPositionCode, + CreatedBy = "wcs", + CreatedTime = DateTime.Now, + }; + subTaskInstances.Add(subTaskInstance1); + taskInstance.TaskParams = JsonConvert.SerializeObject(subTaskInstances); + taskInstance.CurrentSubtaskCode = subTaskInstance1.TaskCode; } } } diff --git a/Sln.Wcs/Function/MainTaskControl.cs b/Sln.Wcs/Function/MainTaskControl.cs index ef1356d..6e68f61 100644 --- a/Sln.Wcs/Function/MainTaskControl.cs +++ b/Sln.Wcs/Function/MainTaskControl.cs @@ -37,7 +37,7 @@ namespace Sln.Wcs.Function while (true) { await ExecuteMainTaskAsync(); - await Task.Delay(1000); + await Task.Delay(5000); } }); } @@ -65,16 +65,20 @@ namespace Sln.Wcs.Function continue; } + string TaskJson = item.TaskParams.Trim('"'); + TaskJson = TaskJson.Replace("\\\"", "\""); + item.UpdateTime = DateTime.Now; switch (item.Status) { case "Starting": try { + item.UpdateTime = DateTime.Now; if (!string.IsNullOrEmpty(item.TaskParams)) { - List taskParams = JsonConvert.DeserializeObject>(item.TaskParams); + List taskParams = JsonConvert.DeserializeObject>(TaskJson); var firstSubtask = taskParams.First(); var subtaskId = await sqlSugarClient.Insertable(firstSubtask).ExecuteReturnIdentityAsync(); if (subtaskId > 0) @@ -86,7 +90,7 @@ namespace Sln.Wcs.Function await sqlSugarClient.Updateable(item) .UpdateColumns(x => new { - x.SubtaskCount, + x.CurrentSubtaskNo, x.CurrentSubtaskCode, x.Status, x.UpdateTime @@ -121,7 +125,7 @@ namespace Sln.Wcs.Function item.UpdateTime = DateTime.Now; if (!string.IsNullOrEmpty(item.TaskParams)) { - List taskParams = JsonConvert.DeserializeObject>(item.TaskParams); + List taskParams = JsonConvert.DeserializeObject>(TaskJson); int currenttaskno = (int)(item.CurrentSubtaskNo); var Subtask = taskParams[currenttaskno]; var subtaskId = await sqlSugarClient.Insertable(Subtask).ExecuteReturnIdentityAsync(); @@ -132,9 +136,10 @@ namespace Sln.Wcs.Function item.CurrentSubtaskNo++; item.Status = "Running"; // 更新主任务状态为执行中 item.ResultCode = 0; // 更新分任务标志位 + item.UpdateTime = DateTime.Now; await sqlSugarClient.Updateable(item) .UpdateColumns(x => new { - x.SubtaskCount, + x.CurrentSubtaskNo, x.CurrentSubtaskCode, x.Status, x.ResultCode, @@ -142,7 +147,7 @@ namespace Sln.Wcs.Function }) .ExecuteCommandAsync(); - _logger.Info($"主任务 {item.TaskCode} 已启动,创建第一个子任务 {item.TaskCode}"); + _logger.Info($"主任务 {item.TaskCode} 已启动,创建子任务 {item.TaskCode}"); } } else diff --git a/Sln.Wcs/Function/SubTaskControl.cs b/Sln.Wcs/Function/SubTaskControl.cs index 9bd5037..756a47a 100644 --- a/Sln.Wcs/Function/SubTaskControl.cs +++ b/Sln.Wcs/Function/SubTaskControl.cs @@ -39,6 +39,7 @@ namespace Sln.Wcs.Function hikRoBotService = serviceProvider.GetRequiredService(); sqlSugarClient = serviceProvider.GetRequiredService(); _logger = serviceProvider.GetRequiredService(); + } /// @@ -55,7 +56,7 @@ namespace Sln.Wcs.Function while (true) { await ExecuteSubTaskAsync(); - await Task.Delay(1000); + await Task.Delay(5000); } }); } @@ -73,7 +74,9 @@ namespace Sln.Wcs.Function { try { - List taskList = sqlSugarClient.Queryable().OrderBy(x => x.CreatedTime).ToList(); + sqlSugarClient.AsTenant().ChangeDatabase("wcs"); + var db = sqlSugarClient.CopyNew(); + List taskList = db.Queryable().OrderBy(x => x.CreatedTime).ToList(); foreach (SubTaskInstance item in taskList) { item.UpdatedTime = DateTime.Now; @@ -117,9 +120,10 @@ namespace Sln.Wcs.Function { try { - var wcsLocation = sqlSugarClient.Queryable().First(t => t.LocationCode == task.CurrAGVPoint); + var db = sqlSugarClient.CopyNew(); + var wcsLocation = db.Queryable().First(t => t.AgvPositionCode == task.CurrAGVPoint); workShopPlc1 = base.GetPlcByKey("workshop" + wcsLocation.WorkshopId + "Plc"); - WcsBaseDictionary wcsBaseDictionary = sqlSugarClient.Queryable().First(t => t.Id == task.TaskType); + WcsBaseDictionary wcsBaseDictionary = db.Queryable().First(t => t.Id == task.TaskType); List PathList = new List(); PathList.Add(new Position { positionCode = task.CurrAGVPoint, type = "00" }); PathList.Add(new Position { positionCode = task.EndAGVPoint, type = "00" }); @@ -130,11 +134,15 @@ namespace Sln.Wcs.Function taskTyp = wcsBaseDictionary.DicValue, ctnrTyp = "2", }; + var result = hikRoBotService.GetGenAgvSchedulingTask(agvTask); + + result.code = 0; //测试用,记得删除 + if (result.code == 0) { task.TaskStatus = 1; - var updateflag = sqlSugarClient.Updateable(task).ExecuteCommandAsync(); + var updateflag = db.Updateable(task).ExecuteCommandAsync(); } } @@ -153,10 +161,11 @@ namespace Sln.Wcs.Function { try { - var startLocation = sqlSugarClient.Queryable().First(t => t.LocationCode == task.CurrAGVPoint); - var endLocation = sqlSugarClient.Queryable().First(t => t.LocationCode == task.EndAGVPoint); + var db = sqlSugarClient.CopyNew(); + var startLocation = db.Queryable().First(t => t.AgvPositionCode == task.CurrAGVPoint); + var endLocation = db.Queryable().First(t => t.AgvPositionCode == task.EndAGVPoint); workShopPlc1 = base.GetPlcByKey("workshop" + startLocation.WorkshopId + "Plc"); - var elevator = sqlSugarClient.Queryable().First(t => t.EquipNo == task.EquipmentNo); + var elevator = db.Queryable().First(t => t.EquipNo == task.EquipmentNo); if (workShopPlc1 == null || !workShopPlc1.IsConnected) { @@ -221,10 +230,10 @@ namespace Sln.Wcs.Function workShopPlc1.writeBoolByAddress("提升完成", true); //继续下一步任务<-待定 if (workShopPlc1.readBoolByAddress(elevator.EquipName + "提升机"+ NumberConverter((int)endLocation.WorkshopLevel) + "楼接驳位状态")) { - var mainTask = sqlSugarClient.Queryable().First(t => t.TaskCode == task.MaintaskCode); + var mainTask = db.Queryable().First(t => t.TaskCode == task.MaintaskCode); mainTask.ResultCode = 1; - sqlSugarClient.Updateable(mainTask).ExecuteCommand(); - sqlSugarClient.Deleteable(task).ExecuteCommand(); + db.Updateable(mainTask).ExecuteCommand(); + db.Deleteable(task).ExecuteCommand(); return; } } @@ -232,12 +241,12 @@ namespace Sln.Wcs.Function sqlSugarClient.AsTenant().BeginTran(); try { - sqlSugarClient.Updateable(task).ExecuteCommand(); - sqlSugarClient.AsTenant().CommitTran(); + db.Updateable(task).ExecuteCommand(); + db.AsTenant().CommitTran(); } catch (Exception ex) { - sqlSugarClient.AsTenant().RollbackTran(); + db.AsTenant().RollbackTran(); _logger.Error("提交事务异常:" + ex.Message); } } diff --git a/Sln.Wcs/MainCentralControl.cs b/Sln.Wcs/MainCentralControl.cs index 760580a..a067d0b 100644 --- a/Sln.Wcs/MainCentralControl.cs +++ b/Sln.Wcs/MainCentralControl.cs @@ -77,7 +77,7 @@ namespace Sln.Wcs var subtaskcontrol = new SubTaskControl(serviceProvider); maintaskcontrol.StartPoint(); - //subtaskcontrol.StartPoint(); + subtaskcontrol.StartPoint(); StartCheckStatus(); //GetAgvStatus(); _logger.Agv("WCS调度程序启动成功!"); diff --git a/Sln.Wcs/Program.cs b/Sln.Wcs/Program.cs index 609f93b..f9eb3cf 100644 --- a/Sln.Wcs/Program.cs +++ b/Sln.Wcs/Program.cs @@ -22,12 +22,19 @@ using Sln.Wcs.Function.Functions; using Sln.Wcs.Rfid; using System.Windows; using Sln.Wcs.ElevatorSdk; +using Sln.Wcs.Repository.@base; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Hosting; +using Swashbuckle; +using Microsoft.OpenApi; namespace Sln.Wcs { public class Program { + private static IConfiguration _apolloConfiguration; [STAThread] + static async Task Main(string[] args) { var services = new ServiceCollection(); @@ -41,9 +48,10 @@ namespace Sln.Wcs var log = serviceProvider.GetService(); var sqlconfig = serviceProvider.GetRequiredService(); - - #region 测试场地 + var cts = new CancellationTokenSource(); + var apiTask = StartSwaggerApiServer(_apolloConfiguration, serviceProvider, cts.Token); + Thread wpfThread = new Thread(() => { Sln_Wpf.App app = new Sln_Wpf.App(); @@ -60,36 +68,13 @@ namespace Sln.Wcs MainCentralControl mainCentralControl = new MainCentralControl(serviceProvider); mainCentralControl.Start(); - sqlconfig.AsTenant().ChangeDatabase("wcs"); - //var configtable = sqlconfig.Queryable().First(); - BaseConfigInfo baseConfigInfo = new BaseConfigInfo(); - baseConfigInfo.ConfigKey = "测试场地"; - baseConfigInfo.ConfigValue = "测试"; - baseConfigInfo.CreateTime = DateTime.Now; - baseConfigInfo.IsFlag = 1; - baseConfigInfo.Type = "bool"; - baseConfigInfo.PlcConfigId = 1; - var plcSqlServer = new plcSqlFunction(serviceProvider); - //plcSqlServer.insertFunction(baseConfigInfo); - //plcSqlServer.deleteFunction(baseConfigInfo); - - var material = new BaseMaterialInfo - { - MaterialCode = "MAT001", - MaterialName = "测试物料", - MaterialType = "原材料", - MaterialCategory = "电子", - Status = 1, - IsDeleted = false, - CreateUser = "admin", - UpdateUser = "admin" - }; - var MaterialSqlServer = new materialinfoSqlFunction(serviceProvider); - MaterialSqlServer.insertFunction(material); #endregion log.Info($"系统启动成功,日志存放位置:{config["logPath"]}"); + await Task.WhenAny(apiTask); + cts.Cancel(); } + private static void ConfigureServices(IServiceCollection services) { @@ -134,8 +119,6 @@ namespace Sln.Wcs services.AddRfidFactorySetup(); - services.AddElevatorSetup(); - services.AddFusionCache() .WithSerializer( new FusionCacheNewtonsoftJsonSerializer() @@ -146,6 +129,63 @@ namespace Sln.Wcs })); } + private static async Task StartSwaggerApiServer(IConfiguration configuration, IServiceProvider serviceProvider, CancellationToken cancellationToken) + { + // 需要安装: dotnet add package Microsoft.AspNetCore.App + var builder = WebApplication.CreateBuilder(); + + // 复用配置 + builder.Services.AddSingleton(configuration); + + // 如果有需要从 serviceProvider 复制的服务,可以在这里添加 + // 例如:builder.Services.AddSingleton(serviceProvider.GetService()); + builder.Services.AddSingleton(serviceProvider.GetService()); + builder.Services.AddSingleton(serviceProvider.GetService()); + + builder.Services.AddControllers() + .AddApplicationPart(Assembly.LoadFrom(Path.Combine(AppContext.BaseDirectory, "Sln.Wcs.HikRoBotApi.dll"))) + .AddControllersAsServices(); // 使用容器中的服务 + + // 添加 Swagger + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(c => + { + c.SwaggerDoc("v1", new OpenApiInfo + { + Title = "WCS AGV API", + Version = "v1", + Description = "海康AGV调度系统内部API" + }); + }); + + var app = builder.Build(); + + // 配置 Swagger UI + app.UseSwagger(); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("/swagger/v1/swagger.json", "WCS API V1"); + c.RoutePrefix = "swagger"; // 访问地址:http://localhost:端口/swagger + }); + + // 路由配置 + app.UseRouting(); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + + // 从配置读取端口,默认 5000 + var port = configuration["InternalApiPort"] ?? "5000"; + var urls = $"http://*:{port}"; + app.Urls.Add(urls); + + Console.WriteLine($"[Swagger API] 启动,监听: {urls}"); + Console.WriteLine($"[Swagger API] 文档地址: http://localhost:{port}/swagger"); + + await app.RunAsync(cancellationToken); + } + /// /// Apollo 配置中心 /// @@ -171,6 +211,8 @@ namespace Sln.Wcs apolloConfiguration = configurationBuilder.Build(); + _apolloConfiguration = configurationBuilder.Build(); + services.Remove(new ServiceDescriptor(typeof(IConfiguration), localConfiguration)); services.AddSingleton(apolloConfiguration); } diff --git a/Sln.Wcs/Sln.Wcs.csproj b/Sln.Wcs/Sln.Wcs.csproj index ab731a0..9bf35fe 100644 --- a/Sln.Wcs/Sln.Wcs.csproj +++ b/Sln.Wcs/Sln.Wcs.csproj @@ -26,6 +26,8 @@ + + diff --git a/Sln_Wpf/Page/AddWindows/AddEquipWindow.xaml.cs b/Sln_Wpf/Page/AddWindows/AddEquipWindow.xaml.cs index b181548..db4a4d7 100644 --- a/Sln_Wpf/Page/AddWindows/AddEquipWindow.xaml.cs +++ b/Sln_Wpf/Page/AddWindows/AddEquipWindow.xaml.cs @@ -16,6 +16,8 @@ using Sln.Wcs.Function; using SqlSugar; using Sln.Wcs.Function.Functions; using Microsoft.Extensions.DependencyInjection; +using Sln.Wcs.Repository.@base; +using Sln.Wcs.Repository; namespace Sln_Wpf.Page { @@ -29,12 +31,15 @@ namespace Sln_Wpf.Page /// public BaseEquipInfo NewDevice { get; private set; } private ISqlSugarClient? sqlSugarClient; + private BaseServiceImpl baseService; private equipInfoSqlFunction EquipInfoSqlFunction; private int WorkingType; public AddEquipWindow() { InitializeComponent(); + sqlSugarClient = App.ServiceProvider.GetService(); + baseService = new BaseServiceImpl(new Repository(sqlSugarClient)); EquipInfoSqlFunction = new equipInfoSqlFunction(App.ServiceProvider); WorkingType = 0; } @@ -43,7 +48,7 @@ namespace Sln_Wpf.Page { InitializeComponent(); sqlSugarClient = App.ServiceProvider.GetService(); - EquipInfoSqlFunction = new equipInfoSqlFunction(App.ServiceProvider); + baseService = new BaseServiceImpl(new Repository(sqlSugarClient)); WorkingType = 1; TxtEquipNo.Text = equipInfo.EquipNo; TxtEquipName.Text = equipInfo.EquipName; @@ -80,8 +85,7 @@ namespace Sln_Wpf.Page int Typeflag = 0; int level = Convert.ToInt32(((CmbWorkshopLevel.SelectedItem as ComboBoxItem)?.Content.ToString() ?? "1F").Substring(0, 1)); Typeflag = StringTypetoInt(); - sqlSugarClient.Updateable().Where(it => it.EquipNo == TxtEquipNo.Text.Trim()).SetColumns(it => new BaseEquipInfo() - { + NewDevice = new BaseEquipInfo { EquipNo = TxtEquipNo.Text.Trim(), EquipName = TxtEquipName.Text.Trim(), EquipType = Typeflag, @@ -89,7 +93,8 @@ namespace Sln_Wpf.Page ServerPort = Convert.ToInt32(TxtServerPort.Text), WorkshopLevel = level, UseFlag = ChkUseFlag.IsChecked == true ? 1 : 0, - }).ExecuteCommand(); + }; + baseService.Update(NewDevice, $"equip_no = '{TxtEquipNo.Text.Trim()}'"); DialogResult = true; Close(); } @@ -101,8 +106,6 @@ namespace Sln_Wpf.Page return; int Typeflag = 0; Typeflag = StringTypetoInt(); - - // 创建设备信息对象 NewDevice = new BaseEquipInfo { @@ -114,7 +117,7 @@ namespace Sln_Wpf.Page WorkshopLevel = Convert.ToInt32(((CmbWorkshopLevel.SelectedItem as ComboBoxItem)?.Content.ToString() ?? "1F").Substring(0, 1)), UseFlag = ChkUseFlag.IsChecked == true ? 1 : 0, }; - EquipInfoSqlFunction.insertFunction(NewDevice); + baseService.Insert(NewDevice); DialogResult = true; Close(); } diff --git a/Sln_Wpf/Page/AddWindows/AddLocationWindow.xaml.cs b/Sln_Wpf/Page/AddWindows/AddLocationWindow.xaml.cs index df2dba1..5fd4d9f 100644 --- a/Sln_Wpf/Page/AddWindows/AddLocationWindow.xaml.cs +++ b/Sln_Wpf/Page/AddWindows/AddLocationWindow.xaml.cs @@ -106,7 +106,7 @@ namespace Sln_Wpf.Page.AddWindows NewLocation = new BaseLocation { WarehouseId = Convert.ToInt32(TxtWarehouseID.Text.Trim()), - MachineId = Convert.ToInt32(TxtMachineID.Text.Trim()), + MachineId = TxtMachineID.Text.Trim(), LocationCode = TxtLocationCode.Text.Trim(), AgvPositionCode = TxtAgvPositionCode.Text.Trim(), ContainerCode = TxtContainerCode.Text.Trim(), @@ -127,7 +127,7 @@ namespace Sln_Wpf.Page.AddWindows sqlSugarClient.Updateable().Where(it => it.LocationCode == TxtLocationCode.Text.Trim()).SetColumns(it => new BaseLocation() { WarehouseId = Convert.ToInt32(TxtWarehouseID.Text.Trim()), - MachineId = Convert.ToInt32(TxtMachineID.Text.Trim()), + MachineId = TxtMachineID.Text.Trim(), LocationCode = TxtLocationCode.Text.Trim(), AgvPositionCode = TxtAgvPositionCode.Text.Trim(), ContainerCode = TxtContainerCode.Text.Trim(), @@ -141,7 +141,7 @@ namespace Sln_Wpf.Page.AddWindows NewLocation = new BaseLocation { WarehouseId = Convert.ToInt32(TxtWarehouseID.Text.Trim()), - MachineId = Convert.ToInt32(TxtMachineID.Text.Trim()), + MachineId = TxtMachineID.Text.Trim(), LocationCode = TxtLocationCode.Text.Trim(), AgvPositionCode = TxtAgvPositionCode.Text.Trim(), ContainerCode = TxtContainerCode.Text.Trim(), diff --git a/Sln_Wpf/Page/DeviceInfo.xaml.cs b/Sln_Wpf/Page/DeviceInfo.xaml.cs index 3d48860..4686321 100644 --- a/Sln_Wpf/Page/DeviceInfo.xaml.cs +++ b/Sln_Wpf/Page/DeviceInfo.xaml.cs @@ -81,7 +81,12 @@ namespace Sln_Wpf.Page private void BtnAdd_Click(object sender, RoutedEventArgs e) { AddEquipWindow addEquipWindow = new AddEquipWindow(); - addEquipWindow.ShowDialog(); + bool? result = addEquipWindow.ShowDialog(); + if (result == true) + { + _equips = sqlSugarClient.Queryable().ToList(); + BindDeviceData(); + } // 实际项目中:打开新增设备对话框,输入设备信息后保存 } @@ -94,7 +99,12 @@ namespace Sln_Wpf.Page return; } AddEquipWindow addEquipWindow = new AddEquipWindow(_selectedDevice); - addEquipWindow.ShowDialog(); + bool? result = addEquipWindow.ShowDialog(); + if (result == true) + { + _equips = sqlSugarClient.Queryable().ToList(); + BindDeviceData(); + } } // 设备信息 - 删除