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] =?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; } } } }