package com.steerinfo.meterwork.meterworkcaractualfirst.mapper;

import com.steerinfo.framework.mapper.IBaseMapper;
import com.steerinfo.meterwork.dto.*;
import com.steerinfo.meterwork.meterworkcaractual.model.MeterWorkCarActual;
import com.steerinfo.meterwork.meterworkcaractualfirst.model.MeterWorkCarActualFirst;
import com.steerinfo.pretrack.pretrackscale.model.PreTrackScale;
import feign.Param;
import io.micrometer.core.instrument.Meter;
import org.apache.ibatis.annotations.Mapper;

import java.util.*;

@Mapper
public interface MeterWorkCarActualFirstMapper extends IBaseMapper<MeterWorkCarActualFirst, String> {
    String getNewID(@Param(value = "afl") String afl);

    List<MeterWorkCarActualFirst> selectView(Map<Objects, String> parmas);

    MeterWorkCarActualFirst selectAndMatch(@Param(value = "actualFirstNo") String actualFirstNo, @Param(value = "predictionNo") String predictionNo);

    MeterWorkCarActualFirst selectAndRemove(@Param(value = "actualFirstNo") String actualFirstNo);

    List<MeterWorkCarActualFirst> selectTa(Map<String, Object> parmas);

    List<MeterWorkCarActualFirst> selectByCarNo(@Param(value = "carNo") String carNo);

    List<MeterWorkCarActualFirst> selectNet(@Param(value = "weightType") String weightType, @Param(value = "carNo") String carNo);

    List<StaffPerformanceAnalysis> analysis(HashMap<String, Object> obj);

    List<UtensilDto> utensil(HashMap<String, Object> obj);

    List<MeterTypeDto> meterType(HashMap<String, Object> obj);

    List<TimesDto> daily(HashMap<String, Object> obj);

    List<TimesDto> period(HashMap<String, Object> obj);

    List<MeterWorkCarActualFirst> detailed(HashMap<String, Object> obj);

    List<AbnormalDto> abnormal(HashMap<String, Object> obj);

    List<MeterWorkCarActualFirst> getByAbnormal(HashMap<String, Object> obj);

    /*List<MeterWorkCarActualFirst> selectForAppLoad(ArrayList<String> id);*/

    List<MeterWorkCarActualFirst> selectForAppLoad(Map<String, Object> parmas);

    /**
     * 已确认但是未结净的卸货数据
     * @param map
     * @return
     */
    List<MeterWorkCarActualFirst> selectForAppLoadFirst(Map<String, Object> map);

    /**
     * 查询当天未使用的液碱的销售出厂的预报数据
     * @return
     */
    List<MeterWorkCarActualFirst> selectInvalidNaOHData();

    /**
     * 查询：按时间排序
     * @param parmas
     * @return
     */
    List<MeterWorkCarActualFirst> queryOrderByTime(HashMap parmas);

    /**
     * 根据传入时间和车号，查询给定时间段去重车号
     * @param obj
     * @return
     */
    List<MeterWorkCarActualFirst> distinctCarNo(HashMap<String, Object> obj);

    void repairPre(Map<String, Object> map);

    List<MeterWorkCarActualFirst> likeByDesc(Map<String, Object> params);
    List<MeterWorkCarActualFirst> carFirstDataDetail(Map<String, Object> params);
    List<MeterWorkCarActualFirst> ApplikeByDesc(Map<String, Object> params);

    List<MeterWorkCarActualFirst> queryForTimeInterval(Map<String, Object> params);

    List<MeterWorkCarActualFirst> selectById(List<String> actualNoList);

    int countFirstByCar(HashMap params);

    //根据时间查询所有秤点的一次毛重、一次皮重、一次期限皮、一次有效、一次作废
    List<MeterWorkCarActualFirst> countAllState(Map<String, Object> params);
    List<HashMap> countDayAllState(Map<String, Object> params);
    List<MeterWorkCarActualFirst> allStateView(Map<String, Object> params);

    List<String> selectRule1PredictionNos();

    List<String> selectRule2PredictionNos();

    List<String> selectRule3PredictionNos();

    List<String> selectRule4PredictionNos();

    List<String> selectRule5PredictionNos();

    /**
     * 规则1：更新一次表 '有效(1)' → '已结净(2)'
     * @param actualFirstNo 一次实绩编号
     */
    int updateFirstByRule1(@Param("actualFirstNo") String actualFirstNo);

    /**
     * 规则2：更新预报表 '正使用(1)' → '已使用(2)'
     * @param predictionNo 预报编号
     */
    int updatePredictionByRule2(@Param("predictionNo") String predictionNo);

    /**
     * 规则3：更新预报表 '未使用(4)' → '正使用(1)'
     * @param predictionNo 预报编号
     */
    int updatePredictionByRule3(@Param("predictionNo") String predictionNo);

    /**
     * 规则4：更新预报表 '正使用(1)/已使用(2)' → '未使用(4)'
     * @param predictionNo 预报编号
     */
    int updatePredictionByRule4(@Param("predictionNo") String predictionNo);

    /**
     * 规则5：更新一次表 '已结净(2)' → '有效(1)'（回退）
     * @param actualFirstNo 一次实绩编号
     */
    int updateFirstByRule5(@Param("actualFirstNo") String actualFirstNo);
}
