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.

209 lines
7.9 KiB

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Text;
using FireBirdUtil.SqlUtils;
using Forks.JsonRpc.Client;
using Forks.JsonRpc.Client.Data;
using Utils.Datas;
using WeighBusiness.BO;
using WeighBusiness.Utils;
using WeighBusiness.Utils.SqlUtils;
namespace WeighBusiness.BL
{
public static class ProductTeamBL
{
public static List<ProductTeam> GetProductTeamRowVersion()
{
var table = SqlHelperEx.DoQuery("select ProductTeam_ID,RowVersion from {0}".FormatWith(TableNames.));
if (table.Rows.Count == 0)
return new List<ProductTeam>();
var list = new List<ProductTeam>();
foreach (DataRow row in table.Rows) {
var plan = new ProductTeam();
plan.ProductTeam_ID = (long)(int.Parse(row[0].ToString()));
plan.RowVersion = int.Parse(row[1].ToString());
list.Add(plan);
}
return list;
}
public static void Insert(List<ProductTeam> teams, List<ProductTeamOutDetail> outDetails)
{
using (var she = new SqlHelperEx()) {
she.CreateTransaction();
bool success = false;
string errorMessage;
if (teams.Count() > 0) {
foreach (var team in teams) {
string insertSql = InsertUtil.GetInsertSql(TableNames.,
new string[] { "ProductTeam_ID", "Name", "ProduceType", "Employee_ID", "RowVersion", "ClientNode" },
new string[] { team.ProductTeam_ID.ToString(), team.Name, team.ProduceType, team.Employee_ID == null ? "null" : team.Employee_ID.Value.ToString(), team.RowVersion.ToString(), team.ClientNode });
she.ExecuteNonQuery(insertSql, out success, out errorMessage);
if (!success && !string.IsNullOrEmpty(errorMessage)) {
she.Rollback();
throw new ApplicationException(errorMessage);
}
}
}
if (outDetails.Count() > 0) {
foreach (var detail in outDetails) {
string insertSql = InsertUtil.GetInsertSql(TableNames.,
new string[] { "ProductTeam_ID", "Goods_ID", "DetailID" },
new string[] { detail.ProductTeam_ID.ToString(), detail.Goods_ID.ToString(), detail.DetailID.ToString() });
she.ExecuteNonQuery(insertSql, out success, out errorMessage);
if (!success && !string.IsNullOrEmpty(errorMessage)) {
she.Rollback();
throw new ApplicationException(errorMessage);
}
}
}
if (!success) {
she.Rollback();
} else {
she.Commit();
}
}
}
public static string Delete(long ID)
{
bool success;
string errorMessage;
using (var she = new SqlHelperEx()) {
she.CreateTransaction();
var sql = SqlUtil.GetDeleteSql(TableNames., " where ProductTeam_ID=" + ID.ToString());
she.ExecuteNonQuery(sql, out success, out errorMessage);
if (success) {
var sql3 = SqlUtil.GetDeleteSql(TableNames., " where ProductTeam_ID=" + ID.ToString());
she.ExecuteNonQuery(sql3, out success, out errorMessage);
}
if (!success)
she.Rollback();
else
she.Commit();
}
return errorMessage;
}
public static void SyncProductTeam()
{
var domain_ID = ConfigurationManager.AppSettings["Domain_ID"];
var method = "/MainSystem/B3_HaoYue/Rpcs/B3CowButcherManageRpc/GetProductTeamRowVersion2";
if (domain_ID != null && !string.IsNullOrEmpty(domain_ID)) {
var productTeamRowVersions = RpcFacade.Call<List<Tuple<long?, int?, string, string, long?, string>>>(method, long.Parse(domain_ID));
var oldProductTeamRowVersions = GetProductTeamRowVersion();
var needInsertProductTeamID = new List<long?>();
var needDeleteAndInsertProductTeamID = new List<long?>();
if (productTeamRowVersions.Count > 0) {
if (oldProductTeamRowVersions.Count() <= 0) {
productTeamRowVersions.ForEach(x => needInsertProductTeamID.Add(x.Item1));
} else {
foreach (var teamRowVersion in productTeamRowVersions) {
var team_ID = teamRowVersion.Item1;
var oldProductTeams = oldProductTeamRowVersions.Where(x => x.ProductTeam_ID == team_ID);
if (oldProductTeams.Count() > 0 && oldProductTeams.FirstOrDefault().RowVersion != teamRowVersion.Item2) {
needDeleteAndInsertProductTeamID.Add(teamRowVersion.Item1);
} else if (oldProductTeams.Count() <= 0) {
needInsertProductTeamID.Add(team_ID);
}
}
foreach (var oldVersion in oldProductTeamRowVersions) {
if (!productTeamRowVersions.Any(x => x.Item1 == oldVersion.ProductTeam_ID)) {
Delete(oldVersion.ProductTeam_ID);
}
}
}
} else {
Delete();
}
if (needDeleteAndInsertProductTeamID.Count() > 0) {
foreach (var productTeamID in needDeleteAndInsertProductTeamID) {
var error = Delete(productTeamID.Value);
if (!string.IsNullOrEmpty(error)) {
throw new ApplicationException(error);
}
needInsertProductTeamID.Add(productTeamID);
}
}
if (needInsertProductTeamID.Count > 0) {
var getProductTeamOutDetail = "/MainSystem/B3_HaoYue/Rpcs/B3CowButcherManageRpc/GetProductTeamOutDetailData";
var productTeamOutDetails = RpcFacade.Call<List<Tuple<long?, long?, long?>>>(getProductTeamOutDetail, needInsertProductTeamID.ToArray());
var list = new List<ProductTeam>();
var outList = new List<ProductTeamOutDetail>();
foreach (var teamID in needInsertProductTeamID) {
var team = new ProductTeam();
team.ProductTeam_ID = teamID.Value;
var result = productTeamRowVersions.Where(x => x.Item1 == teamID).First();
team.RowVersion = result.Item2.Value;
team.Name = result.Item3;
team.ProduceType = result.Item4;
team.Employee_ID = result.Item5;
team.ClientNode = result.Item6;
list.Add(team);
}
if (productTeamOutDetails.Count() > 0) {
foreach (var detail in productTeamOutDetails) {
var outDetail = new ProductTeamOutDetail();
outDetail.ProductTeam_ID = detail.Item1.Value;
outDetail.Goods_ID = detail.Item2.Value;
outDetail.DetailID = detail.Item3.Value;
outList.Add(outDetail);
}
}
Insert(list, outList);
}
}
}
public static string Delete()
{
bool success;
string errorMessage;
using (var she = new SqlHelperEx()) {
she.CreateTransaction();
var sql = SqlUtil.GetDeleteSql(TableNames.);
she.ExecuteNonQuery(sql, out success, out errorMessage);
if (success) {
var sql2 = SqlUtil.GetDeleteSql(TableNames.);
she.ExecuteNonQuery(sql2, out success, out errorMessage);
}
if (!success)
she.Rollback();
else
she.Commit();
}
return errorMessage;
}
public static ProductTeam GetProductTeam(string clientNode)
{
var table = SqlHelperEx.DoQuery("select ProductTeam_ID,Name,ProduceType from {0} where ClientNode = {1}".FormatWith(TableNames., clientNode == null ? "null" : string.Format("'{0}'", clientNode)));
if (table.Rows.Count > 0) {
foreach (DataRow row in table.Rows) {
var team = new ProductTeam();
team.ProductTeam_ID = (long)(int.Parse(row[0].ToString()));
team.Name = row[1].ToString();
team.ProduceType = row[2].ToString();
return team;
}
}
return null;
}
}
}