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