From 928aa239efcce429673cb64f703687b83ea1ec90 Mon Sep 17 00:00:00 2001 From: puzvv <1@> Date: Mon, 29 Dec 2025 18:43:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/Constant/MessageConstant.java | 2 ++ .../Controllers/ProductController.java | 27 ++++++++++++++++ .../Controllers/UserController.java | 24 +++++++++++++- .../Mapper/ProductMapper.java | 2 ++ .../ai_spring_example/Mapper/UserMapper.java | 2 -- .../Service/Impl/ProductServiceImpl.java | 18 +++++++++++ .../Service/Impl/UserServiceImpl.java | 19 ++++++++++-- .../Service/ProductService.java | 13 ++++++++ .../Service/UserService.java | 3 ++ .../pojo/Dto/ProductDTO.java | 1 + .../ai_spring_example/pojo/Dto/UserDTO.java | 2 ++ .../pojo/Entity/Product.java | 5 +++ .../ai_spring_example/pojo/Entity/User.java | 5 +++ .../pojo/Vo/ProductListVO.java | 2 ++ .../ai_spring_example/pojo/Vo/ProductVO.java | 2 +- .../pojo/Vo/UserLoginVO.java | 1 + src/main/resources/mapper/ProductMapper.xml | 31 ++++++++++++++++++- src/main/resources/mapper/UserMapper.xml | 19 ------------ 18 files changed, 152 insertions(+), 26 deletions(-) delete mode 100644 src/main/resources/mapper/UserMapper.xml diff --git a/src/main/java/icu/sunway/ai_spring_example/Common/Constant/MessageConstant.java b/src/main/java/icu/sunway/ai_spring_example/Common/Constant/MessageConstant.java index 73c2c9d..2e04f3a 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Common/Constant/MessageConstant.java +++ b/src/main/java/icu/sunway/ai_spring_example/Common/Constant/MessageConstant.java @@ -5,6 +5,8 @@ package icu.sunway.ai_spring_example.Common.Constant; */ public class MessageConstant { public static final String ALREADY_EXISTS = "账号已存在"; + public static final String USERNAME_ALREADY_EXISTS = "用户名已经存在"; + public static final String PHONE_ALREADY_EXISTS = "手机号已经被注册"; public static final String PASSWORD_ERROR = "密码错误"; public static final String ACCOUNT_NOT_FOUND = "账号不存在"; public static final String ACCOUNT_LOCKED = "账号被锁定"; diff --git a/src/main/java/icu/sunway/ai_spring_example/Controllers/ProductController.java b/src/main/java/icu/sunway/ai_spring_example/Controllers/ProductController.java index c9199a1..30cdf04 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Controllers/ProductController.java +++ b/src/main/java/icu/sunway/ai_spring_example/Controllers/ProductController.java @@ -81,6 +81,33 @@ public class ProductController { return ResponseEntity.success(result); } + /** + * 商家分页查询商品列表 + */ + @GetMapping("/page/merchant") + public ResponseEntity> pageByUser( + @RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer size, + Long categoryId, + String name, + Integer status, + @RequestParam Long currentUserId + ) { + + log.info("商家分页查询自己的商品列表: page={}, size={}, categoryId={}, name={}, status={}, userId={}", + page, size, categoryId, name, status, currentUserId); + + Page productPage = productService.getProductPageByUser( + page, size, categoryId, name, status, currentUserId); + + Map result = new HashMap<>(); + result.put("list", productPage.getRecords()); + result.put("total", productPage.getTotal()); + result.put("page", page); + result.put("size", size); + return ResponseEntity.success(result); + } + /** * 查询商品详情 */ diff --git a/src/main/java/icu/sunway/ai_spring_example/Controllers/UserController.java b/src/main/java/icu/sunway/ai_spring_example/Controllers/UserController.java index 9d4f4e8..bccc30b 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Controllers/UserController.java +++ b/src/main/java/icu/sunway/ai_spring_example/Controllers/UserController.java @@ -1,7 +1,9 @@ package icu.sunway.ai_spring_example.Controllers; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import icu.sunway.ai_spring_example.Common.Constant.DeletedConstant; import icu.sunway.ai_spring_example.Common.Constant.JwtClaimsConstant; +import icu.sunway.ai_spring_example.Common.Constant.MessageConstant; import icu.sunway.ai_spring_example.Common.Constant.StatusConstant; import icu.sunway.ai_spring_example.Common.Properties.JwtProperties; import icu.sunway.ai_spring_example.Common.Response.ResponseEntity; @@ -39,6 +41,7 @@ public class UserController { @Autowired private UserAddressService userAddressService; + @PostMapping("/login") public ResponseEntity login(@RequestBody UserDTO userDTO){ log.info("用户登录:{}",userDTO); @@ -57,6 +60,7 @@ public class UserController { .id(user.getId()) .username(user.getUsername()) .nickname(user.getNickname()) + .isAdmin(user.getIsAdmin()) .token(token) .build(); @@ -73,6 +77,20 @@ public class UserController { log.info("用户注册:{}",userDTO); User user = new User(); BeanUtils.copyProperties(userDTO,user); + //保证用户名唯一 + QueryWrapperqueryWrapper = new QueryWrapper<>(); + queryWrapper.eq("username",user.getUsername().trim()); + User existUser = userService.getOne(queryWrapper); + if(existUser != null){ + return ResponseEntity.error(MessageConstant.USERNAME_ALREADY_EXISTS); + } + //保证手机号唯一 + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.eq("phone",user.getPhone()); + if(userService.count(queryWrapper1) > 0){ + return ResponseEntity.error(MessageConstant.PHONE_ALREADY_EXISTS); + } + user.setStatus(StatusConstant.ENABLE); user.setIsDeleted(DeletedConstant.NOT_DELETED); user.setPassword(DigestUtils.md5DigestAsHex(userDTO.getPassword().getBytes())); @@ -123,7 +141,11 @@ public class UserController { userAddressService.deleteAddress(id, userId); return ResponseEntity.success("地址删除成功"); } - + @GetMapping("/admin") + public ResponseEntity> getUserList() { + log.info("开始查询用户列表"); + return ResponseEntity.success(userService.getUserList()); + } /** * 查询用户地址列表 */ diff --git a/src/main/java/icu/sunway/ai_spring_example/Mapper/ProductMapper.java b/src/main/java/icu/sunway/ai_spring_example/Mapper/ProductMapper.java index 50f6ea0..5b9f5a4 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Mapper/ProductMapper.java +++ b/src/main/java/icu/sunway/ai_spring_example/Mapper/ProductMapper.java @@ -26,4 +26,6 @@ public interface ProductMapper extends BaseMapper { @Param("name") String name, @Param("status") Integer status ); + + IPage selectProductPageByUser(Page pageInfo, Long categoryId, String name, Integer status); } \ No newline at end of file diff --git a/src/main/java/icu/sunway/ai_spring_example/Mapper/UserMapper.java b/src/main/java/icu/sunway/ai_spring_example/Mapper/UserMapper.java index c5385e3..4cc4356 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Mapper/UserMapper.java +++ b/src/main/java/icu/sunway/ai_spring_example/Mapper/UserMapper.java @@ -15,6 +15,4 @@ public interface UserMapper extends BaseMapper { */ @Select("select * from sys_user where username = #{username}") User getByUsername(String username); - - void update(User user); } diff --git a/src/main/java/icu/sunway/ai_spring_example/Service/Impl/ProductServiceImpl.java b/src/main/java/icu/sunway/ai_spring_example/Service/Impl/ProductServiceImpl.java index 9cd7741..6a9bc5e 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Service/Impl/ProductServiceImpl.java +++ b/src/main/java/icu/sunway/ai_spring_example/Service/Impl/ProductServiceImpl.java @@ -98,6 +98,24 @@ public class ProductServiceImpl extends ServiceImpl impl IPage result = productMapper.selectProductPage(pageInfo, categoryId, name, status); return (Page) result; } + + @Override + public Page getProductPageByUser(Integer page, Integer size, Long categoryId, String name, + Integer status, Long currentUserId) { + // 参数校验 + if (currentUserId == null) { + throw new BusinessException(MessageConstant.PARAM_ERROR); + } + + Page pageInfo = new Page<>(page, size); + IPage result = productMapper.selectProductPageByUser( + pageInfo, + categoryId, + name, + status + ); + return (Page) result; + } @Override public ProductVO getProductDetail(Long id) { QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/src/main/java/icu/sunway/ai_spring_example/Service/Impl/UserServiceImpl.java b/src/main/java/icu/sunway/ai_spring_example/Service/Impl/UserServiceImpl.java index 21c3afd..8333479 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Service/Impl/UserServiceImpl.java +++ b/src/main/java/icu/sunway/ai_spring_example/Service/Impl/UserServiceImpl.java @@ -1,5 +1,6 @@ package icu.sunway.ai_spring_example.Service.Impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import icu.sunway.ai_spring_example.Common.Constant.MessageConstant; import icu.sunway.ai_spring_example.Common.Constant.StatusConstant; @@ -8,12 +9,12 @@ import icu.sunway.ai_spring_example.Mapper.UserMapper; import icu.sunway.ai_spring_example.Service.UserService; import icu.sunway.ai_spring_example.pojo.Dto.UserDTO; import icu.sunway.ai_spring_example.pojo.Entity.User; -import icu.sunway.ai_spring_example.pojo.Vo.UserVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.DigestUtils; +import java.util.List; @Service @@ -22,6 +23,7 @@ public class UserServiceImpl extends ServiceImpl implements Us @Autowired private UserMapper userMapper; + @Override public User login(UserDTO userDTO) { String username = userDTO.getUsername(); @@ -43,14 +45,27 @@ public class UserServiceImpl extends ServiceImpl implements Us throw new AccountNotFoundException(MessageConstant.ACCOUNT_LOCKED); } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("username",user.getUsername()) + .eq("password",user.getPassword()); + user = userMapper.selectOne(queryWrapper); return user; } @Override public void update(UserDTO userDTO) { User user = new User(); + if(userDTO.getPassword() != null)userDTO.setPassword(DigestUtils.md5DigestAsHex(userDTO.getPassword().getBytes())); BeanUtils.copyProperties(userDTO,user); - userMapper.update(user); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("id",user.getId()); + userMapper.update(user,queryWrapper); + } + + @Override + public List getUserList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + return userMapper.selectList(queryWrapper); } } diff --git a/src/main/java/icu/sunway/ai_spring_example/Service/ProductService.java b/src/main/java/icu/sunway/ai_spring_example/Service/ProductService.java index a2273ca..6e24979 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Service/ProductService.java +++ b/src/main/java/icu/sunway/ai_spring_example/Service/ProductService.java @@ -32,6 +32,19 @@ public interface ProductService extends IService { */ Page getProductPage(Integer page, Integer size, Long categoryId, String name, Integer status); + /** + * 商家/管理员分页查询商品列表(商家仅能查看自己的商品) + * @param page 页码 + * @param size 每页条数 + * @param categoryId 分类ID + * @param name 商品名称 + * @param status 状态 + * @param currentUserId 当前登录用户ID + * @return 分页结果 + */ + Page getProductPageByUser(Integer page, Integer size, Long categoryId, String name, Integer status, + Long currentUserId); + /** * 根据ID查询商品详情 * @param id 商品ID diff --git a/src/main/java/icu/sunway/ai_spring_example/Service/UserService.java b/src/main/java/icu/sunway/ai_spring_example/Service/UserService.java index e706d37..736736c 100644 --- a/src/main/java/icu/sunway/ai_spring_example/Service/UserService.java +++ b/src/main/java/icu/sunway/ai_spring_example/Service/UserService.java @@ -5,6 +5,8 @@ import icu.sunway.ai_spring_example.pojo.Dto.UserDTO; import icu.sunway.ai_spring_example.pojo.Entity.User; import icu.sunway.ai_spring_example.pojo.Vo.UserVO; +import java.util.List; + public interface UserService extends IService { /* @@ -19,4 +21,5 @@ public interface UserService extends IService { */ void update(UserDTO userDTO); + List getUserList(); } diff --git a/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/ProductDTO.java b/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/ProductDTO.java index 6ec9d67..2a06133 100644 --- a/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/ProductDTO.java +++ b/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/ProductDTO.java @@ -8,6 +8,7 @@ import java.util.List; public class ProductDTO { private Long id; // 商品ID(修改时使用) private Long categoryId; // 分类ID + private Long userId;// 商家ID private String name; // 商品名称 private String subtitle; // 副标题 private String mainImage; // 主图URL diff --git a/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/UserDTO.java b/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/UserDTO.java index 1d739f0..010502c 100644 --- a/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/UserDTO.java +++ b/src/main/java/icu/sunway/ai_spring_example/pojo/Dto/UserDTO.java @@ -12,4 +12,6 @@ public class UserDTO { private String avatar; private String nickname; private Integer gender; + private Integer status; + private Integer isAdmin; } diff --git a/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/Product.java b/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/Product.java index 1ea4e1e..3e2fdc9 100644 --- a/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/Product.java +++ b/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/Product.java @@ -26,6 +26,11 @@ public class Product { */ private Long categoryId; + /** + * 商家ID + */ + private Long userId; + /** * 商品名称 */ diff --git a/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/User.java b/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/User.java index 2b558a8..6fc9fa3 100644 --- a/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/User.java +++ b/src/main/java/icu/sunway/ai_spring_example/pojo/Entity/User.java @@ -75,4 +75,9 @@ public class User { */ @TableLogic private Integer isDeleted; + + /** + * 是否为管理员 0-否 1-是 + */ + private Integer isAdmin; } diff --git a/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductListVO.java b/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductListVO.java index d756d93..5ccda00 100644 --- a/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductListVO.java +++ b/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductListVO.java @@ -14,5 +14,7 @@ public class ProductListVO { private BigDecimal price; private Integer sales; private Integer status; + private Integer stock; + private Integer userId; private String categoryName; } \ No newline at end of file diff --git a/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductVO.java b/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductVO.java index 6de08a3..3ee5ea1 100644 --- a/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductVO.java +++ b/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/ProductVO.java @@ -14,6 +14,7 @@ import java.util.List; public class ProductVO { private Long id; private Long categoryId; + private Long userId;//商家ID private String categoryName; // 分类名称 private String name; private String subtitle; @@ -25,7 +26,6 @@ public class ProductVO { private Integer sales; private Integer status; private Integer sort; - private LocalDateTime createTime; private LocalDateTime updateTime; private List skuList; // 规格列表 diff --git a/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/UserLoginVO.java b/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/UserLoginVO.java index ed06c84..4765a18 100644 --- a/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/UserLoginVO.java +++ b/src/main/java/icu/sunway/ai_spring_example/pojo/Vo/UserLoginVO.java @@ -13,5 +13,6 @@ public class UserLoginVO { private Long id; private String username; private String nickname; + private Integer isAdmin; private String token; } diff --git a/src/main/resources/mapper/ProductMapper.xml b/src/main/resources/mapper/ProductMapper.xml index 3ebba8f..42d8694 100644 --- a/src/main/resources/mapper/ProductMapper.xml +++ b/src/main/resources/mapper/ProductMapper.xml @@ -4,10 +4,12 @@ + + diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml deleted file mode 100644 index f9b7c85..0000000 --- a/src/main/resources/mapper/UserMapper.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - UPDATE sys_user - - username = #{username}, - nickname = #{nickname}, - phone = #{phone}, - email = #{email}, - avatar = #{avatar}, - nickname = #{nickname}, - gender = #{gender}, - update_time = NOW() - - WHERE id = #{id} - -