Bootstrap

product/admin/list?page=0&size=10&field=jancode&value=4562249292272


在这里插入图片描述

在这里插入图片描述

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'
      });
    });
  },
;