| @ -0,0 +1,175 @@ | |||||
| using BWP.B3UnitedInfos.BO; | |||||
| using Forks.EnterpriseServices.DataForm; | |||||
| using Forks.EnterpriseServices.DomainObjects2.DQuery; | |||||
| using Forks.Utils; | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using TSingSoft.WebPluginFramework; | |||||
| using Forks.Utils.Collections; | |||||
| using TSingSoft.WebControls2; | |||||
| using BWP.Web.WebControls; | |||||
| using BWP.Web.Layout; | |||||
| using Forks.EnterpriseServices.DomainObjects2; | |||||
| using BWP.B3Frameworks.Utils; | |||||
| using BWP.B3UnitedInfos; | |||||
| using BWP.Web.Utils; | |||||
| using BWP.B3CowButcherManage.BO; | |||||
| using Forks.EnterpriseServices.SqlDoms; | |||||
| using System.Web.UI; | |||||
| namespace BWP.Web.Pages.B3_QiLianMuGe.Dialogs | |||||
| { | |||||
| class QueryBarCode : DmoMultiSelectDialog<StockTakeCEUploadBarCode, BWP.B3CowButcherManage.BO.Goods> | |||||
| { | |||||
| protected override void SetResultFromDFDataRow(BWP.B3CowButcherManage.BO.Goods dmo, DFDataRow row) | |||||
| { | |||||
| //dmo.Goods_ID = (long)row["ID"]; | |||||
| //dmo.Number = (Money<decimal>?)row["数量"]; | |||||
| //dmo.SecondNumber = (Money<decimal>?)row["辅数量"]; | |||||
| //dmo.BrandItem_ID = (long?)row["品牌项"]; | |||||
| //if (dmo.BrandItem_ID != null) | |||||
| // dmo.BrandItem_Name = WebBLUtil.GetDmoPropertyByID<string>(typeof(BrandItem), "Name", dmo.BrandItem_ID.Value); | |||||
| } | |||||
| protected override void InitForm(System.Web.UI.HtmlControls.HtmlForm form) | |||||
| { | |||||
| base.InitForm(form); | |||||
| //form.Controls.Add(new GoodsEditGridScriptManager(base.queryGrid, "数量", "辅数量", "UnitConvertDirection", "MainUnitRatio", "SecondUnitRatio")); | |||||
| } | |||||
| protected override void CreateQuery(VLayoutPanel vPanel) | |||||
| { | |||||
| var layoutManager = new LayoutManager("", mDFInfo, mQueryContainer); | |||||
| //layoutManager.Add("GoodsPropertyCatalog_ID"); | |||||
| //layoutManager["GoodsPropertyCatalog_ID"].ExtDmoType = typeof(GoodsProperty); | |||||
| layoutManager.Add("ScanTime", new SimpleLabel("扫描时间"), QueryCreator.TimeRange(mDFInfo.Fields["ScanTime"],mQueryContainer, "MinScanTime", "MaxScanTime")); | |||||
| layoutManager.Add("UploadTime", new SimpleLabel("上传时间"), QueryCreator.TimeRange(mDFInfo.Fields["UploadTime"], mQueryContainer, "MinUploadTime", "MaxUploadTime")); | |||||
| var config = new AutoLayoutConfig(); | |||||
| config.Add("BarCode"); | |||||
| config.Add("ScanTime"); | |||||
| config.Add("UploadTime"); | |||||
| layoutManager.Config = config; | |||||
| vPanel.Add(layoutManager.CreateLayout()); | |||||
| base.CreateQuery(vPanel); | |||||
| } | |||||
| protected override void AddSelectButtons(Control parent) | |||||
| { | |||||
| } | |||||
| protected override void CreateQueryGridColumns(DFBrowseGrid grid) | |||||
| { | |||||
| grid.Columns.Add(new DFBrowseGridColumn("BarCode") { HeaderText = "条码"}); | |||||
| grid.Columns.Add(new DFBrowseGridColumn("goodsName") { HeaderText = "存货名称"}); | |||||
| grid.Columns.Add(new DFBrowseGridColumn("MainUnit") { HeaderText = "主单位"}); | |||||
| grid.Columns.Add(new DFBrowseGridColumn("PWeight") { HeaderText = "主数量"}); | |||||
| grid.Columns.Add(new DFBrowseGridColumn("SecondUnit") { HeaderText = "辅单位"}); | |||||
| grid.Columns.Add(new DFBrowseGridColumn("Num") { HeaderText = "辅数量"}); | |||||
| grid.Columns.Add(new DFBrowseGridColumn("ScanTime") { HeaderText = "扫描时间" }); | |||||
| grid.Columns.Add(new DFBrowseGridColumn("UploadTime") { HeaderText = "上传时间" }); | |||||
| } | |||||
| protected override Forks.EnterpriseServices.DomainObjects2.DQuery.DQueryDom GetQueryDom() | |||||
| { | |||||
| var ceBarCode = new JoinAlias("_s",typeof(StockTakeCEUploadBarCode)); | |||||
| var barCode = new JoinAlias("_l",typeof(BarCodeProductionInfo)); | |||||
| var rightBarCode = new JoinAlias("_r",typeof(BarCodeProductionInfo)); | |||||
| var goods = new JoinAlias("_g",typeof(BWP.B3CowButcherManage.BO.Goods)); | |||||
| var query = new DQueryDom(ceBarCode); | |||||
| query.From.AddJoin(JoinType.Inner, new DQDmoSource(barCode),DQCondition.And(DQCondition.EQ(barCode,"BarType",3),DQCondition.EQ(ceBarCode, "BarCode", barCode, "BarCode"))); | |||||
| query.From.AddJoin(JoinType.Left, new DQDmoSource(goods),DQCondition.EQ(barCode, "Goods_ID", goods, "ID")); | |||||
| query.From.AddJoin(JoinType.Left, new DQDmoSource(rightBarCode), DQCondition.EQ(barCode, "ID", rightBarCode, "PackageID")); | |||||
| query.Columns.Add(DQSelectColumn.Field("BarCode", ceBarCode)); | |||||
| query.Columns.Add(DQSelectColumn.Field("ScanTime", ceBarCode)); | |||||
| query.Columns.Add(DQSelectColumn.Field("UploadTime", ceBarCode)); | |||||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(goods, "Name"), "goodsName")); | |||||
| query.Columns.Add(DQSelectColumn.Field("MainUnit", goods)); | |||||
| query.Columns.Add(DQSelectColumn.Field("SecondUnit", goods)); | |||||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.LogicCase(DQCondition.IsNull(DQExpression.Field(goods, "PackageWeight")),DQExpression.Sum(DQExpression.Field(rightBarCode,"Weight")), DQExpression.Field(goods, "PackageWeight")), "PWeight")); | |||||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.Count(DQExpression.Field(rightBarCode,"ID")), "Num")); | |||||
| if (!string.IsNullOrEmpty(Request.QueryString["Store_ID"])) | |||||
| { | |||||
| query.Where.Conditions.Add(DQCondition.Like(barCode, "Store_ID", Request.QueryString["Store_ID"])); | |||||
| } | |||||
| var txtbarCode = mQueryContainer.GetControl<DFTextBox>("BarCode"); | |||||
| if (!txtbarCode.IsEmpty) | |||||
| { | |||||
| query.Where.Conditions.Add(DQCondition.Like(ceBarCode,"BarCode",txtbarCode.Text)); | |||||
| } | |||||
| var minScanTime = mQueryContainer.GetControl<DFDateTimeInput>("MinScanTime"); | |||||
| var maxScanTime = mQueryContainer.GetControl<DFDateTimeInput>("MaxScanTime"); | |||||
| var minUploadTime = mQueryContainer.GetControl<DFDateTimeInput>("MinUploadTime"); | |||||
| var maxUploadTime = mQueryContainer.GetControl<DFDateTimeInput>("MaxUploadTime"); | |||||
| if (!minScanTime.IsEmpty) | |||||
| { | |||||
| query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual(ceBarCode, "ScanTime", minScanTime.Value)); | |||||
| } | |||||
| if (!maxScanTime.IsEmpty) | |||||
| { | |||||
| query.Where.Conditions.Add(DQCondition.LessThanOrEqual(ceBarCode, "ScanTime", maxScanTime.Value)); | |||||
| } | |||||
| if (!minUploadTime.IsEmpty) | |||||
| { | |||||
| query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual(ceBarCode, "UploadTime", minUploadTime.Value)); | |||||
| } | |||||
| if (!maxUploadTime.IsEmpty) | |||||
| { | |||||
| query.Where.Conditions.Add(DQCondition.LessThanOrEqual(ceBarCode, "UploadTime", maxUploadTime.Value)); | |||||
| } | |||||
| query.GroupBy.Expressions.Add(DQExpression.Field("BarCode")); | |||||
| query.GroupBy.Expressions.Add(DQExpression.Field("ScanTime")); | |||||
| query.GroupBy.Expressions.Add(DQExpression.Field("UploadTime")); | |||||
| query.GroupBy.Expressions.Add(DQExpression.Field(goods,"Name")); | |||||
| query.GroupBy.Expressions.Add(DQExpression.Field(goods, "MainUnit")); | |||||
| query.GroupBy.Expressions.Add(DQExpression.Field(goods, "SecondUnit")); | |||||
| query.GroupBy.Expressions.Add(DQExpression.Field(goods, "PackageWeight")); | |||||
| var ceBarCode2 = new JoinAlias("_s2",typeof(StockTakeCEUploadBarCode)); | |||||
| var barCode2 = new JoinAlias("_l2",typeof(BarCodeProductionInfo)); | |||||
| var goods2 = new JoinAlias("_g2",typeof(BWP.B3CowButcherManage.BO.Goods)); | |||||
| var query2 = new DQueryDom(ceBarCode2); | |||||
| query2.From.AddJoin(JoinType.Inner, new DQDmoSource(barCode2), DQCondition.And(DQCondition.InEQ(barCode2, "BarType", 3), DQCondition.EQ(ceBarCode2, "BarCode", barCode2, "BarCode"))); | |||||
| query2.From.AddJoin(JoinType.Left, new DQDmoSource(goods2), DQCondition.EQ(barCode2, "Goods_ID", goods2, "ID")); | |||||
| query2.Columns.Add(DQSelectColumn.Field("BarCode", ceBarCode2)); | |||||
| query2.Columns.Add(DQSelectColumn.Field("ScanTime", ceBarCode2)); | |||||
| query2.Columns.Add(DQSelectColumn.Field("UploadTime", ceBarCode2)); | |||||
| query2.Columns.Add(DQSelectColumn.Create(DQExpression.Field(goods2, "Name"), "goodsName")); | |||||
| query2.Columns.Add(DQSelectColumn.Field("MainUnit", goods2)); | |||||
| query2.Columns.Add(DQSelectColumn.Field("SecondUnit", goods2)); | |||||
| query2.Columns.Add(DQSelectColumn.Field("Weight", barCode2, "PWeight")); | |||||
| query2.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<int>("1"), "Num")); | |||||
| if (!txtbarCode.IsEmpty) | |||||
| { | |||||
| query2.Where.Conditions.Add(DQCondition.Like(ceBarCode2, "BarCode", txtbarCode.Text)); | |||||
| } | |||||
| if (!minScanTime.IsEmpty) | |||||
| { | |||||
| query2.Where.Conditions.Add(DQCondition.GreaterThanOrEqual(ceBarCode2, "ScanTime", minScanTime.Value)); | |||||
| } | |||||
| if (!maxScanTime.IsEmpty) | |||||
| { | |||||
| query2.Where.Conditions.Add(DQCondition.LessThanOrEqual(ceBarCode2, "ScanTime", maxScanTime.Value)); | |||||
| } | |||||
| if (!minUploadTime.IsEmpty) | |||||
| { | |||||
| query2.Where.Conditions.Add(DQCondition.GreaterThanOrEqual(ceBarCode2, "UploadTime", minUploadTime.Value)); | |||||
| } | |||||
| if (!maxUploadTime.IsEmpty) | |||||
| { | |||||
| query2.Where.Conditions.Add(DQCondition.LessThanOrEqual(ceBarCode2, "UploadTime", maxUploadTime.Value)); | |||||
| } | |||||
| if (!string.IsNullOrEmpty(Request.QueryString["Store_ID"])) | |||||
| { | |||||
| query2.Where.Conditions.Add(DQCondition.EQ(barCode2, "Store_ID", long.Parse(Request.QueryString["Store_ID"].ToString()))); | |||||
| } | |||||
| query.UnionNext.Select = query2; | |||||
| query.UnionNext.Type = UnionType.Default; | |||||
| return query; | |||||
| } | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,33 @@ | |||||
| <?xml version="1.0" encoding="utf-8" ?> | |||||
| <Select xmlns="urn:XDQuery"> | |||||
| <Columns> | |||||
| <Field name="ID"/> | |||||
| </Columns> | |||||
| <From> | |||||
| <DmoClass class="BWP.B3CowButcherManage.BO.StockTakeCEUploadBarCode,B3CowButcherManage"/> | |||||
| </From> | |||||
| <Where> | |||||
| <And> | |||||
| <GreaterThanOrEqual> | |||||
| <Field name="ScanTime"/> | |||||
| <QBE paramName="MinScanTime" /> | |||||
| </GreaterThanOrEqual> | |||||
| <LessThanOrEqual> | |||||
| <Field name="ScanTime"/> | |||||
| <QBE paramName="MaxScanTime"/> | |||||
| </LessThanOrEqual> | |||||
| <GreaterThanOrEqual> | |||||
| <Field name="UploadTime"/> | |||||
| <QBE paramName="MinUploadTime" /> | |||||
| </GreaterThanOrEqual> | |||||
| <LessThanOrEqual> | |||||
| <Field name="UploadTime"/> | |||||
| <QBE paramName="MaxUploadTime"/> | |||||
| </LessThanOrEqual> | |||||
| <Contains> | |||||
| <Field name="BarCode"/> | |||||
| <QBE paramName="BarCode"/> | |||||
| </Contains> | |||||
| </And> | |||||
| </Where> | |||||
| </Select> | |||||
| @ -0,0 +1,268 @@ | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using System.Web.UI; | |||||
| using BWP.B3CowButcherManage.BO; | |||||
| using BWP.B3Frameworks; | |||||
| using BWP.Web.Pages.B3UnitedInfos.Bills.StockTake_; | |||||
| using BWP.Web.WebControls; | |||||
| using Forks.EnterpriseServices.BusinessInterfaces; | |||||
| using Forks.EnterpriseServices.DomainObjects2; | |||||
| using Forks.EnterpriseServices.DomainObjects2.DQuery; | |||||
| using Forks.EnterpriseServices.JsonRpc; | |||||
| using Forks.EnterpriseServices.SqlDoms; | |||||
| using Forks.Utils; | |||||
| using TSingSoft.WebControls2; | |||||
| namespace BWP.Web.Pages.Overlays | |||||
| { | |||||
| class StockTakeEdit_Ext: StockTakeEdit | |||||
| { | |||||
| protected override void AddCustomerToolsPanel(HLayoutPanel hPanel) | |||||
| { | |||||
| hPanel.Add(new LiteralControl(" ")); | |||||
| hPanel.Add(new TSButton("根据条码载入盘点数量", delegate | |||||
| { | |||||
| mDFContainer.GetFromUI(); | |||||
| _detailGrid.GetFromUI(); | |||||
| var list = GetBarCodeData(); | |||||
| var dic = new Dictionary<string, Tuple<Money<decimal>, Money<decimal>?>>(); | |||||
| foreach (var detail in Dmo.Details) | |||||
| { | |||||
| var results = list.Where(x => x.GoodsBatch_ID == detail.GoodsBatch_ID && x.Goods_ID == detail.Goods_ID); | |||||
| if (results.Count() > 0) | |||||
| { | |||||
| var first = results.First(); | |||||
| detail.TakeNumber = first.Weight; | |||||
| detail.SecondTakeNumber = first.Num; | |||||
| } | |||||
| } | |||||
| _detailGrid.DataBind(); | |||||
| AspUtil.Alert(this, "操作成功"); | |||||
| })); | |||||
| var btn_x = hPanel.Add(new DialogButton { Text = "查看本库条码", Url = "~/B3_QiLianMuGe/Dialogs/QueryBarCode.aspx?Store_ID='+__DFContainer.getValue('Store_ID')+'" }); | |||||
| btn_x.Click += delegate | |||||
| { | |||||
| }; | |||||
| var deleteBtn = new TSButton("删除盘点条码"); | |||||
| deleteBtn.Click += delegate { | |||||
| var dom = new DQDeleteDom(typeof(StockTakeCEUploadBarCode)); | |||||
| using (var context = new TransactionContext()) | |||||
| { | |||||
| context.Session.ExecuteNonQuery(dom); | |||||
| context.Session.Commit(); | |||||
| } | |||||
| AspUtil.Alert(this, "操作成功"); | |||||
| }; | |||||
| deleteBtn.Attributes.Add("OnClick", "javascript:return confirm('确认要删除所有仓库盘点的条码吗?请先确认所有仓库是否都盘点完毕后再删除,删除条码后无法恢复')"); | |||||
| hPanel.Add(deleteBtn); | |||||
| } | |||||
| class MinSaelBarCode | |||||
| { | |||||
| public string PackageBarCode { get; set; } | |||||
| public string BarCode { get; set; } | |||||
| public long? Goods_ID { get; set; } | |||||
| public string Goods_Name { get; set; } | |||||
| public string Goods_Code { get; set; } | |||||
| public decimal? Weight { get; set; } | |||||
| public string Product_Batch { get; set; } | |||||
| public decimal? PackageWeight { get; set; } | |||||
| public long? PackageID { get; set; } | |||||
| public string PackageProduct_Batch { get; set; } | |||||
| public DateTime? RightInStoreTime { get; set; } | |||||
| public bool? IsOpen { get; set; } | |||||
| public long? Store_ID { get; set; } | |||||
| public string Store_Name { get; set; } | |||||
| public bool? IsAssignGoods { get; set; } | |||||
| public long? AssignBillID { get; set; } | |||||
| public int? PickType { get; set; } | |||||
| public string RightProduct_Batch { get; set; } | |||||
| } | |||||
| private class BarCodeData | |||||
| { | |||||
| public long? Goods_ID { get; set; } | |||||
| public string Product_Batch { get; set; } | |||||
| public decimal? Weight { get; set; } | |||||
| public decimal? Num { get; set; } | |||||
| public long? GoodsBatch_ID { get; set; } | |||||
| } | |||||
| private List<BarCodeData> GetBarCodeData() | |||||
| { | |||||
| var uploadBarCode = new JoinAlias(typeof(StockTakeCEUploadBarCode)); | |||||
| var left = new JoinAlias("_l", typeof(BarCodeProductionInfo)); | |||||
| var right = new JoinAlias("_r", typeof(BarCodeProductionInfo)); | |||||
| var goods = new JoinAlias("_g", typeof(BWP.B3CowButcherManage.BO.Goods)); | |||||
| var query = new DQueryDom(left); | |||||
| query.From.AddJoin(JoinType.Inner, new DQDmoSource(uploadBarCode), DQCondition.EQ(left, "BarCode", uploadBarCode, "BarCode")); | |||||
| query.From.AddJoin(JoinType.Left, new DQDmoSource(right), DQCondition.EQ(left, "ID", right, "PackageID")); | |||||
| query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(left, "Goods_ID", goods, "ID")); | |||||
| var arr = new string[] { "Goods_ID", "Goods_Name", "Goods_Code", "Weight", "InStoreTime", "Store_ID", "Store_Name", "IsAssignGoods", "AssignBillID", "PickType" }; | |||||
| foreach (var f in arr) | |||||
| query.Columns.Add(DQSelectColumn.Create(DQExpression.LogicCase(DQCondition.EQ(left, "BarType", 3), DQExpression.Field(right, f), DQExpression.Field(left, f)), f)); | |||||
| query.Columns.Add(DQSelectColumn.Field("PackageWeight", goods)); | |||||
| query.Columns.Add(DQSelectColumn.Field("PackageID", right)); | |||||
| query.Columns.Add(DQSelectColumn.Field("Product_Batch", left)); | |||||
| query.Columns.Add(DQSelectColumn.Field("IsOpen", left)); | |||||
| query.Columns.Add(DQSelectColumn.Field("Product_Batch", right)); | |||||
| var list = new List<MinSaelBarCode>(); | |||||
| using (var contex = new TransactionContext()) | |||||
| { | |||||
| using (var reader = contex.Session.ExecuteReader(query)) | |||||
| { | |||||
| while (reader.Read()) | |||||
| { | |||||
| decimal? packageWeight = null; | |||||
| var num = (Money<decimal>?)reader[10]; | |||||
| if (num != null) | |||||
| { | |||||
| packageWeight = num.Value.Value; | |||||
| } | |||||
| var obj = new MinSaelBarCode() | |||||
| { | |||||
| Goods_ID = (long?)reader[0], | |||||
| Goods_Name = (string)reader[1], | |||||
| Goods_Code = (string)reader[2], | |||||
| Weight = (decimal?)reader[3], | |||||
| RightInStoreTime = (DateTime?)reader[4], | |||||
| Store_ID = (long?)reader[5], | |||||
| Store_Name = (string)reader[6], | |||||
| IsAssignGoods = (bool?)reader[7], | |||||
| AssignBillID = (long?)reader[8], | |||||
| PickType = (int?)reader[9], | |||||
| PackageWeight = packageWeight, | |||||
| PackageID = (long?)reader[11], | |||||
| Product_Batch = (string)reader[12], | |||||
| IsOpen = (bool?)reader[13], | |||||
| RightProduct_Batch = (string)reader[14], | |||||
| }; | |||||
| list.Add(obj); | |||||
| } | |||||
| } | |||||
| } | |||||
| var weightList = new List<BarCodeData>(); | |||||
| var results = list.Where(x => x.Goods_ID != null && x.Store_ID == Dmo.Store_ID); | |||||
| if (results.Count() > 0) | |||||
| { | |||||
| var packageGroups = results.Where(x=>x.PackageID!=null).GroupBy(x => x.PackageID); | |||||
| foreach (var package in packageGroups) | |||||
| { | |||||
| var datas = package.Where(x => x.PackageWeight != null); | |||||
| if (datas.Count() > 0) | |||||
| { | |||||
| var result = datas.First(); | |||||
| weightList.Add(new BarCodeData { Goods_ID = result.Goods_ID, Product_Batch = result.Product_Batch, Weight = result.PackageWeight, Num = datas.Count()}); | |||||
| }else | |||||
| { | |||||
| foreach (var item in package) | |||||
| { | |||||
| weightList.Add(new BarCodeData { Goods_ID = item.Goods_ID, Product_Batch = item.RightProduct_Batch, Weight = item.Weight, Num = 1 }); | |||||
| } | |||||
| } | |||||
| } | |||||
| var items = results.Where(x => x.PackageID == null); | |||||
| foreach (var item in items) | |||||
| { | |||||
| weightList.Add(new BarCodeData { Goods_ID = item.Goods_ID, Product_Batch = item.Product_Batch, Weight = item.Weight, Num = 1 }); | |||||
| } | |||||
| } | |||||
| var batchGroups = weightList.GroupBy(x => x.Product_Batch); | |||||
| foreach (var group in batchGroups) | |||||
| { | |||||
| var tuples = new List<Tuple<long,long>>(); | |||||
| var goodsIds = group.Select(x => x.Goods_ID ?? 0).Distinct(); | |||||
| var goodsLists = SplitListWithCount(goodsIds.ToList(), 1000); | |||||
| foreach (var goodslist in goodsLists) | |||||
| { | |||||
| var batchs = QuerytGoodsBatch(group.Key, goodslist); | |||||
| batchs.ForEach(x => tuples.Add(x)); | |||||
| } | |||||
| foreach (var item in group) | |||||
| { | |||||
| var batch = tuples.Where(x => x.Item1 == item.Goods_ID); | |||||
| if(batch.Count() > 0) | |||||
| { | |||||
| item.GoodsBatch_ID = batch.First().Item2; | |||||
| } | |||||
| } | |||||
| } | |||||
| var details = new List<BarCodeData>(); | |||||
| var goodsGroups = weightList.GroupBy(x => x.Goods_ID); | |||||
| foreach (var group in goodsGroups) | |||||
| { | |||||
| var goodsBatchGroups = group.GroupBy(x=>x.GoodsBatch_ID); | |||||
| foreach (var item in goodsBatchGroups) | |||||
| { | |||||
| var codeData = new BarCodeData(); | |||||
| codeData.Goods_ID = group.Key; | |||||
| codeData.GoodsBatch_ID = item.Key; | |||||
| codeData.Weight = item.Sum(x=>x.Weight); | |||||
| codeData.Num = item.Sum(x=>x.Num); | |||||
| details.Add(codeData); | |||||
| } | |||||
| } | |||||
| return details; | |||||
| } | |||||
| private List<Tuple<long, long>> QuerytGoodsBatch(string batch, IEnumerable<long> goodsIds) | |||||
| { | |||||
| var query = new DQueryDom(new JoinAlias(typeof(BWP.B3UnitedInfos.BO.GoodsBatch))); | |||||
| query.Columns.Add(DQSelectColumn.Field("Goods_ID")); | |||||
| query.Columns.Add(DQSelectColumn.Field("ID")); | |||||
| query.Where.Conditions.Add(DQCondition.And(DQCondition.InList(DQExpression.Field("Goods_ID"), goodsIds.Select(x => DQExpression.Value(x)).ToArray()), DQCondition.EQ("Name", batch))); | |||||
| query.Where.Conditions.Add(DQCondition.EQ("Stopped", false)); | |||||
| query.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID)); | |||||
| var list = new List<Tuple<long, long>>(); | |||||
| using (var context2 = new TransactionContext()) | |||||
| { | |||||
| using (var reader = context2.Session.ExecuteReader(query)) | |||||
| { | |||||
| while (reader.Read()) | |||||
| { | |||||
| list.Add(new Tuple<long, long>((long)reader[0], (long)reader[1])); | |||||
| } | |||||
| } | |||||
| } | |||||
| return list; | |||||
| } | |||||
| private List<List<T>> SplitListWithCount<T>(IList<T> list, int count) | |||||
| { | |||||
| var num = list.Count / count; | |||||
| var num2 = list.Count % count; | |||||
| var results = new List<List<T>>(); | |||||
| for (int i = 1; i <= num; i++) | |||||
| { | |||||
| var l = new List<T>(); | |||||
| for (int j = (i - 1) * count; j < count * i; j++) | |||||
| { | |||||
| l.Add(list[j]); | |||||
| } | |||||
| results.Add(l); | |||||
| } | |||||
| if (num2 > 0) | |||||
| { | |||||
| var l = new List<T>(); | |||||
| for (int i = num * count; i < list.Count; i++) | |||||
| { | |||||
| l.Add(list[i]); | |||||
| } | |||||
| results.Add(l); | |||||
| } | |||||
| return results; | |||||
| } | |||||
| } | |||||
| } | |||||