package com.palmnest.service.estateserve;

import com.palmnest.application.bean.Page;
import com.palmnest.model.ContractIinformation;
import com.palmnest.model.ContractIinformationOrder;
import com.palmnest.model.property.VirtualArchitecture;
import com.palmnest.service.GenericManager;

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

/**
 * 用户一键服务订单记录 业务实现层
 *
 * @author HJY
 */
public interface ContractIinformationOrderManager extends GenericManager<ContractIinformationOrder, Integer> {

	/**
	 * 查询一键服务订单记录
	 *
	 * @param pageSize
	 * @param pageNo
	 * @param orgId
	 * @param virtualArchitectureId
	 * @return
	 */
	public Page ContractIinformationOrderPage(Integer pageSize, Integer pageNo,
											  String orgId, String virtualArchitectureId) throws Exception;

	/**
	 * 新增或完善服务信息资料
	 *
	 * @param contractIinformationOrder
	 * @return
	 * @throws Exception
	 */
	public String saveUpdateContart(String userId, String organizationId, String virtualArchitectureId, String controlUser) throws Exception;


	/**
	 * 查询企业签约记录
	 *
	 * @param pageSize
	 * @param pageNo
	 * @param orgId
	 * @param virtualArchitectureId
	 * @return
	 * @throws Exception
	 */
	public Page ContractIinformationPage(Integer pageSize, Integer pageNo, String orgId, String virtualArchitectureId) throws Exception;

	/**
	 * 新增或更新企业签约记录
	 *
	 * @param contractIinformation
	 * @return
	 */
	public Map<String, Object> saveUpdateBusinessRecord(ContractIinformation contractIinformation);

	/**
	 * 删除企业签约记录
	 *
	 * @param id
	 * @return
	 */
	public Map<String, Object> deleteBusinessRecord(Integer id);

	/**
	 * 查询企业签约信息详情
	 *
	 * @param id
	 * @return
	 */
	public Map<String, Object> businessRecordDetails(Integer id);

	/**
	 * 查询用户的订购记录
	 *
	 * @param userId
	 * @return
	 */
	public List<Map<String, Object>> getBusinessRecordBuyUser(String userId);

	/**
	 * 查询企业签约信息记录
	 *
	 * @param virtualId 企业信息ID
	 * @return
	 */
	public ContractIinformation getContractIinformationByVirtualId(Integer virtualId);

	/**
	 * 处理信息同步（一键服务系统）
	 *
	 * @param type                      处理类型 （1-表示企业签约，2-表示用户一键服务订单记录）
	 * @param operateType               操作类型（1-新增、2-更新、3、删除）
	 * @param contractIinformation      企业签约信息
	 * @param contractIinformationOrder 用户一键服务订单记录
	 * @return
	 */
	public boolean assignSyncUser(String type, String operateType,
								  ContractIinformation contractIinformation,
								  ContractIinformationOrder contractIinformationOrder);

	/**
	 * 新增用户服务订购记录信息
	 *
	 * @param userMobile  电话号码
	 * @param serviceCode 服务类型
	 * @return
	 */
	public boolean saveContractIinformationOrder(String userMobile, String serviceCode, String customerNo);

	/**
	 * 获取签约的企业信息
	 *
	 * @param organizationId
	 * @return
	 */
	public List<VirtualArchitecture> getSignVirtualArchitectureList(String organizationId);

	/**
	 * 查询正在使用平台的企业数
	 *
	 * @return
	 */
	public Integer getContractIinformationCount();

	/**
	 * 处理企业的签约信息新增/更新
	 *
	 * @param virtualId
	 * @param serviceCode
	 * @return
	 */
	public boolean assignContractIinformation(int virtualId, String serviceCode);

	/**
	 * 批量更新企业的签约状态
	 */
	public void updateVirtualContractStatus();
}
