package com.bonus.material.devchange.mapper;

import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.devchange.domain.*;
import com.bonus.material.device.domain.vo.DevInfoPropertyVo;
import com.bonus.material.device.domain.vo.DevInfoVo;
import com.bonus.material.toolLedger.domain.ToolLedgerEntity;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

@Mapper
public interface DevChangeMapper {


    Integer getMaxFeature();

    /**
     * 查询设备列表集合
     *
     * @param devInfo
     * @return
     */
    List<DevChangeVo> selectDevInfoList(DevChangeVo devInfo);

    /**
     * 查询设备集合
     *
     * @param vo
     * @return
     */
    List<DevInfoPropertyVo> getDevPropertyList(DevChangeVo vo);

    /**
     * 更新数据
     *
     * @param vo
     */
    void updateJson(DevChangeVo vo);

    /**
     * 查询工程下拉选集合
     *
     * @param vo
     * @return
     */
    List<JjProjectVo> getProList(JjProjectVo vo);

    /**
     * xinz
     *
     * @param vo
     * @return
     */
    int addChangeInfo(CsDeviceChangeVo vo);

    /**
     * 新增设备变更记录数据
     *
     * @param deviceChangeDetailsVo
     */
    int addDetailsInfo(CsDeviceChangeDetailsVo deviceChangeDetailsVo);

    /**
     * @param vo
     */
    void updateDevInfo(CsDeviceChangeVo vo);

    void updateDevInfoData(CsDeviceChangeVo vo);

    /**
     * 查询设备变更前状态
     *
     * @param devId
     * @return
     */
    String getChangeStatus(String devId);

    /**
     * 查询 设备变更记录
     *
     * @param vo
     * @return
     */
    List<CsDeviceChangeVo> getDevChangeList(CsDeviceChangeVo vo);

    /**
     * 获取变更前设备
     *
     * @param devId
     * @return
     */
    String getChangeUnit(String devId);

    /**
     * 查询 设备单位
     *
     * @param devId
     * @return
     */
    String getChangeUnitById(String devId);

    /**
     * 查询出库单
     *
     * @param vo
     * @return
     */
    List<DevChangeVo> getDevDetails(CsDeviceChangeDetailsVo vo);

    /**
     * 电压等级
     *
     * @param vo
     * @return
     */
    @MapKey("value")
    List<Map<String, Object>> getVoltageLevel(JjProjectVo vo);

    /**
     * 修改详情
     *
     * @param deviceChangeDetailsVo
     */
    void addDevChangeDetails(DevChangeDetailsVo deviceChangeDetailsVo);

    /**
     * 查询数据
     *
     * @param vo
     * @return
     */
    List<DevChangeDetailsVo> getDevChangeDetailsList(DevChangeDetailsVo vo);

    /**
     * @param voo
     */
    void deleteDevChangeDetails(DevChangeDetailsVo voo);

    /**
     * 修改数量
     *
     * @param newNum
     */
    void updateChangeDetailsNum(DevChangeDetailsVo voo);

    /**
     * 获取添加设备详情
     *
     * @param dto
     * @return
     */
    List<CsDeviceDetails> getDevDetailsInfo(CsDeviceDetails dto);

    /**
     * 获取申请编号
     *
     * @param year
     * @param month
     * @param taskType
     * @return
     */
    int getMonthMaxOrderByDate(@Param("year") String year, @Param("month") String month, @Param("taskType") Integer taskType);

    /**
     * @param devInfo
     * @return
     */
    int addChangeInfoNew(CsDeviceInfo devInfo);

    /**
     * 添加设备详情
     *
     * @param devDetailsList
     * @return
     */
    int addDetails(List<CsDeviceDetails> devDetailsList);

    /**
     * 修改设备信息
     *
     * @param devInfo
     * @return
     */
    int updateCsDevInfo(CsDeviceInfo devInfo);

    /**
     * 删除设备详情
     *
     * @param id
     * @return
     */
    int deleteChangeDetails(Long id);

    /**
     * 根据id查询主任务表数据
     *
     * @param dto
     * @return
     */
    CsDeviceInfo getDevInfoById(CsDeviceDetails dto);

    /**
     * 根据id查询设备详情表数据
     *
     * @param dto
     * @return
     */
    List<CsDeviceDetails> getDevDetailsById(CsDeviceDetails dto);

    /**
     * 删除主任务
     *
     * @param csDeviceInfo
     * @return
     */
    int deleteChangeInfo(CsDeviceInfo csDeviceInfo);

    /**
     * 获取申请一级列表
     *
     * @param dto
     * @return
     */
    List<CsDeviceInfo> getList(CsDeviceInfo dto);

    /**
     * 审批
     *
     * @param csDeviceInfo
     * @return
     */
    int approve(CsDeviceInfo csDeviceInfo);

    /**
     * 获取装备类型
     *
     * @param csDeviceDetails
     * @return
     */
    CsDeviceDetails getTypeMaDevInfo(CsDeviceDetails csDeviceDetails);

    /**
     * 获取工具类型
     *
     * @param csDeviceDetails
     * @return
     */
    CsDeviceDetails getTypeToolInfo(CsDeviceDetails csDeviceDetails);

    List<CsDeviceInfo> getOutboundList(CsDeviceInfo dto);

    Integer out(CsDeviceDetails entity);

    Integer outCancel(CsDeviceDetails entity);

    Integer outCancelAll(CsDeviceDetails entity);

    Integer outAll(CsDeviceDetails entity);

    void updateGj(CsDeviceDetails entity);

    void updateZb(CsDeviceDetails entity);

    List<CsDeviceDetails> getOutAllList(CsDeviceDetails dto);

    List<CsDeviceDetails> getDevDetailsInfoTool(CsDeviceDetails dto);

    List<CsDeviceDetails> getDevDetailsInfoEquipment(CsDeviceDetails dto);

    List<CsDeviceChange> getDevChangeRList(CsDeviceChange vo);

    CsDeviceInfo getOrderById(CsDeviceDetails dto);

    List<CsDeviceDetails> getOrderDetailsById(CsDeviceDetails dto);

    CsDeviceDetails getOrderDetailsMaDevInfo(CsDeviceDetails csDeviceDetails);

    CsDeviceDetails getOrderDetailsTypeToolInfo(CsDeviceDetails csDeviceDetails);

    void updateOrderZb(CsDeviceDetails entity);

    void updateOrderGj(CsDeviceDetails entity);

    Integer orderOut(CsDeviceDetails entity);

    Integer orderOutAll(CsDeviceDetails entity);

    Integer orderOutCancel(CsDeviceDetails entity);

    Integer orderOutCancelAll(CsDeviceDetails entity);

    List<CsDeviceDetails> getOrderOutAllList(CsDeviceDetails entity);


    BigDecimal getToolNum(CsDeviceDetails entity);

    BigDecimal getMaNum(CsDeviceDetails entity);

    DevChangeVo getChange(CsDeviceChangeDetailsVo vo);
}
