public Result AddManufactureTask([FromBody] ManufacturePlanTask task) { var plan = ServerConfig.ApiDb.Query <ManufacturePlan>("SELECT * FROM `manufacture_plan` WHERE `Id` = @PlanId AND MarkedDelete = 0;", new { task.PlanId }).FirstOrDefault(); if (plan == null) { return(Result.GenError <Result>(Error.ManufacturePlanNotExist)); } if (plan.State == ManufacturePlanState.Wait) { return(Result.GenError <Result>(Error.ManufacturePlaneNotAssign)); } if (task.Item.IsNullOrEmpty()) { return(Result.GenError <Result>(Error.ManufactureTaskItemNotEmpty)); } //if (task.Order <= 0) //{ // return Result.GenError<Result>(Error.ManufactureTaskItemOrderError); //} var changes = new List <ManufactureLog>(); var createUserId = Request.GetIdentityInformation(); var markedDateTime = DateTime.Now; var totalOrder = task.TotalOrder; var manufacturePlanTasks = ServerConfig.ApiDb.Query <ManufacturePlanTask>("SELECT * FROM `manufacture_plan_task` WHERE PlanId = @PlanId AND MarkedDelete = 0 ORDER BY `Order`;", new { task.PlanId }); var planChange = new ManufactureLog { Time = markedDateTime, Account = createUserId, PlanId = plan.Id, IsAssign = true, Type = ManufactureLogType.PlanUpdateItem, ParsingWay = 1, }; var now = DateTime.Now; task.CreateUserId = createUserId; task.Desc = task.Desc ?? ""; task.State = ManufacturePlanTaskState.Wait; if (!manufacturePlanTasks.Any()) { task.Order = 1; task.MarkedDateTime = now; if (task.Relation != 0) { return(Result.GenError <Result>(Error.ManufactureTaskItemRelationError)); } if (task.IsCheck && task.Relation == 0) { return(Result.GenError <Result>(Error.ManufactureCheckItemNoRelation)); } ServerConfig.ApiDb.Execute( "UPDATE manufacture_plan_task SET `MarkedDateTime`= NOW(), `TotalOrder` = `TotalOrder` + 1 WHERE `TotalOrder` > @totalOrder;", new { totalOrder }); task.TotalOrder++; task.Id = ServerConfig.ApiDb.Query <int>( "INSERT INTO manufacture_plan_task(`CreateUserId`, `MarkedDateTime`, `TotalOrder`, `PlanId`, `Order`, `Person`, `ModuleId`, `IsCheck`, `CheckId`, `Item`, `EstimatedHour`, `EstimatedMin`, `Score`, `Relation`) " + "VALUES (@CreateUserId, @MarkedDateTime, @TotalOrder, @PlanId, @Order, @Person, @ModuleId, @IsCheck, @CheckId, @Item, @EstimatedHour, @EstimatedMin, @Score, @Relation)" + ";SELECT LAST_INSERT_ID();", task).FirstOrDefault(); planChange.ParamList.Add(new ManufactureLogItem { Type = ManufactureLogType.AddPlanTaskFormat, Field = task.Order.ToString() }); changes.Add(planChange); changes.Add(new ManufactureLog { Time = markedDateTime, Account = createUserId, PlanId = plan.Id, IsAssign = true, ItemId = task.Id, Type = ManufactureLogType.TaskCreate }); } else { if (task.Relation != 0 && manufacturePlanTasks.All(x => x.Order != task.Relation)) { return(Result.GenError <Result>(Error.ManufactureTaskItemRelationError)); } if (task.IsCheck && task.Relation == 0) { return(Result.GenError <Result>(Error.ManufactureCheckItemNoRelation)); } var pre = manufacturePlanTasks.LastOrDefault(x => x.TotalOrder == totalOrder); var insertIndex = pre?.Order ?? 0; task.Order = insertIndex + 1; foreach (var manufacturePlanTask in manufacturePlanTasks.Where(x => x.TotalOrder > totalOrder)) { manufacturePlanTask.MarkedDateTime = now; var oldManufacturePlanTask = (ManufacturePlanTask)manufacturePlanTask.Clone(); manufacturePlanTask.Order++; if (manufacturePlanTask.Relation > insertIndex) { manufacturePlanTask.Relation++; } if (oldManufacturePlanTask.HaveChange(manufacturePlanTask, out var change)) { change.Time = markedDateTime; change.Account = createUserId; change.PlanId = manufacturePlanTask.PlanId; change.TaskId = manufacturePlanTask.TaskId; change.ItemId = manufacturePlanTask.Id; planChange.ParamList.Add(new ManufactureLogItem { Type = ManufactureLogType.UpdatePlanTaskFormat, Field = oldManufacturePlanTask.Order.ToString(), Items = change.ParamList.Select(y => { y.Type = ManufactureLogType.UpdatePlanTaskItemFormat; return(y); }) }); changes.Add(change); } } planChange.ParamList.Add(new ManufactureLogItem { Type = ManufactureLogType.AddPlanTaskFormat, Field = task.Order.ToString() }); changes.Add(planChange); ServerConfig.ApiDb.Execute( "UPDATE manufacture_plan_task SET `MarkedDateTime`= NOW(), `TotalOrder` = `TotalOrder` + 1 WHERE `TotalOrder` > @totalOrder AND MarkedDelete = 0;", new { totalOrder }); ServerConfig.ApiDb.Execute( "UPDATE manufacture_plan_task SET `MarkedDateTime`= NOW(), `Order` = @Order, `Relation` = @Relation WHERE `Id` = @Id;", manufacturePlanTasks); var relationTask = manufacturePlanTasks.FirstOrDefault(x => x.Order == task.Relation); if (relationTask != null && relationTask.State == ManufacturePlanTaskState.Done && task.IsCheck) { task.State = ManufacturePlanTaskState.WaitCheck; } task.TotalOrder++; task.MarkedDateTime = markedDateTime; task.Id = ServerConfig.ApiDb.Query <int>("INSERT INTO manufacture_plan_task (`CreateUserId`, `MarkedDateTime`, `TotalOrder`, `PlanId`, `Order`, `Person`, `ModuleId`, `IsCheck`, `CheckId`, `Item`, `EstimatedHour`, `EstimatedMin`, `Score`, `Relation`, `State`) " + "VALUES (@CreateUserId, @MarkedDateTime, @TotalOrder, @PlanId, @Order, @Person, @ModuleId, @IsCheck, @CheckId, @Item, @EstimatedHour, @EstimatedMin, @Score, @Relation, @State);SELECT LAST_INSERT_ID();", task).FirstOrDefault(); changes.Add(new ManufactureLog { Time = markedDateTime, Account = createUserId, PlanId = plan.Id, IsAssign = true, ItemId = task.Id, Type = ManufactureLogType.TaskCreate }); ServerConfig.ApiDb.Execute("UPDATE manufacture_plan_item SET `Order` = `Order` + 1 WHERE `PlanId` = @Id AND MarkedDelete = 0 AND `State` = @State;", new { plan.Id, State = ManufacturePlanItemState.WaitAssign }); } ManufactureLog.AddLog(changes); return(Result.GenError <Result>(Error.Success)); }
public Result PutManufacturePlanTask([FromBody] ManufacturePlanTask task) { if (task.Id == 0) { return(Result.GenError <Result>(Error.ManufactureTaskNotExist)); } var oldTask = ServerConfig.ApiDb.Query <ManufacturePlanTask>( "SELECT a.*, IFNULL(b.Name, '') Processor FROM `manufacture_plan_task` a " + "LEFT JOIN (SELECT a.*, b.Name FROM `manufacture_processor` a JOIN `accounts` b ON a.ProcessorId = b.Id WHERE a.MarkedDelete = 0) b ON a.Person = b.Id WHERE a.Id = @Id AND a.MarkedDelete = 0;;", new { task.PlanId, task.Id }).FirstOrDefault(); if (oldTask == null) { return(Result.GenError <Result>(Error.ManufactureTaskItemNotExist)); } var changes = new List <ManufactureLog>(); task.TotalOrder = oldTask.TotalOrder; task.PlanId = oldTask.PlanId; task.TaskId = oldTask.TaskId; task.Order = oldTask.Order; task.OldId = oldTask.OldId; task.Person = task.Person == 0 ? oldTask.Person : task.Person; task.ModuleId = oldTask.ModuleId; task.IsCheck = oldTask.IsCheck; task.CheckId = oldTask.CheckId; task.Relation = oldTask.Relation; task.FirstStartTime = oldTask.FirstStartTime; task.PauseTime = oldTask.PauseTime; task.ActualStartTime = oldTask.ActualStartTime; task.ActualEndTime = oldTask.ActualEndTime; var createUserId = Request.GetIdentityInformation(); var markedDateTime = DateTime.Now; var changeTask = false; var keys = new List <string> { "Person", "EstimatedHour", "EstimatedMin", "Score", "Desc", "ActualHour", "ActualMin", "ActualScore", "CheckResult" }; if (oldTask.HaveChange(task, out var taskChange, keys)) { changeTask = true; taskChange.Time = markedDateTime; taskChange.Account = createUserId; taskChange.PlanId = task.PlanId; taskChange.IsAssign = true; taskChange.TaskId = task.TaskId; taskChange.ItemId = task.Id; changes.Add(taskChange); } if (oldTask.IsCheck) { ManufacturePlanTask preTask; if (oldTask.CheckResult != ManufacturePlanCheckState.Redo && task.CheckResult == ManufacturePlanCheckState.Redo) { var sql = "SELECT * FROM `manufacture_plan_task` WHERE PlanId = @PlanId AND `Order` = @Relation;"; preTask = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { oldTask.PlanId, oldTask.Relation }) .FirstOrDefault(); if (preTask != null) { if (preTask.State == ManufacturePlanTaskState.Done) { var oldPreTask = (ManufacturePlanTask)preTask.Clone(); preTask.State = preTask.IsCheck ? ManufacturePlanTaskState.WaitCheck : ManufacturePlanTaskState.WaitRedo; preTask.RedoCount++; preTask.IsRedo = true; keys = new List <string> { "State" }; if (oldPreTask.HaveChange(preTask, out var change, keys)) { change.Time = markedDateTime; change.Account = createUserId; change.PlanId = preTask.PlanId; change.IsAssign = true; change.TaskId = preTask.TaskId; change.ItemId = preTask.Id; changes.Add(change); } ServerConfig.ApiDb.Execute( "UPDATE manufacture_plan_task SET `State` = @State, `RedoCount` = @RedoCount, `IsRedo` = @IsRedo WHERE `Id` = @Id;", preTask); } else { return(Result.GenError <DataResult>(Error.ManufacturePlaneTaskNotDone)); } } } if (oldTask.CheckResult == ManufacturePlanCheckState.Redo && task.CheckResult != ManufacturePlanCheckState.Redo) { var sql = "SELECT * FROM `manufacture_plan_task` WHERE PlanId = @PlanId AND `Order` = @Relation;"; preTask = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { oldTask.PlanId, oldTask.Relation }) .FirstOrDefault(); if (preTask != null) { if (preTask.State == ManufacturePlanTaskState.WaitRedo || preTask.State == ManufacturePlanTaskState.WaitCheck) { var oldPreTask = (ManufacturePlanTask)preTask.Clone(); preTask.State = ManufacturePlanTaskState.Done; preTask.RedoCount--; preTask.IsRedo = preTask.RedoCount > 0; keys = new List <string> { "State" }; if (oldPreTask.HaveChange(preTask, out var change, keys)) { change.Time = markedDateTime; change.Account = createUserId; change.PlanId = preTask.PlanId; change.IsAssign = true; change.TaskId = preTask.TaskId; change.ItemId = preTask.Id; changes.Add(change); } ServerConfig.ApiDb.Execute( "UPDATE manufacture_plan_task SET `State` = @State, `RedoCount` = @RedoCount, `IsRedo` = @IsRedo WHERE `Id` = @Id;", preTask); } else { return(Result.GenError <DataResult>(Error.ManufacturePlaneTaskNotWaitRedo)); } } } var checkItemChange = new ManufactureLog { Time = markedDateTime, Account = createUserId, PlanId = task.PlanId, IsAssign = true, TaskId = task.TaskId, ItemId = task.Id, Type = ManufactureLogType.UpdateCheckItem }; var data = ServerConfig.ApiDb.Query <ManufacturePlanCheckItem>( "SELECT * FROM `manufacture_plan_check_item` WHERE PlanId = @PlanId AND ItemId = @Id AND MarkedDelete = 0;", new { task.PlanId, task.Id }); if (task.Items != null && task.Items.Any()) { var update = false; foreach (var item in task.Items) { var d = data.FirstOrDefault(x => x.Id == item.Id); if (d == null) { continue; } item.Desc = item.Desc ?? d.Desc; item.Images = item.Images ?? d.Images; if (d.HaveChange(item, out var change)) { update = true; change.Time = markedDateTime; change.Account = createUserId; change.PlanId = task.PlanId; change.IsAssign = true; change.TaskId = task.TaskId; change.ItemId = task.Id; change.Type = ManufactureLogType.UpdateCheckItem; changes.Add(change); } } if (update) { changes.Add(checkItemChange); ServerConfig.ApiDb.Execute( "UPDATE manufacture_plan_check_item SET `CheckTime` = @CheckTime, `Desc` = @Desc, `Result` = @Result, `Images` = @Images WHERE `Id` = @Id;", task.Items); } } } if (changeTask) { ServerConfig.ApiDb.Execute("UPDATE manufacture_plan_task SET `Person` = @Person, `EstimatedHour` = @EstimatedHour, `EstimatedMin` = @EstimatedMin, `Score` = @Score, `Desc` = @Desc, `ActualHour` = @ActualHour, `ActualMin` = @ActualMin, `ActualScore` = @ActualScore, `CheckResult` = @CheckResult WHERE `Id` = @Id;", task); } ManufactureLog.AddLog(changes); return(Result.GenError <Result>(Error.Success)); }
public Result FinishManufactureCheck([FromBody] ManufactureOpCheckTask opTask) { var tId = opTask.TaskId; var account = opTask.Account; var gId = opTask.GId; var checkResult = opTask.CheckResult; if (!EnumHelper.TryParseInt(checkResult, out ManufacturePlanCheckState result)) { return(Result.GenError <Result>(Error.ParamError)); } var processors = ServerConfig.ApiDb.Query <Processor>( "SELECT a.Id, b.Account FROM `manufacture_processor` a " + "JOIN `accounts` b ON a.ProcessorId = b.Id " + $"WHERE {(gId == 0 ? "" : "GroupId = @gId AND ")}b.Account = @account AND a.`MarkedDelete` = 0;", new { account, gId }); if (!processors.Any()) { return(Result.GenError <DataResult>(Error.ManufactureProcessorNotExist)); } var sql = "SELECT b.*, a.* FROM manufacture_plan_task a " + "LEFT JOIN `manufacture_plan` b ON a.PlanId = b.Id " + "WHERE a.State IN @state AND a.Person IN @pId AND a.MarkedDelete = 0 AND a.IsCheck = 1 ORDER BY a.`TotalOrder` LIMIT 1;"; ManufacturePlanTask task = null; foreach (var validState in ValidStates) { task = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { state = validState.Value, pId = processors.Select(x => x.Id) }) .FirstOrDefault(); if (task != null) { break; } } if (task != null) { if (task.Id != tId) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } if (task.State != ManufacturePlanTaskState.Checking) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } var changes = new List <ManufactureLog>(); var now = DateTime.Now; var oldTask = (ManufacturePlanTask)task.Clone(); task.State = ManufacturePlanTaskState.Done; task.ActualEndTime = now.NoSecond(); task.CheckResult = result; if (task.PauseTime != default(DateTime)) { var totalSecond = (int)(task.PauseTime - task.ActualStartTime).TotalSeconds; task.ActualHour += totalSecond / 3600; task.ActualMin += (totalSecond - task.ActualHour * 3600) / 60; task.PauseTime = default(DateTime); } else { var totalSecond = (int)(task.ActualEndTime - task.ActualStartTime).TotalSeconds; task.ActualHour += totalSecond / 3600; task.ActualMin += (totalSecond - task.ActualHour * 3600) / 60; } if (oldTask.HaveChange(task, out var change)) { change.Time = now; change.Account = account; change.PlanId = task.PlanId; change.IsAssign = true; change.TaskId = task.TaskId; change.ItemId = task.Id; change.Type = ManufactureLogType.UpdateCheckResult; changes.Add(change); } if (result == ManufacturePlanCheckState.Redo) { task.State = ManufacturePlanTaskState.Wait; sql = "SELECT * FROM `manufacture_plan_task` WHERE PlanId = @PlanId AND `Order` = @Relation;"; var preTask = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { task.PlanId, task.Relation }).FirstOrDefault(); if (preTask != null) { var oldPreTask = (ManufacturePlanTask)preTask.Clone(); preTask.State = !preTask.IsCheck ? ManufacturePlanTaskState.WaitRedo : ManufacturePlanTaskState.WaitCheck; if (oldPreTask.HaveChange(preTask, out var changePre)) { changePre.Time = now; changePre.Account = account; changePre.PlanId = oldPreTask.PlanId; changePre.IsAssign = true; changePre.TaskId = oldPreTask.TaskId; changePre.ItemId = oldPreTask.Id; changes.Add(changePre); } } ServerConfig.ApiDb.Execute("UPDATE manufacture_plan_task SET `State` = @State WHERE `Id` = @Id;", preTask); } ServerConfig.ApiDb.Execute("UPDATE manufacture_plan_task SET `State` = @State, `ActualEndTime` = @ActualEndTime, `PauseTime` = @PauseTime, " + "`ActualHour` = @ActualHour, `ActualMin` = @ActualMin, `CheckResult` = @CheckResult WHERE `Id` = @Id;", task); ManufactureLog.AddLog(changes); return(Result.GenError <DataResult>(Error.Success)); } return(Result.GenError <DataResult>(Error.ManufactureNoTask)); }
public Result StartManufactureCheck([FromBody] ManufactureOpTask opTask) { var tId = opTask.TaskId; var account = opTask.Account; var gId = opTask.GId; var processors = ServerConfig.ApiDb.Query <Processor>( "SELECT a.Id, b.Account FROM `manufacture_processor` a " + "JOIN `accounts` b ON a.ProcessorId = b.Id " + $"WHERE {(gId == 0 ? "" : "GroupId = @gId AND ")}b.Account = @account AND a.`MarkedDelete` = 0;", new { account, gId }); if (!processors.Any()) { return(Result.GenError <DataResult>(Error.ManufactureProcessorNotExist)); } var sql = "SELECT b.*, a.* FROM manufacture_plan_task a " + "LEFT JOIN `manufacture_plan` b ON a.PlanId = b.Id " + "WHERE a.State IN @state AND a.Person IN @pId AND a.MarkedDelete = 0 AND a.IsCheck = 1 ORDER BY a.`TotalOrder` LIMIT 1;"; ManufacturePlanTask task = null; foreach (var validState in ValidStates) { task = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { state = validState.Value, pId = processors.Select(x => x.Id) }) .FirstOrDefault(); if (task != null) { break; } } if (task != null) { if (task.Id != tId) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } if (task.State != ManufacturePlanTaskState.WaitCheck && task.State != ManufacturePlanTaskState.Pause) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } var changes = new List <ManufactureLog>(); var now = DateTime.Now; var oldTask = (ManufacturePlanTask)task.Clone(); task.State = ManufacturePlanTaskState.Checking; if (task.FirstStartTime == default(DateTime)) { task.FirstStartTime = now; } if (task.IsRedo) { task.RedoCount++; } task.ActualStartTime = now.NoSecond(); if (oldTask.HaveChange(task, out var change)) { change.Time = now; change.Account = account; change.PlanId = task.PlanId; change.IsAssign = true; change.TaskId = task.TaskId; change.ItemId = task.Id; change.Type = ManufactureLogType.StartTask; changes.Add(change); } if (!oldTask.IsCheckItem) { task.IsCheckItem = true; var manufacturePlanCheckItems = ServerConfig.ApiDb.Query <ManufacturePlanCheckItem>("SELECT * FROM `manufacture_check_item` WHERE CheckId = @CheckId AND MarkedDelete = 0;", new { task.CheckId }); var createUserId = Request.GetIdentityInformation(); var markedDateTime = DateTime.Now; if (manufacturePlanCheckItems.Any()) { foreach (var manufactureCheckItem in manufacturePlanCheckItems) { manufactureCheckItem.CreateUserId = createUserId; manufactureCheckItem.PlanId = oldTask.PlanId; manufactureCheckItem.ItemId = oldTask.Id; } ServerConfig.ApiDb.Execute( "INSERT INTO manufacture_plan_check_item (`CreateUserId`, `PlanId`, `ItemId`, `Item`, `Method`) " + "VALUES (@CreateUserId, @PlanId, @ItemId, @Item, @Method);", manufacturePlanCheckItems); changes.Add(new ManufactureLog { Time = markedDateTime, Account = createUserId, PlanId = task.PlanId, IsAssign = true, TaskId = task.TaskId, ItemId = task.Id, Type = ManufactureLogType.CheckAssigned }); } } ServerConfig.ApiDb.Execute("UPDATE manufacture_plan_task SET `State` = @State, `IsCheckItem` = @IsCheckItem, `FirstStartTime` = @FirstStartTime, " + "`ActualStartTime` = @ActualStartTime, `RedoCount` = @RedoCount WHERE `Id` = @Id;", task); ManufactureLog.AddLog(changes); return(Result.GenError <DataResult>(Error.Success)); } return(Result.GenError <DataResult>(Error.ManufactureNoTask)); }
public Result FinishManufactureTask([FromBody] ManufactureOpTask opTask) { var tId = opTask.TaskId; var account = opTask.Account; var gId = opTask.GId; var processors = ServerConfig.ApiDb.Query <Processor>("SELECT a.Id, b.Account FROM `manufacture_processor` a JOIN `accounts` b ON a.ProcessorId = b.Id " + $"WHERE b.Account = @account AND a.`MarkedDelete` = 0 {(gId == 0 ? "" : " AND GroupId = @gId")};", new { account, gId }); if (!processors.Any()) { return(Result.GenError <DataResult>(Error.ManufactureProcessorNotExist)); } var sql = "SELECT b.*, a.* FROM manufacture_plan_task a " + "LEFT JOIN `manufacture_plan` b ON a.PlanId = b.Id " + "WHERE a.State IN @state AND a.Person IN @pId AND a.MarkedDelete = 0 AND a.IsCheck = 0 ORDER BY a.`TotalOrder` LIMIT 1;"; ManufacturePlanTask task = null; foreach (var validState in ValidStates) { task = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { state = validState.Value, pId = processors.Select(x => x.Id) }) .FirstOrDefault(); if (task != null) { break; } } if (task != null) { if (task.Id != tId) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } if (task.State != ManufacturePlanTaskState.Doing) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } var now = DateTime.Now; var changes = new List <ManufactureLog>(); var oldTask = (ManufacturePlanTask)task.Clone(); task.State = ManufacturePlanTaskState.Done; task.ActualEndTime = now; var totalSecond = (int)(task.ActualEndTime - task.ActualStartTime).TotalSeconds; var totalHour = totalSecond / 3600; task.ActualHour += totalHour; task.ActualMin += (totalSecond - totalHour * 3600) / 60; //if (task.PauseTime != default(DateTime)) //{ // var totalSecond = (int)(task.PauseTime - task.ActualStartTime).TotalSeconds; // var totalHour = totalSecond / 3600; // task.ActualHour += totalHour; // task.ActualMin += (totalSecond - totalHour * 3600) / 60; // task.PauseTime = default(DateTime); //} //else //{ // var totalSecond = (int)(task.ActualEndTime - task.ActualStartTime).TotalSeconds; // task.ActualHour += totalSecond / 3600; // task.ActualMin += (totalSecond - task.ActualHour * 3600) / 60; //} if (oldTask.HaveChange(task, out var change)) { change.Time = now; change.Account = account; change.PlanId = task.PlanId; change.IsAssign = true; change.TaskId = task.TaskId; change.ItemId = task.Id; change.Type = ManufactureLogType.FinishTask; changes.Add(change); } var tasks = new List <ManufacturePlanTask> { task }; sql = "SELECT * FROM `manufacture_plan_task` WHERE PlanId = @PlanId AND Relation = @Order AND IsCheck = 1 AND `State` = @state;"; var checkTasks = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { task.PlanId, task.Order, state = ManufacturePlanTaskState.Wait }); if (checkTasks != null && checkTasks.Any()) { foreach (var checkTask in checkTasks) { var oldCheckTask = (ManufacturePlanTask)checkTask.Clone(); checkTask.State = ManufacturePlanTaskState.WaitCheck; if (oldCheckTask.HaveChange(checkTask, out var changeCheck)) { changeCheck.Time = now; changeCheck.Account = account; changeCheck.PlanId = checkTask.PlanId; changeCheck.IsAssign = true; changeCheck.TaskId = checkTask.TaskId; changeCheck.ItemId = checkTask.Id; changeCheck.Type = ManufactureLogType.TaskUpdate; changes.Add(changeCheck); } tasks.Add(checkTask); } } ServerConfig.ApiDb.Execute("UPDATE manufacture_plan_task SET `MarkedDateTime` = @MarkedDateTime, `State` = @State, `ActualEndTime` = @ActualEndTime, " + "`ActualHour` = @ActualHour, `ActualMin` = @ActualMin WHERE `Id` = @Id;", tasks); ManufactureLog.AddLog(changes); return(Result.GenError <DataResult>(Error.Success)); } return(Result.GenError <DataResult>(Error.ManufactureNoTask)); }
public Result StartManufactureTask([FromBody] ManufactureOpTask opTask) { var tId = opTask.TaskId; var account = opTask.Account; var gId = opTask.GId; var processors = ServerConfig.ApiDb.Query <Processor>("SELECT a.Id, b.Account FROM `manufacture_processor` a JOIN `accounts` b ON a.ProcessorId = b.Id " + $"WHERE b.Account = @account AND a.`MarkedDelete` = 0 {(gId == 0 ? "" : " AND GroupId = @gId")};", new { account, gId }); if (!processors.Any()) { return(Result.GenError <DataResult>(Error.ManufactureProcessorNotExist)); } var sql = "SELECT b.*, a.* FROM manufacture_plan_task a " + "LEFT JOIN `manufacture_plan` b ON a.PlanId = b.Id " + "WHERE a.State IN @state AND a.Person IN @pId AND a.MarkedDelete = 0 AND a.IsCheck = 0 ORDER BY a.`TotalOrder` LIMIT 1;"; ManufacturePlanTask task = null; foreach (var validState in ValidStates) { task = ServerConfig.ApiDb.Query <ManufacturePlanTask>(sql, new { state = validState.Value, pId = processors.Select(x => x.Id) }) .FirstOrDefault(); if (task != null) { break; } } if (task != null) { if (task.Id != tId) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } if (task.State != ManufacturePlanTaskState.Wait && task.State != ManufacturePlanTaskState.WaitRedo && task.State != ManufacturePlanTaskState.Pause) { return(Result.GenError <DataResult>(Error.ManufactureTaskStateError)); } var now = DateTime.Now; var oldTask = (ManufacturePlanTask)task.Clone(); task.State = ManufacturePlanTaskState.Doing; if (task.FirstStartTime == default(DateTime)) { task.FirstStartTime = now; } if (task.IsRedo) { task.RedoCount++; } task.ActualStartTime = now; if (oldTask.HaveChange(task, out var change)) { change.Time = now; change.Account = account; change.PlanId = task.PlanId; change.IsAssign = true; change.TaskId = task.TaskId; change.ItemId = task.Id; change.Type = ManufactureLogType.StartTask; } ServerConfig.ApiDb.Execute("UPDATE manufacture_plan_task SET `State` = @State, `FirstStartTime` = @FirstStartTime, `ActualStartTime` = @ActualStartTime, " + "`RedoCount` = @RedoCount WHERE `Id` = @Id;", task); ManufactureLog.AddLog(new List <ManufactureLog> { change }); return(Result.GenError <DataResult>(Error.Success)); } return(Result.GenError <DataResult>(Error.ManufactureNoTask)); }