package com.crunii.micro.domain.repo.main;

import com.crunii.micro.domain.common.BaseRepo;
import com.crunii.micro.domain.entity.main.TsmPropertyValue;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author 田平 create 2019-01-28 05:01:09
 */
@Repository
public interface TsmPropertyValueRepo extends BaseRepo<TsmPropertyValue, Integer> {

    /**
     * 通过属性编码查找静态值属性数据
     * @param propCode 属性编码
     * @return 返回静态值属性数据
     */
    TsmPropertyValue findTsmPropertyValueByPropCode(String propCode);

    /**
     * 根据propId查询下所有静态值
     * @param propId id
     * @param state 状态
     * @return
     */
    List<TsmPropertyValue> findByPropIdAndState(Integer propId,Integer state);

    /**
     * 通过属性编码查找静态值属性数据
     * @param valueCode 属性值
     * @param propCode 属性编码
     * @return 返回静态值属性数据
     */
    TsmPropertyValue findTsmPropertyValueByValueCodeAndPropCode(String valueCode,String propCode);

    /**
     * 通过属性编码查找静态值属性数据
     * @param propCode 属性编码
     * @param state 是否有效
     * @return List<TsmPropertyValue>
     */
    List<TsmPropertyValue> findAllByPropCodeAndState(String propCode,int state);

    /**
     * 通过属性值和属性编码以及状态查询属性
     * @param propCode 属性编码
     * @param valueCode 属性值
     * @param state 是否有效
     * @return List<TsmPropertyValue>
     */
    List<TsmPropertyValue> findByPropCodeAndValueCodeAndState(String propCode,String valueCode,int state);

    TsmPropertyValue findByValueId(int valueId);

    void deleteByValueId(int valueId);

    @Query(value ="SELECT * FROM tsm_property_value  WHERE prop_id = ?1",nativeQuery = true)
    List<TsmPropertyValue> findMaxSortIdByPropId(int propId);
    /**
     * 通过属性值和属性编码以及状态查询属性
     * @param propCode 属性编码
     * @return List<TsmPropertyValue>
     */
    @Query(value = "select a.* from tsm_property_value a left join tsm_property b on a.prop_id=b.prop_id where b.prop_code=?1 and a.state=1",nativeQuery = true)
    List<TsmPropertyValue> findByPropCode(String propCode);

    /**
     * 查询属性名称
     * @param valueName
     * @param propCode
     * @return
     */
    TsmPropertyValue findTsmPropertyValueByValueNameAndPropCodeAndState(String valueName,String propCode,int state);


    List<TsmPropertyValue> findByValueCodeInAndState(List<String> valueCode,int state);

}
