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

284 lines
8.5 KiB

using BO.BO.Bill;
using BO.Utils;
using BO.Utils.BillRpc;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace OrderConfirm
{
public partial class OrderConfirmForm : Form, IAfterLogin
{
#region IAfterLogin
public List<string> RoleName
{
get
{
return new List<string>() { "收购业务.顺序确认" };
}
}
public Form Generate()
{
return this;
}
#endregion
private delegate void InvokeHandler();
List<OrderDetail> orderList;
Thread syncThread;
public OrderConfirmForm()
{
InitializeComponent();
uDatePicker1.Date = DateTime.Today;
orderGrid.AutoGenerateColumns = false;
orderGrid.DataSource = null;
this.FormClosing += delegate
{
if (syncThread != null && syncThread.IsAlive)
syncThread.Abort();
};
}
private void syncBtn_Click(object sender, EventArgs e)
{
if (syncThread == null || !syncThread.IsAlive)
{
syncThread = new Thread(SyncTask);
syncThread.Start();
syncBtn.BackColor = Color.FromArgb(15, 215, 107);
syncBtn.ForeColor = Color.White;
}
else
{
syncThread.Abort();
syncBtn.BackColor = Color.FromKnownColor(KnownColor.Control);
syncBtn.ForeColor = Color.FromKnownColor(KnownColor.ControlText);
}
}
private void SyncTask()
{
while (true)
{
this.Invoke(new InvokeHandler(delegate()
{
BindFinishNumber();
BindOrderGrid();
}));
Thread.Sleep(5000);
}
}
void BindFinishNumber()
{
var number = OrderDetailRpc.GetFinishNumbers(uDatePicker1.Date.Value);
finishNumberLabel.Text = number.ToString();
finishNumberLabel.Refresh();
}
OrderDetail lastOrderDetail;
private void BindOrderGrid()
{
orderList = OrderDetailRpc.GetOrderDetail(uDatePicker1.Date.Value);
orderGrid.DataSource = orderList.OrderBy(x => x.Order).OrderBy(x => x.Doing).ToList();
if (lastOrderDetail == null && orderGrid.CurrentRow != null)
{
lastOrderDetail = orderGrid.CurrentRow.DataBoundItem as OrderDetail;
}
foreach (DataGridViewRow row in orderGrid.Rows)
{
var state = (int)row.Cells["C_OrderState"].Value;
if ((bool)row.Cells["C_IsHurryButcher"].Value)
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#CC9999");
if ((bool)row.Cells["C_SecondarySplit"].Value)
row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#6699CC");
var tech = (short?)row.Cells["C_Technics"].Value;
if (tech.HasValue)
{
if (tech == 0)
row.DefaultCellStyle.BackColor = green;
else
row.DefaultCellStyle.BackColor = yellow;
}
((DataGridViewButtonCell)row.Cells["C_OK"]).Value = state == 0 ? "开始" : "取消";
if (lastOrderDetail != null && lastOrderDetail.ID == (long)row.Cells["C_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;
}
}
InitScrollBar1();
orderGrid.ClearSelection();
try
{
if (roll != -1)
orderGrid.FirstDisplayedScrollingRowIndex = roll;
}
catch
{
roll = -1;
}
orderGrid.Refresh();
}
private void existBtn_Click(object sender, EventArgs e)
{
this.Close();
}
int roll = -1;
private void InitScrollBar1()
{
vScrollBar1.Maximum = (orderGrid.RowCount - orderGrid.DisplayedRowCount(false) + 30) * orderGrid.RowTemplate.Height;
vScrollBar1.Minimum = 0;
vScrollBar1.SmallChange = orderGrid.RowTemplate.Height;
vScrollBar1.LargeChange = orderGrid.RowTemplate.Height * 30;
this.vScrollBar1.Scroll += (sender, e) =>
{
roll = e.NewValue / orderGrid.RowTemplate.Height;
orderGrid.FirstDisplayedScrollingRowIndex = roll;
};
}
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["C_ID"].Value)
{
Color c = orderGrid.RowsDefaultCellStyle.BackColor;
if (lastOrderDetail.IsHurryButcher)
c = ColorTranslator.FromHtml("#CC9999");
if (lastOrderDetail.SecondarySplit)
c = ColorTranslator.FromHtml("#6699CC");
if (lastOrderDetail.Technics.HasValue)
{
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();
}
private void orderGrid_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1)
return;
if (e.ColumnIndex < orderGrid.ColumnCount - 2)
return;
if (lastOrderDetail.OrderState == 20)
return;
if (e.ColumnIndex == orderGrid.ColumnCount - 2)//开始 取消
OrderDetailRpc.SetOrderState(lastOrderDetail.ID, lastOrderDetail.OrderState == 0 ? 10 : 0);
else//完成
{
OrderDetailRpc.SetOrderState(lastOrderDetail.ID, 20);
BindFinishNumber();
}
BindOrderGrid();
}
string code = string.Empty;
bool start = false;
private void OrderConfirmForm_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyData)
{
case Keys.S:
start = true;
code = string.Empty;
break;
case Keys.E:
if (!start)
break;
InsertDetail();
start = false;
code = string.Empty;
break;
default:
if (start)
code += (char)e.KeyValue;
break;
}
}
void InsertDetail()
{
if (orderList == null)
throw new Exception("请先同步数据");
long id = 0;
if (!long.TryParse(code, out id))
throw new Exception(string.Format("接收扫码输入错误 {0}", code));
var entity = OrderDetailRpc.GetHurryRecord(id);
if (entity.ToOrderDetail_ID.HasValue)
throw new Exception("该条码已插入过,不能重复插入");
var currentOrder = 0;
if (!setTop.Checked)
{
if (lastOrderDetail != null && lastOrderDetail.Date != uDatePicker1.Date)
lastOrderDetail = null;
if (lastOrderDetail != null)
currentOrder = OrderDetailRpc.GetCurrentOrder(lastOrderDetail.ID);
else
currentOrder = OrderDetailRpc.GetMaxOrder(uDatePicker1.Date.Value);
currentOrder++;
}
else
{
setTop.Checked = false;
var l = orderList.OrderBy(x => x.Order).OrderBy(x => x.Doing).FirstOrDefault();
if (l != null)
currentOrder = l.Order;
else
currentOrder = 1;
}
var order = new OrderDetail();
order.Order = currentOrder;
order.LiveColonyHouse_Name = entity.LiveColonyHouse_Name;
order.PlanNumber = entity.HurryNumber;
order.WeightBill_ID = entity.WeightBill_ID;
order.B3WeighBill_ID = entity.B3WeighBill_ID;
order.Date = uDatePicker1.Date.Value;
order.IsHurryButcher = true;
OrderDetailRpc.InsertByHurryRecord(order, id);
lastOrderDetail = order;
BindOrderGrid();
}
Color green = ColorTranslator.FromHtml("#3CC24C");
Color yellow = ColorTranslator.FromHtml("#FFDE5A");
}
}