Browse Source

通过订单计算需要宰杀量。

master
yibo 7 years ago
parent
commit
da71d91bad
2 changed files with 78 additions and 3 deletions
  1. +2
    -3
      B3ButcherManageToSale/B3ButcherManageToSale.csproj
  2. +76
    -0
      B3ButcherManageToSale/TypeIOCs/ForecastButcherInfo.cs

+ 2
- 3
B3ButcherManageToSale/B3ButcherManageToSale.csproj View File

@ -76,10 +76,9 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TypeIOCs\ForecastButcherInfo.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="TypeIOCs\" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.


+ 76
- 0
B3ButcherManageToSale/TypeIOCs/ForecastButcherInfo.cs View File

@ -0,0 +1,76 @@
using BWP.B3ButcherManage.BL;
using BWP.B3ButcherManage.BO;
using BWP.B3Frameworks;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Frameworks.Utils;
using BWP.B3Sale.BO;
using Forks.EnterpriseServices.BusinessInterfaces;
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 TSingSoft.WebPluginFramework;
namespace BWP.B3ButcherManageToSale.TypeIOCs
{
[TypeIOC(typeof(ButcherForecastBL), typeof(ButcherForecastBL.IForecastButcher))]
class ForecastButcherInfo : ButcherForecastBL.IForecastButcher
{
public List<ButcherForecast_Detail> Invoke(IDmoContext context, ButcherForecast dmo)
{
var orderInfo = GetSaleOrderInfo(context.Session, dmo);
var avgWeightList = GetAllProductAvgWeightSet(context.Session);
var result = new List<ButcherForecast_Detail>();
foreach (var item in orderInfo)
{
var first = avgWeightList.FirstOrDefault(x => x.Item2 == item.Item1);
var detail = new ButcherForecast_Detail();
detail.Goods_ID = item.Item1;
detail.NeedNumber = item.Item2;
if (first != null)
{
detail.ProductAvgWeightSet_ID = first.Item2;
detail.AvgWeight = first.Item3;
if (detail.AvgWeight != 0)
{
detail.ForecastNumber = Convert.ToInt32(Math.Ceiling(detail.NeedNumber.Value.Value / detail.AvgWeight.Value));
detail.UpdateNumber = detail.ForecastNumber;
}
}
DmoUtil.RefreshDependency(detail, "ProductAvgWeightSet_ID", "Goods_ID");
result.Add(detail);
}
return result;
}
List<Tuple<long, Money<decimal>>> GetSaleOrderInfo(IDmoSession session, ButcherForecast dmo)
{
var main = new JoinAlias("_main", typeof(Order));
var detail = new JoinAlias(typeof(Order_Detail));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "Order_ID"));
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail));
query.Columns.Add(DQSelectColumn.Sum(detail, "Number"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("AccountingUnit_ID", dmo.AccountingUnit_ID), DQCondition.EQ(DQExpression.Snippet("cast(_main.LoadTime as date)"), DQExpression.Value(dmo.SendDate)), DQCondition.GreaterThanOrEqual("BillState", .), DQCondition.IsNotNull(DQExpression.Field(detail, "Number"))));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "SaleGoods_ID"));
return query.EExecuteList<long, Money<decimal>>(session);
}
List<Tuple<long, long, Money<decimal>>> GetAllProductAvgWeightSet(IDmoSession session)
{
var main = new JoinAlias(typeof(ProductAvgWeightSet));
var detail = new JoinAlias(typeof(ProductAvgWeightSet_Detail));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ProductAvgWeightSet_ID"));
query.Columns.Add(DQSelectColumn.Field("ProductAvgWeightSet_ID", detail));
query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail));
query.Columns.Add(DQSelectColumn.Field("AvgWeight", detail));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Stopped", false), DQCondition.EQ("Domain_ID", DomainContext.Current.ID)));
return query.EExecuteList<long, long, Money<decimal>>(session);
}
}
}

Loading…
Cancel
Save