Browse Source

供应商推荐列表获取接口

dongbw 8 years ago
parent
commit
db9b5e5389

+ 16 - 0
src/main/java/com/uas/platform/b2b/erp/model/B2BVendor.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2b.erp.model;
 
+import com.uas.platform.b2b.model.Enterprise;
 import com.uas.platform.b2b.model.Vendor; /**
  * Created by dongbw
  * 17/07/12 17:22.
@@ -106,6 +107,21 @@ public class B2BVendor {
         }
     }
 
+    public B2BVendor(Enterprise vendor) {
+        this.setVe_name(vendor.getEnName());
+        this.setVe_add1(vendor.getEnAddress());
+        this.setVe_shortname(vendor.getEnShortname());
+        this.setVe_webserver(vendor.getEnBussinessCode());
+        this.setVe_tel(vendor.getEnTel());
+        this.setVe_industry(vendor.getProfession());
+        this.setVe_businessrange(vendor.getTags());
+        this.setVe_uu(String.valueOf(vendor.getUu()));
+        if (vendor.getAdmin() != null) {
+            this.setVe_contact(vendor.getAdmin().getUserName());
+            this.setVe_email(vendor.getAdmin().getUserEmail());
+        }
+    }
+
     public Integer getVe_id() {
         return ve_id;
     }

+ 12 - 0
src/main/java/com/uas/platform/b2b/service/VendorService.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2b.service;
 
+import com.uas.platform.b2b.erp.model.VendorRecommend;
 import com.uas.platform.b2b.model.Distribute;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.model.VendorContact;
@@ -118,4 +119,15 @@ public interface VendorService {
 	void synchronizeToPartnerShipRecord();
 
     ModelMap getVendorsAndCustomers(Long enUU);
+
+	/**
+	 * 获取供应商推荐
+	 * @param profession
+	 * @param enArea
+	 * @param code
+	 * @param cmpCode
+	 * @param brand
+	 * @return
+	 */
+	com.uas.account.support.Page<VendorRecommend> getVendorRecommend(String profession, String enArea, String code, String cmpCode, String brand, int page, int size);
 }

+ 91 - 4
src/main/java/com/uas/platform/b2b/service/impl/VendorsServiceImpl.java

@@ -4,16 +4,16 @@ import com.uas.account.util.AccountUtils;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.erp.model.B2BCustomer;
 import com.uas.platform.b2b.erp.model.B2BVendor;
-import com.uas.platform.b2b.model.Distribute;
-import com.uas.platform.b2b.model.Enterprise;
-import com.uas.platform.b2b.model.Vendor;
-import com.uas.platform.b2b.model.VendorContact;
+import com.uas.platform.b2b.erp.model.VendorRecommend;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.service.VendorService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.temporary.model.PartnershipRecord;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
+import com.uas.platform.core.persistence.criteria.PredicateFactory;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
@@ -21,6 +21,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -48,6 +49,15 @@ public class VendorsServiceImpl implements VendorService {
 	@Autowired
 	private UserOrderDao userOrderDao;
 
+	@Autowired
+	private ProductDao productDao;
+
+	@Autowired
+	private CommonDao commonDao;
+
+	@Autowired
+	private UserDao userDao;
+
 	@Override
 	public List<Vendor> findMyVendors() {
 		return vendorDao.findByMyEnUU(SystemSession.getUser().getEnterprise().getUu());
@@ -314,4 +324,81 @@ public class VendorsServiceImpl implements VendorService {
 		return map;
 	}
 
+	/**
+	 * 获取供应商推荐
+	 *
+	 * @param profession
+	 * @param enArea
+	 * @param code
+	 * @param cmpCode
+	 * @param brand
+	 * @return
+	 */
+	@Override
+	public com.uas.account.support.Page<VendorRecommend> getVendorRecommend(String profession, String enArea, String code, String cmpCode, String brand, int page, int size) {
+		final Long enUU = SystemSession.getUser().getEnterprise().getUu();
+		// 先查询当前企业的采购物料(待购&&不在售)的标准物料标准料号
+		String cmpCodesSql = "select distinct(pr.pr_cmpcode) from products pr left join sec$enterprises en on pr.pr_enuu = en.en_uu " +
+				"where pr.pr_ispurchase = 1 and pr.pr_issale != 1 and pr.pr_standard = 1 and pr.pr_enuu = " + enUU +
+				" and pr.pr_code like '%" + code + "%' and pr.pr_cmpcode like '%" + cmpCode + "%' and pr.pr_brand like '%" + brand +  "%'";
+		// 根据标准料号找出对应的供应商UU
+		String vendUUsSql = "select distinct(ve_vendenuu) from purc$vendors left join products on pr_enuu = ve_vendenuu" +
+				" where ve_myenuu = " + enUU + " and pr_issale = 1 and pr_standard = 1 and pr_cmpcode in (" + cmpCodesSql + ")";
+		// 采购物料原厂型号
+		System.out.println(cmpCodesSql);
+		final List<String> cmpCodes = commonDao.queryForList(cmpCodesSql, String.class);
+		// rownum 控制
+		String rownumSql = " and rownum > " + (page - 1) * size + "and rownum <= " + page * size + " group by en_uu order by count(en_uu) desc";
+		// 查找非供应商的卖当前商品的企业UU
+		StringBuffer vendorRecommendUusSql = new StringBuffer();
+		StringBuffer vendorRecommendUuNumSql = new StringBuffer();
+		vendorRecommendUusSql.append("select en_uu from sec$enterprises left join products on en_uu = pr_enuu " +
+				" where 1=1 and pr_issale = 1 and pr_standard = 1 and pr_cmpcode in (").append(cmpCodesSql).append(") and en_uu not in (")
+				.append(vendUUsSql).append(") and en_uu <> ").append(enUU);
+		vendorRecommendUuNumSql.append("select count(en_uu) from sec$enterprises left join products on en_uu = pr_enuu " +
+				" where 1=1 and pr_issale = 1 and pr_standard = 1 and pr_cmpcode in (").append(cmpCodesSql).append(") and en_uu not in (")
+				.append(vendUUsSql).append(") and en_uu <> ").append(enUU);
+		if (!StringUtils.isEmpty(enArea)) {
+			vendorRecommendUusSql.append(" and en_area like %").append(enArea).append("% ");
+			vendorRecommendUuNumSql.append(" and en_area like %").append(enArea).append("% ");
+		}
+		if (!StringUtils.isEmpty(profession)) {
+			vendorRecommendUusSql.append(" and en_profession like %").append(profession).append("% ");
+			vendorRecommendUuNumSql.append(" and en_profession like %").append(profession).append("% ");
+		}
+		vendorRecommendUusSql.append(rownumSql);
+		System.out.println("SQL:" + vendorRecommendUusSql.toString());
+		System.out.println("NUM_SQL:" + vendorRecommendUuNumSql.toString());
+		Integer total = commonDao.queryForObject(vendorRecommendUuNumSql.toString(), Integer.class);
+		List<Long> vendUUs = commonDao.queryForList(vendorRecommendUusSql.toString(), Long.class);
+		List<VendorRecommend> content = new ArrayList<>();
+		for (Long vendUU : vendUUs) {
+			Enterprise vendor = enterPriseDao.findOne(vendUU);
+			if (null != vendor) {
+				if (null != vendor.getEnAdminuu()) {
+					User admin = userDao.findOne(vendor.getEnAdminuu());
+					vendor.setAdmin(admin);
+				}
+				final PredicateFactory<Product> factory = new PredicateFactory<>();
+				factory.add(PredicateUtils.eq("enUU", enUU, false));
+				factory.add(PredicateUtils.in("cmpCode", cmpCodes, false));
+				List<Product> hitsProducts = productDao.findAll(new Specification<Product>() {
+					@Override
+					public Predicate toPredicate(Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+						query.where(factory.toPredicate(root, query, cb));
+						query.orderBy(cb.desc(root.get("id").as(Long.class)));
+						return null;
+					}
+				});
+				VendorRecommend vendorRecommend = new VendorRecommend();
+				vendorRecommend.setEnterprise(vendor);
+				vendorRecommend.setHitProds(hitsProducts);
+				vendorRecommend.setHitNums(hitsProducts.size());
+				content.add(vendorRecommend);
+			}
+		}
+		// 返回分页信息
+		return new com.uas.account.support.Page<VendorRecommend>(page, size, content, total);
+	}
+
 }