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<Dt_InventoryInfo, IRepository<Dt_InventoryInfo>>, IInventoryInfoService
|
{
|
public InventoryInfoService(IRepository<Dt_InventoryInfo> BaseDal) : base(BaseDal)
|
{
|
}
|
public IRepository<Dt_InventoryInfo> Repository => BaseDal;
|
|
public WebResponseContent GetExpiredAndlow()
|
{
|
try
|
{
|
// 获取当前时间(只取日期部分,忽略时间)
|
DateTime currentDate = DateTime.Today;
|
// 计算30天后的日期
|
DateTime thresholdDate = currentDate.AddDays(30);
|
|
// 查找库存中所有商品
|
var inventoryList = BaseDal.QueryData();
|
var expiredSoonList = new List<object>();
|
|
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}"
|
};
|
}
|
}
|
|
/// <summary>
|
/// 获取库存
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent GetInventory()
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
List<object> lists = new List<object>();
|
#region 冷冻库
|
string WareCodeLD = WarehouseEnum.冷冻库.ObjToInt().ToString("000");
|
List<Dt_InventoryInfo> 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<Dt_InventoryInfo> 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<Dt_InventoryInfo> 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;
|
}
|
|
|
|
}
|
}
|