diff --git a/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs index 6fcb5fd..c42f79a 100644 --- a/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs @@ -506,21 +506,85 @@ namespace BWP.B3ClientService.Rpcs.BillRpc throw new Exception(string.Format("错误的状态输入 {0}", state)); using (var session = Dmo.NewSession()) { + var orderInfo = InnerBLUtil.GetSingleDmo(session, "ID", id, "Technics", "PlanNumber"); + orderInfo.ID = id; + var update = new DQUpdateDom(typeof(OrderDetail)); update.Columns.Add(new DQUpdateColumn("OrderState", state)); - update.Where.Conditions.Add(DQCondition.EQ("ID", id)); - session.ExecuteNonQuery(update); - if (state == 20) + if (orderInfo.Technics.HasValue) { - var orderInfo = InnerBLUtil.GetSingleDmo(session, "ID", id, "Technics", "PlanNumber"); - orderInfo.ID = id; - SecondOrderRpc.OffLineCreateSecondOrder(session, orderInfo); + if (state == 0) + update.Columns.Add(new DQUpdateColumn("SecondarySplit", false)); + else + update.Columns.Add(new DQUpdateColumn("SecondarySplit", true)); } + update.Where.Conditions.Add(DQCondition.EQ("ID", id)); + session.ExecuteNonQuery(update); + if (orderInfo.Technics.HasValue) + OffLineCreateSecondOrder(session, orderInfo, state); session.Commit(); } return 1; } + static void OffLineCreateSecondOrder(IDmoSession session, OrderDetail detail, int state) + { + var secondOrderID = GetSecondOrderID(session, detail.ID); + if (state == 0) + DeleteSecondOrder(session, secondOrderID, detail.ID); + else + { + if (secondOrderID.HasValue) + return; + var second = new SecondOrder(); + second.ModifyTime = DateTime.Now; + second.IsOk = true; + second.Finish = true; + second.OrderDetail_ID = detail.ID; + second.HotFadeNumber = detail.Technics == 0 ? detail.PlanNumber : 0; + session.Insert(second); + if (second.HotFadeNumber != 0) + return; + var sDetail = new SecondOrder_Detail(); + sDetail.Number = second.HotFadeNumber; + sDetail.SecondOrder_ID = second.ID; + sDetail.Time = DateTime.Now; + session.Insert(sDetail); + } + } + + private static void DeleteSecondOrder(IDmoSession session, long? secondOrderID, long orderID) + { + if (secondOrderID == null) + return; + BeforeDeleteSecondOrder(session, orderID); + var delete = new DQDeleteDom(typeof(SecondOrder)); + delete.Where.Conditions.Add(DQCondition.EQ("ID", secondOrderID)); + session.ExecuteNonQuery(delete); + + var delete2 = new DQDeleteDom(typeof(SecondOrder_Detail)); + delete2.Where.Conditions.Add(DQCondition.EQ("SecondOrder_ID", secondOrderID)); + session.ExecuteNonQuery(delete2); + } + + static void BeforeDeleteSecondOrder(IDmoSession session, long orderID) + { + var q = new DQueryDom(new JoinAlias(typeof(GradeAndWeight_Detail))); + q.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderID)); + q.Columns.Add(DQSelectColumn.Field("ID")); + q.Range = SelectRange.Top(1); + if (q.EExecuteScalar() != null) + throw new Exception("已经开始胴体称重定级,无法取消"); + } + + private static long? GetSecondOrderID(IDmoSession session, long orderDetailID) + { + var query = new DQueryDom(new JoinAlias(typeof(SecondOrder))); + query.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderDetailID)); + query.Columns.Add(DQSelectColumn.Field("ID")); + return query.EExecuteScalar(session); + } + [Rpc] public static long InsertByHurryRecord(string insert, long hurryID) { diff --git a/B3ClientService/Rpcs/BillRpc/SecondOrderRpc.cs b/B3ClientService/Rpcs/BillRpc/SecondOrderRpc.cs index 3db4229..1836bd2 100644 --- a/B3ClientService/Rpcs/BillRpc/SecondOrderRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/SecondOrderRpc.cs @@ -148,25 +148,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc session.Commit(); } return id; - } - - public static void OffLineCreateSecondOrder(IDmoSession session, OrderDetail detail) - { - var second = new SecondOrder(); - second.ModifyTime = DateTime.Now; - second.IsOk = true; - second.Finish = true; - second.OrderDetail_ID = detail.ID; - second.HotFadeNumber = detail.Technics == 0 ? detail.PlanNumber : 0; - session.Insert(second); - if (second.HotFadeNumber != 0) - return; - var sDetail = new SecondOrder_Detail(); - sDetail.Number = second.HotFadeNumber; - sDetail.SecondOrder_ID = second.ID; - sDetail.Time = DateTime.Now; - session.Insert(sDetail); - } + } [Rpc] public static string GetSecondOrderDetails(long id)