完成项目、用户与项目关系模块

This commit is contained in:
lcj
2025-03-06 09:17:05 +08:00
parent 93e8ee265f
commit a17f735969
10 changed files with 162 additions and 8 deletions

View File

@ -2,6 +2,7 @@ package org.dromara.project.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; 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.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; 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.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.UserProjectRelevancyCreateReq;
import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq; import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyQueryReq;
import org.dromara.project.domain.req.userprojectrelevancy.UserProjectRelevancyUpdateReq; 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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
@ -46,6 +50,7 @@ public class UserProjectRelevancyController extends BaseController {
/** /**
* 查询系统用户与项目关联列表 * 查询系统用户与项目关联列表
*/ */
@Tag(name = "查询用户与项目关联列表")
@SaCheckPermission("project:projectRelevancy:list") @SaCheckPermission("project:projectRelevancy:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<UserProjectRelevancyVo> list(UserProjectRelevancyBo bo, PageQuery pageQuery) { public TableDataInfo<UserProjectRelevancyVo> list(UserProjectRelevancyBo bo, PageQuery pageQuery) {
@ -55,6 +60,7 @@ public class UserProjectRelevancyController extends BaseController {
/** /**
* 查询登录用户与项目关联列表 * 查询登录用户与项目关联列表
*/ */
@Tag(name = "查询登录用户与项目关联列表")
@SaCheckPermission("project:projectRelevancy:list") @SaCheckPermission("project:projectRelevancy:list")
@GetMapping("/login/list") @GetMapping("/login/list")
public R<List<LoginUserProjectRelevancyResp>> listByLoginUser() { public R<List<LoginUserProjectRelevancyResp>> listByLoginUser() {
@ -65,6 +71,7 @@ public class UserProjectRelevancyController extends BaseController {
/** /**
* 查询登录用户与项目关联分页 * 查询登录用户与项目关联分页
*/ */
@Tag(name = "查询登录用户与项目关联分页")
@SaCheckPermission("project:projectRelevancy:list") @SaCheckPermission("project:projectRelevancy:list")
@GetMapping("/login/page") @GetMapping("/login/page")
public R<Page<UserProjectRelevancyVo>> pageByLoginUser(UserProjectRelevancyQueryReq req) { public R<Page<UserProjectRelevancyVo>> pageByLoginUser(UserProjectRelevancyQueryReq req) {
@ -75,6 +82,7 @@ public class UserProjectRelevancyController extends BaseController {
/** /**
* 导出系统用户与项目关联列表 * 导出系统用户与项目关联列表
*/ */
@Tag(name = "导出用户与项目关联列表")
@SaCheckPermission("project:projectRelevancy:export") @SaCheckPermission("project:projectRelevancy:export")
@Log(title = "系统用户与项目关联", businessType = BusinessType.EXPORT) @Log(title = "系统用户与项目关联", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
@ -88,6 +96,7 @@ public class UserProjectRelevancyController extends BaseController {
* *
* @param id 主键 * @param id 主键
*/ */
@Tag(name = "获取用户与项目关联详细信息")
@SaCheckPermission("project:projectRelevancy:query") @SaCheckPermission("project:projectRelevancy:query")
@GetMapping("/{id}") @GetMapping("/{id}")
public R<UserProjectRelevancyVo> getInfo(@NotNull(message = "主键不能为空") public R<UserProjectRelevancyVo> getInfo(@NotNull(message = "主键不能为空")
@ -98,6 +107,7 @@ public class UserProjectRelevancyController extends BaseController {
/** /**
* 新增系统用户与项目关联 * 新增系统用户与项目关联
*/ */
@Tag(name = "新增用户与项目关联")
@SaCheckPermission("project:projectRelevancy:add") @SaCheckPermission("project:projectRelevancy:add")
@Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT) @Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@ -106,9 +116,53 @@ public class UserProjectRelevancyController extends BaseController {
return R.ok(userProjectRelevancyService.insertByBo(req)); return R.ok(userProjectRelevancyService.insertByBo(req));
} }
/**
* 新增系统用户与项目列表关联
*/
@Tag(name = "新增用户与项目列表关联")
@SaCheckPermission("project:projectRelevancy:add")
@Log(title = "系统用户与项目关联", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/add/project/list")
public R<Boolean> addBatchByProjectList(@RequestBody ProjectBatchByProjectListReq req) {
Long userId = req.getUserId();
Long[] projectIdList = req.getProjectIdList();
List<UserProjectRelevancy> 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<Boolean> removeBatchByProjectList(@RequestBody ProjectBatchByProjectListReq req) {
Long userId = req.getUserId();
Long[] projectIdList = req.getProjectIdList();
List<UserProjectRelevancy> 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") @SaCheckPermission("project:projectRelevancy:edit")
@Log(title = "系统用户与项目关联", businessType = BusinessType.UPDATE) @Log(title = "系统用户与项目关联", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
@ -122,6 +176,7 @@ public class UserProjectRelevancyController extends BaseController {
* *
* @param ids 主键串 * @param ids 主键串
*/ */
@Tag(name = "删除用户与项目关联")
@SaCheckPermission("project:projectRelevancy:remove") @SaCheckPermission("project:projectRelevancy:remove")
@Log(title = "系统用户与项目关联", businessType = BusinessType.DELETE) @Log(title = "系统用户与项目关联", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/{ids}")

View File

@ -55,6 +55,16 @@ public class Project extends BaseEntity {
*/ */
private String picUrl; private String picUrl;
/**
* 经度
*/
private String lng;
/**
* 纬度
*/
private String lat;
/** /**
* 备注 * 备注
*/ */

View File

@ -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;
}

View File

@ -35,6 +35,16 @@ public class ProjectCreateReq implements Serializable {
*/ */
private String picUrl; private String picUrl;
/**
* 经度
*/
private String lng;
/**
* 纬度
*/
private String lat;
/** /**
* 备注 * 备注
*/ */

View File

@ -43,6 +43,16 @@ public class ProjectQueryReq extends PageRequest implements Serializable {
*/ */
private Long status; private Long status;
/**
* 经度
*/
private String lng;
/**
* 纬度
*/
private String lat;
/** /**
* 备注 * 备注
*/ */

View File

@ -16,7 +16,7 @@ public class ProjectUpdateReq implements Serializable {
private static final long serialVersionUID = 3431952359907567659L; private static final long serialVersionUID = 3431952359907567659L;
/** /**
* * id
*/ */
private Long id; private Long id;
@ -45,6 +45,16 @@ public class ProjectUpdateReq implements Serializable {
*/ */
private String picUrl; private String picUrl;
/**
* 经度
*/
private String lng;
/**
* 纬度
*/
private String lat;
/** /**
* 备注 * 备注
*/ */

View File

@ -12,7 +12,6 @@ import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
/** /**
* 项目视图对象 project * 项目视图对象 project
* *
@ -64,6 +63,18 @@ public class ProjectVo implements Serializable {
@ExcelProperty(value = "项目图片") @ExcelProperty(value = "项目图片")
private String picUrl; private String picUrl;
/**
* 经度
*/
@ExcelProperty(value = "经度")
private String lng;
/**
* 纬度
*/
@ExcelProperty(value = "纬度")
private String lat;
/** /**
* 备注 * 备注
*/ */

View File

@ -14,7 +14,9 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.sql.SqlUtil; 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.Project;
import org.dromara.project.domain.UserProjectRelevancy;
import org.dromara.project.domain.bo.ProjectBo; import org.dromara.project.domain.bo.ProjectBo;
import org.dromara.project.domain.req.project.ProjectCreateReq; import org.dromara.project.domain.req.project.ProjectCreateReq;
import org.dromara.project.domain.req.project.ProjectQueryReq; 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.domain.vo.ProjectVo;
import org.dromara.project.mapper.ProjectMapper; import org.dromara.project.mapper.ProjectMapper;
import org.dromara.project.service.IProjectService; 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.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collection; import java.util.Collection;
@ -41,6 +46,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project>
@Resource @Resource
private ProjectMapper baseMapper; private ProjectMapper baseMapper;
@Resource
private ISysUserService userService;
@Lazy
@Resource
private IUserProjectRelevancyService userProjectRelevancyService;
/** /**
* 查询项目 * 查询项目
* *
@ -205,8 +217,18 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project>
if (!save) { if (!save) {
throw new ServiceException("新增项目失败,数据库异常", HttpStatus.ERROR); throw new ServiceException("新增项目失败,数据库异常", HttpStatus.ERROR);
} }
// 返回新写入的数据 id Long projectId = project.getId();
return 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;
} }
/** /**

View File

@ -26,7 +26,6 @@ import org.dromara.project.domain.vo.UserProjectRelevancyVo;
import org.dromara.project.mapper.UserProjectRelevancyMapper; import org.dromara.project.mapper.UserProjectRelevancyMapper;
import org.dromara.project.service.IProjectService; import org.dromara.project.service.IProjectService;
import org.dromara.project.service.IUserProjectRelevancyService; import org.dromara.project.service.IUserProjectRelevancyService;
import org.dromara.system.service.ISysUserService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -47,9 +46,6 @@ public class UserProjectRelevancyServiceImpl extends ServiceImpl<UserProjectRele
@Resource @Resource
private UserProjectRelevancyMapper baseMapper; private UserProjectRelevancyMapper baseMapper;
@Resource
private ISysUserService userService;
@Resource @Resource
private IProjectService projectService; private IProjectService projectService;

View File

@ -9,6 +9,8 @@ create table `project`
`p_id` bigint null comment '父项目id', `p_id` bigint null comment '父项目id',
`status` tinyint(4) default 0 null comment '状态0正常 1停用', `status` tinyint(4) default 0 null comment '状态0正常 1停用',
`pic_url` varchar(255) null comment '项目图片', `pic_url` varchar(255) null comment '项目图片',
`lng` varchar(20) null COMMENT '经度',
`lat` varchar(20) null COMMENT '纬度',
`remark` varchar(500) null comment '备注', `remark` varchar(500) null comment '备注',
`type` varchar(20) null comment '项目类型', `type` varchar(20) null comment '项目类型',
`is_type` tinyint(4) null comment '项目类型1光伏 2风电', `is_type` tinyint(4) null comment '项目类型1光伏 2风电',