package com.hzs.member.empty.service;

import com.hzs.common.domain.member.empty.ext.CuMemberEmptyDetailExt;
import com.hzs.member.empty.dto.MemberEmptyDetailDTO;
import com.hzs.member.empty.param.MemberEmptySignParam;
import com.hzs.system.sys.dto.ApprovalBusinessResultDTO;
import com.hzs.system.sys.dto.LoginUser;

import java.util.List;

/**
 * @Description: 空单处理服务
 * @Author: jiang chao
 * @Time: 2023/6/17 14:07
 * @Classname: IMemberEMptyService
 * @PackageName: com.hzs.member.empty.service
 */
public interface IMemberEmptyService {

    /**
     * 导入数据校验
     *
     * @param resultList 结果数据
     */
    void importTemplate(List<MemberEmptyDetailDTO> resultList);

    /**
     * 保存空单数据
     *
     * @param resultList 结果数据
     * @param userId     当前用户
     * @param pkCountry  所属国家
     * @param systemType 系统类型
     * @return
     */
    List<CuMemberEmptyDetailExt> saveDate(List<MemberEmptyDetailDTO> resultList, Long userId, Integer pkCountry, Integer systemType);

    /**
     * 更新空单数据
     *
     * @param resultList 结果数据
     * @param userId     当前用户
     * @param pkCountry  所属国家
     * @return
     */
    boolean updateDate(List<MemberEmptyDetailDTO> resultList, Long userId, Integer pkCountry);

    /**
     * 数据处理
     *
     * @param resultList 结果数据
     * @param systemType 系统类型
     * @return
     */
    Boolean handleDate(List<MemberEmptyDetailDTO> resultList, Integer systemType);

    /**
     * 保存空单会员
     *
     * @param pkMemberEmpty 批次ID
     * @param detailList    批次明细数据列表
     * @param userId        当前会员
     * @param pkCountry     所属国家
     * @param systemType    系统类型
     * @param pushLogFlag   推送日志标记（true=推送，false=不推送）
     */
    boolean saveEmptyMember(Long pkMemberEmpty, List<CuMemberEmptyDetailExt> detailList, Long userId, Integer pkCountry, Integer systemType, boolean pushLogFlag);

    /**
     * 提交签呈
     *
     * @param param      提交入参
     * @param detailList 批次明细列表
     * @param loginUser  登录用户
     * @return
     */
    String submit(MemberEmptySignParam param, List<CuMemberEmptyDetailExt> detailList, LoginUser loginUser);

    /**
     * 审核通过
     *
     * @param resultDTO
     * @param systemType
     * @return
     */
    String approvalAgree(ApprovalBusinessResultDTO resultDTO, Integer systemType);

    /**
     * 审核驳回
     *
     * @param resultDTO
     * @return
     */
    String approvalReject(ApprovalBusinessResultDTO resultDTO);

}
