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