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 OffLineQualityAndOrder
|
|
{
|
|
partial class OffLineQualityOrderForm
|
|
{
|
|
List<NeedOrderEntity> needOrderList;
|
|
List<OrderDetail> orderList;
|
|
Thread orderSyncTask;
|
|
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 (lastOrderDetail == null)
|
|
throw new Exception("请选择一条排宰明细");
|
|
lastOrderDetail.PlanNumber = GetAfterNumber(lastOrderDetail.PlanNumber, input) ?? 0;
|
|
orderGrid.Refresh();
|
|
}
|
|
|
|
private void butcherSearch_Click(object sender, EventArgs e)
|
|
{
|
|
if (orderSyncTask == null || !orderSyncTask.IsAlive)
|
|
{
|
|
orderSyncTask = new Thread(OrderSearchTask);
|
|
orderSyncTask.Start();
|
|
butcherSearch.BackColor = Color.FromArgb(15, 215, 107);
|
|
butcherSearch.ForeColor = Color.White;
|
|
}
|
|
else
|
|
{
|
|
orderSyncTask.Abort();
|
|
butcherSearch.BackColor = Color.FromKnownColor(KnownColor.Control);
|
|
butcherSearch.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
|
|
}
|
|
}
|
|
|
|
private void tab2SyncBtn_Click(object sender, EventArgs e)
|
|
{
|
|
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()
|
|
{
|
|
BindEveryNumberLabel();
|
|
BindPreOrderGrid();
|
|
}));
|
|
Thread.Sleep(5000);
|
|
}
|
|
}
|
|
|
|
void OrderSearchTask()
|
|
{
|
|
while (true)
|
|
{
|
|
this.Invoke(new InvokeHandler(delegate()
|
|
{
|
|
BindOrderGrid();
|
|
}));
|
|
Thread.Sleep(5000);
|
|
}
|
|
}
|
|
|
|
private void BindEveryNumberLabel()
|
|
{
|
|
var tuple = OrderDetailRpc.GetEveryNumberTuple(tab2DateSelect.Date.Value);
|
|
displayNumLb.Text = string.Format("({0})", tuple.Item1);
|
|
hiddenNumLb.Text = string.Format("({0})", tuple.Item2);
|
|
totalNumLb.Text = string.Format("({0})", tuple.Item1 + tuple.Item2);
|
|
}
|
|
|
|
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);
|
|
if (lastOrderDetail != null)
|
|
{
|
|
var t = orderList.FirstOrDefault(x => x.ID == lastOrderDetail.ID);
|
|
if (t != null)
|
|
t.PlanNumber = lastOrderDetail.PlanNumber;
|
|
}
|
|
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 ((short)row.Cells["O_Technics"].Value == 0)
|
|
row.DefaultCellStyle.BackColor = green;
|
|
else
|
|
row.DefaultCellStyle.BackColor = yellow;
|
|
if (lastOrderDetail != null && lastOrderDetail.ID == (long)row.Cells["O_ID"].Value)
|
|
{
|
|
lastOrderDetail = row.DataBoundItem as OrderDetail;
|
|
var c = orderGrid.RowsDefaultCellStyle.SelectionBackColor;
|
|
if (lastOrderDetail.IsHurryButcher)
|
|
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#FF9900");
|
|
if (lastOrderDetail.SecondarySplit)
|
|
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#006699");
|
|
row.DefaultCellStyle.BackColor = 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;
|
|
if (e.ColumnIndex == preOrderGrid.ColumnCount - 2)
|
|
{
|
|
if (gy == 工艺.默认)
|
|
throw new Exception("请指定工艺");
|
|
var currentOrder = 0;
|
|
if (lastOrderDetail != null && lastOrderDetail.Date != butcherDateInput.Date)
|
|
lastOrderDetail = null;
|
|
if (lastOrderDetail != null)
|
|
currentOrder = OrderDetailRpc.GetCurrentOrder(lastOrderDetail.ID);
|
|
else
|
|
currentOrder = OrderDetailRpc.GetMaxOrder(butcherDateInput.Date.Value);
|
|
currentOrder++;
|
|
var order = new OrderDetail();
|
|
order.Technics = (short)gy;
|
|
order.Technics_Name = gy.ToString();
|
|
order.Order = currentOrder;
|
|
order.LiveColonyHouse_Name = lastPreOrder.HouseNames;
|
|
order.PlanNumber = lastPreOrder.LastNumber;
|
|
order.WeightBill_ID = lastPreOrder.WeightBill_ID;
|
|
order.B3WeighBill_ID = lastPreOrder.B3ID;
|
|
order.Date = butcherDateInput.Date.Value;
|
|
OrderDetailRpc.Insert(order);
|
|
lastOrderDetail = order;
|
|
BindOrderGrid();
|
|
}
|
|
else
|
|
OrderDetailRpc.ChangeShowType((long)preOrderGrid.CurrentRow.Cells["P_WeightBill_ID"].Value, !(bool)preOrderGrid.CurrentRow.Cells["P_Show"].Value);
|
|
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 - 1)
|
|
return;
|
|
if (lastOrderDetail.PlanNumber < 0)
|
|
throw new Exception("排宰头数不能小于0");
|
|
var lastNumber = OrderDetailRpc.GetLastNumber(lastOrderDetail.WeightBill_ID, lastOrderDetail.ID);
|
|
|
|
if (lastOrderDetail.PlanNumber > lastNumber)
|
|
throw new Exception("排宰总头数多于过磅头数");
|
|
var dbCurrentNumber = OrderDetailRpc.GetCurrentOrderPlanNumber(lastOrderDetail.ID);
|
|
if (lastOrderDetail.PlanNumber == dbCurrentNumber)
|
|
return;
|
|
if (lastOrderDetail.PlanNumber == 0)
|
|
{
|
|
OrderDetailRpc.Delete(lastOrderDetail.ID);
|
|
lastOrderDetail = null;
|
|
}
|
|
else
|
|
OrderDetailRpc.UpdateNumber(lastOrderDetail.ID, lastOrderDetail.PlanNumber);
|
|
BindPreOrderGrid();
|
|
BindOrderGrid();
|
|
}
|
|
|
|
private void orderGrid_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
if (e.RowIndex == -1)
|
|
return;
|
|
var entity = orderGrid.CurrentRow.DataBoundItem as OrderDetail;
|
|
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");
|
|
if (lastOrderDetail.Technics == 0)
|
|
c = green;
|
|
else
|
|
c = yellow;
|
|
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;
|
|
};
|
|
}
|
|
|
|
工艺 gy = 工艺.默认;
|
|
private void tangBtn_Click(object sender, EventArgs e)
|
|
{
|
|
gy = 工艺.烫褪;
|
|
SetTechBtnChecked(tangBtn, green);
|
|
SetBtnUnCheck(maoBtn);
|
|
}
|
|
|
|
private void maoBtn_Click(object sender, EventArgs e)
|
|
{
|
|
gy = 工艺.毛剥;
|
|
SetTechBtnChecked(maoBtn, yellow);
|
|
SetBtnUnCheck(tangBtn);
|
|
}
|
|
|
|
void SetTechBtnChecked(Button btn, Color c)
|
|
{
|
|
btn.BackColor = c;
|
|
btn.ForeColor = btnSelectForeColor;
|
|
}
|
|
|
|
Color green = ColorTranslator.FromHtml("#3CC24C");
|
|
Color yellow = ColorTranslator.FromHtml("#FFDE5A");
|
|
}
|
|
|
|
enum 工艺
|
|
{
|
|
默认 = -1,
|
|
烫褪 = 0,
|
|
毛剥 = 1
|
|
}
|
|
}
|