package com.jojubanking.boot.module.system.service.student;

import java.util.*;
import javax.validation.*;
import com.jojubanking.boot.module.system.controller.admin.student.vo.*;
import com.jojubanking.boot.module.system.controller.admin.user.vo.user.UserImportExcelVO;
import com.jojubanking.boot.module.system.controller.admin.user.vo.user.UserImportRespVO;
import com.jojubanking.boot.module.system.controller.admin.xymain.vo.xyMainExportReqVO;
import com.jojubanking.boot.module.system.controller.app.xytjinfo.vo.studentJfListVO;
import com.jojubanking.boot.module.system.dal.dataobject.order.OrderDO;
import com.jojubanking.boot.module.system.dal.dataobject.student.StudentDO;
import com.jojubanking.boot.framework.common.pojo.PageResult;
import com.jojubanking.boot.module.system.dal.dataobject.xymain.xyMainDO;
import com.jojubanking.boot.module.system.dal.dataobject.xyrw.XyrwDO;

/**
 * 学生信息 Service 接口
 *
 * @author admin
 */
public interface StudentService {

    /**
     * 创建学生信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStudent(@Valid StudentCreateReqVO createReqVO);

    /**
     * 更新学生信息
     *
     * @param updateReqVO 更新信息
     */
    void updateStudent(@Valid StudentUpdateReqVO updateReqVO);
    public void updateOrderByNotify(StudentDO studentDO);
    public void updateOrderByConfirm(StudentDO studentDO);

    void updateStudentXyrwName(StudentDO studentDO);

    /**
     * 删除学生信息
     *
     * @param id 编号
     */
    void deleteStudent(Long id);

    /**
     * 获得学生信息
     *
     * @param id 编号
     * @return 学生信息
     */
    StudentDO getStudent(Long id);

    /**
     * 获得学生信息列表
     *
     * @param ids 编号
     * @return 学生信息列表
     */
    List<StudentDO> getStudentList(Collection<Long> ids);
    List<studentJfListVO> getStudentListSimple(String openid, String batchno);

    StudentDO getStudentListInit(String nationid, String batchno);
    /**
     * 获得学生信息分页
     *
     * @param pageReqVO 分页查询
     * @return 学生信息分页
     */
    PageResult<StudentDO> getStudentPage(StudentPageReqVO pageReqVO, XyrwDO xyrwDO);

    PageResult<StudentDO> getStudentHisPage(StudentPageReqVO pageReqVO, XyrwDO xyrwDO);
    /**
     * 获得学生信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 学生信息列表
     */
    List<StudentDO> getStudentList(StudentExportReqVO exportReqVO);


    List<StudentDO> getStudentListForXy(StudentExportReqVO exportReqVO);

    /**
     * 批量导入用户
     *
     * @param importStudent     导入用户列表
     * @param isUpdateSupport 是否支持更新
     * @return 导入结果
     */
    StudentImportRespVO importUsers(List<StudentImportExcelVO> importStudent, boolean isUpdateSupport, List<XyrwDO> listXyrw);

}
