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

243 lines
9.5 KiB

using BWP.B3ClientService.BO;
using BWP.B3ClientService.RpcBO;
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 OrderDetailRpc
{
static JavaScriptSerializer serializer = new JavaScriptSerializer();
[Rpc]
public static string GetNeedOrderWeightBill(DateTime date)
{
var main = new JoinAlias(typeof(WeightBill));
var query = new DQueryDom(main);
var detail = WeightDetailTemp.Register(query, main);
var already = OrderDetailTemp.Register(query, main);
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));
query.Columns.Add(DQSelectColumn.Field("Number", already));
query.Columns.Add(DQSelectColumn.Field("WeighTime"));
query.Columns.Add(DQSelectColumn.Field("B3ID"));
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)), DQExpression.IfNull(DQExpression.Field(already, "Number"), DQExpression.Value(0))));
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];
result.Add(item);
}
}
}
return serializer.Serialize(result);
}
class WeightDetailTemp
{
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(WeightBill_Detail)));
query.Columns.Add(DQSelectColumn.Field("WeightBill_ID"));
query.Columns.Add(DQSelectColumn.Sum("Number"));
query.GroupBy.Expressions.Add(DQExpression.Field("WeightBill_ID"));
query.Where.Conditions.Add(DQCondition.EQ("DeleteState", false));
rootQuery.RegisterQueryTable(typeof(WeightDetailTemp), new string[] { "WeightBill_ID", "Number" }, query);
var alias = new JoinAlias(typeof(WeightDetailTemp));
rootQuery.From.AddJoin(JoinType.Left, new DQDmoSource(alias), DQCondition.EQ(rootAlias, "ID", alias, "WeightBill_ID"));
return alias;
}
}
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;
}
}
[Rpc]
public static string GetBackWeightBillInfo(long weightID, long backId)
{
var query = new DQueryDom(new JoinAlias(typeof(WeightBill)));
query.Columns.Add(DQSelectColumn.Field("Supplier_Name"));
query.Columns.Add(DQSelectColumn.Field("HouseNames"));
query.Columns.Add(DQSelectColumn.Field("WeighTime"));
query.Where.Conditions.Add(DQCondition.EQ("ID", weightID));
var result = query.EExecuteScalar<string, string, DateTime>();
var entity = new NeedOrderEntity();
entity.WeightBill_ID = weightID;
entity.Supplier_Name = result.Item1;
entity.HouseNames = result.Item2;
entity.WeighTime = result.Item3;
entity.Number = GetWeightNumber(weightID);
entity.AlreadyNumber = GetAlreadyNumberWithoutBack(weightID, backId);
return serializer.Serialize(entity);
}
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 bid)
{
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", bid)));
query.Columns.Add(DQSelectColumn.Sum("PlanNumber"));
var rst = query.EExecuteScalar();
if (rst != null)
return Convert.ToInt32(rst);
return 0;
}
[Rpc]
public static string GetOrderDetail()
{
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.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Date", DateTime.Today), DQCondition.EQ("DeleteState", false), DQCondition.EQ("SecondarySplit", 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];
list.Add(entity);
}
}
}
return serializer.Serialize(list);
}
[Rpc]
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.Between("Date", date.Date, date.Date + new TimeSpan(23, 59, 29)), DQCondition.EQ("DeleteState", false)));
return query.EExecuteScalar<int?>() ?? 1;
}
[Rpc]
public static long Insert(string update, string insert)
{
var list = serializer.Deserialize<List<CTuple<long, int>>>(update);
insert = insert.ESerializeDateTime();
var entity = serializer.Deserialize<OrderDetail>(insert);
entity.Date = DateTime.Today;
entity.ModifyTime = DateTime.Now;
using (var session = Dmo.NewSession())
{
foreach (var item in list)
UpdateOrderDetailPartial(session, item.Item1, "Order", item.Item2);
session.Insert(entity);
session.Commit();
}
return entity.ID;
}
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.Where.Conditions.Add(DQCondition.EQ("ID", id));
session.ExecuteNonQuery(update);
}
[Rpc]
public static int UpdateOrderProperty(long id, string property, object value)
{
using (var session = Dmo.NewSession())
{
UpdateOrderDetailPartial(session, id, property, value);
session.Commit();
}
return 1;
}
[Rpc]
public static int Delete(string update, long id)
{
var list = serializer.Deserialize<List<CTuple<long, int>>>(update);
using (var session = Dmo.NewSession())
{
foreach (var item in list)
UpdateOrderDetailPartial(session, item.Item1, "Order", item.Item2);
UpdateOrderDetailPartial(session, id, "DeleteState", true);
session.Commit();
}
return 1;
}
}
}