package com.fs.his.service;

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

import com.fs.common.core.domain.R;
import com.fs.his.domain.FsUser;
import com.fs.his.domain.FsUserAddress;
import com.fs.his.param.FsUserParam;
import com.fs.his.vo.FsUserExportListVO;
import com.fs.his.vo.FsUserFollowDoctorVO;
import com.fs.his.vo.FsUserVO;
import com.fs.his.vo.UserVo;
import com.fs.qw.param.QwFsUserParam;
import com.fs.qw.vo.QwFsUserVO;

/**
 * 用户Service接口
 *
 * @author fs
 * @date 2023-06-07
 */
public interface IFsUserService
{
    /**
     * 查询用户
     *
     * @param userId 用户主键
     * @return 用户
     */
    public FsUser selectFsUserByUserId(Long userId);

    /**
     * 查询用户列表
     *
     * @param fsUser 用户
     * @return 用户集合
     */
    public List<FsUser> selectFsUserList(FsUser fsUser);

    /**
     * 新增用户
     *
     * @param fsUser 用户
     * @return 结果
     */
    public int insertFsUser(FsUser fsUser);

    /**
     * 修改用户
     *
     * @param fsUser 用户
     * @return 结果
     */
    public int updateFsUser(FsUser fsUser);

    /**
     * 批量删除用户
     *
     * @param userIds 需要删除的用户主键集合
     * @return 结果
     */
    public int deleteFsUserByUserIds(Long[] userIds);

    /**
     * 删除用户信息
     *
     * @param userId 用户主键
     * @return 结果
     */
    public int deleteFsUserByUserId(Long userId);

    List<FsUserVO> selectFsUserListVO(FsUserParam fsUser);

    FsUser selectFsUserByOpenId(String openId);


    FsUser selectFsUserByChhyOpenId(String openId);


    FsUser selectFsUserByPhone(String phone);

    List<FsUserAddress> selectFsUserAddressByUserId(Long userId);

    List<UserVo> selectUserVOList(String name);

    List<FsUserVO> selectFsUserListVOByComponentsUser(FsUserParam fsUser);

    List<FsUserExportListVO> selectFsUserExportListVO(FsUserParam fsUser);

    void addUserIntegral(BigDecimal payMoney,Long userId,Long orderId ,Integer orderType);
    void followAddIntegral(Long userId,Long orderId);
    void subUserIntegral(Long userId,Long orderId ,Integer orderType);

    void shareAddIntegral(Long userId);

    public void subIntegral(Long userId);


    public FsUserFollowDoctorVO getUserFollowDoctorAndOrderId(Long userId);

    List<FsUserVO> selectFsUserListVOByComponent(FsUserParam fsUser);


    FsUser selectFsUserByUnionid(String unionid);

    List<QwFsUserVO> selectQwFsUserListVO(QwFsUserParam qwFsUserParam);

    R clearUserVip(Long l);

    List<QwFsUserVO> selecQwFsUserListVO(QwFsUserParam qwFsUserParam);

    Boolean isEntityNull(FsUserParam fsUser);

    Long selectFsUserExportListVOCount(FsUserParam fsUser);

    FsUser selectFsUserByMpOpenId(String openId);
}
