chengsc
2025-06-11 9ff4a447bc9b8a7ff1f09dfee1ce2f1263dccca2
Wms/WMS.BLL/HttpServer.cs
@@ -29,292 +29,302 @@
        public OutCommandDto RequestPalletIn(string palletNo, string houseNo, int palletNum, string Strlocate)
        {
            return null;
            //try
            //{
            //    #region 判断
            //    if (string.IsNullOrEmpty(palletNo))
            //    {
            //        throw new Exception("托盘号不能为空");
            //    }
            //    if (string.IsNullOrEmpty(houseNo))
            //    {
            //        throw new Exception("仓库号不能为空");
            //    }
            //    if (palletNum <= 0)
            //    {
            //        throw new Exception("托盘数量不能小等0");
            //    }
            //    if (string.IsNullOrEmpty(Strlocate))
            //    {
            //        throw new Exception("起始位置不能为空");
            //    }
            //    //获取储位信息
            //    var locateInfo = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.WareHouseNo == houseNo && m.LocatNo == Strlocate);
            //    if (locateInfo == null)
            //    {
            //        throw new Exception("未查询到空储位");
            //    }
            //    if (locateInfo.Flag != "0")
            //    {
            //        throw new Exception("当前位置标识状态是非正常的");
            //    }
            //return null;
            try
            {
                #region 判断
                if (string.IsNullOrEmpty(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                }
                if (string.IsNullOrEmpty(houseNo))
                {
                    throw new Exception("仓库号不能为空");
                }
                if (palletNum <= 0)
                {
                    throw new Exception("托盘数量不能小等0");
                }
                if (string.IsNullOrEmpty(Strlocate))
                {
                    throw new Exception("起始位置不能为空");
                }
                //获取储位信息
                var locateInfo = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.WareHouseNo == houseNo && m.LocatNo == Strlocate);
                if (locateInfo == null)
                {
                    throw new Exception("未查询到空储位");
                }
                if (locateInfo.Flag != "0")
                {
                    throw new Exception("当前位置标识状态是非正常的");
                }
            //    #endregion
                #endregion
            //    #region MyRegion
                #region MyRegion
            //    var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
            //    if (stockDetail.Count > 0)
            //    {
            //        throw new Exception("当前托盘在库内已有库存信息,请核实");
            //    }
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
                if (stockDetail.Count > 0)
                {
                    throw new Exception("当前托盘在库内已有库存信息,请核实");
                }
            //    //获取托盘信息
            //    var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
            //    if (pallet == null)
            //    {
            //        throw new Exception("未查询到托盘信息");
            //    }
            //    if (pallet.Status != "0")
            //    {
            //        throw new Exception("托盘状态不能未使用状态");
            //    }
            //    //获取托盘信息
            //    var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == "100099");
            //    var pNum = 0;
            //    var bNum = 0;
                //获取托盘信息
                var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                if (pallet == null)
                {
                    throw new Exception("未查询到托盘信息");
                }
                if (pallet.Status != "0")
                {
                    throw new Exception("托盘状态不能未使用状态");
                }
                //获取托盘信息
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == "100099");
                if (sku == null)
                {
                    throw new Exception("物料信息中未查询到空托盘的物料信息,不可入库");
                }
                var pNum = 0;
                var bNum = 0;
            //    new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
            //    var datetime = Db.GetDate();
            //    Db.BeginTran();
                var datetime = Db.GetDate();
                Db.BeginTran();
            //    // 插入托盘绑定表
            //    var modelpb = new BllPalletBind
            //    {
            //        ASNNo = "",
            //        ASNDetailNo = 0,
            //        TaskNo = "", //任务号
            //        PalletNo = palletNo,
            //        Qty = palletNum,
            //        FullQty = pNum,
            //        Status = "3", //上架完成
            //        Type = "1", //0 物料托 1 空托
            //        LotNo = "",
            //        LotText = "",
            //        SupplierLot = "",
            //        InspectMark = "0", //0 否 1 是
            //        BitPalletMark = pNum == palletNum ? "0" : "1",
            //        IsBale = "0",
            //        IsBelt = "0",
            //        CreateUser = 0,
            //        CreateTime = Db.GetDate()
            //    };
            //    var id = Db.Insertable(modelpb).ExecuteReturnIdentity();
            //    #region 库存明细
            //    var sd1 = new DataStockDetail()
            //    {
            //        LotNo = modelpb.LotNo,
            //        LotText = modelpb.LotText,
            //        SupplierLot = modelpb.SupplierLot,
            //        SkuNo = sku.SkuNo,
            //        SkuName = sku.SkuName,
            //        Standard = sku.Standard,
            //        Qty = modelpb.Qty,
            //        LockQty = 0,
            //        FrozenQty = 0,
            //        InspectQty = 0,
            //        ASNNo = modelpb.ASNNo,
            //        ASNDetailNo = modelpb.ASNDetailNo,
            //        WareHouseNo = "",
            //        RoadwayNo = "",
            //        AreaNo = "",
            //        LocatNo = "",
            //        PalletNo = modelpb.PalletNo,
            //        PalletNo2 = modelpb.PalletNo2,
            //        PalletNo3 = modelpb.PalletNo3,
            //        PalletTags = "0",
            //        CompleteTime = datetime,
            //        ProductionTime = modelpb.ProductionTime,
            //        ExpirationTime = modelpb.ExpirationTime,
            //        Status = "0",
            //        InspectMark = modelpb.InspectMark,
            //        InspectStatus = sku.IsInspect,
            //        BitPalletMark = modelpb.BitPalletMark,
            //        PackagNo = sku.PackagNo,
            //        IsBale = modelpb.IsBale,
            //        IsBelt = modelpb.IsBelt,
                // 插入托盘绑定表
                var modelpb = new BllPalletBind
                {
                    ASNNo = "",
                    ASNDetailNo = 0,
                    TaskNo = "", //任务号
                    PalletNo = palletNo,
                    Qty = palletNum,
                    FullQty = pNum,
                    Status = "3", //上架完成
                    Type = "1", //0 物料托 1 空托
                    LotNo = "",
                    LotText = "",
                    SupplierLot = "",
                    InspectMark = "0", //0 否 1 是
                    BitPalletMark = pNum == palletNum ? "0" : "1",
                    IsBale = "0",
                    IsBelt = "0",
                    CreateUser = 0,
                    CreateTime = Db.GetDate()
                };
                var id = Db.Insertable(modelpb).ExecuteReturnIdentity();
                #region 申请储位
                SysStorageLocat locate = null;
            //        IsDel = "0",
            //        CreateUser = 0,
            //        CreateTime = datetime
            //    };
            //    var sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
            //    #endregion
                //判断物料是否含有类别信息
                if (string.IsNullOrWhiteSpace(sku.CategoryNo))
                {
                    throw new Exception($"物料:{sku.SkuNo}未查询到类别信息");
                }
            //    #region 库存
            //    var dataStock1 = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo);
            //    if (dataStock1 != null)
            //    {
            //        dataStock1.Qty += modelpb.Qty;
            //        if (modelpb.InspectMark == "1")
            //        {
            //            dataStock1.IsSampling = "0";
            //        }
            //        Db.Updateable(dataStock1).ExecuteCommand();
            //    }
            //    else
            //    {
            //        var stock = new DataStock()
            //        {
            //            SkuNo = sku.SkuNo,
            //            SkuName = sku.SkuName,
            //            Standard = sku.Standard,
            //            LotNo = "",
            //            LotText = "",
            //            Qty = modelpb.Qty,
            //            LockQty = 0,
            //            FrozenQty = 0,
            //            IsSampling = "0",
            //            IsDel = "0",
            //            CreateUser = 0,
            //            CreateTime = datetime
            //        };
            //        Db.Insertable(stock).ExecuteCommand();
            //    }
            //    #endregion
                var skuCategory = Db.Queryable<SysMaterialCategory>().First(m => m.IsDel == "0" && m.CategoryNo == sku.CategoryNo);
                if (skuCategory == null)
                {
                    throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别");
                }
                var areaStr = skuCategory.AreaNo.Split(",");
                var areaList = new List<string>();
                foreach (var item in areaStr)
                {
                    areaList.Add(item);
                }
                var allotLocate = new AllotLocation();
                for (int i = 1; i <= 2; i++)
                {
                    var iStr = i.ToString();
                    locate = allotLocate.GetSuiTableLocate(houseNo, areaList, "", iStr);
                    if (locate != null)
                    {
                        break;
                    }
                }
            //    #region 申请储位
            //    SysStorageLocat locate;
            //    var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo);
            //    if (sku == null)
            //    {
            //        throw new Exception("物料信息中未查询到入库单明细包含的物料信息,不可入库");
            //    }
            //    //判断物料是否含有类别信息
            //    if (string.IsNullOrWhiteSpace(sku.CategoryNo))
            //    {
            //        throw new Exception($"物料:{sku.SkuNo}未查询到类别信息");
            //    }
                #endregion
            //    var skuCategory = skuCategoryList.FirstOrDefault(m => m.CategoryNo == sku.CategoryNo);
            //    if (skuCategory == null)
            //    {
            //        throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别");
            //    }
            //    var areaStr = skuCategory.AreaNo.Split(",");
            //    var areaList = new List<string>();
            //    foreach (var item in areaStr)
            //    {
            //        areaList.Add(item);
            //    }
            //    locate = allotLocate.GetSuiTableLocate(houseNo, areaList, "", ceng);
                #region 库存明细
                var sd1 = new DataStockDetail()
                {
                    LotNo = modelpb.LotNo,
                    LotText = modelpb.LotText,
                    SupplierLot = modelpb.SupplierLot,
                    SkuNo = sku.SkuNo,
                    SkuName = sku.SkuName,
                    Standard = sku.Standard,
                    Qty = modelpb.Qty,
                    LockQty = 0,
                    FrozenQty = 0,
                    InspectQty = 0,
                    ASNNo = modelpb.ASNNo,
                    ASNDetailNo = modelpb.ASNDetailNo,
                    WareHouseNo = locate.WareHouseNo,
                    RoadwayNo = locate.RoadwayNo,
                    AreaNo = locate.AreaNo,
                    LocatNo = locate.LocatNo,
                    PalletNo = modelpb.PalletNo,
                    PalletNo2 = modelpb.PalletNo2,
                    PalletNo3 = modelpb.PalletNo3,
                    PalletTags = "0",
                    CompleteTime = datetime,
                    ProductionTime = modelpb.ProductionTime,
                    ExpirationTime = modelpb.ExpirationTime,
                    Status = "0",
                    InspectMark = modelpb.InspectMark,
                    InspectStatus = sku.IsInspect,
                    BitPalletMark = modelpb.BitPalletMark,
                    PackagNo = sku.PackagNo,
                    IsBale = modelpb.IsBale,
                    IsBelt = modelpb.IsBelt,
            //    #endregion
                    IsDel = "0",
                    CreateUser = 0,
                    CreateTime = datetime
                };
                var sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
                #endregion
            //    #region 添加任务
                #region 库存
                var dataStock1 = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo);
                if (dataStock1 != null)
                {
                    dataStock1.Qty += modelpb.Qty;
                    if (modelpb.InspectMark == "1")
                    {
                        dataStock1.IsSampling = "0";
                    }
                    Db.Updateable(dataStock1).ExecuteCommand();
                }
                else
                {
                    var stock = new DataStock()
                    {
                        SkuNo = sku.SkuNo,
                        SkuName = sku.SkuName,
                        Standard = sku.Standard,
                        LotNo = "",
                        LotText = "",
                        Qty = modelpb.Qty,
                        LockQty = 0,
                        FrozenQty = 0,
                        IsSampling = "0",
                        IsDel = "0",
                        CreateUser = 0,
                        CreateTime = datetime
                    };
                    Db.Insertable(stock).ExecuteCommand();
                }
                #endregion
            //    //添加巷道使用记录
            //    var log = new SysRoadwayUseLog
            //    {
            //        RoadwayNo = locateInfo.RoadwayNo,
            //        WareHouseNo = houseNo,
            //        Row = 0,
            //        Column = 0,
            //        Layer = 0,
            //    };
            //    Db.Insertable(log).ExecuteCommand();
            //    var taskNo = new Common().GetMaxNo("TK");
            //    var inTask = new LogTask    //入库任务
            //    {
            //        TaskNo = taskNo,
            //        Sender = "WMS",
            //        Receiver = "WCS",
            //        IsSuccess = 1, //是否下发成功 0失败 1成功
            //        SendDate = DateTime.Now,  //发送时间
            //        BackDate = DateTime.Now,  //返回时间
            //        StartRoadway = "",            // 起始巷道
            //        StartLocat = locate,//起始位置
            //        EndLocat = locateInfo.LocatNo,//目标位置
            //        EndRoadway = locateInfo.RoadwayNo,  // 目标巷道
            //        PalletNo = palletNo,//托盘码
            //        IsSend = 1,//是否可再次下发
            //        IsCancel = 1,//是否可取消
            //        IsFinish = 1,//是否可完成
            //        Type = "0",//任务类型 0 入库任务 1 出库任务  2 移库任务
            //        Status = "1",//任务状态0:等待执行1正在执行2执行完成
            //        OrderType = "0",//0 入库单 1 出库单  2 盘点单  3 移库单
            //        Msg = $"{locateInfo.LocatNo}到=>>" +  + "的入库任务", //关键信息
                // 更改托盘使用状态
                string sqlStr = string.Empty;
                sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
                Db.Ado.ExecuteCommand(sqlStr);
            //    };
            //    Db.Insertable(inTask).ExecuteCommand();
            //    var asnNo = "";
                #region 添加任务
                //添加巷道使用记录
                var log = new SysRoadwayUseLog
                {
                    RoadwayNo = locate.RoadwayNo,
                    WareHouseNo = houseNo,
                    Row = 0,
                    Column = 0,
                    Layer = 0,
                };
                Db.Insertable(log).ExecuteCommand();
                var taskNo = new Common().GetMaxNo("TK");
                var inTask = new LogTask    //入库任务
                {
                    TaskNo = taskNo,
                    Sender = "WMS",
                    Receiver = "WCS",
                    IsSuccess = 1, //是否下发成功 0失败 1成功
                    SendDate = DateTime.Now,  //发送时间
                    BackDate = DateTime.Now,  //返回时间
                    StartRoadway = "",            // 起始巷道
                    StartLocat = Strlocate,//起始位置
                    EndLocat = locateInfo.LocatNo,//目标位置
                    EndRoadway = locateInfo.RoadwayNo,  // 目标巷道
                    PalletNo = palletNo,//托盘码
                    IsSend = 1,//是否可再次下发
                    IsCancel = 1,//是否可取消
                    IsFinish = 1,//是否可完成
                    Type = "0",//任务类型 0 入库任务 1 出库任务  2 移库任务
                    Status = "1",//任务状态0:等待执行1正在执行2执行完成
                    OrderType = "0",//0 入库单 1 出库单  2 盘点单  3 移库单
                    Msg = $"{locateInfo.LocatNo}到=>>" + locate.LocatNo + "的入库任务", //关键信息
                };
                Db.Insertable(inTask).ExecuteCommand();
                var asnNo = "";
                //添加托盘上架记录
                var upShelf = new BllPalletUpShelf()
                {
                    TaskNo = inTask.TaskNo,
                    TraceNo = asnNo,
                    PalletNo = palletNo,
                    SkuNo = sku.SkuNo,
                    SkuName = sku.SkuName,
                    LotNo = "",
                    Status = "1",
                    WareHouseNo = houseNo,
                    RoadwayNo = locate.RoadwayNo,
                    AreaNo = locate.AreaNo,
                    LocatNo = locate.LocatNo,
                    CreateUser = 0,
                };
                Db.Insertable(upShelf).ExecuteCommand();
                locate.Status = "2";
                Db.Updateable(locate).ExecuteCommand();
                var comDto = new OutCommandDto()
                {
                    TaskNo = taskNo, // 任务号
                    TaskType = "0",// 任务类型
                    PalletNo = palletNo,//托盘号
                    StartRoadway = inTask.StartRoadway,
                    StartLocate = inTask.StartLocat, // 起始位置
                    EndLocate = inTask.EndLocat, // 目标位置
                    EndRoadway = inTask.EndRoadway,   // 目标巷道
                    Order = 999,
                    Type = PLCTypeEnum.AGV
                };
                #endregion
                
            //    //添加托盘上架记录
            //    var upShelf = new BllPalletUpShelf()
            //    {
            //        TaskNo = inTask.TaskNo,
            //        TraceNo = asnNo,
            //        PalletNo = palletNo,
            //        SkuNo = stockModel.SkuNo,
            //        SkuName = stockModel.SkuName,
            //        LotNo = stockModel.LotNo,
            //        Status = "1",
                Db.CommitTran();
            //        WareHouseNo = houseNo,
            //        RoadwayNo = locate.RoadwayNo,
            //        AreaNo = locate.AreaNo,
            //        LocatNo = locate.LocatNo,
                #endregion
            //        CreateUser = 0,
            //    };
            //    Db.Insertable(upShelf).ExecuteCommand();
            //    locate.Status = "2";
            //    Db.Updateable(locate).ExecuteCommand();
            //    Db.CommitTran();
            //    comDto = new OutCommandDto()
            //    {
            //        TaskNo = taskNo, // 任务号
            //        TaskType = "0",// 任务类型
            //        PalletNo = palletNo,//托盘号
            //        StartRoadway = inTask.StartRoadway,
            //        StartLocate = inTask.StartLocat, // 起始位置
            //        EndLocate = inTask.EndLocat, // 目标位置
            //        EndRoadway = inTask.EndRoadway,   // 目标巷道
            //        Order = 999,
            //        Type = PLCTypeEnum.AGV
            //    };
            //    #endregion
            //    // 更改托盘使用状态
            //    string sqlStr = string.Empty;
            //    sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
            //    Db.Ado.ExecuteCommand(sqlStr);
            //    Db.CommitTran();
            //    #endregion
            //    return null;
            //}
            //catch (Exception e )
            //{
            //    throw new Exception(e.Message);
            //}
                return null;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }