|
using Microsoft.AspNetCore.Http;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Drawing.Printing;
|
using System.Dynamic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.Enums;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_Core.Utilities;
|
using WIDESEA_DTO.Stock;
|
using WIDESEA_IStockRepository;
|
using WIDESEA_IStockService;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_StockService
|
{
|
public partial class StockViewService : IStockViewService
|
{
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly SqlSugarClient _dbBase;
|
|
public StockViewService(IUnitOfWorkManage unitOfWorkManage)
|
{
|
_unitOfWorkManage = unitOfWorkManage;
|
_dbBase = unitOfWorkManage.GetDbClient();
|
}
|
|
public virtual PageGridData<StockViewDTO> GetPageData(PageDataOptions options)
|
{
|
try
|
{
|
ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Includes(x => x.Details);
|
ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>();
|
ISugarQueryable<Dt_StockInfoDetail> sugarQueryable2 = _dbBase.Queryable<Dt_StockInfoDetail>();
|
if (!string.IsNullOrEmpty(options.Wheres))
|
{
|
try
|
{
|
|
List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
|
if (searchParametersList?.Any() == true)
|
{
|
foreach (var param in searchParametersList)
|
{
|
switch (param.Name)
|
{
|
case var name when name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower():
|
if (!string.IsNullOrEmpty(param.Value?.ToString()))
|
{
|
sugarQueryable1 = sugarQueryable1
|
.Where(x => x.Details.Any(v => v.MaterielCode.Contains(param.Value.ToString())));
|
}
|
break;
|
case var name when name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower():
|
if (!string.IsNullOrEmpty(param.Value?.ToString()))
|
{
|
sugarQueryable1 = sugarQueryable1
|
.Where(x => x.Details.Any(v => v.BatchNo.Contains(param.Value.ToString())));
|
}
|
break;
|
|
case var name when name == nameof(Dt_StockInfo.LocationCode).FirstLetterToLower():
|
if (!string.IsNullOrEmpty(param.Value?.ToString()))
|
{
|
sugarQueryable1 = sugarQueryable1
|
.Where(x => x.LocationCode == param.Value.ToString());
|
}
|
break;
|
case var name when name == nameof(Dt_LocationInfo.LocationStatus).FirstLetterToLower():
|
if (!string.IsNullOrEmpty(param.Value?.ToString()))
|
{
|
sugarQueryable = sugarQueryable
|
.Where(x => x.LocationStatus == param.Value.ObjToInt());
|
}
|
break;
|
case var name when name == nameof(Dt_StockInfo.StockStatus).FirstLetterToLower():
|
if (!string.IsNullOrEmpty(param.Value?.ToString()))
|
{
|
sugarQueryable1 = sugarQueryable1
|
.Where(x => x.StockStatus == param.Value.ObjToInt());
|
}
|
break;
|
case var name when name == nameof(Dt_StockInfo.WarehouseId).FirstLetterToLower():
|
if (!string.IsNullOrEmpty(param.Value?.ToString()))
|
{
|
sugarQueryable1 = sugarQueryable1
|
.Where(x => x.WarehouseId == param.Value.ObjToInt());
|
}
|
break;
|
case var name when name == nameof(Dt_StockInfo.CreateDate).FirstLetterToLower():
|
if (DateTime.TryParse(param.Value?.ToString(), out DateTime minDate))
|
{
|
LinqExpressionType expressionType = param.DisplayType.GetLinqCondition();
|
if (expressionType == LinqExpressionType.ThanOrEqual)
|
{
|
sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate >= minDate);
|
}
|
else if (expressionType == LinqExpressionType.LessThanOrEqual)
|
{
|
sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate <= minDate);
|
}
|
}
|
break;
|
}
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
}
|
}
|
|
|
ISugarQueryable<StockViewDTO> list = sugarQueryable1
|
.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode)
|
.Select((b, a) => new StockViewDTO
|
{
|
LocationCode = b.LocationCode,
|
Column = a.Column,
|
WarehouseId = b.WarehouseId,
|
CreateDate = b.CreateDate,
|
Creater = b.Creater,
|
Depth = a.Depth,
|
EnalbeStatus = a.EnableStatus,
|
Layer = a.Layer,
|
LocationName = a.LocationName,
|
LocationStatus = a.LocationStatus,
|
LocationType = a.LocationType,
|
Modifier = b.Modifier,
|
ModifyDate = b.ModifyDate,
|
PalletCode = b.PalletCode,
|
StockRemark = b.Remark,
|
RoadwayNo = a.RoadwayNo,
|
Row = a.Row,
|
StockId = b.Id,
|
StockStatus = b.StockStatus,
|
Details = b.Details,
|
});
|
|
int totalCount = 0;
|
var stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount);
|
|
stockViewDTOs.ForEach(x =>
|
{
|
x.MaterielCode = string.Join(",", x.Details.Select(d => d.MaterielCode).Distinct());
|
x.BatchNo = string.Join(",", x.Details.Select(d => d.BatchNo).Distinct());
|
x.MaterielSpec = x.Details.FirstOrDefault()?.MaterieSpec ?? "";
|
x.MaterielName = x.Details.FirstOrDefault()?.MaterielName ?? "";
|
});
|
|
return new PageGridData<StockViewDTO>(totalCount, stockViewDTOs);
|
}
|
catch (Exception ex)
|
{
|
}
|
return new PageGridData<StockViewDTO>();
|
}
|
|
public virtual object GetDetailPage(PageDataOptions pageData)
|
{
|
Type t = typeof(StockViewDTO);
|
|
if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
|
string keyName = t.GetKeyName();
|
////生成查询条件
|
//Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
|
int totalCount = 0;
|
PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
|
if (propertyInfo != null)
|
{
|
Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
|
Navigate? navigate = propertyInfo.GetCustomAttribute<Navigate>();
|
if (navigate != null)
|
{
|
List<ExpandoObject> list = _dbBase.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
|
return new PageGridData<ExpandoObject>(totalCount, list);
|
}
|
}
|
return new PageGridData<object>(total: 0, null);
|
}
|
}
|
}
|