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