Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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));
        }