package com.yida.data.user.fallback;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yida.data.common.core.annotation.Fallback;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.message.EduMessageStrategy;
import com.yida.data.common.core.entity.user.EduParent;
import com.yida.data.common.core.entity.user.EduStudent;
import com.yida.data.school.dto.transaction.ListBuyStudentDTO;
import com.yida.data.user.dto.ListStudentDTO;
import com.yida.data.user.feign.RemoteStudentService;
import com.yida.data.user.vo.ListParentByStudentIdsVO;
import com.yida.data.user.vo.ParentInfoVO;
import com.yida.data.user.vo.StudentClassInfoVO;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * RemoteStudentService fallback处理类
 *
 * @author ZYJ
 * @date 2022/8/26
 */
@Slf4j
@Fallback
public class RemoteStudentServiceFallback implements FallbackFactory<RemoteStudentService> {

    @Override
    public RemoteStudentService create(Throwable throwable) {
        log.error("RemoteStudentService fallback reason:{}", throwable.getMessage());

        return new RemoteStudentService() {
            /**
             * 根据学生id查询学生
             *
             * @param id
             */
            @Override
            public ResultBean<EduStudent> getStudentNoPermission(Long id) {
                return null;
            }


            /**
             * 根据学生Id查询学生部门信息
             */
            @Override
            public ResultBean<List<EduStudent>> getStudentDeptByIds(List<Long> studentIdList) {
                return null;
            }

            /**
             * 处理响应的学生更新事件
             *
             * @param student
             */
            @Override
            public ResultBean dealStudentWxChange(EduStudent student) {
                return null;
            }

            /**
             * 处理响应的学生删除事件
             *
             * @param wxId
             * @param schoolId
             */
            @Override
            public ResultBean dealStudentWxDelete(String wxId, Long schoolId) {
                return null;
            }

            /**
             * 处理响应的家长更新事件
             *
             * @param eduParent
             * @param schoolId
             */
            @Override
            public ResultBean dealParentWxChange(EduParent eduParent, Long schoolId) {
                return null;
            }

            /**
             * 处理响应的家长删除事件
             *
             * @param wxId
             * @param schoolId
             */
            @Override
            public ResultBean dealParentWxDelete(String wxId, Long schoolId) {
                return null;
            }

            @Override
            public ResultBean<ParentInfoVO> getParentWithStudent(String mobile, String wxId, Long schoolId) {
                return null;
            }

            /**
             * 初始化学生列表-不进行判断直接新增学生
             *
             * @param student
             */
            @Override
            public ResultBean initStudent(List<EduStudent> student) {
                return null;
            }

            /**
             * 根据家长id查询学生
             *
             * @param parentId
             */
            @Override
            public ResultBean<List<EduStudent>> listStudentByParent(Long parentId) {
                return null;
            }

            /**
             * 根据学生查询班级信息
             *
             * @param studentId
             * @param parentMobile
             */
            @Override
            public ResultBean<StudentClassInfoVO> getClassInfoByStudent(Long studentId, String parentMobile) {
                return null;
            }

            /**
             * 根据学号和学校查询学生
             *
             * @param stuNumber
             * @param schoolId
             */
            @Override
            public ResultBean<EduStudent> getStudentByStuNumAndSchool(String stuNumber, Long schoolId) {
                return null;
            }

            /**
             * 根据年级id、学生名称、班级名称查询学生
             *
             * @param studentName
             * @param className
             * @param gradeId
             */
            @Override
            public ResultBean<List<EduStudent>> listStudentByGradeAndClass(String studentName, String className, Long gradeId) {
                return null;
            }

            /**
             * 根据教师电话、学校查询家长列表
             *
             * @param teacherId
             * @param parentName
             */
            @Override
            public ResultBean<List<ParentInfoVO>> listParentByTeacher(Long teacherId, String parentName) {
                return null;
            }

            @Override
            public ResultBean saveYidaAppUserId(Long parentId, String yidaAppUserId) {
                return null;
            }

            @Override
            public ResultBean saveWxPublicOpenId(Long parentId, String openId) {
                return null;
            }

            /**
             * 查询用户企业微信Id
             *
             * @param phone
             * @param schoolId
             * @return
             */
            @Override
            public ResultBean<List<String>> getParentByPhoneAndSchoolId(List<String> phone, Long schoolId) {
                return null;
            }

            /**
             * 根据学校id查询当前学校的自动回复消息
             *
             * @param schoolId 学校id
             * @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.message.EduMessageStrategy>
             * @author ZYJ
             * @date 2021/8/25 17:36
             */
            @Override
            public ResultBean<EduMessageStrategy> getEduMessageStrategyBySchoolId(Long schoolId) {
                return null;
            }

            /**
             * 查询未购买该商品的学生
             *
             * @param listBuyStudentDTO
             * @return 学生列表
             */
            @Override
            public ResultBean<Page<EduStudent>> listNotBuyStudent(ListBuyStudentDTO listBuyStudentDTO) {
                return null;
            }

            /**
             * 查询未购买该商品的学生
             *
             * @param listBuyStudentDTO
             * @return 学生列表
             */
            @Override
            public ResultBean<List<EduStudent>> listAllNotBuyStudent(ListBuyStudentDTO listBuyStudentDTO) {
                return null;
            }

            /**
             * 通过学生id查询家长WxId
             *
             * @param studentId
             * @return
             */
            @Override
            public ResultBean<List<String>> findParentWxId(List<Long> studentId) {
                return null;
            }

            /**
             * 通过学生id查询学生信息，和家长信息
             *
             * @param studentIds
             * @return
             */
            @Override
            public ResultBean<List<ListParentByStudentIdsVO>> listParentByStudentIds(List<Long> studentIds) {
                return null;
            }

            @Override
            public ResultBean syncQywxStudent() {
                return null;
            }

            /**
             * 根据条件查询学生列表
             *
             * @param dto
             * @return
             */
            @Override
            public ResultBean<List<EduStudent>> listStudent(ListStudentDTO dto) {
                return null;
            }

            @Override
            public ResultBean<List<EduStudent>> listStudentByClassId(ListStudentDTO dto) {
                return null;
            }

            /**
             * 更新学生在校离校状态
             *
             * @param studentId
             * @param status
             * @param dormStatus
             */
            @Override
            public ResultBean updateStudentStatus(Long studentId, Integer status, Integer dormStatus) {
                return null;
            }

            /**
             * 接触学生与寝室的绑定
             *
             * @param dormIds
             * @return
             */
            @Override
            public ResultBean unbindDormRoom(List<Long> dormIds) {
                return null;
            }

            @Override
            public ResultBean<EduStudent> getStudentByDahuaNoPermission(String dahuaCode) {
                return null;
            }

            /**
             * 根据学生表字段查询学生id信息
             *
             * @param eduStudent 查询条件
             * @return com.yida.data.common.core.common.ResultBean<java.util.List < java.lang.Long>>
             * @author ZYJ
             * @date 2022/3/29 9:29
             */
            @Override
            public ResultBean<List<Long>> listBaseStudentIds(EduStudent eduStudent) {
                return null;
            }

            /**
             * 根据学生表字段查询学生列表信息
             *
             * @param eduStudent 查询条件
             * @return com.yida.data.common.core.common.ResultBean<java.util.List < com.yida.data.common.core.entity.user.EduStudent>>
             * @author ZYJ
             * @date 2022/3/29 13:58
             */
            @Override
            public ResultBean<List<EduStudent>> listBaseStudent(EduStudent eduStudent) {
                return null;
            }

            @Override
            public ResultBean<List<EduStudent>> listBaseStudentNoJoin(EduStudent eduStudent) {
                return null;
            }

            @Override
            public ResultBean<JSONObject> countUserDashboardNum(Long schoolId) {
                return null;
            }

            @Override
            public ResultBean saveStudent(EduStudent eduStudent) {
                return null;
            }

            @Override
            public ResultBean saveStudentDorm(EduStudent eduStudent) {
                return null;
            }

            @Override
            public ResultBean updateStudentCache() {
                return null;
            }

        };
    }
}
