Administrator
2025-05-08 f928756ecbf68886443ab87ce458b99aba73a763
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -128,39 +128,8 @@
                var pNum = 0;//托盘物品数量 
                var bNum = 0;//箱码物品数量 
                if (pack == null)
                {
                    throw new Exception("获取物料包装信息失败,请核实!");
                }
                if (pack.L5Num.HasValue)
                {
                    pNum = (int)pack.L5Num;
                    bNum = (int)pack.L4Num;
                }
                else if (pack.L4Num.HasValue)
                {
                    pNum = (int)pack.L4Num;
                    bNum = (int)pack.L3Num;
                }
                else if (pack.L3Num.HasValue)
                {
                    pNum = (int)pack.L3Num;
                    bNum = (int)pack.L2Num;
                }
                else if (pack.L2Num.HasValue)
                {
                    pNum = (int)pack.L2Num;
                    bNum = (int)pack.L1Num;
                }
                else if (pack.L1Num.HasValue)
                {
                    pNum = (int)pack.L1Num;
                    bNum = (int)pack.L1Num;
                }
                if (pNum == 0 || bNum == 0)
                {
                    throw new Exception($"绑定失败,{detail.SkuNo}物品包装未找到!");
                }
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
                #endregion
@@ -1123,6 +1092,7 @@
        {
            try
            {
                Db.BeginTran();
                #region 判断
                //0:成品入库 1:采购入库 3:退货入库 4:车间余料入库 8:生产退料入库
@@ -1187,54 +1157,23 @@
                {
                    throw new Exception("该托盘已有储位信息,请核实!");
                }
                if (stockDetail != null && (stockDetail.SkuNo != detail.SkuNo || stockDetail.LotNo != model.LotNo))
                {
                    throw new Exception("该托盘在库存已有其它物料批次信息,请核实!");
                }
                //if (stockDetail != null && (stockDetail.SkuNo != detail.SkuNo || stockDetail.LotNo != model.LotNo))
                //{
                //    throw new Exception("该托盘在库存已有其它物料批次信息,请核实!");
                //}
                #endregion
                #region 包装
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo);
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);    // liudl 由Sku包装编号变更为入库单明细包装编号
                //var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);    // liudl 由Sku包装编号变更为入库单明细包装编号
                var pNum = 0;//托盘物品数量 
                var bNum = 0;//箱码物品数量 
                if (pack == null)
                {
                    throw new Exception("获取物料包装失败,请核实!");
                }
                if (pack.L5Num.HasValue)
                {
                    pNum = (int)pack.L5Num;
                    bNum = (int)pack.L4Num;
                }
                else if (pack.L4Num.HasValue)
                {
                    pNum = (int)pack.L4Num;
                    bNum = (int)pack.L3Num;
                }
                else if (pack.L3Num.HasValue)
                {
                    pNum = (int)pack.L3Num;
                    bNum = (int)pack.L2Num;
                }
                else if (pack.L2Num.HasValue)
                {
                    pNum = (int)pack.L2Num;
                    bNum = (int)pack.L1Num;
                }
                else if (pack.L1Num.HasValue)
                {
                    pNum = (int)pack.L1Num;
                    bNum = (int)pack.L1Num;
                }
                if (pNum == 0 || bNum == 0)
                {
                    throw new Exception($"绑定失败,{detail.SkuNo}物品包装未找到!");
                }
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
                #endregion
@@ -1330,10 +1269,16 @@
                {
                    tags = "1";
                }
                //验证库存托盘是否有贴标物料
                var skuStr = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0" && m.IsPasteCode == "1").Select(m => m.SkuNo).ToList();
                var sdHave = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && skuStr.Contains(m.SkuNo));
                if (sdHave>0)
                {
                    throw new Exception("当前托盘含有贴标物料信息,不能组托");
                }
                // 判断库存明细是否已有此托盘信息  
                var sd1 = Db.Queryable<DataStockDetail>()
                    .First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo && m.LotNo == bind.LotNo);
                    .First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo && m.SkuNo == detail.SkuNo && m.LotNo == bind.LotNo);
                var sdId1 = 0;
                if (sd1 != null)
                {
@@ -1426,8 +1371,6 @@
                }
                #endregion
                #region 更改组托信息
                var isSample = "0";//是否取样
@@ -1497,10 +1440,12 @@
                Db.Updateable(notice).ExecuteCommand();
                #endregion
                #region 库存明细
                #region 更改库存明细数量
                sd1.Qty = bind.Qty;
                //更改库存明细数量
                Db.Updateable(sd1).Where(m => m.Id == sdId1).ExecuteCommand();
                #endregion
                #region 库存
@@ -1574,9 +1519,12 @@
                sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{model.AsnNo}','组盘','0',getDate(),{userId},NULL,NULL);";
                Db.Ado.ExecuteCommand(sqlStr);
                new OperationASNServer().AddLogOperationAsn("PDA模块", "托盘绑定", model.AsnNo, "添加", $"添加了托盘码为:{model.PalletNo}的组盘信息", userId);
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
@@ -1589,13 +1537,11 @@
        {
            try
            {
                var item = Expressionable.Create<BllArrivalNoticeDetail>()
                .AndIF(true, it => it.IsDel == "0")
                .ToExpression();//注意 这一句 不能少
                var modelList = Db.Queryable<BllArrivalNoticeDetail>().Where(item)
                    .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo && tb2.IsDel == "0" && (tb1.Status == "0" || tb1.Status == "1"))
                    .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo && tb3.IsDel == "0" && tb3.IsPasteCode == "1")
                var modelList = Db.Queryable<BllArrivalNoticeDetail>()
                    .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo )
                    .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo )
                    .Where((tb1, tb2, tb3) => tb1.IsDel == "0" && tb2.IsDel == "0" && (tb2.Status == "0" || tb2.Status == "1") && tb3.IsDel == "0" && tb3.IsPasteCode == "1")
                    .Select((tb1, tb2, tb3) => tb1.ASNNo).Distinct().ToList();
                return modelList;
@@ -1613,13 +1559,11 @@
        {
            try
            {
                var item = Expressionable.Create<BllArrivalNoticeDetail>()
                .AndIF(true, it => it.IsDel == "0")
                .ToExpression();//注意 这一句 不能少
                var modelList = Db.Queryable<BllArrivalNoticeDetail>().Where(item)
                     .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo && tb2.IsDel == "0" && (tb2.Status == "0" || tb2.Status == "1"))
                     .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo && tb3.IsDel == "0" && tb3.IsPasteCode == "0")
                var modelList = Db.Queryable<BllArrivalNoticeDetail>()
                     .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo )
                     .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo )
                     .Where((tb1, tb2, tb3) => tb1.IsDel == "0" && tb2.IsDel == "0" && (tb2.Status == "0" || tb2.Status == "1") && tb3.IsDel == "0" && tb3.IsPasteCode == "0")
                     .Select((tb1, tb2, tb3) => tb1.ASNNo).Distinct().ToList();
                return modelList;
@@ -1859,6 +1803,99 @@
            }
        }
        /// <summary>
        /// 验证托盘是否存在
        /// </summary>
        /// <param name="palletNo">托盘号</param>
        /// <returns>"":可使用 -1:不可使用(原因)</returns>
        public string IsEnablePalletNo(string palletNo)
        {
            string sqlMsg = "";
            string sqlString = string.Empty;
            try
            {
                sqlString = $"select * from SysPallets where PalletNo = '{palletNo}' and isdel = '0';";
                var models = Db.Ado.SqlQuery<PalletBindVm>(sqlString);
                if (models.Count > 1)
                {
                    sqlMsg = "-1:存在重复托盘号,请检查!";
                    return sqlMsg;
                }
                if (models.Count > 0)
                {
                    if (models[0].Status == "1")
                    {
                        var detail = Db.Queryable<DataStockDetail>().First(m=>m.PalletNo == palletNo );
                        if (detail!= null && !string.IsNullOrWhiteSpace(detail.LocatNo))
                        {
                            var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList();
                            var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == detail.LocatNo && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0");
                            if (pingLocateInfo == null)
                            {
                                sqlMsg = "-1:托盘使用中,此托盘应在库内请核实!";
                            }
                        }
                    }
                }
                else
                {
                    sqlMsg = "-1:托盘号不存在!";
                }
                return sqlMsg;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 根据单据获取标签数量
        /// </summary>
        /// <param name="asnNo">入库单</param>
        /// <param name="asnDetailId">入库单明细号</param>
        /// <returns></returns>
        public BoxListInfoDto GetBoxCountByAsn(string asnNo,int? asnDetailId)
        {
            try
            {
                var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == asnDetailId);
                if (detail == null)
                {
                    throw new Exception("没有查询到单据明细信息");
                }
                var data = new BoxListInfoDto()
                {
                    SkuNo = detail.SkuNo,
                    SkuName = detail.SkuName,
                    LotNo = detail.LotNo,
                };
                //获取状态是未组托的标签信息
                var models = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId ).GroupBy(m=> new { m.ProductionTime,m.ExpirationTime }).Select(m=>new { m.ProductionTime ,m.ExpirationTime}).OrderBy(m=>m.ProductionTime).ToList();//&& m.Status == "0"
                foreach (var item in models)
                {
                    var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList();
                    if (boxNoList.Count > 0)
                    {
                        data.BoxNoList = boxNoList;
                        data.Date1 = item.ProductionTime.ToString();
                        data.Date2 = item.ExpirationTime.ToString();
                        break;
                    }
                }
                return data;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
@@ -1906,49 +1943,7 @@
       
        /// <summary>
        /// 验证托盘是否存在
        /// </summary>
        /// <param name="palletNo">托盘号</param>
        /// <returns>"":可使用 -1:不可使用(原因)</returns>
        public string IsEnablePalletNo(string palletNo)
        {
            string sqlMsg = "";
            string sqlString = string.Empty;
            try
            {
                sqlString = $"select * from SysPallets where PalletNo = '{palletNo}' and isdel = '0';";
                var models = Db.Ado.SqlQuery<PalletBindVm>(sqlString);
                if (models.Count > 1)
                {
                    sqlMsg = "-1:存在重复托盘号,请检查!";
                    return sqlMsg;
                }
                if (models.Count > 0)
                {
                    if (models[0].Status == "1")
                    {
                        sqlString = $"select count(id) from DataStockDetail where PalletNo = '{palletNo}' and isnull(LocatNo,'') != '' and isdel = '0';";
                        int rowNum = Db.Ado.GetInt(sqlString);
                        if (rowNum > 0)
                        {
                            sqlMsg = "-1:托盘使用中,此托盘应在库内请核实!";
                        }
                    }
                }
                else
                {
                    sqlMsg = "-1:托盘号不存在!";
                }
                return sqlMsg;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        // 根据箱码或托盘号获取箱支信息   liudl 
        public List<BoxInfoDto> GetBoxInfos(BoxInfoVm model)
@@ -3297,7 +3292,7 @@
            try
            {
                string strMsg = "";
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo && w.Status == "0" && w.WareHouseNo == "W02");
                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo && w.Status == "0" && w.WareHouseNo == "W04");
                if (storageLocat == null)
                {
                    throw new Exception("-1:地码(储位信息)不存在或非空闲状态,请核查!");
@@ -5434,7 +5429,7 @@
                    //修改库存明细信息
                    foreach (var item in stockDetail)
                    {
                        item.Status = "0";                                  // 状态更改为待分配
                        //item.Status = "0";                                  // 状态更改为待分配
                        item.WareHouseNo = storageLocat.WareHouseNo;        // 所属仓库
                        item.RoadwayNo = storageLocat.RoadwayNo;            // 所属巷道
                        item.AreaNo = storageLocat.AreaNo;                  // 所属区域
@@ -5466,14 +5461,14 @@
                        SendDate = DateTime.Now,  //发送时间
                        BackDate = DateTime.Now,  //返回时间
                        StartLocat = "",//起始位置
                        EndLocat = "平库",//目标位置
                        EndLocat = model.LocatNo,//目标位置
                        PalletNo = model.PalletNo,//托盘码
                        IsSend = 0,//是否可再次下发
                        IsCancel = 0,//是否可取消
                        IsFinish = 0,//是否可完成
                        Type = "0",//任务类型 0 入库任务 1 出库任务  2 移库任务
                        Status = "2",//任务状态0:等待执行1正在执行2执行完成
                        OrderType = "3",//0 入库单 1 出库单  2 盘点单  3 移库单
                        OrderType = "0",//0 入库单 1 出库单  2 盘点单  3 移库单
                        Msg = "平库的入库任务",
                    };
                    Db.Insertable(exTask).ExecuteCommand();