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(); showAvailable.Checked = true; } 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) { needOrderList = OrderDetailRpc.GetNeedOrderWeightBill(tab2DateSelect.Date.Value, GetSelectType()); BindPreOrderGrid(); orderList = OrderDetailRpc.GetOrderDetail(tab2DateSelect.Date.Value, 8, 1); 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() { 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 ? "隐藏" : "显示"; } preOrderGrid.Refresh(); } void BindOrderGrid() { 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; } 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 = (int)orderGrid.CurrentRow.Cells["O_Order"].Value; else currentOrder = OrderDetailRpc.GetMaxOrder(tab2DateSelect.Date.Value); 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; order.Date = tab2DateSelect.Date.Value; var needUpdate = ReOrder(order, true); OrderDetailRpc.Insert(needUpdate, order); orderList = OrderDetailRpc.GetOrderDetail(tab2DateSelect.Date.Value, 8, tab2PageNumber); BindOrderGrid(); needOrderList.Remove(entity); BindPreOrderGrid(); } else { entity.Show = !entity.Show; OrderDetailRpc.ChangeShowType(entity.WeightBill_ID, entity.Show); var row = preOrderGrid.CurrentRow; if (entity.Show) row.DefaultCellStyle.BackColor = preOrderGrid.RowsDefaultCellStyle.BackColor; else row.DefaultCellStyle.BackColor = Color.YellowGreen; ((DataGridViewButtonCell)row.Cells["P_Hidden"]).Value = entity.Show ? "隐藏" : "显示"; preOrderGrid.Refresh(); } } 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 backInfo = OrderDetailRpc.GetBackWeightBillInfo(entity.WeightBill_ID, entity.ID); if (entity.PlanNumber > backInfo.LastNumber) throw new Exception("排宰总头数多余过磅头数"); if (entity.PlanNumber == backInfo.LastNumber) return; var item = needOrderList.FirstOrDefault(x => x.WeightBill_ID == backInfo.WeightBill_ID); if (item == null) { item = new NeedOrderEntity(); needOrderList.Add(item); item.WeightBill_ID = backInfo.WeightBill_ID; item.Supplier_Name = backInfo.Supplier_Name; item.HouseNames = backInfo.HouseNames; item.Number = backInfo.Number; item.AlreadyNumber = backInfo.AlreadyNumber; item.WeighTime = backInfo.WeighTime; item.B3ID = entity.B3WeighBill_ID; } if (entity.PlanNumber == 0) { orderList.Remove(entity); var list = ReOrder(entity, false); OrderDetailRpc.Delete(list, entity.ID); orderList = OrderDetailRpc.GetOrderDetail(tab2DateSelect.Date.Value, 8, tab2PageNumber); BindOrderGrid(); } else OrderDetailRpc.UpdateNumber(entity.ID, entity.PlanNumber); item.AlreadyNumber = backInfo.AlreadyNumber + entity.PlanNumber; BindOrderGrid(); BindPreOrderGrid(); } else if ((e.ColumnIndex == orderGrid.ColumnCount - 1))//急宰 { entity.IsHurryButcher = !entity.IsHurryButcher; OrderDetailRpc.UpdateHurryFlag(entity.ID, entity.IsHurryButcher); BindOrderGrid(); } } List> ReOrder(OrderDetail dealDetail, bool isAdd) { var result = new List>(); foreach (var item in orderList.OrderByDescending(x => x.Order)) { if (item.Order < dealDetail.Order) break; item.Order += isAdd ? 1 : -1; result.Add(new CTuple(item.ID, item.Order)); } return result; } 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) { needOrderList = OrderDetailRpc.GetNeedOrderWeightBill(tab2DateSelect.Date.Value, GetSelectType()); BindPreOrderGrid(); } static int tab2PageNumber = 1; private void _2FirstPageBtn_Click(object sender, EventArgs e) { if (tab2PageNumber != 1) { tab2PageNumber = 1; orderList = OrderDetailRpc.GetOrderDetail(tab2DateSelect.Date.Value, 8, tab2PageNumber); BindOrderGrid(); } } private void _2PrePageBtn_Click(object sender, EventArgs e) { if (tab2PageNumber != 1) { tab2PageNumber -= 1; orderList = OrderDetailRpc.GetOrderDetail(tab2DateSelect.Date.Value, 8, tab2PageNumber); BindOrderGrid(); } } private void _2NextPageBtn_Click(object sender, EventArgs e) { if (tab2PageNumber != OrderDetailRpc.GetMaxPageNumber(tab2DateSelect.Date.Value, 8)) { tab2PageNumber += 1; orderList = OrderDetailRpc.GetOrderDetail(tab2DateSelect.Date.Value, 8, tab2PageNumber); BindOrderGrid(); } } private void _2LastPageBtn_Click(object sender, EventArgs e) { var max = OrderDetailRpc.GetMaxPageNumber(tab2DateSelect.Date.Value, 8); if (tab2PageNumber != max) { tab2PageNumber = max; orderList = OrderDetailRpc.GetOrderDetail(tab2DateSelect.Date.Value, 8, tab2PageNumber); BindOrderGrid(); } } } }