content: package com.sohu.cache.web.service;
  
  import java.util.List;
  
  import com.sohu.cache.constant.AppAuditType;
  import com.sohu.cache.entity.*;
  import com.sohu.cache.web.enums.SuccessEnum;
  
  /**
   * 应用相关操作
   * @author leifu
   * @Time 2014年10月21日
   */
  public interface AppService {
      
      /**
       * 查询指定用户下的应用个数
       * @param appUser
       * @return
       */
      int getAppDescCount(AppUser appUser, AppSearch appSearch);
  
      /**
       * 查询指定用户下的所有的应用
       * @param appUser
       * @return
       */
      List<AppDesc> getAppDescList(AppUser appUser, AppSearch appSearch);
  
      /**
       * 按照Appid取应用信息
       * @param appId
       * @return
       */
      AppDesc getByAppId(Long appId);
  
      /**
       * 保存应用
       * @param appDesc
       * @return
       */
      int save(AppDesc appDesc);
  
      /**
       * 更新应用
       * @param appDesc
       * @return
       */
      int update(AppDesc appDesc);
  
      /**
       * 获取应用的实例
       * @param appId
       * @return
       */
      List<InstanceInfo> getAppInstanceInfo(Long appId);
  
      List<InstanceStats> getAppInstanceStats(Long appId);
  
      /**
       * 保存用户与应用的关系
       * @param appId
       * @param userId
       * @return
       */
      boolean saveAppToUser(Long appId, Long userId);
  
      /**
       * 更新审核状态
       * @param id 审批id
       * @param appId
       * @param status 审批状态
       * @param appUser 更新人
       */
      void updateAppAuditStatus(Long id, Long appId, Integer status, AppUser appUser);
  
      /**
       * 更新用户审核状态
       * @param id 审批id
       * @param status 审批状态
       */
      void updateUserAuditStatus(Long id, Integer status);
  
      
      /**
       * 通过应用名获取应用
       * @param appName
       * @return
       */
      AppDesc getAppByName(String appName);
  
      /**
       * 获取应用下的所有用户应用关系列表
       * @param appId
       * @return
       */
      List<AppToUser> getAppToUserList(Long appId);
      
      /**
       * 删除用户应用关系
       * @param appId
       * @param userId
       */
      SuccessEnum deleteAppToUser(Long appId, Long userId);
  
      /**
       * 获取审批列表
       * @param status(参考AppAppCheckEnum)
       * @param type (参考AppAuditType)
       * @return
       */
      List<AppAudit> getAppAudits(Integer status, Integer type);
  
      /**
       * 保存扩容申请
       * @param appDesc
       * @param appUser 
       * @param applyMemSize 扩容容量
       * @param appScaleReason 扩容原因
       * @param appScale 申请类型
       */
      AppAudit saveAppScaleApply(AppDesc appDesc, AppUser appUser, String applyMemSize, String appScaleReason, AppAuditType appScale);
  
      /**
       * 保存应用配置申请
       * @param appDesc
       * @param appUser
       * @param instanceId 实例id
       * @param appConfigKey 配置项
       * @param appConfigValue 配置值
       * @param modifyConfig 申请类型
       */
      AppAudit saveAppChangeConfig(AppDesc appDesc, AppUser appUser, Long instanceId, String appConfigKey, String appConfigValue,String appConfigReason, AppAuditType modifyConfig);
  
      /**
       * 保存实例配置申请
       * @param appDesc
       * @param appUser
       * @param instanceId
       * @param instanceConfigKey
       * @param instanceConfigValue
       * @param instanceConfigReason
       * @param instanceModifyConfig
       * @return
       */
      AppAudit saveInstanceChangeConfig(AppDesc appDesc, AppUser appUser, Long instanceId, String instanceConfigKey, String instanceConfigValue, String instanceConfigReason, AppAuditType instanceModifyConfig);
      
      /**
       * 获取审批信息
       * @param appAuditId
       * @return
       */
      AppAudit getAppAuditById(Long appAuditId);
  
      /**
       * 驳回理由
       * @param appAudit
       * @param userInfo
       */
      SuccessEnum updateRefuseReason(AppAudit appAudit, AppUser userInfo);
  
      /**
       * 获取用户的应用数量
       * @param userId
       * @return
       */
      int getUserAppCount(Long userId);
  
      /**
       * 获取应用的机器信息
       * @param appId
       * @return
       */
      List<MachineStats> getAppMachineDetail(Long appId);
  
      /**
       * 根据应用id获取审批记录
       * @param appId
       * @return
       */
      List<AppAudit> getAppAuditListByAppId(Long appId);
  
      /**
       * 注册用户申请
       * @param appUser
       * @param registerUserApply
       * @return
       */
      AppAudit saveRegisterUserApply(AppUser appUser, AppAuditType registerUserApply);
  
      /**
       * 获取所有应用
       */
      List<AppDesc> getAllAppDesc();
  
      /**
       * 修改报警配置
       * @param appId
       * @param memAlertValue
       * @param clientConnAlertValue
       * @param appUser
       * @return
       */
      SuccessEnum changeAppAlertConfig(long appId, int memAlertValue, int clientConnAlertValue, AppUser appUser);
  
      /**
       * 更新appKey
       * @param appId
       */
      void updateAppKey(long appId);
      
  }
  