private void OnTriggerExit(Collider other)
 {
     if (other.gameObject.CompareTag("Food"))
     {
         foodItems.Remove(other.gameObject);
         MaterialChange mC = other.gameObject.GetComponent <MaterialChange>();
         mC.ResetMaterial();
     }
 }
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.CompareTag("Food"))
     {
         foodItems.Add(other.gameObject);
         MaterialChange mC = other.gameObject.GetComponent <MaterialChange>();
         mC.ChangeMaterial();
     }
 }
Exemplo n.º 3
0
    void Start()
    {
        Instance = this;

        whichMat = 0;

        for (int i = 0; i < rend.Length; i++)
        {
            rend[i].enabled        = true;
            rend[i].sharedMaterial = wood;
        }
    }
Exemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        MaterialChange mc = GetComponent <MaterialChange>();

        if (Input.GetMouseButtonDown(0) && gameStarted == false && !mc.IsMatZero())
        {
            {
                rb.isKinematic = false;
                rb.AddForce(new Vector2(ballForce, ballForce));
                transform.SetParent(null);
                gameStarted = true;
            }
        }
    }
        public DataResult PutMaterialLog([FromBody] IEnumerable <MaterialLog> materialLogs)
        {
            return(Result.GenError <DataResult>(Error.Fail));

            if (materialLogs == null || !materialLogs.Any())
            {
                return(Result.GenError <DataResult>(Error.MaterialLogNotExist));
            }

            if (materialLogs.Any(x => x.Number < 0))
            {
                return(Result.GenError <DataResult>(Error.NumberCannotBeNegative));
            }
            if (materialLogs.GroupBy(x => x.Type).Count() > 1)
            {
                return(Result.GenError <DataResult>(Error.MaterialLogTypeDifferent));
            }

            var logIds  = materialLogs.Where(x => x.Number == 0).Select(y => y.Id);
            var billIds = materialLogs.Select(x => x.BillId);
            var timeLog = ServerConfig.ApiDb.Query <MaterialLog>("SELECT * FROM (SELECT * FROM `material_log` " +
                                                                 $"WHERE BillId IN @billIds{(logIds.Any() ? " AND Id NOT IN @logIds" : "")} AND Number > 0 Order By Time DESC) a GROUP BY Type;",
                                                                 new { billIds, logIds });
            var oldLogs =
                ServerConfig.ApiDb.Query <MaterialLog>("SELECT * FROM `material_log` WHERE Id IN @id;",
                                                       new { id = materialLogs.Select(x => x.Id) });

            if (oldLogs.Count() != materialLogs.Count())
            {
                return(Result.GenError <DataResult>(Error.MaterialLogNotExist));
            }

            var result         = new DataResult();
            var markedDateTime = DateTime.Now;
            var newLogs        = new List <MaterialLog>();
            var newLogChanges  = new List <MaterialLogChange>();
            var materials      = billIds.ToDictionary(x => x, x =>
            {
                var change = new MaterialChange
                {
                    BillId = x,
                    Number = 0
                };
                // 1 入库; 2 出库;3 冲正;
                var inLog = timeLog.FirstOrDefault(y => y.BillId == x && y.Type == MaterialOp.入库);
                if (inLog != null)
                {
                    change.InTime = inLog.Time;
                }

                var outLog = timeLog.FirstOrDefault(y => y.BillId == x && y.Type == MaterialOp.出库);
                if (outLog != null)
                {
                    change.OutTime = outLog.Time;
                }

                return(change);
            });

            foreach (var billId in billIds)
            {
                var minId    = materialLogs.Where(x => x.BillId == billId).Min().Id;
                var billLogs = ServerConfig.ApiDb.Query <MaterialLog>("SELECT * FROM `material_log` WHERE Id >= @Id AND BillId = @BillId Order By Time;", new { Id = minId, BillId = billId });
                foreach (var billLog in billLogs)
                {
                    var changeBillLog = ClassExtension.ParentCopyToChild <MaterialLog, MaterialLogChange>(billLog);
                    if (!materials.ContainsKey(billId))
                    {
                        continue;
                    }
                    var material = materials[billId];
                    if (!material.Init)
                    {
                        material.Init   = true;
                        material.Number = billLog.OldNumber;
                    }
                    var update = materialLogs.FirstOrDefault(x => x.Id == billLog.Id);
                    if (update == null)
                    {
                        billLog.OldNumber = material.Number;
                    }
                    var num = update?.Number ?? billLog.Number;
                    // 1 入库; 2 出库;3 冲正;
                    switch (billLog.Type)
                    {
                    case MaterialOp.入库:
                        billLog.Number    = num;
                        billLog.OldNumber = material.Number;
                        material.Number  += num;
                        break;

                    case MaterialOp.出库:
                        billLog.Number = num;
                        if (billLog.Number > material.Number)
                        {
                            result.datas.Add(billLog.Name);
                            result.errno = Error.MaterialLogConsumeLaterError;
                            return(result);
                        }
                        billLog.OldNumber = material.Number;
                        material.Number  -= num;
                        break;

                    case MaterialOp.冲正:
                        billLog.Number    = num;
                        billLog.OldNumber = material.Number;
                        material.Number   = num;
                        break;
                    }
                    changeBillLog.ChangeNumber    = billLog.Number;
                    changeBillLog.ChangeOldNumber = billLog.OldNumber;
                    newLogs.Add(billLog);
                    newLogChanges.Add(changeBillLog);
                }
            }

            if (newLogChanges.All(x => x.ChangeNumber == x.Number))
            {
                return(Result.GenError <DataResult>(Error.Success));
            }
            var planLogs = newLogChanges.Where(x => x.PlanId != 0 && x.ChangeNumber != x.Number);

            if (planLogs.Any())
            {
                var existProductionPlanBills = ServerConfig.ApiDb.Query <ProductPlanBill>(
                    "SELECT * FROM `production_plan_bill` WHERE MarkedDelete = 0 AND PlanId IN @PlanId AND BillId IN @BillId;",
                    new
                {
                    PlanId = planLogs.Select(x => x.PlanId),
                    BillId = planLogs.Select(x => x.BillId),
                });
                foreach (var billLog in newLogChanges.OrderByDescending(x => x.Id))
                {
                    if (billLog.PlanId != 0)
                    {
                        var planBill = existProductionPlanBills.FirstOrDefault(x =>
                                                                               x.PlanId == billLog.PlanId && x.BillId == billLog.BillId);
                        if (planBill != null)
                        {
                            // 1 退回; 2 领用;
                            switch (billLog.Type)
                            {
                            case MaterialOp.入库:
                                planBill.ActualConsumption += billLog.Number;
                                break;

                            case MaterialOp.出库:
                                planBill.ActualConsumption -= billLog.Number;
                                break;

                            case MaterialOp.冲正:
                                break;
                            }
                        }
                    }
                }

                //var productionPlanBills = new List<ProductionPlanBill>();
                foreach (var billLog in newLogChanges)
                {
                    if (billLog.PlanId != 0)
                    {
                        var planBill = existProductionPlanBills.FirstOrDefault(x =>
                                                                               x.PlanId == billLog.PlanId && x.BillId == billLog.BillId);
                        if (planBill != null)
                        {
                            // 1 退回; 2 领用;
                            switch (billLog.Type)
                            {
                            case MaterialOp.入库:
                                if (planBill.ActualConsumption < billLog.ChangeNumber)
                                {
                                    result.datas.Add(billLog.Name);
                                    result.errno = Error.ProductionPlanBillActualConsumeLess;
                                    return(result);
                                }
                                planBill.ActualConsumption -= billLog.ChangeNumber;
                                break;

                            case MaterialOp.出库:
                                planBill.ActualConsumption += billLog.ChangeNumber;
                                break;

                            case MaterialOp.冲正:
                                break;
                            }
                        }
                    }
                }

                ServerConfig.ApiDb.Execute(
                    "UPDATE `production_plan_bill` SET `ActualConsumption` = @ActualConsumption WHERE `Id` = @Id;",
                    existProductionPlanBills);
            }

            var purchases = newLogChanges.Where(x => x.ItemId != 0);

            if (purchases.Any())
            {
                //var erpIds = purchases.Select(x => int.TryParse(x.Purpose.Replace("Erp采购-", ""), out var erpId) ? erpId : 0).Where(y => y != 0);
                //var pBillIds = purchases.Select(x => x.BillId);
                var purchaseItemIds = purchases.Select(x => x.ItemId).Where(x => x != 0);
                var purchaseItems   = ServerConfig.ApiDb.Query <MaterialPurchaseItem>(
                    "SELECT a.*, b.ErpId FROM `material_purchase_item` a " +
                    "JOIN `material_purchase` b ON a.PurchaseId = b.Id " +
                    "WHERE a.Id IN @purchaseItemIds AND a.MarkedDelete = 0 AND b.MarkedDelete = 0;", new
                {
                    purchaseItemIds
                });

                foreach (var purchase in purchases)
                {
                    var pItem = purchaseItems.FirstOrDefault(x => x.Id == purchase.ItemId);
                    //if (purchase.ChangeNumber < purchase.Number)
                    if (pItem != null)
                    {
                        pItem.Stock += purchase.ChangeNumber - purchase.Number;
                    }
                }

                ServerConfig.ApiDb.Execute("UPDATE `material_purchase_item` SET `Stock` = @Stock WHERE `Id` = @Id;",
                                           purchaseItems);
            }
            if (newLogs.Any())
            {
                ServerConfig.ApiDb.Execute(
                    "UPDATE `material_log` SET `Number` = @Number, `OldNumber` = @OldNumber WHERE `Id` = @Id;",
                    newLogs);

                ServerConfig.ApiDb.Execute(
                    "UPDATE `material_management` SET " +
                    "`InTime` = IF(ISNULL(`InTime`) OR `InTime` != @InTime, @InTime, `InTime`), " +
                    "`OutTime` = IF(ISNULL(`OutTime`) OR `OutTime` != @OutTime, @OutTime, `OutTime`), " +
                    "`Number` = @Number WHERE `BillId` = @BillId;",
                    materials.Values.Where(x => x.Init));

                ServerConfig.ApiDb.Execute(
                    "INSERT INTO `material_log_change` (`NewTime`, `Id`, `Time`, `BillId`, `Code`, `NameId`, `Name`, `SpecificationId`, `Specification`, `Type`, `Mode`, `Purpose`, `PlanId`, `Plan`, `Number`, `OldNumber`, `RelatedPerson`, `Manager`, `ChangeNumber`, `ChangeOldNumber`) " +
                    "VALUES ( @NewTime, @Id, @Time, @BillId, @Code, @NameId, @Name, @SpecificationId, @Specification, @Type, @Mode, @Purpose, @PlanId, @Plan, @Number, @OldNumber, @RelatedPerson, @Manager, @ChangeNumber, @ChangeOldNumber);",
                    newLogChanges.OrderBy(x => x.BillId).ThenBy(y => y.Time).Select(z =>
                {
                    z.NewTime = markedDateTime;
                    return(z);
                }));

                //TimerHelper.DayBalance(newLogs.GroupBy(x => x.Time).Where(y => !y.Key.InSameDay(markedDateTime)).Select(z => z.Key));
                //TimerHelper.DayBalance(newLogs);
            }


            return(Result.GenError <DataResult>(Error.Success));
        }