|
using MailKit.Search;
|
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_Common;
|
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_IBasicRepository;
|
using WIDESEA_IStockRepository;
|
using WIDESEA_IStockService;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_StockService
|
{
|
public partial class StockViewService : IStockViewService
|
{
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IStockRepository _stockRepository;
|
private readonly SqlSugarClient _dbBase;
|
|
public StockViewService(IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository)
|
{
|
_unitOfWorkManage = unitOfWorkManage;
|
_dbBase = unitOfWorkManage.GetDbClient();
|
_stockRepository = stockRepository;
|
}
|
|
public virtual PageGridData<StockViewDTO> GetPageData(PageDataOptions options)
|
{
|
|
#region MyRegion
|
try
|
{
|
List<StockViewDTO> stockViewDTOs = new List<StockViewDTO>();
|
|
string where = string.Empty;
|
ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Includes(x => x.Details);
|
if (!string.IsNullOrEmpty(options.Wheres))
|
{
|
try
|
{
|
List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
|
if (searchParametersList.Count > 0)
|
{
|
{
|
SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower());
|
if (searchParameters != null)
|
{
|
sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
|
}
|
}
|
|
{
|
SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower());
|
if (searchParameters != null)
|
{
|
sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value)));
|
}
|
}
|
|
}
|
|
}
|
catch { }
|
}
|
//string whereSto = GetDataRole(typeof(Dt_StockInfo));
|
sugarQueryable1 = sugarQueryable1.Where("1 = 1");
|
EntityProperties.ValidatePageOptions(options, ref sugarQueryable1);
|
|
//string whereLo = GetDataRole(typeof(Dt_LocationInfo));
|
ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>().Where("1 = 1");
|
|
EntityProperties.ValidatePageOptions(options, ref sugarQueryable);
|
|
ISugarQueryable<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).Select((b, a)
|
=> new StockViewDTO
|
{
|
LocationCode = b.LocationCode,
|
Column = a.Column,
|
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;
|
|
stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount);
|
return new PageGridData<StockViewDTO>(totalCount, stockViewDTOs);
|
}
|
catch (Exception ex)
|
{
|
return new PageGridData<StockViewDTO>();
|
}
|
#endregion
|
|
#region MyRegion
|
//string where = options.ValidatePageOptions(typeof(StockViewDTO).GetProperties());
|
////获取排序字段
|
////Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(typeof(StockViewDTO).GetProperties());
|
////List<OrderByModel> orderByModels = new List<OrderByModel>();
|
////foreach (var item in orderbyDic)
|
////{
|
//// OrderByModel orderByModel = new OrderByModel()
|
//// {
|
//// FieldName = item.Key,
|
//// OrderByType = item.Value
|
//// };
|
//// orderByModels.Add(orderByModel);
|
////}
|
//int totalCount = 0;
|
|
//ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>();
|
//ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>();
|
|
//List<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).WhereIF(!string.IsNullOrEmpty(where), where).Select((b, a) => new StockViewDTO
|
//{
|
// AreaId = a.AreaId,
|
// LocationCode = b.LocationCode,
|
// Column = a.Column,
|
// CreateDate = b.CreateDate,
|
// Creater = b.Creater,
|
// Depth = a.Depth,
|
// EnalbeStatus = a.EnableStatus,
|
// IsFull = b.IsFull,
|
// 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,
|
//}).ToPageList(options.Page, options.Rows, ref totalCount);
|
//return new PageGridData<StockViewDTO>(totalCount, list);
|
#endregion
|
|
}
|
|
public virtual WebResponseContent GetLocationStockView(int Layer)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
List<LocationStockView> locationStockViews = new List<LocationStockView>();
|
ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>();
|
List<Dt_LocationInfo> dt_LocationInfos = sugarQueryable.ToList();
|
|
ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Where(x => dt_LocationInfos.Select(x => x.LocationCode).ToList().Contains(x.LocationCode)).Includes(x => x.Details);
|
List<Dt_StockInfo> StockInfos = sugarQueryable1.OrderBy(x => x.InDate).ToList();
|
foreach (var dt_LocationInfo in dt_LocationInfos)
|
{
|
LocationStockView locationStockView = new LocationStockView()
|
{
|
AreaId = dt_LocationInfo.AreaId,
|
Column = dt_LocationInfo.Column,
|
Depth = dt_LocationInfo.Depth,
|
EnalbeStatus = dt_LocationInfo.EnableStatus,
|
Layer = dt_LocationInfo.Layer,
|
LocationCode = dt_LocationInfo.LocationCode,
|
LocationName = dt_LocationInfo.LocationName,
|
LocationStatus = dt_LocationInfo.LocationStatus,
|
LocationType = dt_LocationInfo.LocationType,
|
RoadwayNo = dt_LocationInfo.RoadwayNo,
|
Row = dt_LocationInfo.Row
|
};
|
List<Dt_StockInfo> dt_StockInfos = StockInfos.Where(x => x.LocationCode == dt_LocationInfo.LocationCode).ToList();
|
if (dt_StockInfos.Count > 0 && dt_StockInfos != null)
|
{
|
locationStockView.BatchNo = dt_StockInfos.First().Details.First().BatchNo;
|
locationStockView.InDate = dt_StockInfos.First().InDate;
|
locationStockView.MaterielCode = dt_StockInfos.First().Details.First().MaterielCode;
|
locationStockView.MaterielName = dt_StockInfos.First().Details.First().MaterielName;
|
locationStockView.OrderNo = dt_StockInfos.First().Details.First().OrderNo;
|
locationStockView.PalletCode = string.Join(",", dt_StockInfos.Select(x => x.PalletCode).ToList());
|
locationStockView.Quantity = dt_StockInfos.Count;
|
}
|
locationStockViews.Add(locationStockView);
|
}
|
if (locationStockViews.Count > 0)
|
{
|
#region MyRegion
|
List<LocationLayer> layers = new List<LocationLayer>();
|
foreach (var layer in locationStockViews.GroupBy(x => x.Layer))
|
{
|
var rows = new List<LocationRow>();
|
var data_rows = layer.GroupBy(t => t.Row);
|
foreach (var data_row in data_rows)
|
{
|
rows.Add(new LocationRow()
|
{
|
index = data_row.Key,
|
cols = data_row.OrderBy(x => x.Column).ToList()
|
});
|
}
|
//rows=rows.OrderBy(x=>x.index).ToList();
|
layers.Add(new LocationLayer()
|
{
|
index = layer.Key,
|
rows = rows
|
});
|
}
|
#endregion
|
layers = layers.OrderBy(x => x.index).ToList();
|
content.OK(data: layers);
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
|
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);
|
}
|
}
|
}
|