package com.mosty.base.feign.service;

import com.alibaba.fastjson.JSONObject;
import com.mosty.base.model.dto.base.GetDeptListDTO;
import com.mosty.base.model.dto.base.GetSsbmDto;
import com.mosty.base.model.dto.base.SysDeptDTO;
import com.mosty.base.model.dto.base.SysMessageInfoInsertDto;
import com.mosty.base.feign.fallback.SysDeptRemoteServiceFallback;
import com.mosty.base.model.query.base.GetSysDeptListQuery;
import com.mosty.base.model.query.base.SysDeptQuery;
import com.mosty.base.model.vo.base.DeptInfoVo;
import com.mosty.common.base.domain.ResponseResult;
import com.mosty.common.config.entity.vo.SysDictVO;
import com.mosty.common.core.business.entity.SysDept;
import com.mosty.common.core.business.entity.SysUser;
import com.mosty.common.core.business.entity.vo.SysUserDeptVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author dw
 * @since 2022/7/23
 * 基础服务对外调用接口 feign
 **/
@SuppressWarnings("unused")
@FeignClient(value = "mosty-base",
        fallbackFactory = SysDeptRemoteServiceFallback.class,
        contextId = "com.mosty.base.feign.service.SysDeptRemoteService")
public interface MostyBaseFeignService {

    // 根据组织机构编码查询部门信息
    @GetMapping("/sysDept/getChildDeptList")
    ResponseResult<SysDeptDTO> getDeptByOrgCode(@RequestParam("orgCode") String orgCode);

    // 根据部门deptid获取所属分县局、所属地市州
    @GetMapping("/mosty-base/deptFeign/getOrgByDeptId/{deptid}")
    ResponseResult<DeptInfoVo> getOrgByDeptId(@PathVariable("deptid") String deptid);

    // 根据部门orgcode获取所属分县局、所属地市州
    @GetMapping("/mosty-base/deptFeign/getOrgByOrgcode/{orgcode}")
    ResponseResult<DeptInfoVo> getOrgByOrgcode(@PathVariable("orgcode") String orgcode);

    // 查询所有的用户数据（包含对应的部门信息）
    @GetMapping("/mosty-base/userDeptFeign/getUserAll/{deptid}")
    ResponseResult<List<SysUserDeptVO>> getUserAll(@PathVariable("deptid") String deptid);

    // 查询部门下的总人数（包含子部门）
    @GetMapping("/mosty-base/userDeptFeign/getUserCount/{deptid}")
    ResponseResult<Integer> getUserCount(@PathVariable("deptid") String deptid);

    // 查询所有的部门信息列表
    @GetMapping("/mosty-base/deptFeign/getDeptAll")
    ResponseResult<List<DeptInfoVo>> getDeptAll();

    // 查询部门下的所有的子部门信息列表
    @GetMapping("/mosty-base/sysDept/getChildDept/{deptid}")
    ResponseResult<List<String>> getChildDept(@PathVariable("deptid") String deptid);

    // 查询部门下的所有的子部门信息列表
    @GetMapping("/mosty-base/sysDept/getChildDeptByOrgCode/{orgcode}")
    ResponseResult<List<String>> getChildDeptByOrgCode(@PathVariable("orgcode") String orgcode);

    // 查询部门下的所有的子部门信息列表
    @PostMapping("/mosty-base/deptFeign/getChildDept")
    ResponseResult<List<DeptInfoVo>> getChildDept(@RequestBody GetDeptListDTO dto);

    // 给人员发送消息
    @PostMapping("/mosty-base/sysMessage/sendMsg")
    ResponseResult<Integer> sendMsg(@RequestBody SysMessageInfoInsertDto dto);

    // 查询部门下的人员信息，不包含子部门
    @GetMapping("/mosty-base/userDeptFeign/getUserList/{deptid}")
    ResponseResult<List<SysUserDeptVO>> getUserList(@PathVariable("deptid") String deptid);

    // 根据用户ID，获取用户部门信息
    @GetMapping("/mosty-base/userDeptFeign/getDeptInfoByUserId/{userId}")
    ResponseResult<DeptInfoVo> getDeptInfoByUserId(@PathVariable("userId") String userId);

    // 根据用户ID，获取用户详情信息
    @GetMapping("/mosty-base/userFeign/getUserInfo/{userId}")
    ResponseResult<SysUser> getUserInfo(@PathVariable("userId") String userId);

    // 通过key获取配置信息
    @GetMapping("/mosty-base/sysConfigNew/getValue/{pzj}")
    ResponseResult<String> getValue(@PathVariable("pzj") String pzj);

    // 通过字典名称获取词条列表
    @GetMapping("/mosty-base/sysDict/getSysDictByCode")
    ResponseResult<SysDictVO> getSysDictByCode(@RequestParam("dictCode") String dictCode);

    // 查询分局下的所有的派出所信息
    @PostMapping("/mosty-base/deptFeign/getPcsByFxjdm/{orgcode}")
    ResponseResult<List<SysDeptDTO>> getPcsByFxjdm(@PathVariable("orgcode") String orgcode);

    // 通过身份证号获取用户信息
    @GetMapping("/mosty-base/userFeign/getUserInfoBySfzh/{sfzh}")
    ResponseResult<SysUser> getUserInfoBySfzh(@PathVariable("sfzh") String sfzh);

    // 通过身份证号获取用户信息
    @GetMapping("/mosty-base/userFeign/getUserOrFjInfoBySfzh/{sfzh}")
    ResponseResult<SysUser> getUserOrFjInfoBySfzh(@PathVariable("sfzh") String sfzh);

    // 根据经纬度获取地址信息
    @GetMapping("/mosty-base/other/getAddress")
    ResponseResult<JSONObject> getAddress(@RequestParam("jd") String jd, @RequestParam("wd") String wd);

    // 根据经纬度获取地址信息（泸州）
    @GetMapping("/mosty-base/other/getLzAddress")
    ResponseResult<JSONObject> getLzAddress(@RequestParam("jd") String jd, @RequestParam("wd") String wd);

    // 获取部门信息
    @PostMapping("/mosty-base/deptFeign/getOrg")
    ResponseResult<List<SysDept>> getOrg(@RequestBody SysDeptQuery deptQuery);

    // 查询用户是否有该部门的数据权限
    @GetMapping("/mosty-base/userDeptFeign/getDataPermission")
    ResponseResult<Boolean> getDataPermission(@RequestParam("sfz") String sfz, @RequestParam("deptcode") String deptcode);

    // 获取查询条件
    @PostMapping("/mosty-base/deptFeign/getSsbm")
    ResponseResult<String> getSsbm(@RequestBody GetSsbmDto dto);

    // 获取组织机构信息列表
    @PostMapping("/mosty-base/deptFeign/getOrganizationList")
    ResponseResult<List<SysDept>> getOrganizationList(@RequestBody GetSysDeptListQuery query);

    //查询部门详情
    @GetMapping("/mosty-base/deptFeign/getSysDeptBySsbmdm")
    ResponseResult<SysDept> getSysDeptBySsbmdm(@RequestParam String ssbmdm);

    // 根据身份证，获取用户部门信息
    @GetMapping("/mosty-base/userDeptFeign/getDeptInfoBySfzh/{sfzh}")
    ResponseResult<DeptInfoVo> getDeptInfoBySfzh(@PathVariable("sfzh") String sfzh);

    //获取华为minio图片base64
    @PostMapping("/mosty-base/minio/image/downloadBaes64/{id}")
    ResponseResult<String> downloadBaes64(@PathVariable("id") String id);


}
