using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Linq.Expressions;
|
using System.Reflection.Metadata;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Model.ModelDto.SysDto;
|
using Model.ModelVm.SysVm;
|
using SqlSugar;
|
using WMS.DAL;
|
using WMS.Entity.BllAsnEntity;
|
using WMS.Entity.Context;
|
using WMS.Entity.DataEntity;
|
using WMS.Entity.SysEntity;
|
using WMS.IBLL.ISysServer;
|
using WMS.IDAL.ISysInterface;
|
|
namespace WMS.BLL.SysServer
|
{
|
public class StorageLocatServer : DbHelper<SysStorageLocat>, IStorageLocatServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
public IStorageLocatRepository LocatRst { get; set; }
|
public StorageLocatServer(IStorageLocatRepository locatRst) : base(Db)
|
{
|
LocatRst = locatRst;
|
}
|
|
/// <summary>
|
/// 查询储位信息
|
/// </summary>
|
/// <param name="houseNo">仓库号</param>
|
/// <param name="roadwayNo">巷道号</param>
|
/// <param name="areaNo">区域号</param>
|
/// <param name="status">状态</param>
|
/// <param name="flag">标志0:正常 1:屏蔽 2:损坏 屏蔽:储位不可存放货物,不影响内侧储位使用 损坏:内侧储位也不允许使用 </param>
|
/// <param name="locat">储位号</param>
|
/// <param name="row">排</param>
|
/// <param name="col">列</param>
|
/// <param name="layer">层</param>
|
/// <param name="page"></param>
|
/// <param name="limit"></param>
|
/// <param name="count"></param>
|
/// <returns></returns>
|
public List<LocatDto> GetStorageLocatList(string houseNo, string roadwayNo, string areaNo, string status, string flag, string locat, int? row, int? col, int? layer, int page, int limit, out int count)
|
{
|
try
|
{
|
Expression<Func<SysStorageLocat, bool>> item = Expressionable.Create<SysStorageLocat>() //创建表达式
|
.AndIF(!string.IsNullOrWhiteSpace(houseNo), it => it.WareHouseNo == houseNo)
|
.AndIF(!string.IsNullOrWhiteSpace(roadwayNo), it => it.RoadwayNo == roadwayNo)
|
.AndIF(!string.IsNullOrWhiteSpace(areaNo), it => it.AreaNo == areaNo)
|
.AndIF(!string.IsNullOrWhiteSpace(status), it => it.Status == status)
|
.AndIF(!string.IsNullOrWhiteSpace(flag), it => it.Flag == flag)
|
.AndIF(!string.IsNullOrWhiteSpace(locat), it => it.LocatNo.Contains(locat.Trim()))
|
.AndIF(row != null, it => it.Row == row)
|
.AndIF(col != null, it => it.Column == col)
|
.AndIF(layer != null, it => it.Layer == layer)
|
.ToExpression();//注意 这一句 不能少
|
|
|
var data = LocatRst.GetAllByOrderPage(item, limit, page, out int counts)
|
.Includes(x => x.WareHouseInfo)
|
.Includes(x => x.AreaInfo)
|
.Includes(x => x.RoadwayInfo)
|
.Includes(x => x.TemperatureInfo)
|
.Includes(x => x.CreateUserInfo)
|
.Includes(x => x.UpdateUserInfo).ToList();
|
count = counts;
|
return data.Select(m => new LocatDto()
|
{
|
Id = m.Id,
|
LocatNo = m.LocatNo,
|
WareHouseNo = m.WareHouseNo,
|
WareHouseName = m.WareHouseInfo == null ? "" : m.WareHouseInfo.WareHouseName,
|
RoadwayNo = m.RoadwayNo,
|
RoadwayName = m.RoadwayInfo == null ? "" : m.RoadwayInfo.RoadwayName,
|
AreaNo = m.AreaNo,
|
AreaName = m.AreaInfo == null ? "" : m.AreaInfo.AreaName,
|
Status = m.Status,
|
StatusName = GetStatus(m.Status),
|
Flag = m.Flag,
|
FlagName = GetFlag(m.Flag),
|
Make = m.Make,
|
MakeName = m.Make == "0" ? "跑道" : m.Make == "1" ? "储位" : "",
|
Depth = m.Depth,
|
Row = m.Row,
|
Column = m.Column,
|
Layer = m.Layer,
|
Height = m.Height,
|
Weight = m.Weight,
|
TempName = m.TemperatureInfo == null ? "" : m.TemperatureInfo.DictName,
|
CreateTime = m.CreateTime,
|
CreateUserName = m.CreateUserInfo == null ? "" : m.CreateUserInfo.UserName,
|
UpdateTime = m.UpdateTime,
|
UpdateUserName = m.UpdateUserInfo == null ? "" : m.UpdateUserInfo.UserName
|
}).ToList();
|
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
/// <summary>
|
/// 查询单条储位信息
|
/// </summary>
|
/// <param name="id"></param>
|
/// <returns></returns>
|
public SysStorageLocat GetStorageLocat(int id)
|
{
|
try
|
{
|
var data = LocatRst.GetOneById(id);
|
return data;
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e);
|
throw;
|
}
|
}
|
|
public List<SysStorageLocat> GetStorageLocat()
|
{
|
try
|
{
|
var data = LocatRst.GetAll().ToList();
|
return data;
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine(e);
|
throw;
|
}
|
}
|
|
public bool EditStorageLocat(EditLocateVm model, string url, int userId)
|
{
|
try
|
{
|
var bl = LocatRst.EditStorageLocat(model.Id, model.AreaNo, model.Status, model.Flag, model.Temperature, url, userId);
|
|
return bl;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 添加储位信息(立体库)用于开发人员添加基础信息
|
/// </summary>
|
/// <param name="index">当前排数</param>
|
/// <param name="houseNo">仓库号</param>
|
/// <param name="roadwayNo">巷道号</param>
|
/// <param name="areaNo">区域号</param>
|
/// <param name="row">排</param>
|
/// <param name="col">列</param>
|
/// <param name="layer">层</param>
|
/// <param name="dept">深度</param>
|
/// <param name="userId">操作人</param>
|
/// <returns></returns>
|
public async Task<int> AddStorageLocat(int index, string houseNo, string roadwayNo, string areaNo, int row, int col, int layer, string dept, int userId)
|
{
|
try
|
{
|
#region MyRegion
|
|
//var q = 0;
|
////R01 -01 -01 -02
|
////巷道–排-列-层
|
//for (int r = index; r <= row; r++)//排
|
//{
|
// var r1 = "1";
|
// if (r < 10)
|
// {
|
// r1 = "0" + r;
|
// }
|
// else
|
// {
|
// r1 = r.ToString();
|
// }
|
// for (int l = 1; l <= layer; l++)//层
|
// {
|
// var l1 = "1";
|
// if (l < 10)
|
// {
|
// l1 = "0" + l;
|
// }
|
// else
|
// {
|
// l1 = l.ToString();
|
// }
|
// for (int c = 1; c <= col; c++)//列
|
// {
|
// var c1 = "1";
|
// if (c < 10)
|
// {
|
// c1 = "0" + c;
|
// }
|
// else
|
// {
|
// c1 = c.ToString();
|
// }
|
// var area = l <= 7 ? "A12" : "A11";//区域
|
// for (int d = 1; d <= int.Parse(dept); d++) //深度
|
// {
|
// var s = "0" + d;//深度
|
// q += await LocatRst.AddAsync(new SysStorageLocat()
|
// {
|
// LocatNo = r1 + c1 + l1 + s,
|
// WareHouseNo = houseNo,
|
// RoadwayNo = roadwayNo,
|
// AreaNo = areaNo,
|
// Status = "0",
|
// Flag = "0",
|
// Depth = s,
|
// Row = r,
|
// Column = c,
|
// Layer = l,
|
// CreateUser = userId
|
// });
|
// }
|
|
|
|
|
|
// }
|
// }
|
//}
|
|
//return q;
|
|
#endregion
|
|
#region jc34
|
var q = 0;
|
|
//R01 -01 -01 -02
|
//巷道–排-列-层
|
for (int r = index; r <= row; r++)//排
|
{
|
var r1 = "1";
|
if (r < 10)
|
{
|
r1 = "0" + r;
|
}
|
else
|
{
|
r1 = r.ToString();
|
}
|
for (int l = 1; l <= col; l++)//列
|
{
|
var l1 = "1";
|
if (l < 10)
|
{
|
l1 = "0" + l;
|
}
|
else
|
{
|
l1 = l.ToString();
|
}
|
for (int c = 1; c <= layer; c++)//层
|
{
|
var c1 = "1";
|
if (c < 10)
|
{
|
c1 = "0" + c;
|
}
|
else
|
{
|
c1 = c.ToString();
|
}
|
|
q += await LocatRst.AddAsync(new SysStorageLocat()
|
{
|
LocatNo = r1 + l1 + c1,
|
WareHouseNo = houseNo,
|
RoadwayNo = roadwayNo,
|
AreaNo = areaNo,
|
Status = "0",
|
Flag = "0",
|
Depth = "01",
|
Row = r,
|
Column = l,
|
Layer = c,
|
CreateUser = userId
|
});
|
|
}
|
}
|
}
|
|
return q;
|
#endregion
|
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 添加储位信息(平库)用于开发人员添加基础信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <param name="userId"></param>
|
/// <returns></returns>
|
public async Task<int> AddPkStorageLocat(AddLocateVm model, int userId)
|
{
|
try
|
{
|
var q = 0;
|
var depth = 0;
|
var depthString = "01";
|
// 排(组)循环
|
for (int i = 1; i <= model.Row; i++)
|
{
|
// 列循环
|
for (int z = 1; z <= model.Col; z++)
|
{
|
//if (z == 1)
|
//{
|
// depth += 1;
|
// if (depth >= 10)
|
// {
|
// depthString = depth.ToString();
|
// }
|
// else if (depth < 10)
|
// {
|
// depthString = "0" + depth.ToString();
|
// }
|
// else {
|
// //其余条件
|
// }
|
//}
|
|
q += await LocatRst.AddAsync(new SysStorageLocat()
|
{
|
// 区域+排+列+层
|
LocatNo = i.ToString().PadLeft(2, '0') + z.ToString().PadLeft(2, '0') + "02",
|
WareHouseNo = model.HouseNo,
|
RoadwayNo = "",
|
AreaNo = model.AreaNo,
|
Status = "0",
|
AisleOne = "",
|
AisleTwo = "",
|
Flag = "0",
|
Make = "1",
|
Depth = depthString,
|
Row = i,
|
Column = z,
|
Layer = 2,
|
CreateUser = userId
|
}); ;
|
}
|
}
|
|
return q;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
public bool EditStorageLocatList(EditLocateListVm model, string url, int userId)
|
{
|
try
|
{
|
var bl = LocatRst.EditStorageLocatList(model.Id, model.AreaNo, model.Status, model.Flag, model.Temperature, url, userId);
|
|
return bl;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 查询储位状态
|
/// </summary>
|
/// <param name="code"></param>
|
/// <returns></returns>
|
public string GetStatus(string code)
|
{
|
if (string.IsNullOrWhiteSpace(code))
|
{
|
return "";
|
}
|
else
|
{
|
var str = "";
|
switch (code)
|
{
|
case "0":
|
str = "空储位";
|
break;
|
case "1":
|
str = "有物品";
|
break;
|
case "2":
|
str = "入库中";
|
break;
|
case "3":
|
str = "出库中";
|
break;
|
case "4":
|
str = "移入中";
|
break;
|
case "5":
|
str = "移出中";
|
break;
|
}
|
|
return str;
|
}
|
}
|
/// <summary>
|
/// 查询储位标志
|
/// </summary>
|
/// <param name="code"></param>
|
/// <returns></returns>
|
public string GetFlag(string code)
|
{
|
if (string.IsNullOrWhiteSpace(code))
|
{
|
return "";
|
}
|
else
|
{
|
var str = "";
|
switch (code)
|
{
|
case "0":
|
str = "正常";
|
break;
|
case "1":
|
str = "屏蔽";
|
break;
|
case "2":
|
str = "损坏";
|
break;
|
}
|
return str;
|
}
|
}
|
|
/// <summary>
|
/// 获取储位信息
|
/// </summary>
|
/// <param name="wareHouseNo">仓库</param>
|
/// <param name="roadway">巷道号</param>
|
/// <param name="row">排 1 or 2</param>
|
/// <param name="depth">深度</param>
|
/// <returns></returns>
|
public List<SysStorageLocat> GetStorageLocatLists(string wareHouseNo, string roadway, string row, string depth)
|
{
|
try
|
{
|
var list = Db.Queryable<SysStorageLocat>().Where(m =>
|
m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == int.Parse(row) && m.Depth == depth).ToList();
|
|
return list;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
|
}
|
|
/// <summary>
|
/// 获取最大层级
|
/// </summary>
|
/// <param name="wareHouseNo">仓库号</param>
|
/// <param name="roadway">仓库号</param>
|
/// <param name="row">仓库号</param>
|
/// <returns></returns>
|
public int GetMaxLayer(string wareHouseNo, string roadway, string row)
|
{
|
try
|
{
|
var road = roadway.Substring(2, roadway.Length - 2);
|
var num = int.Parse(road);
|
//var rows = (num - 1) * 2 + int.Parse(row);//排
|
|
var maxLayer = Db.Queryable<SysStorageLocat>().Where(m =>
|
m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == num).Max(m => m.Layer);
|
|
return maxLayer;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 获取最大列数
|
/// </summary>
|
/// <param name="wareHouseNo">仓库号</param>
|
/// <param name="roadway">仓库号</param>
|
/// <param name="row">仓库号</param>
|
/// <returns></returns>
|
public int GetColumn(string wareHouseNo, string roadway, string row)
|
{
|
try
|
{
|
var road = roadway.Substring(2, roadway.Length - 2);
|
var num = int.Parse(road);
|
//var rows = (num - 1) * 2 + int.Parse(row);//排
|
|
var maxColumn = Db.Queryable<SysStorageLocat>().Where(m =>
|
m.IsDel == "0" && m.WareHouseNo == wareHouseNo && m.RoadwayNo == roadway && m.Row == int.Parse(row)).Max(m => m.Column);
|
|
return maxColumn;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 获取该仓库排数
|
/// </summary>
|
/// <param name="wareHouseNo">仓库号</param>
|
/// <returns></returns>
|
public List<int> GetStorageLocatRow(string wareHouseNo)
|
{
|
List<int> maxrow = LocatRst.GetStorageLocatRow(wareHouseNo);
|
return maxrow;
|
}
|
|
/// <summary>
|
/// 获取该仓库深度
|
/// </summary>
|
/// <param name="wareHouseNo">仓库号</param>
|
/// <returns></returns>
|
public List<string> GetDepth(string wareHouseNo)
|
{
|
List<string> depthlist = LocatRst.GetDepth(wareHouseNo);
|
return depthlist;
|
}
|
|
/// <summary>
|
/// 根据排获取该仓库深度
|
/// </summary>
|
/// <param name="row">排</param>
|
/// <returns></returns>
|
public List<string> GetRowDepth(string row)
|
{
|
string str = $"select Depth from SysStorageLocat where IsDel = '0' and WareHouseNo = 'W01' and Row = {row} group by Depth order by Depth";
|
List<string> depthlist = Db.Ado.SqlQuery<string>(str);
|
return depthlist;
|
}
|
|
|
/// <summary>
|
/// 获取库位占比(圆)
|
/// </summary>
|
/// <param name="wareHouseNo">仓库号</param>
|
/// <returns></returns>
|
public List<GetLocateVm> GetStorageProportion(string wareHouseNo)
|
{
|
try
|
{
|
string str = $"select status,count(Status) statusnum,'{wareHouseNo}' as WareHouseNo from SysStorageLocat where IsDel = '0' and WareHouseNo = @warehouseno and Flag = '0' group by Status order by Status";
|
List<GetLocateVm> getLocateVms = Db.Ado.SqlQuery<GetLocateVm>(str, new
|
{
|
warehouseno = wareHouseNo //仓库号
|
});
|
str = $"select 6 as Status,COUNT(*) statusnum,'{wareHouseNo}' as WareHouseNo from SysStorageLocat where IsDel = '0' and WareHouseNo = '{wareHouseNo}' and Flag != '0'";
|
GetLocateVm getLocateVm = Db.Ado.SqlQuerySingle<GetLocateVm>(str);
|
|
getLocateVms.Add(getLocateVm);
|
|
int a = 0; //0:空储位
|
int b = 0; //1:有物品
|
int c = 0; //2:入库中
|
int d = 0; //3:出库中
|
int e = 0; //4:移入中
|
int f = 0; //5:移出中
|
int g = 0; //6:损坏\屏蔽
|
|
foreach (var item in getLocateVms)
|
{
|
//0:空储位
|
if (item.Status == "0")
|
{
|
a = 1; //0:空储位
|
continue;
|
}
|
//1:有物品
|
if (item.Status == "1")
|
{
|
b = 1; //1:有物品
|
continue;
|
}
|
//2:入库中
|
if (item.Status == "2")
|
{
|
c = 1; //2:入库中
|
continue;
|
}
|
//3:出库中
|
if (item.Status == "3")
|
{
|
d = 1; //3:出库中
|
continue;
|
}
|
//4:移入中
|
if (item.Status == "4")
|
{
|
e = 1; //4:移入中
|
continue;
|
}
|
//5:移出中
|
if (item.Status == "5")
|
{
|
f = 1; //5:移出中
|
continue;
|
}
|
//6:损坏\屏蔽
|
if (item.Status == "6")
|
{
|
g = 1; //6:损坏\屏蔽
|
continue;
|
}
|
}
|
|
//0:空储位
|
if (a == 0)
|
{
|
getLocateVm = new GetLocateVm();
|
getLocateVm.WareHouseNo = wareHouseNo; //仓库号
|
getLocateVm.StatusNum = "0";
|
getLocateVm.Status = "0";
|
getLocateVms.Add(getLocateVm);
|
}
|
//1:有物品
|
if (b == 0)
|
{
|
getLocateVm = new GetLocateVm();
|
getLocateVm.WareHouseNo = wareHouseNo; //仓库号
|
getLocateVm.StatusNum = "0";
|
getLocateVm.Status = "1";
|
getLocateVms.Add(getLocateVm);
|
}
|
//2:入库中
|
if (c == 0)
|
{
|
getLocateVm = new GetLocateVm();
|
getLocateVm.WareHouseNo = wareHouseNo; //仓库号
|
getLocateVm.StatusNum = "0";
|
getLocateVm.Status = "2";
|
getLocateVms.Add(getLocateVm);
|
}
|
//3:出库中
|
if (d == 0)
|
{
|
getLocateVm = new GetLocateVm();
|
getLocateVm.WareHouseNo = wareHouseNo; //仓库号
|
getLocateVm.StatusNum = "0";
|
getLocateVm.Status = "3";
|
getLocateVms.Add(getLocateVm);
|
}
|
//4:移入中
|
if (e == 0)
|
{
|
getLocateVm = new GetLocateVm();
|
getLocateVm.WareHouseNo = wareHouseNo; //仓库号
|
getLocateVm.StatusNum = "0";
|
getLocateVm.Status = "4";
|
getLocateVms.Add(getLocateVm);
|
}
|
//5:移出中
|
if (f == 0)
|
{
|
getLocateVm = new GetLocateVm();
|
getLocateVm.WareHouseNo = wareHouseNo; //仓库号
|
getLocateVm.StatusNum = "0";
|
getLocateVm.Status = "5";
|
getLocateVms.Add(getLocateVm);
|
}
|
//6:损坏\屏蔽
|
if (g == 0)
|
{
|
getLocateVm = new GetLocateVm();
|
getLocateVm.WareHouseNo = wareHouseNo; //仓库号
|
getLocateVm.StatusNum = "0";
|
getLocateVm.Status = "6";
|
getLocateVms.Add(getLocateVm);
|
}
|
|
return getLocateVms;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 获取库位占比(柱)
|
/// </summary>
|
/// <param name="wareHouseNo">仓库号</param>
|
/// <param name="roadwayNo">巷道号</param>
|
/// <returns></returns>
|
public List<GetLocateVm> GetStorageProportion1(string wareHouseNo, string roadwayNo)
|
{
|
try
|
{
|
//根据仓库号以及巷道号获取储位各状态数据
|
string str = "select Row,Status,COUNT(Status) StatusNum from SysStorageLocat where WareHouseNo = @warehouseno and RoadwayNo = @roadwayno group by Row,Status order by Row,Status";
|
|
List<GetLocateVm> getLocateVms = Db.Ado.SqlQuery<GetLocateVm>(str, new
|
{
|
warehouseno = wareHouseNo, //仓库号
|
roadwayno = roadwayNo //巷道号
|
});
|
|
|
|
getLocateVms[0].WareHouseNo = wareHouseNo;
|
getLocateVms[0].RoadwayNo = roadwayNo;
|
return getLocateVms;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 获取仓库巷道
|
/// </summary>
|
/// <param name="wareHouseNo">仓库号</param>
|
/// <returns></returns>
|
public List<RoadwayDto> GetRoadwayList(string wareHouseNo)
|
{
|
try
|
{
|
string str = "select RoadwayNo,RoadwayName,WareHouseNo from SysStorageRoadway where IsDel = @isdel";
|
|
if (!string.IsNullOrWhiteSpace(wareHouseNo))
|
{
|
str += " and WareHouseNo = @warehouseno";
|
}
|
|
List<RoadwayDto> roadway = Db.Ado.SqlQuery<RoadwayDto>(str, new
|
{
|
isdel = "0", //是否删除
|
warehouseno = wareHouseNo //仓库号
|
});
|
return roadway;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 根据储位地址获取储位上的托盘和物品信息
|
/// </summary>
|
/// <param name="locatNo"></param>
|
/// <returns></returns>
|
public LocateInfoVm GetLocateInfo(string locatNo)
|
{
|
try
|
{
|
LocateInfoVm model = new LocateInfoVm();
|
//储位信息
|
SysStorageLocat storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == locatNo && w.IsDel == "0");
|
if (storageLocat == null)
|
{
|
throw new Exception("未找到对应储位");
|
}
|
//有物品、出库中数据源(库存明细表)
|
if (storageLocat.Status == "1" || storageLocat.Status == "3" || storageLocat.Status == "5")
|
{
|
//库存明细
|
List<DataStockDetail> stockDetailList = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == locatNo && w.IsDel == "0").ToList();
|
if (stockDetailList == null || stockDetailList.Count <= 0)
|
{
|
throw new Exception("未找到对应的库存明细信息");
|
}
|
model.LocatNo = locatNo;
|
model.Status = storageLocat.Status;
|
model.PalletNo = stockDetailList[0].PalletNo;
|
|
List<LocateGoodsInfoVm> goodsList = new List<LocateGoodsInfoVm>();
|
foreach (var item in stockDetailList)
|
{
|
LocateGoodsInfoVm goodsModel = new LocateGoodsInfoVm();
|
goodsModel.SkuNo = item.SkuNo;
|
goodsModel.SkuName = item.SkuName;
|
goodsModel.LotNo = item.LotNo;
|
goodsModel.Qty = item.Qty;
|
goodsModel.Standard = item.Standard;
|
goodsModel.ExpirationTime = item.ExpirationTime;
|
goodsModel.InspectStatus = item.InspectStatus;
|
|
goodsList.Add(goodsModel);
|
}
|
model.GoodsInfoList = goodsList;
|
}
|
//入库中数据源(托盘绑定表)
|
else if (storageLocat.Status == "2")
|
{
|
//托盘绑定信息
|
List<BllPalletBind> palletBindList = Db.Queryable<BllPalletBind>()
|
.Where(w => w.LocatNo == locatNo && w.IsDel == "0" && w.Status == "1").ToList();
|
if (palletBindList == null || palletBindList.Count <= 0)
|
{
|
throw new Exception("未找到对应的托盘绑定信息");
|
}
|
model.LocatNo = locatNo;
|
model.Status = storageLocat.Status;
|
model.PalletNo = palletBindList[0].PalletNo;
|
|
List<LocateGoodsInfoVm> goodsList = new List<LocateGoodsInfoVm>();
|
foreach (var item in palletBindList)
|
{
|
//入库单明细
|
BllArrivalNoticeDetail noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == item.ASNDetailNo);
|
if (noticeDetail == null)
|
{
|
throw new Exception("未找到对应的入库单明细信息");
|
}
|
LocateGoodsInfoVm goodsModel = new LocateGoodsInfoVm();
|
goodsModel.SkuNo = noticeDetail.SkuNo;
|
goodsModel.SkuName = noticeDetail.SkuName;
|
goodsModel.LotNo = noticeDetail.LotNo;
|
goodsModel.Qty = noticeDetail.Qty;
|
|
goodsList.Add(goodsModel);
|
}
|
model.GoodsInfoList = goodsList;
|
}
|
else
|
{
|
model.LocatNo = locatNo;
|
model.Status = storageLocat.Status;
|
}
|
//储位状态
|
switch (model.Status)
|
{
|
case "0":
|
model.Status = "空储位";
|
break;
|
case "1":
|
model.Status = "有物品";
|
break;
|
case "2":
|
model.Status = "入库中";
|
break;
|
case "3":
|
model.Status = "出库中";
|
break;
|
case "4":
|
model.Status = "移入中";
|
break;
|
case "5":
|
model.Status = "移出中";
|
break;
|
default:
|
model.Status = "";
|
break;
|
}
|
return model;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 获取低储位巷道信息及剩余储位数量
|
/// </summary>
|
/// <returns></returns>
|
public List<AvailabilityRoadryDto> GetAvailabilityRoadry()
|
{
|
try
|
{
|
string str = "SELECT *, (SELECT COUNT(*) FROM SysStorageLocat WHERE IsDel = '0' and Status = '0' and Flag = '0' and RoadwayNo = SysStorageRoadway.RoadwayNo) AS countSum FROM SysStorageRoadway where IsDel = '0' ";
|
var list = Db.Ado.SqlQuery<AvailabilityRoadryDto>(str);
|
list = list.Where(a => a.countSum <= a.Availability).ToList();
|
return list;
|
}
|
catch (Exception ex)
|
{
|
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 根据想到获取排
|
/// </summary>
|
/// <param name="roadwayNo">巷道</param>
|
/// <returns></returns>
|
public List<string> ByRoadwayGetRow(string wareHouseNo, string roadwayNo)
|
{
|
string str = $"select Row from SysStorageLocat where IsDel = '0' and WareHouseNo = '{wareHouseNo}' and RoadwayNo = '{roadwayNo}' group by Row order by Row";
|
|
List<string> row = Db.Ado.SqlQuery<string>(str);
|
return row;
|
}
|
|
#region 平库图例
|
|
/// <summary>
|
/// 获取储位信息(平库图例)
|
/// </summary>
|
/// <param name="wareHouseNo">仓库</param>
|
/// <param name="row">排</param>
|
/// <returns></returns>
|
public List<SysStorageLocat> GetFlatLibraryLegend(string wareHouseNo, string row)
|
{
|
try
|
{
|
//一楼区域
|
//List<string> row1 = new List<string>()
|
//{
|
// "B01",
|
// "B02",
|
// "B03",
|
// "B04",
|
// "B05",
|
// "B06",
|
// "B07",
|
//};
|
////二楼区域
|
//List<string> row3 = new List<string>()
|
//{
|
// "B11",
|
// "B12",
|
// "B13",
|
// "B14",
|
// "B15",
|
//};
|
string row1 = "'A06'";
|
string row3 = "'A08'";
|
string str = $"select * from SysStorageLocat where IsDel = '0' and WareHouseNo = '{wareHouseNo}' and ";
|
if (row == "1")
|
{
|
str += $" AreaNo in ({row1})";
|
}
|
else if (row == "3")
|
{
|
str += $" AreaNo in ({row3})";
|
}
|
|
var list = Db.Ado.SqlQuery<SysStorageLocat>(str);
|
|
//var list = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == wareHouseNo && row == "1" ? row1.Contains(m.AreaNo) : row3.Contains(m.AreaNo)).ToList();
|
|
return list;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
|
}
|
|
#endregion
|
|
/// <summary>
|
/// 获取储位信息(密集库)
|
/// </summary>
|
/// <param name="wareHouseNo">仓库</param>
|
/// <param name="row">排</param>
|
/// <returns></returns>
|
public async Task<BordModelVM> GetFlatLegend(string wareHouseNo, int layer)
|
{
|
var list = await Db.Queryable<SysStorageLocat>().Where(s => s.WareHouseNo == wareHouseNo && s.Layer == layer && s.IsDel == "0").ToListAsync();
|
BordModelVM listBord = new BordModelVM()
|
{
|
Col = 15,
|
Row = 18
|
};
|
|
foreach (var modLocat in list)
|
{
|
SlotsVm mod = new SlotsVm()
|
{
|
SlotColumn = modLocat.Column,
|
SlotRow = modLocat.Row,
|
SlotCode = modLocat.LocatNo,
|
//SlotStatusCls = modLocat.Flag!="0"? "eight": modLocat.Status == "0"? "zero":,
|
Make = modLocat.Make
|
};
|
if (modLocat.Flag != "0")
|
mod.SlotStatusCls = "eight";
|
switch (modLocat.Status)
|
{
|
case "0":
|
mod.SlotStatusCls = "zero";
|
break;
|
case "1":
|
mod.SlotStatusCls = "one";
|
break;
|
case "2":
|
mod.SlotStatusCls = "two";
|
break;
|
case "3":
|
mod.SlotStatusCls = "three";
|
break;
|
case "4":
|
mod.SlotStatusCls = "four";
|
break;
|
case "5":
|
mod.SlotStatusCls = "five";
|
break;
|
default:
|
break;
|
}
|
listBord.SlotsVm.Add(mod);
|
}
|
|
return listBord;
|
|
}
|
|
}
|
}
|