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; using Forks.EnterpriseServices.SqlDoms; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; using TSingSoft.WebPluginFramework; namespace BWP.B3ClientService.Rpcs.BillRpc { [Rpc] public static class OrderDetailRpc { static JavaScriptSerializer serializer = new JavaScriptSerializer(); #region 排宰 [Rpc] public static string GetNeedOrderWeightBill(DateTime date, bool? showType) { var main = new JoinAlias(typeof(WeightBill)); var detail = new JoinAlias(typeof(WeightBill_Detail)); var relate = new JoinAlias(typeof(WeightBillShowRelate)); var query = new DQueryDom(main); query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.And(DQCondition.EQ(main, "ID", detail, "WeightBill_ID"), DQCondition.EQ(detail, "DeleteState", false))); query.From.AddJoin(JoinType.Left, new DQDmoSource(relate), DQCondition.EQ(main, "ID", relate, "WeightBill_ID")); var already = OrderDetailTemp.Register(query, main); var hurry = HurryOrderTemp.Register(query, main, true); query.Columns.Add(DQSelectColumn.Field("ID")); query.Columns.Add(DQSelectColumn.Field("Supplier_Name")); query.Columns.Add(DQSelectColumn.Field("HouseNames")); query.Columns.Add(DQSelectColumn.Field("Number", detail)); var alreadyNumber = DQExpression.Add(DQExpression.IfNull(DQExpression.Field(already, "Number"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(hurry, "Number"), DQExpression.Value(0))); query.Columns.Add(DQSelectColumn.Create(alreadyNumber, "Already")); query.Columns.Add(DQSelectColumn.Field("WeighTime")); query.Columns.Add(DQSelectColumn.Field("B3ID")); query.Columns.Add(DQSelectColumn.Field("Show", relate)); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.Between("WeighTime", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.InEQ("HouseNames", ""))); query.Where.Conditions.Add(DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field(detail, "Number"), DQExpression.Value(0)), alreadyNumber)); if (showType == true) query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(relate, "Show")), DQCondition.EQ(relate, "Show", true))); else if (showType == false) query.Where.Conditions.Add(DQCondition.EQ(relate, "Show", false)); var result = new List(); using (var session = Dmo.NewSession()) { using (var reader = session.ExecuteReader(query)) { while (reader.Read()) { var item = new NeedOrderEntity(); item.WeightBill_ID = (long)reader[0]; item.Supplier_Name = (string)reader[1]; item.HouseNames = (string)reader[2]; var v = reader[3]; if (v != null) item.Number = Convert.ToInt32(v); v = reader[4]; if (v != null) item.AlreadyNumber = Convert.ToInt32(v); item.WeighTime = (DateTime)reader[5]; item.B3ID = (long?)reader[6]; item.Show = ((bool?)reader[7] ?? true); result.Add(item); } } } return serializer.Serialize(result); } [Rpc] public static Tuple GetEveryNumberTuple(DateTime date) { var main = new JoinAlias(typeof(WeightBill)); var detail = new JoinAlias(typeof(WeightBill_Detail)); var relate = new JoinAlias(typeof(WeightBillShowRelate)); var query = new DQueryDom(main); query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.And(DQCondition.EQ(main, "ID", detail, "WeightBill_ID"), DQCondition.EQ(detail, "DeleteState", false))); query.From.AddJoin(JoinType.Left, new DQDmoSource(relate), DQCondition.EQ(main, "ID", relate, "WeightBill_ID")); var already = OrderDetailTemp.Register(query, main); var hurry = HurryOrderTemp.Register(query, main, true); query.Columns.Add(DQSelectColumn.Field("Show", relate)); query.Columns.Add(DQSelectColumn.Sum(detail, "Number")); var alreadyNumber = DQExpression.Add(DQExpression.IfNull(DQExpression.Field(already, "Number"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(hurry, "Number"), DQExpression.Value(0))); query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(alreadyNumber), "Already")); query.GroupBy.Expressions.Add(DQExpression.Field(relate, "Show")); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.Between("WeighTime", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.InEQ("HouseNames", ""))); query.Where.Conditions.Add(DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field(detail, "Number"), DQExpression.Value(0)), alreadyNumber)); var n1 = 0; var n2 = 0; using (var session = Dmo.NewSession()) { using (var reader = session.ExecuteReader(query)) { while (reader.Read()) { var last = Convert.ToInt32(reader[1] ?? 0) - Convert.ToInt32(reader[2] ?? 0); var type = (bool?)reader[0]; if (type == false) n2 = last; else n1 += last; } } } return new Tuple(n1, n2); } class OrderDetailTemp { public long WeightBill_ID { get; set; } public int? Number { get; set; } public static JoinAlias Register(DQueryDom rootQuery, JoinAlias rootAlias) { var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); query.Columns.Add(DQSelectColumn.Field("WeightBill_ID")); query.Columns.Add(DQSelectColumn.Sum("PlanNumber")); query.GroupBy.Expressions.Add(DQExpression.Field("WeightBill_ID")); query.Where.Conditions.Add(DQCondition.EQ("DeleteState", false)); rootQuery.RegisterQueryTable(typeof(OrderDetailTemp), new string[] { "WeightBill_ID", "Number" }, query); var alias = new JoinAlias(typeof(OrderDetailTemp)); rootQuery.From.AddJoin(JoinType.Left, new DQDmoSource(alias), DQCondition.EQ(rootAlias, "ID", alias, "WeightBill_ID")); return alias; } } class HurryOrderTemp { public long WeightBill_ID { get; set; } public int? Number { get; set; } public static JoinAlias Register(DQueryDom rootQuery, JoinAlias rootAlias, bool unOrder, string joinField = "ID") { var query = new DQueryDom(new JoinAlias(typeof(HurryRecord))); query.Columns.Add(DQSelectColumn.Field("WeightBill_ID")); query.Columns.Add(DQSelectColumn.Sum("HurryNumber")); query.GroupBy.Expressions.Add(DQExpression.Field("WeightBill_ID")); if (unOrder) query.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field("ToOrderDetail_ID"))); rootQuery.RegisterQueryTable(typeof(HurryOrderTemp), new string[] { "WeightBill_ID", "Number" }, query); var alias = new JoinAlias(typeof(HurryOrderTemp)); rootQuery.From.AddJoin(JoinType.Left, new DQDmoSource(alias), DQCondition.EQ(rootAlias, joinField, alias, "WeightBill_ID")); return alias; } } [Rpc] public static int GetLastNumber(long weightID, long backId) { var totalNumber = GetWeightNumber(weightID); var alreadyNumber = GetAlreadyNumberWithoutBack(weightID, backId); return totalNumber - alreadyNumber - HurryRecordUnOrderNumber(weightID); } static int GetWeightNumber(long wid) { var query = new DQueryDom(new JoinAlias(typeof(WeightBill_Detail))); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("WeightBill_ID", wid))); query.Columns.Add(DQSelectColumn.Sum("Number")); var rst = query.EExecuteScalar(); if (rst != null) return Convert.ToInt32(rst); return 0; } 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", oid))); query.Columns.Add(DQSelectColumn.Sum("PlanNumber")); var rst = query.EExecuteScalar(); if (rst != null) return Convert.ToInt32(rst); return 0; } static int HurryRecordUnOrderNumber(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(); if (rst != null) return Convert.ToInt32(rst); return 0; } [Rpc] public static string GetOrderDetail(DateTime date) { 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.Columns.Add(DQSelectColumn.Field("SecondarySplit")); query.Columns.Add(DQSelectColumn.Field("Supplier_Name")); query.Columns.Add(DQSelectColumn.Field("OrderState")); query.Columns.Add(DQSelectColumn.Field("Technics")); 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()) { using (var reader = session.ExecuteReader(query)) { while (reader.Read()) { var entity = new OrderDetail(); entity.ID = (long)reader[0]; entity.WeightBill_ID = (long)reader[1]; entity.Order = (int)reader[2]; entity.PlanNumber = (int)reader[3]; entity.LiveColonyHouse_Name = (string)reader[4]; entity.IsHurryButcher = (bool)reader[5]; entity.B3WeighBill_ID = (long?)reader[6]; entity.SecondarySplit = (bool)reader[7]; entity.Supplier_Name = (string)reader[8]; entity.OrderState = (int)reader[9]; entity.Technics = (short?)reader[10]; entity.Date = date; list.Add(entity); } } } return serializer.Serialize(list); } [Rpc(RpcFlags.SkipAuth)] public static string GetConfirmOrder(DateTime date) { var main = new JoinAlias(typeof(OrderDetail)); var detail = new JoinAlias(typeof(OrderConfirmDetial)); var query = new DQueryDom(main); query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "OrderDetail_ID")); 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.Columns.Add(DQSelectColumn.Field("SecondarySplit")); query.Columns.Add(DQSelectColumn.Field("OrderState")); foreach (var item in query.Columns) query.GroupBy.Expressions.Add(item.Expression); query.Columns.Add(DQSelectColumn.Sum(detail, "Number")); 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()) { using (var reader = session.ExecuteReader(query)) { while (reader.Read()) { var entity = new OrderDetail(); entity.ID = (long)reader[0]; entity.WeightBill_ID = (long)reader[1]; entity.Order = (int)reader[2]; entity.PlanNumber = (int)reader[3]; entity.LiveColonyHouse_Name = (string)reader[4]; entity.IsHurryButcher = (bool)reader[5]; entity.B3WeighBill_ID = (long?)reader[6]; entity.SecondarySplit = (bool)reader[7]; entity.OrderState = (int)reader[8]; entity.ConfirmNumber = (int?)reader[9]; list.Add(entity); } } } return JsonConvert.SerializeObject(list); } [Rpc(RpcFlags.SkipAuth)] public static string GetOrderConfirmDetail(long orderID) { var query = new DmoQuery(typeof(OrderConfirmDetial)); query.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderID)); query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); return JsonConvert.SerializeObject(query.EExecuteList()); } [Rpc(RpcFlags.SkipAuth)] public static long SaveConfirmDetail(string obj) { var detail = JsonConvert.DeserializeObject(obj); using (var session = Dmo.NewSession()) { if(detail.ID==0) session.Insert(detail); else session.Update(detail); session.Commit(); return detail.ID; } } [Rpc(RpcFlags.SkipAuth)] public static int GetMaxOrder(DateTime date) { 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), DQCondition.EQ("IsDrop", false))); return query.EExecuteScalar() ?? 0; } [Rpc(RpcFlags.SkipAuth)] public static int GetCurrentOrder(long id) { return GetOrderDetailProperty(id, "Order"); } [Rpc] public static int GetCurrentOrderPlanNumber(long id) { return GetOrderDetailProperty(id, "PlanNumber"); } static T GetOrderDetailProperty(long id, string property) { var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); query.Columns.Add(DQSelectColumn.Field(property)); query.Where.Conditions.Add(DQCondition.EQ("ID", id)); return (T)query.EExecuteScalar(); } [Rpc] public static long Insert(string insert) { insert = insert.ESerializeDateTime(); var entity = serializer.Deserialize(insert); using (var session = Dmo.NewSession()) { CheckCanInsert(session, entity.Order, entity.Date.Value); entity.ModifyTime = DateTime.Now; UpdateOrder(session, entity.Order - 1, 1, entity.Date); session.Insert(entity); session.Commit(); } return entity.ID; } static void CheckCanInsert(IDmoSession session, int order, DateTime date) { 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), DQCondition.EQ("IsDrop", false))); if (query.EExecuteScalar(session) != null) throw new Exception("不允许插入到已进行顺序确认之前"); } public static void UpdateOrderDetailPartial(IDmoSession session, long id, string property, object value) { var update = new DQUpdateDom(typeof(OrderDetail)); update.Columns.Add(new DQUpdateColumn(property, value)); update.Columns.Add(new DQUpdateColumn("Sync", false)); update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now)); update.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1)))); update.Where.Conditions.Add(DQCondition.EQ("ID", id)); session.ExecuteNonQuery(update); } [Rpc] public static int UpdateNum(long id, int number) { using (var session = Dmo.NewSession()) { //var secondSplit = InnerBLUtil.GetDmoPropertyByID(session, typeof(OrderDetail), "SecondarySplit", id); //if (secondSplit) // throw new Exception("已进行烫毛计数,不能修改"); UpdateOrderDetailPartial(session, id, "PlanNumber", number); UpdateSecondOrder(id, session); session.Commit(); } return 1; } public static void UpdateSecondOrder(long id, IDmoSession session) { var update = new DQUpdateDom(typeof(SecondOrder)); update.Columns.Add(new DQUpdateColumn("Sync", false)); update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now)); update.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1)))); update.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", id)); session.ExecuteNonQuery(update); } [Rpc] public static int Delete(long id) { using (var session = Dmo.NewSession()) { var entity = InnerBLUtil.GetSingleDmo(session, "ID", id, "Order", "Date", "OrderState"); if (entity.OrderState != 0) throw new Exception("已开始宰杀,不能修改"); UpdateOrder(session, entity.Order, -1, entity.Date); UpdateOrderDetailPartial(session, id, "DeleteState", true); ClearHurryRecordToOrderID(session, id); session.Commit(); } return 1; } [Rpc] public static int ChangeShowType(long id, bool show) { var entity = new WeightBillShowRelate(); entity.WeightBill_ID = id; entity.Show = show; using (var session = Dmo.NewSession()) { session.AddInsertOrUpdate(entity); session.Commit(); } 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.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1)))); update.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThan("Order", greaterThanOrder), DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false))); session.ExecuteNonQuery(update); } #endregion #region hurryButcher [Rpc(RpcFlags.SkipAuth)] public static string GetHurryRecordList(long weightId) { var query = new DmoQuery(typeof(HurryRecord)); query.Where.Conditions.Add(DQCondition.EQ("WeightBill_ID", weightId)); return serializer.Serialize(query.EExecuteList().Cast().ToList()); } [Rpc] public static long? DeleteHurryRecord(long id) { long? orderID; using (var session = Dmo.NewSession()) { var entity = InnerBLUtil.GetSingleDmo(session, "ID", id, "HurryNumber", "WeightBill_ID"); orderID = GetOrderID(entity.WeightBill_ID); var delete = new DQDeleteDom(typeof(HurryRecord)); delete.Where.Conditions.Add(DQCondition.EQ("ID", id)); session.ExecuteNonQuery(delete); if (orderID > 0) AddOrderNumber(session, orderID.Value, entity.HurryNumber); session.Commit(); } return orderID; } [Rpc] public static string InsertHurryRecord(string detail) { detail = detail.ESerializeDateTime(); var entity = serializer.Deserialize(detail); long? orderID = GetOrderID(entity.WeightBill_ID); using (var session = Dmo.NewSession()) { session.Insert(entity); if (orderID > 0) AddOrderNumber(session, orderID.Value, -entity.HurryNumber); session.Commit(); } return string.Format("{0}|{1}", orderID, entity.ID); } [Rpc] public static int GetHurryRecordNumber(long weightId) { var query = new DQueryDom(new JoinAlias(typeof(HurryRecord))); query.Columns.Add(DQSelectColumn.Sum("HurryNumber")); query.Where.Conditions.Add(DQCondition.EQ("WeightBill_ID", weightId)); return Convert.ToInt32(query.EExecuteScalar() ?? 0); } static void AddOrderNumber(IDmoSession session, long ID, int subNumber) { var update = new DQUpdateDom(typeof(OrderDetail)); update.Where.Conditions.Add(DQCondition.EQ("ID", ID)); update.Columns.Add(new DQUpdateColumn("Sync", false)); update.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1)))); update.Columns.Add(new DQUpdateColumn("PlanNumber", DQExpression.Add(DQExpression.Field("PlanNumber"), DQExpression.Value(subNumber)))); session.ExecuteNonQuery(update); UpdateSecondOrder(ID, session); } static long? GetOrderID(long weightBillId) { var detail = new JoinAlias(typeof(WeightBill_Detail)); var order = new JoinAlias(typeof(OrderDetail)); var query = new DQueryDom(detail); query.From.AddJoin(JoinType.Left, new DQDmoSource(order), DQCondition.EQ(order, "WeightBill_ID", weightBillId)); 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(order, "IsDrop", false), DQCondition.EQ(detail, "WeightBill_ID", weightBillId))); long? id = null; using (var session = Dmo.NewSession()) { using (var reader = session.ExecuteReader(query)) { while (reader.Read()) { if (id.HasValue || Convert.ToInt32(reader[1]) - hurry != 0) return -1; id = (long)reader[0]; } } } return id; } [Rpc(RpcFlags.SkipAuth)] public static string GetHurryRecord(long id) { var query = new DmoQuery(typeof(HurryRecord)); query.Where.Conditions.Add(DQCondition.EQ("ID", id)); var entity = query.EExecuteScalar(); if (entity == null) throw new Exception(string.Format("急宰单No.{0} 已被删除", id)); return JsonConvert.SerializeObject(entity); } [Rpc] public static string GetSelectHurryList(DateTime butcherDate) { var bill = new JoinAlias(typeof(WeightBill)); var detail = new JoinAlias(typeof(WeightBill_Detail)); var query = new DQueryDom(bill); query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.And(DQCondition.EQ(bill, "ID", detail, "WeightBill_ID"), DQCondition.EQ(detail, "DeleteState", false))); var hurry = HurryOrderTemp.Register(query, bill, false); var start = StartOrderTemp.Register(query, bill, butcherDate); query.Columns.Add(DQSelectColumn.Field("ID")); query.Columns.Add(DQSelectColumn.Field("B3ID")); query.Columns.Add(DQSelectColumn.Field("Supplier_Name")); query.Columns.Add(DQSelectColumn.Field("HouseNames")); query.Columns.Add(DQSelectColumn.Field("Number", detail)); query.Columns.Add(DQSelectColumn.Field("Number", hurry)); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.InEQ("HouseNames", ""))); var list = new List(); using (var session = Dmo.NewSession()) { using (var reader = session.ExecuteReader(query)) { while (reader.Read()) { var entity = new SelectHurryList(); entity.WeightBill_ID = (long)reader[0]; entity.B3WeighBill_ID = (long?)reader[1]; entity.Supplier_Name = (string)reader[2]; entity.LiveColonyHouse_Name = (string)reader[3]; entity.WeightNumber = (int?)reader[4] ?? 0; entity.HurryNumber = Convert.ToInt32(reader[5] ?? 0); list.Add(entity); } } } return serializer.Serialize(list); } class StartOrderTemp { public long WeightBill_ID { get; set; } public static JoinAlias Register(DQueryDom rootQuery, JoinAlias rootAlias, DateTime date) { var detail = new JoinAlias(typeof(WeightBill_Detail)); var order = new JoinAlias(typeof(OrderDetail)); var query = new DQueryDom(detail); query.From.AddJoin(JoinType.Left, new DQDmoSource(order), DQCondition.And(DQCondition.EQ(detail, "WeightBill_ID", order, "WeightBill_ID"), DQCondition.EQ(order, "DeleteState", false))); query.Columns.Add(DQSelectColumn.Field("WeightBill_ID", detail)); query.GroupBy.Expressions.Add(DQExpression.Field(detail, "WeightBill_ID")); query.Where.Conditions.Add(DQCondition.And(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(order, "ID")), DQCondition.EQ(order, "Date", date)), DQCondition.EQ(detail, "DeleteState", false))); rootQuery.RegisterQueryTable(typeof(StartOrderTemp), new string[] { "WeightBill_ID" }, query); var alias = new JoinAlias(typeof(StartOrderTemp)); rootQuery.From.AddJoin(JoinType.Inner, new DQDmoSource(alias), DQCondition.EQ(rootAlias, "ID", alias, "WeightBill_ID")); return alias; } } #endregion #region orderConfirm [Rpc(RpcFlags.SkipAuth)] public static int SetOrderState(long id, int state) { if (!(state == 0 || state == 10 || state == 20)) 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)); if (orderInfo.Technics.HasValue) { 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(RpcFlags.SkipAuth)] public static long InsertByHurryRecord(string insert, long hurryID) { var entity = JsonConvert.DeserializeObject(insert); using (var session = Dmo.NewSession()) { CheckCanInsert(session, entity.Order, entity.Date.Value); entity.ModifyTime = DateTime.Now; UpdateOrder(session, entity.Order - 1, 1, entity.Date); session.Insert(entity); SetHurryRecordToOrderID(session, entity.ID, hurryID); session.Commit(); } return entity.ID; } static void SetHurryRecordToOrderID(IDmoSession session, long orderID, long hurryID) { var update = new DQUpdateDom(typeof(HurryRecord)); update.Where.Conditions.Add(DQCondition.EQ("ID", hurryID)); update.Columns.Add(new DQUpdateColumn("ToOrderDetail_ID", orderID)); session.ExecuteNonQuery(update); } static void ClearHurryRecordToOrderID(IDmoSession session, long orderID) { var update = new DQUpdateDom(typeof(HurryRecord)); update.Where.Conditions.Add(DQCondition.EQ("ToOrderDetail_ID", orderID)); update.Columns.Add(new DQUpdateColumn("ToOrderDetail_ID", DQExpression.NULL)); session.ExecuteNonQuery(update); } [Rpc(RpcFlags.SkipAuth)] public static int GetFinishNumbers(DateTime date) { var query = new DQueryDom(new JoinAlias(typeof(OrderDetail))); query.Columns.Add(DQSelectColumn.Sum("PlanNumber")); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("Date", date), DQCondition.EQ("OrderState", 20))); return query.EExecuteScalar() ?? 0; } #endregion } }