62f6435ffed439deb76093ec0aceac7f3bbd6549..1ec3de8254a3dc8d77f01283ab4d85f52d446192
2025-05-09 wxw
Merge branch 'master' into wxw
1ec3de 对比 | 目录
2025-05-09 wxw
修改问题
2d5ac3 对比 | 目录
2025-04-30 wxw
修改问题
d1e9b4 对比 | 目录
5个文件已修改
284 ■■■■■ 已修改文件
HTML/views/HouseWithinSetting/HopperTransport.html 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Model/InterFaceModel/AgvModel.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IBllTransServer/IHopperTransportServer.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/DownApiController.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HTML/views/HouseWithinSetting/HopperTransport.html
@@ -202,7 +202,7 @@
                                        <div class="layui-form-item" >
                                            <div class="layui-input-block">
                                                <button type="submit" class="layui-btn" lay-submit
                                                    lay-filter="demo1">立即提交</button>
                                                    lay-filter="demo2">立即提交</button>
                                                <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                                            </div>
                                        </div>
@@ -261,15 +261,60 @@
            var doing = true;
            // 提交事件
            // 叫料提交事件
            form.on('submit(demo1)', function (data) {
                var field = data.field; // 获取表单字段值
                // 显示填写结果,仅作演示用
                layer.alert(JSON.stringify(field), {
                    title: '当前填写的字段值'
                var param = {
                    AreaNo: field.AreaSelect,
                    LocateNo : field.LocateSelect,
                    PlnStatus:field.PalletStatus,
                    Standard:field.Standard,
                    SkuNo:field.SkuSelect,
                    LotNo:field.LotNoSelect
                };
                sendData(IP + "/DownApi/jiaoLiaoHopper", param, 'post', function(res) {
                    if (res.code == 0) { //成功
                        layer.msg(res.msg, {
                            icon: 1,
                            time: 1000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {
                        });
                    } else { //不成功
                        layer.msg(res.msg, {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                    }
                });
                // 此处可执行 Ajax 等操作
                // …
                return false; // 阻止默认 form 跳转
            });
            // 叫车提交事件
            form.on('submit(demo2)', function (data) {
                var field = data.field; // 获取表单字段值
                var param = {
                    AreaNo: field.AreaSelect2,
                    LocateNo : field.LocateSelect2,
                    PlnStatus:field.PalletStatus2,
                    SkuNo:field.SkuSelect2,
                    LotNo:field.LotNoInput,
                    Weight:parseFloat(field.WeightInput)
                };
                sendData(IP + "/DownApi/jiaoCheHopper", param, 'post', function(res) {
                    if (res.code == 0) { //成功
                        layer.msg(res.msg, {
                            icon: 1,
                            time: 1000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {
                        });
                    } else { //不成功
                        layer.msg(res.msg, {
                            icon: 2,
                            time: 2000 //2秒关闭(如果不配置,默认是3秒)
                        }, function() {});
                    }
                });
                return false; // 阻止默认 form 跳转
            });
        
Wms/Model/InterFaceModel/AgvModel.cs
@@ -221,4 +221,13 @@
        /// </summary>
        public string WareHouseNo { get; set; }
    }
    public class RCSCleanRequestModel
    {
        public string deviceID { get; set; }
        public string deviceStation { get; set; }
        public string status { get; set; }
    }
}
Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs
@@ -689,6 +689,10 @@
                    stockDetail.Status = "0";//待分配
                    stockDetail.InspectStatus = "0";//待检验
                }
                else if (endAreaInfo.Type == "4")//设备区
                {
                }
                //修改库存明细
                Db.Updateable(stockDetail).ExecuteCommand();
                
@@ -716,6 +720,178 @@
            }
        }
        /// <summary>
        /// 清洗机叫料状态
        /// </summary>
        /// <param name="deviceID">清洗机编号</param>
        /// <param name="deviceStation">叫料点位:”input”-入口(叫脏桶),”output”-出口(净桶申请储位)</param>
        /// <param name="status"></param>
        /// <exception cref="Exception"></exception>
        public void RCSCleanRequest(string deviceID,string deviceStation,string status,string url)
        {
            try
            {
                if (string.IsNullOrEmpty(deviceID))
                {
                    throw new Exception("清洗机编号不能为空");
                }
                if (status != "1")
                {
                    throw new Exception("非叫料状态");
                }
                //通过设备号查找到所属设备(区域)
                var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode == deviceID);
                if (deviceInfo == null)
                {
                    throw new Exception("设备信息不存在");
                }
                var houseNo = deviceInfo.WareHouseNo;//叫桶设备所属车间编号
                var startLoction = new SysStorageLocat();//起始储位信息
                var endLoction = new SysStorageLocat();//目标储位信息
                var palletModel = new DataStockDetail();//分配桶信息
                //开启事务
                Db.BeginTran();
                //叫料点位
                switch (deviceStation)
                {
                    case "input"://叫脏桶
                        //叫桶设备所在储位信息(目标储位)
                        endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo);
                        // 所有待分配的脏桶
                        var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.Status == "0" && w.PalletStatus == "3");
                        //优先查找脏桶缓存车间
                        palletModel = stockDetail.Where(w => w.AreaNo == "C43").OrderByDescending(o => o.UpdateTime).First();
                        if (palletModel == null)//脏桶缓存车间没有脏桶,再从三楼中间站脏桶区查找
                        {
                            palletModel = stockDetail.Where(w =>w.WareHouseNo=="M16" && w.AreaNo == "C26").OrderByDescending(o => o.UpdateTime).First();
                        }
                        if (palletModel == null)//三楼中间站脏桶区没有脏桶,再从四楼中间站脏桶区查找
                        {
                            palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").OrderByDescending(o => o.UpdateTime).First();
                        }
                        if (palletModel == null)
                        {
                            throw new Exception("无脏桶可分配");
                        }
                        //起始储位地址信息
                        startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.Status == "1" && w.LocatNo == palletModel.LocatNo);
                        if (startLoction == null)
                        {
                            throw new Exception($"起始目标储位信息不存在,桶号:{palletModel.LocatNo}");
                        }
                        break;
                    case "output"://净桶申请储位
                        //叫桶设备所在储位信息(起始储位)
                        startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo);
                        //桶信息
                        palletModel = Db.Queryable<DataStockDetail>().Where(w => w.WareHouseNo==houseNo && w.AreaNo==deviceInfo.AreaNo && w.LocatNo==startLoction.LocatNo).First();
                        if (palletModel == null)
                        {
                            throw new Exception("未查询到净桶信息");
                        }
                        //分配储位
                        //优先分配四楼中间站净桶区
                        endLoction= Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
                                            && w.WareHouseNo == "M01" && w.AreaNo == "C01")
                                            .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First();
                        if (endLoction == null)//四楼中间站净桶区没有空储位,再从三楼中间站净桶区查找
                        {
                            endLoction = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
                                            && w.WareHouseNo == "M16" && w.AreaNo == "C24")
                                            .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First();
                        }
                        if (endLoction == null)//三楼中间站净桶区没有空储位,再从三楼清洗间缓存区查找
                        {
                            endLoction = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
                                            && w.WareHouseNo == "M44" && w.AreaNo == "C55")
                                            .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First();
                        }
                        if (endLoction == null)
                        {
                            throw new Exception("未查询到合适储位");
                        }
                        break;
                    default:
                        throw new Exception("叫料点位异常");
                }
                var taskNo = new Common().GetMaxNo("TK");
                //添加任务
                var logTaskEntry = new LogTask
                {
                    TaskNo = taskNo,
                    Sender = "WMS",
                    Receiver = "RCS",
                    IsSuccess = 0, //是否下发成功 0失败 1成功
                    StartLocat = "",//起始位置
                    EndLocat = endLoction.LocatNo,//目标位置
                    PalletNo = "",//托盘码
                    IsSend = 1,//是否可再次下发
                    IsCancel = 1,//是否可取消
                    IsFinish = 1,//是否可完成
                    Type = "1",//任务类型 0 入库任务 1 出库任务  2 移库任务
                    Status = "0",//任务状态0:等待执行1正在执行2执行完成
                    OrderType = "3",//0 入库单 1 出库单  2 盘点单  3 移库单
                    CreateTime = DateTime.Now
                };
                Db.Insertable(logTaskEntry).ExecuteCommand();
                //组织下发小车任务信息
                var task = new TaskDetial
                {
                    Taskno = taskNo,//任务号
                    Startport = palletModel.LocatNo,//起始位置
                    Endport = endLoction.LocatNo,//目标位置
                    Pallno = palletModel.PalletNo,//桶号
                    Crtype = "1",//叫桶
                };
                string agvMsg = string.Empty;
                //给下车下发任务
                logTaskEntry.SendDate = DateTime.Now;//发送时间
                var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg);
                if (agvResult)//成功
                {
                    //请求成功修改任务表相应字段状态
                    logTaskEntry.IsSuccess = 1;
                    logTaskEntry.IsSend = 0;
                    //logTaskEntry.IsCancel = 0;
                    logTaskEntry.BackDate = DateTime.Now;
                    logTaskEntry.Status = "1";//正在执行
                    Db.Insertable(logTaskEntry).ExecuteCommand();
                    startLoction.Status = "3";//出库中
                    Db.Updateable(startLoction).ExecuteCommand();
                    endLoction.Status = "2";//入库中
                    Db.Updateable(endLoction).ExecuteCommand();
                }
                else//失败
                {
                    logTaskEntry.IsSuccess = 0;
                    logTaskEntry.Information = agvMsg;
                    Db.Insertable(logTaskEntry).ExecuteCommand();
                }
                //提交事务
                Db.CommitTran();
            }
            catch (Exception e)
            {
                //回滚事务
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        private bool YikuTask(string palletNo, string taskNo, string url)
        {
Wms/WMS.IBLL/IBllTransServer/IHopperTransportServer.cs
@@ -19,6 +19,13 @@
        void jiaoLiaoHopper(string areaNo, string endLocate, string plnStatus, string standard, string skuNo, string lotNo, string url, int userId);
        void jiaoCheHopper(string areaNo, string StartLocate, string plnNo, string plnStatus, decimal weight, string skuNo, string lotNo, string url, int userId);
        /// <summary>
        /// 清洗机叫料状态
        /// </summary>
        /// <param name="deviceID">清洗机编号</param>
        /// <param name="deviceStation">叫料点位:”input”-入口(叫脏桶),”output”-出口(净桶申请储位)</param>
        /// <param name="status"></param>
        /// <exception cref="Exception"></exception>
        void RCSCleanRequest(string deviceID, string deviceStation, string status, string url);
    }
}
Wms/Wms/Controllers/DownApiController.cs
@@ -1311,8 +1311,39 @@
                return Ok(new { data = "", code = 1, msg = e.Message });
            }
        }
        /// <summary>
        /// 清洗机叫料状态
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult RCSCleanRequest(RCSCleanRequestModel model)
        {
            var logStr = $@".\log\AGV\清洗机叫料" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            AgvResultModel resultModel = null;//返回信息
            try
            {
                var jsonData = JsonConvert.SerializeObject(model);
                LogFile.SaveLogToFile($"清洗机叫料-请求报文:( {jsonData} ),", logStr);
                //具体处理方法
                _hopper.RCSCleanRequest(model.deviceID,model.deviceStation,model.status, _config.AgvHost + _config.GenAgvSchedulingTask);
                resultModel = new AgvResultModel { code = "0", message = "请求成功!"};
                var jsonData2 = JsonConvert.SerializeObject(resultModel);
                LogFile.SaveLogToFile($"清洗机叫料-返回报文:( {jsonData2} ),", logStr);
                return Ok(resultModel);
            }
            catch (Exception e)
            {
                LogFile.SaveLogToFile($"清洗机叫料异常:( {e.Message} ),", logStr);
                resultModel = new AgvResultModel { code = "1", message = e.Message, data = "", reqCode = "" };
                var jsonData2 = JsonConvert.SerializeObject(resultModel);
                LogFile.SaveLogToFile($"清洗机叫料-返回报文:( {jsonData2} ),", logStr);
                return Ok(resultModel);
            }
        }
        #endregion
    }