using BO.BO.BaseInfo; using BO.BO.Bill; using Forks.EnterpriseServices.DomainObjects2; using Forks.EnterpriseServices.DomainObjects2.DQuery; using Forks.EnterpriseServices.SqlDoms; using Forks.JsonRpc.Client; 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 BO.Utils.BillRpc { public static class GradeAndWeightRpc { static JavaScriptSerializer serializer = new JavaScriptSerializer(); public static List GetGradeAndWeightList(DateTime date, bool isTang) { const string method = "/MainSystem/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc/GetGradeAndWeightList"; var result = RpcFacade.Call(method, date, isTang); return serializer.Deserialize>(result); } public static void SetGradeFinish(long orderDetailID, short technics) { const string method = "/MainSystem/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc/SetGradeFinish"; RpcFacade.Call(method, orderDetailID, technics); } public static List GetBodyDiscontItem() { const string method = "/MainSystem/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc/GetBodyDiscontItemSetting"; var json = RpcFacade.Call(method); return serializer.Deserialize>(json); } public static void SaveBodyDiscontItem(List> list) { const string method = "/MainSystem/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc/SaveBodyDiscontItemSetting"; RpcFacade.Call(method, serializer.Serialize(list)); } } public static class LocalGradeAndWeightBL { static JavaScriptSerializer serializer = new JavaScriptSerializer(); public class DmoSession { public static IDmoSessionWithTransaction New() { return Dmo.NewSession(ButcherAppContext.Context.UrlConfig.OfflineSqlConnection); } } public static bool ConnectionTest() { using (var session = DmoSession.New()) { try { var q = new DQueryDom(new JoinAlias(typeof(GradeAndWeight_Detail))); q.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "c")); q.Range = SelectRange.Top(1); session.ExecuteScalar(q); return true; } catch { return false; } } } public static void ClearWeightBySID(long sid) { var updateDom = new DQUpdateDom(typeof(GradeAndWeight_Detail)); updateDom.Where.Conditions.Add(DQCondition.EQ("SID", sid)); updateDom.Columns.Add(new DQUpdateColumn("Weight", DQExpression.NULL)); using (var session = DmoSession.New()) { session.ExecuteNonQuery(updateDom); session.Commit(); } } public static void UpdateLosted(long sid) { var updateDom = new DQUpdateDom(typeof(GradeAndWeight_Detail)); updateDom.Where.Conditions.Add(DQCondition.EQ("SID", sid)); updateDom.Columns.Add(new DQUpdateColumn("IsLostWeight", true)); using (var session = DmoSession.New()) { session.ExecuteNonQuery(updateDom); session.Commit(); } } public static List GetDetails(DateTime date, int top = 15) { var query = new DmoQuery(typeof(GradeAndWeight_Detail)); query.Where.Conditions.Add(DQCondition.EQ("Date", date)); query.OrderBy.Expressions.Add(DQOrderByExpression.Create("Index", true)); query.Range = SelectRange.Top(top); using (var session = DmoSession.New()) { return session.ExecuteList(query).Cast().ToList(); } } public static int GetTangTuiSumNumber(DateTime date) { var query = new DQueryDom(new JoinAlias(typeof(GradeAndWeight_Detail))); query.Where.Conditions.Add(DQCondition.EQ("Date", date)); query.Where.Conditions.Add(DQCondition.EQ("Technics_Name", "烫褪")); query.Columns.Add(DQSelectColumn.Count()); using (var session = DmoSession.New()) { return Convert.ToInt32(session.ExecuteScalar(query)); } } public static int GetMaoBoSumNumber(DateTime date) { var query = new DQueryDom(new JoinAlias(typeof(GradeAndWeight_Detail))); query.Where.Conditions.Add(DQCondition.EQ("Date", date)); query.Where.Conditions.Add(DQCondition.EQ("Technics_Name", "毛剥")); query.Columns.Add(DQSelectColumn.Count()); using (var session = DmoSession.New()) { return Convert.ToInt32(session.ExecuteScalar(query)); } } public static List GetLostWeightDetails(DateTime date) { var query = new DmoQuery(typeof(GradeAndWeight_Detail)); query.Where.Conditions.Add(DQCondition.EQ("IsLostWeight", true)); query.Where.Conditions.Add(DQCondition.EQ("Date", date)); query.OrderBy.Expressions.Add(DQOrderByExpression.Create("Index", true)); using (var session = DmoSession.New()) { return session.ExecuteList(query).Cast().ToList(); } } public static void Insert(GradeAndWeight_Detail detail) { using (var session = DmoSession.New()) { if (detail.SID != 0) throw new Exception("Insert时要保证SID不为0"); session.Insert(detail); session.Commit(); } } public static void Update(GradeAndWeight_Detail detail, params string[] properties) { var type = typeof(GradeAndWeight_Detail); using (var session = DmoSession.New()) { if (detail.SID == 0) throw new Exception("Update时要保证SID不能为0"); if (properties.Contains("ID")) throw new Exception("ID不能通过该方法维护"); if (properties.Length == 0) throw new Exception("Update时要给出属性数组"); var update = new DQUpdateDom(type); update.Where.Conditions.Add(DQCondition.EQ("SID", detail.SID)); foreach (var p in properties) { if (p == "Sync" && detail.Sync) detail.Sync = false; update.Columns.Add(new DQUpdateColumn(p, type.GetProperty(p).GetValue(detail))); } session.ExecuteNonQuery(update); session.Commit(); } } public static void Sync() { var syncs = GetAllNeedSyncDetails(); foreach (var detail in syncs) { const string method = "/MainSystem/B3ClientService/Rpcs/BillRpc/GradeAndWeightRpc/UpdateOrInsertDetail"; var id = RpcFacade.Call(method, serializer.Serialize(detail)); SetDetailSynced(detail, id); } } static IEnumerable GetAllNeedSyncDetails() { using (var session = DmoSession.New()) { var query = new DmoQuery(typeof(GradeAndWeight_Detail)); query.OrderBy.Expressions.Add(DQOrderByExpression.Create("SID")); query.Range = SelectRange.Top(50); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Sync", false), DQCondition.IsNotNull(DQExpression.Field("Technics")))); return session.ExecuteList(query).Cast(); } } static void SetDetailSynced(GradeAndWeight_Detail detail, long id) { using (var session = DmoSession.New()) { var update = new DQUpdateDom(typeof(GradeAndWeight_Detail)); update.Columns.Add(new DQUpdateColumn("Sync", true)); if (detail.ID == 0) { detail.ID = id; update.Columns.Add(new DQUpdateColumn("ID", id)); } update.Where.Conditions.Add(DQCondition.EQ("SID", detail.SID)); session.ExecuteNonQuery(update); session.Commit(); } } public static void SaveWeightData(decimal weight) { using (var session = DmoSession.New()) { var record = new WeightData { Weight = weight, Time = DateTime.Now }; session.Insert(record); session.Commit(); } } } }