Browse Source

根据型号获取个人库记录和商机获取接口修改为jdbc查询,jpa级联查询很慢

dongbw 7 years ago
parent
commit
41b9cacb6a

+ 12 - 12
src/main/java/com/uas/ps/product/service/impl/ProductUsersServiceImpl.java

@@ -1,7 +1,5 @@
 package com.uas.ps.product.service.impl;
 
-import com.uas.platform.core.persistence.criteria.PredicateFactory;
-import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.ps.core.page.PageInfo;
 import com.uas.ps.core.util.CollectionUtils;
 import com.uas.ps.core.util.StringUtils;
@@ -17,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 
@@ -42,6 +42,9 @@ public class ProductUsersServiceImpl implements ProductUsersService {
     @Autowired
     private ProductDao productDao;
 
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
     @Override
     public ModelMap addNewProduct(Product prodInfo) {
         ModelMap map = new ModelMap();
@@ -151,6 +154,7 @@ public class ProductUsersServiceImpl implements ProductUsersService {
      */
     @Override
     public List<ProductUsers> getProductUsersByEnUUAndCmpCode(final Long enUU, final String cmpCode) {
+        long start = System.currentTimeMillis();
         List<ProductUsers> returnList = new ArrayList<>();
         String NONE_KEYWORD = "无";
         // 去掉同一企业下同一个人相同原厂型号的不同物料的记录,保证一个原厂型号只发一条
@@ -159,16 +163,11 @@ public class ProductUsersServiceImpl implements ProductUsersService {
         if (StringUtils.isEmpty(cmpCode) || NONE_KEYWORD.equals(cmpCode)) {
             return returnList;
         }
-        List<ProductUsers> productUsersList = productUsersDao.findAll(new Specification<ProductUsers>() {
-            @Override
-            public Predicate toPredicate(Root<ProductUsers> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
-                final PredicateFactory<ProductUsers> factory = new PredicateFactory<>();
-                factory.add(PredicateUtils.ne("enuu", enUU, false));
-                factory.add(PredicateUtils.eq("product.cmpCode", cmpCode, false));
-                query.where(factory.toPredicate(root, query, cb));
-                return null;
-            }
-        });
+        String sql = "select pu_id as id,pu_date as date,pu_enuu as enuu, pu_erpid as erpid, pu_useruu as useruu from product$users cross join products where pu_prid = pr_id and pu_enuu <> "
+                + enUU + " and pr_cmpcode = '" + cmpCode + "'";
+        List<ProductUsers> productUsersList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<ProductUsers>(ProductUsers.class));
+        System.out.println("search" + (System.currentTimeMillis() - start));
+        start = System.currentTimeMillis();
         for (ProductUsers productUsers : productUsersList) {
             if (null != productUsers.getEnuu() && null != productUsers.getUseruu()) {
                 String receiverInfo = String.valueOf(productUsers.getEnuu()) + String.valueOf(productUsers.getUseruu());
@@ -178,6 +177,7 @@ public class ProductUsersServiceImpl implements ProductUsersService {
                 }
             }
         }
+        System.out.println("end" + (System.currentTimeMillis() - start));
         return returnList;
     }