package com.cpop.oam.business.service;

import com.cpop.core.base.table.SysUser;
import com.cpop.oam.business.bo.*;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.cpop.oam.business.entity.Staff;
import com.cpop.oam.business.vo.StaffInfoVo;
import com.cpop.oam.business.vo.StaffPageVo;
import com.cpop.oam.business.vo.StaffVo;
import com.cpop.oam.business.vo.SysOperationLogVo;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;

import java.util.List;

/**
 * 员工表 服务层。
 *
 * @author DB
 * @since 2023-09-07
 */
public interface StaffService extends IService<Staff> {


    /**
     * @descriptions 查询员工分页列表
     * @author DB
     * @date 2023/09/07 18:11
     * @param bo 请求参数
     * @return com.mybatisflex.core.paginate.Page<com.jambox.system.business.vo.SysStaffPageVo>
     */
    Page<StaffPageVo> getStaffPageList(StaffPageBo bo);

    /**
     * @descriptions 新增员工
     * @author DB
     * @date 2023/09/08 14:12
     * @param bo 请求参数
     */
    SysUser insertStaff(StaffBo bo);

    /**
     * @descriptions 修改员工
     * @author DB
     * @date 2023/09/08 15:21
     * @param bo 请求参数
     */
    void updateStaff(StaffBo bo);

    /**
     * @descriptions 删除员工
     * @author DB
     * @date 2023/09/08 17:43
     * @param id 主键
     */
    void removeStaffById(String id);

    /**
     * @Description: 用户名是否存在
     * @param username 用户名
     * @param id 主键
     * @return: R<Void>
     * @Author: DB
     * @Date: 2023/5/11 10:09
     **/
    void isAccountExist(String username, String id);

    /**
     * @Description: 获取员工信息
     * @param id 主键
     * @return: StaffInfoVo
     * @Author: DB
     * @Date: 2023/5/17 10:36
     **/
    StaffInfoVo getStaffInfo(String id);

    /**
     * @Description: 获取用户操作日志分页
     * @param bo 请求参数
     * @return: R<PageVo<SysOperationLogVo>>
     * @Author: DB
     * @Date: 2023/5/12 14:30
     **/
    Page<SysOperationLogVo> getUserLogList(SysUserLogBo bo);

    /**
     * @Description: 修改系统用户密码
     * @param bo 请求参数
     * @return: AjaxResult<Void>
     * @Author: DB
     * @Date: 2023/5/12 16:00
     **/
    void modifyUserPassword(ModifyUserPasswordBo bo);

    /**
     * @Description: 查询服务员工列表
     * @return: R<List<OamStaffVo>>
     * @Author: DB
     * @Date: 2023/5/11 17:49
     **/
    List<StaffVo> getServiceStaffList();

    /**
     * 技术模块-今日事务-查询技术员工列表
     * @author DB
     * @since 2023/12/04
     * @return List<StaffVo>
     */
    List<StaffVo> getTechnologyStaffList();

    /**
     * 修改运维状态
     * @author DB
     * @since 2023/12/07
     * @param bo 请求参数
     */
    void changeOperationStatus(OperationStatusBo bo);
}
