package com.bonus.material.lossAssessment.mapper;

import com.bonus.material.ma.domain.PartType;
import com.bonus.material.repair.domain.*;
import com.bonus.material.repair.domain.vo.RepairDeviceVO;
import com.bonus.material.task.domain.TmTask;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * @author hay
 */
@Mapper
public interface LossAssessmentMapper {

    /**
     * 获取定损任务列表
     * @param bean
     * @return
     */
    List<RepairTask> getLossAssessmentList(RepairTask bean);

    /**
     * 定损详情列表
     * @param bean
     * @return
     */
    List<RepairDeviceVO> getRepairDeviceList(RepairTaskDetails bean);

    /**
     * 更新定损数量、并修改定损人员
     * @param id
     * @param repairNum
     * @param status
     * @param repairer
     * @param userId
     * @return
     */
    int updateRepairedNumAndStatus(@Param("id") Long id, @Param("repairNum") BigDecimal repairNum, @Param("status") int status, @Param("repairer") String repairer, @Param("userId") Long userId);

    /**
     * 定损信息修改
     * @param bean
     * @return
     */
    int updateRepairer(RepairDeviceVO bean);

    /**
     * 查询配件价格
     * @param partId 配件id
     * @return
     */
    BigDecimal selectPartPrice(Long partId);

    /**
     * 新增配件维修记录
     * @param partDetails 配件详情
     * @return
     */
    int addPart(RepairPartDetails partDetails);

    /**
     * 新增维修记录
     * @param bean 维修记录信息
     * @return
     */
    int addRecord(RepairApplyRecord bean);

    /**
     * 扣减个人库配件库存数量
     * @param partDetails
     * @return
     */
    int updateStorageNum(RepairPartDetails partDetails);

    /**
     * 查询配件类型管理
     *
     * @param id 配件类型管理主键
     * @return 配件类型管理
     */
    PartType selectPartTypeByPaId(Long id);

    /**
     * 新增维修费用
     * @param
     * @return
     */
    int addRepairCost(@Param("bean") RepairApplyRecord bean, @Param("costs") BigDecimal costs, @Param("partType") String partType);

    /**
     * 根据id查询维修明细
     * @param id 主键key
     * @return
     */
    RepairTaskDetails getById(Long id);

    int updateRepairedAndScrapNum(@Param("id") Long id, @Param("thisRepairedNum") BigDecimal repairNum, @Param("thisScrapNum") BigDecimal thisScrapNum,@Param("repairer") Long repairer, @Param("userId") Long userId);

    /**
     * 根据已修数量、已报废数量--更新维修状态
     * @param id
     * @return
     */
    int updateStatusByRepairScrapNum(@Param("id") Long id);

    /**
     * 查询任务下定损数据
     * @param taskId
     * @return
     */
    List<RepairTaskDetails> getRepairDetailsWhichNotSent(@Param("taskId") Long taskId);

    /**
     * 更新任务状态
     * @param task
     * @param userid
     * @param taskStatus
     * @return
     */
    int updateSingleTaskStatus(@Param("task") RepairTask task, @Param("userId") Long userid, @Param("taskStatus") Integer taskStatus);

    /**
     * 插入维修数据
     * @param repairTaskDetails
     * @return
     */
    int insertRad(RepairTaskDetails repairTaskDetails);

    /**
     * 根据任务id 查询已操作数量（已维修+已报废）
     * @param taskId
     * @return
     */
    int getRepairedScrapNumByTaskId(Long taskId);

    /**
     * 根据任务id更新任务状态
     * @param taskId 任务id  必传
     * @param newStatus 新状态
     * @return
     */
    int updateTaskStatus(@Param("taskId") String taskId, @Param("newStatus") int newStatus);

    /**
     * 查询任务
     * @param taskId 任务主键
     * @return 任务
     */
    TmTask selectTmTaskByTaskId(Long taskId);

    /**
     * 获取详情的详情
     * @param bean
     * @return
     */
    List<RepairPartDetails> getDetailsListApp(RepairPartDetails bean);

    /**
     * 定损完成--直通
     * @param taskId
     * @return
     */
    int updateIsDs(Long taskId);

    /**
     * 修改状态
     * @param taskId
     * @return
     */
    int updateStatus(Long taskId);

    /**
     * 查询任务状态
     * @param taskId
     * @return
     */
    int selectTaskStatus(Long taskId);

    /**
     * 删除任务
     * @param taskId
     * @return
     */
    int deleteTask(Long taskId);

    /**
     * 删除repair_apply_details
     * @param taskId
     * @return
     */
    int deleteApplyDetailsByTaskId(Long taskId);

    /**
     * 删除repair_apply_record
     * @param taskId
     * @return
     */
    int deleteRecordByTaskId(Long taskId);

    /**
     * 删除repair_part_details
     * @param taskId
     * @return
     */
    int deletePartByTaskId(Long taskId);

    /**
     * 删除repair_cost
     * @param taskId
     * @return
     */
    int deleteCostByTaskId(Long taskId);

    /**
     * 查询repair_apply_details
     * @param id
     * @return
     */
    RepairApplyDetails selectRepairApplyDetailsById(Long id);

    /**
     * 删除repair_apply_details
     * @param id
     * @return
     */
    int delDetailsById(Long id);

    /**
     * 删除repair_apply_record
     * @param repairApplyDetails
     * @return
     */
    int delRecord(RepairApplyDetails repairApplyDetails);

    /**
     * 删除repair_part_details
     * @param repairApplyDetails
     * @return
     */
    int delPart(RepairApplyDetails repairApplyDetails);

    /**
     * 删除repair_cost
     * @param repairApplyDetails
     * @return
     */
    int delCost(RepairApplyDetails repairApplyDetails);
}
