package com.sptg.permissions.api.feigns;

import com.baomidou.mybatisplus.plugins.Page;
import com.sptg.common.core.beans.PageBean;
import com.sptg.common.core.beans.ResultBean;
import com.sptg.permissions.api.dto.OrgDto;
import com.sptg.permissions.api.entity.Organization;
import com.sptg.permissions.api.feigns.fallback.OrgFeignFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * title: OrgFeign
 * package: com.sptg.permissions.api.feigns
 * description: 机构服务
 *
 *
 *
 */
@FeignClient(name = "smart-house-permissions",fallbackFactory = OrgFeignFallback.class)
public interface OrgFeign {

    /**
     * 功能描述: 根据Id查询机构信息
     *
     * @param id 主键
     * @return Organization
     *
     *
     */
    @GetMapping(value = "/org/get/{id}")
    Organization getOrgById(@PathVariable(value = "id") Long id);

    /**
     * 功能描述: 分页查询
     *
     * @param pageBean 查询条件
     * @return Page<Organization>
     *
     *
     */
    @PostMapping(value = "/org/pagingQuery")
    Page<Organization> pagingQuery(@RequestBody PageBean<Organization, OrgDto> pageBean);

    /**
     * 功能描述: 获取子机构列表
     *
     * @param dto {
     *            pid     :   父Id,必填
     *            position:   位置,必填
     *            }
     * @return List<Organization>
     *
     *
     */
    @PostMapping(value = "/org/getSubListByPid")
    List<Organization> getSubListByPid(@RequestBody OrgDto dto);

    /**
     * 功能描述: 修改机构状态
     *
     * @param dto {
     *            id       :   必填
     *            isEnable :   必填 { 1 : 启用 ,2 : 禁用 }
     *            position :   必填，当前用户所属机构位置
     *            }
     * @return ResultBean<Boolean>
     *
     *
     */
    @PostMapping(value = "/org/updateIsEnable")
    ResultBean<Boolean> updateIsEnable(@RequestBody OrgDto dto);

    /**
     * 功能描述: 删除机构
     *
     * @param dto {
     *            id       :   必填
     *            position :   必填，当前用户所属机构位置
     *            flag     :   必填，指定要删除的机构类型
     *            }
     * @return ResultBean<Boolean>
     *
     *
     */
    @PostMapping(value = "/org/deleteEntity")
    ResultBean<Boolean> deleteEntity(@RequestBody OrgDto dto);

    /**
     * 功能描述: 根据机构名称模糊查询
     *
     * @param dto {
     *            position    :   机构位置（必填）
     *            name        :   机构名称（必填）
     *            }
     * @return List<Organization>
     *
     *
     */
    @PostMapping(value = "/org/selectListByLikeName")
    List<Organization> selectListByLikeName(@RequestBody OrgDto dto);

    /**
     * 功能描述: 添加机构信息
     *
     * @param dto 机构信息
     * @return ResultBean<Organization>
     *
     *
     */
    @PostMapping(value = "/org/addEntity")
    ResultBean<Organization> addEntity(@RequestBody OrgDto dto);

    /**
     * 功能描述: 修改机构信息
     *
     * @param dto 机构信息
     * @return ResultBean<Boolean>
     *
     *
     */
    @PostMapping(value = "/org/editEntity")
    ResultBean<Boolean> editEntity(OrgDto dto);

    /**
     * 功能描述: 修改上级机构
     *
     * @param dto {
     *            id       :   必填
     *            pid      :   必填
     *            position :   必填
     *            }
     * @return ResultBean<Boolean>
     *
     *
     */
    @PostMapping(value = "/org/updatePid")
    ResultBean<Boolean> updatePid(OrgDto dto);


    /**
     * 功能描述: 根据位置和状态查询(物业管理使用)
     *
     * @param dto {
     *            position    :   机构位置（必填）
     *            flag        :   机构标识（必填）
     *            }
     * @return List<Organization>
     *
     *
     */
    @PostMapping(value = "/org/selectListByCondition")
    List<Organization> selectListByCondition(@RequestBody OrgDto dto);

    /**
     * 功能描述: 根据机构编码查询机构
     * @param code 机构编码
     * @return
     *
     *
     */
    @GetMapping(value = "/org/getOrgByCode/{code}")
    Organization getOrgByCode(@PathVariable(value = "code") String code);

    /**
     * 功能描述: 根据Id列表获取机构信息
     *
     * @param idList id列表
     * @return List<Organization>
     *
     *
     */
    @PostMapping(value = "/org/getListByIds")
    List<Organization> getListByIds(@RequestBody List<Long> idList);

    /**
     * 功能描述:获取机构数量
     * @param dto
     * @return Integer
     *
     *
     */
    @PostMapping(value = "/org/selectCount")
    Integer selectCount(@RequestBody OrgDto dto);

    @PostMapping(value = "org/updateEntity")
    boolean updateEntity(Organization org);

    /**
     * 根据原数据的Id和机构的类型查询
     * @param oldId 原机构Id
     * @param orgType 机构类型 { 1：内部,2：广告,3：物业 }
     * @return com.sptg.permissions.api.entity.Organization
     */
    @GetMapping(value = "/org/{oldId}/{orgType}")
    Organization getByOldIdAndType(@PathVariable(value = "oldId") String oldId,@PathVariable(value = "orgType") String orgType);

    @GetMapping(value = "/org/{orgName}")
    boolean checkNameIsExist(@PathVariable(value = "orgName") String orgName);
}

