屠宰场管理服务
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.

140 lines
4.9 KiB

using BWP.B3ClientService.BO;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.JsonRpc;
using Forks.EnterpriseServices.SqlDoms;
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 BWP.B3ClientService.Rpcs.BillRpc
{
[Rpc]
public static class SecondOrderRpc
{
static JavaScriptSerializer serializer = new JavaScriptSerializer();
[Rpc]
public static string SyncSecondOrder(DateTime date)
{
var main = new JoinAlias(typeof(OrderDetail));
var detail = new JoinAlias(typeof(SecondOrder));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "OrderDetail_ID"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("Date", date)));
query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(detail, "FinishGrade")), DQCondition.EQ(detail, "FinishGrade", false)));
query.Columns.Add(DQSelectColumn.Field("ID", main));
query.Columns.Add(DQSelectColumn.Field("ID", detail));
query.Columns.Add(DQSelectColumn.Field("Order", main));
query.Columns.Add(DQSelectColumn.Field("PlanNumber", main));
query.Columns.Add(DQSelectColumn.Field("HotFadeNumber", detail));
query.Columns.Add(DQSelectColumn.Field("IsOk", detail));
var list = new List<SecondOrder>();
using (var session = Dmo.NewSession())
{
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var item = new SecondOrder();
list.Add(item);
item.OrderDetail_ID = (long)reader[0];
item.ID = (long?)reader[1] ?? 0;
item.Order = (int)reader[2];
item.PlanNumber = (int)reader[3];
item.HotFadeNumber = (int?)reader[4] ?? 0;
item.IsOk = (bool?)reader[5] ?? false;
}
}
}
return serializer.Serialize(list);
}
[Rpc]
public static long InsertDetail(string json, string mainJson)
{
json = json.ESerializeDateTime();
var detail = serializer.Deserialize<SecondOrder_Detail>(json);
using (var session = Dmo.NewSession())
{
if (detail.SecondOrder_ID == 0)
{
mainJson = mainJson.ESerializeDateTime();
var entity = serializer.Deserialize<SecondOrder>(mainJson);
entity.ModifyTime = DateTime.Now;
session.Insert(entity);
detail.SecondOrder_ID = entity.ID;
}
else
UpdateMainNumber(session, detail.SecondOrder_ID, detail.Number);
session.Insert(detail);
session.Commit();
}
return detail.SecondOrder_ID;
}
[Rpc]
public static int DetailDetail(long id, long mainID, int number)
{
using (var session = Dmo.NewSession())
{
var delete = new DQDeleteDom(typeof(SecondOrder_Detail));
delete.Where.Conditions.Add(DQCondition.EQ("ID", id));
session.ExecuteNonQuery(delete);
UpdateMainNumber(session, mainID, -number);
session.Commit();
}
return 1;
}
static void UpdateMainNumber(IDmoSession session, long id, int number)
{
var update = new DQUpdateDom(typeof(SecondOrder));
update.Where.Conditions.Add(DQCondition.EQ("ID", id));
update.Columns.Add(new DQUpdateColumn("Sync", false));
update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now));
update.Columns.Add(new DQUpdateColumn("HotFadeNumber", DQExpression.Add(DQExpression.Field("HotFadeNumber"), DQExpression.Value(number))));
session.ExecuteNonQuery(update);
}
[Rpc]
public static long SetOk(long id, string json)
{
using (var session = Dmo.NewSession())
{
if (id == 0)
{
var entity = serializer.Deserialize<SecondOrder>(json);
entity.ModifyTime = DateTime.Now;
entity.IsOk = true;
session.Insert(entity);
id = entity.ID;
}
else
{
var update = new DQUpdateDom(typeof(SecondOrder));
update.Where.Conditions.Add(DQCondition.EQ("ID", id));
update.Columns.Add(new DQUpdateColumn("Sync", false));
update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now));
update.Columns.Add(new DQUpdateColumn("IsOk", true));
session.ExecuteNonQuery(update);
}
session.Commit();
}
return id;
}
[Rpc]
public static string GetSecondOrderDetails(long id)
{
var query = new DmoQuery(typeof(SecondOrder_Detail));
query.Where.Conditions.Add(DQCondition.EQ("SecondOrder_ID", id));
return serializer.Serialize(query.EExecuteList().Cast<SecondOrder_Detail>().ToList());
}
}
}