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

243 lines
7.9 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();
}
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);
BindPreOrderGrid();
orderList = OrderDetailRpc.GetOrderDetail();
BindOrderGrid();
if (tb2SyncThread == null)
{
tb2SyncThread = new Thread(Tab2SyncB3ID) { IsBackground = true };
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();
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 - 1)
return;
var currentOrder = 0;
if (orderGrid.CurrentRow != null)
currentOrder = (int)orderGrid.CurrentRow.Cells["O_Order"].Value + 1;
else
currentOrder = OrderDetailRpc.GetMaxOrder(tab2DateSelect.Date.Value);
var entity = preOrderGrid.CurrentRow.DataBoundItem as NeedOrderEntity;
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;
var needUpdate = ReOrder(order, true);
orderList.Add(order);
OrderDetailRpc.Insert(needUpdate, order);
BindOrderGrid();
needOrderList.Remove(entity);
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 backInfo = OrderDetailRpc.GetBackWeightBillInfo(entity.WeightBill_ID, entity.ID);
if (entity.PlanNumber > backInfo.LastNumber)
throw new Exception("排宰总头数多余过磅头数");
var item = needOrderList.FirstOrDefault(x => x.WeightBill_ID == backInfo.WeightBill_ID);
if (entity.PlanNumber == backInfo.LastNumber)
return;
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);
}
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;
}
}
}