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);
- }
- }
-}