添加项目增删改查接口,以及用户和项目关联增删改查接口
This commit is contained in:
		| @ -261,7 +261,7 @@ management: | ||||
|  | ||||
| --- # 默认/推荐使用sse推送 | ||||
| sse: | ||||
|   enabled: false | ||||
|   enabled: true | ||||
|   path: /resource/sse | ||||
|  | ||||
| --- # websocket | ||||
|  | ||||
| @ -0,0 +1,31 @@ | ||||
| package org.dromara.common.core.common; | ||||
|  | ||||
| import lombok.Data; | ||||
| import org.dromara.common.core.constant.CommonConstant; | ||||
|  | ||||
| /** | ||||
|  * 分页请求 | ||||
|  */ | ||||
| @Data | ||||
| public class PageRequest { | ||||
|  | ||||
|     /** | ||||
|      * 当前页号 | ||||
|      */ | ||||
|     private int current = 1; | ||||
|  | ||||
|     /** | ||||
|      * 页面大小 | ||||
|      */ | ||||
|     private int pageSize = 10; | ||||
|  | ||||
|     /** | ||||
|      * 排序字段 | ||||
|      */ | ||||
|     private String sortField; | ||||
|  | ||||
|     /** | ||||
|      * 排序顺序(默认升序) | ||||
|      */ | ||||
|     private String sortOrder = CommonConstant.SORT_ORDER_ASC; | ||||
| } | ||||
| @ -0,0 +1,18 @@ | ||||
| package org.dromara.common.core.constant; | ||||
|  | ||||
| /** | ||||
|  * 通用常量 | ||||
|  */ | ||||
| public interface CommonConstant { | ||||
|  | ||||
|     /** | ||||
|      * 升序 | ||||
|      */ | ||||
|     String SORT_ORDER_ASC = "ascend"; | ||||
|  | ||||
|     /** | ||||
|      * 降序 | ||||
|      */ | ||||
|     String SORT_ORDER_DESC = " descend"; | ||||
|  | ||||
| } | ||||
| @ -53,4 +53,17 @@ public class SqlUtil { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 校验排序字段是否合法(防止 SQL 注入) | ||||
|      * | ||||
|      * @param sortField 排序字段 | ||||
|      * @return 是否存在 SQL 注入 | ||||
|      */ | ||||
|     public static boolean validSortField(String sortField) { | ||||
|         if (StringUtils.isBlank(sortField)) { | ||||
|             return false; | ||||
|         } | ||||
|         return !StringUtils.containsAny(sortField, "=", "(", ")", " "); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -33,8 +33,8 @@ public class BaseEntity implements Serializable { | ||||
|     /** | ||||
|      * 创建部门 | ||||
|      */ | ||||
|     @TableField(fill = FieldFill.INSERT) | ||||
|     private Long createDept; | ||||
| /*    @TableField(fill = FieldFill.INSERT) | ||||
|     private Long createDept;*/ | ||||
|  | ||||
|     /** | ||||
|      * 创建者 | ||||
|  | ||||
| @ -44,7 +44,7 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler { | ||||
|                         // 填充创建人、更新人和创建部门信息 | ||||
|                         baseEntity.setCreateBy(userId); | ||||
|                         baseEntity.setUpdateBy(userId); | ||||
|                         baseEntity.setCreateDept(ObjectUtils.notNull(baseEntity.getCreateDept(), loginUser.getDeptId())); | ||||
| //                        baseEntity.setCreateDept(ObjectUtils.notNull(baseEntity.getCreateDept(), loginUser.getDeptId())); | ||||
|                     } | ||||
|                 } | ||||
|             } else { | ||||
|  | ||||
| @ -0,0 +1,113 @@ | ||||
| package org.dromara.project.controller; | ||||
|  | ||||
| import cn.dev33.satoken.annotation.SaCheckPermission; | ||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
| import jakarta.servlet.http.HttpServletResponse; | ||||
| import jakarta.validation.constraints.NotEmpty; | ||||
| import jakarta.validation.constraints.NotNull; | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import org.dromara.common.core.constant.HttpStatus; | ||||
| import org.dromara.common.core.domain.R; | ||||
| import org.dromara.common.core.exception.ServiceException; | ||||
| import org.dromara.common.core.validate.AddGroup; | ||||
| import org.dromara.common.core.validate.EditGroup; | ||||
| import org.dromara.common.excel.utils.ExcelUtil; | ||||
| import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||
| import org.dromara.common.log.annotation.Log; | ||||
| import org.dromara.common.log.enums.BusinessType; | ||||
| import org.dromara.common.web.core.BaseController; | ||||
| import org.dromara.project.domain.bo.ProjectBo; | ||||
| import org.dromara.project.domain.req.project.ProjectCreateReq; | ||||
| import org.dromara.project.domain.req.project.ProjectQueryReq; | ||||
| import org.dromara.project.domain.req.project.ProjectUpdateReq; | ||||
| import org.dromara.project.domain.vo.ProjectVo; | ||||
| import org.dromara.project.service.IProjectService; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 项目 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Validated | ||||
| @RequiredArgsConstructor | ||||
| @RestController | ||||
| @RequestMapping("/project/project") | ||||
| public class ProjectController extends BaseController { | ||||
|  | ||||
|     private final IProjectService projectService; | ||||
|  | ||||
|     /** | ||||
|      * 查询项目列表 | ||||
|      */ | ||||
|     @SaCheckPermission("project:project:list") | ||||
|     @GetMapping("/list") | ||||
|     public Page<ProjectVo> list(ProjectQueryReq req) { | ||||
|         return projectService.queryPageList(req); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 导出项目列表 | ||||
|      */ | ||||
|     @SaCheckPermission("project:project:export") | ||||
|     @Log(title = "项目", businessType = BusinessType.EXPORT) | ||||
|     @PostMapping("/export") | ||||
|     public void export(ProjectBo bo, HttpServletResponse response) { | ||||
|         List<ProjectVo> list = projectService.queryList(bo); | ||||
|         ExcelUtil.exportExcel(list, "项目", ProjectVo.class, response); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取项目详细信息 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      */ | ||||
|     @SaCheckPermission("project:project:query") | ||||
|     @GetMapping("/{id}") | ||||
|     public R<ProjectVo> getInfo(@NotNull(message = "主键不能为空") | ||||
|                                 @PathVariable Long id) { | ||||
|         return R.ok(projectService.queryById(id)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增项目 | ||||
|      */ | ||||
|     @SaCheckPermission("project:project:add") | ||||
|     @Log(title = "项目", businessType = BusinessType.INSERT) | ||||
|     @RepeatSubmit() | ||||
|     @PostMapping() | ||||
|     public R<Long> add(@Validated(AddGroup.class) @RequestBody ProjectCreateReq req) { | ||||
|         if (req == null) { | ||||
|             throw new ServiceException("参数不能为空", HttpStatus.BAD_REQUEST); | ||||
|         } | ||||
|         return R.ok(projectService.insertByBo(req)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改项目 | ||||
|      */ | ||||
|     @SaCheckPermission("project:project:edit") | ||||
|     @Log(title = "项目", businessType = BusinessType.UPDATE) | ||||
|     @RepeatSubmit() | ||||
|     @PutMapping() | ||||
|     public R<Void> edit(@Validated(EditGroup.class) @RequestBody ProjectUpdateReq req) { | ||||
|         return toAjax(projectService.updateByBo(req)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除项目 | ||||
|      * | ||||
|      * @param ids 主键串 | ||||
|      */ | ||||
|     @SaCheckPermission("project:project:remove") | ||||
|     @Log(title = "项目", businessType = BusinessType.DELETE) | ||||
|     @DeleteMapping("/{ids}") | ||||
|     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||
|                           @PathVariable Long[] ids) { | ||||
|         return toAjax(projectService.deleteWithValidByIds(List.of(ids), true)); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,132 @@ | ||||
| package org.dromara.project.controller; | ||||
|  | ||||
| import cn.dev33.satoken.annotation.SaCheckPermission; | ||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
| import jakarta.servlet.http.HttpServletResponse; | ||||
| import jakarta.validation.constraints.NotEmpty; | ||||
| import jakarta.validation.constraints.NotNull; | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import org.dromara.common.core.domain.R; | ||||
| import org.dromara.common.core.validate.AddGroup; | ||||
| import org.dromara.common.core.validate.EditGroup; | ||||
| import org.dromara.common.excel.utils.ExcelUtil; | ||||
| import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||
| import org.dromara.common.log.annotation.Log; | ||||
| import org.dromara.common.log.enums.BusinessType; | ||||
| import org.dromara.common.mybatis.core.page.PageQuery; | ||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||
| import org.dromara.common.satoken.utils.LoginHelper; | ||||
| import org.dromara.common.web.core.BaseController; | ||||
| import org.dromara.project.domain.bo.UserProjectRelevancyBo; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyCreateReq; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyUpdateReq; | ||||
| import org.dromara.project.domain.resp.userprojectrelevancy.LoginUserProjectRelevancyResp; | ||||
| import org.dromara.project.domain.vo.UserProjectRelevancyVo; | ||||
| import org.dromara.project.service.IUserProjectRelevancyService; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 系统用户与项目关联 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Validated | ||||
| @RequiredArgsConstructor | ||||
| @RestController | ||||
| @RequestMapping("/project/projectRelevancy") | ||||
| public class UserProjectRelevancyController extends BaseController { | ||||
|  | ||||
|     private final IUserProjectRelevancyService userProjectRelevancyService; | ||||
|  | ||||
|     /** | ||||
|      * 查询系统用户与项目关联列表 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:list") | ||||
|     @GetMapping("/list") | ||||
|     public TableDataInfo<UserProjectRelevancyVo> list(UserProjectRelevancyBo bo, PageQuery pageQuery) { | ||||
|         return userProjectRelevancyService.queryPageList(bo, pageQuery); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询登录用户与项目关联列表 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:list") | ||||
|     @GetMapping("/login/list") | ||||
|     public R<List<LoginUserProjectRelevancyResp>> listByLoginUser() { | ||||
|         Long userId = LoginHelper.getUserId(); | ||||
|         return R.ok(userProjectRelevancyService.queryListByUserId(userId)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询登录用户与项目关联分页 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:list") | ||||
|     @GetMapping("/login/page") | ||||
|     public R<Page<UserProjectRelevancyVo>> pageByLoginUser(UserProjectRelevancyQueryReq req) { | ||||
|         Long userId = LoginHelper.getUserId(); | ||||
|         return R.ok(userProjectRelevancyService.queryPageByUserId(userId, req)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 导出系统用户与项目关联列表 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:export") | ||||
|     @Log(title = "系统用户与项目关联", businessType = BusinessType.EXPORT) | ||||
|     @PostMapping("/export") | ||||
|     public void export(UserProjectRelevancyBo bo, HttpServletResponse response) { | ||||
|         List<UserProjectRelevancyVo> list = userProjectRelevancyService.queryList(bo); | ||||
|         ExcelUtil.exportExcel(list, "系统用户与项目关联", UserProjectRelevancyVo.class, response); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取系统用户与项目关联详细信息 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:query") | ||||
|     @GetMapping("/{id}") | ||||
|     public R<UserProjectRelevancyVo> getInfo(@NotNull(message = "主键不能为空") | ||||
|                                              @PathVariable Long id) { | ||||
|         return R.ok(userProjectRelevancyService.queryById(id)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增系统用户与项目关联 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:add") | ||||
|     @Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT) | ||||
|     @RepeatSubmit() | ||||
|     @PostMapping() | ||||
|     public R<Long> add(@Validated(AddGroup.class) @RequestBody UserProjectRelevancyCreateReq req) { | ||||
|         return R.ok(userProjectRelevancyService.insertByBo(req)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改系统用户与项目关联 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:edit") | ||||
|     @Log(title = "系统用户与项目关联", businessType = BusinessType.UPDATE) | ||||
|     @RepeatSubmit() | ||||
|     @PutMapping() | ||||
|     public R<Void> edit(@Validated(EditGroup.class) @RequestBody UserProjectRelevancyUpdateReq req) { | ||||
|         return toAjax(userProjectRelevancyService.updateByBo(req)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 删除系统用户与项目关联 | ||||
|      * | ||||
|      * @param ids 主键串 | ||||
|      */ | ||||
|     @SaCheckPermission("project:projectRelevancy:remove") | ||||
|     @Log(title = "系统用户与项目关联", businessType = BusinessType.DELETE) | ||||
|     @DeleteMapping("/{ids}") | ||||
|     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||
|                           @PathVariable Long[] ids) { | ||||
|         return toAjax(userProjectRelevancyService.deleteWithValidByIds(List.of(ids), true)); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,140 @@ | ||||
| package org.dromara.project.domain; | ||||
|  | ||||
| import com.baomidou.mybatisplus.annotation.TableId; | ||||
| import com.baomidou.mybatisplus.annotation.TableLogic; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.util.Date; | ||||
|  | ||||
| /** | ||||
|  * 项目对象 project | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @TableName("project") | ||||
| public class Project extends BaseEntity { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * id | ||||
|      */ | ||||
|     @TableId(value = "id") | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 项目名称 | ||||
|      */ | ||||
|     private String projectName; | ||||
|  | ||||
|     /** | ||||
|      * 项目简称 | ||||
|      */ | ||||
|     private String shortName; | ||||
|  | ||||
|     /** | ||||
|      * 父项目id | ||||
|      */ | ||||
|     private Long pId; | ||||
|  | ||||
|     /** | ||||
|      * 状态(0正常 1停用) | ||||
|      */ | ||||
|     private Long status; | ||||
|  | ||||
|     /** | ||||
|      * 项目图片 | ||||
|      */ | ||||
|     private String picUrl; | ||||
|  | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型 | ||||
|      */ | ||||
|     private String type; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型(1光伏 2风电) | ||||
|      */ | ||||
|     private Long isType; | ||||
|  | ||||
|     /** | ||||
|      * 删除时间 | ||||
|      */ | ||||
|     private Date deletedAt; | ||||
|  | ||||
|     /** | ||||
|      * 项目地址 | ||||
|      */ | ||||
|     private String projectSite; | ||||
|  | ||||
|     /** | ||||
|      * 负责人 | ||||
|      */ | ||||
|     private String principal; | ||||
|  | ||||
|     /** | ||||
|      * 负责人电话 | ||||
|      */ | ||||
|     private String principalPhone; | ||||
|  | ||||
|     /** | ||||
|      * 实际容量 | ||||
|      */ | ||||
|     private String actual; | ||||
|  | ||||
|     /** | ||||
|      * 计划容量 | ||||
|      */ | ||||
|     private String plan; | ||||
|  | ||||
|     /** | ||||
|      * 开工时间 | ||||
|      */ | ||||
|     private String onStreamTime; | ||||
|  | ||||
|     /** | ||||
|      * 打卡范围(09:00,18:00) | ||||
|      */ | ||||
|     private String punchRange; | ||||
|  | ||||
|     /** | ||||
|      * 设计总量 | ||||
|      */ | ||||
|     private Long designTotal; | ||||
|  | ||||
|     /** | ||||
|      * 安全协议书 | ||||
|      */ | ||||
|     private String securityAgreement; | ||||
|  | ||||
|     /** | ||||
|      * 排序字段 | ||||
|      */ | ||||
|     private Long sort; | ||||
|  | ||||
|     /** | ||||
|      * 显示隐藏(0显示 1隐藏) | ||||
|      */ | ||||
|     private Long showHidden; | ||||
|  | ||||
|     /** | ||||
|      * 是否删除(0正常 1删除) | ||||
|      */ | ||||
|     @TableLogic | ||||
|     private Long isDelete; | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package org.dromara.project.domain; | ||||
|  | ||||
| import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||
| import com.baomidou.mybatisplus.annotation.*; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import java.util.Date; | ||||
| import com.fasterxml.jackson.annotation.JsonFormat; | ||||
|  | ||||
| import java.io.Serial; | ||||
|  | ||||
| /** | ||||
|  * 系统用户与项目关联对象 user_project_relevancy | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @TableName("user_project_relevancy") | ||||
| public class UserProjectRelevancy extends BaseEntity { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 主键ID | ||||
|      */ | ||||
|     @TableId(value = "id") | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 项目ID | ||||
|      */ | ||||
|     private Long projectId; | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,141 @@ | ||||
| package org.dromara.project.domain.bo; | ||||
|  | ||||
| import org.dromara.project.domain.Project; | ||||
| import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||
| import org.dromara.common.core.validate.AddGroup; | ||||
| import org.dromara.common.core.validate.EditGroup; | ||||
| import io.github.linpeilie.annotations.AutoMapper; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import jakarta.validation.constraints.*; | ||||
| import java.util.Date; | ||||
| import com.fasterxml.jackson.annotation.JsonFormat; | ||||
|  | ||||
| /** | ||||
|  * 项目业务对象 project | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @AutoMapper(target = Project.class, reverseConvertGenerate = false) | ||||
| public class ProjectBo extends BaseEntity { | ||||
|  | ||||
|     /** | ||||
|      * 项目id | ||||
|      */ | ||||
|     @NotNull(message = "不能为空", groups = { EditGroup.class }) | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 项目名称 | ||||
|      */ | ||||
|     private String projectName; | ||||
|  | ||||
|     /** | ||||
|      * 项目简称 | ||||
|      */ | ||||
|     private String shortName; | ||||
|  | ||||
|     /** | ||||
|      * 父项目id | ||||
|      */ | ||||
|     private Long pId; | ||||
|  | ||||
|     /** | ||||
|      * 状态(0正常 1停用) | ||||
|      */ | ||||
|     private Long status; | ||||
|  | ||||
|     /** | ||||
|      * 项目图片 | ||||
|      */ | ||||
|     private String picUrl; | ||||
|  | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型 | ||||
|      */ | ||||
|     private String type; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型(1光伏 2风电) | ||||
|      */ | ||||
|     private Long isType; | ||||
|  | ||||
|     /** | ||||
|      * 删除时间 | ||||
|      */ | ||||
|     private Date deletedAt; | ||||
|  | ||||
|     /** | ||||
|      * 项目地址 | ||||
|      */ | ||||
|     private String projectSite; | ||||
|  | ||||
|     /** | ||||
|      * 负责人 | ||||
|      */ | ||||
|     private String principal; | ||||
|  | ||||
|     /** | ||||
|      * 负责人电话 | ||||
|      */ | ||||
|     private String principalPhone; | ||||
|  | ||||
|     /** | ||||
|      * 实际容量 | ||||
|      */ | ||||
|     private String actual; | ||||
|  | ||||
|     /** | ||||
|      * 计划容量 | ||||
|      */ | ||||
|     private String plan; | ||||
|  | ||||
|     /** | ||||
|      * 开工时间 | ||||
|      */ | ||||
|     private String onStreamTime; | ||||
|  | ||||
|     /** | ||||
|      * 打卡范围(09:00,18:00) | ||||
|      */ | ||||
|     @NotBlank(message = "打卡范围(09:00,18:00)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||
|     private String punchRange; | ||||
|  | ||||
|     /** | ||||
|      * 设计总量 | ||||
|      */ | ||||
|     @NotNull(message = "设计总量不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||
|     private Long designTotal; | ||||
|  | ||||
|     /** | ||||
|      * 安全协议书 | ||||
|      */ | ||||
|     private String securityAgreement; | ||||
|  | ||||
|     /** | ||||
|      * 排序字段 | ||||
|      */ | ||||
|     @NotNull(message = "排序字段不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||
|     private Long sort; | ||||
|  | ||||
|     /** | ||||
|      * 显示隐藏(0显示 1隐藏) | ||||
|      */ | ||||
|     private Long showHidden; | ||||
|  | ||||
|     /** | ||||
|      * 是否删除(0正常 1删除) | ||||
|      */ | ||||
|     @NotNull(message = "是否删除(0正常 1删除)不能为空", groups = { EditGroup.class }) | ||||
|     private Long isDelete; | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,49 @@ | ||||
| package org.dromara.project.domain.bo; | ||||
|  | ||||
| import org.dromara.project.domain.UserProjectRelevancy; | ||||
| import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||
| import org.dromara.common.core.validate.AddGroup; | ||||
| import org.dromara.common.core.validate.EditGroup; | ||||
| import io.github.linpeilie.annotations.AutoMapper; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import jakarta.validation.constraints.*; | ||||
| import java.util.Date; | ||||
| import com.fasterxml.jackson.annotation.JsonFormat; | ||||
|  | ||||
| /** | ||||
|  * 系统用户与项目关联业务对象 user_project_relevancy | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @AutoMapper(target = UserProjectRelevancy.class, reverseConvertGenerate = false) | ||||
| public class UserProjectRelevancyBo extends BaseEntity { | ||||
|  | ||||
|     /** | ||||
|      * 主键ID | ||||
|      */ | ||||
|     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     @NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 项目ID | ||||
|      */ | ||||
|     @NotNull(message = "项目ID不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||
|     private Long projectId; | ||||
|  | ||||
|     /** | ||||
|      * 删除时间 | ||||
|      */ | ||||
|     private Date deletedAt; | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,107 @@ | ||||
| package org.dromara.project.domain.req.project; | ||||
|  | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author lilemy | ||||
|  * @date 2025/3/5 14:05 | ||||
|  */ | ||||
| @Data | ||||
| public class ProjectCreateReq implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = -7603153089205421154L; | ||||
|  | ||||
|     /** | ||||
|      * 项目名称 | ||||
|      */ | ||||
|     private String projectName; | ||||
|  | ||||
|     /** | ||||
|      * 项目简称 | ||||
|      */ | ||||
|     private String shortName; | ||||
|  | ||||
|     /** | ||||
|      * 父项目id | ||||
|      */ | ||||
|     private Long pId; | ||||
|  | ||||
|     /** | ||||
|      * 项目图片 | ||||
|      */ | ||||
|     private String picUrl; | ||||
|  | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型 | ||||
|      */ | ||||
|     private String type; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型(1光伏 2风电) | ||||
|      */ | ||||
|     private Long isType; | ||||
|  | ||||
|     /** | ||||
|      * 项目地址 | ||||
|      */ | ||||
|     private String projectSite; | ||||
|  | ||||
|     /** | ||||
|      * 负责人 | ||||
|      */ | ||||
|     private String principal; | ||||
|  | ||||
|     /** | ||||
|      * 负责人电话 | ||||
|      */ | ||||
|     private String principalPhone; | ||||
|  | ||||
|     /** | ||||
|      * 实际容量 | ||||
|      */ | ||||
|     private String actual; | ||||
|  | ||||
|     /** | ||||
|      * 计划容量 | ||||
|      */ | ||||
|     private String plan; | ||||
|  | ||||
|     /** | ||||
|      * 开工时间 | ||||
|      */ | ||||
|     private String onStreamTime; | ||||
|  | ||||
|     /** | ||||
|      * 打卡范围(09:00,18:00) | ||||
|      */ | ||||
|     private String punchRange; | ||||
|  | ||||
|     /** | ||||
|      * 设计总量 | ||||
|      */ | ||||
|     private Long designTotal; | ||||
|  | ||||
|     /** | ||||
|      * 安全协议书 | ||||
|      */ | ||||
|     private String securityAgreement; | ||||
|  | ||||
|     /** | ||||
|      * 排序字段 | ||||
|      */ | ||||
|     private Long sort; | ||||
|  | ||||
|     /** | ||||
|      * 显示隐藏(0显示 1隐藏) | ||||
|      */ | ||||
|     private Long showHidden; | ||||
| } | ||||
| @ -0,0 +1,105 @@ | ||||
| package org.dromara.project.domain.req.project; | ||||
|  | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import org.dromara.common.core.common.PageRequest; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author lilemy | ||||
|  * @date 2025/3/5 14:31 | ||||
|  */ | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @Data | ||||
| public class ProjectQueryReq extends PageRequest implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = 5563677643070664671L; | ||||
|  | ||||
|     /** | ||||
|      * 项目 id | ||||
|      */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 项目名称 | ||||
|      */ | ||||
|     private String projectName; | ||||
|  | ||||
|     /** | ||||
|      * 项目简称 | ||||
|      */ | ||||
|     private String shortName; | ||||
|  | ||||
|     /** | ||||
|      * 父项目id | ||||
|      */ | ||||
|     private Long pId; | ||||
|  | ||||
|     /** | ||||
|      * 状态(0正常 1停用) | ||||
|      */ | ||||
|     private Long status; | ||||
|  | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型 | ||||
|      */ | ||||
|     private String type; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型(1光伏 2风电) | ||||
|      */ | ||||
|     private Long isType; | ||||
|  | ||||
|     /** | ||||
|      * 项目地址 | ||||
|      */ | ||||
|     private String projectSite; | ||||
|  | ||||
|     /** | ||||
|      * 负责人 | ||||
|      */ | ||||
|     private String principal; | ||||
|  | ||||
|     /** | ||||
|      * 负责人电话 | ||||
|      */ | ||||
|     private String principalPhone; | ||||
|  | ||||
|     /** | ||||
|      * 实际容量 | ||||
|      */ | ||||
|     private String actual; | ||||
|  | ||||
|     /** | ||||
|      * 计划容量 | ||||
|      */ | ||||
|     private String plan; | ||||
|  | ||||
|     /** | ||||
|      * 开工时间 | ||||
|      */ | ||||
|     private String onStreamTime; | ||||
|  | ||||
|     /** | ||||
|      * 打卡范围(09:00,18:00) | ||||
|      */ | ||||
|     private String punchRange; | ||||
|  | ||||
|     /** | ||||
|      * 设计总量 | ||||
|      */ | ||||
|     private Long designTotal; | ||||
|  | ||||
|     /** | ||||
|      * 显示隐藏(0显示 1隐藏) | ||||
|      */ | ||||
|     private Long showHidden; | ||||
| } | ||||
| @ -0,0 +1,112 @@ | ||||
| package org.dromara.project.domain.req.project; | ||||
|  | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author lilemy | ||||
|  * @date 2025/3/5 15:04 | ||||
|  */ | ||||
| @Data | ||||
| public class ProjectUpdateReq implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = 3431952359907567659L; | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 项目名称 | ||||
|      */ | ||||
|     private String projectName; | ||||
|  | ||||
|     /** | ||||
|      * 项目简称 | ||||
|      */ | ||||
|     private String shortName; | ||||
|  | ||||
|     /** | ||||
|      * 父项目id | ||||
|      */ | ||||
|     private Long pId; | ||||
|  | ||||
|     /** | ||||
|      * 状态(0正常 1停用) | ||||
|      */ | ||||
|     private Long status; | ||||
|  | ||||
|     /** | ||||
|      * 项目图片 | ||||
|      */ | ||||
|     private String picUrl; | ||||
|  | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     private String remark; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型 | ||||
|      */ | ||||
|     private String type; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型(1光伏 2风电) | ||||
|      */ | ||||
|     private Long isType; | ||||
|  | ||||
|     /** | ||||
|      * 项目地址 | ||||
|      */ | ||||
|     private String projectSite; | ||||
|  | ||||
|     /** | ||||
|      * 负责人 | ||||
|      */ | ||||
|     private String principal; | ||||
|  | ||||
|     /** | ||||
|      * 负责人电话 | ||||
|      */ | ||||
|     private String principalPhone; | ||||
|  | ||||
|     /** | ||||
|      * 实际容量 | ||||
|      */ | ||||
|     private String actual; | ||||
|  | ||||
|     /** | ||||
|      * 计划容量 | ||||
|      */ | ||||
|     private String plan; | ||||
|  | ||||
|     /** | ||||
|      * 开工时间 | ||||
|      */ | ||||
|     private String onStreamTime; | ||||
|  | ||||
|     /** | ||||
|      * 打卡范围(09:00,18:00) | ||||
|      */ | ||||
|     private String punchRange; | ||||
|  | ||||
|     /** | ||||
|      * 设计总量 | ||||
|      */ | ||||
|     private Long designTotal; | ||||
|  | ||||
|     /** | ||||
|      * 安全协议书 | ||||
|      */ | ||||
|     private String securityAgreement; | ||||
|  | ||||
|     /** | ||||
|      * 显示隐藏(0显示 1隐藏) | ||||
|      */ | ||||
|     private Long showHidden; | ||||
| } | ||||
| @ -0,0 +1,28 @@ | ||||
| package org.dromara.project.domain.req.userprojectrelevancy; | ||||
|  | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author lilemy | ||||
|  * @date 2025/3/5 14:05 | ||||
|  */ | ||||
| @Data | ||||
| public class UserProjectRelevancyCreateReq implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = -7603153089205421154L; | ||||
|  | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 项目ID | ||||
|      */ | ||||
|     private Long projectId; | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,35 @@ | ||||
| package org.dromara.project.domain.req.userprojectrelevancy; | ||||
|  | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import org.dromara.common.core.common.PageRequest; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author lilemy | ||||
|  * @date 2025/3/5 14:31 | ||||
|  */ | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @Data | ||||
| public class UserProjectRelevancyQueryReq extends PageRequest implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = 3252651952758479341L; | ||||
|  | ||||
|     /** | ||||
|      * 主键ID | ||||
|      */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 项目ID | ||||
|      */ | ||||
|     private Long projectId; | ||||
| } | ||||
| @ -0,0 +1,33 @@ | ||||
| package org.dromara.project.domain.req.userprojectrelevancy; | ||||
|  | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author lilemy | ||||
|  * @date 2025/3/5 15:04 | ||||
|  */ | ||||
| @Data | ||||
| public class UserProjectRelevancyUpdateReq implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = -8022860866890925958L; | ||||
|  | ||||
|     /** | ||||
|      * 主键ID | ||||
|      */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 项目ID | ||||
|      */ | ||||
|     private Long projectId; | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package org.dromara.project.domain.resp.userprojectrelevancy; | ||||
|  | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * @author lilemy | ||||
|  * @date 2025/3/5 15:30 | ||||
|  */ | ||||
| @Data | ||||
| public class LoginUserProjectRelevancyResp implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = -2056438621566236671L; | ||||
|  | ||||
|     /** | ||||
|      * 主键ID | ||||
|      */ | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 项目ID | ||||
|      */ | ||||
|     private Long projectId; | ||||
|  | ||||
|     /** | ||||
|      * 项目名称 | ||||
|      */ | ||||
|     private String projectName; | ||||
|  | ||||
|     /** | ||||
|      * 项目简称 | ||||
|      */ | ||||
|     private String shortName; | ||||
| } | ||||
| @ -0,0 +1,148 @@ | ||||
| package org.dromara.project.domain.vo; | ||||
|  | ||||
| import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||
| import com.alibaba.excel.annotation.ExcelProperty; | ||||
| import io.github.linpeilie.annotations.AutoMapper; | ||||
| import lombok.Data; | ||||
| import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||
| import org.dromara.common.excel.convert.ExcelDictConvert; | ||||
| import org.dromara.project.domain.Project; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 项目视图对象 project | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Data | ||||
| @ExcelIgnoreUnannotated | ||||
| @AutoMapper(target = Project.class) | ||||
| public class ProjectVo implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * id | ||||
|      */ | ||||
|     @ExcelProperty(value = "id") | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 项目名称 | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目名称") | ||||
|     private String projectName; | ||||
|  | ||||
|     /** | ||||
|      * 项目简称 | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目简称") | ||||
|     private String shortName; | ||||
|  | ||||
|     /** | ||||
|      * 父项目id | ||||
|      */ | ||||
|     @ExcelProperty(value = "父项目id") | ||||
|     private Long pId; | ||||
|  | ||||
|     /** | ||||
|      * 状态(0正常 1停用) | ||||
|      */ | ||||
|     @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) | ||||
|     @ExcelDictFormat(readConverterExp = "0=正常,1=停用") | ||||
|     private Long status; | ||||
|  | ||||
|     /** | ||||
|      * 项目图片 | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目图片") | ||||
|     private String picUrl; | ||||
|  | ||||
|     /** | ||||
|      * 备注 | ||||
|      */ | ||||
|     @ExcelProperty(value = "备注") | ||||
|     private String remark; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型 | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目类型") | ||||
|     private String type; | ||||
|  | ||||
|     /** | ||||
|      * 项目类型(1光伏 2风电) | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目类型", converter = ExcelDictConvert.class) | ||||
|     @ExcelDictFormat(readConverterExp = "1=光伏,2=风电") | ||||
|     private Long isType; | ||||
|  | ||||
|     /** | ||||
|      * 项目地址 | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目地址") | ||||
|     private String projectSite; | ||||
|  | ||||
|     /** | ||||
|      * 负责人 | ||||
|      */ | ||||
|     @ExcelProperty(value = "负责人") | ||||
|     private String principal; | ||||
|  | ||||
|     /** | ||||
|      * 负责人电话 | ||||
|      */ | ||||
|     @ExcelProperty(value = "负责人电话") | ||||
|     private String principalPhone; | ||||
|  | ||||
|     /** | ||||
|      * 实际容量 | ||||
|      */ | ||||
|     @ExcelProperty(value = "实际容量") | ||||
|     private String actual; | ||||
|  | ||||
|     /** | ||||
|      * 计划容量 | ||||
|      */ | ||||
|     @ExcelProperty(value = "计划容量") | ||||
|     private String plan; | ||||
|  | ||||
|     /** | ||||
|      * 开工时间 | ||||
|      */ | ||||
|     @ExcelProperty(value = "开工时间") | ||||
|     private String onStreamTime; | ||||
|  | ||||
|     /** | ||||
|      * 打卡范围(09:00,18:00) | ||||
|      */ | ||||
|     @ExcelProperty(value = "打卡范围", converter = ExcelDictConvert.class) | ||||
|     @ExcelDictFormat(readConverterExp = "0=9:00,18:00") | ||||
|     private String punchRange; | ||||
|  | ||||
|     /** | ||||
|      * 设计总量 | ||||
|      */ | ||||
|     @ExcelProperty(value = "设计总量") | ||||
|     private Long designTotal; | ||||
|  | ||||
|     /** | ||||
|      * 安全协议书 | ||||
|      */ | ||||
|     @ExcelProperty(value = "安全协议书") | ||||
|     private String securityAgreement; | ||||
|  | ||||
|     /** | ||||
|      * 显示隐藏(0显示 1隐藏) | ||||
|      */ | ||||
|     @ExcelProperty(value = "显示隐藏", converter = ExcelDictConvert.class) | ||||
|     @ExcelDictFormat(readConverterExp = "1=显示,2=隐藏") | ||||
|     private Long showHidden; | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,51 @@ | ||||
| package org.dromara.project.domain.vo; | ||||
|  | ||||
| import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||
| import com.alibaba.excel.annotation.ExcelProperty; | ||||
| import io.github.linpeilie.annotations.AutoMapper; | ||||
| import lombok.Data; | ||||
| import org.dromara.project.domain.UserProjectRelevancy; | ||||
|  | ||||
| import java.io.Serial; | ||||
| import java.io.Serializable; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * 系统用户与项目关联视图对象 user_project_relevancy | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Data | ||||
| @ExcelIgnoreUnannotated | ||||
| @AutoMapper(target = UserProjectRelevancy.class) | ||||
| public class UserProjectRelevancyVo implements Serializable { | ||||
|  | ||||
|     @Serial | ||||
|     private static final long serialVersionUID = 1L; | ||||
|  | ||||
|     /** | ||||
|      * 主键ID | ||||
|      */ | ||||
|     @ExcelProperty(value = "主键ID") | ||||
|     private Long id; | ||||
|  | ||||
|     /** | ||||
|      * 用户ID | ||||
|      */ | ||||
|     @ExcelProperty(value = "用户ID") | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 项目ID | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目ID") | ||||
|     private Long projectId; | ||||
|  | ||||
|     /** | ||||
|      * 项目详情 | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目详情") | ||||
|     private ProjectVo project; | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| package org.dromara.project.mapper; | ||||
|  | ||||
| import org.dromara.project.domain.Project; | ||||
| import org.dromara.project.domain.vo.ProjectVo; | ||||
| import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||
|  | ||||
| /** | ||||
|  * 项目Mapper接口 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| public interface ProjectMapper extends BaseMapperPlus<Project, ProjectVo> { | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| package org.dromara.project.mapper; | ||||
|  | ||||
| import org.dromara.project.domain.UserProjectRelevancy; | ||||
| import org.dromara.project.domain.vo.UserProjectRelevancyVo; | ||||
| import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||
|  | ||||
| /** | ||||
|  * 系统用户与项目关联Mapper接口 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| public interface UserProjectRelevancyMapper extends BaseMapperPlus<UserProjectRelevancy, UserProjectRelevancyVo> { | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,98 @@ | ||||
| package org.dromara.project.service; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
| import com.baomidou.mybatisplus.extension.service.IService; | ||||
| import org.dromara.common.mybatis.core.page.PageQuery; | ||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||
| import org.dromara.project.domain.Project; | ||||
| import org.dromara.project.domain.bo.ProjectBo; | ||||
| import org.dromara.project.domain.req.project.ProjectCreateReq; | ||||
| import org.dromara.project.domain.req.project.ProjectQueryReq; | ||||
| import org.dromara.project.domain.req.project.ProjectUpdateReq; | ||||
| import org.dromara.project.domain.vo.ProjectVo; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 项目Service接口 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| public interface IProjectService extends IService<Project> { | ||||
|  | ||||
|     /** | ||||
|      * 查询项目 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      * @return 项目 | ||||
|      */ | ||||
|     ProjectVo queryById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 获取项目视图对象 | ||||
|      * | ||||
|      * @param project 项目对象 | ||||
|      * @return 项目视图对象 | ||||
|      */ | ||||
|     ProjectVo getProjectVo(Project project); | ||||
|  | ||||
|     /** | ||||
|      * 获取项目查询条件封装 | ||||
|      * | ||||
|      * @param req 查询条件 | ||||
|      * @return 查询条件封装 | ||||
|      */ | ||||
|     QueryWrapper<Project> getQueryWrapper(ProjectQueryReq req); | ||||
|  | ||||
|     /** | ||||
|      * 分页查询项目列表 | ||||
|      * | ||||
|      * @param req 查询条件 | ||||
|      * @return 项目分页列表 | ||||
|      */ | ||||
|     Page<ProjectVo> queryPageList(ProjectQueryReq req); | ||||
|  | ||||
|     /** | ||||
|      * 查询符合条件的项目列表 | ||||
|      * | ||||
|      * @param bo 查询条件 | ||||
|      * @return 项目列表 | ||||
|      */ | ||||
|     List<ProjectVo> queryList(ProjectBo bo); | ||||
|  | ||||
|     /** | ||||
|      * 获取项目分页对象视图 | ||||
|      * | ||||
|      * @param projectPage 项目分页对象 | ||||
|      * @return 项目分页对象视图 | ||||
|      */ | ||||
|     Page<ProjectVo> getProjectVoPage(Page<Project> projectPage); | ||||
|  | ||||
|     /** | ||||
|      * 新增项目 | ||||
|      * | ||||
|      * @param dto 项目 | ||||
|      * @return 新项目 id | ||||
|      */ | ||||
|     Long insertByBo(ProjectCreateReq dto); | ||||
|  | ||||
|     /** | ||||
|      * 修改项目 | ||||
|      * | ||||
|      * @param req 项目 | ||||
|      * @return 是否修改成功 | ||||
|      */ | ||||
|     Boolean updateByBo(ProjectUpdateReq req); | ||||
|  | ||||
|     /** | ||||
|      * 校验并批量删除项目信息 | ||||
|      * | ||||
|      * @param ids     待删除的主键集合 | ||||
|      * @param isValid 是否进行有效性校验 | ||||
|      * @return 是否删除成功 | ||||
|      */ | ||||
|     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||
| } | ||||
| @ -0,0 +1,117 @@ | ||||
| package org.dromara.project.service; | ||||
|  | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
| import com.baomidou.mybatisplus.extension.service.IService; | ||||
| import org.dromara.common.mybatis.core.page.PageQuery; | ||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||
| import org.dromara.project.domain.UserProjectRelevancy; | ||||
| import org.dromara.project.domain.bo.UserProjectRelevancyBo; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyCreateReq; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyUpdateReq; | ||||
| import org.dromara.project.domain.resp.userprojectrelevancy.LoginUserProjectRelevancyResp; | ||||
| import org.dromara.project.domain.vo.UserProjectRelevancyVo; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 系统用户与项目关联Service接口 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| public interface IUserProjectRelevancyService extends IService<UserProjectRelevancy> { | ||||
|  | ||||
|     /** | ||||
|      * 获取系统用户与项目关联视图 | ||||
|      * | ||||
|      * @param userProjectRelevancy 系统用户与项目关联 | ||||
|      * @return 系统用户与项目关联视图 | ||||
|      */ | ||||
|     UserProjectRelevancyVo getUserProjectRelevancyVo(UserProjectRelevancy userProjectRelevancy); | ||||
|  | ||||
|     /** | ||||
|      * 获取系统用户与项目关联分页视图 | ||||
|      * | ||||
|      * @param userProjectRelevancyPage 系统用户与项目关联分页 | ||||
|      * @return 系统用户与项目关联分页视图 | ||||
|      */ | ||||
|     Page<UserProjectRelevancyVo> getUserProjectRelevancyVoPage(Page<UserProjectRelevancy> userProjectRelevancyPage); | ||||
|  | ||||
|     /** | ||||
|      * 查询系统用户与项目关联 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      * @return 系统用户与项目关联 | ||||
|      */ | ||||
|     UserProjectRelevancyVo queryById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 分页查询系统用户与项目关联列表 | ||||
|      * | ||||
|      * @param bo        查询条件 | ||||
|      * @param pageQuery 分页参数 | ||||
|      * @return 系统用户与项目关联分页列表 | ||||
|      */ | ||||
|     TableDataInfo<UserProjectRelevancyVo> queryPageList(UserProjectRelevancyBo bo, PageQuery pageQuery); | ||||
|  | ||||
|     /** | ||||
|      * 查询符合条件的系统用户与项目关联列表 | ||||
|      * | ||||
|      * @param bo 查询条件 | ||||
|      * @return 系统用户与项目关联列表 | ||||
|      */ | ||||
|     List<UserProjectRelevancyVo> queryList(UserProjectRelevancyBo bo); | ||||
|  | ||||
|     /** | ||||
|      * 新增系统用户与项目关联 | ||||
|      * | ||||
|      * @param req 系统用户与项目关联 | ||||
|      * @return 新增关联信息ID | ||||
|      */ | ||||
|     Long insertByBo(UserProjectRelevancyCreateReq req); | ||||
|  | ||||
|     /** | ||||
|      * 修改系统用户与项目关联 | ||||
|      * | ||||
|      * @param req 系统用户与项目关联 | ||||
|      * @return 是否修改成功 | ||||
|      */ | ||||
|     Boolean updateByBo(UserProjectRelevancyUpdateReq req); | ||||
|  | ||||
|     /** | ||||
|      * 校验并批量删除系统用户与项目关联信息 | ||||
|      * | ||||
|      * @param ids     待删除的主键集合 | ||||
|      * @param isValid 是否进行有效性校验 | ||||
|      * @return 是否删除成功 | ||||
|      */ | ||||
|     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||
|  | ||||
|     /** | ||||
|      * 获取当前登录用户项目列表 | ||||
|      * | ||||
|      * @param userId 登录用户ID | ||||
|      * @return 当前登录用户项目列表 | ||||
|      */ | ||||
|     List<LoginUserProjectRelevancyResp> queryListByUserId(Long userId); | ||||
|  | ||||
|     /** | ||||
|      * 获取当前登录用户项目分页 | ||||
|      * | ||||
|      * @param userId 登录用户ID | ||||
|      * @param req    分页查询条件 | ||||
|      * @return 当前登录用户项目分页 | ||||
|      */ | ||||
|     Page<UserProjectRelevancyVo> queryPageByUserId(Long userId, UserProjectRelevancyQueryReq req); | ||||
|  | ||||
|     /** | ||||
|      * 获取用户和项目关联对象查询条件封装 | ||||
|      * | ||||
|      * @param req 查询条件 | ||||
|      * @return 查询条件封装 | ||||
|      */ | ||||
|     QueryWrapper<UserProjectRelevancy> getQueryWrapper(UserProjectRelevancyQueryReq req); | ||||
| } | ||||
| @ -0,0 +1,256 @@ | ||||
| package org.dromara.project.service.impl; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import jakarta.annotation.Resource; | ||||
| import org.dromara.common.core.constant.CommonConstant; | ||||
| import org.dromara.common.core.constant.HttpStatus; | ||||
| import org.dromara.common.core.exception.ServiceException; | ||||
| import org.dromara.common.core.utils.ObjectUtils; | ||||
| import org.dromara.common.core.utils.StringUtils; | ||||
| import org.dromara.common.core.utils.sql.SqlUtil; | ||||
| import org.dromara.project.domain.Project; | ||||
| import org.dromara.project.domain.bo.ProjectBo; | ||||
| import org.dromara.project.domain.req.project.ProjectCreateReq; | ||||
| import org.dromara.project.domain.req.project.ProjectQueryReq; | ||||
| import org.dromara.project.domain.req.project.ProjectUpdateReq; | ||||
| import org.dromara.project.domain.vo.ProjectVo; | ||||
| import org.dromara.project.mapper.ProjectMapper; | ||||
| import org.dromara.project.service.IProjectService; | ||||
| import org.springframework.beans.BeanUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * 项目Service业务层处理 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Service | ||||
| public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> | ||||
|     implements IProjectService { | ||||
|  | ||||
|     @Resource | ||||
|     private ProjectMapper baseMapper; | ||||
|  | ||||
|     /** | ||||
|      * 查询项目 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      * @return 项目 | ||||
|      */ | ||||
|     @Override | ||||
|     public ProjectVo queryById(Long id) { | ||||
|         return baseMapper.selectVoById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ProjectVo getProjectVo(Project project) { | ||||
|         if (project == null) { | ||||
|             return null; | ||||
|         } | ||||
|         // 对象转封装类 | ||||
|         ProjectVo projectVo = new ProjectVo(); | ||||
|         BeanUtils.copyProperties(project, projectVo); | ||||
|         return projectVo; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取项目查询条件封装 | ||||
|      * | ||||
|      * @param req 查询条件 | ||||
|      * @return 查询条件封装 | ||||
|      */ | ||||
|     @Override | ||||
|     public QueryWrapper<Project> getQueryWrapper(ProjectQueryReq req) { | ||||
|         QueryWrapper<Project> queryWrapper = new QueryWrapper<>(); | ||||
|         if (req == null) { | ||||
|             return queryWrapper; | ||||
|         } | ||||
|         // 从对象中取值 | ||||
|         Long id = req.getId(); | ||||
|         String projectName = req.getProjectName(); | ||||
|         String shortName = req.getShortName(); | ||||
|         Long pId = req.getPId(); | ||||
|         Long status = req.getStatus(); | ||||
|         String remark = req.getRemark(); | ||||
|         String type = req.getType(); | ||||
|         Long isType = req.getIsType(); | ||||
|         String projectSite = req.getProjectSite(); | ||||
|         String principal = req.getPrincipal(); | ||||
|         String principalPhone = req.getPrincipalPhone(); | ||||
|         String actual = req.getActual(); | ||||
|         String plan = req.getPlan(); | ||||
|         String onStreamTime = req.getOnStreamTime(); | ||||
|         String punchRange = req.getPunchRange(); | ||||
|         Long designTotal = req.getDesignTotal(); | ||||
|         Long showHidden = req.getShowHidden(); | ||||
|         String sortField = req.getSortField(); | ||||
|         String sortOrder = req.getSortOrder(); | ||||
|         String underlineSortField = StrUtil.toUnderlineCase(sortField); | ||||
|         // 模糊查询 | ||||
|         queryWrapper.like(StringUtils.isNotBlank(projectName), "project_name", projectName); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(shortName), "short_name", shortName); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(remark), "remark", remark); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(type), "type", type); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(projectSite), "project_site", projectSite); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(principal), "principal", principal); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(principalPhone), "principal_phone", principalPhone); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(actual), "actual", actual); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(plan), "plan", plan); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(onStreamTime), "on_stream_time", onStreamTime); | ||||
|         queryWrapper.like(StringUtils.isNotBlank(punchRange), "punch_range", punchRange); | ||||
|         // 精确查询 | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(pId), "p_id", pId); | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(status), "status", status); | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(id), "id", id); | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(isType), "is_type", isType); | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(designTotal), "design_total", designTotal); | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(showHidden), "show_hidden", showHidden); | ||||
|         // 排序规则 | ||||
|         queryWrapper.orderBy(SqlUtil.validSortField(sortField), | ||||
|             sortOrder.equals(CommonConstant.SORT_ORDER_ASC), | ||||
|             underlineSortField); | ||||
|         return queryWrapper; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 分页查询项目列表 | ||||
|      * | ||||
|      * @param req 查询条件 | ||||
|      * @return 项目分页列表 | ||||
|      */ | ||||
|     @Override | ||||
|     public Page<ProjectVo> queryPageList(ProjectQueryReq req) { | ||||
|         long current = req.getCurrent(); | ||||
|         long size = req.getPageSize(); | ||||
|         // 查询数据库 | ||||
|         Page<Project> result = this.page(new Page<>(current, size), this.getQueryWrapper(req)); | ||||
|         return this.getProjectVoPage(result); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询符合条件的项目列表 | ||||
|      * | ||||
|      * @param bo 查询条件 | ||||
|      * @return 项目列表 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<ProjectVo> queryList(ProjectBo bo) { | ||||
|         LambdaQueryWrapper<Project> lqw = buildQueryWrapper(bo); | ||||
|         return baseMapper.selectVoList(lqw); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Page<ProjectVo> getProjectVoPage(Page<Project> projectPage) { | ||||
|         List<Project> projectList = projectPage.getRecords(); | ||||
|         Page<ProjectVo> projectVoPage = new Page<>(projectPage.getCurrent(), projectPage.getSize(), projectPage.getTotal()); | ||||
|         if (CollUtil.isEmpty(projectList)) { | ||||
|             return projectVoPage; | ||||
|         } | ||||
|         // 对象列表 => 封装对象列表 | ||||
|         List<ProjectVo> projectVoList = projectList.stream().map(this::getProjectVo).toList(); | ||||
|         projectVoPage.setRecords(projectVoList); | ||||
|         return projectVoPage; | ||||
|     } | ||||
|  | ||||
|     private LambdaQueryWrapper<Project> buildQueryWrapper(ProjectBo bo) { | ||||
|         LambdaQueryWrapper<Project> lqw = Wrappers.lambdaQuery(); | ||||
|         lqw.orderByAsc(Project::getId); | ||||
|         lqw.like(StringUtils.isNotBlank(bo.getProjectName()), Project::getProjectName, bo.getProjectName()); | ||||
|         lqw.like(StringUtils.isNotBlank(bo.getShortName()), Project::getShortName, bo.getShortName()); | ||||
|         lqw.eq(bo.getPId() != null, Project::getPId, bo.getPId()); | ||||
|         lqw.eq(bo.getStatus() != null, Project::getStatus, bo.getStatus()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getPicUrl()), Project::getPicUrl, bo.getPicUrl()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getType()), Project::getType, bo.getType()); | ||||
|         lqw.eq(bo.getIsType() != null, Project::getIsType, bo.getIsType()); | ||||
|         lqw.eq(bo.getDeletedAt() != null, Project::getDeletedAt, bo.getDeletedAt()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getProjectSite()), Project::getProjectSite, bo.getProjectSite()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getPrincipal()), Project::getPrincipal, bo.getPrincipal()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getPrincipalPhone()), Project::getPrincipalPhone, bo.getPrincipalPhone()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getActual()), Project::getActual, bo.getActual()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getPlan()), Project::getPlan, bo.getPlan()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getOnStreamTime()), Project::getOnStreamTime, bo.getOnStreamTime()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getPunchRange()), Project::getPunchRange, bo.getPunchRange()); | ||||
|         lqw.eq(bo.getDesignTotal() != null, Project::getDesignTotal, bo.getDesignTotal()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getSecurityAgreement()), Project::getSecurityAgreement, bo.getSecurityAgreement()); | ||||
|         lqw.eq(bo.getSort() != null, Project::getSort, bo.getSort()); | ||||
|         lqw.eq(bo.getShowHidden() != null, Project::getShowHidden, bo.getShowHidden()); | ||||
|         return lqw; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增项目 | ||||
|      * | ||||
|      * @param dto 项目 | ||||
|      * @return 新项目 id | ||||
|      */ | ||||
|     @Override | ||||
|     public Long insertByBo(ProjectCreateReq dto) { | ||||
|         // 将实体类和 DTO 进行转换 | ||||
|         Project project = new Project(); | ||||
|         BeanUtils.copyProperties(dto, project); | ||||
|         // 数据校验 | ||||
|         validEntityBeforeSave(project); | ||||
|         // 写入数据库 | ||||
|         boolean save = this.save(project); | ||||
|         if (!save) { | ||||
|             throw new ServiceException("新增项目失败,数据库异常", HttpStatus.ERROR); | ||||
|         } | ||||
|         // 返回新写入的数据 id | ||||
|         return project.getId(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改项目 | ||||
|      * | ||||
|      * @param req 项目 | ||||
|      * @return 是否修改成功 | ||||
|      */ | ||||
|     @Override | ||||
|     public Boolean updateByBo(ProjectUpdateReq req) { | ||||
|         // 将实体类和 DTO 进行转换 | ||||
|         Project project = new Project(); | ||||
|         BeanUtils.copyProperties(req, project); | ||||
|         // 数据校验 | ||||
|         validEntityBeforeSave(project); | ||||
|         // 判断是否存在 | ||||
|         Project oldProject = this.getById(project.getId()); | ||||
|         if (oldProject == null) { | ||||
|             throw new ServiceException("修改项目失败,数据不存在", HttpStatus.NOT_FOUND); | ||||
|         } | ||||
|         // 操作数据库 | ||||
|         return this.updateById(project); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 保存前的数据校验 | ||||
|      */ | ||||
|     private void validEntityBeforeSave(Project entity) { | ||||
|         //TODO 做一些数据校验,如唯一约束 | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 校验并批量删除项目信息 | ||||
|      * | ||||
|      * @param ids     待删除的主键集合 | ||||
|      * @param isValid 是否进行有效性校验 | ||||
|      * @return 是否删除成功 | ||||
|      */ | ||||
|     @Override | ||||
|     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||
|         if (isValid) { | ||||
|             //TODO 做一些业务上的校验,判断是否需要校验 | ||||
|  | ||||
|         } | ||||
|         return baseMapper.deleteByIds(ids) > 0; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,287 @@ | ||||
| package org.dromara.project.service.impl; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import jakarta.annotation.Resource; | ||||
| import org.dromara.common.core.constant.CommonConstant; | ||||
| import org.dromara.common.core.constant.HttpStatus; | ||||
| import org.dromara.common.core.exception.ServiceException; | ||||
| import org.dromara.common.core.utils.ObjectUtils; | ||||
| import org.dromara.common.core.utils.sql.SqlUtil; | ||||
| import org.dromara.common.mybatis.core.page.PageQuery; | ||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||
| import org.dromara.project.domain.Project; | ||||
| import org.dromara.project.domain.UserProjectRelevancy; | ||||
| import org.dromara.project.domain.bo.UserProjectRelevancyBo; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyCreateReq; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq; | ||||
| import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyUpdateReq; | ||||
| import org.dromara.project.domain.resp.userprojectrelevancy.LoginUserProjectRelevancyResp; | ||||
| import org.dromara.project.domain.vo.UserProjectRelevancyVo; | ||||
| import org.dromara.project.mapper.UserProjectRelevancyMapper; | ||||
| import org.dromara.project.service.IProjectService; | ||||
| import org.dromara.project.service.IUserProjectRelevancyService; | ||||
| import org.dromara.system.service.ISysUserService; | ||||
| import org.springframework.beans.BeanUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
|  | ||||
| /** | ||||
|  * 系统用户与项目关联Service业务层处理 | ||||
|  * | ||||
|  * @author lcj | ||||
|  * @date 2025-03-04 | ||||
|  */ | ||||
| @Service | ||||
| public class UserProjectRelevancyServiceImpl extends ServiceImpl<UserProjectRelevancyMapper, UserProjectRelevancy> | ||||
|     implements IUserProjectRelevancyService { | ||||
|  | ||||
|     @Resource | ||||
|     private UserProjectRelevancyMapper baseMapper; | ||||
|  | ||||
|     @Resource | ||||
|     private ISysUserService userService; | ||||
|  | ||||
|     @Resource | ||||
|     private IProjectService projectService; | ||||
|  | ||||
|     @Override | ||||
|     public UserProjectRelevancyVo getUserProjectRelevancyVo(UserProjectRelevancy userProjectRelevancy) { | ||||
|         // 对象转封装类 | ||||
|         UserProjectRelevancyVo userProjectRelevancyVo = new UserProjectRelevancyVo(); | ||||
|         if (userProjectRelevancy == null) { | ||||
|             return userProjectRelevancyVo; | ||||
|         } | ||||
|         BeanUtils.copyProperties(userProjectRelevancy, userProjectRelevancyVo); | ||||
|         // 关联查询项目信息 | ||||
|         Long projectId = userProjectRelevancy.getProjectId(); | ||||
|         if (projectId != null) { | ||||
|             userProjectRelevancyVo.setProject(projectService.queryById(projectId)); | ||||
|         } | ||||
|         return userProjectRelevancyVo; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Page<UserProjectRelevancyVo> getUserProjectRelevancyVoPage(Page<UserProjectRelevancy> userProjectRelevancyPage) { | ||||
|         List<UserProjectRelevancy> userProjectRelevancyList = userProjectRelevancyPage.getRecords(); | ||||
|         Page<UserProjectRelevancyVo> userProjectRelevancyVoPage = new Page<>( | ||||
|             userProjectRelevancyPage.getCurrent(), | ||||
|             userProjectRelevancyPage.getSize(), | ||||
|             userProjectRelevancyPage.getTotal()); | ||||
|         if (CollUtil.isEmpty(userProjectRelevancyList)) { | ||||
|             return userProjectRelevancyVoPage; | ||||
|         } | ||||
|         // 对象列表 => 封装对象列表 | ||||
|         List<UserProjectRelevancyVo> userProjectRelevancyVoList = userProjectRelevancyList.stream().map(this::getUserProjectRelevancyVo).toList(); | ||||
|         userProjectRelevancyVoPage.setRecords(userProjectRelevancyVoList); | ||||
|         return userProjectRelevancyVoPage; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询系统用户与项目关联 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      * @return 系统用户与项目关联 | ||||
|      */ | ||||
|     @Override | ||||
|     public UserProjectRelevancyVo queryById(Long id) { | ||||
|         // 查询数据 | ||||
|         UserProjectRelevancy userProjectRelevancy = this.getById(id); | ||||
|         // 封装并返回 | ||||
|         return this.getUserProjectRelevancyVo(userProjectRelevancy); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 分页查询系统用户与项目关联列表 | ||||
|      * | ||||
|      * @param bo        查询条件 | ||||
|      * @param pageQuery 分页参数 | ||||
|      * @return 系统用户与项目关联分页列表 | ||||
|      */ | ||||
|     @Override | ||||
|     public TableDataInfo<UserProjectRelevancyVo> queryPageList(UserProjectRelevancyBo bo, PageQuery pageQuery) { | ||||
|         Page<UserProjectRelevancyVo> resultVo = pageQuery.build(); | ||||
|         LambdaQueryWrapper<UserProjectRelevancy> lqw = buildQueryWrapper(bo); | ||||
|         Page<UserProjectRelevancy> result = this.page(pageQuery.build(), lqw); | ||||
|         if (CollUtil.isEmpty(result.getRecords())) { | ||||
|             return TableDataInfo.build(resultVo); | ||||
|         } | ||||
|         List<UserProjectRelevancyVo> userProjectRelevancyVos = result.getRecords().stream().map(this::getUserProjectRelevancyVo).toList(); | ||||
|         resultVo.setRecords(userProjectRelevancyVos); | ||||
|         return TableDataInfo.build(resultVo); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询符合条件的系统用户与项目关联列表 | ||||
|      * | ||||
|      * @param bo 查询条件 | ||||
|      * @return 系统用户与项目关联列表 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<UserProjectRelevancyVo> queryList(UserProjectRelevancyBo bo) { | ||||
|         LambdaQueryWrapper<UserProjectRelevancy> lqw = buildQueryWrapper(bo); | ||||
|         return baseMapper.selectVoList(lqw); | ||||
|     } | ||||
|  | ||||
|     private LambdaQueryWrapper<UserProjectRelevancy> buildQueryWrapper(UserProjectRelevancyBo bo) { | ||||
|         LambdaQueryWrapper<UserProjectRelevancy> lqw = Wrappers.lambdaQuery(); | ||||
|         lqw.orderByAsc(UserProjectRelevancy::getId); | ||||
|         lqw.eq(bo.getUserId() != null, UserProjectRelevancy::getUserId, bo.getUserId()); | ||||
|         lqw.eq(bo.getProjectId() != null, UserProjectRelevancy::getProjectId, bo.getProjectId()); | ||||
|         return lqw; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 新增系统用户与项目关联 | ||||
|      * | ||||
|      * @param req 系统用户与项目关联 | ||||
|      * @return 是否新增成功 | ||||
|      */ | ||||
|     @Override | ||||
|     public Long insertByBo(UserProjectRelevancyCreateReq req) { | ||||
|         // 将实体类和 DTO 进行转换 | ||||
|         UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); | ||||
|         BeanUtils.copyProperties(req, userProjectRelevancy); | ||||
|         // 数据校验 | ||||
|         validEntityBeforeSave(userProjectRelevancy); | ||||
|         // 写入数据库 | ||||
|         boolean save = this.save(userProjectRelevancy); | ||||
|         if (!save) { | ||||
|             throw new ServiceException("新增用户和项目关联失败,数据库异常", HttpStatus.ERROR); | ||||
|         } | ||||
|         // 返回新写入的数据 id | ||||
|         return userProjectRelevancy.getId(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 修改系统用户与项目关联 | ||||
|      * | ||||
|      * @param req 系统用户与项目关联 | ||||
|      * @return 是否修改成功 | ||||
|      */ | ||||
|     @Override | ||||
|     public Boolean updateByBo(UserProjectRelevancyUpdateReq req) { | ||||
|         // 将实体类和 DTO 进行转换 | ||||
|         UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); | ||||
|         BeanUtils.copyProperties(req, userProjectRelevancy); | ||||
|         // 数据校验 | ||||
|         validEntityBeforeSave(userProjectRelevancy); | ||||
|         // 判断是否存在 | ||||
|         UserProjectRelevancy oldUserProjectRelevancy = this.getById(userProjectRelevancy.getId()); | ||||
|         if (oldUserProjectRelevancy == null) { | ||||
|             throw new ServiceException("修改用户和项目关联失败,数据不存在", HttpStatus.NOT_FOUND); | ||||
|         } | ||||
|         // 操作数据库 | ||||
|         return this.updateById(oldUserProjectRelevancy); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 保存前的数据校验 | ||||
|      */ | ||||
|     private void validEntityBeforeSave(UserProjectRelevancy entity) { | ||||
|         // TODO 做一些数据校验,如唯一约束 | ||||
|         Long projectId = entity.getProjectId(); | ||||
|         Long userId = entity.getUserId(); | ||||
|         if (projectId == null) { | ||||
|             throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST); | ||||
|         } | ||||
|         if (userId == null) { | ||||
|             throw new ServiceException("用户 id 不能为空", HttpStatus.BAD_REQUEST); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 校验并批量删除系统用户与项目关联信息 | ||||
|      * | ||||
|      * @param ids     待删除的主键集合 | ||||
|      * @param isValid 是否进行有效性校验 | ||||
|      * @return 是否删除成功 | ||||
|      */ | ||||
|     @Override | ||||
|     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||
|         if (isValid) { | ||||
|             //TODO 做一些业务上的校验,判断是否需要校验 | ||||
|         } | ||||
|         return baseMapper.deleteByIds(ids) > 0; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取当前登录用户项目列表 | ||||
|      * | ||||
|      * @param userId 登录用户ID | ||||
|      * @return 当前登录用户项目列表 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<LoginUserProjectRelevancyResp> queryListByUserId(Long userId) { | ||||
|         // 添加查询条件,根据当前用户,获取数据 | ||||
|         LambdaQueryWrapper<UserProjectRelevancy> queryWrapper = Wrappers.lambdaQuery(); | ||||
|         queryWrapper.eq(UserProjectRelevancy::getUserId, userId); | ||||
|         // 查询数据库,获取数据 | ||||
|         List<UserProjectRelevancy> list = this.list(queryWrapper); | ||||
|         // 获取封装 | ||||
|         return list.stream() | ||||
|             .map(userProjectRelevancy -> { | ||||
|                 Long projectId = userProjectRelevancy.getProjectId(); | ||||
|                 QueryWrapper<Project> projectQueryWrapper = new QueryWrapper<>(); | ||||
|                 projectQueryWrapper.eq("id", projectId); | ||||
|                 Project project = projectService.getOne(projectQueryWrapper); | ||||
|                 if (project != null) { | ||||
|                     LoginUserProjectRelevancyResp loginUserProjectRelevancy = new LoginUserProjectRelevancyResp(); | ||||
|                     loginUserProjectRelevancy.setId(userProjectRelevancy.getId()); | ||||
|                     loginUserProjectRelevancy.setUserId(userProjectRelevancy.getUserId()); | ||||
|                     loginUserProjectRelevancy.setProjectId(projectId); | ||||
|                     loginUserProjectRelevancy.setProjectName(project.getProjectName()); | ||||
|                     loginUserProjectRelevancy.setShortName(project.getShortName()); | ||||
|                     return loginUserProjectRelevancy; | ||||
|                 } | ||||
|                 return null; | ||||
|             }) | ||||
|             .filter(Objects::nonNull) | ||||
|             .toList(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Page<UserProjectRelevancyVo> queryPageByUserId(Long userId, UserProjectRelevancyQueryReq req) { | ||||
|         long current = req.getCurrent(); | ||||
|         long size = req.getPageSize(); | ||||
|         // 添加查询条件 | ||||
|         req.setUserId(userId); | ||||
|         QueryWrapper<UserProjectRelevancy> queryWrapper = this.getQueryWrapper(req); | ||||
|         // 查询数据库 | ||||
|         Page<UserProjectRelevancy> result = this.page(new Page<>(current, size), queryWrapper); | ||||
|         return this.getUserProjectRelevancyVoPage(result); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public QueryWrapper<UserProjectRelevancy> getQueryWrapper(UserProjectRelevancyQueryReq req) { | ||||
|         QueryWrapper<UserProjectRelevancy> queryWrapper = new QueryWrapper<>(); | ||||
|         if (req == null) { | ||||
|             return queryWrapper; | ||||
|         } | ||||
|         // 从对象中取值 | ||||
|         Long id = req.getId(); | ||||
|         Long userId = req.getUserId(); | ||||
|         Long projectId = req.getProjectId(); | ||||
|         String sortField = req.getSortField(); | ||||
|         String sortOrder = req.getSortOrder(); | ||||
|         String underlineSortField = StrUtil.toUnderlineCase(sortField); | ||||
|         // 精确查询 | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(id), "id", id); | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(userId), "user_id", userId); | ||||
|         queryWrapper.eq(ObjectUtils.isNotEmpty(projectId), "project_id", projectId); | ||||
|         // 排序规则 | ||||
|         queryWrapper.orderBy(SqlUtil.validSortField(sortField), | ||||
|             sortOrder.equals(CommonConstant.SORT_ORDER_ASC), | ||||
|             underlineSortField); | ||||
|         return queryWrapper; | ||||
|     } | ||||
| } | ||||
| @ -1,3 +0,0 @@ | ||||
| java包使用 `.` 分割 resource 目录使用 `/` 分割 | ||||
| <br> | ||||
| 此文件目的 防止文件夹粘连找不到 `xml` 文件 | ||||
| @ -0,0 +1,7 @@ | ||||
| <?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="org.dromara.project.mapper.ProjectMapper"> | ||||
|  | ||||
| </mapper> | ||||
| @ -0,0 +1,7 @@ | ||||
| <?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="org.dromara.project.mapper.UserProjectRelevancyMapper"> | ||||
|  | ||||
| </mapper> | ||||
							
								
								
									
										120
									
								
								RuoYi-Vue-Plus/script/sql/xinnengyuan.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								RuoYi-Vue-Plus/script/sql/xinnengyuan.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,120 @@ | ||||
| use energy; | ||||
|  | ||||
| drop table if exists `project`; | ||||
| create table `project` | ||||
| ( | ||||
|     `id`                 bigint                                not null auto_increment, | ||||
|     `project_name`       varchar(64)                           null comment '项目名称', | ||||
|     `short_name`         varchar(64)                           null comment '项目简称', | ||||
|     `p_id`               bigint                                null comment '父项目id', | ||||
|     `status`             tinyint(4)  default 0                 null comment '状态(0正常 1停用)', | ||||
|     `pic_url`            varchar(255)                          null comment '项目图片', | ||||
|     `remark`             varchar(500)                          null comment '备注', | ||||
|     `type`               varchar(20)                           null comment '项目类型', | ||||
|     `is_type`            tinyint(4)                            null comment '项目类型(1光伏 2风电)', | ||||
|     `create_by`          bigint                                null comment '创建者', | ||||
|     `update_by`          bigint                                null comment '更新者', | ||||
|     `create_time`        datetime    default CURRENT_TIMESTAMP null comment '创建时间', | ||||
|     `update_time`        datetime    default CURRENT_TIMESTAMP null ON UPDATE CURRENT_TIMESTAMP comment '更新时间', | ||||
|     `deleted_at`         datetime                              null comment '删除时间', | ||||
|     `project_site`       varchar(255)                          null comment '项目地址', | ||||
|     `principal`          varchar(50)                           null comment '负责人', | ||||
|     `principal_phone`    varchar(50)                           null comment '负责人电话', | ||||
|     `actual`             varchar(64)                           null comment '实际容量', | ||||
|     `plan`               varchar(64)                           null comment '计划容量', | ||||
|     `on_stream_time`     varchar(64)                           null comment '开工时间', | ||||
|     `punch_range`        varchar(30) default '09:00,18:00'     not null comment '打卡范围(09:00,18:00)', | ||||
|     `design_total`       int         default 0                 not null comment '设计总量', | ||||
|     `security_agreement` varchar(255)                          null comment '安全协议书', | ||||
|     `sort`               bigint      default 0                 not null comment '排序字段', | ||||
|     `show_hidden`        tinyint(4)  default 0                 not null comment '显示隐藏(0显示 1隐藏)', | ||||
|     `is_delete`          tinyint(4)  default 0                 not null comment '是否删除(0正常 1删除)', | ||||
|     PRIMARY KEY (`id`) USING BTREE | ||||
| ) ENGINE = InnoDB | ||||
|   AUTO_INCREMENT = 60 | ||||
|   CHARACTER SET = utf8mb4 | ||||
|   COLLATE = utf8mb4_general_ci comment = '项目表' | ||||
|   ROW_FORMAT = DYNAMIC; | ||||
|  | ||||
| DROP TABLE IF EXISTS `user_project_relevancy`; | ||||
| CREATE TABLE `user_project_relevancy` | ||||
| ( | ||||
|     `id`          bigint                             not null AUTO_INCREMENT COMMENT '主键ID', | ||||
|     `user_id`     bigint                             not null comment '用户ID', | ||||
|     `project_id`  bigint                             not null comment '项目ID', | ||||
|     `create_by`   varchar(50)                        null comment '创建人', | ||||
|     `update_by`   varchar(50)                        null comment '更新人', | ||||
|     `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', | ||||
|     `update_time` datetime default CURRENT_TIMESTAMP null ON UPDATE CURRENT_TIMESTAMP comment '更新时间', | ||||
|     PRIMARY KEY (`id`) USING BTREE, | ||||
|     INDEX `user_id` (`user_id` ASC) USING BTREE COMMENT '用户id', | ||||
|     INDEX `project_id` (`project_id` ASC) USING BTREE COMMENT '项目id' | ||||
| ) ENGINE = InnoDB | ||||
|   AUTO_INCREMENT = 1365 | ||||
|   CHARACTER SET = utf8mb4 | ||||
|   COLLATE = utf8mb4_general_ci COMMENT = '系统用户与项目关联' | ||||
|   ROW_FORMAT = DYNAMIC; | ||||
|  | ||||
| -- 菜单 SQL | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896943300447367169, '项目', '1', '1', 'project', 'project/project/index', 1, 0, 'C', '0', '0', | ||||
|         'project:project:list', '#', 103, 1, sysdate(), null, null, '项目菜单'); | ||||
|  | ||||
| -- 按钮 SQL | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896943300447367170, '项目查询', 1896943300447367169, '1', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:project:query', '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896943300447367171, '项目新增', 1896943300447367169, '2', '#', '', 1, 0, 'F', '0', '0', 'project:project:add', | ||||
|         '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896943300447367172, '项目修改', 1896943300447367169, '3', '#', '', 1, 0, 'F', '0', '0', 'project:project:edit', | ||||
|         '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896943300447367173, '项目删除', 1896943300447367169, '4', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:project:remove', '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896943300447367174, '项目导出', 1896943300447367169, '5', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:project:export', '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| -- 菜单 SQL | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896949180526047233, '系统用户与项目关联', '1', '1', 'projectRelevancy', 'project/projectRelevancy/index', 1, 0, | ||||
|         'C', '0', '0', 'project:projectRelevancy:list', '#', 103, 1, sysdate(), null, null, '系统用户与项目关联菜单'); | ||||
|  | ||||
| -- 按钮 SQL | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896949180526047234, '系统用户与项目关联查询', 1896949180526047233, '1', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:projectRelevancy:query', '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896949180526047235, '系统用户与项目关联新增', 1896949180526047233, '2', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:projectRelevancy:add', '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896949180526047236, '系统用户与项目关联修改', 1896949180526047233, '3', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:projectRelevancy:edit', '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896949180526047237, '系统用户与项目关联删除', 1896949180526047233, '4', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:projectRelevancy:remove', '#', 103, 1, sysdate(), null, null, ''); | ||||
|  | ||||
| insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, | ||||
|                       status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) | ||||
| values (1896949180526047238, '系统用户与项目关联导出', 1896949180526047233, '5', '#', '', 1, 0, 'F', '0', '0', | ||||
|         'project:projectRelevancy:export', '#', 103, 1, sysdate(), null, null, ''); | ||||
		Reference in New Issue
	
	Block a user