From 78555a7cd287e622e89f90513e423c1f19c86852 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Wed, 30 Jul 2025 14:13:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98id=E6=9F=A5=E8=AF=A2=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StoreManageController.java | 32 ++++++++- .../com/sczx/store/dto/SimpleUserInfoDTO.java | 29 ++++++++ .../sczx/store/mapper/CompanyStoreMapper.java | 2 + .../store/repository/CompanyStoreRepo.java | 2 + .../repository/impl/CompanyStoreRepoImpl.java | 5 ++ .../com/sczx/store/service/StoreService.java | 10 +++ .../store/service/impl/StoreServiceImpl.java | 13 ++++ .../java/com/sczx/store/util/JwtUtil.java | 66 ++++++++++++++++++- .../resources/mapper/CompanyStoreMapper.xml | 33 ++++++++++ 9 files changed, 186 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/sczx/store/dto/SimpleUserInfoDTO.java diff --git a/src/main/java/com/sczx/store/controller/StoreManageController.java b/src/main/java/com/sczx/store/controller/StoreManageController.java index 60642cf..c363e97 100644 --- a/src/main/java/com/sczx/store/controller/StoreManageController.java +++ b/src/main/java/com/sczx/store/controller/StoreManageController.java @@ -1,9 +1,19 @@ package com.sczx.store.controller; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.sczx.store.common.Result; +import com.sczx.store.dto.CompanyStoreDTO; +import com.sczx.store.dto.SimpleUserInfoDTO; +import com.sczx.store.dto.req.StoreDistanceReq; +import com.sczx.store.service.StoreService; +import com.sczx.store.util.JwtUtil; import io.swagger.annotations.Api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** *

@@ -15,7 +25,23 @@ import org.springframework.web.bind.annotation.RestController; */ @Api(value = "门店管理端接口", produces = "管理端接口") @RestController -@RequestMapping("/client") +@RequestMapping("/store") public class StoreManageController { + @Autowired + private StoreService storeService; + + @Autowired + private JwtUtil jwtUtil; + + + @ApiOperation(value = "根据管理员信息获取门店列表") + @PostMapping("/listStoresByManage") + public Result> listStoresByManage(@RequestParam(value = "managerId", required = false) Integer managerId){ + if (managerId == null ) { + SimpleUserInfoDTO simpleUserInfoDTO = jwtUtil.getUserInfoFromToken(); + managerId = simpleUserInfoDTO.getUserId(); + } + return Result.ok(storeService.listStoresByManage(managerId)); + } } diff --git a/src/main/java/com/sczx/store/dto/SimpleUserInfoDTO.java b/src/main/java/com/sczx/store/dto/SimpleUserInfoDTO.java new file mode 100644 index 0000000..036dd16 --- /dev/null +++ b/src/main/java/com/sczx/store/dto/SimpleUserInfoDTO.java @@ -0,0 +1,29 @@ +package com.sczx.store.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel(value = "基本用户信息") +@Data +public class SimpleUserInfoDTO { + + @ApiModelProperty(value = "用户id") + private Integer userId; + + @ApiModelProperty(value = "用户姓名") + private String userName; + + @ApiModelProperty(value = "手机号") + private String phoneNumber; + + @ApiModelProperty(value = "角色id") + private Integer roleId; + + + @ApiModelProperty(value = "小程序类型") + private String miniProgramType; + + @ApiModelProperty("头像") + private String avatarUrl; +} diff --git a/src/main/java/com/sczx/store/mapper/CompanyStoreMapper.java b/src/main/java/com/sczx/store/mapper/CompanyStoreMapper.java index 0cb3510..79a8542 100644 --- a/src/main/java/com/sczx/store/mapper/CompanyStoreMapper.java +++ b/src/main/java/com/sczx/store/mapper/CompanyStoreMapper.java @@ -20,4 +20,6 @@ import java.util.List; */ public interface CompanyStoreMapper extends BaseMapper { IPage listStoresByBBoxWithDistance(Page page, @Param("storeDistanceReq") StoreDistanceReq storeDistanceReq); + + List listStoresByManage(@Param("managerId") Integer managerId); } diff --git a/src/main/java/com/sczx/store/repository/CompanyStoreRepo.java b/src/main/java/com/sczx/store/repository/CompanyStoreRepo.java index d7e71a4..0bb3522 100644 --- a/src/main/java/com/sczx/store/repository/CompanyStoreRepo.java +++ b/src/main/java/com/sczx/store/repository/CompanyStoreRepo.java @@ -19,4 +19,6 @@ import java.util.List; public interface CompanyStoreRepo extends IService { IPage listStoresByBBoxWithDistance(StoreDistanceReq storeDistanceReq,Integer pageNo, Integer pageSize); + + List listStoresByManage(Integer managerId); } diff --git a/src/main/java/com/sczx/store/repository/impl/CompanyStoreRepoImpl.java b/src/main/java/com/sczx/store/repository/impl/CompanyStoreRepoImpl.java index 4cec8cf..c2fdefa 100644 --- a/src/main/java/com/sczx/store/repository/impl/CompanyStoreRepoImpl.java +++ b/src/main/java/com/sczx/store/repository/impl/CompanyStoreRepoImpl.java @@ -30,4 +30,9 @@ public class CompanyStoreRepoImpl extends ServiceImpl page = new Page<>(pageNo, pageSize); return this.getBaseMapper().listStoresByBBoxWithDistance(page, storeDistanceReq); } + + @Override + public List listStoresByManage(Integer managerId) { + return this.getBaseMapper().listStoresByManage(managerId); + } } diff --git a/src/main/java/com/sczx/store/service/StoreService.java b/src/main/java/com/sczx/store/service/StoreService.java index 2613bdc..b246673 100644 --- a/src/main/java/com/sczx/store/service/StoreService.java +++ b/src/main/java/com/sczx/store/service/StoreService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.sczx.store.dto.CompanyStoreDTO; import com.sczx.store.dto.req.StoreDistanceReq; +import java.util.List; + public interface StoreService { /** @@ -21,4 +23,12 @@ public interface StoreService { * @return */ CompanyStoreDTO getStoreById(Integer id); + + + /** + * 根据管理员id获取门店信息 + * @param managerId + * @return + */ + List listStoresByManage(Integer managerId); } diff --git a/src/main/java/com/sczx/store/service/impl/StoreServiceImpl.java b/src/main/java/com/sczx/store/service/impl/StoreServiceImpl.java index 75bb0e5..ea96ee6 100644 --- a/src/main/java/com/sczx/store/service/impl/StoreServiceImpl.java +++ b/src/main/java/com/sczx/store/service/impl/StoreServiceImpl.java @@ -3,16 +3,23 @@ package com.sczx.store.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.sczx.store.convert.StoreConvert; import com.sczx.store.dto.CompanyStoreDTO; +import com.sczx.store.dto.SimpleUserInfoDTO; import com.sczx.store.dto.req.StoreDistanceReq; import com.sczx.store.po.CompanyStorePO; import com.sczx.store.repository.CompanyStoreRepo; import com.sczx.store.service.StoreService; +import com.sczx.store.util.JwtUtil; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class StoreServiceImpl implements StoreService { + + @Autowired private CompanyStoreRepo companyStoreRepo; @Override @@ -28,4 +35,10 @@ public class StoreServiceImpl implements StoreService { return StoreConvert.INSTANCE.poToDTO(companyStorePO); } + + @Override + public List listStoresByManage(Integer managerId) { + + return companyStoreRepo.listStoresByManage(managerId); + } } diff --git a/src/main/java/com/sczx/store/util/JwtUtil.java b/src/main/java/com/sczx/store/util/JwtUtil.java index fc784cd..bd7270f 100644 --- a/src/main/java/com/sczx/store/util/JwtUtil.java +++ b/src/main/java/com/sczx/store/util/JwtUtil.java @@ -1,5 +1,8 @@ package com.sczx.store.util; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Maps; +import com.sczx.store.dto.SimpleUserInfoDTO; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -7,9 +10,13 @@ import io.jsonwebtoken.security.Keys; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import javax.crypto.SecretKey; +import javax.servlet.http.HttpServletRequest; import java.util.Date; +import java.util.Map; /** * @Author: 张黎 @@ -31,15 +38,37 @@ public class JwtUtil { log.info("JWT 密钥:{}", secretKey); } - public String generateToken(String username, String role) { + public String generateToken(SimpleUserInfoDTO simpleUserInfoDTO, String subject){ + Map claims = Maps.newHashMap(); + claims.put("userInfo", simpleUserInfoDTO.getUserId()); return Jwts.builder() - .setSubject(username) - .claim("role", role) + .setClaims(claims) // 设置自定义 claims + .setSubject(subject) .setExpiration(new Date(System.currentTimeMillis() + expiration)) .signWith(key, SignatureAlgorithm.HS512) .compact(); } + // 从 token 中提取某个字段 + public T getClaim(String token, String claimKey, Class clazz) { + return Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody() + .get(claimKey, clazz); + } + + // 从 token 中提取某个对象类型的字段(支持复杂对象) + public T getClaimFromToken(String token, String claimKey, Class targetClass) { + return Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody() + .get(claimKey, targetClass); + } + public String extractUsername(String token) { return Jwts.parserBuilder() .setSigningKey(key) @@ -60,4 +89,35 @@ public class JwtUtil { return false; } } + + public HttpServletRequest getCurrentRequest() { + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + return attributes != null ? attributes.getRequest() : null; + } + + /** + * 获取当前请求的Authorization头内容 + * @return Authorization头的值,如果不存在则返回null + */ + public String getAuthorizationHeader() { + HttpServletRequest request = getCurrentRequest(); + return request != null ? request.getHeader("Authorization") : null; + } + + /** + * 从token中获取用户信息 + * @return 用户信息 + */ + public SimpleUserInfoDTO getUserInfoFromToken() { + String authHeader = getAuthorizationHeader(); + log.info("token:{}",authHeader); + if (authHeader != null && authHeader.startsWith("Bearer ")) { + String token = authHeader.substring(7); + String userInfoJson = getClaim(token, "userInfo", String.class); + // 进行token验证等操作 + return JSONObject.parseObject(userInfoJson, SimpleUserInfoDTO.class); + }else { + throw new RuntimeException("token不存在"); + } + } } diff --git a/src/main/resources/mapper/CompanyStoreMapper.xml b/src/main/resources/mapper/CompanyStoreMapper.xml index d88b574..c304e3d 100644 --- a/src/main/resources/mapper/CompanyStoreMapper.xml +++ b/src/main/resources/mapper/CompanyStoreMapper.xml @@ -58,4 +58,37 @@ + +