ke_junjie
2025-06-04 84620534eb627e95811b971a4b552b6a177829bf
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
129
130
131
132
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<WareTaskBak, MasterDbContextLocator> _wmsTaskRep;
        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
        private readonly IRepository<WareContainerVsMaterial, MasterDbContextLocator> _wmsContainerPlaceRep;
        private readonly IRepository<WareTaskSubBak, MasterDbContextLocator> _wareTaskSubBak;
 
 
        public IndexCountService(
             IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
            IRepository<WmsMaterial, MasterDbContextLocator> wmsMaterialRep,
            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
            IRepository<WareTaskBak, MasterDbContextLocator> wmsTaskRep,
            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep,
            IRepository<WareContainerVsMaterial, MasterDbContextLocator> wmsContainerPlaceRep,
            IRepository<WareTaskSubBak, MasterDbContextLocator> wareTaskSubBak
        )
        {
            _wmsContainerRep = wmsContainerRep;
            _wmsMaterialRep = wmsMaterialRep;
            _wmsMaterialContainerRep = wmsMaterialContainerRep;
            _wmsAreaRep = wmsAreaRep;
            _wmsPlaceRep = wmsPlaceRep;
            _wmsTaskRep = wmsTaskRep;
            _wmsMaterialStockRep = wmsMaterialStockRep;
            _wmsContainerPlaceRep = wmsContainerPlaceRep;
            _wareTaskSubBak = wareTaskSubBak;
        }
 
        /// <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();
            var count = await _wareTaskSubBak.Where(p => p.CreatedTime >= DateTime.Now.Date && p.TaskType == (int)Core.Enum.TaskCategoryEnum.移库任务).ToListAsync();
            return new TaskCountOtput()
            {
                chukuNum = taskList.Where(n => n.TaskCategory == (int)Core.Enum.TaskCategoryEnum.出库任务).Count(),
                rukuNum = taskList.Where(n => n.TaskCategory == (int)Core.Enum.TaskCategoryEnum.入库任务).Count(),
                yikuNum = count.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.TaskCategory == (int)Core.Enum.TaskCategoryEnum.出库任务).Count(),
                    rukuNum = areaTaskList.Where(n => n.TaskCategory == (int)Core.Enum.TaskCategoryEnum.入库任务).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
            };
        }
    }
}