using Org.BouncyCastle.Asn1.Cmp;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using Tiger.Business.SqlSugarHepler;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Entitys.WMS.DTOS;
using Tiger.Model.Extensions;
namespace Tiger.Business.WMS
{
///
///
///
public class OtherOutInfoBusiness : IOtherOutInfoBusiness
{
///
/// 存储T100推送过来的其他出库单信息
///
///
///
public int SaveOthOutInfo(List input)
{
var masterData = input.ToObject>();// 实体映射
var detailSource = new List();
foreach (var item in input)
{
if (!item.Details.Any())
{
continue;
}
foreach (var detail in item.Details)
{
detail.BILLCODE = item.BILLCODE;
detail.LINESTATUS = 0;
detail.AUTH_ORG = item.AUTH_ORG;
}
detailSource.AddRange(item.Details);
}
var detailData = detailSource.ToObject>();// 实体映射
int res = 0;
//var db = input.First()?.CorporateCode == "88" ? Biz.Db : Biz.DataSource["WMS57"].Client;// 区分是正式环境还是测试环境
//var db = Biz.Db;// 区分是正式环境还是测试环境
var db = Biz.DataSource["WMS57"].Client; // 区分是正式环境还是测试环境
var BILLCODELst = masterData.Select(i => i.BILLCODE).Distinct().ToList();
#region 区分主表需要插入及更新的数据
var hostoryMasterData = db.Queryable().Where(i => BILLCODELst.Contains(i.BILLCODE) && i.GHOST_ROW == false).ToList();// 获取主表旧数据
var resMaster = hostoryMasterData.Select(i => i.BILLCODE).Distinct().ToList();
var masterNeedInsert = masterData.Where(i => !resMaster.Contains(i.BILLCODE)).ToList();// 需要插入的数据
foreach (var item in masterNeedInsert)
{
item.STATUS = 0;
}
var masterNeedUpdate = masterData.Where(i => resMaster.Contains(i.BILLCODE)).ToList();// 需要更新的数据
foreach (var item in masterNeedUpdate)
{
item.ID = hostoryMasterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.ID;
}
#endregion 区分主表需要插入及更新的数据
#region 区分明细表需要插入及更新的数据
var hostoryDetailData = db.Queryable().Where(i => BILLCODELst.Contains(i.BILLCODE) && i.GHOST_ROW == false).ToList();// 获取明细表旧数据
var itemcodeLst = hostoryDetailData.Select(i => i.ITEM_CODE).Distinct().ToList();// 查询历史物料编号
var insertDetailData = detailData.Where(i => !resMaster.Contains(i.BILLCODE) && !itemcodeLst.Contains(i.ITEM_CODE)).ToList();// 需要插入的数据
var updateDetailData = detailData.Where(i => resMaster.Contains(i.BILLCODE) && itemcodeLst.Contains(i.ITEM_CODE)).ToList();// 需要更新的数据
foreach (var item in updateDetailData)
{
item.ID = hostoryDetailData.Where(i => i.BILLCODE == item.BILLCODE && i.ITEM_CODE == item.ITEM_CODE).FirstOrDefault()?.ID;
item.AUTH_ORG = input[0].AUTH_ORG;
}
var exceptCode = detailData.Select(i => i.ITEM_CODE).Distinct().ToList();
var deletecode = itemcodeLst.Except(exceptCode).ToList();
var needDeleteData = hostoryDetailData.Where(i => deletecode.Contains(i.ITEM_CODE) && BILLCODELst.Contains(i.BILLCODE)).ToList();// 需要删除的数据
#endregion 区分明细表需要插入及更新的数据
try
{
BizSqlsugar.CreateTran(() =>
{
if (masterNeedInsert.Any())
{
res = BizSqlsugar.InsertDataTable(masterNeedInsert, db);
}
if (masterNeedUpdate.Any())
{
res += BizSqlsugar.UpdateDataTable(masterNeedUpdate, db);
}
if (detailData.Any())
{
if (needDeleteData.Any())
{
db.Deleteable(needDeleteData).ExecuteCommand();// 删除旧的明细数据
}
if (insertDetailData.Any())
{
res += BizSqlsugar.InsertDataTable(insertDetailData, db);
}
if (updateDetailData.Any())
{
res += BizSqlsugar.InsertDataTable(updateDetailData, db);
}
//res += BizSqlsugar.InsertDataTable(detailData, db);
}
}, db);
}
catch (Exception)
{
}
return res;
}
}
}