소스 검색

Merge remote-tracking branch 'origin/dev-mysql' into dev-mysql

# Conflicts:
#	src/main/java/com/uas/platform/b2c/prod/product/brand/dao/BrandDao.java
#	src/main/java/com/uas/platform/b2c/prod/product/component/dao/ComponentInfoDao.java
wangdy 8 년 전
부모
커밋
b38fa0e5f4
22개의 변경된 파일462개의 추가작업 그리고 175개의 파일을 삭제
  1. 111 0
      src/main/java/com/uas/platform/b2c/common/search/constant/SearchParam.java
  2. 22 0
      src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java
  3. 14 0
      src/main/java/com/uas/platform/b2c/common/search/dao/SearchHistoryDao.java
  4. 3 2
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java
  5. 1 1
      src/main/java/com/uas/platform/b2c/common/search/rpc/service/SearchService.java
  6. 14 0
      src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java
  7. 161 138
      src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java
  8. 23 14
      src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/ProductDetailERPServiceImpl.java
  9. 2 1
      src/main/java/com/uas/platform/b2c/external/erp/commodity/util/ModelConverter.java
  10. 14 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java
  11. 2 2
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  12. 13 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java
  13. 8 0
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java
  14. 29 1
      src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java
  15. 3 0
      src/main/java/com/uas/platform/b2c/prod/product/component/dao/ComponentInfoDao.java
  16. 3 3
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentGoodsServiceImpl.java
  17. 3 3
      src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentServiceImpl.java
  18. 1 2
      src/main/resources/dev/jdbc.properties
  19. 0 4
      src/main/resources/prod/jdbc.properties
  20. 1 2
      src/main/resources/test/jdbc.properties
  21. 14 0
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js
  22. 20 2
      src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_erp.html

+ 111 - 0
src/main/java/com/uas/platform/b2c/common/search/constant/SearchParam.java

@@ -0,0 +1,111 @@
+package com.uas.platform.b2c.common.search.constant;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import com.uas.search.model.Sort;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SearchParam implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private int page;
+    private int size;
+    private Map<FilterField, Object> filters;
+    private List<Sort> sort;
+
+    public SearchParam() {
+    }
+
+    public SearchParam(int page, int size) {
+        this.page = page;
+        this.size = size;
+    }
+
+    public int getPage() {
+        return this.page;
+    }
+
+    public void setPage(int page) {
+        this.page = page;
+    }
+
+    public int getSize() {
+        return this.size;
+    }
+
+    public void setSize(int size) {
+        this.size = size;
+    }
+
+    public Map<SearchParam.FilterField, Object> getFilters() {
+        return this.filters;
+    }
+
+    public void setFilters(Map<SearchParam.FilterField, Object> filters) {
+        this.filters = filters;
+    }
+
+    public void filter(SearchParam.FilterField key, Object value) {
+        if(this.filters == null) {
+            this.filters = new HashMap();
+        }
+
+        this.filters.put(key, value);
+    }
+
+    public void removeFilter(SearchParam.FilterField key) {
+        if(this.filters != null) {
+            this.filters.remove(key);
+        }
+
+    }
+
+    public List<Sort> getSort() {
+        return this.sort;
+    }
+
+    public void setSort(List<Sort> sort) {
+        this.sort = sort;
+    }
+
+    public String toString() {
+        return "PageParams [page=" + this.page + ", size=" + this.size + ", filters=" + this.filters + ", sort=" + this.sort + "]";
+    }
+
+    public static enum FilterField {
+        COMPONENT_KINDID,
+        COMPONENT_BRANDID,
+        COMPONENT_PROPERTIES,
+        COMPONENT_HAS_RESERVE,
+        COMPONENT_HAS_SAMPLE,
+        COMPONENT_HAS_ORIGINAL,
+        COMPONENT_HAS_INACTION_STOCK,
+        GOODS_KINDID,
+        GOODS_BRANDID,
+        GOODS_STORE_TYPE,
+        GOODS_CRNAME,
+        GOODS_MINPRICERMB,
+        GOODS_MAXPRICERMB,
+        GOODS_MINPRICEUSD,
+        GOODS_MAXPRICEUSD,
+        GOODS_STATUS,
+        ORDER_STATUS,
+        ORDER_BUYER_UU,
+        ORDER_BUYER_EN_UU,
+        ORDER_SELLER_EN_UU,
+        ORDER_MIN_TIME,
+        ORDER_MAX_TIME;
+
+        private FilterField() {
+        }
+    }
+}

+ 22 - 0
src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java

@@ -7,6 +7,7 @@ import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.StockInOutHistService;
+import com.uas.platform.b2c.prod.product.component.modal.ComponentInfo;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.presale.service.StoreFocusService;
@@ -211,6 +212,20 @@ public class SearcherController {
 		map = searcherService.searchComponent(w, page);
 		return map;
 	}
+	/**
+	 * 分页按首字母搜索器件
+	 *
+	 * @param w 关键词
+	 * @param page 分页参数
+	 * @return
+	 * @throws InterruptedException
+	 * @throws IOException
+	 */
+	@RequestMapping(value = "/component/first", method = RequestMethod.GET)
+	@ResponseBody
+	public Page<ComponentInfo> searchComponentByFirst(String w, PageParams page) {
+		return searcherService.searchComponentByFirst(w, page);
+	}
 
 	/**
 	 * 器件搜索结果的类目统计
@@ -358,4 +373,11 @@ public class SearcherController {
 			return searchHistoryDao.findByUserUUAndUserEnuuOrderBySearchTimeDesc(SystemSession.getUser().getUserUU(),SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
 		}
 	}
+
+	@RequestMapping(value = "/searchHistory", method = RequestMethod.DELETE)
+	@ResponseBody
+	public int deleteSearchHistory(HttpServletRequest request){
+		SystemSession.setUser((User)request.getSession().getAttribute("user"));
+		return searcherService.deleteSearchHistoryByuserUUAndenUU();
+	}
 }

+ 14 - 0
src/main/java/com/uas/platform/b2c/common/search/dao/SearchHistoryDao.java

@@ -3,7 +3,11 @@ package com.uas.platform.b2c.common.search.dao;
 import com.uas.platform.b2c.common.search.model.SearchHistory;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -16,4 +20,14 @@ public interface SearchHistoryDao extends JpaSpecificationExecutor<SearchHistory
     List<SearchHistory> findByUserUUAndUserEnuuOrderBySearchTimeDesc(Long userUU,Long userEnuu);
 
     List<SearchHistory> findByKeywordAndUserUUAndUserEnuu(String keyword,Long userUU,Long userEnuu);
+
+    /**
+     * 根据用户企业删除搜索记录
+     * @param userUU
+     * @param userEnuu
+     */
+    @Transactional
+    @Modifying
+    @Query(value = "delete from SearchHistory s where s.userUU =:userUU and s.userEnuu = :enUU")
+    int deleteByUserUUAndUserEnuu(@Param("userUU") Long userUU, @Param("enUU") Long userEnuu);
 }

+ 3 - 2
src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.common.search.rpc.service.Impl;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.uas.platform.b2c.common.search.constant.SearchUrl;
 import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.core.config.SysConf;
@@ -91,14 +92,14 @@ public class SearchServiceImpl implements SearchService{
     }
 
     @Override
-    public SPage<Map<String, List<Integer>>> getBrands(String keyword, Integer page, Integer size) throws SearchException {
+    public SPage<Map<String, Object>> getBrands(String keyword, Integer page, Integer size) throws SearchException {
         Map<String, Object> map = initSearchMap(keyword, page, size);
         String str = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.BRAND_INFO_URL, String.class, map);
         if(StringUtils.isEmpty(str)) {
             return null;
         }else {
             try {
-                SPage<Map<String, List<Integer>>> sPage = FastjsonUtils.fromJson(str, SPage.class);
+                SPage<Map<String, Object>> sPage = FastjsonUtils.fromJson(str, SPage.class);
                 return sPage;
             }catch (Exception e) {
                 e.printStackTrace();

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/search/rpc/service/SearchService.java

@@ -21,7 +21,7 @@ public interface SearchService {
 
     SPage<Long> getBrandIds(String keyword, Integer page, Integer size) throws SearchException;
 
-    SPage<Map<String, List<Integer>>> getBrands(String keyword, Integer page, Integer size) throws SearchException;
+    SPage<Map<String, Object>> getBrands(String keyword, Integer page, Integer size) throws SearchException;
 
     Map<String, Object> getComponentIds(String keyword, PageParams var2) throws SearchException;
 

+ 14 - 0
src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java

@@ -1,7 +1,9 @@
 package com.uas.platform.b2c.common.search.service;
 
+import com.uas.platform.b2c.prod.product.component.modal.ComponentInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.search.exception.SearchException;
+import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
@@ -49,6 +51,17 @@ public interface SearcherService {
 	 * @throws IOException
 	 */
 	public ModelMap searchComponent(String keyword, PageParams page);
+
+	/**
+	 * 首字母搜索器件
+	 *
+	 * @param keyword 关键词
+	 * @param page 分页参数
+	 * @return total, 搜索结果总数; page, 页码; size, 每页个数; components, 搜索结果集
+	 * @throws InterruptedException
+	 * @throws IOException
+	 */
+	public Page<ComponentInfo> searchComponentByFirst(String keyword, PageParams page);
 	/**
 	 * 智能搜索批次
 	 *
@@ -139,4 +152,5 @@ public interface SearcherService {
 	 */
 	public List<Map<String, Object>> getSimilarBrands(String brandName);
 
+	public int deleteSearchHistoryByuserUUAndenUU();
 }

+ 161 - 138
src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.common.search.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.common.search.constant.SearchParam;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.search.dao.SearchHistoryDao;
 import com.uas.platform.b2c.common.search.model.SearchHistory;
@@ -27,6 +28,8 @@ import com.uas.platform.b2c.common.search.util.Sort;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.mobile.device.DeviceResolver;
 import org.springframework.mobile.device.LiteDeviceResolver;
 import org.springframework.stereotype.Service;
@@ -48,27 +51,26 @@ import java.util.Map.Entry;
 @Service
 public class SearcherServiceImpl implements SearcherService {
 
-    @Autowired
-    private ComponentInfoDao componentInfoDao;
+	@Autowired
+	private ComponentInfoDao componentInfoDao;
 
-    @Autowired
-    private ComponentGoodsDao componentGoodsDao;
+	@Autowired
+	private ComponentGoodsDao componentGoodsDao;
 
-    @Autowired
-    private SearchService searchService;
+	@Autowired
+	private SearchService searchService;
 
-    @Autowired
-    private BrandDao brandDao;
+	@Autowired
+	private BrandDao brandDao;
 
-    @Autowired
-    private GoodsDao goodsDao;
+	@Autowired
+	private GoodsDao goodsDao;
 
-    @Autowired
-    private SearchHistoryDao searchHistoryDao;
+	@Autowired
+	private SearchHistoryDao searchHistoryDao;
 
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    private final DeviceResolver deviceResolver = new LiteDeviceResolver();
+	private Logger logger = LoggerFactory.getLogger(getClass());
+	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 
     private final int DEFAULT_PAGE = 1;
 
@@ -109,7 +111,7 @@ public class SearcherServiceImpl implements SearcherService {
     @Override
     public ModelMap searchBrand(String keyword, String field) {
         ModelMap map = new ModelMap();
-        SPage<Map<String, List<Integer>>> brands = null;
+        SPage<Map<String, Object>> brands = null;
         try {
             brands = searchService.getBrands(keyword, DEFAULT_PAGE, DEFAULT_SIZE);
         } catch (SearchException e) {
@@ -120,119 +122,134 @@ public class SearcherServiceImpl implements SearcherService {
         return map;
     }
 
-    /**
-     * 智能搜索器件
-     *
-     * @param keyword
-     * @return
-     * @throws InterruptedException
-     * @throws IOException
-     */
-    @SuppressWarnings("unchecked")
-    @Override
-    public ModelMap searchComponent(String keyword, PageParams page) {
-        ModelMap map = new ModelMap();
-        Map<String, Object> results = new HashMap<>();
-        try {
-            results = searchService.getComponentIds(keyword, convertPageParams(page));
-        } catch (SearchException e) {
-            throwSystemException(e);
-        }
-        List<Long> componentIds = (List<Long>) results.get("componentIds");
-        if (!CollectionUtils.isEmpty(componentIds)) {
-            List<ComponentInfo> components = componentInfoDao
-                    .findByIdsInOrder(componentIds.toArray(new Long[componentIds.size()]));
-            map.put("components", components);// 当前页器件内容
-        }
-        map.put("total", results.get("total"));// 搜索结果总数
-        map.put("page", results.get("page"));// 当前页面
-        map.put("size", results.get("size"));// 每页个数
-        return map;
-    }
+	/**
+	 * 首字母搜索器件
+	 *
+	 * @param keyword
+	 * @return
+	 * @throws InterruptedException
+	 * @throws IOException
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Page<ComponentInfo> searchComponentByFirst(String keyword, PageParams page) {
+		Pageable pageable = new PageInfo(page);
+		return componentInfoDao.findByFirst(keyword,pageable);
+	}
 
-    /**
-     * 智能搜索批次
-     *
-     * @param keyword
-     * @param page
-     * @return
-     * @throws InterruptedException
-     * @throws IOException
-     */
-    @SuppressWarnings("unchecked")
-    @Override
-    public ModelMap searchComponentGoods(String keyword, PageParams page, HttpServletRequest request) {
-        if (this.deviceResolver.resolveDevice(request).isMobile()) {
-            SystemSession.setUser((User) request.getSession().getAttribute("user"));
-            if (null != SystemSession.getUser() && null != SystemSession.getUser().getUserUU()) {
-                SearchHistory searchHistory = null;
-                List<SearchHistory> searchHistories = searchHistoryDao.findByKeywordAndUserUUAndUserEnuu(keyword, SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null);
-                if (searchHistories.size() > 0) {
-                    searchHistory = searchHistories.get(0);
-                } else {
-                    searchHistory = new SearchHistory();
-                }
-                searchHistory.setKeyword(keyword);
-                searchHistory.setSearchTime(new Date(System.currentTimeMillis()));
-                searchHistory.setUserUU(SystemSession.getUser().getUserUU());
-                searchHistory.setUserEnuu(SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null);
-                searchHistoryDao.save(searchHistory);
-                searchHistories = searchHistoryDao.findByUserUUAndUserEnuuOrderBySearchTimeDesc(SystemSession.getUser().getUserUU(), SystemSession.getUser().getEnterprise() != null ? SystemSession.getUser().getEnterprise().getUu() : null);
-                if (searchHistories.size() > 10) {
-                    searchHistoryDao.delete(searchHistories.subList(10, searchHistories.size()));
-                }
-            }
-        }
-        ModelMap map = new ModelMap();
-        Map<String, Object> results = null;
-        //Map<String, Object> results = new HashMap<>();
-        try {
-            results = searchService.getGoodsIds(keyword, convertPageParams(page));
-        } catch (SearchException e) {
-            throwSystemException(e);
-        }
-        //统计精准匹配到品牌的数量(便于展示唯一的品牌)
-        ModelMap brandMap = searchBrand(keyword, null);
-        List<Map<String, Object>> brands = (List) brandMap.get("brands");
-        if (!CollectionUtils.isEmpty(brands)) {
-            for (Map<String, Object> brand : brands) {
-                if (keyword.equalsIgnoreCase(brand.get("nameCn").toString()) || keyword.equalsIgnoreCase(brand.get("nameEn").toString())) {
-                    map.put("brands", brand);
-                }
-            }
-        }
-        if ((int) results.get("total") == 0) {
-            map.put("total", results.get("total"));// 搜索结果总数
-            map.put("page", results.get("page"));// 当前页面
-            map.put("size", results.get("size"));// 每页个数
-            map.put("components", new ArrayList<>());// 当前页器件内容
-            return map;
-        }
-        List<Integer> componentIds = (List<Integer>) results.get("componentIds");
-        List<Integer> goodsIds = (List<Integer>) results.get("goodsIds");
-        List<ComponentGoods> components = new ArrayList<>();
-        if (!CollectionUtils.isEmpty(componentIds)) {
-            for (int i = 0; i < componentIds.size(); i++) {
-                Long cid = null;
-                if (!StringUtils.isEmpty
-                        (componentIds.get(i))) {
-                    cid = Long.valueOf(componentIds.get(i).toString());
-                }
-                Long gid = goodsIds.get(i) == null ? 0L : Long.valueOf(goodsIds.get(i).toString());
-                if ((cid == null) && (gid != 0L)) {
-                    Goods goods = goodsDao.findOne(gid);
-                    if (goods != null) {
-                        components.add(new ComponentGoods(goods));
-                    }
-                } else if (cid != null) {
-                    ComponentGoods componentGoods = componentGoodsDao.findByCmpIdAndGoId(cid, gid);
-                    if (componentGoods != null) {
-                        components.add(componentGoods);
-                    }
-                }
-            }
-            map.put("components", components);// 当前页器件内容
-        }
+
+	/**
+	 * 智能搜索器件
+	 *
+	 * @param keyword
+	 * @return
+	 * @throws InterruptedException
+	 * @throws IOException
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public ModelMap searchComponent(String keyword, PageParams page) {
+		ModelMap map = new ModelMap();
+		Map<String, Object> results = new HashMap<>();
+		try {
+			results = searchService.getComponentIds(keyword, convertPageParams(page));
+		} catch (SearchException e) {
+			throwSystemException(e);
+		}
+		List<Long> componentIds = (List<Long>) results.get("componentIds");
+		if (!CollectionUtils.isEmpty(componentIds)) {
+			List<ComponentInfo> components = componentInfoDao
+					.findByIdsInOrder(componentIds.toArray(new Long[componentIds.size()]));
+			map.put("components", components);// 当前页器件内容
+		}
+		map.put("total", results.get("total"));// 搜索结果总数
+		map.put("page", results.get("page"));// 当前页面
+		map.put("size", results.get("size"));// 每页个数
+		return map;
+	}
+	/**
+	 * 智能搜索批次
+	 *
+	 * @param keyword
+	 * @param page
+	 * @return
+	 * @throws InterruptedException
+	 * @throws IOException
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public ModelMap searchComponentGoods(String keyword, PageParams page , HttpServletRequest request) {
+		if (this.deviceResolver.resolveDevice(request).isMobile()) {
+			SystemSession.setUser((User)request.getSession().getAttribute("user"));
+			if (null != SystemSession.getUser() && null!= SystemSession.getUser().getUserUU()){
+				SearchHistory searchHistory = null;
+				List<SearchHistory> searchHistories = searchHistoryDao.findByKeywordAndUserUUAndUserEnuu(keyword,SystemSession.getUser().getUserUU(),SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+				if (searchHistories.size()>0){
+					searchHistory = searchHistories.get(0);
+				}else {
+					searchHistory = new SearchHistory();
+				}
+				searchHistory.setKeyword(keyword);
+				searchHistory.setSearchTime(new Date(System.currentTimeMillis()));
+				searchHistory.setUserUU(SystemSession.getUser().getUserUU());
+				searchHistory.setUserEnuu(SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+				searchHistoryDao.save(searchHistory);
+				searchHistories = searchHistoryDao.findByUserUUAndUserEnuuOrderBySearchTimeDesc(SystemSession.getUser().getUserUU(),SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+				if (searchHistories.size()>10){
+					searchHistoryDao.delete(searchHistories.subList(10,searchHistories.size()));
+				}
+			}
+		}
+		ModelMap map = new ModelMap();
+		Map<String,Object> results = null;
+		//Map<String, Object> results = new HashMap<>();
+		try {
+			results = searchService.getGoodsIds(keyword, convertPageParams(page));
+		} catch (SearchException e) {
+			throwSystemException(e);
+		}
+		//统计精准匹配到品牌的数量(便于展示唯一的品牌)
+		ModelMap brandMap = searchBrand(keyword,null);
+		List<Map<String, Object>> brands = (List)brandMap.get("brands");
+		if (!CollectionUtils.isEmpty(brands)) {
+			for (Map<String, Object> brand : brands){
+				if (keyword.equalsIgnoreCase(brand.get("nameCn").toString()) || keyword.equalsIgnoreCase(brand.get("nameEn").toString())){
+					map.put("brands",brand);
+				}
+			}
+		}
+		if ((int)results.get("total") == 0){
+			map.put("total", results.get("total"));// 搜索结果总数
+			map.put("page", results.get("page"));// 当前页面
+			map.put("size", results.get("size"));// 每页个数
+			map.put("components", new ArrayList<>());// 当前页器件内容
+			return map;
+		}
+		List<Integer> componentIds = (List<Integer>)results.get("componentIds");
+		List<Integer> goodsIds = (List<Integer>)results.get("goodsIds");
+		List<ComponentGoods> components = new ArrayList<>();
+		if (!CollectionUtils.isEmpty(componentIds)) {
+			for (int i = 0 ;i < componentIds.size() ; i++){
+				Long cid = null;
+				if(!StringUtils.isEmpty
+						(componentIds.get(i)))  {
+					cid = Long.valueOf(componentIds.get(i).toString());
+				}
+				Long gid = goodsIds.get(i) == null ? 0L : Long.valueOf(goodsIds.get(i).toString());
+				if((cid == null) && (gid != 0L)) {
+					Goods goods = goodsDao.findOne(gid);
+					if(goods != null) {
+						components.add(new ComponentGoods(goods));
+					}
+				}else if(cid != null){
+					ComponentGoods componentGoods = componentGoodsDao.findByCmpIdAndGoId(cid, gid);
+					if (componentGoods != null){
+						components.add(componentGoods);
+					}
+				}
+			}
+			map.put("components", components);// 当前页器件内容
+		}
 
         map.put("total", results.get("total"));// 搜索结果总数
         map.put("page", results.get("page"));// 当前页面
@@ -425,14 +442,20 @@ public class SearcherServiceImpl implements SearcherService {
         return brands;
     }
 
-    /**
-     * 捕获SearchException抛出SystemException
-     *
-     * @param e
-     * @return
-     */
-    private void throwSystemException(SearchException e) {
-        logger.error(e.getMessage(), e);
-        throw new SystemException(e.getMessage());
-    }
+	@Override
+	public int deleteSearchHistoryByuserUUAndenUU() {
+		return searchHistoryDao.deleteByUserUUAndUserEnuu(SystemSession.getUser().getUserUU(),
+				SystemSession.getUser().getEnterprise() == null ? null : SystemSession.getUser().getEnterprise().getUu() );
+	}
+
+	/**
+	 * 捕获SearchException抛出SystemException
+	 *
+	 * @param e
+	 * @return
+	 */
+	private void throwSystemException(SearchException e) {
+		logger.error(e.getMessage(), e);
+		throw new SystemException(e.getMessage());
+	}
 }

+ 23 - 14
src/main/java/com/uas/platform/b2c/external/erp/commodity/service/impl/ProductDetailERPServiceImpl.java

@@ -57,12 +57,16 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
     @Override
     public boolean uploadProductDetailERP(List<ProductDetailERP> productDetailERPList) {
         List<ProductDetail> productDetails = new ArrayList<ProductDetail>();
+        List<Product> productList = new ArrayList<Product>();
         Long enuu = SystemSession.getUser().getEnterprise().getUu();
         for (ProductDetailERP productDetailERP : productDetailERPList) {
             ProductDetail productDetail = ModelConverter.convert(productDetailERP);
 
             List<Product> products = productDao.getProductByEnUUAndProdNum(enuu, productDetail.getCode());
             if (!CollectionUtils.isEmpty(products)) {
+                products.get(0).setErpReserve(productDetailERP.getReserve());
+                productList.add(products.get(0));
+
                 productDetail.setProductId(products.get(0).getId());
             }
             // 如果已存在物料交易信息删除之前那一条,保存新的物料交易信息
@@ -72,6 +76,8 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
             }
             productDetails.add(productDetail);
         }
+
+        productDao.save(productList);
         productDetailDao.save(productDetails);
         logger.log("物料交易详情", "初始化交易详情,企业:" + SystemSession.getUser().getEnterprise().getEnName() + ",数量:" + productDetails.size());
         return true;
@@ -85,16 +91,16 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
 
     @Override
     public void updateReserve(List<ProductDetailERP> productDetailERPList) {
-        List<ProductDetail> productDetails = new ArrayList<ProductDetail>();
+        List<Product> productList = new ArrayList<Product>();
         Long enuu = SystemSession.getUser().getEnterprise().getUu();
         for (ProductDetailERP productDetailERP : productDetailERPList) {
             List<Product> products = productDao.getProductByEnUUAndProdNum(enuu, productDetailERP.getCode());// 获取对应商城物料信息
             if (!CollectionUtils.isEmpty(products)) {
-                ProductDetail productDetail = productDetailDao.findByProductId(products.get(0).getId());// 获取商城物料信息
-                if (productDetail == null) {// 如果物料交易详情为空,新增物料交易详情
-                    productDetail = new ProductDetail();
-                    productDetail.setProductId(products.get(0).getId());
-                }
+//                ProductDetail productDetail = productDetailDao.findByProductId(products.get(0).getId());// 获取商城物料信息
+//                if (productDetail == null) {// 如果物料交易详情为空,新增物料交易详情
+//                    productDetail = new ProductDetail();
+//                    productDetail.setProductId(products.get(0).getId());
+//                }
 
                 if (products.get(0).getCmpUuId() != null) {// 如果为标准器件,更新在售商品信息
                     Double b2cReserve = goodsDao.getSumReserveByEnUUAndUuidAndStatus(enuu, products.get(0).getCmpUuId(), Status.AVAILABLE.value());
@@ -117,8 +123,13 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
                                     good.setReserve(BigDecimal.valueOf(good.getReserve()).subtract(subtractDecimal).doubleValue());
                                     good.setSelfSale(sysConf.getStoreid().equals(good.getStoreid())? IntegerConstant.B2C_SALE.toString() : IntegerConstant.SELF_SALE.toString());// 设置自营寄售
                                     loggerInfo.info(SystemSession.getUser().getEnterprise().getEnName() + "更新库存: " + products.get(0).getProdNum() + ",self is" + good.getSelfSale());
-                                    goodsService.updateGoods(nowGood, good);
-                                    goodsService.updateComponentTradeInfos(nowGood.getUuid());
+                                    // 如果调整后的库存小于最小起订量直接下架
+                                    if (good.getReserve() < good.getMinBuyQty()) {
+                                        goodsService.offShelfGoodsByProvider(good.getBatchCode());
+                                    } else {
+                                        goodsService.updateGoods(nowGood, good);
+                                        goodsService.updateComponentTradeInfos(nowGood.getUuid());
+                                    }
                                     break;
                                 }
 
@@ -131,13 +142,11 @@ public class ProductDetailERPServiceImpl implements ProductDetailERPService {
                     }
                 }
 
-                if (productDetail != null) {
-                    productDetail.setReserve(productDetailERP.getReserve());
-                    productDetails.add(productDetail);
-                }
+                products.get(0).setErpReserve(productDetailERP.getReserve());
+                productList.add(products.get(0));
             }
         }
-        logger.log("物料详情", "更新物料库存信息,企业:" + SystemSession.getUser().getEnterprise().getEnName() + ",数量:" + productDetails.size());
-        productDetailDao.save(productDetails);
+        logger.log("物料详情", "更新物料库存信息,企业:" + SystemSession.getUser().getEnterprise().getEnName() + ",数量:" + productList.size());
+        productDao.save(productList);
     }
 }

+ 2 - 1
src/main/java/com/uas/platform/b2c/external/erp/commodity/util/ModelConverter.java

@@ -197,7 +197,8 @@ public class ModelConverter {
 		productDetail.setPackaging(productDetailERP.getPackaging());
 		productDetail.setPrice(productDetailERP.getPrice());
 		productDetail.setProduceDate(productDetailERP.getProduceDate());
-		productDetail.setReserve(productDetailERP.getReserve());
+		// 暂时将ERP空闲库存放置在product中
+//		productDetail.setReserve(productDetailERP.getReserve());
 		productDetail.setCode(productDetailERP.getCode());
 		productDetail.setBreakUp(productDetailERP.getBreakUp());
 		return productDetail;

+ 14 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java

@@ -73,6 +73,12 @@ public class Product {
 	@Column(name = "pr_stock")
 	private Double stock;
 
+	/**
+	 * ERP空闲库存
+	 */
+	@Column(name = "pr_reserve")
+	private Double erpReserve;
+
 	/**
 	 * 价格
 	 */
@@ -355,6 +361,14 @@ public class Product {
 		return this;
 	}
 
+	public Double getErpReserve() {
+		return erpReserve;
+	}
+
+	public void setErpReserve(Double erpReserve) {
+		this.erpReserve = erpReserve;
+	}
+
 	public Double getPrice() {
 		return price;
 	}

+ 2 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java

@@ -570,9 +570,9 @@ public class GoodsServiceImpl implements GoodsService {
 		ProductDetail productDetail = productDetailDao.findByProductId(product.getId());
 		if (productDetail == null) {
 			productDetail = new ProductDetail();
-		} else if (productDetail.getReserve() != null) {
+		} else if (product.getErpReserve() != null) {
 			ProductDetail newProductDetail = productService.findByProductId(product.getId());
-			if (productDetail.getReserve() < goods.getReserve() + newProductDetail.getB2cReserve()) {
+			if (product.getErpReserve() < goods.getReserve() + newProductDetail.getB2cReserve()) {
 				throw new IllegalOperatorException("本次上架数量和已上架数量之和不可超过ERP空闲库存数量");
 			}
 		}

+ 13 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/api/BrandController.java

@@ -110,6 +110,19 @@ public class BrandController {
 		return brandService.getBrandInfoPage(info, keyword);
 	}
 
+	/**
+	 * 查找所有详细有效品牌信息
+	 * @param keyword 关键词
+	 * @param params
+	 *            分页信息
+	 * @return 品牌简易信息
+	 */
+	@RequestMapping(value = "/Brand/ByPage", method = RequestMethod.GET)
+	public Map<String,Object> getBrandPage(PageParams params, String keyword) {
+		PageInfo info = new PageInfo(params);
+		return brandService.getBrandPage(info, keyword);
+	}
+
 	/**
 	 * 查找所有简单有效品牌信息,并按首字母过滤
 	 * @param keyword 关键词

+ 8 - 0
src/main/java/com/uas/platform/b2c/prod/product/brand/service/BrandService.java

@@ -83,6 +83,14 @@ public interface BrandService {
 	 */
 	public Page<BrandInfo> getBrandInfoPage(PageInfo pageInfo, String keyword);
 
+	/**
+	 * 获取Brand分页数据
+	 * @param keyword 关键词
+	 * @param pageInfo 分页信息
+	 * @return 品牌简易信息
+	 */
+	public Map<String,Object> getBrandPage(PageInfo pageInfo, String keyword);
+
 	/**
 	 * 获取BrandInfo分页数据
 	 * @param keyword 关键词

+ 29 - 1
src/main/java/com/uas/platform/b2c/prod/product/brand/service/impl/BrandServiceImpl.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.prod.product.brand.service.impl;
 
+import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.core.utils.PinyinUtils;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandInfoDao;
@@ -17,6 +18,8 @@ import com.uas.platform.core.persistence.criteria.CriterionExpression;
 import com.uas.platform.core.persistence.criteria.CriterionExpression.Operator;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import com.uas.search.exception.SearchException;
+import com.uas.platform.b2c.common.search.util.SPage;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,6 +53,9 @@ public class BrandServiceImpl implements BrandService {
 	@Autowired
 	private JdbcTemplate jdbcTemplate;
 
+	@Autowired
+	private SearchService searchService;
+
 	@Autowired
 	private BrandMostSimpleInfoDao brandMostSimpleInfoDao;
 
@@ -136,7 +142,11 @@ public class BrandServiceImpl implements BrandService {
 	@Override
 	public Page<Brand> getInitialSimpleInfoByFirst(String key , PageParams params ,String keyword) {
 		Pageable pageable = new PageInfo(params);
-		return brandDao.findInInitalsPage(new String[]{key},keyword, pageable);
+		if ("0~9".equals(key)) {
+			return brandDao.findInInitalsPage(new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}, pageable);
+		}else {
+			return brandDao.findInInitalsPage(new String[]{key}, pageable);
+		}
 	}
 
 	// 判断一个字符串是否含有中文
@@ -199,6 +209,24 @@ public class BrandServiceImpl implements BrandService {
 		}, pageInfo);
 	}
 
+	@Override
+	public Map<String,Object> getBrandPage(final PageInfo pageInfo, String keyword) {
+		SPage<Map<String, Object>> brands = null;
+		try {
+			brands = searchService.getBrands(keyword,pageInfo.getPageNumber(),pageInfo.getPageSize());
+		} catch (SearchException e) {}
+		List<Map<String, Object>> brandPage = brands.getContent();
+		List<Brand> brandList = new ArrayList<>();
+		for (Map<String, Object> a : brandPage){
+			brandList.add(brandDao.findOne(Long.parseLong(a.get("id").toString())));
+		}
+		Map<String,Object> map = new HashMap<>();
+		map.put("content",brandList);
+		map.put("totalPages",brands.getTotalPage());
+		map.put("totalElements",brands.getTotalElement());
+		return map;
+	}
+
 	@Override
 	public Brand findByUuid(String uuid) {
 		// 这个因为是接口错误的话直接返回

+ 3 - 0
src/main/java/com/uas/platform/b2c/prod/product/component/dao/ComponentInfoDao.java

@@ -90,6 +90,9 @@ public interface ComponentInfoDao extends JpaSpecificationExecutor<ComponentInfo
 	@Query(nativeQuery = true, value = "select * from product$component where cmp_id in :batchids")
 	public List<ComponentInfo> findByBatchids(@Param("batchids") List<Long> batchids);
 
+	@Query("select c from ComponentInfo c where c.code like :q%")
+	public Page<ComponentInfo> findByFirst(@Param("q") String keyword,Pageable pageable);
+
 	/**
 	 * 根据权重倒序排列品牌信息
 	 * @return

+ 3 - 3
src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentGoodsServiceImpl.java

@@ -53,9 +53,9 @@ public class ComponentGoodsServiceImpl implements ComponentGoodsService {
 			if(filter.get("properties") != null) {
 				String property = filter.get("properties").toString();
 				PageParams pageParams = new PageParams(info.getPageNumber(), info.getPageSize());
-				pageParams.filter(FilterField.COMPONENT_PROPERTIES, property);
-				pageParams.filter(FilterField.COMPONENT_KINDID, filter.get("kindid"));
-				pageParams.filter(FilterField.COMPONENT_BRANDID, filter.get("brandid"));
+				pageParams.filter(PageParams.FilterField.COMPONENT_PROPERTIES, property);
+				pageParams.filter(PageParams.FilterField.COMPONENT_KINDID, filter.get("kindid"));
+				pageParams.filter(PageParams.FilterField.COMPONENT_BRANDID, filter.get("brandid"));
 				filter.remove("properties");
 				filter.remove("kindid");
 				filter.remove("brandid");

+ 3 - 3
src/main/java/com/uas/platform/b2c/prod/product/component/service/impl/ComponentServiceImpl.java

@@ -197,9 +197,9 @@ public class ComponentServiceImpl implements ComponentService {
 			if (filter.get("properties") != null) {
 				String property = filter.get("properties").toString();
 				PageParams pageParams = new PageParams(info.getPageNumber(), info.getPageSize());
-				pageParams.filter(FilterField.COMPONENT_PROPERTIES, property);
-				pageParams.filter(FilterField.COMPONENT_KINDID, filter.get("kindid"));
-				pageParams.filter(FilterField.COMPONENT_BRANDID, filter.get("brandid"));
+				pageParams.filter(PageParams.FilterField.COMPONENT_PROPERTIES, property);
+				pageParams.filter(PageParams.FilterField.COMPONENT_KINDID, filter.get("kindid"));
+				pageParams.filter(PageParams.FilterField.COMPONENT_BRANDID, filter.get("brandid"));
 //				pageParams.filter("code", filter.get("code"));
 				filter.remove("properties");
 				filter.remove("kindid");

+ 1 - 2
src/main/resources/dev/jdbc.properties

@@ -1,6 +1,5 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
-#jdbc.url=jdbc:oracle:thin:@192.168.253.6:1521:orcl
-jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe6946c98747cbe3897b66b5c4cb4985aa8f22aa1cbab4bc6bfe12e09403e6255e2fda2f113bc366bbfc5d9a2cf99c34ce47ba6bd752a9bf5f04c3faf83464996ab6930a84c7d3b9f62d759eb691bc8cd1fe3225f6e7efa5ab3a583896b06178e65c56c3c4e448a0ae4fe
+jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe694e129681326fc2cb1b5fe058042985e2f72b57c8be4fa3e1544065eabf2ab94ad017d02162675aa969997adc7fd7bd04c0eb8bcc3a1733fe6a27f40bcf87efef4566f5872030efe79859a9abb7cbad9c1aa1ae7c2bb1cb23007adc91d94a9369cec407809597189c5
 jdbc.username=474e1aeadeeecac5
 jdbc.password=48981af937f010627b96e886a0d38aad
 jdbc.initialSize=1

+ 0 - 4
src/main/resources/prod/jdbc.properties

@@ -1,7 +1,3 @@
-#jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
-#jdbc.url=jdbc:oracle:thin:@10.10.100.200:1521:orcl
-#jdbc.username=platform$b2b
-#jdbc.password=select*fromuu
 jdbc.driverClassName=com.mysql.jdbc.Driver
 jdbc.url=7e5ef205e2ff4ca46e29823f9c378880524d69d6c11d8c1c3688f4f0b3712ba1385b2cecff54843db21897fe0c75f0a36c7921cab8fadf398fa33412ca529b7f04233bf4ae6fd3870626fa79ef7f87cb7a8905195ea37bd042b530659d0e82dda7359ee0139e0d6fb23654ba47f5f4b8c682a3c72b9d81e7
 jdbc.username=73f3cd5578b9e08b

+ 1 - 2
src/main/resources/test/jdbc.properties

@@ -1,6 +1,5 @@
 jdbc.driverClassName=com.mysql.jdbc.Driver
-#jdbc.url=jdbc:oracle:thin:@192.168.253.6:1521:orcl
-jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe6946c98747cbe3897b66b5c4cb4985aa8f22aa1cbab4bc6bfe12e09403e6255e2fda2f113bc366bbfc5d9a2cf99c34ce47ba6bd752a9bf5f04c3faf83464996ab6930a84c7d3b9f62d759eb691bc8cd1fe3225f6e7efa5ab3a583896b06178e65c56c3c4e448a0ae4fe
+jdbc.url=7e5ef205e2ff4ca4ac98c9f833880ec6e2fe1a4579ebe694e129681326fc2cb1b5fe058042985e2f72b57c8be4fa3e1544065eabf2ab94ad017d02162675aa969997adc7fd7bd04c0eb8bcc3a1733fe6a27f40bcf87efef4566f5872030efe79859a9abb7cbad9c1aa1ae7c2bb1cb23007adc91d94a9369cec407809597189c5
 jdbc.username=474e1aeadeeecac5
 jdbc.password=48981af937f010627b96e886a0d38aad
 jdbc.initialSize=1

+ 14 - 0
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_materialCtrl.js

@@ -18,6 +18,20 @@ define([ 'app/app', 'jquery-uploadify' ], function(app) {
             type : "standard"
         };
 
+        $scope.sortByERP = 'none';
+        $scope.sortByERPReserve = function () {
+			if ($scope.sortByERP == 'none') {
+				$scope.sortByERP = 'DESC'
+			} else if ($scope.sortByERP == 'DESC') {
+				$scope.sortByERP = 'ASC'
+			} else {
+				$scope.sortByERP = 'none'
+			}
+			$scope.param.sorting = $scope.sortByERP == 'none' ? {id : 'DESC'} : {'erpReserve': $scope.sortByERP};
+			// $scope.sortByERP = type == $scope.sortByERP ? 'none' : type;
+			loadData();
+		}
+
 		if ($location.$$path.endsWith('vendor_material_unstandard_erp')) {
 			$scope.tab = 'unstandard_material';
 			// $scope.standard_tab = 'unstandard';

+ 20 - 2
src/main/webapp/resources/view/vendor/forstore/erp/vendor_material_erp.html

@@ -96,6 +96,9 @@
 		font-size: 14px;
 		vertical-align: middle !important;
 	}
+	.public-tab.table tr th >div i.active {
+		color: #5078cb;
+	}
 	.public-tab.table>tbody+tbody{
 		border-top: none;
 	}
@@ -426,6 +429,13 @@
 	.com_tab ul li.active a {
 		color: #1687ff;
 	}
+	.pro_management .table tr th .erp-reserve {
+		cursor: pointer;
+	}
+	.pro_management .table tr th .erp-reserve .sort-area,
+	.pro_management .table tr th .erp-reserve .sort-area:hover{
+		color: inherit !important;
+	}
 </style>
 <div class="user_right fr">
 	<!--货品管理-->
@@ -465,7 +475,15 @@
 					<thead>
 					<tr>
 						<th width="80">序号</th>
-						<th width="80">ERP空闲库存</th>
+						<th width="80">
+							<div class="erp-reserve"  ng-click="sortByERPReserve()">
+								ERP空闲库存
+								<a class="sort-area" href="javascript:void(0)">
+									<i class=" fa fa-long-arrow-up" ng-class="{'active': sortByERP == 'ASC'}"></i>
+									<i class=" fa fa-long-arrow-down" ng-class="{'active': sortByERP == 'DESC'}"></i>
+								</a>
+							</div>
+						</th>
 						<th width="160">产品编号</th>
 						<th width="180">产品名称(类目)</th>
 						<th width="130">品牌</th>
@@ -485,7 +503,7 @@
 							<span ng-show="isBatch"><input type="checkbox" ng-checked="material.isChoosed"  ng-click="chooseOne(material)"  id="{{$index+1}}"/><label for="{{$index+1}}"></label><br/></span>
 							<span ng-show="!isBatch" ng-bind="(param.currentPage - 1) * 10 + $index + 1"></span>
 						</td>
-						<td>{{material.productDetail.reserve || 0}}</td>
+						<td>{{material.erpReserve || 0}}</td>
 						<td ng-bind="material.prodNum" title="{{material.prodNum}}"></td>
 						<td>
 							<span ng-if="material.kind" ng-bind="material.kind" title="{{material.kind}}"></span>