亿级高并发电商项目-- 实战篇 --万达商城项目 七(品牌模块、商品类型模块等开发)

news2024/11/25 10:25:29

  

专栏:高并发---分布式 

在管理商品时,除了商品名、价格、商品介绍等基本参数外。还需 要给商品添加品牌、商品类型、商品规格等参数。比如Iphone13的 品牌是苹果。商品类型属于手机通讯>手机>手机。规格有机身颜色: 星光色、版本:128G。品牌、商品类型、商品规格都需要我们在后 台进行管理。

编写品牌服务接口 

接下来我们编写品牌相关的CRUD方法,首先在通用模块编写品牌服务接口:

// 品牌服务
public interface BrandService {
    // 根据id查询品牌
    Brand findById(Long id);
    // 查询所有品牌
    List<Brand> findAll();
    // 新增品牌
    void add(Brand brand);
    // 修改品牌
    void update(Brand brand);
    // 删除品牌
    void delete(Long id);
    // 分页查询品牌
    Page<Brand> search(Brand brand, int page, int size);
}

 编写品牌服务实现类

商品服务模块编写品牌服务实现类

@DubboService
public class BrandServiceImpl implements
BrandService {
    @Autowired
    private BrandMapper brandMapper;
    @Override
    public Brand findById(Long id){
        if (id == 0){
            int i = 1/0; // 模拟系统异常
       }else if (id == -1){
            throw new BusException(CodeEnum.PARAMETER_ERROR); //模拟业务异常
       }
        return brandMapper.selectById(id);
   }
    @Override
    public List<Brand> findAll() {
        return brandMapper.selectList(null);
     }
    @Override
    public void add(Brand brand) {
        brandMapper.insert(brand);
   }
    @Override
    public void update(Brand brand) {
        brandMapper.updateById(brand);
   }
    @Override
    public void delete(Long id) {
        brandMapper.deleteById(id);
   }
    @Override
    public Page<Brand> search(Brand brand, int page, int size) {
        QueryWrapper<Brand> queryWrapper = new QueryWrapper();
        // 判断品牌名不为空
        if (brand != null && StringUtils.hasText(brand.getName())){
           queryWrapper.like("name",brand.getName());
       }
        Page<Brand> page1 = brandMapper.selectPage(new Page(page, size),queryWrapper);
        return page1;
    }
}

编写品牌控制器

在后台管理API模块编写品牌控制器:

/**
* 品牌
*/
@RestController
@RequestMapping("/brand")
public class BrandController {
    // 远程注入
    @DubboReference
    private BrandService brandService;
    /**
     * 根据id查询品牌
     *
     * @param id 品牌id
     * @return 查询结果
     */
    @GetMapping("/findById")
    public BaseResult<Brand> findById(Long id) {
        Brand brand = brandService.findById(id);
        return BaseResult.ok(brand);
   }
    /**
     * 查询所有品牌
     *
     * @return 所有品牌
     */
    @GetMapping("/all")
    public BaseResult<List<Brand>> findAll()
      {
        List<Brand> brands = brandService.findAll();
        return BaseResult.ok(brands);
   }
    /**
     * 新增品牌
     *
     * @param brand 品牌对象
     * @return 执行结果
     */
    @PostMapping("/add")
    public BaseResult add(@RequestBody Brand brand) {
        brandService.add(brand);
        return BaseResult.ok();
      }
    /**
     * 修改品牌
     *
     * @param brand 品牌对象
     * @return 执行结果
     */
      @PutMapping("/update")
    public BaseResult update(@RequestBody
Brand brand) {
        brandService.update(brand);
        return BaseResult.ok();
   }
    /**
     * 删除品牌
     *
     * @param id 品牌id
     * @return 执行结果
     */
    @DeleteMapping("/delete")
    public BaseResult delete(Long id) {
        brandService.delete(id);
        return BaseResult.ok();
   }
    /**
     * 分页查询品牌
     *
     * @param brand 查询条件对象
     * @param page 页码
     * @param size 每页条数
     * @return 查询结果
     */
    @GetMapping("/search")
    public BaseResult<Page<Brand>> search(Brand brand, int page, int size) {
        Page<Brand> page1 = brandService.search(brand, page, size);
        return BaseResult.ok(page1);
   }
}

启动服务,测试品牌控制器方法

编写商品类型服务接口

接下来我们编写商品类型相关的CRUD方法,首先在通用模块编写商品类型服务接口:

// 商品类型
public interface ProductTypeService {
    // 新增商品类型
    void add(ProductType productType);
    // 修改商品类型
    void update(ProductType productType);
    // 根据id查询商品类型
    ProductType findById(Long id);
    // 删除商品类型
    void delete(Long id);
    // 分页查询
    Page<ProductType> search(ProductType productType,int page, int size);
    // 根据条件查询商品类型
    List<ProductType> findProductType(ProductType productType);
}

 编写商品类型服务实现类

1、在商品服务模块编写商品类型Mapper

public interface ProductTypeMapper extends BaseMapper<ProductType> {
}

2、在商品服务模块编写商品类型服务实现类

@DubboService
public class ProductTypeServiceImpl
implements ProductTypeService {
    @Autowired
    private ProductTypeMapper productTypeMapper;
    @Override
    public void add(ProductType productType) {
        // 查询父类型
        ProductType productTypeParent = productTypeMapper.selectById(productType.getParentId());
        if (productTypeParent == null){ //如果没有父类型,则为1级类型
            productType.setLevel(1);
       }else if(productTypeParent.getLevel() < 3){ //如果父类型级别<3,则级别为父级别+1
           productType.setLevel(productTypeParent.getLevel()+1);
       }else if(productTypeParent.getLevel() >= 3){ // 如果父类型级别>=3,则不能添加子类型
            throw new BusException(CodeEnum.INSERT_PRODUCT_TYPE_ERROR);
       }
      productTypeMapper.insert(productType);
   }
    @Override
    public void update(ProductType productType) {
        // 查询父类型
        ProductType productTypeParent = productTypeMapper.selectById(productType.getParentId());
        if (productTypeParent == null){ //如果没有父类型,则为1级类型
            productType.setLevel(1);
       }else if(productTypeParent.getLevel() < 3){ //如果父类型级别<3,则级别为父级别+1
           productType.setLevel(productTypeParent.getLevel()+1);
       }else if(productTypeParent.getLevel() >= 3){ //如果父类型级别>=3,则不能添加子类型
  throw new
BusException(CodeEnum.INSERT_PRODUCT_TYPE_ERROR);
       }
      productTypeMapper.updateById(productType);
   }
    @Override
    public void delete(Long id) {
        // 查询该类型的子类型
        QueryWrapper<ProductType> queryWrapper = new QueryWrapper();
        queryWrapper.eq("parentId",id);
        List<ProductType> productTypes = productTypeMapper.selectList(queryWrapper);
        // 如果该类型有子类型,删除失败
        if (productTypes != null && productTypes.size() > 0){
            throw new BusException(CodeEnum.DELETE_PRODUCT_TYPE_ERROR);
       }
        productTypeMapper.deleteById(id);
   }
    @Override
    public ProductType findById(Long id) {
 return productTypeMapper.selectById(id);
   }
    @Override
    public Page<ProductType> search(ProductType productType,int page,int size) {
        QueryWrapper<ProductType> queryWrapper = new QueryWrapper();
        if (productType != null){
            // 类型名不为空时
            if (StringUtils.hasText(productType.getName())){
              queryWrapper.like("name",productType.getName());
           }
            // 上级类型id不为空
            if (productType.getParentId()!= null){
              queryWrapper.eq("parentId",productType.getParentId());
           }
       }
        return productTypeMapper.selectPage(new Page(page,size),queryWrapper);
   }
 @Override
    public List<ProductType> findProductType(ProductType productType) {
        QueryWrapper<ProductType> queryWrapper = new QueryWrapper();
        if (productType != null){
            // 类型名不为空时
            if (StringUtils.hasText(productType.getName())){
              queryWrapper.like("name",productType.getName());
           }
            // 上级类型id不为空
            if (productType.getParentId()!= null){
              queryWrapper.eq("parentId",productType.getParentId());
           }
       }
        List<ProductType> productTypes = productTypeMapper.selectList(queryWrapper);
        return productTypes;
   }
}

编写商品类型控制器

后台管理API模块编写商品类型控制器:

/**
* 商品类型
*/
@RestController
@RequestMapping("/productType")
public class ProductTypeController {
    @DubboReference
    private ProductTypeService productTypeService;
    /**
     * 新增商品类型
     * @param productType 商品类型
     * @return 执行结果
     */
    @PostMapping("/add")
    public BaseResult add(@RequestBody ProductType productType){
        productTypeService.add(productType);
        return BaseResult.ok();
   }
    /**
     * 修改商品类型
     * @param productType 商品类型
     * @return 执行结果
     */
    @PutMapping("/update")
    public BaseResult update(@RequestBody ProductType productType){
      productTypeService.update(productType);
      return BaseResult.ok();
   }
    /**
     * 删除商品类型
     * @param id 商品类型id
     * @return 执行结果
     */
    @DeleteMapping("/delete")
    public BaseResult delete(Long id){
        productTypeService.delete(id);
        return BaseResult.ok();
   }
    /**
     * 根据id查询商品类型
     * @param id 商品类型id
     * @return 查询结果
     */
    @GetMapping("/findById")
    public BaseResult<ProductType> findById(Long id){
        ProductType productType = productTypeService.findById(id);
        return BaseResult.ok(productType);
   }
    /**
     * 分页查询商品类型
     * @param productType 查询条件对象
     * @param page 页码
     * @param size 每页条数
     * @return 查询结果
     */
    @GetMapping("/search")
    public BaseResult<Page<ProductType>> search(ProductType productType,int page,int size){
        Page<ProductType> page1 = productTypeService.search(productType, page,size);
        return BaseResult.ok(page1);
   }
    /**
     * 查询商品类型列表
     * @param productType 查询条件对象
     * @return 查询结果
     */
    @GetMapping("/findProductType")
    public BaseResult<List<ProductType>> findProductType(ProductType productType){
        List<ProductType> productType1 = productTypeService.findProductType(productType);
        return BaseResult.ok(productType1);
   }
    /**
     * 根据父类型id查询商品类型列表
     * @param parentId 父类型id
     * @return 查询结果
     */
     @GetMapping("/findByParentId")
    public BaseResult<List<ProductType>> findByParentId(Long parentId){
        ProductType productType = new ProductType();
        productType.setParentId(parentId);
        List<ProductType> productType1 = productTypeService.findProductType(productType);
        return BaseResult.ok(productType1);
   }
}

启动服务,测试商品类型控制器方法

编写商品规格服务接口

接下来我们编写商品规格相关的CRUD方法,首先在通用模块编写商品规格服务接口:

// 商品规格服务
public interface SpecificationService {
    // 新增商品规格
    void add(Specification specification);
    // 修改商品规格
    void update(Specification specification);
    // 删除商品规格
    void delete(Long[] ids);
    // 根据id查询商品规格
    Specification findById(Long id);
    // 分页查询商品规格
     Page<Specification> search(int page, int size);
    // 查询某种商品类型下的所有规格
    List<Specification> findByProductTypeId(Long id);
    // 新增商品规格项
    void addOption(SpecificationOption specificationOption);
    // 删除商品规格项
    void deleteOption(Long[] ids);
}

 编写商品规格Mapper

1、在商品服务模块编写商品规格和商品规格项Mapper

public interface SpecificationMapper
extends BaseMapper<Specification> {
    Specification findById(Long id);
    // 根据商品类型查询商品规格
    List<Specification> findByProductTypeId(Long productTypeId); }
    public interface SpecificationOptionMapper extends BaseMapper<SpecificationOption> {
}

2、在 resources 中创建 SpecificationMapper 的同级包,编写映射文件 SpecificationMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper
3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itbaizhan.shopping_goods_service.mapper.SpecificationMapper">
    <resultMap id="specificationMapper" type="com.itbaizhan.shopping_common.pojo.Specification">
        <id property="id" column="bid"></id>
        <result property="specName" column="specName"></result>
        <result property="productTypeId" column="productTypeId"></result>
        <collection property="specificationOptions" column="specId" ofType="com.itbaizhan.shopping_common.pojo.SpecificationOption">
            <id property="id" column="oid"></id>
            <result property="optionName" column="optionName"></result>
            <result property="specId" column="specId"></result>
        </collection>
    </resultMap>
<select id="findById" parameterType="long" resultMap="specificationMapper">
       SELECT
           bz_specification.id AS bid,
           bz_specification.specName,
           bz_specification.productTypeId,
           bz_specification_option.id AS oid,
           bz_specification_option.optionName,
           bz_specification_option.specId
       FROM bz_specification
                 LEFT JOIN bz_specification_option
                           on  bz_specification.id = bz_specification_option.specId
       where bz_specification.id = #{id}
    </select>
    <select id="findByProductTypeId" parameterType="long" resultMap="specificationMapper">
       SELECT
           bz_specification.id AS bid,
           bz_specification.specName,
           bz_specification.productTypeId,
           bz_specification_option.id AS oid,bz_specification_option.optionName,
           bz_specification_option.specId
       FROM bz_specification
                 LEFT JOIN bz_specification_option
                           on bz_specification.id = bz_specification_option.specId
       where bz_specification.productTypeId = # {productTypeId}
    </select>
</mapper>

编写商品规格服务实现类

在商品服务模块编写商品规格服务实现类

@DubboService
public class SpecificationServiceImpl
implements SpecificationService {
    @Autowired
    private SpecificationMapper specificationMapper;
    @Autowired
    private SpecificationOptionMapper specificationOptionMapper;
    @Override
    public void add(Specification specification) {
         specificationMapper.insert(specification);
   }
    @Override
    public void update(Specification specification) {
        specificationMapper.updateById(specification);
   }
    @Override
    public void delete(Long[] ids) {
        for (Long id : ids) {
            // 删除商品规格项
           QueryWrapper<SpecificationOption> queryWrapper = new QueryWrapper();
            queryWrapper.eq("specId",id);
            specificationOptionMapper.delete(queryWrapper);
            // 删除商品规格
            specificationMapper.deleteById(id);
       }
   }
    @Override
    public Specification findById(Long id) {
         return  specificationMapper.findById(id);
   }
    @Override
    public Page<Specification> search(int page, int size) {
        return specificationMapper.selectPage(new Page(page,size),null);
   }
    @Override
    public List<Specification> findByProductTypeId(Long id) {
        return specificationMapper.findByProductTypeId(id);
   }
    @Override
    public void addOption(SpecificationOptions specificationOptions) {
        String[] optionNames = specificationOptions.getOptionName();
        Long specId = specificationOptions.getSpecId();
        for (String optionName : optionNames) {
            SpecificationOption specificationOption = new SpecificationOption();
            specificationOption.setSpecId(specId);
            specificationOption.setOptionName(optionName);
            specificationOptionMapper.insert(specificationOption);
       }
   }
    @Override
    public void deleteOption(Long[] ids) {
      specificationOptionMapper.deleteBatchIds(Arrays.asList(ids));
   }
}

编写商品规格控制器

后台管理API模块编写商品规格控制器:

/**
* 商品规格
*/
@RestController
@RequestMapping("/specification")
public class SpecificationController {
    @DubboReference
    private SpecificationService specificationService;
    /**
     * 新增商品规格
     * @param specification 商品规格
     * @return 执行结果
     */
    @PostMapping("/add")
    public BaseResult add(@RequestBody Specification specification){
        specificationService.add(specification);
        return BaseResult.ok();
   }
    /**
     * 修改商品规格
     * @param specification 商品规格
     * @return 执行结果
     */
    @PutMapping("/update")
    public BaseResult update(@RequestBody Specification specification){
        specificationService.update(specification);
        return BaseResult.ok();
   }
    /**
     * 删除商品规格
     * @param ids 商品规格id集合
     * @return 执行结果
     */
    @DeleteMapping("/delete")
    public BaseResult delete(Long[] ids){
        specificationService.delete(ids);
        return BaseResult.ok();
   }
    /**
     * 根据id查询商品规格
     * @param id 商品规格id
     * @return 查询结果
     */
    @GetMapping("/findById")
    public BaseResult findById(Long id){
        Specification specification = specificationService.findById(id);
        return BaseResult.ok(specification);
   }
    /**
     * 分页查询商品规格
     * @param page 页码
     * @param size 每页条数
     * @return 查询结果
     */
    @GetMapping("/search")
    public BaseResult<Page<Specification>> search(int page,int size){
        Page<Specification> page1 = specificationService.search(page, size);
        return BaseResult.ok(page1);
 }
    /**
     * 查询某种商品类型下的所有规格
     * @param id 商品类型id
     * @return 查询结果
     */
    @GetMapping("/findByProductTypeId")
    public BaseResult<List<Specification>> findByProductTypeId(Long id){
        List<Specification> specifications = specificationService.findByProductTypeId(id);
        return BaseResult.ok(specifications);
   }
    /**
     * 新增商品规格项
     * @param specificationOptions 商品规格项集合
     * @return 执行结果
     */
    @PostMapping("/addOption")
    public BaseResult addOption(@RequestBody SpecificationOptions specificationOptions){
        specificationService.addOption(specificationOptions);
        return BaseResult.ok();
   }
    /**
     * 删除商品规格项
     * @param ids 商品规格项id集合
     * @return 执行结果
     */
    @DeleteMapping("/deleteOption")
    public BaseResult deleteOption(Long[] ids){
        specificationService.deleteOption(ids);
        return BaseResult.ok();
   }
}

启动服务,测试商品类型控制器方法

  

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

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

相关文章

暗网与深网:5 个主要区别

在互联网上&#xff0c;深网不会被网络爬虫索引&#xff0c;而暗网是故意隐藏的。 文章目录前言一、暗网与深网二、什么是暗网&#xff1f;什么是深网&#xff1f;暗网和深网之间的 5 个主要区别1. 范围和操作暗网深网2. 尺寸暗网&#xff1a;深网&#xff1a;3. 访问暗网深网4…

数据的分组聚合

1&#xff1a;分组 t.groupby #coding:utf-8 import pandas as pd import numpy as np file_path./starbucks_store_worldwide.csv dfpd.read_csv(file_path) #print(df.head(1)) #print(df.info()) groupeddf.groupby(byCountry) print(grouped) #DataFrameGroupBy #可以遍历…

1.2配置OSPF包文分析和验证

1.2.2实验2:配置OSPF包文分析和验证 [1] 实验目的通过抓包分析OSPF的包文实现OSPF区域认证的配置实验拓扑实验拓扑图如图1-3所示。 图1-3 配置OSPF包文分析和验证 实验步骤 IP地址的配置、运行OSPF的步骤与实验1相同,此处略。[2] 在R1的g0/0/0抓包

Redis 集群搭建及集群管理工具

目录一、简介二、架构图三、搭建集群3.1、下载3.2、编译安装3.3、配置文件修改3.4、创建集群四、集群管理工具redis-cli4.1、查看集群信息4.2、检查集群4.3、修复槽错误4.4、重分片4.5、负载均衡4.6、添加节点4.7、删除节点4.8、设置超时4.9、导入数据4.10、重建集群一、简介 本…

【JavaWeb】网络编程概念 + Socket套接字 + UDP/TCP编程

目录 网络编程基础概念 发送端与接受端 请求与响应 客户端与服务器 常见的客户端服务器模型 Socket套接字 回显(echo)程序 UDP版的回显程序 服务器代码 客户端代码 结果 TCP版的回显程序 服务器代码 客户端代码 结果 网络编程基础概念 网络编程&#xff0c;指网…

2.5|物联网应用系统设计|复习提纲|提问背诵

基础概念总结掌握Linux常用的基本命令功能、语法结构&#xff0c;用法等。具体命令参考实验指导书、相关PPT等资料内容。什么是操作系统&#xff08;OS&#xff09;&#xff1f;操作系统是用以控制和管理计算机系统资源&#xff0c;方便用户使用的程序和数据结构的集合。在所有…

零基础学习Python的一点建议

Python语言的火爆程度&#xff0c;真的是超过了任何一门计算机语言&#xff0c;当然火爆程度里面含有赶上了人工智能这个领域的风口&#xff0c;但是大部分的原因是Python易学&#xff0c;语法对小白非常友好&#xff0c;总结一句话&#xff0c;Python语言能做很多事情&#xf…

亿级高并发电商项目-- 实战篇 --万达商城项目 六(编写角色管理、用户权限(Spring Security认证授权)、管理员管理等模块)

专栏&#xff1a;高并发---前后端分布式 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信…

使用nvm管理node

nvm介紹 node的版本管理器&#xff0c;可以方便地安装&切换不同版本的node 我们在工作中&#xff0c;可以会有老版本的node的项目需要维护&#xff0c;也可能有新版本的node的项目需要开发&#xff0c;如果只有一个node版本的话将会很麻烦&#xff0c;nvm可以解决我们的难点…

node 拉取github开源漏洞

我们可以通过github的open api 来拉取一些信息。这里主要是拉取 github 开源漏洞中的漏洞信息 Github Explorer github Explorer 是一个在线工具&#xff0c;登录之后&#xff0c;我们可以在左侧输入GraphQL 查询语句&#xff0c;之后就可以查询相关的信息。例如&#xff1a;…

B树和B+树,红黑树作为索引的区别

索引是一种数据结构&#xff0c;帮助我们在mysql表中更高效获取数据的数据结构 常用作为索引的数据结构&#xff1a;二叉树&#xff0c;红黑树&#xff0c;Hash表&#xff0c;B树&#xff0c;B树 下面的数据表中有两个字段&#xff0c;第一个字段是col1&#xff0c;第二个字段…

如何在Qt中设置背景图片,且不覆盖其它控件

正常情况&#xff0c;我们直接通过在样式表里设置背景图片会出现背景图片覆盖其它控件的情况&#xff0c;比如下面操作&#xff1a; 首先右击空白处&#xff0c;点击改变样式表。 然后选择background-image 然后点击铅笔图标 之后我们要先添加前缀&#xff0c;也就是我们…

使用 Three.js 后处理的粗略铅笔画效果

本文使用Three.js的后处理创建粗略的铅笔画效果。我们将完成创建自定义后处理渲染通道、在 WebGL中实现边缘检测、将法线缓冲区重新渲染到渲染目标以及使用生成和导入的纹理调整最终结果的步骤。翻译自Codrops&#xff0c;有改动。 Three.js 中的后处理 Three.js中的后处理是一…

1.9 实践项目——爬取学生信息

1. 项目简介设计一个 Web 服务器 server.py&#xff0c;它读取 students.txt 文件中的学生数据&#xff0c;以表格的形式呈现在网页上&#xff0c;其中 students.txt 的格式如下&#xff1a;No,Name,Gender,Age1001,张三,男,201002,李四,女,191003,王五,男,21设计一个客户端的爬…

【Junit5】就这篇,带你从入门到进阶

目录 前言 1.前置工作 2、注解 2、断言&#xff08;Assertions类&#xff09; 2.1、断言 匹配/不匹配 2.2、断言结果 为真/为假 2.3、断言结果 为空/不为空 3、用例的执行顺序 3.1、用例执行顺序是怎样的&#xff1f; 3.2、通过order注解来排序 4、参数化 4.1、单…

Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)

Mozilla Firefox, Google Chrome, Chromium, Apple Safari 请访问原文链接&#xff1a;https://sysin.org/blog/chrome-firefox-download/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 天下只剩三种&#xff08;主流&am…

feign技巧 - form方式传值

feign技巧 - form方式传值。 0. 文章目录1. 前言2. 调用样例3. 原理解析3.1 feign端序列化参数3.2 SpringMVC服务端解析参数3.3 补充 - 继承关系不会被传递的原因3.4 补充 - 不能使用GET。4. 总结1. 前言 直接正题。 如何使用feign进行fom表单方式的请求调用&#xff0c;以及其…

leaflet 上传KMZ文件,并在map上显示(062)

第062个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包kmz文件,解析并在地图上显示图形。在制作本示例的过程中,还有点缺憾,就是kmz中的图片文件没有在jszip中处理好,只能先解压缩后,将图片文件放到public/文件加下,暂时留一个遗憾点,以后再做…

又发现一个ChatGPT体验站,辅助写代码真方便

♥️ 作者&#xff1a;Hann Yang ♥️ 主页&#xff1a;CSDN主页 ♥️ 2022博客之星Top58&#xff0c;原力榜Top10/作者周榜Top13 ♥️ “抢走你工作的不会是 AI &#xff0c;而是先掌握 AI 能力的人” ChatGPT 美国OpenAI研发的聊天机器人程序&#xff0c;于2022年11月30日发…

【刷题笔记】--两数之和Ⅳ,从二叉树中找出两数之和

法一&#xff1a;深度搜索中序遍历双指针 思路&#xff1a;通过中序遍历二叉树得到一个递增的数列&#xff0c;再在这个递增的二叉树中找到这两数。 主要学到双指针这个方法。 对于一般数列&#xff0c;我们要找到两数满足其之和等于目标数&#xff0c;我们一般会进行暴力&a…