快捷餐饮之店家后台员工管理实现

  • j3_liuliang
  • 上期写了订单相关的功能,现在我们来实现一下商家的员工相关内容

项目相关文章导航:

  1. 快捷点餐项目简介
  2. 餐饮系统设计概括
  3. 餐饮系统店家后端基础功能构建
  4. 快捷餐饮之店家后台OSS文件管理实现
  5. 快捷餐饮之店家后台厨艺秀实现
  6. 快捷餐饮之店家后台菜品分类及菜品管理实现
  7. 快捷餐饮之店家后台评论管理及餐桌管理实现
  8. 快捷餐饮之店家后台订单管理实现
  9. 快捷餐饮之店家后台员工管理实现
  10. 快捷餐饮之店家系统相关功能

项目Git地址: 点这里哦!

一、员工管理

1.1 编写员工信息vo对象

EmployeeVO

在这里插入图片描述

/**
 * @Package: cn.liuliang.quickdinesysstore.entity.vo
 * @Author: liuliang
 * @CreateTime: 2020/10/31 - 16:24
 * @Description:
 */
@Data
@ApiModel(value = "员工信息vo", description = "")
public class EmployeeVO {

    @ApiModelProperty(value = "ID")
    private Long id;

    @ApiModelProperty(value = "姓名")
    private String employeeName;

    @ApiModelProperty(value = "级别:关联级别表id")
    private Long levelId;

    @ApiModelProperty(value = "密码")
    private String password;

    @ApiModelProperty(value = "入职时间")
    private String entryTime;
}

1.2 编写员工信息查询条件vo对象

EmployeeQueryVO

在这里插入图片描述

/**
 * @Package: cn.liuliang.quickdinesysstore.entity.vo
 * @Author: liuliang
 * @CreateTime: 2020/10/31 - 16:24
 * @Description:
 */
@Data
@ApiModel(value = "员工信息查询条件vo", description = "")
public class EmployeeQueryVO {

    @ApiModelProperty(value = "姓名")
    private String employeeName;

    @ApiModelProperty(value = "级别:关联级别表id")
    private Long levelId;

    @ApiModelProperty(value = "入职时间(格式:2020-01-10)")
    private String entryTime;
}

1.3 编写员工信息DTO对象

EmployeeDTO

在这里插入图片描述

/**
 * @Package: cn.liuliang.quickdinesysstore.entity.vo
 * @Author: liuliang
 * @CreateTime: 2020/10/31 - 16:24
 * @Description:
 */
@Data
@ApiModel(value = "员工信息DTO", description = "")
public class EmployeeDTO implements Serializable {

    private static final long serialVersionUID=1L;

    @ApiModelProperty(value = "ID")
    private Long id;

    @ApiModelProperty(value = "姓名")
    private String employeeName;

    @ApiModelProperty(value = "级别:关联级别表id")
    private Long levelId;

    @ApiModelProperty(value = "级别名称")
    private String levelName;

    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "入职时间")
    private Date entryTime;
}

1.4 编写控制器类

在这里插入图片描述

@Api(value = "店家员工管理", tags = "店家员工管理")
@CrossOrigin
@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @ApiOperation(value = "添加或修改员工", notes = "添加或修改员工")
    @PostMapping("/add-or-update")
    public ResultDTO addOrUpdate(@RequestBody EmployeeVO employeeVO) {
        return employeeService.addOrUpdate(employeeVO);
    }

    @ApiOperation(value = "分页查询所有员工列表", notes = "分页查询所有员工列表")
    @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = EmployeeDTO.class)})
    @GetMapping("/select-all")
    public ResultDTO selectAll(
            EmployeeQueryVO employeeQueryVO,
            @ApiParam("当前页码") @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
            @ApiParam("每页显示条数") @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
        return employeeService.selectAll(pageNum, pageSize, employeeQueryVO);
    }

    @ApiOperation(value = "根据员工id查询详情", notes = "根据员工id查询详情")
    @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = EmployeeDetailDTO.class)})
    @GetMapping("/select-one")
    public ResultDTO selectOne(@ApiParam("员工id") @RequestParam(value = "id", required = false, defaultValue = "1") Long id) {
        return employeeService.selectOne(id);
    }


    @ApiOperation(value = "根据员工id删除员工数据", notes = "根据员工id删除员工数据")
    @GetMapping("/delete")
    public ResultDTO delete(@ApiParam("员工id") @RequestParam(value = "id", required = false, defaultValue = "1") Long id) {
        return ResultDTO.success("data", employeeService.removeById(id));
    }


}

1.5 编写业务类

在这里插入图片描述

public interface EmployeeService extends IService<Employee> {

    /**
     * 添加或修改员工
     * @param employeeVO 员工信息对象
     * @return
     */
    ResultDTO addOrUpdate(EmployeeVO employeeVO);

    /**
     * 分页查询所有员工列表
     * @param pageNum           当前页
     * @param pageSize          每页大小
     * @param employeeQueryVO   查询条件数据
     * @return
     */
    ResultDTO selectAll(Integer pageNum, Integer pageSize, EmployeeQueryVO employeeQueryVO);

    /**
     * 根据员工id查询详情
     * @param id    员工id
     * @return
     */
    ResultDTO selectOne(Long id);
}
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {

    @Autowired
    private EmployeeMapper employeeMapper;

    @Autowired
    private LevelMapper levelMapper;

    @Autowired
    private LevelService levelService;

    @Override
    public ResultDTO addOrUpdate(EmployeeVO employeeVO) {
        // 判断必要参数是否为空
        if (StringUtils.isEmpty(employeeVO.getEmployeeName()) ||
            StringUtils.isEmpty(employeeVO.getLevelId()) ||
            StringUtils.isEmpty(employeeVO.getPassword()) ||
            StringUtils.isEmpty(employeeVO.getEntryTime())) {
            throw new QuickException(ResultCodeEnum.PAEAMETER_IS_EMPTY);
        }
        // 构造插入或修改数据
        Employee employee = new Employee();
        BeanUtils.copyProperties(employeeVO, employee);
        // 格式化入职时间
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            employee.setEntryTime(simpleDateFormat.parse(employeeVO.getEntryTime()));
        } catch (ParseException e) {
            throw new QuickException("时间格式转换异常",8001);
        }
        // 判断是添加还是修改
        if (null == employeeVO.getId()) {
            // 添加
            return ResultDTO.success("data", employeeMapper.insert(employee));
        }
        // 修改
        return ResultDTO.success("data", employeeMapper.updateById(employee));
    }

    @Override
    public ResultDTO selectAll(Integer pageNum, Integer pageSize, EmployeeQueryVO employeeQueryVO) {
        // 构造分页对象
        Page<Employee> employeePage = new Page<>(pageNum, pageSize);
        // 执行查询
        List<Employee> employeeList = employeeMapper.selectAll(employeePage, employeeQueryVO);
        // 构造返回数据
        List<EmployeeDTO> employeeDTOList = new ArrayList<>(employeeList.size());
        employeeList.forEach(employee -> {
            EmployeeDTO employeeDTO = new EmployeeDTO();
            BeanUtils.copyProperties(employee, employeeDTO);
            employeeDTOList.add(employeeDTO);
        });
        // 获取所有员工级别名称和id列表
        List<LevelIdAndNameDTO> levelIdAndNameDTOList = (List<LevelIdAndNameDTO>) levelService.getAllLevelIdAndName().getData().get("data");
        // 将结果编程map便于获取数据
        Map<Long, String> levelIdAndNameMap = new HashMap<>(levelIdAndNameDTOList.size());
        // 给map填充数据
        levelIdAndNameDTOList.forEach(levelIdAndNameDTO -> {
            levelIdAndNameMap.put(levelIdAndNameDTO.getId(), levelIdAndNameDTO.getLevelName());
        });
        // 给员工列表填充缺失的级别字段
        employeeDTOList.forEach(employeeDTO -> {
            employeeDTO.setLevelName(levelIdAndNameMap.get(employeeDTO.getLevelId()));
        });
        return ResultDTO.success().data("total", Math.toIntExact(employeePage.getTotal())).data("rows", employeeDTOList);
    }

    @Override
    public ResultDTO selectOne(Long id) {
        // 根据id查询员工信息
        Employee employee = employeeMapper.selectById(id);
        // 根据员工的级别id查询级别信息
        Level level = levelMapper.selectById(employee.getLevelId());
        // 构造返回数据
        EmployeeDetailDTO employeeDetailDTO = new EmployeeDetailDTO();
        LevelDTO levelDTO = new LevelDTO();
        BeanUtils.copyProperties(employee, employeeDetailDTO);
        BeanUtils.copyProperties(level, levelDTO);
        employeeDetailDTO.setLevelDTO(levelDTO);
        return ResultDTO.success("data", employeeDetailDTO);
    }
}

1.6 编写mapper

在这里插入图片描述

public interface EmployeeMapper extends BaseMapper<Employee> {

    /**
     * 根据条件分页查询员工信息
     *
     * @param employeePage    分页对象
     * @param employeeQueryVO 查询条件对象
     * @return
     */
    List<Employee> selectAll(@Param("employeePage") Page<Employee> employeePage, @Param("employeeQueryVO") EmployeeQueryVO employeeQueryVO);

}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.liuliang.quickdinesysstore.mapper.EmployeeMapper">

    <resultMap id="employee" type="cn.liuliang.quickdinesysstore.entity.Employee">
        <result property="id" javaType="long" column="employee_id"/>
        <result property="employeeName" javaType="string" column="employee_name"/>
        <result property="levelId" javaType="long" column="level_id"/>
        <result property="entryTime" javaType="date" column="entry_time"/>
    </resultMap>
    <select id="selectAll" resultMap="employee">
        SELECT
        t_employee.`id` AS employee_id,
        t_employee.`employee_name`,
        t_level.`id` AS level_id,
        t_employee.`entry_time`
        FROM t_employee
        LEFT JOIN t_level ON t_level.`id` = t_employee.`level_id`
        <where>
            <if test="employeeQueryVO.employeeName != null and employeeQueryVO.employeeName != ''">
                AND t_employee.`employee_name` like CONCAT("%",#{employeeQueryVO.employeeName},"%")
            </if>
            <if test="employeeQueryVO.levelId != null">
                AND t_level.`id` = #{employeeQueryVO.levelId}
            </if>
            <if test="employeeQueryVO.entryTime != null and employeeQueryVO.entryTime != ''">
                AND DATE_FORMAT(t_employee.`entry_time`, '%Y-%m-%d') = DATE_FORMAT(#{employeeQueryVO.entryTime}, '%Y-%m-%d')
            </if>
        </where>
        ORDER BY t_employee.`update_time` DESC
    </select>
</mapper>

1.7 启动项目swagger测试

http://localhost:9110/swagger-ui.html#/

在这里插入图片描述

结束语

  • 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
  • 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
  • 感谢您的阅读,十分欢迎并感谢您的关注。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J3code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值