|
|
|
@ -18,163 +18,117 @@ namespace BWP.B3ClientService.Tasks.UpdateLoad |
|
|
|
{ |
|
|
|
public static class UpLoadWeightBill |
|
|
|
{ |
|
|
|
//public static void Execute(string uri)
|
|
|
|
//{
|
|
|
|
// var serializer = new JavaScriptSerializer();
|
|
|
|
// //获取所有未上传的数据
|
|
|
|
// var allBill = GetAllNeedSyncBill();
|
|
|
|
|
|
|
|
// foreach (var item in allBill)
|
|
|
|
// {
|
|
|
|
// var bwpClient = new BWPClient(uri, item.Creator);
|
|
|
|
// using (var context = new TransactionContext())
|
|
|
|
// {
|
|
|
|
// #region 删除
|
|
|
|
// if (item.DeleteState)
|
|
|
|
// {
|
|
|
|
// if (item.B3ID.HasValue)
|
|
|
|
// bwpClient.Call<int>("/MainSystem/B3ButcherManage/Rpcs/WeighBillRpc/Delete", item.B3ID.Value);
|
|
|
|
// context.Session.Delete(item);
|
|
|
|
// context.Commit();
|
|
|
|
// continue;
|
|
|
|
// }
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// var sync = serializer.Serialize(CreateRpcWeightBill(item));
|
|
|
|
// var back = bwpClient.Call<BackRpcObj>("/MainSystem/B3ButcherManage/Rpcs/WeighBillRpc/UpdateOrInsert", sync);
|
|
|
|
|
|
|
|
// #region 同步完了要清理掉删除的明细(当前实体和数据库)
|
|
|
|
// ClearDetails(item, context.Session);
|
|
|
|
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// #region 反填信息
|
|
|
|
// item.B3ID = back.ID;
|
|
|
|
// SetBillAsSynced(item.ID, item.B3ID.Value, context.Session);
|
|
|
|
|
|
|
|
// foreach (var bItem in back.DetailBack)
|
|
|
|
// {
|
|
|
|
// switch (bItem.Flag)
|
|
|
|
// {
|
|
|
|
// case "Details":
|
|
|
|
// ExecuteSimpleDetail<WeightBill_Detail>(bItem, context.Session);
|
|
|
|
// break;
|
|
|
|
// case "FarmerDetails":
|
|
|
|
// ExecuteSimpleDetail<WeightBill_FarmerDetail>(bItem, context.Session);
|
|
|
|
// break;
|
|
|
|
// case "SanctionDetails":
|
|
|
|
// ExecuteSimpleDetail<WeightBill_SanctionDetail>(bItem, context.Session);
|
|
|
|
// break;
|
|
|
|
// default:
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// //栋舍明细在B3系统不存在,所以无返回信息
|
|
|
|
// ExecuteHouseDetial(item.ID, context.Session);
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// context.Commit();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
//static IEnumerable<WeightBill> GetAllNeedSyncBill()
|
|
|
|
//{
|
|
|
|
// var query = new DmoQuery(typeof(WeightBill));
|
|
|
|
// query.Where.Conditions.Add(DQCondition.EQ("Sync", false));
|
|
|
|
// query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID"));
|
|
|
|
// return query.EExecuteList().Cast<WeightBill>();
|
|
|
|
//}
|
|
|
|
|
|
|
|
//static RpcWeightBill CreateRpcWeightBill(WeightBill bill)
|
|
|
|
//{
|
|
|
|
// var result = new RpcWeightBill();
|
|
|
|
// result.Bill = new SWeightBill();
|
|
|
|
// DmoUtil.CopyDmoFields(bill, result.Bill);
|
|
|
|
|
|
|
|
// var d = bill.Details.Where(x => !x.DeleteState);
|
|
|
|
// result.Details = d.Select(x => { var y = new SWeightBill_Detail(); DmoUtil.CopyDmoFields(x, y); return y; }).ToArray();
|
|
|
|
// if (result.Details.Any())
|
|
|
|
// {
|
|
|
|
// result.Details.OrderBy(x => x.ID).First().LiveColonyHouse_Name = string.Join(",", bill.HouseDetails.Where(x => !x.DeleteState).Select(x => x.LiveColonyHouse_Name));
|
|
|
|
// }
|
|
|
|
|
|
|
|
// result.D_Details = bill.Details.Where(x => x.DeleteState && x.B3ID.HasValue).Select(x => x.B3ID.Value).ToArray();
|
|
|
|
|
|
|
|
|
|
|
|
// var fd = bill.FarmerDetails.Where(x => !x.DeleteState);
|
|
|
|
// result.FarmerDetails = fd.Select(x => { var y = new SWeightBill_FarmerDetail(); DmoUtil.CopyDmoFields(x, y); return y; }).ToArray();
|
|
|
|
|
|
|
|
// result.D_FarmerDetails = bill.FarmerDetails.Where(x => x.DeleteState && x.B3ID.HasValue).Select(x => x.B3ID.Value).ToArray();
|
|
|
|
|
|
|
|
|
|
|
|
// var sd = bill.SanctionDetails.Where(x => !x.DeleteState);
|
|
|
|
// result.SanctionDetails = sd.Select(x => { var y = new SWeightBill_SanctionDetail(); DmoUtil.CopyDmoFields(x, y); return y; }).ToArray();
|
|
|
|
|
|
|
|
// result.D_SanctionDetails = bill.SanctionDetails.Where(x => x.DeleteState && x.B3ID.HasValue).Select(x => x.B3ID.Value).ToArray();
|
|
|
|
|
|
|
|
// return result;
|
|
|
|
//}
|
|
|
|
|
|
|
|
//private static void ClearDetails(WeightBill bill, IDmoSession session)
|
|
|
|
//{
|
|
|
|
// var d = bill.Details.Where(x => x.DeleteState).ToArray();
|
|
|
|
// foreach (var dd in d)
|
|
|
|
// bill.Details.Remove(dd);
|
|
|
|
// DeleteDetail<WeightBill_Detail>(bill.ID, session);
|
|
|
|
|
|
|
|
// var f = bill.FarmerDetails.Where(x => x.DeleteState).ToArray();
|
|
|
|
// foreach (var fd in f)
|
|
|
|
// bill.FarmerDetails.Remove(fd);
|
|
|
|
// DeleteDetail<WeightBill_FarmerDetail>(bill.ID, session);
|
|
|
|
|
|
|
|
// var h = bill.HouseDetails.Where(x => x.DeleteState).ToArray();
|
|
|
|
// foreach (var hd in h)
|
|
|
|
// bill.HouseDetails.Remove(hd);
|
|
|
|
// DeleteDetail<WeightBill_HouseDetail>(bill.ID, session);
|
|
|
|
|
|
|
|
// var s = bill.SanctionDetails.Where(x => x.DeleteState).ToArray();
|
|
|
|
// foreach (var sd in s)
|
|
|
|
// bill.SanctionDetails.Remove(sd);
|
|
|
|
// DeleteDetail<WeightBill_SanctionDetail>(bill.ID, session);
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
//static void DeleteDetail<T>(long mainID, IDmoSession session)
|
|
|
|
// where T : SyncBase
|
|
|
|
//{
|
|
|
|
// var delete = new DQDeleteDom(typeof(T));
|
|
|
|
// delete.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("WeightBill_ID", mainID), DQCondition.EQ("DeleteState", true)));
|
|
|
|
// session.ExecuteNonQuery(delete);
|
|
|
|
//}
|
|
|
|
|
|
|
|
//static void ExecuteHouseDetial(long mainID, IDmoSession session)
|
|
|
|
//{
|
|
|
|
// var update = new DQUpdateDom(typeof(WeightBill_HouseDetail));
|
|
|
|
// update.Columns.Add(new DQUpdateColumn("B3ID", -1));
|
|
|
|
// update.Where.Conditions.Add(DQCondition.EQ("WeightBill_ID", mainID));
|
|
|
|
// session.ExecuteNonQuery(update);
|
|
|
|
//}
|
|
|
|
|
|
|
|
//static void ExecuteSimpleDetail<T>(BackRpcObj details, IDmoSession session)
|
|
|
|
// where T : SyncBase
|
|
|
|
//{
|
|
|
|
// foreach (var item in details.DetailBack)
|
|
|
|
// {
|
|
|
|
// var update = new DQUpdateDom(typeof(T));
|
|
|
|
// update.Columns.Add(new DQUpdateColumn("B3ID", item.ID));
|
|
|
|
// update.Where.Conditions.Add(DQCondition.EQ("ID", long.Parse(item.Flag)));
|
|
|
|
// session.ExecuteNonQuery(update);
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
//static void SetBillAsSynced(long id, long B3ID, IDmoSession session)
|
|
|
|
//{
|
|
|
|
// var update = new DQUpdateDom(typeof(WeightBill));
|
|
|
|
// update.Columns.Add(new DQUpdateColumn("Sync", true));
|
|
|
|
// update.Columns.Add(new DQUpdateColumn("B3ID", B3ID));
|
|
|
|
// update.Where.Conditions.Add(DQCondition.EQ("ID", id));
|
|
|
|
// session.ExecuteNonQuery(update);
|
|
|
|
//}
|
|
|
|
public static void Execute(string uri) |
|
|
|
{ |
|
|
|
var serializer = new JavaScriptSerializer(); |
|
|
|
//获取所有未上传的数据
|
|
|
|
var allBill = GetAllNeedSyncBill(); |
|
|
|
|
|
|
|
foreach (var item in allBill) |
|
|
|
{ |
|
|
|
var bwpClient = new BWPClient(uri, item.Creator); |
|
|
|
using (var context = new TransactionContext()) |
|
|
|
{ |
|
|
|
#region 删除
|
|
|
|
if (item.DeleteState) |
|
|
|
{ |
|
|
|
if (item.B3ID.HasValue) |
|
|
|
bwpClient.Call<int>("/MainSystem/B3ButcherManage/Rpcs/WeighBillRpc/Delete", item.B3ID.Value); |
|
|
|
Delete(item.ID, context.Session); |
|
|
|
context.Commit(); |
|
|
|
continue; |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
var sync = serializer.Serialize(CreateRpcWeightBill(item)); |
|
|
|
item.B3ID = bwpClient.Call<long>("/MainSystem/B3ButcherManage/Rpcs/WeighBillRpc/UpdateOrInsert", sync); |
|
|
|
|
|
|
|
ClearDetails(item.ID, context.Session); |
|
|
|
|
|
|
|
SetBillAsSynced(item.ID, item.B3ID.Value, context.Session); |
|
|
|
|
|
|
|
context.Commit(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static IEnumerable<WeightBill> GetAllNeedSyncBill() |
|
|
|
{ |
|
|
|
var query = new DmoQuery(typeof(WeightBill)); |
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("Sync", false)); |
|
|
|
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID")); |
|
|
|
return query.EExecuteList().Cast<WeightBill>(); |
|
|
|
} |
|
|
|
|
|
|
|
static RpcWeightBill CreateRpcWeightBill(WeightBill bill) |
|
|
|
{ |
|
|
|
var result = new RpcWeightBill(); |
|
|
|
result.Bill = new SWeightBill(); |
|
|
|
DmoUtil.CopyDmoFields(bill, result.Bill); |
|
|
|
|
|
|
|
var details = GetDetails<WeightBill_Detail>(bill.ID); |
|
|
|
result.Details = details.Where(x => !x.DeleteState).Select(x => { var y = new SWeightBill_Detail(); DmoUtil.CopyDmoFields(x, y); return y; }).ToArray(); |
|
|
|
foreach (var item in result.Details) |
|
|
|
{ |
|
|
|
item.LiveColonyHouse_Name = bill.HouseNames; |
|
|
|
} |
|
|
|
|
|
|
|
result.D_Details = details.Where(x => x.DeleteState).Select(x => x.ID).ToArray(); |
|
|
|
|
|
|
|
var farmerDetails = GetDetails<WeightBill_FarmerDetail>(bill.ID); |
|
|
|
result.FarmerDetails = farmerDetails.Where(x => !x.DeleteState).Select(x => { var y = new SWeightBill_FarmerDetail(); DmoUtil.CopyDmoFields(x, y); return y; }).ToArray(); |
|
|
|
|
|
|
|
result.D_FarmerDetails = farmerDetails.Where(x => x.DeleteState).Select(x => x.ID).ToArray(); |
|
|
|
|
|
|
|
var sanctionDetails = GetDetails<WeightBill_SanctionDetail>(bill.ID); |
|
|
|
result.SanctionDetails = sanctionDetails.Where(x => !x.DeleteState).Select(x => { var y = new SWeightBill_SanctionDetail(); DmoUtil.CopyDmoFields(x, y); return y; }).ToArray(); |
|
|
|
|
|
|
|
result.D_SanctionDetails = sanctionDetails.Where(x => x.DeleteState).Select(x => x.ID).ToArray(); |
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
public static void Delete(long id, IDmoSession session) |
|
|
|
{ |
|
|
|
Delete<WeightBill>("ID", id, session); |
|
|
|
Delete<WeightBill_Detail>("WeightBill_ID", id, session); |
|
|
|
Delete<WeightBill_FarmerDetail>("WeightBill_ID", id, session); |
|
|
|
Delete<WeightBill_HouseDetail>("WeightBill_ID", id, session); |
|
|
|
Delete<WeightBill_SanctionDetail>("WeightBill_ID", id, session); |
|
|
|
} |
|
|
|
|
|
|
|
static void Delete<T>(string key, long value, IDmoSession session, bool withDeleteState = false) |
|
|
|
where T : SyncBase |
|
|
|
{ |
|
|
|
var delete = new DQDeleteDom(typeof(T)); |
|
|
|
delete.Where.Conditions.Add(DQCondition.EQ(key, value)); |
|
|
|
if (withDeleteState) |
|
|
|
delete.Where.Conditions.Add(DQCondition.EQ("DeleteState", true)); |
|
|
|
session.ExecuteNonQuery(delete); |
|
|
|
} |
|
|
|
|
|
|
|
static void ClearDetails(long mainID, IDmoSession session) |
|
|
|
{ |
|
|
|
Delete<WeightBill_Detail>("WeightBill_ID", mainID, session, true); |
|
|
|
Delete<WeightBill_FarmerDetail>("WeightBill_ID", mainID, session, true); |
|
|
|
Delete<WeightBill_HouseDetail>("WeightBill_ID", mainID, session, true); |
|
|
|
Delete<WeightBill_SanctionDetail>("WeightBill_ID", mainID, session, true); |
|
|
|
} |
|
|
|
|
|
|
|
static void SetBillAsSynced(long id, long B3ID, IDmoSession session) |
|
|
|
{ |
|
|
|
var update = new DQUpdateDom(typeof(WeightBill)); |
|
|
|
update.Columns.Add(new DQUpdateColumn("Sync", true)); |
|
|
|
update.Columns.Add(new DQUpdateColumn("B3ID", B3ID)); |
|
|
|
update.Where.Conditions.Add(DQCondition.EQ("ID", id)); |
|
|
|
session.ExecuteNonQuery(update); |
|
|
|
} |
|
|
|
|
|
|
|
static IEnumerable<T> GetDetails<T>(long id) |
|
|
|
{ |
|
|
|
var query = new DmoQuery(typeof(T)); |
|
|
|
query.Where.Conditions.Add(DQCondition.EQ("WeightBill_ID", id)); |
|
|
|
return query.EExecuteList().Cast<T>(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |