From 663f562fd5d48735087958b303e38875e14a25d9 Mon Sep 17 00:00:00 2001 From: luanhui <1029149336@qq.com> Date: Wed, 10 Jan 2018 22:24:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj | 5 +- .../Pages/TypeIOCs/CarLoadingTypeIOC.cs | 254 ++++++++++++++++++ 2 files changed, 256 insertions(+), 3 deletions(-) create mode 100644 B3QingDaoWanFu.Web/Pages/TypeIOCs/CarLoadingTypeIOC.cs diff --git a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj index 2d265d4..efa97ec 100644 --- a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj +++ b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj @@ -153,12 +153,11 @@ ASPXCodeBehind + - - - + diff --git a/B3QingDaoWanFu.Web/Pages/TypeIOCs/CarLoadingTypeIOC.cs b/B3QingDaoWanFu.Web/Pages/TypeIOCs/CarLoadingTypeIOC.cs new file mode 100644 index 0000000..c0d12dd --- /dev/null +++ b/B3QingDaoWanFu.Web/Pages/TypeIOCs/CarLoadingTypeIOC.cs @@ -0,0 +1,254 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Web.UI; +using System.Web.UI.HtmlControls; +using BWP.B3Frameworks; +using BWP.B3Sale.BO; +using BWP.Web.Pages.B3Sale; +using BWP.Web.Pages.B3Sale.Bills.CarLoading_; +using Forks.Drawing; +using Forks.EnterpriseServices.DataForm; +using Forks.Utils; +using TSingSoft.WebControls2.BillReports; +using TSingSoft.WebPluginFramework; + +namespace BWP.Web.Pages.TypeIOCs +{ + [TypeIOC(typeof(CarLoadingPrint), typeof(CarLoadingPrint.AfterAddParameters))] + public class CarLoadingTypeIOC : CarLoadingPrint.AfterAddParameters + { + + public void Invoke(IDictionary dic, CarLoading dmo) + { + AddParameterss(dic, dmo); + } + + //定制打印格式【装车单】 + protected void AddParameterss(IDictionary dic, CarLoading Dmo) + { + + PageSize = 100; + dic.Add("$DetailInfo2", new Func(() => GetPrintStyle(Dmo, true))); + + + } + + + readonly StringBuilder mHtml = new StringBuilder(); + //readonly StringBuilder mHtml2 = new StringBuilder(); + + protected int mTotalCount { get; private set; } + + private string GetPrintStyle(CarLoading dmo, bool haveaddress) + { + StringBuilder html = BuildHtml(dmo, haveaddress); + return html.ToString(); + } + + protected int PageSize { get; private set; } + + private StringBuilder BuildHtml(CarLoading dmo, bool haveaddress) + { + StringBuilder html = new StringBuilder(); + + DFDataTable dt = new DFDataAdapter(CarLoadingUtil.GetGoodsDetailGroupByOutStoreID(dmo)).Fill(); + mTotalCount = dt.Rows.Count; + + var pageCount = mTotalCount <= 0 ? 1 : ((mTotalCount + PageSize - 1) / PageSize); + Money? allSecNum = GetAllNum(dt, "SecondNumber"); + Money? allMainNum = GetAllNum(dt, "Number"); + var infoBand = GetInfoBand(dmo, allSecNum, allMainNum); + for (int i = 0; i < pageCount; i++) + { + var report = new BillReport(); + report.Bands.Add(new TextBand("装车单№" + dmo.ID, new Font("黑体", 15), TextAlignMode.Center)); + report.Bands.Add(infoBand); + report.FindControl(""); + html.Append(ToHtmlStr(report)); + + HtmlTable table = NewHtmlTable(); + table.EAddRow("center", 1, 1, "单号", "客户", "仓库", "存货编号", "存货名称", "规格", "辅单位", "件数", "主单位", "数量", "备注", "发货标记"); + int i1 = i; + var groups = dt.Rows.Where(detail => detail.RowID >= i1 * PageSize && detail.RowID < (i1 + 1) * PageSize).GroupBy(detail => ((long?)detail["BillID"]).Value); + AddDetails(table, groups, haveaddress); + html.Append(ToHtmlStr(table)); + var reportBottom = new BillReport(); + reportBottom.Bands.Add(GetBottomInfoBand(dmo, pageCount, i + 1)); + reportBottom.FindControl(""); + html.Append(ToHtmlStr(reportBottom)); + if (i + 1 != pageCount) + { + html.Append("
"); + } + + } + + return html; + } + + + private static DFInfoBand GetBottomInfoBand(CarLoading dmo, int pageCount, int currentPage) + { + var dfInfoBand = new DFInfoBand(dmo, 4); + dfInfoBand.AddField("CreateUser_Name", 4); + dfInfoBand.AddField("CheckUser_Name", 4); + dfInfoBand.AddText("页码", currentPage + "" + (pageCount == -1 ? "" : ("/" + pageCount))); + dfInfoBand.AddText("打印时间", BLContext.Now.ToString()); + return dfInfoBand; + } + + private static DFInfoBand GetInfoBand(CarLoading dmo, Money? allSecNum, Money? allMainNum) + { + var dfInfoBand = new DFInfoBand(dmo, 3); + dfInfoBand.AddField("Car_Name", 4); + dfInfoBand.AddField("AccountingUnit_Name", 4); + dfInfoBand.AddField("Date", 4); + dfInfoBand.AddField("Deliveryman_Name", 4); + dfInfoBand.AddText("总 件 数", allSecNum.HasValue ? allSecNum.ToString() : ""); + dfInfoBand.AddText("总 数 量", allMainNum.HasValue ? allMainNum.ToString() : ""); + dfInfoBand.AddField("Remark", 4, 3, Font.Empty, WrapMode.Wrap); + return dfInfoBand; + } + + private static Money? GetAllNum(DFDataTable dt, string fieldName) + { + Money? num = 0; + foreach (DFDataRow row in dt.Rows) + { + num = num + (((Money?)row[fieldName]) ?? 0); + } + return num; + } + + private static Money? GetAllGroupNum(IGrouping dt, string fieldName) + { + Money? num = 0; + foreach (var row in dt) + { + num = num + (((Money?)row[fieldName]) ?? 0); + } + return num; + } + + + //readonly IntConfigRef mPageSize = new IntConfigRef(1000); + //[LogicName("装车单复杂打印格式分页")] + //[ConfigurationItemGroup("装车单")] + //[ConfigurationItemDescription("默认一页打印1000个产品,此配置影响装车单定制打印格式 ")] + //public IntConfigRef PageSize + //{ + // get { return mPageSize; } + //} + + + private void AddDetails(HtmlTable table, IEnumerable> groups, bool haveaddress) + { + HtmlTableExtentions.rowCount = 0; + foreach (var group in groups) + { + bool first = true; + Money? main = null; + Money? sec = null; + + HtmlTableRow row; + foreach (DFDataRow dataRow in group) + { + row = new HtmlTableRow(); + table.Rows.Add(row); + if (first) + { + row.EAdd("center", group.Count() + 1, 1, ((long?)dataRow["BillID"]).Value.ToString(), (string)dataRow["Customer_Name"], (string)dataRow["Store_Name"]); + if (haveaddress) + { + Address = (string)dataRow["DeliverAddress"]; + Remark = (string)dataRow["Remark"]; + } + + first = false; + } + var secNum = (Money?)dataRow["SecondNumber"]; + var mainNum = (Money?)dataRow["Number"]; + row.EAdd("center", 1, 1, (string)dataRow["Goods_Code"], (string)dataRow["Goods_Name"], (string)dataRow["Goods_Spec"], (string)dataRow["Goods_SecondUnit"], (secNum ?? 0).ToString(), (string)dataRow["Goods_MainUnit"], (mainNum ?? 0).ToString(), (string)dataRow["Goods_Remark"], ""); + + main = (main ?? 0) + (mainNum ?? 0); + sec = (sec ?? 0) + (secNum ?? 0); + } + table.EAddRow("center", 1, 1, "小计", "", "", "", sec.ToString(), "", main.ToString(), "", ""); + if (haveaddress) + { + row = new HtmlTableRow(); + table.Rows.Add(row); + row.EAdd("center", 1, 1, "地址"); + row.EAdd("left", 1, 11, Address); + + row = new HtmlTableRow(); + table.Rows.Add(row); + row.EAdd("center", 1, 1, "备注"); + row.EAdd("left", 1, 11, Remark); + } + + } + } + + + + + + private string Address { get; set; } + private string Remark { get; set; } + + + + private static string ToHtmlStr(Control ctrl) + { + var sb = new StringBuilder(); + using (var writer = new HtmlTextWriter(new StringWriter(sb))) + { + ctrl.RenderControl(writer); + } + return sb.ToString(); + } + + private static HtmlTable NewHtmlTable() + { + var table = new HtmlTable(); + table.Style.Add("border-collapse", "collapse"); + table.Width = "100%"; + table.BorderColor = "Black"; + table.Border = 1; + return table; + } + + } + + public static class HtmlTableExtentions + { + public static void EAdd(this HtmlTableRow row, string align, int rowSpan, int colSpan, params string[] innerHtmls) + { + foreach (var innerHtml in innerHtmls) + { + var cell = new HtmlTableCell + { + Align = align, + RowSpan = rowSpan, + ColSpan = colSpan, + InnerHtml = innerHtml + }; + cell.Style["Font-size"] = "15px"; + row.Cells.Add(cell); + } + } + + public static void EAddRow(this HtmlTable table, string align, int rowSpan, int colSpan, params string[] innerHtmls) + { + var row = new HtmlTableRow(); + row.EAdd(align, rowSpan, colSpan, innerHtmls); + table.Rows.Add(row); + } + + public static int rowCount; + } +}