product/admin/list?page=0size=10field=jancodevalue=4562249292272

文章目录

  • 1、ProductController
  • 2、AdminCommonService
  • 3、ProductApiService
  • 4、ProductCommonService
  • 5、ProductSqlService

在这里插入图片描述

在这里插入图片描述

https://api.crossbiog.com/product/admin/list?page=0&size=10&field=jancode&value=4562249292272

1、ProductController

    @GetMapping("admin/list")
    @ApiOperation("分页列表")
    public BaseResult list(PageWithSearch basePage, @ApiIgnore @SessionAttribute(Constants.ADMIN_ID) Integer adminId) {
        checkParam(basePage.getField(), basePage.getValue());
        adminId = adminCommonService.getVipIdByProduct(adminId);
        return BaseResult.success(productApiService.findPage(adminId, basePage));
    }

2、AdminCommonService

    /**
     * 获取商品管理人的上级vip id
     * 当操作者为商品管理人时获取上级的vip id
     * 否则返回自身
     */
    public Integer getVipIdByProduct(Integer nowId) {
        return hasRole(nowId, Admin.ROLE_PRODUCT) || hasRole(nowId, Admin.ROLE_QUALIFICATION) || hasRole(nowId, Admin.ROLE_STORE) ? findCompanySuperId(nowId) : nowId;
    }
     /**
     * 查询公司超管id
     */
    public Integer findCompanySuperId(Integer adminId) {
        return adminService.findCompanySuperId(adminId);
    }

3、ProductApiService

    /**
     * 分页列表
     */
    public Page<ProductListDto> findPage(Integer nowId, PageWithSearch page) {
        Page<ProductWithShareDto> productPage = productCommonService.findPage(nowId, page);
        return new PageImpl<>(convertToListDto(productPage.getContent(), nowId), page.toPageable(), productPage.getTotalElements());
    }

4、ProductCommonService

    /**
     * 产品管理-产品分页列表
     */
    public Page<ProductWithShareDto> findPage(Integer nowId, PageWithSearch basePage) {
        return productSqlService.findPage(nowId, basePage);
    }    

5、ProductSqlService

    /**
     * 产品管理-分页列表
     */
    public Page<ProductWithShareDto> findPage(Integer nowId, PageWithSearch basePage) {
        StringBuilder sql = new StringBuilder();
        Map<String, Object> paramMap = new HashMap<>(4);
        sql.append("SELECT DISTINCT ").append(SqlUtil.sqlGenerate("p", Product.class)).append(",a.send_id, a.edit_auth FROM product p ");
        if (!StringUtils.isEmpty(basePage.getField()) && !StringUtils.isEmpty(basePage.getValue()) && brandParamStr.contains(basePage.getField())) {
            sql.append("INNER JOIN brand b ON p.brand_id = b.id AND b.").append(SqlUtil.camelToUnderline(basePage.getField().replaceAll("brand", ""))).append(" LIKE :").append(basePage.getField()).append(" ");
            paramMap.put(basePage.getField(), "%" + basePage.getValue() + "%");
        }
        //sql.append("LEFT JOIN product_admin_mapping a ON p.id = a.product_id ");
        //sql.append("AND a.admin_id=").append(nowId).append(" AND a.read_auth =").append(CommonStatusEnum.NORMAL.getValue()).append(" ");
        //sql.append("WHERE (p.creator_id =").append(nowId).append(" OR ").append("a.id IS NOT NULL) ");
        sql.append("INNER JOIN product_admin_mapping a ON p.id = a.product_id AND a.admin_id=").append(nowId).append(" ");
        //有编辑权限 || (有查看权限 && 产品状态为显示)
        sql.append("WHERE (a.edit_auth =").append(CommonStatusEnum.NORMAL.getValue()).append(" OR (a.read_auth =").append(CommonStatusEnum.NORMAL.getValue()).append(" AND p.status =").append(CommonStatusEnum.NORMAL.getValue()).append(")) ");
        paramHandle(sql, paramMap, basePage.getField(), basePage.getValue());
        sql.append("ORDER BY p.ranks DESC,p.created_date DESC ");
        List result = executeSql(sql, paramMap, basePage.getPage(), basePage.getSize());
        if (result.isEmpty()) {
            return new PageImpl<>(Collections.emptyList(), basePage.toPageable(), 0);
        }
        return new PageImpl<>(parseToProductWithShare(result), basePage.toPageable(), countPage(nowId, basePage.getField(), basePage.getValue()));
    }

需求:微信小程序使用二维码扫描条形码查询商品,接口使用上述pc端的。
在这里插入图片描述

  // 扫描二维码
  scanQrcode: function() {
    wx.scanCode({
      onlyFromCamera: false,  // 允许从相机和相册中选择图片
      success: (res) => {
        const jancode = res.result;
        console.log("扫描结果:", jancode);
        this.getProductByJancode(jancode);
      },
      fail: (err) => {
        wx.showToast({
          title: '扫描失败,请重试',
          icon: 'none'
        });
      }
    });
  },

  // 获取 token
  getToken: function() {
    return new Promise((resolve,reject)=>{
      const token = wx.getStorageSync('token')
      console.log('Token:', token);
      resolve(token)
    });
  },
  
  // 根据条码查询产品信息
  getProductByJancode: function(jancode) {
    this.getToken().then((token) => {
      if (!token) {
        wx.showToast({
          title: '获取 token 失败,请重试',
          icon: 'none'
        });
        return;
      }
      // 构建带有查询参数的URL
    const url = `https://api.crossbiog.com/product/admin/list?page=0&size=10&field=jancode&value=${encodeURIComponent(jancode)}`;
    
      wx.request({
        url: url, // 使用新的URL
        //url: `https://api.crossbiog.com/product/admin/detailByJancode`, // 使用配置文件中的URL
        //url: `http://localhost:8087/product/admin/detailByJancode`,
        method: 'GET',
        data: {
          //jancode: jancode
        },
        header: {
          'token': `${token}`
        },
        success: (res) => {
          console.log("res=" + res);
          console.log("后端返回的数据:", res.data); // 添加日志输出
          // if (res.statusCode === 200 && res.data && res.data.data) {
          //   const product = res.data.data;
          //   if (product) {
          //     // 显示产品信息
          //     this.setData({
          //       products: [product],
          //       showNoResultsImage: false // 如果有结果,隐藏无结果图片
          //     });
          //   } else {
          //     // 没有找到产品
          //     wx.showToast({
          //       title: '未找到该条码对应的产品',
          //       icon: 'none'
          //     });
          //     this.setData({
          //       showNoResultsImage: true // 如果没有结果,显示无结果图片
          //     });
          //   }
          // } else {
          //   wx.showToast({
          //     title: '数据加载失败',
          //     icon: 'none'
          //   });
          // }
          if (res.statusCode === 200 && res.data) {
            const products = res.data.data.content || []; // 获取产品列表,如果没有则为空数组
            const formattedProducts = products.map(product => ({
              ...product,
              image:  `https://www.crossbiog.com/${product.image}`
            }));
            if (products.length > 0) {
              // 显示产品信息
              this.setData({
                products: [...formattedProducts],
                //products: products, // 直接赋值整个产品列表
                showNoResultsImage: false // 如果有结果,隐藏无结果图片
              });
            } else {
              // 没有找到产品
              wx.showToast({
                title: '未找到该条码对应的产品',
                icon: 'none'
              });
              this.setData({
                showNoResultsImage: true // 如果没有结果,显示无结果图片
              });
            }
          } else {
            wx.showToast({
              title: '数据加载失败',
              icon: 'none'
            });
          }
        },
        fail: (err) => {
          wx.showToast({
            title: '请求失败',
            icon: 'none'
          });
        }
      });
    }).catch((err) => {
      wx.showToast({
        title: err.message,
        icon: 'none'
      });
    });
  },

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux介绍------VMWare的卸载,下载,安装------及基础命令使用

文章目录 Linux第一天1、为什么要学习linux&#xff1f;2、怎么去学linux&#xff1f;&#xff08;什么是大数据&#xff09;3、VMWare的卸载&#xff0c;下载&#xff0c;安装4、检查网卡5、创建新的虚拟机&#xff08;安装步骤&#xff1a;看视频&#xff09;6、几个名字的理…

游戏引擎学习第38天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上&#xff0c;但颜色错误的问题。问题最终查明是因为使用了一个调整工具&#xff0c;导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…

leetcode 二进制数转字符串

1.题目要求: 2.题目代码: class Solution { public:string printBin(double num) {string result;double compare_value 1.0;//先给把0和.赋值给result;result.push_back(0);result.push_back(.);while(result.size() < 33){//利用十进制转换成二进制的方法//1.先给num …

JS进阶DAY3|页面加载事件和页面滚动事件

目录 一、页面加载事件 1.1 DOMContentLoaded 事件 1.1.1 触发时机 1.1.2 用途 1.1.3 代码示例document.addEventListener(DOMContentLoaded, (event) > { 1.2 load 事件 1.2.1 触发时机 1.2.2 用途 1.2.3 代码示例 二、页面滚动事件 1.1 scroll事件 1.1.1 触…

overleaf 写论文 语法笔记

1.找参考的期刊/论文模板 注册账户后并登录后进入这个界面&#xff0c;创建的所有历史项目会在这个界面显示&#xff0c;后期可以继续修改。 创建新项目&#xff1a;点击绿色按钮“创建新项目”后&#xff0c;可以新建空白项目&#xff0c;可以选择模板直接往模板里添加内容,…

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

Pandas | skill | 将groupby分组后的数据使用堆叠图像展示

groupby堆叠图 计算商品名称和销售数量计算商品名称和销售总额在每个颜色段上标注商品名称和平均销售金额 计算商品名称和销售数量 # 筛选出四个类别下的商品数据 categories_of_interest [Clothing, Accessories, Footwear, Outerwear] # data[Category]列中的元素是否在cat…

selenium常见接口函数使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1. 查找 查找方式 css_s…

vue-router查漏补缺

一、动态路由匹配 1.带参数的动态路由匹配 import User from ./User.vue// 这些都会传递给 createRouter const routes [// 动态字段以冒号开始{ path: /users/:efg, component: User }, ]这种方式的路由会匹配到/users/abc或者/users/123,路径参数用冒号:表示&#xff0c;并…

深度和法线纹理

屏幕后期处理效果的基本原理就是当游戏画面渲染完毕后通过获取到该画面的信息进行额外的效果处理 之前的边缘检测、高斯模糊、Bloom、运动模糊等效果都是基于获取当前屏幕图像中的像素信息进行后期处理的 如果仅仅根据像素信息来进行一些效果处理&#xff0c;存在以下问题&…

Vue3小兔鲜电商项目

创建项目 npm install 装包 创建文件夹 git工具管理项目 基于create-vue创建出来的项目默认没有初始化git仓库&#xff0c;需要我们手动初始化 执行命令并完成首次提交&#xff1a; git init git add . git commit -m "init"

短视频矩阵系统SEO优化排名技术的源码搭建与实施:

在开发短视频SEO优化排名技术时&#xff0c;虽然初步观察可能让人认为仅通过get和set这两个代理&#xff08;trap&#xff09;就能实现&#xff0c;但实际操作中远不止如此。为了更全面地控制私有属性的访问权限&#xff0c;还需要实现has、ownKeys以及getOwnPropertyDescripto…

Ubuntu中安装配置交叉编译工具并进行测试

01-下载获取交叉编译工具的源码 按照博文 https://blog.csdn.net/wenhao_ir/article/details/144325141的方法&#xff0c;把imx6ull的BSP下载好后&#xff0c;其中就有交叉编译工具。 当然&#xff0c;为了将来使用方便&#xff0c;我已经把它压缩并传到了百度网盘&#xff…

Fiddler 5.21.0 使用指南:过滤浏览器HTTP(S)流量下(四)

概述 在上一篇文章中&#xff0c;我们介绍了一部分简单的过滤功能&#xff0c;已经可以帮助我们较为准确的定位到感兴趣的请求&#xff1b;提升我们的工作效率&#xff0c;我们可以通过设置更为复杂的过滤规则&#xff0c;精准到定位的我们想要的请求和响应信息。专注于分析对…

错题:Linux C语言

题目&#xff1a;手写代码&#xff1a;判断一个数&#xff08;int类型的整数&#xff09;中有有多少1 题目&#xff1a;手写代码&#xff1a;判断一个数(转换成二进制表示时)有几个1 #include <stdio.h> int main(int argc, const char *argv[]) { //判断一个数&#xf…

MFC扩展库BCGControlBar Pro v36.0新版亮点:黑色主题中的自动反转图标

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v36.0已全新发布了&#xff0c;这个版本在黑暗主题中添加自动图标反转、新增一个全新的S…

【PlantUML系列】流程图(四)

目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字&#xff1b;结束一般使用stop/end关键字。基础用法包括&#xff1a; start ... stopstart ...…

【Redis】深入解析Redis缓存机制:全面掌握缓存更新、穿透、雪崩与击穿的终极指南

文章目录 一、Redis缓存机制概述1.1 Redis缓存的基本原理1.2 常见的Redis缓存应用场景 二、缓存更新机制2.1 缓存更新的策略2.2 示例代码&#xff1a;主动更新缓存 三、缓存穿透3.1 缓存穿透的原因3.2 缓解缓存穿透的方法3.3 示例代码&#xff1a;使用布隆过滤器 四、缓存雪崩4…

LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略

LLMs之Agent之Lares&#xff1a;Lares的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇博文介绍了 Lares&#xff0c;一个由简单的 AI 代理驱动的智能家居助手模拟器&#xff0c;它展现出令人惊讶的解决问题能力。 >> 背景痛点&#xff1a;每天都有新的…

快速集成外部业务数据:观测云如何颠覆传统监控的边界

01 传统监控的局限&#xff1a;被困在技术的“象牙塔” 过去的监控工具更多地服务于 IT 技术人员&#xff0c;就像是只为运维人员准备的“秘密花园”。服务器负载、网络延迟、系统资源——这些技术指标构成了一个封闭的世界&#xff0c;与业务层隔绝&#xff0c;就像是运维人员…