diff --git a/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs b/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs index 79b5e68..272212f 100644 --- a/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs +++ b/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs @@ -30,6 +30,8 @@ namespace BWP.B3ClientService.BO public int PlanNumber { get; set; } + [ReferenceTo(typeof(WeightBill), "HouseNames")] + [Join("WeightBill_ID", "ID")] public string LiveColonyHouse_Name { get; set; } public bool IsHurryButcher { get; set; } diff --git a/B3ClientService/ClientServiceUtils.cs b/B3ClientService/ClientServiceUtils.cs index df92ebf..a08ad17 100644 --- a/B3ClientService/ClientServiceUtils.cs +++ b/B3ClientService/ClientServiceUtils.cs @@ -31,7 +31,8 @@ namespace BWP.B3ClientService return Exist("ID", id); } - public static bool Exist(string field, object value) + public static bool Exist(string field, object value) + where T : SyncBase { var query = new DQueryDom(new JoinAlias(typeof(T))); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(field, value), DQCondition.EQ("DeleteState", false))); diff --git a/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs b/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs index 1d17769..18edd0e 100644 --- a/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs @@ -97,7 +97,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc } [Rpc] - public static int UpdateInsertHouseAndSanction(string json) + public static bool UpdateInsertHouseAndSanction(string json) { var entity = serializer.Deserialize(json); var exist = ClientServiceUtils.Exist(entity.ID); @@ -106,6 +106,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc var detailExist = ClientServiceUtils.Exist("WeightBill_ID", entity.ID); if (!detailExist) throw new Exception("过磅记录已被删除,提交失败!"); + bool multilOrder = false; using (var session = Dmo.NewSession()) { //为了节省ID,把传过来的通过栋舍匹配,并到原有明细里。然后从新的集合里把上传的集合里不存在的剔除掉 @@ -167,11 +168,9 @@ namespace BWP.B3ClientService.Rpcs.BillRpc dom.Where.Conditions.Add(DQCondition.InList(DQExpression.Field("Sanction_ID"), delete.Select(x => DQExpression.Value(x)).ToArray())); }); } - - var dUpdate = new DQUpdateDom(typeof(WeightBill_Detail)); - dUpdate.Columns.Add(new DQUpdateColumn("Number", entity.Number)); - dUpdate.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("WeightBill_ID", entity.ID), DQCondition.EQ("DeleteState", false))); - session.ExecuteNonQuery(dUpdate); + int oldNumber; + UpdateWeightNumber(session, entity.ID, entity.Number.Value, out oldNumber); + multilOrder = UpdateOrderNumber(session, entity.ID, entity.Number.Value, oldNumber); var update = new DQUpdateDom(typeof(WeightBill)); update.Columns.Add(new DQUpdateColumn("HogGrade_ID", entity.HogGrade_ID)); @@ -186,7 +185,66 @@ namespace BWP.B3ClientService.Rpcs.BillRpc session.ExecuteNonQuery(update); session.Commit(); } - return 1; + return multilOrder; + } + + static void UpdateWeightNumber(IDmoSession session, long weightID, int number, out int oldNumber) + { + var query = new DQueryDom(new JoinAlias(typeof(WeightBill_Detail))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("WeightBill_ID", weightID), DQCondition.EQ("DeleteState", false))); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("Number")); + query.Range = SelectRange.Top(1); + var r = query.EExecuteScalar(); + oldNumber = r.Item2 ?? 0; + + if (number == oldNumber) + return; + + var dUpdate = new DQUpdateDom(typeof(WeightBill_Detail)); + dUpdate.Columns.Add(new DQUpdateColumn("Number", number)); + dUpdate.Where.Conditions.Add(DQCondition.EQ("ID", r.Item1)); + session.ExecuteNonQuery(dUpdate); + } + + static bool UpdateOrderNumber(IDmoSession session, long weightID, int newNumber, int oldNumber) + { + if (newNumber == oldNumber) + return false; + var unOrderNumber = HurryRecordUnOrderNumber(session, weightID); + + var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("WeightBill_ID", weightID), DQCondition.EQ("DeleteState", false)));//, DQCondition.EQ("IsHurryButcher", false), DQCondition.EQ("IsDrop", false) + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("PlanNumber")); + query.Columns.Add(DQSelectColumn.Field("IsHurryButcher")); + query.Columns.Add(DQSelectColumn.Field("IsDrop")); + var order = query.EExecuteList(session); + if (order.Count == 0) + return false; + var tags = order.Where(x => !x.Item3 && !x.Item4); + if (tags.Count() == 0) + return false; + if (tags.Count() > 1) + return true; + else if (oldNumber - unOrderNumber - order.Sum(x => x.Item2) > 0) + return true; + var update = new DQUpdateDom(typeof(OrderDetail)); + update.Where.Conditions.Add(DQCondition.EQ("ID", tags.First().Item1)); + update.Columns.Add(new DQUpdateColumn("PlanNumber", DQExpression.Add(DQExpression.Field("PlanNumber"), DQExpression.Value(newNumber - oldNumber)))); + session.ExecuteNonQuery(update); + return false; + } + + static int HurryRecordUnOrderNumber(IDmoSession session, long wid) + { + var query = new DQueryDom(new JoinAlias(typeof(HurryRecord))); + query.Columns.Add(DQSelectColumn.Sum("HurryNumber")); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("WeightBill_ID", wid), DQCondition.IsNull(DQExpression.Field("ToOrderDetail_ID")))); + var rst = query.EExecuteScalar(session); + if (rst != null) + return Convert.ToInt32(rst); + return 0; } static List GetList(long billID)