当前位置: 首页 > news >正文

Boss项目:员工新增+员工编辑

Boss项目:员工新增+员工编辑(2.6)

一、员工新增:

书接上回

EmployeeController:

 @PostMapping("/saveOrUpdate")@RequireLogin@ResponseBodypublic Result saveOrUpdate(@RequestBody Employee employee){try {if(StringUtils.isEmpty(employee.getId())){//新增employeeService.save(employee);}else {//编辑//employeeService.edit(employee);}} catch (Exception e) {e.printStackTrace();return Result.fail(e.getMessage());}return Result.success();}

①实现employeeService.save(employee)方法:

employeeService

​ ↓

employeeServiceImpl:

@Overridepublic void save(Employee employee) {employee.setAdmin(employee.getAdmin()==null?false:employee.getAdmin());//1.员工信息表添加int m = employeeMapper.insert(employee);if(m <= 0){throw new RuntimeException("添加员工失败");}//2.员工角色关系表添加 是管理员if(StringUtils.isEmpty(employee.getAdmin()) && employee.getAdmin()){return;}//不是管理员if(StringUtils.isEmpty(employee.getIds()) || employee.getIds().size()==0){return ;}List<EmployeeRole> employeeRoleList = employee.getIds().stream().map(id -> new EmployeeRole(employee.getId(),id)).collect(Collectors.toList());m = employeeRoleService.saveList(employeeRoleList);if(m <= 0){throw new RuntimeException("添加员工角色信息失败");}}

如果前端没勾选admin则设为false;若前端勾选了admin则设为true;

首先添加employee表信息

再根据是否为管理员进行判断

  • 若是管理员,则直接跳过employee_role表的添加逻辑,不再执行后续代码

  • 若不是管理员

    • 若前端没给该员工分配角色,则则直接跳过employee_role表的添加逻辑,不再执行后续代码

    • 获取前端传的角色id列表,并将 List 转换为 Stream 流,遍历每个角色id,生成一个EmployeeRole对象,最后将 Stream 处理后的结果收集成 List;最后执行employee_role表的添加。

      .map(id -> new EmployeeRole(employee.getId(),id))核心转换:遍历每个角色id,生成一个EmployeeRole对象

      - employee.getId():当前新增员工的id(刚插入员工表生成的主键)

      - id:遍历的角色 id

      例如,员工id为101,角色id为[2,5,7]

      employeeRoleList = [EmployeeRole {employeeId: 101,  // 当前员工的IDroleId: 2         // 第一个角色ID},EmployeeRole {employeeId: 101,  // 同一个员工IDroleId: 5         // 第二个角色ID},EmployeeRole {employeeId: 101,  // 同一个员工IDroleId: 7         // 第三个角色ID}
      ]
      

②补充EmployeeRole:

EmployeeRole:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeRole {private Long employeeId;private Long roleId;
}

EmployeeRoleService:

public interface EmployeeRoleService {}

EmployeeRoleServiceImpl:

@Service
public class EmployeeRoleServiceImpl implements EmployeeRoleService {@Autowiredprivate EmployeeRoleMapper employeeRoleMapper;
}

EmployeeRoleMapper:

public interface EmployeeRoleMapper {}

③实现 employeeMapper.insert(employee)方法:

employeeMapper:

@Insert("insert into employee(name,password,email,age,admin,dept_id) values(#{name},#{password},#{email},#{age},#{admin},#{deptId})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(Employee employee);

④实现employeeRoleService.saveList(employeeRoleList)方法:

employeeRoleService:

public interface EmployeeRoleService {int saveList(List<EmployeeRole> employeeRoleList);}

EmployeeRoleServiceImpl:

@Service
public class EmployeeRoleServiceImpl implements EmployeeRoleService {@Autowiredprivate EmployeeRoleMapper employeeRoleMapper;@Overridepublic int saveList(List<EmployeeRole> employeeRoleList) {return employeeRoleMapper.insertList(employeeRoleList);}}

employeeRoleMapper:

public interface EmployeeRoleMapper {@InsertProvider(type = SQLProvider.class, method = "insertList")int insertList(List<EmployeeRole> employeeRoleList);class SQLProvider {public String insertList(List<EmployeeRole> employeeRoleList) {StringBuffer sql = new StringBuffer("insert into employee_role(employee_id,role_id) values");for(EmployeeRole employeeRole:employeeRoleList) {sql.append("(").append(employeeRole.getEmployeeId()).append(",").append(employeeRole.getRoleId()).append("),");}sql.deleteCharAt(sql.length()-1);System.out.println(sql);return sql.toString();}}
}

二、员工编辑:

①EmployeeController:

 @GetMapping("/input")@RequireLoginpublic String inputGet(Long id,Map<String,Object> map){if(!(StringUtils.isEmpty(id))){//编辑  employeeEmployee employee = employeeService.findById(id);map.put("employee",employee);}//新增+编辑 depts  rolesList<Department> departmentList =departmentService.findAll();map.put("depts",departmentList);//rolesList<Role> roleList =roleService.findAll();map.put("roles",roleList);return "employee/input";}

EmployeeService:

public interface EmployeeService {Employee findById(Long id);
}

EmployeeServiceImpl:

    @Overridepublic Employee findById(Long id) {Employee employee = employeeMapper.findById(id);//判断是否是admin,如果不是,查询roleif(employee.getAdmin()){return employee;}//如果不是List<Role> roles = employeeRoleService.queryByEmployeeId(id);if(StringUtils.isEmpty(roles)|| roles.size()==0){return employee;}employee.setRoles(roles);return employee;}

②实现employeeMapper.findById(id)方法:

EmployeeMapper:

    @Select("select e.*, d.id as did,d.name as dname,d.sn as dsn " +"FROM employee e " +"left outer join department d on e.dept_id=d.id " +"where e.id=#{id}")@Results({@Result(property = "id", column = "id", id = true),@Result(property = "name", column = "name"),@Result(property = "password", column = "password"),@Result(property = "email", column = "email"),@Result(property = "age", column = "age"),@Result(property = "admin", column = "admin"),@Result(property = "deptId", column = "dept_id"),@Result(property = "dept.id", column = "did"),@Result(property = "dept.name", column = "dname"),@Result(property = "dept.sn", column = "dsn"),})Employee findById(Long id);

findById(id)方法正常来说是employee表、employee_role表与role表查询,查询出员工、部门以及角色信息。

但我们只查询出员工和部门信息,若是管理员则直接返回employee对象;若不是管理员,需查出角色信息,我们采用新创建一个employeeRoleService.queryByEmployeeId(id)方法来查出角色信息,再employee.setRoles(roles);,返回employee对象。

  //如果不是List<Role> roles = employeeRoleService.queryByEmployeeId(id);if(StringUtils.isEmpty(roles)|| roles.size()==0){return employee;}employee.setRoles(roles);return employee;

逻辑部分:

若不是管理员,则根据id查出员工角色信息;

若员工角色信息为空,则直接返回employee;

否则就将查出的角色信息赋值给employee,最后返回employee;

③实现employeeRoleService.queryByEmployeeId(id)方法:

EmployeeRoleService:

public interface EmployeeRoleService {List<Role> queryByEmployeeId(Long id);
}

EmployeeRoleServiceImpl:

@Service
public class EmployeeRoleServiceImpl implements EmployeeRoleService {@Autowiredprivate EmployeeRoleMapper employeeRoleMapper;@Overridepublic List<Role> queryByEmployeeId(Long id) {return employeeRoleMapper.queryByEmloyeeById(id);}
}

employeeRoleMapper:

  @Select("select r.* from employee_role er inner join role r on er.role_id=r.id where er.employee_id=#{id}")@Results({@Result(property = "id", column = "id", id = true),@Result(property = "name", column = "name"),@Result(property = "sn", column = "sn")})List<Role> queryByEmloyeeById(Long id);

未完待续。。。

http://www.jsqmd.com/news/404291/

相关文章:

  • 2026年比较好的养生泡浴/草本泡浴直销厂家推荐选哪家(更新) - 品牌宣传支持者
  • Boss项目:员工查询+员工新增
  • D.二分查找-二分答案-最大化最小值——2517. 礼盒的最大甜蜜度
  • 2026年热门的全牙丝杆滚丝机/全自动滚丝机厂家综合实力参考(2026) - 品牌宣传支持者
  • 深度解析翱捷科技高级音频软件工程师岗位:技术体系与面试指南
  • 2026年口碑好的别墅工程灯/售楼部工程灯厂家选购参考汇总 - 品牌宣传支持者
  • 2026年质量好的精密电动注塑机/100吨电动注塑机厂家热销推荐 - 品牌宣传支持者
  • [拆解LangChain执行引擎]梳理Agent的执行流程
  • 长沙景嘉微电子前端开发工程师(AI 与数字化)岗位深度解析与面试全攻略
  • 2026年评价高的高速SMT整线方案/智能SMT整线方案哪家强生产厂家实力参考 - 品牌宣传支持者
  • 2026年评价高的风冷式UV系统/水冷UV系统高评价品牌推荐 - 品牌宣传支持者
  • 2026年评价高的微量注塑机/发拉克注塑机厂家最新推荐 - 品牌宣传支持者
  • 视觉驱动的游戏自动化:YOLOv8与PPO结合实现AI自主玩射击游戏
  • 2026年比较好的北京自组网设备/自组网行业内知名厂家推荐 - 品牌宣传支持者
  • 2026厂务系统过滤公司推荐:行业优质选择参考 - 品牌排行榜
  • 2026年比较好的山东空气源热泵机组/空气源热泵机组水力模块优质厂家推荐汇总 - 品牌宣传支持者
  • 2026年评价高的贴皮木门/贵州新中式木门优质厂商精选推荐(口碑) - 品牌宣传支持者
  • 2026年口碑好的山东水源热泵水力模块/山东水源热泵冷暖机好评厂家曝光 - 品牌宣传支持者
  • 2026年口碑好的东莞至柬埔寨国际物流专线/金瑞通至柬埔寨老拗国际物流专线高评分推荐公司 - 品牌宣传支持者
  • 2026年知名的贵州家装木门/木门优质厂商精选推荐(口碑) - 品牌宣传支持者
  • 2026年评价高的威海仲裁律师事务所/威海房产律师事务所实力口碑推荐 - 品牌宣传支持者
  • XSS 漏洞
  • 2026年热门的西安混合储能/分布式储能行业内知名厂家推荐 - 品牌宣传支持者
  • 2026细菌截留工艺验证检测实验室哪家好 - 品牌排行榜
  • 2026年热门的西安长循环寿命电池/西安锌溴液流电池优质厂商精选推荐(口碑) - 品牌宣传支持者
  • 2026年靠谱的酒店厨房设备/餐厅厨房设备信誉优质供应参考(可靠) - 品牌宣传支持者
  • 2026年靠谱的陕西中量元素水溶肥/陕西水溶肥高口碑厂家推荐(评价高) - 品牌宣传支持者
  • 2026年热门的无人机表演/龙凤无人机厂家信誉综合参考 - 品牌宣传支持者
  • 2026年口碑好的生物刺激素/陕西天然生物刺激素信誉优质供应参考(可靠) - 品牌宣传支持者
  • 2026年比较好的半自动咖啡机/商用咖啡机制造厂家选购指南怎么选(精选) - 品牌宣传支持者