public Result PostSmartFactory([FromBody] SmartProcessFault smartProcessFault) { smartProcessFault.IsDeal = true; SmartProcessFaultHelper.Instance.Update(smartProcessFault); SmartFlowCardProcessHelper.UpdateSmartFlowCardProcessFault(smartProcessFault.ProcessId); return(Result.GenError <Result>(Error.Success)); }
public DataResult GetSmartFlowCardProcess([FromQuery] int qId, int wId, int flowCardId) { var result = new DataResult(); result.datas.AddRange(SmartFlowCardProcessHelper.GetDetail(qId, wId, flowCardId)); if (qId != 0 && !result.datas.Any()) { result.errno = Error.SmartFlowCardProcessNotExist; return(result); } return(result); }
public DataResult GetSmartFlowCard([FromQuery] int wId, int qId, int productId, int taskOrderId, bool menu, DateTime startTime, DateTime endTime) { var result = new DataResult(); if (menu) { result.datas.AddRange(SmartFlowCardHelper.GetMenu(qId, wId)); } else { var data = SmartFlowCardHelper.GetDetail(startTime, endTime, qId, wId, taskOrderId, productId); if (qId != 0 && !menu) { var d = data.First(); if (d.State != SmartFlowCardState.未加工) { var processes = SmartFlowCardProcessHelper.GetSmartFlowCardProcessesByFlowCardId(d.Id); if (processes.Any()) { var st = processes.First().StartTime; var etMax = processes.Where(x => x.EndTime != default(DateTime)).Min(y => y.EndTime); if (d.State == SmartFlowCardState.已完成) { var et = processes.Last().EndTime; d.Consume = (int)(et - st).TotalSeconds; } else if (d.State == SmartFlowCardState.已取消) { d.Consume = (int)(etMax - st).TotalSeconds; } else { d.Consume = (int)(DateTime.Now - st).TotalSeconds; } var last = processes.LastOrDefault(x => x.Before != 0); if (last != null) { d.Done = last.Qualified + last.Unqualified; d.Left = last.Before - d.Done; } } } } result.datas.AddRange(data); } if (qId != 0 && !result.datas.Any()) { result.errno = Error.SmartFlowCardNotExist; } return(result); }
public Result DeleteSmartFlowCard([FromBody] BatchDelete batchDelete) { var ids = batchDelete.ids; var flowCards = SmartFlowCardHelper.Instance.GetByIds <SmartFlowCard>(ids); if (!flowCards.Any() || flowCards.Count() != ids.Count()) { return(Result.GenError <Result>(Error.SmartFlowCardProcessNotExist)); } SmartFlowCardHelper.Instance.Delete(ids); SmartFlowCardProcessHelper.DeleteByFlowCardIs(ids); OldWorkFlowHelper.Instance.OnSmartFlowCardChanged(flowCards); return(Result.GenError <Result>(Error.Success)); }
public DataResult GetSmartWorkOrder([FromQuery] int qId, int wId, bool menu) { var result = new DataResult(); if (menu) { var data = SmartWorkOrderHelper.GetMenu(qId, wId); if (qId != 0 && !data.Any()) { result.errno = Error.SmartWorkOrderNotExist; return(result); } result.datas.AddRange(data); } else { var data = SmartWorkOrderHelper.GetDetail(qId, wId).Select(ClassExtension.ParentCopyToChild <SmartWorkOrder, SmartWorkOrderDetail>); if (qId != 0 && !menu) { var d = data.First(); if (d.State != SmartWorkOrderState.未加工) { var taskOrders = SmartTaskOrderHelper.GetDetailByWorkOrderId(d.Id); var flowCards = SmartFlowCardHelper.GetSmartFlowCardsByTaskOrderIds(taskOrders.Select(x => x.Id)); var processes = SmartFlowCardProcessHelper.GetSmartFlowCardProcessesByFlowCardIds(flowCards.Select(x => x.Id)); if (processes.Any()) { var st = processes.Where(x => x.StartTime != default(DateTime)).Min(y => y.StartTime); var et = processes.Where(x => x.EndTime != default(DateTime)).Min(y => y.EndTime); if (d.State == SmartWorkOrderState.已完成 || d.State == SmartWorkOrderState.已取消) { d.Consume = (int)(et - st).TotalSeconds; } else { d.Consume = (int)(DateTime.Now - st).TotalSeconds; } } } } result.datas.AddRange(data); } if (qId != 0 && !result.datas.Any()) { result.errno = Error.SmartWorkOrderNotExist; return(result); } return(result); }
///// <summary> ///// 获取某类型的设备 ///// </summary> ///// <param name="deviceCategoryId">设备类型</param> ///// <returns></returns> //public static string GenDevice(int deviceCategoryId) //{ // _devices = RedisHelper.Get<List<SmartDeviceProcess>>(DeviceKey); // var 闲置设备 = _devices.Where(x=>x.State == SmartDeviceState.未加工) // return results.FirstOrDefault() ?? ""; //} private static void Simulate() { var createUserId = "System"; var markedDateTime = DateTime.Now; var faults = new List <SmartProcessFault>(); var processDevices = ServerConfig.ApiDb.Query <SmartFlowCardProcessDevice>("SELECT a.*, b.CategoryId, b.ProcessNumber, b.ProcessData FROM " + "(SELECT * FROM `t_flow_card_process` WHERE MarkedDelete = 0 AND `State` != @state GROUP BY FlowCardId) a " + "JOIN (SELECT a.Id, b.CategoryId, b.Process, a.ProcessNumber, a.ProcessData FROM `t_product_process` a " + "JOIN (SELECT a.Id, b.CategoryId, b.Process FROM `t_process_code_category_process` a " + "JOIN `t_process` b ON a.ProcessId = b.Id) b ON a.ProcessId = b.Id) b ON a.ProcessId = b.Id WHERE a.MarkedDelete = 0 ORDER BY a.Id;", new { state = SmartFlowCardProcessState.已完成 }); var categroy0 = new List <int>(); var categroy_0 = new List <int>(); var dict = new Dictionary <int, bool>(); var processTime = 10; var checkTime = 10; var rate = 85; foreach (var processDevice in processDevices) { if (processDevice.Fault) { continue; } if (processDevice.Before <= 0) { faults.Add(new SmartProcessFault { CreateUserId = createUserId, MarkedDateTime = markedDateTime, FaultTime = markedDateTime, Type = ProcessFault.缺少原材料, DeviceId = processDevice.DeviceId, FlowCardId = processDevice.FlowCardId, ProcessId = processDevice.Id, }); processDevice.State = SmartFlowCardProcessState.暂停中; processDevice.Fault = true; categroy0.Add(processDevice.Id); continue; } if (processDevice.CategoryId == 0) { if (!dict.ContainsKey(processDevice.CategoryId)) { dict.Add(processDevice.CategoryId, true); } if (processDevice.State == SmartFlowCardProcessState.未加工 || processDevice.State == SmartFlowCardProcessState.等待中) { if (dict[processDevice.CategoryId]) { if (ArrangeProcess("检验", out var processorId) == ScheduleState.成功) { processDevice.State = SmartFlowCardProcessState.加工中; processDevice.ProcessorId = processorId; processDevice.StartTime = markedDateTime; processDevice.Count++; var productProcess = SmartProductProcessHelper.Instance.Get <SmartProductProcess>(processDevice.ProcessId); processDevice.Doing = processDevice.Left < productProcess.ProcessNumber ? processDevice.Left : productProcess.ProcessNumber; categroy0.Add(processDevice.Id); } } else { dict[processDevice.CategoryId] = false; } } else if (processDevice.State == SmartFlowCardProcessState.加工中) { var productProcess = SmartProductProcessHelper.Instance.Get <SmartProductProcess>(processDevice.ProcessId); var endTime = processDevice.StartTime.AddSeconds((double)(productProcess.TotalSecond < checkTime ? checkTime : productProcess.TotalSecond)); if (endTime <= markedDateTime) { processDevice.EndTime = markedDateTime; processDevice.State = SmartFlowCardProcessState.等待中; var 合格率 = (RateWeight)RandomSeed.GetWeightRandom(SimulateHelper.合格率); var qualified = processDevice.Doing * 合格率.Rate / 100; var unqualified = processDevice.Doing - qualified; processDevice.Qualified += qualified; processDevice.Unqualified += unqualified; processDevice.Doing = 0; var last = processDevice.Left == 0; if (last) { processDevice.State = SmartFlowCardProcessState.已完成; ReleaseProcess(processDevice.ProcessorId); SmartFlowCardProcessHelper.UpdateSmartFlowCardProcessNextBefore(processDevice.FlowCardId, processDevice.Id, processDevice.Qualified); if (processDevice.Rate < rate) { processDevice.Fault = true; faults.Add(new SmartProcessFault { CreateUserId = createUserId, MarkedDateTime = markedDateTime, FaultTime = markedDateTime, Type = ProcessFault.合格率低, Remark = $"合格率{processDevice.Rate.ToRound()}%,低于{rate}%", DeviceId = processDevice.DeviceId, FlowCardId = processDevice.FlowCardId, ProcessId = processDevice.Id, }); } } var processor = AccountInfoHelper.GetAccountInfo(processDevice.ProcessorId)?.Account ?? ""; //todo var log = new SmartFlowCardProcessLog(0, processor, markedDateTime, processDevice, qualified, unqualified); SmartFlowCardProcessLogHelper.Instance.Add(log); categroy0.Add(processDevice.Id); } } } else { if (processDevice.State == SmartFlowCardProcessState.加工中) { var weight = (DeviceStateWeight)RandomSeed.GetWeightRandom(故障_暂停概率); if (weight != null) { switch (weight.State) { case SmartDeviceOperateState.故障中: faults.Add(new SmartProcessFault { CreateUserId = createUserId, MarkedDateTime = markedDateTime, FaultTime = markedDateTime, Type = ProcessFault.设备故障, DeviceId = processDevice.DeviceId, FlowCardId = processDevice.FlowCardId, ProcessId = processDevice.Id, }); processDevice.State = SmartFlowCardProcessState.暂停中; processDevice.Fault = true; UpdateDeviceState(processDevice.DeviceId, processDevice.CategoryId, weight.State); categroy_0.Add(processDevice.Id); break; case SmartDeviceOperateState.暂停中: processDevice.State = SmartFlowCardProcessState.暂停中; UpdateDeviceState(processDevice.DeviceId, processDevice.CategoryId, weight.State); categroy_0.Add(processDevice.Id); break; } } } else if (processDevice.State == SmartFlowCardProcessState.未加工) { if (!dict.ContainsKey(processDevice.CategoryId)) { dict.Add(processDevice.CategoryId, true); } if (dict[processDevice.CategoryId]) { var totalSecond = processDevice.TotalSecond < processTime ? processTime : processDevice.TotalSecond; var processorId = processDevice.ProcessorId; var processCount = (int)Math.Ceiling((decimal)processDevice.Before / processDevice.ProcessNumber); if (Arrange(processDevice.CategoryId, processDevice.Id, processDevice.ProcessNumber, processCount, (int)totalSecond, out var deviceId, ref processorId) == ScheduleState.成功) { processDevice.State = SmartFlowCardProcessState.等待中; processDevice.DeviceId = deviceId; processDevice.ProcessorId = processorId; categroy_0.Add(processDevice.Id); } else { dict[processDevice.CategoryId] = false; } } } } }