using Admin.NET.Application; using iWareCC.Common.Helper; using iWareCC.SrmService; using iWareCC.StationService; using iWareCommon.Common.Globle; using iWareCommon.Utils; using iWareModel; using iWareSql.DataAccess; using iWareSql.DBModel; using iWareSql.WmsDBModel; using System; using System.Collections.Generic; using System.Data.Entity.Core.Metadata.Edm; using System.Linq; using System.ServiceModel.Configuration; using System.Text; using System.Threading; using System.Threading.Tasks; using WZ.Useful.Commons; using XiGang.Core.Model; using LogType = iWareCommon.Utils.LogType; namespace iWareCC.ThreadService { /// /// 机器人缓存岛入库任务完成处理 /// public static class DataProcess_RobotBuffer_FinishTask { public static async void Handler() { var alertMsg = ""; LogType logType = LogType.DataProcess_RobotBuffer_FinishTask; while (true) { Thread.Sleep(500);//休眠2秒,将休眠写到前面,是为了下面的continue方法执行后不显示错误信息的提示!!!【EditBy shaocx,2022-05-24】 SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = string.Empty; try { if (SystemValue.isStartedModel)//SystemValue.isAllowRuning_DataProcess_RobotBuffer_FinishTask && { var rgvLocation = StationLocationEnum.BZ39.ToString(); if (FormCC.stationView == null) { SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}-获取PLC对象为null"; continue; } var obj = FormCC.stationView.R_StationForReadCommList.Where(x => x.StationCode == rgvLocation.ToString()).FirstOrDefault(); if (obj.R_InboundFinish) { var result2 = obj.R_Inbound_TaskID; if (result2 == 0) { SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}- 入库任务号是空的,此次循环结束"; continue; } using (WmsDBModel wmsDB = new WmsDBModel()) { var task = wmsDB.wms_rbline_task.Where(x => x.TaskNo == obj.R_Inbound_TaskID.ToString() && x.RbTaskType == (int)RbTaskTypeEnum.入库任务 ).OrderByDescending(x => x.Id).FirstOrDefault(); if (task == null) { SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()},根据 R_InboundNumber:{obj.R_InboundNumber}没有找到已下发的任务 "; continue; } else { if (task.TaskStatus == (int)TaskStatusEnum.已完成) { using (StationServiceClient client = new StationServiceClient()) { var res = await client.InboundFinishConfirmAsync((int)EDevice.Station, true, rgvLocation); } continue; } } var isSuccess = await HandlerData(wmsDB, task, rgvLocation, logType, false); if (isSuccess == false) { continue; } //var upiCode = task.Upi; //var upiObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == upiCode).FirstOrDefault(); //if (upiObj == null) //{ // SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()},根据UPI:{upiCode}没有找到对象 "; // continue; //} ////增加库存 //wms_stock_quan qun = new wms_stock_quan() //{ // Id = Yitter.IdGenerator.YitIdHelper.NextId(), // Upi = upiCode, // PlanNo = task.PlanNo, // DetailName = upiObj.DetailName, // OrderId = task.OrderId, // CreateTime = DateTime.Now, // CreateUserName = "CC", // InTime = DateTime.Now, // OperReason = "入库", // PackageCode = task.PackageCode, // Length = task.Length, // Width = task.Width, // Thk = task.Thk, // PlaceCode = task.PlaceCode, // StockStatus = (int)StockStatusEnum.在库, // StockStatusName = StockStatusEnum.在库.ToString(), //}; //wmsDB.wms_stock_quan.Add(qun); //task.TaskStatus = (int)TaskStatusEnum.已完成; //task.FinishedTime = DateTime.Now; //var place = StationHandler.GetPlaceByPlaceCode(task.PlaceCode, wmsDB); //place.PlaceStatus = (int)PlaceStatusEnum.正常; ////给PLC推送任务完成确认信号 //using (StationServiceClient client = new StationServiceClient()) //{ // var res = await client.InboundFinishConfirmAsync((int)EDevice.Station, true, rgvLocation); // if (!res.result) // { // SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}-下发入库任务 失败,InboundFinishConfirmAsync 返回:{res.resMsg}"; // continue; // } // else // { // Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发入库任务 成功,InboundFinishConfirmAsync,参数: 站点{rgvLocation}"); // } //} //WmsRecordUpiProcessHandler.SaveWmsRecordUpiProcess(wmsDB, upiObj, task.PlaceCode, "缓存入库完成:" + task.PlaceCode); //wmsDB.SaveChanges(); } } else { //不再拦截 //首先先清理 using (StationServiceClient client = new StationServiceClient()) { var res = await client.InboundFinishConfirmAsync((int)EDevice.Station, false, rgvLocation); } using (WmsDBModel wmsDB = new WmsDBModel()) { var task = wmsDB.wms_rbline_task.Where(x => x.IsFlagFinish == true && x.RbTaskType == (int)RbTaskTypeEnum.入库任务 && x.TaskStatus == (int)TaskStatusEnum.已下发 ).OrderByDescending(x => x.Id).FirstOrDefault(); if (task == null) { SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()},没有找到已下发,并且标记强制完成的任务 "; continue; } var isSuccess = await HandlerData(wmsDB, task, rgvLocation, logType, true); if (isSuccess == false) { continue; } } } } } catch (Exception ex) { SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask += " 出现异常:" + ex.Message + SysGloble.SPLIT_STR; Log4NetHelper.WriteErrorLog(logType, " 出现异常:" + ex.Message, ex); } } } public static async Task HandlerData(WmsDBModel wmsDB, wms_rbline_task task, string rgvLocation, iWareCommon.Utils.LogType logType, bool isFlagFinish) { var upiCode = task.Upi; var upiObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == upiCode).FirstOrDefault(); if (upiObj == null) { SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()},根据UPI:{upiCode}没有找到对象 "; return false; } //增加库存 wms_stock_quan qun = new wms_stock_quan() { Id = Yitter.IdGenerator.YitIdHelper.NextId(), Upi = upiCode, PlanNo = task.PlanNo, DetailName = upiObj.DetailName, OrderId = task.OrderId, CreateTime = DateTime.Now, CreateUserName = "CC", InTime = DateTime.Now, OperReason = "入库", PackageCode = task.PackageCode, Length = task.Length, Width = task.Width, Thk = task.Thk, PlaceCode = task.PlaceCode, StockStatus = (int)StockStatusEnum.在库, StockStatusName = StockStatusEnum.在库.ToString(), }; wmsDB.wms_stock_quan.Add(qun); task.TaskStatus = (int)TaskStatusEnum.已完成; task.FinishedTime = DateTime.Now; var place = StationHandler.GetPlaceByPlaceCode(task.PlaceCode, wmsDB); place.PlaceStatus = (int)PlaceStatusEnum.正常; if (isFlagFinish == false) { //给PLC推送任务完成确认信号 using (StationServiceClient client = new StationServiceClient()) { var res = await client.InboundFinishConfirmAsync((int)EDevice.Station, true, rgvLocation); if (!res.result) { SystemWarningMsg._lbl_Alert_DataProcess_RobotBuffer_FinishTask = $"{rgvLocation.ToString()}-下发入库任务 失败,InboundFinishConfirmAsync 返回:{res.resMsg}"; return false; } else { Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-下发入库任务 成功,InboundFinishConfirmAsync,参数: 站点{rgvLocation}"); } } } var flag = isFlagFinish ? "人工强制完成" : "(自动完成)"; WmsRecordUpiProcessHandler.SaveWmsRecordUpiProcess(wmsDB, upiObj, task.PlaceCode, "缓存入库完成(" + flag + "):" + task.PlaceCode); wmsDB.SaveChanges(); return true; } } }