diff --git a/B3CowButcherManageToSale/Rpcs/SaleOutStoreRpc.cs b/B3CowButcherManageToSale/Rpcs/SaleOutStoreRpc.cs index 102c248..26558db 100644 --- a/B3CowButcherManageToSale/Rpcs/SaleOutStoreRpc.cs +++ b/B3CowButcherManageToSale/Rpcs/SaleOutStoreRpc.cs @@ -138,6 +138,7 @@ namespace BWP.B3CowButcherManageToSale.Rpcs DeleteByID(session, scans.Select(x=>x.Item1)); var billID = InnerBLUtil.GetDmoPropertyByID(session, typeof(SaleOutStore_Detail), "SaleOutStore_ID", detailId); UpdateAssignNumber(session, billID, detailId, false); + UpdateAssignState(session, billID); var list = scans.Select(x => x.Item2).ToList(); list.Add(packageBarCode); UpdateIsAssignGoods(session, false, null,list.ToArray()); @@ -145,10 +146,81 @@ namespace BWP.B3CowButcherManageToSale.Rpcs } return 1; } - - - static List GetWeightingInforID(IDmoSession session, long detailID, long clientId) + [Rpc] + public static int BatchDeleteAndUpdate(List> tuples) + { + using (var session = Dmo.NewSession()) + { + var list = new List(); + foreach (var tuple in tuples) + { + var weightIDs = GetWeightingInforID(session, tuple.Item2, tuple.Item1); + if (weightIDs.Count > 0) + DeleteByID(session, weightIDs); + var scans = GetScanDetailID(session, tuple.Item2, tuple.Item1); + if (scans.Count > 0) + { + DeleteByID(session, scans.Select(x => x.Item1)); + scans.ForEach(x => list.Add(x.Item2)); + list.Add(tuple.Item3); + } + } + var detailGroups = tuples.GroupBy(x => x.Item2); + foreach (var group in detailGroups) + { + UpdateAssignNumberByDetailID(session, group.Key,group.Count()); + } + UpdateSaleOutStoreInfo(session, tuples[0].Item4); + UpdateIsAssignGoods(session, false, null, list.ToArray()); + session.Commit(); + } + return 1; + } + + private static void UpdateAssignNumberByDetailID(IDmoSession session, long detailID,int packageNum) + { + var weightingInfo = GetWeightingInfor(session, detailID); + var update = new DQUpdateDom(typeof(SaleOutStore_Detail)); + update.Columns.Add(new DQUpdateColumn("AssignUnitNum", DQExpression.Value(weightingInfo.Item1))); + update.Columns.Add(new DQUpdateColumn("AssignMainUnitNum", DQExpression.Value(weightingInfo.Item1))); + update.Columns.Add(new DQUpdateColumn("AssignSecondaryUnit1Num", DQExpression.Value(weightingInfo.Item2))); + update.Columns.Add(new DQUpdateColumn("PackageNum", DQExpression.Subtract(DQExpression.IfNull(DQExpression.Field("PackageNum"), DQExpression.Value(0)), DQExpression.Value(packageNum)))); + update.Where.Conditions.Add(DQCondition.EQ("ID", detailID)); + session.ExecuteNonQuery(update); + } + + private static void UpdateSaleOutStoreInfo(IDmoSession session, long id) + { + UpdateAssignState(session, id); + var update2 = new DQUpdateDom(typeof(SaleOutStore)); + update2.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1)))); + update2.Where.Conditions.Add(DQCondition.EQ("ID", id)); + session.ExecuteNonQuery(update2); + } + + private static void UpdateAssignState(IDmoSession session, long id) + { + var query = new DQueryDom(new JoinAlias(typeof(SaleOutStore_Detail))); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("AssignUnitNum", 0)); + query.Where.Conditions.Add(DQCondition.EQ("SaleOutStore_ID", id)); + var outId = (long?)session.ExecuteScalar(query); + var assigning = true; + if (outId == null || outId == 0) + { + assigning = false; + } + if (!assigning) + { + var update = new DQUpdateDom(typeof(SaleOutStore)); + update.Columns.Add(new DQUpdateColumn("AssignState", DQExpression.Value(配货状态.未配货))); + update.Where.Conditions.Add(DQCondition.EQ("ID", id)); + session.ExecuteNonQuery(update); + } + } + + static List GetWeightingInforID(IDmoSession session, long detailID, long clientId) { var query = new DQueryDom(new JoinAlias(typeof(WeightingInfor))); query.Columns.Add(DQSelectColumn.Field("ID")); @@ -175,23 +247,27 @@ namespace BWP.B3CowButcherManageToSale.Rpcs private static Tuple?, Money?> UpdateAssignNumber(IDmoSession session, long billID, long detailID, bool isAdd = true) { var weightingInfo = GetWeightingInfor(session, detailID); - var assigning = true; - if (weightingInfo.Item1 == null || weightingInfo.Item1 <= 0) - assigning = false; var update = new DQUpdateDom(typeof(SaleOutStore_Detail)); update.Columns.Add(new DQUpdateColumn("AssignUnitNum", DQExpression.Value(weightingInfo.Item1))); update.Columns.Add(new DQUpdateColumn("AssignMainUnitNum", DQExpression.Value(weightingInfo.Item1))); update.Columns.Add(new DQUpdateColumn("AssignSecondaryUnit1Num", DQExpression.Value(weightingInfo.Item2))); if (isAdd) + { update.Columns.Add(new DQUpdateColumn("PackageNum", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("PackageNum"), DQExpression.Value(0)), DQExpression.Value(1)))); + } else + { update.Columns.Add(new DQUpdateColumn("PackageNum", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("PackageNum"), DQExpression.Value(0)), DQExpression.Value(-1)))); + } update.Where.Conditions.Add(DQCondition.EQ("ID", detailID)); session.ExecuteNonQuery(update); var update2 = new DQUpdateDom(typeof(SaleOutStore)); update2.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1)))); - update2.Columns.Add(new DQUpdateColumn("AssignState", assigning ? DQExpression.Value(配货状态.正在配货) : DQExpression.Value(配货状态.未配货))); + if (isAdd) + { + update2.Columns.Add(new DQUpdateColumn("AssignState", 配货状态.正在配货)); + } update2.Where.Conditions.Add(DQCondition.EQ("ID", billID)); session.ExecuteNonQuery(update2); return weightingInfo; diff --git a/B3CowButcherManageToSale/TypeIOCs/SaleOutStoreBLTypeIoc.cs b/B3CowButcherManageToSale/TypeIOCs/SaleOutStoreBLTypeIoc.cs index 105f4d1..6a05da7 100644 --- a/B3CowButcherManageToSale/TypeIOCs/SaleOutStoreBLTypeIoc.cs +++ b/B3CowButcherManageToSale/TypeIOCs/SaleOutStoreBLTypeIoc.cs @@ -180,4 +180,6 @@ namespace BWP.B3CowButcherManageToSale.TypeIOCs get { return string.Format("销售出库单No.{0}撤销清空条码销售信息到屠宰系统", BillID); } } } + + }