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

186 lines
7.0 KiB

using BWP.B3ClientService.BO;
using BWP.B3Frameworks.Utils;
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));
query.Columns.Add(DQSelectColumn.Field("Finish", detail));
query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("OrderState", 10));
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;
item.Finish = (bool?)reader[6] ?? false;
}
}
}
return serializer.Serialize(list);
}
[Rpc]
public static long InsertDetail(string json, string mainJson, long orderDetailID)
{
json = json.ESerializeDateTime();
var detail = serializer.Deserialize<SecondOrder_Detail>(json);
using (var session = Dmo.NewSession())
{
CheckOrderDelete(session, orderDetailID);
if (detail.SecondOrder_ID == 0)
{
mainJson = mainJson.ESerializeDateTime();
var entity = serializer.Deserialize<SecondOrder>(mainJson);
entity.ModifyTime = DateTime.Now;
entity.IsOk = true;
session.Insert(entity);
detail.SecondOrder_ID = entity.ID;
UpdateOrderDetailHasSecondarySplit(session, entity.OrderDetail_ID);
}
else
UpdateMainNumber(session, detail.SecondOrder_ID, detail.Number);
session.Insert(detail);
session.Commit();
}
return detail.SecondOrder_ID;
}
static void UpdateOrderDetailHasSecondarySplit(IDmoSession session, long id)
{
var update = new DQUpdateDom(typeof(OrderDetail));
update.Columns.Add(new DQUpdateColumn("SecondarySplit", true));
update.Where.Conditions.Add(DQCondition.EQ("ID", id));
session.ExecuteNonQuery(update);
}
[Rpc]
public static int DeleteDetail(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("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1))));
update.Columns.Add(new DQUpdateColumn("HotFadeNumber", DQExpression.Add(DQExpression.Field("HotFadeNumber"), DQExpression.Value(number))));
session.ExecuteNonQuery(update);
}
[Rpc]
public static long SetFinish(long id, long orderDetailID, string json)
{
using (var session = Dmo.NewSession())
{
CheckOrderDelete(session, orderDetailID);
if (id == 0)
{
var entity = serializer.Deserialize<SecondOrder>(json);
entity.ModifyTime = DateTime.Now;
entity.IsOk = true;
entity.Finish = 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("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1))));
update.Columns.Add(new DQUpdateColumn("IsOk", true));
update.Columns.Add(new DQUpdateColumn("Finish", true));
session.ExecuteNonQuery(update);
}
UpdateOrderDetailHasSecondarySplit(session, orderDetailID);
session.Commit();
}
return id;
}
public static void OffLineCreateSecondOrder(IDmoSession session, OrderDetail detail)
{
var second = new SecondOrder();
second.ModifyTime = DateTime.Now;
second.IsOk = true;
second.Finish = true;
second.OrderDetail_ID = detail.ID;
second.HotFadeNumber = detail.Technics == 0 ? detail.PlanNumber : 0;
session.Insert(second);
if (second.HotFadeNumber != 0)
return;
var sDetail = new SecondOrder_Detail();
sDetail.Number = second.HotFadeNumber;
sDetail.SecondOrder_ID = second.ID;
sDetail.Time = DateTime.Now;
session.Insert(sDetail);
}
[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());
}
static void CheckOrderDelete(IDmoSession session, long id)
{
var delete = InnerBLUtil.GetDmoPropertyByID<bool?>(session, typeof(OrderDetail), "DeleteState", id) ?? true;
if (delete)
throw new Exception("您正在操作的排宰顺序已被重新排序");
}
}
}