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("排宰总头数多余过磅头数");
|
|
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);
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|