|
|
using BWP.B3ClientService.BO;
|
|
|
using BWP.B3ClientService.RpcBO;
|
|
|
using BWP.B3Frameworks.Utils;
|
|
|
using Forks.EnterpriseServices.DomainObjects2;
|
|
|
using Forks.EnterpriseServices.DomainObjects2.DQuery;
|
|
|
using Forks.EnterpriseServices.JsonRpc;
|
|
|
using Forks.EnterpriseServices.SqlDoms;
|
|
|
using Newtonsoft.Json;
|
|
|
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 OrderDetailRpc
|
|
|
{
|
|
|
static JavaScriptSerializer serializer = new JavaScriptSerializer();
|
|
|
|
|
|
#region 排宰
|
|
|
[Rpc]
|
|
|
public static string GetNeedOrderWeightBill(DateTime date, bool? showType)
|
|
|
{
|
|
|
var main = new JoinAlias(typeof(WeightBill));
|
|
|
var detail = new JoinAlias(typeof(WeightBill_Detail));
|
|
|
var relate = new JoinAlias(typeof(WeightBillShowRelate));
|
|
|
var query = new DQueryDom(main);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.And(DQCondition.EQ(main, "ID", detail, "WeightBill_ID"), DQCondition.EQ(detail, "DeleteState", false)));
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(relate), DQCondition.EQ(main, "ID", relate, "WeightBill_ID"));
|
|
|
var already = OrderDetailTemp.Register(query, main);
|
|
|
var hurry = HurryOrderTemp.Register(query, main, true);
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Supplier_Name"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("HouseNames"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Number", detail));
|
|
|
var alreadyNumber = DQExpression.Add(DQExpression.IfNull(DQExpression.Field(already, "Number"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(hurry, "Number"), DQExpression.Value(0)));
|
|
|
query.Columns.Add(DQSelectColumn.Create(alreadyNumber, "Already"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeighTime"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("B3ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Show", relate));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.Between("WeighTime", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.InEQ("HouseNames", "")));
|
|
|
query.Where.Conditions.Add(DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field(detail, "Number"), DQExpression.Value(0)), alreadyNumber));
|
|
|
if (showType == true)
|
|
|
query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(relate, "Show")), DQCondition.EQ(relate, "Show", true)));
|
|
|
else if (showType == false)
|
|
|
query.Where.Conditions.Add(DQCondition.EQ(relate, "Show", false));
|
|
|
var result = new List<NeedOrderEntity>();
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
using (var reader = session.ExecuteReader(query))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
var item = new NeedOrderEntity();
|
|
|
item.WeightBill_ID = (long)reader[0];
|
|
|
item.Supplier_Name = (string)reader[1];
|
|
|
item.HouseNames = (string)reader[2];
|
|
|
var v = reader[3];
|
|
|
if (v != null)
|
|
|
item.Number = Convert.ToInt32(v);
|
|
|
v = reader[4];
|
|
|
if (v != null)
|
|
|
item.AlreadyNumber = Convert.ToInt32(v);
|
|
|
item.WeighTime = (DateTime)reader[5];
|
|
|
item.B3ID = (long?)reader[6];
|
|
|
item.Show = ((bool?)reader[7] ?? true);
|
|
|
result.Add(item);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return serializer.Serialize(result);
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static Tuple<int, int> GetEveryNumberTuple(DateTime date)
|
|
|
{
|
|
|
var main = new JoinAlias(typeof(WeightBill));
|
|
|
var detail = new JoinAlias(typeof(WeightBill_Detail));
|
|
|
var relate = new JoinAlias(typeof(WeightBillShowRelate));
|
|
|
var query = new DQueryDom(main);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.And(DQCondition.EQ(main, "ID", detail, "WeightBill_ID"), DQCondition.EQ(detail, "DeleteState", false)));
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(relate), DQCondition.EQ(main, "ID", relate, "WeightBill_ID"));
|
|
|
var already = OrderDetailTemp.Register(query, main);
|
|
|
var hurry = HurryOrderTemp.Register(query, main, true);
|
|
|
query.Columns.Add(DQSelectColumn.Field("Show", relate));
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "Number"));
|
|
|
var alreadyNumber = DQExpression.Add(DQExpression.IfNull(DQExpression.Field(already, "Number"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(hurry, "Number"), DQExpression.Value(0)));
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(alreadyNumber), "Already"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(relate, "Show"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.Between("WeighTime", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.InEQ("HouseNames", "")));
|
|
|
query.Where.Conditions.Add(DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field(detail, "Number"), DQExpression.Value(0)), alreadyNumber));
|
|
|
var n1 = 0;
|
|
|
var n2 = 0;
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
using (var reader = session.ExecuteReader(query))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
var last = Convert.ToInt32(reader[1] ?? 0) - Convert.ToInt32(reader[2] ?? 0);
|
|
|
var type = (bool?)reader[0];
|
|
|
if (type == false)
|
|
|
n2 = last;
|
|
|
else
|
|
|
n1 += last;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return new Tuple<int, int>(n1, n2);
|
|
|
}
|
|
|
|
|
|
class OrderDetailTemp
|
|
|
{
|
|
|
public long WeightBill_ID { get; set; }
|
|
|
|
|
|
public int? Number { get; set; }
|
|
|
|
|
|
public static JoinAlias Register(DQueryDom rootQuery, JoinAlias rootAlias)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeightBill_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Sum("PlanNumber"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field("WeightBill_ID"));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("DeleteState", false));
|
|
|
rootQuery.RegisterQueryTable(typeof(OrderDetailTemp), new string[] { "WeightBill_ID", "Number" }, query);
|
|
|
var alias = new JoinAlias(typeof(OrderDetailTemp));
|
|
|
rootQuery.From.AddJoin(JoinType.Left, new DQDmoSource(alias), DQCondition.EQ(rootAlias, "ID", alias, "WeightBill_ID"));
|
|
|
return alias;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
class HurryOrderTemp
|
|
|
{
|
|
|
public long WeightBill_ID { get; set; }
|
|
|
|
|
|
public int? Number { get; set; }
|
|
|
|
|
|
public static JoinAlias Register(DQueryDom rootQuery, JoinAlias rootAlias, bool unOrder, string joinField = "ID")
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(HurryRecord)));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeightBill_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Sum("HurryNumber"));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field("WeightBill_ID"));
|
|
|
if (unOrder)
|
|
|
query.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field("ToOrderDetail_ID")));
|
|
|
rootQuery.RegisterQueryTable(typeof(HurryOrderTemp), new string[] { "WeightBill_ID", "Number" }, query);
|
|
|
var alias = new JoinAlias(typeof(HurryOrderTemp));
|
|
|
rootQuery.From.AddJoin(JoinType.Left, new DQDmoSource(alias), DQCondition.EQ(rootAlias, joinField, alias, "WeightBill_ID"));
|
|
|
return alias;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static int GetLastNumber(long weightID, long backId)
|
|
|
{
|
|
|
var totalNumber = GetWeightNumber(weightID);
|
|
|
var alreadyNumber = GetAlreadyNumberWithoutBack(weightID, backId);
|
|
|
|
|
|
return totalNumber - alreadyNumber - HurryRecordUnOrderNumber(weightID);
|
|
|
}
|
|
|
|
|
|
static int GetWeightNumber(long wid)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(WeightBill_Detail)));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("WeightBill_ID", wid)));
|
|
|
query.Columns.Add(DQSelectColumn.Sum("Number"));
|
|
|
var rst = query.EExecuteScalar();
|
|
|
if (rst != null)
|
|
|
return Convert.ToInt32(rst);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int GetAlreadyNumberWithoutBack(long wid, long oid)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("WeightBill_ID", wid), DQCondition.InEQ("ID", oid)));
|
|
|
query.Columns.Add(DQSelectColumn.Sum("PlanNumber"));
|
|
|
var rst = query.EExecuteScalar();
|
|
|
if (rst != null)
|
|
|
return Convert.ToInt32(rst);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int HurryRecordUnOrderNumber(long wid)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(HurryRecord)));
|
|
|
query.Columns.Add(DQSelectColumn.Sum("HurryNumber"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("WeightBill_ID", wid), DQCondition.IsNull(DQExpression.Field("ToOrderDetail_ID"))));
|
|
|
var rst = query.EExecuteScalar();
|
|
|
if (rst != null)
|
|
|
return Convert.ToInt32(rst);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static string GetOrderDetail(DateTime date)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeightBill_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Order"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("PlanNumber"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("LiveColonyHouse_Name"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("IsHurryButcher"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("B3WeighBill_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("SecondarySplit"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Supplier_Name"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("OrderState"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Technics"));
|
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("IsDrop", false)));
|
|
|
var list = new List<OrderDetail>();
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
using (var reader = session.ExecuteReader(query))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
var entity = new OrderDetail();
|
|
|
entity.ID = (long)reader[0];
|
|
|
entity.WeightBill_ID = (long)reader[1];
|
|
|
entity.Order = (int)reader[2];
|
|
|
entity.PlanNumber = (int)reader[3];
|
|
|
entity.LiveColonyHouse_Name = (string)reader[4];
|
|
|
entity.IsHurryButcher = (bool)reader[5];
|
|
|
entity.B3WeighBill_ID = (long?)reader[6];
|
|
|
entity.SecondarySplit = (bool)reader[7];
|
|
|
entity.Supplier_Name = (string)reader[8];
|
|
|
entity.OrderState = (int)reader[9];
|
|
|
entity.Technics = (short?)reader[10];
|
|
|
entity.Date = date;
|
|
|
list.Add(entity);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return serializer.Serialize(list);
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static string GetConfirmOrder(DateTime date)
|
|
|
{
|
|
|
var main = new JoinAlias(typeof(OrderDetail));
|
|
|
var detail = new JoinAlias(typeof(OrderConfirmDetial));
|
|
|
var query = new DQueryDom(main);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "OrderDetail_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeightBill_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Order"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("PlanNumber"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("LiveColonyHouse_Name"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("IsHurryButcher"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("B3WeighBill_ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("SecondarySplit"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("OrderState"));
|
|
|
foreach (var item in query.Columns)
|
|
|
query.GroupBy.Expressions.Add(item.Expression);
|
|
|
query.Columns.Add(DQSelectColumn.Sum(detail, "Number"));
|
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("IsDrop", false)));
|
|
|
var list = new List<OrderDetail>();
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
using (var reader = session.ExecuteReader(query))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
var entity = new OrderDetail();
|
|
|
entity.ID = (long)reader[0];
|
|
|
entity.WeightBill_ID = (long)reader[1];
|
|
|
entity.Order = (int)reader[2];
|
|
|
entity.PlanNumber = (int)reader[3];
|
|
|
entity.LiveColonyHouse_Name = (string)reader[4];
|
|
|
entity.IsHurryButcher = (bool)reader[5];
|
|
|
entity.B3WeighBill_ID = (long?)reader[6];
|
|
|
entity.SecondarySplit = (bool)reader[7];
|
|
|
entity.OrderState = (int)reader[8];
|
|
|
entity.ConfirmNumber = (int?)reader[9];
|
|
|
list.Add(entity);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return JsonConvert.SerializeObject(list);
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static string GetOrderConfirmDetail(long orderID)
|
|
|
{
|
|
|
var query = new DmoQuery(typeof(OrderConfirmDetial));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderID));
|
|
|
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID"));
|
|
|
return JsonConvert.SerializeObject(query.EExecuteList());
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static long SaveConfirmDetail(string obj)
|
|
|
{
|
|
|
var detail = JsonConvert.DeserializeObject<OrderConfirmDetial>(obj);
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
if(detail.ID==0)
|
|
|
session.Insert(detail);
|
|
|
else
|
|
|
session.Update(detail);
|
|
|
session.Commit();
|
|
|
return detail.ID;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static int GetMaxOrder(DateTime date)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Columns.Add(DQSelectColumn.Max("Order"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date.Date), DQCondition.EQ("DeleteState", false), DQCondition.EQ("IsDrop", false)));
|
|
|
return query.EExecuteScalar<int?>() ?? 0;
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static int GetCurrentOrder(long id)
|
|
|
{
|
|
|
return GetOrderDetailProperty<int>(id, "Order");
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static int GetCurrentOrderPlanNumber(long id)
|
|
|
{
|
|
|
return GetOrderDetailProperty<int>(id, "PlanNumber");
|
|
|
}
|
|
|
|
|
|
static T GetOrderDetailProperty<T>(long id, string property)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Columns.Add(DQSelectColumn.Field(property));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("ID", id));
|
|
|
return (T)query.EExecuteScalar();
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static long Insert(string insert)
|
|
|
{
|
|
|
insert = insert.ESerializeDateTime();
|
|
|
var entity = serializer.Deserialize<OrderDetail>(insert);
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
CheckCanInsert(session, entity.Order, entity.Date.Value);
|
|
|
entity.ModifyTime = DateTime.Now;
|
|
|
UpdateOrder(session, entity.Order - 1, 1, entity.Date);
|
|
|
session.Insert(entity);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return entity.ID;
|
|
|
}
|
|
|
|
|
|
static void CheckCanInsert(IDmoSession session, int order, DateTime date)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Range = SelectRange.Top(1);
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "c"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false), DQCondition.GreaterThanOrEqual("OrderState", 10), DQCondition.GreaterThanOrEqual("Order", order), DQCondition.EQ("IsDrop", false)));
|
|
|
if (query.EExecuteScalar(session) != null)
|
|
|
throw new Exception("不允许插入到已进行顺序确认之前");
|
|
|
}
|
|
|
|
|
|
public static void UpdateOrderDetailPartial(IDmoSession session, long id, string property, object value)
|
|
|
{
|
|
|
var update = new DQUpdateDom(typeof(OrderDetail));
|
|
|
update.Columns.Add(new DQUpdateColumn(property, value));
|
|
|
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.Where.Conditions.Add(DQCondition.EQ("ID", id));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static int UpdateNum(long id, int number)
|
|
|
{
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
//var secondSplit = InnerBLUtil.GetDmoPropertyByID<bool>(session, typeof(OrderDetail), "SecondarySplit", id);
|
|
|
//if (secondSplit)
|
|
|
// throw new Exception("已进行烫毛计数,不能修改");
|
|
|
UpdateOrderDetailPartial(session, id, "PlanNumber", number);
|
|
|
UpdateSecondOrder(id, session);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
public static void UpdateSecondOrder(long id, IDmoSession session)
|
|
|
{
|
|
|
var update = new DQUpdateDom(typeof(SecondOrder));
|
|
|
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.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", id));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Rpc]
|
|
|
public static int Delete(long id)
|
|
|
{
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
var entity = InnerBLUtil.GetSingleDmo<OrderDetail>(session, "ID", id, "Order", "Date", "OrderState");
|
|
|
if (entity.OrderState != 0)
|
|
|
throw new Exception("已开始宰杀,不能修改");
|
|
|
UpdateOrder(session, entity.Order, -1, entity.Date);
|
|
|
UpdateOrderDetailPartial(session, id, "DeleteState", true);
|
|
|
ClearHurryRecordToOrderID(session, id);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static int ChangeShowType(long id, bool show)
|
|
|
{
|
|
|
var entity = new WeightBillShowRelate();
|
|
|
entity.WeightBill_ID = id;
|
|
|
entity.Show = show;
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
session.AddInsertOrUpdate(entity);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
static void UpdateOrder(IDmoSession session, int greaterThanOrder, int offset, DateTime? date)
|
|
|
{
|
|
|
var update = new DQUpdateDom(typeof(OrderDetail));
|
|
|
update.Columns.Add(new DQUpdateColumn("Order", DQExpression.Add(DQExpression.Field("Order"), DQExpression.Value(offset))));
|
|
|
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.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThan("Order", greaterThanOrder), DQCondition.EQ("Date", date), DQCondition.EQ("DeleteState", false)));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region hurryButcher
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static string GetHurryRecordList(long weightId)
|
|
|
{
|
|
|
var query = new DmoQuery(typeof(HurryRecord));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("WeightBill_ID", weightId));
|
|
|
return serializer.Serialize(query.EExecuteList().Cast<HurryRecord>().ToList());
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static long? DeleteHurryRecord(long id)
|
|
|
{
|
|
|
long? orderID;
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
var entity = InnerBLUtil.GetSingleDmo<HurryRecord>(session, "ID", id, "HurryNumber", "WeightBill_ID");
|
|
|
orderID = GetOrderID(entity.WeightBill_ID);
|
|
|
var delete = new DQDeleteDom(typeof(HurryRecord));
|
|
|
delete.Where.Conditions.Add(DQCondition.EQ("ID", id));
|
|
|
session.ExecuteNonQuery(delete);
|
|
|
if (orderID > 0)
|
|
|
AddOrderNumber(session, orderID.Value, entity.HurryNumber);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return orderID;
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static string InsertHurryRecord(string detail)
|
|
|
{
|
|
|
detail = detail.ESerializeDateTime();
|
|
|
var entity = serializer.Deserialize<HurryRecord>(detail);
|
|
|
long? orderID = GetOrderID(entity.WeightBill_ID);
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
session.Insert(entity);
|
|
|
if (orderID > 0)
|
|
|
AddOrderNumber(session, orderID.Value, -entity.HurryNumber);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return string.Format("{0}|{1}", orderID, entity.ID);
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static int GetHurryRecordNumber(long weightId)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(HurryRecord)));
|
|
|
query.Columns.Add(DQSelectColumn.Sum("HurryNumber"));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("WeightBill_ID", weightId));
|
|
|
return Convert.ToInt32(query.EExecuteScalar() ?? 0);
|
|
|
}
|
|
|
|
|
|
static void AddOrderNumber(IDmoSession session, long ID, int subNumber)
|
|
|
{
|
|
|
var update = new DQUpdateDom(typeof(OrderDetail));
|
|
|
update.Where.Conditions.Add(DQCondition.EQ("ID", ID));
|
|
|
update.Columns.Add(new DQUpdateColumn("Sync", false));
|
|
|
update.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1))));
|
|
|
update.Columns.Add(new DQUpdateColumn("PlanNumber", DQExpression.Add(DQExpression.Field("PlanNumber"), DQExpression.Value(subNumber))));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
|
|
|
UpdateSecondOrder(ID, session);
|
|
|
}
|
|
|
|
|
|
static long? GetOrderID(long weightBillId)
|
|
|
{
|
|
|
var detail = new JoinAlias(typeof(WeightBill_Detail));
|
|
|
var order = new JoinAlias(typeof(OrderDetail));
|
|
|
var query = new DQueryDom(detail);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(order), DQCondition.EQ(order, "WeightBill_ID", weightBillId));
|
|
|
var hurry = GetHurryRecordNumber(weightBillId);
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID", order));
|
|
|
query.Columns.Add(DQSelectColumn.Create(DQExpression.Subtract(DQExpression.IfNull(DQExpression.Field(detail, "Number"), DQExpression.Value(0)), DQExpression.IfNull(DQExpression.Field(order, "PlanNumber"), DQExpression.Value(0))), "last"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(detail, "DeleteState", false), DQCondition.EQ(order, "DeleteState", false), DQCondition.EQ(order, "IsHurryButcher", false), DQCondition.EQ(order, "IsDrop", false), DQCondition.EQ(detail, "WeightBill_ID", weightBillId)));
|
|
|
long? id = null;
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
using (var reader = session.ExecuteReader(query))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
if (id.HasValue || Convert.ToInt32(reader[1]) - hurry != 0)
|
|
|
return -1;
|
|
|
id = (long)reader[0];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static string GetHurryRecord(long id)
|
|
|
{
|
|
|
var query = new DmoQuery(typeof(HurryRecord));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("ID", id));
|
|
|
var entity = query.EExecuteScalar<HurryRecord>();
|
|
|
if (entity == null)
|
|
|
throw new Exception(string.Format("急宰单No.{0} 已被删除", id));
|
|
|
return JsonConvert.SerializeObject(entity);
|
|
|
}
|
|
|
|
|
|
[Rpc]
|
|
|
public static string GetSelectHurryList(DateTime butcherDate)
|
|
|
{
|
|
|
var bill = new JoinAlias(typeof(WeightBill));
|
|
|
var detail = new JoinAlias(typeof(WeightBill_Detail));
|
|
|
var query = new DQueryDom(bill);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.And(DQCondition.EQ(bill, "ID", detail, "WeightBill_ID"), DQCondition.EQ(detail, "DeleteState", false)));
|
|
|
var hurry = HurryOrderTemp.Register(query, bill, false);
|
|
|
var start = StartOrderTemp.Register(query, bill, butcherDate);
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("B3ID"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Supplier_Name"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("HouseNames"));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Number", detail));
|
|
|
query.Columns.Add(DQSelectColumn.Field("Number", hurry));
|
|
|
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.InEQ("HouseNames", "")));
|
|
|
|
|
|
var list = new List<SelectHurryList>();
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
using (var reader = session.ExecuteReader(query))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
var entity = new SelectHurryList();
|
|
|
entity.WeightBill_ID = (long)reader[0];
|
|
|
entity.B3WeighBill_ID = (long?)reader[1];
|
|
|
entity.Supplier_Name = (string)reader[2];
|
|
|
entity.LiveColonyHouse_Name = (string)reader[3];
|
|
|
entity.WeightNumber = (int?)reader[4] ?? 0;
|
|
|
entity.HurryNumber = Convert.ToInt32(reader[5] ?? 0);
|
|
|
list.Add(entity);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return serializer.Serialize(list);
|
|
|
}
|
|
|
|
|
|
class StartOrderTemp
|
|
|
{
|
|
|
public long WeightBill_ID { get; set; }
|
|
|
|
|
|
public static JoinAlias Register(DQueryDom rootQuery, JoinAlias rootAlias, DateTime date)
|
|
|
{
|
|
|
var detail = new JoinAlias(typeof(WeightBill_Detail));
|
|
|
var order = new JoinAlias(typeof(OrderDetail));
|
|
|
var query = new DQueryDom(detail);
|
|
|
query.From.AddJoin(JoinType.Left, new DQDmoSource(order), DQCondition.And(DQCondition.EQ(detail, "WeightBill_ID", order, "WeightBill_ID"), DQCondition.EQ(order, "DeleteState", false)));
|
|
|
query.Columns.Add(DQSelectColumn.Field("WeightBill_ID", detail));
|
|
|
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "WeightBill_ID"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(order, "ID")), DQCondition.EQ(order, "Date", date)), DQCondition.EQ(detail, "DeleteState", false)));
|
|
|
|
|
|
rootQuery.RegisterQueryTable(typeof(StartOrderTemp), new string[] { "WeightBill_ID" }, query);
|
|
|
var alias = new JoinAlias(typeof(StartOrderTemp));
|
|
|
rootQuery.From.AddJoin(JoinType.Inner, new DQDmoSource(alias), DQCondition.EQ(rootAlias, "ID", alias, "WeightBill_ID"));
|
|
|
return alias;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region orderConfirm
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static int SetOrderState(long id, int state)
|
|
|
{
|
|
|
if (!(state == 0 || state == 10 || state == 20))
|
|
|
throw new Exception(string.Format("错误的状态输入 {0}", state));
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
var orderInfo = InnerBLUtil.GetSingleDmo<OrderDetail>(session, "ID", id, "Technics", "PlanNumber");
|
|
|
orderInfo.ID = id;
|
|
|
|
|
|
var update = new DQUpdateDom(typeof(OrderDetail));
|
|
|
update.Columns.Add(new DQUpdateColumn("OrderState", state));
|
|
|
if (orderInfo.Technics.HasValue)
|
|
|
{
|
|
|
if (state == 0)
|
|
|
update.Columns.Add(new DQUpdateColumn("SecondarySplit", false));
|
|
|
else
|
|
|
update.Columns.Add(new DQUpdateColumn("SecondarySplit", true));
|
|
|
}
|
|
|
update.Where.Conditions.Add(DQCondition.EQ("ID", id));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
if (orderInfo.Technics.HasValue)
|
|
|
OffLineCreateSecondOrder(session, orderInfo, state);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
static void OffLineCreateSecondOrder(IDmoSession session, OrderDetail detail, int state)
|
|
|
{
|
|
|
var secondOrderID = GetSecondOrderID(session, detail.ID);
|
|
|
if (state == 0)
|
|
|
DeleteSecondOrder(session, secondOrderID, detail.ID);
|
|
|
else
|
|
|
{
|
|
|
if (secondOrderID.HasValue)
|
|
|
return;
|
|
|
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);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private static void DeleteSecondOrder(IDmoSession session, long? secondOrderID, long orderID)
|
|
|
{
|
|
|
if (secondOrderID == null)
|
|
|
return;
|
|
|
BeforeDeleteSecondOrder(session, orderID);
|
|
|
var delete = new DQDeleteDom(typeof(SecondOrder));
|
|
|
delete.Where.Conditions.Add(DQCondition.EQ("ID", secondOrderID));
|
|
|
session.ExecuteNonQuery(delete);
|
|
|
|
|
|
var delete2 = new DQDeleteDom(typeof(SecondOrder_Detail));
|
|
|
delete2.Where.Conditions.Add(DQCondition.EQ("SecondOrder_ID", secondOrderID));
|
|
|
session.ExecuteNonQuery(delete2);
|
|
|
}
|
|
|
|
|
|
static void BeforeDeleteSecondOrder(IDmoSession session, long orderID)
|
|
|
{
|
|
|
var q = new DQueryDom(new JoinAlias(typeof(GradeAndWeight_Detail)));
|
|
|
q.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderID));
|
|
|
q.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
q.Range = SelectRange.Top(1);
|
|
|
if (q.EExecuteScalar() != null)
|
|
|
throw new Exception("已经开始胴体称重定级,无法取消");
|
|
|
}
|
|
|
|
|
|
private static long? GetSecondOrderID(IDmoSession session, long orderDetailID)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(SecondOrder)));
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("OrderDetail_ID", orderDetailID));
|
|
|
query.Columns.Add(DQSelectColumn.Field("ID"));
|
|
|
return query.EExecuteScalar<long?>(session);
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static long InsertByHurryRecord(string insert, long hurryID)
|
|
|
{
|
|
|
var entity = JsonConvert.DeserializeObject<OrderDetail>(insert);
|
|
|
using (var session = Dmo.NewSession())
|
|
|
{
|
|
|
CheckCanInsert(session, entity.Order, entity.Date.Value);
|
|
|
entity.ModifyTime = DateTime.Now;
|
|
|
UpdateOrder(session, entity.Order - 1, 1, entity.Date);
|
|
|
session.Insert(entity);
|
|
|
SetHurryRecordToOrderID(session, entity.ID, hurryID);
|
|
|
session.Commit();
|
|
|
}
|
|
|
return entity.ID;
|
|
|
}
|
|
|
|
|
|
static void SetHurryRecordToOrderID(IDmoSession session, long orderID, long hurryID)
|
|
|
{
|
|
|
var update = new DQUpdateDom(typeof(HurryRecord));
|
|
|
update.Where.Conditions.Add(DQCondition.EQ("ID", hurryID));
|
|
|
update.Columns.Add(new DQUpdateColumn("ToOrderDetail_ID", orderID));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
}
|
|
|
|
|
|
static void ClearHurryRecordToOrderID(IDmoSession session, long orderID)
|
|
|
{
|
|
|
var update = new DQUpdateDom(typeof(HurryRecord));
|
|
|
update.Where.Conditions.Add(DQCondition.EQ("ToOrderDetail_ID", orderID));
|
|
|
update.Columns.Add(new DQUpdateColumn("ToOrderDetail_ID", DQExpression.NULL));
|
|
|
session.ExecuteNonQuery(update);
|
|
|
}
|
|
|
|
|
|
[Rpc(RpcFlags.SkipAuth)]
|
|
|
public static int GetFinishNumbers(DateTime date)
|
|
|
{
|
|
|
var query = new DQueryDom(new JoinAlias(typeof(OrderDetail)));
|
|
|
query.Columns.Add(DQSelectColumn.Sum("PlanNumber"));
|
|
|
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DeleteState", false), DQCondition.EQ("Date", date), DQCondition.EQ("OrderState", 20)));
|
|
|
return query.EExecuteScalar<int?>() ?? 0;
|
|
|
}
|
|
|
#endregion
|
|
|
}
|
|
|
}
|