package com.hxhq.business.service;

import java.util.List;
import com.hxhq.business.domain.Sj;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hxhq.business.domain.StudyFormFill;
import com.hxhq.business.domain.Template;
import com.hxhq.business.dto.gsp.GspListDto;
import com.hxhq.business.dto.sj.SjListDto;
import com.hxhq.business.form.gsp.GspGdForm;
import com.hxhq.business.form.gsp.GspJyForm;
import com.hxhq.business.form.gsp.GspSearchListForm;
import com.hxhq.business.form.mjy.GdForm;
import com.hxhq.business.form.sj.*;
import com.hxhq.business.form.study.StudyFormConfigurationForm;
import com.hxhq.business.form.study.StudyFormFillSubpackageForm;

/**
 * 试剂Service接口
 *
 * @author HanLong
 * @date 2025-12-22
 */
public interface ISjService extends IService<Sj>
{

    /**
     * 开始配置
     * @param form
     * @param studyFormFill
     * @return
     */
    public void startConfiguration(StudyFormConfigurationForm form,StudyFormFill studyFormFill);


    /**
     * 配置完成
     * @param form
     * @param studyFormFill
     * @return
     */
    public void configurationCompleted(StudyFormConfigurationForm form,StudyFormFill studyFormFill);


    /**
     * 分装
     * @param form
     * @param studyFormFill
     * @return
     */
    public void subpackage(StudyFormFillSubpackageForm form,StudyFormFill studyFormFill);

    /**
     * 查询试剂列表
     *
     * @param form 试剂库存
     * @return 试剂集合
     */
    public List<SjListDto> queryList(SjSearchListForm form);

    /**
     * 查询试剂列表
     *
     * @param form 试剂库存
     * @return 试剂集合
     */
    public List<SjListDto> queryPublicList(SjSearchListForm form);

    /**
     * 通过编号获取试剂
     * @param bh 编号
     * @return 试剂
     */
    Sj getSjByBh(String bh);

    /**
     * 获取试剂详情
     * @param id    试剂id
     * @return 试剂详情
     */
    SjListDto getInfo(Long id);

    /**
     * 修改库存
     * @param form
     */
    void xgkc(SjXgkcForm form);

    /**
     * 处置
     * @param form
     */
    void cz(CzSjForm form);

    /**
     * 批量处置
     * @param form
     */
    void plcz(PlczSjForm form);

    /**
     * 锁定
     * @param form
     */
    void sd(SdSjForm form);

    /**
     * 批量锁定
     * @param form
     */
    void plsd(SdSjForm form);

    /**
     * 解锁
     * @param form
     */
    void js(JsSjForm form);

    /**
     * 借阅
     * @param form
     */
    void jy(JySjForm form);

    /**
     * 解档
     * @param form
     */
    void jd(JdSjForm form);

    /**
     * 归档
     * @param form
     */
    void gd(GdSjForm form);

    /**
     * 批量归档
     * @param form
     */
    void plgd(GdSjForm form);

    /**
     * 编辑
     * @param form
     */
    void bj(SjBjForm form);

    /**
     * 试验物资列表
     * @param form
     * @return 试验物资列表
     */
    List<SjListDto> queryStudyList(GspSearchListForm form);

    /**
     * 表单生成试剂逻辑处理
     * @param studyFormFill
     * @param template
     */
    void genResource(StudyFormFill studyFormFill, Template template);

    /**
     * 同意归档
     * @param form
     */
    void agreeGd(GspGdForm form);

    /**
     * 拒绝归档
     * @param form
     */
    void refuseGd(GspGdForm form);

    /**
     * 同意解档
     * @param form
     */
    void agreeJd(GspGdForm form);

    /**
     * 拒绝解档
     * @param form
     */
    void refuseJd(GspGdForm form);

    /**
     * 同意借阅
     * @param form
     */
    void agreeJy(GspJyForm form);

    /**
     * 拒绝借阅
     * @param form
     */
    void refuseJy(GspJyForm form);

    /**
     * 档案确认归还
     * @param form
     */
    void archiveGh(GspGdForm form);

    /**
     * 借阅到期自动归还
     */
    public void autoJyExpireReturn();
}
