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

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


一、员工管理


1.1 编写员工信息vo对象

EmployeeVO


image.png


/**
 * @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


image.png


/**
 * @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


image.png


/**
 * @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 编写控制器类


image.png


@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 编写业务类


image.png


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


image.png


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#/


image.png


结束语


  • 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
  • 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
  • 感谢您的阅读,十分欢迎并感谢您的关注。
目录
相关文章
|
域名解析 网络协议 对象存储
阿里云 CDN 控制台演示:源站加速|学习笔记
快速学习阿里云 CDN 控制台演示:源站加速
阿里云 CDN 控制台演示:源站加速|学习笔记
|
Dubbo Cloud Native Java
ZooKeeper 避坑实践:由于jute.maxbuffer 设置问题导致的集群不可用
微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
ZooKeeper 避坑实践:由于jute.maxbuffer 设置问题导致的集群不可用
|
7月前
|
存储 C++
UE5 C++:自定义Http节点获取Header数据
综上,通过为UE5创建一个自定义HTTP请求类并覆盖GetResult方法,就能成功地从HTTP响应的Header数据中提取信息。在项目中使用自定义类,不仅可以方便地访问响应头数据,也可随时使用这些信息。希望这种方法可以为你的开发过程带来便利和效益。
273 35
|
5月前
|
存储 人工智能 缓存
Git Commit规范:为什么有些公司要求变更行数限制?·优雅草卓伊凡
Git Commit规范:为什么有些公司要求变更行数限制?·优雅草卓伊凡
241 3
Git Commit规范:为什么有些公司要求变更行数限制?·优雅草卓伊凡
|
10月前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:5.本地镜像发布到阿里云》
《docker基础篇:5.本地镜像发布到阿里云》
750 79
|
10月前
|
人工智能 安全 搜索推荐
OA办公的未来:从工具到流程的深度整合
在企业数字化转型中,“效率”至关重要。多人协同编辑(如板栗看板)突破传统文档处理方式,解决了信息孤岛、重复劳动和信息不透明等协作瓶颈,提供即时同步、可追溯、灵活及安全的编辑体验。它作为现代化OA系统的核心模块,通过优化文档协作、流程和知识管理,以及组织间的协作,显著提升多部门工作效率,缩短定稿周期,并支持跨区域无缝对接。未来,该技术将向智能化发展,集成AI辅助、跨平台融合和个性化配置等功能,为企业创造更大价值。
|
10月前
|
安全 数据可视化 物联网
酒店固定资产管理方案:从乱象到有序,领导与管理员的必备指南
首码固定资产管理系统助力酒店实现精细化管理,提升运营效率、降低成本、优化客户体验。系统涵盖全方位资产信息录入、动态实时追踪、精细化折旧核算、便捷盘点流程及多部门协同管理等功能,有效应对传统管理模式的挑战,确保资产安全,精准控制成本,符合行业发展趋势。选择首码系统,助力酒店在竞争中脱颖而出,稳健发展。
234 3
|
JavaScript 前端开发 搜索推荐
【Vue 2】一个功能强大OA办公系统,开源且免费!!
【Vue 2】一个功能强大OA办公系统,开源且免费!!
|
Kubernetes Docker Python
如何在K8s中使用Python应用
一文带你了解如何在K8s中使用Python应用
462 4