package com.sw.common.accessory.server.interfaces.in;

import com.sw.common.accessory.server.dto.ApplyAccessoryData;
import com.sw.common.core.exception.BusinessException;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;

/**
 * @author zhaowenjie
 */
@Validated
public interface AccyInService {
    /**
     * 退库申请审核状态反馈
     *
     * @param code        退库申请单号
     * @param status      审核状态 0：审核通过 1：审核不通过
     * @param userConfirm 审核人
     * @throws Exception 处理异常
     */
    void stockReturnApplyFeedback(String code, int status, String userConfirm) throws Exception;

    /**
     * 辅材申请审核状态反馈
     * @param applyAccessoryDatas 审核状态
     * @throws Exception 处理异常
     */
    void applyAccessoryFeedback(@Valid ApplyAccessoryData applyAccessoryDatas) throws Exception;


    /**
     * 辅材唯一码，指定设备上机
     *
     * @param uniqueCode      辅材唯一码
     * @param equipmentCode   设备编号
     * @param accessoryStatus 辅材状态
     */
    void upper(String uniqueCode, String equipmentCode, Integer accessoryStatus);

    /**
     * 辅材唯一码，指定设备上机
     *
     * @param uniqueCode    辅材唯一码
     * @param equipmentCode 设备编号
     */
    void down(String uniqueCode, String equipmentCode, Integer accessoryStatus);

    /**
     * 下机
     *
     * @param uniqueCode    辅材唯一码
     * @param equipmentCode 设备编号
     * @param life          本次消耗寿命
     */
    void down(String uniqueCode, String equipmentCode, Integer life, Integer accessoryStatus);

    /**
     * 通过辅材唯一码 判断可不可以上机
     *
     * @param uniqueCode 辅材唯一码
     * @throws BusinessException 不能上机，返回业务异常
     */
    void canUpper(String uniqueCode) throws BusinessException;

    /**
     * 通过设备编号 以及 寿命类型增加寿命消耗
     *
     * @param equipmentCode 设备编号
     * @param lifeType      寿命类型
     * @param life          本次消耗寿命
     * @throws BusinessException 不能上机，返回业务异常
     */
    void consumptionLife(String equipmentCode, Integer lifeType, Integer life) throws BusinessException;

}
