1
heshaofeng
2026-03-25 37454e625df68d40897112b2e8c2e3cf4d7163e3
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
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Data.Common;
using System.Diagnostics.Eventing.Reader;
using System.Threading.Tasks;
using WIDESEA_Common.AllocateEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Core;
using WIDESEA_Core.Attributes;
using WIDESEA_Core.BaseController;
using WIDESEA_Core.BaseRepository;
using WIDESEA_DTO.Allocate;
using WIDESEA_IAllocateService;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
using WIDESEA_WMSServer.Controllers.Check;
 
 
namespace WIDESEA_WMSServer.Controllers.Allocate
{
 
    /// <summary>
    /// 调拨单
    /// </summary>
    [Route("api/AllocateOrder")]
    [ApiController]
    public class AllocateOrderController : ApiBaseController<IAllocateService, Dt_AllocateOrder>
    {
        private readonly ILogger<AllocateOrderController> _logger;
        private readonly IRepository<Dt_MaterielInfo> _materialInfoRepository;
        public AllocateOrderController(IAllocateService service, ILogger<AllocateOrderController> logger,IRepository<Dt_MaterielInfo> materialInfoRepository) : base(service)
        {
            _logger = logger;
            _materialInfoRepository = materialInfoRepository;
        }
 
        [HttpPost, Route("ReceiveAllocateOrder"), MethodParamsValidate, AllowAnonymous]
        public async Task<WebResponseContent> ReceiveAllocateOrder([FromBody] AllocateDto model)
        {
            _logger.LogInformation("AllocateOrderController ReceiveAllocateOrder:  " + JsonConvert.SerializeObject(model));
            Dt_AllocateOrder allocateOrder = new Dt_AllocateOrder
            {
                OrderNo = model.OrderNo,
                UpperOrderNo = model.OrderNo,
                BusinessType = model.BusinessType,
                FactoryArea = model.FactoryArea,
                IsBatch = model.IsBatch,
                CreateType =(int)OrderCreateTypeEnum.UpperSystemPush,
                FromWarehouse = model.fromWarehouse,
                ToWarehouse = model.toWarehouse,
                Details = new List<Dt_AllocateOrderDetail>()
            };
            Enum.TryParse<BusinessTypeEnum>(allocateOrder.BusinessType, out var businessType);
            //allocateOrder.OrderType = businessType == BusinessTypeEnum.智仓调外部仓库 ? 215 : 115;
            if (businessType == BusinessTypeEnum.智仓调外部仓库)
            {
                allocateOrder.OrderType = 215;
            }
            else if (businessType == BusinessTypeEnum.外部仓库调智仓)
            {
                allocateOrder.OrderType = 115;
            }
            else if (businessType == BusinessTypeEnum.智仓调智仓)
            {
                allocateOrder.OrderType = 117;
            }
 
            foreach (var detailDto in model.Details)
            {
                if (businessType == BusinessTypeEnum.外部仓库调智仓 && (detailDto.Barcodes == null || !detailDto.Barcodes.Any()))
                {
                    return WebResponseContent.Instance.Error($"条码不能为空");
                }
                var materialName = _materialInfoRepository.QueryFirst(x => x.MaterielCode == detailDto.MaterialCode).MaterielName;
                if (detailDto.Barcodes != null && detailDto.Barcodes.Any())
                {
                    foreach (var barcodeDto in detailDto.Barcodes)
                    {
                        Dt_AllocateOrderDetail orderDetail = new Dt_AllocateOrderDetail
                        {
                            WarehouseCode = model.toWarehouse,
                            MaterielCode = detailDto.MaterialCode,
                            MaterielName = materialName,
                            LineNo = detailDto.LineNo,
                            OrderQuantity = barcodeDto.Qty,
                            SupplyCode = barcodeDto.SupplyCode,
                            Unit = detailDto.Unit,
                            Barcode = barcodeDto.Barcode,
                            BatchNo = barcodeDto.BatchNo,
                            BarcodeQty = barcodeDto.Qty,
                            BarcodeUnit = barcodeDto.Unit,
                            ValidDate = barcodeDto.validDate,
                            BoxSN = barcodeDto.BoxSN
                        };
                        if (businessType == BusinessTypeEnum.智仓调外部仓库 || businessType == BusinessTypeEnum.智仓调智仓)
                        {
                            orderDetail.WarehouseCode = model.fromWarehouse;
                        }
                        allocateOrder.Details.Add(orderDetail);
                    }
                }
                else
                {
                    Dt_AllocateOrderDetail orderDetail = new Dt_AllocateOrderDetail
                    {
                        WarehouseCode = model.toWarehouse,
                        MaterielCode = detailDto.MaterialCode,
                        LineNo = detailDto.LineNo,
                        OrderQuantity = detailDto.Qty,
                        Unit = detailDto.Unit,
                        BarcodeUnit =detailDto.Unit,
                        BarcodeQty=detailDto.Qty,
                        MaterielName = materialName
                    };
                    if (businessType == BusinessTypeEnum.智仓调外部仓库 || businessType == BusinessTypeEnum.智仓调智仓)
                    {
                        orderDetail.WarehouseCode = model.fromWarehouse;
                    }
                    allocateOrder.Details.Add(orderDetail);
                }
            }
            var content = await Service.ReceiveAllocateOrder(allocateOrder, model.OperationType);
 
            if (content.Status) return WebResponseContent.Instance.OK(200);
            else return WebResponseContent.Instance.Error(content.Message);
        }
    }
 
}