1
heshaofeng
2026-01-07 51197dd4ca2a95dc86f11261d255b6cba8b21263
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/BigGreenService/BigGreenService.cs
@@ -1,5 +1,6 @@
using IBigBreenService;
using Microsoft.IdentityModel.Tokens;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using SqlSugar;
using System;
using System.Collections.Generic;
@@ -14,6 +15,7 @@
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.Helper;
using WIDESEA_Model.Models;
using WIDESEA_Model.Models.Basic;
namespace BigGreenService
{
@@ -27,8 +29,9 @@
        private readonly IRepository<Dt_Task_Hty> _taskHtyRepository;
        private readonly IRepository<Dt_Task> _taskRepository;
        private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
        private readonly IRepository<Dt_MaterialExpirationDate> _materialExpirationDateRepository;
        public BigGreenService(IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_OutboundOrder> outBoundOrderRepository, IRepository<Dt_LocationInfo> locationInfoRepository,IRepository<Dt_OutboundOrderDetail> outBoundOrderDetailRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository,IRepository<Dt_Task> taskRepository,IRepository<Dt_Task_Hty> taskHtyRepository, IRepository<Dt_StockInfo> stockInfoRepository)
        public BigGreenService(IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_OutboundOrder> outBoundOrderRepository, IRepository<Dt_LocationInfo> locationInfoRepository, IRepository<Dt_OutboundOrderDetail> outBoundOrderDetailRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IRepository<Dt_Task_Hty> taskHtyRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_MaterialExpirationDate> materialExpirationDateRepository)
        {
            _stockInfoDetailRepository = stockInfoDetailRepository;
            _outBoundOrderRepository = outBoundOrderRepository;
@@ -38,6 +41,7 @@
            _taskRepository = taskRepository;
            _taskHtyRepository = taskHtyRepository;
            _stockInfoRepository = stockInfoRepository;
            _materialExpirationDateRepository = materialExpirationDateRepository;
        }
        public WebResponseContent GetBigGreenData()
        {
@@ -71,6 +75,7 @@
            // 4. èŽ·å–è¿‘7日每日出入库明细(核心修改:调用上面的方法)
            var dailyInOutBoundList = Get7DaysDailyInOutBound();
            var nearExpirationList = GetMaterialsNearExpiration();
            //获取作业统计
            var completeTask = SimpleStatistics();
            //任务
@@ -87,7 +92,8 @@
                OutboundCount = outboundCount,
                InStockPallet = inStockPallet,
                FreeStockPallet = freeStockPallet,
                CompleteTask = completeTask
                CompleteTask = completeTask,
                NearExpirationList = nearExpirationList
            };
            return WebResponseContent.Instance.OK(data: bigGreenData);
        }
@@ -125,8 +131,7 @@
            // 3. æŸ¥è¯¢æ¯æ—¥å…¥åº“明细(按日期分组)
            var dailyInboundList = _inboundOrderDetailRepository.Db
                .Queryable<Dt_InboundOrderDetail>()
                .Where(x => x.CreateDate != null // è¿‡æ»¤ç©ºæ—¥æœŸ
                         && x.CreateDate >= startDate
                .Where(x => x.CreateDate >= startDate
                         && x.CreateDate < endDate.AddDays(1))
                .Select(x => new
                {
@@ -233,6 +238,8 @@
            public int FreeStockPallet { get; set; }
            public List<SimpleStatisticsDTO> CompleteTask { get; set; }
            public NearExpirationDTO NearExpirationList { get; set; }
        }
        /// <summary>
@@ -263,6 +270,84 @@
            public int Count { get; set; }
        }
        public class NearExpirationDTO
        {
            public int DaysToExpiration { get; set; }
            public List<Dt_StockInfoDetail> Details { get; set; }
            public string LocationCode { get; set; }
            public string PalletCode { get; set; }
        }
        ///<summary>
        ///获取近30天要过期的物料
        /// </summary>
        public NearExpirationDTO GetMaterialsNearExpiration()
        {
            // åˆå§‹åŒ–返回DTO
            var resultDTO = new NearExpirationDTO
            {
                Details = new List<Dt_StockInfoDetail>(),
                LocationCode = string.Empty,
                PalletCode = string.Empty,
                DaysToExpiration = 0 // åˆå§‹åŒ–天数
            };
            DateTime currentTime = DateTime.Now;
            DateTime thirtyDaysLater = currentTime.AddDays(30);
            // ç­›é€‰30天内过期的库存明细
            var nearExpirationList = _stockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>()
                .Where(x => (x.ValidDate.Value - x.CreateDate).TotalDays <= 30)
                .ToList();
            // æ— ç¬¦åˆæ¡ä»¶çš„æ˜Žç»†ï¼Œç›´æŽ¥è¿”回
            if (!nearExpirationList.Any())
            {
                return resultDTO;
            }
            var firstStockId = nearExpirationList.First().StockId;
            var stock = _stockInfoRepository.Db.Queryable<Dt_StockInfo>()
                .First(x => x.Id == firstStockId);
            if (stock == null)
            {
                return resultDTO;
            }
            resultDTO.LocationCode = stock.LocationCode;
            resultDTO.PalletCode = stock.PalletCode;
            int minDaysToExpiration = int.MaxValue;
            foreach (var detail in nearExpirationList)
            {
                TimeSpan totalDaysToExpiration = detail.ValidDate.Value - detail.CreateDate;
                double remainingDays = totalDaysToExpiration.TotalDays;
                int daysToExpiration = (int)Math.Ceiling(Math.Max(0, remainingDays));
                if (daysToExpiration < minDaysToExpiration)
                {
                    minDaysToExpiration = daysToExpiration;
                }
                resultDTO.Details.Add(detail);
            }
            resultDTO.DaysToExpiration = minDaysToExpiration;
            return resultDTO;
        }
    }
}