package com.ruoyi.mall.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.mall.domain.Bo.CountScoreBO;
import com.ruoyi.mall.domain.MallAcceptRateSetting;
import com.ruoyi.mall.domain.MallCountMethod;
import com.ruoyi.mall.domain.Vo.SchoolVO;

/**
 * 计算公式数据Service接口
 *
 * @author ruoyi
 * @date 2023-10-25
 */
public interface IMallCountMethodService
{
    /**
     * 查询计算公式数据
     *
     * @param countMethodId 计算公式数据主键
     * @return 计算公式数据
     */
    public MallCountMethod selectMallCountMethodByCountMethodId(Long countMethodId);

    /**
     * 查询计算公式数据列表
     *
     * @param mallCountMethod 计算公式数据
     * @return 计算公式数据集合
     */
    public List<MallCountMethod> selectMallCountMethodList(MallCountMethod mallCountMethod);

    /**
     * 新增计算公式数据
     *
     * @param mallCountMethod 计算公式数据
     * @return 结果
     */
    public int insertMallCountMethod(MallCountMethod mallCountMethod);

    /**
     * 修改计算公式数据
     *
     * @param mallCountMethod 计算公式数据
     * @return 结果
     */
    public int updateMallCountMethod(MallCountMethod mallCountMethod);

    /**
     * 批量删除计算公式数据
     *
     * @param countMethodIds 需要删除的计算公式数据主键集合
     * @return 结果
     */
    public int deleteMallCountMethodByCountMethodIds(Long[] countMethodIds);

    /**
     * 删除计算公式数据信息
     *
     * @param countMethodId 计算公式数据主键
     * @return 结果
     */
    public int deleteMallCountMethodByCountMethodId(Long countMethodId);

    /**
     * 计算所需文化分
     * @param majorScore 用户联考分(专业分)
     * @param acceptScore 录取分
     * @param acceptRuleId  计算公式id
     * @return 结果
     */
    public BigDecimal getNeedCultureScore(Integer majorScore, BigDecimal acceptScore, Long acceptRuleId);

    /**
     * 计算综合分
     * @param cultureScore 文化分
     * @param majorScore 专业分
     * @param acceptRuleId 计算公式id
     * @return 结果
     */
    public BigDecimal getTotalScore(Integer cultureScore, Integer majorScore, Long acceptRuleId);

    /**
     * 获取计算方式字符串
     * @param acceptRuleId 计算方法id
     * @return 结果
     */
    public String getCountMethodStr(Long acceptRuleId);

    /**
     * 计算录取概率

     * @param cultureScore 文化分
     * @param majorScore 专业分

     * @return 结果
     */
    public Map<String, Object> getAcceptRate(BigDecimal reference, Long acceptRuleId, Integer cultureScore, Integer majorScore);
    public Map<String, Object> zhuankegetAcceptRate(BigDecimal reference, Long acceptRuleId, Integer cultureScore, Integer majorScore);

    /**
     * 计算批次学校专业录取概率
     * @param cultureScore 文化分
     * @param majorScore 专业分

     * @return 结果
     * 用于志愿填报
     */
    public Map<String, Object> getAcceptRateForReport(BigDecimal reference, Long acceptRuleId, Integer cultureScore, Integer majorScore);

    public Map<String, Object> getAcceptRateForReport2(BigDecimal reference, BigDecimal totalScore, Integer cultureScore, Integer majorScore);

    /**
     * 专科
     * @param reference
     * @param acceptRuleId
     * @param cultureScore
     * @param majorScore
     * @return
     */
    public Map<String, Object> zhuankegetAcceptRateForReport(BigDecimal reference, Long acceptRuleId, Integer cultureScore, Integer majorScore);

    public Map<String, Object> zhuankegetAcceptRateForReport2(BigDecimal reference, BigDecimal totalScore, Integer cultureScore, Integer majorScore);

    /**
     * 计算方法-计算综合分
     * @param countScoreBO 用户分数信息
     * @return 结果
     */
    public AjaxResult countScore(CountScoreBO countScoreBO);

    /**
     * 专科批计算方法
     * @return 结果
     */
    public AjaxResult getTrainingSchoolMethod(Integer cultureScore, Integer majorScore);

    /**
     * 满分达成率
     * @return 结果
     */
    public String fullScoreRate(BigDecimal userScore, BigDecimal fullScore);

    /**
     *  计算方法匹配院校列表
     * @param acceptRuleId 计算方法id
     * @param batchId 批次id
     * @param positionId 定位id
     * @param suggestId 推荐度id
     * @return 结果
     */
    public PageInfo<SchoolVO> ruleMatchSchoolList(Long id, Long acceptRuleId, Long batchId, Long positionId, Long suggestId, Integer pageNum, Integer pageSize);
}
