package cn.iocoder.yudao.module.crm.service.crmbusiness;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.crm.controller.admin.crmbusiness.vo.CrmBusinessPageReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.crmbusiness.vo.CrmBusinessRespVO;
import cn.iocoder.yudao.module.crm.controller.admin.crmbusiness.vo.CrmBusinessSaveReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.crmbusiness.vo.CrmBusinessTransferVO;
import cn.iocoder.yudao.module.crm.dal.dataobject.crmbusiness.CrmBusinessProductDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 商机 Service 接口
 *
 * @author yshop
 */
public interface CrmBusinessService {

    /**
     * 创建商机
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createBusiness(@Valid CrmBusinessSaveReqVO createReqVO);

    /**
     * 更新商机
     *
     * @param updateReqVO 更新信息
     */
    void updateBusiness(@Valid CrmBusinessSaveReqVO updateReqVO);

    /**
     * 删除商机
     *
     * @param id 编号
     */
    void deleteBusiness(Long id);

    /**
     * 获得商机
     *
     * @param id 编号
     * @return 商机
     */
    CrmBusinessRespVO getBusiness(Long id);

    /**
     * 获得商机分页
     *
     * @param pageReqVO 分页查询
     * @return 商机分页
     */
    PageResult<CrmBusinessRespVO> getBusinessPage(CrmBusinessPageReqVO pageReqVO);

    // ==================== 子表（商机产品关联） ====================

    /**
     * 获得商机产品关联列表
     *
     * @param businessId 商机id
     * @return 商机产品关联列表
     */
    List<CrmBusinessProductDO> getBusinessProductListByBusinessId(Long businessId);

    /**
     * 转移商机
     *
     * @param transferVO
     */
    void transfer(@Valid CrmBusinessTransferVO transferVO);

    /**
     * 更新商机状态
     *
     * @param id
     * @param isEnd
     */
    void updateIsEnd(Long id, Integer isEnd);
}
