Administrator
2024-03-06 65ecd34acf0a3d33e6c1e10c93e351716d749e2f
Wms/WMS.BLL/BllPdaServer/PdaCrServer.cs
@@ -8,6 +8,7 @@
using WMS.BLL.LogServer;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.BllCheckEntity;
using WMS.Entity.BllSoEntity;
using WMS.Entity.Context;
using WMS.Entity.DataEntity;
using WMS.Entity.SysEntity;
@@ -82,7 +83,7 @@
        }
        //获取要盘点的箱码信息(盘点记录中数据)
        public List<StockCheckLogDto> GetStockCheckLogList(string crNo, string crDetail, string palletNo, string boxNo)
        public List<StockCheckLogDto> GetStockCheckLogList(string crNo, string crDetail, string palletNo, string boxNo, string isContinue)
        {
            try
            {
@@ -101,6 +102,18 @@
                var detail = crDetail.Split("-");
                var sku = detail[0];
                //判断是否为无码物料
                var skuinfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == sku);
                //判断是否存在物料消息
                if (skuinfo == null)
                {
                    throw new Exception("托盘码不能为空");
                }
                int isQtySku = 0;
                if (skuinfo.Type == "4" && isContinue == "1")
                {
                    isQtySku = 1;
                }
                var lotNo = detail[1];
                var list = Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == crNo);
                //var deList= Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.SkuNo == sku && m.LotNo == lotNo && m.PalletNo == palletNo);
@@ -108,25 +121,47 @@
                //{
                //    throw new Exception("未查询到托盘上的盘点物料批次信息");
                //}
                list = list.Where(m => m.SkuNo == sku && m.LotNo == lotNo && m.PalletNo == palletNo);
                if (!string.IsNullOrWhiteSpace(boxNo))
                {
                    list = list.Where(m => m.BoxNo == boxNo);
                }
                var data = list.Select(m => new StockCheckLogDto()
                List<StockCheckLogDto> data = new List<StockCheckLogDto>();
                //判断是否为无码物料
                if (isQtySku == 1)
                {
                    BoxNo = m.BoxNo,
                    BoxNo3 = m.BoxNo3,
                    SkuNo = m.SkuNo,
                    SkuName = m.SkuName,
                    LotNo = m.LotNo,
                    Qty = m.Qty,
                    CheckResult = m.CheckResult,
                    //获取库存信息
                    var stockDetail = Db.Queryable<DataStockDetail>().First(a => a.IsDel == "0" && a.Status == "3" && a.SkuNo == sku && a.PalletNo == palletNo);
                }).ToList();
                    var model = new StockCheckLogDto()
                    {
                        PalletNo = palletNo,
                        SkuNo = sku,
                        Qty = (int?)stockDetail.Qty,
                        CheckResult = 4,
                    };
                    data.Add(model);
                }
                else
                {
                    data = list.Select(m => new StockCheckLogDto()
                    {
                        BoxNo = m.BoxNo,
                        BoxNo3 = m.BoxNo3,
                        SkuNo = m.SkuNo,
                        SkuName = m.SkuName,
                        LotNo = m.LotNo,
                        Qty = m.Qty,
                        CheckResult = m.CheckResult,
                    }).ToList();
                }
                return data;
            }
            catch (Exception e)
            {
@@ -134,7 +169,7 @@
            }
        }
        public void CrSetCheck(string crNo, string crDetail, string palletNo, string boxNo, string boxNo3, string result, int? qty, int userId)
        public void CrSetCheck(string crNo, string crDetail, string palletNo, string boxNo, string boxNo3, string result, int? qty, string isContinue, int userId)
        {
            try
            {
@@ -164,8 +199,8 @@
                //盘点记录
                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);
                var time = DateTime.Now;
                //正常
                if (result == "0")
                {
                    if (!string.IsNullOrWhiteSpace(boxNo))
@@ -177,7 +212,7 @@
                        checkLog = checkLog.Where(m => m.BoxNo3 == boxNo3);
                    }
                    if (checkLog.Count() == 0)
                    if (checkLog.Count() == 0 && isContinue == "0")
                    {
                        throw new Exception("未查询到未盘点的箱支信息");
                    }
@@ -188,7 +223,7 @@
                    {
                        if (l.CheckResult != null)
                        {
                           continue;
                            continue;
                        }
                        l.RealQty = l.Qty;
                        l.CheckResult = 0;
@@ -203,6 +238,7 @@
                        checkDetail.RealQty = 0;
                    }
                    checkDetail.RealQty += num;
                    checkDetail.CheckResult = 0;
                    //if (checkDetail.CheckResult == null || checkDetail.CheckResult == 0)
                    //{
                    //    checkDetail.CheckResult = 0;
@@ -210,6 +246,7 @@
                    Db.Updateable(checkDetail).ExecuteCommand();
                    Db.Updateable(list).ExecuteCommand();
                }
                //盘亏
                else if (result == "1")
                {
                    if (!string.IsNullOrWhiteSpace(boxNo))
@@ -221,10 +258,20 @@
                        checkLog = checkLog.Where(m => m.BoxNo3 == boxNo3);
                    }
                    if (checkLog.Count() == 0)
                    if (checkLog.Count() == 0 && isContinue == "0")
                    {
                        throw new Exception("未查询到箱支信息");
                    }
                    //
                    if (isContinue == "1")
                    {
                        if (qty == null || qty <= 0)
                        {
                            throw new Exception("数量盘点时、盘亏数量不能为空且需大于0");
                        }
                    }
                    var list = checkLog.ToList();
                    var num = 0;
@@ -241,64 +288,111 @@
                        checkDetail.RealQty = 0;
                    }
                    checkDetail.RealQty += num;
                    //checkDetail.CheckResult = 1;
                    if (isContinue == "1")
                    {
                        checkDetail.RealQty = qty;
                    }
                    checkDetail.CheckResult = 1;
                    var checkInfo = Db.Queryable<BllStockCheckLog>().First(m =>
                    m.IsDel == "0" && m.CRNo == crNo && m.PalletNo == palletNo && m.SkuNo == sku && m.LotNo == lotNo);
                    checkInfo.RealQty = qty;
                    checkInfo.CheckResult = 1;
                    checkInfo.CheckUserId = userId;
                    checkInfo.CheckDate = time;
                    checkInfo.UpdateUser = userId;
                    checkInfo.UpdateTime = time;
                    Db.Updateable(checkInfo).ExecuteCommand();
                    Db.Updateable(checkDetail).ExecuteCommand();
                    Db.Updateable(list).ExecuteCommand();
                }
                //盘盈
                else if (result == "2")
                {
                    if (string.IsNullOrWhiteSpace(boxNo) || string.IsNullOrWhiteSpace(boxNo3))
                    if (isContinue == "0")
                    {
                        throw new Exception("盘盈时箱码与支码不能为空");
                        if (string.IsNullOrWhiteSpace(boxNo) || string.IsNullOrWhiteSpace(boxNo3))
                        {
                            throw new Exception("盘盈时箱码与支码不能为空");
                        }
                    }
                    if (qty == null || qty <= 0)
                    {
                        throw new Exception("盘盈时数量不能为空且需大于0");
                    }
                    var count = Db.Queryable<DataBoxInfo>()
                        .Count(m => m.IsDel == "0" && m.BoxNo == boxNo && m.BoxNo3 == boxNo3);
                    var count2 = Db.Queryable<BllStockCheckLog>()
                        .Count(m => m.IsDel == "0" && m.BoxNo == boxNo && m.BoxNo3 == boxNo3);
                    if (count > 0 || count2 > 0)
                    if (isContinue == "0")
                    {
                        throw new Exception("当前库存中已存在该箱支信息");
                        var count = Db.Queryable<DataBoxInfo>()
                        .Count(m => m.IsDel == "0" && m.BoxNo == boxNo && m.BoxNo3 == boxNo3);
                        var count2 = Db.Queryable<BllStockCheckLog>()
                            .Count(m => m.IsDel == "0" && m.BoxNo == boxNo && m.BoxNo3 == boxNo3);
                        if (count > 0 || count2 > 0)
                        {
                            throw new Exception("当前库存中已存在该箱支信息");
                        }
                    }
                    var crLog = new BllStockCheckLog()
                    BllStockCheckLog crLog = new BllStockCheckLog();
                    if (isContinue == "0")
                    {
                        CRNo = crNo,
                        PalletNo = palletNo,
                        BoxNo = boxNo,
                        BoxNo2 = null,
                        BoxNo3 = boxNo3,
                        Qty = qty,
                        SkuNo = checkDetail.SkuNo,
                        SkuName = checkDetail.SkuName,
                        Standard = checkDetail.Standard,
                        LotNo = checkDetail.LotNo,
                        LotText = checkDetail.LotText,
                        SupplierLot = checkDetail.SupplierLot,
                        crLog = new BllStockCheckLog()
                        {
                            CRNo = crNo,
                            PalletNo = palletNo,
                            BoxNo = boxNo,
                            BoxNo2 = null,
                            BoxNo3 = boxNo3,
                            Qty = qty,
                            SkuNo = checkDetail.SkuNo,
                            SkuName = checkDetail.SkuName,
                            Standard = checkDetail.Standard,
                            LotNo = checkDetail.LotNo,
                            LotText = checkDetail.LotText,
                            SupplierLot = checkDetail.SupplierLot,
                        RealQty = qty,
                        CheckResult = 2,
                        CheckDate = time,
                        CheckUserId = userId,
                            RealQty = qty,
                            CheckResult = 2,
                            CheckDate = time,
                            CheckUserId = userId,
                        CreateUser = userId,
                        CreateTime = time
                    };
                    if (checkDetail.RealQty == null)
                            CreateUser = userId,
                            CreateTime = time
                        };
                    }
                    else
                    {
                        var checkInfo = Db.Queryable<BllStockCheckLog>().First(m =>
                    m.IsDel == "0" && m.CRNo == crNo && m.PalletNo == palletNo && m.SkuNo == sku && m.LotNo == lotNo);
                        checkInfo.RealQty = qty;
                        checkInfo.CheckResult = 2;
                        checkInfo.CheckUserId = userId;
                        checkInfo.CheckDate = time;
                        checkInfo.UpdateUser = userId;
                        checkInfo.UpdateTime = time;
                        Db.Updateable(checkInfo).ExecuteCommand();
                    }
                    if (checkDetail.RealQty == null && isContinue == "0")
                    {
                        checkDetail.RealQty = 0;
                    }
                    checkDetail.RealQty += qty;
                    //checkDetail.CheckResult = 1;
                    if (isContinue == "1")
                    {
                        checkDetail.RealQty = qty;
                    }
                    checkDetail.CheckResult = 2;
                    Db.Updateable(checkDetail).ExecuteCommand();
                    Db.Insertable(crLog).ExecuteCommand();
                    if (isContinue == "0")
                    {
                        Db.Insertable(crLog).ExecuteCommand();
                    }
                }
                else
                {
                    Db.RollbackTran();
                    throw new Exception("盘点结果不符,请核实!");
                }
                var checkLogNum = Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == crNo && m.PalletNo == palletNo && m.SkuNo == sku && m.LotNo == lotNo);
@@ -351,7 +445,7 @@
            {
                str += " and PalletNo like @palletno";
            }
            //排序
            str += " order by LotNo,LocatNo,PalletNo";
            List<DataStockDetail> stockList = Db.Ado.SqlQuery<DataStockDetail>(str, new
@@ -376,7 +470,7 @@
                {
                    throw new Exception("托盘号不能为空");
                }
                var detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m=>m.Id).ToList();
                var detail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m => m.Id).ToList();
                var info = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && detail.Contains(m.StockDetailId))
                    .GroupBy(m => m.BoxNo).Select(a => new PdaPalletNoCheckDto
                    {
@@ -385,7 +479,7 @@
                    }).ToList();
                return info;
            }
            catch(Exception e)
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
@@ -400,9 +494,9 @@
                {
                    throw new Exception("箱码不能为空");
                }
                var info = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo)
                    .GroupBy(m => new{m.BoxNo,m.SkuNo,m.SkuName,m.LotNo}).Select(a => new PdaPalletNoCheckDto
                    .GroupBy(m => new { m.BoxNo, m.SkuNo, m.SkuName, m.LotNo }).Select(a => new PdaPalletNoCheckDto
                    {
                        BoxNo = a.BoxNo,
                        SkuNo = a.SkuNo,
@@ -410,7 +504,7 @@
                        LotNo = a.LotNo,
                        Qty = SqlFunc.AggregateSum(a.Qty)
                    }).ToList();
                if (info.Count>1)
                if (info.Count > 1)
                {
                    throw new Exception("当前箱码查询出多条物料或批次信息,请核实");
                }
@@ -424,7 +518,7 @@
        }
        //解绑原托盘绑定新托盘
        public void SaveUnbind(string palletNo,string boxNo,string palletNoNew,int userId)
        public void SaveUnbind(string palletNo, string boxNo, string palletNoNew, int userId)
        {
            try
            {
@@ -449,7 +543,7 @@
                    throw new Exception("原托盘上未查到箱支明细,请核实");
                }
                //库存明细id
                var infoIds = infos.GroupBy(m => m.StockDetailId).Select(a =>a.StockDetailId).ToList();
                var infoIds = infos.GroupBy(m => m.StockDetailId).Select(a => a.StockDetailId).ToList();
                if (infoIds.Count == 0)
                {
                    throw new Exception("未查询到当前箱码信息,请核实");
@@ -484,7 +578,7 @@
                                }
                            }
                        }
                    }
                    }
                    #endregion
                }
                if (!newPalletHaveGoods)//新托盘上没有物品
@@ -519,7 +613,7 @@
                    }
                    var stockDetail2 = stockDetailList.FirstOrDefault(w => w.SkuNo == stockDetail1.SkuNo && w.LotNo == stockDetail1.LotNo);
                    var stId = 0;
                    var stId = 0;
                    if (stockDetail2 == null) //添加-新托盘上没有同物料同批次物品
                    {
                        //新托盘添加库存明细
@@ -656,6 +750,10 @@
                {
                    throw new Exception("托盘储位信息不存在,请检查!");
                }
                if (models.WareHouseNo != "W02")
                {
                    throw new Exception("该托盘未在平库内,请检查!");
                }
                return models.LocatNo;
            }
            catch (Exception ex)
@@ -682,6 +780,10 @@
                {
                    throw new Exception("托盘储位信息不存在,请检查!");
                }
                if (models.WareHouseNo != "W02")
                {
                    throw new Exception("该托盘未在平库内,请检查!");
                }
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == models.LocatNo);
                if (storageLocat == null)
                {
@@ -703,6 +805,204 @@
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 获取已分配的出库单据
        /// </summary>
        /// <returns></returns>
        public List<string> GetRunSoNoticeList()
        {
            try
            {
                var allotList = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.Status == "2").Select(m => m.SONo).Distinct().ToList();
                return allotList;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 根据托盘号获取托盘上物料信息
        /// </summary>
        /// <param name="palletNo"></param>
        /// <returns></returns>
        public List<DataStockDetail> GetSkuInfoByPalletNo(string palletNo)
        {
            try
            {
                if (string.IsNullOrEmpty(palletNo))
                {
                    throw new Exception("请扫描托盘条码!");
                }
                var skuInfoList = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
                return skuInfoList;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// 根据出库单号获取分配的托盘信息
        /// </summary>
        /// <param name="soNo"></param>
        /// <returns></returns>
        public List<string> GetPalletNoListBySoNo(string soNo)
        {
            try
            {
                if (string.IsNullOrEmpty(soNo))
                {
                    throw new Exception("请选择出库单号!");
                }
                var palletNoList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SONo == soNo).Select(m => m.PalletNo).Distinct().ToList();
                return palletNoList;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// agv转运呼叫小车-开发未完成待确认
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="areaNo"></param>
        /// <param name="ruku"></param>
        public void AgvTransport(string palletNo, string areaNo, string ruku, int userId)
        {
            if (string.IsNullOrEmpty(palletNo))
            {
                throw new Exception("请扫描托盘条码!");
            }
            if (string.IsNullOrEmpty(areaNo) && string.IsNullOrEmpty(ruku))
            {
                throw new Exception("请选择目标区域或入库口!");
            }
            try
            {
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                if (stockDetail == null)
                {
                    throw new Exception("托盘库存信息不存在,请检查!");
                }
                if (string.IsNullOrEmpty(stockDetail.LocatNo))
                {
                    throw new Exception("托盘储位信息不存在,请检查!");
                }
                if (stockDetail.WareHouseNo != "W02")
                {
                    throw new Exception("该托盘未在平库内,请检查!");
                }
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == stockDetail.LocatNo);
                if (storageLocat == null)
                {
                    throw new Exception("储位信息不存在,请检查!");
                }
                //开启事务
                Db.BeginTran();
                //修改库存明细信息
                stockDetail.WareHouseNo = "";
                stockDetail.RoadwayNo = "";
                stockDetail.AreaNo = "";
                stockDetail.LocatNo = "";
                Db.Updateable(stockDetail).ExecuteCommand();
                //修改储位地址状态
                storageLocat.Status = "0";//空储位
                Db.Updateable(storageLocat).ExecuteCommand();
                #region 呼叫小车代码
                #endregion
                //提交事务
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// agv转运呼叫小车取货-开发未完成待确认
        /// </summary>
        /// <param name="soNo"></param>
        /// <param name="palletNo"></param>
        /// <param name="areaNo"></param>
        /// <param name="userId"></param>
        public void AgvTransport2(string soNo,string palletNo, string areaNo, int userId)
        {
            if (string.IsNullOrEmpty(soNo))
            {
                throw new Exception("请选择出库单据!");
            }
            if (string.IsNullOrEmpty(palletNo))
            {
                throw new Exception("请扫描托盘条码!");
            }
            if (string.IsNullOrEmpty(areaNo))
            {
                throw new Exception("请选择目标区域!");
            }
            try
            {
                var notice = Db.Queryable<BllExportNotice>().First(w => w.IsDel == "0" && w.SONo == soNo);
                if (notice == null)
                {
                    throw new Exception("出库单据信息不存在,请检查!");
                }
                var allot = Db.Queryable<BllExportAllot>().First(w => w.IsDel == "0" && w.SONo == soNo && w.PalletNo == palletNo);
                if (allot == null)
                {
                    throw new Exception("该托盘出库分配信息不存在,请检查!");
                }
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                if (stockDetail == null)
                {
                    throw new Exception("托盘库存信息不存在,请检查!");
                }
                if (string.IsNullOrEmpty(stockDetail.LocatNo))
                {
                    throw new Exception("托盘储位信息不存在,请检查!");
                }
                if (stockDetail.WareHouseNo != "W02")
                {
                    throw new Exception("该托盘未在平库内,请检查!");
                }
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == stockDetail.LocatNo);
                if (storageLocat == null)
                {
                    throw new Exception("储位信息不存在,请检查!");
                }
                //开启事务
                Db.BeginTran();
                //修改库存明细信息
                stockDetail.WareHouseNo = "";
                stockDetail.RoadwayNo = "";
                stockDetail.AreaNo = "";
                stockDetail.LocatNo = "";
                Db.Updateable(stockDetail).ExecuteCommand();
                //修改储位地址状态
                storageLocat.Status = "0";//空储位
                Db.Updateable(storageLocat).ExecuteCommand();
                #region 呼叫小车代码
                #endregion
                //提交事务
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
        #endregion
    }