|
|
|
@ -1,4 +1,5 @@ |
|
|
|
using BWP.B3ClientService.BO; |
|
|
|
using BWP.B3Frameworks.Utils; |
|
|
|
using Forks.EnterpriseServices.DomainObjects2; |
|
|
|
using Forks.EnterpriseServices.DomainObjects2.DQuery; |
|
|
|
using Forks.EnterpriseServices.JsonRpc; |
|
|
|
@ -8,6 +9,7 @@ using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
using System.Text; |
|
|
|
using System.Web.Script.Serialization; |
|
|
|
using TSingSoft.WebPluginFramework; |
|
|
|
|
|
|
|
namespace BWP.B3ClientService.Rpcs.BillRpc |
|
|
|
{ |
|
|
|
@ -50,5 +52,117 @@ namespace BWP.B3ClientService.Rpcs.BillRpc |
|
|
|
|
|
|
|
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); |
|
|
|
return InsertNewOrder(session, orderId, number, type); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
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(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(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>(); |
|
|
|
var first = r.FirstOrDefault(x => x.Item1); |
|
|
|
if (first == null) |
|
|
|
return r.First().Item2; |
|
|
|
else |
|
|
|
return first.Item2; |
|
|
|
} |
|
|
|
} |
|
|
|
} |