package com.yida.data.user.feign;

import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.constant.FebsServerConstant;
import com.yida.data.common.core.entity.user.EduUserDept;
import com.yida.data.user.dto.DeleteUserDeptDTO;
import com.yida.data.user.fallback.RemoteUserDeptServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 家校部门远程调用
 *
 * @author ZYJ
 * @date 2021-11-22
 */
@FeignClient(value = FebsServerConstant.EDU_USER, contextId = "userDeptServiceClient",
    fallbackFactory = RemoteUserDeptServiceFallback.class)
public interface RemoteUserDeptService {

    /**
     * 同步企业微信家校部门
     *
     * @return com.yida.data.common.core.common.ResultBean<java.lang.String>
     * @author ZYJ
     * @date 2021/11/22 16:10
     */
    @GetMapping("/in/eduUserDept/syncUserDept")
    ResultBean<String> syncUserDept();

    /**
     * 处理挂在学校下的家校部门
     *
     * @return com.yida.data.common.core.common.ResultBean<java.lang.String>
     * @author ZYJ
     * @date 2021/11/22 16:11
     */
    @GetMapping("/in/eduUserDept/dealNoParentUserDept")
    ResultBean<String> dealNoParentUserDept();

    /**
     * 查询父级家校部门是否存在
     *
     * @param deptIdList 家校部门id集合
     * @param parentWxId 家校部门父级企业微信id
     * @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.user.EduUserDept>
     * @author ZYJ
     * @date 2021/11/22 17:49
     */
    @PostMapping("/in/eduUserDept/getUserDeptByDeptAndWx")
    ResultBean<EduUserDept> getUserDeptByDeptAndWx(@RequestBody List<Long> deptIdList, @RequestParam Long parentWxId);

    /**
     * 企业微信创建家校部门
     *
     * @param userDept 创建的家校部门信息
     * @return com.yida.data.common.core.common.ResultBean<java.lang.String>
     * @author ZYJ
     * @date 2021/11/22 17:57
     */
    @PostMapping("/in/eduUserDept/createUserDept")
    ResultBean<String> createUserDept(@RequestBody EduUserDept userDept);

    /**
     * 根据家校部门id查询家校部门信息
     *
     * @param deptId 家校部门id
     * @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.user.EduUserDept>
     * @author ZYJ
     * @date 2021/11/24 15:03
     */
    @GetMapping("/in/eduUserDept/getByDeptId")
    ResultBean<EduUserDept> getByDeptId(@RequestParam Long deptId);

    /**
     * 查询家校部门直接子节点
     *
     * @param deptId 家校部门父节点id，不能为空
     * @return com.yida.data.common.core.common.ResultBean<java.util.List < com.yida.data.common.core.entity.system.Dept>>
     * @author ZYJ
     * @date 2021/11/25 11:29
     */
    @GetMapping("/eduUserDept/findChildByParent")
    ResultBean<List<EduUserDept>> findChildByParent(@RequestParam Long deptId);

    /**
     * 根据家校部门id查询上级家校部门信息
     *
     * @param deptId 家校部门id
     * @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.user.EduUserDept>
     * @author ZYJ
     * @date 2021/11/30 10:05
     */
    @GetMapping("/in/eduUserDept/getParentByDeptId")
    ResultBean<EduUserDept> getParentByDeptId(@RequestParam Long deptId);


    /**
     * 根据家校部门id查询全部上级家校部门信息
     *
     * @param deptId
     * @return
     */
    @GetMapping("/in/eduUserDept/getParentListByDeptId")
    ResultBean<List<EduUserDept>> getParentListByDeptId(@RequestParam Long deptId);

    /**
     * 批量保存家校部门
     *
     * @param saveDeptList 批量保存的家校部门数据
     * @return com.yida.data.common.core.common.ResultBean<java.lang.String>
     * @author ZYJ
     * @date 2021/11/30 10:14
     */
    @PostMapping("/in/eduUserDept/updateBatchUserDept")
    ResultBean<String> updateBatchUserDept(@RequestBody List<EduUserDept> saveDeptList);

    /**
     * 递归删除家校部门
     *
     * @param deleteUserDeptDTO 企业微信回调删除本地家校部门请求类
     * @return com.yida.data.common.core.common.ResultBean<java.lang.String>
     * @author ZYJ
     * @date 2021/11/30 10:42
     */
    @PostMapping("/in/eduUserDept/deleteUserDeptRecur")
    ResultBean<String> deleteUserDeptRecur(@RequestBody DeleteUserDeptDTO deleteUserDeptDTO);

    /**
     * 向上获取部门id到学校，向下获取部门id
     */
    @GetMapping("/in/eduUserDept/getUpAndDownId")
    ResultBean<List<Long>> getUpAndDownId(@RequestParam("deptIds") Long[] deptIds);

    /**
     * 向上获取部门id到学校
     */
    @GetMapping("/in/eduUserDept/getUpId")
    ResultBean<List<Long>> getUpId(@RequestParam("deptIds") Long[] deptIds);

    /**
     * 向下获取部门id
     */
    @GetMapping("/in/eduUserDept/getDownId")
    ResultBean<List<Long>> getDownId(@RequestParam("deptIds") Long[] deptId);

    /**
     * 向下查询指定家校部门类型的家校部门数据(可查询非直接子家校部门)
     */
    @GetMapping("/eduUserDept/findChildByParentAndType")
    ResultBean<List<EduUserDept>> findChildByParentAndType(@RequestParam Long parentId, @RequestParam Integer type);

    /**
     * 向下查询指定家校部门类型的家校部门id(可查询非直接子家校部门) 未毕业家校部门
     */
    @GetMapping("/in/eduUserDept/findChildIdByParentAndType")
    ResultBean<List<EduUserDept>> findChildIdByParentAndTypeNoPermission(@RequestParam Long parentId, @RequestParam Integer type);

    /**
     * 向下查询指定家校部门类型的家校部门id(可查询非直接子家校部门) 未毕业家校部门
     */
    @GetMapping("/in/eduUserDept/findListByParent")
    ResultBean<List<EduUserDept>> findListByParent(@RequestParam Long deptId);


    /**
     * 获取家校部门树
     *
     * @param deptIds
     * @return
     */
    @PostMapping("in/eduUserDept/getUserDeptTree")
    ResultBean<List> getUserDeptTree(@RequestBody List<Long> deptIds);
}
