package com.bonus.material.repair.mapper;

import com.bonus.material.ma.domain.PartType;
import com.bonus.material.repair.domain.*;
import com.bonus.material.repair.domain.vo.*;
import com.bonus.system.api.domain.SysUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * @author syruan
 */
@Mapper
public interface RepairMapper {
    /**
     * 获取维修任务列表
     *
     * @param bean 维修任务信息--查询条件
     */
    List<RepairTask> getRepairTaskList(RepairTask bean);

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

    /**
     * 获取维修任务列表
     *
     * @param taskId 任务id
     */
    RepairTask getRepairTaskInfoByTaskId(Long taskId);

    List<RepairDeviceVO> getRepairDeviceList(RepairTaskDetails bean);

    /**
     * 获取维修详细列表
     * @param bean 维修任务详情--查询条件
     */
//    List<RepairDeviceListVo> getRepairMaTypeList(RepairTaskDetails bean);

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

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

    /**
     * 修改维修数量
     *
     * @param id        主键key
     * @param repairNum 维修数量
     * @param repairer  维修人员
     * @param userId    用户id
     */
    int updateRepairedNum(@Param("id") Long id, @Param("repairNum") BigDecimal repairNum, @Param("repairer") Long repairer, @Param("userId") Long userId);

    int updateRepairNum(@Param("id") Long id, @Param("repairNum") BigDecimal repairNum, @Param("repairer") Long repairer, @Param("userId") Long userId);

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

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

    int updateRepairedNumAndStatus(@Param("id") Long id, @Param("repairNum") BigDecimal repairNum, @Param("status") int status, @Param("repairer") String repairer, @Param("userId") Long userId);

    /**
     * 修改维修数量
     *
     * @param id        主键 key
     * @param repairNum 维修数量
     * @param userid    用户id
     */
    int updateRepairedNumTwo(@Param("id") Long id, @Param("repairNum") BigDecimal repairNum, @Param("userId") Long userid);

    /**
     * 修改维修数量和状态
     *
     * @param id        主键 key
     * @param repairNum 维修数量
     * @param userid    用户id
     */
    int updateRepairedNumTwoAndStatus(@Param("id") Long id, @Param("repairNum") BigDecimal repairNum, @Param("status") int status, @Param("userId") Long userid);

    /**
     * 修改报废数量
     *
     * @param id       主键key
     * @param scrapNum 报废数量
     * @param userId   用户id
     */
    int updateScrapNum(@Param("id") Long id, @Param("scrapNum") BigDecimal scrapNum, @Param("userId") Long userId);

    /**
     * 修改报废数量和状态
     *
     * @param id       主键key
     * @param scrapNum 报废数量
     * @param userId   用户id
     */
    int updateScrapNumAndStatus(@Param("id") Long id, @Param("scrapNum") BigDecimal scrapNum, @Param("status") int status, @Param("userId") Long userId);

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

    /**
     * 完成维修--更改维修状态
     *
     * @param ids      主键集合
     * @param userName
     */
    int batchQualified(@Param("ids") ArrayList<Long> ids, @Param("userName") String userName);

    int updateMaMachine(@Param("ids") ArrayList<Long> ids, @Param("userName") String userName);

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

    /**
     * 查询维修人员列表
     */
    List<SysUser> selectUserList();

    /**
     * 修改维修任务状态
     *
     * @param taskList 任务列表集合
     * @param userid   用户id
     */
    int updateTaskStatus(@Param("taskList") List<RepairTask> taskList, @Param("userId") Long userid, @Param("taskStatus") Integer taskStatus);

    int updateSingleTaskStatus(@Param("task") RepairTask task, @Param("userId") Long userid, @Param("taskStatus") Integer taskStatus);

    /**
     * 新增任务
     *
     * @param task 任务信息
     */
    int addTask(RepairTask task);

    /**
     * 查询协议Id
     *
     * @param task 任务信息
     */
    Long getAgreementId(RepairTask task);

    /**
     * 新增 协议与任务关联
     *
     * @param task 任务信息
     */
    int createAgreementTask(RepairTask task);

    /**
     * 查询是否存在未完成维修的
     *
     * @param task 任务信息
     */
    int getUnFinish(RepairTask task);

    /**
     * 新增修饰审核审核数据
     *
     * @param details 数据详情
     */
    int addAuditDetails(RepairTaskDetails details);

    /**
     * 导出维修任务
     */
    List<RepairTask> exportRepairTaskList(RepairTask bean);

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

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


    List<RepairInputDetailsVo> getRepairedList(RepairInputDetailsVo dto);

    List<RepairInputDetailsVo> getRepairedDetailList(RepairInputDetailsVo dto);

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

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

    /**
     * 查询维修明细
     *
     * @param bean
     * @return
     */
    List<RepairPartDetails> getDetailsList(RepairPartDetails bean);

    /**
     * 查询维修审核明细
     *
     * @param details
     * @return
     */
    List<RepairTaskDetails> getAuditDetailsById(RepairTaskDetails details);

    /**
     * 新增维修任务明细
     *
     * @param repairTaskDetail
     * @return
     */
    int insertRepaired(RepairTaskDetails repairTaskDetail);

    /**
     * 查询维修任务明细
     *
     * @param taskList
     * @return
     */
    List<RepairTask> getRepairTaskDetails(@Param("list") List<RepairTask> taskList);

    /**
     * 查询维修任务明细
     *
     * @param details
     * @return
     */
    List<RepairTaskDetails> getRepairDetailsById(RepairTaskDetails details);

    /**
     * 修改维修任务明细
     *
     * @param details
     * @return
     */
    int updateStatus(RepairTaskDetails details);

    /**
     * 查询修试查询-维修配件查询列表
     *
     * @param dto
     * @return
     */
    List<RepairPartVo> selectRepairPartList(RepairPartVo dto);

    /**
     * 查询配件相关信息
     *
     * @param repairPartVo
     * @return
     */
    RepairPartVo selectRepairPartInfo(RepairPartVo repairPartVo);

    /**
     * 查询修试查询-维修配件查询二级列表
     *
     * @param dto
     * @return
     */
    List<RepairPartInfo> selectSecondRepairPartList(RepairPartInfo dto);

    /**
     * 获取维修任务列表--app
     *
     * @param bean
     * @return
     */
    List<RepairPartDetails> getDetailsListApp(RepairPartDetails bean);

    /**
     * 获取配件
     *
     * @param id
     * @return
     */
    List<RepairPartInfo> getLossPart(int id);

    /**
     * 查询报废数和维修数判断是否提交了一次
     *
     * @param id
     * @return
     */
    RepairPartInfo getPartCount(int id);

    /**
     * 查询定损是否把价格已经添加
     *
     * @param repairApplyRecord
     * @return
     */
    int getCostCount(RepairApplyRecord repairApplyRecord);

    /**
     * 获取维修任务机具列表--三级页面详情列表--编码
     *
     * @param bean
     * @return
     */
    List<RepairTaskDetails> getRepairCodeList(RepairTaskDetails bean);

    /**
     * 查询试验记录表数据
     *
     * @param bean
     * @return
     */
    List<RepairTaskDetails> getTestRecordData(RepairTaskDetails bean);

    /**
     * 查询配件
     *
     * @param bean
     * @return
     */
    List<PartType> getPartData(RepairTaskDetails bean);

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

    /**
     * 查询已修和已报废数量
     *
     * @param id
     * @return
     */
    int getRepairedScrapNumById(Long id);

    /**
     * 删除单条维修任务
     *
     * @param id
     * @return
     */
    int deleteRepairById(Long id);

    /**
     * 查询配件数量
     *
     * @param partId
     * @return
     */
    int getPartNum(Long partId);

    /**
     * 获取配件列表
     *
     * @param partId
     * @return
     */
    List<RepairPart> getPartList(Long partId);

    /**
     * 修改配件数量
     *
     * @param currentPart
     * @return
     */
    int updatePartNum(RepairPart currentPart);

    /**
     * 查询维修任务信息
     *
     * @param repairTask
     * @return
     */
    RepairTask selectInfo(RepairTask repairTask);

    /**
     * 查询机具列表--三级页面详情列表
     *
     * @param bean
     * @return
     */
    List<RepairDeviceVO> getAppRepairMaTypeListByTaskIdAndTypeId(RepairTaskDetails bean);

    List<RepairInspection> getRepairInspection(RepairInspection dto);

    List<TestRecord> getTestRecord(TestRecord dto);

    List<RepairTaskDetails> getTestRecordDetails(TestRecord bean);

    List<PartType> getPartDetails(RepairTaskDetails bean1);

    /**
     * 查询机具列表--三级页面详情列表--新
     * @param bean
     * @return
     */
    List<RepairDeviceVO> getAppRepairMaTypeListNew(RepairTaskDetails bean);

    /**
     * 获取机具列表--三级页面详情列表--新
     * @param bean
     * @return
     */
    List<RepairPartDetails> getDetailsListAppTwo(RepairPartDetails bean);

    /**
     * 查询在修工程维修列表
     * @param bean
     * @return
     */
    List<RepairProjectInfo> getRepairProjectList(RepairProjectInfo bean);
}
