...
 
Commits (2)
    https://gitcode.net/weixin_57203989/coder_club/-/commit/d6cf2f662a1655e097e456dfca5757ce0141ab58 【change】优化 2024-04-26T17:27:13+08:00 weixin_57203989 weixin_57203989@gitcode.net https://gitcode.net/weixin_57203989/coder_club/-/commit/1c288e1c9d6ca36fc169a7018fd2795c775cc814 【change】分类标签优化 2024-04-29T13:54:51+08:00 weixin_57203989 weixin_57203989@gitcode.net
......@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/user/")
@Slf4j
......@@ -61,6 +62,41 @@ public class UserController {
}
}
/**
* 获取用户信息
*/
@RequestMapping("getUserInfo")
public Result<AuthUserDTO> getUserInfo(@RequestBody AuthUserDTO authUserDTO) {
try {
if (log.isInfoEnabled()) {
log.info("UserController.getUserInfo.dto:{}", JSON.toJSONString(authUserDTO));
}
Preconditions.checkArgument(!StringUtils.isBlank(authUserDTO.getUserName()), "用户名不能为空");
AuthUserBO authUserBO = AuthUserDTOConverter.INSTANCE.convertDTOToBO(authUserDTO);
AuthUserBO userInfo = authUserDomainService.getUserInfo(authUserBO);
return Result.ok(AuthUserDTOConverter.INSTANCE.convertBOToDTO(userInfo));
} catch (Exception e) {
log.error("UserController.update.error:{}", e.getMessage(), e);
return Result.fail("获取用户信息失败");
}
}
/**
* 用户退出
*/
@RequestMapping("logOut")
public Result logOut(@RequestParam String userName) {
try {
log.info("UserController.logOut.userName:{}", userName);
Preconditions.checkArgument(!StringUtils.isBlank(userName), "用户名不能为空");
StpUtil.logout(userName);
return Result.ok();
} catch (Exception e) {
log.error("UserController.logOut.error:{}", e.getMessage(), e);
return Result.fail("用户登出失败");
}
}
/**
* 删除用户
*/
......@@ -105,9 +141,9 @@ public class UserController {
@RequestMapping("doLogin")
public Result<SaTokenInfo> doLogin(@RequestParam("validCode") String validCode) {
try {
Preconditions.checkArgument(!StringUtils.isBlank(validCode),"验证码不能为空!");
Preconditions.checkArgument(!StringUtils.isBlank(validCode), "验证码不能为空!");
return Result.ok(authUserDomainService.doLogin(validCode));
}catch (Exception e){
} catch (Exception e) {
log.error("UserController.doLogin.error:{}", e.getMessage(), e);
return Result.fail("用户登录失败");
}
......@@ -119,6 +155,5 @@ public class UserController {
return "当前会话是否登录:" + StpUtil.isLogin();
}
}
......@@ -14,8 +14,11 @@ import java.util.List;
@Mapper
public interface AuthUserDTOConverter {
AuthUserDTOConverter INSTANCE = Mappers.getMapper(AuthUserDTOConverter.class);
AuthUserBO convertDTOToBO(AuthUserDTO authUserDTO);
AuthUserDTO convertBOToDTO(AuthUserBO authUserBO);
}
......@@ -15,4 +15,7 @@ public interface AuthUserBOConverter {
AuthUser convertBOToEntity(AuthUserBO authUserBO);
AuthUserBO convertEntityToBO(AuthUser authUser);
}
......@@ -9,7 +9,6 @@ import java.util.List;
* 用户领域service
*/
public interface AuthUserDomainService {
/**
* 注册
*/
......@@ -26,4 +25,7 @@ public interface AuthUserDomainService {
Boolean delete(AuthUserBO authUserBO);
SaTokenInfo doLogin(String validCode);
AuthUserBO getUserInfo(AuthUserBO authUserBO);
}
......@@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.LinkedList;
......@@ -55,11 +56,17 @@ public class AuthUserDomainServiceImpl implements AuthUserDomainService {
private static final String LOGIN_PREFIX = "loginCode";
@Override
@SneakyThrows
@Transactional(rollbackFor = Exception.class)
public Boolean register(AuthUserBO authUserBO) {
//校验用户是否存在
AuthUser existAuthUser = new AuthUser();
existAuthUser.setUserName(authUserBO.getUserName());
List<AuthUser> existUser = authUserService.queryByCondition(existAuthUser);
if (existUser.size() > 0) {
return true;
}
AuthUser authUser = AuthUserBOConverter.INSTANCE.convertBOToEntity(authUserBO);
if (StringUtils.isNotBlank(authUser.getPassword())) {
authUser.setPassword(SaSecureUtil.md5BySalt(authUser.getPassword(), salt));
......@@ -79,7 +86,7 @@ public class AuthUserDomainServiceImpl implements AuthUserDomainService {
authUserRole.setRoleId(roleId);
authUserRole.setIsDeleted(IsDeletedFlagEnum.UN_DELETED.getCode());
authUserRoleService.insert(authUserRole);
//构造Redis键,将角色列表放入
String roleKey = redisUtil.buildKey(authRolePrefix, authUser.getUserName());
List<AuthRole> roleList = new LinkedList<>();
roleList.add(authRole);
......@@ -100,8 +107,6 @@ public class AuthUserDomainServiceImpl implements AuthUserDomainService {
return count > 0;
}
@Override
public Boolean update(AuthUserBO authUserBO) {
AuthUser authUser = AuthUserBOConverter.INSTANCE.convertBOToEntity(authUserBO);
......@@ -119,6 +124,8 @@ public class AuthUserDomainServiceImpl implements AuthUserDomainService {
//有任何的更新,都要与缓存进行同步的修改
return count > 0;
}
@Override
public SaTokenInfo doLogin(String validCode) {
String loginKey = redisUtil.buildKey(LOGIN_PREFIX, validCode);
String openId = redisUtil.get(loginKey);
......@@ -133,5 +140,17 @@ public class AuthUserDomainServiceImpl implements AuthUserDomainService {
return tokenInfo;
}
@Override
public AuthUserBO getUserInfo(AuthUserBO authUserBO) {
AuthUser authUser = new AuthUser();
authUser.setUserName(authUserBO.getUserName());
List<AuthUser> userList = authUserService.queryByCondition(authUser);
if(CollectionUtils.isEmpty(userList)){
return new AuthUserBO();
}
AuthUser user = userList.get(0);
return AuthUserBOConverter.INSTANCE.convertEntityToBO(user);
}
}
......@@ -3,6 +3,8 @@ package com.lssst.auth.infra.basic.service;
import com.lssst.auth.infra.basic.entity.AuthUser;
import java.util.List;
/**
* (AuthUser)表服务接口
*
......@@ -43,4 +45,10 @@ public interface AuthUserService {
*/
boolean deleteById(Long id);
/**
* 根据条件查询数量
*/
List<AuthUser> queryByCondition(AuthUser authUser);
}
......@@ -7,6 +7,7 @@ import com.lssst.auth.infra.basic.service.AuthUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* (AuthUser)表服务实现类
......@@ -62,4 +63,10 @@ public class AuthUserServiceImpl implements AuthUserService {
public boolean deleteById(Long id) {
return this.authUserDao.deleteById(id) > 0;
}
@Override
public List<AuthUser> queryByCondition(AuthUser authUser) {
return this.authUserDao.queryAllByLimit(authUser);
}
}
......@@ -84,7 +84,6 @@
and is_deleted = #{isDeleted}
</if>
</where>
limit #{pageable.offset}, #{pageable.pageSize}
</select>
<!--统计总行数-->
......
......@@ -103,8 +103,6 @@
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>central</id>
......@@ -120,5 +118,23 @@
</repository>
</repositories>
<build>
<finalName>${project.artifactId}</finalName>
<!--打包成jar包时的名字-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.0.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
......@@ -22,7 +22,7 @@ public class SaTokenConfigure {
.setAuth(obj -> {
System.out.println("-------- 前端访问path:" + SaHolder.getRequest().getRequestPath());
// 登录校验 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
SaRouter.match("/auth/**", "/auth/user/doLogin", r -> StpUtil.checkRole("admin"));
// SaRouter.match("/auth/**", "/auth/user/doLogin", r -> StpUtil.checkRole("admin"));
SaRouter.match("/oss/**", r -> StpUtil.checkLogin());
SaRouter.match("/subject/subject/add", r -> StpUtil.checkPermission("subject:add"));
SaRouter.match("/subject/**", r -> StpUtil.checkLogin());
......
......@@ -11,7 +11,6 @@ import java.util.List;
* 阿里云oss适配器
*/
public class AliStorageAdapter implements StorageAdapter {
@Override
public void createBucket(String bucket) {
......@@ -48,5 +47,11 @@ public class AliStorageAdapter implements StorageAdapter {
public void deleteObject(String bucket, String objectName) {
}
@Override
public String getUrl(String bucket, String objectName) {
return null;
}
}
......@@ -65,5 +65,12 @@ public class MinioStorageAdapter implements StorageAdapter {
minioUtil.deleteObject(bucket, objectName);
}
@Override
@SneakyThrows
public String getUrl(String bucket, String objectName) {
return minioUtil.getPreviewFileUrl(bucket, objectName);
}
}
......@@ -10,7 +10,6 @@ import java.util.List;
* 文件存储适配器
*/
public interface StorageAdapter {
/**
* 创建bucket桶
*/
......@@ -46,6 +45,7 @@ public interface StorageAdapter {
*/
void deleteObject(String bucket, String objectName);
String getUrl(String bucket, String objectName);
}
......@@ -4,6 +4,7 @@ package com.lssst.oss.controller;
import com.lssst.oss.service.FileService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
......@@ -22,4 +23,19 @@ public class FileController {
return allBucket.get(0);
}
@RequestMapping("/getUrl")
public String getUrl(String bucketName, String objectName) throws Exception {
return fileService.getUrl(bucketName, objectName);
}
/**
* 上传文件
*/
@RequestMapping("/upload")
public String upload(MultipartFile uploadFile, String bucket, String objectName) throws Exception {
return fileService.uploadFile(uploadFile, bucket, objectName);
}
}
......@@ -2,6 +2,7 @@ package com.lssst.oss.service;
import com.lssst.oss.adapter.StorageAdapter;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Service
......@@ -20,5 +21,19 @@ public class FileService {
return storageAdapter.getAllBucket();
}
/**
* 获取文件路径
*/
public String getUrl(String bucketName,String objectName) {
return storageAdapter.getUrl(bucketName,objectName);
}
/**
* 上传文件
*/
public String uploadFile(MultipartFile uploadFile, String bucket, String objectName){
storageAdapter.uploadFile(uploadFile,bucket,objectName);
return storageAdapter.getUrl(bucket, objectName);
}
}
......@@ -3,6 +3,7 @@ package com.lssst.oss.util;
import com.lssst.oss.entity.FileInfo;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import org.springframework.stereotype.Component;
......@@ -21,7 +22,6 @@ import java.util.stream.Collectors;
*/
@Component
public class MinioUtil {
@Resource
private MinioClient minioClient;
......@@ -96,5 +96,15 @@ public class MinioUtil {
);
}
/**
* 获取文件url
*/
public String getPreviewFileUrl(String bucketName, String objectName) throws Exception{
GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucketName).object(objectName).build();
return minioClient.getPresignedObjectUrl(args);
}
}
......@@ -3,7 +3,9 @@ package com.lssst.subject.application.controller;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.lssst.subject.application.converter.SubjectCategoryDTOConverter;
import com.lssst.subject.application.converter.SubjectLabelDTOConverter;
import com.lssst.subject.application.dto.SubjectCategoryDTO;
import com.lssst.subject.application.dto.SubjectLabelDTO;
import com.lssst.subject.common.entity.Result;
import com.lssst.subject.domain.entity.SubjectCategoryBO;
import com.lssst.subject.domain.service.SubjectCategoryDomainServie;
......@@ -12,6 +14,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.LinkedList;
import java.util.List;
/**
......@@ -127,4 +130,32 @@ public class SubjectCategoryController {
}
/**
* 查询分类及标签一次性
*/
@PostMapping("/queryCategoryAndLabel")
public Result<List<SubjectCategoryDTO>> queryCategoryAndLabel(@RequestBody SubjectCategoryDTO subjectCategoryDTO) {
try {
if (log.isInfoEnabled()) {
log.info("SubjectCategoryController.queryCategoryAndLabel.dto:{}"
, JSON.toJSONString(subjectCategoryDTO));
}
Preconditions.checkNotNull(subjectCategoryDTO.getId(), "分类id不能为空");
SubjectCategoryBO subjectCategoryBO = SubjectCategoryDTOConverter.INSTANCE.
convertDtoToCategoryBO(subjectCategoryDTO);
List<SubjectCategoryBO> subjectCategoryBOList = subjectCategoryDomainService.queryCategoryAndLabel(subjectCategoryBO);
List<SubjectCategoryDTO> dtoList = new LinkedList<>();
subjectCategoryBOList.forEach(bo -> {
SubjectCategoryDTO dto = SubjectCategoryDTOConverter.INSTANCE.convertBoToCategoryDTO(bo);
List<SubjectLabelDTO> labelDTOList = SubjectLabelDTOConverter.INSTANCE.convertBOToLabelDTOList(bo.getLabelBOList());
dto.setLabelDTOList(labelDTOList);
dtoList.add(dto);
});
return Result.ok(dtoList);
} catch (Exception e) {
log.error("SubjectCategoryController.queryPrimaryCategory.error:{}", e.getMessage(), e);
return Result.fail("查询失败");
}
}
}
\ No newline at end of file
......@@ -26,7 +26,6 @@ import java.util.List;
@Slf4j
@RequestMapping("/subject")
public class SubjectController {
@Resource
private SubjectInfoDomainService subjectInfoDomainService;
......@@ -73,6 +72,8 @@ public class SubjectController {
Preconditions.checkNotNull(subjectInfoDTO.getCategoryId(), "分类id不能为空");
Preconditions.checkNotNull(subjectInfoDTO.getLabelId(), "标签id不能为空");
SubjectInfoBO subjectInfoBO = SubjectInfoDTOConverter.INSTANCE.convertDTOToBO(subjectInfoDTO);
subjectInfoBO.setPageNo(subjectInfoDTO.getPageNo());
subjectInfoBO.setPageSize(subjectInfoDTO.getPageSize());
PageResult<SubjectInfoBO> boPageResult = subjectInfoDomainService.getSubjectPage(subjectInfoBO);
return Result.ok(boPageResult);
} catch (Exception e) {
......@@ -101,6 +102,5 @@ public class SubjectController {
}
}
}
......@@ -18,5 +18,7 @@ public interface SubjectCategoryDTOConverter {
SubjectCategoryBO convertDtoToCategoryBO(SubjectCategoryDTO subjectCategoryDTO);
SubjectCategoryDTO convertBoToCategoryDTO(SubjectCategoryBO subjectCategoryBO);
}
......@@ -3,6 +3,7 @@ package com.lssst.subject.application.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class SubjectCategoryDTO implements Serializable {
......@@ -32,4 +33,15 @@ public class SubjectCategoryDTO implements Serializable {
*/
private Long parentId;
/**
* 数量
*/
private Integer count;
/**
* 标签信息
*/
private List<SubjectLabelDTO> labelDTOList;
}
package com.lssst.subject.application.dto;
import com.lssst.subject.common.entity.PageInfo;
import lombok.Data;
import java.io.Serializable;
......@@ -11,7 +12,7 @@ import java.util.List;
* 题目dto
*/
@Data
public class SubjectInfoDTO implements Serializable {
public class SubjectInfoDTO extends PageInfo implements Serializable {
/**
* 主键
......
package com.lssst.subject.common.entity;
import lombok.Data;
/**
* 分页请求实体
*/
@Data
public class PageInfo {
private Integer pageNo = 1;
......
......@@ -3,6 +3,7 @@ package com.lssst.subject.domain.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 题目分类(SubjectCategory)实体类
......@@ -35,5 +36,16 @@ public class SubjectCategoryBO implements Serializable {
*/
private Long parentId;
/**
* 数量
*/
private Integer count;
/**
* 标签bo数量
*/
private List<SubjectLabelBO> labelBOList;
}
......@@ -26,6 +26,12 @@ public interface SubjectCategoryDomainServie {
*/
Boolean delete(SubjectCategoryBO subjectCategoryBO);
/**
* 查询分类及标签
*/
List<SubjectCategoryBO> queryCategoryAndLabel(SubjectCategoryBO subjectCategoryBO);
......
......@@ -4,23 +4,36 @@ import com.alibaba.fastjson.JSON;
import com.lssst.subject.common.enums.IsDeletedFlagEnum;
import com.lssst.subject.domain.convert.SubjectCategoryConverter;
import com.lssst.subject.domain.entity.SubjectCategoryBO;
import com.lssst.subject.domain.entity.SubjectLabelBO;
import com.lssst.subject.domain.service.SubjectCategoryDomainServie;
import com.lssst.subject.infra.basic.entity.SubjectCategory;
import com.lssst.subject.infra.basic.entity.SubjectLabel;
import com.lssst.subject.infra.basic.entity.SubjectMapping;
import com.lssst.subject.infra.basic.service.SubjectCategoryService;
import com.lssst.subject.infra.basic.service.SubjectLabelService;
import com.lssst.subject.infra.basic.service.SubjectMappingService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
public class SubjectCategoryDomainServiceImpl implements SubjectCategoryDomainServie {
@Resource
private SubjectCategoryService subjectCategoryService;
@Resource
private SubjectMappingService subjectMappingService;
@Resource
private SubjectCategoryService subjectCategoryService;
private SubjectLabelService subjectLabelService;
@Override
public void add(SubjectCategoryBO subjectCategoryBO) {
if (log.isInfoEnabled()) {
log.info("SubjectCategoryController.add.bo:{}", JSON.toJSONString(subjectCategoryBO));
......@@ -31,6 +44,7 @@ public class SubjectCategoryDomainServiceImpl implements SubjectCategoryDomainSe
subjectCategoryService.insert(subjectCategory);
}
@Override
public List<SubjectCategoryBO> queryCategory(SubjectCategoryBO subjectCategoryBO) {
SubjectCategory subjectCategory = SubjectCategoryConverter.INSTANCE
.convertBoToCategory(subjectCategoryBO);
......@@ -42,9 +56,14 @@ public class SubjectCategoryDomainServiceImpl implements SubjectCategoryDomainSe
log.info("SubjectCategoryController.queryPrimaryCategory.boList:{}",
JSON.toJSONString(boList));
}
boList.forEach(bo -> {
Integer subjectCount = subjectCategoryService.querySubjectCount(bo.getId());
bo.setCount(subjectCount);
});
return boList;
}
@Override
public Boolean update(SubjectCategoryBO subjectCategoryBO) {
SubjectCategory subjectCategory = SubjectCategoryConverter.INSTANCE
.convertBoToCategory(subjectCategoryBO);
......@@ -52,6 +71,7 @@ public class SubjectCategoryDomainServiceImpl implements SubjectCategoryDomainSe
return count > 0;
}
@Override
public Boolean delete(SubjectCategoryBO subjectCategoryBO) {
SubjectCategory subjectCategory = SubjectCategoryConverter.INSTANCE
.convertBoToCategory(subjectCategoryBO);
......@@ -60,4 +80,42 @@ public class SubjectCategoryDomainServiceImpl implements SubjectCategoryDomainSe
return count > 0;
}
@Override
public List<SubjectCategoryBO> queryCategoryAndLabel(SubjectCategoryBO subjectCategoryBO) {
//查询当前大类下所有分类
SubjectCategory subjectCategory = new SubjectCategory();
subjectCategory.setParentId(subjectCategoryBO.getId());
subjectCategory.setIsDeleted(IsDeletedFlagEnum.UN_DELETED.getCode());
List<SubjectCategory> subjectCategoryList = subjectCategoryService.queryCategory(subjectCategory);
if (log.isInfoEnabled()) {
log.info("SubjectCategoryController.queryCategoryAndLabel.subjectCategoryList:{}",
JSON.toJSONString(subjectCategoryList));
}
List<SubjectCategoryBO> categoryBOList = SubjectCategoryConverter.INSTANCE.convertBoToCategory(subjectCategoryList);
//一次获取标签信息
categoryBOList.forEach(category -> {
SubjectMapping subjectMapping = new SubjectMapping();
subjectMapping.setCategoryId(category.getId());
List<SubjectMapping> mappingList = subjectMappingService.queryLabelId(subjectMapping);
if (CollectionUtils.isEmpty(mappingList)) {
return;
}
List<Long> labelIdList = mappingList.stream().map(SubjectMapping::getLabelId).collect(Collectors.toList());
List<SubjectLabel> labelList = subjectLabelService.batchQueryById(labelIdList);
List<SubjectLabelBO> labelBOList = new LinkedList<>();
labelList.forEach(label -> {
SubjectLabelBO subjectLabelBO = new SubjectLabelBO();
subjectLabelBO.setId(label.getId());
subjectLabelBO.setLabelName(label.getLabelName());
subjectLabelBO.setCategoryId(label.getCategoryId());
subjectLabelBO.setSortNum(label.getSortNum());
labelBOList.add(subjectLabelBO);
});
category.setLabelBOList(labelBOList);
});
return categoryBOList;
}
}
\ No newline at end of file
......@@ -10,7 +10,6 @@ import java.util.List;
*/
public interface SubjectCategoryDao {
/**
* 通过ID查询单条数据
*
......@@ -70,5 +69,6 @@ public interface SubjectCategoryDao {
List<SubjectCategory> queryCategory(SubjectCategory subjectCategory);
Integer querySubjectCount(Long id);
}
......@@ -37,4 +37,6 @@ public interface SubjectCategoryService {
List<SubjectCategory> queryCategory(SubjectCategory subjectCategory);
Integer querySubjectCount(Long id);
}
......@@ -16,6 +16,7 @@ import java.util.List;
@Service("subjectCategoryService")
@Slf4j
public class SubjectCategoryServiceImpl implements SubjectCategoryService {
@Resource
private SubjectCategoryDao subjectCategoryDao;
......@@ -68,5 +69,9 @@ public class SubjectCategoryServiceImpl implements SubjectCategoryService {
return this.subjectCategoryDao.queryCategory(subjectCategory);
}
@Override
public Integer querySubjectCount(Long id) {
return this.subjectCategoryDao.querySubjectCount(id);
}
}
......@@ -137,6 +137,14 @@
</where>
</select>
<select id="querySubjectCount" resultType="java.lang.Integer">
select count(distinct subject_id)
from subject_mapping a,
subject_label b
where a.label_id = b.id
and b.category_id = #{id}
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into subject_category(category_name, category_type, image_url, parent_id, created_by, created_time,
......@@ -217,3 +225,4 @@
</delete>
</mapper>
......@@ -103,5 +103,24 @@
</repository>
</repositories>
<build>
<finalName>${project.artifactId}</finalName>
<!--打包成jar包时的名字-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.0.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file