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