diff --git a/B3ClientService/B3ClientService.csproj b/B3ClientService/B3ClientService.csproj index db0b01b..3735f65 100644 --- a/B3ClientService/B3ClientService.csproj +++ b/B3ClientService/B3ClientService.csproj @@ -109,6 +109,7 @@ + @@ -146,7 +147,9 @@ + + @@ -196,7 +199,6 @@ - diff --git a/B3ClientService/BO/Bill/PadScanDb/PadCarcassInStore.cs b/B3ClientService/BO/Bill/PadScanDb/PadCarcassInStore.cs new file mode 100644 index 0000000..78c877e --- /dev/null +++ b/B3ClientService/BO/Bill/PadScanDb/PadCarcassInStore.cs @@ -0,0 +1,34 @@ +using BWP.B3Frameworks.BO; +using Forks.EnterpriseServices; +using Forks.EnterpriseServices.DomainObjects2; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; + +namespace BWP.B3ClientService.BO +{ + [LogicName("白条入库手持创建")] + public class PadCarcassInStore : Base + { + public PadCarcassInStore() + { + CreateTime = DateTime.Now; + } + + public long Goods_ID { get; set; } + + public string BarCode { get; set; } + + [DbColumn(DbType = SqlDbType.DateTime)] + [JsonIgnore] + public DateTime CreateTime { get; set; } + + [JsonIgnore] + public bool Sync { get; set; } + + public int RowVersion { get; set; } + } +} diff --git a/B3ClientService/OfflinRpc/BaseInfoRpc.cs b/B3ClientService/OfflinRpc/BaseInfoRpc.cs index 78ac4af..cc7bc24 100644 --- a/B3ClientService/OfflinRpc/BaseInfoRpc.cs +++ b/B3ClientService/OfflinRpc/BaseInfoRpc.cs @@ -45,8 +45,10 @@ namespace BWP.B3ClientService.Rpcs { var main = new JoinAlias(typeof(ClientGoodsSet)); var detail = new JoinAlias(typeof(ClientGoodsSet_Detail)); + var goods = new JoinAlias(typeof(Goods)); var query = new DQueryDom(main); query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ClientGoodsSet_ID")); + query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(detail, "Goods_ID", goods, "ID")); query.Where.Conditions.Add(DQCondition.EQ("ApplyClient", type)); query.Columns.Add(DQSelectColumn.Field("ID")); @@ -57,8 +59,13 @@ namespace BWP.B3ClientService.Rpcs query.Columns.Add(DQSelectColumn.Field("StandardWeight", detail)); query.Columns.Add(DQSelectColumn.Field("StandardWeightUp", detail)); query.Columns.Add(DQSelectColumn.Field("StandardWeightLow", detail)); + query.Columns.Add(DQSelectColumn.Field("Name", goods)); + query.Columns.Add(DQSelectColumn.Field("Code", goods)); + query.Columns.Add(DQSelectColumn.Field("Spec", goods)); + query.Columns.Add(DQSelectColumn.Field("MainUnit", goods)); var list = new List(); + var goodsList = new List(); using (var session = Dmo.NewSession()) { using (var reader = session.ExecuteReader(query)) @@ -85,10 +92,22 @@ namespace BWP.B3ClientService.Rpcs d.StandardWeight = (decimal?)reader[5]; d.StandardWeightUp = (decimal?)reader[6]; d.StandardWeightLow = (decimal?)reader[7]; + if (goodsList.Any(x => x.ID == d.Goods_ID)) + continue; + goodsList.Add(new MinGoods + { + ID = d.ID, + Name = (string)reader[8], + Code = (string)reader[9], + Spec = (string)reader[10], + MainUnit = (string)reader[11] + }); } } } - + var eFirst = list.FirstOrDefault(x => !x.Stopped); + if (eFirst != null) + eFirst.Goods.AddRange(goodsList); return JsonConvert.SerializeObject(list); } @@ -99,7 +118,14 @@ namespace BWP.B3ClientService.Rpcs public string Name { get; set; } } - class MinClientGoodsSet + class MinGoods : MinBaseInfo + { + public string Code { get; set; } + public string Spec { get; set; } + public string MainUnit { get; set; } + } + + class MinClientGoodsSet { public long ID { get; set; } @@ -112,6 +138,12 @@ namespace BWP.B3ClientService.Rpcs { get { return _details; } } + + List _goods = new List(); + public List Goods + { + get { return _goods; } + } } } } diff --git a/B3ClientService/OfflinRpc/CarcassInStoreRpc.cs b/B3ClientService/OfflinRpc/CarcassInStoreRpc.cs new file mode 100644 index 0000000..a2986d9 --- /dev/null +++ b/B3ClientService/OfflinRpc/CarcassInStoreRpc.cs @@ -0,0 +1,147 @@ +using BWP.B3ClientService.BO; +using BWP.B3ClientService.NamedValueTemplate; +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 TSingSoft.WebPluginFramework; + +namespace BWP.B3ClientService.Rpcs +{ + [Rpc] + public static class CarcassInStoreRpc + { + #region 手持机端调用 + + [Rpc(RpcFlags.SkipAuth)] + public static string ScarBarCode(string url) + { + if (url.Contains("?")) + { + var arr = url.Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries); + if (arr.Length > 1) + { + var list = arr[1].Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries); + foreach (var item in list) + { + var l = item.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); + if (l.Length == 2 && l[0].ToUpper() == "CODE") + return l[1].Trim(); + } + return string.Empty; + } + return string.Empty; + } + return url.Trim(); + } + + [Rpc(RpcFlags.SkipAuth)] + public static long PadInsert(long goodsID, string barCode) + { + if (string.IsNullOrEmpty(barCode)) + throw new Exception("编码为空"); + using (var session = Dmo.NewSession()) + { + var id = CheckExist(barCode, session); + if (id == null) + { + var entity = new PadCarcassInStore(); + entity.Goods_ID = goodsID; + entity.BarCode = barCode; + session.Insert(entity); + id = entity.ID; + } + else + Update(id.Value, goodsID, session); + session.Commit(); + return id.Value; + } + } + + static long? CheckExist(string barCode, IDmoSession session) + { + var query = new DQueryDom(new JoinAlias(typeof(PadCarcassInStore))); + query.Where.Conditions.Add(DQCondition.EQ("BarCode", barCode)); + query.Columns.Add(DQSelectColumn.Field("ID")); + return query.EExecuteScalar(session); + } + + static void Update(long id, long goodsID, IDmoSession session) + { + var update = new DQUpdateDom(typeof(PadCarcassInStore)); + update.Where.Conditions.Add(DQCondition.EQ("ID", id)); + update.Columns.Add(new DQUpdateColumn("Goods_ID", goodsID)); + update.Columns.Add(new DQUpdateColumn("Sync", false)); + update.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1)))); + session.ExecuteNonQuery(update); + } + + [Rpc(RpcFlags.SkipAuth)] + public static string PadGetGoodsList() + { + var main = new JoinAlias(typeof(ClientGoodsSet)); + var detail = new JoinAlias(typeof(ClientGoodsSet_Detail)); + var query = new DQueryDom(main); + query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "ClientGoodsSet_ID")); + query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail)); + query.Columns.Add(DQSelectColumn.Field("Goods_Name", detail)); + query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Stopped", false), DQCondition.EQ("ApplyClient", 适用客户端.白条出入库))); + var list = query.EExecuteList(); + return JsonConvert.SerializeObject(list.Select(x => new MinGoodsObj { Goods_ID = x.Item1, Goods_Name = x.Item2 })); + } + + #endregion + + #region 客户端处理手持机数据 + + [Rpc(RpcFlags.SkipAuth)] + public static string GetUnSyncPadData() + { + var query = new DQueryDom(new JoinAlias(typeof(PadCarcassInStore))); + query.Columns.Add(DQSelectColumn.Field("ID")); + query.Columns.Add(DQSelectColumn.Field("BarCode")); + query.Columns.Add(DQSelectColumn.Field("Goods_ID")); + query.Columns.Add(DQSelectColumn.Field("RowVersion")); + query.Where.Conditions.Add(DQCondition.EQ("Sync", false)); + var r = query.EExecuteList(); + var list = r.Select(x => new PadCarcassInStore { ID = x.Item1, BarCode = x.Item2, Goods_ID = x.Item3, RowVersion = x.Item4 }); + return JsonConvert.SerializeObject(list); + } + + [Rpc(RpcFlags.SkipAuth)] + public static int SetPadDataSync(string backInfo) + { + var arr = JsonConvert.DeserializeObject>(backInfo); + using (var session = Dmo.NewSession()) + { + foreach (var item in arr) + UpdateSynced(item, session); + session.Commit(); + } + return 1; + } + + static void UpdateSynced(IDRowVersion info, IDmoSession session) + { + var update = new DQUpdateDom(typeof(PadCarcassInStore)); + update.Columns.Add(new DQUpdateColumn("Sync", true)); + update.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("ID", info.ID), DQCondition.EQ("RowVersion", info.RowVersion))); + session.ExecuteNonQuery(update); + } + + #endregion + + + } + + class MinGoodsObj + { + public long Goods_ID { get; set; } + public string Goods_Name { get; set; } + } +} diff --git a/B3ClientService/OfflinRpc/SimpleBackObjs.cs b/B3ClientService/OfflinRpc/SimpleBackObjs.cs new file mode 100644 index 0000000..82a347d --- /dev/null +++ b/B3ClientService/OfflinRpc/SimpleBackObjs.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BWP.B3ClientService.Rpcs +{ + public class IDRowVersion + { + public long ID { get; set; } + + public int RowVersion { get; set; } + } +} diff --git a/B3ClientService/Utils/UrlUtil.cs b/B3ClientService/Utils/UrlUtil.cs deleted file mode 100644 index df85ce0..0000000 --- a/B3ClientService/Utils/UrlUtil.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Linq; -using System.Text; -using System.Web; - -namespace BWP.B3ClientService.Utils -{ - public class UrlUtil - { - - public static string GetValueByKey(string key, string queryString) - { - var namevalue = GetQueryString(queryString); - if (namevalue.AllKeys.ToList().Contains(key)) - { - return namevalue[key]; - } - return ""; - } - private static NameValueCollection GetQueryString(string queryString) - { - return GetQueryString(queryString, null, false); - } - - private static NameValueCollection GetQueryString(string queryString, Encoding encoding, bool isEncoded) - { - queryString = queryString.Replace("?", ""); - NameValueCollection result = new NameValueCollection(StringComparer.OrdinalIgnoreCase); - if (!String.IsNullOrEmpty(queryString)) - { - int count = queryString.Length; - for (int i = 0; i < count; i++) - { - int startIndex = i; - int index = -1; - while (i < count) - { - char item = queryString[i]; - if (item == '=') - { - if (index < 0) - { - index = i; - } - } - else if (item == '&') - { - break; - } - i++; - } - string key = null; - string value = null; - if (index >= 0) - { - key = queryString.Substring(startIndex, index - startIndex); - value = queryString.Substring(index + 1, (i - index) - 1); - } - else - { - key = queryString.Substring(startIndex, i - startIndex); - } - if (isEncoded) - { - result[(string)MyUrlDeCode(key, encoding)] = MyUrlDeCode(value, encoding); - } - else - { - result[key] = value; - } - if ((i == (count - 1)) && (queryString[i] == '&')) - { - result[key] = String.Empty; - } - } - } - return result; - } - - private static string MyUrlDeCode(string str, Encoding encoding) - { - if (encoding == null) - { - Encoding utf8 = Encoding.UTF8; - //首先用utf-8进行解码 - string code = HttpUtility.UrlDecode(str.ToUpper(), utf8); - //将已经解码的字符再次进行编码. - string encode = HttpUtility.UrlEncode(code, utf8).ToUpper(); - if (str == encode) - encoding = Encoding.UTF8; - else - encoding = Encoding.GetEncoding("gb2312"); - } - return HttpUtility.UrlDecode(str, encoding); - } - } -}