From 2640679b2823cd68d74e255442cce1634aac773c Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 10 十二月 2025 12:40:03 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/HuaYiZhongHeng/BaiBuLiKu
---
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 164 insertions(+), 13 deletions(-)
diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs
index 5ab2700..5757f64 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/StockInfoService.cs
@@ -1,14 +1,33 @@
-锘�
+锘縰sing AngleSharp.Dom;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
using Mapster;
-using WIDESEA_Core.HttpContextUser;
-using WIDESEA_Core.Seed;
+using Masuit.Tools;
+using SqlSugar;
+using System.Collections;
+using System.Collections.Generic;
+using System.Drawing.Printing;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using WIDESEA_Cache;
+using WIDESEA_Common;
+using WIDESEA_Core;
+using WIDESEA_IStorageBasicService;
+using WIDESEA_Model.Models.BasicModel;
namespace WIDESEA_StorageBasicService;
public class StockInfoService : ServiceBase<DtStockInfo, IStockInfoRepository>, IStockInfoService
{
- public StockInfoService(IStockInfoRepository BaseDal) : base(BaseDal)
+
+ private readonly ISimpleCacheService _simpleCacheService;
+ private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
+ private readonly IStockInfoDetailRepository _IStockInfoDetailRepository;
+ public StockInfoService(IStockInfoRepository BaseDal, ISimpleCacheService simpleCacheService, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository, IStockInfoDetailRepository stockInfoDetailService) : base(BaseDal)
{
+ _simpleCacheService = simpleCacheService;
+ _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository;
+ _IStockInfoDetailRepository = stockInfoDetailService;
}
/// <summary>
@@ -18,15 +37,63 @@
/// <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)
{
- if (item.IsFull)
- item.Remark = item.StockInfoDetails.Count().ToString();
- else
- item.Remark = "0";
+ 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;
+ Expression<Func<DtStockInfo, bool>> materielCode = 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);
+ }
+ else if (item.Name.Contains("materielCode"))
+ {
+ materielCode = x => x.StockInfoDetails.Any(d => d.MaterielCode.Contains(item.Value));
+ }
+ }
+ //.IncludesAllFirstLayer()
+ var data = BaseDal.Db.Queryable<DtStockInfo>()
+ .Includes(x => x.StockInfoDetails)
+ .Includes(x => x.LocationInfo)
+ .WhereIF(!wheres.IsNullOrEmpty(), wheres)
+ .WhereIF(locationStatus != null, locationStatus)
+ .WhereIF(roadwayNo != null, roadwayNo)
+ .WhereIF(materielCode != null, materielCode)
+ .OrderBy(orderByModels)
+ .ToPageList(options.Page, options.Rows, ref totalCount);
+ new PageGridData<DtStockInfo>(totalCount, data);
+ return new PageGridData<DtStockInfo>(totalCount, data);
}
/// <summary>
@@ -38,9 +105,12 @@
{
try
{
-
List<DtStockInfo_Hty> stockInfos = new List<DtStockInfo_Hty>();
List<DtLocationInfo> locationInfos = new List<DtLocationInfo>();
+
+
+ var stocks = new List<string>();
+
foreach (var item in keys)
{
var stock = BaseDal.QueryFirstNavAsync(x => x.Id == item.ObjToInt()).Result;
@@ -48,9 +118,20 @@
stockInfos.Add(stockHty);
var location = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().FirstAsync(x => x.Id == stock.LocationId).Result;
+ var lastStatus = location.LocationStatus;
location.LocationStatus = (int)LocationEnum.Free;
locationInfos.Add(location);
+ stocks.Add(stock.PalletCode);
+ _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.ManualOperation, 0);
}
+
+ //_simpleCacheService.HashDel<DtStockInfo>(CacheConst.Cache_DtStockInfo, stocks.ToArray());
+ //var hty = BaseDal.Db.InsertNav(stockInfos)
+ // .Include(x => x.StockInfoDetails)
+ // .ExecuteCommand();
+
+ //var locationd = SqlSugarHelper.DbWMS.Updateable(locationInfos).ExecuteCommandHasChange();
+ //return base.DeleteData(keys);
var hty = BaseDal.Db.InsertNav(stockInfos)
.Include(x => x.StockInfoDetails)
@@ -66,7 +147,7 @@
}
// 鏍规嵁浼犲叆搴撳瓨绫诲瀷鑾峰彇涓嶅悓宸烽亾鐨勫簱瀛�
- public async Task<Dictionary<string, int>> GetLocationByStockType(bool stockType,string areaCode)
+ 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();
@@ -76,4 +157,74 @@
.ToDictionary(x => x.Key, x => x.Count());
return result;
}
+ public override WebResponseContent Export(PageDataOptions options)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ // 1. 鏋勫缓涓昏〃鏌ヨ鏉′欢鍜屾帓搴�
+ string wheres = ValidatePageOptions(options);
+ Dictionary<string, OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
+
+ // 2. 鏌ヨ涓昏〃鏁版嵁
+ List<DtStockInfo> mainList = BaseDal.QueryData(wheres, orderbyDic);
+ if (!mainList.Any())
+ {
+ return WebResponseContent.Instance.OK("鏃犳暟鎹彲瀵煎嚭");
+ }
+
+ // 3. 鎵归噺鏌ヨ瀛愯〃鏁版嵁锛堥�氳繃涓昏〃Id鍏宠仈锛�
+ var mainIds = mainList.Select(m => m.Id).Distinct().ToList();
+ List<DtStockInfoDetail> detailList = _IStockInfoDetailRepository.Db
+ .Queryable<DtStockInfoDetail>()
+ .Where(d => mainIds.Contains(d.StockId))
+ .ToList();
+
+ // 4. 鍏宠仈涓昏〃鍜屽瓙琛ㄦ暟鎹紙鍙彇瀛愯〃绗竴鏉★級
+ var exportData = new List<PalletWithDetailExportModel>();
+ foreach (var main in mainList)
+ {
+ // 鍙彇褰撳墠涓昏〃鏁版嵁鍏宠仈鐨勫瓙琛ㄧ涓�鏉★紙鍙�氳繃OrderBy鎸囧畾鎺掑簭锛岀‘淇濆彇鍒版兂瑕佺殑绗竴鏉★級
+ var firstDetail = detailList
+ .Where(d => d.StockId == main.Id)
+ .OrderBy(d => d.Id) // 鍙�夛細鎸夊瓙琛↖d鎺掑簭锛岀‘淇濈粨鏋滅ǔ瀹氾紙鍙浛鎹负鍏朵粬瀛楁锛�
+ .FirstOrDefault();
+
+ var exportModel = new PalletWithDetailExportModel
+ {
+ Id = main.Id,
+ PalletCode = main.PalletCode,
+ LocationCode = main.LocationCode,
+ IsFull = main.IsFull,
+ Remark = main.Remark,
+ Creater = main.Creater,
+ CreateDate = main.CreateDate,
+ OutboundTime = (DateTime)main.OutboundTime,
+ // 鏈夊瓙琛ㄦ暟鎹垯鍙栫涓�鏉$殑鐗╂枡缂栫爜锛屾棤鍒欎负绌�
+ MaterielCode = firstDetail?.MaterielCode ?? ""
+ };
+ exportData.Add(exportModel);
+ }
+
+ // 5. 瀵煎嚭鏁版嵁锛堥�昏緫涓嶅彉锛�
+ string savePath = AppDomain.CurrentDomain.BaseDirectory + "ExcelExport";
+ IExporter exporter = new ExcelExporter();
+ byte[] data = exporter.ExportAsByteArray(exportData).Result;
+
+ string fileName = "鎵樼洏鍙婄墿鏂欑紪鐮佹暟鎹�.xlsx";
+ FileHelper.WriteFile(savePath, fileName, data);
+
+ content = WebResponseContent.Instance.OK(data: Path.Combine(savePath, fileName));
+ }
+ catch (Exception ex)
+ {
+ content = WebResponseContent.Instance.Error(ex.Message);
+ }
+ return content;
+ }
+
+ //public override WebResponseContent UpdateData(DtStockInfo entity)
+ //{
+ // return base.UpdateData(entity);
+ //}
}
\ No newline at end of file
--
Gitblit v1.9.3