using HslCommunication; using MailKit.Search; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_DTO.SquareCabin; using WIDESEA_IWMsInfoServices; using WIDESEA_Model.Models; using static WIDESEA_DTO.SquareCabin.TowcsDto; namespace WIDESEA_WMsInfoServices { public class InventoryInfoService : ServiceBase>, IInventoryInfoService { public InventoryInfoService(IRepository BaseDal) : base(BaseDal) { } public IRepository Repository => BaseDal; public WebResponseContent GetExpiredAndlow() { try { // 获取当前时间(只取日期部分,忽略时间) DateTime currentDate = DateTime.Today; // 计算30天后的日期 DateTime thresholdDate = currentDate.AddDays(30); // 查找库存中所有商品 var inventoryList = BaseDal.QueryData(); var expiredSoonList = new List(); foreach (var item in inventoryList) { // 检查ValidityPeriod是否为空 if (string.IsNullOrEmpty(item.ValidityPeriod)) continue; // 使用精确格式解析 "2037-10-02" if (DateTime.TryParseExact(item.ValidityPeriod.Trim(), "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime expiryDate)) { // 计算剩余天数(只比较日期部分) double daysRemaining = (expiryDate - currentDate).TotalDays; // 检查是否在30天内(包括已过期的) if (daysRemaining <= 30) { expiredSoonList.Add(new { MaterielCode = item.MaterielCode ?? "", BatchNo = item.BatchNo ?? "", ValidityPeriod = item.ValidityPeriod, ExpiryDate = expiryDate.ToString("yyyy-MM-dd"), }); } } else { // 记录解析失败的记录(用于调试) Console.WriteLine($"无法解析效期: {item.ValidityPeriod}"); } } // 按剩余天数升序排列(即将过期的排前面) var sortedList = expiredSoonList.OrderBy(x => { var days = (int)((dynamic)x).DaysRemaining; return days; }).ToList(); return new WebResponseContent { Status = true, Message = $"发现 {sortedList.Count} 个商品将在30天内过期", Data = new { TotalCount = sortedList.Count, ExpiredCount = sortedList.Count(x => ((dynamic)x).DaysRemaining < 0), WarningCount = sortedList.Count(x => ((dynamic)x).DaysRemaining >= 0), CheckDate = currentDate.ToString("yyyy-MM-dd"), Items = sortedList } }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = $"获取效期数据失败: {ex.Message}" }; } } /// /// 获取库存 /// /// public WebResponseContent GetInventory() { WebResponseContent content = new WebResponseContent(); try { List lists = new List(); #region 冷冻库 string WareCodeLD = WarehouseEnum.冷冻库.ObjToInt().ToString("000"); List inventoryInfosLD = BaseDal.QueryData(x => x.WarehouseCode == WareCodeLD); object LDQty = new { name = WarehouseEnum.冷冻库.ObjToString(), count = inventoryInfosLD.Sum(x => x.StockQuantity).ObjToInt() }; lists.Add(LDQty); #endregion #region 麻精库 string WareCodeMJ = WarehouseEnum.麻精库.ObjToInt().ToString("000"); List inventoryInfosMJ = BaseDal.QueryData(x => x.WarehouseCode == WareCodeMJ); object MJQty = new { name = WarehouseEnum.麻精库.ObjToString(), count = inventoryInfosMJ.Sum(x => x.StockQuantity).ObjToInt() }; lists.Add(MJQty); #endregion #region 大件库 string WareCodeDJ = WarehouseEnum.大件库.ObjToInt().ToString("000"); List inventoryInfosDJ = BaseDal.QueryData(x => x.WarehouseCode == WareCodeDJ); object DJQty = new { name = WarehouseEnum.大件库.ObjToString(), count = inventoryInfosDJ.Sum(x => x.StockQuantity).ObjToInt() }; lists.Add(DJQty); #endregion content.OK(data: lists); } catch (Exception ex) { content.Error(ex.Message); } return content; } } }