using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Tiger.Business.SqlSugarHepler;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.Entitys.WMS.DTOS;
namespace Tiger.Business.WMS
{
///
///
///
public class SplitBoxBusiness : ISplitBoxBusiness
{
///
/// 分合箱
///
///
///
public int SaveSplitBoxData(SplitBoxDTO input)
{
//var DB = Biz.Db;// 数据库地址
var type = "P";
//var DB = Biz.DataSource["Test"].Client;
var DB = Biz.DataSource["WMS57"].Client;
var oldsns = input.OldSns;// 旧的Sn
var oldData = DB.Queryable().Where(i => oldsns.Contains(i.SN) || oldsns.Contains(i.PARENT_SN)).ToList();// 获取历史数据
if (!oldData.Any(i => string.IsNullOrWhiteSpace(i.PARENT_SN)))
{
type = "B";
var olddataparnet = oldData.Select(i => i.PARENT_SN).Distinct().ToList();// 获取栈板号
var oldData2 = DB.Queryable().Where(i => olddataparnet.Contains(i.SN) && string.IsNullOrWhiteSpace(i.PARENT_SN)).ToList();// 获取顶级数据
oldData.AddRange(oldData2);// 获取所有的历史数据
}
var oldSnData = oldData.Where(i => string.IsNullOrWhiteSpace(i.PARENT_SN)).ToList();// 获取栈板对应NULL数据
if (type == "B")
{
oldSnData = oldData.Where(i => string.IsNullOrWhiteSpace(i.PARENT_SN) || input.OldSns.Contains(i.SN)).ToList();// 获取栈板对应NULL数据以及箱号对应的栈板号数据
}
//var oldParentSnData = oldData.Where(i => oldsns.Contains(i.PARENT_SN)).ToList(); // 获取父级数据
//var oldCorrespondence = oldParentSnData.Select(i => new { i.SN, i.PARENT_SN }).ToDictionary(i => i.SN, i => i.PARENT_SN).ToList();// 获取旧的对应关系
var newsnList = input.NewSnList;
var palletList = newsnList.Select(i => i.Pallet).Distinct().ToList(); // 获取所有的栈板号
var dicBox = new Dictionary(); // 对应关系(新)
var dicCount = new Dictionary(); // 栈板号——数量对应关系
#region 获取新的对应关系
foreach (var pallet in palletList)
{
var cartonList = newsnList.Where(i => i.Pallet == pallet).Select(i => i.Carton).Distinct().ToList();// 查询栈板号绑定的箱号
int sqn = 0;
foreach (var carton in cartonList)
{
var data = newsnList.Where(i => i.Pallet == pallet && i.Carton == carton).ToList();
if (!dicBox.ContainsKey(carton) && carton != pallet)
{
dicBox.Add(carton, pallet);// 箱号——栈板号
}
foreach (var item in data)
{
if (!dicBox.ContainsKey(item.SN))
{
sqn++;
dicBox.Add(item.SN, carton);// SN——箱号
}
}
}
dicBox.Add(pallet, null);// 栈板号——NULL
dicCount.Add(pallet, sqn);// 栈板号——NULL
}
#endregion 获取新的对应关系
if (oldSnData.Any())
{
DB.Deleteable(oldSnData).ExecuteCommand();// 删除Box-Pallet和Pallet-Null数据
}
if (dicBox.Any())
{
var newboxdata = dicBox.Keys.ToList();
var oldboxdata = oldData.Where(i => newboxdata.Contains(i.SN)).ToList();// 需要更新的数据
foreach (var boxdata in oldboxdata)
{
boxdata.PARENT_SN = dicBox[boxdata.SN];// 更新箱号/栈板号
}
DB.Updateable(oldboxdata).ExecuteCommand();
//var insertData =
var dataLst = new List();
foreach (var item in dicBox.Keys)
{
var data = oldData.Where(i => i.SN == item).FirstOrDefault();
if (data == null)
{
dataLst.Add(new WMS_ITEM_PKG()
{
ID = null,
SN = item,
ITEM_CODE = oldData[0].ITEM_CODE,
UNIT = oldData[0].UNIT,
TRANS_NO = oldData[0].TRANS_NO,
QTY = dicCount[item],
AUTH_ORG = oldData[0].AUTH_ORG,
PARENT_SN = dicBox[item]
});// 添加顶层数据
}
}
if (dataLst.Any())
{
DB.Insertable(dataLst).ExecuteCommand();// 插入新的Box-Pallet/Pallet-Null数据
}
}
return oldsns.Count();
}
}
}