yanjinhui
2025-10-15 a2ac226eba37410a5f668c866fd45ce43c756394
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs
@@ -7,11 +7,12 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_IBasicService;
using WIDESEA_ISquareCabinServices;
using WIDESEA_Model.Models;
@@ -24,11 +25,15 @@
{
    public class CabinOrderServices : ServiceBase<Dt_CabinOrder, IRepository<Dt_CabinOrder>>, ICabinOrderServices
    {
        static string SearchDate = "";
        public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal) : base(BaseDal)
        static string SearchDate = "";
        private readonly IBasicService _basicService;
        private readonly IMedicineGoodsServices _medicineGoodsServices;
        public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal, IBasicService basicService, IMedicineGoodsServices medicineGoodsServices) : base(BaseDal)
        {
            _basicService = basicService;
            _medicineGoodsServices = medicineGoodsServices;
        }
        /// <summary>
@@ -195,28 +200,125 @@
                            Supplier_no = order.supplier_no,
                            Account_tiem = order.account_time,
                            OdrderStatus = "新建",
                            Supplier_name=order.supplier_name,
                            Supplier_name = order.supplier_name,
                            Warehouse_no = order.warehouse_no,
                            Details = order.details.Select(d => new Dt_CabinOrderDetail
                            {
                                //OrderId è¦æ‹¿åˆ°å…¥åº“单表中的id,如何拿不到就将这个字段改了,改成入库单号
                                // SqlSugar InsertNav工作原理先插入主表 (Dt_CabinOrder)//获取生成的主键ID//自动设置子表的关联字段 (OrderId)//再插入(Dt_CabinOrderDetail)
                                Goods_no = d.goods_no,
                                Order_qty = d.order_qty,
                                Batch_num = d.batch_num,
                                Exp_date = d.exp_date,
                                OrderDetailStatus="新建",
                                Status = order.warehouse_no== "001" ? 0 : 2, //如果是001房那么就是未同步状态,如果不是001房那么就是无需同步状态
                            }).ToList()
                            Details = new List<Dt_CabinOrderDetail>()
                            //Details = order.details.Select(d => new Dt_CabinOrderDetail
                            //{
                            //    //OrderId è¦æ‹¿åˆ°å…¥åº“单表中的id,如何拿不到就将这个字段改了,改成入库单号
                            //    // SqlSugar InsertNav工作原理先插入主表 (Dt_CabinOrder)//获取生成的主键ID//自动设置子表的关联字段 (OrderId)//再插入(Dt_CabinOrderDetail)
                            //    Goods_no = d.goods_no,
                            //    Order_qty = d.order_qty,
                            //    Batch_num = d.batch_num,
                            //    Exp_date = d.exp_date,
                            //    OrderDetailStatus = "新建",
                            //    Status = order.warehouse_no == "001" ? 0 : 2, //如果是001房那么就是未同步状态,如果不是001房那么就是无需同步状态
                            //}).ToList()
                        };
                        foreach (var item in order.details)
                        {
                            // å°†ä¸Šæ¸¸å…¥åº“数量转为正数
                            item.order_qty = Math.Abs(item.order_qty);
                            #region æ ¹æ®ç‰©æ–™ç¼–码查询物料信息
                            //Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == item.goods_no);
                            Dt_MedicineGoods materielInfo = BaseDal.Db.Queryable<Dt_MedicineGoods>().Where(x => x.Goods_no == item.goods_no).First();
                            ///根据物料信息大小件属性区分是否入立库 //大件入平库
                            if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)
                            {
                                Dt_CabinOrderDetail orderDetail = new Dt_CabinOrderDetail()
                                {
                                    Reservoirarea= order.warehouse_no,
                                    Goods_no = item.goods_no,
                                    Order_qty = item.order_qty,
                                    Batch_num = item.batch_num,
                                    Exp_date = item.exp_date,
                                    OrderDetailStatus = "新建",
                                    Status = 2
                                };
                                entityOrder.Details.Add(orderDetail);
                            }
                            else
                            {
                                Dt_CabinOrderDetail orderDetail = null;
                                var ys = item.order_qty % materielInfo.BoxQty; //不能整除箱规的散件数
                                var xs = item.order_qty / materielInfo.BoxQty;//整箱数量
                                #region ç”Ÿæˆç«‹åº“入库单
                                #region åˆ¤æ–­æ˜¯å¦æœ‰æ•£ä»¶
                                if (ys > 0)
                                {
                                    orderDetail = new Dt_CabinOrderDetail()
                                    {
                                        Reservoirarea = order.warehouse_no,
                                        Goods_no = item.goods_no,
                                        Order_qty = ys,
                                        Batch_num = item.batch_num,
                                        Exp_date = item.exp_date,
                                        OrderDetailStatus = "新建",
                                        Status = 0
                                    };
                                    materielInfo.Business_qty += ys;
                                }
                                #endregion
                                #region åˆ¤æ–­ç«‹åº“库存是否大于立库最低库存数
                                while (materielInfo.Business_qty < materielInfo.MinQty && xs > 0)
                                {
                                    xs--;
                                    if (orderDetail == null)
                                    {
                                        orderDetail = new Dt_CabinOrderDetail()
                                        {
                                            Reservoirarea = order.warehouse_no,
                                            Goods_no = item.goods_no,
                                            Order_qty = materielInfo.BoxQty,
                                            Batch_num = item.batch_num,
                                            Exp_date = item.exp_date,
                                            OrderDetailStatus = "新建",
                                            Status = 0
                                        };
                                        materielInfo.Business_qty += materielInfo.BoxQty;
                                    }
                                    else
                                    {
                                        orderDetail.Order_qty += materielInfo.BoxQty;
                                        materielInfo.Business_qty += materielInfo.BoxQty;
                                    }
                                }
                                #endregion
                                if (orderDetail != null) entityOrder.Details.Add(orderDetail);
                                #endregion
                                #region å‰©ä½™æ•´ä»¶å…¥å¹³åº“
                                if (xs > 0)
                                {
                                    orderDetail = new Dt_CabinOrderDetail()
                                    {
                                        Reservoirarea = order.warehouse_no,
                                        Goods_no = item.goods_no,
                                        Order_qty = materielInfo.BoxQty * xs,
                                        Batch_num = item.batch_num,
                                        Exp_date = item.exp_date,
                                        OrderDetailStatus = "新建",
                                        Status = 2
                                    };
                                    entityOrder.Details.Add(orderDetail);
                                }
                                #endregion
                            }
                            //_basicService.MaterielInfoService.Repository.UpdateData(materielInfo);
                            _medicineGoodsServices.Db.Updateable(materielInfo).ExecuteCommand();
                            #endregion
                        }
                        _CabinOrders.Add(entityOrder);
                        orderNos.Add(order.order_no);
                    };
                    BaseDal.Db.InsertNav(_CabinOrders).Include(x => x.Details).ExecuteCommand();
                    //在下发给wcs 
                  //var reslut=  EdiIn(); //发给下游
                                        //如果这个方法成功了,那么就调用CompleteOrder接口,然后改变
                    //var reslut=  EdiIn(); //发给下游
                    //如果这个方法成功了,那么就调用CompleteOrder接口,然后改变
                    Db.Ado.CommitTran();
                    return responseContent.OK("同步入库单成功");
                }
@@ -264,7 +366,7 @@
                    Console.WriteLine("没有符合条件的订单需要推送");
                    return WebResponseContent.Instance.Error("没有符合条件的订单需要推送");
                }
                // 4. éåŽ†è®¢å•ï¼Œç»„è£… DTO å¹¶æŽ¨é€
                foreach (var order in orders)
@@ -333,10 +435,10 @@
                    if (resp != null && resp.code == "0")
                    {
                        // æ›´æ–°è¡¨å¤´çŠ¶æ€
                       BaseDal.Db.Updateable<Dt_CabinOrder>()
                          .SetColumns(o => new Dt_CabinOrder { OdrderStatus = "开始" })
                          .Where(o => o.Id == order.Id)
                          .ExecuteCommand();
                        BaseDal.Db.Updateable<Dt_CabinOrder>()
                           .SetColumns(o => new Dt_CabinOrder { OdrderStatus = "开始" })
                           .Where(o => o.Id == order.Id)
                           .ExecuteCommand();
                        // æ›´æ–°æ˜Žç»†çŠ¶æ€ä¸ºå·²åŒæ­¥
                        BaseDal.Db.Updateable<Dt_CabinOrderDetail>()
@@ -357,7 +459,7 @@
            }
            catch (Exception ex)
            {
                Console.WriteLine("EdiIn å¼‚常:" + ex.Message);
                return new WebResponseContent { Status = false, Message = ex.Message };
            }
@@ -444,7 +546,7 @@
                                    Exp_date = d.Exp_date,
                                    OrderDetailStatus = d.OrderDetailStatus,
                                    Status = d.Status,
                                }).ToList();
                                BaseDal.Db.Insertable(detailsHistory).ExecuteCommand();
@@ -486,7 +588,7 @@
        }
        /// <summary>
@@ -518,7 +620,7 @@
    }