schangxiang@126.com
2024-06-11 3ac98ce77d7b2b610351ee98f232e316abac9d3b
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
133
134
135
136
137
138
139
140
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
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 = "ProductionPlanInfo", Order = 100)]
    [Route("api/[Controller]")]
    public class ProductionPlanInfoService : IProductionPlanInfoService, IDynamicApiController, ITransient
    {
        private readonly IRepository<ProductionPlanInfo,MasterDbContextLocator> _productionPlanInfoRep;
 
 
        public ProductionPlanInfoService(
            IRepository<ProductionPlanInfo,MasterDbContextLocator> productionPlanInfoRep
        )
        {
            _productionPlanInfoRep = productionPlanInfoRep;
        }
 
        /// <summary>
        /// 分页查询生产计划表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("page")]
        public async Task<PageResult<ProductionPlanInfoOutput>> Page([FromQuery] ProductionPlanInfoSearch input)
        {
            var productionPlanInfos = await _productionPlanInfoRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.PlanType), u => u.PlanType == input.PlanType)
                                     .Where(input.PlanTime != null, u => u.PlanTime == input.PlanTime)
                                     .Where(!string.IsNullOrEmpty(input.TeamType), u => u.TeamType == input.TeamType)
                                     .Where(input.PlanProductionNum != null, u => u.PlanProductionNum == input.PlanProductionNum)
                                     .Where(!string.IsNullOrEmpty(input.Remarks), u => u.Remarks == input.Remarks)
                                     .OrderByDescending(o=>o.PlanTime)
                                     .ProjectToType<ProductionPlanInfoOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return productionPlanInfos;
        }
 
        /// <summary>
        /// 增加生产计划表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("add")]
        public async Task Add(AddProductionPlanInfoInput input)
        {
            if (input==null)
            {
                throw Oops.Oh("传参不允许为空");
            }
            if (input.PlanType.Equals("1"))
            {
                var shiftInfo = await _productionPlanInfoRep.FirstOrDefaultAsync(x => x.PlanType == input.PlanType&&x.PlanTime.Date==input.PlanTime&&x.TeamType.Equals(input.TeamType) && x.IsDeleted == false);
 
                if (shiftInfo != null)
                {
                        throw Oops.Oh($"班次[{input.TeamType}]在[{input.PlanTime}]中已存在");
                }
            }else if (input.PlanType.Equals("2"))
            {
                var shiftInfo = await _productionPlanInfoRep.FirstOrDefaultAsync(x => x.PlanType == input.PlanType && x.PlanTime.Date == input.PlanTime && x.IsDeleted == false);
 
                if (shiftInfo != null)
                {
                    throw Oops.Oh($"[{input.PlanTime}]计划已存在");
                }
 
            }
            else
            {
                throw Oops.Oh("参数计划类型传入不正确!");
            }
 
            var productionPlanInfo = input.Adapt<ProductionPlanInfo>();
            await _productionPlanInfoRep.InsertAsync(productionPlanInfo);
        }
 
        /// <summary>
        /// 删除生产计划表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("delete")]
        public async Task Delete(DeleteProductionPlanInfoInput input)
        {
            var productionPlanInfo = await _productionPlanInfoRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            await _productionPlanInfoRep.DeleteAsync(productionPlanInfo);
        }
 
        /// <summary>
        /// 更新生产计划表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("edit")]
        public async Task Update(UpdateProductionPlanInfoInput input)
        {
            var isExist = await _productionPlanInfoRep.AnyAsync(u => u.Id == input.Id, false);
            if (!isExist) throw Oops.Oh(ErrorCode.D3000);
 
            var productionPlanInfo = input.Adapt<ProductionPlanInfo>();
            await _productionPlanInfoRep.UpdateAsync(productionPlanInfo,ignoreNullValues:true);
        }
 
        /// <summary>
        /// 获取生产计划表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("detail")]
        public async Task<ProductionPlanInfoOutput> Get([FromQuery] QueryeProductionPlanInfoInput input)
        {
            return (await _productionPlanInfoRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<ProductionPlanInfoOutput>();
        }
 
        /// <summary>
        /// 获取生产计划表列表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("list")]
        public async Task<List<ProductionPlanInfoOutput>> List([FromQuery] ProductionPlanInfoInput input)
        {
            return await _productionPlanInfoRep.DetachedEntities.ProjectToType<ProductionPlanInfoOutput>().ToListAsync();
        }    
 
    }
}