From de135655516c6b2636dd031df4c824ae16f7e71f Mon Sep 17 00:00:00 2001 From: 176yunxuan <362612387@qq.com~> Date: Sat, 20 Jan 2024 11:10:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsl/oa/controllers/ProjectController.java | 47 ++++++++ src/main/java/com/jsl/oa/dao/ProjectDAO.java | 51 ++++++++ .../java/com/jsl/oa/mapper/ProjectMapper.java | 10 ++ .../oa/model/doData/info/ProjectShowDO.java | 25 ++++ .../voData/business/info/ProjectShowVO.java | 12 ++ .../com/jsl/oa/services/ProjectService.java | 12 ++ .../oa/services/impl/ProjectServiceImpl.java | 109 ++++++++++++++++++ src/main/resources/application.yml | 1 + 8 files changed, 267 insertions(+) create mode 100644 src/main/java/com/jsl/oa/model/doData/info/ProjectShowDO.java create mode 100644 src/main/java/com/jsl/oa/model/voData/business/info/ProjectShowVO.java diff --git a/src/main/java/com/jsl/oa/controllers/ProjectController.java b/src/main/java/com/jsl/oa/controllers/ProjectController.java index b9e37bb..d705da3 100755 --- a/src/main/java/com/jsl/oa/controllers/ProjectController.java +++ b/src/main/java/com/jsl/oa/controllers/ProjectController.java @@ -1,22 +1,69 @@ package com.jsl.oa.controllers; +import com.jsl.oa.model.doData.info.ProjectShowDO; import com.jsl.oa.model.voData.ProjectInfoVO; +import com.jsl.oa.model.voData.business.info.CarouselVO; +import com.jsl.oa.model.voData.business.info.ProjectShowVO; import com.jsl.oa.services.ProjectService; import com.jsl.oa.utils.BaseResponse; import com.jsl.oa.utils.ErrorCode; import com.jsl.oa.utils.Processing; import com.jsl.oa.utils.ResultUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; + +@Slf4j @RestController @RequiredArgsConstructor public class ProjectController { private final ProjectService projectService; + @GetMapping("/project/header/get") + public BaseResponse projectGetHeader(@RequestParam(required = false) Integer id) { + log.info("请求接口[GET]: /project/header/get"); + return projectService.getHeader(id); + } + + @PostMapping("/project/header/add") + public BaseResponse projectAddHeader(@RequestBody @Validated ProjectShowVO projectShowVO, HttpServletRequest request, @NotNull BindingResult bindingResult) { + log.info("请求接口[POST]: /project/header/add"); + // 参数校验 + if (bindingResult.hasErrors()) { + log.warn("参数校验失败: {}", Processing.getValidatedErrorList(bindingResult)); + return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult)); + } + return projectService.addHeader(request, projectShowVO); + } + + @PutMapping("/project/header/edit") + public BaseResponse projectEditHeader(@RequestBody @Validated ProjectShowVO projectShowVO,@RequestParam Integer id,HttpServletRequest request,@NotNull BindingResult bindingResult) { + log.info("请求接口[PUT]: /project/header/del"); + // 参数校验 + if (bindingResult.hasErrors()) { + log.warn("参数校验失败: {}", Processing.getValidatedErrorList(bindingResult)); + return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult)); + } + if (id == null) { + log.warn("参数校验失败: {}", "id不能为空"); + return ResultUtil.error(ErrorCode.PARAMETER_ERROR, "id不能为空"); + } + return projectService.editHeader(request, projectShowVO, id); + } + + + @GetMapping("/project/header/del") + public BaseResponse projectDelHeader(@RequestParam Integer id,HttpServletRequest request) { + log.info("请求接口[GET]: /project/header/del"); + return projectService.delHeader(id,request); + } + @PostMapping("/project/add") public BaseResponse projectAdd(@RequestBody @Validated ProjectInfoVO projectAdd, BindingResult bindingResult){ // 判断是否有参数错误 diff --git a/src/main/java/com/jsl/oa/dao/ProjectDAO.java b/src/main/java/com/jsl/oa/dao/ProjectDAO.java index 41fafb8..84b2539 100644 --- a/src/main/java/com/jsl/oa/dao/ProjectDAO.java +++ b/src/main/java/com/jsl/oa/dao/ProjectDAO.java @@ -1,11 +1,17 @@ package com.jsl.oa.dao; +import com.google.gson.Gson; import com.jsl.oa.mapper.ProjectMapper; import com.jsl.oa.model.doData.ProjectCuttingDO; +import com.jsl.oa.model.doData.info.CarouselDO; +import com.jsl.oa.model.doData.info.ProjectShowDO; import com.jsl.oa.model.voData.ProjectInfoVO; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; @Component @@ -13,6 +19,8 @@ import java.util.List; public class ProjectDAO { private final ProjectMapper projectMapper; + private final Gson gson; + public void projectAdd(ProjectInfoVO projectAdd) { projectMapper.projectAdd(projectAdd); @@ -35,4 +43,47 @@ public class ProjectDAO { public void projectAddUserForCutting(Long uid, Long pid) { projectMapper.projectAddUserInCutting(uid,pid); } + + public ProjectShowDO getHeader() { + String getProjectShowSql = projectMapper.getHeader(); + ProjectShowDO getProjectShow = null; + if (!getProjectShowSql.equals("{}")) { + getProjectShow = gson.fromJson(getProjectShowSql, ProjectShowDO.class); + } + if (getProjectShow == null) { + // 初始化 + getProjectShow = new ProjectShowDO(); + getProjectShow.setOrder("desc"); + getProjectShow.setData(new ArrayList<>()); + try { + projectMapper.insertProjectShow(); + } catch (DuplicateKeyException ignored) { + } + } + // 获取排序 + sortProject(getProjectShow); + return getProjectShow; + } + + private void sortProject(ProjectShowDO projectShowDO) { + for (int i = 0; i < projectShowDO.getData().size(); i++) { + for (int j = 0; j < projectShowDO.getData().size(); j++) { + if (projectShowDO.getOrder().equals("desc")) { + if (projectShowDO.getData().get(i).getDisplayOrder() > projectShowDO.getData().get(j).getDisplayOrder()) { + Collections.swap(projectShowDO.getData(), i, j); + } + } else { + if (projectShowDO.getData().get(i).getDisplayOrder() < projectShowDO.getData().get(j).getDisplayOrder()) { + Collections.swap(projectShowDO.getData(), i, j); + } + } + } + } + } + + public boolean setProjectShow(ProjectShowDO projectShowDO) { + sortProject(projectShowDO); + String setProjectShow = gson.toJson(projectShowDO); + return projectMapper.setProjectShow(setProjectShow); + } } diff --git a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java index 3958b54..70a0846 100644 --- a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java @@ -6,6 +6,7 @@ import com.jsl.oa.model.voData.ProjectInfoVO; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; import java.util.List; @@ -29,4 +30,13 @@ public interface ProjectMapper { @Insert("insert into organize_oa.oa_project_user(uid, pid)value (#{uid},#{pid})") void projectAddUserInCutting(Long uid, Long pid); + + @Select("select data from organize_oa.oa_config where value='project_show'") + String getHeader(); + + @Insert("insert into organize_oa.oa_config(value, data, created_at)value ('project_show',null,NOW())") + void insertProjectShow(); + + @Update("UPDATE organize_oa.oa_config SET data = #{setProjectShow} WHERE value = 'project_show'") + boolean setProjectShow(String setProjectShow); } diff --git a/src/main/java/com/jsl/oa/model/doData/info/ProjectShowDO.java b/src/main/java/com/jsl/oa/model/doData/info/ProjectShowDO.java new file mode 100644 index 0000000..4ec1f2b --- /dev/null +++ b/src/main/java/com/jsl/oa/model/doData/info/ProjectShowDO.java @@ -0,0 +1,25 @@ +package com.jsl.oa.model.doData.info; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +public class ProjectShowDO { + private String order; + private List data; + + @Data + @Accessors(chain = true) + public static class DataDO { + private Integer displayOrder; + private String name; + private Long type; + private Long status; + private Boolean isActive; + private String createdAt; + private String updatedAt; + private String author; + } +} \ No newline at end of file diff --git a/src/main/java/com/jsl/oa/model/voData/business/info/ProjectShowVO.java b/src/main/java/com/jsl/oa/model/voData/business/info/ProjectShowVO.java new file mode 100644 index 0000000..0d14fc0 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/voData/business/info/ProjectShowVO.java @@ -0,0 +1,12 @@ +package com.jsl.oa.model.voData.business.info; + +import lombok.Data; + +@Data +public class ProjectShowVO { + private Integer displayOrder; + private String name; + private Long type; + private Long status; + private Boolean isActive; +} diff --git a/src/main/java/com/jsl/oa/services/ProjectService.java b/src/main/java/com/jsl/oa/services/ProjectService.java index 138f3f5..0539e63 100644 --- a/src/main/java/com/jsl/oa/services/ProjectService.java +++ b/src/main/java/com/jsl/oa/services/ProjectService.java @@ -1,8 +1,12 @@ package com.jsl.oa.services; +import com.jsl.oa.model.doData.info.ProjectShowDO; import com.jsl.oa.model.voData.ProjectInfoVO; +import com.jsl.oa.model.voData.business.info.ProjectShowVO; import com.jsl.oa.utils.BaseResponse; +import javax.servlet.http.HttpServletRequest; + public interface ProjectService { BaseResponse projectAdd(ProjectInfoVO projectAdd); @@ -11,4 +15,12 @@ public interface ProjectService { BaseResponse projectGetUserInCutting(Long uid); BaseResponse projectAddUserForCutting(Long uid, Long pid); + + BaseResponse getHeader(Integer id); + + BaseResponse addHeader(HttpServletRequest request, ProjectShowVO projectShowVO); + + BaseResponse delHeader(Integer id, HttpServletRequest request); + + BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id); } diff --git a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java index cfeb6b6..3eaa576 100644 --- a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java @@ -2,16 +2,27 @@ package com.jsl.oa.services.impl; import com.jsl.oa.dao.ProjectDAO; import com.jsl.oa.dao.UserDAO; +import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.model.doData.ProjectCuttingDO; +import com.jsl.oa.model.doData.UserDO; +import com.jsl.oa.model.doData.info.CarouselDO; +import com.jsl.oa.model.doData.info.ProjectShowDO; import com.jsl.oa.model.voData.ProjectInfoVO; +import com.jsl.oa.model.voData.business.info.ProjectShowVO; import com.jsl.oa.services.ProjectService; import com.jsl.oa.services.UserService; import com.jsl.oa.utils.BaseResponse; import com.jsl.oa.utils.ErrorCode; +import com.jsl.oa.utils.Processing; import com.jsl.oa.utils.ResultUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import javax.servlet.http.HttpServletRequest; +import java.sql.Timestamp; +import java.util.ArrayList; import java.util.List; @Service @@ -20,6 +31,7 @@ public class ProjectServiceImpl implements ProjectService { private final ProjectDAO projectDAO; private final UserDAO userDAO; + private final RoleMapper roleMapper; @Override public BaseResponse projectAdd(ProjectInfoVO projectAdd) { @@ -54,4 +66,101 @@ public class ProjectServiceImpl implements ProjectService { } return null; } + + @Override + public BaseResponse getHeader(Integer id) { + ProjectShowDO projectShowDO = projectDAO.getHeader(); + if (id != null) { + if (id > projectShowDO.getData().size()) { + return ResultUtil.error(ErrorCode.ID_NOT_EXIST); + } + ArrayList newCarouselDO = new ArrayList<>(); + newCarouselDO.add(projectShowDO.getData().get(id - 1)); + projectShowDO.setData(newCarouselDO); + } + return ResultUtil.success(projectShowDO); + } + + @Override + public BaseResponse addHeader(HttpServletRequest request, ProjectShowVO projectShowVO) { + // 用户权限校验 + if (!Processing.checkUserIsAdmin(request, roleMapper)) { + return ResultUtil.error(ErrorCode.NOT_ADMIN); + } + // 获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + UserDO userDO = userDAO.getUserById(userId); + // 获取展示信息 + ProjectShowDO projectShowDO = projectDAO.getHeader(); + // 添加展示 + ProjectShowDO.DataDO project_show = new ProjectShowDO.DataDO(); + project_show.setDisplayOrder(projectShowVO.getDisplayOrder()) + .setName(projectShowVO.getName()) + .setType(projectShowVO.getType()) + .setStatus(projectShowVO.getStatus()) + .setIsActive(projectShowVO.getIsActive()) + .setAuthor(userDO.getUsername()) + .setCreatedAt(new Timestamp(System.currentTimeMillis()).toString()); + projectShowDO.getData().add(project_show); + // 保存展示 + if (projectDAO.setProjectShow(projectShowDO)) { + return ResultUtil.success(); + } else { + return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); + } + } + + @Override + public BaseResponse delHeader(Integer id, HttpServletRequest request) { + // 用户权限校验 + if (!Processing.checkUserIsAdmin(request, roleMapper)) { + return ResultUtil.error(ErrorCode.NOT_ADMIN); + } + // 获取展示信息 + ProjectShowDO projectShowDO = projectDAO.getHeader(); + // 删除指定展示id + if (id > projectShowDO.getData().size()) { + return ResultUtil.error(ErrorCode.ID_NOT_EXIST); + } + ProjectShowDO.DataDO data = projectShowDO.getData().remove(id - 1); + // 保存展示信息 + if (projectDAO.setProjectShow(projectShowDO)) { + return ResultUtil.success(data); + } else { + return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); + } + } + + @Override + public BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id) { + // 用户权限校验 + if (!Processing.checkUserIsAdmin(request, roleMapper)) { + return ResultUtil.error(ErrorCode.NOT_ADMIN); + } + // 获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + UserDO userDO = userDAO.getUserById(userId); + // 获取展示信息 + ProjectShowDO projectShowDO = projectDAO.getHeader(); + // 获取指定展示位置 + if (id > projectShowDO.getData().size()) { + return ResultUtil.error(ErrorCode.ID_NOT_EXIST); + } + ProjectShowDO.DataDO projectShow = projectShowDO.getData().get(id - 1); + projectShow.setDisplayOrder(projectShowVO.getDisplayOrder()) + .setName(projectShowVO.getName()) + .setType(projectShowVO.getType()) + .setStatus(projectShowVO.getStatus()) + .setIsActive(projectShowVO.getIsActive()) + .setAuthor(userDO.getUsername()) + .setUpdatedAt(new Timestamp(System.currentTimeMillis()).toString()); + // 保存展示信息 + if (projectDAO.setProjectShow(projectShowDO)) { + return ResultUtil.success(); + } else { + return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); + } + } + + } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index caf4bb7..20a895e 100755 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -10,6 +10,7 @@ spring: database: 0 host: localhost port: 6379 + password: profiles: active: dev mybatis: