diff --git a/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Bills/Butcher_/CreateButcher.cs b/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Bills/Butcher_/CreateButcher.cs index eb6a5c1..0c7dc1d 100644 --- a/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Bills/Butcher_/CreateButcher.cs +++ b/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Bills/Butcher_/CreateButcher.cs @@ -104,7 +104,6 @@ namespace BWP.Web.Pages.B3SheepButcherManage.Bills.Butcher_ selectDmo.ID = (long)row["DetailID"]; selectDmo.WeightBill_ID = (long)row["ID"]; selectDmo.RemainNumber = (int?)row["RemainNumber"]; - selectDmo.ButcherNumber = (int?)row["ButcherNumber"]; selectDmo.Number = (int)row["Number"]; selectDmo.LiveColonyHouse_Name = (string)row["LiveColonyHouse_Name"]; selectDmo.LiveVarieties_ID = (long?)row["LiveVarieties_ID"]; @@ -133,7 +132,6 @@ namespace BWP.Web.Pages.B3SheepButcherManage.Bills.Butcher_ grid.Columns.Add(new DFBrowseGridColumn("Number")); grid.Columns.Add(new DFBrowseGridColumn("Weight")); grid.Columns.Add(new DFBrowseGridColumn("PlanNumber")); - grid.Columns.Add(new DFBrowseGridColumn("ButcherNumber")); grid.Columns.EAdd(new DFEditGridColumn("RemainNumber")).HeaderText = "本次计划数"; grid.ValueColumns.Add("LiveVarieties_ID"); } @@ -181,7 +179,6 @@ namespace BWP.Web.Pages.B3SheepButcherManage.Bills.Butcher_ dom.Columns.Add(DQSelectColumn.Field("Weight", detail)); dom.Columns.Add(DQSelectColumn.Field("RemainNumber", detail)); dom.Columns.Add(DQSelectColumn.Field("PlanNumber", detail)); - dom.Columns.Add(DQSelectColumn.Field("ButcherNumber", detail)); dom.Columns.Add(DQSelectColumn.Field("LiveColonyHouse_Name", detail)); dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(detail, "ID"), "DetailID")); diff --git a/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Reports/HurryButcherAnalyse_/HurryButcherAnalyse.cs b/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Reports/HurryButcherAnalyse_/HurryButcherAnalyse.cs index 1e97b06..48b804f 100644 --- a/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Reports/HurryButcherAnalyse_/HurryButcherAnalyse.cs +++ b/B3SheepButcherManage.Web/Pages/B3SheepButcherManage/Reports/HurryButcherAnalyse_/HurryButcherAnalyse.cs @@ -33,7 +33,7 @@ namespace BWP.Web.Pages.B3SheepButcherManage.Reports.HurryButcherAnalyse_ protected override string AccessRoleName { - get { return "B3ButcherManage.急宰单.访问"; } + get { return "B3SheepButcherManage.羊急宰单.访问"; } } readonly Dictionary _fileInfo = new Dictionary(); diff --git a/B3SheepButcherManage/B3SheepButcherManage.csproj b/B3SheepButcherManage/B3SheepButcherManage.csproj index e2d29f6..48baf5d 100644 --- a/B3SheepButcherManage/B3SheepButcherManage.csproj +++ b/B3SheepButcherManage/B3SheepButcherManage.csproj @@ -112,6 +112,7 @@ + diff --git a/B3SheepButcherManage/BL/Bill/ButcherBL/ButcherBL.cs b/B3SheepButcherManage/BL/Bill/ButcherBL/ButcherBL.cs index 8aaed24..52ff457 100644 --- a/B3SheepButcherManage/BL/Bill/ButcherBL/ButcherBL.cs +++ b/B3SheepButcherManage/BL/Bill/ButcherBL/ButcherBL.cs @@ -98,10 +98,7 @@ namespace BWP.B3SheepButcherManage.BL Session.ExecuteNonQuery(delDom); var weightBL = BIFactory.Create(this); - foreach (var id in needUpdateIds) - { - weightBL.UpdateDetailOtherNumber(id); - } + weightBL.UpdateDetailOtherNumber(needUpdateIds); ReUpdateSequenceAndPhaseCode(butcherID); } @@ -202,10 +199,10 @@ namespace BWP.B3SheepButcherManage.BL } Update(dmo); - if (preDetail.Weigh_Detail_ID.HasValue) + if (preDetail.Weigh_Detail_ID > 0) { var weightBL = BIFactory.Create(this); - weightBL.UpdateDetailOtherNumber(preDetail.Weigh_Detail_ID.Value); + weightBL.UpdateDetailOtherNumber(new List() { preDetail.Weigh_Detail_ID.Value }); } } @@ -248,10 +245,7 @@ namespace BWP.B3SheepButcherManage.BL Update(dmo); } var weightBL = BIFactory.Create(this); - foreach (var weighRecord in selectedList) - { - weightBL.UpdateDetailOtherNumber(weighRecord.ID); - } + weightBL.UpdateDetailOtherNumber(selectedList.Select(x => x.ID)); return dmo.ID; } @@ -287,11 +281,8 @@ namespace BWP.B3SheepButcherManage.BL { if (detail.PlanNumber == null) detail.PlanNumber = 0; - if (detail.ButcherNumber == null) - detail.ButcherNumber = 0; - if ((detail.RemainNumber > detail.Number - detail.PlanNumber) || - (detail.RemainNumber > detail.Number - detail.ButcherNumber)) + if (detail.RemainNumber > detail.Number - detail.PlanNumber) throw new Exception("本次宰杀头数超出了剩余头数"); // 本次计划数量 for (int i = 0; i < detail.RemainNumber; i++) diff --git a/B3SheepButcherManage/BL/Bill/HurryButcherBL/HurryButcherBL.cs b/B3SheepButcherManage/BL/Bill/HurryButcherBL/HurryButcherBL.cs index 84df1d0..a995b5d 100644 --- a/B3SheepButcherManage/BL/Bill/HurryButcherBL/HurryButcherBL.cs +++ b/B3SheepButcherManage/BL/Bill/HurryButcherBL/HurryButcherBL.cs @@ -3,6 +3,7 @@ using BWP.B3SheepButcherManage.BL; using BWP.B3SheepButcherManage.BO; using Forks.EnterpriseServices; using Forks.EnterpriseServices.BusinessInterfaces; +using Forks.EnterpriseServices.DomainObjects2; using System; using System.Collections.Generic; using System.Linq; @@ -18,22 +19,36 @@ namespace BWP.B3SheepButcherManage.BL } public class HurryButcherBL : DepartmentWorkFlowBillBL, IHurryButcherBL { - protected override void doCheck(HurryButcher dmo) + + protected override void afterInsert(HurryButcher dmo) { - base.doCheck(dmo); - var weighDetailIDs = new List(); - foreach (HurryButcher_Detail detail in dmo.Details) - { - if (detail.Weigh_Detail_ID != null) - { - if (!weighDetailIDs.Contains(detail.Weigh_Detail_ID.Value)) - weighDetailIDs.Add(detail.Weigh_Detail_ID.Value); - } - } - var weightBL = BIFactory.Create(this); - foreach (var weighDetailID in weighDetailIDs) + base.afterInsert(dmo); + var tags = dmo.Details.Where(x => x.Weigh_Detail_ID > 0).Select(x => x.Weigh_Detail_ID.Value); + UpdateWeightRecordPlanNumber(tags); + } + + protected override void afterUpdate(HurryButcher dmo) + { + base.afterUpdate(dmo); + var deleted = (dmo.Details as IDmoContainer).GetDeletedObjects().Cast().Where(x => x.Weigh_Detail_ID > 0).Select(x => x.Weigh_Detail_ID.Value); + var simple = dmo.Details.Where(x => x.Weigh_Detail_ID > 0).Select(x => x.Weigh_Detail_ID.Value); + var tags = simple.Union(deleted); + UpdateWeightRecordPlanNumber(tags); + } + + protected override void afterDelete(HurryButcher dmo) + { + base.afterDelete(dmo); + var simple = dmo.Details.Where(x => x.Weigh_Detail_ID > 0).Select(x => x.Weigh_Detail_ID.Value); + UpdateWeightRecordPlanNumber(simple); + } + + void UpdateWeightRecordPlanNumber(IEnumerable tags) + { + if (tags.Any()) { - weightBL.UpdateDetailOtherNumber(weighDetailID); + var bl = BIFactory.Create(BCWrapClassType.Inner, this); + bl.UpdateDetailOtherNumber(tags); } } } diff --git a/B3SheepButcherManage/BL/Bill/WeightBillBL/WeightBillBL.cs b/B3SheepButcherManage/BL/Bill/WeightBillBL/WeightBillBL.cs index 94b2e4f..a9c2e83 100644 --- a/B3SheepButcherManage/BL/Bill/WeightBillBL/WeightBillBL.cs +++ b/B3SheepButcherManage/BL/Bill/WeightBillBL/WeightBillBL.cs @@ -23,7 +23,7 @@ namespace BWP.B3SheepButcherManage.BL [LogicName("羊过磅单")] public interface IWeightBillBL : IDepartmentWorkFlowBillBL { - void UpdateDetailOtherNumber(long p); + void UpdateDetailOtherNumber(IEnumerable weightDetailIDs); } public class WeightBillBL : DepartmentWorkFlowBillBL, IWeightBillBL @@ -67,7 +67,7 @@ namespace BWP.B3SheepButcherManage.BL runner.Global["奖罚依据"] = ""; runner.Execute(result.Item3); var bType = TypeMarshal.AsString(runner.Global["奖罚依据"]); - if (bType == "过磅单") + if (bType == "羊过磅单") { runner.Global["单价"] = 0m; runner.Execute(result.Item2); @@ -113,7 +113,7 @@ namespace BWP.B3SheepButcherManage.BL protected override void doUnCheck(WeightBill dmo) { - if (dmo.WeighRecords.Any(x => x.PlanNumber > 0 || x.ButcherNumber > 0)) + if (dmo.WeighRecords.Any(x => x.PlanNumber > 0)) throw new ApplicationException("过磅单已经排宰"); var stayPayBL = BIFactory.Create(Session); @@ -132,54 +132,92 @@ namespace BWP.B3SheepButcherManage.BL } /// - /// 更新屠宰单明细的已计划数量,已屠宰数量,剩余数量 + /// 更新屠宰单明细的已计划数量,剩余数量 /// - public void UpdateDetailOtherNumber(long weighDetailID) + public void UpdateDetailOtherNumber(IEnumerable weightDetailIDs) { - if (weighDetailID == 0) - { + if (weightDetailIDs.Count() == 0) return; + var exp = weightDetailIDs.Distinct().Select(x => DQExpression.Value(x)).ToArray(); + + var main = new JoinAlias(typeof(Summary)); + var detail = new JoinAlias(typeof(WeightBill_Record)); + var query = new DQueryDom(main); + Summary.Register(query, exp); + query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ID")); + query.Columns.Add(DQSelectColumn.Field("ID", main)); + query.Columns.Add(DQSelectColumn.Sum(main, "Number")); + query.Columns.Add(DQSelectColumn.Max(detail, "Number")); + query.GroupBy.Expressions.Add(DQExpression.Field(main, "ID")); + + var list = new List>(); + using (var reader = Session.ExecuteReader(query)) + { + while (reader.Read()) + { + var item1 = (long)reader[0]; + var item2 = Convert.ToInt32(reader[1] ?? 0); + var item3 = Convert.ToInt32(reader[2] ?? 0); + var last = item3 - item2; + if (last < 0) + throw new Exception(string.Format("过磅单明细ID{0} 头数{1} 已计划{2} 超出{3}", item1, item3, item2, -last)); + list.Add(new Tuple(item1, item2, last)); + } + } + foreach (var item in list) + UpdateReocrdPlanNumber(item); + } + + private void UpdateReocrdPlanNumber(Tuple item) + { + var update = new DQUpdateDom(typeof(WeightBill_Record)); + update.Columns.Add(new DQUpdateColumn("PlanNumber", item.Item2)); + update.Columns.Add(new DQUpdateColumn("RemainNumber", item.Item3)); + update.Where.Conditions.Add(DQCondition.EQ("ID", item.Item1)); + Session.ExecuteNonQuery(update); + } + + class Summary + { + public long ID { get; set; } + + public int Number { get; set; } + + public static void Register(DQueryDom root, IDQExpression[] ids) + { + var q1 = ButcherQuery(ids); + q1.UnionNext.Select = HurryButcherQuery(ids); + q1.UnionNext.Type = UnionType.All; + root.RegisterQueryTable(typeof(Summary), new string[] { "ID", "Number" }, q1); } - var butcher = new JoinAlias(typeof(Butcher)); - var detail = new JoinAlias(typeof(Butcher_Detail)); - var subQuery = new DQueryDom(detail); - subQuery.From.AddJoin(JoinType.Left, new DQDmoSource(butcher), DQCondition.EQ(detail, "Butcher_ID", butcher, "ID")); - subQuery.Where.Conditions.Add(DQCondition.EQ(detail, "Weigh_Detail_ID", weighDetailID)); - subQuery.Where.Conditions.Add(DQCondition.InEQ(butcher, "BillState", 单据状态.已作废)); - subQuery.Columns.Add(DQSelectColumn.Count()); - subQuery.Columns.Add(DQSelectColumn.Create(DQExpression.Sum( - DQExpression.LogicCase(DQCondition.IsNotNull(DQExpression.Field("Weight")), DQExpression.ConstValue(1), DQExpression.ConstValue(0))), "HasWeight")); - var tuple = subQuery.EExecuteScalar(Session); - var planNumber = tuple.Item1 ?? 0; - var butcherNumber = tuple.Item2 ?? 0; - - var hurryDetail = new JoinAlias(typeof(HurryButcher_Detail)); - var hurry = new JoinAlias(typeof(HurryButcher)); - var hurryDom = new DQueryDom(hurryDetail); - hurryDom.From.AddJoin(JoinType.Left, new DQDmoSource(hurry), DQCondition.EQ(hurryDetail, "HurryButcher_ID", hurry, "ID")); - hurryDom.Where.Conditions.Add(DQCondition.EQ("Weigh_Detail_ID", weighDetailID)); - hurryDom.Where.Conditions.Add(DQCondition.Or( - DQCondition.EQ(hurry, "BillState", 单据状态.已审核), - DQCondition.EQ(hurry, "BillState", 单据状态.已完毕))); - hurryDom.Columns.Add(DQSelectColumn.Sum("Number")); - var hurryNumber = (int?)Session.ExecuteScalar(hurryDom); - - butcherNumber = (butcherNumber) + (hurryNumber ?? 0); - planNumber = (planNumber) + (hurryNumber ?? 0); - - var updatedom = new DQUpdateDom(typeof(WeightBill_Record)); - updatedom.Where.Conditions.Add(DQCondition.EQ("ID", weighDetailID)); - - long weightid = InnerBLUtil.GetDmoPropertyByID(Session, typeof(WeightBill_Record), "WeightBill_ID", weighDetailID); - - updatedom.Columns.Add(new DQUpdateColumn("PlanNumber", planNumber));//已计划头数 - updatedom.Columns.Add(new DQUpdateColumn("ButcherNumber", butcherNumber)); //已屠宰 - updatedom.Columns.Add(new DQUpdateColumn("RemainNumber", DQExpression.Subtract(DQExpression.Field("Number"), DQExpression.Value(planNumber > butcherNumber ? planNumber : butcherNumber)))); - //剩余头数 - - Session.ExecuteNonQuery(updatedom); + static DQueryDom ButcherQuery(IDQExpression[] ids) + { + var main = new JoinAlias(typeof(Butcher)); + var detail = new JoinAlias(typeof(Butcher_Detail)); + var query = new DQueryDom(detail); + query.From.AddJoin(JoinType.Left, new DQDmoSource(main), DQCondition.EQ(detail, "Butcher_ID", main, "ID")); + query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field(detail, "Weigh_Detail_ID"), ids)); + query.Where.Conditions.Add(DQCondition.InEQ(main, "BillState", 单据状态.已作废)); + query.Columns.Add(DQSelectColumn.Field("Weigh_Detail_ID", detail)); + query.Columns.Add(DQSelectColumn.Count()); + query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Weigh_Detail_ID")); + return query; + } + static DQueryDom HurryButcherQuery(IDQExpression[] ids) + { + var detail = new JoinAlias(typeof(HurryButcher_Detail)); + var main = new JoinAlias(typeof(HurryButcher)); + var query = new DQueryDom(detail); + query.From.AddJoin(JoinType.Left, new DQDmoSource(main), DQCondition.EQ(detail, "HurryButcher_ID", main, "ID")); + query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field(detail, "Weigh_Detail_ID"), ids)); + query.Where.Conditions.Add(DQCondition.InEQ(main, "BillState", 单据状态.已作废)); + query.Columns.Add(DQSelectColumn.Field("Weigh_Detail_ID", detail)); + query.Columns.Add(DQSelectColumn.Sum("Number")); + query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Weigh_Detail_ID")); + return query; + } } } } diff --git a/B3SheepButcherManage/BO/Bill/WeightBill/WeightBill_Record.cs b/B3SheepButcherManage/BO/Bill/WeightBill/WeightBill_Record.cs index f71cb2a..66c08e8 100644 --- a/B3SheepButcherManage/BO/Bill/WeightBill/WeightBill_Record.cs +++ b/B3SheepButcherManage/BO/Bill/WeightBill/WeightBill_Record.cs @@ -33,9 +33,6 @@ namespace BWP.B3SheepButcherManage.BO [LogicName("已计划头数")] public int? PlanNumber { get; set; } - [LogicName("已屠宰头数")] - public int? ButcherNumber { get; set; } - [LogicName("数量")] public int? Number { get; set; } diff --git a/B3SheepButcherManage/DataPatch_/UpdateWeightRecordInfo.cs b/B3SheepButcherManage/DataPatch_/UpdateWeightRecordInfo.cs new file mode 100644 index 0000000..ba9cfeb --- /dev/null +++ b/B3SheepButcherManage/DataPatch_/UpdateWeightRecordInfo.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TSingSoft.WebPluginFramework.Install; + +namespace BWP.B3SheepButcherManage.DataPatch_ +{ + [DataPatch] + public class UpdateWeightRecordInfo : IDataPatch + { + public void Execute(Forks.EnterpriseServices.BusinessInterfaces.TransactionContext context) + { + var sql = @"update B3SheepButcherManage_WeightBill_Record set PlanNumber=0,RemainNumber=Number; +with b(id,num) as ((select d.Weigh_Detail_ID,1 from B3SheepButcherManage_Butcher m join B3SheepButcherManage_Butcher_Detail d on m.ID=d.Butcher_ID where d.Weigh_Detail_ID>0 and m.BillState!=1)union all (select d.Weigh_Detail_ID,d.Number from B3SheepButcherManage_HurryButcher m join B3SheepButcherManage_HurryButcher_Detail d on m.ID=d.HurryButcher_ID where d.Weigh_Detail_ID>0 and m.BillState!=1)), +summary(id,number) as (select id ,sum(num)from b group by id) +UPDATE wd set wd.PlanNumber= b.num,wd.RemainNumber=wd.Number-b.num from b join B3SheepButcherManage_WeightBill_Record wd on b.id=wd.ID;"; + context.Session.ExecuteSqlNonQuery(sql); + } + } +}