屠宰场客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

406 lines
13 KiB

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<NeedOrderEntity> needOrderList;
List<OrderDetail> orderList;
Thread tb2SyncB3IDThread;
Thread bt2SyncTask;
void Tab2Init()
{
tab2DateSelect.Date = DateTime.Today;
butcherDateInput.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 butcherSearch_Click(object sender, EventArgs e)
{
if (lastOrderDetail != null && lastOrderDetail.Date != butcherDateInput.Date)
lastOrderDetail = null;
BindOrderGrid();
}
private void tab2SyncBtn_Click(object sender, EventArgs e)
{
if (tb2SyncB3IDThread == null)
{
tb2SyncB3IDThread = new Thread(Tab2SyncB3ID);
tb2SyncB3IDThread.Start();
}
if (bt2SyncTask == null || !bt2SyncTask.IsAlive)
{
bt2SyncTask = new Thread(Tb2SyncTask);
bt2SyncTask.Start();
tab2SyncBtn.BackColor = Color.FromArgb(15, 215, 107);
tab2SyncBtn.ForeColor = Color.White;
}
else
{
bt2SyncTask.Abort();
tab2SyncBtn.BackColor = Color.FromKnownColor(KnownColor.Control);
tab2SyncBtn.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
}
}
void Tb2SyncTask()
{
while (true)
{
this.Invoke(new InvokeHandler(delegate()
{
BindPreOrderGrid();
}));
Thread.Sleep(5000);
}
}
private void Tab2SyncB3ID()
{
while (true)
{
if (orderList == null)
{
Thread.Sleep(5000);
continue;
}
bool orderChange = false;
var ids = orderList.Where(x => x.B3WeighBill_ID == null).Select(x => (long?)x.WeightBill_ID).Distinct().ToList();
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;
}
}
}
if (orderChange)
{
this.Invoke(new InvokeHandler(delegate()
{
orderGrid.Refresh();
}));
}
Thread.Sleep(5000);
}
}
NeedOrderEntity lastPreOrder;
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 ? "隐藏" : "显示";
if (lastPreOrder != null && lastPreOrder.WeightBill_ID == (long)row.Cells["P_WeightBill_ID"].Value)
{
lastPreOrder = row.DataBoundItem as NeedOrderEntity;
if (lastPreOrder.Show)
row.DefaultCellStyle.BackColor = preOrderGrid.RowsDefaultCellStyle.SelectionBackColor;
else
row.DefaultCellStyle.BackColor = Color.Yellow;
}
}
InitScrollBar3();
preOrderGrid.ClearSelection();
try
{
if (r2Roll != -1)
preOrderGrid.FirstDisplayedScrollingRowIndex = r2Roll;
}
catch
{
r2Roll = -1;
}
preOrderGrid.Refresh();
}
OrderDetail lastOrderDetail;
void BindOrderGrid()
{
orderList = OrderDetailRpc.GetOrderDetail(butcherDateInput.Date.Value);
orderGrid.DataSource = orderList.OrderByDescending(x => x.Order).ToList();
if (lastOrderDetail == null && orderGrid.CurrentRow != null)
{
lastOrderDetail = orderGrid.CurrentRow.DataBoundItem as OrderDetail;
}
foreach (DataGridViewRow row in orderGrid.Rows)
{
if ((bool)row.Cells["O_IsHurryButcher"].Value)
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#CC9999");
if ((bool)row.Cells["O_SecondarySplit"].Value)
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#6699CC");
if (lastOrderDetail != null && lastOrderDetail.ID == (long)row.Cells["O_ID"].Value)
{
var cRow = row;
if (orderGrid.Rows.IndexOf(row) == 1)
cRow = orderGrid.Rows[0];
lastOrderDetail = cRow.DataBoundItem as OrderDetail;
var c = orderGrid.RowsDefaultCellStyle.SelectionBackColor;
if (lastOrderDetail.IsHurryButcher)
cRow.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#FF9900");
if (lastOrderDetail.SecondarySplit)
cRow.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#006699");
cRow.DefaultCellStyle.SelectionBackColor = c;
}
}
InitScrollBar2();
orderGrid.ClearSelection();
try
{
if (r1Roll != -1)
orderGrid.FirstDisplayedScrollingRowIndex = r1Roll;
}
catch
{
r1Roll = -1;
}
orderGrid.Refresh();
}
private void preOrderGrid_CellContentClick(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 (lastOrderDetail != null)
currentOrder = OrderDetailRpc.GetCurrentOrder(lastOrderDetail.ID);
else
currentOrder = OrderDetailRpc.GetMaxOrder(butcherDateInput.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 = butcherDateInput.Date.Value;
OrderDetailRpc.Insert(order);
BindOrderGrid();
}
else
{
entity.Show = !entity.Show;
OrderDetailRpc.ChangeShowType(entity.WeightBill_ID, entity.Show);
}
BindPreOrderGrid();
}
private void preOrderGrid_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1)
return;
var entity = preOrderGrid.CurrentRow.DataBoundItem as NeedOrderEntity;
if (e.ColumnIndex != preOrderGrid.ColumnCount - 2)//排宰
{
if (lastPreOrder != null)
{
foreach (DataGridViewRow row in preOrderGrid.Rows)
{
if (lastPreOrder.WeightBill_ID == (long)row.Cells["P_WeightBill_ID"].Value)
{
row.DefaultCellStyle.BackColor = lastPreOrder.Show ? preOrderGrid.RowsDefaultCellStyle.BackColor : Color.YellowGreen;
break;
}
}
}
lastPreOrder = entity;
preOrderGrid.CurrentRow.DefaultCellStyle.SelectionBackColor = lastPreOrder.Show ? preOrderGrid.RowsDefaultCellStyle.SelectionBackColor : Color.Yellow;
}
else
{
lastPreOrder = null;
}
preOrderGrid.Refresh();
}
private void orderGrid_CellContentClick(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();
}
private void orderGrid_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1)
return;
var entity = orderGrid.CurrentRow.DataBoundItem as OrderDetail;
if (e.ColumnIndex == orderGrid.ColumnCount - 2 && entity.PlanNumber == 0)//确定
{
lastOrderDetail = null;
}
else
{
if (lastOrderDetail != null)
{
foreach (DataGridViewRow row in orderGrid.Rows)
{
if (lastOrderDetail.ID == (long)row.Cells["O_ID"].Value)
{
Color c = orderGrid.RowsDefaultCellStyle.BackColor;
if (lastOrderDetail.IsHurryButcher)
c = ColorTranslator.FromHtml("#CC9999");
if (lastOrderDetail.SecondarySplit)
c = ColorTranslator.FromHtml("#6699CC");
row.DefaultCellStyle.BackColor = c;
break;
}
}
}
lastOrderDetail = entity;
var bc = orderGrid.RowsDefaultCellStyle.SelectionBackColor;
if (lastOrderDetail.IsHurryButcher)
bc = ColorTranslator.FromHtml("#FF9900");
if (lastOrderDetail.SecondarySplit)
bc = ColorTranslator.FromHtml("#006699");
orderGrid.CurrentRow.DefaultCellStyle.SelectionBackColor = bc;
}
orderGrid.Refresh();
}
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();
}
int r1Roll = -1;
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) =>
{
r1Roll = e.NewValue / orderGrid.RowTemplate.Height;
orderGrid.FirstDisplayedScrollingRowIndex = r1Roll;
};
}
int r2Roll = -1;
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) =>
{
r2Roll = e.NewValue / preOrderGrid.RowTemplate.Height;
preOrderGrid.FirstDisplayedScrollingRowIndex = r2Roll;
};
}
}
}