chengsc
2025-05-08 8a83e6f21af0a764950e45b2565a370fff74daa5
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -21,6 +21,7 @@
using Model.ModelDto.DataDto;
using System.Xml.Schema;
using ZXing.OneD;
using System.Threading.Tasks;
namespace WMS.BLL.BllPdaServer
{
@@ -1897,6 +1898,172 @@
            }
        }
        /// <summary>
        /// 保存指定的储位
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="locateNo"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void SaveAppointLocate(string palletNo, string locateNo, int userId)
        {
            try
            {
                //托盘库存信息
                var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
                if (stockDetailList.Count(m=> string.IsNullOrWhiteSpace(m.LocatNo)) > 0)
                {
                    throw new Exception("托盘没有在平库储位上");
                }
                //判断托盘的储位是否是平库
                var stockDetail = stockDetailList.First();
                var oldLocate = stockDetail.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 == oldLocate && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0");
                if (pingLocateInfo == null)
                {
                    throw new Exception("当前托盘所在的储位没有在系统中找到信息");
                }
                var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();
                //验证物料是否有成品
                foreach (var item in stockDetailList)
                {
                    var skuItem = skuList.First(m => m.SkuNo == item.SkuNo);
                    if (skuItem.Type == "2")
                    {
                        throw new Exception("成品物料请入成品库");
                    }
                }
                //储位
                var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateNo);
                if (locate == null)
                {
                    throw new Exception("未查询到储位的信息");
                }
                if (locate.WareHouseNo != "W02")
                {
                    throw new Exception("只能指定立库的储位");
                }
                if (locate.Status != "0" || locate.Flag != "0")
                {
                    throw new Exception("该储位状态不是空储位或标志不是正常的");
                }
                Db.BeginTran();
                try
                {
                    var time = DateTime.Now;
                    //判断当前托盘是否存在绑定信息
                    var task = Db.Queryable<LogTask>().First(m=> m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1") && m.OrderType == "0" && m.Type == "0");
                    var upShelf = Db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1"));
                    if (task != null)
                    {
                        if (task.Status == "1")
                        {
                            throw new Exception("托盘正在执行任务,不可指定储位");
                        }
                        if (task.Status == "0")
                        {
                            if (upShelf != null)
                            {
                                if (upShelf.Status == "1")
                                {
                                    throw new Exception("托盘正在执行上架任务,不可指定储位");
                                }
                                if (upShelf.Status == "0")
                                {
                                    if (locate.LocatNo == task.EndLocat)
                                    {
                                        throw new Exception("已指定储位,无需重复指定");
                                    }
                                    //重新指定储位
                                    task.EndLocat = locate.LocatNo;
                                    task.EndRoadway = locate.RoadwayNo;
                                    upShelf.LocatNo = locate.LocatNo;
                                    upShelf.RoadwayNo = locate.RoadwayNo;
                                    Db.Updateable(task).ExecuteCommand();
                                    Db.Updateable(upShelf).ExecuteCommand();
                                    new OperationASNServer().AddLogOperationAsn("PDA模块", "指定储位", palletNo, "编辑", $"指定了储位:{locate.LocatNo}、托盘码:{palletNo}的信息", userId);
                                    Db.CommitTran();
                                    return;
                                }
                            }
                            else
                            {
                                throw new Exception("查询出任务但没有上架记录,信息错误");
                            }
                        }
                    }
                    // 添加入库日志记录
                    var taskNo = new Common().GetMaxNo("TK");
                    var addTask = new LogTask    //入库任务
                    {
                        TaskNo = taskNo,
                        Sender = "WMS",
                        Receiver = "WCS",
                        IsSuccess = 1, //是否下发成功 0失败 1成功
                        SendDate = DateTime.Now,  //发送时间
                        //BackDate = DateTime.Now,  //返回时间
                        StartRoadway = "",            // 起始巷道
                        StartLocat = oldLocate,//起始位置
                        EndLocat = locate.LocatNo,//目标位置
                        EndRoadway = locate.RoadwayNo,  // 目标巷道
                        PalletNo = palletNo,//托盘码
                        IsSend = 1,//是否可再次下发
                        IsCancel = 1,//是否可取消
                        IsFinish = 1,//是否可完成
                        Type = "0",//任务类型 0 入库任务 1 出库任务  2 移库任务
                        Status = "0",//任务状态0:等待执行1正在执行2执行完成
                        OrderType = "0",//0 入库单 1 出库单  2 盘点单  3 移库单
                        Msg = $"{oldLocate}到=>>{locate.LocatNo}的入库任务", //关键信息
                    };
                    Db.Insertable(addTask).ExecuteCommand();
                    //添加托盘上架记录
                    var upShelfAdd = new BllPalletUpShelf()
                    {
                        TaskNo = addTask.TaskNo,
                        TraceNo = "",
                        PalletNo = palletNo,
                        SkuNo = stockDetail.SkuNo,
                        SkuName = stockDetail.SkuName,
                        LotNo = stockDetail.LotNo,
                        Status = "0",
                        WareHouseNo = locate.WareHouseNo,
                        RoadwayNo = locate.RoadwayNo,
                        AreaNo = locate.AreaNo,
                        LocatNo = locate.LocatNo,
                        CreateUser = 0,
                    };
                    Db.Insertable(upShelfAdd).ExecuteCommand();
                    locate.Status = "2";
                    Db.Updateable(locate).ExecuteCommand();
                    new OperationASNServer().AddLogOperationAsn("PDA模块", "指定储位", palletNo, "编辑", $"指定了储位:{locate.LocatNo}、托盘码:{palletNo}的信息", userId);
                    Db.CommitTran();
                }
                catch (Exception e)
                {
                    Db.RollbackTran();
                    throw new Exception(e.Message);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        #endregion