liuying
2025-09-24 16edbbe772e24eb71f6519558576d513e3cf2746
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using iWare.Wms.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
 
namespace iWare.Wms.Application
{
    /// <summary>
    /// 首页
    /// </summary>
    [ApiDescriptionSettings("首页", Name = "LocationView", Order = 100)]
    [Route("api/[Controller]")]
    public class IndexCountService : IIndexCountService, IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<WmsMaterial, MasterDbContextLocator> _wmsMaterialRep;
        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
 
 
        public IndexCountService(
             IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
            IRepository<WmsMaterial, MasterDbContextLocator> wmsMaterialRep,
            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep
        )
        {
            _wmsContainerRep = wmsContainerRep;
            _wmsMaterialRep = wmsMaterialRep;
            _wmsMaterialContainerRep = wmsMaterialContainerRep;
            _wmsAreaRep = wmsAreaRep;
            _wmsPlaceRep = wmsPlaceRep;
            _wmsTaskRep = wmsTaskRep;
            _wmsMaterialStockRep = wmsMaterialStockRep;
            _wmsContainerPlaceRep = wmsContainerPlaceRep;
        }
 
        /// <summary>
        /// 获取当日任务执行信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("GetTaskCount")]
        public async Task<TaskCountOtput> GetTaskCount()
        {
            var taskList = await _wmsTaskRep.Where(p => p.CreatedTime >= DateTime.Now.Date).ToListAsync();
            return new TaskCountOtput()
            {
                chukuNum = taskList.Where(n => n.TaskType == Core.Enum.TaskType.CHUKU).Count(),
                rukuNum = taskList.Where(n => n.TaskType == Core.Enum.TaskType.RUKU).Count(),
                yikuNum = taskList.Where(n => n.TaskType == Core.Enum.TaskType.YIKU).Count(),
            };
        }
 
        /// <summary>
        /// 获取任务执行明细
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        //[HttpGet("GetTaskDetail")]
        public async Task<List<TaskDetailOtput>> GetTaskDetail([FromQuery] TaskDetailInput input)
        {
            //近七天
            int days = 0;
            if (input.LookType == 1) days = -7;
            else if (input.LookType == 2) days = -30;
            else days = -90;
            var taskList = await _wmsTaskRep.Where(p => p.CreatedTime >= DateTime.Now.Date.AddDays(days)).OrderByDescending(n => n.CreatedTime).ToListAsync();
 
            var TaskDetailOtputList = new List<TaskDetailOtput>();
 
            for (int i = 0; i >= days; i--)
            {
                var starttime = DateTime.Now.Date.AddDays(i);
                var endtime = DateTime.Now.Date.AddDays(i + 1);
                var areaTaskList = taskList.Where(p => p.CreatedTime >= starttime && p.CreatedTime <= endtime).ToList();
                var model = new TaskDetailOtput()
                {
                    chukuNum = areaTaskList.Where(n => n.TaskType == Core.Enum.TaskType.CHUKU).Count(),
                    rukuNum = areaTaskList.Where(n => n.TaskType == Core.Enum.TaskType.RUKU).Count(),
                    dateStr = starttime.ToString("MM/dd")
                };
                TaskDetailOtputList.Add(model);
            }
            return TaskDetailOtputList;
        }
 
 
        /// <summary>
        /// 库位信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("GetPalceDetail")]
        public async Task<PalceDetailOtput> GetPalceDetailOtput()
        {
            var palceList = await _wmsPlaceRep.Where(p => p.IsDeleted == false).ToListAsync();
 
            var countNum = palceList.Count;
            var cunhuoNum = palceList.Where(n => n.PlaceStatus == Core.Enum.PlaceStatus.CUNHUO && n.EmptyContainer == YesOrNot.N).Count();
            var emptyNum = palceList.Where(n => n.PlaceStatus == Core.Enum.PlaceStatus.KONGXIAN).Count();
            var emptyContainerNum = palceList.Where(p => p.EmptyContainer == YesOrNot.Y && p.PlaceStatus == Core.Enum.PlaceStatus.CUNHUO).Count();
            //var cunhuoBFB = Convert.ToDecimal(((countNum - emptyNum- emptyContainerNum) / countNum) * 100);
           // var emptyContainerBFB = Convert.ToDecimal(((countNum - cunhuoNum- emptyNum) / countNum) * 100);
            //var emptyBFB = Convert.ToDecimal(((countNum - cunhuoNum- emptyContainerNum) / countNum) * 100);
            return new PalceDetailOtput()
            {
                countNum= countNum,
                cunhuoNum= cunhuoNum,
                emptyNum= emptyNum,
                emptyContainerNum= emptyContainerNum
            };
        }
    }
}