/// <summary> /// 生成订单和 对应的盒号 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOrder_Click(object sender, EventArgs e) { try { using (_dbcontext = new FlowManageSystemEntities()) { orderRepositoy = new OrderRepository(_dbcontext); orderBoxRepository = new OrderBoxRepository(_dbcontext); OrderPlacing orderPlacing = new OrderPlacing() { OrderDate = Convert.ToDateTime(this.OrderDateTimePic.Text), Type = this.TypeTxtBox.Text, PlanNo = this.PlanNoTxtBox.Text, FinishedProductNo = this.FinishedProductNocBox.Text, ProductTypeNo = this.ProductTypecBox.Text, OnLineQuantity = Convert.ToInt32(this.OnlineQuantityTxtBox.Text), SnMin = SnMinTxtBox.Text, SnMax = SnMinTxtBox.Text, LabelingRequirements = this.LableRequireTxtBox.Text, TestReport = this.TestReportTxtBox.Text, CodingRequirements = this.CodingRequireTxtBox.Text, PackingRequirement = this.PackingRequireTxtBox.Text, SpecialRequirement = this.SpecialRequireTxtBox.Text, TestSoftConfigFile = this.TestSoftConfigFIleTxtBox.Text, Remark = this.RemarkTxtBox.Text, CustomDemandDate = Convert.ToDateTime(this.CustonRequireTimePic.Text), PlannedLaunchDate = Convert.ToDateTime(this.PlanOnlineTimePic.Text), PlanStorageDate = Convert.ToDateTime(this.PlanStorageTimePic.Text), DaysOfProduction = Convert.ToByte(this.ProductDaysTxtBox.Text), OrderCreateTime = DateTime.Now }; //注意此处一对多关联数据的保存 设置关联 IEnumerable <OrderBox> orderBoxes = SnHelper.GetListboxNumber(this.SnMinTxtBox.Text, Convert.ToInt32(this.OnlineQuantityTxtBox.Text)).Select(item => new OrderBox() { //设置导航属性 OrderPlacing = orderPlacing, //设置外键Id OrderId = orderPlacing.OrderId, //盒号 BoxNumber = item, //新建时间 OrderBoxCreateTime = DateTime.Now }); //添加所有 多的 一端数据 orderBoxRepository.AddOrderAllBoxes(orderBoxes); //添加 一的 一端数据 //下单 orderRepositoy.AddOrder(orderPlacing); //一对多的数据一起保存 两个仓储公用一个dbcontext 可以防止添加部分失败 会以一个事务的形式保存 _dbcontext.SaveChanges(); MessageBox.Show("下单成功!"); } } catch (Exception ex) { MessageBox.Show("下单失败,请检查数据" + ex.Message); } }
/// <summary> /// 当前盒完成 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void textBox_BoxNumber_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (!RegexHelper.regExpNumber.IsMatch(this.textBox_DoNumber.Text)) { MessageBox.Show("完成的数量应该是数字"); return; } byte doNumber = Convert.ToByte(this.textBox_DoNumber.Text); DialogResult dialogResult = MessageBox.Show("当前盒完成数量:" + doNumber, "询问", MessageBoxButtons.OKCancel); if (dialogResult == DialogResult.Cancel) { return; } using (_dbcontext = new FlowManageSystemEntities()) { orderBoxRepository = new OrderBoxRepository(_dbcontext); var boxNumber = this.textBox_BoxNumber.Text.Trim(); //通过盒号找到订单号 var id = orderBoxRepository.GetOrderId(boxNumber); List <string> boxNumbersNeedFinished = null; //根据订单号 找到需要完成的所有盒号 if (id != 0) { boxNumbersNeedFinished = orderBoxRepository.GetOrderIdBoxes(id); } else //不存在当前盒号 直接退出 { MessageBox.Show("不存在的盒号,请联系下单人员,检查是否下单错误!"); return; } //根据id找到订单记录 orderRepositoy = new OrderRepository(_dbcontext); //设置界面显示当前计划单号 var order = orderRepositoy.getOrderByOrderId(id); this.lbPlanNo.Text = order.PlanNo; assembleRepository = new AssembleRepository(_dbcontext); //设置界面已组装好的数量 this.lbDoNo.Text = assembleRepository.GetAssembleCount(id).ToString(); //获取已完成的盒号 var hasFinished = assembleRepository.GetAssembleFinishedBoxNo(id); //在组装完成前 判断是否重复扫 if (hasFinished.Contains(this.textBox_BoxNumber.Text.Trim())) { MessageBox.Show("此盒已完成,勿重复扫!"); this.textBox_BoxNumber.Select(); return; } assembleRepository.assembleOneBox(id, boxNumber, doNumber); assembleRepository.SaveChanges(); //获取已完成的盒号 hasFinished = assembleRepository.GetAssembleFinishedBoxNo(id); //设置界面ListBox绑定 unFinishedBoxes.Clear(); boxNumbersNeedFinished.Except(hasFinished).ToList().ForEach(o => unFinishedBoxes.Add(o)); } } }