using DapperORMCore.Context.DataContext;
using DapperORMCore.Model.CoreModel;
using DapperORMCore.Repository.IRepositorys;
using DapperORMCore.String.Consts;
using Microsoft.Extensions.Configuration;
using NXWMS.IService.NXWMS.Balance;
using NXWMS.Model.AppModels.Condition.Balance;
using NXWMS.Model.AppModels.Result.Balance;
using NXWMS.Model.AppModels.Result.Base;
using NXWMS.Model.Common;
using NXWMS.String.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WestDistance.DapperORM.Repository.Repositorys;
namespace NXWMS.Service.NXWMS.Balance
{
///
/// 库存查询
///
[AutoInject(typeof(IBalanceSearchService), InjectType.Scope)]
public class BalanceSearchService : ServiceBase, IBalanceSearchService
{
///
/// 系统操作仓储中转
///
private IDataRepositoryContext _dataContext;
///
/// SQL节点仓储
///
private ISQLNodeRepository _iSQLNodeRepository;
///
/// 配置
///
private IConfiguration _configuration;
public BalanceSearchService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
{
this._dataContext = dataRepositoryContext;
this._configuration = configuration;
this._iSQLNodeRepository = iSQLNodeRepository;
}
///
/// 库存明细查询
///
///
///
public OperateResultInfo> GetDetailList(BalanceDetailSearchCondition info)
{
if ((info.PageIndex == 0 || info.PageSize == 0) && info.Id == null && string.IsNullOrWhiteSpace(info.Ids))
{
return FailMessageStatus("请传递分页码和分页个数!",
new PageQueryResultInfo());
}
var sql = $@"SELECT MaterielTypeCode=BAS_MATERIEL.MATERIEL_TYPE,MaterielTypeName=BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
MaterielCode=BAS_MATERIEL.MATERIEL_CODE,MaterielName=BAS_MATERIEL.MATERIEL_NAME,UnitCode=BAS_UNIT.UNIT_CODE,
UnitName=BAS_UNIT.UNIT_NAME,
QTY=WMS_STK_TRAY_DTL.QTY,BatchNo=WMS_STK_TRAY_DTL_EXT.BATCH_NO,TrayCode=WMS_STK_TRAY.TRAY_CODE,
PalletCode = WMS_STK_BALANCE.PALLET_CODE,PalletName=BAS_PALLET.PALLET_NAME,ProductDate=WMS_STK_TRAY_DTL_EXT.PRODUCT_DATE,
ExpDate=WMS_STK_TRAY_DTL_EXT.EXP_DATE,
QualityStatus=WMS_STK_TRAY_DTL_EXT.QUALITY_STATUS,QualityStatusName=
{_iSQLNodeRepository.GetEnumIntCaseString("QUALITY_STATUS", "WMS_STK_TRAY_DTL_EXT")},
BalanceStatus=WMS_STK_BALANCE.BALANCE_STATUS,BalanceStatusName=
{_iSQLNodeRepository.GetEnumIntCaseString("BALANCE_STATUS", "WMS_STK_BALANCE")},
CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_BALANCE.CREATE_BY),
UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_BALANCE.UPDATE_BY),
SupplierCode=WMS_STK_TRAY_DTL_EXT.SUPPLIER_CODE,
SupplierName=WMS_STK_TRAY_DTL_EXT.SUPPLIER_NAME,
SpecsModel=BAS_MATERIEL.SPECS_MODEL,
TrayDtlId=WMS_STK_TRAY_DTL.TRAY_DTL_ID,
WMS_STK_BALANCE.* FROM WMS_STK_BALANCE
LEFT JOIN WMS_STK_TRAY ON WMS_STK_TRAY.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
LEFT JOIN WMS_STK_TRAY_DTL ON WMS_STK_TRAY.TRAY_ID=WMS_STK_TRAY_DTL.TRAY_ID
LEFT JOIN WMS_STK_TRAY_DTL_EXT ON WMS_STK_TRAY_DTL_EXT.TRAY_DTL_ID=WMS_STK_TRAY_DTL.TRAY_DTL_ID
LEFT JOIN BAS_PALLET ON BAS_PALLET.PALLET_CODE=WMS_STK_TRAY.PALLET_CODE
JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_CODE=WMS_STK_TRAY_DTL.MATERIEL_CODE
JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=BAS_MATERIEL.UNIT_CODE
WHERE 1=1 ";
var sqlAndBuilder = new StringBuilder();
sqlAndBuilder = string.IsNullOrWhiteSpace(info.Ids) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_ID", info.Ids, DBOperationString._In,
"WMS_STK_BALANCE"));
sqlAndBuilder = info.Id != null ?
info.Id > 0 ?
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_ID", info.Id, DBOperationString._ContainIn,
"WMS_STK_BALANCE")) :
sqlAndBuilder : sqlAndBuilder;
sqlAndBuilder = string.IsNullOrWhiteSpace(info.RegionCode) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("REGION_CODE", info.RegionCode, DBOperationString._ContainIn,
"WMS_STK_BALANCE"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.QualityStatus) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("QUALITY_STATUS", info.QualityStatus, DBOperationString._ContainIn,
"WMS_STK_TRAY_DTL_EXT"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielType) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MATERIEL_TYPE", info.MaterielType, DBOperationString._ContainIn,
"BAS_MATERIEL"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.SpecsModel) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SPECS_MODEL", info.SpecsModel, DBOperationString._ContainIn,
"BAS_MATERIEL"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BATCH_NO", info.BatchNo, DBOperationString._ContainIn,
"WMS_STK_TRAY_DTL_EXT"));
if (info.BalanceStatus == null)
{
sqlAndBuilder = sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)BalanceStatus.Complete, DBOperationString._SmallIn, "WMS_STK_BALANCE"));
}
else if ((int)info.BalanceStatus < (int)BalanceStatus.Complete)
{
sqlAndBuilder = sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)info.BalanceStatus, DBOperationString._SmallEqual, "WMS_STK_BALANCE"));
}
else
{
sqlAndBuilder = sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)info.BalanceStatus, DBOperationString._Equal, "WMS_STK_BALANCE"));
}
//sqlAndBuilder = info.BalanceStatus == null ?
// sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)BalanceStatus.Complete, DBOperationString._SmallEqual, "WMS_STK_BALANCE")) :
// sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)info.BalanceStatus, DBOperationString._ContainIn,
// "WMS_STK_BALANCE"));
sqlAndBuilder = !string.IsNullOrWhiteSpace(info.SupplierCode) ?
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SUPPLIER_CODE", info.SupplierCode, DBOperationString._Equal,
"WMS_STK_TRAY_DTL_EXT")) :
sqlAndBuilder;
//sqlAndBuilder = info.IsUsed == null ?
// sqlAndBuilder :
// sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("USED_FLAG", info.IsUsed, DBOperationString._Equal,
// "WMS_STK_BALANCE"));
sqlAndBuilder = info.ProductBeginDate != null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("PRODUCT_DATE", info.ProductBeginDate, DBOperationString._LargeEqual,
"WMS_STK_TRAY_DTL_EXT"));
sqlAndBuilder = info.ProductEndDate != null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("PRODUCT_DATE", info.ProductEndDate, DBOperationString._SmallEqual,
"WMS_STK_TRAY_DTL_EXT"));
sqlAndBuilder = info.ExpBeginDate != null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("EXP_DATE", info.ExpBeginDate, DBOperationString._LargeEqual,
"WMS_STK_TRAY_DTL_EXT"));
sqlAndBuilder = info.ExpEndDate != null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("EXP_DATE", info.ExpEndDate, DBOperationString._SmallEqual,
"WMS_STK_TRAY_DTL_EXT"));
sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
//信息类条件
//仓库信息
var sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_CODE", info.WarehouseInfo, DBOperationString._ContainIn,
"WMS_STK_BALANCE"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_NAME", info.WarehouseInfo, DBOperationString._ContainIn,
"WMS_STK_BALANCE"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//库位信息
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_CODE", info.BinInfo, DBOperationString._ContainIn,
"WMS_STK_BALANCE"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_NAME", info.BinInfo, DBOperationString._ContainIn,
"WMS_STK_BALANCE"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//物料信息
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_CODE", info.MaterielInfo, DBOperationString._ContainIn,
"BAS_MATERIEL"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.MaterielInfo, DBOperationString._ContainIn,
"BAS_MATERIEL"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//物料信息
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_CODE", info.PalletInfo, DBOperationString._ContainIn,
"BAS_PALLET"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_NAME", info.PalletInfo, DBOperationString._ContainIn,
"BAS_PALLET"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
IEnumerable result;
IEnumerable totalResult;
totalResult = new DataRepository(_dataContext).Query(sql);
if (info.PageIndex == 0 || info.PageSize == 0)
{
result = totalResult.ToList();
}
else
{
result = new DataRepository(_dataContext).QueryPage(sql,
"CREATE_TIME", info.PageSize, info.PageIndex, true);
}
return SuccessStatus(new PageQueryResultInfo
{
RowData = result,
PageConditionInfo = info,
TotalCount = totalResult.Count(),
TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
});
}
///
/// 库存统计查询
///
///
///
public OperateResultInfo> GetStatisticsList(BalanceStatisticsSearchCondition info)
{
if (info.PageIndex == 0 || info.PageSize == 0)
{
return FailMessageStatus("请传递分页码和分页个数!",
new PageQueryResultInfo());
}
var sql = string.Empty;
var sqlOrBuilder = new StringBuilder();
var sqlAndBuilder = new StringBuilder();
sqlAndBuilder = string.IsNullOrWhiteSpace(info.UnitCode) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("UnitCode", info.UnitCode, DBOperationString._ContainIn,
"Result"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielType) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MaterielTypeCode", info.MaterielType, DBOperationString._ContainIn,
"Result"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BatchNo", info.BatchNo, DBOperationString._ContainIn,
"Result"));
sql = (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
//物料
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MaterielCode", info.MaterielInfo, DBOperationString._ContainIn,
"Result"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MaterielName", info.MaterielInfo, DBOperationString._ContainIn,
"Result"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//库区
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.RegionInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("REGION_CODE", info.RegionInfo, DBOperationString._ContainIn,
"Result"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.RegionInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("REGION_NAME", info.RegionInfo, DBOperationString._ContainIn,
"Result"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
sql = $@"SELECT WarehouseCode=Result.WAREHOUSE_CODE,WarehouseName=Result.WAREHOUSE_NAME,
RegionCode=Result.REGION_CODE,RegionName=Result.REGION_NAME,
MaterielTypeCode,MaterielTypeName,MaterielCode,
MaterielName,UnitCode,UnitName,BatchNo,QTY=Count(*) FROM (
SELECT
MaterielTypeCode=BAS_MATERIEL.MATERIEL_TYPE,MaterielTypeName=BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
MaterielCode=BAS_MATERIEL.MATERIEL_CODE,MaterielName=BAS_MATERIEL.MATERIEL_NAME,UnitCode=BAS_UNIT.UNIT_CODE,UnitName=BAS_UNIT.UNIT_NAME,
QTY=WMS_STK_TRAY_DTL.QTY,BatchNo=WMS_STK_TRAY_DTL_EXT.BATCH_NO,TrayCode=WMS_STK_TRAY.TRAY_CODE,
PalletCode = BAS_PALLET.PALLET_CODE,PalletName=BAS_PALLET.PALLET_NAME,ProductDate=WMS_STK_TRAY_DTL_EXT.PRODUCT_DATE,ExpDate=WMS_STK_TRAY_DTL_EXT.EXP_DATE,
QualityStatus=WMS_STK_TRAY_DTL_EXT.QUALITY_STATUS ,QualityStatusName='',BalanceStatus=WMS_STK_BALANCE.BALANCE_STATUS,BalanceStatusName='',
CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_BALANCE.CREATE_BY),
UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_BALANCE.UPDATE_BY),
WMS_STK_BALANCE.* from WMS_STK_BALANCE
JOIN WMS_STK_TRAY ON WMS_STK_TRAY.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
LEFT JOIN WMS_STK_TRAY_DTL ON WMS_STK_TRAY.TRAY_ID=WMS_STK_TRAY_DTL.TRAY_ID
LEFT JOIN WMS_STK_TRAY_DTL_EXT ON WMS_STK_TRAY_DTL_EXT.TRAY_DTL_ID=WMS_STK_TRAY_DTL.TRAY_DTL_ID
JOIN BAS_PALLET ON BAS_PALLET.PALLET_CODE=WMS_STK_TRAY.PALLET_CODE
JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_ID=WMS_STK_TRAY_DTL.MATERIEL_ID
JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=BAS_MATERIEL.UNIT_CODE
) Result
WHERE 1=1 {sql}
GROUP BY Result.WAREHOUSE_CODE,Result.WAREHOUSE_NAME,
Result.REGION_CODE,Result.REGION_NAME,
MaterielTypeCode,MaterielTypeName,MaterielCode,
MaterielName,UnitCode,UnitName,BatchNo ";
var result = new DataRepository(_dataContext).QueryPage(sql,
"RegionCode", info.PageSize, info.PageIndex, true);
var totalResult = new DataRepository(_dataContext).Query(sql);
return SuccessStatus(new PageQueryResultInfo
{
RowData = result,
PageConditionInfo = info,
TotalCount = totalResult.Count(),
TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
});
}
///
/// 主盘点单列表
///
///
///
public OperateResultInfo> GetMainInventoryList(InventoryMainSearchCondition info)
{
var sql = $@"SELECT
InventoryNo=WMS_STK_INVENTORY.INVENTORY_NO,
CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_INVENTORY.CREATE_BY),
UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_INVENTORY.UPDATE_BY),
InventoryTypeName = {_iSQLNodeRepository.GetEnumIntCaseString("INVENTORY_TYPE", "WMS_STK_INVENTORY")},
InventoryModeName = {_iSQLNodeRepository.GetEnumIntCaseString("INVENTORY_MODE", "WMS_STK_INVENTORY")},
InventoryStatusName = {_iSQLNodeRepository.GetEnumIntCaseString("INVENTORY_STATUS", "WMS_STK_INVENTORY")},
ResultFlagName = {_iSQLNodeRepository.GetEnumIntCaseString("RESULT_FLAG", "WMS_STK_INVENTORY")},
WMS_STK_INVENTORY.* FROM WMS_STK_INVENTORY
WHERE 1=1 ";
var sqlOrBuilder = new StringBuilder();
var sqlAndBuilder = new StringBuilder();
sqlAndBuilder = info.Id != null ?
info.Id > 0 ?
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_ID", info.Id, DBOperationString._Equal,
"WMS_STK_INVENTORY")) :
sqlAndBuilder : sqlAndBuilder;
sqlAndBuilder = string.IsNullOrWhiteSpace(info.InventoryNo) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_NO", info.InventoryNo, DBOperationString._Equal,
"WMS_STK_INVENTORY"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BATCH_NO", info.BatchNo, DBOperationString._ContainIn,
"WMS_STK_INVENTORY_DTL"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.InventoryMode) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_MODE", info.InventoryMode, DBOperationString._Equal,
"WMS_STK_INVENTORY"));
sqlAndBuilder = info.InventoryStatus != null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_STATUS", info.InventoryStatus, DBOperationString._Equal,
"WMS_STK_INVENTORY"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.InventoryType) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_TYPE", info.InventoryType, DBOperationString._Equal,
"WMS_STK_INVENTORY"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.SupplierCode) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SUPPLIER_CODE", info.SupplierCode, DBOperationString._ContainIn,
"WMS_STK_INVENTORY_DTL"));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("PALLET_CODE", info.PalletInfo, DBOperationString._ContainIn,
"WMS_STK_INVENTORY_DTL"));
sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
//物料
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_CODE", info.MaterielInfo, DBOperationString._ContainIn,
"WMS_STK_INVENTORY_DTL"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.MaterielInfo, DBOperationString._ContainIn,
"WMS_STK_INVENTORY_DTL"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//库位
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_CODE", info.WarehouseInfo, DBOperationString._ContainIn,
"BAS_BIN"));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_NAME", info.WarehouseInfo, DBOperationString._ContainIn,
"BAS_BIN"));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
IEnumerable result;
IEnumerable totalResult;
totalResult = new DataRepository(_dataContext).Query(sql);
if (info.PageIndex == 0 || info.PageSize == 0)
{
result = totalResult.ToList();
}
else
{
result = new DataRepository(_dataContext).QueryPage(sql,
"CREATE_TIME", info.PageSize, info.PageIndex, true);
}
return SuccessStatus(new PageQueryResultInfo
{
RowData = result,
PageConditionInfo = info,
TotalCount = totalResult.Count(),
TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
});
}
///
/// 盘点明细单列表
///
///
///
public OperateResultInfo> GetDetailInventoryList(InventoryDetailSearchCondition info)
{
if (info.Id == null)
{
return FailMessageStatus("参数错误", new List());
}
var sql = $@"SELECT CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_INVENTORY.CREATE_BY),
UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_INVENTORY.UPDATE_BY),
WMS_STK_INVENTORY_DTL.MATERIEL_CODE,WMS_STK_INVENTORY_DTL.MATERIEL_NAME,
WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID,
MaterielTypeCode = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE,MaterielTypeName = BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
BAS_SUPPLIER.SUPPLIER_NAME,BATCH_NO,WMS_STK_INVENTORY_DTL.QTY,WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY,
WMS_STK_INVENTORY_DTL.INVENTORY_RESULT_QTY,UnitName = BAS_UNIT.UNIT_NAME,WarehouseName = BAS_WAREHOUSE.WAREHOUSE_NAME,WarehouseCode = BAS_WAREHOUSE.WAREHOUSE_CODE,
BAS_BIN.AREA_NAME,
BAS_BIN.BIN_CODE,WMS_STK_INVENTORY_DTL.TRAY_CODE,WMS_STK_INVENTORY_DTL.PALLET_CODE,
InventoryDetailStatusName = {_iSQLNodeRepository.GetEnumIntCaseString("INVENTORY_DTL_STATUS", "WMS_STK_INVENTORY_DTL")},
WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS,
CREATE_TIME=WMS_STK_INVENTORY.CREATE_TIME,UPDATE_TIME=WMS_STK_INVENTORY.UPDATE_TIME
FROM WMS_STK_INVENTORY
JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID=WMS_STK_INVENTORY_DTL.INVENTORY_ID
JOIN BAS_BIN ON BAS_BIN.BIN_CODE=WMS_STK_INVENTORY_DTL.BIN_CODE
JOIN BAS_WAREHOUSE ON BAS_BIN.WAREHOUSE_CODE=BAS_WAREHOUSE.WAREHOUSE_CODE
JOIN BAS_AREA ON BAS_AREA.AREA_CODE=BAS_BIN.AREA_CODE
JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_CODE=WMS_STK_INVENTORY_DTL.MATERIEL_CODE
JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE=BAS_MATERIEL.MATERIEL_TYPE
LEFT JOIN BAS_SUPPLIER ON BAS_SUPPLIER.SUPPLIER_CODE=WMS_STK_INVENTORY_DTL.SUPPLIER_CODE
JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=WMS_STK_INVENTORY_DTL.UNIT_CODE
WHERE 1=1 AND WMS_STK_INVENTORY.INVENTORY_ID = {info.Id.Value}";
if (info.IsGetDifference)
{
sql = sql + " AND WMS_STK_INVENTORY_DTL.INVENTORY_RESULT_QTY!=ACTUAL_INVENTORY_QTY";
}
var results = new DataRepository(_dataContext).Query(sql);
return SuccessStatus(results.ToList());
}
///
/// 获取库存改变记录列表
///
///
///
public OperateResultInfo> GetChangeLogList(BalanceChangeLogSearchCondition info)
{
var sqlAndBuilder = new StringBuilder();
var sqlOrBuilder = new StringBuilder();
var sql = $@"SELECT
CreateName = (SELECT USER_NAME FROM SYS_USER A WHERE A.USER_ID=CREATE_BY),
UpdateName = (SELECT USER_NAME FROM SYS_USER B WHERE B.USER_ID=UPDATE_BY),
UsedFlagName = {_iSQLNodeRepository.GetEnumIntCaseString("USED_FLAG")},
{info.ItemSQL} FROM WMS_LOG_BALANCE_CHANGE_MSG WHERE 1=1 AND DEL_FLAG = 0 ";
sqlAndBuilder = info.Id != null ?
info.Id > 0 ?
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_CHANGE_MSG_ID", info.Id, DBOperationString._Equal)) :
sqlAndBuilder : sqlAndBuilder;
sqlAndBuilder = info.BalanceStatus != null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", info.BalanceStatus, DBOperationString._Equal));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BATCH_NO", info.BatchNo, DBOperationString._Equal));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.Ids) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_CHANGE_MSG_ID", info.Ids, DBOperationString._In));
sqlAndBuilder = info.InspectionStatus != null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INSPECTION_STATUS", info.InspectionStatus, DBOperationString._Equal));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.RegionCode) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("REGION_CODE", info.RegionCode, DBOperationString._ContainIn));
sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
//物料
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_CODE", info.MaterielInfo, DBOperationString._ContainIn));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.MaterielInfo, DBOperationString._ContainIn));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//库位
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_CODE", info.BinInfo, DBOperationString._ContainIn));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_NAME", info.BinInfo, DBOperationString._ContainIn));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//物料类型
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_TYPE_CODE", info.MaterielTypeInfo, DBOperationString._ContainIn));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_TYPE_NAME", info.MaterielTypeInfo, DBOperationString._ContainIn));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//托盘号
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_CODE", info.PalletInfo, DBOperationString._ContainIn));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_NAME", info.PalletInfo, DBOperationString._ContainIn));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
//仓库
sqlOrBuilder = new StringBuilder();
sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_CODE", info.WarehouseInfo, DBOperationString._ContainIn));
sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
sqlOrBuilder :
sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_NAME", info.WarehouseInfo, DBOperationString._ContainIn));
sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
IEnumerable result;
IEnumerable totalResult;
totalResult = new DataRepository(_dataContext).Query(sql);
if (info.PageIndex == 0 || info.PageSize == 0)
{
result = totalResult.ToList();
}
else
{
result = new DataRepository(_dataContext).QueryPage(sql,
"CREATE_TIME", info.PageSize, info.PageIndex, true);
}
return SuccessStatus(new PageQueryResultInfo
{
RowData = result,
PageConditionInfo = info,
TotalCount = totalResult.Count(),
TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
});
}
public BinResult GetEmptyBin(string regionCode)
{
string strSql = $@"
SELECT
TOP 1 A.*, B.USER_CODE CreateCode,
B.USER_NAME CreateName,
C.USER_CODE UpdateCode,
C.USER_NAME UpdateName
FROM
BAS_BIN A
LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
WHERE
A.USED_FLAG = 1
AND A.DEL_FLAG = 0
AND A.BIN_CODE NOT IN (
SELECT
BIN_CODE
FROM
WMS_STK_BALANCE
WHERE
BALANCE_STATUS < 99
AND REGION_CODE = '{regionCode}'
)
AND A.REGION_CODE = '{regionCode}'
ORDER BY
A.BIN_LAYER desc,
A.BIN_COLUMN desc,
A.BIN_ROW desc
";
return new DataRepository(_dataContext).QueryFirst(strSql);
}
public bool VerifyBin(string RegionCode, string BinCode)
{
string strSql = $@"
SELECT
TOP 1 A.*, B.USER_CODE CreateCode,
B.USER_NAME CreateName,
C.USER_CODE UpdateCode,
C.USER_NAME UpdateName
FROM
BAS_BIN A
LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
WHERE
A.USED_FLAG = 1
AND A.DEL_FLAG = 0
AND A.BIN_CODE NOT IN (
SELECT
BIN_CODE
FROM
WMS_STK_BALANCE
WHERE
BALANCE_STATUS < 99
AND REGION_CODE = @regionCode
)
AND A.REGION_CODE = @regionCode
AND A.BIN_CODE=@BinCode
ORDER BY
A.BIN_LAYER desc,
A.BIN_COLUMN desc,
A.BIN_ROW desc
";
return new DataRepository