using Jc.SnowId; using Khd.Core.Application.Interface; using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using System; using System.Linq; using Z.EntityFramework.Plus; namespace Khd.Core.Application { public class WcsTaskApplication : IWcsTaskApplication { private readonly DefaultDbContext _dbContext; private readonly static JcSnowId _snowId = new JcSnowId(); public WcsTaskApplication(IServiceProvider serviceProvider) { _dbContext = serviceProvider.GetService(); } public WcsTask Get(int id) { var entity = _dbContext.WcsTask .Where(c => 1 == 1) .FirstOrDefault(); return entity; } public WcsTask Add(WcsTask model) { var entity = _dbContext.Add(model); _dbContext.SaveChanges(); return entity.Entity; } public WcsTask Update(WcsTask model) { var list = _dbContext.WcsTask.Where(t => t.objid == model.objid).Update(a => model); return model; } /// /// 接收agv接收任务通知接口 /// /// /// public ReponseagvCallbackDto AgvCallback(agvCallbackDto agvCallbackDto) { ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto(); try { _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var wcscmd = _dbContext.WcsCmd .Where(t => t.taskCode == agvCallbackDto.taskCode) .FirstOrDefault(); if (wcscmd != null) { WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId); if (wcsTask != null) { Console.WriteLine(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode); LogManager.Info(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode); //start 开始 end结束 continue继续 //待取货 if (agvCallbackDto.method.ToLower() == "start") { wcscmd.cmdStatus = 2; wcscmd.sendFlag = 1; wcsTask.taskStatus = 2; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 2 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } if (agvCallbackDto.method.ToLower() == "con") { wcscmd.sendFlag = 1; wcscmd.cmdStatus = 4; wcsTask.taskStatus = 4; _dbContext.WcsCmd.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmd { cmdStatus = 4 }); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 }); _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask { taskStatus = 4 }); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } //已取货待放货 if (agvCallbackDto.method.ToLower() == "continue") { wcscmd.sendFlag = 1; wcscmd.cmdStatus = 3; wcsTask.taskStatus = 3; _dbContext.WcsCmd.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmd { cmdStatus = 3 }); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 }); _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTask { taskStatus = 3 }); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 }); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } //放货完成 if (agvCallbackDto.method.ToLower() == "end") { if (wcsTask.nextPointId != 10) { wcscmd.cmdStatus = 5; wcscmd.sendFlag = 1; wcsTask.taskStatus = 5; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 5 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } else { wcscmd.cmdStatus = 6; wcscmd.sendFlag = 1; wcsTask.taskStatus = 6; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 6 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } } } } else { reponseagvCallbackDto.code = "1"; reponseagvCallbackDto.message = "未找到当前任务"; } } catch (Exception ex) { LogManager.Error(ex); reponseagvCallbackDto.code = "1"; reponseagvCallbackDto.message = ex.Message; } //返回请求 reponseagvCallbackDto.reqCode = reponseagvCallbackDto.reqCode; return reponseagvCallbackDto; } /// /// 入库完成 /// /// public string InWare(long taskId) { return ""; } /// /// 出库完成 /// /// public string OutWare(long taskId) { return ""; } /// /// 背负式Agv通知完成 /// /// /// public AgvCompeletedResponse MesToAgvComplete(AgvCompeleted agvCompeletedRequest) { AgvCompeletedResponse agvCompeletedResponse = new AgvCompeletedResponse(); try { _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == agvCompeletedRequest.endStationCode); if (baseEquip != null) { var wcsCmd = _dbContext.WcsCmd .Where(t => t.cmdType == 32 || t.cmdType == 48) .Where(t => t.nextPointId == baseEquip.objid || t.currPointId == baseEquip.objid) .FirstOrDefault(); if (wcsCmd != null) { WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId); if (wcsTask != null) { if (wcsTask.taskType != 48) { wcsCmd.cmdStatus = 7; wcsTask.taskStatus = 7; _dbContext.WcsCmd.Update(wcsCmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); _dbContext.SaveChanges(); agvCompeletedResponse.code = "0"; agvCompeletedResponse.message = "成功"; } else { wcsCmd.cmdStatus = 4; wcsTask.taskStatus = 4; _dbContext.WcsCmd.Update(wcsCmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); _dbContext.SaveChanges(); agvCompeletedResponse.code = "0"; agvCompeletedResponse.message = "成功"; } } else { agvCompeletedResponse.code = "1"; agvCompeletedResponse.message = "未找到当前任务"; } } else { agvCompeletedResponse.code = "1"; agvCompeletedResponse.message = "未找到当前任务"; } } else { agvCompeletedResponse.code = "1"; agvCompeletedResponse.message = "未找到当前工位"; } } catch (Exception ex) { LogManager.Error(ex); agvCompeletedResponse.code = "1"; agvCompeletedResponse.message = ex.Message; } return agvCompeletedResponse; } /// /// 4楼到5楼原材料入口继续 /// /// /// public AgvCompeletedResponse TaskContinue(TaskContinue taskContinue) { AgvCompeletedResponse compeletedResponse = new AgvCompeletedResponse(); try { _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var wcsTask = _dbContext.WcsTask .Where(t => t.taskType == 47) .Where(t => t.masterId == taskContinue.materialId) .FirstOrDefault(); if (wcsTask != null) { wcsTask.useFlag = 1; _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(a => new WcsTaskLog { useFlag = 1 }); _dbContext.SaveChanges(); compeletedResponse.code = "0"; compeletedResponse.message = "成功"; } else { compeletedResponse.code = "1"; compeletedResponse.message = "未找到当前任务"; } } catch (Exception ex) { LogManager.Error(ex); compeletedResponse.code = "1"; compeletedResponse.message = ex.Message; } return compeletedResponse; } /// /// 柜体拆分区通知返库 /// /// /// public AgvCompeletedResponse TaskReturn(TaskReturn taskReturn) { AgvCompeletedResponse compeletedResponse = new AgvCompeletedResponse(); try { _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); WcsTask wcsTask = _dbContext.WcsTask .Where(t => t.taskType == 28) .Where(t => t.endPointNo == taskReturn.endStationCode) .FirstOrDefault(); if (wcsTask != null) { wcsTask.useFlag = 1; _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(a => new WcsTask { useFlag = 1 }); _dbContext.SaveChanges(); compeletedResponse.code = "0"; compeletedResponse.message = "成功"; } else { compeletedResponse.code = "1"; compeletedResponse.message = "未找到当前任务"; } } catch (Exception ex) { LogManager.Error(ex); compeletedResponse.code = "1"; compeletedResponse.message = ex.Message; } return compeletedResponse; } public ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto) { ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto(); try { _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); var wcscmd = _dbContext.WcsCmd .Where(t => t.taskCode == agvCallbackDto.taskCode) .FirstOrDefault(); if (wcscmd != null) { WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId); if (wcsTask != null) { //start 开始 end结束 continue继续 //待取货 if (agvCallbackDto.method.ToLower() == "start") { wcscmd.cmdStatus = 2; wcscmd.sendFlag = 1; wcsTask.taskStatus = 2; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 2 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } if (agvCallbackDto.method.ToLower() == "con") { wcscmd.sendFlag = 1; wcscmd.cmdStatus = 4; wcsTask.taskStatus = 4; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } //已取货待放货 if (agvCallbackDto.method.ToLower() == "continue") { if (wcscmd.cmdStatus > 3) { wcscmd.sendFlag = 1; wcscmd.cmdStatus = 5; wcsTask.taskStatus = 5; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 5 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } else { wcscmd.sendFlag = 1; wcscmd.cmdStatus = 3; wcsTask.taskStatus = 3; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } } //放货完成 if (agvCallbackDto.method.ToLower() == "end") { wcscmd.cmdStatus = 7; wcscmd.sendFlag = 1; wcsTask.taskStatus = 7; _dbContext.WcsCmd.Update(wcscmd); _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; reponseagvCallbackDto.message = "成功"; } } } else { reponseagvCallbackDto.code = "1"; reponseagvCallbackDto.message = "未找到当前任务"; } } catch (Exception ex) { LogManager.Error(ex); reponseagvCallbackDto.code = "1"; reponseagvCallbackDto.message = ex.Message; } //返回请求 reponseagvCallbackDto.reqCode = reponseagvCallbackDto.reqCode; return reponseagvCallbackDto; } public ReponseMessage CallMaterial(CallMaterial callMaterial) { ReponseMessage reponseMessage = new ReponseMessage(); try { _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); WmsRawOutstock wmsRawOutstock = _dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == Convert.ToInt64(callMaterial.rawOutstockId)); if (wmsRawOutstock != null) { bool hasTask = _dbContext.WcsTask.Where(t => t.endPointId == 31 || t.currPointId == 31).Any(); bool hasTaskManual = _dbContext.WcsTaskManual.Where(t => t.endPointId == 31 || t.currPointId == 31 || t.taskType == 999).Any(); if (hasTask || hasTaskManual) { reponseMessage.code = "1"; reponseMessage.message = "当前有任务,请等待任务完成后再申请"; } else { BaseEquip endEquip = _dbContext.BaseEquip.First(t => t.objid == 31); BaseEquip baseEquip = _dbContext.BaseEquip.First(t => t.objid == 9); WcsTaskManual wcsTaskManual = new WcsTaskManual(); wcsTaskManual.taskType = 999; wcsTaskManual.objid = _snowId.NextId(); wcsTaskManual.orderId = Convert.ToInt64(callMaterial.rawOutstockId); _dbContext.Add(wcsTaskManual); _dbContext.SaveChanges(); reponseMessage.code = "0"; reponseMessage.message = "成功"; } } else { reponseMessage.code = "1"; reponseMessage.message = "未找到当前申请单的任务"; } } catch (Exception ex) { reponseMessage.code = "1"; reponseMessage.message = ex.Message; LogManager.Error(ex); } return reponseMessage; } public ReponseMessage AGVTaskComplete() { ReponseMessage reponseMessage = new ReponseMessage(); try { _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); bool hasTask = _dbContext.WcsTask.Where(t => t.taskType == 41).Any(); if (hasTask) { reponseMessage.code = "0"; reponseMessage.message = "成功"; } else { reponseMessage.code = "1"; reponseMessage.message = "当前无任务"; } } catch (Exception ex) { reponseMessage.code = "1"; reponseMessage.message = ex.Message; LogManager.Error(ex); } return reponseMessage; } } }