This commit is contained in:
commit
00b0ff49d1
8
pom.xml
8
pom.xml
|
@ -177,6 +177,14 @@
|
|||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>9</source>
|
||||
<target>9</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
<resources>
|
||||
|
|
|
@ -23,22 +23,22 @@ public class PermissionList {
|
|||
permissionList.add(new PermissionVO("info:get_header_image", "获取头部图片"));
|
||||
permissionList.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
|
||||
permissionList.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
|
||||
permissionPrincipal.add(new PermissionVO("project:child:add", "增加子系统"));
|
||||
permissionPrincipal.add(new PermissionVO("project:module:add", "增加子模块"));
|
||||
permissionList.add(new PermissionVO("project:child_add", "增加子系统"));
|
||||
permissionList.add(new PermissionVO("project:module_add", "增加子模块"));
|
||||
|
||||
permissionPrincipal.add(new PermissionVO("auth:change_password", "修改密码"));
|
||||
permissionPrincipal.add(new PermissionVO("info:get_header_image", "获取头部图片"));
|
||||
permissionPrincipal.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
|
||||
permissionPrincipal.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
|
||||
permissionPrincipal.add(new PermissionVO("project:add", "增加项目"));
|
||||
permissionPrincipal.add(new PermissionVO("project:child:add", "增加子系统"));
|
||||
permissionPrincipal.add(new PermissionVO("project:module:add", "增加子模块"));
|
||||
permissionPrincipal.add(new PermissionVO("project:child_add", "增加子系统"));
|
||||
permissionPrincipal.add(new PermissionVO("project:module_add", "增加子模块"));
|
||||
|
||||
permissionDeveloper.add(new PermissionVO("auth:change_password", "修改密码"));
|
||||
permissionDeveloper.add(new PermissionVO("info:get_header_image", "获取头部图片"));
|
||||
permissionDeveloper.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
|
||||
permissionDeveloper.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
|
||||
permissionPrincipal.add(new PermissionVO("project:child:add", "增加子系统"));
|
||||
permissionPrincipal.add(new PermissionVO("project:module:add", "增加子模块"));
|
||||
permissionDeveloper.add(new PermissionVO("project:child_add", "增加子系统"));
|
||||
permissionDeveloper.add(new PermissionVO("project:module_add", "增加子模块"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.annotations.NeedPermission;
|
||||
import com.jsl.oa.model.vodata.ProjectChildAddVO;
|
||||
import com.jsl.oa.model.vodata.ProjectEditVO;
|
||||
import com.jsl.oa.model.vodata.ProjectInfoVO;
|
||||
import com.jsl.oa.model.vodata.ProjectChildAddVO;
|
||||
import com.jsl.oa.model.vodata.ProjectModuleAddVO;
|
||||
import com.jsl.oa.model.vodata.business.info.ProjectShowVO;
|
||||
import com.jsl.oa.services.ProjectService;
|
||||
|
@ -227,7 +227,7 @@ public class ProjectController {
|
|||
* @return
|
||||
*/
|
||||
@PostMapping("/project/module/add")
|
||||
@NeedPermission("project:module:add")
|
||||
@NeedPermission("project:module_add")
|
||||
public BaseResponse projectModuleAdd(
|
||||
@RequestBody @Validated ProjectModuleAddVO projectModuleAddVO,
|
||||
@NotNull BindingResult bindingResult,
|
||||
|
@ -248,7 +248,7 @@ public class ProjectController {
|
|||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PostMapping("/project/child/add")
|
||||
@NeedPermission("project:child:add")
|
||||
@NeedPermission("project:child_add")
|
||||
public BaseResponse projectChildAdd(
|
||||
HttpServletRequest request,
|
||||
@RequestBody @Validated ProjectChildAddVO projectChildAddVO,
|
||||
|
|
|
@ -16,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -54,10 +55,23 @@ public class ProjectDailyController {
|
|||
|
||||
|
||||
@GetMapping("/daily/getMyDaily")
|
||||
public BaseResponse getMyDaily(HttpServletRequest request) {
|
||||
return projectDailyService.getMyDaily(request);
|
||||
public BaseResponse getMyDaily(@RequestParam Integer page,
|
||||
@RequestParam Integer pageSize,
|
||||
HttpServletRequest request) {
|
||||
return projectDailyService.getMyDaily(page, pageSize, request);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/daily/search")
|
||||
public BaseResponse searchMyDaily(@RequestParam Integer page,
|
||||
@RequestParam Integer pageSize,
|
||||
Date beginTime,
|
||||
Date endTime,
|
||||
HttpServletRequest request) {
|
||||
return projectDailyService.searchMyDaily(page, pageSize, beginTime, endTime, request);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
|
@ -35,14 +36,17 @@ public class ProjectDailyDO {
|
|||
/**
|
||||
* 日志发布时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date dailyTime;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createdAt;
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date updatedAt;
|
||||
/**
|
||||
* 是否删除
|
||||
|
|
|
@ -27,7 +27,7 @@ public class ReviewDO {
|
|||
//申请理由
|
||||
private String content;
|
||||
//申请者用户id
|
||||
private Long senderId;
|
||||
private Integer senderId;
|
||||
//审核者用户id
|
||||
private Long recipientId;
|
||||
//审核类别(0:子系统;1:子模块)
|
||||
|
|
|
@ -1,21 +1,27 @@
|
|||
package com.jsl.oa.model.vodata;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Data
|
||||
public class ProjectDailyAddVO {
|
||||
|
||||
@NotNull(message = "项目id不能为空")
|
||||
private Long projectId;
|
||||
private Integer projectId;
|
||||
|
||||
@NotBlank(message = "日报内容不能为空")
|
||||
private String content;
|
||||
|
||||
@NotNull(message = "工作时间不能为空")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date dailyTime;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ProjectDailyDataVO {
|
||||
|
||||
private Integer totalCount;
|
||||
|
||||
private Integer currentPage;
|
||||
|
||||
private Integer pageSize;
|
||||
|
||||
private List<ProjectDailyVO> list;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1,16 +1,38 @@
|
|||
package com.jsl.oa.model.vodata;
|
||||
/*
|
||||
张睿相 Java
|
||||
*/
|
||||
|
||||
/**
|
||||
* 总体描述
|
||||
* <p>创建时间:2024/4/18 13:50</p>
|
||||
*
|
||||
* @author 张睿相
|
||||
* @since v1.0
|
||||
*/
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProjectDailyVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long userId;
|
||||
|
||||
private String userName;
|
||||
|
||||
private Long projectId;
|
||||
|
||||
private String projectName;
|
||||
|
||||
private String content;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date dailyTime;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createdAt;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date updatedAt;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -17,12 +17,12 @@ public class ReviewAddVO {
|
|||
private String content;
|
||||
//申请的项目id
|
||||
@NotNull(message = "项目id不能为空")
|
||||
private Long projectId;
|
||||
private Integer projectId;
|
||||
//申请的子系统id
|
||||
@NotNull(message = "子系统id不能为空")
|
||||
private Long projectChildId;
|
||||
private Integer projectChildId;
|
||||
//申请的子模块id
|
||||
private Long projectModuleId;
|
||||
private Integer projectModuleId;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import com.jsl.oa.model.vodata.ProjectDailyAddVO;
|
|||
import com.jsl.oa.utils.BaseResponse;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -20,7 +20,13 @@ public interface ProjectDailyService {
|
|||
|
||||
BaseResponse addDaily(ProjectDailyAddVO projectDailyAddVO, HttpServletRequest request);
|
||||
|
||||
BaseResponse getMyDaily(HttpServletRequest request);
|
||||
BaseResponse getMyDaily(Integer page, Integer pageSize, HttpServletRequest request);
|
||||
|
||||
BaseResponse searchMyDaily(Integer page,
|
||||
Integer pageSize,
|
||||
Date beginTime,
|
||||
Date endTime,
|
||||
HttpServletRequest request);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -5,9 +5,11 @@ package com.jsl.oa.services.impl;
|
|||
|
||||
import com.jsl.oa.dao.ProjectDAO;
|
||||
import com.jsl.oa.dao.ProjectDailyDAO;
|
||||
import com.jsl.oa.exception.BusinessException;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
import com.jsl.oa.model.dodata.ProjectDailyDO;
|
||||
import com.jsl.oa.model.vodata.ProjectDailyAddVO;
|
||||
import com.jsl.oa.model.vodata.ProjectDailyDataVO;
|
||||
import com.jsl.oa.model.vodata.ProjectDailyVO;
|
||||
import com.jsl.oa.services.ProjectDailyService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
|
@ -18,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -37,7 +40,7 @@ import java.util.List;
|
|||
public class ProjectDailyServiceImpl implements ProjectDailyService {
|
||||
|
||||
private final ProjectDAO projectDAO;
|
||||
|
||||
private final UserDAO userDAO;
|
||||
private final ProjectDailyDAO projectDailyDAO;
|
||||
|
||||
|
||||
|
@ -47,17 +50,17 @@ public class ProjectDailyServiceImpl implements ProjectDailyService {
|
|||
// 获取用户id
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
// 从请求体中获取项目id
|
||||
Long projectId = projectDailyAddVO.getProjectId();
|
||||
Integer projectId = projectDailyAddVO.getProjectId();
|
||||
// 检查项目是否存在
|
||||
if (!projectDAO.isExistProjectById(projectId)) {
|
||||
throw new BusinessException(ErrorCode.PROJECT_NOT_EXIST);
|
||||
if (!projectDAO.isExistProjectById(Long.valueOf(projectId))) {
|
||||
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
|
||||
}
|
||||
|
||||
// 赋值数据库表实体类相关属性
|
||||
ProjectDailyDO projectDailyDO = new ProjectDailyDO();
|
||||
Processing.copyProperties(projectDailyAddVO, projectDailyDO);
|
||||
projectDailyDO.setUserId(userId)
|
||||
.setDailyTime(new Date());
|
||||
projectDailyDO.setUserId(userId);
|
||||
|
||||
|
||||
// 向数据库添加数据
|
||||
projectDailyDAO.addProjectDaily(projectDailyDO);
|
||||
|
@ -65,19 +68,62 @@ public class ProjectDailyServiceImpl implements ProjectDailyService {
|
|||
return ResultUtil.success();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BaseResponse getMyDaily(HttpServletRequest request) {
|
||||
public BaseResponse getMyDaily(Integer page, Integer pageSize, HttpServletRequest request) {
|
||||
|
||||
// 获取用户id
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
// 获取 我发布的及自己负责的项目下 的日报
|
||||
List<ProjectDailyDO> projectDailyDOList =
|
||||
projectDailyDAO.getMyProjectDaily(userId);
|
||||
// 进行分页
|
||||
List<ProjectDailyDO> dailyPage = Processing.getPage(projectDailyDOList, page, pageSize);
|
||||
// 封装结果类
|
||||
List<ProjectDailyVO> projectDailyVOS = encapsulateArrayClass(dailyPage);
|
||||
ProjectDailyDataVO projectDailyDataVO =
|
||||
new ProjectDailyDataVO(projectDailyDOList.size(), page, pageSize, projectDailyVOS);
|
||||
|
||||
return ResultUtil.success(projectDailyDOList);
|
||||
|
||||
return ResultUtil.success(projectDailyDataVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse searchMyDaily(Integer page,
|
||||
Integer pageSize,
|
||||
Date beginTime,
|
||||
Date endTime,
|
||||
HttpServletRequest request) {
|
||||
// 获取用户id
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
// 获取 我发布的及自己负责的项目下 的日报
|
||||
List<ProjectDailyDO> projectDailyDOList =
|
||||
projectDailyDAO.getMyProjectDaily(userId);
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public List<ProjectDailyVO> encapsulateArrayClass(List<ProjectDailyDO>
|
||||
projectDailyDOList) {
|
||||
// 定义封装结果数组
|
||||
List<ProjectDailyVO> projectDailyVOS = new ArrayList<>();
|
||||
// 遍历原始数据,依次封装
|
||||
for (ProjectDailyDO projectDailyDO : projectDailyDOList) {
|
||||
// 定义一个封装结果类
|
||||
ProjectDailyVO projectDailyVO = new ProjectDailyVO();
|
||||
// 复制相同的属性值
|
||||
Processing.copyProperties(projectDailyDO, projectDailyVO);
|
||||
// 赋值其他需查询的属性
|
||||
projectDailyVO.setProjectName(
|
||||
projectDAO.getProjectById(projectDailyVO.getProjectId()).getName())
|
||||
.setUserName(userDAO.getUserById(projectDailyDO.getUserId()).getNickname());
|
||||
// 向 结果封装类数组 添加对应 日报封装类
|
||||
projectDailyVOS.add(projectDailyVO);
|
||||
}
|
||||
|
||||
return projectDailyVOS;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import com.jsl.oa.common.constant.ReviewConstants;
|
|||
import com.jsl.oa.dao.ProjectDAO;
|
||||
import com.jsl.oa.dao.ReviewDAO;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
import com.jsl.oa.exception.BusinessException;
|
||||
import com.jsl.oa.mapper.ProjectMapper;
|
||||
import com.jsl.oa.mapper.UserMapper;
|
||||
import com.jsl.oa.model.dodata.ProjectChildDO;
|
||||
|
@ -190,23 +189,23 @@ public class ReviewServiceImpl implements ReviewService {
|
|||
public BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request) {
|
||||
|
||||
//获取用户
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
Integer userId = Math.toIntExact(Processing.getAuthHeaderToUserId(request));
|
||||
|
||||
//检查对应项目,子系统,子模块是否存在
|
||||
if (!projectDAO.isExistProjectById(reviewAddVO.getProjectId())) {
|
||||
throw new BusinessException(ErrorCode.PROJECT_NOT_EXIST);
|
||||
if (!projectDAO.isExistProjectById(Long.valueOf(reviewAddVO.getProjectId()))) {
|
||||
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
|
||||
}
|
||||
|
||||
if (projectMapper.getProjectChildById(
|
||||
Math.toIntExact(reviewAddVO.getProjectChildId())) != null) {
|
||||
throw new BusinessException(ErrorCode.PROJECT_CHILD_NOT_EXIST);
|
||||
Math.toIntExact(reviewAddVO.getProjectChildId())) == null) {
|
||||
return ResultUtil.error(ErrorCode.PROJECT_CHILD_NOT_EXIST);
|
||||
}
|
||||
|
||||
// 子模块id不为空时查询,否则直接跳过
|
||||
if (reviewAddVO.getProjectModuleId() != null) {
|
||||
if (projectMapper.getModuleById(
|
||||
Math.toIntExact(reviewAddVO.getProjectModuleId())) != null) {
|
||||
throw new BusinessException(ErrorCode.MODULE_NOT_EXIST);
|
||||
Math.toIntExact(reviewAddVO.getProjectModuleId())) == null) {
|
||||
return ResultUtil.error(ErrorCode.MODULE_NOT_EXIST);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -370,7 +369,7 @@ public class ReviewServiceImpl implements ReviewService {
|
|||
Processing.copyProperties(reviewDO, reviewVO);
|
||||
// 赋值其他非空属性
|
||||
reviewVO.setCategory(Processing.turnReviewCategory(reviewDO.getCategory()))
|
||||
.setSenderName(userMapper.getUserById(reviewDO.getSenderId()).getNickname())
|
||||
.setSenderName(userMapper.getUserById(Long.valueOf(reviewDO.getSenderId())).getNickname())
|
||||
.setProjectName(projectDAO.getProjectById(reviewDO.getProjectId()).getName())
|
||||
.setProjectChildName(projectMapper.getProjectChildById(
|
||||
Math.toIntExact(reviewDO.getProjectChildId())).getName())
|
||||
|
@ -466,8 +465,10 @@ public class ReviewServiceImpl implements ReviewService {
|
|||
int total = allReviews.size();
|
||||
int startIndex = (page - 1) * pageSize;
|
||||
int endIndex = Math.min(startIndex + pageSize, total);
|
||||
List<ReviewVO> reviewsOnPage = allReviews.subList(startIndex, endIndex);
|
||||
|
||||
List<ReviewVO> reviewsOnPage = new ArrayList<>();
|
||||
if (startIndex <= allReviews.size()) {
|
||||
reviewsOnPage = allReviews.subList(startIndex, endIndex);
|
||||
}
|
||||
reviewDataVO.setReviews(reviewsOnPage);
|
||||
reviewDataVO.setTotalCount(allReviews.size());
|
||||
reviewDataVO.setPageSize(pageSize);
|
||||
|
@ -475,6 +476,8 @@ public class ReviewServiceImpl implements ReviewService {
|
|||
|
||||
return reviewDataVO;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -394,4 +394,19 @@ public class Processing {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Description: list分页方法
|
||||
* @Date: 2024/4/18
|
||||
* @Param list:
|
||||
* @Param pageNumber: 当前页码
|
||||
* @Param pageSize: 每页几条
|
||||
**/
|
||||
public static <T> List<T> getPage(List<T> list, int pageNumber, int pageSize) {
|
||||
int fromIndex = (pageNumber - 1) * pageSize;
|
||||
if (fromIndex >= list.size()) {
|
||||
return new ArrayList<>(); // 返回空列表,表示超出范围
|
||||
}
|
||||
int toIndex = Math.min(fromIndex + pageSize, list.size());
|
||||
return list.subList(fromIndex, toIndex);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
and is_delete = 0
|
||||
</select>
|
||||
|
||||
<select id="getProjectDailyByProject" parameterType="java.lang.Integer"
|
||||
<select id="getProjectDailyByProject" parameterType="java.lang.Long"
|
||||
resultType="com.jsl.oa.model.dodata.ProjectDailyDO">
|
||||
select * from oa_project_daily where user_id = #{pid}
|
||||
and is_delete = 0
|
||||
|
|
|
@ -6,16 +6,14 @@ create table oa_project_modules
|
|||
name varchar(100) not null comment '模块名称',
|
||||
principal_id bigint unsigned not null comment '模块负责人',
|
||||
description json null comment '项目描述(技术选择,描述)',
|
||||
cycle int unsigned null comment '模块周期',
|
||||
work_load int unsigned default '1' not null comment '工作量(人天)',
|
||||
complete_time datetime null comment '完成时间',
|
||||
created_at timestamp default CURRENT_TIMESTAMP not null comment '创建时间',
|
||||
updated_at timestamp null comment '更新时间',
|
||||
is_delete tinyint(1) default 0 not null comment '项目是否删除',
|
||||
dead_line timestamp not null comment '子模块的截止时间',
|
||||
status varchar(8) default 'progress' not null comment '模块状态(draft: 草稿,progress: 进行,pause: 暂停,abnormal: 异常,complete: 完成)',
|
||||
constraint oa_project_modules_oa_user_id_fk
|
||||
foreign key (principal_id) references oa_user (id)
|
||||
on update cascade
|
||||
)
|
||||
comment '模块表';
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user