package com.palmnest.service.estateserve;

import com.palmnest.application.bean.Page;
import com.palmnest.application.dto.AppServiceMenuDto;
import com.palmnest.application.dto.output.enterprise.OpenedFunctionOutDto;
import com.palmnest.model.estateserve.ServiceProjectAllocation;
import com.palmnest.service.GenericManager;

import java.util.List;
import java.util.Map;

/**
 * 项目or企业配置服务主页业务处理层
 *
 * @author 金牙
 */
public interface ServiceProjectAllocationManager extends GenericManager<ServiceProjectAllocation, Integer> {

	/**
	 * 查询企业或项目服务列表
	 *
	 * @param pageNo
	 * @param pageSize
	 * @param whereSql
	 * @return
	 * @throws Exception
	 */
	public Page serviceProjectAllocationPage(Integer pageNo, Integer pageSize,
											 String whereSql, String orgIds) throws Exception;

	/**
	 * 根据项目ID查询运营中心信息
	 *
	 * @param orgIds
	 * @return
	 */
	public Map<String, Object> getCompanyObj(String orgIds) throws Exception;

	/**
	 * 所有项目批量 上架/下架服务包
	 *
	 * @param status
	 * @param serviceTypeId
	 */
	public void assignBatchOnOffService(String status, String serviceTypeId, String orderNo);

	/**
	 * 指定项目批量 上架/下架服务包
	 *
	 * @param status          1-上架、0-下架
	 * @param serviceTypeId   服务ID
	 * @param orderNo         排序号
	 * @param organizationIds 项目ID拼接字符串
	 * @param operateUser     操作用户名称
	 * @param roleGroups      角色组
	 */
	public void assignBatchOnOffService(String status, String serviceTypeId, String orderNo,
										String organizationIds, String operateUser, String roleGroups);

	/**
	 * 查询项目的服务配置信息
	 *
	 * @param serviceTypeId 服务包服务ID
	 * @return
	 */
	public List<ServiceProjectAllocation> getServiceProjectAllocationList(String serviceTypeId);

	/**
	 * 查询服务分类以及子级分类信息
	 *
	 * @return
	 */
	public List<Map<String, Object>> getServiceGroupList(String organizationId);

	public List<AppServiceMenuDto> getServiceProjectAllocationList(Integer organizationId, Integer type) throws Exception;

	/**
	 * 查询所有可用的项目服务配置信息
	 *
	 * @return
	 */
	public List<ServiceProjectAllocation> listAll();

	/**
	 * 根据服务编码获取相对应服务上线的项目
	 *
	 * @param serviceCode
	 * @return
	 */
	public String getServiceProjectByServiceCode(String serviceCode);


	/**
	 * 获取当前项目下 开启权限设置的服务列表
	 *
	 * @param orgId
	 * @return
	 */
	List<OpenedFunctionOutDto> getOpenedFunctionServiceList(int orgId);

	List<OpenedFunctionOutDto> getOpenedFunctionServiceChildList(List<Integer> serviceIdList);

	ServiceProjectAllocation getServiceProjectAllocation(Integer serviceTypeId, Integer organizationId);
}
