using BO; using BO.BO.Bill; using BO.Utils.BillRpc; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace QualityAndOrder { partial class QualityOrderForm { List needOrderList; List orderList; Thread tb2SyncThread; void Tab2Init() { tab2DateSelect.Date = DateTime.Today; orderGrid.AutoGenerateColumns = false; preOrderGrid.AutoGenerateColumns = false; orderGrid.DataSource = null; preOrderGrid.DataSource = null; AddKeyPadForTab2(); } private void AddKeyPadForTab2() { for (var i = 1; i < 10; i++) { var btn = new Button() { Name = "_2" + i, Text = i.ToString(), Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; btn.Click += (sender, e) => { InputPlanNumber(btn.Text); }; tab2KeyPanel.Controls.Add(btn); } var zero = new Button() { Name = "_20", Text = "0", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; zero.Click += (sender, e) => { InputPlanNumber(zero.Text); }; tab2KeyPanel.Controls.Add(zero); var back = new Button() { Name = "_2back", Text = "←", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; back.Click += (sender, e) => { InputPlanNumber(back.Text); }; tab2KeyPanel.Controls.Add(back); var clear = new Button() { Name = "_2clear", Text = "清空", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; clear.Click += (sender, e) => { InputPlanNumber(clear.Text); }; tab2KeyPanel.Controls.Add(clear); } void InputPlanNumber(string input) { if (orderGrid.CurrentCell == null) throw new Exception("请选择一条排宰明细"); var tag = orderGrid.CurrentRow.DataBoundItem as OrderDetail; tag.PlanNumber = GetAfterNumber(tag.PlanNumber, input) ?? 0; orderGrid.Refresh(); } private void tab2SyncBtn_Click(object sender, EventArgs e) { BindPreOrderGrid(); BindOrderGrid(); if (tb2SyncThread == null) { tb2SyncThread = new Thread(Tab2SyncB3ID); tb2SyncThread.Start(); } } private void Tab2SyncB3ID() { while (true) { bool orderChange = false; bool needListChange = false; var ids = orderList.Where(x => x.B3WeighBill_ID == null).Select(x => (long?)x.WeightBill_ID).Distinct().ToList(); var needOrderIds = needOrderList.Where(x => x.B3ID == null).Select(x => (long?)x.WeightBill_ID); ids.AddRange(needOrderIds.Except(ids)); if (ids.Any()) { var result = WeightBillRpc.SyncBillB3Ids(ids); foreach (var item in result) { var left = orderList.Where(x => x.WeightBill_ID == item.Item1); foreach (var lEntity in left) { lEntity.B3WeighBill_ID = item.Item2; if (!orderChange) orderChange = true; } var rFirst = needOrderList.FirstOrDefault(x => x.WeightBill_ID == item.Item1); if (rFirst != null) { rFirst.B3ID = item.Item2; if (!needListChange) needListChange = true; } } } if (orderChange) { this.Invoke(new InvokeHandler(delegate() { orderGrid.Refresh(); })); } if (needListChange) { this.Invoke(new InvokeHandler(delegate() { preOrderGrid.Refresh(); })); } Thread.Sleep(2000); } } void BindPreOrderGrid() { needOrderList = OrderDetailRpc.GetNeedOrderWeightBill(tab2DateSelect.Date.Value, GetSelectType()); preOrderGrid.DataSource = needOrderList.OrderBy(x => x.WeighTime).ToList(); foreach (DataGridViewRow row in preOrderGrid.Rows) { var show = (bool)row.Cells["P_Show"].Value; if (!show) row.DefaultCellStyle.BackColor = Color.YellowGreen; ((DataGridViewButtonCell)row.Cells["P_Hidden"]).Value = show ? "隐藏" : "显示"; } InitScrollBar3(); preOrderGrid.Refresh(); } void BindOrderGrid() { orderList = OrderDetailRpc.GetOrderDetail(); orderGrid.DataSource = orderList.OrderByDescending(x => x.Order).ToList(); foreach (DataGridViewRow row in orderGrid.Rows) { if ((bool)row.Cells["O_IsHurryButcher"].Value) row.DefaultCellStyle.BackColor = Color.YellowGreen; } InitScrollBar2(); orderGrid.Refresh(); } private void preOrderGrid_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex == -1) return; if (e.ColumnIndex < preOrderGrid.ColumnCount - 2) return; var entity = preOrderGrid.CurrentRow.DataBoundItem as NeedOrderEntity; if (e.ColumnIndex == preOrderGrid.ColumnCount - 2) { var currentOrder = 0; if (orderGrid.CurrentRow != null) currentOrder = OrderDetailRpc.GetCurrentOrder((long)orderGrid.CurrentRow.Cells["O_ID"].Value); else currentOrder = OrderDetailRpc.GetMaxOrder(); currentOrder++; var order = new OrderDetail(); order.Order = currentOrder; order.LiveColonyHouse_Name = entity.HouseNames; order.PlanNumber = entity.LastNumber; order.WeightBill_ID = entity.WeightBill_ID; order.B3WeighBill_ID = entity.B3ID; OrderDetailRpc.Insert(order); BindOrderGrid(); } else { entity.Show = !entity.Show; OrderDetailRpc.ChangeShowType(entity.WeightBill_ID, entity.Show); } BindPreOrderGrid(); } private void orderGrid_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex == -1) return; if (e.ColumnIndex < orderGrid.ColumnCount - 2) return; var entity = orderGrid.CurrentRow.DataBoundItem as OrderDetail; if (e.ColumnIndex == orderGrid.ColumnCount - 2)//确定 { if (entity.PlanNumber < 0) throw new Exception("排宰头数不能小于0"); var lastNumber = OrderDetailRpc.GetLastNumber(entity.WeightBill_ID, entity.ID); if (entity.PlanNumber > lastNumber) throw new Exception("排宰总头数多余过磅头数"); if (entity.PlanNumber == lastNumber) return; if (entity.PlanNumber == 0) OrderDetailRpc.Delete(entity.ID); else OrderDetailRpc.UpdateNumber(entity.ID, entity.PlanNumber); BindPreOrderGrid(); } else if ((e.ColumnIndex == orderGrid.ColumnCount - 1))//急宰 { entity.IsHurryButcher = !entity.IsHurryButcher; OrderDetailRpc.UpdateHurryFlag(entity.ID, entity.IsHurryButcher); } BindOrderGrid(); } bool? GetSelectType() { bool? type = null; if (showAvailable.Checked) type = true; else if (showHidden.Checked) type = false; return type; } private void showRadio_CheckedChanged(object sender, EventArgs e) { BindPreOrderGrid(); } private void InitScrollBar2() { vScrollBar2.Maximum = (orderGrid.RowCount - orderGrid.DisplayedRowCount(false) + 30) * orderGrid.RowTemplate.Height; vScrollBar2.Minimum = 0; vScrollBar2.SmallChange = orderGrid.RowTemplate.Height; vScrollBar2.LargeChange = orderGrid.RowTemplate.Height * 30; this.vScrollBar2.Scroll += (sender, e) => { orderGrid.FirstDisplayedScrollingRowIndex = e.NewValue / orderGrid.RowTemplate.Height; Application.DoEvents(); }; } private void InitScrollBar3() { vScrollBar3.Maximum = (preOrderGrid.RowCount - preOrderGrid.DisplayedRowCount(false) + 30) * preOrderGrid.RowTemplate.Height; vScrollBar3.Minimum = 0; vScrollBar3.SmallChange = preOrderGrid.RowTemplate.Height; vScrollBar3.LargeChange = preOrderGrid.RowTemplate.Height * 30; this.vScrollBar3.Scroll += (sender, e) => { preOrderGrid.FirstDisplayedScrollingRowIndex = e.NewValue / preOrderGrid.RowTemplate.Height; Application.DoEvents(); }; } } }