屠宰场客户端
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.

329 lines
11 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 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<CTuple<long, int>> ReOrder(OrderDetail dealDetail, bool isAdd)
{
var result = new List<CTuple<long, int>>();
foreach (var item in orderList.OrderByDescending(x => x.Order))
{
if (item.Order < dealDetail.Order)
break;
item.Order += isAdd ? 1 : -1;
result.Add(new CTuple<long, int>(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();
}
}
}
}