diff --git a/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs b/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs index c6b96d5..e6388cd 100644 --- a/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/HouseAndSanctionRpc.cs @@ -20,31 +20,20 @@ namespace BWP.B3ClientService.Rpcs.BillRpc { static JavaScriptSerializer serializer = new JavaScriptSerializer(); - /* - * //原型 - SELECT w2.id, w1.* FROM B3ClientService_WeightBill w1, (   - -SELECT TOP 100 row_number() OVER (order by (case when Remark is null or Remark='' then 0 else 1 end),ID) n, ID FROM B3ClientService_WeightBill ) w2 WHERE w1.ID = w2.ID AND w2.n > 90 ORDER BY w2.n ASC - - */ [Rpc] - public static string GetHouseAndSanctionList(DateTime date, int pageSize, int pageNumber) + public static string GetHouseAndSanctionList(DateTime date) { - var temp = new JoinAlias(typeof(OrderTemp)); - var query = new DQueryDom(temp); - OrderTemp.Register(query, date, pageSize * pageNumber); - var main = new JoinAlias(typeof(WeightBill)); var detail = new JoinAlias(typeof(WeightBill_Detail)); - query.From.AddJoin(JoinType.Left, new DQDmoSource(main), DQCondition.EQ(temp, "ID", main, "ID")); + var query = new DQueryDom(main); query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.And(DQCondition.EQ(detail, "DeleteState", false), DQCondition.EQ(main, "ID", detail, "WeightBill_ID"))); - query.Columns.Add(DQSelectColumn.Field("ID", main)); - query.Columns.Add(DQSelectColumn.Field("B3ID", main)); - query.Columns.Add(DQSelectColumn.Field("Employee_Name", main)); - query.Columns.Add(DQSelectColumn.Field("Supplier_Name", main)); - query.Columns.Add(DQSelectColumn.Field("HouseNames", main)); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("B3ID")); + query.Columns.Add(DQSelectColumn.Field("Employee_Name")); + query.Columns.Add(DQSelectColumn.Field("Supplier_Name")); + query.Columns.Add(DQSelectColumn.Field("HouseNames")); query.Columns.Add(DQSelectColumn.Field("Number", detail)); - query.Where.Conditions.Add(DQCondition.GreaterThan(temp, "RowNumber", pageSize * (pageNumber - 1))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("WeighTime", date, date + new TimeSpan(23, 59, 29)), DQCondition.EQ("DeleteState", false))); var list = new List(); using (var session = Dmo.NewSession()) { @@ -66,36 +55,6 @@ SELECT TOP 100 row_number() OVER (order by (case when Remark is null or Remark=' return serializer.Serialize(list); } - class OrderTemp - { - public int RowNumber { get; set; } - - public long ID { get; set; } - - public static void Register(DQueryDom root, DateTime date, int total) - { - var query = new DQueryDom(new JoinAlias("_pageTemp", typeof(WeightBill))); - query.Range = SelectRange.Top(total); - query.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("row_number() OVER (order by (case when [_pageTemp].[HouseNames] is null or [_pageTemp].[HouseNames]='' then 0 else 1 end),[_pageTemp].[ID])"), "RowNumber")); - query.Columns.Add(DQSelectColumn.Field("ID")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("WeighTime", date, date + new TimeSpan(23, 59, 29)), DQCondition.EQ("DeleteState", false))); - root.RegisterQueryTable(typeof(OrderTemp), new string[] { "RowNumber", "ID" }, query); - } - } - - [Rpc] - public static int GetMaxPageNumber(DateTime date, int pageSize) - { - var query = new DQueryDom(new JoinAlias(typeof(WeightBill))); - query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("WeighTime", date, date + new TimeSpan(23, 59, 29)), DQCondition.EQ("DeleteState", false))); - query.Columns.Add(DQSelectColumn.Count()); - var total = Convert.ToInt32(query.EExecuteScalar()); - var maxPageSize = total / pageSize; - if (total % pageSize != 0) - maxPageSize += 1; - return maxPageSize; - } - [Rpc] public static int GetDetailTotalNumber(DateTime date) { diff --git a/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs index 89e8923..cf1c65c 100644 --- a/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs @@ -1,5 +1,6 @@ using BWP.B3ClientService.BO; using BWP.B3ClientService.RpcBO; +using BWP.B3Frameworks.Utils; using Forks.EnterpriseServices.DomainObjects2; using Forks.EnterpriseServices.DomainObjects2.DQuery; using Forks.EnterpriseServices.JsonRpc; @@ -111,23 +112,12 @@ namespace BWP.B3ClientService.Rpcs.BillRpc } [Rpc] - public static string GetBackWeightBillInfo(long weightID, long backId) + public static int GetLastNumber(long weightID, long backId) { - var query = new DQueryDom(new JoinAlias(typeof(WeightBill))); - query.Columns.Add(DQSelectColumn.Field("Supplier_Name")); - query.Columns.Add(DQSelectColumn.Field("HouseNames")); - query.Columns.Add(DQSelectColumn.Field("WeighTime")); - query.Where.Conditions.Add(DQCondition.EQ("ID", weightID)); - var result = query.EExecuteScalar(); - var entity = new NeedOrderEntity(); - entity.WeightBill_ID = weightID; - entity.Supplier_Name = result.Item1; - entity.HouseNames = result.Item2; - entity.WeighTime = result.Item3; - entity.Number = GetWeightNumber(weightID); - entity.AlreadyNumber = GetAlreadyNumberWithoutBack(weightID, backId); + var totalNumber = GetWeightNumber(weightID); + var alreadyNumber = GetAlreadyNumberWithoutBack(weightID, backId); - return serializer.Serialize(entity); + return totalNumber - alreadyNumber; } static int GetWeightNumber(long wid) @@ -141,10 +131,10 @@ namespace BWP.B3ClientService.Rpcs.BillRpc return 0; } - static int GetAlreadyNumberWithoutBack(long wid, long bid) + static int GetAlreadyNumberWithoutBack(long wid, long oid) { var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("WeightBill_ID", wid), DQCondition.InEQ("ID", bid))); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("WeightBill_ID", wid), DQCondition.InEQ("ID", oid))); query.Columns.Add(DQSelectColumn.Sum("PlanNumber")); var rst = query.EExecuteScalar(); if (rst != null) @@ -153,21 +143,19 @@ namespace BWP.B3ClientService.Rpcs.BillRpc } [Rpc] - public static string GetOrderDetail(DateTime date, int pageSize, int pageNumber) + public static string GetOrderDetail(DateTime date, int? minOrder) { - var temp = new JoinAlias(typeof(OrderTemp)); - var query = new DQueryDom(temp); - OrderTemp.Register(query, date, pageSize * pageNumber); - var alias = new JoinAlias(typeof(OrderDetail)); - query.From.AddJoin(JoinType.Left, new DQDmoSource(alias), DQCondition.EQ(temp, "ID", alias, "ID")); - query.Columns.Add(DQSelectColumn.Field("ID", alias)); - query.Columns.Add(DQSelectColumn.Field("WeightBill_ID", alias)); - query.Columns.Add(DQSelectColumn.Field("Order", alias)); - query.Columns.Add(DQSelectColumn.Field("PlanNumber", alias)); - query.Columns.Add(DQSelectColumn.Field("LiveColonyHouse_Name", alias)); - query.Columns.Add(DQSelectColumn.Field("IsHurryButcher", alias)); - query.Columns.Add(DQSelectColumn.Field("B3WeighBill_ID", alias)); - query.Where.Conditions.Add(DQCondition.GreaterThan(temp, "RowNumber", pageSize * (pageNumber - 1))); + var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("WeightBill_ID")); + query.Columns.Add(DQSelectColumn.Field("Order")); + query.Columns.Add(DQSelectColumn.Field("PlanNumber")); + query.Columns.Add(DQSelectColumn.Field("LiveColonyHouse_Name")); + query.Columns.Add(DQSelectColumn.Field("IsHurryButcher")); + query.Columns.Add(DQSelectColumn.Field("B3WeighBill_ID")); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("SecondarySplit", false))); + if (minOrder.HasValue) + query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("Order", minOrder)); var list = new List(); using (var session = Dmo.NewSession()) { @@ -190,56 +178,33 @@ namespace BWP.B3ClientService.Rpcs.BillRpc return serializer.Serialize(list); } - class OrderTemp - { - public int RowNumber { get; set; } - - public long ID { get; set; } - - public static void Register(DQueryDom root, DateTime date, int total) - { - var query = new DQueryDom(new JoinAlias("_pageTemp", typeof(OrderDetail))); - query.Range = SelectRange.Top(total); - query.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet("row_number() OVER (order by [_pageTemp].[Order] desc)"), "RowNumber")); - query.Columns.Add(DQSelectColumn.Field("ID")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("SecondarySplit", false))); - root.RegisterQueryTable(typeof(OrderTemp), new string[] { "RowNumber", "ID" }, query); - } - } - [Rpc] - public static int GetMaxPageNumber(DateTime date, int pageSize) + public static int GetMaxOrder(DateTime date) { var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); - query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("SecondarySplit", false))); - query.Columns.Add(DQSelectColumn.Count()); - var total = Convert.ToInt32(query.EExecuteScalar()); - var maxPageSize = total / pageSize; - if (total % pageSize != 0) - maxPageSize += 1; - return maxPageSize; + query.Columns.Add(DQSelectColumn.Max("Order")); + query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("Date", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.EQ("DeleteState", false))); + return query.EExecuteScalar() ?? 0; } [Rpc] - public static int GetMaxOrder(DateTime date) + public static int GetCurrentOrder(long id) { var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); - query.Columns.Add(DQSelectColumn.Max("Order")); - query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("Date", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.EQ("DeleteState", false))); - return query.EExecuteScalar() ?? 0; + query.Columns.Add(DQSelectColumn.Field("Order")); + query.Where.Conditions.Add(DQCondition.EQ("ID", id)); + return query.EExecuteScalar(); } [Rpc] - public static long Insert(string update, string insert) + public static long Insert(string insert) { - var list = serializer.Deserialize>>(update); insert = insert.ESerializeDateTime(); var entity = serializer.Deserialize(insert); entity.ModifyTime = DateTime.Now; using (var session = Dmo.NewSession()) { - foreach (var item in list) - UpdateOrderDetailPartial(session, item.Item1, "Order", item.Item2); + UpdateOrder(session, entity.Order - 1, 1, entity.Date); session.Insert(entity); session.Commit(); } @@ -268,13 +233,12 @@ namespace BWP.B3ClientService.Rpcs.BillRpc } [Rpc] - public static int Delete(string update, long id) + public static int Delete(long id) { - var list = serializer.Deserialize>>(update); using (var session = Dmo.NewSession()) { - foreach (var item in list) - UpdateOrderDetailPartial(session, item.Item1, "Order", item.Item2); + var entity = InnerBLUtil.GetSingleDmo(session, "ID", id, "Order", "Date"); + UpdateOrder(session, entity.Order, -1, entity.Date); UpdateOrderDetailPartial(session, id, "DeleteState", true); session.Commit(); } @@ -294,5 +258,15 @@ namespace BWP.B3ClientService.Rpcs.BillRpc } return 1; } + + static void UpdateOrder(IDmoSession session, int greaterThanOrder, int offset, DateTime? date) + { + var update = new DQUpdateDom(typeof(OrderDetail)); + update.Columns.Add(new DQUpdateColumn("Order", DQExpression.Add(DQExpression.Field("Order"), DQExpression.Value(offset)))); + update.Columns.Add(new DQUpdateColumn("Sync", false)); + update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now)); + update.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThan("Order", greaterThanOrder), DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("SecondarySplit", false))); + session.ExecuteNonQuery(update); + } } } diff --git a/B3ClientService/Tasks/UpdateLoad/UploadOrderDetail.cs b/B3ClientService/Tasks/UpdateLoad/UploadOrderDetail.cs index cad8bd6..31018f5 100644 --- a/B3ClientService/Tasks/UpdateLoad/UploadOrderDetail.cs +++ b/B3ClientService/Tasks/UpdateLoad/UploadOrderDetail.cs @@ -68,6 +68,7 @@ namespace BWP.B3ClientService.Tasks.UpdateLoad { Update(item, context.Session); } + SetAllItemAsSync(context.Session, group.Select(x => DQExpression.Value(x.ID))); #endregion context.Commit(); @@ -104,9 +105,16 @@ namespace BWP.B3ClientService.Tasks.UpdateLoad var update = new DQUpdateDom(typeof(OrderDetail)); update.Columns.Add(new DQUpdateColumn("B3ID", item.Item2)); update.Columns.Add(new DQUpdateColumn("B3MainID", item.Item3)); - update.Columns.Add(new DQUpdateColumn("Sync", true)); update.Where.Conditions.Add(DQCondition.EQ("ID", item.Item1)); session.ExecuteNonQuery(update); } + + static void SetAllItemAsSync(IDmoSession session, IEnumerable ids) + { + var update = new DQUpdateDom(typeof(OrderDetail)); + update.Columns.Add(new DQUpdateColumn("Sync", true)); + update.Where.Conditions.Add(DQCondition.InList(DQExpression.Field("ID"), ids.ToArray())); + session.ExecuteNonQuery(update); + } } }