From df315d455a6e52b9d0f3f63da056dc6562310553 Mon Sep 17 00:00:00 2001 From: lhx Date: Thu, 27 Nov 2025 18:24:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PersonnelController.java | 24 +++++ .../mapper/PersonnelPositionMapper.java | 18 ++++ .../dc/dc_project/model/dto/DeleteDto.java | 10 ++ .../dc/dc_project/model/dto/PersonnelDto.java | 2 + .../dc_project/model/dto/PersonnelNewDto.java | 28 +++++ .../model/dto/PersonnelUpdateDto.java | 28 +++++ .../dc_project/model/pojo/PersonnelOrg.java | 2 +- .../model/pojo/PersonnelPosition.java | 101 ++++++++++++++++++ .../service/PersonnelPositionService.java | 13 +++ .../dc_project/service/PersonnelService.java | 19 ++++ .../impl/PersonnelPositionServiceImpl.java | 22 ++++ .../service/impl/PersonnelServiceImpl.java | 99 +++++++++++++++-- .../service/impl/RoleOrgServiceImpl.java | 24 ----- .../service/impl/UserServiceImpl.java | 22 +++- .../mapper/PersonnelPositionMapper.xml | 11 ++ 15 files changed, 388 insertions(+), 35 deletions(-) create mode 100644 src/main/java/com/dc/dc_project/mapper/PersonnelPositionMapper.java create mode 100644 src/main/java/com/dc/dc_project/model/dto/DeleteDto.java create mode 100644 src/main/java/com/dc/dc_project/model/dto/PersonnelNewDto.java create mode 100644 src/main/java/com/dc/dc_project/model/dto/PersonnelUpdateDto.java create mode 100644 src/main/java/com/dc/dc_project/model/pojo/PersonnelPosition.java create mode 100644 src/main/java/com/dc/dc_project/service/PersonnelPositionService.java create mode 100644 src/main/java/com/dc/dc_project/service/impl/PersonnelPositionServiceImpl.java delete mode 100644 src/main/java/com/dc/dc_project/service/impl/RoleOrgServiceImpl.java create mode 100644 src/main/resources/mapper/PersonnelPositionMapper.xml diff --git a/src/main/java/com/dc/dc_project/controller/PersonnelController.java b/src/main/java/com/dc/dc_project/controller/PersonnelController.java index 0872126..e935ae2 100644 --- a/src/main/java/com/dc/dc_project/controller/PersonnelController.java +++ b/src/main/java/com/dc/dc_project/controller/PersonnelController.java @@ -4,7 +4,10 @@ package com.dc.dc_project.controller; import cn.dev33.satoken.stp.StpUtil; import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.aop.DcCheckPermission; +import com.dc.dc_project.model.dto.DeleteDto; import com.dc.dc_project.model.dto.PersonnelDto; +import com.dc.dc_project.model.dto.PersonnelNewDto; +import com.dc.dc_project.model.dto.PersonnelUpdateDto; import com.dc.dc_project.service.PersonnelService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; @@ -26,4 +29,25 @@ public class PersonnelController { Long userId = StpUtil.getLoginIdAsLong(); return personnelService.getList(personnelDto, userId); } + + @PostMapping("/add") + @DcCheckPermission("system:personnel:add") + public ResponseResult add(@RequestBody PersonnelNewDto personnelDto) { + Long userId = StpUtil.getLoginIdAsLong(); + return personnelService.add(personnelDto, userId); + } + + @PostMapping("/delete") + @DcCheckPermission("system:personnel:delete") + public ResponseResult delete(@RequestBody DeleteDto dto) { + Long userId = StpUtil.getLoginIdAsLong(); + return personnelService.delete(dto, userId); + } + + @PostMapping("/update") + @DcCheckPermission("system:personnel:update") + public ResponseResult update(@RequestBody PersonnelUpdateDto personnelDto) { + Long userId = StpUtil.getLoginIdAsLong(); + return personnelService.updatePersonnel(personnelDto, userId); + } } diff --git a/src/main/java/com/dc/dc_project/mapper/PersonnelPositionMapper.java b/src/main/java/com/dc/dc_project/mapper/PersonnelPositionMapper.java new file mode 100644 index 0000000..19894d9 --- /dev/null +++ b/src/main/java/com/dc/dc_project/mapper/PersonnelPositionMapper.java @@ -0,0 +1,18 @@ +package com.dc.dc_project.mapper; + +import com.dc.dc_project.model.pojo.PersonnelPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author ADMIN +* @description 针对表【sys_personnel_position(人员岗位表)】的数据库操作Mapper +* @createDate 2025-11-27 15:44:41 +* @Entity com.dc.dc_project.model.pojo.PersonnelPosition +*/ +public interface PersonnelPositionMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/dc/dc_project/model/dto/DeleteDto.java b/src/main/java/com/dc/dc_project/model/dto/DeleteDto.java new file mode 100644 index 0000000..a508ca3 --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/DeleteDto.java @@ -0,0 +1,10 @@ +package com.dc.dc_project.model.dto; + + +import lombok.Data; + +@Data +public class DeleteDto { + + private Long[] ids; +} diff --git a/src/main/java/com/dc/dc_project/model/dto/PersonnelDto.java b/src/main/java/com/dc/dc_project/model/dto/PersonnelDto.java index ccaccf9..e95e1b1 100644 --- a/src/main/java/com/dc/dc_project/model/dto/PersonnelDto.java +++ b/src/main/java/com/dc/dc_project/model/dto/PersonnelDto.java @@ -4,7 +4,9 @@ package com.dc.dc_project.model.dto; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dc.dc_project.model.pojo.Personnel; import lombok.Data; +import lombok.EqualsAndHashCode; +@EqualsAndHashCode(callSuper = true) @Data public class PersonnelDto extends Page { diff --git a/src/main/java/com/dc/dc_project/model/dto/PersonnelNewDto.java b/src/main/java/com/dc/dc_project/model/dto/PersonnelNewDto.java new file mode 100644 index 0000000..373d3b5 --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/PersonnelNewDto.java @@ -0,0 +1,28 @@ +package com.dc.dc_project.model.dto; + + +import lombok.Data; + +@Data +public class PersonnelNewDto { + + private String name; + + private String contactPhone; + + private String email; + + private Integer sex; + + private String mainResponsibility; + + private String remark; + + private String avatar; + + private Long orgId; + + private Long userId; + + private Integer isUser; +} diff --git a/src/main/java/com/dc/dc_project/model/dto/PersonnelUpdateDto.java b/src/main/java/com/dc/dc_project/model/dto/PersonnelUpdateDto.java new file mode 100644 index 0000000..9632682 --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/dto/PersonnelUpdateDto.java @@ -0,0 +1,28 @@ +package com.dc.dc_project.model.dto; + + +import lombok.Data; + +@Data +public class PersonnelUpdateDto { + + private Long id; + + private String name; + + private String contactPhone; + + private String email; + + private Integer sex; + + private String mainResponsibility; + + private String remark; + + private String avatar; + + private Long orgId; + + private Integer status; +} diff --git a/src/main/java/com/dc/dc_project/model/pojo/PersonnelOrg.java b/src/main/java/com/dc/dc_project/model/pojo/PersonnelOrg.java index d35892b..27fb780 100644 --- a/src/main/java/com/dc/dc_project/model/pojo/PersonnelOrg.java +++ b/src/main/java/com/dc/dc_project/model/pojo/PersonnelOrg.java @@ -42,7 +42,7 @@ public class PersonnelOrg { * 创建人 */ @TableField(value = "created_by") - private String createdBy; + private Long createdBy; } \ No newline at end of file diff --git a/src/main/java/com/dc/dc_project/model/pojo/PersonnelPosition.java b/src/main/java/com/dc/dc_project/model/pojo/PersonnelPosition.java new file mode 100644 index 0000000..0acd27f --- /dev/null +++ b/src/main/java/com/dc/dc_project/model/pojo/PersonnelPosition.java @@ -0,0 +1,101 @@ +package com.dc.dc_project.model.pojo; + +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 java.time.LocalDateTime; +import lombok.Data; + +/** + * 人员岗位表 + * @TableName sys_personnel_position + */ +@TableName(value ="sys_personnel_position") +@Data +public class PersonnelPosition { + /** + * + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * + */ + @TableField(value = "personnel_id") + private Long personnelId; + + /** + * + */ + @TableField(value = "position_id") + private Long positionId; + + /** + * 备注 + */ + @TableField(value = "remark") + private String remark; + + /** + * 创建时间 + */ + @TableField(value = "created_at") + private LocalDateTime createdAt; + + /** + * 更新时间 + */ + @TableField(value = "updated_at") + private LocalDateTime updatedAt; + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + PersonnelPosition other = (PersonnelPosition) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getPersonnelId() == null ? other.getPersonnelId() == null : this.getPersonnelId().equals(other.getPersonnelId())) + && (this.getPositionId() == null ? other.getPositionId() == null : this.getPositionId().equals(other.getPositionId())) + && (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark())) + && (this.getCreatedAt() == null ? other.getCreatedAt() == null : this.getCreatedAt().equals(other.getCreatedAt())) + && (this.getUpdatedAt() == null ? other.getUpdatedAt() == null : this.getUpdatedAt().equals(other.getUpdatedAt())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getPersonnelId() == null) ? 0 : getPersonnelId().hashCode()); + result = prime * result + ((getPositionId() == null) ? 0 : getPositionId().hashCode()); + result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode()); + result = prime * result + ((getCreatedAt() == null) ? 0 : getCreatedAt().hashCode()); + result = prime * result + ((getUpdatedAt() == null) ? 0 : getUpdatedAt().hashCode()); + return result; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", personnelId=").append(personnelId); + sb.append(", positionId=").append(positionId); + sb.append(", remark=").append(remark); + sb.append(", createdAt=").append(createdAt); + sb.append(", updatedAt=").append(updatedAt); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/dc/dc_project/service/PersonnelPositionService.java b/src/main/java/com/dc/dc_project/service/PersonnelPositionService.java new file mode 100644 index 0000000..fad0166 --- /dev/null +++ b/src/main/java/com/dc/dc_project/service/PersonnelPositionService.java @@ -0,0 +1,13 @@ +package com.dc.dc_project.service; + +import com.dc.dc_project.model.pojo.PersonnelPosition; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author ADMIN +* @description 针对表【sys_personnel_position(人员岗位表)】的数据库操作Service +* @createDate 2025-11-27 15:44:41 +*/ +public interface PersonnelPositionService extends IService { + +} diff --git a/src/main/java/com/dc/dc_project/service/PersonnelService.java b/src/main/java/com/dc/dc_project/service/PersonnelService.java index fa50795..2ea828c 100644 --- a/src/main/java/com/dc/dc_project/service/PersonnelService.java +++ b/src/main/java/com/dc/dc_project/service/PersonnelService.java @@ -1,7 +1,10 @@ package com.dc.dc_project.service; import com.dc.dc_project.common.ResponseResult; +import com.dc.dc_project.model.dto.DeleteDto; import com.dc.dc_project.model.dto.PersonnelDto; +import com.dc.dc_project.model.dto.PersonnelNewDto; +import com.dc.dc_project.model.dto.PersonnelUpdateDto; import com.dc.dc_project.model.pojo.Personnel; import com.baomidou.mybatisplus.extension.service.IService; @@ -26,4 +29,20 @@ public interface PersonnelService extends IService { * @return */ ResponseResult getList(PersonnelDto personnelDto, Long userId); + + /** + * 新增人员 + * @param personnelDto + * @return + */ + ResponseResult add(PersonnelNewDto personnelDto, Long userId); + + ResponseResult delete(DeleteDto dto, Long userId); + + /** + * 修改人员信息 + * @param personnelDto + * @return + */ + ResponseResult updatePersonnel(PersonnelUpdateDto personnelDto, Long userId); } diff --git a/src/main/java/com/dc/dc_project/service/impl/PersonnelPositionServiceImpl.java b/src/main/java/com/dc/dc_project/service/impl/PersonnelPositionServiceImpl.java new file mode 100644 index 0000000..ff68563 --- /dev/null +++ b/src/main/java/com/dc/dc_project/service/impl/PersonnelPositionServiceImpl.java @@ -0,0 +1,22 @@ +package com.dc.dc_project.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dc.dc_project.model.pojo.PersonnelPosition; +import com.dc.dc_project.service.PersonnelPositionService; +import com.dc.dc_project.mapper.PersonnelPositionMapper; +import org.springframework.stereotype.Service; + +/** +* @author ADMIN +* @description 针对表【sys_personnel_position(人员岗位表)】的数据库操作Service实现 +* @createDate 2025-11-27 15:44:41 +*/ +@Service +public class PersonnelPositionServiceImpl extends ServiceImpl + implements PersonnelPositionService{ + +} + + + + diff --git a/src/main/java/com/dc/dc_project/service/impl/PersonnelServiceImpl.java b/src/main/java/com/dc/dc_project/service/impl/PersonnelServiceImpl.java index bf3ab3e..35b92c2 100644 --- a/src/main/java/com/dc/dc_project/service/impl/PersonnelServiceImpl.java +++ b/src/main/java/com/dc/dc_project/service/impl/PersonnelServiceImpl.java @@ -7,19 +7,21 @@ import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.enums.DataScopeType; import com.dc.dc_project.enums.IsDeleted; import com.dc.dc_project.mapper.OrgMapper; +import com.dc.dc_project.model.dto.DeleteDto; import com.dc.dc_project.model.dto.PersonnelDto; -import com.dc.dc_project.model.pojo.Org; -import com.dc.dc_project.model.pojo.Personnel; +import com.dc.dc_project.model.dto.PersonnelNewDto; +import com.dc.dc_project.model.dto.PersonnelUpdateDto; +import com.dc.dc_project.model.pojo.*; import com.dc.dc_project.model.vo.PersonnelListVo; import com.dc.dc_project.model.vo.PersonnelVo; -import com.dc.dc_project.service.OrgService; -import com.dc.dc_project.service.PersonnelService; +import com.dc.dc_project.service.*; import com.dc.dc_project.mapper.PersonnelMapper; import com.dc.dc_project.utils.PermissionUtils; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -31,12 +33,15 @@ import java.util.List; @Service @Slf4j @RequiredArgsConstructor(onConstructor_ = @Autowired) +@Transactional public class PersonnelServiceImpl extends ServiceImpl implements PersonnelService{ - private final PersonnelMapper personnelMapper; private final OrgMapper orgMapper; private final OrgService orgService; + private final PersonnelOrgService personnelOrgService; + private final UserService userService; + private final PersonnelPositionService personnelPositionService; @Override @@ -65,7 +70,89 @@ public class PersonnelServiceImpl extends ServiceImpl page = baseMapper.getPage(personnelDto, orgIds); - return null; + return ResponseResult.success(page); + } + + @Override + public ResponseResult add(PersonnelNewDto personnelDto, Long userId) { + + Personnel personnel = new Personnel(); + personnel.setName(personnelDto.getName()); + personnel.setAvatar(personnelDto.getAvatar()); + personnel.setContactPhone(personnelDto.getContactPhone()); + personnel.setEmail(personnelDto.getEmail()); + personnel.setSex(personnelDto.getSex()); + personnel.setMainResponsibility(personnelDto.getMainResponsibility()); + personnel.setRemark(personnelDto.getRemark()); + personnel.setStatus(1); + personnel.setCreatedBy(userId); + + if(personnelDto.getOrgId() != null){ + PersonnelOrg personnelOrg = new PersonnelOrg(); + personnelOrg.setPersonnelId(personnel.getId()); + personnelOrg.setOrgId(personnelDto.getOrgId()); + personnelOrg.setCreatedBy(userId); + personnelOrgService.save(personnelOrg); + } + if(personnelDto.getIsUser() == 1){ + User user = new User(); + user.setUsername(personnel.getName()); + // 密码加密 + user.setPassword(personnelDto.getContactPhone()); + user.setPhone(personnel.getContactPhone()); + user.setStatus(1); + user.setRemark(personnel.getRemark()); + userService.save(user); + personnel.setUserId(user.getId()); + } + if (this.save(personnel)){ + return ResponseResult.success(); + } + return ResponseResult.error(); + } + + @Override + public ResponseResult delete(DeleteDto dto, Long userId) { + // 权限范围检查 + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .in(Personnel::getId, (Object) dto.getIds()); + List personnels = this.list(queryWrapper); + for (Personnel personnel : personnels) { + if (personnel.getUserId() != null) { + User user = userService.getById(personnel.getUserId()); + if (user != null) { + user.setIsDeleted(1); + userService.updateById(user); + } + } + personnelOrgService.remove(new LambdaQueryWrapper().eq(PersonnelOrg::getPersonnelId, personnel.getId())); + personnelPositionService.remove(new LambdaQueryWrapper().eq(PersonnelPosition::getPersonnelId, personnel.getId())); + personnel.setIsDeleted(1); + } + + if (this.updateBatchById(personnels)){ + return ResponseResult.success(); + } + return ResponseResult.error(); + } + + @Override + public ResponseResult updatePersonnel(PersonnelUpdateDto personnelDto, Long userId) { + Personnel personnel = this.getById(personnelDto.getId()); + personnel.setName(personnelDto.getName() != null ? personnelDto.getName() : personnel.getName()); + personnel.setAvatar(personnelDto.getAvatar() != null ? personnelDto.getAvatar() : personnel.getAvatar()); + personnel.setContactPhone(personnelDto.getContactPhone() != null ? personnelDto.getContactPhone() : personnel.getContactPhone()); + personnel.setEmail(personnelDto.getEmail() != null ? personnelDto.getEmail() : personnel.getEmail()); + personnel.setSex(personnelDto.getSex() != null ? personnelDto.getSex() : personnel.getSex()); + personnel.setMainResponsibility(personnelDto.getMainResponsibility() != null ? personnelDto.getMainResponsibility() : personnel.getMainResponsibility()); + personnel.setRemark(personnelDto.getRemark() != null ? personnelDto.getRemark() : personnel.getRemark()); + personnel.setStatus(personnelDto.getStatus() != null ? personnelDto.getStatus() : personnel.getStatus()); + if (this.updateById(personnel)){ + return ResponseResult.success(); + } + + return ResponseResult.error(); } } diff --git a/src/main/java/com/dc/dc_project/service/impl/RoleOrgServiceImpl.java b/src/main/java/com/dc/dc_project/service/impl/RoleOrgServiceImpl.java deleted file mode 100644 index 811fb55..0000000 --- a/src/main/java/com/dc/dc_project/service/impl/RoleOrgServiceImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.dc.dc_project.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.dc.dc_project.model.pojo.PersonnelOrg; -import com.dc.dc_project.service.PersonnelOrgService; -import com.dc.dc_project.mapper.PersonnelOrgMapper; -import org.springframework.stereotype.Service; -import lombok.extern.slf4j.Slf4j; - -/** -* @author ADMIN -* @description 针对表【sys_role_org(角色-组织关系表)】的数据库操作Service实现 -* @createDate 2025-11-12 09:41:21 -*/ -@Service -@Slf4j -public class RoleOrgServiceImpl extends ServiceImpl - implements PersonnelOrgService { - -} - - - - diff --git a/src/main/java/com/dc/dc_project/service/impl/UserServiceImpl.java b/src/main/java/com/dc/dc_project/service/impl/UserServiceImpl.java index 855692d..17b9f95 100644 --- a/src/main/java/com/dc/dc_project/service/impl/UserServiceImpl.java +++ b/src/main/java/com/dc/dc_project/service/impl/UserServiceImpl.java @@ -15,10 +15,7 @@ import com.dc.dc_project.model.vo.PersonnelVo; import com.dc.dc_project.model.vo.PositionVo; import com.dc.dc_project.model.vo.UserInfoVo; import com.dc.dc_project.model.vo.UserVo; -import com.dc.dc_project.service.OrgService; -import com.dc.dc_project.service.PermissionService; -import com.dc.dc_project.service.PersonnelService; -import com.dc.dc_project.service.UserService; +import com.dc.dc_project.service.*; import com.dc.dc_project.utils.PermissionUtils; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; @@ -54,6 +51,7 @@ public class UserServiceImpl extends ServiceImpl private final PositionMapper positionMapper; private final PermissionService permissionService; private final OrgService orgService; + private final UserRoleService userRoleService; @Override public ResponseResult login(LoginDto loginDto) { @@ -220,6 +218,22 @@ public class UserServiceImpl extends ServiceImpl user.setIsDeleted(1); } + List userIds = users.stream().map(User::getId).toList(); + + // 删除角色关联 + LambdaQueryWrapper urQueryWrapper = new LambdaQueryWrapper() + .in(UserRole::getUserId, userIds); + userRoleService.remove(urQueryWrapper); + + // 删除人员关联 + LambdaQueryWrapper pQueryWrapper = new LambdaQueryWrapper() + .in(Personnel::getUserId, userIds); + List personnels =personnelService.list(pQueryWrapper); + for (Personnel personnel : personnels){ + personnel.setUserId(null); + } + personnelService.updateBatchById(personnels); + return this.updateBatchById(users) ? ResponseResult.success() : ResponseResult.error(); } diff --git a/src/main/resources/mapper/PersonnelPositionMapper.xml b/src/main/resources/mapper/PersonnelPositionMapper.xml new file mode 100644 index 0000000..0d53379 --- /dev/null +++ b/src/main/resources/mapper/PersonnelPositionMapper.xml @@ -0,0 +1,11 @@ + + + + + + + id,personnel_id,position_id,remark,created_at,updated_at + +