2025-03-27 15:05:14 +08:00

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
}
}