调整登录接口

This commit is contained in:
2025-07-27 02:12:58 +08:00
parent 29bca44a7b
commit d0ea6825db
17 changed files with 486 additions and 76 deletions

View File

@ -1,7 +1,8 @@
package com.sczx.user.controller; package com.sczx.user.controller;
import com.sczx.user.common.Result; import com.sczx.user.common.Result;
import com.sczx.user.model.LoginRequest; import com.sczx.user.dto.LoginResponse;
import com.sczx.user.dto.RegReq;
import com.sczx.user.service.IUserService; import com.sczx.user.service.IUserService;
import com.sczx.user.util.JwtUtil; import com.sczx.user.util.JwtUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -19,22 +20,35 @@ public class AuthController {
@Autowired @Autowired
private JwtUtil jwtUtil; private JwtUtil jwtUtil;
@ApiOperation(value = "微信小程序登录", notes = "通过微信code登录") @ApiOperation(value = "获取微信openId", notes = "通过微信code注册")
@PostMapping("/mini-program/wechat/login") @PostMapping("/mini-program/getWxOpenId")
public Result<String> wechatLogin(@RequestParam("code") String code) { public Result<String> getWxOpenId(@RequestParam("code") String code) {
String token = userService.miniProgramLogin(code); String openId= userService.getWxOpenId(code);
return Result.ok(token); return Result.ok(openId);
} }
@ApiOperation(value = "微信小程序注册", notes = "通过微信code注册") @ApiOperation(value = "获取微信手机号", notes = "通过微信code注册")
@PostMapping("/mini-program/wechat/register") @PostMapping("/mini-program/getWxPhoneNumber")
public Result<String> wechatRegister( public Result<String> getWxPhoneNumber(@RequestParam("phoneCode") String phoneCode) {
@RequestParam("code") String code, String phoneNumber= userService.getWxPhoneNumber(phoneCode);
@RequestBody LoginRequest request) { return Result.ok(phoneNumber);
String token = userService.miniProgramRegister(code, request.getUsername(), request.getPassword());
return Result.ok(token);
} }
@ApiOperation(value = "小程序注册", notes = "注册")
@PostMapping("/mini-program/register")
public Result<Boolean> wechatRegister(
@RequestBody RegReq regReq) {
Boolean result = userService.miniProgramRegister(regReq.getOpenId(), regReq.getNickName(), regReq.getPhoneNumber(), regReq.getAvatarUrl());
return Result.ok(result);
}
@ApiOperation(value = "微信小程序登录", notes = "通过微信code登录")
@PostMapping("/mini-program/wechat/login")
public Result<LoginResponse> wechatLogin(@RequestParam("code") String code) {
return Result.ok(userService.miniProgramLogin(code));
}
@ApiOperation(value = "支付宝小程序登录", notes = "通过支付宝userId登录") @ApiOperation(value = "支付宝小程序登录", notes = "通过支付宝userId登录")
@PostMapping("/mini-program/alipay/login") @PostMapping("/mini-program/alipay/login")
public Result<String> alipayLogin(@RequestParam("userId") String userId) { public Result<String> alipayLogin(@RequestParam("userId") String userId) {
@ -42,12 +56,4 @@ public class AuthController {
return Result.ok(token); return Result.ok(token);
} }
@ApiOperation(value = "支付宝小程序注册", notes = "通过支付宝userId注册")
@PostMapping("/mini-program/alipay/register")
public Result<String> alipayRegister(
@RequestParam("userId") String userId,
@RequestBody LoginRequest request) {
String token = userService.alipayMiniProgramRegister(userId, request.getUsername(), request.getPassword());
return Result.ok(token);
}
} }

View File

@ -0,0 +1,18 @@
package com.sczx.user.convert;
import com.sczx.user.dto.SimpleUserInfoDTO;
import com.sczx.user.po.BaseUserPO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserInfoConvert {
UserInfoConvert INSTANCE = Mappers.getMapper(UserInfoConvert.class);
@Mappings({
@Mapping(source = "baseUserPO.id", target = "userId")
})
SimpleUserInfoDTO poToSimpleDTO(BaseUserPO baseUserPO);
}

View File

@ -1,4 +1,4 @@
package com.sczx.user.model; package com.sczx.user.dto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
@ -16,8 +16,6 @@ import lombok.Data;
public class LoginResponse { public class LoginResponse {
@ApiModelProperty(value = "登录的token") @ApiModelProperty(value = "登录的token")
private String token; private String token;
@ApiModelProperty(value = "登录的refreshToken") @ApiModelProperty(value = "用户信息")
private String refreshToken; private SimpleUserInfoDTO userInfo;
@ApiModelProperty(value = "登录用户的角色")
private String role;
} }

View File

@ -0,0 +1,24 @@
package com.sczx.user.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@ApiModel(value = "小程序注册请求")
@Slf4j
@Data
public class RegReq {
@ApiModelProperty(value = "微信openId")
private String openId;
@ApiModelProperty(value = "手机号")
private String phoneNumber;
@ApiModelProperty(value = "nickName")
private String nickName;
@ApiModelProperty(value = "头像")
private String avatarUrl;
}

View File

@ -14,6 +14,15 @@ public class SimpleUserInfoDTO {
@ApiModelProperty(value = "用户姓名") @ApiModelProperty(value = "用户姓名")
private String userName; private String userName;
@ApiModelProperty(value = "手机号")
private String phoneNumber;
@ApiModelProperty(value = "角色id") @ApiModelProperty(value = "角色id")
private Integer roleId; private Integer roleId;
@ApiModelProperty(value = "小程序类型")
private String miniProgramType;
@ApiModelProperty("头像")
private String avatarUrl;
} }

View File

@ -0,0 +1,16 @@
package com.sczx.user.mapper;
import com.sczx.user.po.BaseUserPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 租车用户信息 Mapper 接口
* </p>
*
* @author zhangli
* @since 2025-07-27 01:06:25
*/
public interface BaseUserMapper extends BaseMapper<BaseUserPO> {
}

View File

@ -0,0 +1,68 @@
package com.sczx.user.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 租车用户信息
* </p>
*
* @author zhangli
* @since 2025-07-27 01:06:25
*/
@Getter
@Setter
@TableName("zc_base_user")
@ApiModel(value = "BaseUserPO对象", description = "租车用户信息")
public class BaseUserPO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("用户id主键")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty("用户名")
private String userName;
@ApiModelProperty("头像")
private String avatarUrl;
@ApiModelProperty("子订单编号")
private String password;
@ApiModelProperty("手机号")
private String phoneNumber;
@ApiModelProperty("角色id")
private Integer roleId;
@ApiModelProperty("昵称")
private String nickName;
@ApiModelProperty("微信小程序 openid")
private String wechatOpenid;
@ApiModelProperty("支付宝小程序 userid")
private String alipayUserid;
@ApiModelProperty("删除标志0代表存在 2代表删除")
private String delFlag;
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
}

View File

@ -0,0 +1,16 @@
package com.sczx.user.repository;
import com.sczx.user.po.BaseUserPO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 租车用户信息 服务类
* </p>
*
* @author zhangli
* @since 2025-07-27 01:06:25
*/
public interface BaseUserRepo extends IService<BaseUserPO> {
}

View File

@ -0,0 +1,20 @@
package com.sczx.user.repository.impl;
import com.sczx.user.po.BaseUserPO;
import com.sczx.user.mapper.BaseUserMapper;
import com.sczx.user.repository.BaseUserRepo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 租车用户信息 服务实现类
* </p>
*
* @author zhangli
* @since 2025-07-27 01:06:25
*/
@Service
public class BaseUserRepoImpl extends ServiceImpl<BaseUserMapper, BaseUserPO> implements BaseUserRepo {
}

View File

@ -1,5 +1,6 @@
package com.sczx.user.service; package com.sczx.user.service;
import com.sczx.user.dto.LoginResponse;
import com.sczx.user.dto.SimpleUserInfoDTO; import com.sczx.user.dto.SimpleUserInfoDTO;
/** /**
@ -9,22 +10,37 @@ import com.sczx.user.dto.SimpleUserInfoDTO;
*/ */
public interface IUserService { public interface IUserService {
/**
* 根据code获取openId
* @param code
* @return
*/
String getWxOpenId(String code);
/**
* 根据code获取手机号
* @param phoneCode
* @return
*/
String getWxPhoneNumber(String phoneCode);
/**
* 小程序注册
* @param openId
* @param userName
* @param phoneNumber
* @param avatarUrl
* @return
*/
Boolean miniProgramRegister(String openId, String userName,String phoneNumber,String avatarUrl);
/** /**
* 微信小程序登录 * 微信小程序登录
* @param code 微信登录code * @param code 微信登录code
* @return token * @return token
*/ */
String miniProgramLogin(String code); LoginResponse miniProgramLogin(String code);
/**
* 微信小程序注册
* @param code 微信登录code
* @param username 用户名
* @param password 密码
* @return token
*/
String miniProgramRegister(String code, String username, String password);
/** /**
* 支付宝小程序登录 * 支付宝小程序登录
@ -33,14 +49,7 @@ public interface IUserService {
*/ */
String alipayMiniProgramLogin(String userId); String alipayMiniProgramLogin(String userId);
/**
* 支付宝小程序注册
* @param userId 支付宝用户ID
* @param username 用户名
* @param password 密码
* @return token
*/
String alipayMiniProgramRegister(String userId, String username, String password);
/** /**
* 根据小程序ID获取用户信息 * 根据小程序ID获取用户信息

View File

@ -1,9 +1,16 @@
package com.sczx.user.service.impl; package com.sczx.user.service.impl;
import com.alibaba.nacos.common.utils.MD5Utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sczx.user.common.enums.MiniProgramTypeEnum; import com.sczx.user.common.enums.MiniProgramTypeEnum;
import com.sczx.user.convert.UserInfoConvert;
import com.sczx.user.dto.LoginResponse;
import com.sczx.user.dto.SimpleUserInfoDTO; import com.sczx.user.dto.SimpleUserInfoDTO;
import com.sczx.user.exception.BizException; import com.sczx.user.exception.BizException;
import com.sczx.user.po.BaseUserPO;
import com.sczx.user.repository.BaseUserRepo;
import com.sczx.user.service.IUserService; import com.sczx.user.service.IUserService;
import com.sczx.user.thirdpart.integ.WeichatInteg;
import com.sczx.user.util.JwtUtil; import com.sczx.user.util.JwtUtil;
import com.sczx.user.util.RedisUtil; import com.sczx.user.util.RedisUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -12,6 +19,7 @@ import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* @Author: 张黎 * @Author: 张黎
@ -38,30 +46,60 @@ public class UserServiceImpl implements IUserService {
@Autowired @Autowired
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Autowired
private BaseUserRepo baseUserRepo;
@Autowired
private WeichatInteg weichatInteg;
@Override @Override
public String miniProgramLogin(String code) { public String getWxOpenId(String code) {
String openid = WECHAT_CODE_TO_OPENID.get(code); return weichatInteg.getWechatOpenIdByCode(code);
}
@Override
public String getWxPhoneNumber(String phoneCode) {
String accessToken = weichatInteg.getAccessToken();
return weichatInteg.getPhoneNumber(accessToken, phoneCode);
}
@Override
public Boolean miniProgramRegister(String openId, String nickName, String phoneNumber, String avatarUrl) {
LambdaQueryWrapper<BaseUserPO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BaseUserPO::getPhoneNumber, phoneNumber);
BaseUserPO baseUserPO = baseUserRepo.getOne(queryWrapper);
if(Objects.nonNull(baseUserPO)){
throw new BizException("该手机号用户已注册");
}
baseUserPO = new BaseUserPO();
baseUserPO.setUserName(nickName);
baseUserPO.setNickName(nickName);
baseUserPO.setPhoneNumber(phoneNumber);
baseUserPO.setPassword(MD5Utils.md5Hex("88888888", "UTF-8"));
baseUserPO.setAvatarUrl(avatarUrl);
baseUserPO.setRoleId(1);
baseUserRepo.save(baseUserPO);
return true;
}
@Override
public LoginResponse miniProgramLogin(String code) {
String openid = getWxOpenId(code);
if (openid == null) { if (openid == null) {
throw new BizException("无效的微信登录code"); throw new BizException("无效的微信登录code");
} }
// 模拟登录逻辑 // 模拟登录逻辑
SimpleUserInfoDTO simpleUserInfoDTO = getUserInfoByProgramId(openid, MiniProgramTypeEnum.WECHAT.getType()); SimpleUserInfoDTO simpleUserInfoDTO = getUserInfoByProgramId(openid, MiniProgramTypeEnum.WECHAT.getType());
return jwtUtil.generateToken(simpleUserInfoDTO, simpleUserInfoDTO.getUserName()); String token = jwtUtil.generateToken(simpleUserInfoDTO, simpleUserInfoDTO.getUserName());
LoginResponse loginResponse = new LoginResponse();
loginResponse.setToken(token);
loginResponse.setUserInfo(simpleUserInfoDTO);
return loginResponse;
} }
@Override
public String miniProgramRegister(String code, String username, String password) {
String openid = WECHAT_CODE_TO_OPENID.get(code);
if (openid == null) {
throw new BizException("无效的微信登录code");
}
// 模拟注册逻辑
SimpleUserInfoDTO simpleUserInfoDTO = getUserInfoByProgramId(openid, MiniProgramTypeEnum.WECHAT.getType());
return jwtUtil.generateToken(simpleUserInfoDTO, simpleUserInfoDTO.getUserName());
}
@Override @Override
public String alipayMiniProgramLogin(String userId) { public String alipayMiniProgramLogin(String userId) {
@ -75,25 +113,24 @@ public class UserServiceImpl implements IUserService {
return jwtUtil.generateToken(simpleUserInfoDTO, simpleUserInfoDTO.getUserName()); return jwtUtil.generateToken(simpleUserInfoDTO, simpleUserInfoDTO.getUserName());
} }
@Override
public String alipayMiniProgramRegister(String userId, String username, String password) {
String realUserId = ALIPAY_ID_TO_USERID.get(userId);
if (realUserId == null) {
throw new BizException("无效的支付宝用户ID");
}
// 模拟注册逻辑
SimpleUserInfoDTO simpleUserInfoDTO = getUserInfoByProgramId(realUserId, MiniProgramTypeEnum.ALIPAY.getType());
return jwtUtil.generateToken(simpleUserInfoDTO, simpleUserInfoDTO.getUserName());
}
@Override @Override
public SimpleUserInfoDTO getUserInfoByProgramId(String programId, String programType) { public SimpleUserInfoDTO getUserInfoByProgramId(String programId, String programType) {
//todo 根据小程序id和类型查询用户信息 //todo 根据小程序id和类型查询用户信息
SimpleUserInfoDTO simpleUserInfoDTO = new SimpleUserInfoDTO(); // SimpleUserInfoDTO simpleUserInfoDTO = new SimpleUserInfoDTO();
simpleUserInfoDTO.setUserId(1); // simpleUserInfoDTO.setUserId(1);
simpleUserInfoDTO.setUserName("张三"); // simpleUserInfoDTO.setUserName("张三");
simpleUserInfoDTO.setRoleId(1); // simpleUserInfoDTO.setRoleId(1);
return simpleUserInfoDTO; // return simpleUserInfoDTO;
LambdaQueryWrapper<BaseUserPO> queryWrapper = new LambdaQueryWrapper<>();
if(MiniProgramTypeEnum.WECHAT.getType().equalsIgnoreCase(programType)){
queryWrapper.eq(BaseUserPO::getWechatOpenid, programId).last(" limit 1");
}else {
queryWrapper.eq(BaseUserPO::getAlipayUserid, programId).last(" limit 1");
}
BaseUserPO baseUserPO = baseUserRepo.getOne(queryWrapper);
return UserInfoConvert.INSTANCE.poToSimpleDTO(baseUserPO);
} }
} }

View File

@ -0,0 +1,12 @@
package com.sczx.user.thirdpart.dto;
import lombok.Data;
@Data
public class WechatMiniProgramResponse {
private String openid;
private String session_key;
private String unionid;
private Integer errcode;
private String errmsg;
}

View File

@ -0,0 +1,133 @@
package com.sczx.user.thirdpart.integ;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sczx.user.thirdpart.dto.WechatMiniProgramResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Component
public class WeichatInteg {
@Value("${wechat.miniapp.appid}")
private String appid;
@Value("${wechat.miniapp.secret}")
private String secret;
@Value("${wechat.miniapp.apiurl}")
private String apiurl;
/**
* 通过微信code获取openid和session_key
* @param code 微信登录凭证
* @return WechatMiniProgramResponse
*/
public WechatMiniProgramResponse getSessionInfoByCode(String code) {
String url = apiurl + "/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
try {
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(url, String.class);
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(response, WechatMiniProgramResponse.class);
} catch (Exception e) {
log.error("获取微信session信息异常", e);
return null;
}
}
/**
* 通过微信code获取openid保持原有方法兼容性
* @param code 微信登录凭证
* @return openid
*/
public String getWechatOpenIdByCode(String code) {
WechatMiniProgramResponse response = getSessionInfoByCode(code);
if (response == null) {
return null;
}
if (response.getErrcode() != null && response.getErrcode() != 0) {
log.error("微信接口调用失败,错误码:{},错误信息:{}", response.getErrcode(), response.getErrmsg());
return null;
}
return response.getOpenid();
}
/**
* 获取访问令牌(用于调用其他微信接口)
* @return access_token
*/
public String getAccessToken() {
String url = apiurl + "/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
try {
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(url, String.class);
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> resultMap = objectMapper.readValue(response, Map.class);
if (resultMap.containsKey("errcode")) {
log.error("获取access_token失败错误码{},错误信息:{}",
resultMap.get("errcode"), resultMap.get("errmsg"));
return null;
}
return (String) resultMap.get("access_token");
} catch (Exception e) {
log.error("获取access_token异常", e);
return null;
}
}
/**
* 通过手机号获取凭证获取用户手机号
* @param accessToken 访问令牌
* @param code 手机号获取凭证
* @return 手机号信息
*/
public String getPhoneNumber(String accessToken, String code) {
String url = apiurl + "/wxa/business/getuserphonenumber?access_token=" + accessToken;
try {
RestTemplate restTemplate = new RestTemplate();
// 构造请求体
Map<String, String> requestBody = new HashMap<>();
requestBody.put("code", code);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
String response = restTemplate.postForObject(url, requestEntity, String.class);
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> resultMap = objectMapper.readValue(response, Map.class);
if (!"0".equals(resultMap.get("errcode").toString())) {
log.error("获取手机号失败,错误码:{},错误信息:{}",
resultMap.get("errcode"), resultMap.get("errmsg"));
return null;
}
Map<String, Object> phoneInfoMap = (Map<String, Object>) resultMap.get("phone_info");
return (String) phoneInfoMap.get("purePhoneNumber");
} catch (Exception e) {
log.error("获取手机号异常", e);
return null;
}
}
}

View File

@ -10,8 +10,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; 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.crypto.SecretKey;
import javax.servlet.http.HttpServletRequest;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@ -91,4 +94,33 @@ public class JwtUtil {
} }
} }
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();
if (authHeader != null && authHeader.startsWith("Bearer ")) {
String token = authHeader.substring(7);
// 进行token验证等操作
return getClaim(token, "userInfo", SimpleUserInfoDTO.class);
}else {
throw new RuntimeException("token不存在");
}
}
} }

View File

@ -63,3 +63,10 @@ mybatis-plus:
auth: auth:
secret-key: his-is-a-very-long-and-secure-secret-key-for-jwt-signing-please-dont-use-short-keys secret-key: his-is-a-very-long-and-secure-secret-key-for-jwt-signing-please-dont-use-short-keys
token-expiration: 86400000 # 24小时 token-expiration: 86400000 # 24小时
wechat:
miniapp:
apiurl: https://api.weixin.qq.com
appid: wx25e1ad1a70c326de
secret: your_secret
grantType: authorization_code

View File

@ -0,0 +1,5 @@
<?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.sczx.user.mapper.BaseUserMapper">
</mapper>

View File

@ -10,7 +10,7 @@ import java.util.Collections;
public class CodeGenerator { public class CodeGenerator {
private static final String parentPackage = "com.sczx.store"; private static final String parentPackage = "com.sczx.user";
private static final String jdbcUrl = "jdbc:mysql://115.190.8.52:3306/sczx?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useSSL=false&serverTimezone=Asia/Shanghai"; private static final String jdbcUrl = "jdbc:mysql://115.190.8.52:3306/sczx?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useSSL=false&serverTimezone=Asia/Shanghai";
private static final String username = "sczx_user"; private static final String username = "sczx_user";
private static final String password = "Sczx123@"; private static final String password = "Sczx123@";
@ -25,8 +25,8 @@ public class CodeGenerator {
.dateType(DateType.TIME_PACK).commentDate("yyyy-MM-dd HH:mm:ss") .dateType(DateType.TIME_PACK).commentDate("yyyy-MM-dd HH:mm:ss")
.fileOverride()) .fileOverride())
// 包配置 // 包配置
.packageConfig(builder -> builder.parent(parentPackage).entity("po.base").service("repository.base").serviceImpl("repository.impl.base").xml("") .packageConfig(builder -> builder.parent(parentPackage).entity("po").service("repository").serviceImpl("repository.impl").xml("")
.mapper("mapper.base").pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper/base"))) .mapper("mapper").pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper")))
// 策略配置 // 策略配置
.strategyConfig((scanner, builder) -> builder.addInclude(scanner.apply("请输入表名:")) .strategyConfig((scanner, builder) -> builder.addInclude(scanner.apply("请输入表名:"))