Esempio n. 1
0
        /// <summary>
        /// 查询并获取新的生产工艺规格文件
        /// </summary>
        /// <param name="state"></param>
        private void updateWorkSheetInfo(object state)
        {
            string worksheetNo = (string)state;

            ProductPlan productPlan =
                ProductPlanDAL.GetProductPlan("where worksheetno='" + worksheetNo + "'");

            if (productPlan == null)
            {
                return;
            }

            Crafwork crafwork = CrafworkDAL.GetCrafwork("where id=" + productPlan.Mid);

            if (crafwork == null)
            {
                return;
            }

            WorksheetNo = worksheetNo;
            this.Dispatcher.Invoke(() => {
                tbQrcode.Text        = string.Empty;
                tbWroksheetNo.Text   = productPlan.WorkSheetNo;
                tbCrafworkCode.Text  = crafwork.CrafworkCode;
                tbSpecification.Text = productPlan.Specification;
                tbMaterialNo.Text    = productPlan.MaterialNo;
                tbColor.Text         = productPlan.Color;
                tbLength.Text        = productPlan.Length + "";
                tbBack.Text          = productPlan.Bak;
                tbArrLength.Text     = productPlan.ArrLength + "";
            });

            // 获取工艺参数文件
            ProductionInfo.PdfService.PdfFileName = crafwork.FileName;
        }
Esempio n. 2
0
        public static List <ProductPlan> GetProductPlan()
        {
            var list  = new List <ProductPlan>();
            var bill  = new JoinAlias(typeof(ProductPlan));
            var query = new DQueryDom(bill);

            query.Columns.Add(DQSelectColumn.Field("ID"));
            query.Columns.Add(DQSelectColumn.Field("PlanNumber"));
            query.Where.Conditions.Add(DQCondition.Or(DQCondition.And(DQCondition.GreaterThanOrEqual("EndDate", DateTime.Today), DQCondition.LessThanOrEqual("Date", DateTime.Today)), DQCondition.And(DQCondition.GreaterThanOrEqual("EndDate", DateTime.Today.AddDays(-1)), DQCondition.LessThanOrEqual("Date", DateTime.Today.AddDays(-1))), DQCondition.And(DQCondition.GreaterThanOrEqual("EndDate", DateTime.Today.AddDays(-2)), DQCondition.LessThanOrEqual("Date", DateTime.Today.AddDays(-2))), DQCondition.And(DQCondition.GreaterThanOrEqual("EndDate", DateTime.Today.AddDays(-3)), DQCondition.LessThanOrEqual("Date", DateTime.Today.AddDays(-3)))));
            query.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.已审核));
            using (var context = new TransactionContext())
            {
                using (var reader = context.Session.ExecuteReader(query))
                {
                    while (reader.Read())
                    {
                        var productPlan = new ProductPlan
                        {
                            ID         = (long)reader[0],
                            PlanNumber = (string)reader[1]
                        };
                        list.Add(productPlan);
                    }
                }
            }
            return(list);
        }
        public ActionResult UpdateProductPlan(int?id)
        {
            int ab = Convert.ToInt32(Session["id"]);
            int bc = Convert.ToInt32(Session["Designation"]);

            if (ab != 0 && bc == 2)
            {
                if (id == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }
                //Servicess ServiceUpdate = db.Servicesses.Find(id);
                ProductPlan productPlan = db.ProductPlans.Find(id);
                if (productPlan == null)
                {
                    return(HttpNotFound());
                }
                return(View(productPlan));
            }
            else
            {
                FormsAuthentication.SignOut();
                return(RedirectToAction("Login", "Login"));
            }
        }
Esempio n. 4
0
    {//最简单、原始的、可能的查询计划
        public Plan createPlan(QueryData data, Transaction tx)
        {
            //第一步:为每一个出现的表或者视图定义创建一个plan
            List <Plan> plans = new List <Plan>();

            foreach (string tblname in data.tables())
            {
                string viewdef = SimpleDB.mdMgr().getViewDef(tblname, tx);
                if (viewdef != null)
                {
                    plans.Add(SimpleDB.planner().createQueryPlan(viewdef, tx));
                }
                else
                {
                    plans.Add(new TablePlan(tblname, tx));
                }
            }

            //第二步:创建所有表计划的叉积运算
            Plan p = plans[0];

            plans.RemoveAt(0);
            foreach (Plan nextplan in plans)
            {
                p = new ProductPlan(p, nextplan);
            }

            //第三步:为predicate添加一个选择运算selection
            p = new SelectPlan(p, data.pred());

            //第四步:做字段名称上的投影运算
            p = new ProjectPlan(p, data.fields());
            return(p);
        }
        public ActionResult DeleteProductPlan(int id)
        {
            ProductPlan productPlan = db.ProductPlans.Find(id);

            db.ProductPlans.Remove(productPlan);
            db.SaveChanges();
            return(RedirectToAction("ProductPlanInfo"));
        }
 public ActionResult UpdateProductPlan([Bind(Include = "ProductPlanId,ProductName")] ProductPlan productPlan)
 {
     if (ModelState.IsValid)
     {
         db.Entry(productPlan).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("ProductPlanInfo"));
     }
     return(View(productPlan));
 }
Esempio n. 7
0
        public static ProductPlan GetProductPlan(string whereString)
        {
            ProductPlan productPlan = null;
            string      sql         = "select * from [Mes].[dbo].[T_Plan] " + whereString;

            using (SqlDataReader reader = DBHelper.ExecuteSqlReader(sql))
            {
                if (reader != null && reader.Read())
                {
                    try
                    {
                        productPlan = new ProductPlan();
                        if (DBNull.Value != reader["id"])
                        {
                            productPlan.Id = Convert.ToInt32(reader["id"]);
                        }
                        if (DBNull.Value != reader["mid"])
                        {
                            productPlan.Mid = Convert.ToInt32(reader["mid"]);
                        }
                        if (DBNull.Value != reader["worksheetno"])
                        {
                            productPlan.WorkSheetNo = reader["worksheetno"].ToString();
                        }
                        if (DBNull.Value != reader["materialno"])
                        {
                            productPlan.MaterialNo = reader["materialno"].ToString();
                        }
                        if (DBNull.Value != reader["color"])
                        {
                            productPlan.Color = reader["color"].ToString();
                        }
                        if (DBNull.Value != reader["specification"])
                        {
                            productPlan.Specification = reader["specification"].ToString();
                        }
                        if (DBNull.Value != reader["length"])
                        {
                            productPlan.Length = Convert.ToInt32(reader["length"]);
                        }
                        if (DBNull.Value != reader["bak"])
                        {
                            productPlan.Bak = reader["bak"].ToString();
                        }
                        if (DBNull.Value != reader["arrlength"])
                        {
                            productPlan.ArrLength = Convert.ToInt32(reader["arrlength"]);
                        }
                    }
                    catch { productPlan = null; }
                }
            }
            return(productPlan);
        }
 public ActionResult ProductPlan(ProductPlan productPlan)
 {
     if (ModelState.IsValid)
     {
         db.ProductPlans.Add(productPlan);
         db.SaveChanges();
         return(RedirectToAction("ProductPlanInfo"));
     }
     else
     {
         return(View());
     }
 }
Esempio n. 9
0
        private static double AnalyzeRisk(ProductPlan greatSmartThing)
        {
            double riskFactor  = 1;
            double initialCost = greatSmartThing.InfrastructureCost + greatSmartThing.MarketingCost;

            if (initialCost > 100000)
            {
                riskFactor *= 0.75;
            }
            riskFactor *= ((greatSmartThing.UnitPrice - greatSmartThing.UnitProductionCost) / greatSmartThing.UnitPrice);

            return(riskFactor);
        }
Esempio n. 10
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (ToolManager.CheckParams("IsDelete"))
                {
                    List <string> sqls       = new List <string>();
                    string        planNumber = ToolManager.GetParamsString("PlanNumber");
                    string        sql        = string.Format(@"delete ProductPlanSubDetail where PlanNumber='{0}' ", planNumber);
                    sqls.Add(sql);
                    sql = string.Format(@" delete ProductPlanSub where PlanNumber='{0}' ", planNumber);
                    sqls.Add(sql);
                    sql = string.Format(@"  delete ProductPlanDetail where PlanNumber='{0}' ", planNumber);
                    sqls.Add(sql);
                    sql = string.Format(@" delete ProductPlan where PlanNumber='{0}' ", planNumber);
                    sqls.Add(sql);
                    string error  = string.Empty;
                    string result = SqlHelper.BatchExecuteSql(sqls, ref error) ? "ok" : error;
                    Tool.WriteLog(Tool.LogType.Operating, "删除开工单" + planNumber, result);
                    Response.Write(result);
                    Response.End();
                    return;
                }
                //确认领料
                if (ToolManager.CheckQueryString("IsConfirmCollar"))
                {
                    string type = ToolManager.GetQueryString("IsConfirmCollar");
                    type = type.Equals("sc") ? "生产出库" : "包装出库";
                    string   error  = string.Empty;
                    string   result = string.Empty;
                    string   userId = ToolCode.Tool.GetUser().UserNumber;
                    string[] array  = ToolManager.GetQueryString("PlanNumbers").Split(',');

                    foreach (string str in array)
                    {
                        if (!WorkOrderManager.EnterKGD(str, userId, ref error, type))
                        {
                            result += error;
                        }
                    }
                    if (string.IsNullOrEmpty(result))
                    {
                        Response.Write("1");
                        Response.End();
                        return;
                    }
                    else
                    {
                        Response.Write(result);
                        Response.End();
                        return;
                    }
                }
                //查询

                if (ToolManager.CheckQueryString("pageIndex"))
                {
                    GetPageOperation("btnSearch", "EditProductPlan.aspx", "ProductPlanDetailList.aspx", "ProductPlanSubList.aspx");
                }
                //审核
                if (ToolManager.CheckQueryString("check"))
                {
                    string check  = ToolManager.GetQueryString("check");
                    string temp   = ProductPlan.check(ToolManager.GetQueryString("check"));
                    bool   result = temp == "1" ? true : false;
                    if (result)
                    {
                        Tool.WriteLog(Tool.LogType.Operating, "审核开工单信息" + ToolManager.ReplaceSingleQuotesToBlank(check), "审核成功");
                        Response.Write(temp);
                        Response.End();
                        return;
                    }
                    else
                    {
                        Tool.WriteLog(Tool.LogType.Operating, "审核开工单信息" + ToolManager.ReplaceSingleQuotesToBlank(check), "审核失败!原因" + temp);
                        Response.Write(temp);
                        Response.End();
                        return;
                    }
                }
            }
        }
        public object ConsumeMaterial([FromBody] ConsumeMaterial materialManagement)
        {
            if (materialManagement.Bill == null)
            {
                return(Result.GenError <Result>(Error.ParamError));
            }

            foreach (var bill in materialManagement.Bill)
            {
                bill.Type = MaterialOp.出库;
                bill.CorrectNumber();
            }
            var mBills = materialManagement.Bill.Where(x => x.Number > 0);

            if (!mBills.Any())
            {
                return(Result.GenError <Result>(Error.MaterialNotEmpty));
            }

            //出库时物料必须存在
            if (mBills.Any(x => x.Type == MaterialOp.出库 && x.BillId == 0))
            {
                return(Result.GenError <Result>(Error.MaterialBillNotExist));
            }

            var billIds = mBills.Select(x => x.BillId).Distinct();

            if (!billIds.Any())
            {
                return(Result.GenError <Result>(Error.MaterialNotEmpty));
            }

            var allBills = MaterialHelper.GetDetails(billIds).ToDictionary(x => x.BillId);

            if (allBills.Count() != billIds.Count())
            {
                return(Result.GenError <Result>(Error.MaterialBillNotExist));
            }

            var         createUserId   = Request.GetIdentityInformation();
            var         markedDateTime = DateTime.Now;
            ProductPlan plan           = null;

            if (materialManagement.PlanId != 0)
            {
                plan = ProductPlanHelper.Instance.Get <ProductPlan>(materialManagement.PlanId);
                if (plan == null)
                {
                    return(Result.GenError <Result>(Error.ProductionPlanNotExist));
                }
            }

            var result = new DataResult();

            #region 检验库存
            var consumeBills = billIds.Select(x => new OpMaterial
            {
                BillId = x,
                Number = mBills.Where(y => y.BillId == x).Sum(z => z.Number)
            }).ToList();
            var less = consumeBills.Where(x => x.Number > allBills[x.BillId].Number).Select(x => allBills[x.BillId].Code);
            if (less.Any())
            {
                result.errno = Error.MaterialLess;
                result.datas.AddRange(less);
                return(result);
            }
            var oldBatches = new Dictionary <int, MaterialBatch>();
            var upIds      = new Dictionary <int, int>();
            //出库指定的批次
            var batchBills = mBills.Where(x => x.HaveBatch);
            if (batchBills.Any())
            {
                var bIds = batchBills.SelectMany(x => x.Batches.Select(y => y.Id)).Distinct();
                oldBatches.AddRange(MaterialBatchHelper.GetDetails(bIds).ToDictionary(x => x.Id));
                if (bIds.Count() != oldBatches.Count())
                {
                    return(Result.GenError <DataResult>(Error.MaterialBatchNotExist));
                }
                var mergeBatch = bIds.Select(x =>
                {
                    var oldBatch = oldBatches[x];
                    var batches  = batchBills.Where(y => y.BillId == oldBatch.BillId).SelectMany((Func <OpMaterial, IEnumerable <MaterialBatchSimple> >)(y => y.Batches.Where((Func <MaterialBatchSimple, bool>)(z => z.Id == oldBatch.Id))));
                    return(new MaterialBatch
                    {
                        Id = oldBatch.Id,
                        BatchId = oldBatch.BatchId,
                        Batch = oldBatch.Batch,
                        BillId = oldBatch.BillId,
                        SupplierId = oldBatch.SupplierId,
                        Number = batches.Sum(y => y.Number),
                    });
                });
                var much = mergeBatch.Where(x => oldBatches[x.Id].Left < x.Number);
                if (much.Any())
                {
                    result = new DataResult {
                        errno = Error.MaterialBatchLeftLess
                    };
                    result.datas.AddRange(much.Select(x => $"{x.Batch} {allBills[x.BillId].Code} {x.Supplier}"));
                    return(result);
                }
            }

            var noBatchBills = mBills.Where(x => !x.HaveBatch);
            if (noBatchBills.Any())
            {
                var noBillIds     = noBatchBills.Select(x => x.BillId).Distinct();
                var noZeroBatches = MaterialBatchHelper.GetDetailsNoZero(noBillIds)
                                    .GroupBy(x => x.BillId).ToDictionary(x => x.Key);
                //.GroupBy(x => x.BillId).ToDictionary(x => x.Key, x => x.Select(y => y));

                var mergeBatch = noBillIds.Select(billId =>
                {
                    var batches = noBatchBills.Where(y => y.BillId == billId);
                    var number  = batches.Sum(y => y.Number);
                    return(new MaterialBatch
                    {
                        BillId = billId,
                        Number = number,
                    });
                });
                var noZeroMergeBatch = noBillIds.Select(billId =>
                {
                    var left = noZeroBatches.ContainsKey(billId) ? noZeroBatches[billId].Sum(y => y.Left) : 0;
                    return(new MaterialBatch
                    {
                        BillId = billId,
                        Left = left,
                    });
                }).ToDictionary(x => x.BillId);
                var much = mergeBatch.Where(x => noZeroMergeBatch[x.BillId].Left < x.Number);
                if (much.Any())
                {
                    result = new DataResult {
                        errno = Error.MaterialBatchLeftLess
                    };
                    result.datas.AddRange(much.Select(x => $"{x.Batch} {allBills[x.BillId].Code} {x.Supplier}"));
                    return(result);
                }

                foreach (var bill in noBatchBills)
                {
                    var number = bill.Number;
                    foreach (var batch in noZeroBatches[bill.BillId].OrderBy(x => x.Time))
                    {
                        if (number <= 0)
                        {
                            break;
                        }
                        if (!upIds.ContainsKey(batch.Id))
                        {
                            upIds.Add(batch.Id, 0);
                        }

                        var n = 0m;
                        if (number > batch.Left)
                        {
                            number -= batch.Left;
                            n       = batch.Left;
                        }
                        else
                        {
                            n      = number;
                            number = 0;
                        }
                        var z = ClassExtension.CopyTo <MaterialBatch, MaterialBatchSimple>(batch);
                        z.Number = n;
                        bill.Batches.Add(z);
                    }
                }
                oldBatches.AddRange(noZeroBatches.Values.SelectMany(x => x.Where(y => upIds.ContainsKey(y.Id))).ToDictionary(x => x.Id));
            }

            #endregion

            #region 计划领料
            var planChangeBill = new List <ProductPlanBill>();
            var planAddBill    = new List <ProductPlanBill>();
            if (materialManagement.PlanId != 0)
            {
                var planBill = ProductPlanBillHelper.GetPlanBills(materialManagement.PlanId, billIds).ToDictionary(x => x.BillId);
                #region 更新
                var existBill = consumeBills.Where(x => planBill.ContainsKey(x.BillId));
                if (existBill.Any())
                {
                    foreach (var bill in existBill)
                    {
                        planBill[bill.BillId].MarkedDateTime     = markedDateTime;
                        planBill[bill.BillId].ActualConsumption += bill.Number;
                        planChangeBill.Add(planBill[bill.BillId]);
                    }
                }
                #endregion

                #region 添加额外领用的物料
                var extraBill = consumeBills.Where(x => !planBill.ContainsKey(x.BillId));
                if (extraBill.Any())
                {
                    planAddBill.AddRange(extraBill.Select(x => new ProductPlanBill
                    {
                        CreateUserId      = createUserId,
                        MarkedDateTime    = markedDateTime,
                        PlanId            = materialManagement.PlanId,
                        BillId            = x.BillId,
                        ActualConsumption = x.Number,
                        Extra             = true,
                    }));
                }
                #endregion
            }
            #endregion

            var logs = mBills.Select(x =>
            {
                var batches = new List <MaterialBatch>();
                batches.AddRange(x.Batches.Select(y =>
                {
                    var batch            = oldBatches[y.Id];
                    batch.MarkedDateTime = markedDateTime;
                    batch.OutTime        = markedDateTime;
                    batch.Left          -= y.Number;
                    var z   = ClassExtension.CopyTo <MaterialBatchSimple, MaterialBatch>(y);
                    z.Batch = batch.Batch;
                    z.Price = batch.Price;
                    return(z);
                }));
                var log = new MaterialLog(createUserId, markedDateTime, x.Type, x.Purpose, x.Number,
                                          allBills[x.BillId].Number, x.RelatedPerson, createUserId, allBills[x.BillId], batches, plan);
                return(log);
            }).ToList();
            if (oldBatches.Any())
            {
                MaterialBatchHelper.UpdateConsumeLeft(oldBatches.Values);
            }

            Task.Run(() =>
            {
                if (planChangeBill.Any())
                {
                    ProductPlanBillHelper.UpdateActualConsumptions(planChangeBill);
                }

                if (planAddBill.Any())
                {
                    ProductPlanBillHelper.Instance.Add(planAddBill);
                }
                if (logs.Any())
                {
                    MaterialLogHelper.Instance.Add(logs);
                }
                if (allBills.Keys.Any())
                {
                    HMaterialHelper.UpdateBillPrice(allBills.Keys);
                }
            });
            try
            {
                #region 消耗
                foreach (var bill in consumeBills)
                {
                    allBills[bill.BillId].OutTime = markedDateTime;
                    allBills[bill.BillId].Number -= bill.Number;
                }
                MaterialHelper.Consume(allBills.Values);
                #endregion
            }
            catch (Exception e)
            {
                Log.Error(allBills.Values.ToJSON());
                Log.Error(e);
            }

            return(result);
        }
        public MaterialLog(string userId, DateTime time, MaterialOp type, int mode, string purpose, decimal number, decimal oldNumber, string relatedPerson, string manager, int itemId,
                           MaterialBillDetail bill, IEnumerable <MaterialBatch> batches, ProductPlan plan = null)
        {
            CreateUserId    = userId;
            MarkedDateTime  = time;
            Time            = time;
            BillId          = bill.Id;
            Code            = bill.Code;
            CategoryId      = bill.CategoryId;
            Category        = bill.Category;
            NameId          = bill.NameId;
            Name            = bill.Name;
            SpecificationId = bill.SpecificationId;
            Specification   = bill.Specification;

            BIds         = batches.Select(x => x.Id).Join();
            Batches      = batches.Select(x => x.Batch).Join();
            BatchNumbers = batches.Select(x => x.Number).Join();
            BatchAmount  = batches.Sum(x => x.Number * x.Price);

            Type          = type;
            Mode          = mode;
            Purpose       = plan?.Plan ?? purpose;
            PlanId        = plan?.Id ?? 0;
            Plan          = plan?.Plan ?? "";
            Number        = number;
            OldNumber     = oldNumber;
            RelatedPerson = relatedPerson;
            Manager       = manager;
            ItemId        = itemId;
        }
 public MaterialLog(string userId, DateTime time, MaterialOp type, int mode, string purpose, decimal number, decimal oldNumber, string relatedPerson, string manager,
                    MaterialBillDetail bill, IEnumerable <MaterialBatch> batches, ProductPlan plan = null)
     : this(userId, time, type, mode, purpose, number, oldNumber, relatedPerson, manager, 0, bill, batches, plan)
 {
 }