1
yangpeixing
2026-02-04 dccc001554c6c5376482df77f929c0d49b258844
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -743,6 +743,8 @@
                            QtyOfpcs = item.QtyOfpcs,
                            QtyOfxout = item.QtyOfxout,
                            CPStockDetailStatus = (int)StockStatusEmun.组盘暂存,
                            LPNNO = item.LPNNO,
                            OrinalLocation = item.OrinalLocation,
                            Creater = "上游WMS",
                        };
                        stockInfoDetailCP.Add(stockInfoDetailCP1);
@@ -1136,6 +1138,7 @@
        #endregion
        public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
        /// <summary>
        /// 组盘合托
        /// </summary>
@@ -1415,10 +1418,6 @@
                    }
                    if (warehouse.WarehouseCode.Contains("CP"))
                    {
                        if (item.SupplierBatch == null)
                        {
                            return content.Error("供应商批次不可为空");
                        }
                        Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.AsnNo).Includes(x => x.Details).First();
                        if (inboundOrderOld != null)
@@ -1450,6 +1449,8 @@
                                        QtyOfpcs = (float)list.QtyOfpcs,
                                        QtyOfxout = (float)list.QtyOfxout,
                                        CPOrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                                        LPNNO = list.LPNNO,
                                        OrinalLocation = list.OrinalLocation,
                                        Creater = "上游WMS",
                                    };
                                    cPInboundOrderDetail.Add(cPInboundOrderDetail1);
@@ -1492,6 +1493,8 @@
                                    QtyOfpcs = (float)list.QtyOfpcs,
                                    QtyOfxout = (float)list.QtyOfxout,
                                    CPOrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                                    LPNNO = list.LPNNO,
                                    OrinalLocation = list.OrinalLocation,
                                    Creater = "上游WMS",
                                };
                                cPInboundOrderDetail.Add(cPInboundOrderDetail1);
@@ -1514,7 +1517,6 @@
                                OrinalLocation = item.OrinalLocation,
                                CPDetails = cPInboundOrderDetail
                            };
                            Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
                            {
                                OrderNo = model.AsnNo,
@@ -1552,10 +1554,10 @@
                    }
                    else
                    {
                        if (item.SupplierBatch == null)
                        {
                            return content.Error("供应商批次不可为空");
                        }
                        //if (item.SupplierBatch == null)
                        //{
                        //    return content.Error("供应商批次不可为空");
                        //}
                        Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.AsnNo).Includes(x => x.Details).First();
                        if (inboundOrderOld != null)
@@ -1950,119 +1952,119 @@
                _unitOfWorkManage.BeginTran();
                foreach (var item in houseReturnOrder)
                {
                    int randomNum = random.Next(1, 1000);
                    string datePart = DateTime.Now.ToString("yyyyMMdd");
                    Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == item.LPNNo && x.OrderStatus == InOrderStatusEnum.未开始.ObjToInt());
                    if (returnOrder == null)
                    {
                        Dt_ReturnOrder newReturnOrder = new Dt_ReturnOrder
                        int randomNum = random.Next(1, 1000);
                        string datePart = DateTime.Now.ToString("yyyyMMdd");
                        Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == item.LPNNo && x.OrderStatus == InOrderStatusEnum.未开始.ObjToInt());
                        if (returnOrder == null)
                        {
                            OrderType = OrderTypeEnum.反拣回库单.ObjToInt(),
                            MaterielCode = item.MaterielCode,
                            MaterielName = item.MaterielName,
                            Dt_ReturnOrder newReturnOrder = new Dt_ReturnOrder
                            {
                                OrderType = OrderTypeEnum.反拣回库单.ObjToInt(),
                                MaterielCode = item.MaterielCode,
                                MaterielName = item.MaterielName,
                            MaterieSpec = item.MaterieSpec,
                            BatchNo = item.BatchNo,
                            OrderQuantity = item.OrderQuantity,
                                BatchNo = item.BatchNo,
                                OrderQuantity = item.OrderQuantity,
                            Remark = item.Remark,
                            LinId = item.LinId,
                            LPNNo = item.LPNNo,
                                LinId = item.LinId,
                                LPNNo = item.LPNNo,
                            LocationCode = item.LocationCode,
                            WarehouseCode = item.WarehouseCode,
                            System = item.System,
                            OrderStatus = InOrderStatusEnum.未开始.ObjToInt(),
                            Creater = "SMOM",
                            CreateDate = DateTime.Now
                        };
                        _returnOrderRepository.AddData(newReturnOrder);
                        Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.LocationCode == item.LocationCode).First();
                        Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail();
                        Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder();
                        if (stockInfo == null)
                        {
                            Dt_Warehouse warehouse = _warehouseService.Repository.QueryData(x => x.WarehouseCode == item.WarehouseCode).FirstOrDefault();
                            if (warehouse == null)
                            {
                                return WebResponseContent.Instance.Error($"该仓库编号{item.WarehouseCode}未配置");
                            }
                            Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail
                            {
                                MaterielCode = item.MaterielCode,
                                MaterielName = item.MaterielName,
                                MaterieSpec = item.MaterieSpec,
                                BatchNo = item.BatchNo,
                                LinId = item.LinId,
                                Status = StockStatusEmun.组盘暂存.ObjToInt(),
                                OrderStatus = InOrderStatusEnum.未开始.ObjToInt(),
                                Creater = "SMOM",
                                CreateDate = DateTime.Now,
                                OrderNo = newReturnOrder.OrderNo,
                                StockQuantity = item.OrderQuantity,
                                CreateDate = DateTime.Now
                            };
                            Dt_StockInfo stockInfo1 = new Dt_StockInfo
                            {
                                PalletCode = item.LPNNo,
                                WarehouseId = warehouse.WarehouseId,
                                BatchNo = item.BatchNo,
                                PalletType = GetPalletType(warehouse, item.LPNNo),
                                IsFull = true,
                                StockStatus = (int)StockStatusEmun.反拣入库,
                                Creater = "WMS",
                                CreateDate = DateTime.Now,
                                MaterialType = (int)InventoryMaterialType.原材料,
                                Materialweight = 0,
                                Wlstatus = (int)InventoryMaterialStatus.合格,
                                Mgeneratetime = DateTime.Now,
                                Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
                            };
                            Db.InsertNav(stockInfo1).Include(x => x.Details).ExecuteCommand();
                            _returnOrderRepository.AddData(newReturnOrder);
                        Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.LocationCode == item.LocationCode).First();
                                Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail();
                                Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder();
                                if (stockInfo == null)
                                {
                            Dt_Warehouse warehouse = _warehouseService.Repository.QueryData(x => x.WarehouseCode == item.WarehouseCode).FirstOrDefault();
                                    if (warehouse == null)
                                    {
                                return WebResponseContent.Instance.Error($"该仓库编号{item.WarehouseCode}未配置");
                                    }
                                    Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail
                                    {
                                        MaterielCode = item.MaterielCode,
                                        MaterielName = item.MaterielName,
                                MaterieSpec = item.MaterieSpec,
                                        BatchNo = item.BatchNo,
                                        LinId = item.LinId,
                                        Status = StockStatusEmun.组盘暂存.ObjToInt(),
                                        Creater = "SMOM",
                                        CreateDate = DateTime.Now,
                                        OrderNo = newReturnOrder.OrderNo,
                                        StockQuantity = item.OrderQuantity,
                                    };
                                    Dt_StockInfo stockInfo1 = new Dt_StockInfo
                                    {
                                        PalletCode = item.LPNNo,
                                        WarehouseId = warehouse.WarehouseId,
                                        BatchNo = item.BatchNo,
                                        PalletType = GetPalletType(warehouse, item.LPNNo),
                                        IsFull = true,
                                        StockStatus = (int)StockStatusEmun.反拣入库,
                                        Creater = "WMS",
                                        CreateDate = DateTime.Now,
                                        MaterialType = (int)InventoryMaterialType.原材料,
                                        Materialweight = 0,
                                        Wlstatus = (int)InventoryMaterialStatus.合格,
                                        Mgeneratetime = DateTime.Now,
                                        Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
                                    };
                                    Db.InsertNav(stockInfo1).Include(x => x.Details).ExecuteCommand();
                                }
                                else
                                {
                                    outboundOrderDetail = new Dt_OutboundOrderDetail
                                    {
                                        MaterielCode = item.MaterielCode,
                                        MaterielName = item.MaterielName,
                                MaterieSpec = item.MaterieSpec,
                                        BatchNo = item.BatchNo,
                                        OrderQuantity = stockInfo.Details.Sum(x => x.StockQuantity),
                                Remark = item.Remark,
                                        LinId = item.LinId,
                                        LPNNo = item.LPNNo,
                                        Creater = "SMOM",
                                        CreateDate = DateTime.Now,
                                LocationName = item.LocationCode
                                    };
                                    outboundOrder = new Dt_OutboundOrder
                                    {
                                        OrderNo = "FJCK" + $"{datePart}{randomNum}",
                                        UpperOrderNo = "WMSFJCK" + $"{datePart}{randomNum}",
                                        OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                                        OrderType = OrderTypeEnum.反拣出库单.ObjToInt(),
                                        InoutType = InoutTypeEnum.OtherOut.ToString(),
                                System = item.System,
                                        Creater = "SMOM",
                                        CreateDate = DateTime.Now,
                                        CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                                        Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail }
                                    };
                                    Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand();
                                }
                        }
                        else
                        {
                            outboundOrderDetail = new Dt_OutboundOrderDetail
                            {
                                MaterielCode = item.MaterielCode,
                                MaterielName = item.MaterielName,
                                MaterieSpec = item.MaterieSpec,
                                BatchNo = item.BatchNo,
                                OrderQuantity = stockInfo.Details.Sum(x => x.StockQuantity),
                                Remark = item.Remark,
                                LinId = item.LinId,
                                LPNNo = item.LPNNo,
                                Creater = "SMOM",
                                CreateDate = DateTime.Now,
                                LocationName = item.LocationCode
                            };
                            outboundOrder = new Dt_OutboundOrder
                            {
                                OrderNo = "FJCK" + $"{datePart}{randomNum}",
                                UpperOrderNo = "WMSFJCK" + $"{datePart}{randomNum}",
                                OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                                OrderType = OrderTypeEnum.反拣出库单.ObjToInt(),
                                InoutType = InoutTypeEnum.OtherOut.ToString(),
                                System = item.System,
                                Creater = "SMOM",
                                CreateDate = DateTime.Now,
                                CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                                Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail }
                            };
                            Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand();
                        }
                    }
                    else
                    {
                        Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.StockStatus == StockStatusEmun.余料退库.ObjToInt()).First();
                        stockInfo.StockStatus = StockStatusEmun.反拣入库.ObjToInt();
                        returnOrder.LinId = item.LinId;
                            Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.StockStatus == StockStatusEmun.余料退库.ObjToInt()).First();
                            stockInfo.StockStatus = StockStatusEmun.反拣入库.ObjToInt();
                            returnOrder.LinId = item.LinId;
                        returnOrder.System = item.System;
                        returnOrder.WarehouseCode = item.WarehouseCode;
                        returnOrder.LocationCode = item.LocationCode;
                        returnOrder.OrderType = OrderTypeEnum.反拣回库单.ObjToInt();
                        returnOrder.OrderQuantity += item.OrderQuantity;
                        returnOrder.ReceiptQuantity += item.OrderQuantity;
                        _returnOrderRepository.UpdateData(returnOrder);
                        _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                            returnOrder.OrderType = OrderTypeEnum.反拣回库单.ObjToInt();
                            returnOrder.OrderQuantity += item.OrderQuantity;
                            returnOrder.ReceiptQuantity += item.OrderQuantity;
                            _returnOrderRepository.UpdateData(returnOrder);
                            _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    }
                        }
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();