diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java index fd0e3788..aa647e4c 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/UserProjectRelevancyController.java @@ -2,6 +2,7 @@ package org.dromara.project.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -17,7 +18,9 @@ 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.UserProjectRelevancy; import org.dromara.project.domain.bo.UserProjectRelevancyBo; +import org.dromara.project.domain.req.project.ProjectBatchByProjectListReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyCreateReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyUpdateReq; @@ -27,6 +30,7 @@ import org.dromara.project.service.IUserProjectRelevancyService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Arrays; import java.util.List; /** @@ -46,6 +50,7 @@ public class UserProjectRelevancyController extends BaseController { /** * 查询系统用户与项目关联列表 */ + @Tag(name = "查询用户与项目关联列表") @SaCheckPermission("project:projectRelevancy:list") @GetMapping("/list") public TableDataInfo list(UserProjectRelevancyBo bo, PageQuery pageQuery) { @@ -55,6 +60,7 @@ public class UserProjectRelevancyController extends BaseController { /** * 查询登录用户与项目关联列表 */ + @Tag(name = "查询登录用户与项目关联列表") @SaCheckPermission("project:projectRelevancy:list") @GetMapping("/login/list") public R> listByLoginUser() { @@ -65,6 +71,7 @@ public class UserProjectRelevancyController extends BaseController { /** * 查询登录用户与项目关联分页 */ + @Tag(name = "查询登录用户与项目关联分页") @SaCheckPermission("project:projectRelevancy:list") @GetMapping("/login/page") public R> pageByLoginUser(UserProjectRelevancyQueryReq req) { @@ -75,6 +82,7 @@ public class UserProjectRelevancyController extends BaseController { /** * 导出系统用户与项目关联列表 */ + @Tag(name = "导出用户与项目关联列表") @SaCheckPermission("project:projectRelevancy:export") @Log(title = "系统用户与项目关联", businessType = BusinessType.EXPORT) @PostMapping("/export") @@ -88,6 +96,7 @@ public class UserProjectRelevancyController extends BaseController { * * @param id 主键 */ + @Tag(name = "获取用户与项目关联详细信息") @SaCheckPermission("project:projectRelevancy:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @@ -98,6 +107,7 @@ public class UserProjectRelevancyController extends BaseController { /** * 新增系统用户与项目关联 */ + @Tag(name = "新增用户与项目关联") @SaCheckPermission("project:projectRelevancy:add") @Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT) @RepeatSubmit() @@ -106,9 +116,53 @@ public class UserProjectRelevancyController extends BaseController { return R.ok(userProjectRelevancyService.insertByBo(req)); } + /** + * 新增系统用户与项目列表关联 + */ + @Tag(name = "新增用户与项目列表关联") + @SaCheckPermission("project:projectRelevancy:add") + @Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/add/project/list") + public R addBatchByProjectList(@RequestBody ProjectBatchByProjectListReq req) { + Long userId = req.getUserId(); + Long[] projectIdList = req.getProjectIdList(); + List userProjectRelevancyList = Arrays.stream(projectIdList).map(projectId -> { + UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); + userProjectRelevancy.setUserId(userId); + userProjectRelevancy.setProjectId(projectId); + return userProjectRelevancy; + }).toList(); + boolean result = userProjectRelevancyService.saveBatch(userProjectRelevancyList); + return R.ok(result); + } + + /** + * 移除系统用户与项目列表关联 + */ + @Tag(name = "移除用户与项目列表关联") + @SaCheckPermission("project:projectRelevancy:remove") + @Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT) + @RepeatSubmit() + @DeleteMapping("/remove/project/list") + public R removeBatchByProjectList(@RequestBody ProjectBatchByProjectListReq req) { + Long userId = req.getUserId(); + Long[] projectIdList = req.getProjectIdList(); + List userProjectRelevancyList = Arrays.stream(projectIdList).map(projectId -> { + UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); + userProjectRelevancy.setUserId(userId); + userProjectRelevancy.setProjectId(projectId); + return userProjectRelevancy; + }).toList(); + boolean result = userProjectRelevancyService.removeBatchByIds(userProjectRelevancyList); + return R.ok(result); + } + + /** * 修改系统用户与项目关联 */ + @Tag(name = "修改用户与项目关联") @SaCheckPermission("project:projectRelevancy:edit") @Log(title = "系统用户与项目关联", businessType = BusinessType.UPDATE) @RepeatSubmit() @@ -122,6 +176,7 @@ public class UserProjectRelevancyController extends BaseController { * * @param ids 主键串 */ + @Tag(name = "删除用户与项目关联") @SaCheckPermission("project:projectRelevancy:remove") @Log(title = "系统用户与项目关联", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/Project.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/Project.java index 5a1d03e9..5e8eafc6 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/Project.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/Project.java @@ -55,6 +55,16 @@ public class Project extends BaseEntity { */ private String picUrl; + /** + * 经度 + */ + private String lng; + + /** + * 纬度 + */ + private String lat; + /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectBatchByProjectListReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectBatchByProjectListReq.java new file mode 100644 index 00000000..5e96e55f --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectBatchByProjectListReq.java @@ -0,0 +1,28 @@ +package org.dromara.project.domain.req.project; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025/3/5 17:16 + */ +@Data +public class ProjectBatchByProjectListReq implements Serializable { + + @Serial + private static final long serialVersionUID = -3366498681076059844L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 项目ID列表 + */ + private Long[] projectIdList; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectCreateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectCreateReq.java index feb8d5a6..55310603 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectCreateReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectCreateReq.java @@ -35,6 +35,16 @@ public class ProjectCreateReq implements Serializable { */ private String picUrl; + /** + * 经度 + */ + private String lng; + + /** + * 纬度 + */ + private String lat; + /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectQueryReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectQueryReq.java index d4c0fa1d..ae8ceac6 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectQueryReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectQueryReq.java @@ -43,6 +43,16 @@ public class ProjectQueryReq extends PageRequest implements Serializable { */ private Long status; + /** + * 经度 + */ + private String lng; + + /** + * 纬度 + */ + private String lat; + /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectUpdateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectUpdateReq.java index 0b621734..73229bf1 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectUpdateReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/project/ProjectUpdateReq.java @@ -16,7 +16,7 @@ public class ProjectUpdateReq implements Serializable { private static final long serialVersionUID = 3431952359907567659L; /** - * + * id */ private Long id; @@ -45,6 +45,16 @@ public class ProjectUpdateReq implements Serializable { */ private String picUrl; + /** + * 经度 + */ + private String lng; + + /** + * 纬度 + */ + private String lat; + /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/ProjectVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/ProjectVo.java index 2b7cc965..1cd54279 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/ProjectVo.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/ProjectVo.java @@ -12,7 +12,6 @@ import java.io.Serial; import java.io.Serializable; - /** * 项目视图对象 project * @@ -64,6 +63,18 @@ public class ProjectVo implements Serializable { @ExcelProperty(value = "项目图片") private String picUrl; + /** + * 经度 + */ + @ExcelProperty(value = "经度") + private String lng; + + /** + * 纬度 + */ + @ExcelProperty(value = "纬度") + private String lat; + /** * 备注 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/ProjectServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/ProjectServiceImpl.java index 4dfebc50..faddedad 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/ProjectServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/ProjectServiceImpl.java @@ -14,7 +14,9 @@ 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.common.satoken.utils.LoginHelper; import org.dromara.project.domain.Project; +import org.dromara.project.domain.UserProjectRelevancy; import org.dromara.project.domain.bo.ProjectBo; import org.dromara.project.domain.req.project.ProjectCreateReq; import org.dromara.project.domain.req.project.ProjectQueryReq; @@ -22,7 +24,10 @@ 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.dromara.project.service.IUserProjectRelevancyService; +import org.dromara.system.service.ISysUserService; import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Collection; @@ -41,6 +46,13 @@ public class ProjectServiceImpl extends ServiceImpl @Resource private ProjectMapper baseMapper; + @Resource + private ISysUserService userService; + + @Lazy + @Resource + private IUserProjectRelevancyService userProjectRelevancyService; + /** * 查询项目 * @@ -205,8 +217,18 @@ public class ProjectServiceImpl extends ServiceImpl if (!save) { throw new ServiceException("新增项目失败,数据库异常", HttpStatus.ERROR); } - // 返回新写入的数据 id - return project.getId(); + Long projectId = project.getId(); + Long userId = LoginHelper.getUserId(); + // 同步保存用户与项目关联 + UserProjectRelevancy userProjectRelevancy = new UserProjectRelevancy(); + userProjectRelevancy.setUserId(userId); + userProjectRelevancy.setProjectId(projectId); + boolean saveRelevancy = userProjectRelevancyService.save(userProjectRelevancy); + if (!saveRelevancy) { + throw new ServiceException("新增用户与项目关联失败,数据库异常", HttpStatus.ERROR); + } + // 返回新写入的数据 projectId + return projectId; } /** diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java index c2eee2e9..45461a78 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/UserProjectRelevancyServiceImpl.java @@ -26,7 +26,6 @@ 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; @@ -47,9 +46,6 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl