Demo
2024-03-10 82298d89a9a05e4df7babbe730e2468075f4fb3b
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -141,6 +141,7 @@
                            SupplierLot = stocks.First().SupplierLot,
                            IsWave = "0",
                            WaveNo = "",
                            IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo)? "0":"1",
                            CreateUser = 0,
                        };
@@ -330,42 +331,60 @@
            }
        }
        public List<ExStockInfoDto> GetStockGroupList(string type, string msg)
        public List<ExStockInfoDto> GetStockGroupList(string type, string ownerNo, string msg)
        {
            try
            {
                if (string.IsNullOrEmpty(type))
                {
                    throw new Exception("请选择出库单类型");
                }
                if (type == "6" && string.IsNullOrEmpty(ownerNo))
                {
                    throw new Exception("代储单据请选择货主");
                }
                var plnList = new List<string>() { "100099" };
                var skuList = new List<string>();
                var sku = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0" && !plnList.Contains(m.SkuNo)); //排除空托盘的物料集合
                string skuType = string.Empty;
                string inspectStatus = string.Empty;
                switch (type)//0:原料 1:包材 2:成品 3:耗材 4:半成品
                {
                    case "0"://成品入库
                    case "0"://成品出库
                        skuType = "(2)";
                        inspectStatus = "1";
                        break;
                    case "1"://领料出库
                        skuType = "(0,1,3)";
                        inspectStatus = "1";
                        break;
                    case "2"://抽检出库
                        skuType = "(2)";
                        skuType = "(0,1,2,3)";
                        inspectStatus = "0,1,2";
                        break;
                    case "3"://物料取样出库
                        skuType = "(0)";
                        skuType = "(0,1,2,3)";
                        inspectStatus = "0";
                        break;
                    case "4"://不合格品出库
                        skuType = "(2)";
                        skuType = "(0,1,2,3)";
                        inspectStatus = "2";
                        break;
                    case "5"://中间品出库
                        skuType = "(4)";
                        inspectStatus = "0,1";
                        break;
                    case "6"://代储出库
                        skuType = "(2)";
                        skuType = "(0,1,2,3)";
                        inspectStatus = "0,1";
                        break;
                    case "8"://寄存出库
                        skuType = "(3)";
                        skuType = "(0,1,2,3)";
                        inspectStatus = "0,1";
                        break;
                    default: //其它出库
                        skuType = "(0,1,2,3,4)";
                        inspectStatus = "0,1";
                        break;
                }
                skuList = sku.Where(m => skuType.Contains(m.Type)).Select(m => m.SkuNo).ToList();
@@ -378,8 +397,9 @@
                var stockDetailRst = new StockDetailServer();
                Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
                    //.And(it => it.WareHouseNo == wareHouseNo)
                    .And(it => it.InspectStatus == "1")
                    .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus))
                    .And(m => skuList.Contains(m.SkuNo))
                    .AndIF(type == "6", m => m.OwnerNo == ownerNo)//代储出库需要关联货主
                    .AndIF(!string.IsNullOrWhiteSpace(msg), it => (it.SkuNo.Contains(msg) || it.SkuName.Contains(msg) || it.LotNo.Contains(msg)))
                    .And(it => (it.Qty - it.LockQty - it.FrozenQty) > 0)
                    .And(it => (it.Status == "0" || it.Status == "1"))
@@ -1466,11 +1486,11 @@
                                toLocation = outMode;//出库口
                            }
                        }
                        else
                        else
                        {
                            unstackingMode2 = "1";//非成品出库走PDA拆垛
                            toLocation = outMode;//出库口
                        }
                        }
                        #endregion
                        // 储位号
@@ -2087,6 +2107,86 @@
            }
        }
        /// <summary>
        /// wcs返回的成功信号(移库成功)
        /// </summary>
        /// <param name="taskNo">任务号</param>
        /// <param name="userId">操作人</param>
        /// <exception cref="Exception"></exception>
        public void RelocationSuccess(string taskNo, int userId)
        {
            try
            {
                //当前任务信息
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                if (task == null)
                {
                    throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息");
                }
                if (task.Status == "2")
                {
                    throw new Exception("当前任务已完成");
                }
                Db.BeginTran();
                //库存中当前托盘的信息
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
                //当前任务中的目标储位信息
                //当前任务中的原储位
                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat);
                if (locate == null)
                {
                    throw new Exception($"WMS系统中没有该{task.StartLocat}储位对应的信息");
                }
                var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
                if (locate2 == null)
                {
                    throw new Exception($"WMS系统中没有该{task.EndLocat}储位对应的信息");
                }
                try
                {
                    task.Status = "2";//任务状态
                    task.IsSend = 0;
                    task.IsCancel = 0;
                    task.IsFinish = 0;
                    task.FinishDate = DateTime.Now;//完成时间
                    Db.Updateable(task).ExecuteCommand();
                    #region 修改储位状态
                    //原储位改为空储位 0
                    locate.Status = "0";
                    Db.Updateable(locate).ExecuteCommand();
                    //目标储位改为有货物 1
                    locate2.Status = "1";
                    Db.Updateable(locate2).ExecuteCommand();
                    foreach (var item in stockDetail)
                    {
                        item.WareHouseNo = locate2.WareHouseNo;
                        item.AreaNo = locate2.AreaNo;
                        item.RoadwayNo = locate2.RoadwayNo;
                        item.LocatNo = locate2.LocatNo;
                    }
                    Db.Updateable(stockDetail).ExecuteCommand();
                    #endregion
                    Db.CommitTran();
                }
                catch (Exception ex)
                {
                    Db.RollbackTran();
                    throw new Exception(ex.Message);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("完成反馈失败:" + ex.Message);
            }
        }
        //重新下发出库任务
        public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url)
        {
@@ -2208,7 +2308,16 @@
                        //获取储位信息
                        var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                        //获取移库任务对应目标储位信息
                        SysStorageLocat endlocat = new SysStorageLocat();
                        if (task.Type == "2")
                        {
                            endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W03" && a.LocatNo == task.EndLocat);
                            if (endlocat == null)
                            {
                                throw new Exception("未查询到目标储位信息");
                            }
                        }
                        if (locat == null)
                        {
                            Db.RollbackTran();
@@ -2216,6 +2325,11 @@
                        }
                        locat.Status = "1"; //有物品
                        Db.Updateable(locat).ExecuteCommand();
                        if (endlocat != null)
                        {
                            endlocat.Status = "0"; //空储位 0
                            Db.Updateable(endlocat).ExecuteCommand();
                        }
                        if (noticeDetail.FactQty == 0)
                        {
@@ -2454,11 +2568,11 @@
                            {
                                stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList();
                            }
                        }
                        else
                        {
                            stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo  && m.IsDel == "0").ToList(); //&& string.IsNullOrWhiteSpace(m.LotNo)
                            stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0").ToList(); //&& string.IsNullOrWhiteSpace(m.LotNo)
                        }
                        if (stockDetail.Count < 1)
@@ -2466,19 +2580,23 @@
                            throw new Exception("库存不足,无可出库库存");
                        }
                        //0:成品出库、1:领料出库、2:抽检出库、3:物料取样出库、4:不合格品出库、5:中间品出库、6:代储出库、7:其他出库、8:寄存出库
                        if (notice.Type == "0" || notice.Type == "1" || notice.Type == "2" || notice.Type == "5")//成品、原辅料出库
                        if (notice.Type == "0" || notice.Type == "1" )//成品、原辅料出库
                        {
                            stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList();
                        }
                        else if (notice.Type == "3" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//取样出库
                        else if (notice.Type == "3" )//取样出库
                        {
                            stockDetail = stockDetail.Where(m => m.InspectStatus == "0").ToList();
                        }
                        else if (notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")
                        {
                            stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList();
                        }
                        else if (notice.Type == "4")//不合格出库
                        {
                            stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList();
                        }
                        }
                        #region 包装信息
                        var pack = packList.FirstOrDefault(p => p.PackagNo == detail.PackagNo);
@@ -2575,17 +2693,17 @@
                                if (string.IsNullOrWhiteSpace(detail.LotNo))
                                {
                                    detail.LotNo = s.LotNo;
                                }
                                else
                                {
                                    if (!detail.LotNo.Contains(s.LotNo))
                                    {
                                        detail.LotNo += ";" + s.LotNo;
                                        detail.LotNo += ";" + s.LotNo;
                                    }
                                }
                            }
                        }
                        detail.AllotQty += qty;
                        detail.UpdateUser = userId;
@@ -2594,7 +2712,7 @@
                        {
                            detail.Status = "1";
                        }
                        //库存总表
                        //var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo);
                        //stock.LockQty += qty;
@@ -2724,6 +2842,15 @@
                        d.Status = "0";
                        d.UpdateUser = userId;
                        d.UpdateTime = DateTime.Now;
                        if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1:领料出库、
                        {
                            if (d.IsIssueLotNo != "1")
                            {
                                d.LotNo = "";
                            }
                        }
                    }
                    notice.Status = "0";
                    notice.UpdateUser = userId;
@@ -3071,10 +3198,7 @@
            var lie = int.Parse(oldAddress.Substring(2, 2));
            var ceng = int.Parse(oldAddress.Substring(4, 2));
            var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum
                                from SysStorageLocat
                                where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in '{category}'
                                order by distNum;";
            var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{category.AreaNo}') order by distNum;";
            var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
            if (addressModels.Count > 0)   // 判断同巷道内排空库位