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

533 lines
20 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.PrintCommodity
{
public partial class frmPrintMain : Windows.Forms.FormBase
{
/// <summary>
/// 存储坐标偏移量
/// </summary>
private int offsetX = 0;
private int offsetY = 0;
private int ServerPart_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(int _ServerPart_ID = 0)
//string ModuleGuid, string UserName = "", : base(ModuleGuid, UserName, Password)
{
ServerPart_ID = _ServerPart_ID;
InitializeComponent();
//frmUserName = UserName;
//UserNameID = _UserNameID;
}
//public frmPrintMain(string ModuleGuid, string[] args, int _ServerPart_ID)
//: base(ModuleGuid, args)
//{
// ServerPart_ID = _ServerPart_ID;
// InitializeComponent();
//}
//public frmPrintMain(string _UserName, string _UserNameID)
//{
// InitializeComponent();
//}
//public frmPrintMain()
//{
// InitializeComponent();
// txtProinstCode.Text = "";
// SetOffsetToControl();
//}
private void frmPrintMain_Load(object sender, EventArgs e)
{
BindDropDownList_SERVERPART();
txtSearch.Text = "";
SetOffsetToControl();
InitInvoiceControlValue();
TreeViewBinding();
}
#region ->
public void BindDropDownList_SERVERPART(int COMMODITY_ID = 0)
{
ServerPart_Name.Items.Clear();
//获得服务区信息
foreach (SERVERPART _SERVERPART in (new SERVERPART()).FillCollection(
"where PROVINCE_CODE = '6560' and FIELDENUM_ID <> 6560 ORDER BY SERVERPART_CODE"))
{
ServerPart_Name.Items.Add("【" + _SERVERPART.SERVERPART_CODE + "】" + _SERVERPART.SERVERPART_NAME);
}
}
#endregion
#region TreeViewBinding
private void TreeViewBinding()
{
COMMODITYTYPE _COMMODITYTYPE = new Storage.Business.COMMODITYTYPE();
treeView1.Nodes.Clear();
BindingTreeView("-1", this.treeView1.Nodes, this.txtSearch.Text.Trim(), ServerPart_ID);
}
#region BindingTreeView
public void BindingTreeView(string pid, TreeNodeCollection nodes, string obscureName, int _ServerPart_ID)
{
DataTable bindingDataSource = this.GetBindingDataSource(pid, obscureName, _ServerPart_ID);
for (int i = bindingDataSource.Rows.Count - 1; i >= 0; i--)
{
DataRow dataRow = bindingDataSource.Rows[i];
TreeNode treeNode = new TreeNode();
treeNode.Text = dataRow["COMMODITYTYPE_NAME"].ToString();
//treeNode.Value = dataRow["COMMODITYTYPE_ID"].ToString();
//treeNode.ImageToolTip = "COMMODITYTYPE";
//treeNode.ImageUrl = "";
//treeNode.Expanded = new bool?(false);
//if ((new Storage.Business.RTCOMMODITYSERVERPART()).GetCount("WHERE SERVERPART_ID = " + ServerPart_ID +
// " AND COMMODITYTYPE_ID = " + dataRow["COMMODITYTYPE_ID"].ToString()) > 0 && ShowCheckBoxes)
//{
// treeNode.Checked = true;
// treeNode.Expanded = true;
//}
nodes.Add(treeNode);
//treeNode.PopulateOnDemand = true;
this.BindingTreeView(dataRow["COMMODITYTYPE_ID"].ToString(), treeNode.Nodes, obscureName, _ServerPart_ID);
}
foreach (COMMODITY _COMMODITY in (new COMMODITY()).FillCollection("WHERE COMMODITY_TYPE = '" + pid +
"' AND SERVERPART_ID = " + ServerPart_ID))
{
TreeNode treeNode = new TreeNode();
treeNode.Text = _COMMODITY.COMMODITY_NAME;
treeNode.Tag = _COMMODITY.COMMODITY_ID;
treeNode.Name = "COMMODITY";
nodes.Add(treeNode);
if (!string.IsNullOrEmpty(obscureName))
{
if (treeNode.GetNodeCount(false) == 0)
{
if (treeNode.Text.IndexOf(obscureName, StringComparison.CurrentCultureIgnoreCase) < 0)
{
nodes.Remove(treeNode);
}
}
else
{
treeNode.Expand();
}
}
}
}
#endregion
#region GetBindingDataSource
public DataTable GetBindingDataSource(string pid, int ServerPart_ID)
{
return this.GetBindingDataSource(pid, string.Empty, ServerPart_ID);
}
public DataTable GetBindingDataSource(string pid, string obscureName, int ServerPart_ID)
{
string arg3 = string.Empty;
string format = @"SELECT * FROM HIGHWAY_STORAGE.T_COMMODITYTYPE WHERE {0} AND COMMODITYTYPE_ID in (
select COMMODITYTYPE_ID from HIGHWAY_STORAGE.V_COMMODITY where SERVERPART_ID = " + ServerPart_ID +
" {1}) {2} ORDER BY COMMODITYTYPE_PID,COMMODITYTYPE_CODE DESC";
string arg = string.IsNullOrEmpty(pid) ? "1=1" : ("COMMODITYTYPE_PID=" + pid);
string arg2 = string.IsNullOrEmpty(obscureName) ? "" : ("and COMMODITY_NAME like '%" + obscureName + "%'");
string fullSQLString = string.Format(format, arg, arg2, "AND COMMODITYTYPE_VALID = 1");
return (new COMMODITY()).ExecuteDataTable(fullSQLString, null, 0, 0);
}
#endregion
#endregion
#region btnSearch_Click
private void btnSearch_Click(object sender, EventArgs e)
{
InitInvoiceControlValue();
//if (string.IsNullOrEmpty(txtSearch.Text.Trim()))
//{
// MessageBox.Show("请先输入查询条件");
// return;
//}
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("BillOffset");
offsetX = Int32.Parse(billOffset.Split(',')[0]);
offsetY = Int32.Parse(billOffset.Split(',')[1]);
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]);
//移除本次,循环数据
_TempPrintCommodityCollection.RemoveAt(0);
}
else
{
return;
}
//得到打印界面所有控件数据
Control.ControlCollection ControlColl = null;
ControlColl = panel3.Controls;
//当第二次加载的数据的时候,要把第一调用的画布,清除一遍,记得这是很重要的一句话!
e.Graphics.Clear(Color.White);
///
Brush brush = null;
//这里的循环结束一次,才表示一张票据的数据输送完毕
for (int i = 0; i < ControlColl.Count; i++)
{
brush = new SolidBrush(Color.Black);
e.Graphics.DrawString(ControlColl[i].Text, ControlColl[i].Font, brush, new PointF(ControlColl[i].Location.X + offsetX, ControlColl[i].Location.Y + offsetY));
}
e.Graphics.DrawImage(Barcode.Image, new PointF(Barcode.Location.X + offsetX, Barcode.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()
{
Commodity_Name.Text = "";
Article_Num.Text = "";
ProducingArea.Text = "";
Specification.Text = "";
Commodity_Barcode.Text = "";
Grade.Text = "";
Unit.Text = "";
Retail_Price.Text = "";
Staff.Text = "";
}
/// <summary>
/// 票据---》赋值
/// </summary>
/// <param name="_COMMODITY"></param>
private void InitInvoiceControlValue(COMMODITY _COMMODITY)
{
ServiceModel.Transaction _Transaction = new Transaction();
Commodity_Name.Text = _COMMODITY.COMMODITY_NAME;
Article_Num.Text = _COMMODITY.COMMODITY_CODE;
ProducingArea.Text = _COMMODITY.COMMODITY_ORI;
Specification.Text = _COMMODITY.COMMODITY_RULE;
Commodity_Barcode.Text = _COMMODITY.COMMODITY_BARCODE;
try
{
Grade.Text = DictionaryHelper.GetFieldEnumName("COMMODITYGRADE", _COMMODITY.COMMODITY_GRADE.ToString(), new Transaction());
if (Grade.Text.Contains("等品"))
Grade.Text = Grade.Text.Replace("等品", "");
else if (Grade.Text.Contains("合格品"))
Grade.Text = "合格";
}
catch
{
Grade.Text = "";
}
Unit.Text = _COMMODITY.COMMODITY_UNIT;
Retail_Price.Text = _COMMODITY.COMMODITY_RETAILPRICE.ToString();
Staff.Text = "";
#region
string fix_value = "";
byte[] fix_image01 = new byte[1024];
fix_value = Commodity_Barcode.Text;
BarCode _code13 = new BarCode();
_code13.Height = 18;
_code13.Magnify = 0;
_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);
Barcode.Image = _image[0];
}
else
Barcode.Image = null;
#endregion
}
#endregion
#region XY
private void SetOffsetToControl()
{
string offset = string.Empty;
offset = PrintHelper.GetRegistData("BillOffset");
txtX.Text = offset.Split(',')[0];
txtY.Text = offset.Split(',')[1];
}
private void btnSet_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtX.Text) && !string.IsNullOrEmpty(txtY.Text))
{
string billoffset = string.Format("{0},{1}", txtX.Text.Trim(), txtY.Text.Trim());
PrintHelper.WriteRegedit("BillOffset", 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);
}
else
InitInvoiceControlValue();
}
}
private void treeView_Checked(TreeNodeCollection nodes, bool Checked)
{
foreach (TreeNode treeNode in nodes)
{
treeNode.Checked = 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)
{
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);
}
else
InitInvoiceControlValue();
return true;
}
if (treeView_Show(treeNode, _Transaction))
return true;
}
return false;
}
#endregion
#region ServerPart_Name_SelectedIndexChanged
private void ServerPart_Name_SelectedIndexChanged(object sender, EventArgs e)
{
ServiceModel.Transaction _Transaction = new Transaction();
SERVERPART _SERVERPART = new SERVERPART(_Transaction);
_SERVERPART.AddSearchParameter("SERVERPART_CODE", ServerPart_Name.Text.Substring(1, 6));
if (_SERVERPART.Search())
ServerPart_ID = (int)_SERVERPART.SERVERPART_ID;
else
ServerPart_ID = 0;
txtSearch.Text = "";
SetOffsetToControl();
InitInvoiceControlValue();
TreeViewBinding();
}
#endregion
}
}