diff --git a/screenshot/login.png b/screenshot/login.png
new file mode 100644
index 0000000..3c532c8
Binary files /dev/null and b/screenshot/login.png differ
diff --git a/tangchuanxing_branch b/tangchuanxing_branch
new file mode 100644
index 0000000..66dc905
--- /dev/null
+++ b/tangchuanxing_branch
@@ -0,0 +1 @@
+undefined
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/AreaMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/AreaMapper.java
new file mode 100644
index 0000000..c4f33a4
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/AreaMapper.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义了一个名为com.yami.shop.dao的包,用于组织代码
+package com.yami.shop.dao;
+
+// 导入了MyBatis Plus框架中的BaseMapper接口,用于提供基础的CRUD操作
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+// 导入了Area实体类,这个类代表了数据库中的一个表
+import com.yami.shop.bean.model.Area;
+
+/**
+ * 这是一个Mapper接口,用于定义与Area实体相关的数据库操作。
+ *
+ * @author lanhai 表示这个接口的作者是lanhai
+ */
+public interface AreaMapper extends BaseMapper {
+ // 这个接口继承了BaseMapper接口,因此已经包含了基础的CRUD操作,不需要额外定义方法
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/AttachFileMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/AttachFileMapper.java
new file mode 100644
index 0000000..522144c
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/AttachFileMapper.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义了一个名为com.yami.shop.dao的包,用于组织代码
+package com.yami.shop.dao;
+
+// 导入了MyBatis Plus框架中的BaseMapper接口,用于提供基础的CRUD操作
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+// 导入了AttachFile实体类,这个类代表了数据库中的一个表
+import com.yami.shop.bean.model.AttachFile;
+
+/**
+ * 这是一个Mapper接口,用于定义与AttachFile实体相关的数据库操作。
+ *
+ * @author lanhai 表示这个接口的作者是lanhai。
+ */
+public interface AttachFileMapper extends BaseMapper {
+ // 这个接口继承了BaseMapper接口,因此已经包含了基础的CRUD操作,不需要额外定义方法
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/BasketMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/BasketMapper.java
new file mode 100644
index 0000000..f2b247b
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/BasketMapper.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义了一个名为com.yami.shop.dao的包,用于组织代码
+package com.yami.shop.dao;
+
+// 导入了MyBatis Plus框架中的BaseMapper接口,用于提供基础的CRUD操作
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+// 导入了项目中定义的DTO和参数类
+import com.yami.shop.bean.app.dto.ShopCartItemDto;
+import com.yami.shop.bean.app.param.ShopCartParam;
+// 导入了项目中的实体类
+import com.yami.shop.bean.model.Basket;
+// 导入了MyBatis的@Param注解,用于在XML或注解中传递参数
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 这是一个Mapper接口,用于定义与Basket实体(购物车)相关的数据库操作。
+ *
+ * @author lanhai 表示这个接口的作者是lanhai。
+ */
+public interface BasketMapper extends BaseMapper {
+
+ /**
+ * 获取用户的购物项列表。
+ *
+ * @param userId 用户id
+ * @return 返回一个包含用户购物项的DTO列表
+ */
+ List getShopCartItems(@Param("userId") String userId);
+
+ /**
+ * 根据购物车id列表和用户id删除购物车项。
+ *
+ * @param userId 用户id
+ * @param basketIds 购物车id列表
+ */
+ void deleteShopCartItemsByBasketIds(@Param("userId") String userId, @Param("basketIds") List basketIds);
+
+ /**
+ * 删除用户的所有购物车项。
+ *
+ * @param userId 用户id
+ */
+ void deleteAllShopCartItems(@Param("userId") String userId);
+
+ /**
+ * 获取失效的购物项列表。
+ *
+ * @param userId 用户id
+ * @return 返回一个包含失效购物项的DTO列表
+ */
+ List getShopCartExpiryItems(@Param("userId") String userId);
+
+ /**
+ * 删除失效的购物项。
+ *
+ * @param userId 用户id
+ */
+ void cleanExpiryProdList(@Param("userId") String userId);
+
+ /**
+ * 更新购物车的满减活动id。
+ *
+ * @param userId 用户id
+ * @param basketIdShopCartParamMap 购物项id与满减活动参数的映射
+ */
+ void updateDiscountItemId(@Param("userId")String userId, @Param("basketIdShopCartParamMap") Map basketIdShopCartParamMap);
+
+ /**
+ * 根据商品id获取包含该商品的用户id列表。
+ *
+ * @param prodId 商品id
+ * @return 返回一个包含用户id的列表
+ */
+ List listUserIdByProdId(@Param("prodId")Long prodId);
+
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/BrandMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/BrandMapper.java
new file mode 100644
index 0000000..8f715bd
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/BrandMapper.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.Brand;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author lanhai
+ */
+public interface BrandMapper extends BaseMapper {
+
+ /**
+ * 根据品牌名称获取品牌
+ * @param brandName 品牌名称
+ * @return 品牌信息
+ */
+ Brand getByBrandName(String brandName);
+
+ /**
+ * 根据分类id获取品牌列表
+ * @param categoryId 分类id
+ * @return 品牌列表
+ */
+ List listByCategoryId(@Param("categoryId")Long categoryId);
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryBrandMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryBrandMapper.java
new file mode 100644
index 0000000..87c9a0d
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryBrandMapper.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.CategoryBrand;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 分类品牌Mapper接口,定义了与分类品牌相关的数据库操作
+ *
+ * @author lanhai
+ */
+public interface CategoryBrandMapper extends BaseMapper {
+
+ /**
+ * 批量插入分类品牌关系
+ * @param categoryId 分类ID
+ * @param brandIds 品牌ID列表
+ */
+ void insertCategoryBrand(@Param("categoryId") Long categoryId, @Param("brandIds") List brandIds);
+
+ /**
+ * 根据分类ID删除分类品牌关系
+ * @param categoryId 分类ID
+ */
+ void deleteByCategoryId(Long categoryId);
+
+ /**
+ * 根据品牌ID删除分类品牌关系
+ * @param brandId 品牌ID
+ */
+ void deleteByBrandId(Long brandId);
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryMapper.java
new file mode 100644
index 0000000..d7b53d8
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryMapper.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.Category;
+import java.util.List;
+
+/**
+ * 分类Mapper接口,定义了与分类相关的数据库操作
+ *
+ * @author lanhai
+ */
+public interface CategoryMapper extends BaseMapper {
+
+ /**
+ * 根据父级ID查询分类列表
+ * @param parentId 父级ID
+ * @return 分类列表
+ */
+ List listByParentId(Long parentId);
+
+ /**
+ * 根据店铺ID查询分类列表
+ * @param shopId 店铺ID
+ * @return 分类列表
+ */
+ List tableCategory(Long shopId);
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryPropMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryPropMapper.java
new file mode 100644
index 0000000..97fa783
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/CategoryPropMapper.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.CategoryProp;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 分类属性Mapper接口,定义了与分类属性相关的数据库操作
+ *
+ * @author lanhai
+ */
+public interface CategoryPropMapper extends BaseMapper {
+
+ /**
+ * 批量插入分类属性关系
+ * @param categoryId 分类ID
+ * @param propIds 属性ID列表
+ */
+ void insertCategoryProp(@Param("categoryId") Long categoryId, @Param("propIds") List propIds);
+
+ /**
+ * 根据分类ID删除分类属性关系
+ * @param categoryId 分类ID
+ */
+ void deleteByCategoryId(Long categoryId);
+
+ /**
+ * 根据属性ID删除分类属性关系
+ * @param propId 属性ID
+ */
+ void deleteByPropId(Long propId);
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/DeliveryMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/DeliveryMapper.java
new file mode 100644
index 0000000..8d64b0f
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/DeliveryMapper.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名
+package com.yami.shop.dao;
+
+// 导入所需的类
+import com.yami.shop.bean.model.Delivery;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * DeliveryMapper 接口的文档注释
+ * 这里可以描述这个接口的作用,比如它是用于数据库操作的Mapper接口
+ *
+ * @author lanhai 表示这个类的作者是lanhai
+ */
+public interface DeliveryMapper extends BaseMapper {
+ // 这个接口继承了BaseMapper接口,泛型参数为Delivery,表示这个Mapper与Delivery实体类相关联
+ // 在这个接口中,可以定义与Delivery表相关的数据库操作方法
+ // 由于继承了BaseMapper,已经包含了很多基础的数据库操作方法,如增删改查
+ // 如果需要额外的自定义方法,可以在这个接口中声明,然后在对应的XML文件或使用MyBatis Plus的注解方式实现
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/HotSearchMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/HotSearchMapper.java
new file mode 100644
index 0000000..7bd9af5
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/HotSearchMapper.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.dto.HotSearchDto;
+import com.yami.shop.bean.model.HotSearch;
+
+import java.util.List;
+
+/**
+ * HotSearchMapper 是一个数据访问层接口,继承自MyBatis-Plus提供的BaseMapper,
+ * 提供对HotSearch实体的基本CRUD操作方法。
+ * 此外,它还定义了一个特定的方法用于根据店铺ID获取热搜列表。
+ *
+ * @author lanhai
+ */
+public interface HotSearchMapper extends BaseMapper {
+
+ /**
+ * getHotSearchDtoByShopId 方法用于根据给定的店铺ID获取该店铺的热搜列表。
+ * 它返回的是一个HotSearchDto对象的列表,而不是直接返回数据库中的HotSearch实体对象。
+ * 这样做通常是为了能够在不改变数据库表结构的情况下调整API输出格式,或者为了减少不必要的数据传输。
+ *
+ * @param shopId 店铺的唯一标识符,用于确定要查询的热搜信息所属的店铺。
+ * @return 返回一个包含指定店铺热搜信息的HotSearchDto对象列表。
+ */
+ List getHotSearchDtoByShopId(Long shopId);
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/IndexImgMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/IndexImgMapper.java
new file mode 100644
index 0000000..6666a6f
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/IndexImgMapper.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.IndexImg;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * IndexImgMapper 是一个数据访问层接口,用于定义对IndexImg实体进行数据库操作的方法。
+ * 它继承自MyBatis-Plus提供的BaseMapper,从而获得了一系列默认的CRUD方法。
+ * @author lanhai
+ */
+public interface IndexImgMapper extends BaseMapper {
+
+ /**
+ * deleteIndexImgByIds 方法用于根据给定的ID列表批量删除图片记录。
+ * @param ids 一个或多个要删除的图片记录的ID数组。
+ */
+ void deleteIndexImgByIds(@Param("ids") Long[] ids);
+
+ /**
+ * listIndexImg 方法用于获取所有的图片记录列表。
+ * @return 返回一个包含所有IndexImg对象的列表。
+ */
+ List listIndexImg();
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/dao/MessageMapper.java b/yami-shop-service/src/main/java/com/yami/shop/dao/MessageMapper.java
new file mode 100644
index 0000000..d6cd081
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/dao/MessageMapper.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.yami.shop.bean.model.Message;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * MessageMapper 是一个数据访问层接口,用于定义针对Message实体的操作方法。
+ * 它继承自MyBatis-Plus提供的BaseMapper,因此默认实现了对Message表的基本CRUD功能。
+ *
+ * 如果需要额外的数据库查询或修改操作,可以在本接口中添加相应的方法,并在对应的XML映射文件或使用@Select等注解实现这些方法。
+ *
+ * @author lanhai
+ */
+public interface MessageMapper extends BaseMapper {
+ // 本接口当前没有定义额外的方法,所有操作都依赖于BaseMapper提供的默认方法。
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/AreaService.java b/yami-shop-service/src/main/java/com/yami/shop/service/AreaService.java
new file mode 100644
index 0000000..778da2b
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/AreaService.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义了一个名为com.yami.shop.service的包,用于组织代码
+package com.yami.shop.service;
+
+// 导入了MyBatis Plus框架中的分页插件Page类
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+// 导入了MyBatis Plus框架中的IService接口,用于提供基础的CRUD操作
+import com.baomidou.mybatisplus.extension.service.IService;
+// 导入了Area实体类,这个类代表了数据库中的一个表
+import com.yami.shop.bean.model.Area;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 这是一个服务接口,用于定义与Area实体相关的业务操作。
+ *
+ * @author lgh on 2018/10/26 表示这个接口的作者是lgh,创建时间为2018年10月26日。
+ */
+public interface AreaService extends IService {
+
+ /**
+ * 这是一个通过父id查找地址的方法。
+ *
+ * @param pid 父id,用于指定要查找的地址的父级地址
+ * @return 返回一个Area对象的列表,包含了所有父id为pid的地址信息
+ */
+ List listByPid(Long pid);
+
+ /**
+ * 这是一个通过父id清除地址缓存的方法。
+ *
+ * @param pid 父id,用于指定要清除缓存的地址的父级地址
+ */
+ void removeAreaCacheByParentId(Long pid);
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/AttachFileService.java b/yami-shop-service/src/main/java/com/yami/shop/service/AttachFileService.java
new file mode 100644
index 0000000..ae12eb4
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/AttachFileService.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义了一个名为com.yami.shop.service的包,用于组织代码
+package com.yami.shop.service;
+
+// 导入了MyBatis Plus框架中的IService接口,用于提供基础的CRUD操作
+import com.baomidou.mybatisplus.extension.service.IService;
+// 导入了AttachFile实体类,这个类代表了数据库中的一个表
+import com.yami.shop.bean.model.AttachFile;
+// 导入了Spring框架中的MultipartFile类,用于处理上传的文件
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * 这是一个服务接口,用于定义与AttachFile实体相关的业务操作。
+ *
+ * @author lanhai 表示这个接口的作者是lanhai。
+ * Created by lgh on 2018/07/27 表示这个接口是由lgh创建的,创建时间为2018年7月27日。
+ */
+public interface AttachFileService extends IService {
+
+ /**
+ * 上传文件到本地的方法。
+ *
+ * @param file 要上传的文件对象,类型为MultipartFile
+ * @throws IOException 如果上传过程中发生I/O错误,会抛出IOException异常
+ * @return 返回一个字符串,通常是上传文件后的一些信息,比如文件路径或者文件ID
+ */
+ String uploadFile(MultipartFile file) throws IOException;
+
+ /**
+ * 删除文件的方法。
+ *
+ * @param fileName 要删除的文件名称
+ */
+ void deleteFile(String fileName);
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/BasketService.java b/yami-shop-service/src/main/java/com/yami/shop/service/BasketService.java
new file mode 100644
index 0000000..fd75c1a
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/BasketService.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.app.dto.ShopCartDto;
+import com.yami.shop.bean.app.dto.ShopCartItemDto;
+import com.yami.shop.bean.app.param.ChangeShopCartParam;
+import com.yami.shop.bean.app.param.OrderItemParam;
+import com.yami.shop.bean.app.param.ShopCartParam;
+import com.yami.shop.bean.model.Basket;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lgh on 2018/10/18.
+ */
+public interface BasketService extends IService {
+
+ /**
+ * 根据购物车id列表删除购物项
+ * @param userId 用户id
+ * @param basketIds 购物车id列表
+ */
+ void deleteShopCartItemsByBasketIds(String userId, List basketIds);
+
+ /**
+ * 添加购物车
+ * @param param
+ * @param userId
+ */
+ void addShopCartItem(ChangeShopCartParam param, String userId);
+
+ /**
+ * 更新购物车
+ * @param basket
+ */
+ void updateShopCartItem(Basket basket);
+
+ /**
+ * 删除所有购物车
+ * @param userId
+ */
+ void deleteAllShopCartItems(String userId);
+
+ /**
+ * 根据用户id获取购物车列表
+ * @param userId 用户id
+ * @return 购物车列表
+ */
+ List getShopCartItems(String userId);
+
+ /**
+ * 获取购物车失效列表
+ * @param userId 用户id
+ * @return 失效商品
+ */
+ List getShopCartExpiryItems(String userId);
+
+ /**
+ * 清除失效的购物项
+ * @param userId 用户id
+ */
+ void cleanExpiryProdList(String userId);
+
+ /**
+ * 更新满减活动id
+ * @param userId 用户id
+ * @param basketIdShopCartParamMap 购物车map
+ */
+ void updateBasketByShopCartParam(String userId, Map basketIdShopCartParamMap);
+
+ /**
+ * 删除购物车缓存
+ * @param userId
+ */
+ void removeShopCartItemsCacheByUserId(String userId);
+
+ /**
+ * 获取购物车中拥有某件商品的用户,用于清除该用户购物车的缓存
+ * @param prodId 商品id
+ * @return 用户id
+ */
+ List listUserIdByProdId(Long prodId);
+
+ /**
+ * 根据店铺组装购车中的商品信息,返回每个店铺中的购物车商品信息
+ * @param shopCartItems 指定的购物项目
+ * @return 每个店铺的购物车信息
+ */
+ List getShopCarts(List shopCartItems);
+
+ /**
+ * 组装获取用户提交的购物车商品项
+ * @param orderItem 提交订单时携带的商品信息
+ * @param userId 当前用户的用户id
+ * @param basketId 购物车id
+ * @return 所有的商品购物项
+ */
+ List getShopCartItemsByOrderItems(List basketId, OrderItemParam orderItem,String userId);
+
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/BrandService.java b/yami-shop-service/src/main/java/com/yami/shop/service/BrandService.java
new file mode 100644
index 0000000..69e51cf
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/BrandService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.model.Brand;
+
+import java.util.List;
+
+/**
+ * @author lanhai
+ */
+public interface BrandService extends IService {
+
+ /**
+ * 根据品牌名称获取该品牌
+ * @param brandName
+ * @return
+ */
+ Brand getByBrandName(String brandName);
+
+ /**
+ * 删除品牌,同时删除品牌与分类之间的关联关系
+ * @param brandId
+ */
+ void deleteByBrand(Long brandId);
+
+ /**
+ * 根据分类id获取品牌列表
+ * @param categoryId 分类id
+ * @return
+ */
+ List listByCategoryId(Long categoryId);
+
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/CategoryBrandService.java b/yami-shop-service/src/main/java/com/yami/shop/service/CategoryBrandService.java
new file mode 100644
index 0000000..c68a5ff
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/CategoryBrandService.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.model.CategoryBrand;
+
+/**
+ * 分类品牌服务接口,继承了MyBatis Plus的IService接口,提供分类品牌相关的业务操作
+ *
+ * @author lanhai
+ */
+public interface CategoryBrandService extends IService {
+
+ // 该接口目前为空,继承了IService接口的所有方法,可以添加自定义的方法
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/CategoryPropService.java b/yami-shop-service/src/main/java/com/yami/shop/service/CategoryPropService.java
new file mode 100644
index 0000000..5585ad7
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/CategoryPropService.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.model.CategoryProp;
+
+/**
+ * 分类属性服务接口,继承了MyBatis Plus的IService接口,提供分类属性相关的业务操作
+ *
+ * @author lanhai
+ */
+public interface CategoryPropService extends IService {
+
+ // 该接口目前为空,继承了IService接口的所有方法,可以添加自定义的方法
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/CategoryService.java b/yami-shop-service/src/main/java/com/yami/shop/service/CategoryService.java
new file mode 100644
index 0000000..cc21de3
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/CategoryService.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.model.Category;
+import java.util.List;
+
+/**
+ * 商品分类服务接口,继承了MyBatis Plus的IService接口,并扩展了分类相关的业务操作
+ *
+ * @author lanhai
+ */
+public interface CategoryService extends IService {
+
+ /**
+ * 根据父级ID查询分类列表,用于获取一级分类时传入0
+ * @param parentId 父级ID,0表示查询一级分类
+ * @return 分类列表
+ */
+ List listByParentId(Long parentId);
+
+ /**
+ * 根据店铺ID查询分类列表,并根据seq排序,用于页面表单展示
+ * @param shopId 店铺ID
+ * @return 分类列表
+ */
+ List tableCategory(Long shopId);
+
+ /**
+ * 保存分类信息,包括品牌和参数
+ * @param category 分类对象
+ */
+ void saveCategory(Category category);
+
+ /**
+ * 更新分类信息,包括品牌和参数
+ * @param category 分类对象
+ */
+ void updateCategory(Category category);
+
+ /**
+ * 删除分类信息,包括品牌、参数以及分类对应的图片
+ * @param categoryId 分类ID
+ */
+ void deleteCategory(Long categoryId);
+
+ /**
+ * 根据店铺ID和层级获取商品分类树,用于构建分类树结构
+ * @param shopId 店铺ID
+ * @param grade 分类层级
+ * @return 分类树列表
+ */
+ List treeSelect(Long shopId, int grade);
+
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/DeliveryService.java b/yami-shop-service/src/main/java/com/yami/shop/service/DeliveryService.java
new file mode 100644
index 0000000..237a40b
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/DeliveryService.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名,表示这个类属于com.yami.shop.service包
+package com.yami.shop.service;
+
+// 导入MyBatis Plus框架中的IService接口,这个接口提供了基本的CRUD操作
+import com.baomidou.mybatisplus.extension.service.IService;
+// 导入项目中定义的Delivery实体类
+import com.yami.shop.bean.model.Delivery;
+
+/**
+ * DeliveryService接口的文档注释
+ * 这个接口是用于定义与Delivery实体类相关的业务操作
+ *
+ * @author lgh on 2018/11/26 表示这个接口是由lgh在2018年11月26日创建的
+ */
+public interface DeliveryService extends IService {
+
+ // 这个接口继承了IService接口,泛型参数为Delivery,表示这个服务接口与Delivery实体类相关联
+ // 在这个接口中,可以定义与Delivery实体类相关的额外业务操作方法
+ // 由于继承了IService,已经包含了很多基础的CRUD操作,如增删改查
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/HotSearchService.java b/yami-shop-service/src/main/java/com/yami/shop/service/HotSearchService.java
new file mode 100644
index 0000000..2705662
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/HotSearchService.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名,表示这个接口属于com.yami.shop.service包
+package com.yami.shop.service;
+
+// 导入MyBatis Plus框架中的IService接口,提供基础的CRUD操作
+import com.baomidou.mybatisplus.extension.service.IService;
+// 导入项目中定义的HotSearchDto数据传输对象
+import com.yami.shop.bean.dto.HotSearchDto;
+// 导入项目中定义的HotSearch实体类
+import com.yami.shop.bean.model.HotSearch;
+// 导入Java.util.List接口,用于返回列表类型的数据
+import java.util.List;
+
+/**
+ * HotSearchService接口的文档注释
+ * 这个接口是用于定义与HotSearch实体类相关的业务操作
+ *
+ * @author lgh on 2019/03/27 表示这个接口是由lgh在2019年3月27日创建的
+ */
+public interface HotSearchService extends IService {
+
+ /**
+ * 根据店铺ID获取热搜列表的方法
+ * 这个方法允许传入一个Long类型的店铺ID,返回一个包含热搜数据的HotSearchDto列表
+ *
+ * @param shopId 店铺ID
+ * @return 根据店铺ID获取的热搜列表
+ */
+ List getHotSearchDtoByShopId(Long shopId);
+
+ /**
+ * 根据店铺ID删除热搜缓存的方法
+ * 这个方法允许传入一个Long类型的店铺ID,用于清除与该店铺ID相关的热搜缓存
+ *
+ * @param shopId 店铺ID
+ */
+ void removeHotSearchDtoCacheByShopId(Long shopId);
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/IndexImgService.java b/yami-shop-service/src/main/java/com/yami/shop/service/IndexImgService.java
new file mode 100644
index 0000000..1c938a7
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/IndexImgService.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名,表示这个类属于com.yami.shop.service包
+package com.yami.shop.service;
+
+// 导入MyBatis Plus框架中的IService接口,提供基础的CRUD操作
+import com.baomidou.mybatisplus.extension.service.IService;
+// 导入项目中定义的IndexImg实体类
+import com.yami.shop.bean.model.IndexImg;
+// 导入Java.util.List接口,用于返回列表类型的数据
+import java.util.List;
+
+/**
+ * IndexImgService接口的文档注释
+ * 这个接口是用于定义与IndexImg实体类相关的业务操作
+ *
+ * @author lgh on 2018/11/26 表示这个接口是由lgh在2018年11月26日创建的
+ */
+public interface IndexImgService extends IService {
+
+ /**
+ * 根据id列表删除图片的方法
+ * 这个方法允许传入一个Long类型的数组,表示要删除的图片的ID列表
+ *
+ * @param ids 要删除的图片ID数组
+ */
+ void deleteIndexImgByIds(Long[] ids);
+
+ /**
+ * 获取全部图片列表的方法
+ * 这个方法返回一个List类型的数据,包含了所有的图片实体
+ *
+ * @return 包含所有图片的列表
+ */
+ List listIndexImg();
+
+ /**
+ * 删除图片缓存的方法
+ * 这个方法用于清除与图片相关的缓存,以确保数据的一致性
+ */
+ void removeIndexImgCache();
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/MessageService.java b/yami-shop-service/src/main/java/com/yami/shop/service/MessageService.java
new file mode 100644
index 0000000..d9361e2
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/MessageService.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.model.Message;
+
+/**
+ * MessageService 是一个服务层接口,用于定义针对Message实体的业务逻辑方法。
+ * 它继承自MyBatis-Plus提供的IService,因此默认实现了对Message表的基本CRUD功能。
+ *
+ * 通过实现此接口,开发者可以在相应的ServiceImpl类中添加额外的业务逻辑,
+ * 或者重写已有的方法以满足特定需求。
+ *
+ * @author lgh on 2018/10/15.
+ */
+public interface MessageService extends IService {
+
+ // 本接口当前没有定义额外的方法,所有操作都依赖于IService提供的默认方法。
+ // 如果需要增加特定的业务逻辑方法,可以在本接口中添加相应的方法签名。
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/MyOrderService.java b/yami-shop-service/src/main/java/com/yami/shop/service/MyOrderService.java
new file mode 100644
index 0000000..1513fd7
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/MyOrderService.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.app.dto.MyOrderDto;
+import com.yami.shop.bean.model.Order;
+
+/**
+ * MyOrderService 是一个服务层接口,用于定义针对用户订单(Order)的业务逻辑方法。
+ * 它继承自MyBatis-Plus提供的IService,因此默认实现了对Order表的基本CRUD功能。
+ * 此外,它还提供了一个特定的方法来根据用户ID和订单状态分页获取订单信息。
+ *
+ * @author lgh
+ */
+public interface MyOrderService extends IService {
+
+ /**
+ * pageMyOrderByUserIdAndStatus 方法用于根据用户ID和订单状态分页查询订单信息。
+ *
+ * @param page 分页参数,包含了当前页码、每页显示记录数等信息。
+ * 该参数也作为返回结果的一部分,用来封装分页后的数据。
+ * @param userId 用户唯一标识符,用于确定要查询哪个用户的订单。
+ * @param status 订单的状态码,用于过滤符合条件的订单。
+ * 如果为null,则表示不根据订单状态进行过滤。
+ * @return 返回一个IPage对象,其中包含分页后的订单信息列表,
+ * 以及与分页相关的元数据(如总记录数、总页数等)。
+ */
+ IPage pageMyOrderByUserIdAndStatus(Page page, String userId, Integer status);
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/NoticeService.java b/yami-shop-service/src/main/java/com/yami/shop/service/NoticeService.java
new file mode 100644
index 0000000..a37d9ac
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/NoticeService.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名,表示这个接口属于com.yami.shop.service包
+ package com.yami.shop.service;
+
+// 导入MyBatis Plus框架中的分页插件的Page类
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+// 导入MyBatis Plus框架中的IService接口,提供基础的CRUD操作
+import com.baomidou.mybatisplus.extension.service.IService;
+// 导入项目中定义的NoticeDto数据传输对象
+import com.yami.shop.bean.app.dto.NoticeDto;
+// 导入项目中定义的Notice实体类
+import com.yami.shop.bean.model.Notice;
+// 导入Java.util.List接口,用于返回列表类型的数据
+import java.util.List;
+
+/**
+ * NoticeService接口的文档注释
+ * 这个接口是用于定义与Notice实体类相关的业务操作,主要用于公告管理
+ *
+ * @author hzm 表示这个接口是由hzm创建的
+ * @date 2019-04-18 21:21:40 表示这个接口是在2019年4月18日创建的
+ */
+public interface NoticeService extends IService {
+
+ /**
+ * 获取公告列表的方法
+ * 这个方法返回一个List类型的数据,包含了所有的公告实体
+ *
+ * @return 包含所有公告的列表
+ */
+ List listNotice();
+
+ /**
+ * 删除公告缓存的方法
+ * 这个方法用于清除与公告相关的缓存,以确保数据的一致性
+ */
+ void removeNoticeList();
+
+ /**
+ * 分页获取公布的公告的方法
+ * 这个方法接受一个Page类型的参数,返回一个分页的NoticeDto列表
+ *
+ * @param page 分页参数
+ * @return 分页的公告DTO列表
+ */
+ Page pageNotice(Page page);
+
+ /**
+ * 根据公告id获取公告的方法
+ * 这个方法接受一个Long类型的公告ID,返回对应的Notice实体
+ *
+ * @param noticeId 公告ID
+ * @return 对应的公告实体
+ */
+ Notice getNoticeById(Long noticeId);
+
+ /**
+ * 根据公告id删除公告的方法
+ * 这个方法接受一个Long类型的公告ID,用于删除对应的公告实体
+ *
+ * @param noticeId 公告ID
+ */
+ void removeNoticeById(Long noticeId);
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/AreaServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/AreaServiceImpl.java
new file mode 100644
index 0000000..17fa7f3
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/AreaServiceImpl.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义了一个名为com.yami.shop.service.impl的包,用于组织代码
+package com.yami.shop.service.impl;
+
+// 导入了MyBatis Plus框架中的LambdaQueryWrapper类,用于构建条件查询
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+// 导入了MyBatis Plus框架中的ServiceImpl类,用于提供基础的CRUD操作实现
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+// 导入了Area实体类,这个类代表了数据库中的一个表
+import com.yami.shop.bean.model.Area;
+// 导入了AreaMapper接口,用于数据库操作
+import com.yami.shop.dao.AreaMapper;
+// 导入了AreaService接口,用于定义业务操作
+import com.yami.shop.service.AreaService;
+// 导入了Spring框架的注解,用于注入依赖和定义服务
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 这是一个服务实现类,用于实现AreaService接口中定义的业务操作。
+ *
+ * @author lgh on 2018/10/26 表示这个类的作者是lgh,创建时间为2018年10月26日。
+ */
+@Service
+public class AreaServiceImpl extends ServiceImpl implements AreaService {
+
+ // 使用Spring的@Autowired注解自动注入AreaMapper
+ @Autowired
+ private AreaMapper areaMapper;
+
+ /**
+ * 通过父id查找地址列表的方法实现。
+ * 使用了MyBatis Plus的LambdaQueryWrapper来构建查询条件,查询父id为pid的地址。
+ * 使用了Spring的@Cacheable注解,表示这个方法的结果会被缓存,缓存名称为"area",键为方法参数pid。
+ *
+ * @param pid 父id,用于指定要查找的地址的父级地址
+ * @return 返回一个Area对象的列表,包含了所有父id为pid的地址信息
+ */
+ @Override
+ @Cacheable(cacheNames = "area", key = "#pid")
+ public List listByPid(Long pid) {
+ return areaMapper.selectList(new LambdaQueryWrapper().eq(Area::getParentId, pid));
+ }
+
+ /**
+ * 通过父id清除地址缓存的方法实现。
+ * 使用了Spring的@CacheEvict注解,表示这个方法会清除缓存,缓存名称为"area",键为方法参数pid。
+ *
+ * @param pid 父id,用于指定要清除缓存的地址的父级地址
+ */
+ @Override
+ @CacheEvict(cacheNames = "area", key = "#pid")
+ public void removeAreaCacheByParentId(Long pid) {
+ // 方法体为空,清除缓存的逻辑由Spring Cache自动处理
+ }
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/AttachFileServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/AttachFileServiceImpl.java
new file mode 100644
index 0000000..f508520
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/AttachFileServiceImpl.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义了一个名为com.yami.shop.service.impl的包,用于组织代码
+package com.yami.shop.service.impl;
+
+// 导入了Hutool工具类,用于日期、文件和ID操作
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.IdUtil;
+// 导入了MyBatis Plus框架中的LambdaQueryWrapper类,用于构建条件查询
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+// 导入了MyBatis Plus框架中的ServiceImpl类,用于提供基础的CRUD操作实现
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+// 导入了七牛云存储相关类
+import com.qiniu.common.QiniuException;
+import com.qiniu.http.Response;
+import com.qiniu.storage.BucketManager;
+import com.qiniu.storage.UploadManager;
+import com.qiniu.storage.model.DefaultPutRet;
+import com.qiniu.util.Auth;
+// 导入了项目中的枚举、模型、工具类和配置类
+import com.yami.shop.bean.enums.UploadType;
+import com.yami.shop.bean.model.AttachFile;
+import com.yami.shop.common.bean.Qiniu;
+import com.yami.shop.common.util.ImgUploadUtil;
+import com.yami.shop.common.util.Json;
+import com.yami.shop.dao.AttachFileMapper;
+import com.yami.shop.service.AttachFileService;
+// 导入了Spring框架的注解,用于注入依赖和定义服务
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+// 导入了Spring框架的MultipartFile类,用于处理上传的文件
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 这是一个服务实现类,用于实现AttachFileService接口中定义的业务操作。
+ *
+ * @author lanhai 表示这个类的作者是lanhai。
+ */
+@Service
+public class AttachFileServiceImpl extends ServiceImpl implements AttachFileService {
+
+ // 使用Spring的@Autowired注解自动注入AttachFileMapper
+ @Autowired
+ private AttachFileMapper attachFileMapper;
+ // 使用Spring的@Autowired注解自动注入七牛云的UploadManager
+ @Autowired
+ private UploadManager uploadManager;
+ // 使用Spring的@Autowired注解自动注入七牛云的BucketManager
+ @Autowired
+ private BucketManager bucketManager;
+ // 使用Spring的@Autowired注解自动注入七牛云的配置信息
+ @Autowired
+ private Qiniu qiniu;
+ // 使用Spring的@Autowired注解自动注入七牛云的认证工具
+ @Autowired
+ private Auth auth;
+ // 使用Spring的@Autowired注解自动注入图片上传工具类
+ @Autowired
+ private ImgUploadUtil imgUploadUtil;
+ // 定义了一个常量,用于格式化文件名
+ public final static String NORM_MONTH_PATTERN = "yyyy/MM/";
+
+ /**
+ * 上传文件的方法实现。
+ * 使用了Spring的@Transactional注解,表示这个方法是一个事务性操作,如果发生异常则回滚。
+ *
+ * @param file 要上传的文件对象,类型为MultipartFile
+ * @throws IOException 如果上传过程中发生I/O错误,会抛出IOException异常
+ * @return 返回一个字符串,通常是上传文件后的一些信息,比如文件路径或者文件ID
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String uploadFile(MultipartFile file) throws IOException {
+ // 获取文件扩展名
+ String extName = FileUtil.extName(file.getOriginalFilename());
+ // 格式化文件名,包含日期和UUID
+ String fileName = DateUtil.format(new Date(), NORM_MONTH_PATTERN) + IdUtil.simpleUUID() + "." + extName;
+ // 创建AttachFile对象,并设置属性
+ AttachFile attachFile = new AttachFile();
+ attachFile.setFilePath(fileName);
+ attachFile.setFileSize(file.getBytes().length);
+ attachFile.setFileType(extName);
+ attachFile.setUploadTime(new Date());
+ // 判断上传类型,如果是本地上传,则保存文件信息到数据库,并上传文件到本地
+ if (Objects.equals(imgUploadUtil.getUploadType(), 1)) {
+ attachFileMapper.insert(attachFile);
+ return imgUploadUtil.upload(file, fileName);
+ } else {
+ // 如果是七牛云上传,则获取上传凭证,并上传文件到七牛云
+ String upToken = auth.uploadToken(qiniu.getBucket(), fileName);
+ Response response = uploadManager.put(file.getBytes(), fileName, upToken);
+ // 解析上传响应
+ Json.parseObject(response.bodyString(), DefaultPutRet.class);
+ return fileName;
+ }
+ }
+
+ /**
+ * 删除文件的方法实现。
+ *
+ * @param fileName 要删除的文件名称
+ */
+ @Override
+ public void deleteFile(String fileName){
+ // 根据文件名删除数据库中的记录
+ attachFileMapper.delete(new LambdaQueryWrapper().eq(AttachFile::getFilePath, fileName));
+ try {
+ // 判断上传类型,如果是本地上传,则删除本地文件
+ if (Objects.equals(imgUploadUtil.getUploadType(), UploadType.LOCAL.value())) {
+ imgUploadUtil.delete(fileName);
+ } else if (Objects.equals(imgUploadUtil.getUploadType(), UploadType.QINIU.value())) {
+ // 如果是七牛云上传,则删除七牛云上的文件
+ bucketManager.delete(qiniu.getBucket(), fileName);
+ }
+ } catch (QiniuException e) {
+ // 如果删除失败,抛出运行时异常
+ throw new RuntimeException(e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/BasketServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/BasketServiceImpl.java
new file mode 100644
index 0000000..122d982
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/BasketServiceImpl.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+// 导入所需的类和包
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.yami.shop.bean.app.dto.*;
+import com.yami.shop.bean.app.param.ChangeShopCartParam;
+import com.yami.shop.bean.app.param.OrderItemParam;
+import com.yami.shop.bean.app.param.ShopCartParam;
+import com.yami.shop.bean.event.ShopCartEvent;
+import com.yami.shop.bean.model.Basket;
+import com.yami.shop.bean.model.Product;
+import com.yami.shop.bean.model.ShopDetail;
+import com.yami.shop.bean.model.Sku;
+import com.yami.shop.common.util.Arith;
+import com.yami.shop.common.util.CacheManagerUtil;
+import com.yami.shop.dao.BasketMapper;
+import com.yami.shop.service.BasketService;
+import com.yami.shop.service.ProductService;
+import com.yami.shop.service.ShopDetailService;
+import com.yami.shop.service.SkuService;
+import lombok.AllArgsConstructor;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 购物车服务实现类
+ *
+ * @author lgh on 2018/10/18.
+ */
+@Service
+@AllArgsConstructor
+public class BasketServiceImpl extends ServiceImpl implements BasketService {
+
+ // 注入的组件
+ private final BasketMapper basketMapper;
+ private final CacheManagerUtil cacheManagerUtil;
+ private final ApplicationContext applicationContext;
+ private final SkuService skuService;
+ private final ShopDetailService shopDetailService;
+ private final ProductService productService;
+
+ /**
+ * 根据购物车ID删除购物车商品
+ * @param userId 用户ID
+ * @param basketIds 购物车ID列表
+ */
+ @Override
+ @CacheEvict(cacheNames = "ShopCartItems", key = "#userId")
+ public void deleteShopCartItemsByBasketIds(String userId, List basketIds) {
+ basketMapper.deleteShopCartItemsByBasketIds(userId, basketIds);
+ }
+
+ /**
+ * 添加购物车商品
+ * @param param 购物车参数
+ * @param userId 用户ID
+ */
+ @Override
+ @CacheEvict(cacheNames = "ShopCartItems", key = "#userId")
+ public void addShopCartItem(ChangeShopCartParam param, String userId) {
+ Basket basket = new Basket();
+ basket.setBasketCount(param.getCount());
+ basket.setBasketDate(new Date());
+ basket.setProdId(param.getProdId());
+ basket.setShopId(param.getShopId());
+ basket.setUserId(userId);
+ basket.setSkuId(param.getSkuId());
+ basket.setDistributionCardNo(param.getDistributionCardNo());
+ basketMapper.insert(basket);
+ }
+
+ /**
+ * 更新购物车商品
+ * @param basket 购物车对象
+ */
+ @Override
+ @CacheEvict(cacheNames = "ShopCartItems", key = "#basket.userId")
+ public void updateShopCartItem(Basket basket) {
+ basketMapper.updateById(basket);
+ }
+
+ /**
+ * 删除用户所有购物车商品
+ * @param userId 用户ID
+ */
+ @Override
+ @CacheEvict(cacheNames = "ShopCartItems", key = "#userId")
+ public void deleteAllShopCartItems(String userId) {
+ basketMapper.deleteAllShopCartItems(userId);
+ }
+
+ /**
+ * 获取用户购物车商品列表
+ * @param userId 用户ID
+ * @return 购物车商品列表
+ */
+ @Override
+ public List getShopCartItems(String userId) {
+ // 从缓存中获取购物车商品列表,如果缓存中没有则从数据库中获取
+ List shopCartItemDtoList = cacheManagerUtil.getCache("ShopCartItems", userId);
+ if (shopCartItemDtoList != null) {
+ return shopCartItemDtoList;
+ }
+ shopCartItemDtoList = basketMapper.getShopCartItems(userId);
+ for (ShopCartItemDto shopCartItemDto : shopCartItemDtoList) {
+ shopCartItemDto.setProductTotalAmount(Arith.mul(shopCartItemDto.getProdCount(), shopCartItemDto.getPrice()));
+ }
+ cacheManagerUtil.putCache("ShopCartItems", userId, shopCartItemDtoList);
+ return shopCartItemDtoList;
+ }
+
+ /**
+ * 获取过期的购物车商品列表
+ * @param userId 用户ID
+ * @return 过期的购物车商品列表
+ */
+ @Override
+ public List getShopCartExpiryItems(String userId) {
+ return basketMapper.getShopCartExpiryItems(userId);
+ }
+
+ /**
+ * 清除过期商品列表
+ * @param userId 用户ID
+ */
+ @Override
+ @CacheEvict(cacheNames = "ShopCartItems", key = "#userId")
+ public void cleanExpiryProdList(String userId) {
+ basketMapper.cleanExpiryProdList(userId);
+ }
+
+ /**
+ * 根据购物车参数更新购物车
+ * @param userId 用户ID
+ * @param basketIdShopCartParamMap 购物车ID和参数的映射
+ */
+ @Override
+ @CacheEvict(cacheNames = "ShopCartItems", key = "#userId")
+ public void updateBasketByShopCartParam(String userId, Map basketIdShopCartParamMap) {
+ basketMapper.updateDiscountItemId(userId, basketIdShopCartParamMap);
+ }
+
+ /**
+ * 根据用户ID移除购物车缓存
+ * @param userId 用户ID
+ */
+ @Override
+ @CacheEvict(cacheNames = "ShopCartItems", key = "#userId")
+ public void removeShopCartItemsCacheByUserId(String userId) {
+ // 该方法体为空,可能是待实现的方法
+ }
+
+ /**
+ * 根据商品ID列出所有用户的ID
+ * @param prodId 商品ID
+ * @return 用户ID列表
+ */
+ @Override
+ public List listUserIdByProdId(Long prodId) {
+ return basketMapper.listUserIdByProdId(prodId);
+ }
+
+ /**
+ * 根据购物车商品项获取购物车信息
+ * @param shopCartItems 购物车商品项列表
+ * @return 购物车信息列表
+ */
+ @Override
+ public List getShopCarts(List shopCartItems) {
+ // 根据店铺ID分组购物车商品项
+ Map> shopCartMap = shopCartItems.stream().collect(Collectors.groupingBy(ShopCartItemDto::getShopId));
+
+ // 构建购物车信息列表
+ List shopCartDtos = Lists.newArrayList();
+ for (Long shopId : shopCartMap.keySet()) {
+ // 获取店铺的所有商品项
+ List shopCartItemDtoList = shopCartMap.get(shopId);
+
+ // 构建每个店铺的购物车信息
+ ShopCartDto shopCart = new ShopCartDto();
+ shopCart.setShopId(shopId);
+ shopCart.setShopName(shopCartItemDtoList.get(0).getShopName());
+
+ // 发布购物车事件
+ applicationContext.publishEvent(new ShopCartEvent(shopCart, shopCartItemDtoList));
+
+ shopCartDtos.add(shopCart);
+ }
+
+ return shopCartDtos;
+ }
+
+ /**
+ * 根据订单项和用户ID获取购物车商品项
+ * @param basketId 购物车ID列表
+ * @param orderItem 订单项参数
+ * @param userId 用户ID
+ * @return 购物车商品项列表
+ */
+ @Override
+ public List getShopCartItemsByOrderItems(List basketId, OrderItemParam orderItem, String userId) {
+ if (orderItem == null && CollectionUtil.isEmpty(basketId)) {
+ return Collections.emptyList();
+ }
+
+ // 当立即购买时,没有提交的订单是没有购物车信息的
+ if (CollectionUtil.isEmpty(basketId) && orderItem != null) {
+ Sku sku = skuService.getSkuBySkuId(orderItem.getSkuId());
+ if (sku == null) {
+ throw new RuntimeException("订单包含无法识别的商品");
+ }
+ Product prod = productService.getProductByProdId(orderItem.getProdId());
+ if (prod == null) {
+ throw new RuntimeException("订单包含无法识别的商品");
+ }
+
+ // 构建购物车商品项
+ ShopCartItemDto shopCartItemDto = new ShopCartItemDto();
+ shopCartItemDto.setBasketId(-1L);
+ shopCartItemDto.setSkuId(orderItem.getSkuId());
+ shopCartItemDto.setProdCount(orderItem.getProdCount());
+ shopCartItemDto.setProdId(orderItem.getProdId());
+ shopCartItemDto.setSkuName(sku.getSkuName());
+ shopCartItemDto.setPic(StrUtil.isBlank(sku.getPic()) ? prod.getPic() : sku.getPic());
+ shopCartItemDto.setProdName(sku.getProdName());
+ shopCartItemDto.set
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/BrandServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/BrandServiceImpl.java
new file mode 100644
index 0000000..da5f45e
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/BrandServiceImpl.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.shop.bean.model.Brand;
+import com.yami.shop.dao.BrandMapper;
+import com.yami.shop.dao.CategoryBrandMapper;
+import com.yami.shop.service.BrandService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 品牌服务实现类,提供品牌相关的业务逻辑
+ *
+ * @author lanhai
+ */
+@Service
+public class BrandServiceImpl extends ServiceImpl implements BrandService {
+
+ // 自动注入BrandMapper,用于操作品牌数据
+ @Autowired
+ private BrandMapper brandMapper;
+
+ // 自动注入CategoryBrandMapper,用于操作品牌与分类关系的数据
+ @Autowired
+ private CategoryBrandMapper categoryBrandMapper;
+
+ /**
+ * 根据品牌名称查询品牌信息
+ * @param brandName 品牌名称
+ * @return 品牌对象
+ */
+ @Override
+ public Brand getByBrandName(String brandName) {
+ return brandMapper.getByBrandName(brandName);
+ }
+
+ /**
+ * 根据品牌ID删除品牌以及其与分类的关系
+ * @param brandId 品牌ID
+ */
+ @Override
+ public void deleteByBrand(Long brandId) {
+ brandMapper.deleteById(brandId);
+ categoryBrandMapper.deleteByBrandId(brandId);
+ }
+
+ /**
+ * 根据分类ID查询品牌列表
+ * @param categoryId 分类ID
+ * @return 品牌列表
+ */
+ @Override
+ public List listByCategoryId(Long categoryId) {
+ return brandMapper.listByCategoryId(categoryId);
+ }
+
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryBrandServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryBrandServiceImpl.java
new file mode 100644
index 0000000..ddbe74a
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryBrandServiceImpl.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.yami.shop.bean.model.CategoryBrand;
+import com.yami.shop.dao.CategoryBrandMapper;
+import com.yami.shop.service.CategoryBrandService;
+
+/**
+ * 分类品牌服务实现类,提供分类品牌相关的业务逻辑实现
+ *
+ * @author lanhai
+ */
+@Service
+public class CategoryBrandServiceImpl extends ServiceImpl implements CategoryBrandService {
+
+ /**
+ * 自动注入CategoryBrandMapper,用于操作分类品牌数据
+ */
+ @Autowired
+ private CategoryBrandMapper categoryBrandMapper;
+
+ // 该类目前为空,继承了ServiceImpl的所有方法,可以添加自定义的方法实现
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryPropServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryPropServiceImpl.java
new file mode 100644
index 0000000..e43a8ef
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryPropServiceImpl.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.yami.shop.bean.model.CategoryProp;
+import com.yami.shop.dao.CategoryPropMapper;
+import com.yami.shop.service.CategoryPropService;
+
+/**
+ * 分类属性服务实现类,提供分类属性相关的业务逻辑实现
+ *
+ * @author lanhai
+ */
+@Service
+public class CategoryPropServiceImpl extends ServiceImpl implements CategoryPropService {
+
+ /**
+ * 自动注入CategoryPropMapper,用于操作分类属性数据
+ */
+ @Autowired
+ private CategoryPropMapper categoryPropMapper;
+
+ // 该类目前为空,继承了ServiceImpl的所有方法,可以添加自定义的方法实现
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryServiceImpl.java
new file mode 100644
index 0000000..7359aec
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/CategoryServiceImpl.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.yami.shop.bean.model.Category;
+import com.yami.shop.dao.CategoryBrandMapper;
+import com.yami.shop.dao.CategoryMapper;
+import com.yami.shop.dao.CategoryPropMapper;
+import com.yami.shop.service.AttachFileService;
+import com.yami.shop.service.CategoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 商品分类服务实现类,提供商品分类相关的业务逻辑实现
+ *
+ * @author lanhai
+ */
+@Service
+public class CategoryServiceImpl extends ServiceImpl implements CategoryService {
+
+ @Autowired
+ private CategoryMapper categoryMapper;
+
+ @Autowired
+ private CategoryBrandMapper categoryBrandMapper;
+
+ @Autowired
+ private CategoryPropMapper categoryPropMapper;
+
+ @Autowired
+ private AttachFileService attachFileService;
+
+ /**
+ * 根据父级ID查询分类列表
+ * @param parentId 父级ID
+ * @return 分类列表
+ */
+ @Override
+ public List listByParentId(Long parentId) {
+ return categoryMapper.listByParentId(parentId);
+ }
+
+ /**
+ * 根据店铺ID查询分类列表,并根据seq排序,用于页面表单展示
+ * @param shopId 店铺ID
+ * @return 分类列表
+ */
+ @Override
+ public List tableCategory(Long shopId) {
+ return categoryMapper.tableCategory(shopId);
+ }
+
+ /**
+ * 保存分类信息,包括品牌和参数
+ * @param category 分类对象
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void saveCategory(Category category) {
+ category.setRecTime(new Date());
+ // 保存分类信息
+ categoryMapper.insert(category);
+ insertBrandsAndAttributes(category);
+ }
+
+ /**
+ * 更新分类信息,包括品牌和参数
+ * @param category 分类对象
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateCategory(Category category) {
+ Category dbCategory = categoryMapper.selectById(category.getCategoryId());
+ category.setUpdateTime(new Date());
+ // 保存分类信息
+ categoryMapper.updateById(category);
+ // 先删除后增加
+ deleteBrandsAndAttributes(category.getCategoryId());
+ insertBrandsAndAttributes(category);
+ // 如果以前有图片,并且图片与现在不同,则删除以前的图片
+ // if (StrUtil.isNotBlank(dbCategory.getPic()) && !dbCategory.getPic().equals(category.getPic())) {
+ // attachFileService.deleteFile(dbCategory.getPic());
+ // }
+ }
+
+ /**
+ * 删除分类信息,包括品牌、参数以及分类对应的图片
+ * @param categoryId 分类ID
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteCategory(Long categoryId) {
+ Category category = categoryMapper.selectById(categoryId);
+ categoryMapper.deleteById(categoryId);
+ deleteBrandsAndAttributes(categoryId);
+ // if (StrUtil.isNotBlank(category.getPic())) {
+ // attachFileService.deleteFile(category.getPic());
+ // }
+ }
+
+ /**
+ * 删除所有分类所关联的品牌和参数
+ * @param categoryId 分类ID
+ */
+ private void deleteBrandsAndAttributes(Long categoryId) {
+ // 删除所有分类所关联的品牌
+ categoryBrandMapper.deleteByCategoryId(categoryId);
+ // 删除所有分类所关联的参数
+ categoryPropMapper.deleteByCategoryId(categoryId);
+ }
+
+ /**
+ * 保存分类与品牌信息,保存分类与参数信息
+ * @param category 分类对象
+ */
+ private void insertBrandsAndAttributes(Category category) {
+ // 保存分类与品牌信息
+ if(CollUtil.isNotEmpty(category.getBrandIds())){
+ categoryBrandMapper.insertCategoryBrand(category.getCategoryId(), category.getBrandIds());
+ }
+ // 保存分类与参数信息
+ if(CollUtil.isNotEmpty(category.getAttributeIds())){
+ categoryPropMapper.insertCategoryProp(category.getCategoryId(), category.getAttributeIds());
+ }
+ }
+
+ /**
+ * 根据店铺ID和层级,获取商品分类树
+ * @param shopId 店铺ID
+ * @param grade 分类层级
+ * @return 分类树列表
+ */
+ @Override
+ public List treeSelect(Long shopId, int grade) {
+ List categories = categoryMapper.selectList(new LambdaQueryWrapper().le(Category::getGrade, grade).eq(Category::getShopId, shopId));
+ return categoryListToTree(categories);
+ }
+
+ /**
+ * 将分类列表转换为树形结构
+ * @param categorys 分类列表
+ * @return 树形结构的分类列表
+ */
+ public List categoryListToTree(List categorys){
+ if (CollectionUtils.isEmpty(categorys)) {
+ return Lists.newArrayList();
+ }
+ Map> categoryMap = categorys.stream().collect(Collectors.groupingBy(Category::getParentId));
+ List rootList = categoryMap.get(0L);
+ transformCategoryTree(rootList, categoryMap);
+ return rootList;
+ }
+
+ /**
+ * 递归构建分类树
+ * @param categorys 当前层级的分类列表
+ * @param categoryMap 所有分类的映射
+ */
+ public void transformCategoryTree(List categorys, Map> categoryMap) {
+ for (Category category : categorys) {
+ List nextList = categoryMap.get(category.getCategoryId());
+ if (CollectionUtils.isEmpty(nextList)) {
+ continue;
+ }
+ // 将排序完成的list设为下一层级
+ category.setCategories(nextList);
+ // 处理下一层级
+ transformCategoryTree(nextList, categoryMap);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/DeliveryServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/DeliveryServiceImpl.java
new file mode 100644
index 0000000..c386291
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/DeliveryServiceImpl.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名,表示这个类属于com.yami.shop.service.impl包
+package com.yami.shop.service.impl;
+
+// 导入MyBatis Plus框架中的ServiceImpl类,提供基础的CRUD操作实现
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+// 导入Spring框架的Autowired注解,用于自动注入依赖的组件
+import org.springframework.beans.factory.annotation.Autowired;
+// 导入Spring框架的Service注解,用于声明这是一个服务组件
+import org.springframework.stereotype.Service;
+
+// 导入项目中定义的Delivery实体类
+import com.yami.shop.bean.model.Delivery;
+// 导入与Delivery实体类相关的Mapper接口
+import com.yami.shop.dao.DeliveryMapper;
+// 导入定义的服务接口
+import com.yami.shop.service.DeliveryService;
+
+/**
+ * DeliveryServiceImpl类的文档注释
+ * 这个类是DeliveryService接口的实现类,提供了与Delivery实体类相关的业务操作实现
+ *
+ * @author lgh on 2018/11/26 表示这个类是由lgh在2018年11月26日创建的
+ */
+// 使用Spring的Service注解标注这个类为一个服务组件,这样Spring容器可以自动扫描并管理这个类的实例
+@Service
+public class DeliveryServiceImpl extends ServiceImpl implements DeliveryService {
+
+ // 使用Autowired注解自动注入DeliveryMapper的实例
+ @Autowired
+ private DeliveryMapper deliveryMapper;
+
+ // 这里可以添加额外的业务逻辑方法,或者覆盖ServiceImpl中的方法以提供定制化的实现
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/HotSearchServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/HotSearchServiceImpl.java
new file mode 100644
index 0000000..803a53b
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/HotSearchServiceImpl.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名,表示这个类属于com.yami.shop.service.impl包
+package com.yami.shop.service.impl;
+
+// 导入MyBatis Plus框架中的ServiceImpl类,提供基础的CRUD操作实现
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+// 导入Spring框架的缓存注解
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+// 导入Spring框架的Service注解,用于声明这是一个服务组件
+import org.springframework.stereotype.Service;
+
+// 导入项目中定义的HotSearchDto数据传输对象
+import com.yami.shop.bean.dto.HotSearchDto;
+// 导入项目中定义的HotSearch实体类
+import com.yami.shop.bean.model.HotSearch;
+// 导入Spring框架的Autowired注解,用于自动注入依赖的组件
+import org.springframework.beans.factory.annotation.Autowired;
+// 导入与HotSearch实体类相关的Mapper接口
+import com.yami.shop.dao.HotSearchMapper;
+// 导入定义的服务接口
+import com.yami.shop.service.HotSearchService;
+// 导入Java.util.List接口,用于返回列表类型的数据
+import java.util.List;
+
+/**
+ * HotSearchServiceImpl类的文档注释
+ * 这个类是HotSearchService接口的实现类,提供了与HotSearch实体类相关的业务操作实现
+ *
+ * @author lgh on 2019/03/27 表示这个类是由lgh在2019年3月27日创建的
+ */
+// 使用Spring的Service注解标注这个类为一个服务组件,这样Spring容器可以自动扫描并管理这个类的实例
+@Service
+public class HotSearchServiceImpl extends ServiceImpl implements HotSearchService {
+
+ // 使用Autowired注解自动注入HotSearchMapper的实例
+ @Autowired
+ private HotSearchMapper hotSearchMapper;
+
+ /**
+ * 根据店铺ID获取热点搜索DTO列表的方法
+ * 这个方法使用@Cacheable注解,表示其返回结果将被缓存,缓存名称为"HotSearchDto",键为方法参数shopId
+ * @param shopId 店铺ID
+ * @return 根据店铺ID获取的热点搜索DTO列表
+ */
+ @Override
+ @Cacheable(cacheNames = "HotSearchDto", key = "#shopId")
+ public List getHotSearchDtoByShopId(Long shopId) {
+ // 调用hotSearchMapper的同名方法获取数据
+ return hotSearchMapper.getHotSearchDtoByShopId(shopId);
+ }
+
+ /**
+ * 根据店铺ID移除热点搜索DTO缓存的方法
+ * 这个方法使用@CacheEvict注解,表示将从缓存中移除指定的缓存项,缓存名称为"HotSearchDto",键为方法参数shopId
+ * @param shopId 店铺ID
+ */
+ @Override
+ @CacheEvict(cacheNames = "HotSearchDto", key = "#shopId")
+ public void removeHotSearchDtoCacheByShopId(Long shopId) {
+ // 这里可以添加额外的逻辑,比如通知缓存管理器移除缓存
+ }
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/IndexImgServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/IndexImgServiceImpl.java
new file mode 100644
index 0000000..546c705
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/IndexImgServiceImpl.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import com.yami.shop.bean.model.IndexImg;
+import com.yami.shop.dao.IndexImgMapper;
+import com.yami.shop.service.IndexImgService;
+
+import java.util.List;
+
+/**
+ * IndexImgServiceImpl 是IndexImgService接口的具体实现类。
+ * 它继承自MyBatis-Plus提供的ServiceImpl,并实现了IndexImgService接口中定义的方法。
+ * 该服务负责处理与首页图片(IndexImg)相关的业务逻辑。
+ *
+ * @author lgh on 2018/11/26.
+ */
+@Service
+public class IndexImgServiceImpl extends ServiceImpl implements IndexImgService {
+
+ /**
+ * indexImgMapper是通过Spring自动装配的DAO层组件,
+ * 用于执行对IndexImg实体对应的数据库表的操作。
+ */
+ @Autowired
+ private IndexImgMapper indexImgMapper;
+
+ /**
+ * deleteIndexImgByIds方法实现了根据给定ID列表批量删除首页图片的功能。
+ * 它调用了indexImgMapper中的deleteIndexImgByIds方法来执行实际的删除操作。
+ */
+ @Override
+ public void deleteIndexImgByIds(Long[] ids) {
+ indexImgMapper.deleteIndexImgByIds(ids);
+ }
+
+ /**
+ * listIndexImg方法返回所有首页图片的列表。
+ * 使用了@Cacheable注解以启用Spring Cache缓存机制,
+ * 这样可以避免重复查询数据库,提高性能。
+ * 当首次调用此方法时,结果会被缓存起来;
+ * 后续相同请求将直接从缓存中读取数据,直到缓存失效或被手动清除。
+ */
+ @Override
+ @Cacheable(cacheNames = "indexImg", key = "'indexImg'")
+ public List listIndexImg() {
+ return indexImgMapper.listIndexImg();
+ }
+
+ /**
+ * removeIndexImgCache方法用于清除首页图片的缓存。
+ * 使用了@CacheEvict注解,当调用此方法时会清除指定名称的缓存,
+ * 确保在需要的时候缓存内容是最新的。
+ */
+ @Override
+ @CacheEvict(cacheNames = "indexImg", key = "'indexImg'")
+ public void removeIndexImgCache() {
+ // 方法体为空,因为实际的缓存清除工作由@CacheEvict注解完成。
+ }
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/MessageServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/MessageServiceImpl.java
new file mode 100644
index 0000000..efe1c17
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/MessageServiceImpl.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+// 定义包名,表示这个类属于com.yami.shop.service.impl包
+package com.yami.shop.service.impl;
+
+// 导入MyBatis Plus框架中的ServiceImpl类,提供基础的CRUD操作实现
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+// 导入Spring框架的Autowired注解,用于自动注入依赖的组件
+import org.springframework.beans.factory.annotation.Autowired;
+// 导入Spring框架的Service注解,用于声明这是一个服务组件
+import org.springframework.stereotype.Service;
+
+// 导入项目中定义的Message实体类
+import com.yami.shop.bean.model.Message;
+// 导入与Message实体类相关的Mapper接口
+import com.yami.shop.dao.MessageMapper;
+// 导入定义的服务接口
+import com.yami.shop.service.MessageService;
+
+/**
+ * MessageServiceImpl类的文档注释
+ * 这个类是MessageService接口的实现类,提供了与Message实体类相关的业务操作实现
+ *
+ * @author lgh on 2018/10/15 表示这个类是由lgh在2018年10月15日创建的
+ */
+// 使用Spring的Service注解标注这个类为一个服务组件,这样Spring容器可以自动扫描并管理这个类的实例
+@Service
+public class MessageServiceImpl extends ServiceImpl implements MessageService {
+
+ // 使用Autowired注解自动注入MessageMapper的实例
+ @Autowired
+ private MessageMapper messageMapper;
+
+ // 这里可以添加额外的业务逻辑方法,或者覆盖ServiceImpl中的方法以提供定制化的实现
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/MyOrderServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/MyOrderServiceImpl.java
new file mode 100644
index 0000000..2f54ad0
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/MyOrderServiceImpl.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.shop.bean.app.dto.MyOrderDto;
+import com.yami.shop.bean.model.Order;
+import com.yami.shop.common.util.PageAdapter;
+import com.yami.shop.dao.OrderMapper;
+import com.yami.shop.service.MyOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * MyOrderServiceImpl 是 MyOrderService 接口的具体实现类。
+ * 它继承自 MyBatis-Plus 提供的 ServiceImpl,并实现了 MyOrderService 中定义的方法。
+ * 该服务负责处理与用户订单(Order)相关的业务逻辑。
+ *
+ * @author lgh on 2018/09/15.
+ */
+@Service
+public class MyOrderServiceImpl extends ServiceImpl implements MyOrderService {
+
+ /**
+ * orderMapper 是通过 Spring 自动装配的 DAO 层组件,
+ * 用于执行对 Order 实体对应的数据库表的操作。
+ */
+ @Autowired
+ private OrderMapper orderMapper;
+
+ /**
+ * pageMyOrderByUserIdAndStatus 方法实现了根据用户ID和订单状态分页查询订单信息的功能。
+ *
+ * @param page 分页参数,包含了当前页码、每页显示记录数等信息。
+ * 该参数也作为返回结果的一部分,用来封装分页后的数据。
+ * @param userId 用户唯一标识符,用于确定要查询哪个用户的订单。
+ * @param status 订单的状态码,用于过滤符合条件的订单。
+ * 如果为 null,则表示不根据订单状态进行过滤。
+ * @return 返回一个 IPage 对象,其中包含分页后的订单信息列表,
+ * 以及与分页相关的元数据(如总记录数、总页数等)。
+ */
+ @Override
+ public IPage pageMyOrderByUserIdAndStatus(Page page, String userId, Integer status) {
+ // 使用 PageAdapter 将传入的分页对象适配成适合底层查询的形式
+ page.setRecords(orderMapper.listMyOrderByUserIdAndStatus(new PageAdapter(page), userId, status));
+
+ // 查询满足条件的订单总数,以便设置分页对象的总记录数
+ page.setTotal(orderMapper.countMyOrderByUserIdAndStatus(userId, status));
+
+ // 返回填充了数据的分页对象
+ return page;
+ }
+}
diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/NoticeServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/NoticeServiceImpl.java
new file mode 100644
index 0000000..6fd4e8d
--- /dev/null
+++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/NoticeServiceImpl.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.shop.bean.app.dto.NoticeDto;
+import com.yami.shop.bean.model.Notice;
+import com.yami.shop.dao.NoticeMapper;
+import com.yami.shop.service.NoticeService;
+import lombok.AllArgsConstructor;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * NoticeServiceImpl 是 NoticeService 接口的具体实现类。
+ * 它继承自 MyBatis-Plus 提供的 ServiceImpl,并实现了 NoticeService 中定义的方法。
+ * 该服务负责处理与公告(Notice)相关的业务逻辑。
+ *
+ * @author hzm
+ * @date 2019-04-18 21:21:40
+ */
+@Service
+@AllArgsConstructor // Lombok 注解,自动生成所有构造函数,简化依赖注入
+public class NoticeServiceImpl extends ServiceImpl implements NoticeService {
+
+ private final NoticeMapper noticeMapper; // 使用构造器注入 DAO 层组件
+
+ /**
+ * listNotice 方法用于获取有效的、置顶的公告列表,并按照发布时间降序排列。
+ * 使用了 @Cacheable 注解来启用缓存,以提高性能。
+ *
+ * @return 返回一个包含符合条件的公告对象列表。
+ */
+ @Override
+ @Cacheable(cacheNames = "notices", key = "'notices'")
+ public List listNotice() {
+ return noticeMapper.selectList(new LambdaQueryWrapper()
+ .eq(Notice::getStatus, 1) // 状态为1表示有效
+ .eq(Notice::getIsTop, 1) // 是否置顶为1表示置顶
+ .orderByDesc(Notice::getPublishTime)); // 按发布时间降序排序
+ }
+
+ /**
+ * removeNoticeList 方法用于清除公告列表的缓存。
+ * 使用了 @CacheEvict 注解,在调用此方法时会清除指定名称的缓存。
+ */
+ @Override
+ @CacheEvict(cacheNames = "notices", key = "'notices'")
+ public void removeNoticeList() {
+ // 方法体为空,因为实际的缓存清除工作由 @CacheEvict 注解完成。
+ }
+
+ /**
+ * pageNotice 方法用于分页查询公告信息。
+ *
+ * @param page 分页参数,包含了当前页码、每页显示记录数等信息。
+ * 该参数也作为返回结果的一部分,用来封装分页后的数据。
+ * @return 返回一个 IPage 对象,其中包含分页后的公告信息列表,
+ * 以及与分页相关的元数据(如总记录数、总页数等)。
+ */
+ @Override
+ public Page pageNotice(Page page) {
+ return noticeMapper.pageNotice(page);
+ }
+
+ /**
+ * getNoticeById 方法根据给定的公告ID获取公告详情。
+ * 使用了 @Cacheable 注解来启用缓存,以提高性能。
+ *
+ * @param noticeId 公告唯一标识符,用于确定要查询的公告。
+ * @return 返回一个 Notice 对象,代表指定ID的公告详情。
+ */
+ @Override
+ @Cacheable(cacheNames = "notice", key = "#noticeId")
+ public Notice getNoticeById(Long noticeId) {
+ return noticeMapper.selectById(noticeId);
+ }
+
+ /**
+ * removeNoticeById 方法用于根据给定的公告ID清除公告详情的缓存。
+ * 使用了 @CacheEvict 注解,在调用此方法时会清除指定名称和键值的缓存。
+ *
+ * @param noticeId 公告唯一标识符,用于确定要清除缓存的公告。
+ */
+ @Override
+ @CacheEvict(cacheNames = "notice", key = "#noticeId")
+ public void removeNoticeById(Long noticeId) {
+ // 方法体为空,因为实际的缓存清除工作由 @CacheEvict 注解完成。
+ }
+}
diff --git a/yami-shop-service/src/main/resources/mapper/AreaMapper.xml b/yami-shop-service/src/main/resources/mapper/AreaMapper.xml
new file mode 100644
index 0000000..5c4e5e8
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/AreaMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/AttachFileMapper.xml b/yami-shop-service/src/main/resources/mapper/AttachFileMapper.xml
new file mode 100644
index 0000000..56b8050
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/AttachFileMapper.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/BasketMapper.xml b/yami-shop-service/src/main/resources/mapper/BasketMapper.xml
new file mode 100644
index 0000000..65ee5e0
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/BasketMapper.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ delete from tz_basket where user_id = #{userId} and basket_id in
+
+ #{basketId}
+
+
+
+
+
+ delete from tz_basket where user_id = #{userId}
+
+
+
+
+
+
+
+ DELETE FROM tz_basket
+ WHERE basket_id IN(
+ SELECT basket_id FROM (
+ SELECT tb.basket_id basket_id
+ FROM tz_basket tb
+ LEFT JOIN tz_shop_detail tsd
+ ON tb.shop_id = tsd.shop_id
+ LEFT JOIN tz_prod tp
+ ON tb.prod_id = tp.prod_id
+ LEFT JOIN tz_sku ts
+ ON tb.sku_id = ts.sku_id
+ WHERE (tp.status = 0 OR ts.status = 0) AND tb.user_id = #{userId}) AS temp)
+
+
+
+
+
+ UPDATE tz_basket SET discount_id = #{shopCartParam.discountId} where basket_id = #{key} and user_id = #{userId}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/BrandMapper.xml b/yami-shop-service/src/main/resources/mapper/BrandMapper.xml
new file mode 100644
index 0000000..93d0d53
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/BrandMapper.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/CategoryBrandMapper.xml b/yami-shop-service/src/main/resources/mapper/CategoryBrandMapper.xml
new file mode 100644
index 0000000..674df73
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/CategoryBrandMapper.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into tz_category_brand (category_id,brand_id) values
+
+
+ (#{categoryId},#{brandId})
+
+
+
+
+ delete from tz_category_brand where category_id = #{categoryId}
+
+
+
+
+ delete from tz_category_brand where brand_id = #{brandId}
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/CategoryMapper.xml b/yami-shop-service/src/main/resources/mapper/CategoryMapper.xml
new file mode 100644
index 0000000..464914e
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/CategoryMapper.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/CategoryPropMapper.xml b/yami-shop-service/src/main/resources/mapper/CategoryPropMapper.xml
new file mode 100644
index 0000000..987e341
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/CategoryPropMapper.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into tz_category_prop (category_id,prop_id) values
+
+
+ (#{categoryId},#{propId})
+
+
+
+
+
+ delete from tz_category_prop where category_id = #{categoryId}
+
+
+
+
+ delete from tz_category_prop where prop_id = #{propId}
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/DeliveryMapper.xml b/yami-shop-service/src/main/resources/mapper/DeliveryMapper.xml
new file mode 100644
index 0000000..fd16915
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/DeliveryMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/HotSearchMapper.xml b/yami-shop-service/src/main/resources/mapper/HotSearchMapper.xml
new file mode 100644
index 0000000..5908e45
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/HotSearchMapper.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/IndexImgMapper.xml b/yami-shop-service/src/main/resources/mapper/IndexImgMapper.xml
new file mode 100644
index 0000000..bd93219
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/IndexImgMapper.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ delete from tz_index_img where img_id in
+
+
+ #{id}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/MessageMapper.xml b/yami-shop-service/src/main/resources/mapper/MessageMapper.xml
new file mode 100644
index 0000000..6ecdda3
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/MessageMapper.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yami-shop-service/src/main/resources/mapper/OrderItemMapper.xml b/yami-shop-service/src/main/resources/mapper/OrderItemMapper.xml
new file mode 100644
index 0000000..8309b1d
--- /dev/null
+++ b/yami-shop-service/src/main/resources/mapper/OrderItemMapper.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INSERT INTO `tz_order_item` (shop_id,order_number,prod_id,sku_id,sku_name,
+ prod_count,prod_name,pic,price,user_id,product_total_amount,rec_time,comm_sts,
+ distribution_card_no,basket_date) VALUES
+
+
+ (#{orderItem.shopId},#{orderItem.orderNumber},#{orderItem.prodId},#{orderItem.skuId},#{orderItem.skuName},
+ #{orderItem.prodCount},#{orderItem.prodName},#{orderItem.pic},#{orderItem.price},#{orderItem.userId},#{orderItem.productTotalAmount},#{orderItem.recTime},#{orderItem.commSts},
+ #{orderItem.distributionCardNo},#{orderItem.basketDate})
+
+
+
+
+
+
\ No newline at end of file