package com.uas.search.service.impl; import static com.uas.search.constant.SearchConstants.GOODS_TABLE_NAME; import static com.uas.search.constant.SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME; import static com.uas.search.constant.SearchConstants.TRADE_GOODS_TABLE_NAME; import com.uas.search.constant.SearchConstants; import com.uas.search.dao.GoodsDao; import com.uas.search.model.Brand; import com.uas.search.model.Component; import com.uas.search.model.Goods; import com.uas.search.model.Kind; import com.uas.search.model.Products; import com.uas.search.model.Property; import com.uas.search.model.PropertyValue; import com.uas.search.model.Store; import com.uas.search.model.TradeGoods; import com.uas.search.model.V_Products; import com.uas.search.service.JdbcService; import com.uas.search.util.CollectionUtils; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.Column; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; /** * * Created by wangyc on 2018/6/11. * * @version 2018/6/11 15:47 wangyc * @param */ @Service public class JdbcServiceImpl implements JdbcService{ private final JdbcTemplate jdbcTemplate; private final GoodsDao goodsDao; @Autowired public JdbcServiceImpl(JdbcTemplate jdbcTemplate, GoodsDao goodsDao) { this.jdbcTemplate = jdbcTemplate; this.goodsDao = goodsDao; } @Override public Long getTotalElements(String tablename) { return jdbcTemplate.queryForObject(String.format("select count(1) from %s", tablename), Long.class); } @Override public List getLimitId(String tablename, String direction, String sortField, Long start, Integer size) { List ids = new ArrayList<>(); ids.add(jdbcTemplate.queryForObject(String.format("select %s from %s order by %s limit %s,1", sortField, tablename, sortField, start), Long.class)); ids.add(jdbcTemplate.queryForObject(String.format("select %s from %s order by %s limit %s,1", sortField, tablename, sortField, start + size - 1), Long.class)); return ids; } @Override public String abstractTransform(Class className, String property) throws NoSuchFieldException { Field id = className.getDeclaredField("id"); Annotation annotation = id.getAnnotation(Column.class); return ((Column) annotation).name(); } @Override public List getData(String tableName, Long startId, Long endId, String sortField, String direct) { String sql = String.format("select * from %s where %s between %d and %d order by %s %s", tableName, sortField, startId, endId, sortField, direct); List data = null; // 器件索引 if (SearchConstants.COMPONENT_TABLE_NAME.equals(tableName)) { data = queryComponents(sql, true); } // Product索引 if (PRODUCTS_PRIVATE_TABLE_NAME.equals(tableName)) { data = queryVProducts(sql); } // Goods索引 if (TRADE_GOODS_TABLE_NAME.equals(tableName)) { data = queryGoods(sql); } return data; } /** * 获取Component * @param sql sql * @param needProperties 是否需要获取属性值 * @return */ private List queryComponents(String sql, boolean needProperties) { List components = jdbcTemplate.query(sql, new Component()); String kindSql = "select * from product$kind where ki_id = "; String brandSql = "select * from product$brand where br_id = "; String propertyValueSql = "select * from product$propertyvalue where pv_componentid = "; String propertySql = "select * from product$property where pt_id = "; if (!CollectionUtils.isEmpty(components)) { for (Component component : components) { if (component.getKindId() != null) { List kinds = jdbcTemplate.query(kindSql + component.getKindId(), new Kind()); if (!CollectionUtils.isEmpty(kinds)) { component.setKind(kinds.get(0)); } } if (component.getBrandId() != null) { List brands = jdbcTemplate.query(brandSql + component.getBrandId(), new Brand()); if (!CollectionUtils.isEmpty(brands)) { component.setBrand(brands.get(0)); } } if (needProperties) { List propertyValues = jdbcTemplate.query(propertyValueSql + component.getId(), new PropertyValue()); if (!CollectionUtils.isEmpty(propertyValues)) { Set propertyValueSet = new HashSet<>(); for (PropertyValue value : propertyValues) { List properties = jdbcTemplate.query(propertySql + value.getPropertyid(), new Property()); if (!CollectionUtils.isEmpty(properties)) { value.setProperty(properties.get(0)); } propertyValueSet.add(value); } component.setProperties(propertyValueSet); } } } } return (List) components; } /** * 获取V_Products * @param sql sql * @return */ private List queryVProducts(String sql) { return (List) jdbcTemplate.query(sql, new V_Products()); } /** * 获取Goods * @param sql sql * @return */ private List queryGoods(String sql) { return jdbcTemplate.query(sql, new TradeGoods()); } }