490 lines
18 KiB
C#
490 lines
18 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Windows.Forms;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.Drawing.Printing;
|
|
using System.Collections;
|
|
using SuperMap.RealEstate.Data;
|
|
using SuperMap.RealEstate.Windows.Forms;
|
|
using SuperMap.RealEstate.Windows.Utility;
|
|
using SuperMap.RealEstate.Enums;
|
|
using SuperMap.RealEstate.Utility;
|
|
using SuperMap.RealEstate.CoreFrameWork;
|
|
using SuperMap.RealEstate.ServiceModel;
|
|
using SuperMap.RealEstate.Configuration;
|
|
using SuperMap.RealEstate.HighWay.Storage.Business;
|
|
using SuperMap.RealEstate.Web.UI.WebControls;
|
|
|
|
namespace SuperMap.RealEstate.HighWay.PrintBarcode
|
|
{
|
|
public partial class frmPrintMain : Windows.Forms.FormBase
|
|
{
|
|
/// <summary>
|
|
/// 存储坐标偏移量
|
|
/// </summary>
|
|
private int offsetX = 0;
|
|
private int offsetY = 0;
|
|
private string ServerPart_ID = "";
|
|
private int SelectNum = 0;
|
|
private int printcount = 1;
|
|
private string Commodity_id = "";
|
|
|
|
string frmUserName = string.Empty;
|
|
//string UserNameID = string.Empty;
|
|
/// <summary>
|
|
/// 这里数据查询时就缓存房屋数据,来避免每次选择一个房屋后去数据查询数据。
|
|
/// </summary>
|
|
private List<COMMODITY> _TempCommodityInfoCollection = new List<COMMODITY>();
|
|
|
|
/// <summary>
|
|
/// 缓存选中的节点数据,待更改
|
|
/// </summary>
|
|
private List<COMMODITY> _TempPrintCommodityCollection = new List<COMMODITY>();
|
|
|
|
public frmPrintMain()
|
|
//string ModuleGuid, string UserName = "", : base(ModuleGuid, UserName, Password)
|
|
{
|
|
foreach (SERVERPART _SERVERPART in (new SERVERPART(this.Transaction)).FillCollection("where SERVERPART_NAME IN (" +
|
|
System.Configuration.ConfigurationManager.AppSettings["SERVERPART_NAME"].ToString() + ") ORDER BY SERVERPART_CODE"))
|
|
{
|
|
ServerPart_ID += ServerPart_ID == "" ? _SERVERPART.SERVERPART_ID.ToString() : "," + _SERVERPART.SERVERPART_ID;
|
|
}
|
|
InitializeComponent();
|
|
//frmUserName = UserName;
|
|
//UserNameID = _UserNameID;
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
}
|
|
|
|
private void frmPrintMain_Load(object sender, EventArgs e)
|
|
{
|
|
txtSearch.Text = "";
|
|
SetOffsetToControl();
|
|
InitInvoiceControlValue();
|
|
TreeViewBinding();
|
|
}
|
|
|
|
#region 方法 -> 选择商品列表
|
|
private void BtnSelect_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (TreeNode treeNode in CommodityList.Nodes)
|
|
{
|
|
if (treeNode.Checked && Commodity_id.IndexOf("," + treeNode.Tag.ToString() + ",") < 0)
|
|
{
|
|
Commodity_id += Commodity_id == "" ? treeNode.Tag.ToString() : "," + treeNode.Tag.ToString();
|
|
}
|
|
}
|
|
treeView1Binding();
|
|
}
|
|
|
|
private void BtnReset_Click(object sender, EventArgs e)
|
|
{
|
|
Commodity_id = "0";
|
|
treeView1Binding();
|
|
}
|
|
#endregion
|
|
|
|
#region TreeViewBinding
|
|
private void treeView1Binding()
|
|
{
|
|
treeView1.Nodes.Clear();
|
|
DataTable dt = (new SERVERPART(this.Transaction)).ExecuteDataTable(
|
|
"SELECT * FROM HIGHWAY_STORAGE.T_COMMODITY WHERE COMMODITY_ID in (" + Commodity_id + ")");
|
|
foreach (DataRow dataRow in dt.Rows)
|
|
{
|
|
TreeNode treeNode = new TreeNode();
|
|
treeNode.Text = dataRow["COMMODITY_NAME"].ToString() + "【" + dataRow["COMMODITY_BARCODE"].ToString() + "】";
|
|
treeNode.Tag = dataRow["COMMODITY_ID"].ToString();
|
|
treeNode.Name = "COMMODITY";
|
|
treeNode.Checked = true;
|
|
treeView1.Nodes.Add(treeNode);
|
|
treeView1.ExpandAll();
|
|
}
|
|
}
|
|
|
|
private void TreeViewBinding()
|
|
{
|
|
COMMODITYTYPE _COMMODITYTYPE = new Storage.Business.COMMODITYTYPE(this.Transaction);
|
|
CommodityList.Nodes.Clear();
|
|
BindingTreeView("-1", this.CommodityList.Nodes, this.txtSearch.Text.Trim() + "$" + Commodity_Barcode.Text.Trim(), ServerPart_ID);
|
|
}
|
|
|
|
#region BindingTreeView
|
|
public void BindingTreeView(string pid, TreeNodeCollection nodes, string obscureName, string _ServerPart_ID)
|
|
{
|
|
if (_ServerPart_ID == "")
|
|
{
|
|
return;
|
|
}
|
|
DataTable bindingDataSource = this.GetBindingDataSource(pid, obscureName, _ServerPart_ID);
|
|
foreach (DataRow dataRow in bindingDataSource.Rows)
|
|
{
|
|
TreeNode treeNode = new TreeNode();
|
|
treeNode.Text = dataRow["COMMODITY_NAME"].ToString() + "【" + dataRow["COMMODITY_BARCODE"].ToString() + "】";
|
|
treeNode.Tag = dataRow["COMMODITY_ID"].ToString();
|
|
treeNode.Name = "COMMODITY";
|
|
|
|
nodes.Add(treeNode);
|
|
//treeNode.PopulateOnDemand = true;
|
|
//this.BindingTreeView(dataRow["COMMODITY_TYPE"].ToString(), treeNode.Nodes, obscureName, _ServerPart_ID);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region GetBindingDataSource
|
|
public DataTable GetBindingDataSource(string pid, string ServerPart_ID)
|
|
{
|
|
return this.GetBindingDataSource(pid, string.Empty, ServerPart_ID);
|
|
}
|
|
|
|
public DataTable GetBindingDataSource(string pid, string obscureName, string ServerPart_ID)
|
|
{
|
|
string arg2 = string.Empty;
|
|
arg2 = string.IsNullOrEmpty(obscureName.Split('$')[0]) ? "" : ("and COMMODITY_NAME like '%" + obscureName.Split('$')[0] + "%'");
|
|
arg2 += string.IsNullOrEmpty(obscureName.Split('$')[1]) ? "" : ("and COMMODITY_BARCODE like '%" + obscureName.Split('$')[1] + "%'");
|
|
|
|
return (new SERVERPART(this.Transaction)).ExecuteDataTable(@"SELECT COMMODITY_CODE,COMMODITY_NAME,COMMODITY_BARCODE,COMMODITY_CURRPRICE,COMMODITY_TYPE,COMMODITY_ID
|
|
FROM HIGHWAY_STORAGE.T_COMMODITY WHERE COMMODITY_STATE = 1 AND SERVERPART_ID IN (" + ServerPart_ID + ") " +
|
|
(arg2 == "" ? " AND 1 != 1" : arg2) + " order by COMMODITY_CODE,COMMODITY_TYPE,COMMODITY_NAME");
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region btnSearch_Click 查询
|
|
private void btnSearch_Click(object sender, EventArgs e)
|
|
{
|
|
InitInvoiceControlValue();
|
|
|
|
try
|
|
{
|
|
TreeViewBinding();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowError(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region btnPrint_Click 打印
|
|
private void btnPrint_Click(object sender, EventArgs e)
|
|
{
|
|
InitCommodityCollection();
|
|
string billOffset = PrintHelper.GetRegistData("BarcodeOffset");
|
|
try
|
|
{
|
|
offsetX = Int32.Parse(billOffset.Split(',')[1]);
|
|
offsetY = Int32.Parse(billOffset.Split(',')[2]);
|
|
}
|
|
catch { }
|
|
PageSetupDialog pageSetupDialog1 = new PageSetupDialog();
|
|
//创建打印文档
|
|
PrintDocument printDocument1 = new PrintDocument();
|
|
//开始打印的时候
|
|
printDocument1.BeginPrint += new PrintEventHandler(printDocument1_BeginPrint);
|
|
//输送打印数据
|
|
printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
|
|
//打印结束的时候
|
|
printDocument1.EndPrint += new PrintEventHandler(printDocument1_EndPrint);
|
|
//将打印文档赋给打印组件
|
|
pageSetupDialog1.Document = printDocument1;
|
|
//纸张及页边距设置
|
|
pageSetupDialog1.PageSettings.Margins = new Margins(0, 0, 0, 0);
|
|
if (DialogResult.OK == pageSetupDialog1.ShowDialog())
|
|
{
|
|
printDocument1.Print();
|
|
}
|
|
printDocument1.Dispose();
|
|
//打印完毕后记得清空临时数据,释放内存,不管别的地方有没有清
|
|
_TempPrintCommodityCollection.Clear();
|
|
}
|
|
#endregion
|
|
|
|
#region InitCommodityCollection 获取选中商品信息集合
|
|
/// <summary>
|
|
/// 获取打印对象,房屋信息集合
|
|
/// </summary>
|
|
private void InitCommodityCollection()
|
|
{
|
|
_TempPrintCommodityCollection.Clear();
|
|
//事务
|
|
ServiceModel.Transaction _Transaction = new Transaction();
|
|
|
|
StringBuilder _StringBuilder = new StringBuilder();
|
|
foreach (TreeNode treeNode in treeView1.Nodes)
|
|
{
|
|
if (treeNode.Checked && treeNode.Name == "COMMODITY")
|
|
{
|
|
_StringBuilder.Append("," + treeNode.Tag.ToString());
|
|
}
|
|
_StringBuilder = GetCommodityId(treeNode.Nodes, _StringBuilder);
|
|
}
|
|
if (_StringBuilder.Length > 0)
|
|
_StringBuilder.Remove(0, 1);
|
|
if (_StringBuilder.Length == 0)
|
|
{
|
|
//MessageBox.Show("没有选择要打印的户室信息,请选择要打印的户室信息!", "系统操作提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
|
|
return;
|
|
}
|
|
foreach (COMMODITY _House in new COMMODITY(_Transaction).FillCollection(
|
|
" where COMMODITY_ID in ( " + _StringBuilder.ToString() + " )"))
|
|
{
|
|
_TempPrintCommodityCollection.Add(_House);
|
|
}
|
|
}
|
|
|
|
private StringBuilder GetCommodityId(TreeNodeCollection nodes, StringBuilder _StringBuilder)
|
|
{
|
|
foreach (TreeNode treeNode in nodes)
|
|
{
|
|
if (treeNode.Checked && treeNode.Name == "COMMODITY")
|
|
{
|
|
_StringBuilder.Append("," + treeNode.Tag.ToString());
|
|
}
|
|
_StringBuilder = GetCommodityId(treeNode.Nodes, _StringBuilder);
|
|
}
|
|
return _StringBuilder;
|
|
}
|
|
#endregion
|
|
|
|
#region 打印事件__开始-->打印-->结束
|
|
/// <summary>
|
|
/// 开始打印的时候
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
public void printDocument1_BeginPrint(object sender, PrintEventArgs e)
|
|
{
|
|
///--------------这里也不要随便改,这里只管把预先准备好的数据丢进去-----------------///
|
|
//获取选中房屋集合
|
|
InitCommodityCollection();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 打印事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
public void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
|
|
{
|
|
//初始化打印控件
|
|
InitInvoiceControlValue();
|
|
//先把数据送给界面上的控件,来精确定位数据动态,这里在每循环完一次后,要跳出一次循环,并且移除当前循环到的,对象数据,让 下面的e.HasMorePages = true;来触发下次循环
|
|
if (_TempPrintCommodityCollection.Count > 0)
|
|
{
|
|
//财政票据
|
|
InitInvoiceControlValue(_TempPrintCommodityCollection[0]);
|
|
//移除本次,循环数据
|
|
if (PrintCount.Text == printcount.ToString())
|
|
{
|
|
_TempPrintCommodityCollection.RemoveAt(0);
|
|
printcount = 1;
|
|
}
|
|
else
|
|
printcount++;
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
//当第二次加载的数据的时候,要把第一调用的画布,清除一遍,记得这是很重要的一句话!
|
|
e.Graphics.Clear(Color.White);
|
|
///
|
|
Brush brush = null;
|
|
//这里的循环结束一次,才表示一张票据的数据输送完毕
|
|
brush = new SolidBrush(Color.Black);
|
|
e.Graphics.DrawString(BarcodeName.Text, BarcodeName.Font, brush, new PointF(BarcodeName.Location.X + offsetX, BarcodeName.Location.Y + offsetY));
|
|
e.Graphics.DrawImage(pictureBox1.Image, new PointF(pictureBox1.Location.X + offsetX, pictureBox1.Location.Y + offsetY));
|
|
//分页,分页数=选中节点数 HasMorePages 用来设置自动触发打印事件
|
|
if (_TempPrintCommodityCollection.Count == 0)
|
|
{
|
|
e.HasMorePages = false;
|
|
}
|
|
else
|
|
{
|
|
e.HasMorePages = true;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 打印结束的时候
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
public void printDocument1_EndPrint(object sender, PrintEventArgs e)
|
|
{
|
|
_TempPrintCommodityCollection.Clear();
|
|
}
|
|
#endregion
|
|
|
|
#region InitInvoiceControlValue 商品标价签==》初始化 || 赋值
|
|
/// <summary>
|
|
/// 票据内容---》初始化
|
|
/// </summary>
|
|
private void InitInvoiceControlValue()
|
|
{
|
|
pictureBox1.Image = null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 票据---》赋值
|
|
/// </summary>
|
|
/// <param name="_COMMODITY"></param>
|
|
private void InitInvoiceControlValue(COMMODITY _COMMODITY)
|
|
{
|
|
ServiceModel.Transaction _Transaction = new Transaction();
|
|
|
|
#region 获取条形码
|
|
string fix_value = "";
|
|
byte[] fix_image01 = new byte[1024];
|
|
BarcodeName.Text = _COMMODITY.COMMODITY_NAME;
|
|
fix_value = _COMMODITY.COMMODITY_BARCODE;
|
|
|
|
BarCode _code13 = new BarCode();
|
|
_code13.Height = 18 + uint.Parse(txtHeight.Text.Trim() == "" ? "0" : txtHeight.Text.Trim());
|
|
_code13.Magnify = 1;
|
|
_code13.FontSize = 20;
|
|
|
|
System.Drawing.Image[] _image = new System.Drawing.Image[1];
|
|
System.IO.MemoryStream _stream = new System.IO.MemoryStream();
|
|
FileStream[] fs = new FileStream[1];
|
|
string jpg = "";
|
|
jpg = "d:\\" + fix_value.ToString() + ".jpeg";
|
|
if (fix_value.Length == 13)
|
|
{
|
|
_image[0] = _code13.GetCodeImage(fix_value);
|
|
_image[0].Save(_stream, System.Drawing.Imaging.ImageFormat.Jpeg);
|
|
//_image[0].Save(jpg);
|
|
|
|
pictureBox1.Image = _image[0];
|
|
}
|
|
else
|
|
pictureBox1.Image = null;
|
|
#endregion
|
|
}
|
|
#endregion
|
|
|
|
#region XY 位置偏移
|
|
private void SetOffsetToControl()
|
|
{
|
|
string offset = string.Empty;
|
|
offset = PrintHelper.GetRegistData("BarcodeOffset");
|
|
try
|
|
{
|
|
txtHeight.Text = offset.Split(',')[0];
|
|
txtX.Text = offset.Split(',')[1];
|
|
txtY.Text = offset.Split(',')[2];
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void btnSet_Click(object sender, EventArgs e)
|
|
{
|
|
if (!string.IsNullOrEmpty(txtHeight.Text))
|
|
{
|
|
int i = 0;
|
|
string billoffset = string.Format("{0},{1},{2}", txtHeight.Text.Trim(), txtX.Text.Trim(), txtY.Text.Trim());
|
|
foreach (string str in PrintHelper.GetRegistData("BarcodeOffset").Split(','))
|
|
{
|
|
if (i > 1)
|
|
{
|
|
billoffset += "," + str;
|
|
i++;
|
|
}
|
|
}
|
|
PrintHelper.WriteRegedit("BarcodeOffset", billoffset);
|
|
if (MessageBox.Show("保存成功!", "操作结果", MessageBoxButtons.OK) == DialogResult.OK)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region treeView1_AfterCheck 选择复选框
|
|
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
|
|
{
|
|
ServiceModel.Transaction _Transaction = new Transaction();
|
|
//e.Node.ExpandAll();
|
|
treeView_Checked(e.Node.Nodes, e.Node.Checked);
|
|
COMMODITY _COMMODITY = new COMMODITY(_Transaction);
|
|
if (e.Node.Name == "COMMODITY")
|
|
{
|
|
if (_COMMODITY.Select(int.Parse(e.Node.Tag.ToString())))
|
|
{
|
|
InitInvoiceControlValue(_COMMODITY);
|
|
SelectNum++;
|
|
}
|
|
else
|
|
InitInvoiceControlValue();
|
|
}
|
|
}
|
|
|
|
private void treeView_Checked(TreeNodeCollection nodes, bool Checked)
|
|
{
|
|
foreach (TreeNode treeNode in nodes)
|
|
{
|
|
treeNode.Checked = Checked;
|
|
}
|
|
}
|
|
|
|
private void CommodityList_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
e.Node.Checked = !e.Node.Checked;
|
|
}
|
|
#endregion
|
|
|
|
#region treeView1_AfterSelect 选择树节点
|
|
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
ServiceModel.Transaction _Transaction = new Transaction();
|
|
COMMODITY _COMMODITY = new COMMODITY(_Transaction);
|
|
if (e.Node.Name == "COMMODITY")
|
|
{
|
|
if (_COMMODITY.Select(int.Parse(e.Node.Tag.ToString())))
|
|
{
|
|
InitInvoiceControlValue(_COMMODITY);
|
|
}
|
|
else
|
|
InitInvoiceControlValue();
|
|
}
|
|
else
|
|
{
|
|
treeView_Show(e.Node, _Transaction);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 呈现商品标价签
|
|
bool treeView_Show(TreeNode _TreeNode, ServiceModel.Transaction _Transaction)
|
|
{
|
|
int CurrentNum = 0;
|
|
COMMODITY _COMMODITY = new COMMODITY(_Transaction);
|
|
foreach (TreeNode treeNode in _TreeNode.Nodes)
|
|
{
|
|
if (treeNode.Name == "COMMODITY")
|
|
{
|
|
if (_COMMODITY.Select(int.Parse(treeNode.Tag.ToString())))
|
|
{
|
|
InitInvoiceControlValue(_COMMODITY);
|
|
CurrentNum++;
|
|
}
|
|
else if (CurrentNum % 12 == 0)
|
|
InitInvoiceControlValue();
|
|
return true;
|
|
}
|
|
if (treeView_Show(treeNode, _Transaction))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|