|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | using AngleSharp.Dom; | 
|---|
|  |  |  | using Mapster; | 
|---|
|  |  |  | using Masuit.Tools; | 
|---|
|  |  |  | using SqlSugar; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using System.Drawing.Printing; | 
|---|
|  |  |  | using System.Linq.Expressions; | 
|---|
|  |  |  | using WIDESEA_Core; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace WIDESEA_StorageBasicService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class StockInfoService : ServiceBase<DtStockInfo, IStockInfoRepository>, IStockInfoService | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 分页 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="options"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public override PageGridData<DtStockInfo> GetPageData(PageDataOptions options) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var data = base.GetPageData(options); | 
|---|
|  |  |  | foreach (var item in data.Rows) | 
|---|
|  |  |  | string wheres = ValidatePageOptions(options); | 
|---|
|  |  |  | //获取排序字段 | 
|---|
|  |  |  | Dictionary<string, SqlSugar.OrderByType> orderbyDic = GetPageDataSort(options, TProperties); | 
|---|
|  |  |  | List<OrderByModel> orderByModels = new List<OrderByModel>(); | 
|---|
|  |  |  | foreach (var item in orderbyDic) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | item.Remark = item.StockInfoDetails.Count().ToString(); | 
|---|
|  |  |  | OrderByModel orderByModel = new() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | FieldName = item.Key, | 
|---|
|  |  |  | OrderByType = item.Value | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | orderByModels.Add(orderByModel); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return data; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int totalCount = 0; | 
|---|
|  |  |  | List<SearchParameters> searchParametersList = new List<SearchParameters>(); | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(options.Wheres)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>(); | 
|---|
|  |  |  | options.Filter = searchParametersList; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch { } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Expression<Func<DtStockInfo, bool>> locationStatus = null; | 
|---|
|  |  |  | Expression<Func<DtStockInfo, bool>> roadwayNo = null; | 
|---|
|  |  |  | foreach (var item in searchParametersList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (item.Name.Contains("locationStatus")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | locationStatus = x => x.LocationInfo.LocationStatus == Convert.ToInt32(item.Value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (item.Name.Contains("roadwayNo")) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | roadwayNo = x => x.LocationInfo.RoadwayNo.Contains(item.Value); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var data = BaseDal.Db.Queryable<DtStockInfo>().IncludesAllFirstLayer().WhereIF(!wheres.IsNullOrEmpty(), wheres).WhereIF(locationStatus != null, locationStatus).WhereIF(roadwayNo != null, roadwayNo).OrderBy(orderByModels).ToPageList(options.Page, options.Rows, ref totalCount); | 
|---|
|  |  |  | new PageGridData<DtStockInfo>(totalCount, data); | 
|---|
|  |  |  | return new PageGridData<DtStockInfo>(totalCount, data); | 
|---|
|  |  |  | //var data = base.GetPageData(options); | 
|---|
|  |  |  | //foreach (var item in data.Rows) | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    if (item.IsFull) | 
|---|
|  |  |  | //        item.Remark = item.StockInfoDetails.Count().ToString(); | 
|---|
|  |  |  | //    else | 
|---|
|  |  |  | //        item.Remark = "0"; | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | //return data; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 批量删除 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="keys"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public override WebResponseContent DeleteData(object[] keys) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<DtStockInfo_Hty> stockInfos = new List<DtStockInfo_Hty>(); | 
|---|
|  |  |  | List<DtLocationInfo> locationInfos = new List<DtLocationInfo>(); | 
|---|
|  |  |  | foreach (var item in keys) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var stock = BaseDal.QueryFirstNavAsync(x => x.Id == item.ObjToInt()).Result; | 
|---|
|  |  |  | var stockHty = stock.Adapt<DtStockInfo_Hty>(); | 
|---|
|  |  |  | stockInfos.Add(stockHty); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var location = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().FirstAsync(x => x.Id == stock.LocationId).Result; | 
|---|
|  |  |  | location.LocationStatus = (int)LocationEnum.Free; | 
|---|
|  |  |  | locationInfos.Add(location); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var hty = BaseDal.Db.InsertNav(stockInfos) | 
|---|
|  |  |  | .Include(x => x.StockInfoDetails) | 
|---|
|  |  |  | .ExecuteCommand(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var locationd = SqlSugarHelper.DbWMS.Updateable(locationInfos).ExecuteCommandHasChange(); | 
|---|
|  |  |  | return base.DeleteData(keys); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 根据传入库存类型获取不同巷道的库存 | 
|---|
|  |  |  | public async Task<Dictionary<string, int>> GetLocationByStockType(bool stockType, string areaCode) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var stockInfos = await BaseDal.Db.Queryable<DtStockInfo>().Where(x => x.IsFull == stockType && x.AreaCode == areaCode) | 
|---|
|  |  |  | .Includes(x => x.LocationInfo).ToListAsync(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var result = stockInfos | 
|---|
|  |  |  | .GroupBy(x => x.LocationInfo.RoadwayNo) | 
|---|
|  |  |  | .ToDictionary(x => x.Key, x => x.Count()); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|