From d0aeeb1ad1d4e0419fd070a2d3045341bf30264f Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期二, 08 四月 2025 17:58:40 +0800 Subject: [PATCH] 项目组管理 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java | 30 ++++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/TProjectTeamVO.java | 18 +++ ruoyi-system/src/main/java/com/ruoyi/system/dto/TProjectTeamDTO.java | 18 +++ ruoyi-system/src/main/java/com/ruoyi/system/mapper/TProjectTeamMapper.java | 15 +++ ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java | 10 ++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectTeamController.java | 125 ++++++++++++++++++++++++ ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml | 19 +++ ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java | 18 +++ 8 files changed, 250 insertions(+), 3 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectTeamController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectTeamController.java index 12d48d1..4630389 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectTeamController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProjectTeamController.java @@ -1,9 +1,28 @@ package com.ruoyi.web.controller.api; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.dto.TProjectTeamDTO; +import com.ruoyi.system.model.TProjectTeam; +import com.ruoyi.system.model.TProjectTeamStaff; +import com.ruoyi.system.query.TProjectTeamQuery; +import com.ruoyi.system.service.TProjectTeamService; +import com.ruoyi.system.service.TProjectTeamStaffService; +import com.ruoyi.system.vo.TProjectTeamVO; import io.swagger.annotations.Api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * <p> @@ -15,8 +34,108 @@ */ @Api(tags = "项目组管理") @RestController -@RequestMapping("/t-project-team") +@RequestMapping("") public class TProjectTeamController { + private final TProjectTeamService projectTeamService; + private final TProjectTeamStaffService projectTeamStaffService; + @Autowired + public TProjectTeamController(TProjectTeamService projectTeamService, TProjectTeamStaffService projectTeamStaffService) { + this.projectTeamService = projectTeamService; + this.projectTeamStaffService = projectTeamStaffService; + } + + /** + * 获取项目组管理列表 + */ + @PreAuthorize("@ss.hasPermi('projectTeam:list:list')") + @ApiOperation(value = "获取项目组分页列表") + @PostMapping(value = "/api/pageList") + public R<PageInfo<TProjectTeamVO>> pageList(@RequestBody String param) { + TProjectTeamQuery query = JSON.parseObject(param, TProjectTeamQuery.class); + return R.ok(projectTeamService.pageList(query)); + } + + /** + * 添加项目组管理 + */ + @PreAuthorize("@ss.hasPermi('projectTeam:list:add')") + @Log(title = "项目组信息-新增项目组", businessType = BusinessType.INSERT) + @ApiOperation(value = "添加项目组") + @PostMapping(value = "/api/add") + public R<Boolean> add(@RequestBody String param) { + TProjectTeamDTO dto = JSON.parseObject(param,TProjectTeamDTO.class); + projectTeamService.save(dto); + // 保存项目组成员 + List<TProjectTeamStaff> staffs = dto.getStaffs(); + for (TProjectTeamStaff staff : staffs) { + staff.setTeamId(dto.getId()); + } + projectTeamStaffService.saveBatch(staffs); + return R.ok(); + } + + /** + * 修改项目组 + */ + @PreAuthorize("@ss.hasPermi('projectTeam:list:edit')") + @Log(title = "项目组信息-修改项目组", businessType = BusinessType.UPDATE) + @ApiOperation(value = "修改项目组") + @PostMapping(value = "/api/update") + public R<Boolean> update(@RequestBody String param) { + TProjectTeamDTO dto = JSON.parseObject(param,TProjectTeamDTO.class); + projectTeamService.updateById(dto); + // 删除项目组成员 + projectTeamStaffService.remove(Wrappers.lambdaQuery(TProjectTeamStaff.class).eq(TProjectTeamStaff::getTeamId, dto.getId())); + // 保存项目组成员 + List<TProjectTeamStaff> staffs = dto.getStaffs(); + for (TProjectTeamStaff staff : staffs) { + staff.setTeamId(dto.getId()); + } + projectTeamStaffService.saveBatch(staffs); + return R.ok(); + } + + /** + * 查看项目组详情 + */ + @PreAuthorize("@ss.hasPermi('projectTeam:item:detail')") + @ApiOperation(value = "查看项目组详情") + @GetMapping(value = "/open/getDetailById") + public R<TProjectTeamVO> getDetailById(@RequestParam String id) { + TProjectTeam projectTeam = projectTeamService.getById(id); + TProjectTeamVO projectTeamVO = new TProjectTeamVO(); + BeanUtils.copyProperties(projectTeam, projectTeamVO); + // 查询项目组人员 + projectTeamVO.setStaffs(projectTeamStaffService.list(Wrappers.lambdaQuery(TProjectTeamStaff.class).eq(TProjectTeamStaff::getTeamId, id))); + return R.ok(projectTeamVO); + } + + /** + * 删除项目组 + */ + @PreAuthorize("@ss.hasPermi('projectTeam:list:delete')") + @Log(title = "项目组信息-删除项目组", businessType = BusinessType.DELETE) + @ApiOperation(value = "删除项目组") + @DeleteMapping(value = "/open/deleteById") + public R<Boolean> deleteById(@RequestParam String id) { + // 删除项目组成员 + projectTeamStaffService.remove(Wrappers.lambdaQuery(TProjectTeamStaff.class).eq(TProjectTeamStaff::getTeamId, id)); + return R.ok(projectTeamService.removeById(id)); + } + + /** + * 批量删除项目组 + */ + @PreAuthorize("@ss.hasPermi('projectTeam:list:delete')") + @Log(title = "项目组信息-删除项目组", businessType = BusinessType.DELETE) + @ApiOperation(value = "批量删除项目组") + @DeleteMapping(value = "/api/deleteByIds") + public R<Boolean> deleteByIds(@RequestBody List<String> ids) { + // 删除项目组成员 + projectTeamStaffService.remove(Wrappers.lambdaQuery(TProjectTeamStaff.class).in(TProjectTeamStaff::getTeamId, ids)); + return R.ok(projectTeamService.removeByIds(ids)); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TProjectTeamDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TProjectTeamDTO.java new file mode 100644 index 0000000..4575551 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TProjectTeamDTO.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.dto; + +import com.ruoyi.system.model.TProjectTeam; +import com.ruoyi.system.model.TProjectTeamStaff; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "项目组信息DTO") +public class TProjectTeamDTO extends TProjectTeam { + + @ApiModelProperty(value = "项目组人员") + private List<TProjectTeamStaff> staffs; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TProjectTeamMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TProjectTeamMapper.java index 6e4d034..3d59b08 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TProjectTeamMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TProjectTeamMapper.java @@ -1,7 +1,13 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TProjectTeam; +import com.ruoyi.system.query.TProjectTeamQuery; +import com.ruoyi.system.vo.TProjectTeamVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -13,4 +19,13 @@ */ public interface TProjectTeamMapper extends BaseMapper<TProjectTeam> { + /** + * 分页查询项目组信息 + * + * @param query + * @param pageInfo + * @return + */ + List<TProjectTeamVO> pageList(@Param("query") TProjectTeamQuery query, @Param("pageInfo")PageInfo<TProjectTeamVO> pageInfo); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java new file mode 100644 index 0000000..32b1bd8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TProjectTeamQuery.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.model.TimeRangeQueryBody; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel("项目团队分页query") +public class TProjectTeamQuery extends TimeRangeQueryBody { + + @ApiModelProperty(value = "组名称") + private String teamName; + + @ApiModelProperty(value = "负责人") + private String personCharge; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java index 8e58b70..f22b138 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TProjectTeamService.java @@ -1,7 +1,10 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TProjectTeam; +import com.ruoyi.system.query.TProjectTeamQuery; +import com.ruoyi.system.vo.TProjectTeamVO; /** * <p> @@ -13,4 +16,11 @@ */ public interface TProjectTeamService extends IService<TProjectTeam> { + /** + * 项目组管理分页列表 + * @param query + * @return + */ + PageInfo<TProjectTeamVO> pageList(TProjectTeamQuery query); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java index a397983..534fc00 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TProjectTeamServiceImpl.java @@ -1,10 +1,22 @@ package com.ruoyi.system.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.mapper.TProjectTeamMapper; +import com.ruoyi.system.mapper.TProjectTeamStaffMapper; import com.ruoyi.system.model.TProjectTeam; +import com.ruoyi.system.model.TProjectTeamStaff; +import com.ruoyi.system.query.TProjectTeamQuery; import com.ruoyi.system.service.TProjectTeamService; +import com.ruoyi.system.vo.SysOperLogVO; +import com.ruoyi.system.vo.TProjectTeamVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -17,4 +29,22 @@ @Service public class TProjectTeamServiceImpl extends ServiceImpl<TProjectTeamMapper, TProjectTeam> implements TProjectTeamService { + @Autowired + private TProjectTeamStaffMapper projectTeamStaffMapper; + + @Override + public PageInfo<TProjectTeamVO> pageList(TProjectTeamQuery query) { + PageInfo<TProjectTeamVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TProjectTeamVO> list = this.baseMapper.pageList(query,pageInfo); + List<String> teamIds = list.stream().map(TProjectTeamVO::getId).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(teamIds)){ + List<TProjectTeamStaff> projectTeamStaffs = projectTeamStaffMapper.selectList(Wrappers.lambdaQuery(TProjectTeamStaff.class).in(TProjectTeamStaff::getTeamId, teamIds)); + list.forEach(item->{ + List<TProjectTeamStaff> projectTeamStaffList = projectTeamStaffs.stream().filter(staff -> staff.getTeamId().equals(item.getId())).collect(Collectors.toList()); + item.setStaffs(projectTeamStaffList); + }); + } + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TProjectTeamVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TProjectTeamVO.java new file mode 100644 index 0000000..1ab27b8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TProjectTeamVO.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.model.TProjectTeam; +import com.ruoyi.system.model.TProjectTeamStaff; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "项目组信息VO") +public class TProjectTeamVO extends TProjectTeam { + + @ApiModelProperty(value = "项目组人员") + private List<TProjectTeamStaff> staffs; + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml index be90495..502bded 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TProjectTeamMapper.xml @@ -19,5 +19,24 @@ <sql id="Base_Column_List"> id, team_name, person_charge, status, create_time, update_time, create_by, update_by, disabled </sql> + <select id="pageList" resultType="com.ruoyi.system.vo.TProjectTeamVO"> + SELECT + <include refid="Base_Column_List" /> + FROM t_project_team + <where> + <if test="teamName != null and teamName != ''"> + AND team_name LIKE CONCAT('%', #{teamName}, '%') + </if> + <if test="personCharge != null and personCharge != ''"> + AND person_charge LIKE CONCAT('%', #{personCharge}, '%') + </if> + <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> + AND create_time >= #{query.startTime} + AND create_time <= #{query.endTime} + </if> + AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + ORDER BY create_time DESC + </select> </mapper> -- Gitblit v1.7.1