chengsc
2024-07-27 75efeb2ec42214f7a70f6cccc3374ccf458740be
修改问题
6个文件已修改
512 ■■■■■ 已修改文件
Wms/Model/InterFaceModel/AsnModels.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs 449 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/LogEntity/LogTask.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/AsnModels.cs
@@ -72,6 +72,10 @@
        public string PalletNo { get; set; }
        public string HouseNo { get; set; }
        public string RoadwayNo { get; set; }
        /// <summary>
        /// 任务模式 0/空:正常任务  1:参观任务
        /// </summary>
        public string TaskModel { get; set; }
    }
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -1186,6 +1186,279 @@
            }
        }
        // 申请巷道 参观模式
        public OutCommandDto RequestRoadWayModel(string palletNo, string houseNo)
        {
            try
            {
                #region 验证托盘合法性
                //验证托盘条码是否为空
                if (string.IsNullOrEmpty(palletNo))
                {
                    throw new Exception("请输入要申请的托盘条码");
                }
                //验证所属仓库是否为空
                if (string.IsNullOrEmpty(houseNo))
                {
                    throw new Exception("请选择所属仓库");
                }
                //验证是否为平库入库
                if (houseNo == "W02")
                {
                    throw new Exception("平库请使用PDA手持进行平库入库");
                }
                var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//托盘信息
                //判断托盘条码是否有效
                if (stock == null)
                {
                    throw new Exception("托盘条码不受WMS管理,不可入库!");
                }
                #endregion
                OutCommandDto comDto;//返回wcs的入库命令
                #region
                #region 判断任务是否已经存在,若存在直接返回任务;
                var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
                && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
                if (beingTask != null)
                {
                    comDto = new OutCommandDto()
                    {
                        PalletNo = palletNo,//托盘号
                        StartRoadway = beingTask.StartRoadway, // 起始巷道
                        StartLocate = "", // 起始位置
                        EndLocate = beingTask.EndLocat, // 目标位置
                        EndRoadway = beingTask.EndRoadway,  //  目标巷道
                        TaskNo = beingTask.TaskNo, // 任务号
                        TaskType = "0",// 任务类型 (出库)
                        OutMode = "",  //目标地址
                        Order = 1
                    };
                    if (beingTask.IsSuccess == 0)
                    {
                        beingTask.IsSuccess = 1;
                        beingTask.Status = "1";
                        Db.Updateable(beingTask).ExecuteCommand();
                    }
                    return comDto;
                }
                #endregion
                var areaNoStr = "演示区域";
                var allotLocate = new AllotLocation();
                #region 根据sku确认区域划分
                var laneAllot = 0; //储位跳巷分配 0:跳着分配(一个一个分配)1:巷道按照优先级分配,同优先级顺序分配(一个巷道满了再分配下一个的巷道储位)
                var funSet3 = Db.Queryable<SysFunSetting>().First(m => m.IsDel == "0" && m.FunSetName == "储位跳巷分配" && m.IsEnable == "NO");
                if (funSet3 != null)
                {
                    switch (funSet3.SetValue)
                    {
                        case "JumpLaneAllot":
                            laneAllot = 0;//立库储位分配 巷道同优先级巷道跳着分配(一个一个分配)
                            break;
                        case "RankLaneAllot":
                            laneAllot = 1;//立库储位分配 巷道按照优先级分配,同优先级顺序分配(一个巷道满了再分配下一个的巷道储位)
                            break;
                        default:
                            laneAllot = 1;// 默认 跳着分配
                            break;
                    }
                }
                var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && m.AreaNo == areaNoStr)
                    .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList();
                SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m => m.IsDel == "0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //巷道最后一次使用记录
                #endregion
                #region 确定巷道排序
                List<string> roadList2 = new List<string>();
                List<string> roadSmall = new List<string>();
                List<string> roadLarge = new List<string>();
                if (useLog != null)
                {
                    roadList2.Add(useLog.RoadwayNo);
                    foreach (var r in roadList)
                    {
                        if (r == useLog.RoadwayNo)
                        {
                            continue;
                        }
                        //如果结果为0,则说明两个字符串相等;  ABC  BCE
                        //如果结果小于0,则说明第一个字符串小于第二个字符串;
                        //如果结果大于0,则说明第一个字符串大于第二个字符串。
                        var bol = String.CompareOrdinal(r, useLog.RoadwayNo);
                        if (bol < 0)
                        {
                            roadSmall.Add(r);
                        }
                        if (bol > 0)
                        {
                            roadLarge.Add(r);
                        }
                    }
                    roadList2.AddRange(roadLarge);
                    roadList2.AddRange(roadSmall);
                }
                roadList = roadList2;
                #endregion
                var roadNo = "";
                if (laneAllot == 0)//跳巷道平均分配
                {
                    //取各巷道所有排第一个合适位
                    foreach (var l in roadList)
                    {
                        //如果上次是当前巷道则跳出
                        if (useLog != null && l == useLog.RoadwayNo)
                        {
                            continue;
                        }
                        var locateCount = Db.Queryable<SysStorageLocat>()
                            .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == l).Count();
                        var taskNum = Db.Queryable<LogTask>()
                            .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l)
                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                        if (locateCount - taskNum > 0)
                        {
                            roadNo = l;
                        }
                        //当前巷有位置则退出
                        if (roadNo != null)
                        {
                            break;
                        }
                    }
                    //如果跳巷道并且未找到合适空储位,则跳到最后一次使用的巷道查询
                    if (roadNo == null)
                    {
                        if (useLog != null)
                        {
                            var locateCount = Db.Queryable<SysStorageLocat>()
                                .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == useLog.RoadwayNo).Count();
                            var taskNum = Db.Queryable<LogTask>()
                                .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == useLog.RoadwayNo)
                                .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                            if (locateCount - taskNum > 0)
                            {
                                roadNo = useLog.RoadwayNo;
                            }
                        }
                    }
                }
                else//按照巷道优先级分配
                {
                    foreach (var item in roadList)
                    {
                        var locateCount = Db.Queryable<SysStorageLocat>()
                            .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == item).Count();
                        var taskNum = Db.Queryable<LogTask>()
                            .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" ||  m.Status == "1") && m.EndRoadway == item)
                            .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count();
                        if (locateCount - taskNum > 0)
                        {
                            roadNo = item;
                        }
                        //当前巷有位置则退出
                        if (roadNo != null)
                        {
                            break;
                        }
                    }
                }
                if (string.IsNullOrWhiteSpace(roadNo))
                {
                    throw new Exception("未查询到空储位巷道");
                }
                Db.BeginTran();
                try
                {
                    //添加巷道使用记录
                    var log = new SysRoadwayUseLog
                    {
                        RoadwayNo = roadNo,
                        WareHouseNo = houseNo,
                        Row = 0,
                        Column = 0,
                        Layer = 0,
                    };
                    Db.Insertable(log).ExecuteCommand();
                    // 添加入库日志记录
                    var taskNo = new Common().GetMaxNo("TK");
                    var exTask = new LogTask    //入库任务
                    {
                        TaskNo = taskNo,
                        Sender = "WMS",
                        Receiver = "WCS",
                        IsSuccess = 1, //是否下发成功 0失败 1成功
                        SendDate = DateTime.Now,  //发送时间
                        BackDate = DateTime.Now,  //返回时间
                        StartRoadway = "",            // 起始巷道
                        StartLocat = "",//起始位置
                        EndLocat = "",//目标位置
                        EndRoadway = roadNo,  // 目标巷道
                        PalletNo = palletNo,//托盘码
                        IsSend = 1,//是否可再次下发
                        IsCancel = 1,//是否可取消
                        IsFinish = 1,//是否可完成
                        Type = "0",//任务类型 0 入库任务 1 出库任务  2 移库任务
                        Status = "1",//任务状态0:等待执行1正在执行2执行完成
                        OrderType = "0",//0 入库单 1 出库单  2 盘点单  3 移库单
                        Msg = "入库口到=>>" + roadNo + "巷道的入库任务", //关键信息
                        TaskModel = "1"  //任务模式  1:演示模式
                    };
                    Db.Insertable(exTask).ExecuteCommand();
                    Db.CommitTran();
                    comDto = new OutCommandDto()
                    {
                        PalletNo = palletNo,//托盘号
                        StartRoadway = "",
                        StartLocate = "", // 起始位置
                        EndLocate = "", // 目标位置
                        EndRoadway = roadNo,   // 目标巷道
                        TaskNo = taskNo, // 任务号
                        TaskType = "0",// 任务类型:入库任务
                        OutMode = "",  //目标地址
                        Order = 1
                    };
                }
                catch (Exception ex)
                {
                    Db.RollbackTran();
                    throw new Exception(ex.Message);
                }
                #endregion
                return comDto;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //申请储位
        public OutCommandDto RequestLocation(string palletNo, string houseNo, string roadwayNo)
        {
@@ -1555,6 +1828,176 @@
            }
        }
        //申请储位(参观模式)
        public OutCommandDto RequestLocationModel(string palletNo, string houseNo, string roadwayNo)
        {
            try
            {
                //验证托盘条码是否为空
                if (string.IsNullOrEmpty(palletNo))
                {
                    throw new Exception("请输入要申请的托盘条码");
                }
                //验证所属仓库是否为空
                if (string.IsNullOrEmpty(houseNo))
                {
                    throw new Exception("请选择所属仓库");
                }
                //验证巷道是否为空
                if (string.IsNullOrWhiteSpace(roadwayNo))
                {
                    throw new Exception("巷道不能为空");
                }
                //验证是否为平库入库
                if (houseNo == "W02")
                {
                    throw new Exception("平库请使用PDA手持进行平库入库");
                }
                var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//托盘信息
                //判断托盘条码是否有效
                if (stock == null)
                    throw new Exception("托盘条码不受WMS管理,不可入库!");
                OutCommandDto comDto;//返回wcs的入库命令
                var isAddTask = false;
                var oldTaskNo = "";
                #region
                 var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
                && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
                if (beingTask != null)
                {
                    if (!string.IsNullOrWhiteSpace(beingTask.EndLocat))
                    {
                        comDto = new OutCommandDto()
                        {
                            PalletNo = palletNo,//托盘号
                            StartRoadway = beingTask.StartRoadway, // 起始巷道
                            StartLocate = "", // 起始位置
                            EndLocate = beingTask.EndLocat, // 目标位置
                            EndRoadway = beingTask.EndRoadway,   //  目标巷道
                            TaskNo = beingTask.TaskNo, // 任务号
                            TaskType = "0",// 任务类型 (出库)
                            OutMode = "",  //目标地址
                            Order = 1
                        };
                        if (beingTask.IsSuccess == 0)
                        {
                            beingTask.IsSuccess = 1;
                            beingTask.Status = "1";
                            Db.Updateable(beingTask).ExecuteCommand();
                        }
                        return comDto;
                    }
                    else
                    {
                        if (string.IsNullOrWhiteSpace(roadwayNo))
                        {
                            roadwayNo = beingTask.EndRoadway;
                        }
                    }
                    oldTaskNo = beingTask.TaskNo;
                }
                else
                {
                    isAddTask = true;
                }
                #endregion
                var allotLocate = new AllotLocation();
                SysStorageLocat locate;
                var areaList = new List<string>();
                areaList.Add("演示区域");
                locate = allotLocate.GetSuiTableLocate(houseNo, areaList, roadwayNo);
                Db.BeginTran();
                try
                {
                    if (isAddTask)
                    {
                        var taskNo = new Common().GetMaxNo("TK");
                        var exTask = new LogTask    //入库任务
                        {
                            TaskNo = taskNo,
                            Sender = "WMS",
                            Receiver = "WCS",
                            IsSuccess = 1, //是否下发成功 0失败 1成功
                            SendDate = DateTime.Now,  //发送时间
                            BackDate = DateTime.Now,  //返回时间
                            StartRoadway = "",            // 起始巷道
                            StartLocat = "",//起始位置
                            EndLocat = locate.LocatNo,//目标位置
                            EndRoadway = locate.RoadwayNo,  // 目标巷道
                            PalletNo = palletNo,//托盘码
                            IsSend = 1,//是否可再次下发
                            IsCancel = 1,//是否可取消
                            IsFinish = 1,//是否可完成
                            Type = "0",//任务类型 0 入库任务 1 出库任务  2 移库任务
                            Status = "1",//任务状态0:等待执行1正在执行2执行完成
                            OrderType = "0",//0 入库单 1 出库单  2 盘点单  3 移库单
                            Msg = "入库口到=>>" + locate.LocatNo + "的入库任务", //关键信息
                            TaskModel = "1"
                        };
                        Db.Insertable(exTask).ExecuteCommand();
                        oldTaskNo = taskNo;
                    }
                    else
                    {
                        var oldTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == oldTaskNo);
                        oldTask.EndLocat = locate.LocatNo;
                        oldTask.EndRoadway = locate.RoadwayNo;
                        if (oldTask.IsSuccess == 0)
                        {
                            oldTask.IsSuccess = 1;
                            oldTask.Status = "1";
                        }
                        Db.Updateable(oldTask).ExecuteCommand();
                    }
                    locate.Status = "2";
                    Db.Updateable(locate).ExecuteCommand();
                    Db.CommitTran();
                    comDto = new OutCommandDto()
                    {
                        PalletNo = palletNo,//托盘号
                        StartRoadway = "",
                        StartLocate = "", // 起始位置
                        EndLocate = locate.LocatNo, // 目标位置
                        EndRoadway = locate.RoadwayNo,   // 目标巷道
                        TaskNo = oldTaskNo, // 任务号
                        TaskType = "0",// 任务类型 (出库)
                        OutMode = "",  //目标地址
                        Order = 1
                    };
                }
                catch (Exception ex)
                {
                    Db.RollbackTran();
                    throw new Exception(ex.Message);
                }
                return comDto;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //入库完成(wcs反馈、wms手动完成)
        public void ArrivalSuccess(string taskNo, int userId)
        {
@@ -1594,6 +2037,12 @@
                    //添加操作日志记录
                    var k = new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                }
                if (task.TaskModel == "1") //演示模式
                {
                    locate.Status = "1";
                    Db.Updateable(locate).ExecuteCommand();
                    return;
                }
                //判断是否是回流入库完成
                if (stockDetail.Any())
                {
Wms/WMS.Entity/LogEntity/LogTask.cs
@@ -128,6 +128,13 @@
        public int? IsFinish {get;set;}
        /// <summary>
        /// Desc:任务模式 0/空/null:正常业务任务  1:演示模式任务
        /// Default:
        /// Nullable:True
        /// </summary>
        public string TaskModel { get; set; }
        /// <summary>
        /// Desc:单据类型 0 入库单 1 出库单  2 盘点单  3 移库单
        /// Default:
        /// Nullable:True
Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs
@@ -76,6 +76,15 @@
        /// <param name="houseNo">仓库号</param>
        /// <returns></returns>
        OutCommandDto RequestRoadWay(string palletNo, string houseNo);
        /// <summary>
        /// 申请巷道(参观模式)
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="houseNo"></param>
        /// <returns></returns>
        OutCommandDto RequestRoadWayModel(string palletNo, string houseNo);
        /// <summary>
        /// 申请空储位
        /// </summary>
@@ -86,6 +95,15 @@
        OutCommandDto RequestLocation(string palletNo, string houseNo, string roadwayNo);
        /// <summary>
        /// 申请空储位(参观模式)
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="houseNo"></param>
        /// <param name="roadwayNo"></param>
        /// <returns></returns>
        OutCommandDto RequestLocationModel(string palletNo, string houseNo, string roadwayNo);
        /// <summary>
        /// 入库完成
        /// </summary>
        /// <param name="taskNo">任务号</param>
Wms/Wms/Controllers/DownApiController.cs
@@ -215,6 +215,18 @@
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"WCS申请巷道:( {jsonData} ),", logStr);
                if (model.TaskModel == "1")
                {
                    var list = _asnPalletBindSvc.RequestRoadWayModel(model.PalletNo, model.HouseNo);
                    LogFile.SaveLogToFile($"WCS申请巷道返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                    new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", model.PalletNo.Substring(0, 8),
                        "申请巷道", $"申请巷道托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);
                    return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
                }
                else
                {
                var list = _asnPalletBindSvc.RequestRoadWay(model.PalletNo, model.HouseNo);
@@ -223,6 +235,8 @@
                    "申请巷道", $"申请巷道托盘号:{model.PalletNo.Substring(0, 8)}的成功信息", 2);
                return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
                }
            }
            catch (Exception e)
            {
@@ -278,10 +292,18 @@
                {
                    var jsonData = JsonConvert.SerializeObject(model);
                    LogFile.SaveLogToFile($"WCS申请储位:( {jsonData} ),", logStr);
                }
                }
                string pallet = model.PalletNo.Substring(0, 8);
                var list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo, model.RoadwayNo);
                OutCommandDto list;
                if (model.TaskModel == "1")
                {
                    list = _asnPalletBindSvc.RequestLocation(pallet, model.HouseNo, model.RoadwayNo);
                }
                else
                {
                    list = _asnPalletBindSvc.RequestLocationModel(pallet, model.HouseNo, model.RoadwayNo);
                }
                if (model.PalletNo.Length == 9)
                {
@@ -291,10 +313,6 @@
                else if (model.PalletNo.Length == 8)
                {
                    LogFile.SaveLogToFile($"WCS申请储位返回:( {JsonConvert.SerializeObject(list)} ),", logStr);
                }
                if (model.PalletNo.Length == 9)
                {
                }
                return Ok(new { Success = 0, Message = "申请储位成功", TaskList = list });
Wms/Wms/appsettings.json
@@ -11,8 +11,8 @@
    //"ConnectionString": "Server=47.95.120.93;Database=WMS_JC09;User ID=sa;password=boxline!@#; Integrated Security=True;",
    //"ConnectionString": "Server=47.95.120.53;Database=WMS_JC09;User ID=sa;Password=boxline!@#;Integrated Security=False;",
    //"ConnectionString": "Server=192.168.62.106;Database=WMS_JC24;User ID=sa;Password=sql2019;Integrated Security=False;",
    "ConnectionString": "Server=192.168.62.200;Database=WMS_JC24;User ID=sa;Password=sql2019;Integrated Security=False;"
    //"ConnectionString": "Server=.;Database=WMS_JC09;User ID=sa;Password=sql2019;Integrated Security=False;"
    //"ConnectionString": "Server=192.168.62.200;Database=WMS_JC24;User ID=sa;Password=sql2019;Integrated Security=False;"
    "ConnectionString": "Server=.;Database=WMS_JC24;User ID=sa;Password=sql2022;Integrated Security=False;"
    //"ConnectionString": "Data Source=DESKTOP-0EJDG95\\MSSQLSERVER1;Initial Catalog=WMS_V01;Integrated Security=True;"
  },
  "JWTConfig": {