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(); } } }