using ButcherFactory.BO.Utils;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using Forks.JsonRpc.Client;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ButcherFactory.BO.LocalBL
{
public static class SegmentStockUpBL
{
const string RpcPath = @"/MainSystem/B3Sale/Rpcs/";
const string MESPath = @"/MainSystem/B3ClientService/Rpcs/";
///
///
///
/// GoodsCode:StringExt1,Weight:DecimalExt1
public static Tuple StockUpScan(string code)
{
var json = ButcherFactoryUtil.SecondUrlCall(MESPath + "SegmentInStoreRpc/StockUpScan", code);
return JsonConvert.DeserializeObject>(json);
}
public static List GetSaleOutStoreList(DateTime date)
{
var json = RpcFacade.Call(RpcPath + "SaleOutStoreRpc/GetSaleOutStoreByDate", date);
var list = JsonConvert.DeserializeObject>(json);
foreach (var item in list)
item.Date = date;
return list;
}
public static List GetLocalList(DateTime date)
{
var query = new DmoQuery(typeof(SegmentStockUp));
query.Where.Conditions.Add(DQCondition.EQ("Date", date));
return query.EExecuteList().Cast().ToList();
}
public static void DeleteOld()
{
var delete = new DQDeleteDom(typeof(SegmentStockUp));
delete.Where.Conditions.Add(DQCondition.And(DQCondition.LessThan("Date", DateTime.Today.AddDays(-2)), DQCondition.EQ("Sync", true)));
delete.EExecute();
}
public static void SyncToServer()
{
try
{
using (var session = DmoSession.New())
{
var list = GetUnSyncList(session);
if (list.Count == 0)
return;
var arr = JsonConvert.SerializeObject(list.Select(x => new { DetailID = x.DetailID, BarCode = x.BarCode, SecondNumber=x.SecondNumber,UnitNumber=x.UnitNumber }));
RpcFacade.Call(RpcPath + "SaleOutStoreRpc/InsertStockUpDetail", arr);
SetLocalSync(session, list.First().ID, list.Last().ID);
session.Commit();
}
}
catch
{
#if DEBUG
throw;
#endif
}
}
static List GetUnSyncList(IDmoSession session)
{
var query = new DQueryDom(new JoinAlias(typeof(SegmentStockUp)));
query.Where.Conditions.Add(DQCondition.EQ("Sync", false));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("DetailID"));
query.Columns.Add(DQSelectColumn.Field("BarCode"));
query.Columns.Add(DQSelectColumn.Field("SecondNumber"));
query.Columns.Add(DQSelectColumn.Field("UnitNumber"));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID"));
query.Range = SelectRange.Top(50);
var list = new List();
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var entity = new SegmentStockUp();
entity.ID = (long)reader[0];
entity.DetailID = (long)reader[1];
entity.BarCode = (string)reader[2];
entity.SecondNumber = (decimal?)reader[3];
entity.UnitNumber = (decimal?)reader[4];
list.Add(entity);
}
}
return list;
}
static void SetLocalSync(IDmoSession session, long min, long max)
{
var update = new DQUpdateDom(typeof(SegmentStockUp));
update.Columns.Add(new DQUpdateColumn("Sync", true));
update.Where.Conditions.Add(DQCondition.Between("ID", min, max));
session.ExecuteNonQuery(update);
}
public static void Insert(SegmentStockUp detail)
{
using (var session = DmoSession.New())
{
session.Insert(detail);
session.Commit();
}
}
}
}