diff --git a/src/main/java/com/sipc/stellar/biz/IProjectBiz.java b/src/main/java/com/sipc/stellar/biz/IProjectBiz.java new file mode 100644 index 0000000000000000000000000000000000000000..c91ff9012418e7e3615f7511d1075810e42f2335 --- /dev/null +++ b/src/main/java/com/sipc/stellar/biz/IProjectBiz.java @@ -0,0 +1,22 @@ +package com.sipc.stellar.biz; + +import com.sipc.stellar.pojo.SipcResponse; +import com.sipc.stellar.pojo.model.pageData.PageData; +import com.sipc.stellar.pojo.model.request.ProjectRequest; +import com.sipc.stellar.pojo.model.result.ProjectResult; + +public interface IProjectBiz { + SipcResponse<String> addProject(ProjectRequest projectRequest); + + SipcResponse<String> updateProject(ProjectRequest projectRequest, Integer id); + + SipcResponse<String> deleteProject(Integer id); + + SipcResponse<PageData<ProjectResult>> getProjects(Integer pageNo, Integer pageSize); + + SipcResponse<ProjectResult> getProjectById(Integer id); + + SipcResponse<String> updateProjectMembers(ProjectRequest projectRequest, Integer id); + + SipcResponse<String> updateProjectImages(ProjectRequest projectRequest, Integer id); +} diff --git a/src/main/java/com/sipc/stellar/biz/impl/ProjectBizImpl.java b/src/main/java/com/sipc/stellar/biz/impl/ProjectBizImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..8208075ece9ecf398b0456c817aa2940bd57c85a --- /dev/null +++ b/src/main/java/com/sipc/stellar/biz/impl/ProjectBizImpl.java @@ -0,0 +1,71 @@ +package com.sipc.stellar.biz.impl; + +import com.sipc.stellar.biz.IProjectBiz; +import com.sipc.stellar.pojo.SipcResponse; +import com.sipc.stellar.pojo.model.pageData.PageData; +import com.sipc.stellar.pojo.model.request.ProjectRequest; +import com.sipc.stellar.pojo.model.result.ProjectResult; +import com.sipc.stellar.service.ProjectService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class ProjectBizImpl implements IProjectBiz { + private ProjectService projectService; + @Override + public SipcResponse<String> addProject(ProjectRequest projectRequest) { + //TODO 七牛云相关 + //æ·»åŠ é¡¹ç›®ä¿¡æ¯ + projectService.addProject(projectRequest); + return SipcResponse.success(); + } + + @Override + public SipcResponse<String> updateProject(ProjectRequest projectRequest, Integer id) { + //æ›´æ–°é¡¹ç›®ä¿¡æ¯ + projectService.updateProject(projectRequest,id); + return SipcResponse.success(); + } + + @Override + public SipcResponse<String> updateProjectMembers(ProjectRequest projectRequest, Integer id) { + //æ›´æ–°é¡¹ç›®ä¿¡æ¯ + projectService.updateProjectMembers(projectRequest,id); + return SipcResponse.success(); + } + + @Override + public SipcResponse<String> updateProjectImages(ProjectRequest projectRequest, Integer id) { + //TODO 七牛云相关 + //æ›´æ–°é¡¹ç›®ä¿¡æ¯ + projectService.updateProjectImages(projectRequest,id); + return SipcResponse.success(); + } + + @Override + public SipcResponse<String> deleteProject(Integer id) { + //TODO 七牛云相关 + //åˆ é™¤é¡¹ç›®ä¿¡æ¯ + projectService.deleteProject(id); + return SipcResponse.success(); + } + + @Override + public SipcResponse<PageData<ProjectResult>> getProjects(Integer pageNo, Integer pageSize) { + //TODO æƒé™è´£ä»»é“¾ + //TODO 项目需è¦å±•示的信æ¯ä¸å…¨ï¼ŒåŽé¢ä¼šæ›´æ”¹ + //获å–分页查询结果 + PageData<ProjectResult> results=projectService.getProjects(pageNo,pageSize); + return SipcResponse.success(results); + } + + @Override + public SipcResponse<ProjectResult> getProjectById(Integer id) { + //TODO æƒé™è´£ä»»é“¾ + //TODO 项目需è¦å±•示的信æ¯ä¸å…¨ï¼ŒåŽé¢ä¼šæ›´æ”¹ + //获å–分页查询结果 + ProjectResult result=projectService.getProjectById(id); + return SipcResponse.success(result); + } +} diff --git a/src/main/java/com/sipc/stellar/controller/ProjectController.java b/src/main/java/com/sipc/stellar/controller/ProjectController.java new file mode 100644 index 0000000000000000000000000000000000000000..378496ffe7e4ef440bfe17a4449663510beb6e04 --- /dev/null +++ b/src/main/java/com/sipc/stellar/controller/ProjectController.java @@ -0,0 +1,59 @@ +package com.sipc.stellar.controller; + +import com.sipc.stellar.biz.IProjectBiz; +import com.sipc.stellar.pojo.SipcResponse; +import com.sipc.stellar.pojo.model.pageData.PageData; +import com.sipc.stellar.pojo.model.request.ProjectRequest; +import com.sipc.stellar.pojo.model.result.ProjectResult; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@RestController +@Validated +@AllArgsConstructor +@RequestMapping("stellar") +public class ProjectController { + private IProjectBiz iProjectBiz; + + @PostMapping("/projects") + public SipcResponse<String> addProject(@Valid @RequestBody ProjectRequest projectRequest){ + return iProjectBiz.addProject(projectRequest); + } + + @PutMapping("/projects/{id}") + public SipcResponse<String> updateProject(@Valid @RequestBody ProjectRequest projectRequest, + @PathVariable("id")@NotBlank(message = "项目idä¸èƒ½ä¸ºç©º") String id){ + return iProjectBiz.updateProject(projectRequest,Integer.parseInt(id)); + } + + @PutMapping("/projects/members/{id}") + public SipcResponse<String> updateProjectMembers(@Valid @RequestBody ProjectRequest projectRequest, + @PathVariable("id")@NotBlank(message = "项目idä¸èƒ½ä¸ºç©º") String id){ + return iProjectBiz.updateProjectMembers(projectRequest,Integer.parseInt(id)); + } + + @PutMapping("/projects/images/{id}") + public SipcResponse<String> updateProjectImages(@Valid @RequestBody ProjectRequest projectRequest, + @PathVariable("id")@NotBlank(message = "项目idä¸èƒ½ä¸ºç©º") String id){ + return iProjectBiz.updateProjectImages(projectRequest,Integer.parseInt(id)); + } + + @DeleteMapping("/projects/{id}") + public SipcResponse<String> deleteProject(@PathVariable("id")@NotBlank(message = "项目idä¸èƒ½ä¸ºç©º") String id){ + return iProjectBiz.deleteProject(Integer.parseInt(id)); + } + + @GetMapping("/projects") + public SipcResponse<PageData<ProjectResult>> getProjects(@RequestParam(value ="page_no",defaultValue = "1") Integer pageNo, + @RequestParam(value ="page_size",defaultValue = "10") Integer pageSize){ + return iProjectBiz.getProjects(pageNo,pageSize); + } + + @GetMapping("/projects/{id}") + public SipcResponse<ProjectResult> getProjectById(@PathVariable("id")@NotBlank(message = "项目idä¸èƒ½ä¸ºç©º") String id){ + return iProjectBiz.getProjectById(Integer.parseInt(id)); + } +} diff --git a/src/main/java/com/sipc/stellar/pojo/model/request/ProjectImageRequest.java b/src/main/java/com/sipc/stellar/pojo/model/request/ProjectImageRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..1dee0770fdcce0687d02afe98560270f547cd9b7 --- /dev/null +++ b/src/main/java/com/sipc/stellar/pojo/model/request/ProjectImageRequest.java @@ -0,0 +1,8 @@ +package com.sipc.stellar.pojo.model.request; + +import lombok.Data; + +@Data +public class ProjectImageRequest { + private String imageUrl; +} diff --git a/src/main/java/com/sipc/stellar/pojo/model/request/ProjectMemberRequest.java b/src/main/java/com/sipc/stellar/pojo/model/request/ProjectMemberRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..611242795b343ffcf4b6651a49cbb950d0a332a5 --- /dev/null +++ b/src/main/java/com/sipc/stellar/pojo/model/request/ProjectMemberRequest.java @@ -0,0 +1,8 @@ +package com.sipc.stellar.pojo.model.request; + +import lombok.Data; + +@Data +public class ProjectMemberRequest { + private Integer userId; +} diff --git a/src/main/java/com/sipc/stellar/pojo/model/request/ProjectRequest.java b/src/main/java/com/sipc/stellar/pojo/model/request/ProjectRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..78b7dfe33fd5c9b5ab7f93d87324ad13e43e8242 --- /dev/null +++ b/src/main/java/com/sipc/stellar/pojo/model/request/ProjectRequest.java @@ -0,0 +1,20 @@ +package com.sipc.stellar.pojo.model.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.sql.Timestamp; +import java.util.List; + +@Data +public class ProjectRequest { + private String name; + private String description; + + private Integer researchId; + private List<ProjectImageRequest> images; + private List<ProjectMemberRequest> members; + private String achievements; + @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8") + private Timestamp date; +} diff --git a/src/main/java/com/sipc/stellar/pojo/model/result/ProjectImageResult.java b/src/main/java/com/sipc/stellar/pojo/model/result/ProjectImageResult.java new file mode 100644 index 0000000000000000000000000000000000000000..eb8286e595ecb94e90068be12e1b4da54be3a3bf --- /dev/null +++ b/src/main/java/com/sipc/stellar/pojo/model/result/ProjectImageResult.java @@ -0,0 +1,8 @@ +package com.sipc.stellar.pojo.model.result; + +import lombok.Data; + +@Data +public class ProjectImageResult { + private String imageUrl; +} diff --git a/src/main/java/com/sipc/stellar/pojo/model/result/ProjectMemberResult.java b/src/main/java/com/sipc/stellar/pojo/model/result/ProjectMemberResult.java new file mode 100644 index 0000000000000000000000000000000000000000..b960584b21719b48f765f45390a0042cf7759db8 --- /dev/null +++ b/src/main/java/com/sipc/stellar/pojo/model/result/ProjectMemberResult.java @@ -0,0 +1,8 @@ +package com.sipc.stellar.pojo.model.result; + +import lombok.Data; + +@Data +public class ProjectMemberResult { + private Integer userId; +} diff --git a/src/main/java/com/sipc/stellar/pojo/model/result/ProjectResult.java b/src/main/java/com/sipc/stellar/pojo/model/result/ProjectResult.java new file mode 100644 index 0000000000000000000000000000000000000000..ef71f13047347d7030d6c2af321ecca26bbf6221 --- /dev/null +++ b/src/main/java/com/sipc/stellar/pojo/model/result/ProjectResult.java @@ -0,0 +1,18 @@ +package com.sipc.stellar.pojo.model.result; + +import lombok.Data; + +import java.sql.Timestamp; +import java.util.List; + +@Data +public class ProjectResult { + private Integer id; + private String name; + private String description; + private List<ProjectImageResult> images; + private List<ProjectMemberResult> members; + private String achievements; + private String research; + private Timestamp date; +} diff --git a/src/main/java/com/sipc/stellar/service/ProjectService.java b/src/main/java/com/sipc/stellar/service/ProjectService.java new file mode 100644 index 0000000000000000000000000000000000000000..0cf3ce3397087ec2806dee0a8a858f720b2f7913 --- /dev/null +++ b/src/main/java/com/sipc/stellar/service/ProjectService.java @@ -0,0 +1,24 @@ +package com.sipc.stellar.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.sipc.stellar.pojo.domain.Project; +import com.sipc.stellar.pojo.model.pageData.PageData; +import com.sipc.stellar.pojo.model.request.ProjectRequest; +import com.sipc.stellar.pojo.model.result.ProjectResult; + + +public interface ProjectService extends IService<Project> { + PageData<ProjectResult> getProjects(Integer pageNo, Integer pageSize); + + ProjectResult getProjectById(Integer id); + + void addProject(ProjectRequest projectRequest); + + void updateProject(ProjectRequest projectRequest, Integer id); + + void deleteProject(Integer id); + + void updateProjectMembers(ProjectRequest projectRequest, Integer id); + + void updateProjectImages(ProjectRequest projectRequest, Integer id); +} diff --git a/src/main/java/com/sipc/stellar/service/impl/ProjectServiceImpl.java b/src/main/java/com/sipc/stellar/service/impl/ProjectServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..905217fa4ba1392ecc57656799e689913358644a --- /dev/null +++ b/src/main/java/com/sipc/stellar/service/impl/ProjectServiceImpl.java @@ -0,0 +1,383 @@ +package com.sipc.stellar.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sipc.stellar.handler.token.TokenHandler; +import com.sipc.stellar.mapper.ProjectImageMapper; +import com.sipc.stellar.mapper.ProjectMapper; +import com.sipc.stellar.mapper.ProjectUserMergeMapper; +import com.sipc.stellar.mapper.ResearchMapMapper; +import com.sipc.stellar.pojo.domain.Project; +import com.sipc.stellar.pojo.domain.ProjectImage; +import com.sipc.stellar.pojo.domain.ProjectUserMerge; +import com.sipc.stellar.pojo.domain.ResearchMap; +import com.sipc.stellar.pojo.model.TokenModel; +import com.sipc.stellar.pojo.model.exception.SipcBaseException; +import com.sipc.stellar.pojo.model.pageData.PageData; +import com.sipc.stellar.pojo.model.request.ProjectImageRequest; +import com.sipc.stellar.pojo.model.request.ProjectMemberRequest; +import com.sipc.stellar.pojo.model.request.ProjectRequest; +import com.sipc.stellar.pojo.model.result.ProjectImageResult; +import com.sipc.stellar.pojo.model.result.ProjectMemberResult; +import com.sipc.stellar.pojo.model.result.ProjectResult; +import com.sipc.stellar.pojo.model.resultEnum.ResultCode; +import com.sipc.stellar.service.ProjectService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@AllArgsConstructor +@Slf4j +public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project>implements ProjectService { + private ProjectUserMergeMapper projectUserMergeMapper; + private ProjectImageMapper projectImageMapper; + private ProjectMapper projectMapper; + private ResearchMapMapper researchMapMapper; + private ProjectImageServiceImpl projectImageService; + private ProjectUserMergeServiceImpl projectUserMergeService; + @Override + public PageData<ProjectResult> getProjects(Integer pageNo, Integer pageSize) { + //TODO: 设定获å–分页逻辑 + + Page<Project> projectPage=new Page<>(pageNo,pageSize); + IPage<Project> projectIPage=page(projectPage); + //获å–项目id列表 + List<Integer> projectIdList=new ArrayList<>(); + Set<Integer> researchIdSet=new HashSet<>(); + for (Project temp:projectIPage.getRecords()){ + projectIdList.add(temp.getId()); + researchIdSet.add(temp.getResearchId()); + } + //è‹¥æ— åˆ—è¡¨ï¼Œåˆ™æ·»åŠ -1ï¼Œé˜²æ¢æŠ¥é”™ + if(researchIdSet.size()==0){ + researchIdSet.add(-1); + } + if(projectIdList.size()==0){ + projectIdList.add(-1); + } + //æž„å»ºç ”ç©¶æ–¹å‘Map + QueryWrapper<ResearchMap> researchMapQueryWrapper=new QueryWrapper<>(); + researchMapQueryWrapper.in("id",researchIdSet); + List<ResearchMap> researchMapList=researchMapMapper.selectList(researchMapQueryWrapper); + Map<Integer, String> researchMap = new HashMap<>(); + for (ResearchMap temp : researchMapList) { + int id = temp.getId(); + String name = temp.getResearch(); + if (researchMap.containsKey(id) && researchMap.get(id).equals(name)) { + continue; + } + researchMap.put(id, name); + } + //构建制作人Map + QueryWrapper<ProjectUserMerge> projectUserMergeQueryWrapper=new QueryWrapper<>(); + projectUserMergeQueryWrapper.in("project_id",projectIdList); + List<ProjectUserMerge> projectUserMergeList=projectUserMergeMapper.selectList(projectUserMergeQueryWrapper); + Map<Integer, List<Integer>> memberMap = projectUserMergeList.stream() + .collect(Collectors.groupingBy(ProjectUserMerge::getProjectId, Collectors.mapping(ProjectUserMerge::getUserId, Collectors.toList()))); + //构建图片Map + QueryWrapper<ProjectImage> projectImageQueryWrapper=new QueryWrapper<>(); + projectImageQueryWrapper.in("project_id",projectIdList); + List<ProjectImage> projectImageList=projectImageMapper.selectList(projectImageQueryWrapper); + Map<Integer, List<String>> imageMap = projectImageList.stream() + .collect(Collectors.groupingBy(ProjectImage::getProjectId, Collectors.mapping(ProjectImage::getImageUrl, Collectors.toList()))); + //å°è£…返回值 + List<ProjectResult> projectResultList =new ArrayList<>(); + for (Project temp:projectIPage.getRecords()){ + //è®¾ç½®åŸºç¡€ä¿¡æ¯ + ProjectResult projectResult =projectToProjectResponse(temp); + //è®¾ç½®ç ”ç©¶æ–¹å‘åç§° + projectResult.setResearch(researchMap.get(temp.getResearchId())); + //设置制作人 + List<ProjectMemberResult> projectMemberResultList =new ArrayList<>(); + List<Integer> memberIdList=new ArrayList<>(); + if(memberMap.containsKey(temp.getId())){ + memberIdList=memberMap.get(temp.getId()); + } + for(Integer userId:memberIdList){ + ProjectMemberResult projectMemberResult =new ProjectMemberResult(); + projectMemberResult.setUserId(userId); + projectMemberResultList.add(projectMemberResult); + } + projectResult.setMembers(projectMemberResultList); + //设置图片 + List<ProjectImageResult> projectImageResultList =new ArrayList<>(); + List<String> imageUrlList=new ArrayList<>(); + if(imageMap.containsKey(temp.getId())){ + imageUrlList=imageMap.get(temp.getId()); + } + for(String imageUrl:imageUrlList){ + ProjectImageResult projectImageResult =new ProjectImageResult(); + projectImageResult.setImageUrl(imageUrl); + projectImageResultList.add(projectImageResult); + } + projectResult.setImages(projectImageResultList); + projectResultList.add(projectResult); + } + //å°è£…分页类 + IPage<ProjectResult> projectResponseIPage=new Page<>(pageNo,pageSize); + projectResponseIPage.setRecords(projectResultList); + projectResponseIPage.setPages(projectIPage.getPages()); + projectResponseIPage.setCurrent(projectIPage.getCurrent()); + projectResponseIPage.setSize(projectIPage.getSize()); + projectResponseIPage.setTotal(projectIPage.getTotal()); + PageData<ProjectResult> results=new PageData<>(); + results.praisePage(projectResponseIPage); + return results; + } + + @Override + public ProjectResult getProjectById(Integer id) { + Project project= this.getById(id); + if(project==null){ + throw new SipcBaseException(ResultCode.INVALID_PARAM,"project is not exist."); + } + ProjectResult result=projectToProjectResponse(project); + //è®¾ç½®ç ”ç©¶æ–¹å‘åç§° + if(project.getResearchId()!=null){ + result.setResearch(researchMapMapper.selectById(project.getResearchId()).getResearch()); + } + //设置项目制作人 + QueryWrapper<ProjectUserMerge> projectUserMergeQueryWrapper=new QueryWrapper<>(); + projectUserMergeQueryWrapper.eq("project_id",id); + List<ProjectUserMerge> projectUserMergeList=projectUserMergeMapper.selectList(projectUserMergeQueryWrapper); + List<ProjectMemberResult> memberIdList=new ArrayList<>(); + for(ProjectUserMerge temp:projectUserMergeList){ + ProjectMemberResult projectMemberResult =new ProjectMemberResult(); + projectMemberResult.setUserId(temp.getUserId()); + memberIdList.add(projectMemberResult); + } + result.setMembers(memberIdList); + //设置项目图片 + QueryWrapper<ProjectImage> projectImageResponseQueryWrapper=new QueryWrapper<>(); + projectImageResponseQueryWrapper.eq("project_id",id); + List<ProjectImage> projectImageList=projectImageMapper.selectList(projectImageResponseQueryWrapper); + List<ProjectImageResult> imageUrls=new ArrayList<>(); + for(ProjectImage temp:projectImageList){ + ProjectImageResult projectImageResult =new ProjectImageResult(); + projectImageResult.setImageUrl(temp.getImageUrl()); + imageUrls.add(projectImageResult); + } + result.setImages(imageUrls); + return result; + } + + @Override + public void addProject(ProjectRequest projectRequest) { + //åˆ¤æ–æƒé™ + TokenModel tokenModel = TokenHandler.getUserThreadLocal(); + if(tokenModel.getPermission()<2){ + log.warn("用户: {},å¢žåŠ é¡¹ç›®æƒé™ä¸è¶³",tokenModel.getUsername()); + throw new SipcBaseException(ResultCode.PERMISSION_WRONG,"no permission."); + } + log.info("管ç†å‘˜: {},è¯•å›¾å¢žåŠ é¡¹ç›®",tokenModel.getUsername()); + //å°è£…项目类 + Project project=projectRequestToProject(projectRequest); + //设置创建管ç†å‘˜ + project.setCreateBy(tokenModel.getUsername()); + project.setUpdateBy(tokenModel.getUsername()); + + String errorInfo=""; + try { + errorInfo="research"; + //æ·»åŠ é¡¹ç›®å†…å®¹ + this.save(project); + //æ·»åŠ é¡¹ç›®äººå‘˜ + errorInfo="user"; + List<ProjectUserMerge> projectUserMergeList=projectMemberRequestToProjectUserMerge(projectRequest.getMembers(),project.getId()); + projectUserMergeService.saveBatch(projectUserMergeList); + //æ·»åŠ é¡¹ç›®å›¾ç‰‡ + List<ProjectImage> projectImageList=projectImageRequestToProjectImage(projectRequest.getImages(),project.getId()); + projectImageService.saveBatch(projectImageList); + } catch (Exception e) { + this.removeById(project.getId()); + // åˆ¤æ–æ˜¯å¦æ˜¯å¤–键约æŸå¼‚常 + if (e.getMessage().contains("foreign key constraint")) { + log.warn("{}主键ä¸å˜åœ¨",errorInfo); + throw new SipcBaseException(ResultCode.INVALID_PARAM,errorInfo+" is not exist."); + } else { + log.error("管ç†å‘˜: {},æ·»åŠ é¡¹ç›®å¤±è´¥ã€‚æ·»åŠ ä¿¡æ¯:{}",tokenModel.getUsername(),projectRequest); + // 其他异常情况,直接抛出异常 + throw e; + } + } + log.info("管ç†å‘˜: {}ï¼Œæ·»åŠ é¡¹ç›®æˆåŠŸ,id:{}",tokenModel.getUsername(),project.getId()); + } + + @Override + public void updateProject(ProjectRequest projectRequest, Integer id) { + //åˆ¤æ–æƒé™ + TokenModel tokenModel = TokenHandler.getUserThreadLocal(); + if(tokenModel.getPermission()<2){ + log.warn("用户: {},修改项目æƒé™ä¸è¶³",tokenModel.getUsername()); + throw new SipcBaseException(ResultCode.PERMISSION_WRONG,"no permission."); + } + log.info("管ç†å‘˜: {},试图修改项目",tokenModel.getUsername()); + //å°è£…项目类 + Project project=projectRequestToProject(projectRequest); + //设置项目idã€æ›´æ–°ç®¡ç†å‘˜ + project.setId(id); + project.setUpdateBy(tokenModel.getUsername()); + //æ›´æ–°é¡¹ç›®ä¿¡æ¯ + try { + if(!this.updateById(project)){ + log.warn("ä¸å˜åœ¨id为{}的项目",id); + throw new SipcBaseException(ResultCode.INVALID_PARAM,"project is not exist."); + } + } catch (Exception e) { + // åˆ¤æ–æ˜¯å¦æ˜¯å¤–键约æŸå¼‚常 + if (e.getMessage().contains("foreign key constraint")) { + log.warn("ç ”ç©¶æ–¹å‘主键ä¸å˜åœ¨"); + throw new SipcBaseException(ResultCode.INVALID_PARAM,"research is not exist."); + } else { + log.error("管ç†å‘˜: {},修改项目失败。修改信æ¯:{}",tokenModel.getUsername(),projectRequest); + // 其他异常情况,直接抛出异常 + throw e; + } + } + log.info("管ç†å‘˜: {},修改项目æˆåŠŸ,id:{}",tokenModel.getUsername(),id); + } + + @Transactional + @Override + public void updateProjectMembers(ProjectRequest projectRequest, Integer id) { + //åˆ¤æ–æƒé™ + TokenModel tokenModel = TokenHandler.getUserThreadLocal(); + if(tokenModel.getPermission()<2){ + log.warn("用户: {},修改项目æƒé™ä¸è¶³",tokenModel.getUsername()); + throw new SipcBaseException(ResultCode.PERMISSION_WRONG,"no permission."); + } + log.info("管ç†å‘˜: {},试图修改项目æˆå‘˜",tokenModel.getUsername()); + //检查是å¦å˜åœ¨è¯¥é¡¹ç›® + QueryWrapper<Project> projectQueryWrapper=new QueryWrapper<>(); + projectQueryWrapper.eq("id",id); + if(!projectMapper.exists(projectQueryWrapper)){ + log.warn("ä¸å˜åœ¨id为{}的项目",id); + throw new SipcBaseException("project is not exist."); + } + //å°è£…项目制作人类 + List<ProjectUserMerge> projectUserMergeList=projectMemberRequestToProjectUserMerge(projectRequest.getMembers(),id); + //更新项目制作人 + try { + QueryWrapper<ProjectUserMerge> projectUserMergeQueryWrapper=new QueryWrapper<>(); + projectUserMergeQueryWrapper.eq("project_id",id); + projectUserMergeService.remove(projectUserMergeQueryWrapper); + projectUserMergeService.saveBatch(projectUserMergeList); + } catch (Exception e) { + // åˆ¤æ–æ˜¯å¦æ˜¯å¤–键约æŸå¼‚常 + if (e.getMessage().contains("foreign key constraint")) { + log.warn("æˆå‘˜ä¸»é”®ä¸å˜åœ¨"); + throw new SipcBaseException(ResultCode.INVALID_PARAM,"user is not exist."); + } else { + log.error("管ç†å‘˜: {},修改项目人员失败。修改信æ¯:{}",tokenModel.getUsername(),projectRequest); + // 其他异常情况,直接抛出异常 + throw e; + } + } + //更新管ç†å‘˜ä¿¡æ¯ + Project project=new Project(); + project.setId(id); + project.setUpdateBy(tokenModel.getUsername()); + this.updateById(project); + log.info("管ç†å‘˜: {},修改项目人员æˆåŠŸ,id:{}",tokenModel.getUsername(),id); + } + + @Override + public void updateProjectImages(ProjectRequest projectRequest, Integer id) { + //åˆ¤æ–æƒé™ + TokenModel tokenModel = TokenHandler.getUserThreadLocal(); + if(tokenModel.getPermission()<2){ + log.warn("用户: {},修改项目æƒé™ä¸è¶³",tokenModel.getUsername()); + throw new SipcBaseException(ResultCode.PERMISSION_WRONG,"no permission."); + } + log.info("管ç†å‘˜: {},试图修改项目图片",tokenModel.getUsername()); + //更新管ç†å‘˜ä¿¡æ¯ + Project project=new Project(); + project.setId(id); + project.setUpdateBy(tokenModel.getUsername()); + if(!this.updateById(project)){ + log.warn("ä¸å˜åœ¨id为{}的项目",id); + throw new SipcBaseException(ResultCode.INVALID_PARAM,"project is not exist."); + } + //å°è£…项目图片类 + List<ProjectImage> projectImageList=projectImageRequestToProjectImage(projectRequest.getImages(),id); + //更新项目图片 + QueryWrapper<ProjectImage> projectImageQueryWrapper=new QueryWrapper<>(); + projectImageQueryWrapper.eq("project_id",id); + projectImageService.remove(projectImageQueryWrapper); + projectImageService.saveBatch(projectImageList); + log.info("管ç†å‘˜: {},修改项目图片æˆåŠŸ,id:{}",tokenModel.getUsername(),id); + } + + @Override + public void deleteProject(Integer id) { + //åˆ¤æ–æƒé™ + TokenModel tokenModel = TokenHandler.getUserThreadLocal(); + if(tokenModel.getPermission()<2){ + log.warn("用户: {},åˆ é™¤é¡¹ç›®æƒé™ä¸è¶³",tokenModel.getUsername()); + throw new SipcBaseException(ResultCode.PERMISSION_WRONG,"no permission."); + } + log.info("管ç†å‘˜: {},è¯•å›¾åˆ é™¤é¡¹ç›®",tokenModel.getUsername()); + //åˆ é™¤é¡¹ç›® + if(!this.removeById(id)){ + log.warn("ä¸å˜åœ¨id为{}的项目",id); + throw new SipcBaseException(ResultCode.INVALID_PARAM,"project is not exist."); + } + log.info("管ç†å‘˜: {}ï¼Œåˆ é™¤é¡¹ç›®æˆåŠŸ,id:{}",tokenModel.getUsername(),id); + } + + public ProjectResult projectToProjectResponse(Project project){ + ProjectResult projectResult =new ProjectResult(); + projectResult.setId(project.getId()); + projectResult.setName(project.getName()); + projectResult.setDescription(project.getDescription()); + return projectResult; + } + + //è®¾ç½®é¡¹ç›®æ— éœ€å¤šè¡¨æŸ¥è¯¢ä¿¡æ¯ + public Project projectRequestToProject(ProjectRequest projectRequest){ + Project project=new Project(); + project.setName(projectRequest.getName()); + project.setDescription(projectRequest.getDescription()); + project.setResearchId(projectRequest.getResearchId()); + return project; + } + + public List<ProjectUserMerge> projectMemberRequestToProjectUserMerge(List<ProjectMemberRequest> projectMemberRequestList, Integer projectId){ + List<ProjectUserMerge> projectUserMergeList=new ArrayList<>(); + for(ProjectMemberRequest temp: projectMemberRequestList){ + if(temp.getUserId()==null){ + continue; + } + ProjectUserMerge projectUserMerge=new ProjectUserMerge(); + projectUserMerge.setProjectId(projectId); + projectUserMerge.setUserId(temp.getUserId()); + projectUserMergeList.add(projectUserMerge); + } + return projectUserMergeList; + } + public List<ProjectImage> projectImageRequestToProjectImage(List<ProjectImageRequest> projectImageRequestList, Integer projectId){ + List<ProjectImage> projectImageList=new ArrayList<>(); + for(ProjectImageRequest temp:projectImageRequestList){ + ProjectImage projectImage=new ProjectImage(); + projectImage.setProjectId(projectId); + projectImage.setImageUrl(temp.getImageUrl()); + projectImageList.add(projectImage); + } + return projectImageList; + } + @Service + @AllArgsConstructor + public static class ProjectImageServiceImpl extends ServiceImpl<ProjectImageMapper, ProjectImage> { + } + @Service + @AllArgsConstructor + public static class ProjectUserMergeServiceImpl extends ServiceImpl<ProjectUserMergeMapper, ProjectUserMerge> { + } +}