package com.hzya.frame.sysnew.application.service;

import com.alibaba.fastjson.JSONObject;
import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
import com.hzya.frame.basedao.service.IBaseService;
import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
import com.hzya.frame.sysnew.messageManageLog.entity.SysMessageManageLogEntity;
import com.hzya.frame.web.entity.JsonResultEntity;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 应用表(SysApplication)表服务接口
 *
 * @author makejava
 * @since 2023-09-22 16:22:21
 */
public interface ISysApplicationService extends IBaseService<SysApplicationEntity, String>{

    /**
     * @Author lvleigang
     * @Description  应用列表查询接口 多字段模糊查询，枚举类型字段转换
     * @Date 2:06 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryApp(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  创建应用保存接口 应用名称唯一校验，生成公钥密钥
     * @Date 2:07 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveApp(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用复制查询
     * @Date 2:07 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity getCopyApp(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用复制接口保存接口 应用名称校验唯一，其余表，同步保存新增，api接口要关联对应的认证接口id
     * @Date 2:07 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity copyApp(JSONObject jsonObject);


    /**
     * @Author lvleigang
     * @Description  应用根据ID查询接口 只需要应用表数据的地方都调用这一个接口
     * @Date 2:07 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity getApp(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用启用停用接口
     * @Date 2:07 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity enableOrDisableApp(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用修改接口 应用、应用接口环境参数、数据源一个接口修改。注接口参数和数据源可能修改、新增或者删除情况，要逻辑判断
     * @Date 2:07 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity updateApp(JSONObject jsonObject);


    /**
     * @Author lvleigang
     * @Description  数据源测试接口 测试当前页面数据源是否配置正确
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity testDatabase(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用目录查询接口
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppApiType(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用目录保存接口
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveAppApiType(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用目录修改接口
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity updateAppApiType(JSONObject jsonObject);


    /**
     * @Author lvleigang
     * @Description  应用目录删除接口
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity deleteAppApiType(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  根据应用、目录、查询条件查询api接口
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppApi(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  查询api接口
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity getAppApi(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  查询调试参数接口 根据调试内容，查询认证以及自己环境参数以及api设置参数
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity debugAppApi(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  查询接口日志 查询接口发送错误，以及不发送的数据
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppApiLog(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description
     *  共享保存接口 根据选择的应用和目录，
     * 查询对应应用是否有该接口，有返回提示，没有保存，
     * 同步判断是否有认证接口，以及认证接口是否存在，如果存在不保存
     * @Date 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveApiShare(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  api删除接口 接口删除校验是否有api配置时候有使用，以及esb中心是否有配置该接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity deleteApi(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  api新增接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveApi(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  api修改接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity updateApi(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  三方调用系统查询接口 根据应用查询三方调用系统
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppApiAuth(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  三方调用系统保存接口 保存三方系统，全量修改保存，同步删除api关联三方系统配置表已经删除的三方调用系统接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveAppApiAuth(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  api关联三方系统保存接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveAppApiAuthDetail(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  查询api所有数据
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppAll(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  插件查询接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppPlugin(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  插件修改接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveAppPlugin(JSONObject jsonObject);

    JsonResultEntity deleteAppPluginPackage(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  插件修改接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity updateAppPlugin(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  插件删除接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity deleteAppPlugin(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  获取插件接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity getAppPlugin(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  插件启用停用接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity enableOrDisableAppPlugin(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  应用接口启用停用接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity enableOrDisableAppApi(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  应用数据源启用停用接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity enableOrDisableAppDatasource(JSONObject jsonObject);

    JsonResultEntity externalCallInterface(ServletRequest servletRequest, ServletResponse servletResponse);
    JsonResultEntity externalCallInterfacefileUpload(ServletRequest servletRequest, ServletResponse servletResponse);

    JsonResultEntity externalCallInterfaceResend(SysMessageManageLogEntity resendLogEntity);

    /**
     * @Author lvleigang
     * @Description  应用列表查询接口 多字段模糊查询，枚举类型字段转换
     * @Date 2:06 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity thirdInterfacequeryApp(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  应用列表查询接口 多字段模糊查询，枚举类型字段转换
     * @Date 2:06 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity thirdInterfacequeryAppAll(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  查询接口日志 查询接口发送错误，以及不发送的数据
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity thirdInterfacequeryAppApiLog(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  查询接口
     * @Date 2:08 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity thirdInterfacequeryAppApi(JSONObject jsonObject);
    /**
     * @param jsonObject
     * @return com.hzya.frame.web.entity.JsonResultEntity
     * @Author lvleigang
     * @Description 查询应用列表
     * @Date 11:52 上午 2024/3/27
     **/
    JsonResultEntity queryEntity(JSONObject jsonObject);


    /**
     * @param jsonObject
     * @return com.hzya.frame.web.entity.JsonResultEntity
     * @Author lvleigang
     * @Description 查询应用插件列表和api
     * @Date 11:52 上午 2024/3/27
     **/
    JsonResultEntity queryPlugAndApi(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  脚本查询分页接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppScriptPage(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  脚本查询接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity queryAppScript(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description 脚本修改接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity saveAppScript(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  脚本修改接口
     * @Date 2:09 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity updateAppScript(JSONObject jsonObject);

    /**
     * @Author lvleigang
     * @Description  脚本删除接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity deleteAppScript(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  获取脚本接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity getAppScript(JSONObject jsonObject);
    /**
     * @Author lvleigang
     * @Description  脚本启用停用接口
     * @Date 2:10 下午 2023/9/23
     * @param jsonObject
     * @return
     **/
    JsonResultEntity enableOrDisableAppScript(JSONObject jsonObject);

    /****
     * ESB请求转发重载方法,临时处理传入请求对象
     * @content:
     * @author 👻👻👻👻👻👻👻👻 gjh
     * @date  2024-06-19 9:34
     * @param
     * @return com.hzya.frame.web.entity.JsonResultEntity
     **/
    JsonResultEntity externalCallInterfaceToESB(ServletRequest servletRequest, ServletResponse servletResponse);

    SysExtensionApiEntity setDDtoken(SysExtensionApiEntity sysExtensionApiEntity);
    SysExtensionApiEntity setDDUserId(SysExtensionApiEntity sysExtensionApiEntity);

}
