增加根据管理员id查询门店接口

This commit is contained in:
2025-07-30 14:13:55 +08:00
parent af4818102c
commit 78555a7cd2
9 changed files with 186 additions and 6 deletions

View File

@ -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;
/**
* <p>
@ -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<List<CompanyStoreDTO>> listStoresByManage(@RequestParam(value = "managerId", required = false) Integer managerId){
if (managerId == null ) {
SimpleUserInfoDTO simpleUserInfoDTO = jwtUtil.getUserInfoFromToken();
managerId = simpleUserInfoDTO.getUserId();
}
return Result.ok(storeService.listStoresByManage(managerId));
}
}

View File

@ -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;
}

View File

@ -20,4 +20,6 @@ import java.util.List;
*/
public interface CompanyStoreMapper extends BaseMapper<CompanyStorePO> {
IPage<CompanyStoreDTO> listStoresByBBoxWithDistance(Page<CompanyStoreDTO> page, @Param("storeDistanceReq") StoreDistanceReq storeDistanceReq);
List<CompanyStoreDTO> listStoresByManage(@Param("managerId") Integer managerId);
}

View File

@ -19,4 +19,6 @@ import java.util.List;
public interface CompanyStoreRepo extends IService<CompanyStorePO> {
IPage<CompanyStoreDTO> listStoresByBBoxWithDistance(StoreDistanceReq storeDistanceReq,Integer pageNo, Integer pageSize);
List<CompanyStoreDTO> listStoresByManage(Integer managerId);
}

View File

@ -30,4 +30,9 @@ public class CompanyStoreRepoImpl extends ServiceImpl<CompanyStoreMapper, Compan
Page<CompanyStoreDTO> page = new Page<>(pageNo, pageSize);
return this.getBaseMapper().listStoresByBBoxWithDistance(page, storeDistanceReq);
}
@Override
public List<CompanyStoreDTO> listStoresByManage(Integer managerId) {
return this.getBaseMapper().listStoresByManage(managerId);
}
}

View File

@ -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<CompanyStoreDTO> listStoresByManage(Integer managerId);
}

View File

@ -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<CompanyStoreDTO> listStoresByManage(Integer managerId) {
return companyStoreRepo.listStoresByManage(managerId);
}
}

View File

@ -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<String, Object> 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> T getClaim(String token, String claimKey, Class<T> clazz) {
return Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(token)
.getBody()
.get(claimKey, clazz);
}
// 从 token 中提取某个对象类型的字段(支持复杂对象)
public <T> T getClaimFromToken(String token, String claimKey, Class<T> 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不存在");
}
}
}

View File

@ -58,4 +58,37 @@
</select>
<select id="listStoresByManage" resultType="com.sczx.store.dto.CompanyStoreDTO">
SELECT
t.id,
t.name,
t.contact_person,
t.phone,
t.contact_person2,
t.phone2,
t.province_id,
t.province_name,
t.city_id,
t.city_name,
t.area_id,
t.area_name,
t.address,
t.detailed_address,
t.image,
t.latitude,
t.longitude,
t.day_time,
t.start_time,
t.end_time,
t.label,
t.status
FROM
zc_company_store t
JOIN
zc_base_user_store s
ON t.id = s.store_id
WHERE
s.user_id = #{managerId}
</select>
</mapper>