wxw
2024-08-13 a3236b51b5691b8c47f4ebaf1d885314a4bab3bd
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -199,6 +199,15 @@
                {
                    throw Oops.Bah("未查询到未盘点的盘点明细信息");
                }
                var modSku = Db.Queryable<SysMaterials>().Where(s => s.SkuNo == sku).First();
                if (modSku.IsPasteCode == "1" && isContinue == "1")
                {
                    throw Oops.Bah("贴标物料不允许数量盘点");
                }
                else if (modSku.IsPasteCode == "0" && isContinue == "0")
                {
                    throw Oops.Bah("不贴标物料请使用数量盘点");
                }
                //盘点记录
                var checkLog = Db.Queryable<BllStockCheckLog>().Where(m =>
                    m.IsDel == "0" && m.CRNo == crNo && m.PalletNo == palletNo && m.SkuNo == sku && m.LotNo == lotNo && m.CheckResult == null);
@@ -777,7 +786,7 @@
                var storageArea = new List<SysStorageArea>();
                if (string.IsNullOrEmpty(palletNo))
                {
                    storageArea = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.WareHouseNo == "W02").OrderBy(o=>o.AreaNo).ToList();
                    storageArea = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.WareHouseNo == "W02").OrderBy(o => o.AreaNo).ToList();
                }
                else
                {
@@ -799,7 +808,7 @@
                    {
                        throw new Exception("储位信息不存在,请检查!");
                    }
                    if (storageLocat.AreaNo.Contains("B0"))
                    {
                        storageArea = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.AreaNo.Contains("B0") && w.WareHouseNo == "W02").OrderBy(o => o.AreaNo).ToList();
@@ -808,7 +817,7 @@
                    {
                        storageArea = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.AreaNo.Contains("B1") && w.WareHouseNo == "W02").OrderBy(o => o.AreaNo).ToList();
                    }
                }
                }
                return storageArea;
            }
            catch (Exception ex)
@@ -894,7 +903,7 @@
            if (!string.IsNullOrEmpty(areaNo) && !string.IsNullOrEmpty(ruku))
            {
                throw new Exception("目标区域和入库口不能同时选择!");
            }
            }
            try
            {
                string EndLocat = string.Empty;//目标位置                
@@ -903,7 +912,7 @@
                if (log != null)
                {
                    throw new Exception("该托盘已有小车等待执行或正在执行的任务!");
                }
                }
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                if (stockDetail == null)
                {
@@ -916,7 +925,7 @@
                    {
                        throw new Exception("所选区域信息不存在,请检查!");
                    }
                    EndLocat = GetLocat(areaNo, stockDetail.SkuNo, stockDetail.LotNo,palletNo);
                    EndLocat = GetLocat(areaNo, stockDetail.SkuNo, stockDetail.LotNo, palletNo);
                }
                else
                {
@@ -951,7 +960,7 @@
                        throw new Exception("目标储位信息不存在,请检查!");
                    }
                }
                //开启事务
                Db.BeginTran();
@@ -996,7 +1005,7 @@
                {
                    storageLocatEnd.Status = "4";//0:空储位 1:有物品 2:入库中 3:出库中 4:移入中 5:移出中 
                    Db.Updateable(storageLocatEnd).ExecuteCommand();
                }
                }
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("PDA模块", "AGV转运", palletNo, "移库", $"PDA呼叫小车对托盘号:{palletNo}发起转运", userId);
                //提交事务
@@ -1019,7 +1028,7 @@
        /// <param name="palletNo"></param>
        /// <param name="areaNo"></param>
        /// <param name="userId"></param>
        public void AgvTransport2(string soNo,string palletNo, string areaNo, int userId)
        public void AgvTransport2(string soNo, string palletNo, string areaNo, int userId)
        {
            if (string.IsNullOrEmpty(soNo))
            {
@@ -1055,7 +1064,7 @@
                    string sqlStr = $"select * from DataStockDetail where PalletNo in (select PalletNo from BllExportAllot where IsDel='0' and SONo='{soNo}')";
                    stockDetailList = Db.Ado.SqlQuery<DataStockDetail>(sqlStr).ToList();
                }
                if (stockDetailList.Count<=0)
                if (stockDetailList.Count <= 0)
                {
                    throw new Exception("托盘明细不存在,请检查!");
                }
@@ -1068,7 +1077,7 @@
                foreach (var item in stockDetailList)
                {
                    //任务信息
                    var logInfo = log.First(w =>w.PalletNo == item.PalletNo);
                    var logInfo = log.First(w => w.PalletNo == item.PalletNo);
                    if (logInfo != null)
                    {
                        throw new Exception($"托盘号:{item.PalletNo}已有小车等待执行或正在执行的任务!");
@@ -1178,7 +1187,7 @@
        /// <param name="skuNo"></param>
        /// <param name="lotNo"></param>
        /// <returns></returns>
        private string GetLocat(string areaNo,string skuNo,string lotNo,string palletNo,string hasLocatNoList="")
        private string GetLocat(string areaNo, string skuNo, string lotNo, string palletNo, string hasLocatNoList = "")
        {
            try
            {
@@ -1187,7 +1196,7 @@
                var storageLocatList = Db.Queryable<SysStorageLocat>().Where(w => w.WareHouseNo == "W02" && w.AreaNo == areaNo).ToList();
                //同区域同批次物料的储位信息
                List<string> locatList = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.SkuNo == skuNo && w.LotNo == lotNo && w.WareHouseNo == "W02" && w.AreaNo == areaNo && w.PalletNo != palletNo)
                    .OrderByDescending(o=>o.LocatNo).Select(s=>s.LocatNo).Distinct().ToList();
                    .OrderByDescending(o => o.LocatNo).Select(s => s.LocatNo).Distinct().ToList();
                foreach (var item in locatList)
                {
                    var locatInfo = storageLocatList.Where(w => w.LocatNo == item).First();
@@ -1202,7 +1211,7 @@
                if (string.IsNullOrEmpty(endLocat))
                {
                    var locatInfo3 = storageLocatList.Where(w => w.IsDel == "0" && w.Flag == "0" && w.Status == "0" && !hasLocatNoList.Contains(w.LocatNo))
                                .OrderByDescending(m => m.Layer).OrderByDescending(m=>m.Column).OrderByDescending(m=> m.Row).First();
                                .OrderByDescending(m => m.Layer).OrderByDescending(m => m.Column).OrderByDescending(m => m.Row).First();
                    if (locatInfo3 != null)
                    {
@@ -1218,5 +1227,86 @@
        }
        #endregion
        #region 零箱解绑
        public void LingxingUnbind(string palletNo,string boxNo, int userId)
        {
            try
            {
                if (string.IsNullOrEmpty(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                }
                if (string.IsNullOrEmpty(boxNo))
                {
                    throw new Exception("箱码不能为空");
                }
                //开启事务
                Db.BeginTran();
                var comTime = DateTime.Now;
                //托盘库存明细信息
                var detail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                if (detail == null)
                {
                    throw new Exception("该托盘库存明细信息不存在");
                }
                //库存箱支明细信息
                var boxList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.StockDetailId == detail.Id && w.BoxNo == boxNo).ToList();
                if (boxList.Count <= 0)
                {
                    throw new Exception("该箱码库存箱支信息不存在");
                }
                decimal boxQty = 0;//箱内数量
                foreach (var item in boxList)
                {
                    boxQty += item.Qty;
                    item.StockDetailId = 0;//清空托盘外键
                }
                //更新库存箱支明细表
                Db.Updateable(boxList).ExecuteCommand();
                detail.Qty -= boxQty;//托盘库存数量
                detail.BitPalletMark = "1";//零托标记
                //更新托盘库存表
                Db.Updateable(detail).ExecuteCommand();
                //添加托盘解绑绑定记录
                var unBind = new BllPalletUnbind()
                {
                    UpbindPalletNo = palletNo,
                    BindPalletNo = "",
                    LotNo = detail.LotNo,
                    LotText = detail.LotText,
                    SupplierLot = detail.SupplierLot,
                    SkuNo = detail.SkuNo,
                    SkuName = detail.SkuName,
                    Standard = detail.Standard,
                    Qty = boxQty,
                    PalletNo2 = detail.PalletNo2,
                    PalletNo3 = detail.PalletNo3,
                    BoxNo = boxNo,
                    InspectNo = "",
                    InspectStatus = detail.InspectStatus,
                    IsDel = "0",
                    CreateTime = comTime,
                    CreateUser = userId
                };
                Db.Insertable(unBind).ExecuteCommand();
                //添加操作日志
                new OperationCrServer().AddLogOperationCr("库内作业", "操作日志", boxNo, "编辑", $"零箱解绑:原托盘码:{palletNo}上的箱码{boxNo}解绑", userId);
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                //回滚事务
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #endregion
    }
}