diff --git a/src/main/java/com/dc/dc_project/controller/PositionController.java b/src/main/java/com/dc/dc_project/controller/PositionController.java new file mode 100644 index 0000000..745f5eb --- /dev/null +++ b/src/main/java/com/dc/dc_project/controller/PositionController.java @@ -0,0 +1,61 @@ +package com.dc.dc_project.controller; + + +import cn.dev33.satoken.stp.StpUtil; +import com.dc.dc_project.common.ResponseResult; +import com.dc.dc_project.model.dto.*; +import com.dc.dc_project.model.pojo.PersonnelPosition; +import com.dc.dc_project.model.pojo.Position; +import com.dc.dc_project.service.PositionService; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RestController +@RequestMapping("/position") +public class PositionController { + + private final PositionService positionService; + + @PostMapping("/list") + public ResponseResult list(@RequestBody PositionQueDto positionDto) { + Long userId = StpUtil.getLoginIdAsLong(); + return positionService.getList(positionDto, userId); + } + + @PostMapping("/add") + public ResponseResult add(@RequestBody PositionAddDto position) { + Long userId = StpUtil.getLoginIdAsLong(); + return positionService.add(position, userId); + } + + @PostMapping("/delete") + public ResponseResult delete(@RequestBody Position position) { + Long userId = StpUtil.getLoginIdAsLong(); + return positionService.delete(position, userId); + } + + @PostMapping("/update") + public ResponseResult update(@RequestBody PositionUpdateDto position) { + Long userId = StpUtil.getLoginIdAsLong(); + return positionService.updatePosition(position, userId); + } + + @PostMapping("/grant") + public ResponseResult grant(@RequestBody @Validated PersonnelPositionGrantDto personnelPosition) { + Long userId = StpUtil.getLoginIdAsLong(); + return positionService.grant(personnelPosition, userId); + } + + @PostMapping("/revoke") + public ResponseResult revoke(@RequestBody PersonnelPositionRevokeDto personnelPosition) { + Long userId = StpUtil.getLoginIdAsLong(); + return positionService.revoke(personnelPosition, userId); + } +} diff --git a/src/main/java/com/dc/dc_project/model/dto/PersonnelPositionGrantDto.java b/src/main/java/com/dc/dc_project/model/dto/PersonnelPositionGrantDto.java new file mode 100644 index 0000000..bbc9ee0 --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/PersonnelPositionGrantDto.java @@ -0,0 +1,29 @@ +package com.dc.dc_project.model.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 人员岗位表 + * @TableName sys_personnel_position + */ +@Data +public class PersonnelPositionGrantDto { + + @NotNull + private Long personnelId; + + + @NotNull + private Long positionId; + + + private String remark; + +} \ No newline at end of file diff --git a/src/main/java/com/dc/dc_project/model/dto/PersonnelPositionRevokeDto.java b/src/main/java/com/dc/dc_project/model/dto/PersonnelPositionRevokeDto.java new file mode 100644 index 0000000..86a537d --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/PersonnelPositionRevokeDto.java @@ -0,0 +1,10 @@ +package com.dc.dc_project.model.dto; + + +import lombok.Data; + +@Data +public class PersonnelPositionRevokeDto { + + private Long id; +} diff --git a/src/main/java/com/dc/dc_project/model/dto/PositionAddDto.java b/src/main/java/com/dc/dc_project/model/dto/PositionAddDto.java new file mode 100644 index 0000000..b35f6ca --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/PositionAddDto.java @@ -0,0 +1,28 @@ +package com.dc.dc_project.model.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 岗位信息表 + * @TableName sys_position + */ +@Data +public class PositionAddDto { + + + private String name; + + + private Long orgId; + + + private String remark; + + +} \ No newline at end of file diff --git a/src/main/java/com/dc/dc_project/model/dto/PositionQueDto.java b/src/main/java/com/dc/dc_project/model/dto/PositionQueDto.java new file mode 100644 index 0000000..fe19851 --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/PositionQueDto.java @@ -0,0 +1,16 @@ +package com.dc.dc_project.model.dto; + + +import lombok.Data; + +@Data +public class PositionQueDto { + + private Long id; + + private String name; + + private String remark; + + private Long orgId; +} diff --git a/src/main/java/com/dc/dc_project/model/dto/PositionUpdateDto.java b/src/main/java/com/dc/dc_project/model/dto/PositionUpdateDto.java new file mode 100644 index 0000000..a35969e --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/PositionUpdateDto.java @@ -0,0 +1,25 @@ +package com.dc.dc_project.model.dto; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 岗位信息表 + * @TableName sys_position + */ +@Data +public class PositionUpdateDto { + + @NotNull + private Long id; + + private String name; + + + private Long orgId; + + + private String remark; + + +} \ No newline at end of file diff --git a/src/main/java/com/dc/dc_project/model/vo/PositionVo.java b/src/main/java/com/dc/dc_project/model/vo/PositionVo.java index 5318e9a..c238d0a 100644 --- a/src/main/java/com/dc/dc_project/model/vo/PositionVo.java +++ b/src/main/java/com/dc/dc_project/model/vo/PositionVo.java @@ -1,6 +1,7 @@ package com.dc.dc_project.model.vo; import com.baomidou.mybatisplus.annotation.TableName; +import com.dc.dc_project.model.pojo.Position; import lombok.Data; import java.time.LocalDateTime; @@ -47,5 +48,17 @@ public class PositionVo { */ private Integer isDeleted; + public static PositionVo potoVo(Position position){ + PositionVo positionVo = new PositionVo(); + positionVo.setId(position.getId()); + positionVo.setName(position.getName()); + positionVo.setOrgId(position.getOrgId()); + positionVo.setRemark(position.getRemark()); + positionVo.setCreatedAt(position.getCreatedAt()); + positionVo.setUpdatedAt(position.getUpdatedAt()); + positionVo.setIsDeleted(position.getIsDeleted()); + return positionVo; + } + } \ No newline at end of file diff --git a/src/main/java/com/dc/dc_project/service/PositionService.java b/src/main/java/com/dc/dc_project/service/PositionService.java index 08cb0d6..86dd51b 100644 --- a/src/main/java/com/dc/dc_project/service/PositionService.java +++ b/src/main/java/com/dc/dc_project/service/PositionService.java @@ -1,5 +1,8 @@ package com.dc.dc_project.service; +import com.dc.dc_project.common.ResponseResult; +import com.dc.dc_project.model.dto.*; +import com.dc.dc_project.model.pojo.PersonnelPosition; import com.dc.dc_project.model.pojo.Position; import com.baomidou.mybatisplus.extension.service.IService; @@ -10,4 +13,51 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface PositionService extends IService { + /** + * 获取岗位列表 + * @param positionDto + * @param userId + * @return + */ + ResponseResult getList(PositionQueDto positionDto, Long userId); + + /** + * 添加岗位 + * @param position + * @param userId + * @return + */ + ResponseResult add(PositionAddDto position, Long userId); + + /** + * 删除岗位 + * @param position + * @param userId + * @return + */ + ResponseResult delete(Position position, Long userId); + + /** + * 修改岗位 + * @param position + * @param userId + * @return + */ + ResponseResult updatePosition(PositionUpdateDto position, Long userId); + + /** + * 岗位授权 + * @param personnelPosition + * @param userId + * @return + */ + ResponseResult grant(PersonnelPositionGrantDto personnelPosition, Long userId); + + /** + * 岗位撤销授权 + * @param personnelPosition + * @param userId + * @return + */ + ResponseResult revoke(PersonnelPositionRevokeDto personnelPosition, Long userId); } diff --git a/src/main/java/com/dc/dc_project/service/PositionServiceImpl.java b/src/main/java/com/dc/dc_project/service/PositionServiceImpl.java index 7a3da6b..d89fd7e 100644 --- a/src/main/java/com/dc/dc_project/service/PositionServiceImpl.java +++ b/src/main/java/com/dc/dc_project/service/PositionServiceImpl.java @@ -1,19 +1,125 @@ package com.dc.dc_project.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dc.dc_project.common.ResponseResult; +import com.dc.dc_project.common.ResultCode; +import com.dc.dc_project.enums.IsDeleted; +import com.dc.dc_project.mapper.OrgMapper; +import com.dc.dc_project.mapper.PersonnelPositionMapper; +import com.dc.dc_project.model.dto.*; +import com.dc.dc_project.model.pojo.Org; +import com.dc.dc_project.model.pojo.PersonnelPosition; import com.dc.dc_project.model.pojo.Position; import com.dc.dc_project.mapper.PositionMapper; +import com.dc.dc_project.model.vo.PositionVo; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + +import static com.dc.dc_project.model.vo.PositionVo.potoVo; + /** * @author ADMIN * @description 针对表【sys_position(岗位信息表)】的数据库操作Service实现 * @createDate 2025-11-14 16:39:29 */ @Service +@RequiredArgsConstructor(onConstructor_ = @__(@Autowired)) public class PositionServiceImpl extends ServiceImpl implements PositionService{ + private final OrgMapper orgMapper; + private final PersonnelPositionMapper personnelPositionMapper; + + @Override + public ResponseResult getList(PositionQueDto positionDto, Long userId) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(Position::getName, positionDto.getName()) + .like(Position::getRemark, positionDto.getRemark()) + .eq(Position::getId, positionDto.getId()) + .eq(Position::getIsDeleted, IsDeleted.NO.getCode()) + .eq(Position::getOrgId, positionDto.getOrgId()); + + List list = list(queryWrapper); + List positionVos = new ArrayList<>(list.size()); + for (Position position : list){ + PositionVo positionVo = potoVo(position); + LambdaQueryWrapper orgQueryWrapper = new LambdaQueryWrapper<>(); + orgQueryWrapper.select(Org::getName).eq(Org::getId, position.getOrgId()); + positionVo.setOrgName(orgMapper.selectOne(orgQueryWrapper).getName()); + positionVos.add(positionVo); + } + + return ResponseResult.success(positionVos); + } + + @Override + public ResponseResult add(PositionAddDto addPosition, Long userId) { + Position position = new Position(); + + position.setName(addPosition.getName()); + position.setOrgId(addPosition.getOrgId()); + position.setRemark(addPosition.getRemark()); + + return save(position) ? ResponseResult.success() : ResponseResult.error(); + } + + @Override + public ResponseResult delete(Position position, Long userId) { + + if(position.getId() == null){ + return ResponseResult.error("参数错误"); + } + Position position1 = this.getById(position.getId()); + if (position1 == null) { + return ResponseResult.error(ResultCode.FAILURE); + } + position1.setIsDeleted(IsDeleted.YES.getCode()); + return updateById(position1) ? ResponseResult.success() : ResponseResult.error(); + } + + @Override + public ResponseResult updatePosition(PositionUpdateDto updatePosition, Long userId) { + + Position position = this.getById(updatePosition.getId()); + if (position == null) { + return ResponseResult.error(ResultCode.FAILURE); + } + position.setName(updatePosition.getName() == null ? position.getName() : updatePosition.getName()); + position.setOrgId(updatePosition.getOrgId() == null ? position.getOrgId() : updatePosition.getOrgId()); + position.setRemark(updatePosition.getRemark() == null ? position.getRemark() : updatePosition.getRemark()); + return updateById(position) ? ResponseResult.success() : ResponseResult.error(); + } + + @Override + public ResponseResult grant(PersonnelPositionGrantDto personnelPosition, Long userId) { + + if(personnelPositionMapper.exists(new LambdaQueryWrapper() + .eq(PersonnelPosition::getPersonnelId, personnelPosition.getPersonnelId()) + .eq(PersonnelPosition::getPositionId, personnelPosition.getPositionId()) + )){ + return ResponseResult.error("已存在"); + } + PersonnelPosition personnelPosition1 = new PersonnelPosition(); + personnelPosition1.setPersonnelId(personnelPosition.getPersonnelId()); + personnelPosition1.setPositionId(personnelPosition.getPositionId()); + personnelPosition1.setRemark(personnelPosition.getRemark()); + return personnelPositionMapper.insert(personnelPosition1) > 0 ? ResponseResult.success() : ResponseResult.error(); + } + + @Override + public ResponseResult revoke(PersonnelPositionRevokeDto personnelPosition, Long userId) { + + if(!personnelPositionMapper.exists(new LambdaQueryWrapper().eq(PersonnelPosition::getId, personnelPosition.getId()))){ + return ResponseResult.error("不存在"); + } + return personnelPositionMapper.deleteById(personnelPosition.getId()) > 0 ? ResponseResult.success() : ResponseResult.error(); + } }