Compare commits

...

2 Commits

Author SHA1 Message Date
934ef24ce6 feat(mdpf): 新增项目及用户关联模块
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled
yudao-ui-admin CI / build (14.x) (push) Has been cancelled
yudao-ui-admin CI / build (16.x) (push) Has been cancelled
- 添加项目管理相关实体类、控制器和服务实现
- 添加项目用户关联关系管理功能
- 集成Excel导出功能支持数据导出- 实现基础的增删改查和分页查询接口
- 添加权限控制注解确保接口安全性
- 引入yudao-spring-boot-starter-excel依赖支持Excel操作
2025-10-11 13:27:49 +08:00
2802d2d25c feat(config): 添加数据库从库配置
- 在 application-local.yaml 中添加名为 third 的数据库从库配置- 配置包含独立的 JDBC URL、用户名和密码- 启用 lazy 初始化选项以优化启动性能
- 保持与主库相同的连接参数和时区设置
2025-10-10 15:36:47 +08:00
20 changed files with 974 additions and 1 deletions

View File

@ -50,5 +50,9 @@
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-excel</artifactId>
</dependency>
</dependencies>
</project>
</project>

View File

@ -0,0 +1,97 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.project;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectPageReqVO;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectRespVO;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectSaveReqVO;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.mdpf.service.project.ProjectService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 项目")
@RestController
@RequestMapping("/att/project")
@Validated
public class ProjectController {
@Resource
private ProjectService projectService;
@PostMapping("/create")
@Operation(summary = "创建项目")
@PreAuthorize("@ss.hasPermission('att:project:create')")
public CommonResult<Long> createProject(@Valid @RequestBody ProjectSaveReqVO createReqVO) {
return success(projectService.createProject(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新项目")
@PreAuthorize("@ss.hasPermission('att:project:update')")
public CommonResult<Boolean> updateProject(@Valid @RequestBody ProjectSaveReqVO updateReqVO) {
projectService.updateProject(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除项目")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('att:project:delete')")
public CommonResult<Boolean> deleteProject(@RequestParam("id") Long id) {
projectService.deleteProject(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得项目")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('att:project:query')")
public CommonResult<ProjectRespVO> getProject(@RequestParam("id") Long id) {
ProjectDO project = projectService.getProject(id);
return success(BeanUtils.toBean(project, ProjectRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得项目分页")
@PreAuthorize("@ss.hasPermission('att:project:query')")
public CommonResult<PageResult<ProjectRespVO>> getProjectPage(@Valid ProjectPageReqVO pageReqVO) {
PageResult<ProjectDO> pageResult = projectService.getProjectPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProjectRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出项目 Excel")
@PreAuthorize("@ss.hasPermission('att:project:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportProjectExcel(@Valid ProjectPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ProjectDO> list = projectService.getProjectPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "项目.xls", "数据", ProjectRespVO.class,
BeanUtils.toBean(list, ProjectRespVO.class));
}
}

View File

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.project.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 项目分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProjectPageReqVO extends PageParam {
@Schema(description = "项目名称", example = "芋艿")
private String name;
@Schema(description = "项目管理员id", example = "29571")
private Long managerId;
@Schema(description = "项目描述", example = "随便")
private String description;
@Schema(description = "是否有效;0无效1有效")
private String validFlag;
@Schema(description = "创建人id", example = "16812")
private Long creatorId;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新人")
private String updater;
@Schema(description = "更新人id", example = "2533")
private Long updaterId;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "code")
private String code;
}

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.project.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 项目 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ProjectRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14209")
@ExcelProperty("ID")
private Long id;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("项目名称")
private String name;
@Schema(description = "项目管理员id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29571")
@ExcelProperty("项目管理员id")
private Long managerId;
@Schema(description = "项目描述", example = "随便")
@ExcelProperty("项目描述")
private String description;
@Schema(description = "是否有效;0无效1有效", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否有效;0无效1有效")
private String validFlag;
@Schema(description = "创建人id", example = "16812")
@ExcelProperty("创建人id")
private Long creatorId;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "更新人")
@ExcelProperty("更新人")
private String updater;
@Schema(description = "更新人id", example = "2533")
@ExcelProperty("更新人id")
private Long updaterId;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")
private String remark;
@Schema(description = "code")
@ExcelProperty("code")
private String code;
}

View File

@ -0,0 +1,45 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.project.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 项目新增/修改 Request VO")
@Data
public class ProjectSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14209")
private Long id;
@Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@NotEmpty(message = "项目名称不能为空")
private String name;
@Schema(description = "项目管理员id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29571")
@NotNull(message = "项目管理员id不能为空")
private Long managerId;
@Schema(description = "项目描述", example = "随便")
private String description;
@Schema(description = "是否有效;0无效1有效", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "是否有效;0无效1有效不能为空")
private String validFlag;
@Schema(description = "创建人id", example = "16812")
private Long creatorId;
@Schema(description = "更新人")
private String updater;
@Schema(description = "更新人id", example = "2533")
private Long updaterId;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "code")
private String code;
}

View File

@ -0,0 +1,95 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo.*;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.projectuserrel.ProjectUserRelDO;
import cn.iocoder.yudao.module.mdpf.service.projectuserrel.ProjectUserRelService;
@Tag(name = "管理后台 - 项目表与用户表关联关系")
@RestController
@RequestMapping("/mdpf/project-user-rel")
@Validated
public class ProjectUserRelController {
@Resource
private ProjectUserRelService projectUserRelService;
@PostMapping("/create")
@Operation(summary = "创建项目表与用户表关联关系")
@PreAuthorize("@ss.hasPermission('mdpf:project-user-rel:create')")
public CommonResult<Long> createProjectUserRel(@Valid @RequestBody ProjectUserRelSaveReqVO createReqVO) {
return success(projectUserRelService.createProjectUserRel(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新项目表与用户表关联关系")
@PreAuthorize("@ss.hasPermission('mdpf:project-user-rel:update')")
public CommonResult<Boolean> updateProjectUserRel(@Valid @RequestBody ProjectUserRelSaveReqVO updateReqVO) {
projectUserRelService.updateProjectUserRel(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除项目表与用户表关联关系")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mdpf:project-user-rel:delete')")
public CommonResult<Boolean> deleteProjectUserRel(@RequestParam("id") Long id) {
projectUserRelService.deleteProjectUserRel(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得项目表与用户表关联关系")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mdpf:project-user-rel:query')")
public CommonResult<ProjectUserRelRespVO> getProjectUserRel(@RequestParam("id") Long id) {
ProjectUserRelDO projectUserRel = projectUserRelService.getProjectUserRel(id);
return success(BeanUtils.toBean(projectUserRel, ProjectUserRelRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得项目表与用户表关联关系分页")
@PreAuthorize("@ss.hasPermission('mdpf:project-user-rel:query')")
public CommonResult<PageResult<ProjectUserRelRespVO>> getProjectUserRelPage(@Valid ProjectUserRelPageReqVO pageReqVO) {
PageResult<ProjectUserRelDO> pageResult = projectUserRelService.getProjectUserRelPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProjectUserRelRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出项目表与用户表关联关系 Excel")
@PreAuthorize("@ss.hasPermission('mdpf:project-user-rel:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportProjectUserRelExcel(@Valid ProjectUserRelPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ProjectUserRelDO> list = projectUserRelService.getProjectUserRelPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "项目表与用户表关联关系.xls", "数据", ProjectUserRelRespVO.class,
BeanUtils.toBean(list, ProjectUserRelRespVO.class));
}
}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 项目表与用户表关联关系分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProjectUserRelPageReqVO extends PageParam {
@Schema(description = "项目空间ID", example = "20683")
private Long projectId;
@Schema(description = "用户ID", example = "11066")
private Long userId;
@Schema(description = "是否有效;0无效1有效")
private String validFlag;
@Schema(description = "创建人id", example = "11994")
private Long creatorId;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新人id", example = "24433")
private Long updaterId;
@Schema(description = "备注", example = "你猜")
private String remark;
}

View File

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 项目表与用户表关联关系 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ProjectUserRelRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4436")
@ExcelProperty("ID")
private Long id;
@Schema(description = "项目空间ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20683")
@ExcelProperty("项目空间ID")
private Long projectId;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11066")
@ExcelProperty("用户ID")
private Long userId;
@Schema(description = "是否有效;0无效1有效", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否有效;0无效1有效")
private String validFlag;
@Schema(description = "创建人id", example = "11994")
@ExcelProperty("创建人id")
private Long creatorId;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "更新人id", example = "24433")
@ExcelProperty("更新人id")
private Long updaterId;
@Schema(description = "备注", example = "你猜")
@ExcelProperty("备注")
private String remark;
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 项目表与用户表关联关系新增/修改 Request VO")
@Data
public class ProjectUserRelSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4436")
private Long id;
@Schema(description = "项目空间ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20683")
@NotNull(message = "项目空间ID不能为空")
private Long projectId;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11066")
@NotNull(message = "用户ID不能为空")
private Long userId;
@Schema(description = "是否有效;0无效1有效", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "是否有效;0无效1有效不能为空")
private String validFlag;
@Schema(description = "创建人id", example = "11994")
private Long creatorId;
@Schema(description = "更新人id", example = "24433")
private Long updaterId;
@Schema(description = "备注", example = "你猜")
private String remark;
}

View File

@ -0,0 +1,63 @@
package cn.iocoder.yudao.module.mdpf.dal.dataobject.project;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 项目 DO
*
* @author 海况播报
*/
@TableName("att_project")
@KeySequence("att_project_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProjectDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
* 项目名称
*/
private String name;
/**
* 项目管理员id
*/
private Long managerId;
/**
* 项目描述
*/
private String description;
/**
* 是否有效;0无效1有效
*/
private String validFlag;
/**
* 创建人id
*/
private Long creatorId;
/**
* 更新人id
*/
private Long updaterId;
/**
* 备注
*/
private String remark;
/**
* code
*/
private String code;
}

View File

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.mdpf.dal.dataobject.projectuserrel;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 项目表与用户表关联关系 DO
*
* @author 海况播报
*/
@TableName("att_project_user_rel")
@KeySequence("att_project_user_rel_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProjectUserRelDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
* 项目空间ID
*/
private Long projectId;
/**
* 用户ID
*/
private Long userId;
/**
* 是否有效;0无效1有效
*/
private String validFlag;
/**
* 创建人id
*/
private Long creatorId;
/**
* 更新人id
*/
private Long updaterId;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.mdpf.dal.mysql.project;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectPageReqVO;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.project.ProjectDO;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
/**
* 项目 Mapper
*
* @author 海况播报
*/
@Mapper
@DS("third")
public interface ProjectMapper extends BaseMapperX<ProjectDO> {
default PageResult<ProjectDO> selectPage(ProjectPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProjectDO>()
.likeIfPresent(ProjectDO::getName, reqVO.getName())
.eqIfPresent(ProjectDO::getManagerId, reqVO.getManagerId())
.eqIfPresent(ProjectDO::getDescription, reqVO.getDescription())
.eqIfPresent(ProjectDO::getValidFlag, reqVO.getValidFlag())
.eqIfPresent(ProjectDO::getCreatorId, reqVO.getCreatorId())
.betweenIfPresent(ProjectDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ProjectDO::getUpdaterId, reqVO.getUpdaterId())
.eqIfPresent(ProjectDO::getRemark, reqVO.getRemark())
.eqIfPresent(ProjectDO::getCode, reqVO.getCode())
.orderByDesc(ProjectDO::getId));
}
}

View File

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.mdpf.dal.mysql.projectuserrel;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.projectuserrel.ProjectUserRelDO;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo.*;
/**
* 项目表与用户表关联关系 Mapper
*
* @author 海况播报
*/
@Mapper
@DS("third")
public interface ProjectUserRelMapper extends BaseMapperX<ProjectUserRelDO> {
default PageResult<ProjectUserRelDO> selectPage(ProjectUserRelPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProjectUserRelDO>()
.eqIfPresent(ProjectUserRelDO::getProjectId, reqVO.getProjectId())
.eqIfPresent(ProjectUserRelDO::getUserId, reqVO.getUserId())
.eqIfPresent(ProjectUserRelDO::getValidFlag, reqVO.getValidFlag())
.eqIfPresent(ProjectUserRelDO::getCreatorId, reqVO.getCreatorId())
.betweenIfPresent(ProjectUserRelDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ProjectUserRelDO::getUpdaterId, reqVO.getUpdaterId())
.eqIfPresent(ProjectUserRelDO::getRemark, reqVO.getRemark())
.orderByDesc(ProjectUserRelDO::getId));
}
}

View File

@ -0,0 +1,57 @@
package cn.iocoder.yudao.module.mdpf.service.project;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectPageReqVO;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectSaveReqVO;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.project.ProjectDO;
import java.util.*;
import javax.validation.*;
/**
* 项目 Service 接口
*
* @author 海况播报
*/
public interface ProjectService {
/**
* 创建项目
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createProject(@Valid ProjectSaveReqVO createReqVO);
/**
* 更新项目
*
* @param updateReqVO 更新信息
*/
void updateProject(@Valid ProjectSaveReqVO updateReqVO);
/**
* 删除项目
*
* @param id 编号
*/
void deleteProject(Long id);
/**
* 获得项目
*
* @param id 编号
* @return 项目
*/
ProjectDO getProject(Long id);
/**
* 获得项目分页
*
* @param pageReqVO 分页查询
* @return 项目分页
*/
PageResult<ProjectDO> getProjectPage(ProjectPageReqVO pageReqVO);
}

View File

@ -0,0 +1,93 @@
package cn.iocoder.yudao.module.mdpf.service.project;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectPageReqVO;
import cn.iocoder.yudao.module.mdpf.controller.admin.project.vo.ProjectSaveReqVO;
import cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo.ProjectUserRelSaveReqVO;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.mdpf.dal.mysql.project.ProjectMapper;
import cn.iocoder.yudao.module.mdpf.service.projectuserrel.ProjectUserRelService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 项目 Service 实现类
*
* @author 海况播报
*/
@Service
@Validated
public class ProjectServiceImpl implements ProjectService {
@Resource
private ProjectMapper projectMapper;
@Resource
private ProjectUserRelService projectUserRelService;
@Override
public Long createProject(ProjectSaveReqVO createReqVO) {
// 插入
ProjectDO project = BeanUtils.toBean(createReqVO, ProjectDO.class);
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
project.setCreatorId(loginUser.getId());
projectMapper.insert(project);
// 创建中间表
ProjectUserRelSaveReqVO saveReqVO = new ProjectUserRelSaveReqVO();
saveReqVO.setProjectId(project.getId());
saveReqVO.setUserId(loginUser.getId());
saveReqVO.setValidFlag(project.getValidFlag());
saveReqVO.setCreatorId(loginUser.getId());
projectUserRelService.createProjectUserRel(saveReqVO);
// 返回
return project.getId();
}
@Override
public void updateProject(ProjectSaveReqVO updateReqVO) {
// 校验存在
validateProjectExists(updateReqVO.getId());
// 更新
ProjectDO updateObj = BeanUtils.toBean(updateReqVO, ProjectDO.class);
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
updateObj.setUpdaterId(loginUser.getId());
projectMapper.updateById(updateObj);
}
@Override
public void deleteProject(Long id) {
// 校验存在
validateProjectExists(id);
// 删除
projectMapper.deleteById(id);
}
private void validateProjectExists(Long id) {
if (projectMapper.selectById(id) == null) {
throw exception(new ErrorCode(10050, "项目不存在"));
}
}
@Override
public ProjectDO getProject(Long id) {
return projectMapper.selectById(id);
}
@Override
public PageResult<ProjectDO> getProjectPage(ProjectPageReqVO pageReqVO) {
return projectMapper.selectPage(pageReqVO);
}
}

View File

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.mdpf.service.projectuserrel;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo.*;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.projectuserrel.ProjectUserRelDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 项目表与用户表关联关系 Service 接口
*
* @author 海况播报
*/
public interface ProjectUserRelService {
/**
* 创建项目表与用户表关联关系
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createProjectUserRel(@Valid ProjectUserRelSaveReqVO createReqVO);
/**
* 更新项目表与用户表关联关系
*
* @param updateReqVO 更新信息
*/
void updateProjectUserRel(@Valid ProjectUserRelSaveReqVO updateReqVO);
/**
* 删除项目表与用户表关联关系
*
* @param id 编号
*/
void deleteProjectUserRel(Long id);
/**
* 获得项目表与用户表关联关系
*
* @param id 编号
* @return 项目表与用户表关联关系
*/
ProjectUserRelDO getProjectUserRel(Long id);
/**
* 获得项目表与用户表关联关系分页
*
* @param pageReqVO 分页查询
* @return 项目表与用户表关联关系分页
*/
PageResult<ProjectUserRelDO> getProjectUserRelPage(ProjectUserRelPageReqVO pageReqVO);
}

View File

@ -0,0 +1,75 @@
package cn.iocoder.yudao.module.mdpf.service.projectuserrel;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.mdpf.controller.admin.projectuserrel.vo.*;
import cn.iocoder.yudao.module.mdpf.dal.dataobject.projectuserrel.ProjectUserRelDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mdpf.dal.mysql.projectuserrel.ProjectUserRelMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 项目表与用户表关联关系 Service 实现类
*
* @author 海况播报
*/
@Service
@Validated
public class ProjectUserRelServiceImpl implements ProjectUserRelService {
@Resource
private ProjectUserRelMapper projectUserRelMapper;
@Override
public Long createProjectUserRel(ProjectUserRelSaveReqVO createReqVO) {
// 插入
ProjectUserRelDO projectUserRel = BeanUtils.toBean(createReqVO, ProjectUserRelDO.class);
projectUserRelMapper.insert(projectUserRel);
// 返回
return projectUserRel.getId();
}
@Override
public void updateProjectUserRel(ProjectUserRelSaveReqVO updateReqVO) {
// 校验存在
validateProjectUserRelExists(updateReqVO.getId());
// 更新
ProjectUserRelDO updateObj = BeanUtils.toBean(updateReqVO, ProjectUserRelDO.class);
projectUserRelMapper.updateById(updateObj);
}
@Override
public void deleteProjectUserRel(Long id) {
// 校验存在
validateProjectUserRelExists(id);
// 删除
projectUserRelMapper.deleteById(id);
}
private void validateProjectUserRelExists(Long id) {
if (projectUserRelMapper.selectById(id) == null) {
throw exception(new ErrorCode(0404, "项目表与用户表关联关系不存在"));
}
}
@Override
public ProjectUserRelDO getProjectUserRel(Long id) {
return projectUserRelMapper.selectById(id);
}
@Override
public PageResult<ProjectUserRelDO> getProjectUserRelPage(ProjectUserRelPageReqVO pageReqVO) {
return projectUserRelMapper.selectPage(pageReqVO);
}
}

View File

@ -0,0 +1,12 @@
<?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="cn.iocoder.yudao.module.mdpf.dal.mysql.project.ProjectMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@ -0,0 +1,12 @@
<?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="cn.iocoder.yudao.module.mdpf.dal.mysql.projectuserrel.ProjectUserRelMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@ -54,6 +54,13 @@ spring:
url: jdbc:mysql://221.238.217.216:4156/data_mid_platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
username: root
password: 123456
#添加从库
third:
lazy: true
url: jdbc:mysql://221.238.217.216:4156/data_middle_platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
username: root
password: 123456
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
redis:
host: 127.0.0.1 # 地址