using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using wms.dto;
using wms.dto.request.hj;
using wms.dto.request.hj.dto;
using wms.sqlsugar.model;
using wms.sqlsugar.model.hj;
using wms.util.Check;
using static wms.dto.request.hj.dto.ReportResponse;
namespace wms.sqlsugar
{
///
/// 创建仓储
///
///
public class Repository : SimpleClient where T : BaseModel, new()
{
public Repository()
{
//固定数据库用法
base.Context = SqlSugarHelper.Db.GetConnectionScopeWithAttr();
//动态库用法一般用于维护数据库连接字符串根据用法
//if (!SqlSugarHelper.Db.IsAnyConnection("用户读出来的数据库ConfigId"))
//{
// SqlSugarHelper.Db.AddConnection(new ConnectionConfig() { 数据库读出来信息 });
//}
//base.Context = SqlSugarHelper.Db.GetConnectionScope("用户读出来的数据库ConfigId");
}
public T InsertReturnEntity(T t)
{
t = CheckId.InitId(t);
return base.Context.Insertable(t).ExecuteReturnEntity();
}
///
/// 该方法默认不更新CreatedUserId,CreatedTime
///
///
///
public bool UpdateEntity(T entity)
{
return base.Context.Updateable(entity).IgnoreColumns(new string[] { "CreatedUserId", "CreatedTime", "CreatedUserName" }).ExecuteCommand() > 0;
}
public bool UpdateModelColumns(Expression> Columns, Expression> WhereExpression)
{
return base.Update(Columns, WhereExpression);
}
public T GetModelByExpression(Expression> WhereExpression)
{
return base.GetSingle(WhereExpression);
}
public bool UpdateStatus(long id, int status, long userId)
{
return base.Context.Updateable().SetColumns(it => new T() {
//Status = status, UpdatedTime = DateTime.Now
}).Where(it => it.Id == id).ExecuteCommand() > 0;
}
public List GetTunList(TunnelRequest request)
{
var list = base.Context.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.WareHouse), p => p.Default2 == request.WareHouse)
.WhereIF(!string.IsNullOrEmpty(request.Tunnel), p => p.Default1 == request.Tunnel)
.WhereIF(!string.IsNullOrEmpty(request.type), p => p.Default2 == request.type)
.ToList();
return list;
}
public bool UpdateTunStatu(long id, string statu, long userId)
{
return base.Context.Updateable().SetColumns(it => new hjSysConfig()
{
SContent = statu,
EditTime = DateTime.Now
}).Where(it => it.Id == id).ExecuteCommand() > 0;
}
public (List, int) GetPageWareHouseList(QuertRequest request)
{
int count = 0;
var list = base.Context.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.Code), p => p.Code.Contains(request.Code))
.WhereIF(!string.IsNullOrEmpty(request.Name), p => p.Name.Contains(request.Name))
.WhereIF(!string.IsNullOrEmpty(request.WareState), p => p.WareState == request.WareState)
.WhereIF(!string.IsNullOrEmpty(request.FactoryNo), p => p.FactoryNo == request.FactoryNo)
.WhereIF(!string.IsNullOrEmpty(request.WareType), p => p.WareType == request.WareType)
.ToPageList(request.PageIndex, request.PageSize, ref count);
return (list.ToList(), count);
}
public (List, int) GetPageWareZoneList(WareZoneRequest request)
{
int count = 0;
var list = base.Context.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.Code), p => p.Code.Contains(request.Code))
.WhereIF(!string.IsNullOrEmpty(request.Name), p => p.Name.Contains(request.Name))
.WhereIF(request.WareId > Const.Zero, p => p.WareId == request.WareId)
.WhereIF(!string.IsNullOrEmpty(request.WZoneState), p => p.WZoneState == request.WZoneState)
.ToPageList(request.PageIndex, request.PageSize, ref count);
return (list.ToList(), count);
}
public (List, int) GetPageWareLocationList(WareLocationRequest request)
{
int count = 0;
var list = base.Context.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.Code), p => p.Code.Contains(request.Code))
.WhereIF(!string.IsNullOrEmpty(request.Name), p => p.Name.Contains(request.Name))
.WhereIF(request.LocationType > Const.MinOne, p => p.LocationType == request.LocationType)
.WhereIF(request.Tunnel > Const.Zero, p => p.Tunnel == request.Tunnel)
.WhereIF(!string.IsNullOrEmpty(request.WareCode), p => p.WareCode.Contains(request.WareCode))
.ToPageList(request.PageIndex, request.PageSize, ref count);
return (list.ToList(), count);
}
public (List, int) GetPageUnitList(BaseUnitRequest request)
{
int count = 0;
var list = base.Context.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.Code), p => p.Code.Contains(request.Code))
.WhereIF(!string.IsNullOrEmpty(request.Name), p => p.Name.Contains(request.Name))
.WhereIF(!string.IsNullOrEmpty(request.PrimaryUnit), p => p.PrimaryUnit.Contains(request.PrimaryUnit))
.WhereIF(!string.IsNullOrEmpty(request.DeputyUnit), p => p.DeputyUnit.Contains(request.DeputyUnit))
.ToPageList(request.PageIndex, request.PageSize, ref count);
return (list.ToList(), count);
}
public (List, int) GetPageMaterList(BaseMaterRequest request)
{
int count = 0;
var list = base.Context.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.Code), p => p.Code.Contains(request.Code))
.WhereIF(!string.IsNullOrEmpty(request.Name), p => p.Name.Contains(request.Name))
.WhereIF(request.HoldDuration > Const.Zero, p => p.HoldDuration == request.HoldDuration)
.WhereIF(request.PlatingWeight > Const.Zero, p => p.PlatingWeight == request.PlatingWeight)
.WhereIF(!string.IsNullOrEmpty(request.Strength), p => p.Strength.Contains(request.Strength))
.WhereIF(!string.IsNullOrEmpty(request.Plating), p => p.Plating.Contains(request.Plating))
.ToPageList(request.PageIndex, request.PageSize, ref count);
return (list.ToList(), count);
}
public (List, int) GetPageBarCodeList(BaseBarCodeRequest request)
{
int count = 0;
var list = base.Context.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.MatCode), p => p.MatCode.Contains(request.MatCode))
.WhereIF(!string.IsNullOrEmpty(request.HWBarCode), p => p.HWBarCode.Contains(request.HWBarCode))
.WhereIF(!string.IsNullOrEmpty(request.RFIDBarCode), p => p.RFIDBarCode.Contains(request.RFIDBarCode))
.ToPageList(request.PageIndex, request.PageSize, ref count);
return (list.ToList(), count);
}
public (List, int, decimal) GetPageMaterInAndOutReportList(ReportRequest request)
{
int count = 0;
var list = base.Context.Queryable((container, taskHistory, house) => new object[]
{
JoinType.Inner, container.ContGrpId == taskHistory.ContGrpId,
JoinType.Inner, taskHistory.WareCode == house.Code
})
.WhereIF(!string.IsNullOrEmpty(request.RFID), (container, taskHistory, house) => taskHistory.ContGrpBarCode.Contains(request.RFID))
.WhereIF(!string.IsNullOrEmpty(request.HWSpec), (container, taskHistory, house) => container.HWSpec == request.HWSpec)
.WhereIF(!string.IsNullOrEmpty(request.Grade), (container, taskHistory, house) => container.Grade == request.Grade)
.WhereIF(!string.IsNullOrEmpty(request.ExecDocsNo), (container, taskHistory, house) => container.ExecDocsNo.Contains(request.ExecDocsNo))
.WhereIF(!string.IsNullOrEmpty(request.PutLocNo), (container, taskHistory, house) => container.PutLocNo.Contains(request.PutLocNo))
.WhereIF(request.TaskCode > Const.Zero, (container, taskHistory, house) => taskHistory.TaskCode == request.TaskCode)
.WhereIF(!string.IsNullOrEmpty(request.Tunnel), (container, taskHistory, house) => taskHistory.Tunnel == request.Tunnel)
.WhereIF(!string.IsNullOrEmpty(request.StartPoint), (container, taskHistory, house) => taskHistory.StartPoint == request.StartPoint)
.WhereIF(!string.IsNullOrEmpty(request.EndPoint), (container, taskHistory, house) => taskHistory.EndPoint == request.EndPoint)
.Select((container, taskHistory, house) => new MaterReportResponse()
{
RFID = container.ContGrpBarCode,
ContGrpBarCode = container.ContGrpBarCode,
ExecState = container.ExecState.ToString(),
ExecDocsNo = container.ExecDocsNo,
ExecDocsRowNo = container.ExecDocsRowNo,
CustNo = container.CustCode,
CustName = container.CustName,
PutRow = container.PutRow,
PutCol = container.PutCol,
PutLayer = container.PutLayer,
PutLocNo = container.PutLocNo,
InvBarCode = container.InvBarCode,
InvState = container.InvState,
InDocsNo = container.InDocsNo,
InDocsRowNo = container.InDocsRowNo,
SuppCode = container.SuppCode,
SuppName = container.SuppName,
WareHouseName = house.Name,
ProductTime = container.ProductTime,
RFIDBarCode = container.RFIDBarCode,
HWSpec = container.HWSpec,
IsSurplus = container.IsSurplus,
IsRework = container.IsRework,
IsFast = container.IsFast,
IsFail = container.IsFail,
FailReason = container.FailReason,
Grade = container.Grade,
IsBack = container.IsBack,
BackReason = container.Reason,
ProductWbNo = container.ProductWbNo,
ProductLineNo = container.ProductLineNo
})
.ToPageList(request.PageIndex, request.PageSize, ref count);
decimal pro = list.Sum(p => p.TotalWtQty); //临时计算总重量
//list = list.Skip((request.PageIndex - 1) * request.PageSize).Take(request.PageSize).ToList();
return (list.ToList(), count, pro);
}
public (List, int, decimal) GetPageRealTimeInventoryReportList(ReportRequest request)
{
int count = 0;
var list = base.Context.Queryable((container, house, location, mater) => new object[]
{
JoinType.Left, container.WarehouseId == house.Id,
JoinType.Left, house.Code == location.WareCode,
JoinType.Left, container.MatId == mater.Id
})
.WhereIF(!string.IsNullOrEmpty(request.ContGrpBarCode), (container, house, location, mater) => container.ContGrpBarCode.Contains(request.ContGrpBarCode))
.WhereIF(!string.IsNullOrEmpty(request.InvBarCode), (container, house, location, mater) => container.InvBarCode.Contains(request.InvBarCode))
.WhereIF(!string.IsNullOrEmpty(request.Location), (container, house, location, mater) => location.Code.Contains(request.Location))
.WhereIF(!string.IsNullOrEmpty(request.MatCode), (container, house, location, mater) => mater.Code.Contains(request.MatCode))
.OrderBy((container, house, location, mater) => container.OneInTime, OrderByType.Asc)
.Select((container, house, location, mater) => new RealTimeInventoryReportResponse()
{
ContGrpBarCode = container.ContGrpBarCode,
WareHouseName = house.Name,
InvBarCode = container.InvBarCode,
HWSpec = container.HWSpec,
MatCode = mater.Code,
Grade = container.Grade,
SilkType = container.SilkType,
TotalWtQty = container.TotalWtQty,
NetWQty = container.NetWQty,
TareWQty = container.TareWQty,
LengthQty = container.LengthQty,
InvState = container.InvState,
IsSurplus = container.IsSurplus,
IsRework = container.IsRework,
IsFast = container.IsFast,
IsBack = container.IsBack,
BackReason = container.Reason,
IsFail = container.IsFail,
FailReason = container.FailReason,
ProductTime = container.ProductTime,
OneInTime = container.OneInTime,
InDocsNo = container.InDocsNo,
InDocsRowNo = container.InDocsRowNo,
PutRow = container.PutRow,
PutCol = container.PutCol,
PutLayer = container.PutLayer,
PutLocNo = container.PutLocNo,
SuppCode = container.SuppCode,
SuppName = container.SuppName,
CustNo = container.CustCode,
CustName = container.CustName,
RFIDBarCode = container.RFIDBarCode,
Tunnel = location.Tunnel.ToString(),
Location = location.Code,
})
.ToPageList(request.PageIndex, request.PageSize, ref count);
decimal pro = list.Sum(p => p.TotalWtQty); //临时计算总重量
//list = list.Skip((request.PageIndex - 1) * request.PageSize).Take(request.PageSize).ToList();
return (list.ToList(), count, pro);
}
public (List, int) GetPageInventoryAgingReportList(ReportRequest request)
{
int count = 0;
var list = base.Context.Queryable((container, house, location, mater) => new object[]
{
JoinType.Left, container.WarehouseId == house.Id,
JoinType.Left, house.Code == location.WareCode,
JoinType.Left, container.MatId == mater.Id
})
.WhereIF(!string.IsNullOrEmpty(request.RFID), (container, house, location, mater) => container.RFIDBarCode.Contains(request.RFID))
.WhereIF(!string.IsNullOrEmpty(request.HWSpec), (container, house, location, mater) => container.HWSpec == request.HWSpec)
.WhereIF(!string.IsNullOrEmpty(request.Tunnel), (container, house, location, mater) => location.Tunnel == int.Parse(request.Tunnel))
.WhereIF(!string.IsNullOrEmpty(request.MatCode), (container, house, location, mater) => mater.Code.Contains(request.MatCode))
.WhereIF(!string.IsNullOrEmpty(request.Grade), (container, house, location, mater) => container.Grade == request.Grade)
.WhereIF(request.HoldDuration != null && request.HoldDuration > 0, (container, house, location, mater) => mater.HoldDuration == request.HoldDuration)
.GroupBy((container, house, location, mater) => new {
RFIDBarCode = container.RFIDBarCode,
HWSpec = container.HWSpec,
MatCode = mater.Code,
MatName = mater.Name,
Grade = container.Grade,
ProductTime = container.ProductTime,
HoldDuration = mater.HoldDuration,
Tunnel = location.Tunnel.ToString()
})
.Select((container, house, location, mater) => new InventoryAgingReportResponse()
{
RFIDBarCode = container.RFIDBarCode,
HWSpec = container.HWSpec,
MatCode = mater.Code,
MatName = mater.Name,
Grade = container.Grade,
ProductTime = container.ProductTime,
HoldDuration = mater.HoldDuration,
Tunnel = location.Tunnel.ToString()
//Remaindays = (decimal)(container.ProductTime.AddDays((double)mater.HoldDuration) - DateTime.Now).TotalHours
//Duedate = container.ProductTime.AddDays((double)mater.HoldDuration)
})
.ToPageList(request.PageIndex, request.PageSize, ref count);
//list = list.Skip((request.PageIndex - 1) * request.PageSize).Take(request.PageSize).ToList();
return (list.ToList(), count);
}
public (List, int) GetPageTaskList(TaskRequest request)
{
int count = 0;
var list = base.Context.Queryable((task, house) => new object[]
{
JoinType.Inner, task.WareCode == house.Code
})
.WhereIF(request.TaskCode > Const.Zero, (task, house) => task.TaskCode == request.TaskCode)
.WhereIF(request.TaskType > Const.Zero, (task, house) => task.TaskType == request.TaskType)
.WhereIF(request.TaskState > Const.Zero, (task, house) => task.TaskState == request.TaskState)
.WhereIF(request.Tunnel > Const.Zero, (task, house) => task.Tunnel == request.Tunnel)
.WhereIF(!string.IsNullOrEmpty(request.BusType), (task, house) => task.BusType.Contains(request.BusType))
.WhereIF(!string.IsNullOrEmpty(request.WareCode), (task, house) => task.WareCode.Contains(request.WareCode))
.WhereIF(!string.IsNullOrEmpty(request.ContGrpBarCode), (task, house) => task.ContGrpBarCode.Contains(request.ContGrpBarCode))
.WhereIF(!string.IsNullOrEmpty(request.EndPoint), (task, house) => task.EndPoint.Contains(request.EndPoint))
.WhereIF(!string.IsNullOrEmpty(request.StartPoint), (task, house) => task.StartPoint.Contains(request.StartPoint))
.WhereIF(!string.IsNullOrEmpty(request.DocCode), (task, house) => task.DocCode.Contains(request.DocCode))
.Select((task, house) => new TaskRsponse()
{
Id = task.Id,
TaskCode = task.TaskCode,
TaskType = task.TaskType,
TaskState = task.TaskState,
Tunnel = task.Tunnel,
ContGrpBarCode = task.ContGrpBarCode,
EndPoint = task.EndPoint,
StartPoint = task.StartPoint,
BusType = task.BusType,
WareCodeName = house.Name,
Priority = task.Priority,
EquNo = task.EquNo,
Srm = task.SrmNo,
CurPoint = task.CurPoint,
NextPoint = task.NextPoint,
Qty = task.Qty,
DocCode = task.DocCode,
IsManual = task.IsManual,
IsEmpty = task.IsEmpty,
AddWho = task.AddWho,
EditWho = task.EditWho,
AddTime = task.AddTime,
EditTime = task.EditTime
})
.ToPageList(request.PageIndex, request.PageSize, ref count);
//list = list.Skip((request.PageIndex - 1) * request.PageSize).Take(request.PageSize).ToList();
return (list.ToList(), count);
}
public (List, int) GetPageTaskHistoryList(TaskRequest request)
{
int count = 0;
var list = base.Context.Queryable((taskHistory, house) => new object[]
{
JoinType.Inner, taskHistory.WareCode == house.Code
})
.WhereIF(request.TaskCode > Const.Zero, (taskHistory, house) => taskHistory.TaskCode == request.TaskCode)
.WhereIF(request.TaskType > Const.Zero, (taskHistory, house) => taskHistory.TaskType == request.TaskType)
.WhereIF(request.TaskState > Const.Zero, (taskHistory, house) => taskHistory.TaskState == request.TaskState)
.WhereIF(request.Tunnel > Const.Zero, (taskHistory, house) => taskHistory.Tunnel == request.Tunnel.ToString())
.WhereIF(!string.IsNullOrEmpty(request.BusType), (taskHistory, house) => taskHistory.BusType.Contains(request.BusType))
.WhereIF(!string.IsNullOrEmpty(request.WareCode), (taskHistory, house) => taskHistory.WareCode.Contains(request.WareCode))
.WhereIF(!string.IsNullOrEmpty(request.ContGrpBarCode), (taskHistory, house) => taskHistory.ContGrpBarCode.Contains(request.ContGrpBarCode))
.WhereIF(!string.IsNullOrEmpty(request.EndPoint), (taskHistory, house) => taskHistory.EndPoint.Contains(request.EndPoint))
.WhereIF(!string.IsNullOrEmpty(request.StartPoint), (taskHistory, house) => taskHistory.StartPoint.Contains(request.StartPoint))
.WhereIF(!string.IsNullOrEmpty(request.DocCode), (taskHistory, house) => taskHistory.DocCode.Contains(request.DocCode))
.Select((taskHistory, house) => new TaskRsponse()
{
Id = taskHistory.Id,
TaskCode = taskHistory.TaskCode,
TaskType = taskHistory.TaskType,
TaskState = taskHistory.TaskState,
Tunnel = int.Parse(taskHistory.Tunnel),
ContGrpBarCode = taskHistory.ContGrpBarCode,
EndPoint = taskHistory.EndPoint,
StartPoint = taskHistory.StartPoint,
BusType = taskHistory.BusType,
WareCodeName = house.Name,
Priority = taskHistory.Priority,
EquNo = taskHistory.EquNo,
Srm = taskHistory.SrmNo,
CurPoint = taskHistory.CurPoint,
NextPoint = taskHistory.NextPoint,
Qty = taskHistory.Qty,
DocCode = taskHistory.DocCode,
IsManual = int.Parse(taskHistory.IsManual),
IsEmpty = int.Parse(taskHistory.IsEmpty),
AddWho = taskHistory.AddWho,
EditWho = taskHistory.EditWho,
AddTime = taskHistory.AddTime,
EditTime = taskHistory.EditTime
})
.ToPageList(request.PageIndex, request.PageSize, ref count);
//list = list.Skip((request.PageIndex - 1) * request.PageSize).Take(request.PageSize).ToList();
return (list.ToList(), count);
}
public (List, int, decimal) GetPageStockdetailList(StockRequest request)
{
int count = 0;
var list = base.Context.Queryable((stock, house, location, mater) => new object[]
{
JoinType.Left, stock.WarehouseId == house.Id,
JoinType.Left, house.Id == location.WareId,
JoinType.Left, stock.MatId == mater.Id
})
.Where((stock, house, location, mater) => house.WareState == Const.One.ToString()
&& location.LocationState == LocationState.LocationState_Full.GetHashCode() && location.LocationType == LocationType.LocationType_StorageLocation.GetHashCode()
&& stock.ExecState == InvState.InvEcecState_In.GetHashCode() && stock.ContGrpId == location.ContGrpID)
.WhereIF(!string.IsNullOrEmpty(request.Grade), (stock, house, location, mater) => stock.Grade == request.Grade)
.WhereIF(!string.IsNullOrEmpty(request.Location), (stock, house, location, mater) => location.Code.Contains(request.Location))
.WhereIF(!string.IsNullOrEmpty(request.MatCode), (stock, house, location, mater) => mater.Code.Contains(request.MatCode))
.WhereIF(!string.IsNullOrEmpty(request.ContGrpBarCode), (stock, house, location, mater) => stock.ContGrpBarCode.Contains(request.ContGrpBarCode))
.WhereIF(!string.IsNullOrEmpty(request.HWSpec), (stock, house, location, mater) => stock.HWSpec == request.HWSpec)
.WhereIF(request.HoldDuration > 0, (stock, house, location, mater) => mater.HoldDuration == request.HoldDuration)
.Select((stock, house, location, mater) => new RealTimeInventoryReportResponse()
{
ContGrpBarCode = stock.ContGrpBarCode,
ExecState = stock.ExecState.ToString(),
ExecDocsNo = stock.ExecDocsNo,
ExecDocsRowNo = stock.ExecDocsRowNo,
ExecDocsTypeCode = stock.ExecDocsTypeCode,
MatCode = mater.Code,
MatName = mater.Name,
Location = location.Code,
Tunnel = location.Tunnel.ToString(),
CustNo = stock.CustCode,
CustName = stock.CustName,
WareHouseName = house.Name,
InvBarCode = stock.InvBarCode,
InvState = stock.InvState,
InDocsNo = stock.InDocsNo,
InDocsRowNo = stock.InDocsRowNo,
SuppCode = stock.SuppCode,
SuppName = stock.SuppName,
RowStop = location.RowStop,
TotalWtQty = stock.TotalWtQty,
NetWQty = stock.NetWQty,
TareWQty = stock.TareWQty,
LengthQty = stock.LengthQty,
BatchNo = stock.Batch,
ProductTime = stock.ProductTime,
OneInTime = stock.OneInTime,
RFIDBarCode = stock.RFIDBarCode,
HWSpec = stock.HWSpec,
IsSurplus = stock.IsSurplus,
IsRework = stock.IsRework,
IsFast = stock.IsFast,
IsFail = stock.IsFail,
FailReason = stock.FailReason,
Grade = stock.Grade,
IsBack = stock.IsBack,
BackReason = stock.Reason,
ProductWbNo = stock.ProductWbNo,
ProductLineNo = stock.ProductLineNo,
})
.ToPageList(request.PageIndex, request.PageSize, ref count);
decimal total = list.Sum(p => p.TotalWtQty);
//list = list.Skip((request.PageIndex - 1) * request.PageSize).Take(request.PageSize).ToList();
return (list.ToList(), count, total);
}
}
}