| | |
| | | using Furion.Logging; |
| | | using IoTClient; |
| | | using Microsoft.AspNetCore.SignalR; |
| | | using Qiniu.Storage; |
| | | using RazorEngine.Compilation.ImpromptuInterface.Dynamic; |
| | | using SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global.Models; |
| | | using System; |
| | | using System.Data; |
| | | using System.Reflection.Emit; |
| | | |
| | |
| | | .SetColumns(s => s.Status == TaskStatusEnum.Doing) |
| | | .Where(s => s.Id == modTask.Id) |
| | | .ExecuteCommand(); |
| | | |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | WcsTaskMonitor modInsertTaskMonitor; |
| | | if (string.IsNullOrEmpty(taskInfo.EndStation)) |
| | | { |
| | |
| | | modTask.Status = TaskStatusEnum.Complete; |
| | | modTask.FinishDate = DateTime.Now; |
| | | _db.Updateable(modTask).ExecuteCommand(); |
| | | |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | var modcTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = modTask.TaskNo, |
| | |
| | | break; |
| | | case "843": |
| | | { |
| | | |
| | | //空取货异常 |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号"); |
| | | var (result, TaskNo) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); |
| | | if (!result.IsSucceed) |
| | | break; |
| | | string taskNo = Convert.ToString(TaskNo); |
| | | var modTask = _db.Queryable<WcsTask>().First(s => s.TaskNo == taskNo && s.Status == TaskStatusEnum.Doing); |
| | | if (modTask == null) |
| | | { |
| | | Log.Error($"【堆垛机】当前任务号不存在对应的任务,任务号:{modTask.TaskNo}"); |
| | | break; |
| | | } |
| | | var res = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "844"); |
| | | if (!res.IsSucceed) |
| | | break; |
| | | modTask.Status = TaskStatusEnum.Exception; |
| | | _db.Updateable(modTask).UpdateColumns(s => s.Status).ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | Log.Information($"【堆垛机】wcs任务变更空取异常,任务号:{modTask.TaskNo}"); |
| | | var modTaskRequest = modTask.Adapt<TaskRequest>(); |
| | | HttpService httpService = new HttpService(); |
| | | var modResponseTask = httpService.RequestEmptyException(modTaskRequest).Result; |
| | | if (modResponseTask.StatusCode == "0") |
| | | { |
| | | //请求成功 |
| | | modTask.IsSuccess = TaskSuccessEnum.Success; |
| | | _db.Updateable(modTask).UpdateColumns(s => s.IsSuccess).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | } |
| | | else |
| | | { |
| | | //请求失败 |
| | | modTask.IsSuccess = TaskSuccessEnum.Fail; |
| | | modTask.Information = modResponseTask.Message; |
| | | _db.Updateable(modTask).UpdateColumns(s => new { s.IsSuccess, s.Information }).ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | } |
| | | } |
| | | break; |
| | | case "861": |
| | | { |
| | | //满放货异常 |
| | | var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号"); |
| | | var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "托盘号"); |
| | | var (result, TaskNo) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); |
| | | if (!result.IsSucceed) |
| | | break; |
| | | string taskNo = Convert.ToString(TaskNo); |
| | | var modTask = _db.Queryable<WcsTask>().First(s => s.TaskNo == taskNo && s.Status == TaskStatusEnum.Doing); |
| | | if (modTask == null) |
| | | { |
| | | Log.Error($"【堆垛机】当前任务号不存在对应的任务,任务号:{modTask.TaskNo}"); |
| | | break; |
| | | } |
| | | modTask.Status = TaskStatusEnum.Exception; |
| | | _db.Updateable(modTask).UpdateColumns(s => s.Status).ExecuteCommand(); |
| | | _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); |
| | | Log.Information($"【堆垛机】wcs任务变更满取异常,任务号:{modTask.TaskNo}"); |
| | | var modTaskRequest = modTask.Adapt<TaskRequest>(); |
| | | HttpService httpService = new HttpService(); |
| | | var modResponseTask = httpService.RequestFullException(modTaskRequest).Result; |
| | | if (modResponseTask.StatusCode == "0") |
| | | { |
| | | //修改任务为正在执行 |
| | | modTask.Status = TaskStatusEnum.Doing; |
| | | _db.Updateable(modTask).UpdateColumns(s => s.Status).ExecuteCommand(); |
| | | // 起始排列层 |
| | | var modPosRow = modDevice.listStation.FirstOrDefault(s => s.Text == "取货排"); |
| | | var modPosColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "取货列"); |
| | | var modPosStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "取货层"); |
| | | // 目标放货工位 |
| | | var modPosEndRow = modDevice.listStation.FirstOrDefault(s => s.Text == "放货排"); |
| | | var modPosEndColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "放货列"); |
| | | var modPosEndStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "放货层"); |
| | | string endLocat = modResponseTask.TaskList.EndLocate; |
| | | string row = int.Parse(endLocat.Substring(0, 2)).ToString(); |
| | | string column = int.Parse(endLocat.Substring(2, 2)).ToString(); |
| | | string storey = int.Parse(endLocat.Substring(4, 2)).ToString(); |
| | | |
| | | // 给PLC写入任务数据 |
| | | var listResult = new List<Result>(); |
| | | // 任务号托盘号 |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); |
| | | // 起始排列层 |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, "2")); |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, "100")); |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, "1")); |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, row)); |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, column)); |
| | | listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey)); |
| | | // 是否写入成功 |
| | | if (listResult.All(s => s.IsSucceed)) |
| | | { |
| | | // 向跺机写入控制流程字 |
| | | var res = modDevice.PLCUtil.SetPlcDBValue(modDevice.PosType, modDevice.WcsPos, "862"); |
| | | var modcTaskMonitor = new WcsTaskMonitor() |
| | | { |
| | | TaskNo = modTask.TaskNo, |
| | | PlcId = modDevice.Id, |
| | | PlcName = modDevice.Text, |
| | | PalletNo = modTask.PalletNo, |
| | | Status = TaskStatusEnum.Complete, |
| | | StartLocat = modDevice.StationNum, |
| | | EndLocat = endLocat, |
| | | InteractiveMsg = $"写入指令:{modDevice.StationNum}工位====》" + endLocat + "储位地址!" |
| | | }; |
| | | // 插入交互日志 |
| | | _db.Insertable(modcTaskMonitor).ExecuteCommand(); |
| | | //下发任务日志 |
| | | _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); |
| | | } |
| | | |
| | | } |
| | | //else |
| | | //{ |
| | | // //请求失败 |
| | | // modTask.IsSuccess = TaskSuccessEnum.Fail; |
| | | // modTask.Information = modResponseTask.Message; |
| | | // _db.Updateable(modTask).UpdateColumns(s => new { s.IsSuccess, s.Information }).ExecuteCommand(); |
| | | //} |
| | | } |
| | | break; |
| | | default: |