package com.xinelu.manage.mapper.nursestationperson;


import com.xinelu.common.core.domain.entity.SysUser;
import com.xinelu.manage.domain.nursestationperson.NurseStationPerson;
import com.xinelu.manage.dto.nursestationperson.NurseStationPersonCheckDTO;
import com.xinelu.manage.dto.nursestationperson.NurseStationPersonImportDTO;
import com.xinelu.manage.vo.nursestationperson.NurseStationPersonSysUserVO;
import com.xinelu.manage.vo.nursestationperson.NurseStationPersonVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 护理站人员信息Mapper接口
 *
 * @author ljh
 * @date 2022-09-02
 */
public interface NurseStationPersonMapper {
    /**
     * 查询护理站人员信息
     *
     * @param id 护理站人员信息主键
     * @return 护理站人员信息
     */
    NurseStationPersonVO selectNurseStationPersonById(Long id);

    /**
     * 查询护理站人员信息列表
     *
     * @param nurseStationPerson 护理站人员信息
     * @return 护理站人员信息集合
     */
    List<NurseStationPerson> selectNurseStationPersonList(NurseStationPerson nurseStationPerson);

    /**
     * 新增护理站人员信息
     *
     * @param nurseStationPerson 护理站人员信息
     * @return 结果
     */
    int insertNurseStationPerson(NurseStationPerson nurseStationPerson);

    /**
     * 修改护理站人员信息
     *
     * @param nurseStationPerson 护理站人员信息
     * @return 结果
     */
    int updateNurseStationPerson(NurseStationPerson nurseStationPerson);

    /**
     * 删除护理站人员信息
     *
     * @param id 护理站人员信息主键
     * @return 结果
     */
    int deleteNurseStationPersonById(Long id);

    /**
     * 批量删除护理站人员信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteNurseStationPersonByIds(Long[] ids);


    /**
     * 批量新增护理站人员信息
     *
     * @param nurseStationPerson 护理站人员信息
     * @return int
     **/
    int insertNurseStationPersonList(List<NurseStationPerson> nurseStationPerson);

    /**
     * 查询护理站人员信息以及护理站名称集合
     *
     * @param nurseStationPerson 护理站人员信息集合
     * @return java.util.List<com.xinyilu.base.vo.nursestationperson.NurseStationPersonVO>
     **/
    List<NurseStationPersonVO> getNurseStationPersonList(NurseStationPersonVO nurseStationPerson);


    /**
     * 护理站人员导入
     *
     * @param nurseStationPerson 护理站人员信息
     * @return int
     **/
    int insertNurseStationPersonImportList(List<NurseStationPerson> nurseStationPerson);

    /**
     * 根据手机号查重
     *
     * @param phone 手机号
     * @return int
     **/
    int getNurseStationPersonPhone(String phone);

    /**
     * 根据人员名称查询数据库原有人员信息
     *
     * @param phoneList 手机号集合
     * @return 人员信息集合
     */
    List<NurseStationPersonImportDTO> getAllNurseStationPersonInfo(@Param("phoneList") List<String> phoneList);

    /**
     * 根据人员手机号查询数据库原有人员信息
     *
     * @param personPhoneList 人员手机号集合
     * @return 人员信息集合
     */
    List<NurseStationPersonVO> getAllNurseStationPersonIdByPhone(@Param("personPhoneList") List<String> personPhoneList);

    /**
     * 根据人员手机号查询数据库SysUser原有人员信息
     *
     * @param personPhoneList 人员手机号集合
     * @return 人员信息集合
     */
    List<NurseStationPersonVO> selectSysUserIdByPhone(@Param("personPhoneList") List<String> personPhoneList);

    /**
     * 批量新增护理站人员信息
     *
     * @param sysUsers 护理站人员信息
     * @return int
     **/
    int insertSysUserList(List<SysUser> sysUsers);

    /**
     * 根据手机号查重
     *
     * @param phone 手机号
     * @return int
     **/
    NurseStationPerson getNurseStationPersonPhoneUser(String phone);

    /**
     * 新增护理站人员同时新增sysUser
     *
     * @param nurseStationPersonSysUserVO 护理站人员信息
     * @return int
     **/
    int insertNurseStationPersonSysUser(NurseStationPersonSysUserVO nurseStationPersonSysUserVO);

    /**
     * 修改护理站人员同时修改sysUser
     *
     * @param nurseStationPersonSysUserVO 护理站人员信息
     * @return int
     **/
    int updateNurseStationPersonSysUser(NurseStationPersonSysUserVO nurseStationPersonSysUserVO);

    /**
     * 刪除护理站人员同时删除sysUser
     *
     * @param id 护理站人员id
     * @return int
     **/
    int deleteNurseStationPersonSysUser(Long[] id);

    /**
     * 根据护理员id 查询用户id
     *
     * @param phone 联系电话
     * @return 修改信息
     */
    Long getNurseStationUserId(String phone);

    /**
     * 根据id查询护理站人员信息
     *
     * @param id 主键id
     * @return NurseStationPerson
     */
    NurseStationPerson getNurseStationPersonInfo(Long id);

    /**
     * 根据护理员手机号查询sysUser表的重复数量
     *
     * @param phone 联系电话
     * @return int
     **/
    int getNurseStationUserCount(String phone);

    /**
     * 根据护理员手机号查询sysUser表
     *
     * @param phonenumber 联系电话
     * @return com.xinyilu.base.vo.nursestationperson.NurseStationPersonSysUserVO
     **/
    NurseStationPersonSysUserVO getSysUserAndPerson(String phonenumber);


    /**
     * 根据openid查询护理员信息
     *
     * @param openId 微信openId
     * @return com.xinyilu.base.domain.nursestationperson.NurseStationPerson
     **/
    NurseStationPerson selectNurseStationPersonOpenid(String openId);


    /**
     * 护理员小程序app修改护理站人员级别擅长项目信息
     *
     * @param nurseStationPerson 护理站人员信息
     * @return 结果
     */
    int updateNursePersonCheck(NurseStationPerson nurseStationPerson);

    /**
     * 修改护理站人员状态信息
     *
     * @param nurseStationPerson 护理站人员信息
     * @return 结果
     */
    int updateNursePersonWorkStatus(NurseStationPerson nurseStationPerson);

    /**
     * 根据护理员id查询平均星级评价
     *
     * @param nurseStationPersonId 护理员id
     * @return int
     **/
    int selectAvgEvaluateSatisfaction(Long nurseStationPersonId);

    /**
     * 根据id查询护理站人员信息以及未审核的证书
     *
     * @param id 护理站人员信息主键
     * @return 护理站人员信息
     */
    NurseStationPersonCheckDTO getNurseStationPersonCheck(Long id);

    /**
     * 根据护理人员id去查询护理人员角色
     *
     * @param roleId               角色id
     * @param nurseStationPersonId 护理站人员id
     * @return int
     **/
    int getNurseStationPersonSysUserRole(@Param("roleId") Long roleId, @Param("nurseStationPersonId") Long nurseStationPersonId);

    /**
     * 根据id去查
     *
     * @param nurseStationPersonIdList 护理人员id
     * @return java.util.List<com.xinyilu.base.domain.nursestationperson.NurseStationPerson>
     **/
    List<NurseStationPerson> getNurseStationPersonIdList(@Param("nurseStationPersonIdList") List<Long> nurseStationPersonIdList);

    /**
     * 根据id修改护理员账户佣金总金额
     *
     * @param id                 主键id
     * @param totalRevenueAmount 佣金金额
     * @return 数量
     */
    int updateTotalRevenueAmountById(@Param("id") Long id, @Param("totalRevenueAmount") BigDecimal totalRevenueAmount);
}