using Newtonsoft.Json; using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; using Tiger.IBusiness; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Tiger.Model; namespace Tiger.Business.WMS { public partial class BS : IBS { /// /// 获取所有仓库机构列表 /// /// /// /// public async Task GetHouseModel(string name, string status) { var data = new List(); V_WH_TREE func = null; if (!string.IsNullOrEmpty(name)) { func = Biz.Db.Queryable().Where(x => x.NAME == name).First(); } var items = await Biz.Db.Queryable() .Where(q => q.TYPE != "Location") .OrderBy(x => x.CODE) .Distinct().ToListAsync(); //没有查询的时候 if (func == null) { List entities = items.OrderBy(x => x.CODE).ToList().FindAll(t => t.PARENT_ID.IsNullOrEmpty()); foreach (var item in entities) { OrgItemH houseItem = new(); houseItem.id = item.TYPE.ToString().FirstOrDefault() + item.ID; houseItem.houseCode = item.CODE; houseItem.houseName = item.AUTH_ORG + ":" + item.CODE + "(" + item.NAME + ")"; houseItem.PARENT_HOUSE = item.PARENT_ID; houseItem.createTime = DateTime.Now.ToString("yyyy-MM-dd mm:dd:ss"); houseItem.houseType = item.TYPE; //hosueItem.remark = item.REMARK; //hosueItem.orderNo = item.SEQ_NO; houseItem.children = new(); if (item.TYPE != "Shelf") GetOrgItem(items, item.ID, ref houseItem); data.Add(houseItem); } } //有查询条件的时候 else { } //转换Json时,去除值为null的属性 var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting); return json; } /// /// 递归返回组织机构 /// /// /// /// private static void GetOrgItem(List data, string parent, ref OrgItemH pOrgItem) { List entities = data.OrderBy(x => x.CODE).ToList().FindAll(t => t.PARENT_ID == parent).Distinct().ToList(); if (entities.Count > 0) { foreach (var item in entities) { OrgItemH houseItem = new(); houseItem.id = item.TYPE.ToString().FirstOrDefault() + item.ID; houseItem.houseCode = item.CODE; houseItem.houseName = item.AUTH_ORG + ":" + item.CODE + "(" + item.NAME + ")"; houseItem.PARENT_HOUSE = item.PARENT_ID; houseItem.createTime = DateTime.Now.ToString("yyyy-MM-dd mm:dd:ss"); houseItem.houseType = item.TYPE; //houseItem.remark = item.REMARK; //houseItem.orderNo = item.SEQ_NO; houseItem.children = new(); if (item.TYPE != "Shelf") GetOrgItem(data, item.ID, ref houseItem); pOrgItem.children.Add(houseItem); } } } /// /// 获取所有仓库机构列表 /// /// /// public async Task GetHouseModelOrg(HouseListItem listItem) { var data = new List(); V_WH_TREE func = null; var items = await Biz.Db.Queryable() .Where(q => q.TYPE != "Location" && q.AUTH_ORG == listItem.AUTH_ORG) .OrderBy(x => x.CODE) .Distinct().ToListAsync(); //没有查询的时候 if (func == null) { List entities = items.OrderBy(x => x.CODE).ToList().FindAll(t => t.PARENT_ID.IsNullOrEmpty()); foreach (var item in entities) { OrgItemH houseItem = new(); houseItem.id = item.ID; houseItem.houseCode = item.CODE; houseItem.houseName = item.AUTH_ORG + ":" + item.CODE + "(" + item.NAME + ")"; houseItem.PARENT_HOUSE = item.PARENT_ID; houseItem.createTime = DateTime.Now.ToString("yyyy-MM-dd mm:dd:ss"); houseItem.houseType = item.TYPE; //hosueItem.remark = item.REMARK; //hosueItem.orderNo = item.SEQ_NO; houseItem.children = new(); if (item.TYPE != "Shelf") GetOrgItemOrg(items, item.ID, ref houseItem); data.Add(houseItem); } } //有查询条件的时候 else { } //转换Json时,去除值为null的属性 var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting); return json; } /// /// 递归返回组织机构 /// /// /// /// private static void GetOrgItemOrg(List data, string parent, ref OrgItemH pOrgItem) { List entities = data.OrderBy(x => x.CODE).ToList().FindAll(t => t.PARENT_ID == parent).Distinct().ToList(); if (entities.Count > 0) { foreach (var item in entities) { OrgItemH houseItem = new(); houseItem.id = item.ID; houseItem.houseCode = item.CODE; houseItem.houseName = item.AUTH_ORG + ":" + item.CODE + "(" + item.NAME + ")"; houseItem.PARENT_HOUSE = item.PARENT_ID; houseItem.createTime = DateTime.Now.ToString("yyyy-MM-dd mm:dd:ss"); houseItem.houseType = item.TYPE; //houseItem.remark = item.REMARK; //houseItem.orderNo = item.SEQ_NO; houseItem.children = new(); if (item.TYPE != "Shelf") GetOrgItemOrg(data, item.ID, ref houseItem); pOrgItem.children.Add(houseItem); } } } /// /// 根据仓库代码和类型删除仓库机构列表 /// /// /// public ApiAction DelWareHouseModel(DelWareHouseModelEntity wareHouse) { var action = new ApiAction(); List locaIds = new(); List shelfIds = new(); List regIds = new(); List wareIds = new(); var db = Biz.Db; List uNITs = new List(); if (wareHouse.Type == "Warehouse") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.WH_ID == wareHouse.ID).ToList(); if (res.IsNullOrEmpty()) { var unit = db.Queryable().Where(q => q.WH_ID == wareHouse.ID).ToList(); locaIds.AddRange(unit.Where(q => !q.LOCATION_ID.IsNullOrEmpty()).Select(s => s.LOCATION_ID).Distinct()); shelfIds.AddRange(unit.Where(q => !q.SHELF_ID.IsNullOrEmpty()).Select(s => s.SHELF_ID).Distinct()); regIds.AddRange(unit.Where(q => !q.REGION_ID.IsNullOrEmpty()).Select(s => s.REGION_ID).Distinct()); wareIds.AddRange(unit.Where(q => !q.WH_ID.IsNullOrEmpty()).Select(s => s.WH_ID).Distinct()); } else { action.IsSuccessed = false; action.Message = "仓库里面有东西,不能删除!"; } } else if (wareHouse.Type == "Region") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.REGION_ID == wareHouse.ID).ToList(); if (res.IsNullOrEmpty()) { var unit = db.Queryable().Where(q => q.REGION_ID == wareHouse.ID).ToList(); locaIds.AddRange(unit.Where(q => !q.LOCATION_ID.IsNullOrEmpty()).Select(s => s.LOCATION_ID).Distinct()); shelfIds.AddRange(unit.Where(q => !q.SHELF_ID.IsNullOrEmpty()).Select(s => s.SHELF_ID).Distinct()); regIds.AddRange(unit.Where(q => !q.REGION_ID.IsNullOrEmpty()).Select(s => s.REGION_ID).Distinct()); } else { action.IsSuccessed = false; action.Message = "储区里面有东西,不能删除!"; } } else if (wareHouse.Type == "Shelf") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.SHELF_ID == wareHouse.ID).ToList(); if (res.IsNullOrEmpty()) { var unit = db.Queryable().Where(q => q.SHELF_ID == wareHouse.ID).ToList(); locaIds.AddRange(unit.Where(q => !q.LOCATION_ID.IsNullOrEmpty()).Select(s => s.LOCATION_ID).Distinct()); shelfIds.AddRange(unit.Where(q => !q.SHELF_ID.IsNullOrEmpty()).Select(s => s.SHELF_ID).Distinct()); } else { action.IsSuccessed = false; action.Message = "货架里面有东西,不能删除!"; } } else { } //删储位 if (locaIds.Any()) { db.Deleteable().Where(it => locaIds.Contains(it.ID)).ExecuteCommand(); } //删货架 if (shelfIds.Any()) { db.Deleteable().Where(it => shelfIds.Contains(it.ID)).ExecuteCommand(); } //删储区 if (regIds.Any()) { db.Deleteable().Where(it => regIds.Contains(it.ID)).ExecuteCommand(); } //删仓库 if (wareIds.Any()) { db.Deleteable().Where(it => wareIds.Contains(it.ID)).ExecuteCommand(); } return action; } /// /// 生成储位列表 /// /// /// public ApiAction AddLocationModel(List locations) { var action = new ApiAction(); List Locations = new List(); foreach (var item in locations) { WMS_LOCATION location = new WMS_LOCATION() { LOCATION_CODE = item.LOCATION_CODE, LOCATION_NAME = item.LOCATION_CODE, IS_ACTIVE = "Y", AUTH_ORG = item.AUTH_ORG, ORG_CODE = item.ORG_CODE, SHELF_ID = item.SHELF_ID, IS_MIX = item.ISMIX, IS_SINGLE = item.ISMIX == "N" ? "Y" : "N", FLOOR_NO = item.FLOOR_NO, SEQ_NO = item.SEQ_NO, LEDID = item.LEDID }; Locations.Add(location); } var db = Biz.Db; var dbTran = db.UseTran(() => { db.Deleteable().Where(q => q.SHELF_ID == locations[0].SHELF_ID).ExecuteCommand(); db.Insertable(Locations).ExecuteCommand(); }); if (!dbTran.IsSuccess) { action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"新增储位异常"); } action.LocaleMsg = Biz.L("WMS.WareHouse.VerifyException", Locations[0].ORG_CODE); return action; } /// /// 查询货架是否有东西 /// /// /// public ApiAction CheckLocation(DelWareHouseModelEntity shelf) { var action = new ApiAction(); var db = Biz.Db; if (shelf.Type == "shelf") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.SHELF_ID == shelf.ID).ToList(); if (res.IsNullOrEmpty()) { action.IsSuccessed = true; } else { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.WareHouse.检查储位初始化", shelf.ID); } } return action; } /// /// 修改仓库据点,同下级全部修改 /// /// /// public async Task GetUpdateOrg(string id) { var db = Biz.Db; List shelfs = new(); List locations = new(); var warehouse = db.Queryable().Where(q => q.ID == id).First(); if (warehouse != null) { var unit = db.Queryable().Where(q => q.WH_ID == id).ToList(); var regionids = unit.Select(q => q.REGION_ID).Distinct().ToList(); var shelfids = unit.Select(q => q.SHELF_ID).Distinct().ToList(); //var locationids=unit.Select(q=>q.LOCATION_ID).Distinct().ToList(); var dbTran = db.UseTran(() => { db.Updateable().SetColumns(q => q.AUTH_ORG == warehouse.AUTH_ORG).Where(q => q.WH_ID == warehouse.ID).ExecuteCommand(); db.Updateable().SetColumns(q => q.AUTH_ORG == warehouse.AUTH_ORG) .Where(q => regionids.Any(o => o == q.REGION_ID)).ExecuteCommand(); db.Updateable().SetColumns(q => q.AUTH_ORG == warehouse.AUTH_ORG) .Where(q => SqlFunc.Subqueryable().Where(s => regionids.Any(o => o == s.REGION_ID) && q.SHELF_ID == s.ID).Any()).ExecuteCommand(); }); } return ""; } /// /// 根据id获取Code /// /// /// public async Task GetWmsCode(string id) { var db = Biz.Db; var ID = ""; var warehouse = db.Queryable().Where(q => q.WH_CODE == id).First(); if (warehouse != null) { ID = warehouse.ID; } return ID; } } }