From 5931312ff367429d9e267a182bfcbbd6770e2602 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Wed, 10 Oct 2018 14:33:02 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=8E=89=E7=BD=91?= =?UTF-8?q?=E9=A1=B5=E6=89=AB=E7=A0=81=E3=80=82=E5=8F=AA=E6=9C=89=E7=99=BD?= =?UTF-8?q?=E6=9D=A1=E5=92=8C=E5=88=86=E5=89=B2=E5=93=81=E4=BC=A0=E5=88=B0?= =?UTF-8?q?MES=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs b/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs index e0e3499..12458ad 100644 --- a/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs +++ b/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs @@ -98,8 +98,8 @@ namespace BWP.B3QingDaoWanFu.Tasks query.Columns.Add(DQSelectColumn.Field("Flag", scan)); query.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThanOrEqual("BillState", 单据状态.已审核), DQCondition.IsNull(DQExpression.Field(relate, "SaleOutStore_ID")), DQCondition.IsNotNull(DQExpression.Field(scan, "ID")))); - query.Where.Conditions.Add(DQCondition.And(DQCondition.Or(DQCondition.EQ(scan, "Flag", -1), DQCondition.GreaterThan(scan, "Weight", 0)), DQCondition.GreaterThan(scan, "Number", 0))); - query.Where.Conditions.Add(DQCondition.InEQ(scan, "Flag", 2)); + + query.Where.Conditions.Add(DQCondition.Or(DQCondition.EQ(scan, "Flag", 0), DQCondition.EQ(scan, "Flag", 1))); query.OrderBy.Expressions.Add(DQOrderByExpression.Create(main, "ID")); using (var session = Dmo.NewSession()) { From 7f4c3bcbcc384c2af7a0cd5004ae376993658a11 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Mon, 15 Oct 2018 20:18:13 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E6=8C=89=E7=BA=BF=E8=B7=AF=E6=B4=BE?= =?UTF-8?q?=E8=BD=A6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tools/CarLoadingBySendLinePage.cs | 140 +++++++++--------- .../B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs | 25 +++- 2 files changed, 92 insertions(+), 73 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs index 72ef14c..3920fe1 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs @@ -26,7 +26,7 @@ using TSingSoft.WebPluginFramework.Controls; namespace BWP.Web.Pages.B3QingDaoWanFu.Tools { - class CarLoadingBySendLinePage:AppBasePage + class CarLoadingBySendLinePage : AppBasePage { private readonly DFInfo _dFInfo = DFInfo.Get(typeof(SaleOutStore)); @@ -58,7 +58,9 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools var btnSearch = new TSButton("开始查询", (sender, e) => { - _slGrid.Query = GetSendLineQuery(_slQueryContainer.Build(), _slChbHidden.Checked); + var min = (DateTime?)_slQueryContainer.GetInput("MinLoadTime"); + var max = (DateTime?)_slQueryContainer.GetInput("MaxLoadTime"); + _slGrid.Query = GetSendLineQuery(_slQueryContainer.Build(), _slChbHidden.Checked, min, max); _slGrid.DataBind(); }); @@ -99,8 +101,8 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools private void CreateSendLineGridColumns() { _slGrid.Columns.Add(new DFBrowseGridColumn("路线")); - _slGrid.Columns.Add(new DFBrowseGridColumn("辅数量")); -// _slGrid.Columns.Add(new DFBrowseGridColumn("AllUnitNum")); + _slGrid.Columns.Add(new DFBrowseGridColumn("SecondNumber", "辅数量")); + // _slGrid.Columns.Add(new DFBrowseGridColumn("AllUnitNum")); var allUnitNumcol = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) => { var allUnitNum = _slGrid.CurrentData.Data.Rows[rowIndex]["AllUnitNum"]; @@ -139,11 +141,10 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools }; cell.Controls.Add(link); cell.Align = "right"; - }) - { HeaderText = "报价数量" }; + }) { HeaderText = "报价数量" }; _slGrid.Columns.EAdd(allUnitNumcol); - _slGrid.Columns.Add(new DFBrowseGridColumn("已派车数量")); + _slGrid.Columns.Add(new DFBrowseGridColumn("AlreadyNumber", "已派车数量")); var thisTimeLoadNum = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) => { var x = new Label(); @@ -152,8 +153,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools x.Text = num.ToString(); cell.Controls.Add(x); cell.Align = "right"; - }) - { HeaderText = "本次派车数量" }; + }) { HeaderText = "本次派车数量" }; _slGrid.Columns.Add(thisTimeLoadNum); var staffColumn = new DFEditGridColumn("业务员ID"); staffColumn.InitEditControl += (sender, e) => @@ -233,8 +233,8 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools _slGrid.DataBind(); AspUtil.Alert(this, msg); - -// _carLoadingGrid.DataBind(); + + // _carLoadingGrid.DataBind(); } else { @@ -247,76 +247,84 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools } - private class AreadyLoadBill - { - public long SaleOutStore_ID { get; set; } - } - public static DQueryDom GetSendLineQuery(DQueryDom dom, bool hidden) + + public static DQueryDom GetSendLineQuery(DQueryDom dom, bool hidden, DateTime? min, DateTime? max) { - var areadyLoadBill = new JoinAlias("AreadyLoadBill", typeof(AreadyLoadBill)); + var main = new JoinAlias(typeof(temp2)); + var query = new DQueryDom(main); + OrganizationUtil.RegisterOrganizationQueryTable(query); + AreadyLoadBill.Register(query, min, max); + temp2.Register(query, dom, hidden); var sendLine = new JoinAlias("SendLine", typeof(DeliverGoodsLine)); - var sendLineDetail = new JoinAlias(typeof(DeliverGoodsLine_Detail)); - dom.From.AddJoin(JoinType.Left, new DQDmoSource(sendLineDetail), DQCondition.EQ(sendLineDetail, "Customer_ID", dom.From.RootSource.Alias, "Customer_ID")); - dom.From.AddJoin(JoinType.Left, new DQDmoSource(sendLine), DQCondition.EQ(sendLineDetail, "DeliverGoodsLine_ID", sendLine, "ID")); - dom.RegisterQueryTable(typeof(AreadyLoadBill), new List { "SaleOutStore_ID" }, GetTemDom()); - dom.From.AddJoin(JoinType.Left, new DQDmoSource(areadyLoadBill), DQCondition.EQ(areadyLoadBill, "SaleOutStore_ID", dom.From.RootSource.Alias, "ID")); - - dom.Columns.Clear(); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "ID"), "路线ID")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Name"), "路线")); - dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "ID")); - dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Name")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("AllUnitNum")), "AllUnitNum")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "辅数量")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.GreaterThan(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID"), DQExpression.Snippet("0")), DQExpression.Field("AllUnitNum"), DQExpression.NULL)), "已派车数量")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet?>("null"), "本次派车数量")); - -// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("null"), "业务员ID")); -// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "业务员")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(sendLine), DQCondition.EQ(main, "DeliverGoodsLine_ID", sendLine, "ID")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "业务员ID")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "业务员")); - dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Employee_ID")); - dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Employee_Name")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "送货人员ID")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "送货人员")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "ID"), "路线ID")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Name"), "路线")); + query.Columns.Add(DQSelectColumn.Field("AllUnitNum", main)); + query.Columns.Add(DQSelectColumn.Field("SecondNumber", main)); + query.Columns.Add(DQSelectColumn.Field("AlreadyNumber", main)); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet?>("null"), "本次派车数量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "业务员ID")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "业务员")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "送货人员ID")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "送货人员")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Car_ID"), "车辆ID")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Car_Name"), "车辆")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "Remark")); + return query; + } -// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("null"), "送货人员ID")); -// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "送货人员")); + class temp2 + { + public long? DeliverGoodsLine_ID { get; set; } + public Money? AllUnitNum { get; set; } + public Money? SecondNumber { get; set; } + public Money? AlreadyNumber { get; set; } - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine,"Car_ID"), "车辆ID")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Car_Name"), "车辆")); - dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Car_ID")); - dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Car_Name")); - // dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("null"), "车辆ID")); - // dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "车辆")); - dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("''"), "Remark")); - dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.未审核)); - dom.Where.Conditions.Add(DQCondition.EQ("TakeGoods_Type", 配送方式.公司配送)); - dom.Where.Conditions.Add(DQCondition.GreaterThan(DQExpression.IfNull(DQExpression.Field(sendLine, "ID"), DQExpression.Snippet("0")), DQExpression.Snippet("0"))); - dom.Where.Conditions.Add(DQCondition.Or( - DQCondition.InEQ(DQExpression.Field("AllUnitNum"), DQExpression.Snippet?>("0")), - DQCondition.InEQ(DQExpression.Field("SecondNumber"), DQExpression.Snippet?>("0")))); - if (hidden) + public static void Register(DQueryDom root, DQueryDom dom, bool hidden) { - dom.Having.Conditions.Add(DQCondition.InEQ(DQExpression.Count(DQExpression.Field("ID")), DQExpression.Count(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID")))); - } + var areadyLoadBill = new JoinAlias("AreadyLoadBill", typeof(AreadyLoadBill)); + dom.From.AddJoin(JoinType.Left, new DQDmoSource(areadyLoadBill), DQCondition.EQ(areadyLoadBill, "SaleOutStore_ID", dom.From.RootSource.Alias, "ID")); - OrganizationUtil.AddOrganizationLimit(dom,typeof(SaleOutStore)); - return dom; + dom.Columns.Clear(); + dom.Columns.Add(DQSelectColumn.Field("DeliverGoodsLine_ID")); + dom.GroupBy.Expressions.Add(DQExpression.Field("DeliverGoodsLine_ID")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("AllUnitNum")), "AllUnitNum")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "辅数量")); + dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.IsNull(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID")), DQExpression.NULL, DQExpression.Field("AllUnitNum"))), "已派车数量")); + dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.未审核)); + dom.Where.Conditions.Add(DQCondition.EQ("TakeGoods_Type", 配送方式.公司配送)); + dom.Where.Conditions.Add(DQCondition.IsNotNull(DQExpression.Field("DeliverGoodsLine_ID"))); + dom.Where.Conditions.Add(DQCondition.Or( + DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("AllUnitNum"), DQExpression.Value(0)), DQExpression.Value(0)), + DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("SecondNumber"), DQExpression.Value(0)), DQExpression.Value(0)))); + if (hidden) + { + dom.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID"))); + } + OrganizationUtil.AddOrganizationLimit(dom, typeof(SaleOutStore)); + root.RegisterQueryTable(typeof(temp2), new string[] { "DeliverGoodsLine_ID", "AllUnitNum", "SecondNumber", "AlreadyNumber" }, dom); + } } + } - private static DQueryDom GetTemDom() + public class AreadyLoadBill + { + public long SaleOutStore_ID { get; set; } + public static void Register(DQueryDom root, DateTime? min, DateTime? max) { var carLoadingBillDetail = new JoinAlias(typeof(CarLoading_BillDetail)); var temDom = new DQueryDom(carLoadingBillDetail); - temDom.Columns.Add(DQSelectColumn.Field("BillID", "SaleOutStore_ID")); + temDom.Columns.Add(DQSelectColumn.Field("BillID", carLoadingBillDetail, "SaleOutStore_ID")); + temDom.GroupBy.Expressions.Add(DQExpression.Field(carLoadingBillDetail, "BillID")); + if (min.HasValue) + temDom.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("LoadTime", min)); + if (max.HasValue) + temDom.Where.Conditions.Add(DQCondition.LessThanOrEqual("LoadTime", max)); temDom.Where.Conditions.Add(DQCondition.EQ(carLoadingBillDetail, "BillTypeID", DmoTypeIDAttribute.GetID(typeof(SaleOutStore)))); - temDom.GroupBy.Expressions.Add(DQExpression.Field("BillID")); - return temDom; + root.RegisterQueryTable(typeof(AreadyLoadBill), new string[] { "SaleOutStore_ID" }, temDom); } - } } diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs index 228adfb..4f5c2d4 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs @@ -14,6 +14,8 @@ using Forks.EnterpriseServices.SqlDoms; using Forks.Utils; using TSingSoft.WebControls2; using TSingSoft.WebPluginFramework.Controls; +using BWP.B3Frameworks.BO.NamedValueTemplate; +using BWP.B3Sale.Utils; namespace BWP.Web.Pages.B3QingDaoWanFu.Tools { @@ -142,22 +144,31 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools } DQueryDom GetQuery() { - var dom = new DQueryDom(new JoinAlias(typeof(SaleOutStore))); - dom = CarLoadingBySendLinePage.GetSendLineQuery(dom, false); - dom.Columns.Clear(); - dom.GroupBy.Expressions.Clear(); - dom.Having.Conditions.Clear(); + var main = new JoinAlias(typeof(SaleOutStore)); + var dom = new DQueryDom(main); + var detail = new JoinAlias(typeof(AreadyLoadBill)); + AreadyLoadBill.Register(dom, MinTime, MaxTime); + dom.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID")); if (MinTime != null) dom.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("LoadTime", MinTime)); if (MaxTime != null) dom.Where.Conditions.Add(DQCondition.LessThanOrEqual("LoadTime", MaxTime)); - dom.Where.Conditions.Add(DQExpression.Snippet("[SendLine].[ID]=" + SendLineID)); - dom.Where.Conditions.Add(DQExpression.Snippet("ISNULL([AreadyLoadBill].[SaleOutStore_ID], 0)=0")); + + dom.Where.Conditions.Add(DQCondition.EQ("DeliverGoodsLine_ID", SendLineID)); + dom.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field(detail, "SaleOutStore_ID"))); dom.Columns.Add(DQSelectColumn.Field("ID")); dom.Columns.Add(DQSelectColumn.Field("LoadTime")); dom.Columns.Add(DQSelectColumn.Field("Customer_Name")); dom.Columns.Add(DQSelectColumn.Field("AllUnitNum")); dom.Columns.Add(DQSelectColumn.Field("SecondNumber")); + + dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.未审核)); + dom.Where.Conditions.Add(DQCondition.EQ("TakeGoods_Type", 配送方式.公司配送)); + dom.Where.Conditions.Add(DQCondition.IsNotNull(DQExpression.Field("DeliverGoodsLine_ID"))); + dom.Where.Conditions.Add(DQCondition.Or( + DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("AllUnitNum"), DQExpression.Value(0)), DQExpression.Value(0)), + DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("SecondNumber"), DQExpression.Value(0)), DQExpression.Value(0)))); + OrganizationUtil.AddOrganizationLimit(dom, typeof(SaleOutStore)); return dom; } } From a6e50eaa5d48a0b14bb8d51c836de145b5d52eb7 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Wed, 24 Oct 2018 10:45:53 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E9=80=80=E5=BA=93=E6=89=AB=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs b/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs index 12458ad..70db868 100644 --- a/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs +++ b/B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs @@ -100,7 +100,7 @@ namespace BWP.B3QingDaoWanFu.Tasks query.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThanOrEqual("BillState", 单据状态.已审核), DQCondition.IsNull(DQExpression.Field(relate, "SaleOutStore_ID")), DQCondition.IsNotNull(DQExpression.Field(scan, "ID")))); query.Where.Conditions.Add(DQCondition.Or(DQCondition.EQ(scan, "Flag", 0), DQCondition.EQ(scan, "Flag", 1))); - query.OrderBy.Expressions.Add(DQOrderByExpression.Create(main, "ID")); + query.OrderBy.Expressions.Add(DQOrderByExpression.Create(scan, "ID")); using (var session = Dmo.NewSession()) { var carcassList = new List(); From da8d8ea1ecc2315ecb7d7ed6afecddc7256cacd5 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Fri, 9 Nov 2018 21:06:35 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=8D=95No.141724=20?= =?UTF-8?q?=E4=B8=87=E7=A6=8F=E6=A8=A1=E5=9D=97=E6=96=B0=E5=A2=9E=E5=AE=9A?= =?UTF-8?q?=E5=88=B6=E6=8A=A5=E8=A1=A8=E3=80=90=E9=94=80=E5=94=AE=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E8=A1=A8=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj | 7 + .../SaleSummaryReport_/SaleSummaryReport.cs | 293 ++++++++++++++++++ .../config/plugins/B3QingDaoWanFu.plugin | 2 + 3 files changed, 302 insertions(+) create mode 100644 B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs diff --git a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj index de5cc0d..5a3616f 100644 --- a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj +++ b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj @@ -84,6 +84,10 @@ ..\..\..\tsref\Debug\B3Sale.Web.dll False + + False + ..\..\..\tsref\Debug\B3SaleInterface.dll + False D:\BwpB3Project\tsref\Debug\B3UnitedInfos.dll @@ -201,6 +205,9 @@ ASPXCodeBehind + + ASPXCodeBehind + ASPXCodeBehind diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs new file mode 100644 index 0000000..ad9b6c4 --- /dev/null +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -0,0 +1,293 @@ +using BWP.B3Frameworks; +using BWP.B3Frameworks.BO; +using BWP.B3Frameworks.BO.NamedValueTemplate; +using BWP.B3Sale.BO; +using BWP.Web.Utils; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using Forks.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Web.UI; +using TSingSoft.WebControls2; +using TSingSoft.WebPluginFramework; + +namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ +{ + class SaleSummaryReport : ClickQueryReportPage + { + protected override string AccessRoleName + { + get { return "B3QingDaoWanFu.报表.销售统计表"; } + } + + protected override string Caption + { + get { return "销售统计表"; } + } + + protected override void InitDFGrid(DFGrid mDfGrid) + { + base.InitDFGrid(mDfGrid); + mDfGrid.AllowRowGroup = true; + mDfGrid.AllowColGroup = true; + mDfGrid.AllowSorting = true; + mDfGrid.HeaderPagerLock = true; + } + + protected override void CreateQueryPanel(VLayoutPanel vPanel) + { + var list = new List>(); + list.Add(new Tuple("First", "一级部门")); + list.Add(new Tuple("Second", "二级部门")); + + + var dic = list.Select((item) => item.Item1).EToHashSet(); + + var tablePanel = vPanel.Add(new TableLayoutPanel(1, 2), new VLayoutOption(System.Web.UI.WebControls.HorizontalAlign.Justify)); + + tablePanel.Add(0, 1, 0, 1, CreateFirstDept()); + tablePanel.Add(0, 1, 1, 2, CreateSecondDept()); + } + + List> FirstDepts + { + get + { + if (ViewState["FirstDepts"] == null) + ViewState["FirstDepts"] = GetFirstDepts(); + return (List>)ViewState["FirstDepts"]; + } + set { ViewState["FirstDepts"] = value; } + } + + List> GetFirstDepts() + { + var dept = SaleDepartmentInfo; + var query = new DQueryDom(new JoinAlias(typeof(Department))); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("Name")); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", dept.Item2 + 1))); + query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", dept.Item2), dept.Item1)); + query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); + return query.EExecuteList(); + } + + Tuple SaleDepartmentInfo + { + get + { + if (ViewState["SaleDepartmentInfo"] == null) + { + var dept = WebBLUtil.GetSingleDmo("Name", "销售部", "ID", "Depth"); + if (dept == null) + throw new Exception("没有名称为销售部的部门"); + ViewState["SaleDepartmentInfo"] = new Tuple(dept.ID, dept.Depth); + } + return (Tuple)ViewState["SaleDepartmentInfo"]; + } + } + + List> SecondDepts + { + get + { + if (ViewState["SecondDepts"] == null) + ViewState["SecondDepts"] = GetSecondDepts(); + return (List>)ViewState["SecondDepts"]; + } + set { ViewState["SecondDepts"] = value; } + } + + List> GetSecondDepts() + { + var depth = SaleDepartmentInfo.Item2; + var selectedItem = firstFilterTree.GetSelecteItem(); + if (!selectedItem.Selected || string.IsNullOrEmpty(selectedItem.Value)) + return new List>(); + var query = new DQueryDom(new JoinAlias(typeof(Department))); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("Name")); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", depth + 2))); + query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", depth + 1), long.Parse(firstFilterTree.GetSelecteItem().Value))); + query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); + return query.EExecuteList(); + } + + static FilterTree firstFilterTree; + private Control CreateFirstDept() + { + firstFilterTree = new FilterTree() { AllLinkOnFirst = true }; + firstFilterTree.HorizontalRepeatColumns = 10; + this.Load += delegate + { + if (!IsPostBack) + { + firstFilterTree.DataSource.Childs.Clear(); + foreach (var item in FirstDepts) + { + var node = new FilterTreeNode(item.Item2, item.Item1.ToString()); + firstFilterTree.DataSource.Childs.Add(node); + } + } + }; + + mTreeContainer.Add("First", firstFilterTree); + firstFilterTree.Select += (sender, e) => + { + SecondDepts = GetSecondDepts(); + BuildSecond(); + }; + firstFilterTree.FilterAction = (query, node) => + { + if (!string.IsNullOrEmpty(node.Value)) + { + query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), "TreeDeep1ID", long.Parse(node.Value))); + } + }; + + return firstFilterTree; + } + + void BuildSecond() + { + secondFilterTree.DataSource.Childs.Clear(); + foreach (var item in SecondDepts) + { + var node = new FilterTreeNode(item.Item2, item.Item1.ToString()); + secondFilterTree.DataSource.Childs.Add(node); + } + } + + static FilterTree secondFilterTree; + private Control CreateSecondDept() + { + secondFilterTree = new FilterTree() { AllLinkOnFirst = true }; + secondFilterTree.HorizontalRepeatColumns = 10; + this.Load += delegate + { + if (!IsPostBack) + BuildSecond(); + }; + + mTreeContainer.Add("Second", secondFilterTree); + secondFilterTree.FilterAction = (query, node) => + { + if (!string.IsNullOrEmpty(node.Value)) + { + query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), "TreeDeep2ID", long.Parse(node.Value))); + } + }; + + return secondFilterTree; + } + + readonly string[] goodsBrand = new string[] { "条类", "分割品", "副产品", "冻品" }; + + protected override DQueryDom GetQueryDom() + { + var main = new JoinAlias(typeof(TempClass)); + var dept = new JoinAlias("dept", typeof(Department)); + var _3Dept = new JoinAlias("_3Dept", typeof(Department)); + var customer = new JoinAlias(typeof(Customer)); + var goods = new JoinAlias(typeof(SaleGoods)); + var query = new DQueryDom(main); + TempClass.Register(query); + query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(dept, "TreeDeep3ID", _3Dept, "ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(main, "Customer_ID", customer, "ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "ID")); + + query.Columns.Add(DQSelectColumn.Field("Name", _3Dept, "销售部门")); + query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "Name")); + query.Columns.Add(DQSelectColumn.Field("CustomerCatalog_Name", customer)); + query.GroupBy.Expressions.Add(DQExpression.Field(customer, "CustomerCatalog_Name")); + query.GroupBy.Expressions.Add(DQExpression.Field(customer, "CustomerCatalog_ID")); + query.OrderBy.Expressions.Add(DQOrderByExpression.Create(customer, "CustomerCatalog_ID")); + foreach (var item in goodsBrand) + { + if (item == "条类") + { + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), DQExpression.Value(7)), item + "|上周日均头数")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), item + "|头数")); + } + + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)), item + "|上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)), item + "|重量")); + } + + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 2), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)), "上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 1), DQExpression.Field("MainNumber"), DQExpression.NULL)), "当日重量合计")); + + var idx = 0; + foreach (var col in query.Columns) + { + ColumnNames.Add(col.Name); + if (idx > 1) + { + SumColumnNames.Add(col.Name); + GroupSumColumnNamnes.Add(col.Name); + } + idx++; + } + + return query; + } + + class TempClass + { + public long? Department_ID { get; set; } + + public long? Customer_ID { get; set; } + + public long? Goods_ID { get; set; } + + public int Type { get; set; } + + public Money? MainNumber { get; set; } + + public Money? SecondNumber { get; set; } + + public static void Register(DQueryDom root) + { + var q1 = GetSaleOutStore(true); + q1.UnionNext.Select = GetSaleOutStore(false); + + root.RegisterQueryTable(typeof(TempClass), new string[] { "Department_ID", "Customer_ID", "Goods_ID", "Type", "MainNumber", "SecondNumber" }, q1); + } + + static DQueryDom GetSaleOutStore(bool today) + { + var main = new JoinAlias(today + "M", typeof(SaleOutStore)); + var detail = new JoinAlias(today + "D", typeof(SaleOutStore_Detail)); + //var dept = new JoinAlias("dept", typeof(Department)); + var query = new DQueryDom(main); + query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID")); + // query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID")); + query.Columns.Add(DQSelectColumn.Field("Department_ID", main)); + query.Columns.Add(DQSelectColumn.Field("Customer_ID", main)); + query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail)); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(today ? 1 : 2), "Type")); + query.Columns.Add(DQSelectColumn.Field("UnitNum", detail)); + query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail)); + var timeRange = GetDateRange(today); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.GreaterThanOrEqual("BillState", 单据状态.已审核), DQCondition.Between("LoadTime", timeRange.Item1, timeRange.Item2))); + return query; + } + + static Tuple GetDateRange(bool today) + { + if (today) + return new Tuple(DateTime.Today, DateTime.Today + new TimeSpan(23, 59, 59)); + var d = (int)DateTime.Today.DayOfWeek; + if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday) + d = 7; + var date = DateTime.Today.AddDays(-d); + return new Tuple(date.AddDays(-6), date); + } + } + } +} diff --git a/WebFolder/config/plugins/B3QingDaoWanFu.plugin b/WebFolder/config/plugins/B3QingDaoWanFu.plugin index ed44383..f93629d 100644 --- a/WebFolder/config/plugins/B3QingDaoWanFu.plugin +++ b/WebFolder/config/plugins/B3QingDaoWanFu.plugin @@ -29,6 +29,7 @@ + @@ -82,6 +83,7 @@ + From eab2d8175115bfca9270026f9210aafb01d87ee5 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Fri, 9 Nov 2018 21:11:15 +0800 Subject: [PATCH 05/18] . --- .../Reports/SaleSummaryReport_/SaleSummaryReport.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs index ad9b6c4..4e59419 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -211,16 +211,16 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ { if (item == "条类") { - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), DQExpression.Value(7)), item + "|上周日均头数")); - query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), item + "|头数")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), item + "|上周日均头数")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("SecondNumber"), DQExpression.NULL)).ECastType?>(), item + "|头数")); } - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)), item + "|上周日均重量")); - query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)), item + "|重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), item + "|上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), item + "|重量")); } - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 2), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)), "上周日均重量")); - query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 1), DQExpression.Field("MainNumber"), DQExpression.NULL)), "当日重量合计")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 2), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 1), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), "当日重量合计")); var idx = 0; foreach (var col in query.Columns) From d8c3c7b5ce7e1f337c6f163545ac6608594c8424 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Sat, 10 Nov 2018 17:43:34 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E9=94=80=E5=94=AE=E6=B1=87=E6=80=BB?= =?UTF-8?q?=E5=88=86=E6=9E=90=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaleSummaryReport_/SaleSummaryReport.cs | 127 ++++++++++++++---- 1 file changed, 103 insertions(+), 24 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs index 4e59419..715252d 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -38,19 +38,98 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ mDfGrid.HeaderPagerLock = true; } + DateTime SelectDate + { + get + { + if (ViewState["SelectDate"] == null) + ViewState["SelectDate"] = DateTime.Today; + return (DateTime)ViewState["SelectDate"]; + } + set { ViewState["SelectDate"] = value; } + } + + static FilterTree monthTree, dayTree; + protected override void CreateQueryPanel(VLayoutPanel vPanel) { - var list = new List>(); - list.Add(new Tuple("First", "一级部门")); - list.Add(new Tuple("Second", "二级部门")); + var tablePanel = vPanel.Add(new TableLayoutPanel(1, 4), new VLayoutOption(System.Web.UI.WebControls.HorizontalAlign.Justify)); + + tablePanel.Add(0, 1, 0, 1, CreateMonth()); + tablePanel.Add(0, 1, 1, 2, CreateDay()); + tablePanel.Add(0, 1, 2, 3, CreateFirstDept()); + tablePanel.Add(0, 1, 3, 4, CreateSecondDept()); + } + private Control CreateMonth() + { + monthTree = new FilterTree() { DisableCancelSelectButton = true }; + monthTree.HorizontalRepeatColumns = 10; + this.Load += delegate + { + if (!IsPostBack) + { + monthTree.DataSource.Childs.Clear(); + var selected = false; + for (var i = 0; i < 6; i++) + { + var date = DateTime.Today.AddMonths(i - 5); + var v = date.ToString("yyyy-MM"); + var node = new FilterTreeNode(v, v, date); + if (!selected && date.Year == SelectDate.Year && date.Month == SelectDate.Month) + { + node.Selected = true; + selected = true; + } + monthTree.DataSource.Childs.Add(node); + } + } + }; - var dic = list.Select((item) => item.Item1).EToHashSet(); + monthTree.Select += (sender, e) => + { + var dt = (DateTime)monthTree.GetSelecteItem().Tag; + SelectDate = new DateTime(dt.Year, dt.Month, Math.Min(SelectDate.Day, DateTime.DaysInMonth(dt.Year, dt.Month))); + BuildDayTree(); + }; + monthTree.FilterAction = (query, node) => { }; + mTreeContainer.Add("monthTree", monthTree); + return monthTree; + } - var tablePanel = vPanel.Add(new TableLayoutPanel(1, 2), new VLayoutOption(System.Web.UI.WebControls.HorizontalAlign.Justify)); + private Control CreateDay() + { + dayTree = new FilterTree() { DisableCancelSelectButton = true }; + dayTree.HorizontalRepeatColumns = 31; + this.Load += delegate + { + if (!IsPostBack) + BuildDayTree(); + }; + dayTree.Select += (sender, e) => + { + SelectDate = new DateTime(SelectDate.Year, SelectDate.Month, int.Parse(dayTree.GetSelecteItem().Value)); + }; + dayTree.FilterAction = (query, node) => { }; + mTreeContainer.Add("dayTree", dayTree); + return dayTree; + } - tablePanel.Add(0, 1, 0, 1, CreateFirstDept()); - tablePanel.Add(0, 1, 1, 2, CreateSecondDept()); + void BuildDayTree() + { + dayTree.DataSource.Childs.Clear(); + var total = DateTime.DaysInMonth(SelectDate.Year, SelectDate.Month); + bool selected = false; + for (var i = 1; i <= total; i++) + { + var node = new FilterTreeNode(i.ToString(), i.ToString()); + if (!selected && SelectDate.Day == i) + { + node.Selected = true; + selected = true; + } + dayTree.DataSource.Childs.Add(node); + } } List> FirstDepts @@ -195,18 +274,18 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ var customer = new JoinAlias(typeof(Customer)); var goods = new JoinAlias(typeof(SaleGoods)); var query = new DQueryDom(main); - TempClass.Register(query); + TempClass.Register(query, SelectDate); query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID")); - query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(dept, "TreeDeep3ID", _3Dept, "ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 3), _3Dept, "ID")); query.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(main, "Customer_ID", customer, "ID")); query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "ID")); query.Columns.Add(DQSelectColumn.Field("Name", _3Dept, "销售部门")); query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "Name")); - query.Columns.Add(DQSelectColumn.Field("CustomerCatalog_Name", customer)); - query.GroupBy.Expressions.Add(DQExpression.Field(customer, "CustomerCatalog_Name")); - query.GroupBy.Expressions.Add(DQExpression.Field(customer, "CustomerCatalog_ID")); - query.OrderBy.Expressions.Add(DQOrderByExpression.Create(customer, "CustomerCatalog_ID")); + query.Columns.Add(DQSelectColumn.Field("ExtensionsCatalog1_Name", customer, "客户分类")); + query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_Name")); + query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_ID")); + query.OrderBy.Expressions.Add(DQOrderByExpression.Create(customer, "ExtensionsCatalog1_ID")); foreach (var item in goodsBrand) { if (item == "条类") @@ -251,15 +330,15 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ public Money? SecondNumber { get; set; } - public static void Register(DQueryDom root) + public static void Register(DQueryDom root, DateTime date) { - var q1 = GetSaleOutStore(true); - q1.UnionNext.Select = GetSaleOutStore(false); + var q1 = GetSaleOutStore(true, date); + q1.UnionNext.Select = GetSaleOutStore(false, date); root.RegisterQueryTable(typeof(TempClass), new string[] { "Department_ID", "Customer_ID", "Goods_ID", "Type", "MainNumber", "SecondNumber" }, q1); } - static DQueryDom GetSaleOutStore(bool today) + static DQueryDom GetSaleOutStore(bool today, DateTime date) { var main = new JoinAlias(today + "M", typeof(SaleOutStore)); var detail = new JoinAlias(today + "D", typeof(SaleOutStore_Detail)); @@ -273,20 +352,20 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(today ? 1 : 2), "Type")); query.Columns.Add(DQSelectColumn.Field("UnitNum", detail)); query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail)); - var timeRange = GetDateRange(today); + var timeRange = GetDateRange(today, date); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.GreaterThanOrEqual("BillState", 单据状态.已审核), DQCondition.Between("LoadTime", timeRange.Item1, timeRange.Item2))); return query; } - static Tuple GetDateRange(bool today) + static Tuple GetDateRange(bool today, DateTime date) { if (today) - return new Tuple(DateTime.Today, DateTime.Today + new TimeSpan(23, 59, 59)); - var d = (int)DateTime.Today.DayOfWeek; - if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday) + return new Tuple(date, date + new TimeSpan(23, 59, 59)); + var d = (int)date.DayOfWeek; + if (date.DayOfWeek == DayOfWeek.Sunday) d = 7; - var date = DateTime.Today.AddDays(-d); - return new Tuple(date.AddDays(-6), date); + var beforeWeek = date.AddDays(-d); + return new Tuple(beforeWeek.AddDays(-6), beforeWeek); } } } From 1d752e315668e235fa7df2a952ea0098690ef53e Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Mon, 12 Nov 2018 08:18:42 +0800 Subject: [PATCH 07/18] . --- .../Reports/SaleSummaryReport_/SaleSummaryReport.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs index 715252d..8d448c4 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -264,7 +264,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ return secondFilterTree; } - readonly string[] goodsBrand = new string[] { "条类", "分割品", "副产品", "冻品" }; + readonly string[] goodsBrand = new string[] { "条类", "分割品", "副产品", "冻品", "熟食" }; protected override DQueryDom GetQueryDom() { From fabf0139db37f8fe1882e1bc3ac13f955c5b24fd Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Mon, 12 Nov 2018 20:44:43 +0800 Subject: [PATCH 08/18] . --- .../Reports/SaleSummaryReport_/SaleSummaryReport.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs index 8d448c4..6912094 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -264,7 +264,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ return secondFilterTree; } - readonly string[] goodsBrand = new string[] { "条类", "分割品", "副产品", "冻品", "熟食" }; + readonly string[] goodsBrand = new string[] { "条类", "分割品", "副产品", "冻品" }; protected override DQueryDom GetQueryDom() { @@ -298,8 +298,12 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), item + "|重量")); } - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 2), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "上周日均重量")); - query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Type", 1), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), "当日重量合计")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 2), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 1), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), "当日重量合计")); + + + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "熟食|上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), "熟食|重量")); var idx = 0; foreach (var col in query.Columns) From f91c8066c7f3cc69a3e0c191af411734424739ee Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Tue, 13 Nov 2018 08:44:31 +0800 Subject: [PATCH 09/18] . --- .../Reports/SaleSummaryReport_/SaleSummaryReport.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs index 6912094..53492c1 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -1,5 +1,6 @@ using BWP.B3Frameworks; using BWP.B3Frameworks.BO; +using BWP.B3Frameworks.BO.MoneyTemplate; using BWP.B3Frameworks.BO.NamedValueTemplate; using BWP.B3Sale.BO; using BWP.Web.Utils; @@ -290,19 +291,19 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ { if (item == "条类") { - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), item + "|上周日均头数")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), item + "|上周日均头数")); query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("SecondNumber"), DQExpression.NULL)).ECastType?>(), item + "|头数")); } - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), item + "|上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), item + "|上周日均重量")); query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), item + "|重量")); } - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 2), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 2), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "上周日均重量")); query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 1), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), "当日重量合计")); - query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "熟食|上周日均重量")); + query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType?>(), "熟食|上周日均重量")); query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType?>(), "熟食|重量")); var idx = 0; From d42e97dc442bdd59b033e10e85b4bfa4e04296cc Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Tue, 13 Nov 2018 20:14:28 +0800 Subject: [PATCH 10/18] . --- .../SaleSummaryReport_/SaleSummaryReport.cs | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs index 53492c1..2690981 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -133,27 +133,28 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ } } - List> FirstDepts + List> FirstDepts { get { if (ViewState["FirstDepts"] == null) ViewState["FirstDepts"] = GetFirstDepts(); - return (List>)ViewState["FirstDepts"]; + return (List>)ViewState["FirstDepts"]; } set { ViewState["FirstDepts"] = value; } } - List> GetFirstDepts() + List> GetFirstDepts() { var dept = SaleDepartmentInfo; var query = new DQueryDom(new JoinAlias(typeof(Department))); query.Columns.Add(DQSelectColumn.Field("ID")); query.Columns.Add(DQSelectColumn.Field("Name")); + query.Columns.Add(DQSelectColumn.Field("Depth")); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", dept.Item2 + 1))); query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", dept.Item2), dept.Item1)); query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); - return query.EExecuteList(); + return query.EExecuteList(); } Tuple SaleDepartmentInfo @@ -171,30 +172,31 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ } } - List> SecondDepts + List> SecondDepts { get { if (ViewState["SecondDepts"] == null) ViewState["SecondDepts"] = GetSecondDepts(); - return (List>)ViewState["SecondDepts"]; + return (List>)ViewState["SecondDepts"]; } set { ViewState["SecondDepts"] = value; } } - List> GetSecondDepts() + List> GetSecondDepts() { - var depth = SaleDepartmentInfo.Item2; var selectedItem = firstFilterTree.GetSelecteItem(); if (!selectedItem.Selected || string.IsNullOrEmpty(selectedItem.Value)) - return new List>(); + return new List>(); + var info = selectedItem.Tag as Tuple; var query = new DQueryDom(new JoinAlias(typeof(Department))); query.Columns.Add(DQSelectColumn.Field("ID")); query.Columns.Add(DQSelectColumn.Field("Name")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", depth + 2))); - query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", depth + 1), long.Parse(firstFilterTree.GetSelecteItem().Value))); + query.Columns.Add(DQSelectColumn.Field("Depth")); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", info.Item3 + 1))); + query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", info.Item3), info.Item1)); query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); - return query.EExecuteList(); + return query.EExecuteList(); } static FilterTree firstFilterTree; @@ -210,6 +212,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ foreach (var item in FirstDepts) { var node = new FilterTreeNode(item.Item2, item.Item1.ToString()); + node.Tag = item; firstFilterTree.DataSource.Childs.Add(node); } } @@ -225,7 +228,8 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ { if (!string.IsNullOrEmpty(node.Value)) { - query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), "TreeDeep1ID", long.Parse(node.Value))); + var info = node.Tag as Tuple; + query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), string.Format("TreeDeep{0}ID", info.Item3), info.Item1)); } }; @@ -238,6 +242,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ foreach (var item in SecondDepts) { var node = new FilterTreeNode(item.Item2, item.Item1.ToString()); + node.Tag = item; secondFilterTree.DataSource.Childs.Add(node); } } @@ -258,7 +263,8 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ { if (!string.IsNullOrEmpty(node.Value)) { - query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), "TreeDeep2ID", long.Parse(node.Value))); + var info = node.Tag as Tuple; + query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), string.Format("TreeDeep{0}ID", info.Item3), info.Item1)); } }; @@ -269,6 +275,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ protected override DQueryDom GetQueryDom() { + var saleDepth = SaleDepartmentInfo.Item2; var main = new JoinAlias(typeof(TempClass)); var dept = new JoinAlias("dept", typeof(Department)); var _3Dept = new JoinAlias("_3Dept", typeof(Department)); @@ -277,7 +284,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ var query = new DQueryDom(main); TempClass.Register(query, SelectDate); query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID")); - query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 3), _3Dept, "ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(DQExpression.LogicCase(DQCondition.GreaterThanOrEqual(dept, "Depth", saleDepth + 3), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 3)), DQCondition.EQ(dept, "Depth", saleDepth + 2), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 2)), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 1))), DQExpression.Field(_3Dept, "ID"))); query.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(main, "Customer_ID", customer, "ID")); query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "ID")); From 5201a7758ee9244453f4d6352ad734b38fc4ab33 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Wed, 14 Nov 2018 10:01:13 +0800 Subject: [PATCH 11/18] . --- .../Reports/SaleSummaryReport_/SaleSummaryReport.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs index 2690981..aaea987 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs @@ -292,8 +292,8 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_ query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "Name")); query.Columns.Add(DQSelectColumn.Field("ExtensionsCatalog1_Name", customer, "客户分类")); query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_Name")); - query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_ID")); - query.OrderBy.Expressions.Add(DQOrderByExpression.Create(customer, "ExtensionsCatalog1_ID")); + query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "ID")); + query.OrderBy.Expressions.Add(DQOrderByExpression.Create(_3Dept, "ID")); foreach (var item in goodsBrand) { if (item == "条类") From c11f93de0cc87c9b81b26c3f7b173464ed579aca Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Fri, 23 Nov 2018 16:09:05 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E9=94=80=E5=94=AE=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8=E6=8C=89=E7=85=A7=E9=80=81=E8=B4=A7?= =?UTF-8?q?=E7=BA=BF=E8=B7=AF=E9=A1=BA=E5=BA=8F=E6=8E=92=E5=BA=8F=E3=80=82?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E5=9C=A8=E4=B8=BB=E6=A8=A1=E5=9D=97=EF=BC=8C?= =?UTF-8?q?=E5=BD=B1=E5=93=8D=E5=88=B0=E4=BA=86=E5=85=B6=E4=BB=96=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=EF=BC=8C=E6=8C=AA=E5=88=B0=E5=AE=A2=E6=88=B7=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj | 3 ++ .../Overlays/SaleOutStoreList_Ext.cs | 31 +++++++++++++++++++ B3QingDaoWanFu.Web/PluginClass.cs | 1 + 3 files changed, 35 insertions(+) create mode 100644 B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs diff --git a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj index 5a3616f..3efb91e 100644 --- a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj +++ b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj @@ -190,6 +190,9 @@ ASPXCodeBehind + + ASPXCodeBehind + ASPXCodeBehind diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs new file mode 100644 index 0000000..d60da1a --- /dev/null +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs @@ -0,0 +1,31 @@ +using BWP.B3Sale.BO; +using BWP.Web.Pages.B3Sale.Bills.SaleOutStore_; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BWP.Web.Pages.B3QingDaoWanFu.Overlays +{ + class SaleOutStoreList_Ext : SaleOutStoreList + { + protected override DQueryDom GetQueryDom() + { + var query = base.GetQueryDom(); + if (query.OrderBy.Expressions.Count == 0) + { + var root = query.From.RootSource.Alias; + var lineDetail = new JoinAlias("lineDetail", typeof(DeliverGoodsLine_Detail)); + query.From.AddJoin(JoinType.Left, new DQDmoSource(lineDetail), DQCondition.And(DQCondition.EQ(root, "DeliverGoodsLine_ID", lineDetail, "DeliverGoodsLine_ID"), DQCondition.EQ(root, "Customer_ID", lineDetail, "Customer_ID"))); + + query.OrderBy.Expressions.Add(DQOrderByExpression.Create(root, "SequenceNumber")); + query.OrderBy.Expressions.Add(DQOrderByExpression.Create(lineDetail, "SequenceNumber")); + } + + return query; + } + } +} diff --git a/B3QingDaoWanFu.Web/PluginClass.cs b/B3QingDaoWanFu.Web/PluginClass.cs index c8e86b3..41e0201 100644 --- a/B3QingDaoWanFu.Web/PluginClass.cs +++ b/B3QingDaoWanFu.Web/PluginClass.cs @@ -30,6 +30,7 @@ namespace BWP.B3QingDaoWanFu WpfPageFactory.RegisterPageOverlay(typeof(WeighBillEdit).FullName, typeof(WeightBillEdit_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(WeighBillList).FullName, typeof(WeighBillList_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3ButcherManage.Bills.Pay_.SelectStatPayDialog).FullName, typeof(SelectStatPayDialog_Ext).FullName); + WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3Sale.Bills.SaleOutStore_.SaleOutStoreList).FullName, typeof(SaleOutStoreList_Ext).FullName); GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.StatPayAddRewardWithButcherUseWeight); GlobalFlags.On(B3SaleConsts.Flags.MarketingActivityEnableAdjustPrice); GlobalFlags.On(B3SaleConsts.Flags.SendOutStoreNoAvailableStorage); From 9b9fea78574ba57d670604496df26865572e0e9a Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Mon, 26 Nov 2018 10:50:46 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=8D=95No.141674=20?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=87=AA=E5=8A=A8=E5=90=88=E5=B9=B6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20=E9=A2=84=E6=8A=A5=E5=A6=82=E6=9E=9C=E4=BB=8Eapp?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=EF=BC=8C=E7=9B=B4=E6=8E=A5=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E6=8E=89=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu/B3QingDaoWanFu.csproj | 2 + .../TypeIOCs/SaleForecastBLTypeIoc.cs | 23 +++ B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs | 131 ++++++++++++++++++ B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs | 9 +- 4 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs create mode 100644 B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs diff --git a/B3QingDaoWanFu/B3QingDaoWanFu.csproj b/B3QingDaoWanFu/B3QingDaoWanFu.csproj index bd4bb1f..d6c3359 100644 --- a/B3QingDaoWanFu/B3QingDaoWanFu.csproj +++ b/B3QingDaoWanFu/B3QingDaoWanFu.csproj @@ -177,6 +177,8 @@ + + diff --git a/B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs new file mode 100644 index 0000000..be407d7 --- /dev/null +++ b/B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs @@ -0,0 +1,23 @@ +using BWP.B3Frameworks; +using BWP.B3Sale.BL; +using Forks.EnterpriseServices.BusinessInterfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BWP.B3QingDaoWanFu.TypeIOCs +{ + [TypeIOC(typeof(SaleForecastBL), typeof(SaleForecastBL.BaseBLIOCs.AfterInsert))] + public class SaleForecastBLTypeIoc : SaleForecastBL.BaseBLIOCs.AfterInsert + { + public void Invoke(Forks.EnterpriseServices.BusinessInterfaces.IDmoContext context, B3Sale.BO.SaleForecast dmo) + { + if (dmo.FromAppRpc) + { + var bl = BIFactory.Create(context); + bl.Check(dmo); + } + } + } +} diff --git a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs new file mode 100644 index 0000000..2558ec6 --- /dev/null +++ b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs @@ -0,0 +1,131 @@ +using BWP.B3Frameworks; +using BWP.B3Frameworks.BO.NamedValueTemplate; +using BWP.B3Frameworks.Utils; +using BWP.B3QingDaoWanFu.Utils; +using BWP.B3Sale.BL; +using BWP.B3Sale.BO; +using Forks.EnterpriseServices.BusinessInterfaces; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TSingSoft.WebPluginFramework; + +namespace BWP.B3QingDaoWanFu.TypeIOCs +{ + [TypeIOC(typeof(OrderBL), typeof(OrderBL.BaseBLIOCs.AfterInsert))] + public class SaleOrderAfterInsert : OrderBL.BaseBLIOCs.AfterInsert + { + IOrderBL orderBL = null; + public void Invoke(IDmoContext context, Order dmo) + { + if (new WanFuOnlineConfig().AutoCombineOrder.Value == false) + return; + orderBL = BIFactory.Create(context); + var existInfo = GetExistOrderAndSaleOutStore(context.Session, dmo); + if (existInfo == null) + { + if (dmo.SaleForecast_ID.HasValue) + orderBL.Check(dmo); + return; + } + + var ok = CombineOrder(context.Session, dmo, existInfo.Item1, existInfo.Item2.HasValue); + if (!ok) + return; + + if (existInfo.Item2.HasValue) + CombineSaleOutStore(context.Session, dmo, existInfo.Item2.Value); + + } + + Tuple GetExistOrderAndSaleOutStore(IDmoSession session, Order order) + { + var main = new JoinAlias("mOrder", typeof(Order)); + var saleOut = new JoinAlias(typeof(SaleOutStore)); + var query = new DQueryDom(main); + query.From.AddJoin(JoinType.Left, new DQDmoSource(saleOut), DQCondition.EQ(main, "ID", saleOut, "Order_ID")); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("ID", saleOut)); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("ID", order.ID), DQCondition.EQ("Customer_ID", order.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(order.LoadTime.Value)), DQCondition.InEQ("BillState", 单据状态.已作废))); + query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(saleOut, "BillState")), DQCondition.EQ(saleOut, "BillState", 单据状态.未审核))); + return query.EExecuteScalar(session); + } + + bool CombineOrder(IDmoSession session, Order order, long id, bool existSaleOut) + { + var comb = orderBL.Load(id); + if (comb.Details.Any(x => order.Details.Any(y => x.SaleGoods_ID == y.SaleGoods_ID && x.Price != y.Price))) + return false; + foreach (var detail in order.Details) + { + var first = comb.Details.FirstOrDefault(x => x.SaleGoods_ID == detail.SaleGoods_ID); + if (first == null) + { + var nd = new Order_Detail(); + DmoUtil.CopyDmoFields(detail, nd, "ID", "Order_ID"); + comb.Details.Add(nd); + } + else + { + first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0); + first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; + first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value; + } + if (existSaleOut) + { + first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; + first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum).Value + (detail.Number ?? 0).Value; + first.AlreadyOutStoreSecondNumber = (first.AlreadyOutStoreSecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; + } + } + if (existSaleOut) + { + comb.AlreadyOutStoreUnitNum = comb.Details.Sum(x => (x.AlreadyOutStoreUnitNum ?? 0).Value); + comb.AlreadyOutStoreNum = comb.Details.Sum(x => (x.AlreadyOutStoreNum ?? 0).Value); + comb.AlreadyOutStoreSecondNumber = comb.Details.Sum(x => (x.AlreadyOutStoreSecondNumber ?? 0).Value); + } + orderBL.Update(comb); + if (comb.BillState == 单据状态.未审核 && order.SaleForecast_ID.HasValue) + orderBL.Check(comb); + order.OldOrderID = id; + orderBL.Update(order); + orderBL.Nullify(order); + order.ID = id; + return true; + } + + void CombineSaleOutStore(IDmoSession session, Order order, long id) + { + var bl = BIFactory.Create(session); + var saleOut = bl.Load(id); + foreach (var orderDetail in order.Details) + { + var first = saleOut.Details.FirstOrDefault(x => x.SaleGoods_ID == orderDetail.SaleGoods_ID); + if (first == null) + { + var outStoreDetail = new SaleOutStore_Detail(); + DmoUtil.CopyDmoFields(orderDetail, outStoreDetail); + outStoreDetail.Order_DetailID = orderDetail.ID; + outStoreDetail.Order_Detail_Number = orderDetail.Number; + outStoreDetail.Order_Detail_SecondNumber = orderDetail.SecondNumber; + outStoreDetail.Order_Detail_UnitNum = orderDetail.UnitNum; + outStoreDetail.HiddenUnitNum = orderDetail.UnitNum; + outStoreDetail.HiddenNumber = orderDetail.Number; + outStoreDetail.HiddenSecondNumber = orderDetail.SecondNumber; + outStoreDetail.IsOutsourcing = orderDetail.IsOutsourcing; + } + else + { + first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0); + first.UnitNum = (first.UnitNum ?? 0).Value + (orderDetail.UnitNum ?? 0).Value; + first.Number = (first.Number ?? 0).Value + (orderDetail.Number ?? 0).Value; + } + } + bl.Update(saleOut); + } + } +} diff --git a/B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs b/B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs index ea241b0..3269fd5 100644 --- a/B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs +++ b/B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs @@ -74,6 +74,13 @@ namespace BWP.B3QingDaoWanFu.Utils public IntConfigRef DomainUserForTrustPay { get { return _domainUserForTrustPay; } set { _domainUserForTrustPay = value; } - } + } + + private BoolConfigRef _mAutoCombineOrder = new BoolConfigRef(false); + [LogicName("自动合并订单")] + [ConfigurationItemGroup("青岛万福")] + [ConfigurationItemDescription("新建订单时(包括审核销售预报生成和手机app生成的)自动合并,如果合并到的订单有已审核出库单就不合并,价格不同也不合并)")] + [DomainConfigurationItem] + public BoolConfigRef AutoCombineOrder { get { return _mAutoCombineOrder; } set { _mAutoCombineOrder = value; } } } } From 51c942719114892c605b1516063078ef652e4727 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Mon, 26 Nov 2018 11:19:26 +0800 Subject: [PATCH 14/18] . --- B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs index 2558ec6..73a0463 100644 --- a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs +++ b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs @@ -50,7 +50,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs query.From.AddJoin(JoinType.Left, new DQDmoSource(saleOut), DQCondition.EQ(main, "ID", saleOut, "Order_ID")); query.Columns.Add(DQSelectColumn.Field("ID")); query.Columns.Add(DQSelectColumn.Field("ID", saleOut)); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("ID", order.ID), DQCondition.EQ("Customer_ID", order.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(order.LoadTime.Value)), DQCondition.InEQ("BillState", 单据状态.已作废))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.InEQ("ID", order.ID), DQCondition.EQ("Customer_ID", order.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(order.LoadTime.Value.Date)), DQCondition.InEQ("BillState", 单据状态.已作废))); query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(saleOut, "BillState")), DQCondition.EQ(saleOut, "BillState", 单据状态.未审核))); return query.EExecuteScalar(session); } From 4a4ca8c9b258d779eb447853becf128831a01287 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Tue, 27 Nov 2018 08:10:23 +0800 Subject: [PATCH 15/18] . --- B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs index 73a0463..9c57244 100644 --- a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs +++ b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs @@ -88,16 +88,26 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs comb.AlreadyOutStoreNum = comb.Details.Sum(x => (x.AlreadyOutStoreNum ?? 0).Value); comb.AlreadyOutStoreSecondNumber = comb.Details.Sum(x => (x.AlreadyOutStoreSecondNumber ?? 0).Value); } + + order.OldOrderID = id; + UpdateOldOrderID(session, order); + SaleForecastBL.CreateOrderContext = null; + orderBL.Nullify(order); orderBL.Update(comb); if (comb.BillState == 单据状态.未审核 && order.SaleForecast_ID.HasValue) orderBL.Check(comb); - order.OldOrderID = id; - orderBL.Update(order); - orderBL.Nullify(order); order.ID = id; return true; } + void UpdateOldOrderID(IDmoSession session, Order order) + { + var update = new DQUpdateDom(typeof(Order)); + update.Columns.Add(new DQUpdateColumn("OldOrderID", order.OldOrderID)); + update.Where.Conditions.Add(DQCondition.EQ("ID", order.ID)); + session.ExecuteNonQuery(update); + } + void CombineSaleOutStore(IDmoSession session, Order order, long id) { var bl = BIFactory.Create(session); From b3d267c15fa16578c2e306c8b7ebae1b4b399fb9 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Wed, 28 Nov 2018 08:42:31 +0800 Subject: [PATCH 16/18] . --- B3QingDaoWanFu/B3QingDaoWanFu.csproj | 1 - .../TypeIOCs/SaleForecastBLTypeIoc.cs | 23 ------------------- B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs | 12 ++++++---- 3 files changed, 7 insertions(+), 29 deletions(-) delete mode 100644 B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs diff --git a/B3QingDaoWanFu/B3QingDaoWanFu.csproj b/B3QingDaoWanFu/B3QingDaoWanFu.csproj index d6c3359..df8f8a4 100644 --- a/B3QingDaoWanFu/B3QingDaoWanFu.csproj +++ b/B3QingDaoWanFu/B3QingDaoWanFu.csproj @@ -177,7 +177,6 @@ - diff --git a/B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs deleted file mode 100644 index be407d7..0000000 --- a/B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs +++ /dev/null @@ -1,23 +0,0 @@ -using BWP.B3Frameworks; -using BWP.B3Sale.BL; -using Forks.EnterpriseServices.BusinessInterfaces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BWP.B3QingDaoWanFu.TypeIOCs -{ - [TypeIOC(typeof(SaleForecastBL), typeof(SaleForecastBL.BaseBLIOCs.AfterInsert))] - public class SaleForecastBLTypeIoc : SaleForecastBL.BaseBLIOCs.AfterInsert - { - public void Invoke(Forks.EnterpriseServices.BusinessInterfaces.IDmoContext context, B3Sale.BO.SaleForecast dmo) - { - if (dmo.FromAppRpc) - { - var bl = BIFactory.Create(context); - bl.Check(dmo); - } - } - } -} diff --git a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs index 9c57244..ccd4e20 100644 --- a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs +++ b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs @@ -24,6 +24,8 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs { if (new WanFuOnlineConfig().AutoCombineOrder.Value == false) return; + if (dmo.LoadTime == null) + throw new Exception("订单发货时间为空"); orderBL = BIFactory.Create(context); var existInfo = GetExistOrderAndSaleOutStore(context.Session, dmo); if (existInfo == null) @@ -36,7 +38,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs var ok = CombineOrder(context.Session, dmo, existInfo.Item1, existInfo.Item2.HasValue); if (!ok) return; - + if (existInfo.Item2.HasValue) CombineSaleOutStore(context.Session, dmo, existInfo.Item2.Value); @@ -65,9 +67,9 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs var first = comb.Details.FirstOrDefault(x => x.SaleGoods_ID == detail.SaleGoods_ID); if (first == null) { - var nd = new Order_Detail(); - DmoUtil.CopyDmoFields(detail, nd, "ID", "Order_ID"); - comb.Details.Add(nd); + first = new Order_Detail(); + DmoUtil.CopyDmoFields(detail, first, "ID", "Order_ID"); + comb.Details.Add(first); } else { @@ -130,7 +132,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs } else { - first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0); + first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0).Value; first.UnitNum = (first.UnitNum ?? 0).Value + (orderDetail.UnitNum ?? 0).Value; first.Number = (first.Number ?? 0).Value + (orderDetail.Number ?? 0).Value; } From d050d80c29c4c550d12da5e47338c03e5557759f Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Mon, 3 Dec 2018 09:51:20 +0800 Subject: [PATCH 17/18] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8A=A0=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=90=88=E5=B9=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj | 3 + .../B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs | 183 ++++++++++++++++++ B3QingDaoWanFu.Web/PluginClass.cs | 1 + B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs | 14 +- 4 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs diff --git a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj index 3efb91e..80f4b76 100644 --- a/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj +++ b/B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj @@ -187,6 +187,9 @@ ASPXCodeBehind + + ASPXCodeBehind + ASPXCodeBehind diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs new file mode 100644 index 0000000..f7f8342 --- /dev/null +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs @@ -0,0 +1,183 @@ +using BWP.B3Frameworks.BO.NamedValueTemplate; +using BWP.B3Frameworks.Utils; +using BWP.B3Sale.BL; +using BWP.B3Sale.BO; +using BWP.Web.Actions; +using BWP.Web.Pages.B3Sale.Bills.Order_; +using Forks.EnterpriseServices.BusinessInterfaces; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.SqlDoms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TSingSoft.WebControls2; +using TSingSoft.WebPluginFramework; + +namespace BWP.Web.Pages.B3QingDaoWanFu.Overlays +{ + class OrderEdit_Ext : OrderEdit + { + protected override void AddActions(TSingSoft.WebControls2.ButtonGroup buttonGroup) + { + base.AddActions(buttonGroup); + if (!IsNew) + buttonGroup.Actions.Add(new SimpleServerAction("订单合并", () => CanSave, CombineOrder) + { + OnClientClick = "if(typeof(CheckDmoChanged) == 'function' && CheckDmoChanged()){ alert('您所要合并的单据还没有保存,请先保存单据后再操作'); return false;}" + }); + } + + void CombineOrder() + { + if (Dmo.LoadTime == null) + throw new Exception("订单发货时间不能为空"); + if (Dmo.Customer_ID == null) + throw new Exception("购货客户不能为空"); + using (var context = new TransactionContext()) + { + EnsuState(context.Session); + var existInfo = GetExistOrderAndSaleOutStore(context.Session); + if (existInfo == null) + { + AspUtil.Alert(this, "无订单可合并!"); + } + else + { + var ok = CombineOrder(context.Session, existInfo.Item1, existInfo.Item2.HasValue); + if (!ok) + return; + + if (existInfo.Item2.HasValue) + CombineSaleOutStore(context.Session, existInfo.Item2.Value); + context.Commit(); + NDmoSave(existInfo.Item1); + } + } + } + + void EnsuState(IDmoSession session) + { + var rowVersion = InnerBLUtil.GetDmoPropertyByID(session, typeof(Order), "RowVersion", Dmo.ID); + if (rowVersion != Dmo.RowVersion) + throw new Exception("当前单据已被更改,请重新打开"); + } + + Tuple GetExistOrderAndSaleOutStore(IDmoSession session) + { + var main = new JoinAlias("mOrder", typeof(Order)); + var saleOut = new JoinAlias(typeof(SaleOutStore)); + var query = new DQueryDom(main); + query.From.AddJoin(JoinType.Left, new DQDmoSource(saleOut), DQCondition.EQ(main, "ID", saleOut, "Order_ID")); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("ID", saleOut)); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Customer_ID", Dmo.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(Dmo.LoadTime.Value.Date)), DQCondition.InEQ("BillState", 单据状态.已作废))); + query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(saleOut, "BillState")), DQCondition.EQ(saleOut, "BillState", 单据状态.未审核))); + if (!IsNew) + query.Where.Conditions.Add(DQCondition.InEQ("ID", Dmo.ID)); + return query.EExecuteScalar(session); + } + + bool CombineOrder(IDmoSession session, long id, bool existSaleOut) + { + var bl = BIFactory.Create(session); + var comb = bl.Load(id); + if (comb.Details.Any(x => Dmo.Details.Any(y => x.SaleGoods_ID == y.SaleGoods_ID && x.Price != y.Price))) + return false; + foreach (var detail in Dmo.Details) + { + var first = comb.Details.FirstOrDefault(x => x.SaleGoods_ID == detail.SaleGoods_ID); + if (first == null) + { + first = new Order_Detail(); + DmoUtil.CopyDmoFields(detail, first, "ID", "Order_ID"); + comb.Details.Add(first); + } + else + { + first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; + first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; + first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value; + first.Money = (first.Money ?? 0).Value + (detail.Money ?? 0).Value; + } + if (existSaleOut) + { + first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; + first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum ?? 0).Value + (detail.Number ?? 0).Value; + first.AlreadyOutStoreSecondNumber = (first.AlreadyOutStoreSecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; + } + } + if (existSaleOut) + { + comb.AlreadyOutStoreUnitNum = comb.Details.Sum(x => (x.AlreadyOutStoreUnitNum ?? 0).Value); + comb.AlreadyOutStoreNum = comb.Details.Sum(x => (x.AlreadyOutStoreNum ?? 0).Value); + comb.AlreadyOutStoreSecondNumber = comb.Details.Sum(x => (x.AlreadyOutStoreSecondNumber ?? 0).Value); + } + + Dmo.OldOrderID = id; + UpdateOldOrderID(session); + SaleForecastBL.CreateOrderContext = null; + bl.Nullify(Dmo); + bl.Update(comb); + return true; + } + + void UpdateOldOrderID(IDmoSession session) + { + var update = new DQUpdateDom(typeof(Order)); + update.Columns.Add(new DQUpdateColumn("OldOrderID", Dmo.OldOrderID)); + update.Where.Conditions.Add(DQCondition.EQ("ID", Dmo.ID)); + session.ExecuteNonQuery(update); + } + + void CombineSaleOutStore(IDmoSession session, long id) + { + var bl = BIFactory.Create(session); + var saleOut = bl.Load(id); + foreach (var orderDetail in Dmo.Details) + { + var first = saleOut.Details.FirstOrDefault(x => x.SaleGoods_ID == orderDetail.SaleGoods_ID); + if (first == null) + { + first = new SaleOutStore_Detail(); + DmoUtil.CopyDmoFields(orderDetail, first, "ID"); + first.Order_DetailID = orderDetail.ID; + first.Order_Detail_Number = orderDetail.Number; + first.Order_Detail_SecondNumber = orderDetail.SecondNumber; + first.Order_Detail_UnitNum = orderDetail.UnitNum; + first.HiddenUnitNum = orderDetail.UnitNum; + first.HiddenNumber = orderDetail.Number; + first.HiddenSecondNumber = orderDetail.SecondNumber; + first.IsOutsourcing = orderDetail.IsOutsourcing; + } + else + { + first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0).Value; + first.UnitNum = (first.UnitNum ?? 0).Value + (orderDetail.UnitNum ?? 0).Value; + first.Number = (first.Number ?? 0).Value + (orderDetail.Number ?? 0).Value; + first.Money = (first.Money ?? 0).Value + (orderDetail.Money ?? 0).Value; + } + } + bl.Update(saleOut); + } + + void NDmoSave(long id) + { + var blMessage = BIFactory.GetLastMessage(); + var url = Request.RawUrl; + if (IsNew) + { + url = AspUtil.RemoveUrlParam(url, "ReferToID"); + url = AspUtil.AddParamToUrl(url, "ID", id.ToString()); + } + var message = "合并成功!"; + if (!string.IsNullOrEmpty(blMessage)) + { + message += "\r\n" + blMessage; + } + AspUtil.RedirectAndAlert(this, url, message); + } + + } +} diff --git a/B3QingDaoWanFu.Web/PluginClass.cs b/B3QingDaoWanFu.Web/PluginClass.cs index 41e0201..b4578ba 100644 --- a/B3QingDaoWanFu.Web/PluginClass.cs +++ b/B3QingDaoWanFu.Web/PluginClass.cs @@ -31,6 +31,7 @@ namespace BWP.B3QingDaoWanFu WpfPageFactory.RegisterPageOverlay(typeof(WeighBillList).FullName, typeof(WeighBillList_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3ButcherManage.Bills.Pay_.SelectStatPayDialog).FullName, typeof(SelectStatPayDialog_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3Sale.Bills.SaleOutStore_.SaleOutStoreList).FullName, typeof(SaleOutStoreList_Ext).FullName); + WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3Sale.Bills.Order_.OrderEdit).FullName, typeof(OrderEdit_Ext).FullName); GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.StatPayAddRewardWithButcherUseWeight); GlobalFlags.On(B3SaleConsts.Flags.MarketingActivityEnableAdjustPrice); GlobalFlags.On(B3SaleConsts.Flags.SendOutStoreNoAvailableStorage); diff --git a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs index ccd4e20..92895a8 100644 --- a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs +++ b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs @@ -22,6 +22,8 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs IOrderBL orderBL = null; public void Invoke(IDmoContext context, Order dmo) { + if (dmo.SaleForecast_ID == null) + return; if (new WanFuOnlineConfig().AutoCombineOrder.Value == false) return; if (dmo.LoadTime == null) @@ -30,8 +32,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs var existInfo = GetExistOrderAndSaleOutStore(context.Session, dmo); if (existInfo == null) { - if (dmo.SaleForecast_ID.HasValue) - orderBL.Check(dmo); + orderBL.Check(dmo); return; } @@ -73,14 +74,15 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs } else { - first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0); + first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value; + first.Money = (first.Money ?? 0).Value + (detail.Money ?? 0).Value; } if (existSaleOut) { first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value; - first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum).Value + (detail.Number ?? 0).Value; + first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum ?? 0).Value + (detail.Number ?? 0).Value; first.AlreadyOutStoreSecondNumber = (first.AlreadyOutStoreSecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value; } } @@ -96,7 +98,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs SaleForecastBL.CreateOrderContext = null; orderBL.Nullify(order); orderBL.Update(comb); - if (comb.BillState == 单据状态.未审核 && order.SaleForecast_ID.HasValue) + if (comb.BillState == 单据状态.未审核) orderBL.Check(comb); order.ID = id; return true; @@ -120,7 +122,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs if (first == null) { var outStoreDetail = new SaleOutStore_Detail(); - DmoUtil.CopyDmoFields(orderDetail, outStoreDetail); + DmoUtil.CopyDmoFields(orderDetail, outStoreDetail, "ID"); outStoreDetail.Order_DetailID = orderDetail.ID; outStoreDetail.Order_Detail_Number = orderDetail.Number; outStoreDetail.Order_Detail_SecondNumber = orderDetail.SecondNumber; From d58948949d2a49e94304e4549c3762ecf515dbe3 Mon Sep 17 00:00:00 2001 From: yibo <361071264@qq.com> Date: Tue, 4 Dec 2018 20:35:54 +0800 Subject: [PATCH 18/18] . --- .../Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs | 1 + .../Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs | 7 ++++--- B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs index f7f8342..1242d42 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs @@ -150,6 +150,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Overlays first.HiddenNumber = orderDetail.Number; first.HiddenSecondNumber = orderDetail.SecondNumber; first.IsOutsourcing = orderDetail.IsOutsourcing; + saleOut.Details.Add(first); } else { diff --git a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs index d60da1a..5a0b0cf 100644 --- a/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs +++ b/B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs @@ -15,15 +15,16 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Overlays protected override DQueryDom GetQueryDom() { var query = base.GetQueryDom(); - if (query.OrderBy.Expressions.Count == 0) - { + query.OrderBy.Expressions.Clear(); + //if (query.OrderBy.Expressions.Count == 0) + //{ var root = query.From.RootSource.Alias; var lineDetail = new JoinAlias("lineDetail", typeof(DeliverGoodsLine_Detail)); query.From.AddJoin(JoinType.Left, new DQDmoSource(lineDetail), DQCondition.And(DQCondition.EQ(root, "DeliverGoodsLine_ID", lineDetail, "DeliverGoodsLine_ID"), DQCondition.EQ(root, "Customer_ID", lineDetail, "Customer_ID"))); query.OrderBy.Expressions.Add(DQOrderByExpression.Create(root, "SequenceNumber")); query.OrderBy.Expressions.Add(DQOrderByExpression.Create(lineDetail, "SequenceNumber")); - } + //} return query; } diff --git a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs index 92895a8..e8e3d6c 100644 --- a/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs +++ b/B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs @@ -131,6 +131,7 @@ namespace BWP.B3QingDaoWanFu.TypeIOCs outStoreDetail.HiddenNumber = orderDetail.Number; outStoreDetail.HiddenSecondNumber = orderDetail.SecondNumber; outStoreDetail.IsOutsourcing = orderDetail.IsOutsourcing; + saleOut.Details.Add(outStoreDetail); } else {