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
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class SplitBoxBusiness : ISplitBoxBusiness
|
{
|
/// <summary>
|
/// 分合箱
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
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<WMS_ITEM_PKG>().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<WMS_ITEM_PKG>().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<string, string>(); // 对应关系(新)
|
var dicCount = new Dictionary<string, int>(); // 栈板号——数量对应关系
|
|
#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<WMS_ITEM_PKG>();
|
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();
|
}
|
}
|
}
|