schangxiang@126.com
2024-04-23 f47411fb53aeee0c7bd514cbc841f9030349f448
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Admin.NET.Core;
using Yitter.IdGenerator;
 
namespace Admin.NET.Application
{
    /// <summary>
    /// Pda组盘出库
    /// </summary>
    [ApiDescriptionSettings("Pda服务", Name = "GroupDiskOutWarehouse", Order = 100)]
    [Route("api/[Controller]")]
    public class GroupDiskOutWarehouseService : IDynamicApiController, ITransient
    {
 
        private readonly IRepository<WmsOrderDetails, MasterDbContextLocator> _wmsOrderDetailsRep;
        private readonly IRepository<LesPackWarehouse, MasterDbContextLocator> _lesPackWarehouseRep;
        private readonly IRepository<WmsTask, MasterDbContextLocator> _wmsTaskRep;
        private readonly IRepository<WmsPlace, MasterDbContextLocator> _wmsPlaceRep;
        private readonly IRepository<WmsArea, MasterDbContextLocator> _wmsAreaRep;
        private readonly IRepository<WmsOrderType, MasterDbContextLocator> _wmsOrderTypeRep;
        private readonly IRepository<WmsMaterialContainer, MasterDbContextLocator> _wmsMaterialContainerRep;
        private readonly IRepository<WmsContainer, MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<WmsContainerPlace, MasterDbContextLocator> _wmsContainerPlaceRep;
        private readonly IRepository<WmsMaterialStock, MasterDbContextLocator> _wmsMaterialStockRep;
 
        /// <summary>
        /// 构造函数
        /// </summary>
        public GroupDiskOutWarehouseService(
            IRepository<WmsOrderDetails, MasterDbContextLocator> wmsOrderDetailsRep,
            IRepository<LesPackWarehouse, MasterDbContextLocator> lesPackWarehouseRep,
            IRepository<WmsTask, MasterDbContextLocator> wmsTaskRep,
            IRepository<WmsPlace, MasterDbContextLocator> wmsPlaceRep,
            IRepository<WmsArea, MasterDbContextLocator> wmsAreaRep,
            IRepository<WmsOrderType, MasterDbContextLocator> wmsOrderTypeRep,
            IRepository<WmsMaterialContainer, MasterDbContextLocator> wmsMaterialContainerRep,
            IRepository<WmsContainer, MasterDbContextLocator> wmsContainerRep,
            IRepository<WmsContainerPlace, MasterDbContextLocator> wmsContainerPlaceRep,
            IRepository<WmsMaterialStock, MasterDbContextLocator> wmsMaterialStockRep
        )
        {
            _wmsOrderDetailsRep = wmsOrderDetailsRep;
            _lesPackWarehouseRep = lesPackWarehouseRep;
            _wmsTaskRep = wmsTaskRep;
            _wmsPlaceRep = wmsPlaceRep;
            _wmsAreaRep = wmsAreaRep;
            _wmsOrderTypeRep = wmsOrderTypeRep;
            _wmsMaterialContainerRep = wmsMaterialContainerRep;
            _wmsContainerRep = wmsContainerRep;
            _wmsContainerPlaceRep = wmsContainerPlaceRep;
            _wmsMaterialStockRep = wmsMaterialStockRep;
        }
 
        
        ///// <summary>
        ///// 根据出库口获取码垛数据
        ///// </summary>
        ///// <param name="input"></param>
        ///// <returns></returns>
        //[HttpGet("GetPackInfomation")]
        //public async Task<GroupDiskOutWarehouseOutput> GetPackInfomation([FromQuery] GetPackInfomationInput input)
        //{
        //    //根据出库口获取打包表数据
        //    var lesPackWarehouseList = await _lesPackWarehouseRep.DetachedEntities
        //        .Where(u => u.OutputEntrance == input.OutputEntrance && u.LesPackState == LesPackState.WEICHUKU)
        //        .ToListAsync();
        //    if (lesPackWarehouseList.Count==0) throw Oops.Oh("暂无码垛信息!");
 
        //    //if(lesPackWarehouseList.Select(p=>p.OrderNo).Count()>=2) throw Oops.Oh("码垛信息存在多条!请到PC端进行处理!");
 
        //    //获取当前出库单据中执行中单据明细
        //    var wmsOrderDetailList = await _wmsOrderDetailsRep
        //        .Where(u=>u.WareOrder.OrderLargeCategory== 408734100951109 && u.WareOrder.ExitPort==input.OutputEntrance
        //        && lesPackWarehouseList.Select(n=>n.MaterialNo).ToList().Contains(u.MaterialNo)).ProjectToType<WmsOrderDetails>().ToListAsync();
        //    if (wmsOrderDetailList.Count == 0) throw Oops.Oh("暂无出库单据!");
 
        //    List<GroupDiskOutWarehouse> groupDiskOutWarehouseList = new List<GroupDiskOutWarehouse>();//打包信息list
        //    foreach (var item in wmsOrderDetailList)
        //    {
        //        GroupDiskOutWarehouse groupDiskOutWarehouse = new GroupDiskOutWarehouse();
        //        groupDiskOutWarehouse.MaterialNo = item.MaterialNo;
        //        groupDiskOutWarehouse.Long = item.Long;
        //        groupDiskOutWarehouse.Wide = item.Wide;
        //        groupDiskOutWarehouse.High = item.High;
        //        groupDiskOutWarehouseList.Add(groupDiskOutWarehouse);
        //    }
 
        //    return new GroupDiskOutWarehouseOutput()
        //    {
        //        OrderNo = wmsOrderDetailList.FirstOrDefault().WareOrder.OrderNo,
        //        OrderSubclass = (await _wmsOrderTypeRep.FirstOrDefaultAsync(u => u.Id == wmsOrderDetailList.FirstOrDefault().WareOrder.OrderSubclass)).Name,
        //        GroupDiskOutWarehouseList = groupDiskOutWarehouseList
        //    };
        //}
 
        ///// <summary>
        ///// 确认出库
        ///// </summary>
        ///// <param name="input"></param>
        ///// <returns></returns>
        //[HttpPost("Pack")]
        //[UnitOfWork]
        //public async Task PackOutWarehouse([FromBody] PackOutWarehouseInput input)
        //{
        //    if (input.PackCode == null) throw Oops.Oh("打包标签不能为空!");
        //    if (input.MaterialNoList.Count == 0) throw Oops.Oh("物料码不能为空!");
        //    //循环物料码
        //    foreach (var item in input.MaterialNoList)
        //    {
        //        //更改打包表中物料状态
        //        var lesPackWarehouse = await _lesPackWarehouseRep.FirstOrDefaultAsync(u => u.MaterialNo == item.MaterialNo && u.LesPackState == LesPackState.WEICHUKU);
        //        if (lesPackWarehouse == null) throw Oops.Oh("打包表中不存在此物料!");
        //        lesPackWarehouse.PackCode = input.PackCode;
        //        lesPackWarehouse.LesPackState = LesPackState.ZHUANYIKU;
        //        await _lesPackWarehouseRep.UpdateAsync(lesPackWarehouse);
 
        //        //更改单据明细的状态
        //        var wmsOrderDetail = await _wmsOrderDetailsRep.FirstOrDefaultAsync
        //            (u => u.MaterialNo == item.MaterialNo && u.WareOrder.OrderLargeCategory == 408734100951109);         
        //        if (wmsOrderDetail == null) throw Oops.Oh("单据明细中不存在此物料!");
        //        wmsOrderDetail.OrderStatus = OrderDetailsStatusEnum.WANCHENG;
        //        await _lesPackWarehouseRep.UpdateAsync(lesPackWarehouse);
 
        //        //更改任务状态
        //        var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync
        //            (u => u.OrderDetailsId == wmsOrderDetail.Id && u.TaskStatus == TaskStatusEnum.ZHIXINGZHONG 
        //            && u.TaskType == TaskType.CHUKU);
        //        if (wmsTask == null) throw Oops.Oh("任务不存在!");
        //        wmsTask.TaskStatus = TaskStatusEnum.WANCHENG;
        //        await _wmsTaskRep.UpdateAsync(wmsTask);
        //    }
            
        //    //标签码当托盘码使用
        //    var oldwmsMaterialContainerList = await _wmsMaterialContainerRep
        //        .Where(p => p.ContainerCode == input.PackCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
        //    if (oldwmsMaterialContainerList.Count > 0)
        //    {
        //        foreach (var item in oldwmsMaterialContainerList)
        //        {
        //            await _wmsMaterialContainerRep.DeleteAsync(item);
        //        }
        //    }
        //    //组盘单据 默认空托单据
        //    var orderNo = "N/A";
        //    if (input.MaterialNoList.Count > 0) orderNo =YitIdHelper.NextId().ToString();
 
        //    //新增组盘数据
        //    foreach (var item in input.MaterialNoList)
        //    {
        //        //获取明细
        //        var wmsOrderDetail = await _wmsOrderDetailsRep.FirstOrDefaultAsync
        //            (u => u.MaterialNo == item.MaterialNo && u.WareOrder.OrderLargeCategory == 408734100951109);
        //        if (wmsOrderDetail == null) throw Oops.Oh("单据信息异常!"+item.MaterialNo);
        //        WmsMaterialContainer bindentranceModel = new WmsMaterialContainer();
        //        bindentranceModel.ContainerCode = input.PackCode;
        //        bindentranceModel.ContainerId = 405636578041925;
        //        bindentranceModel.MaterialNo = item.MaterialNo;
        //        bindentranceModel.MaterialBatch = wmsOrderDetail.Batch;
        //        bindentranceModel.MaterialSpec = wmsOrderDetail.Long.ToString() + "*" + wmsOrderDetail.Wide.ToString() + "*" + wmsOrderDetail.High.ToString();
        //        bindentranceModel.BindQuantity = 1;
        //        bindentranceModel.OrderDetailsId = wmsOrderDetail.Id;
        //        bindentranceModel.MaterialDensity = wmsOrderDetail.MaterialDensity;
        //        bindentranceModel.BindStatus = CommonStatus.ENABLE;
        //        bindentranceModel.OrderNo = orderNo;
        //        bindentranceModel.MaterialName = "N/A";
        //        await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
        //    }
        //    //获取转移库库位
        //    var zyPlaceModel = await _wmsPlaceRep.DetachedEntities.Where(p => p.WmsArea.AreaType == AreaType.ZHUANYIKU
        //    && p.Islock == YesOrNot.N && p.PlaceStatus == PlaceStatus.KONGXIAN).FirstOrDefaultAsync();
 
        //    //创建任务  目前人工转移无需创建任务
        //    //创建托盘库位关系表
        //    var wmsContainerPlaceModel = new WmsContainerPlace()
        //    {
        //        PlaceId = zyPlaceModel.Id,
        //        PlaceCode = zyPlaceModel.PlaceCode,
        //        ContainerId = 405636578041925,   //给予一个特定的值
        //        ContainerCode = input.PackCode,
        //        ContainerPlaceStatus = CommonStatus.ENABLE
        //    };
        //    await _wmsContainerPlaceRep.InsertAsync(wmsContainerPlaceModel);
 
        //    //更新库存
        //    var wmsMaterialContainerList = await _wmsMaterialContainerRep.DetachedEntities
        //        .Where(p => p.OrderNo == orderNo && p.BindStatus == CommonStatus.ENABLE).ProjectToType<WmsMaterialContainer>().ToListAsync();
 
        //    //物料入库
        //    foreach (var item in wmsMaterialContainerList)
        //    {
        //        var StockModel = await _wmsMaterialStockRep
        //            .Where(p => p.ContainerCode == input.PackCode
        //            && p.MaterialName == item.MaterialName && p.MaterialNo == item.MaterialNo && p.MaterialBatch == item.MaterialBatch ).FirstOrDefaultAsync();
        //        if (StockModel != null)
        //        {
        //            StockModel.MaterialDensity = item.MaterialDensity;
        //            StockModel.PlaceCode = zyPlaceModel.PlaceCode;
        //            StockModel.AreaId = zyPlaceModel.AreaId;
        //            StockModel.StockNumber = item.BindQuantity;
        //            await _wmsMaterialStockRep.UpdateAsync(StockModel);
        //        }
        //        else
        //        {
        //            StockModel = new WmsMaterialStock()
        //            {
        //                MaterialNo = item.MaterialNo,
        //                //MaterialType = item.MaterialType,
        //                MaterialName = item.MaterialName,
        //                MaterialSpec = item.MaterialSpec,
        //                MaterialBatch = item.MaterialBatch,
        //                MaterialDensity = item.MaterialDensity,
        //                //InspectionMethod = item.WmsMaterial.InspectionMethod,
        //                //UnitType = item.WmsMaterial.UnitType,
        //                //UnitNo = item.WmsMaterial.UnitNo,
        //                StockNumber = item.BindQuantity,
        //                PlaceCode = zyPlaceModel.PlaceCode,
        //                ContainerCode = input.PackCode,
        //                AreaId = zyPlaceModel.AreaId,
        //            };
        //            await _wmsMaterialStockRep.InsertAsync(StockModel);
        //        }
        //    }
 
        //    //更新库位
        //    zyPlaceModel.PlaceStatus = PlaceStatus.CUNHUO;
        //    await _wmsPlaceRep.UpdateAsync(zyPlaceModel);
        //}
    }
}