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

文章目录

    • 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…

Jackson的使用技巧,实现一个JSON字符串转Map的工具

Jackson Jackson是Java编程语言中使用非常广泛的一个用于处理JSON格式数据的库。它提供了快速、灵活、功能丰富的方式来解析和生成JSON数据。Jackson的一些显著优势包括: 1. 高性能 Jackson在处理大型JSON数据时展现出了优异的性能。它采用了高效的处理方式和算法来解析和…

椋鸟Linux笔记#0:学习Linux前

文章目录 关于LinuxLinux环境的搭建直接安装Linux系统安装在虚拟机上安装为WSL2子系统使用云服务白嫖云服务&#xff08;不是广告&#xff09; 直接控制台连接远程服务器使用XShell连接远程服务器 萌新的学习笔记&#xff0c;写错了恳请斧正。 关于Linux Linux 是一种开源操作…

Android JetPack快速上手

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

学习javascript的数组

1.什么是数组? 数组&#xff1a;&#xff08;Array&#xff09;是一种数据类型&#xff0c;属于引用数据类型。 作用&#xff1a;在单个变量名下存储多个数据 2.声明语法 let 数组名 [数据1&#xff0c;数据2......]; 注意事项&#xff1a; 数组是按照顺序保存&#xff0…

企业级大数据平台建设方案

企业级大数据平台建设方案 方案简介硬件软件分布式存储&#xff1a;Foreman作为集群管理工具Sparkcloudera 方案简介 该方案是多年前在Roadstar.ai任职时的建设方案&#xff0c;现将方案部分细节开源&#xff0c;结合本博客的其他文章&#xff0c;能够建立可靠的企业大数据平台…

来盘点我的校园生活(4)

今天我们班出大事了&#xff01; 今天英语老师没来&#xff0c;我们以为其他英语老师来了&#xff0c;但下午一去办公室&#xff0c;我小脑直接萎缩&#xff0c;我都看得怀疑人生了&#xff0c;一个英语老师没有&#xff0c;作业咋办呢&#xff1f; 后来通过18班班主任英语老…

ollama导入自己微调后的模型胡言乱语

1.ollama导入自己微调后的模型胡言乱语 原因&#xff1a;Modelfile的模板格式不对&#xff0c;对的如下所示 ##格式0FROM tinyllama-my-model.gguf### Set the system message SYSTEM """ You are a super helpful helper. """PARAMETER stop …

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:显…

代码随想录算法跟练 | Day3 | 链表Part1

个人博客主页&#xff1a;http://myblog.nxx.nx.cn 代码GitHub地址&#xff1a;https://github.com/nx-xn2002/Data_Structure.git Day3 203.移除链表元素 题目链接&#xff1a; https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述&#xff1a; 给你一个…

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

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

【FAQ】HarmonyOS SDK 闭源开放能力 —Ads Kit

1.问题描述&#xff1a; 开屏广告效果最好的实现方式&#xff1f; 解决方法&#xff1a; 1、动画效果和开发者的实现方式有关&#xff0c;和开屏广告页面本身没什么关系的&#xff1b; 2、示例代码中使用Router跳转的方式展示广告&#xff0c;主要是用于演示广告接口怎么集…

RDDM论文阅读笔记

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

rocketmq 学习一

官方文档&#xff1a;RocketMQ 官方网站 | RocketMQ 一 介绍 RocketMQ 诞生于 2012 年&#xff0c;诞生即开源。2012&#xff5e;2015 年&#xff0c;RocketMQ 一直在通过内部电商业务打磨自身服务能力,并在 2015 年于阿里云上线公测。2016 年&#xff0c;阿里云 RocketMQ 完…

如何让社区版IDEA变得好用

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

《扑克牌游戏》

描述 有一个扑克牌游戏&#xff0c;游戏规则是不断地摸牌&#xff0c;尽可能地使手上的牌的点数接近于10&#xff0c;最完美的情况是总点数为10&#xff0c;不可以超过10&#xff0c;否则就爆了。输入10张牌的点数&#xff0c;(每张点数不超过10)&#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…

lua函数执行和虚拟机指令

Stack based vs Register based VM 可直接参考 Stack based vs Register based VM lua函数调用 先看一下lua函数的结构&#xff1a; /* ** Function Prototypes */ typedef struct Proto {CommonHeader;TValue *k; /* constants used by the function */Instruction *code;…

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

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&#…