完成商品属性分组和商品属性关联维护

文章目录

    • 1.前端页面搭建
        • 1.复制attrgroup-attr-relation.vue到src/views/modules/commodity下
        • 2.加入超链接和引入组件 src/views/modules/commodity/attrgroup.vue
          • 1.加入超链接
          • 2.引入组件
        • 3.数据池加入变量
        • 4.使用组件
          • 1.引用组件
          • 2.添加方法
          • 3.测试,点击关联,会输出当前的id
        • 5.修改请求,将attrgroup-attr-relation.vue的请求修改成环境变量 + 资源路径的形式
        • 6.解析
          • 1.点击关联按钮,会将这行的id传到relationAttrHandle方法中
          • 2.这个方法,首先显示对话框,然后调用组件的init方法
          • 3.init方法向后端发送请求,返回当前属性组已经关联的商品属性(基本属性)的数据
    • 2.第六次部署
        • 1.后端部署
          • 1.由于只修改了sunliving-commodity模块,所以不需要区分多环境
          • 2.将sunliving-commodity模块设置成prod
          • 3.maven打包
          • 4.target目录测试jar包执行
          • 5.ctrl + c 退出,部署到服务器
        • 2.前端部署
          • 1.由于所有请求都是环境变量 + 资源路径,所以不需区分多环境
          • 2.根目录npm run build
          • 3.nvm切换到node16,dist目录下执行serve,模拟线上环境
          • 4.验证码没出来503服务不可用,原因是Nacos将这些服务下线了,全部上线即可,然后重启前端
          • 5.测试无误
          • 6.将dist目录下的文件部署到服务器
          • 7.测试无误
    • 2.点击关联按钮,可以看到该组关联的所有商品属性
        • 1.后端 sunliving-commodity 模块
          • 1.分析资源路径写法
          • 2.AttrService.java 新增方法 根据属性组id获取关联的属性
          • 3.AttrServiceImpl.java 实现方法
          • 4.AttrgroupController.java 根据路径参数传来的组id得到关联的所有属性信息
          • 5.测试
        • 2.前端 attrgroup-attr-relation.vue
          • 1.接受数据
          • 2.测试
    • 3.删除某个商品属性分组关联的商品属性,支持批量删除
        • 1.梳理表之间的关系
        • 2.后端 sunliving-commodity模块
          • 1.AttrAttrgroupRelationDao.java 新增批量删除方法
          • 2.AttrAttrgroupRelationDao.xml 实现批量删除
          • 3.AttrService.java 新增批量删除方法
          • 4.AttrServiceImpl.java 实现批量删除
        • 2.分析前端请求
          • 1.AttrgroupController.java 编写接口
          • 2.后端测试
          • 3.前端测试
    • 4.查询某个商品的属性分组可以关联的商品属性(支持分页)
        • 思路分析图
        • 1.分析前端请求 attrgroup-attr-relation.vue
          • 1.点击新建关联
          • 2.调用getDataList方法
          • 3.发送请求,携带attrGroupId
        • 2.后端 sunliving-commodity 模块(先不分页)
          • 1.AttrService.java 添加方法 根据属性组id获取可以关联的属性
          • 2.AttrServiceImpl.java 实现方法
          • 3.AttrgroupController.java 编写接口
          • 4.测试并分析结果
            • 1.请求携带属性组参数为1,此时返回了一个可关联的属性
            • 2.首先从属性组表中查找id为1的categoryId为301
            • 3.然后从属性表中查找是基本属性的,并且categoryId为301的发现有12,14,21符合要求
            • 4.最后从关联表中查询是否属性id已经存在,发现12,21已经被关联,所以最终只返回id为14的属性
        • 3.后端 sunliving-commodity 模块(支持分页,包含分页模板!!!)
          • 1.AttrService.java 添加方法 根据属性组id获取可以关联的属性,并且分页
          • 2.AttrServiceImpl.java 实现方法(也相当于分页模板)
          • 3.分页结果工具类 PageUtils
          • 4.测试
    • 5.新建属性和属性组之间的关联(支持批量添加)
        • 1.分析前端请求 attrgroup-attr-relation.vue
          • 1.点击确认新增
          • 2.调用submitAddRealtion方法
          • 3.可以得到新增的基本属性的数据
          • 4.可以看到,将attrId和attrGroupId组成的js对象数组传递给了后端
        • 2.后端 sunliving-commodity 模块
          • 1.直接写controller即可
          • 2.测试

1.前端页面搭建

1.复制attrgroup-attr-relation.vue到src/views/modules/commodity下

image-20240420191436885

2.加入超链接和引入组件 src/views/modules/commodity/attrgroup.vue
1.加入超链接
<el-button type="text" size="small" @click="relationAttrHandle(scope.row.id)">关联</el-button>

image-20240420191725103

2.引入组件

image-20240420191824864

image-20240420191924712

3.数据池加入变量

image-20240420192031989

4.使用组件
1.引用组件

image-20240420192335584

2.添加方法
    //处理分组与属性的关联relationAttrHandle(groupId) {this.relationVisible = true;console.log(groupId)this.$nextTick(() => {this.$refs.relationUpdate.init(groupId);});}
3.测试,点击关联,会输出当前的id

image-20240420192637334

5.修改请求,将attrgroup-attr-relation.vue的请求修改成环境变量 + 资源路径的形式

image-20240420193149940

6.解析
1.点击关联按钮,会将这行的id传到relationAttrHandle方法中

image-20240420193344565

2.这个方法,首先显示对话框,然后调用组件的init方法

image-20240420193457781

image-20240420193444289

3.init方法向后端发送请求,返回当前属性组已经关联的商品属性(基本属性)的数据

image-20240420193605313

2.第六次部署

1.后端部署
1.由于只修改了sunliving-commodity模块,所以不需要区分多环境
2.将sunliving-commodity模块设置成prod

image-20240420221008545

3.maven打包

image-20240420221121004

4.target目录测试jar包执行

image-20240420221435283

5.ctrl + c 退出,部署到服务器

image-20240420222026383

2.前端部署
1.由于所有请求都是环境变量 + 资源路径,所以不需区分多环境
2.根目录npm run build

image-20240420222320588

3.nvm切换到node16,dist目录下执行serve,模拟线上环境

image-20240420222417756

4.验证码没出来503服务不可用,原因是Nacos将这些服务下线了,全部上线即可,然后重启前端
5.测试无误

image-20240420223140403

6.将dist目录下的文件部署到服务器
7.测试无误

image-20240420223800354

2.点击关联按钮,可以看到该组关联的所有商品属性

1.后端 sunliving-commodity 模块
1.分析资源路径写法

image-20240420195227841

2.AttrService.java 新增方法 根据属性组id获取关联的属性
    /*** 根据属性组id获取关联的属性* @param attrgroupId* @return*/List<AttrEntity> getRelationAttr(Long attrgroupId);
3.AttrServiceImpl.java 实现方法
    @Overridepublic List<AttrEntity> getRelationAttr(Long attrgroupId) {// 根据attrgroupId查询出所有的关联属性List<AttrAttrgroupRelationEntity> relationEntities = attrAttrgroupRelationService.list(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_group_id", attrgroupId));// 如果relationEntities为空,直接返回nullif (relationEntities.isEmpty()) {return null;}// 使用stream api获取所有的attrIdList<Long> attrIds = relationEntities.stream().map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());// 根据attrIds查询出所有的attrreturn attrDao.selectBatchIds(attrIds);}
4.AttrgroupController.java 根据路径参数传来的组id得到关联的所有属性信息
    /*** 获取属性分组关联的属性*/@RequestMapping("/{attrGroupId}/attr/relation")// @RequiresPermissions("commodity:attrgroup:list")public R attrRelation(@PathVariable("attrGroupId") Long attrGroupId) {// 根据attrGroupId查询关联的属性List<AttrEntity> relationAttr = attrService.getRelationAttr(attrGroupId);return R.ok().put("data", relationAttr);}
5.测试

image-20240421103920387

2.前端 attrgroup-attr-relation.vue
1.接受数据

image-20240421104247043

2.测试

image-20240421104308822

3.删除某个商品属性分组关联的商品属性,支持批量删除

1.梳理表之间的关系

image-20240421105334938

2.后端 sunliving-commodity模块
1.AttrAttrgroupRelationDao.java 新增批量删除方法
	// 批量删除关联关系void deleteBatchRelation(@Param("entities") List<AttrAttrgroupRelationEntity> entities);
2.AttrAttrgroupRelationDao.xml 实现批量删除
    <delete id="deleteBatchRelation">deletefrom `commodity_attr_attrgroup_relation`where<foreach collection="entities" item="item" separator="or">(attr_id = #{item.attrId} and attr_group_id = #{item.attrGroupId})</foreach></delete>
3.AttrService.java 新增批量删除方法
    /*** 批量删除关联关系* @param entities*/void deleteRelation(List<AttrAttrgroupRelationEntity> entities);
4.AttrServiceImpl.java 实现批量删除
    @Overridepublic void deleteRelation(List<AttrAttrgroupRelationEntity> entities) {// 批量删除关联关系,这里的entities只有attrId和attrGroupIdattrAttrgroupRelationDao.deleteBatchRelation(entities);}
2.分析前端请求
  • 可以看到传入的是AttrAttrgroupRelationEntity类型的数组

image-20240421113329188

1.AttrgroupController.java 编写接口
    /*** 移除关联* @param entities* @return*/@RequestMapping("/attr/relation/delete")public R deleteRelation(@RequestBody AttrAttrgroupRelationEntity[] entities) {attrService.deleteRelation(Arrays.asList(entities));return R.ok();}
2.后端测试

image-20240421113717396

image-20240421113725441

image-20240421113735608

3.前端测试

image-20240421115951190

4.查询某个商品的属性分组可以关联的商品属性(支持分页)

思路分析图

image-20240421143850042

1.分析前端请求 attrgroup-attr-relation.vue
1.点击新建关联

image-20240421140022831

2.调用getDataList方法

image-20240421140032641

3.发送请求,携带attrGroupId

image-20240421140116761

2.后端 sunliving-commodity 模块(先不分页)
1.AttrService.java 添加方法 根据属性组id获取可以关联的属性
    /*** 根据属性组id获取可以关联的属性* @param attrGroupId* @return*/List<AttrEntity> getAttrRelation(Long attrGroupId);
2.AttrServiceImpl.java 实现方法
    @Overridepublic List<AttrEntity> getAttrRelation(Long attrGroupId) {// 1. 根据属性组id,在属性组表中查询出对应的categoryIdLong categoryId = attrgroupDao.selectById(attrGroupId).getCategoryId();// 2.根据这个id去属性表中查询出所有的属性List<AttrEntity> allAttr = attrDao.selectList(new QueryWrapper<AttrEntity>().eq("category_id", categoryId));// 3.查询关联表的所有数据,不加条件List<AttrAttrgroupRelationEntity> relationEntities = attrAttrgroupRelationService.list();// 4.获取所有的attrIdList<Long> attrIds = relationEntities.stream().map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());// 5.过滤出没有关联的属性,并且attrType为1List<AttrEntity> noRelationAttr = allAttr.stream().filter(attrEntity -> {return !attrIds.contains(attrEntity.getAttrId()) && attrEntity.getAttrType() == 1;}).collect(Collectors.toList());return noRelationAttr;}
3.AttrgroupController.java 编写接口
    /*** 根据属性组id获取可以关联的属性** @param attrGroupId* @return*/@RequestMapping("{attrGroupId}/noattr/relation")public R noattrRelation(@PathVariable("attrGroupId") Long attrGroupId) {List<AttrEntity> attrRelation = attrService.getAttrRelation(attrGroupId);return R.ok().put("page", attrRelation);}
4.测试并分析结果
1.请求携带属性组参数为1,此时返回了一个可关联的属性

image-20240421143748163

2.首先从属性组表中查找id为1的categoryId为301

image-20240421144053620

3.然后从属性表中查找是基本属性的,并且categoryId为301的发现有12,14,21符合要求

image-20240421144153571

4.最后从关联表中查询是否属性id已经存在,发现12,21已经被关联,所以最终只返回id为14的属性

image-20240421144240296

3.后端 sunliving-commodity 模块(支持分页,包含分页模板!!!)
1.AttrService.java 添加方法 根据属性组id获取可以关联的属性,并且分页
    /*** 根据属性组id获取可以关联的属性,并且分页* @param params* @param attrGroupId* @return*/PageUtils  queryPageAttrRelation(Map<String, Object> params, Long attrGroupId);
2.AttrServiceImpl.java 实现方法(也相当于分页模板)
  • 前端传入的参数一般为
    • key:查询的key
    • page:当前页
    • limit:页面大小
  • 进行分页查询的步骤
    • 获取关键字和分页参数
    • 使用QueryWrapper构建查询条件
    • 创建Page对象,传入page和limit
    • 对Page对象进行处理
    • 处理后,使用PageUtils封装返回结果
    @Overridepublic PageUtils queryPageAttrRelation(Map<String, Object> params, Long attrGroupId) {// 1.获取关键字和分页参数String key = (String) params.get("key");int currentPage = Integer.parseInt(params.getOrDefault("page", "1").toString());int pageSize = Integer.parseInt(params.getOrDefault("limit", "10").toString());// 2.构建基本查询条件,根据key进行查询QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();if (StringUtils.isNotBlank(key)) {queryWrapper.and(wrapper ->wrapper.eq("attr_id", key).or().like("attr_name", key));}// 3.获取已关联的属性IDSet<Long> relatedAttrIds = attrAttrgroupRelationService.list().stream().map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toSet());// 4.排除已关联的属性IDif (!relatedAttrIds.isEmpty()) {queryWrapper.notIn("attr_id", relatedAttrIds);}// 5.附加查询条件,根据attrGroupId查询出对应的categoryIdif (attrGroupId != null) {Long categoryId = attrgroupDao.selectById(attrGroupId).getCategoryId();if (categoryId != null) {queryWrapper.eq("category_id", categoryId);queryWrapper.eq("attr_type", 1);  // 只包括类型为1的属性}}// 6.执行分页查询Page<AttrEntity> page = new Page<>(currentPage, pageSize);IPage<AttrEntity> attrPage = attrDao.selectPage(page, queryWrapper);// 7.使用PageUtils封装返回结果return new PageUtils(attrPage);}
3.分页结果工具类 PageUtils
/*** 分页工具类** @author Mark sunlightcs@gmail.com*/
public class PageUtils implements Serializable {private static final long serialVersionUID = 1L;/*** 总记录数*/private int totalCount;/*** 每页记录数*/private int pageSize;/*** 总页数*/private int totalPage;/*** 当前页数*/private int currPage;/*** 列表数据*/private List<?> list;/*** 分页* @param list        列表数据* @param totalCount  总记录数* @param pageSize    每页记录数* @param currPage    当前页数*/public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {this.list = list;this.totalCount = totalCount;this.pageSize = pageSize;this.currPage = currPage;this.totalPage = (int)Math.ceil((double)totalCount/pageSize);}/*** 分页*/public PageUtils(IPage<?> page) {this.list = page.getRecords();this.totalCount = (int)page.getTotal();this.pageSize = (int)page.getSize();this.currPage = (int)page.getCurrent();this.totalPage = (int)page.getPages();}public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public int getCurrPage() {return currPage;}public void setCurrPage(int currPage) {this.currPage = currPage;}public List<?> getList() {return list;}public void setList(List<?> list) {this.list = list;}}
4.测试

image-20240421163852974

image-20240421185521692

5.新建属性和属性组之间的关联(支持批量添加)

1.分析前端请求 attrgroup-attr-relation.vue
1.点击确认新增

image-20240421190533084

2.调用submitAddRealtion方法

image-20240421190711525

3.可以得到新增的基本属性的数据

image-20240421190704860

4.可以看到,将attrId和attrGroupId组成的js对象数组传递给了后端

image-20240421190908128

2.后端 sunliving-commodity 模块
1.直接写controller即可
    /*** 批量增加关联** @param entities* @return*/@RequestMapping("/attr/relation")public R relation(@RequestBody AttrAttrgroupRelationEntity[] entities) {attrAttrgroupRelationService.saveBatch(Arrays.asList(entities));return R.ok();}
2.测试

image-20240421191825365

image-20240421191831778

image-20240421191836262

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建站平台布局结构

建站平台布局结构对于网站的成功至关重要。一个良好的布局结构能够有效地吸引用户&#xff0c;提升用户体验&#xff0c;并且有助于网站的搜索引擎优化&#xff08;SEO&#xff09;。在设计网站布局结构时&#xff0c;需要考虑到用户导航、信息层次结构、页面加载速度等方面&am…

Android JetPack快速上手

学习地址 【Android Jetpack组件从入门到入坟&#xff0c;全家桶全面学习教程精讲&#xff0c;通俗易懂】 review 研究生期间接触过一部分android开发&#xff0c;近期有个小项目需要进行开发&#xff0c;临时恶补了一下Android相关知识点&#xff0c;突然发现Android新增了…

VBA语言専攻每周通知20240524

通知20240524 各位学员∶本周MF系列VBA技术资料增加611-615讲&#xff0c;T3学员看到通知后请免费领取,领取时间5月24日晚上18:00-5月26日晚上18:00。本次增加内容&#xff1a; MF611:用InputBox录入日期 MF612:信息提示10秒后关自动关闭 MF613:只是信息提示10秒 MF614:显…

如何解决Nginx反向代理不生效?

目录 背景 过程 日志 检查配置文件 重启服务 检查容器内的配置文件 容器和宿主机 其他 背景 用了两年的nginx新加的反向代理不生效 Docker挂载的配置文件启动的Nginx&#xff0c;配置一切正常&#xff0c;但是反向代理不生效&#xff0c;???先自查一波 过程 日志 …

RDDM论文阅读笔记

CVPR2024的残差去噪模型。把diffusion 模型的加噪过程分解为残差diffusion和noise diffusion&#xff0c;其中残差diffusion模拟从target image到degraded image的过程&#xff0c;而noise diffusion则是原来的diffusion过程&#xff0c;即从图片到高斯噪声的加噪过程。前者可以…

如何让社区版IDEA变得好用

如何让社区版IDEA变得好用 背景 收费版的idea功能非常强大&#xff0c;但是费用高。社区版的免费&#xff0c;但是功能被阉割了。如何才能让社区版Idea变得好用&#xff0c;就需要各种插件支持了。经过全局配置编码&#xff0c;maven&#xff0c;jdk版本&#xff0c;在加上各…

架构二。。

1、CAP 只能3选2 1&#xff09;一致性&#xff08;Consistency&#xff09; 客户每次读都是返回最新的写操作结果 2&#xff09;可用性&#xff08;Availability&#xff09; 非故障节点在合理的时间内返回合理的响应 3&#xff09;分区容忍性&#xff08;Partition Tolerance…

Ribbon负载均衡(自己总结的)

文章目录 Ribbon负载均衡负载均衡解决的问题不要把Ribbon负载均衡和Eureka-Server服务器集群搞混了Ribbon负载均衡代码怎么写ribbon负载均衡依赖是怎么引入的&#xff1f; Ribbon负载均衡 负载均衡解决的问题 首先Ribbon负载均衡配合Eureka注册中心一块使用。 在SpringCloud…

计算机网络之应用层知识点总结

6.1 网络应用模型 &#xff08;1&#xff09;应用层概述 &#xff08;2&#xff09;网络应用模型的介绍 客户/服务器&#xff08;C/S&#xff09;模型 P2P模型 6.2 域名解析系统DNS &#xff08;1&#xff09;DNS系统介绍 &#xff08;2&#xff09;域名 &#xff08;3&#…

学习平台|基于Springboot+vue的学习平台系统的设计与实现(源码+数据库+文档)

学习平台系统 目录 基于Springboot&#xff0b;vue的学习平台系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3学生功能模块 4教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

不小心丢失mfc140u.dll文件怎么办?mfc140u.dll丢失的解决办法

当您发现mfc140u.dll文件不见了或者受损&#xff0c;别担心&#xff0c;我们可以一起解决这个问题&#xff01;首先&#xff0c;您可能会注意到一个小提示&#xff0c;当您尝试打开某些程序时&#xff0c;屏幕上会跳出一个消息说“找不到mfc140u.dll”或者“mfc140u.dll文件缺失…

解决docker中container运行闪退终止的问题

在运行bindmount-test时&#xff0c;点击完运行按钮后闪退结束运行。 第一步查看log日志&#xff1a; 2024-05-18 23:46:18 Error: Cannot find module /app/nodemon 2024-05-18 23:46:18 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:668:15) …

2024-5-24 石群电路-15

2024-5-24&#xff0c;星期五&#xff0c;22:15&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天最后一天上班&#xff0c;终于要放返校假啦&#xff0c;开心&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;不过放假也不能耽误…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(八)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 15 节&#xff09; P15《14.ArkUI组件-状态管理state装饰器》 回到最初的 Hello World 案例&#xff0c;首先验证 如果删掉 State…

物理服务器介绍

物理服务器介绍 概述分类按服务器应用分类按服务器结构分类塔式服务器机架式服务器刀片式服务器机架式服务器与刀片式服务器的对比按处理器个数分类按处理器架构分类 主板概述工作原理物理结构技术参数 CPU概述工作原理指令集相关技术技术参数主流产品 内存概述类型相关技术技术…

C语言-atoi()库函数的模拟实现

文章目录 前言一、atoi()库函数的介绍及使用1.1 atoi()库函数介绍1.2 atoi()库函数使用 二、atoi()库函数的模拟实现2.1 函数设计2.2 函数实现思路2.3 具体实现2.4 测试 总结 前言 本篇文章介绍c语言中库函数atoi()的使用&#xff0c;以及模拟实现库函数。 一、atoi()库函数的…

Threes 特效 炫酷传送门HTML5动画特效

基于Three.js的HTML5 3D动画&#xff0c;这个动画模拟了游戏中的一个炫酷的3D场景&#xff0c;支持360度视角查看&#xff0c;也支持鼠标滚轮进行缩放。画面中主要展现了一个游戏中传送门的效果&#xff0c;同时还有路两边的围栏、灯笼、石头&#xff0c;以及星光闪闪的萤火虫&…

IO端口编址

统一编址 特点 独立编址 特点 内存地址分配 区别 应用 IO端口地址译码 硬件上的实现 示例1&#xff1a; 示例2&#xff1a; IO指令 软件上的实现 示例

2024最佳画图软件合集,操作简单无需下载!

随着数字时代的到来&#xff0c;绘画软件已经成为创造性表达和艺术创作不可或缺的工具。无论你是设计师、艺术家&#xff0c;还是只是对创作充满热情&#xff0c;2024年的绘画软件集都为你提供了各种各样的选择&#xff0c;这样你就可以在数字画布上释放你的想法。本文将重点推…

XV4001系列陀螺仪传感器广泛用于车载导航系统

随着汽车电子化趋势的加速&#xff0c;越来越多的汽车配备一系列先进的车载导航系统&#xff0c;这些导航系统功能的实现都依赖于精确的传感器数据(位置、车速、转向角度、车轮转速等)。传感器作为这些系统的核心组件&#xff0c;其准确性和可靠性直接影响到整个导航系统的性能…