userName 2 nedēļas atpakaļ
vecāks
revīzija
d13d163369
67 mainītis faili ar 528 papildinājumiem un 1432 dzēšanām
  1. 1 1
      src/main/java/com/zhentao/GooseCourseApplication.java
  2. 32 0
      src/main/java/com/zhentao/common/user/controller/LoginController.java
  3. 13 3
      src/main/java/com/zhentao/common/user/domain/GooseUser.java
  4. 3 3
      src/main/java/com/zhentao/common/user/domain/UserDetail.java
  5. 3 3
      src/main/java/com/zhentao/common/user/domain/UserLabel.java
  6. 3 3
      src/main/java/com/zhentao/common/user/domain/UserLocation.java
  7. 3 3
      src/main/java/com/zhentao/common/user/domain/UserLogin.java
  8. 16 0
      src/main/java/com/zhentao/common/user/dto/LoginDto.java
  9. 5 4
      src/main/java/com/zhentao/common/user/mapper/GooseUserMapper.java
  10. 3 2
      src/main/java/com/zhentao/common/user/mapper/UserDetailMapper.java
  11. 3 2
      src/main/java/com/zhentao/common/user/mapper/UserLabelMapper.java
  12. 3 2
      src/main/java/com/zhentao/common/user/mapper/UserLocationMapper.java
  13. 3 2
      src/main/java/com/zhentao/common/user/mapper/UserLoginMapper.java
  14. 8 6
      src/main/java/com/zhentao/common/user/service/GooseUserService.java
  15. 3 2
      src/main/java/com/zhentao/common/user/service/UserDetailService.java
  16. 3 2
      src/main/java/com/zhentao/common/user/service/UserLabelService.java
  17. 3 2
      src/main/java/com/zhentao/common/user/service/UserLocationService.java
  18. 3 2
      src/main/java/com/zhentao/common/user/service/UserLoginService.java
  19. 73 34
      src/main/java/com/zhentao/common/user/service/impl/GooseUserServiceImpl.java
  20. 6 5
      src/main/java/com/zhentao/common/user/service/impl/UserDetailServiceImpl.java
  21. 6 5
      src/main/java/com/zhentao/common/user/service/impl/UserLabelServiceImpl.java
  22. 7 5
      src/main/java/com/zhentao/common/user/service/impl/UserLocationServiceImpl.java
  23. 7 5
      src/main/java/com/zhentao/common/user/service/impl/UserLoginServiceImpl.java
  24. 0 28
      src/main/java/com/zhentao/controller/LoginController.java
  25. 0 76
      src/main/java/com/zhentao/domain/course/Merchant.java
  26. 0 81
      src/main/java/com/zhentao/domain/course/MerchantAdmin.java
  27. 0 71
      src/main/java/com/zhentao/domain/course/MerchantShop.java
  28. 0 86
      src/main/java/com/zhentao/domain/course/Product.java
  29. 0 66
      src/main/java/com/zhentao/domain/course/ProductCategory.java
  30. 0 82
      src/main/java/com/zhentao/domain/course/ProductSku.java
  31. 0 39
      src/main/java/com/zhentao/dto/AppIdSecretValidator.java
  32. 0 14
      src/main/java/com/zhentao/dto/LoginReqDto.java
  33. 0 18
      src/main/java/com/zhentao/mapper/MerchantAdminMapper.java
  34. 0 18
      src/main/java/com/zhentao/mapper/MerchantMapper.java
  35. 0 18
      src/main/java/com/zhentao/mapper/MerchantShopMapper.java
  36. 0 18
      src/main/java/com/zhentao/mapper/ProductCategoryMapper.java
  37. 0 18
      src/main/java/com/zhentao/mapper/ProductMapper.java
  38. 0 18
      src/main/java/com/zhentao/mapper/ProductSkuMapper.java
  39. 1 1
      src/main/java/com/zhentao/properties/JwtProperties.java
  40. 1 1
      src/main/java/com/zhentao/properties/ShiroProperties.java
  41. 0 13
      src/main/java/com/zhentao/service/MerchantAdminService.java
  42. 0 13
      src/main/java/com/zhentao/service/MerchantService.java
  43. 0 13
      src/main/java/com/zhentao/service/MerchantShopService.java
  44. 0 13
      src/main/java/com/zhentao/service/ProductCategoryService.java
  45. 0 13
      src/main/java/com/zhentao/service/ProductService.java
  46. 0 13
      src/main/java/com/zhentao/service/ProductSkuService.java
  47. 0 22
      src/main/java/com/zhentao/service/impl/MerchantAdminServiceImpl.java
  48. 0 22
      src/main/java/com/zhentao/service/impl/MerchantServiceImpl.java
  49. 0 22
      src/main/java/com/zhentao/service/impl/MerchantShopServiceImpl.java
  50. 0 22
      src/main/java/com/zhentao/service/impl/ProductCategoryServiceImpl.java
  51. 0 22
      src/main/java/com/zhentao/service/impl/ProductServiceImpl.java
  52. 0 22
      src/main/java/com/zhentao/service/impl/ProductSkuServiceImpl.java
  53. 295 295
      src/main/java/com/zhentao/shiro/config/ShiroConfig.java
  54. 1 1
      src/main/java/com/zhentao/util/WechatAuthResponse.java
  55. 0 1
      src/main/java/com/zhentao/util/WechatLoginUtil.java
  56. 6 2
      src/main/resources/application.yml
  57. 6 3
      src/main/resources/mapper/GooseUserMapper.xml
  58. 0 28
      src/main/resources/mapper/MerchantAdminMapper.xml
  59. 0 27
      src/main/resources/mapper/MerchantMapper.xml
  60. 0 26
      src/main/resources/mapper/MerchantShopMapper.xml
  61. 0 24
      src/main/resources/mapper/ProductCategoryMapper.xml
  62. 0 30
      src/main/resources/mapper/ProductMapper.xml
  63. 0 28
      src/main/resources/mapper/ProductSkuMapper.xml
  64. 2 2
      src/main/resources/mapper/UserDetailMapper.xml
  65. 2 2
      src/main/resources/mapper/UserLabelMapper.xml
  66. 2 2
      src/main/resources/mapper/UserLocationMapper.xml
  67. 2 2
      src/main/resources/mapper/UserLoginMapper.xml

+ 1 - 1
src/main/java/com/zhentao/GooseCourseApplication.java

@@ -5,7 +5,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
-@MapperScan("com.zhentao.mapper")
+@MapperScan("com.zhentao.common.**.mapper")
 public class GooseCourseApplication {
 
     public static void main(String[] args) {

+ 32 - 0
src/main/java/com/zhentao/common/user/controller/LoginController.java

@@ -0,0 +1,32 @@
+package com.zhentao.common.user.controller;
+
+
+import com.zhentao.common.user.dto.LoginDto;
+import com.zhentao.common.user.service.GooseUserService;
+import com.zhentao.common.user.domain.GooseUser;
+import com.zhentao.util.ResultVo;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class LoginController {
+    @Resource
+    private GooseUserService gooseUserService;
+    @RequestMapping("/login")
+    public ResultVo login(@RequestBody LoginDto loginDto){
+        return gooseUserService.login(loginDto);
+    }
+    @RequestMapping("/wx-login")
+    public ResultVo Wxlogin(@RequestBody Map<String, String> requestData){
+        return gooseUserService.Wxlogin(requestData);
+    }
+    @RequestMapping("/getCode")
+    public ResultVo getCode(@RequestBody GooseUser user){
+        return gooseUserService.getCode(user);
+    }
+}

+ 13 - 3
src/main/java/com/zhentao/domain/user/GooseUser.java → src/main/java/com/zhentao/common/user/domain/GooseUser.java

@@ -1,12 +1,12 @@
-package com.zhentao.domain.user;
+package com.zhentao.common.user.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.util.Date;
-import lombok.Data;
 
 /**
  * 
@@ -91,6 +91,16 @@ public class GooseUser implements Serializable {
      */
     private String avatarUrl;
 
+    /**
+     * 微信登录
+     */
+    private String openId;
+
+    /**
+     * 微信登录
+     */
+    private String sessionKey;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }

+ 3 - 3
src/main/java/com/zhentao/domain/user/UserDetail.java → src/main/java/com/zhentao/common/user/domain/UserDetail.java

@@ -1,12 +1,12 @@
-package com.zhentao.domain.user;
+package com.zhentao.common.user.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.util.Date;
-import lombok.Data;
 
 /**
  * 用户实名认证详细表

+ 3 - 3
src/main/java/com/zhentao/domain/user/UserLabel.java → src/main/java/com/zhentao/common/user/domain/UserLabel.java

@@ -1,12 +1,12 @@
-package com.zhentao.domain.user;
+package com.zhentao.common.user.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.util.Date;
-import lombok.Data;
 
 /**
  * 

+ 3 - 3
src/main/java/com/zhentao/domain/user/UserLocation.java → src/main/java/com/zhentao/common/user/domain/UserLocation.java

@@ -1,12 +1,12 @@
-package com.zhentao.domain.user;
+package com.zhentao.common.user.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.util.Date;
-import lombok.Data;
 
 /**
  * 

+ 3 - 3
src/main/java/com/zhentao/domain/user/UserLogin.java → src/main/java/com/zhentao/common/user/domain/UserLogin.java

@@ -1,13 +1,13 @@
-package com.zhentao.domain.user;
+package com.zhentao.common.user.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
-import lombok.Data;
 
 /**
  * 

+ 16 - 0
src/main/java/com/zhentao/common/user/dto/LoginDto.java

@@ -0,0 +1,16 @@
+package com.zhentao.common.user.dto;
+
+import com.zhentao.common.user.domain.GooseUser;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LoginDto extends GooseUser implements Serializable{
+    private String code;
+
+}

+ 5 - 4
src/main/java/com/zhentao/mapper/GooseUserMapper.java → src/main/java/com/zhentao/common/user/mapper/GooseUserMapper.java

@@ -1,13 +1,14 @@
-package com.zhentao.mapper;
+package com.zhentao.common.user.mapper;
+
 
-import com.zhentao.domain.user.GooseUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhentao.common.user.domain.GooseUser;
 
 /**
 * @author 31810
 * @description 针对表【goose_user】的数据库操作Mapper
-* @createDate 2025-05-06 12:01:03
-* @Entity com.zhentao.user.GooseUser
+* @createDate 2025-05-08 08:54:32
+* @Entity com.zhentao.domain.user.GooseUser
 */
 public interface GooseUserMapper extends BaseMapper<GooseUser> {
 

+ 3 - 2
src/main/java/com/zhentao/mapper/UserDetailMapper.java → src/main/java/com/zhentao/common/user/mapper/UserDetailMapper.java

@@ -1,7 +1,8 @@
-package com.zhentao.mapper;
+package com.zhentao.common.user.mapper;
+
 
-import com.zhentao.domain.user.UserDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhentao.common.user.domain.UserDetail;
 
 /**
 * @author 31810

+ 3 - 2
src/main/java/com/zhentao/mapper/UserLabelMapper.java → src/main/java/com/zhentao/common/user/mapper/UserLabelMapper.java

@@ -1,7 +1,8 @@
-package com.zhentao.mapper;
+package com.zhentao.common.user.mapper;
+
 
-import com.zhentao.domain.user.UserLabel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhentao.common.user.domain.UserLabel;
 
 /**
 * @author 31810

+ 3 - 2
src/main/java/com/zhentao/mapper/UserLocationMapper.java → src/main/java/com/zhentao/common/user/mapper/UserLocationMapper.java

@@ -1,7 +1,8 @@
-package com.zhentao.mapper;
+package com.zhentao.common.user.mapper;
+
 
-import com.zhentao.domain.user.UserLocation;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhentao.common.user.domain.UserLocation;
 
 /**
 * @author 31810

+ 3 - 2
src/main/java/com/zhentao/mapper/UserLoginMapper.java → src/main/java/com/zhentao/common/user/mapper/UserLoginMapper.java

@@ -1,7 +1,8 @@
-package com.zhentao.mapper;
+package com.zhentao.common.user.mapper;
+
 
-import com.zhentao.domain.user.UserLogin;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhentao.common.user.domain.UserLogin;
 
 /**
 * @author 31810

+ 8 - 6
src/main/java/com/zhentao/service/GooseUserService.java → src/main/java/com/zhentao/common/user/service/GooseUserService.java

@@ -1,7 +1,9 @@
-package com.zhentao.service;
+package com.zhentao.common.user.service;
+
 
-import com.zhentao.domain.user.GooseUser;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhentao.common.user.domain.GooseUser;
+import com.zhentao.common.user.dto.LoginDto;
 import com.zhentao.util.ResultVo;
 
 import java.util.Map;
@@ -9,13 +11,13 @@ import java.util.Map;
 /**
 * @author 31810
 * @description 针对表【goose_user】的数据库操作Service
-* @createDate 2025-05-06 12:01:03
+* @createDate 2025-05-08 08:54:32
 */
 public interface GooseUserService extends IService<GooseUser> {
 
-    ResultVo login(GooseUser gooseUser);
-
-    Map<String, Object> Wxlogin(Map<String, String> requestData);
+    ResultVo Wxlogin(Map<String, String> requestData);
 
     ResultVo getCode(GooseUser user);
+
+    ResultVo login(LoginDto loginDto);
 }

+ 3 - 2
src/main/java/com/zhentao/service/UserDetailService.java → src/main/java/com/zhentao/common/user/service/UserDetailService.java

@@ -1,7 +1,8 @@
-package com.zhentao.service;
+package com.zhentao.common.user.service;
+
 
-import com.zhentao.domain.user.UserDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhentao.common.user.domain.UserDetail;
 
 /**
 * @author 31810

+ 3 - 2
src/main/java/com/zhentao/service/UserLabelService.java → src/main/java/com/zhentao/common/user/service/UserLabelService.java

@@ -1,7 +1,8 @@
-package com.zhentao.service;
+package com.zhentao.common.user.service;
+
 
-import com.zhentao.domain.user.UserLabel;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhentao.common.user.domain.UserLabel;
 
 /**
 * @author 31810

+ 3 - 2
src/main/java/com/zhentao/service/UserLocationService.java → src/main/java/com/zhentao/common/user/service/UserLocationService.java

@@ -1,7 +1,8 @@
-package com.zhentao.service;
+package com.zhentao.common.user.service;
+
 
-import com.zhentao.domain.user.UserLocation;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhentao.common.user.domain.UserLocation;
 
 /**
 * @author 31810

+ 3 - 2
src/main/java/com/zhentao/service/UserLoginService.java → src/main/java/com/zhentao/common/user/service/UserLoginService.java

@@ -1,7 +1,8 @@
-package com.zhentao.service;
+package com.zhentao.common.user.service;
+
 
-import com.zhentao.domain.user.UserLogin;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhentao.common.user.domain.UserLogin;
 
 /**
 * @author 31810

+ 73 - 34
src/main/java/com/zhentao/service/impl/GooseUserServiceImpl.java → src/main/java/com/zhentao/common/user/service/impl/GooseUserServiceImpl.java

@@ -1,60 +1,87 @@
-package com.zhentao.service.impl;
+package com.zhentao.common.user.service.impl;
+
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.zhentao.domain.WechatAuthResponse;
-import com.zhentao.domain.user.GooseUser;
-import com.zhentao.service.GooseUserService;
-import com.zhentao.mapper.GooseUserMapper;
-import com.zhentao.util.*;
+import com.zhentao.common.user.domain.GooseUser;
+import com.zhentao.common.user.dto.LoginDto;
+import com.zhentao.common.user.mapper.GooseUserMapper;
+import com.zhentao.common.user.service.GooseUserService;
+import com.zhentao.util.HttpUtils;
+import com.zhentao.util.ResultVo;
+import com.zhentao.util.SnowflakeIdGenerator;
+import com.zhentao.util.TokenUtils;
 import lombok.SneakyThrows;
 import org.apache.http.HttpResponse;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestTemplate;
 import redis.clients.jedis.Jedis;
 
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
 /**
-* @author 31810
-* @description 针对表【goose_user】的数据库操作Service实现
-* @createDate 2025-05-06 12:01:03
-*/
+ * @author 31810
+ * @description 针对表【goose_user】的数据库操作Service实现
+ * @createDate 2025-05-06 12:01:03
+ */
 @Service
 public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser>
-    implements GooseUserService{
+        implements GooseUserService {
     @Autowired
     private GooseUserMapper userMapper;
-    private static final String APPID = "wx8246d27305af5834";
-    private static final String SECRET = "8badbee7a035911171cdccb13c67de30";
+    @Value("${wechat.appid}")
+    private String APPID;
+
+    @Value("${wechat.secret}")
+    private String SECRET;
     private static final ObjectMapper objectMapper = new ObjectMapper(); // JSON 解析器
     @Override
-    public ResultVo login(GooseUser gooseUser) {
-        if(StringUtils.checkValNotNull(gooseUser.getPhone())){
-            QueryWrapper<GooseUser>queryWrapper=new QueryWrapper<>();
-            queryWrapper.eq("phone",gooseUser.getPhone());
+    public ResultVo login(LoginDto loginDto) {
+        if(StringUtils.checkValNotNull(loginDto.getPhone())){
+            QueryWrapper<GooseUser> queryWrapper=new QueryWrapper<>();
+            queryWrapper.eq("phone",loginDto.getPhone());
             GooseUser user = userMapper.selectOne(queryWrapper);
             if(user==null){
                 GooseUser gooseUser1=new GooseUser();
-                gooseUser1.setPhone(gooseUser.getPhone());
-                if(StringUtils.checkValNull(gooseUser.getPassword())){
-                    gooseUser1.setPassword(gooseUser.getPassword());
+                gooseUser1.setPhone(loginDto.getPhone());
+
+                if(StringUtils.checkValNotNull(loginDto.getPassword())){
+                    gooseUser1.setId(SnowflakeIdGenerator.getSnowId());
+                    gooseUser1.setNickname("普通用户"+ UUID.randomUUID().toString().replace("-","").substring(0,8));
+                    String password = gooseUser1.getPassword();
+                    String salt=UUID.randomUUID().toString().replace(",","");
+                    String pwd= DigestUtils.md5DigestAsHex((password+salt).getBytes(StandardCharsets.UTF_8));
+                    gooseUser1.setPassword(pwd);
+                    gooseUser1.setSalt(salt);
+                    userMapper.insert(gooseUser1);
+                    String token= TokenUtils.createJwtToken(gooseUser1.getId().toString());
+                    return ResultVo.OK(token);
+                }
+                if(StringUtils.checkValNotNull(loginDto.getCode())){
+                    gooseUser1.setId(SnowflakeIdGenerator.getSnowId());
+                    gooseUser1.setNickname("普通用户"+ UUID.randomUUID().toString().replace("-","").substring(0,8));
+                    Jedis jedis=new Jedis("localhost");
+                    String code = jedis.get("code");
+                    if(loginDto.getCode().equals(code)){
+                        userMapper.insert(gooseUser1);
+                        String token= TokenUtils.createJwtToken(gooseUser1.getId().toString());
+                        return ResultVo.OK(token);
+                    }
                 }
-                Long Id= SnowflakeIdGenerator.getSnowId();
-                gooseUser1.setId(Id);
-                userMapper.insert(gooseUser1);
-                String token= TokenUtils.createJwtToken(Id.toString());
-                return ResultVo.OK(token);
+                return ResultVo.ERROR();
             }
             String token= TokenUtils.createJwtToken(user.getId().toString());
             return ResultVo.OK(token);
@@ -64,14 +91,12 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
 
     @SneakyThrows
     @Override
-    public Map<String, Object> Wxlogin(Map<String, String> requestData) {
+    public ResultVo Wxlogin(Map<String, String> requestData) {
         String code = requestData.get("code");
         System.out.println(code);
         if (code == null) {
-            return buildErrorResponse("Missing code");
+            return new ResultVo(400,"Missing code",null);
         }
-        WechatAuthResponse authInfo = WechatLoginUtil.getAuthInfo(code);
-        System.out.println(authInfo);
         String url = "https://api.weixin.qq.com/sns/jscode2session?" +
                 "appid=" + APPID +
                 "&secret=" + SECRET +
@@ -92,15 +117,29 @@ public class GooseUserServiceImpl extends ServiceImpl<GooseUserMapper, GooseUser
             Map<String, Object> result = objectMapper.readValue(responseBody, Map.class);
             System.out.println(result);
             if (result.containsKey("errcode")) { // 微信错误响应
-                return buildErrorResponse("微信接口返回错误: " + result.get("errmsg"));
+                return new ResultVo(400,"微信接口返回错误: " + result.get("errmsg"),null);
             }
             // 成功响应
-            return buildSuccessResponse((String) result.get("openid"), (String) result.get("session_key"));
-
+            QueryWrapper<GooseUser>queryWrapper=new QueryWrapper<>();
+            String openId=(String) result.get("openid");
+            String session_key=(String) result.get("session_key");
+            queryWrapper.eq("open_id",openId);
+            GooseUser gooseUser = userMapper.selectOne(queryWrapper);
+            if(gooseUser==null){
+                GooseUser user=new GooseUser();
+                user.setId(SnowflakeIdGenerator.getSnowId());
+                user.setOpenId(openId);
+                user.setNickname("微信用户"+ UUID.randomUUID().toString().replace("-","").substring(0,8));
+                userMapper.insert(user);
+                String token=TokenUtils.createJwtToken(user.getId().toString());
+                return new ResultVo(200,"登录成功",token);
+            }
+            String token=TokenUtils.createJwtToken(gooseUser.getId().toString());
+            return new ResultVo(200,"登录成功",token);
         } catch (HttpClientErrorException e) { // 处理 HTTP 错误(如 400、500)
-            return buildErrorResponse("请求微信接口失败: " + e.getResponseBodyAsString());
+            return new ResultVo(400,"请求微信接口失败: " + e.getResponseBodyAsString(),null);
         } catch (Exception e) { // 处理 JSON 解析错误
-            return buildErrorResponse("响应解析失败: " + e.getMessage());
+            return new ResultVo(400,"响应解析失败: " + e.getMessage(),null);
         }
     }
 

+ 6 - 5
src/main/java/com/zhentao/service/impl/UserDetailServiceImpl.java → src/main/java/com/zhentao/common/user/service/impl/UserDetailServiceImpl.java

@@ -1,9 +1,10 @@
-package com.zhentao.service.impl;
+package com.zhentao.common.user.service.impl;
 
+
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.user.UserDetail;
-import com.zhentao.service.UserDetailService;
-import com.zhentao.mapper.UserDetailMapper;
+import com.zhentao.common.user.domain.UserDetail;
+import com.zhentao.common.user.mapper.UserDetailMapper;
 import org.springframework.stereotype.Service;
 
 /**
@@ -13,7 +14,7 @@ import org.springframework.stereotype.Service;
 */
 @Service
 public class UserDetailServiceImpl extends ServiceImpl<UserDetailMapper, UserDetail>
-    implements UserDetailService{
+    implements IService<UserDetail> {
 
 }
 

+ 6 - 5
src/main/java/com/zhentao/service/impl/UserLabelServiceImpl.java → src/main/java/com/zhentao/common/user/service/impl/UserLabelServiceImpl.java

@@ -1,9 +1,10 @@
-package com.zhentao.service.impl;
+package com.zhentao.common.user.service.impl;
 
+
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.user.UserLabel;
-import com.zhentao.service.UserLabelService;
-import com.zhentao.mapper.UserLabelMapper;
+import com.zhentao.common.user.domain.UserLabel;
+import com.zhentao.common.user.mapper.UserLabelMapper;
 import org.springframework.stereotype.Service;
 
 /**
@@ -13,7 +14,7 @@ import org.springframework.stereotype.Service;
 */
 @Service
 public class UserLabelServiceImpl extends ServiceImpl<UserLabelMapper, UserLabel>
-    implements UserLabelService{
+    implements IService<UserLabel> {
 
 }
 

+ 7 - 5
src/main/java/com/zhentao/service/impl/UserLocationServiceImpl.java → src/main/java/com/zhentao/common/user/service/impl/UserLocationServiceImpl.java

@@ -1,9 +1,11 @@
-package com.zhentao.service.impl;
+package com.zhentao.common.user.service.impl;
 
+
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.user.UserLocation;
-import com.zhentao.service.UserLocationService;
-import com.zhentao.mapper.UserLocationMapper;
+import com.zhentao.common.user.domain.UserLocation;
+import com.zhentao.common.user.mapper.UserLocationMapper;
+
 import org.springframework.stereotype.Service;
 
 /**
@@ -13,7 +15,7 @@ import org.springframework.stereotype.Service;
 */
 @Service
 public class UserLocationServiceImpl extends ServiceImpl<UserLocationMapper, UserLocation>
-    implements UserLocationService{
+    implements IService<UserLocation> {
 
 }
 

+ 7 - 5
src/main/java/com/zhentao/service/impl/UserLoginServiceImpl.java → src/main/java/com/zhentao/common/user/service/impl/UserLoginServiceImpl.java

@@ -1,9 +1,11 @@
-package com.zhentao.service.impl;
+package com.zhentao.common.user.service.impl;
 
+
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.user.UserLogin;
-import com.zhentao.service.UserLoginService;
-import com.zhentao.mapper.UserLoginMapper;
+import com.zhentao.common.user.domain.UserLogin;
+import com.zhentao.common.user.mapper.UserLoginMapper;
+
 import org.springframework.stereotype.Service;
 
 /**
@@ -13,7 +15,7 @@ import org.springframework.stereotype.Service;
 */
 @Service
 public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin>
-    implements UserLoginService{
+    implements IService<UserLogin> {
 
 }
 

+ 0 - 28
src/main/java/com/zhentao/controller/LoginController.java

@@ -1,28 +0,0 @@
-package com.zhentao.controller;
-
-import com.zhentao.domain.user.GooseUser;
-import com.zhentao.service.GooseUserService;
-import com.zhentao.util.ResultVo;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/api")
-public class LoginController {
-    @Resource
-    private GooseUserService gooseUserService;
-    @RequestMapping("/login")
-    public ResultVo login(@RequestBody GooseUser gooseUser){
-        return gooseUserService.login(gooseUser);
-    }
-    @RequestMapping("/wx-login")
-    public Map<String, Object> Wxlogin(@RequestBody Map<String, String> requestData){
-        return gooseUserService.Wxlogin(requestData);
-    }
-    @RequestMapping("/getCode")
-    public ResultVo getCode(@RequestBody GooseUser user){
-        return gooseUserService.getCode(user);
-    }
-}

+ 0 - 76
src/main/java/com/zhentao/domain/course/Merchant.java

@@ -1,76 +0,0 @@
-package com.zhentao.domain.course;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 商家表
- * @TableName merchant
- */
-@TableName(value ="merchant")
-@Data
-public class Merchant implements Serializable {
-    /**
-     * 商家ID
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 商家名称
-     */
-    private String name;
-
-    /**
-     * 商家logo
-     */
-    private String logo;
-
-    /**
-     * 商家banner图
-     */
-    private String banner;
-
-    /**
-     * 商家描述
-     */
-    private String description;
-
-    /**
-     * 联系电话
-     */
-    private String contactPhone;
-
-    /**
-     * 联系邮箱
-     */
-    private String contactEmail;
-
-    /**
-     * 营业执照图片
-     */
-    private String businessLicense;
-
-    /**
-     * 状态:0-禁用,1-启用  默认启用
-     */
-    private Integer status;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 81
src/main/java/com/zhentao/domain/course/MerchantAdmin.java

@@ -1,81 +0,0 @@
-package com.zhentao.domain.course;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 商家管理员表
- * @TableName merchant_admin
- */
-@TableName(value ="merchant_admin")
-@Data
-public class MerchantAdmin implements Serializable {
-    /**
-     * 管理员ID
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 所属商家ID
-     */
-    private Long merchantId;
-
-    /**
-     * 用户名
-     */
-    private String username;
-
-    /**
-     * 密码(加密存储)
-     */
-    private String password;
-
-    /**
-     * 真实姓名
-     */
-    private String realName;
-
-    /**
-     * 手机号
-     */
-    private String phone;
-
-    /**
-     * 邮箱
-     */
-    private String email;
-
-    /**
-     * 角色:1-管理员,2-运营,3-客服
-     */
-    private Integer role;
-
-    /**
-     * 状态:0-禁用,1-启用
-     */
-    private Integer status;
-
-    /**
-     * 最后登录时间
-     */
-    private Date lastLoginTime;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 71
src/main/java/com/zhentao/domain/course/MerchantShop.java

@@ -1,71 +0,0 @@
-package com.zhentao.domain.course;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 商家店铺表
- * @TableName merchant_shop
- */
-@TableName(value ="merchant_shop")
-@Data
-public class MerchantShop implements Serializable {
-    /**
-     * 店铺ID
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 所属商家ID
-     */
-    private Long merchantId;
-
-    /**
-     * 店铺名称
-     */
-    private String name;
-
-    /**
-     * 店铺描述
-     */
-    private String description;
-
-    /**
-     * 店铺地址
-     */
-    private String address;
-
-    /**
-     * 联系电话
-     */
-    private String contactPhone;
-
-    /**
-     * 营业时间
-     */
-    private String businessHours;
-
-    /**
-     * 状态:0-禁用,1-启用
-     */
-    private Integer status;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 86
src/main/java/com/zhentao/domain/course/Product.java

@@ -1,86 +0,0 @@
-package com.zhentao.domain.course;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 商品基本信息表
- * @TableName product
- */
-@TableName(value ="product")
-@Data
-public class Product implements Serializable {
-    /**
-     * 商品ID
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 分类ID
-     */
-    private Long categoryId;
-
-    /**
-     * 商品名称
-     */
-    private String name;
-
-    /**
-     * 副标题
-     */
-    private String subtitle;
-
-    /**
-     * 主图
-     */
-    private String mainImage;
-
-    /**
-     * 商品图片(JSON数组)
-     */
-    private String images;
-
-    /**
-     * 商品详情(HTML)
-     */
-    private String detail;
-
-    /**
-     * 状态:0-下架,1-上架
-     */
-    private Integer status;
-
-    /**
-     * 是否删除:0-未删除,1-已删除
-     */
-    private Integer isDelete;
-
-    /**
-     * 销量
-     */
-    private Integer sales;
-
-    /**
-     * 浏览量
-     */
-    private Integer viewCount;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 66
src/main/java/com/zhentao/domain/course/ProductCategory.java

@@ -1,66 +0,0 @@
-package com.zhentao.domain.course;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 商品分类表
- * @TableName product_category
- */
-@TableName(value ="product_category")
-@Data
-public class ProductCategory implements Serializable {
-    /**
-     * 分类ID
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 父分类ID
-     */
-    private Long parentId;
-
-    /**
-     * 分类名称
-     */
-    private String name;
-
-    /**
-     * 分类层级
-     */
-    private Integer level;
-
-    /**
-     * 分类图标
-     */
-    private String icon;
-
-    /**
-     * 排序
-     */
-    private Integer sortOrder;
-
-    /**
-     * 是否显示:0-隐藏,1-显示
-     */
-    private Integer isShow;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 82
src/main/java/com/zhentao/domain/course/ProductSku.java

@@ -1,82 +0,0 @@
-package com.zhentao.domain.course;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-import lombok.Data;
-
-/**
- * 商品SKU表
- * @TableName product_sku
- */
-@TableName(value ="product_sku")
-@Data
-public class ProductSku implements Serializable {
-    /**
-     * SKU ID
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 商品ID
-     */
-    private Long productId;
-
-    /**
-     * 商品编号
-     */
-    private String sn;
-
-    /**
-     * 规格(JSON格式)
-     */
-    private String specs;
-
-    /**
-     * 销售价格
-     */
-    private BigDecimal price;
-
-    /**
-     * 原价
-     */
-    private BigDecimal originalPrice;
-
-    /**
-     * 成本价
-     */
-    private BigDecimal costPrice;
-
-    /**
-     * 重量(kg)
-     */
-    private BigDecimal weight;
-
-    /**
-     * SKU图片
-     */
-    private String image;
-
-    /**
-     * 库存
-     */
-    private Integer stock;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 39
src/main/java/com/zhentao/dto/AppIdSecretValidator.java

@@ -1,39 +0,0 @@
-package com.zhentao.dto;
-
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class AppIdSecretValidator {
-    private static final String APPID = "wx8246d27305af5834";
-    private static final String SECRET = "8badbee7a035911171cdccb13c67de30";
-
-    public static void main(String[] args) {
-        String url = "https://api.weixin.qq.com/cgi-bin/token?" +
-                "grant_type=client_credential" +
-                "&appid=" + APPID +
-                "&secret=" + SECRET;
-
-        RestTemplate restTemplate = new RestTemplate();
-        HttpHeaders headers = new HttpHeaders();
-        HttpEntity<String> entity = new HttpEntity<>(headers);
-
-        try {
-            ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
-            String responseBody = response.getBody();
-            System.out.println("微信接口响应内容: " + responseBody);
-            if (responseBody.contains("access_token")) {
-                System.out.println("APPID 和 SECRET 匹配,成功获取 access_token");
-            } else {
-                System.out.println("APPID 和 SECRET 可能不匹配,响应中未包含 access_token");
-            }
-        } catch (Exception e) {
-            System.out.println("请求微信接口失败: " + e.getMessage());
-        }
-    }
-}

+ 0 - 14
src/main/java/com/zhentao/dto/LoginReqDto.java

@@ -1,14 +0,0 @@
-package com.zhentao.dto;
-
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-@Data
-public class LoginReqDto implements Serializable {
-    @NotNull(message = "code不能为空")
-    private String code;
-
-
-}

+ 0 - 18
src/main/java/com/zhentao/mapper/MerchantAdminMapper.java

@@ -1,18 +0,0 @@
-package com.zhentao.mapper;
-
-import com.zhentao.domain.course.MerchantAdmin;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author 31810
-* @description 针对表【merchant_admin(商家管理员表)】的数据库操作Mapper
-* @createDate 2025-05-06 12:01:03
-* @Entity com.zhentao.course.MerchantAdmin
-*/
-public interface MerchantAdminMapper extends BaseMapper<MerchantAdmin> {
-
-}
-
-
-
-

+ 0 - 18
src/main/java/com/zhentao/mapper/MerchantMapper.java

@@ -1,18 +0,0 @@
-package com.zhentao.mapper;
-
-import com.zhentao.domain.course.Merchant;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author 31810
-* @description 针对表【merchant(商家表)】的数据库操作Mapper
-* @createDate 2025-05-06 12:01:03
-* @Entity com.zhentao.course.Merchant
-*/
-public interface MerchantMapper extends BaseMapper<Merchant> {
-
-}
-
-
-
-

+ 0 - 18
src/main/java/com/zhentao/mapper/MerchantShopMapper.java

@@ -1,18 +0,0 @@
-package com.zhentao.mapper;
-
-import com.zhentao.domain.course.MerchantShop;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author 31810
-* @description 针对表【merchant_shop(商家店铺表)】的数据库操作Mapper
-* @createDate 2025-05-06 12:01:03
-* @Entity com.zhentao.course.MerchantShop
-*/
-public interface MerchantShopMapper extends BaseMapper<MerchantShop> {
-
-}
-
-
-
-

+ 0 - 18
src/main/java/com/zhentao/mapper/ProductCategoryMapper.java

@@ -1,18 +0,0 @@
-package com.zhentao.mapper;
-
-import com.zhentao.domain.course.ProductCategory;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author 31810
-* @description 针对表【product_category(商品分类表)】的数据库操作Mapper
-* @createDate 2025-05-06 12:01:03
-* @Entity com.zhentao.course.ProductCategory
-*/
-public interface ProductCategoryMapper extends BaseMapper<ProductCategory> {
-
-}
-
-
-
-

+ 0 - 18
src/main/java/com/zhentao/mapper/ProductMapper.java

@@ -1,18 +0,0 @@
-package com.zhentao.mapper;
-
-import com.zhentao.domain.course.Product;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author 31810
-* @description 针对表【product(商品基本信息表)】的数据库操作Mapper
-* @createDate 2025-05-06 12:01:03
-* @Entity com.zhentao.course.Product
-*/
-public interface ProductMapper extends BaseMapper<Product> {
-
-}
-
-
-
-

+ 0 - 18
src/main/java/com/zhentao/mapper/ProductSkuMapper.java

@@ -1,18 +0,0 @@
-package com.zhentao.mapper;
-
-import com.zhentao.domain.course.ProductSku;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
-* @author 31810
-* @description 针对表【product_sku(商品SKU表)】的数据库操作Mapper
-* @createDate 2025-05-06 12:01:03
-* @Entity com.zhentao.course.ProductSku
-*/
-public interface ProductSkuMapper extends BaseMapper<ProductSku> {
-
-}
-
-
-
-

+ 1 - 1
src/main/java/com/zhentao/properties/JwtProperties.java

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
  **/
 @Data
 @Component
-@ConfigurationProperties(prefix = "spring-boot-zhentao.jwt")
+@ConfigurationProperties(prefix = "springboot-zhentao.jwt")
 public class JwtProperties {
 
     /**

+ 1 - 1
src/main/java/com/zhentao/properties/ShiroProperties.java

@@ -12,7 +12,7 @@ import java.util.List;
  * Shiro配置映射类
  **/
 @Data
-@ConfigurationProperties(prefix = "spring-boot-zhentao.shiro")
+@ConfigurationProperties(prefix = "springboot-zhentao.shiro")
 public class ShiroProperties {
 
     /**

+ 0 - 13
src/main/java/com/zhentao/service/MerchantAdminService.java

@@ -1,13 +0,0 @@
-package com.zhentao.service;
-
-import com.zhentao.domain.course.MerchantAdmin;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author 31810
-* @description 针对表【merchant_admin(商家管理员表)】的数据库操作Service
-* @createDate 2025-05-06 12:01:03
-*/
-public interface MerchantAdminService extends IService<MerchantAdmin> {
-
-}

+ 0 - 13
src/main/java/com/zhentao/service/MerchantService.java

@@ -1,13 +0,0 @@
-package com.zhentao.service;
-
-import com.zhentao.domain.course.Merchant;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author 31810
-* @description 针对表【merchant(商家表)】的数据库操作Service
-* @createDate 2025-05-06 12:01:03
-*/
-public interface MerchantService extends IService<Merchant> {
-
-}

+ 0 - 13
src/main/java/com/zhentao/service/MerchantShopService.java

@@ -1,13 +0,0 @@
-package com.zhentao.service;
-
-import com.zhentao.domain.course.MerchantShop;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author 31810
-* @description 针对表【merchant_shop(商家店铺表)】的数据库操作Service
-* @createDate 2025-05-06 12:01:03
-*/
-public interface MerchantShopService extends IService<MerchantShop> {
-
-}

+ 0 - 13
src/main/java/com/zhentao/service/ProductCategoryService.java

@@ -1,13 +0,0 @@
-package com.zhentao.service;
-
-import com.zhentao.domain.course.ProductCategory;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author 31810
-* @description 针对表【product_category(商品分类表)】的数据库操作Service
-* @createDate 2025-05-06 12:01:03
-*/
-public interface ProductCategoryService extends IService<ProductCategory> {
-
-}

+ 0 - 13
src/main/java/com/zhentao/service/ProductService.java

@@ -1,13 +0,0 @@
-package com.zhentao.service;
-
-import com.zhentao.domain.course.Product;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author 31810
-* @description 针对表【product(商品基本信息表)】的数据库操作Service
-* @createDate 2025-05-06 12:01:03
-*/
-public interface ProductService extends IService<Product> {
-
-}

+ 0 - 13
src/main/java/com/zhentao/service/ProductSkuService.java

@@ -1,13 +0,0 @@
-package com.zhentao.service;
-
-import com.zhentao.domain.course.ProductSku;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
-* @author 31810
-* @description 针对表【product_sku(商品SKU表)】的数据库操作Service
-* @createDate 2025-05-06 12:01:03
-*/
-public interface ProductSkuService extends IService<ProductSku> {
-
-}

+ 0 - 22
src/main/java/com/zhentao/service/impl/MerchantAdminServiceImpl.java

@@ -1,22 +0,0 @@
-package com.zhentao.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.course.MerchantAdmin;
-import com.zhentao.service.MerchantAdminService;
-import com.zhentao.mapper.MerchantAdminMapper;
-import org.springframework.stereotype.Service;
-
-/**
-* @author 31810
-* @description 针对表【merchant_admin(商家管理员表)】的数据库操作Service实现
-* @createDate 2025-05-06 12:01:03
-*/
-@Service
-public class MerchantAdminServiceImpl extends ServiceImpl<MerchantAdminMapper, MerchantAdmin>
-    implements MerchantAdminService{
-
-}
-
-
-
-

+ 0 - 22
src/main/java/com/zhentao/service/impl/MerchantServiceImpl.java

@@ -1,22 +0,0 @@
-package com.zhentao.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.course.Merchant;
-import com.zhentao.service.MerchantService;
-import com.zhentao.mapper.MerchantMapper;
-import org.springframework.stereotype.Service;
-
-/**
-* @author 31810
-* @description 针对表【merchant(商家表)】的数据库操作Service实现
-* @createDate 2025-05-06 12:01:03
-*/
-@Service
-public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant>
-    implements MerchantService{
-
-}
-
-
-
-

+ 0 - 22
src/main/java/com/zhentao/service/impl/MerchantShopServiceImpl.java

@@ -1,22 +0,0 @@
-package com.zhentao.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.course.MerchantShop;
-import com.zhentao.service.MerchantShopService;
-import com.zhentao.mapper.MerchantShopMapper;
-import org.springframework.stereotype.Service;
-
-/**
-* @author 31810
-* @description 针对表【merchant_shop(商家店铺表)】的数据库操作Service实现
-* @createDate 2025-05-06 12:01:03
-*/
-@Service
-public class MerchantShopServiceImpl extends ServiceImpl<MerchantShopMapper, MerchantShop>
-    implements MerchantShopService{
-
-}
-
-
-
-

+ 0 - 22
src/main/java/com/zhentao/service/impl/ProductCategoryServiceImpl.java

@@ -1,22 +0,0 @@
-package com.zhentao.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.course.ProductCategory;
-import com.zhentao.service.ProductCategoryService;
-import com.zhentao.mapper.ProductCategoryMapper;
-import org.springframework.stereotype.Service;
-
-/**
-* @author 31810
-* @description 针对表【product_category(商品分类表)】的数据库操作Service实现
-* @createDate 2025-05-06 12:01:03
-*/
-@Service
-public class ProductCategoryServiceImpl extends ServiceImpl<ProductCategoryMapper, ProductCategory>
-    implements ProductCategoryService{
-
-}
-
-
-
-

+ 0 - 22
src/main/java/com/zhentao/service/impl/ProductServiceImpl.java

@@ -1,22 +0,0 @@
-package com.zhentao.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.course.Product;
-import com.zhentao.service.ProductService;
-import com.zhentao.mapper.ProductMapper;
-import org.springframework.stereotype.Service;
-
-/**
-* @author 31810
-* @description 针对表【product(商品基本信息表)】的数据库操作Service实现
-* @createDate 2025-05-06 12:01:03
-*/
-@Service
-public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
-    implements ProductService{
-
-}
-
-
-
-

+ 0 - 22
src/main/java/com/zhentao/service/impl/ProductSkuServiceImpl.java

@@ -1,22 +0,0 @@
-package com.zhentao.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhentao.domain.course.ProductSku;
-import com.zhentao.service.ProductSkuService;
-import com.zhentao.mapper.ProductSkuMapper;
-import org.springframework.stereotype.Service;
-
-/**
-* @author 31810
-* @description 针对表【product_sku(商品SKU表)】的数据库操作Service实现
-* @createDate 2025-05-06 12:01:03
-*/
-@Service
-public class ProductSkuServiceImpl extends ServiceImpl<ProductSkuMapper, ProductSku>
-    implements ProductSkuService{
-
-}
-
-
-
-

+ 295 - 295
src/main/java/com/zhentao/shiro/config/ShiroConfig.java

@@ -1,295 +1,295 @@
-//
-//
-//package com.zhentao.shiro.config;
-//
-//import com.alibaba.fastjson.JSON;
-//
-//import com.zhentao.properties.JwtProperties;
-//import com.zhentao.properties.ShiroPermissionProperties;
-//import com.zhentao.properties.ShiroProperties;
-//import com.zhentao.util.IniUtil;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.collections.CollectionUtils;
-//import org.apache.commons.collections.MapUtils;
-//import org.apache.commons.lang3.ArrayUtils;
-//import org.apache.commons.lang3.StringUtils;
-//import org.apache.shiro.SecurityUtils;
-//import org.apache.shiro.authc.Authenticator;
-//import org.apache.shiro.authc.credential.CredentialsMatcher;
-//import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
-//import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
-//import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
-//import org.apache.shiro.mgt.DefaultSubjectDAO;
-//import org.apache.shiro.mgt.SecurityManager;
-//import org.apache.shiro.mgt.SessionStorageEvaluator;
-//import org.apache.shiro.spring.LifecycleBeanPostProcessor;
-//import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
-//import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-//import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
-//import org.apache.shiro.web.mgt.DefaultWebSessionStorageEvaluator;
-//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-//import org.springframework.boot.context.properties.EnableConfigurationProperties;
-//import org.springframework.boot.web.servlet.FilterRegistrationBean;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.web.filter.DelegatingFilterProxy;
-//
-//import javax.servlet.DispatcherType;
-//import javax.servlet.Filter;
-//import java.util.*;
-//
-///**
-// * Shiro配置
-// * https://shiro.apache.org/spring.html
-// * https://shiro.apache.org/spring-boot.html
-// **/
-//@Slf4j
-//@Configuration
-//@EnableConfigurationProperties({ShiroProperties.class})
-//@ConditionalOnProperty(value = {"spring-boot-jjj.shiro.enable"}, matchIfMissing = true)
-//public class ShiroConfig {
-//
-//    /**
-//     * JWT过滤器名称
-//     */
-//    private static final String JWT_FILTER_NAME = "jwtFilter";
-//
-//    /**
-//     * Shiro过滤器名称
-//     */
-//    private static final String SHIRO_FILTER_NAME = "shiroFilter";
-//
-//    /**
-//     * anon
-//     */
-//    private static final String ANON = "anon";
-//
-//
-//    @Bean
-//    public CredentialsMatcher credentialsMatcher() {
-//        return new JwtCredentialsMatcher();
-//    }
-//
-//    /**
-//     * JWT数据源验证
-//     *
-//     * @return
-//     */
-//    @Bean
-//    public JwtRealm jwtRealm() {
-//        JwtRealm jwtRealm = new JwtRealm();
-////        jwtRealm.setCachingEnabled(false);
-//        jwtRealm.setCredentialsMatcher(credentialsMatcher());
-//        return jwtRealm;
-//    }
-//
-//
-//    @Bean
-//    public SessionStorageEvaluator sessionStorageEvaluator() {
-//        DefaultSessionStorageEvaluator sessionStorageEvaluator = new DefaultWebSessionStorageEvaluator();
-//        sessionStorageEvaluator.setSessionStorageEnabled(false);
-//        return sessionStorageEvaluator;
-//    }
-//
-//    @Bean
-//    public DefaultSubjectDAO subjectDAO() {
-//        DefaultSubjectDAO defaultSubjectDAO = new DefaultSubjectDAO();
-//        defaultSubjectDAO.setSessionStorageEvaluator(sessionStorageEvaluator());
-//        return defaultSubjectDAO;
-//    }
-//
-//    /**
-//     * 安全管理器配置
-//     *
-//     * @return
-//     */
-//    @Bean
-//    public SecurityManager securityManager() {
-//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-//        securityManager.setRealm(jwtRealm());
-//        securityManager.setSubjectDAO(subjectDAO());
-//        SecurityUtils.setSecurityManager(securityManager);
-//        return securityManager;
-//    }
-//
-//    /**
-//     * ShiroFilterFactoryBean配置
-//     *
-//     * @param securityManager
-//     * @param shiroProperties
-//     * @param jwtProperties
-//     * @return
-//     */
-//    @Bean(SHIRO_FILTER_NAME)
-//    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager,
-//
-//                                                         ShiroProperties shiroProperties,
-//                                                         JwtProperties jwtProperties) {
-//        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
-//        shiroFilterFactoryBean.setSecurityManager(securityManager);
-//        Map<String, Filter> filterMap = getFilterMap( jwtProperties);
-//        shiroFilterFactoryBean.setFilters(filterMap);
-//        Map<String, String> filterChainMap = null;
-//        try {
-//            filterChainMap = getFilterChainDefinitionMap(shiroProperties);
-//
-//        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        return shiroFilterFactoryBean;
-//    }
-//
-//
-//    /**
-//     * 获取filter map
-//     *
-//     * @return
-//     */
-//    private Map<String, Filter> getFilterMap(
-//                                             JwtProperties jwtProperties) {
-//        Map<String, Filter> filterMap = new LinkedHashMap<>();
-//        filterMap.put(JWT_FILTER_NAME, new JwtFilter(jwtProperties));
-//        return filterMap;
-//    }
-//
-//
-//    /**
-//     * Shiro路径权限配置
-//     *
-//     * @return
-//     */
-//    private Map<String, String> getFilterChainDefinitionMap(ShiroProperties shiroProperties) throws Exception {
-//        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
-//        // 获取排除的路径
-//        List<String[]> anonList = shiroProperties.getAnon();
-//        log.debug("anonList:{}", JSON.toJSONString(anonList));
-//        if (CollectionUtils.isNotEmpty(anonList)) {
-//            anonList.forEach(anonArray -> {
-//                if (ArrayUtils.isNotEmpty(anonArray)) {
-//                    for (String anonPath : anonArray) {
-//                        filterChainDefinitionMap.put(anonPath, ANON);
-//                    }
-//                }
-//            });
-//        }
-//
-//        // 获取ini格式配置
-//        String definitions = shiroProperties.getFilterChainDefinitions();
-//        if (StringUtils.isNotBlank(definitions)) {
-//            Map<String, String> section = IniUtil.parseIni(definitions);
-//            log.debug("definitions:{}", JSON.toJSONString(section));
-//            for (Map.Entry<String, String> entry : section.entrySet()) {
-//                filterChainDefinitionMap.put(entry.getKey(), entry.getValue());
-//            }
-//        }
-//
-//        // 获取自定义权限路径配置集合
-//        List<ShiroPermissionProperties> permissionConfigs = shiroProperties.getPermission();
-//        log.debug("permissionConfigs:{}", JSON.toJSONString(permissionConfigs));
-//        if (CollectionUtils.isNotEmpty(permissionConfigs)) {
-//            for (ShiroPermissionProperties permissionConfig : permissionConfigs) {
-//                String url = permissionConfig.getUrl();
-//                String[] urls = permissionConfig.getUrls();
-//                String permission = permissionConfig.getPermission();
-//                if (StringUtils.isBlank(url) && ArrayUtils.isEmpty(urls)) {
-//                    throw new Exception("shiro permission config 路径配置不能为空");
-//                }
-//                if (StringUtils.isBlank(permission)) {
-//                    throw new Exception("shiro permission config permission不能为空");
-//                }
-//
-//                if (StringUtils.isNotBlank(url)) {
-//                    filterChainDefinitionMap.put(url, permission);
-//                }
-//                if (ArrayUtils.isNotEmpty(urls)) {
-//                    for (String string : urls) {
-//                        filterChainDefinitionMap.put(string, permission);
-//                    }
-//                }
-//            }
-//        }
-//
-//        // 如果启用shiro,则设置最后一个设置为JWTFilter,否则全部路径放行
-//        if (shiroProperties.isEnable()) {
-//            filterChainDefinitionMap.put("/**", JWT_FILTER_NAME);
-//        } else {
-//            filterChainDefinitionMap.put("/**", ANON);
-//        }
-//
-//        log.debug("filterChainMap:{}", JSON.toJSONString(filterChainDefinitionMap));
-//
-//        // 添加默认的filter
-//        Map<String, String> newFilterChainDefinitionMap = addDefaultFilterDefinition(filterChainDefinitionMap);
-//        return newFilterChainDefinitionMap;
-//    }
-//
-//    /**
-//     * 添加默认的filter权限过滤
-//     *
-//     * @param filterChainDefinitionMap
-//     * @return
-//     */
-//    private Map<String, String> addDefaultFilterDefinition(Map<String, String> filterChainDefinitionMap) {
-//        if (MapUtils.isEmpty(filterChainDefinitionMap)) {
-//            return filterChainDefinitionMap;
-//        }
-//        final Map<String, String> map = new LinkedHashMap<>();
-//        for (Map.Entry<String, String> entry : filterChainDefinitionMap.entrySet()) {
-//            String key = entry.getKey();
-//            String value = entry.getValue();
-//            String definition;
-//            String[] strings = value.split(",");
-//            List<String> list = new ArrayList<>();
-//            list.addAll(Arrays.asList(strings));
-//            definition = String.join(",", list);
-//            map.put(key, definition);
-//        }
-//        return map;
-//    }
-//
-//    /**
-//     * ShiroFilter配置
-//     *
-//     * @return
-//     */
-//    @Bean
-//    public FilterRegistrationBean delegatingFilterProxy() {
-//        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
-//        DelegatingFilterProxy proxy = new DelegatingFilterProxy();
-//        proxy.setTargetFilterLifecycle(true);
-//        proxy.setTargetBeanName(SHIRO_FILTER_NAME);
-//        filterRegistrationBean.setFilter(proxy);
-//        filterRegistrationBean.setAsyncSupported(true);
-//        filterRegistrationBean.setEnabled(true);
-//        filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC);
-//        return filterRegistrationBean;
-//    }
-//
-//    @Bean
-//    public Authenticator authenticator() {
-//        ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
-//        authenticator.setRealms(Arrays.asList(jwtRealm()));
-//        authenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
-//        return authenticator;
-//    }
-//
-//
-//    /**
-//     * Enabling Shiro Annotations
-//     *
-//     * @return
-//     */
-//    @Bean
-//    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
-//        return new LifecycleBeanPostProcessor();
-//    }
-//
-//    @Bean
-//    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
-//        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
-//        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
-//        return authorizationAttributeSourceAdvisor;
-//    }
-//
-//}
+
+
+package com.zhentao.shiro.config;
+
+import com.alibaba.fastjson.JSON;
+
+import com.zhentao.properties.JwtProperties;
+import com.zhentao.properties.ShiroPermissionProperties;
+import com.zhentao.properties.ShiroProperties;
+import com.zhentao.util.IniUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.Authenticator;
+import org.apache.shiro.authc.credential.CredentialsMatcher;
+import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
+import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
+import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
+import org.apache.shiro.mgt.DefaultSubjectDAO;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.mgt.SessionStorageEvaluator;
+import org.apache.shiro.spring.LifecycleBeanPostProcessor;
+import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
+import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+import org.apache.shiro.web.mgt.DefaultWebSessionStorageEvaluator;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.filter.DelegatingFilterProxy;
+
+import javax.servlet.DispatcherType;
+import javax.servlet.Filter;
+import java.util.*;
+
+/**
+ * Shiro配置
+ * https://shiro.apache.org/spring.html
+ * https://shiro.apache.org/spring-boot.html
+ **/
+@Slf4j
+@Configuration
+@EnableConfigurationProperties({ShiroProperties.class})
+@ConditionalOnProperty(value = {"spring-boot-jjj.shiro.enable"}, matchIfMissing = true)
+public class ShiroConfig {
+
+    /**
+     * JWT过滤器名称
+     */
+    private static final String JWT_FILTER_NAME = "jwtFilter";
+
+    /**
+     * Shiro过滤器名称
+     */
+    private static final String SHIRO_FILTER_NAME = "shiroFilter";
+
+    /**
+     * anon
+     */
+    private static final String ANON = "anon";
+
+
+    @Bean
+    public CredentialsMatcher credentialsMatcher() {
+        return new JwtCredentialsMatcher();
+    }
+
+    /**
+     * JWT数据源验证
+     *
+     * @return
+     */
+    @Bean
+    public JwtRealm jwtRealm() {
+        JwtRealm jwtRealm = new JwtRealm();
+//        jwtRealm.setCachingEnabled(false);
+        jwtRealm.setCredentialsMatcher(credentialsMatcher());
+        return jwtRealm;
+    }
+
+
+    @Bean
+    public SessionStorageEvaluator sessionStorageEvaluator() {
+        DefaultSessionStorageEvaluator sessionStorageEvaluator = new DefaultWebSessionStorageEvaluator();
+        sessionStorageEvaluator.setSessionStorageEnabled(false);
+        return sessionStorageEvaluator;
+    }
+
+    @Bean
+    public DefaultSubjectDAO subjectDAO() {
+        DefaultSubjectDAO defaultSubjectDAO = new DefaultSubjectDAO();
+        defaultSubjectDAO.setSessionStorageEvaluator(sessionStorageEvaluator());
+        return defaultSubjectDAO;
+    }
+
+    /**
+     * 安全管理器配置
+     *
+     * @return
+     */
+    @Bean
+    public SecurityManager securityManager() {
+        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+        securityManager.setRealm(jwtRealm());
+        securityManager.setSubjectDAO(subjectDAO());
+        SecurityUtils.setSecurityManager(securityManager);
+        return securityManager;
+    }
+
+    /**
+     * ShiroFilterFactoryBean配置
+     *
+     * @param securityManager
+     * @param shiroProperties
+     * @param jwtProperties
+     * @return
+     */
+    @Bean(SHIRO_FILTER_NAME)
+    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager,
+
+                                                         ShiroProperties shiroProperties,
+                                                         JwtProperties jwtProperties) {
+        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
+        shiroFilterFactoryBean.setSecurityManager(securityManager);
+        Map<String, Filter> filterMap = getFilterMap( jwtProperties);
+        shiroFilterFactoryBean.setFilters(filterMap);
+        Map<String, String> filterChainMap = null;
+        try {
+            filterChainMap = getFilterChainDefinitionMap(shiroProperties);
+
+        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return shiroFilterFactoryBean;
+    }
+
+
+    /**
+     * 获取filter map
+     *
+     * @return
+     */
+    private Map<String, Filter> getFilterMap(
+                                             JwtProperties jwtProperties) {
+        Map<String, Filter> filterMap = new LinkedHashMap<>();
+        filterMap.put(JWT_FILTER_NAME, new JwtFilter(jwtProperties));
+        return filterMap;
+    }
+
+
+    /**
+     * Shiro路径权限配置
+     *
+     * @return
+     */
+    private Map<String, String> getFilterChainDefinitionMap(ShiroProperties shiroProperties) throws Exception {
+        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
+        // 获取排除的路径
+        List<String[]> anonList = shiroProperties.getAnon();
+        log.debug("anonList:{}", JSON.toJSONString(anonList));
+        if (CollectionUtils.isNotEmpty(anonList)) {
+            anonList.forEach(anonArray -> {
+                if (ArrayUtils.isNotEmpty(anonArray)) {
+                    for (String anonPath : anonArray) {
+                        filterChainDefinitionMap.put(anonPath, ANON);
+                    }
+                }
+            });
+        }
+
+        // 获取ini格式配置
+        String definitions = shiroProperties.getFilterChainDefinitions();
+        if (StringUtils.isNotBlank(definitions)) {
+            Map<String, String> section = IniUtil.parseIni(definitions);
+            log.debug("definitions:{}", JSON.toJSONString(section));
+            for (Map.Entry<String, String> entry : section.entrySet()) {
+                filterChainDefinitionMap.put(entry.getKey(), entry.getValue());
+            }
+        }
+
+        // 获取自定义权限路径配置集合
+        List<ShiroPermissionProperties> permissionConfigs = shiroProperties.getPermission();
+        log.debug("permissionConfigs:{}", JSON.toJSONString(permissionConfigs));
+        if (CollectionUtils.isNotEmpty(permissionConfigs)) {
+            for (ShiroPermissionProperties permissionConfig : permissionConfigs) {
+                String url = permissionConfig.getUrl();
+                String[] urls = permissionConfig.getUrls();
+                String permission = permissionConfig.getPermission();
+                if (StringUtils.isBlank(url) && ArrayUtils.isEmpty(urls)) {
+                    throw new Exception("shiro permission config 路径配置不能为空");
+                }
+                if (StringUtils.isBlank(permission)) {
+                    throw new Exception("shiro permission config permission不能为空");
+                }
+
+                if (StringUtils.isNotBlank(url)) {
+                    filterChainDefinitionMap.put(url, permission);
+                }
+                if (ArrayUtils.isNotEmpty(urls)) {
+                    for (String string : urls) {
+                        filterChainDefinitionMap.put(string, permission);
+                    }
+                }
+            }
+        }
+
+        // 如果启用shiro,则设置最后一个设置为JWTFilter,否则全部路径放行
+        if (shiroProperties.isEnable()) {
+            filterChainDefinitionMap.put("/**", JWT_FILTER_NAME);
+        } else {
+            filterChainDefinitionMap.put("/**", ANON);
+        }
+
+        log.debug("filterChainMap:{}", JSON.toJSONString(filterChainDefinitionMap));
+
+        // 添加默认的filter
+        Map<String, String> newFilterChainDefinitionMap = addDefaultFilterDefinition(filterChainDefinitionMap);
+        return newFilterChainDefinitionMap;
+    }
+
+    /**
+     * 添加默认的filter权限过滤
+     *
+     * @param filterChainDefinitionMap
+     * @return
+     */
+    private Map<String, String> addDefaultFilterDefinition(Map<String, String> filterChainDefinitionMap) {
+        if (MapUtils.isEmpty(filterChainDefinitionMap)) {
+            return filterChainDefinitionMap;
+        }
+        final Map<String, String> map = new LinkedHashMap<>();
+        for (Map.Entry<String, String> entry : filterChainDefinitionMap.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            String definition;
+            String[] strings = value.split(",");
+            List<String> list = new ArrayList<>();
+            list.addAll(Arrays.asList(strings));
+            definition = String.join(",", list);
+            map.put(key, definition);
+        }
+        return map;
+    }
+
+    /**
+     * ShiroFilter配置
+     *
+     * @return
+     */
+    @Bean
+    public FilterRegistrationBean delegatingFilterProxy() {
+        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
+        DelegatingFilterProxy proxy = new DelegatingFilterProxy();
+        proxy.setTargetFilterLifecycle(true);
+        proxy.setTargetBeanName(SHIRO_FILTER_NAME);
+        filterRegistrationBean.setFilter(proxy);
+        filterRegistrationBean.setAsyncSupported(true);
+        filterRegistrationBean.setEnabled(true);
+        filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC);
+        return filterRegistrationBean;
+    }
+
+    @Bean
+    public Authenticator authenticator() {
+        ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
+        authenticator.setRealms(Arrays.asList(jwtRealm()));
+        authenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
+        return authenticator;
+    }
+
+
+    /**
+     * Enabling Shiro Annotations
+     *
+     * @return
+     */
+    @Bean
+    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+        return new LifecycleBeanPostProcessor();
+    }
+
+    @Bean
+    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
+        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
+        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
+        return authorizationAttributeSourceAdvisor;
+    }
+
+}

+ 1 - 1
src/main/java/com/zhentao/domain/WechatAuthResponse.java → src/main/java/com/zhentao/util/WechatAuthResponse.java

@@ -1,4 +1,4 @@
-package com.zhentao.domain;
+package com.zhentao.util;
 
 import lombok.Data;
 

+ 0 - 1
src/main/java/com/zhentao/util/WechatLoginUtil.java

@@ -2,7 +2,6 @@ package com.zhentao.util;
 
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.zhentao.domain.WechatAuthResponse;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;

+ 6 - 2
src/main/resources/application.yml

@@ -43,8 +43,9 @@ springboot-zhentao:
       # admin模块
       - /admin/passport/login
       - # service模块
-      - /login
+      - /api/login
       - /api/wx-login
+      - /api/getCode
       # job模块
       - /job/**
     # 多行字符串权限配置
@@ -59,4 +60,7 @@ spring:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://47.111.130.63:3306/goose_course?serverTimezone=UTC
     username: root
-    password: Yizu@666
+    password: Yizu@666
+wechat:
+  appid: wx8246d27305af5834
+  secret: 8badbee7a035911171cdccb13c67de30

+ 6 - 3
src/main/resources/mapper/GooseUserMapper.xml

@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.GooseUserMapper">
+<mapper namespace="com.zhentao.common.user.mapper.GooseUserMapper">
 
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.user.GooseUser">
+    <resultMap id="BaseResultMap" type="com.zhentao.common.user.domain.GooseUser">
             <id property="id" column="id" jdbcType="BIGINT"/>
             <result property="username" column="username" jdbcType="VARCHAR"/>
             <result property="password" column="password" jdbcType="VARCHAR"/>
@@ -20,6 +20,8 @@
             <result property="deleteFlag" column="delete_flag" jdbcType="TINYINT"/>
             <result property="loginFailCount" column="login_fail_count" jdbcType="INTEGER"/>
             <result property="avatarUrl" column="avatar_url" jdbcType="VARCHAR"/>
+            <result property="openId" column="open_id" jdbcType="VARCHAR"/>
+            <result property="sessionKey" column="session_key" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
@@ -27,6 +29,7 @@
         salt,nickname,create_time,
         update_time,phone,email,
         user_type,id_number,auth_status,
-        delete_flag,login_fail_count,avatar_url
+        delete_flag,login_fail_count,avatar_url,
+        open_id,session_key
     </sql>
 </mapper>

+ 0 - 28
src/main/resources/mapper/MerchantAdminMapper.xml

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.MerchantAdminMapper">
-
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.course.MerchantAdmin">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="merchantId" column="merchant_id" jdbcType="BIGINT"/>
-            <result property="username" column="username" jdbcType="VARCHAR"/>
-            <result property="password" column="password" jdbcType="VARCHAR"/>
-            <result property="realName" column="real_name" jdbcType="VARCHAR"/>
-            <result property="phone" column="phone" jdbcType="VARCHAR"/>
-            <result property="email" column="email" jdbcType="VARCHAR"/>
-            <result property="role" column="role" jdbcType="TINYINT"/>
-            <result property="status" column="status" jdbcType="TINYINT"/>
-            <result property="lastLoginTime" column="last_login_time" jdbcType="TIMESTAMP"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,merchant_id,username,
-        password,real_name,phone,
-        email,role,status,
-        last_login_time,create_time,update_time
-    </sql>
-</mapper>

+ 0 - 27
src/main/resources/mapper/MerchantMapper.xml

@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.MerchantMapper">
-
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.course.Merchant">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="name" column="name" jdbcType="VARCHAR"/>
-            <result property="logo" column="logo" jdbcType="VARCHAR"/>
-            <result property="banner" column="banner" jdbcType="VARCHAR"/>
-            <result property="description" column="description" jdbcType="VARCHAR"/>
-            <result property="contactPhone" column="contact_phone" jdbcType="VARCHAR"/>
-            <result property="contactEmail" column="contact_email" jdbcType="VARCHAR"/>
-            <result property="businessLicense" column="business_license" jdbcType="VARCHAR"/>
-            <result property="status" column="status" jdbcType="TINYINT"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,name,logo,
-        banner,description,contact_phone,
-        contact_email,business_license,status,
-        create_time,update_time
-    </sql>
-</mapper>

+ 0 - 26
src/main/resources/mapper/MerchantShopMapper.xml

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.MerchantShopMapper">
-
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.course.MerchantShop">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="merchantId" column="merchant_id" jdbcType="BIGINT"/>
-            <result property="name" column="name" jdbcType="VARCHAR"/>
-            <result property="description" column="description" jdbcType="VARCHAR"/>
-            <result property="address" column="address" jdbcType="VARCHAR"/>
-            <result property="contactPhone" column="contact_phone" jdbcType="VARCHAR"/>
-            <result property="businessHours" column="business_hours" jdbcType="VARCHAR"/>
-            <result property="status" column="status" jdbcType="TINYINT"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,merchant_id,name,
-        description,address,contact_phone,
-        business_hours,status,create_time,
-        update_time
-    </sql>
-</mapper>

+ 0 - 24
src/main/resources/mapper/ProductCategoryMapper.xml

@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.ProductCategoryMapper">
-
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.course.ProductCategory">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="parentId" column="parent_id" jdbcType="BIGINT"/>
-            <result property="name" column="name" jdbcType="VARCHAR"/>
-            <result property="level" column="level" jdbcType="TINYINT"/>
-            <result property="icon" column="icon" jdbcType="VARCHAR"/>
-            <result property="sortOrder" column="sort_order" jdbcType="INTEGER"/>
-            <result property="isShow" column="is_show" jdbcType="TINYINT"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,parent_id,name,
-        level,icon,sort_order,
-        is_show,create_time,update_time
-    </sql>
-</mapper>

+ 0 - 30
src/main/resources/mapper/ProductMapper.xml

@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.ProductMapper">
-
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.course.Product">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="categoryId" column="category_id" jdbcType="BIGINT"/>
-            <result property="name" column="name" jdbcType="VARCHAR"/>
-            <result property="subtitle" column="subtitle" jdbcType="VARCHAR"/>
-            <result property="mainImage" column="main_image" jdbcType="VARCHAR"/>
-            <result property="images" column="images" jdbcType="VARCHAR"/>
-            <result property="detail" column="detail" jdbcType="VARCHAR"/>
-            <result property="status" column="status" jdbcType="TINYINT"/>
-            <result property="isDelete" column="is_delete" jdbcType="TINYINT"/>
-            <result property="sales" column="sales" jdbcType="INTEGER"/>
-            <result property="viewCount" column="view_count" jdbcType="INTEGER"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,category_id,name,
-        subtitle,main_image,images,
-        detail,status,is_delete,
-        sales,view_count,create_time,
-        update_time
-    </sql>
-</mapper>

+ 0 - 28
src/main/resources/mapper/ProductSkuMapper.xml

@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.ProductSkuMapper">
-
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.course.ProductSku">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="productId" column="product_id" jdbcType="BIGINT"/>
-            <result property="sn" column="sn" jdbcType="VARCHAR"/>
-            <result property="specs" column="specs" jdbcType="VARCHAR"/>
-            <result property="price" column="price" jdbcType="DECIMAL"/>
-            <result property="originalPrice" column="original_price" jdbcType="DECIMAL"/>
-            <result property="costPrice" column="cost_price" jdbcType="DECIMAL"/>
-            <result property="weight" column="weight" jdbcType="DECIMAL"/>
-            <result property="image" column="image" jdbcType="VARCHAR"/>
-            <result property="stock" column="stock" jdbcType="INTEGER"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,product_id,sn,
-        specs,price,original_price,
-        cost_price,weight,image,
-        stock,create_time,update_time
-    </sql>
-</mapper>

+ 2 - 2
src/main/resources/mapper/UserDetailMapper.xml

@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.UserDetailMapper">
+<mapper namespace="com.zhentao.common.user.mapper.UserDetailMapper">
 
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.user.UserDetail">
+    <resultMap id="BaseResultMap" type="com.zhentao.common.user.domain.UserDetail">
             <id property="id" column="id" jdbcType="BIGINT"/>
             <result property="userId" column="user_id" jdbcType="INTEGER"/>
             <result property="name" column="name" jdbcType="VARCHAR"/>

+ 2 - 2
src/main/resources/mapper/UserLabelMapper.xml

@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.UserLabelMapper">
+<mapper namespace="com.zhentao.common.user.mapper.UserLabelMapper">
 
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.user.UserLabel">
+    <resultMap id="BaseResultMap" type="com.zhentao.common.user.domain.UserLabel">
             <id property="id" column="id" jdbcType="BIGINT"/>
             <result property="labelName" column="label_name" jdbcType="VARCHAR"/>
             <result property="userNum" column="user_num" jdbcType="INTEGER"/>

+ 2 - 2
src/main/resources/mapper/UserLocationMapper.xml

@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.UserLocationMapper">
+<mapper namespace="com.zhentao.common.user.mapper.UserLocationMapper">
 
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.user.UserLocation">
+    <resultMap id="BaseResultMap" type="com.zhentao.common.user.domain.UserLocation">
             <id property="id" column="id" jdbcType="BIGINT"/>
             <result property="userId" column="user_id" jdbcType="BIGINT"/>
             <result property="appId" column="app_id" jdbcType="VARCHAR"/>

+ 2 - 2
src/main/resources/mapper/UserLoginMapper.xml

@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhentao.mapper.UserLoginMapper">
+<mapper namespace="com.zhentao.common.user.mapper.UserLoginMapper">
 
-    <resultMap id="BaseResultMap" type="com.zhentao.domain.user.UserLogin">
+    <resultMap id="BaseResultMap" type="com.zhentao.common.user.domain.UserLogin">
             <id property="id" column="id" jdbcType="BIGINT"/>
             <result property="openId" column="open_id" jdbcType="VARCHAR"/>
             <result property="unionId" column="union_id" jdbcType="VARCHAR"/>