diff --git a/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs b/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs index b3b9300..24913ca 100644 --- a/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs +++ b/B3SheepButcherManage/BL/Bill/StatPayBL/StatPayBL.cs @@ -520,80 +520,65 @@ namespace BWP.B3SheepButcherManage.BL public void AddOtherReward(StatPay dmo) { - //var oldList = dmo.OtherRewardDetails.ToList(); - //foreach (StatPay_OtherReward reward in oldList) - //{ - // if (reward.Sanction_CreateType == 创建方式.自动) - // { - // dmo.OtherRewardDetails.Remove(reward); - // } - //} - - //var sanction = new JoinAlias(typeof(SanctionSetting)); - //var abnormalItem = new JoinAlias(typeof(AbnormalItem)); - - //var dom = new DQueryDom(sanction); - //dom.From.AddJoin(JoinType.Left, new DQDmoSource(abnormalItem), - // DQCondition.EQ(sanction, "AbnormalItem_ID", abnormalItem, "ID")); - //dom.Columns.Add(DQSelectColumn.Field("Name", abnormalItem)); - //dom.Columns.Add(DQSelectColumn.Field("ID", sanction)); - //dom.Columns.Add(DQSelectColumn.Field("Condition", sanction)); - //dom.Columns.Add(DQSelectColumn.Field("BeforeScript", sanction)); - //dom.Where.Conditions.Add(DQCondition.EQ(sanction, "FitBill", 单据类型.结算单)); - //dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.已审核)); - //dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID)); - //dom.Where.Conditions.Add(DQCondition.EQ(sanction, "AccountingUnit_ID", dmo.AccountingUnit_ID)); - //var sanctionList = dom.EExecuteList(Session); - //foreach (var tuple in sanctionList) - //{ - // if (string.IsNullOrEmpty(tuple.Item3)) - // continue; - // var runner = new Runner(); - // runner.Global["奖罚依据"] = ""; - // runner.Execute(tuple.Item4); - // var bType = TypeMarshal.AsString(runner.Global["奖罚依据"]); - // switch (bType) - // { - // case "屠宰单": - // AddRewardWithButcher(dmo, runner, tuple); - // break; - // case "屠宰异常单": - // AddRewardWithButcherAbnormal(dmo, runner, tuple); - // break; - // default: - // AddDefaultOtherReward(dmo, runner, tuple); - // break; - - // } - //} + dmo.OtherRewardDetails.Clear(); + var sanction = new JoinAlias(typeof(CW.SanctionSetting)); + var abnormalItem = new JoinAlias(typeof(CW.RewardItem)); + + var dom = new DQueryDom(sanction); + dom.From.AddJoin(JoinType.Left, new DQDmoSource(abnormalItem), + DQCondition.EQ(sanction, "RewardItem_ID", abnormalItem, "ID")); + dom.Columns.Add(DQSelectColumn.Field("Name", abnormalItem)); + dom.Columns.Add(DQSelectColumn.Field("ID", sanction)); + dom.Columns.Add(DQSelectColumn.Field("Condition", sanction)); + dom.Columns.Add(DQSelectColumn.Field("BeforeScript", sanction)); + dom.Where.Conditions.Add(DQCondition.EQ(sanction, "FitBill", 奖罚设置适用单据类型.结算单)); + dom.Where.Conditions.Add(DQCondition.EQ("BillState", 单据状态.已审核)); + var sanctionList = dom.EExecuteList(Session); + foreach (var tuple in sanctionList) + { + if (string.IsNullOrEmpty(tuple.Item3)) + continue; + if (string.IsNullOrEmpty(tuple.Item4)) + continue; + var runner = new Runner(); + runner.Global["奖罚依据"] = ""; + runner.Execute(tuple.Item4); + var bType = TypeMarshal.AsString(runner.Global["奖罚依据"]); + switch (bType) + { + case "屠宰单": + AddRewardWithButcher(dmo, runner, tuple); + break; + } + } } private void AddDefaultOtherReward(StatPay dmo, Runner runner, Tuple tuple) { - //runner.Global["单价"] = 0m; - //runner.Global["头数"] = 0; - //runner.Global["金额"] = 0m; + runner.Global["单价"] = 0m; + runner.Global["头数"] = 0; + runner.Global["金额"] = 0m; - //runner.Execute(tuple.Item3 ?? string.Empty); - //var price = TypeMarshal.AsNumber(runner.Global["单价"]); - //var number = TypeMarshal.AsNumber(runner.Global["头数"]); - //var money = TypeMarshal.AsNumber(runner.Global["金额"]); + runner.Execute(tuple.Item3 ?? string.Empty); + var price = TypeMarshal.AsNumber(runner.Global["单价"]); + var number = TypeMarshal.AsNumber(runner.Global["头数"]); + var money = TypeMarshal.AsNumber(runner.Global["金额"]); - //var reDetail = new StatPay_OtherReward(); - //reDetail.Price = price; - //reDetail.Number = number; - //reDetail.Money = money; + var reDetail = new StatPay_OtherReward(); + reDetail.Price = price; + reDetail.Number = number; + reDetail.Money = money; - //if ((reDetail.Money ?? 0) == 0) - //{ - // return; - //} + if ((reDetail.Money ?? 0) == 0) + { + return; + } - //reDetail.Sanction_ID = tuple.Item2; - //reDetail.AbnormalItem_Name = tuple.Item1; - //DmoUtil.RefreshDependency(reDetail, "Sanction_ID"); - //dmo.OtherRewardDetails.Add(reDetail); + reDetail.RewardItem_ID = tuple.Item2; + reDetail.RewardItem_Name = tuple.Item1; + DmoUtil.RefreshDependency(reDetail, "RewardItem_ID"); + dmo.OtherRewardDetails.Add(reDetail); } private DQueryDom GetRewardButcherIdDom(long? dmoWeighId) @@ -694,75 +679,66 @@ namespace BWP.B3SheepButcherManage.BL private void AddRewardWithButcher(StatPay dmo, Runner runner, Tuple tuple) { - //var dom = new DQueryDom(new JoinAlias(typeof(Butcher_Detail)));//WeightBill_ID 过磅单号 - //dom.Where.Conditions.Add(DQCondition.EQ("StatPay_ID", dmo.ID)); - //if (GlobalFlags.get(B3ButcherManageConsts.GlobalFlags.StatPayAddRewardWithButcherUseWeight)) - // dom.Columns.Add(DQSelectColumn.Field("Weight")); - //else - // dom.Columns.Add(DQSelectColumn.Field("FinalWeight")); - //dom.Columns.Add(DQSelectColumn.Field("Technics")); - //dom.Columns.Add(DQSelectColumn.Field("WeightBill_ID")); + var dom = new DQueryDom(new JoinAlias(typeof(Butcher_Detail)));//WeightBill_ID 过磅单号 + dom.Where.Conditions.Add(DQCondition.EQ("StatPay_ID", dmo.ID)); + dom.Columns.Add(DQSelectColumn.Field("Weight")); + dom.Columns.Add(DQSelectColumn.Field("WeightBill_ID")); - //var list = new List, NamedValue<工艺>?, long>>(); - //using (var reader = Session.ExecuteReader(dom)) - //{ - // while (reader.Read()) - // { - // var w = (Money?)reader[0]; - // if (w.HasValue) - // list.Add(new Tuple, NamedValue<工艺>?, long>(w.Value, (NamedValue<工艺>?)reader[1], (long)reader[2])); - // } - //} + var list = new List, long>>(); + using (var reader = Session.ExecuteReader(dom)) + { + while (reader.Read()) + { + var w = (Money?)reader[0]; + if (w.HasValue) + list.Add(new Tuple, long>(w.Value, (long)reader[1])); + } + } - //var details = new List(); - //foreach (var w in list) - //{ - // runner.Global["屠宰单结算重"] = w.Item1; - // if (w.Item2.HasValue) - // runner.Global["工艺"] = w.Item2.Value.Name; - // else - // runner.Global["工艺"] = ""; - // runner.Global["屠宰异常单头数"] = 0; - // runner.Global["单价"] = 0m; - // runner.Global["头数"] = 0; - // runner.Global["金额"] = 0m; - // runner.Global["结算奖罚重量"] = 0m; - // var var = new OnLoadVar - // { - // Loader = (() => GetSubWeightByScanId(w.Item3, tuple.Item2)) - // }; - // runner.Global["扣重"] = var; - // runner.Execute(tuple.Item3); - // var price = TypeMarshal.AsNumber(runner.Global["单价"]); - // var number = TypeMarshal.AsNumber(runner.Global["头数"]); - // var money = TypeMarshal.AsNumber(runner.Global["金额"]); - // var rewardWeight = TypeMarshal.AsNumber(runner.Global["结算奖罚重量"]); - // if (money == 0 && rewardWeight == 0) - // { - // continue; - // } + var details = new List(); + foreach (var w in list) + { + runner.Global["屠宰单结算重"] = w.Item1; + runner.Global["屠宰异常单头数"] = 0; + runner.Global["单价"] = 0m; + runner.Global["头数"] = 0; + runner.Global["金额"] = 0m; + runner.Global["结算奖罚重量"] = 0m; + var var = new OnLoadVar + { + Loader = (() => GetSubWeightByScanId(w.Item2, tuple.Item2)) + }; + runner.Global["扣重"] = var; + runner.Execute(tuple.Item3); + var price = TypeMarshal.AsNumber(runner.Global["单价"]); + var number = TypeMarshal.AsNumber(runner.Global["头数"]); + var money = TypeMarshal.AsNumber(runner.Global["金额"]); + var rewardWeight = TypeMarshal.AsNumber(runner.Global["结算奖罚重量"]); + if (money == 0 && rewardWeight == 0) + { + continue; + } - // var detail = new StatPay_OtherReward(); - // detail.Price = price; - // detail.Number = number; - // detail.Money = money; - // detail.Weight = rewardWeight; - // details.Add(detail); - //} - //var groups = details.GroupBy(x => x.Price); - //foreach (var @group in groups) - //{ - // var detail = @group.FirstOrDefault(); - // detail.Sanction_ID = tuple.Item2; - // detail.AbnormalItem_Name = tuple.Item1; - // detail.Price = group.Key; - // detail.Number = group.Sum(x => (x.Number ?? 0).Value); - // detail.Money = group.Sum(x => (x.Money ?? 0).Value); - // detail.Weight = group.Sum(x => (x.Weight ?? 0).Value); - // DmoUtil.RefreshDependency(detail, "Sanction_ID"); - // dmo.OtherRewardDetails.Add(detail); - //} + var detail = new StatPay_OtherReward(); + detail.Price = price; + detail.Number = number; + detail.Money = money; + detail.Weight = rewardWeight; + details.Add(detail); + } + var groups = details.GroupBy(x => x.Price); + foreach (var @group in groups) + { + var detail = @group.FirstOrDefault(); + detail.RewardItem_ID = tuple.Item2; + detail.RewardItem_Name = tuple.Item1; + detail.Price = group.Key; + detail.Number = group.Sum(x => (x.Number ?? 0).Value); + detail.Money = group.Sum(x => (x.Money ?? 0).Value); + detail.Weight = group.Sum(x => (x.Weight ?? 0).Value); + dmo.OtherRewardDetails.Add(detail); + } } private void CancelAllDetails(long statPayID)