|
|
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.Web.Script.Serialization;
|
|
|
using TSingSoft.WebPluginFramework;
|
|
|
|
|
|
namespace BWP.B3ClientService.Rpcs.BillRpc
|
|
|
{
|
|
|
[Rpc]
|
|
|
public static class DropPigRpc
|
|
|
{
|
|
|
static JavaScriptSerializer serializer = new JavaScriptSerializer();
|
|
|
[Rpc]
|
|
|
public static string GetDropPigOrderList(DateTime butcherDate)
|
|
|
{
|
|
|
var main = new JoinAlias(typeof(OrderDetail));
|
|
|
var second = new JoinAlias(typeof(SecondOrder));
|
|
|
var query = new DQueryDom(main);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(second), DQCondition.And(DQCondition.EQ(main, "ID", second, "OrderDetail_ID")));
|
|
|
query.Columns.Add(DQSelectColumn.Field("B3WeighBill_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Order"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("PlanNumber"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("HotFadeNumber", second));
|
|
|
query.Columns.Add(DQSelectColumn.Field("IsDrop"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", butcherDate), DQCondition.EQ("DeleteState", false)));
|
|
|
var list = new List<DropPigOrderList>();
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
using (var reader = session.ExecuteReader(query))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
var entity = new DropPigOrderList();
|
|
|
entity.B3WeighBill_ID = (long?)reader[0];
|
|
|
entity.OrderDetail_ID = (long)reader[1];
|
|
|
entity.Order = (int)reader[2];
|
|
|
entity.PlanNumber = (int)reader[3];
|
|
|
entity.HotFadeNumber = (int?)reader[4] ?? 0;
|
|
|
entity.IsDrop = (bool)reader[5];
|
|
|
list.Add(entity);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return serializer.Serialize(list);
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static int InsertDropPig(long orderId, int number, short type)
|
|
|
{
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
SubtractPlanNumber(session, orderId, number);
|
|
|
SubtractHotFadeNumber(session, orderId, number, type);
|
|
|
var order = InsertNewOrder(session, orderId, number, type);
|
|
|
session.Commit();
|
|
|
return order;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void SubtractPlanNumber(IDmoSession session, long id, int number)
|
|
|
{
|
|
|
var update = new DQUpdateDom(typeof(OrderDetail));
|
|
|
update.Columns.Add(new DQUpdateColumn("PlanNumber", DQExpression.Subtract(DQExpression.Field("PlanNumber"), DQExpression.Value(number))));
|
|
|
update.Columns.Add(new DQUpdateColumn("Sync", false));
|
|
|
update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now));
|
|
|
update.Where.Conditions.Add(DQCondition.EQ("ID", id));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
}
|
|
|
|
|
|
static void SubtractHotFadeNumber(IDmoSession session, long orderID, int number, short type)
|
|
|
{
|
|
|
var info = GetSecondOrderInfo(session, orderID);
|
|
|
if (type == 0)
|
|
|
{
|
|
|
if (info == null)
|
|
|
throw new Exception("没有烫褪头数");
|
|
|
else if (info.Item3 < number)
|
|
|
throw new Exception("烫褪头数不足");
|
|
|
var update = new DQUpdateDom(typeof(SecondOrder));
|
|
|
update.Columns.Add(new DQUpdateColumn("HotFadeNumber", DQExpression.Subtract(DQExpression.Field("HotFadeNumber"), DQExpression.Value(number))));
|
|
|
update.Columns.Add(new DQUpdateColumn("Sync", false));
|
|
|
update.Columns.Add(new DQUpdateColumn("ModifyTime", DateTime.Now));
|
|
|
update.Where.Conditions.Add(DQCondition.EQ("ID", info.Item1.Value));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
var iDetail = new SecondOrder_Detail();
|
|
|
iDetail.Number = -number;
|
|
|
iDetail.SecondOrder_ID = info.Item1.Value;
|
|
|
iDetail.Time = DateTime.Now;
|
|
|
session.Insert(iDetail);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
var mao = 0;
|
|
|
if (info == null)
|
|
|
mao = InnerBLUtil.GetDmoPropertyByID<int>(session, typeof(SecondOrder), "PlanNumber", orderID);
|
|
|
else
|
|
|
mao = info.Item2.Value - info.Item3.Value;
|
|
|
if (mao < number)
|
|
|
throw new Exception("毛剥头数不足");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static Tuple<long?, int?, int?> GetSecondOrderInfo(IDmoSession session, long orderID)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(SecondOrder)));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderID));
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("PlanNumber"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("HotFadeNumber"));
|
|
|
return query.EExecuteScalar<long?, int?, int?>(session);
|
|
|
}
|
|
|
|
|
|
static int InsertNewOrder(IDmoSession session, long orderID, int number, short type)
|
|
|
{
|
|
|
var order = InnerBLUtil.GetSingleDmo<OrderDetail>(session, new Tuple<string, object>("ID", orderID));
|
|
|
var nOrder = new OrderDetail();
|
|
|
DmoUtil.CopyDmoFields(order, nOrder, "B3MainID", "Order", "PlanNumber", "SecondarySplit", "OrderState", "IsDrop", "B3ID", "Sync", "ModifyTime", "ID");
|
|
|
nOrder.Order = GetMaxOrder(session, nOrder.Date.Value) + 1;
|
|
|
nOrder.PlanNumber = number;
|
|
|
nOrder.SecondarySplit = true;
|
|
|
nOrder.OrderState = 20;
|
|
|
nOrder.IsDrop = true;
|
|
|
nOrder.ModifyTime = DateTime.Now;
|
|
|
session.Insert(nOrder);
|
|
|
|
|
|
var sOrder = new SecondOrder();
|
|
|
sOrder.Sync = false;
|
|
|
sOrder.ModifyTime = DateTime.Now;
|
|
|
sOrder.OrderDetail_ID = nOrder.ID;
|
|
|
sOrder.HotFadeNumber = type == 0 ? number : 0;
|
|
|
sOrder.IsOk = true;
|
|
|
sOrder.Finish = true;
|
|
|
sOrder.FinishGrade = true;
|
|
|
session.Insert(sOrder);
|
|
|
if (type == 0)
|
|
|
{
|
|
|
var detail = new SecondOrder_Detail();
|
|
|
detail.Number = number;
|
|
|
detail.SecondOrder_ID = sOrder.ID;
|
|
|
detail.Time = DateTime.Now;
|
|
|
session.Insert(detail);
|
|
|
}
|
|
|
return nOrder.Order;
|
|
|
}
|
|
|
|
|
|
static int GetMaxOrder(IDmoSession session, DateTime date)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Columns.Add(DQSelectColumn.Field("IsDrop"));
|
|
|
query.Columns.Add(DQSelectColumn.Max("Order"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false)));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field("IsDrop"));
|
|
|
var r = query.EExecuteList<bool, int>(session);
|
|
|
var first = r.FirstOrDefault(x => x.Item1);
|
|
|
if (first == null)
|
|
|
return r.First().Item2;
|
|
|
else
|
|
|
return first.Item2;
|
|
|
}
|
|
|
}
|
|
|
}
|