宜昌华友成品库管理软件
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.

510 lines
18 KiB

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace SSLMS.MobileUI.uc
{
public partial class ucCell : UserControl
{
private double dRoundW = 1;
private double dRoundH = 1.5;
private int iFill = 0;
private DataTable dtCellSize;
private DataTable dtCell;
private int iMaxX = 0;
private int iMaxY = 0;
private int iMinX = 0;
private int iMinY = 0;
private int iBorderW = 0;
private int iBorderH = 0;
private int iDeepRackMove = 5;
private int iYTransform = 0;
private int iXTransform = 0;
private WH_CELL mST_CELL = null;
int iCurrentPage = 1;
int iRowPerPage =10;
public bool EmptySelect = false;
public bool PalletSelect = false;
private int iFillW
{
get { return Convert.ToInt32(iFill * dRoundW); }
}
private int iFillH
{
get { return Convert.ToInt32(iFill * dRoundH); }
}
private Bitmap imgCell;
private Rectangle[] recCell = null;
private string[] strCellCode = null;
private string CellStorageStatus = string.Empty;
private string CellRunStatus = string.Empty;
private Rectangle rectSelect = Rectangle.Empty;
public delegate void CELLDoubleClickHandler(WH_CELL mWH_CELL);
public event CELLDoubleClickHandler CellDoubleClick;
public ucCell()
{
InitializeComponent();
}
public void Init()
{
this.iBorderW = 1;
this.iBorderH = 1;
this.iFill = 20;
this.iCurrentPage = 1;
this.cmbWAREHOUSE_Bind();
this.InitCell();
this.tscbCELL_Z.SelectedValueChanged += new EventHandler(tscbCELL_Z_SelectedValueChanged);
}
private void cmbWAREHOUSE_Bind()
{
tscbWAREHOUSE.DisplayMember = "WAREHOUSE_NAME";
tscbWAREHOUSE.ValueMember = "WAREHOUSE_ID";
tscbWAREHOUSE.DataSource = Program._I_PDAService.GetList(string.Format(@"SELECT WAREHOUSE_ID,WAREHOUSE_NAME FROM WH_WAREHOUSE
WHERE {0} {1}",
Program._USER.USER_ID == 0 ? "1=1" : string.Format(@"(WAREHOUSE_ID IN(SELECT RELATION_ID2
FROM V_SYS_RELATION WHERE RELATION_CODE='SYS_USER-WH_WAREHOUSE'
AND RELATION_ID1= {0}))", Program._USER.USER_ID),
string.Empty)); ;
}
private void tscbCELL_Z_Bind(string WAREHOUSE_ID)
{
tscbCELL_Z.DisplayMember = "CELL_Z_NAME";
tscbCELL_Z.ValueMember = "CELL_Z";
tscbCELL_Z.DataSource = Program._I_PDAService.GetList(string.Format("SELECT * FROM V_WH_CELL_Z WHERE WAREHOUSE_ID ={0} ORDER BY CELL_Z", WAREHOUSE_ID));
}
void tscbCELL_Z_SelectedValueChanged(object sender, EventArgs e)
{
try
{
this.InitCell();
}
catch (Exception ex)
{
MessageBox.Show("初始化货位失败!\n" + ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None,MessageBoxDefaultButton.Button1);
}
}
private void InitCell()
{
this.dtCellSize = Program._I_PDAService.GetList(string.Format( @"SELECT MIN(CELL_X) AS MIN_CELL_X,
MAX(CELL_X) AS MAX_CELL_X,
MIN(CELL_Y) AS MIN_CELL_Y,
MAX(CELL_Y) AS MAX_CELL_Y
FROM V_WH_CELL
WHERE warehouse_id={0} and cell_z={1} ",this.tscbWAREHOUSE.SelectedValue.ToString(), this.tscbCELL_Z.SelectedValue.ToString()));
this.dtCell = Program._I_PDAService.GetList(string.Format("SELECT * FROM WH_CELL WHERE 1=1 {0} {1} {2} {3} {4}",
string.IsNullOrEmpty(this.tscbWAREHOUSE.SelectedValue.ToString()) ? string.Empty : string.Format(" AND WAREHOUSE_ID ={0}", this.tscbWAREHOUSE.SelectedValue.ToString()),
string.Empty ,
string.IsNullOrEmpty(SSLMS.Model.CELL_TYPE.Cell.ToString()) ? string.Empty : string.Format(" AND CELL_TYPE LIKE '{0}'", SSLMS.Model.CELL_TYPE.Cell.ToString()),
string.IsNullOrEmpty(this.tscbCELL_Z.SelectedValue.ToString()) ? string.Empty : string.Format(" AND CELL_Z = {0}", this.tscbCELL_Z.SelectedValue.ToString()),
string.Format(" AND CELL_x BETWEEN {0} AND {1} ", (this.iCurrentPage - 1) * this.iRowPerPage + 1, (this.iCurrentPage) * this.iRowPerPage)
));
//this.dtCell = Program._I_WHService.CellGetPageLogicalLineCellList(this.tscbWAREHOUSE.SelectedValue.ToString(),
// string.Empty,
// SSLMS.Model.CELL_TYPE.cell.ToString(),
// this.tscbCELL_Z.SelectedValue.ToString(), (this.iCurrentPage - 1) * this.iRowPerPage +1, (this.iCurrentPage) * this.iRowPerPage);
this.iMaxY = Convert.ToInt32(dtCellSize.Rows[0]["MAX_CELL_Y"]);
this.iMinY = Convert.ToInt32(dtCellSize.Rows[0]["MIN_CELL_Y"]);
this.iMaxX = Convert.ToInt32(dtCellSize.Rows[0]["MAX_CELL_X"]);
this.iMinX = Convert.ToInt32(dtCellSize.Rows[0]["MIN_CELL_X"]);
this.pictureBox1.Width = (this.iRowPerPage+1 )* iFillW;
this.pictureBox1.Height = (iFillH) * (iMaxY + 1);
//this.pictureBox1.Width = (iMaxX) * (iFillW) > this.pictureBox1.Parent.Width ? (iMaxX + 2) * (iFillW) : this.pictureBox1.Parent.Width - 20;
//this.pictureBox1.Height = (iFillH) * (iMaxY + 2) > this.pictureBox1.Parent.Height ? (iFillH) * (iMaxY + 2) : this.pictureBox1.Parent.Height - 20;
imgCell = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);
this.iYTransform = this.pictureBox1.Height - this.iFillH;
this.iXTransform = (this.iCurrentPage - 1) * this.iRowPerPage * this.iFillW;
this.pictureBox1.Image = imgCell;
this.DrawCell();
}
private void DrawCell()
{
Graphics g = Graphics.FromImage(imgCell);
g.FillRectangle(new SolidBrush(Color.Gray), 0, 0, this.imgCell.Width, this.imgCell.Height);
//x轴刻度
for (int x = (this.iCurrentPage-1) * this.iRowPerPage + 1; x <= this.iCurrentPage * this.iRowPerPage; x++)
{
g.DrawLine(new Pen(Color.FromArgb(0, 0, 255)), x * this.iFillW, iYTransform, x * this.iFillW, -2 +iYTransform);
g.FillRectangle(new SolidBrush(Color.Gray), (x % this.iRowPerPage == 0 ? this.iRowPerPage : x % this.iRowPerPage) * this.iFillW, iYTransform, this.iFillW, this.iFillH);
g.DrawString(x.ToString(),new Font(FontFamily.GenericSerif, this.iFill / 2,FontStyle.Regular), new SolidBrush(Color.Blue) , (x%this.iRowPerPage==0 ? this.iRowPerPage: x%this.iRowPerPage) * this.iFillW, iYTransform);
}
// y轴刻度
for (int y = this.iMaxY; y > 0; y--)
{
g.DrawLine(new Pen(Color.FromArgb(0, 0, 255)), this.iFillW, -y * this.iFillH + iYTransform, this.iFillW - 2, -y * this.iFillH + iYTransform);
g.DrawString(y.ToString().PadLeft(this.iMaxY.ToString().Length), new Font(FontFamily.GenericSerif, this.iFill / 2, FontStyle.Regular), new SolidBrush(Color.Blue), this.iFillW - (this.iMaxY.ToString().Length * this.iFill / 2), -y * this.iFillH + iYTransform);
}
this.recCell = new Rectangle[this.dtCell.Rows.Count];
this.strCellCode = new string[this.dtCell.Rows.Count];
//货位
for (int i = 0; i < this.dtCell.Rows.Count; i++)
{
int x = Convert.ToInt32(dtCell.Rows[i]["CELL_X"]);
int y = Convert.ToInt32(dtCell.Rows[i]["CELL_Y"]);
int z = Convert.ToInt32(dtCell.Rows[i]["CELL_Z"]);
int CELL_ID = Convert.ToInt32(dtCell.Rows[i]["CELL_ID"]);
string CELL_STATUS = dtCell.Rows[i]["CELL_STATUS"].ToString();
Color clr = new Color();
switch (CELL_STATUS)
{
case "have":
clr = Color.Chocolate;
break;
case "nohave":
clr = Color.Silver;
break;
case "exception":
clr = Color.FromArgb(255, 0, 0);
break;
case "pallet":
clr = Color.ForestGreen;
break;
default:
clr = Color.FromArgb(192, 192, 192);
break;
}
if (dtCell.Rows[i]["CELL_Z"].ToString() != dtCell.Rows[i]["SHELF_NEIGHBOUR"].ToString())
{
if (dtCell.Rows[i]["SHELF_TYPE"].ToString() == SSLMS.Model.SHELF_TYPE.deep.ToString())
recCell[i] = new Rectangle(x * (this.iFillW) + this.iBorderW + this.iDeepRackMove - this.iXTransform,
-y * (this.iFillH) + this.iBorderH + this.iYTransform,
this.iFillW - 2 * this.iBorderW,
(this.iFillH - 2 * this.iBorderH) / 2);
else
recCell[i] = new Rectangle(x * (this.iFillW) + this.iBorderW - this.iXTransform,
-y * (this.iFillH) + this.iBorderH + (this.iFillH - 2 * this.iBorderH) / 2 + iYTransform,
this.iFillW - 2 * this.iBorderW,
(this.iFillH - 2 * this.iBorderH) / 2);
}
else
{
recCell[i] = new Rectangle(x * (this.iFillW) + this.iBorderW - this.iXTransform,
-y * (this.iFillH) + this.iBorderH + iYTransform,
this.iFillW - 2 * this.iBorderW,
this.iFillH - 2 * this.iBorderH);
}
strCellCode[i] = dtCell.Rows[i]["CELL_CODE"].ToString();
g.FillRectangle(new SolidBrush(clr), recCell[i]);
g.DrawRectangle(new Pen(Color.Black), recCell[i]);
g.DrawString(dtCell.Rows[i]["RUN_STATUS"].ToString().Substring(0, 1).ToUpper(),
new Font(FontFamily.GenericSerif, recCell[i].Width / 3,FontStyle.Regular), new SolidBrush(Color.Black),
recCell[i].Left + recCell[i].Width / 3, recCell[i].Top + recCell[i].Height / 3);
}
}
private void tscbWAREHOUSE_SelectedValueChanged(object sender, EventArgs e)
{
if (this.tscbWAREHOUSE.SelectedValue != null)
{
string WAREHOUSE_ID = Convert.ToString(this.tscbWAREHOUSE.SelectedValue);
this.tscbCELL_Z_Bind(WAREHOUSE_ID);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Init();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Graphics g = Graphics.FromImage(imgCell);
int i = 0;
for (; i < recCell.Length; i++)
{
if (recCell[i].Contains(e.X, e.Y))
{
mST_CELL = Program._I_PDAService.GetModelCellCode(strCellCode[i].ToString());
this.txtRow.Text = mST_CELL.CELL_Z.ToString().PadLeft(2, '0');
this.txtLine.Text = mST_CELL.CELL_X.ToString().PadLeft(2, '0');
this.txtFloor.Text = mST_CELL.CELL_Y.ToString().PadLeft(2, '0');
this.CellStorageStatus = mST_CELL.CELL_STATUS.ToString();
this.CellRunStatus = mST_CELL.RUN_STATUS.ToString();
g.DrawRectangle(new Pen(Color.Red), recCell[i]);
if (rectSelect != Rectangle.Empty && rectSelect != recCell[i])
{
g.DrawRectangle(new Pen(Color.Black), rectSelect);
}
this.rectSelect = recCell[i];
break;
}
}
if (i >= recCell.Length)
{
this.txtRow.Text = string.Empty;
this.txtLine.Text = string.Empty;
this.txtFloor.Text = string.Empty;
this.CellStorageStatus = string.Empty;
this.CellRunStatus = string.Empty;
}
this.pictureBox1.Image = imgCell;
}
private void btnFirst_Click(object sender, EventArgs e)
{
this.iCurrentPage = 1;
try
{
this.InitCell();
}
catch (Exception ex)
{
MessageBox.Show("初始化货位失败 !\n" + ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
}
private void btnPrevious_Click(object sender, EventArgs e)
{
if (this.iCurrentPage == 1)
return;
this.iCurrentPage--;
try
{
this.InitCell();
}
catch (Exception ex)
{
MessageBox.Show("初始化货位失败 !\n" + ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
}
private void btnNext_Click(object sender, EventArgs e)
{
if (this.iCurrentPage * this.iRowPerPage > this.iMaxX)
return;
this.iCurrentPage++;
try
{
this.InitCell();
}
catch (Exception ex)
{
MessageBox.Show("初始化货位失败 !\n" + ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
}
private void btnLast_Click(object sender, EventArgs e)
{
this.iCurrentPage = this.iMaxX / this.iRowPerPage+1;
try
{
this.InitCell();
}
catch (Exception ex)
{
MessageBox.Show("初始化货位失败 !\n" + ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
}
private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
if (this.EmptySelect)
{
if (this.CellStorageStatus != SSLMS.Model.CELL_STATUS.nohave.ToString() || this.CellRunStatus != SSLMS.Model.RUN_STATUS.enable.ToString())
{
MessageBox.Show(" 请选择可用的空货位 ", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
return;
}
if (mST_CELL == null)
return;
if (mST_CELL.SHELF_TYPE.TrimEnd() == SSLMS.Model.SHELF_TYPE.normal.ToString() && mST_CELL.CELL_Z.ToString() != mST_CELL.SHELF_NEIGHBOUR.ToString())
{
WH_CELL mST_CELL_INNER = Program._I_PDAService.GetModelCellCode(string.Format("{0}-{1}-{2}", mST_CELL.SHELF_NEIGHBOUR.ToString().PadLeft(2, '0'), mST_CELL.CELL_X.ToString().PadLeft(2, '0'), mST_CELL.CELL_Y.ToString().PadLeft(2, '0')));
if (mST_CELL_INNER != null && mST_CELL_INNER.CELL_STATUS == SSLMS.Model.CELL_STATUS.nohave.ToString() && mST_CELL_INNER.RUN_STATUS == SSLMS.Model.RUN_STATUS.enable.ToString())
{
MessageBox.Show(string.Format(" 请优先选择内侧货位 {0} ", mST_CELL_INNER.CELL_CODE), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
this.mST_CELL.CELL_CODE = string.Empty;
return;
}
}
}
if (this.PalletSelect)
{
if (this.CellStorageStatus != SSLMS.Model.CELL_STATUS.pallet.ToString() || this.CellRunStatus != SSLMS.Model.RUN_STATUS.enable.ToString())
{
MessageBox.Show(" 请选择可用的托盘货位 ", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
return;
}
if (mST_CELL == null)
return;
}
CellDoubleClick(this.mST_CELL);
}
private void btRefresh_Click(object sender, EventArgs e)
{
try
{
this.InitCell();
}
catch (Exception ex)
{
MessageBox.Show("初始化货位失败 !\n" + ex.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}
}
}
}