This commit is contained in:
xiangZr-hhh 2024-04-18 23:11:30 +08:00
commit 2f706d5997
12 changed files with 210 additions and 61 deletions

View File

@ -23,16 +23,22 @@ public class PermissionList {
permissionList.add(new PermissionVO("info:get_header_image", "获取头部图片")); permissionList.add(new PermissionVO("info:get_header_image", "获取头部图片"));
permissionList.add(new PermissionVO("info:edit_header_image", "编辑头部图片")); permissionList.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
permissionList.add(new PermissionVO("info:delete_header_image", "删除头部图片")); permissionList.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
permissionPrincipal.add(new PermissionVO("project:child:add", "增加子系统"));
permissionPrincipal.add(new PermissionVO("project:module:add", "增加子模块"));
permissionPrincipal.add(new PermissionVO("auth:change_password", "修改密码")); permissionPrincipal.add(new PermissionVO("auth:change_password", "修改密码"));
permissionPrincipal.add(new PermissionVO("info:get_header_image", "获取头部图片")); permissionPrincipal.add(new PermissionVO("info:get_header_image", "获取头部图片"));
permissionPrincipal.add(new PermissionVO("info:edit_header_image", "编辑头部图片")); permissionPrincipal.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
permissionPrincipal.add(new PermissionVO("info:delete_header_image", "删除头部图片")); permissionPrincipal.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
permissionPrincipal.add(new PermissionVO("project:add", "增加项目")); permissionPrincipal.add(new PermissionVO("project: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("auth:change_password", "修改密码"));
permissionDeveloper.add(new PermissionVO("info:get_header_image", "获取头部图片")); permissionDeveloper.add(new PermissionVO("info:get_header_image", "获取头部图片"));
permissionDeveloper.add(new PermissionVO("info:edit_header_image", "编辑头部图片")); permissionDeveloper.add(new PermissionVO("info:edit_header_image", "编辑头部图片"));
permissionDeveloper.add(new PermissionVO("info:delete_header_image", "删除头部图片")); permissionDeveloper.add(new PermissionVO("info:delete_header_image", "删除头部图片"));
permissionPrincipal.add(new PermissionVO("project:child:add", "增加子系统"));
permissionPrincipal.add(new PermissionVO("project:module:add", "增加子模块"));
} }
} }

View File

@ -3,7 +3,8 @@ package com.jsl.oa.controllers;
import com.jsl.oa.annotations.NeedPermission; import com.jsl.oa.annotations.NeedPermission;
import com.jsl.oa.model.vodata.ProjectEditVO; import com.jsl.oa.model.vodata.ProjectEditVO;
import com.jsl.oa.model.vodata.ProjectInfoVO; import com.jsl.oa.model.vodata.ProjectInfoVO;
import com.jsl.oa.model.vodata.ProjectWorkVO; 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.model.vodata.business.info.ProjectShowVO;
import com.jsl.oa.services.ProjectService; import com.jsl.oa.services.ProjectService;
import com.jsl.oa.utils.BaseResponse; import com.jsl.oa.utils.BaseResponse;
@ -217,25 +218,47 @@ public BaseResponse projectParticipateGet(
} }
/**
* 增加子模块
*
* @param projectModuleAddVO
* @param bindingResult
* @param request
* @return
*/
@PostMapping("/project/module/add")
@NeedPermission("project:module:add")
public BaseResponse projectModuleAdd(
@RequestBody @Validated ProjectModuleAddVO projectModuleAddVO,
@NotNull BindingResult bindingResult,
HttpServletRequest request
) {
// 判断是否有参数错误
if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
}
return projectService.projectModuleAdd(request, projectModuleAddVO);
}
/** /**
* 子系统子模块的增加 * 子系统的增加
* *
* @param request 请求 * @param request 请求
* @param bindingResult 参数校验 * @param bindingResult 参数校验
* @return {@link BaseResponse} * @return {@link BaseResponse}
*/ */
@PostMapping("/project/work/add") @PostMapping("/project/child/add")
public BaseResponse projectWorkAdd( @NeedPermission("project:child:add")
public BaseResponse projectChildAdd(
HttpServletRequest request, HttpServletRequest request,
@RequestBody @Validated ProjectWorkVO projectWorkVO, @RequestBody @Validated ProjectChildAddVO projectChildAddVO,
@NotNull BindingResult bindingResult @NotNull BindingResult bindingResult
) { ) {
// 判断是否有参数错误 // 判断是否有参数错误
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult)); return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
} }
return projectService.projectWorkAdd(request, projectWorkVO); return projectService.projectChildAdd(request, projectChildAddVO);
} }
@ -262,6 +285,9 @@ public BaseResponse projectParticipateGet(
return projectService.projectAdd(request, projectInfoVO); return projectService.projectAdd(request, projectInfoVO);
} }
/** /**
* 获取负责人id * 获取负责人id
* *
@ -323,7 +349,13 @@ public BaseResponse projectParticipateGet(
return projectService.projectModuleDelete(request, id); return projectService.projectModuleDelete(request, id);
} }
/**
* 项目名模糊查询项目
*
* @param name
* @param request
* @return
*/
@GetMapping("/project/get/name") @GetMapping("/project/get/name")
public BaseResponse projectGetName( public BaseResponse projectGetName(
@RequestParam String name, @RequestParam String name,
@ -332,4 +364,28 @@ public BaseResponse projectParticipateGet(
return projectService.projectGetName(name, request); return projectService.projectGetName(name, request);
} }
/**
* 项目名查询子系统
*
* @param name
* @param request
* @return
*/
@GetMapping("/project/child/get/name")
public BaseResponse projectChildGetName(
@RequestParam String name,
HttpServletRequest request
) {
return projectService.projectChildGetName(name, request);
}
@GetMapping("/project/module/get/name")
public BaseResponse projectModuleGetName(
@RequestParam String projectName,
@RequestParam String childName,
HttpServletRequest request
) {
return projectService.projectModuleGetName(projectName, childName, request);
}
} }

View File

@ -7,7 +7,7 @@ import com.jsl.oa.model.dodata.ProjectModuleDO;
import com.jsl.oa.model.dodata.info.ProjectShowDO; import com.jsl.oa.model.dodata.info.ProjectShowDO;
import com.jsl.oa.model.vodata.ProjectEditVO; import com.jsl.oa.model.vodata.ProjectEditVO;
import com.jsl.oa.model.vodata.ProjectInfoVO; import com.jsl.oa.model.vodata.ProjectInfoVO;
import com.jsl.oa.model.vodata.ProjectWorkVO; import com.jsl.oa.model.vodata.ProjectChildAddVO;
import com.jsl.oa.utils.Processing; import com.jsl.oa.utils.Processing;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -35,10 +35,10 @@ public class ProjectDAO {
projectMapper.projectAdd(projectAdd); projectMapper.projectAdd(projectAdd);
} }
public void projectWorkAdd(ProjectWorkVO projectWorkVO) { public void projectWorkAdd(ProjectChildAddVO projectChildAddVO) {
log.info("\t> 执行 DAO 层 ProjectDAO.projectWorkAdd 方法"); log.info("\t> 执行 DAO 层 ProjectDAO.projectWorkAdd 方法");
log.info("\t\t> 从 MySQL 获取数据"); log.info("\t\t> 从 MySQL 获取数据");
projectMapper.projectWorkAdd(projectWorkVO); projectMapper.projectWorkAdd(projectChildAddVO);
} }
public ProjectDO projectEdit(@NotNull ProjectEditVO projectEdit, Long projectId) { public ProjectDO projectEdit(@NotNull ProjectEditVO projectEdit, Long projectId) {

View File

@ -3,8 +3,9 @@ import com.jsl.oa.model.dodata.ProjectChildDO;
import com.jsl.oa.model.dodata.ProjectDO; import com.jsl.oa.model.dodata.ProjectDO;
import com.jsl.oa.model.dodata.ProjectModuleDO; import com.jsl.oa.model.dodata.ProjectModuleDO;
import com.jsl.oa.model.vodata.ProjectInfoVO; import com.jsl.oa.model.vodata.ProjectInfoVO;
import com.jsl.oa.model.vodata.ProjectModuleAddVO;
import com.jsl.oa.model.vodata.ProjectWorkSimpleVO; import com.jsl.oa.model.vodata.ProjectWorkSimpleVO;
import com.jsl.oa.model.vodata.ProjectWorkVO; import com.jsl.oa.model.vodata.ProjectChildAddVO;
import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
@ -23,11 +24,17 @@ public interface ProjectMapper {
+ ",#{completeTime},#{deadLine},#{status},#{tags},#{workLoad})") + ",#{completeTime},#{deadLine},#{status},#{tags},#{workLoad})")
void projectAdd(ProjectInfoVO projectAdd); void projectAdd(ProjectInfoVO projectAdd);
@Insert("insert into organize_oa.oa_project_work (project_id, pid, name, principal_id," @Insert("insert into organize_oa.oa_project_child (project_id,name, principal_id,"
+ " work_load, description, cycle, complete_time, type, is_finish,status) " + " work_load, description, cycle,status,dead_line) "
+ "value (#{projectId},#{pid},#{name},#{principalId},#{workLoad}," + "value (#{projectId},#{name},#{principalId},#{workLoad},"
+ "#{description},#{cycle},#{completeTime},#{type},#{isFinish},#{status})") + "#{description},#{cycle},#{status},#{deadLine})")
void projectWorkAdd(ProjectWorkVO projectWorkVO); void projectWorkAdd(ProjectChildAddVO projectChildAddVO);
@Insert("insert into organize_oa.oa_project_modules (project_child_id, name, principal_id,"
+ " work_load, description, status, dead_line) "
+ "value (#{projectChildId},#{name},#{principalId},#{workLoad},"
+ "#{description},#{status},#{deadLine})")
void projectModuleAdd(ProjectModuleAddVO projectModuleAddVO);
void projectEdit(ProjectDO projectEdit); void projectEdit(ProjectDO projectEdit);
@ -150,4 +157,14 @@ public interface ProjectMapper {
@Select("select * from organize_oa.oa_project where name like CONCAT('%',#{name},'%')") @Select("select * from organize_oa.oa_project where name like CONCAT('%',#{name},'%')")
List<ProjectDO> getByLikeName(String name); List<ProjectDO> getByLikeName(String name);
@Select("select * from organize_oa.oa_project_child where project_id = "
+ "(select id from organize_oa.oa_project where name =#{name})")
List<ProjectChildDO> getChildByLikeName(String name);
@Select("select * from organize_oa.oa_project_modules where project_child_id = "
+ "(select id from organize_oa.oa_project_child where name =#{childName} "
+ "and project_id = (select id from organize_oa.oa_project where name =#{projectName}))")
List<ProjectModuleDO> getModuleByName(String projectName, String childName);
} }

View File

@ -2,13 +2,17 @@ package com.jsl.oa.model.vodata;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class PermissionContentVO { public class PermissionContentVO {
// 主键
private Long id; private Long id;
// 权限名称
private String name; private String name;
// 权限描述 private String code;
private String description; private Short type;
private List<PermissionContentVO> children;
} }

View File

@ -6,24 +6,21 @@ import javax.validation.constraints.NotNull;
import java.sql.Timestamp; import java.sql.Timestamp;
@Data @Data
public class ProjectWorkVO { public class ProjectChildAddVO {
private Long pid;
@NotNull(message = "项目id不能为空") @NotNull(message = "项目id不能为空")
private Long projectId; private Long projectId;
private Long principalId; private Long principalId;
@NotNull(message = "周期不能为空") @NotNull(message = "周期不能为空")
private Integer cycle; private Integer cycle;
@NotNull(message = "工作量不能为空")
private Integer workLoad; private Integer workLoad;
@NotNull(message = "类型不能为空")
private Integer type;
@NotNull(message = "名字不能为空") @NotNull(message = "名字不能为空")
private String name; private String name;
private String description; private String description;
private Integer isDelete; private String status;
private Integer isFinish; @NotNull(message = "截止时间不能为空")
private Integer status; private Timestamp deadLine;
private Timestamp beginTime;
private Timestamp completeTime;
} }

View File

@ -0,0 +1,25 @@
package com.jsl.oa.model.vodata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProjectModuleAddVO {
@NotNull(message = "子系统id不能为空")
private Long projectChildId;
private Long principalId;
@NotNull(message = "工作量不能为空")
private Integer workLoad;
@NotNull(message = "名字不能为空")
private String name;
private String description;
private String status;
@NotNull(message = "截止时间不能为空")
private Timestamp deadLine;
}

View File

@ -1,17 +1,16 @@
package com.jsl.oa.model.vodata; package com.jsl.oa.model.vodata;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
/** /**
* 模糊查询返回系统/项目/模块 名字和id * 模糊查询返回系统/项目/模块 名字和id

View File

@ -2,7 +2,8 @@ package com.jsl.oa.services;
import com.jsl.oa.model.vodata.ProjectEditVO; import com.jsl.oa.model.vodata.ProjectEditVO;
import com.jsl.oa.model.vodata.ProjectInfoVO; import com.jsl.oa.model.vodata.ProjectInfoVO;
import com.jsl.oa.model.vodata.ProjectWorkVO; 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.model.vodata.business.info.ProjectShowVO;
import com.jsl.oa.utils.BaseResponse; import com.jsl.oa.utils.BaseResponse;
@ -35,7 +36,7 @@ public interface ProjectService {
Integer page, Integer page,
Integer pageSize); Integer pageSize);
BaseResponse projectWorkAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO); BaseResponse projectChildAdd(HttpServletRequest request, ProjectChildAddVO projectChildAddVO);
BaseResponse tGet(List<String> tags, List<String> isFinish, Integer page, Integer pageSize); BaseResponse tGet(List<String> tags, List<String> isFinish, Integer page, Integer pageSize);
@ -69,4 +70,10 @@ public interface ProjectService {
BaseResponse projectModuleDelete(HttpServletRequest request, List<Long> id); BaseResponse projectModuleDelete(HttpServletRequest request, List<Long> id);
BaseResponse projectGetName(String name, HttpServletRequest request); BaseResponse projectGetName(String name, HttpServletRequest request);
BaseResponse projectModuleAdd(HttpServletRequest request, ProjectModuleAddVO projectModuleAddVO);
BaseResponse projectChildGetName(String name, HttpServletRequest request);
BaseResponse projectModuleGetName(String projectName, String childName, HttpServletRequest request);
} }

View File

@ -70,6 +70,7 @@ public class MessageServiceImpl implements MessageService {
} }
PageHelper.startPage(page, pageSize); PageHelper.startPage(page, pageSize);
List<MessageDO> messageDOList = messageMapper.page(beginTime, endTime, uid); List<MessageDO> messageDOList = messageMapper.page(beginTime, endTime, uid);
//封装返回数据 //封装返回数据
List<MessageGetVO> messageGetVOList = new ArrayList<>(); List<MessageGetVO> messageGetVOList = new ArrayList<>();
for (MessageDO messageDO : messageDOList) { for (MessageDO messageDO : messageDOList) {
@ -89,9 +90,9 @@ public class MessageServiceImpl implements MessageService {
} }
messageGetVOList.add(messageGetVO1); messageGetVOList.add(messageGetVO1);
} }
//分页返回 //分页返回
PageInfo<MessageGetVO> pageInfo = new PageInfo<>(messageGetVOList); PageInfo<MessageGetVO> pageInfo = new PageInfo<>(messageGetVOList);
pageInfo.setTotal(messageMapper.page(beginTime, endTime, uid).size());
return ResultUtil.success(pageInfo); return ResultUtil.success(pageInfo);
} }

View File

@ -12,6 +12,7 @@ import com.jsl.oa.dao.RoleDAO;
import com.jsl.oa.dao.UserDAO; import com.jsl.oa.dao.UserDAO;
import com.jsl.oa.mapper.ProjectMapper; import com.jsl.oa.mapper.ProjectMapper;
import com.jsl.oa.mapper.UserMapper; import com.jsl.oa.mapper.UserMapper;
import com.jsl.oa.model.dodata.ProjectChildDO;
import com.jsl.oa.model.dodata.ProjectDO; import com.jsl.oa.model.dodata.ProjectDO;
import com.jsl.oa.model.dodata.ProjectModuleDO; import com.jsl.oa.model.dodata.ProjectModuleDO;
import com.jsl.oa.model.dodata.UserDO; import com.jsl.oa.model.dodata.UserDO;
@ -88,26 +89,19 @@ public class ProjectServiceImpl implements ProjectService {
} }
@Override @Override
public BaseResponse projectWorkAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO) { public BaseResponse projectChildAdd(HttpServletRequest request, ProjectChildAddVO projectChildAddVO) {
//获取用户id
Long userId = Processing.getAuthHeaderToUserId(request);
//是否是增加子系统
if (projectWorkVO.getType() == 0) {
//是否是老师
if (Processing.checkUserIsPrincipal(request, roleDAO)) {
projectDAO.projectWorkAdd(projectWorkVO);
} else {
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
}
} else {
//是否是子系统的负责人
if (Objects.equals(userId, projectMapper.getPirIdbyId(projectWorkVO.getPid()))) {
projectDAO.projectWorkAdd(projectWorkVO);
} else {
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
}
}
//是否是项目负责人
if (projectMapper.getProjectById(projectChildAddVO.getProjectId()).getPrincipalId()
.equals(Processing.getAuthHeaderToUserId(request))
) {
HashMap<String, Object> descriptionMap = new HashMap<>();
descriptionMap.put("description", projectChildAddVO.getDescription());
projectChildAddVO.setDescription(gson.toJson(descriptionMap));
projectDAO.projectWorkAdd(projectChildAddVO);
} else {
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
}
return ResultUtil.success("添加成功"); return ResultUtil.success("添加成功");
} }
@ -183,6 +177,7 @@ public class ProjectServiceImpl implements ProjectService {
} }
//分页返回 //分页返回
PageInfo<ProjectSimpleVO> pageInfo = new PageInfo<>(projectSimpleVOList); PageInfo<ProjectSimpleVO> pageInfo = new PageInfo<>(projectSimpleVOList);
pageInfo.setTotal(projectDAO.get(userId, null, null).size());
return ResultUtil.success(pageInfo); return ResultUtil.success(pageInfo);
} }
@ -202,6 +197,7 @@ public class ProjectServiceImpl implements ProjectService {
} }
//分页返回 //分页返回
PageInfo<ProjectSimpleVO> pageInfo = new PageInfo<>(projectSimpleVOList); PageInfo<ProjectSimpleVO> pageInfo = new PageInfo<>(projectSimpleVOList);
pageInfo.setTotal(projectMapper.getParticipateProject(userId).size());
return ResultUtil.success(pageInfo); return ResultUtil.success(pageInfo);
} }
@ -251,6 +247,49 @@ public class ProjectServiceImpl implements ProjectService {
return ResultUtil.success(returnGetVOList); return ResultUtil.success(returnGetVOList);
} }
@Override
public BaseResponse projectModuleAdd(HttpServletRequest request, ProjectModuleAddVO projectModuleAddVO) {
//判断是否是子系统负责人或项目负责人
if (!Objects.equals(Processing.getAuthHeaderToUserId(request),
projectMapper.getProjectChildById(projectModuleAddVO.getProjectChildId().intValue()).getPrincipalId())
// 项目负责人
&& !Objects.equals(Processing.getAuthHeaderToUserId(request),
projectMapper.getPirIdbyId(projectModuleAddVO.getProjectChildId()))) {
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
} else {
HashMap<String, Object> descriptionMap = new HashMap<>();
descriptionMap.put("description", projectModuleAddVO.getDescription());
projectModuleAddVO.setDescription(gson.toJson(descriptionMap));
projectMapper.projectModuleAdd(projectModuleAddVO);
}
return ResultUtil.success("添加成功");
}
@Override
public BaseResponse projectChildGetName(String name, HttpServletRequest request) {
List<ProjectChildDO> projectChildDOList = projectMapper.getChildByLikeName(name);
List<ReturnGetVO> returnGetVOList = new ArrayList<>();
for (ProjectChildDO projectChildDO : projectChildDOList) {
ReturnGetVO returnGetVO = new ReturnGetVO();
Processing.copyProperties(projectChildDO, returnGetVO);
returnGetVOList.add(returnGetVO);
}
return ResultUtil.success(returnGetVOList);
}
@Override
public BaseResponse projectModuleGetName(String projectName, String childName, HttpServletRequest request) {
List<ProjectModuleDO> projectModuleDOList = projectMapper.getModuleByName(projectName, childName);
List<ReturnGetVO> returnGetVOList = new ArrayList<>();
for (ProjectModuleDO projectModuleDO : projectModuleDOList) {
ReturnGetVO returnGetVO = new ReturnGetVO();
Processing.copyProperties(projectModuleDO, returnGetVO);
returnGetVOList.add(returnGetVO);
}
return ResultUtil.success(returnGetVOList);
}
@Override @Override
public BaseResponse getModuleById(Integer id) { public BaseResponse getModuleById(Integer id) {
ProjectModuleDO projectWorkSimpleVO = projectMapper.getModuleById(id); ProjectModuleDO projectWorkSimpleVO = projectMapper.getModuleById(id);
@ -426,6 +465,7 @@ public class ProjectServiceImpl implements ProjectService {
} }
//分页返回 //分页返回
PageInfo<ProjectSimpleVO> pageInfo = new PageInfo<>(projectSimpleVOList); PageInfo<ProjectSimpleVO> pageInfo = new PageInfo<>(projectSimpleVOList);
pageInfo.setTotal(projectDAO.workget(userId, tags, isFinish, is).size());
return ResultUtil.success(pageInfo); return ResultUtil.success(pageInfo);
} }

View File

@ -2,7 +2,7 @@ create table oa_project_child
( (
id bigint unsigned auto_increment comment '项目id' id bigint unsigned auto_increment comment '项目id'
primary key, primary key,
project_id bigint unsigned not null comment '主要项目id', project_id bigint unsigned null comment '主要项目id',
name varchar(100) not null comment '项目名称', name varchar(100) not null comment '项目名称',
principal_id bigint unsigned not null comment '项目负责人', principal_id bigint unsigned not null comment '项目负责人',
description json null comment '项目描述(技术选择,描述)', description json null comment '项目描述(技术选择,描述)',
@ -13,11 +13,8 @@ create table oa_project_child
created_at timestamp default CURRENT_TIMESTAMP not null comment '创建时间', created_at timestamp default CURRENT_TIMESTAMP not null comment '创建时间',
updated_at timestamp null comment '更新时间', updated_at timestamp null comment '更新时间',
is_delete tinyint(1) default 0 not 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_child_oa_user_id_fk constraint oa_project_child_oa_user_id_fk
foreign key (principal_id) references oa_user (id) foreign key (principal_id) references oa_user (id)
on update cascade on update cascade
) )
comment '项目表'; comment '项目表';