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 GetPageData(PageDataOptions options) { try { ISugarQueryable sugarQueryable1 = _dbBase.Queryable().Includes(x => x.Details); ISugarQueryable sugarQueryable = _dbBase.Queryable(); ISugarQueryable sugarQueryable2 = _dbBase.Queryable(); if (!string.IsNullOrEmpty(options.Wheres)) { try { List searchParametersList = options.Wheres.DeserializeObject>(); 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 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(totalCount, stockViewDTOs); } catch (Exception ex) { } return new PageGridData(); } public virtual object GetDetailPage(PageDataOptions pageData) { Type t = typeof(StockViewDTO); if (pageData.Value == null) return new PageGridData(total: 0, null); string keyName = t.GetKeyName(); ////生成查询条件 //Expression> whereExpression = keyName.CreateExpression(pageData.Value, LinqExpressionType.Equal); int totalCount = 0; PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute() != null); if (propertyInfo != null) { Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0]; Navigate? navigate = propertyInfo.GetCustomAttribute(); if (navigate != null) { List list = _dbBase.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount); return new PageGridData(totalCount, list); } } return new PageGridData(total: 0, null); } } }