diff --git a/B3ClientService/Rpcs/BillRpc/DropPigRpc.cs b/B3ClientService/Rpcs/BillRpc/DropPigRpc.cs index ad14f43..92785ba 100644 --- a/B3ClientService/Rpcs/BillRpc/DropPigRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/DropPigRpc.cs @@ -1,4 +1,5 @@ using BWP.B3ClientService.BO; +using BWP.B3Frameworks.Utils; using Forks.EnterpriseServices.DomainObjects2; using Forks.EnterpriseServices.DomainObjects2.DQuery; using Forks.EnterpriseServices.JsonRpc; @@ -8,6 +9,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.Script.Serialization; +using TSingSoft.WebPluginFramework; namespace BWP.B3ClientService.Rpcs.BillRpc { @@ -50,5 +52,117 @@ namespace BWP.B3ClientService.Rpcs.BillRpc return serializer.Serialize(list); } + + [Rpc] + public static int InsertDropPig(long orderId, int number, short type) + { + using (var session = Dmo.NewSession()) + { + SubtractPlanNumber(session, orderId, number); + SubtractHotFadeNumber(session, orderId, number, type); + return InsertNewOrder(session, orderId, number, type); + } + } + + static void SubtractPlanNumber(IDmoSession session, long id, int number) + { + var update = new DQUpdateDom(typeof(OrderDetail)); + update.Columns.Add(new DQUpdateColumn("PlanNumber", DQExpression.Subtract(DQExpression.Field("PlanNumber"), DQExpression.Value(number)))); + update.Columns.Add(new DQUpdateColumn("Sync", false)); + update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now)); + update.Where.Conditions.Add(DQCondition.EQ("ID", id)); + session.ExecuteNonQuery(update); + } + + static void SubtractHotFadeNumber(IDmoSession session, long orderID, int number, short type) + { + var info = GetSecondOrderInfo(session, orderID); + if (type == 0) + { + if (info == null) + throw new Exception("没有烫褪头数"); + else if (info.Item3 < number) + throw new Exception("烫褪头数不足"); + var update = new DQUpdateDom(typeof(SecondOrder)); + update.Columns.Add(new DQUpdateColumn("HotFadeNumber", DQExpression.Subtract(DQExpression.Field("HotFadeNumber"), DQExpression.Value(number)))); + update.Columns.Add(new DQUpdateColumn("Sync", false)); + update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now)); + update.Where.Conditions.Add(DQCondition.EQ("ID", info.Item1.Value)); + session.ExecuteNonQuery(update); + var iDetail = new SecondOrder_Detail(); + iDetail.Number = -number; + iDetail.SecondOrder_ID = info.Item1.Value; + iDetail.Time = DateTime.Now; + session.Insert(iDetail); + } + else + { + var mao = 0; + if (info == null) + mao = InnerBLUtil.GetDmoPropertyByID(session, typeof(SecondOrder), "PlanNumber", orderID); + else + mao = info.Item2.Value - info.Item3.Value; + if (mao < number) + throw new Exception("毛剥头数不足"); + } + } + + static Tuple GetSecondOrderInfo(IDmoSession session, long orderID) + { + var query = new DQueryDom(new JoinAlias(typeof(SecondOrder))); + query.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderID)); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("PlanNumber")); + query.Columns.Add(DQSelectColumn.Field("HotFadeNumber")); + return query.EExecuteScalar(session); + } + + static int InsertNewOrder(IDmoSession session, long orderID, int number, short type) + { + var order = InnerBLUtil.GetSingleDmo(session, new Tuple("ID", orderID)); + var nOrder = new OrderDetail(); + DmoUtil.CopyDmoFields(order, nOrder, "B3MainID", "Order", "PlanNumber", "SecondarySplit", "OrderState", "IsDrop", "B3ID", "Sync", "ModifyTime", "ID"); + nOrder.Order = GetMaxOrder(nOrder.Date.Value) + 1; + nOrder.PlanNumber = number; + nOrder.SecondarySplit = true; + nOrder.OrderState = 20; + nOrder.IsDrop = true; + nOrder.ModifyTime = DateTime.Now; + session.Insert(nOrder); + + var sOrder = new SecondOrder(); + sOrder.Sync = false; + sOrder.ModifyTime = DateTime.Now; + sOrder.OrderDetail_ID = nOrder.ID; + sOrder.HotFadeNumber = type == 0 ? number : 0; + sOrder.IsOk = true; + sOrder.Finish = true; + sOrder.FinishGrade = true; + session.Insert(sOrder); + if (type == 0) + { + var detail = new SecondOrder_Detail(); + detail.Number = number; + detail.SecondOrder_ID = sOrder.ID; + detail.Time = DateTime.Now; + session.Insert(detail); + } + return nOrder.Order; + } + + static int GetMaxOrder(DateTime date) + { + var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); + query.Columns.Add(DQSelectColumn.Field("IsDrop")); + query.Columns.Add(DQSelectColumn.Max("Order")); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false))); + query.GroupBy.Expressions.Add(DQExpression.Field("IsDrop")); + var r = query.EExecuteList(); + var first = r.FirstOrDefault(x => x.Item1); + if (first == null) + return r.First().Item2; + else + return first.Item2; + } } } diff --git a/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc.cs b/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc.cs index 610ae14..b244630 100644 --- a/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc.cs @@ -35,7 +35,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc query.Columns.Add(DQSelectColumn.Field("Already", relate)); query.Columns.Add(DQSelectColumn.Field("Finish", relate)); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("IsOk", true), DQCondition.EQ(order, "DeleteState", false), DQCondition.EQ(order, "Date", date))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("IsOk", true), DQCondition.EQ(order, "DeleteState", false), DQCondition.EQ(order, "Date", date), DQCondition.EQ(order, "IsDrop", false))); var list = new List(); using (var session = Dmo.NewSession()) { diff --git a/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs index 647fdbe..f946806 100644 --- a/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs @@ -172,7 +172,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc query.Columns.Add(DQSelectColumn.Field("Supplier_Name")); query.Columns.Add(DQSelectColumn.Field("OrderState")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("IsDrop", false))); var list = new List(); using (var session = Dmo.NewSession()) { @@ -204,7 +204,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc { var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); query.Columns.Add(DQSelectColumn.Max("Order")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date.Date), DQCondition.EQ("DeleteState", false))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date.Date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("IsDrop", false))); return query.EExecuteScalar() ?? 0; } @@ -249,7 +249,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); query.Range = SelectRange.Top(1); query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "c")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.GreaterThanOrEqual("OrderState", 10), DQCondition.GreaterThanOrEqual("Order", order))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.GreaterThanOrEqual("OrderState", 10), DQCondition.GreaterThanOrEqual("Order", order), DQCondition.EQ("IsDrop", false))); if (query.EExecuteScalar(session) != null) throw new Exception("不允许插入到已进行烫毛计数顺序之前"); } @@ -390,7 +390,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc var hurry = GetHurryRecordNumber(weightBillId); query.Columns.Add(DQSelectColumn.Field("ID", order)); query.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.IfNull(DQExpression.Field(detail, "Number"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(order, "PlanNumber"), DQExpression.Value(0))), "last")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "DeleteState", false), DQCondition.EQ(order, "DeleteState", false), DQCondition.EQ(order, "IsHurryButcher", false), DQCondition.EQ(detail, "WeightBill_ID", weightBillId))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "DeleteState", false), DQCondition.EQ(order, "DeleteState", false), DQCondition.EQ(order, "IsHurryButcher", false), DQCondition.EQ("IsDrop", false), DQCondition.EQ(detail, "WeightBill_ID", weightBillId))); long? id = null; using (var session = Dmo.NewSession()) { diff --git a/B3ClientService/Rpcs/RpcBO/Bill/OrderDetail/SOrderDetail.cs b/B3ClientService/Rpcs/RpcBO/Bill/OrderDetail/SOrderDetail.cs index a91b25b..e34d121 100644 --- a/B3ClientService/Rpcs/RpcBO/Bill/OrderDetail/SOrderDetail.cs +++ b/B3ClientService/Rpcs/RpcBO/Bill/OrderDetail/SOrderDetail.cs @@ -23,5 +23,7 @@ namespace BWP.B3ClientService.RpcBO public string LiveColonyHouse_Name { get; set; } public bool IsHurryButcher { get; set; } + + public bool IsDrop { get; set; } } }