Browse Source

需求单No.141674 订单自动合并逻辑 预报如果从app创建,直接审核掉。

master^2
yibo 7 years ago
parent
commit
9b9fea7857
4 changed files with 164 additions and 1 deletions
  1. +2
    -0
      B3QingDaoWanFu/B3QingDaoWanFu.csproj
  2. +23
    -0
      B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs
  3. +131
    -0
      B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs
  4. +8
    -1
      B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs

+ 2
- 0
B3QingDaoWanFu/B3QingDaoWanFu.csproj View File

@ -177,6 +177,8 @@
<Compile Include="Tasks\SyncSaleOutStoreInfoToMES.cs" />
<Compile Include="TypeIOCs\GoodsBLTypeIoc.cs" />
<Compile Include="TypeIOCs\PayBLTypeIoc.cs" />
<Compile Include="TypeIOCs\SaleForecastBLTypeIoc.cs" />
<Compile Include="TypeIOCs\SaleOrderBLTypeIoc.cs" />
<Compile Include="TypeIOCs\SaleOutStoreBLTypeIoc.cs" />
<Compile Include="TypeIOCs\ScanInfoTypeIOC.cs" />
<Compile Include="TypeIOCs\StatPayBLTypeIoc.cs" />


+ 23
- 0
B3QingDaoWanFu/TypeIOCs/SaleForecastBLTypeIoc.cs View File

@ -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<ISaleForecastBL>(context);
bl.Check(dmo);
}
}
}
}

+ 131
- 0
B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs View File

@ -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<IOrderBL>(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<long, long?> 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<long, long?>(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<ISaleOutStoreBL>(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);
}
}
}

+ 8
- 1
B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs View File

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

Loading…
Cancel
Save