1
dengjunjie
2025-10-24 dcd315835fc0dd639e209a056c395f3759cf0907
1
已修改1个文件
175 ■■■■■ 文件已修改
新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs
@@ -122,181 +122,6 @@
                        else if (outorder.order_type == "1") // æ­£å¸¸å‡ºåº“单
                        {
                            CreateOutboundOrder(outorder);//创建出库单、处理库存、添加出库任务
                            // æŽ’除特殊药品,特殊药品直接插入
                            if (outorder.warehouse_no != "001" && (outorder.warehouse_no == "010" || outorder.warehouse_no == "003" || outorder.warehouse_no == "017"))
                            {
                                var entityOrder = new Dt_DeliveryOrder
                                {
                                    Out_no = outorder.order_no,
                                    Out_type = outorder.order_type,
                                    Client_no = outorder.client_no,
                                    Client_name = outorder.client_name,
                                    Account_time = outorder.account_time,
                                    Warehouse_no = outorder.warehouse_no,
                                    OutStatus = "新建",
                                    Details = outorder.details.Select(d => new Dt_DeliveryOrderDetail
                                    {
                                        Goods_no = d.goods_no,
                                        Order_qty = Math.Abs(d.order_qty), // å‡ºåº“数量转为正数
                                        Batch_num = d.batch_num,
                                        Exp_date = d.exp_date,
                                        OotDetailStatus = "新建",
                                        Status = 2, // pad平库,无需同步
                                    }).ToList()
                                };
                                _DeliveryOrders.Add(entityOrder);
                            }
                            else  // å¸¸è§„药品001房给立库,要是有整箱就给平库
                            {
                                var entityOrder = new Dt_DeliveryOrder
                                {
                                    Out_no = outorder.order_no,
                                    Out_type = outorder.order_type,
                                    Client_no = outorder.client_no,
                                    Client_name = outorder.client_name,
                                    Account_time = outorder.account_time,
                                    Warehouse_no = outorder.warehouse_no,
                                    OutStatus = "新建",
                                    Details = new List<Dt_DeliveryOrderDetail>()
                                };
                                // éåŽ†å‡ºåº“æ˜Žç»†
                                foreach (var item in outorder.details)
                                {
                                    // å°†ä¸Šæ¸¸å‡ºåº“数量转为正数
                                    decimal orderQty = Math.Abs((decimal)item.order_qty);
                                    #region æ ¹æ®ç‰©æ–™ç¼–码查询物料信息
                                    var medication = BaseDal.Db.Queryable<Dt_MaterielInfo>()
                                        .Where(m => m.MaterielCode == item.goods_no)
                                        .First();
                                    // å¦‚果物料信息不存在,跳过整个出库单
                                    if (medication == null)
                                    {
                                        skipOrder = true;
                                        Console.WriteLine($"跳出处库单 {outorder.order_no},原因:未找到商品 [{item.goods_no}] çš„物料信息。");
                                        break;
                                    }
                                    // è‹¥ç‰©æ–™ä¸å­˜åœ¨æˆ– MaterielSourceType ä¸ºç©ºï¼Œåˆ™è·³è¿‡æ•´ä¸ªå‡ºåº“单
                                    if (medication == null || !Enum.IsDefined(typeof(MaterielSourceTypeEnum), medication.MaterielSourceType))
                                    {
                                        skipOrder = true;
                                        break;
                                    }
                                    #endregion
                                    /// æ ¹æ®ç‰©æ–™ä¿¡æ¯å¤§å°ä»¶å±žæ€§åŒºåˆ†æ˜¯å¦ä»Žç«‹åº“出库 // å¤§ä»¶ä»Žå¹³åº“出库
                                    if (medication.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart) // å¦‚果物料是大件
                                    {
                                        var orderDetail = new Dt_DeliveryOrderDetail()
                                        {
                                            Reservoirarea = outorder.warehouse_no,
                                            Goods_no = item.goods_no,
                                            Order_qty = orderQty,
                                            Batch_num = item.batch_num,
                                            Exp_date = item.exp_date,
                                            OotDetailStatus = "新建",
                                            Status = 2 // å¹³åº“,无需同步
                                        };
                                        entityOrder.Details.Add(orderDetail);
                                    }
                                    else
                                    {
                                        Dt_DeliveryOrderDetail orderDetail = null;
                                        // è®¡ç®—整箱和散件数量
                                        var ys = orderQty % medication.BoxQty; // ä¸èƒ½æ•´é™¤ç®±è§„的散件数
                                        var xs = (int)(orderQty / medication.BoxQty); // æ•´ç®±æ•°é‡ï¼ˆä¿ç•™æ•´æ•°ï¼‰
                                        #region ä»Žç«‹åº“出库散件
                                        #region åˆ¤æ–­æ˜¯å¦æœ‰æ•£ä»¶
                                        if (ys > 0 && medication.Business_qty >= ys)
                                        {
                                            orderDetail = new Dt_DeliveryOrderDetail()
                                            {
                                                Reservoirarea = outorder.warehouse_no,
                                                Goods_no = item.goods_no,
                                                Order_qty = ys,
                                                Batch_num = item.batch_num,
                                                Exp_date = item.exp_date,
                                                OotDetailStatus = "新建",
                                                Status = 0 // ç«‹åº“,需要同步给WCS
                                            };
                                            medication.Business_qty -= ys;
                                        }
                                        #endregion
                                        #region åˆ¤æ–­ç«‹åº“库存是否足够出整箱
                                        while (medication.Business_qty >= medication.BoxQty && xs > 0)
                                        {
                                            xs--;
                                            if (orderDetail == null)
                                            {
                                                orderDetail = new Dt_DeliveryOrderDetail()
                                                {
                                                    Reservoirarea = outorder.warehouse_no,
                                                    Goods_no = item.goods_no,
                                                    Order_qty = medication.BoxQty,
                                                    Batch_num = item.batch_num,
                                                    Exp_date = item.exp_date,
                                                    OotDetailStatus = "新建",
                                                    Status = 0 // ç«‹åº“
                                                };
                                                medication.Business_qty -= medication.BoxQty;
                                            }
                                            else
                                            {
                                                orderDetail.Order_qty += medication.BoxQty;
                                                medication.Business_qty -= medication.BoxQty;
                                            }
                                        }
                                        if (orderDetail != null)
                                            entityOrder.Details.Add(orderDetail);
                                        #endregion
                                        #endregion
                                        #region å‰©ä½™æ•´ä»¶ä»Žå¹³åº“出库
                                        if (xs > 0)
                                        {
                                            orderDetail = new Dt_DeliveryOrderDetail()
                                            {
                                                Reservoirarea = outorder.warehouse_no,
                                                Goods_no = item.goods_no,
                                                Order_qty = medication.BoxQty * xs,
                                                Batch_num = item.batch_num,
                                                Exp_date = item.exp_date,
                                                OotDetailStatus = "新建",
                                                Status = 2 // å¹³åº“
                                            };
                                            entityOrder.Details.Add(orderDetail);
                                        }
                                        #endregion
                                    }
                                    // æ›´æ–°ç‰©æ–™ä¿¡æ¯
                                    _basicService.MaterielInfoService.Repository.UpdateData(medication);
                                }
                                // å¦‚果跳过该单,则直接continue,不保存
                                if (skipOrder)
                                {
                                    Console.WriteLine($"跳出处库单 {outorder.order_no},因为存在未定义物料属性的商品。");
                                    continue;
                                }
                                // ç¡®ä¿å‡ºåº“单有明细才添加
                                if (entityOrder.Details.Any())
                                {
                                    _DeliveryOrders.Add(entityOrder);
                                    orderNos.Add(outorder.order_no);
                                }
                            }
                        }
                    }