You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

157 lines
5.6 KiB

using ButcherFactory.BO.Bill;
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.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ButcherFactory.BO.LocalBL
{
public static class SegmentPickUpBL
{
const string RpcPath = @"/MainSystem/B3ClientService/Rpcs/SegmentPickUpRpc/";
public static BindingList<SegmentPickUp> GetSegmentPickUp(bool submited)
{
var query = new DQueryDom(new JoinAlias(typeof(SegmentPickUp)));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("RowIndex"));
query.Columns.Add(DQSelectColumn.Field("Goods_Name"));
query.Columns.Add(DQSelectColumn.Field("Number"));
query.Columns.Add(DQSelectColumn.Field("Weight"));
//query.Columns.Add(DQSelectColumn.Field("CreateTime"));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID", true));
query.Where.Conditions.Add(DQCondition.EQ("Submited", submited));
if (submited)
{
query.Where.Conditions.Add(DQCondition.And(DQCondition.Between("CreateTime", DateTime.Today, DateTime.Today + new TimeSpan(23, 59, 59))));
query.Range = SelectRange.Top(20);
}
var list = new BindingList<SegmentPickUp>();
using (var session = DmoSession.New())
{
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var entity = new SegmentPickUp();
entity.ID = (long)reader[0];
entity.RowIndex = (int)reader[1];
entity.Goods_Name = (string)reader[2];
entity.Number = (int)reader[3];
entity.Weight = (decimal?)reader[4];
//entity.CreateTime = (DateTime)reader[5];
list.Add(entity);
}
}
}
return list;
}
public static void InsertEntityByWeight(SegmentPickUp entity)
{
using (var session = DmoSession.New())
{
entity.Number = 1;
entity.UserID = BO.Utils.AppContext.Worker.ID;
session.Insert(entity);
session.Commit();
}
}
public static void UpdateNumber(long id, int number)
{
var update = new DQUpdateDom(typeof(SegmentPickUp));
update.Where.Conditions.Add(DQCondition.EQ("ID", id));
update.Columns.Add(new DQUpdateColumn("Number", number));
update.EExecute();
}
public static void UpdateSubmit(IEnumerable<long> ids)
{
var update = new DQUpdateDom(typeof(SegmentPickUp));
update.Where.Conditions.Add(DQCondition.InList(DQExpression.Field("ID"), ids.Select(x => DQExpression.Value(x)).ToArray()));
update.Columns.Add(new DQUpdateColumn("Submited", true));
update.EExecute();
}
public static void UploadSegmentInfo()
{
try
{
using (var session = DmoSession.New())
{
var needUpload = GetUnSyncData(session);
if (needUpload.Count == 0)
return;
var method = RpcPath + "UploadSegmentInfo";
var json = JsonConvert.SerializeObject(needUpload);
RpcFacade.Call<int>(method, json);
foreach (var item in needUpload)
SetLocalAsSyncd(item, session);
session.Commit();
}
}
catch
{
#if DEBUG
throw;
#endif
}
}
static List<SegmentPickUp> GetUnSyncData(IDmoSession session)
{
var query = new DQueryDom(new JoinAlias(typeof(SegmentPickUp)));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("RowVersion"));
query.Columns.Add(DQSelectColumn.Field("UserID"));
query.Columns.Add(DQSelectColumn.Field("WorkUnit_ID"));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Field("Goods_ID"));
query.Columns.Add(DQSelectColumn.Field("Weight"));
query.Columns.Add(DQSelectColumn.Field("CreateTime"));
query.Columns.Add(DQSelectColumn.Field("Number"));
query.Columns.Add(DQSelectColumn.Field("Store_ID"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Submited", true), DQCondition.EQ("Sync", false)));
query.Range = SelectRange.Top(10);
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID"));
var upload = new List<SegmentPickUp>();
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var obj = new SegmentPickUp();
obj.ID = (long)reader[0];
obj.RowVersion = (int)reader[1];
obj.UserID = (long)reader[2];
obj.WorkUnit_ID = (long?)reader[4];
obj.ProductBatch_ID = (long?)reader[4];
obj.Goods_ID = (long?)reader[5];
obj.Weight = (decimal?)reader[6];
obj.CreateTime = (DateTime)reader[7];
obj.Number = (int)reader[8];
obj.Store_ID = (long?)reader[9];
upload.Add(obj);
}
}
return upload;
}
static void SetLocalAsSyncd(SegmentPickUp obj, IDmoSession session)
{
var update = new DQUpdateDom(typeof(SegmentPickUp));
update.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("ID", obj.ID), DQCondition.EQ("RowVersion", obj.RowVersion)));
update.Columns.Add(new DQUpdateColumn("Sync", true));
session.ExecuteNonQuery(update);
}
}
}