diff --git a/B3ClientService/B3ClientService.csproj b/B3ClientService/B3ClientService.csproj index f4c5952..694674c 100644 --- a/B3ClientService/B3ClientService.csproj +++ b/B3ClientService/B3ClientService.csproj @@ -89,6 +89,8 @@ + + @@ -97,6 +99,7 @@ + diff --git a/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs b/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs index c55ba3f..425185e 100644 --- a/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs +++ b/B3ClientService/BO/Bill/OrderDetail/OrderDetail.cs @@ -1,4 +1,5 @@ -using System; +using Forks.EnterpriseServices.DomainObjects2; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -15,15 +16,19 @@ namespace BWP.B3ClientService.BO public long? B3MainID { get; set; } - public long WeighBill_ID { get; set; } + public long WeightBill_ID { get; set; } + + [ReferenceTo(typeof(WeightBill), "B3ID")] + [Join("WeighBill_ID", "ID")] + public long? B3WeighBill_ID { get; set; } public int Order { get; set; } public int PlanNumber { get; set; } - public int? HotFadeNumber { get; set; } + //public int? HotFadeNumber { get; set; } - public int? PeelingNumber { get; set; } + //public int? PeelingNumber { get; set; } public string LiveColonyHouse_Name { get; set; } diff --git a/B3ClientService/BO/Bill/WeightBill/WeightBill.cs b/B3ClientService/BO/Bill/WeightBill/WeightBill.cs index 8c685bb..8bbda6e 100644 --- a/B3ClientService/BO/Bill/WeightBill/WeightBill.cs +++ b/B3ClientService/BO/Bill/WeightBill/WeightBill.cs @@ -98,5 +98,7 @@ namespace BWP.B3ClientService.BO [OneToMany(typeof(WeightBill_SanctionDetail), "ID")] [Join("ID", "WeightBill_ID")] public WeightBill_SanctionDetailCollection SanctionDetails { get { return mSanctionDetails; } } + + public string HouseNames { get; set; } } } diff --git a/B3ClientService/CTuple.cs b/B3ClientService/CTuple.cs new file mode 100644 index 0000000..be1ce1a --- /dev/null +++ b/B3ClientService/CTuple.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BWP.B3ClientService +{ + public class CTuple + { + public T1 Item1 { get; set; } + + public T2 Item2 { get; set; } + + public CTuple() + { } + + public CTuple(T1 t1, T2 t2) + { + Item1 = t1; + Item2 = t2; + } + } + + public class CTuple + { + public T1 Item1 { get; set; } + + public T2 Item2 { get; set; } + + public T3 Item3 { get; set; } + public CTuple() + { } + + public CTuple(T1 t1, T2 t2, T3 t3) + { + Item1 = t1; + Item2 = t2; + Item3 = t3; + } + } +} diff --git a/B3ClientService/RpcBO/Bill/OrderDetail/NeedOrderEntity.cs b/B3ClientService/RpcBO/Bill/OrderDetail/NeedOrderEntity.cs new file mode 100644 index 0000000..8d3c3ef --- /dev/null +++ b/B3ClientService/RpcBO/Bill/OrderDetail/NeedOrderEntity.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BWP.B3ClientService.RpcBO +{ + public class NeedOrderEntity + { + public long? B3ID { get; set; } + + public long WeightBill_ID { get; set; } + + public string Supplier_Name { get; set; } + + public string HouseNames { get; set; } + + public int Number { get; set; } + + public int AlreadyNumber { get; set; } + + public DateTime WeighTime { get; set; } + } +} diff --git a/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs new file mode 100644 index 0000000..a8a532f --- /dev/null +++ b/B3ClientService/Rpcs/BillRpc/OrderDetailRpc.cs @@ -0,0 +1,239 @@ +using BWP.B3ClientService.BO; +using BWP.B3ClientService.RpcBO; +using Forks.EnterpriseServices.DomainObjects2; +using Forks.EnterpriseServices.DomainObjects2.DQuery; +using Forks.EnterpriseServices.JsonRpc; +using Forks.EnterpriseServices.SqlDoms; +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(); + + [Rpc] + public static string GetNeedOrderWeightBill(DateTime date) + { + var main = new JoinAlias(typeof(WeightBill)); + var query = new DQueryDom(main); + var detail = WeightDetailTemp.Register(query, main); + var already = OrderDetailTemp.Register(query, main); + 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)); + query.Columns.Add(DQSelectColumn.Field("Number", already)); + query.Columns.Add(DQSelectColumn.Field("WeighTime")); + query.Columns.Add(DQSelectColumn.Field("B3ID")); + 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)), DQExpression.IfNull(DQExpression.Field(already, "Number"), DQExpression.Value(0)))); + 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]; + result.Add(item); + } + } + } + return serializer.Serialize(result); + } + + class WeightDetailTemp + { + 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(WeightBill_Detail))); + query.Columns.Add(DQSelectColumn.Field("WeightBill_ID")); + query.Columns.Add(DQSelectColumn.Sum("Number")); + query.GroupBy.Expressions.Add(DQExpression.Field("WeightBill_ID")); + query.Where.Conditions.Add(DQCondition.EQ("DeleteState", false)); + rootQuery.RegisterQueryTable(typeof(WeightDetailTemp), new string[] { "WeightBill_ID", "Number" }, query); + + var alias = new JoinAlias(typeof(WeightDetailTemp)); + rootQuery.From.AddJoin(JoinType.Left, new DQDmoSource(alias), DQCondition.EQ(rootAlias, "ID", alias, "WeightBill_ID")); + return alias; + } + } + + 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; + } + } + + [Rpc] + public static string GetBackWeightBillInfo(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); + + return serializer.Serialize(entity); + } + + 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 bid) + { + 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.Columns.Add(DQSelectColumn.Sum("PlanNumber")); + 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.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("SecondarySplit", 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]; + list.Add(entity); + } + } + } + return serializer.Serialize(list); + } + + [Rpc] + 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.Between("Date", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.EQ("DeleteState", false))); + return query.EExecuteScalar() ?? 1; + } + + [Rpc] + public static long Insert(string update, string insert) + { + var list = serializer.Deserialize>>(update); + 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); + session.Insert(entity); + session.Commit(); + } + return entity.ID; + } + + 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.Where.Conditions.Add(DQCondition.EQ("ID", id)); + session.ExecuteNonQuery(update); + } + + [Rpc] + public static int UpdateOrderProperty(long id, string property, object value) + { + using (var session = Dmo.NewSession()) + { + UpdateOrderDetailPartial(session, id, property, value); + session.Commit(); + } + return 1; + } + + [Rpc] + public static int Delete(string update, long id) + { + var list = serializer.Deserialize>>(update); + using (var session = Dmo.NewSession()) + { + foreach (var item in list) + UpdateOrderDetailPartial(session, item.Item1, "Order", item.Item2); + UpdateOrderDetailPartial(session, id, "DeleteState", true); + session.Commit(); + } + return 1; + } + } +} diff --git a/B3ClientService/Rpcs/BillRpc/WeightBillRpc.cs b/B3ClientService/Rpcs/BillRpc/WeightBillRpc.cs index 1c9a50f..14c2859 100644 --- a/B3ClientService/Rpcs/BillRpc/WeightBillRpc.cs +++ b/B3ClientService/Rpcs/BillRpc/WeightBillRpc.cs @@ -64,12 +64,13 @@ namespace BWP.B3ClientService.Rpcs.BillRpc static void FillServerUpdateFields(IDmoSession session, WeightBill dmo) { - var min = InnerBLUtil.GetSingleDmo(session, "ID", dmo.ID, "B3ID", "DeleteState", "AlreadyHouse", "Inspector_ID", "Inspector_Name"); + var min = InnerBLUtil.GetSingleDmo(session, "ID", dmo.ID, "B3ID", "DeleteState", "AlreadyHouse", "Inspector_ID", "Inspector_Name", "HouseNames"); dmo.B3ID = min.B3ID; dmo.DeleteState = min.DeleteState; dmo.AlreadyHouse = min.AlreadyHouse; dmo.Inspector_ID = min.Inspector_ID; dmo.Inspector_Name = min.Inspector_Name; + dmo.HouseNames = min.HouseNames; dmo.Sync = false; dmo.ModifyTime = DateTime.Now; } @@ -204,6 +205,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc { using (var session = Dmo.NewSession()) { + //因为传过来的明细是不带ID的。 var houseDetail = GetList(new Tuple("WeightBill_ID", bo.ID), new Tuple("DeleteState", false)); foreach (var item in bo.HouseDetails) @@ -215,10 +217,14 @@ namespace BWP.B3ClientService.Rpcs.BillRpc first.Index = item.Index; } var delete = new List(); + var houseNames = new List(); foreach (var item in houseDetail) { if (bo.HouseDetails.Any(x => x.LiveColonyHouse_ID == item.LiveColonyHouse_ID)) + { UpdateOrInsertHouseDetail(session, item); + houseNames.Add(item.LiveColonyHouse_Name); + } else delete.Add(item.LiveColonyHouse_ID ?? 0); } @@ -278,6 +284,7 @@ namespace BWP.B3ClientService.Rpcs.BillRpc update.Columns.Add(new DQUpdateColumn("HogGrade_Name", bo.HogGrade_Name)); update.Columns.Add(new DQUpdateColumn("Inspector_ID", bo.Inspector_ID)); update.Columns.Add(new DQUpdateColumn("Inspector_Name", bo.Inspector_Name)); + update.Columns.Add(new DQUpdateColumn("HouseNames", string.Join(",", houseNames))); update.Columns.Add(new DQUpdateColumn("AlreadyHouse", true)); update.Columns.Add(new DQUpdateColumn("Sync", false)); update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now));