heshaofeng
10 天以前 b6a40a2d8fdcffb3accfc7e424c0726a87a59ddf
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs
@@ -244,159 +244,164 @@
        /// <returns></returns>
        public async Task<WebResponseContent> BatchOrderFeedbackToMes(List<string> orderNos, int inout)
        {
            // 1. ã€å†…存锁抢占】
            if (MemoryLockManager.TryAcquireLock(orderNos[0]))
            {
                try
                {
                    if (inout == 1)
                    {
                        foreach (var orderNo in orderNos)
            try
            {             // 1. ã€å†…存锁抢占】
                //if (MemoryLockManager.TryAcquireLock(orderNos[0]))
                //{
                        if (inout == 1)
                        {
                            try
                            foreach (var orderNo in orderNos)
                            {
                                var stockinfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>("info").Where(info => info.StockStatus == 6)
                                                .Where(it => SqlFunc.Subqueryable<Dt_StockInfoDetail>().Where(s => s.StockId == it.Id && s.OrderNo == orderNo).Any())
                                                .ToList();
                                var feeds = _feedbacktomesRepository.Db.Queryable<Dt_FeedbackToMes>().Where(x => x.OrderNo == orderNo && x.ReportStatus == 1).Select(o => o.PalletCode).ToList();
                                var unreports = stockinfos.Where(x => !feeds.Contains(x.PalletCode)).ToList();
                                if (unreports != null && !unreports.Any())
                                try
                                {
                                    return WebResponseContent.Instance.Error("没有需要回传的数据");
                                }
                                foreach (var item in unreports)
                                {
                                    var lists = _stockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.StockId == item.Id).ToList();
                                    if (lists.Any())
                                    var stockinfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>("info").Where(info => info.StockStatus == 6)
                                                    .Where(it => SqlFunc.Subqueryable<Dt_StockInfoDetail>().Where(s => s.StockId == it.Id && s.OrderNo == orderNo).Any())
                                                    .ToList();
                                    var feeds = _feedbacktomesRepository.Db.Queryable<Dt_FeedbackToMes>().Where(x => x.OrderNo == orderNo && x.ReportStatus == 1).Select(o => o.PalletCode).ToList();
                                    var unreports = stockinfos.Where(x => !feeds.Contains(x.PalletCode)).ToList();
                                    if (unreports != null && !unreports.Any())
                                    {
                                        var inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().First(x => x.InboundOrderNo == lists.FirstOrDefault().OrderNo);
                                        if (inboundOrder != null)
                                        return WebResponseContent.Instance.Error("没有需要回传的数据");
                                    }
                                    foreach (var item in unreports)
                                    {
                                        var lists = _stockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.StockId == item.Id).ToList();
                                        if (lists.Any())
                                        {
                                            if (inboundOrder.OrderType == (int)InOrderTypeEnum.AllocatInbound)//调拨入库
                                            var inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().First(x => x.InboundOrderNo == lists.FirstOrDefault().OrderNo);
                                            if (inboundOrder != null)
                                            {
                                                var allocate = SqlSugarHelper.DbWMS.Queryable<Dt_AllocateOrder>().Where(x => x.OrderNo == inboundOrder.InboundOrderNo).First();
                                                var allocatefeedmodel = new AllocateDto
                                                if (inboundOrder.OrderType == (int)InOrderTypeEnum.AllocatInbound)//调拨入库
                                                {
                                                    ReqCode = Guid.NewGuid().ToString(),
                                                    ReqTime = DateTime.Now.ToString(),
                                                    BusinessType = "2",
                                                    FactoryArea = inboundOrder.FactoryArea,
                                                    OperationType = 1,
                                                    Operator = inboundOrder.Operator,
                                                    OrderNo = inboundOrder.UpperOrderNo,
                                                    fromWarehouse = allocate?.FromWarehouse ?? "",
                                                    toWarehouse = allocate?.ToWarehouse ?? "",
                                                    Details = new List<AllocateDtoDetail>()
                                                    var allocate = SqlSugarHelper.DbWMS.Queryable<Dt_AllocateOrder>().Where(x => x.OrderNo == inboundOrder.InboundOrderNo).First();
                                                    var allocatefeedmodel = new AllocateDto
                                                    {
                                                        ReqCode = Guid.NewGuid().ToString(),
                                                        ReqTime = DateTime.Now.ToString(),
                                                        BusinessType = "2",
                                                        FactoryArea = inboundOrder.FactoryArea,
                                                        OperationType = 1,
                                                        Operator = inboundOrder.Operator,
                                                        OrderNo = inboundOrder.UpperOrderNo,
                                                        fromWarehouse = allocate?.FromWarehouse ?? "",
                                                        toWarehouse = allocate?.ToWarehouse ?? "",
                                                        Details = new List<AllocateDtoDetail>()
                                                };
                                                    };
                                                var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
                                                   .Select(group => new AllocateDtoDetail
                                                   {
                                                       MaterialCode = group.Key.MaterielCode,
                                                       LineNo = group.Key.InboundOrderRowNo,
                                                       WarehouseCode = group.Key.WarehouseCode,
                                                       Qty = group.Sum(x => x.BarcodeQty),
                                                       Unit = group.Key.BarcodeUnit,
                                                       Barcodes = group.Select(row => new BarcodeInfo
                                                    var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
                                                       .Select(group => new AllocateDtoDetail
                                                       {
                                                           Barcode = row.Barcode,
                                                           Qty = row.BarcodeQty,
                                                           BatchNo = row.BatchNo,
                                                           SupplyCode = row.SupplyCode,
                                                           Unit = row.BarcodeUnit
                                                       }).ToList()
                                                   }).ToList();
                                                allocatefeedmodel.Details = groupedData;
                                                           MaterialCode = group.Key.MaterielCode,
                                                           LineNo = group.Key.InboundOrderRowNo,
                                                           WarehouseCode = group.Key.WarehouseCode,
                                                           Qty = group.Sum(x => x.BarcodeQty),
                                                           Unit = group.Key.BarcodeUnit,
                                                           Barcodes = group.Select(row => new BarcodeInfo
                                                           {
                                                               Barcode = row.Barcode,
                                                               Qty = row.BarcodeQty,
                                                               BatchNo = row.BatchNo,
                                                               SupplyCode = row.SupplyCode,
                                                               Unit = row.BarcodeUnit
                                                           }).ToList()
                                                       }).ToList();
                                                    allocatefeedmodel.Details = groupedData;
                                                var result = await FeedbackAllocate(allocatefeedmodel);
                                                if (result != null && result.code == 200)
                                                {
                                                    _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
                                                    var result = await FeedbackAllocate(allocatefeedmodel);
                                                    if (result != null && result.code == 200)
                                                    {
                                                        _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                var feedmodel = new FeedbackInboundRequestModel
                                                else
                                                {
                                                    reqCode = Guid.NewGuid().ToString(),
                                                    reqTime = DateTime.Now.ToString(),
                                                    business_type = inboundOrder.BusinessType,
                                                    factoryArea = inboundOrder.FactoryArea,
                                                    operationType = 1,
                                                    Operator = inboundOrder.Operator,
                                                    orderNo = inboundOrder.UpperOrderNo,
                                                    status = inboundOrder.OrderStatus,
                                                    details = new List<FeedbackInboundDetailsModel>()
                                                    var feedmodel = new FeedbackInboundRequestModel
                                                    {
                                                        reqCode = Guid.NewGuid().ToString(),
                                                        reqTime = DateTime.Now.ToString(),
                                                        business_type = inboundOrder.BusinessType,
                                                        factoryArea = inboundOrder.FactoryArea,
                                                        operationType = 1,
                                                        Operator = inboundOrder.Operator,
                                                        orderNo = inboundOrder.UpperOrderNo,
                                                        status = inboundOrder.OrderStatus,
                                                        details = new List<FeedbackInboundDetailsModel>()
                                                };
                                                    };
                                                var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.SupplyCode, item.BatchNo, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
                                                   .Select(group => new FeedbackInboundDetailsModel
                                                   {
                                                       materialCode = group.Key.MaterielCode,
                                                       supplyCode = group.Key.SupplyCode,
                                                       batchNo = group.Key.BatchNo,
                                                       lineNo = group.Key.InboundOrderRowNo,
                                                       qty = group.Sum(x => x.BarcodeQty),
                                                       // warehouseCode = group.Key.WarehouseCode=="0"?"1072": group.Key.WarehouseCode,
                                                       warehouseCode = group.Key.WarehouseCode,
                                                       unit = group.Key.BarcodeUnit,
                                                       barcodes = group.Select(row => new FeedbackBarcodesModel
                                                    var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.SupplyCode, item.BatchNo, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
                                                       .Select(group => new FeedbackInboundDetailsModel
                                                       {
                                                           barcode = row.Barcode,
                                                           qty = row.BarcodeQty
                                                       }).ToList()
                                                   }).ToList();
                                                feedmodel.details = groupedData;
                                                var result = await FeedbackInbound(feedmodel);
                                                if (result != null && result.code == 200)
                                                {
                                                    _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
                                                           materialCode = group.Key.MaterielCode,
                                                           supplyCode = group.Key.SupplyCode,
                                                           batchNo = group.Key.BatchNo,
                                                           lineNo = group.Key.InboundOrderRowNo,
                                                           qty = group.Sum(x => x.BarcodeQty),
                                                           // warehouseCode = group.Key.WarehouseCode=="0"?"1072": group.Key.WarehouseCode,
                                                           warehouseCode = group.Key.WarehouseCode,
                                                           unit = group.Key.BarcodeUnit,
                                                           barcodes = group.Select(row => new FeedbackBarcodesModel
                                                           {
                                                               barcode = row.Barcode,
                                                               qty = row.BarcodeQty
                                                           }).ToList()
                                                       }).ToList();
                                                    feedmodel.details = groupedData;
                                                    var result = await FeedbackInbound(feedmodel);
                                                    if (result != null && result.code == 200)
                                                    {
                                                        _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                _logger.LogInformation("InvokeMESService  BatchOrderFeedbackToMes å›žå†™MES失败:  " + ex.Message);
                                return WebResponseContent.Instance.Error(ex.Message);
                            }
                                catch (Exception ex)
                                {
                                    _logger.LogInformation("InvokeMESService  BatchOrderFeedbackToMes å›žå†™MES失败:  " + ex.Message);
                                    return WebResponseContent.Instance.Error(ex.Message);
                                }
                            }
                        }
                    }
                    else if (inout == 2)
                    {
                        foreach (var orderNo in orderNos)
                        else if (inout == 2)
                        {
                            var outboundOrder = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().FirstAsync(x => x.OrderNo == orderNo);
                            if (outboundOrder != null && outboundOrder.IsBatch == 0)
                            foreach (var orderNo in orderNos)
                            {
                                var result = await HandleOutboundOrderToMESCompletion(outboundOrder, orderNo);
                                return result;
                                var outboundOrder = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().FirstAsync(x => x.OrderNo == orderNo);
                                if (outboundOrder != null && outboundOrder.IsBatch == 0)
                                {
                                    var result = await HandleOutboundOrderToMESCompletion(outboundOrder, orderNo);
                                    return result;
                                }
                                else if (outboundOrder != null && outboundOrder.IsBatch == 1)
                                {
                                    var result = await HandleOutboundOrderBatchToMESCompletion(outboundOrder, orderNo);
                                    return result;
                                }
                            }
                            else if (outboundOrder != null && outboundOrder.IsBatch == 1)
                            {
                                var result = await HandleOutboundOrderBatchToMESCompletion(outboundOrder, orderNo);
                                return result;
                            }
                        }
                //}
                //else
                //{
                //    // æŠ¢é”å¤±è´¥ï¼šè¯´æ˜Žæœ‰å¦ä¸€ä¸ªçº¿ç¨‹ï¼ˆWCS回调或人工操作)正在处理
                    }
                }
                finally
                {
                    // 2. ã€é‡Šæ”¾å†…存锁】无论成功失败,必须释放
                    MemoryLockManager.ReleaseLock(orderNos[0]);
                }
                //    return WebResponseContent.Instance.Error("WMS正在处理此回传任务,请勿重复操作。");
                //}
            }
            else
            catch(Exception ex)
            {
                // æŠ¢é”å¤±è´¥ï¼šè¯´æ˜Žæœ‰å¦ä¸€ä¸ªçº¿ç¨‹ï¼ˆWCS回调或人工操作)正在处理
                return WebResponseContent.Instance.Error("WMS正在处理此回传任务,请勿重复操作。");
                _logger.LogInformation("InvokeMESService  BatchOrderFeedbackToMes :  " +ex.Message);
            }
            finally
            {
                // 2. ã€é‡Šæ”¾å†…存锁】无论成功失败,必须释放
               // MemoryLockManager.ReleaseLock(orderNos[0]);
            }
            return WebResponseContent.Instance.OK();
        }
@@ -409,10 +414,10 @@
            try
            {
                // æ ¡éªŒï¼šå·²å›žä¼ ç›´æŽ¥è¿”回错误
                if (outboundOrder.ReturnToMESStatus == 1)
                {
                    return WebResponseContent.Instance.Error("该单已经回传!");
                }
                //if (outboundOrder.ReturnToMESStatus == 1)
                //{
                //    return WebResponseContent.Instance.Error("该单已经回传!");
                //}
                // æŸ¥è¯¢è®¢å•明细(仅查询未回传成功的)
                var orderDetails = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
@@ -617,7 +622,7 @@
            //  æ›´æ–°è®¢å•状态
            int newStatus = allCompleted ? (int)OutOrderStatusEnum.出库完成 : (int)OutOrderStatusEnum.出库中;
            if (outboundOrder.OrderStatus != newStatus)
            if (allCompleted && outboundOrder.OrderStatus != newStatus)
            {
                int updateCount = await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()