|
|
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("您正在操作的排宰顺序已被重新排序");
|
|
|
}
|
|
|
}
|
|
|
}
|