当前位置: 首页 > news >正文

如何使用springboot项目如何实现小程序里面商品的浏览记录功能案例

1 第一步,数据库表结构设计

DROP TABLE IF EXISTS `product_browse_history`;
CREATE TABLE `product_browse_history` (
  `id` bigint NOT NULL COMMENT '记录编号',
  `spu_id` bigint DEFAULT NULL COMMENT '商品 SPU 编号',
  `user_id` bigint DEFAULT NULL COMMENT '用户编号',
  `user_deleted` tinyint(1) DEFAULT NULL COMMENT '用户是否删除',
  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='商品浏览记录';

SET FOREIGN_KEY_CHECKS = 1;

第二部:在小程序里面 点击商品详情的时候 我们可以在这个浏览记录表里面新增一条数据,同一个商品只会有一条,注意这里表结构也可以新增浏览记录次数字段

这样我们可以在小程序里面通过查询接口来获取浏览记录数据啦

 @DeleteMapping(value = "/clean")
    @Operation(summary = "清空商品浏览记录")
    public CommonResult<Boolean> deleteBrowseHistory() {
        productBrowseHistoryService.hideUserBrowseHistory(getLoginUserId(), null);
        return success(Boolean.TRUE);
    }

    @GetMapping(value = "/page")
    @Operation(summary = "获得商品浏览记录分页")
    public CommonResult<PageResult<AppProductBrowseHistoryRespVO>> getBrowseHistoryPage(AppProductBrowseHistoryPageReqVO reqVO) {
        ProductBrowseHistoryPageReqVO pageReqVO = BeanUtils.toBean(reqVO, ProductBrowseHistoryPageReqVO.class)
                .setUserId(getLoginUserId())
                .setUserDeleted(false); // 排除用户已删除的(隐藏的)
        PageResult<ProductBrowseHistoryDO> pageResult = productBrowseHistoryService.getBrowseHistoryPage(pageReqVO);
        if (CollUtil.isEmpty(pageResult.getList())) {
            return success(PageResult.empty());
        }

        // 得到商品 spu 信息
        Set<Long> spuIds = convertSet(pageResult.getList(), ProductBrowseHistoryDO::getSpuId);
        Map<Long, ProductSpuDO> spuMap = convertMap(productSpuService.getSpuList(spuIds), ProductSpuDO::getId);
        return success(BeanUtils.toBean(pageResult, AppProductBrowseHistoryRespVO.class,
                vo -> Optional.ofNullable(spuMap.get(vo.getSpuId()))
                        .ifPresent(spu -> vo.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl()).setPrice(spu.getPrice())
                                .setSalesCount(spu.getSalesCount()).setStock(spu.getStock()))));
    }

相关文章:

  • Spring--BeanDefinition的用法
  • C++ Boost面试题大全及参考答案
  • VSCode 中设置 Git 忽略仅因时间戳修改导致的文件变更【使用deepseek生成的一篇文章】
  • 【网络编程】基于 TCP协议 的服务器-客户端通信模型的加密传输、多线程并发服务器
  • Qt--源码
  • Xen Center虚拟机Centos 7.x磁盘扩容
  • Java 中的 CopyOnWriteArrayList 是什么?
  • 工作-绩效笔记
  • Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)
  • Vue 3 30天精进之旅:Day 30 - Vue生态系统的未来探索
  • C++数据切片问题,Plus多态
  • C++ STL中的reverse/unique/sort/lower_bound/upper_bound函数使用
  • Spring DI
  • React组件化开发详解
  • 责任链模式原理详解和源码实例以及Spring AOP拦截器链的执行源码如何使用责任链模式?
  • 【Javascript Day20】
  • MariaDB10创建用户并授权
  • Git LFS介绍(Large File Storage)大文件扩展,将大文件存储在外部存储,仓库中只记录文件的元数据(大文件的指针,类似一个小的占位符文件)
  • 深入了解XML:初学者的全面指南
  • 计算机网络:应用层 —— 动态主机配置协议 DHCP
  • 美众议院通过法案将“墨西哥湾”更名为“美国湾”
  • 上海推动AI+文旅深度融合,MaaS平台和产业基地落地徐汇
  • OpenAI任命了一位新CEO
  • 深入贯彻中央八项规定精神学习教育中央第一指导组指导督导河北省见面会召开
  • 优化网络营商环境,上海严厉打击涉企网络谣言、黑灰产等违法犯罪
  • 首批18位!苏联籍抗日航空英烈信息更新