wxw
2025-03-06 52af69dd4c1be4ec93e012013dee78c3105998ec
修改问题
10个文件已修改
268 ■■■■■ 已修改文件
HTML/views/StatisticalReport/BoxInfor.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/Pallets.html 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/WareHouseSetting/PalletsPrintFrom.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelDto/DataDto/StockDetailDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/ModelVm/SysVm/PalletVm.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllTransServer/RcsServer.cs 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/SysServer/PalletsServer.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.Entity/DataEntity/DataStockDetail.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/ISysServer/IPalletsServer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/SysController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/StatisticalReport/BoxInfor.html
@@ -410,6 +410,7 @@
                    {field: 'LockQty', title: '锁定数量', align: 'center',},
                    {field: 'FrozenQty', title: '冻结数量', align: 'center'},
                    {field: 'InspectStatus', title: '质检状态', align: 'center', templet: '#InspectStatus1'}, 
                    {field: 'UDF1', title: '所属设备编码', align: 'center'},
                    //{field: 'InspectMark', title: '抽检标记', align: 'center', templet: '#InspectMarkStatus'},
                    //{field: 'BitPalletMark', title: '零托标记', align: 'center', templet: '#BitPalletMarkStatus'},
                ]];
HTML/views/WareHouseSetting/Pallets.html
@@ -246,7 +246,8 @@
                                                                            
                                        var param = {
                                            PalletNo:field.StockCode,
                                            LocatNo:field.LocatNo
                                            LocatNo:field.LocatNo,
                                            DeviceCode:field.DeviceCode
                                        };
                                        synData(IP + "/Sys/AddPallets", param, 'post', function(res) {
                                            console.log(res);
HTML/views/WareHouseSetting/PalletsPrintFrom.html
@@ -23,6 +23,12 @@
                    <input type="text" name="LocatNo" placeholder="请输入储位地址" lay-verify="required" autocomplete="off" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">所属接料设备</label>
                <div class="layui-input-block">
                    <input type="text" name="DeviceCode" placeholder="请输入所属接料设备" lay-verify="" autocomplete="off" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item layui-hide">
                <input type="button" lay-submit lay-filter="layuiadmin-app-form-submit" id="layuiadmin-app-form-submit" value="确认添加">
                <input type="button" lay-submit lay-filter="layuiadmin-app-form-edit" id="layuiadmin-app-form-edit" value="确认编辑">
Wms/Model/ModelDto/DataDto/StockDetailDto.cs
@@ -215,5 +215,10 @@
        /// 储位深度
        /// </summary>
        public int Dept { get; set; }
        /// <summary>
        /// 所属设备编码
        /// </summary>
        public string UDF1 { get; set; }
    }
}
Wms/Model/ModelVm/SysVm/PalletVm.cs
@@ -34,7 +34,10 @@
        /// 储位地址
        /// </summary>
        public string LocatNo { get; set; }
        /// <summary>
        /// 设备编码
        /// </summary>
        public string DeviceCode { get; set; }
    }
    
}
Wms/WMS.BLL/BllTransServer/RcsServer.cs
@@ -79,12 +79,28 @@
                            //查找到该车间净桶区
                            List<string> areaNoList = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "0" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList();
                            //查找净桶
                            pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "0" && w.Status == "0"
                            && areaNoList.Contains(w.AreaNo)).OrderByDescending(o => o.CreateTime).First();
                            if (houseNo == "M03")//大单体车间净桶是绑定接料设备的
                            {
                                pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "0" && w.Status == "0"
                            && areaNoList.Contains(w.AreaNo) && w.UDF1 == deviceInfo.DeviceCode).OrderBy(o => o.UpdateTime).First();
                            }
                            else
                            {
                                pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "0" && w.Status == "0"
                            && areaNoList.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).First();
                            }
                            if (pallet == null)
                            {
                                throw new Exception("暂无净桶可分配");
                            }
                            //分配桶后判断该桶外侧储位是否需要移库
                            bool yikuResult = YikuTask(pallet.PalletNo, url);
                            if (!yikuResult)
                            {
                                throw new Exception("移库失败");
                            }
                            pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配
                                                //更新桶库存明细
                            Db.Updateable(pallet).ExecuteCommand();
@@ -109,11 +125,18 @@
                            List<string> areaNoList2 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "1" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList();
                            //查找库存中是否有可用的此批次的混料桶
                            pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "1" && w.Status == "0" && w.LotNo == model.LotNo
                            && areaNoList2.Contains(w.AreaNo)).OrderByDescending(o => o.CompleteTime).First();
                            && areaNoList2.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).First();
                            if (pallet == null)
                            {
                                throw new Exception("暂无混料桶可分配");
                            }
                            //分配桶后判断该桶外侧储位是否需要移库
                            bool yikuResult = YikuTask(pallet.PalletNo, url);
                            if (!yikuResult)
                            {
                                throw new Exception("移库失败");
                            }
                            pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配
                                                //更新桶库存明细
                            Db.Updateable(pallet).ExecuteCommand();
@@ -143,14 +166,14 @@
                                throw new Exception("批次号为空!");
                            }
                            //查找是否有此批次出库单明细
                            var soNoticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(w => w.IsDel == "0" && w.LotNo == model.LotNo).OrderBy(o => o.CreateTime).First();
                            /*var soNoticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(w => w.IsDel == "0" && w.LotNo == model.LotNo).OrderBy(o => o.CreateTime).First();
                            if (soNoticeDetail == null)
                            {
                                throw new Exception("该批次没有对应的出库单明细");
                            }
                            noticeNo = soNoticeDetail.Id.ToString();
                            //出库总单
                            /*var soNotice = Db.Queryable<BllExportNotice>().Where(w => w.IsDel == "0" && w.SONo == soNoticeDetail.SONo).First();
                            var soNotice = Db.Queryable<BllExportNotice>().Where(w => w.IsDel == "0" && w.SONo == soNoticeDetail.SONo).First();
                            if (soNotice == null)
                            {
                                throw new Exception("该批次没有对应的出库单");
@@ -164,11 +187,18 @@
                            List<string> areaNoList3 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "2" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList();
                            //查找库存中是否有此批次的合格下料桶
                            pallet = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "2" && w.Status == "0" && w.LotNo == model.LotNo && w.InspectStatus == "1"
                            && areaNoList3.Contains(w.AreaNo)).OrderByDescending(o => o.CompleteTime).First();
                            && areaNoList3.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).First();
                            if (pallet == null)
                            {
                                throw new Exception("暂无下料桶可分配");
                            }
                            //分配桶后判断该桶外侧储位是否需要移库
                            bool yikuResult = YikuTask(pallet.PalletNo, url);
                            if (!yikuResult)
                            {
                                throw new Exception("移库失败");
                            }
                            pallet.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配
                                                //更新桶库存明细
                            Db.Updateable(pallet).ExecuteCommand();
@@ -186,8 +216,23 @@
                            }
                            //查找到该车间脏桶区
                            List<string> areaNoList4 = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Type == "3" && w.WareHouseNo == houseNo).Select(s => s.AreaNo).ToList();
                            List<DataStockDetail> palletList = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "3" && w.Status == "0"
                            && areaNoList4.Contains(w.AreaNo)).OrderByDescending(o => o.CompleteTime).ToList();
                            List<DataStockDetail> palletList = new List<DataStockDetail>();
                            if (houseNo == "M01")
                            {
                                palletList = Db.Queryable<DataStockDetail>()
                                     .LeftJoin<SysStorageLocat>((d, l) => d.LocatNo == l.LocatNo)
                                    .Where(d => d.WareHouseNo == houseNo && d.PalletStatus == "3" && d.Status == "0" && areaNoList4.Contains(d.AreaNo))
                                    .OrderBy((d, l) => l.Row)
                                    .OrderBy((d, l) => l.Column)
                                    .ToList();
                            }
                            else
                            {
                                palletList = stockDetail.Where(w => w.WareHouseNo == houseNo && w.PalletStatus == "3" && w.Status == "0"
                                && areaNoList4.Contains(w.AreaNo)).OrderBy(o => o.UpdateTime).ToList();
                            }
                            if (palletList.Count <= 0)
                            {
                                throw new Exception("暂无脏桶可分配");
@@ -230,7 +275,7 @@
                                #endregion
                                item.Status = "2";//分配状态 0:待分配,1:部分分配 , 2:已分配
                                                  //更新桶库存明细
                                //更新桶库存明细
                                Db.Updateable(item).ExecuteCommand();
                                //起始储位地址信息
                                var startLoction2 = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == item.LocatNo);
@@ -1244,5 +1289,159 @@
            return result;
            #endregion
        }
        /// <summary>
        /// 分配桶后判断该桶外侧储位是否需要移库
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        private bool YikuTask(string palletNo,string url)
        {
            try
            {
                //分配桶的库存信息
                var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                if (palletInfo == null)
                {
                    throw new Exception("未查询到分配桶的库存信息");
                }
                //判断分配的桶有没有正在执行的任务(移库中)
                var taskIng= Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "0" || w.Status == "1") && w.PalletNo == palletNo);
                if (taskIng != null)
                {
                    throw new Exception("分配的桶有正在执行的任务,请稍后再试");
                }
                //分配桶的储位信息
                var locatInfo = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == palletInfo.LocatNo);
                if (locatInfo == null)
                {
                    throw new Exception("未查询到分配桶所在的储位信息");
                }
                //判断该储位是否是内侧储位
                if (!string.IsNullOrEmpty(locatInfo.AisleOne))
                {
                    //判断外侧储位是否有桶
                    var palletInfoYi = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == locatInfo.AisleOne);
                    if (palletInfoYi != null)
                    {
                        //判断要移库的桶是否被分配
                        if (palletInfoYi.Status != "0")
                        {
                            throw new Exception("要移库的桶已被分配,请稍后再试");
                        }
                        //判断要移库的桶是否有正在执行的任务
                        var taskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && (w.Status == "0" || w.Status == "1") && w.PalletNo == palletInfoYi.PalletNo);
                        if (taskInfo != null)
                        {
                            throw new Exception("要移库的桶有正在执行的任务,请稍后再试");
                        }
                        #region#给要移库的桶分配新储位
                        var locatInfoNew = new SysStorageLocat();
                        //优先分配内侧储位
                        var locatListNei = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && !string.IsNullOrEmpty(w.AisleOne) && w.WareHouseNo == palletInfoYi.WareHouseNo && w.AreaNo == palletInfoYi.AreaNo).ToList();
                        foreach (var item in locatListNei)
                        {
                            //判断该内侧储位的外侧储位是否有桶
                            var detailWai = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == item.AisleOne);
                            if (detailWai != null)
                            {
                                continue;
                            }
                            locatInfoNew = item;
                            break;
                        }
                        if (locatInfoNew == null)
                        {
                            //没有内侧储位,再查找外侧储位
                            var locatListWai = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && string.IsNullOrEmpty(w.AisleOne) && w.WareHouseNo == palletInfoYi.WareHouseNo && w.AreaNo == palletInfoYi.AreaNo).OrderBy(o => o.Row).ToList();
                            foreach (var item in locatListWai)
                            {
                                //判断该储位的内侧储位是否有正在执行的任务
                                var locatItemNei = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.AisleOne == item.LocatNo);
                                if (locatItemNei != null && locatItemNei.Status != "0")
                                {
                                    continue;
                                }
                                locatInfoNew = item;
                                break;
                            }
                        }
                        if (locatInfoNew == null)
                        {
                            throw new Exception("没有空余的空储位进行移库");
                        }
                        #endregion
                        //给下车下发移库任务
                        var taskNo = new Common().GetMaxNo("TK");//任务号
                        //任务信息
                        var logTaskEntry = new LogTask
                        {
                            TaskNo = taskNo,
                            Sender = "WMS",
                            Receiver = "RCS",
                            //IsSuccess = 1, //是否下发成功 0失败 1成功
                            SendDate = DateTime.Now,  //发送时间
                            //BackDate = DateTime.Now,  //返回时间
                            StartLocat = palletInfoYi.LocatNo,//起始位置
                            EndLocat = locatInfoNew.LocatNo,//目标位置
                            PalletNo = palletInfoYi.PalletNo,//托盘码
                            IsSend = 1,//是否可再次下发
                            IsCancel = 1,//是否可取消
                            IsFinish = 1,//是否可完成
                            Type = "1",//任务类型 0 入库任务 1 出库任务  2 移库任务
                            OrderType = "3",//单据类型 0 入库 1 出库 3移库
                            Status = "0",//任务状态0:等待执行1正在执行2执行完成
                            NoticeDetailNo = 0,
                            Msg = $"将桶{palletInfoYi.PalletNo}从{palletInfoYi.LocatNo}移到{locatInfoNew.LocatNo}", //关键信息
                            LotNo = ""//批次号
                        };
                        //组织下发小车任务信息
                        var task = new TaskDetial
                        {
                            Taskno = taskNo,//任务号
                            Startport = palletInfoYi.LocatNo,//起始位置
                            Endport = locatInfoNew.LocatNo,//endLoction.LocatNo,//目标位置
                            Pallno = palletInfoYi.PalletNo,//桶号
                            Crtype = "1",//叫桶
                            WareHouseNo = palletInfoYi.WareHouseNo//车间编码
                        };
                        //给下车下发任务
                        logTaskEntry.SendDate = DateTime.Now;//发送时间
                        var agvResult = CreateTaskForAgv(task, url);
                        if (agvResult)//成功
                        {
                            //请求成功修改任务表相应字段状态
                            logTaskEntry.IsSuccess = 1;
                            logTaskEntry.IsSend = 0;
                            //logTaskEntry.IsCancel = 0;
                            logTaskEntry.BackDate = DateTime.Now;
                            logTaskEntry.Status = "1";//正在执行
                            Db.Insertable(logTaskEntry).ExecuteCommand();
                            locatInfo.Status = "5";//移出中
                            Db.Updateable(locatInfo).ExecuteCommand();
                            locatInfoNew.Status = "4";//移入中
                            Db.Updateable(locatInfoNew).ExecuteCommand();
                        }
                        else//失败
                        {
                            throw new Exception($"给小车下发移库任务失败,桶号:{palletInfoYi.PalletNo}");
                        }
                    }
                }
                return true;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
    }
}
Wms/WMS.BLL/SysServer/PalletsServer.cs
@@ -120,7 +120,7 @@
        /// <param name="locatNo"></param>
        /// <param name="userId"></param>
        /// <exception cref="Exception"></exception>
        public void AddPallets(string palletNo,string locatNo,int userId)
        public void AddPallets(string palletNo,string locatNo, string deviceCode, int userId)
        {
            var db = DataContext.Db;
            try
@@ -155,6 +155,22 @@
                if (!areaModel.AreaName.Contains("净桶"))
                {
                    throw new Exception("新添加的桶只能绑定净桶区");
                }
                if (!string.IsNullOrEmpty(deviceCode))
                {
                    var areaInfo = db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode.Contains(deviceCode));
                    if (areaInfo == null)
                    {
                        throw new Exception("未查到设备所属区域信息");
                    }
                    if (!areaInfo.AreaName.Contains("接料设备"))
                    {
                        throw new Exception("只能绑定接料设备");
                    }
                    if (areaInfo.WareHouseNo != "M03")
                    {
                        throw new Exception("只有大单体车间才能绑定设备");
                    }
                }
                //开启事务
                db.BeginTran();
@@ -200,9 +216,12 @@
                    PalletStatus = "0",//净桶
                    UDF1 = deviceCode,
                    IsDel = "0",
                    CreateUser = userId,
                    CreateTime = comTime
                    CreateTime = comTime,
                    UpdateTime=comTime,
                };
                //插入库存明细
                db.Insertable(model).ExecuteCommand();
Wms/WMS.Entity/DataEntity/DataStockDetail.cs
@@ -276,5 +276,9 @@
        /// </summary>           
        public string Demo { get; set; }
        /// <summary>
        /// 设备编码
        /// </summary>
        public string UDF1 { get; set; }
    }
}
Wms/WMS.IBLL/ISysServer/IPalletsServer.cs
@@ -33,6 +33,6 @@
        /// <param name="groupCount">组数</param>
        /// <param name="userId">操作人</param>
        /// <returns></returns>
        void AddPallets(string palletNo, string locatNo, int userId);
        void AddPallets(string palletNo, string locatNo,string deviceCode, int userId);
    }
}
Wms/Wms/Controllers/SysController.cs
@@ -1327,7 +1327,7 @@
                {
                    return Ok(new { code = 1, msg = "为获取到当前操作人信息" });
                }
                _palletSvc.AddPallets(model.PalletNo, model.LocatNo,int.Parse(userId));
                _palletSvc.AddPallets(model.PalletNo, model.LocatNo, model.DeviceCode, int.Parse(userId));
                return Ok(new { code = 0, msg = "添加成功", data = "" });