Browse Source

Merge branch 'dev-mysql' into feature_release-tomysql

liusw 8 years ago
parent
commit
2a35446f4c
41 changed files with 1562 additions and 192 deletions
  1. 7 3
      src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java
  2. 4 1
      src/main/java/com/uas/platform/b2c/common/account/model/Enterprise.java
  3. 183 0
      src/main/java/com/uas/platform/b2c/common/message/model/MessageModel.java
  4. 1 1
      src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java
  5. 16 0
      src/main/java/com/uas/platform/b2c/common/search/model/SearchHistory.java
  6. 17 11
      src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java
  7. 11 1
      src/main/java/com/uas/platform/b2c/core/constant/Type.java
  8. 6 4
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  9. 2 2
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java
  10. 6 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductPersonDao.java
  11. 11 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/V_ProductPrivateDao.java
  12. 4 2
      src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java
  13. 48 0
      src/main/java/com/uas/platform/b2c/prod/commodity/model/V_ProductPrivate.java
  14. 1 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  15. 28 58
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  16. 24 21
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
  17. 4 4
      src/main/java/com/uas/platform/b2c/prod/store/api/StoreInController.java
  18. 9 5
      src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java
  19. 62 10
      src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java
  20. 38 0
      src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekPurchaseBomServiceImpl.java
  21. 19 0
      src/main/java/com/uas/platform/b2c/trade/vendor/Readme.md
  22. 124 0
      src/main/java/com/uas/platform/b2c/trade/vendor/controller/VendorIntroductionController.java
  23. 21 0
      src/main/java/com/uas/platform/b2c/trade/vendor/dao/InviteVendorHistoryDao.java
  24. 107 0
      src/main/java/com/uas/platform/b2c/trade/vendor/model/InviteVendorHistory.java
  25. 204 0
      src/main/java/com/uas/platform/b2c/trade/vendor/model/VendorIntroduction.java
  26. 23 0
      src/main/java/com/uas/platform/b2c/trade/vendor/service/InviteVendorHistoryService.java
  27. 46 0
      src/main/java/com/uas/platform/b2c/trade/vendor/service/VendorIntroductionService.java
  28. 184 0
      src/main/java/com/uas/platform/b2c/trade/vendor/service/impl/InviteVendorHistoryServiceImpl.java
  29. 201 0
      src/main/java/com/uas/platform/b2c/trade/vendor/service/impl/VendorIntroductionServiceImpl.java
  30. 2 1
      src/main/resources/dev/message.properties
  31. 3 0
      src/main/resources/dev/sys.properties
  32. 2 1
      src/main/resources/prod/message.properties
  33. 3 0
      src/main/resources/prod/sys.properties
  34. 2 1
      src/main/resources/test/message.properties
  35. 3 0
      src/main/resources/test/sys.properties
  36. 3 0
      src/main/webapp/WEB-INF/spring/webmvc.xml
  37. 8 0
      src/main/webapp/resources/js/admin/controllers/StoreQualificationCtrl.js
  38. 46 27
      src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js
  39. 14 3
      src/main/webapp/resources/js/vendor/app.js
  40. 43 33
      src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_apply_ctrl.js
  41. 22 2
      src/main/webapp/resources/view/admin/store_qualification_maintenance.html

+ 7 - 3
src/main/java/com/uas/platform/b2c/common/account/controller/SecurityController.java

@@ -386,7 +386,7 @@ public class SecurityController {
 					return "successCallback({success:'0'})";
 				}*/
 				user.setIp(AgentUtils.getIp(request));
-				request.getSession().setAttribute("user", user);
+				request.getSession().setAttribute("  user", user);
 				SystemSession.setUser(user);
 				log(request, user);
 			}
@@ -446,7 +446,7 @@ public class SecurityController {
 	 */
 	@RequestMapping(value = "/logout/crossBefore")
 	@ResponseBody
-	public ModelMap getCrossLogoutData(HttpServletRequest request, HttpServletResponse response) throws IOException {
+	public ModelMap getCrossLogoutData(HttpServletRequest request, HttpServletResponse response, String returnUrl) throws IOException {
 		SSOHelper.clearLogin(request, response);
 		ModelMap model = new ModelMap();
 		SSOConfig config = SSOHelper.getSSOService().getConfig();
@@ -457,7 +457,11 @@ public class SecurityController {
 		Object logoutUrl = null;
 		boolean cross = SSOHelper.isCrossDomain(request);
 		if (cross) {
-			logoutUrl = SSOHelper.getRedirectRefererLogoutUrl(request);
+            if (StringUtils.isEmpty(returnUrl)) {
+                logoutUrl = SSOHelper.getRedirectRefererLogoutUrl(request);
+            } else {
+                logoutUrl = SSOHelper.getRedirectLogoutUrl(request, returnUrl);
+            }
 		} else {
 			logoutUrl = SSOHelper.getRedirectLogoutUrl(request, String.valueOf(request.getSession().getAttribute("SSOReferer")));
 		}

+ 4 - 1
src/main/java/com/uas/platform/b2c/common/account/model/Enterprise.java

@@ -16,7 +16,10 @@ import java.util.Date;
  * @author yingp
  */
 @Entity
-@Table(name = "sec$enterprises")
+@Table(name = "sec$enterprises", indexes = {
+		@Index(name = "en_name_index", columnList = "en_name"),
+		@Index(name = "en_address_index", columnList = "en_address"),
+		@Index(name = "en_industry_index", columnList = "en_industry"), })
 @Cacheable
 @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.uas.platform.b2c.model.EnterpriseUas")
 public class Enterprise implements Serializable {

+ 183 - 0
src/main/java/com/uas/platform/b2c/common/message/model/MessageModel.java

@@ -0,0 +1,183 @@
+package com.uas.platform.b2c.common.message.model;
+
+/**
+ * 消息公共服务 - 消息实体
+ */
+public class MessageModel {
+    /**
+     * 消息类型
+     */
+    private String type;
+    /**
+     * 消息内容
+     */
+    private String content;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 来源id
+     */
+    private Long sourceId;
+    /**
+     * 消息接收者uu
+     */
+    private Long receiverUu;
+    /**
+     * 消息接收者企业uu
+     */
+    private Long receiverEnuu;
+    /**
+     * 消息发送者
+     */
+    private Long senderUu;
+    /**
+     * 消息发送者企业uu
+     */
+    private Long senderEnuu;
+    /**
+     * 来源应用
+     */
+    private String producerApp;
+    /**
+     * 消费类型(所有应用共享:"PUBLIC",单个应用独享:"SINGLE",多个应用共享:"MULTI")
+     */
+    private String consumerType;
+    /**
+     * 推送方式类型
+     * 邮件、短信、IM:"MAIL_AND_SM_AND_IM"
+     * 邮件、短信:"MAIL_AND_SM"
+     * 邮件、IM:"MAIL_AND_IM"
+     * 短信、IM:"SM_AND_IM"
+     * 邮件:"MAIL"
+     * 短信:"SM"
+     * IM:"IM"
+     * 不发送:"DONT_SEND"
+     */
+    private String smsType;
+    /**
+     * 邮件模板id
+     */
+    private String mailTemplate;
+    /**
+     * 短息模板id
+     */
+    private String smTemplate;
+    /**
+     * 接收应用(以","拼接应用名称)
+     */
+    private String consumerApp;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long getReceiverUu() {
+        return receiverUu;
+    }
+
+    public void setReceiverUu(Long receiverUu) {
+        this.receiverUu = receiverUu;
+    }
+
+    public Long getReceiverEnuu() {
+        return receiverEnuu;
+    }
+
+    public void setReceiverEnuu(Long receiverEnuu) {
+        this.receiverEnuu = receiverEnuu;
+    }
+
+    public Long getSenderUu() {
+        return senderUu;
+    }
+
+    public void setSenderUu(Long senderUu) {
+        this.senderUu = senderUu;
+    }
+
+    public Long getSenderEnuu() {
+        return senderEnuu;
+    }
+
+    public void setSenderEnuu(Long senderEnuu) {
+        this.senderEnuu = senderEnuu;
+    }
+
+    public String getProducerApp() {
+        return producerApp;
+    }
+
+    public void setProducerApp(String producerApp) {
+        this.producerApp = producerApp;
+    }
+
+    public String getConsumerType() {
+        return consumerType;
+    }
+
+    public void setConsumerType(String consumerType) {
+        this.consumerType = consumerType;
+    }
+
+    public String getSmsType() {
+        return smsType;
+    }
+
+    public void setSmsType(String smsType) {
+        this.smsType = smsType;
+    }
+
+    public String getMailTemplate() {
+        return mailTemplate;
+    }
+
+    public void setMailTemplate(String mailTemplate) {
+        this.mailTemplate = mailTemplate;
+    }
+
+    public String getSmTemplate() {
+        return smTemplate;
+    }
+
+    public void setSmTemplate(String smTemplate) {
+        this.smTemplate = smTemplate;
+    }
+
+    public String getConsumerApp() {
+        return consumerApp;
+    }
+
+    public void setConsumerApp(String consumerApp) {
+        this.consumerApp = consumerApp;
+    }
+
+    public Long getSourceId() {
+        return sourceId;
+    }
+
+    public void setSourceId(Long sourceId) {
+        this.sourceId = sourceId;
+    }
+}

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

@@ -345,7 +345,7 @@ public class SearcherController {
 		User user = (User)request.getSession().getAttribute("user");
 		SystemSession.setUser(user);
 		PageInfo pageInfo = new PageInfo(params);
-		Page<StoreIn> stores = storeService.pageStoresByTypesAndKeyword(pageInfo, types, keyword);
+		Page<StoreIn> stores = storeService.pageStoresByTypesAndKeyword(pageInfo, types, keyword, request);
 		List<Map<String, Object>> result = new ArrayList<>();
 		Map<String, Object> storesMap = new HashedMap();
 		storesMap.put("stores",stores);

+ 16 - 0
src/main/java/com/uas/platform/b2c/common/search/model/SearchHistory.java

@@ -12,6 +12,8 @@ import java.util.Date;
 @Table(name = "sec$searchHis")
 public class SearchHistory implements Serializable{
 
+    private static final long serialVersionUID = 1L;
+
     /**
      * ID
      */
@@ -44,6 +46,12 @@ public class SearchHistory implements Serializable{
     @Column(name = "searchtime")
     private Date searchTime;
 
+    /**
+     * 搜索内容类型
+     */
+    @Column(name = "type")
+    private String type;
+
     public Long getId() {
         return id;
     }
@@ -83,4 +91,12 @@ public class SearchHistory implements Serializable{
     public void setSearchTime(Date searchTime) {
         this.searchTime = searchTime;
     }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
 }

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

@@ -2,12 +2,16 @@ 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;
 import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.common.search.service.SearcherService;
+import com.uas.platform.b2c.common.search.util.CollectField;
+import com.uas.platform.b2c.common.search.util.PageParams.FilterField;
+import com.uas.platform.b2c.common.search.util.SPage;
+import com.uas.platform.b2c.common.search.util.Sort;
+import com.uas.platform.b2c.core.constant.Type;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
@@ -16,17 +20,23 @@ import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentGoodsDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentInfoDao;
-import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
 import com.uas.platform.b2c.prod.product.component.modal.ComponentInfo;
 import com.uas.platform.core.exception.SystemException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.search.exception.SearchException;
-import com.uas.platform.b2c.common.search.util.CollectField;
-import com.uas.platform.b2c.common.search.util.PageParams.FilterField;
-import com.uas.platform.b2c.common.search.util.SPage;
-import com.uas.platform.b2c.common.search.util.Sort;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,11 +49,6 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.util.*;
-import java.util.Map.Entry;
-
 /**
  * 搜索索引
  *
@@ -198,6 +203,7 @@ public class SearcherServiceImpl implements SearcherService {
 				searchHistory.setSearchTime(new Date(System.currentTimeMillis()));
 				searchHistory.setUserUU(SystemSession.getUser().getUserUU());
 				searchHistory.setUserEnuu(SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
+                searchHistory.setType(Type.SEARCH_PRODUCT.name());
 				searchHistoryDao.save(searchHistory);
 				searchHistories = searchHistoryDao.findByUserUUAndUserEnuuOrderBySearchTimeDesc(SystemSession.getUser().getUserUU(),SystemSession.getUser().getEnterprise() != null ?SystemSession.getUser().getEnterprise().getUu():null);
 				if (searchHistories.size()>10){

+ 11 - 1
src/main/java/com/uas/platform/b2c/core/constant/Type.java

@@ -274,7 +274,17 @@ public enum Type {
 	/**
 	 * {@code 1668 企业销售出库 <b>企业销售出库</b>}
 	 */
-	STOCK_SELLER(1668, "销售出库");
+	STOCK_SELLER(1668, "销售出库"),
+
+	/**
+	 * {@code 1700 搜索店铺}
+	 */
+	SEARCH_STORE(1700, "搜索店铺"),
+
+	/**
+	 * {@code 1701 搜索产品}
+	 */
+	SEARCH_PRODUCT(1701, "搜索产品");
 
 	/**
 	 * @param value

+ 6 - 4
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -10,6 +10,7 @@ import com.uas.platform.b2c.prod.commodity.model.*;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
+import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
@@ -30,8 +31,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static com.alibaba.fastjson.JSON.parseArray;
-
 /**
  *  产品控制器
  *
@@ -100,8 +99,11 @@ public class ProductController {
 	 */
 	@RequestMapping(value = "/person", method = RequestMethod.POST)
 	ResultMap setAllProductsByPerson(@RequestBody String ids, Integer isAll, Integer isStardand) {
-		productService.setAllProductsByProductIds(ids,isAll,isStardand);
-		return ResultMap.success("success");
+		Integer count = productService.setAllProductsByProductIds(ids, isAll, isStardand);
+		if (count == 0) {
+			return new ResultMap(CodeType.SAVED, "个人产品库已存在产品");
+		}
+		return ResultMap.success(count);
 	}
 
 	/**

+ 2 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java

@@ -54,8 +54,8 @@ public interface ProductDao extends JpaSpecificationExecutor<Product>, JpaReposi
      * @param standard the standard 标准状态
      * @return count by enuu and status
      */
-    @Query(value = "select count(1) from products p left join product$private pp on pp.pr_id = p.pr_id where " +
-            "p.pr_enuu=:enuu and p.pr_pcmpcode is not null and p.pr_pbranden is not null and p.pr_standard = :standard and pp.pr_b2cenabled = :enabled", nativeQuery = true)
+    @Query(value = "select count(1) from v$product$private pp where " +
+            "pp.pr_enuu=:enuu and pp.pr_pcmpcode is not null and pp.pr_pbranden is not null and pp.pr_standard = :standard and pp.pr_b2cenabled = :enabled", nativeQuery = true)
     Integer getCountByEnuuAndStatusAndEnabled(@Param("enuu") Long enuu, @Param("standard") Short standard, @Param("enabled") Integer enabled);
 
     /**

+ 6 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductPersonDao.java

@@ -40,4 +40,10 @@ public interface ProductPersonDao extends JpaRepository<ProductPerson, Long>, Jp
      */
     @Query("select p.productId from ProductPerson p where p.enuu = :enuu and p.userUU = :userUU")
     List<Long> findIdByEnuuAndUserUU(@Param("enuu") Long enuu, @Param("userUU") Long userUU);
+
+    /**
+     * 根据userUU查找物料信息
+     * @param userUU
+     */
+    List<ProductPerson> findByUserUU (Long userUU);
 }

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/V_ProductPrivateDao.java

@@ -32,4 +32,15 @@ public interface V_ProductPrivateDao extends JpaRepository<V_ProductPrivate, Lon
      */
     @Query(value = "select p from V_ProductPrivate p where id in :idList")
     List<V_ProductPrivate> findProductInId(@Param("idList") List<Long> idList);
+
+    /**
+     * 获取供应商待售有效物料数量
+     *
+     * @param enuu     the enuu 企业enuu
+     * @return count by enuu and status
+     */
+    @Query(value = "select count(1) from v$product$private pp where " +
+            "pp.pr_enuu=:enuu and pp.pr_pcmpcode is not null and pp.pr_pbranden is not null and pp.pr_b2cenabled = :enabled", nativeQuery = true)
+    Integer getCountByEnuuAndEnabled(@Param("enuu") Long enuu, @Param("enabled") Integer enabled);
+
 }

+ 4 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java

@@ -16,8 +16,10 @@ import java.util.Set;
  */
 @Entity
 @Table(name = "products", indexes = {@Index(name = "products_code_index", columnList = "pr_code"),
-@Index(name = "products_enuu_index", columnList = "pr_enuu"),
-@Index(name = "products_enuu_code_index", columnList = "pr_code, pr_enuu", unique = true)})
+	@Index(name = "products_enuu_index", columnList = "pr_enuu"),
+	@Index(name = "products_cmpcode_index", columnList = "pr_cmpcode"),
+	@Index(name = "products_brand_index", columnList = "pr_brand"),
+	@Index(name = "products_enuu_code_index", columnList = "pr_code, pr_enuu", unique = true)})
 @Logger
 //@Cacheable
 //@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.uas.platform.b2b.model.Product")

+ 48 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/V_ProductPrivate.java

@@ -224,10 +224,28 @@ public class V_ProductPrivate implements Serializable {
      * b2c是否启用
      * 1 启用,
      * 0 未启用
+     * @date 2018年5月8日 17:16:07 dongbw 由于公共物料服务所有物料更新方法都顾及到b2c私有可用属性不好实现,返回去修改商城物料逻辑也很复杂
+     *       现在修改视图为b2cenabled字段为0是为0,非0时为1.
      */
     @Column(name = "pr_b2cenabled")
     private Integer b2cEnabled;
 
+    /**
+     * 是否可卖<br>
+     * 1. 可以卖 <br>
+     * 0. 不可
+     */
+    @Column(name = "pr_issale")
+    private Short isSale;
+
+    /**
+     * 是否可买<br>
+     * 1. 可以买<br>
+     * 0. 不可
+     */
+    @Column(name = "pr_ispurchase")
+    private Short isPurchase;
+
     /**
      * 产品建立时间
      */
@@ -254,6 +272,12 @@ public class V_ProductPrivate implements Serializable {
     @Transient
     private ProductDetail productDetail;
 
+    /**
+     * 判断是否已经加入个人产品库
+     */
+    @Transient
+    private Boolean isAddProductPerson;
+
     /**
      * goods表信息中存在多少条数据
      */
@@ -563,4 +587,28 @@ public class V_ProductPrivate implements Serializable {
     public void setBatchCount(Integer batchCount) {
         this.batchCount = batchCount;
     }
+
+    public Short getIsSale() {
+        return isSale;
+    }
+
+    public void setIsSale(Short isSale) {
+        this.isSale = isSale;
+    }
+
+    public Short getIsPurchase() {
+        return isPurchase;
+    }
+
+    public void setIsPurchase(Short isPurchase) {
+        this.isPurchase = isPurchase;
+    }
+
+    public Boolean getAddProductPerson() {
+        return isAddProductPerson;
+    }
+
+    public void setAddProductPerson(Boolean addProductPerson) {
+        isAddProductPerson = addProductPerson;
+    }
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -40,7 +40,7 @@ public interface ProductService {
      * 绑定至个人产品库
      * @return all products
      */
-    boolean setAllProductsByProductIds(String ids, Integer isAll, Integer isStardand);
+    Integer setAllProductsByProductIds(String ids, Integer isAll, Integer isStardand);
 
     /**
      * 批量保存个人替代物料信息

+ 28 - 58
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java

@@ -17,43 +17,9 @@ import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
-import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
-import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
-import com.uas.platform.b2c.prod.commodity.dao.MatchModelDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductDetailDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductMatchResultDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductModifyHistoryDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductPersonDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductReplaceDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductStandardPutOnInfoDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductStoreStatusDao;
-import com.uas.platform.b2c.prod.commodity.dao.StockInOutHistDao;
-import com.uas.platform.b2c.prod.commodity.dao.V_ProductPersonDao;
-import com.uas.platform.b2c.prod.commodity.dao.V_ProductPrivateDao;
-import com.uas.platform.b2c.prod.commodity.model.Goods;
-import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
-import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
-import com.uas.platform.b2c.prod.commodity.model.MatchModel;
-import com.uas.platform.b2c.prod.commodity.model.Product;
-import com.uas.platform.b2c.prod.commodity.model.ProductDetail;
-import com.uas.platform.b2c.prod.commodity.model.ProductMatchResult;
-import com.uas.platform.b2c.prod.commodity.model.ProductModifyHistory;
-import com.uas.platform.b2c.prod.commodity.model.ProductPerson;
-import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
-import com.uas.platform.b2c.prod.commodity.model.ProductReplace;
-import com.uas.platform.b2c.prod.commodity.model.ProductStandardPutOnInfo;
-import com.uas.platform.b2c.prod.commodity.model.ProductStoreStatus;
-import com.uas.platform.b2c.prod.commodity.model.StockInOutHist;
-import com.uas.platform.b2c.prod.commodity.model.UASBatchPutOnProperty;
-import com.uas.platform.b2c.prod.commodity.model.V_ProductPerson;
-import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
-import com.uas.platform.b2c.prod.commodity.service.GoodsHistoryService;
-import com.uas.platform.b2c.prod.commodity.service.GoodsService;
-import com.uas.platform.b2c.prod.commodity.service.ProductService;
-import com.uas.platform.b2c.prod.commodity.service.ReleaseProductByBatchService;
-import com.uas.platform.b2c.prod.commodity.service.UASBatchPutOnPropertyService;
+import com.uas.platform.b2c.prod.commodity.dao.*;
+import com.uas.platform.b2c.prod.commodity.model.*;
+import com.uas.platform.b2c.prod.commodity.service.*;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
@@ -89,24 +55,6 @@ import com.uas.platform.core.model.Type;
 import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
-import java.lang.reflect.Field;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.log4j.Logger;
@@ -125,6 +73,17 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.lang.reflect.Field;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
 /**
  * Created by wangyc on 2017/5/26.
  */
@@ -305,6 +264,7 @@ public class ProductServiceImpl implements ProductService {
         }, page);
         List<V_ProductPrivate> productList = productPage.getContent();
         for (V_ProductPrivate product : productList) {
+            product.setAddProductPerson(false);
             if ("ERP".equals(product.getSourceApp())) {
                 ProductDetail productDetail = productDetailDao.findByProductId(product.getId());
                 if (productDetail != null) {
@@ -318,7 +278,15 @@ public class ProductServiceImpl implements ProductService {
                 product.setBatchCount(productPrivate.getBatchCount());
             }
         }
-
+        userUU = SystemSession.getUser().getUserUU();
+        List<ProductPerson> ppList = productPersonDao.findByUserUU(userUU);
+        for (V_ProductPrivate v_productPrivate : productList) {
+            for (ProductPerson productPerson : ppList) {
+                if (v_productPrivate.getId().equals(productPerson.getProductId())) {
+                    v_productPrivate.setAddProductPerson(true);
+                }
+            }
+        }
         return new PageImpl<V_ProductPrivate>(productList, page, productPage.getTotalElements());
     }
 
@@ -390,8 +358,9 @@ public class ProductServiceImpl implements ProductService {
     }
 
     @Override
-    public boolean setAllProductsByProductIds(String ids, Integer isAll, Integer isStardand) {
+    public Integer setAllProductsByProductIds(String ids, Integer isAll, Integer isStardand) {
         List<Long> prIds;
+        int count = 0;
         try {
             prIds = JSON.parseArray(ids,Long.class);
         } catch (RuntimeException e){prIds = new ArrayList<>();}
@@ -409,10 +378,11 @@ public class ProductServiceImpl implements ProductService {
                     productPerson.setProductId(prId);
                     productPerson.setTime(new Date());
                     productPersonDao.save(productPerson);
+                    count++;
                 }
             }
         }
-        return true;
+        return count;
     }
 
     @Override

+ 24 - 21
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java

@@ -1,7 +1,5 @@
 package com.uas.platform.b2c.prod.commodity.service.impl;
 
-import static com.uas.platform.b2c.core.utils.NumberUtil.fractionNumCeil;
-
 import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
@@ -41,25 +39,6 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.CriterionExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
-import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
@@ -80,6 +59,28 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static com.uas.platform.b2c.core.utils.NumberUtil.fractionNumCeil;
+
 @Service
 public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchService {
 
@@ -1244,6 +1245,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
                 product.setStandard(releaseProductByBatch.getComponentUuId() == null ? (short)0 : (short)1);
                 product.setCmpUuid(releaseProductByBatch.getComponentUuId());
                 product.setCreateTime(new Date(System.currentTimeMillis()));
+                // 产品导入默认可销售
+                product.setIsSale((short) 1);
                 if (isAPerson) {
                     product.setSpec(releaseProductByBatch.getPackaging());
                 }

+ 4 - 4
src/main/java/com/uas/platform/b2c/prod/store/api/StoreInController.java

@@ -6,6 +6,8 @@ import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,8 +21,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
-
 /**
  * 店铺操作接口类
  *
@@ -126,9 +126,9 @@ public class StoreInController {
 	 * @param keyword		查询关键字
 	 */
 	@RequestMapping(value = "/stores", method = RequestMethod.GET, params = "op=pageByType")
-	public Page<StoreIn> pageStoresByTypesAndKeywordWhenUserVisitList(PageParams params, String types, @RequestParam(required = false) String keyword) {
+	public Page<StoreIn> pageStoresByTypesAndKeywordWhenUserVisitList(PageParams params, String types, @RequestParam(required = false) String keyword, HttpServletRequest request) {
 		PageInfo pageInfo = new PageInfo(params);
-		return storeService.pageStoresByTypesAndKeyword(pageInfo, types, keyword);
+		return storeService.pageStoresByTypesAndKeyword(pageInfo, types, keyword, request);
 	}
 
 	/**

+ 9 - 5
src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java

@@ -2,15 +2,19 @@ package com.uas.platform.b2c.prod.store.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.advertise.ad.model.StoreAdsType;
-import com.uas.platform.b2c.prod.store.model.*;
+import com.uas.platform.b2c.prod.store.model.Qualification;
+import com.uas.platform.b2c.prod.store.model.StoreApply;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreStatus;
+import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 
 public interface StoreInService {
 
@@ -100,7 +104,7 @@ public interface StoreInService {
 	 * @param types			店铺类型
 	 * @param keyword		查询关键字
 	 */
-	Page<StoreIn> pageStoresByTypesAndKeyword(PageInfo pageInfo, String types, String keyword);
+	Page<StoreIn> pageStoresByTypesAndKeyword(PageInfo pageInfo, String types, String keyword, HttpServletRequest request);
 
 	/**
 	 * 获取最近开店的店铺信息

+ 62 - 10
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java

@@ -6,8 +6,12 @@ import com.uas.platform.b2c.advertise.ad.model.StoreAdsType;
 import com.uas.platform.b2c.advertise.ad.service.StoreAdsService;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
+import com.uas.platform.b2c.common.search.dao.SearchHistoryDao;
+import com.uas.platform.b2c.common.search.model.SearchHistory;
 import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.constant.Type;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.JacksonUtils;
 import com.uas.platform.b2c.core.utils.UuidUtils;
@@ -19,7 +23,13 @@ import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreBrandInfoDao;
 import com.uas.platform.b2c.prod.store.dao.StoreInDao;
 import com.uas.platform.b2c.prod.store.exception.EmptyParameterException;
-import com.uas.platform.b2c.prod.store.model.*;
+import com.uas.platform.b2c.prod.store.model.EnterpriseSimple;
+import com.uas.platform.b2c.prod.store.model.Qualification;
+import com.uas.platform.b2c.prod.store.model.StoreApply;
+import com.uas.platform.b2c.prod.store.model.StoreBrandInfo;
+import com.uas.platform.b2c.prod.store.model.StoreIn;
+import com.uas.platform.b2c.prod.store.model.StoreStatus;
+import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -28,6 +38,22 @@ import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,16 +62,12 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.mobile.device.DeviceResolver;
+import org.springframework.mobile.device.LiteDeviceResolver;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import java.util.*;
-
 /**
  * 店铺业务实现类
  *
@@ -76,8 +98,12 @@ public class StoreInServiceImpl implements StoreInService {
 
 	private final EnterpriseService enterpriseService;
 
+	private final SearchHistoryDao searchHistoryDao;
+
+	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
+
 	@Autowired
-	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf, EnterpriseService enterpriseService) {
+	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf, EnterpriseService enterpriseService, SearchHistoryDao searchHistoryDao) {
 		this.storeDao = storeDao;
 		this.qualificationDao = qualificationDao;
 		this.goodsDao = goodsDao;
@@ -87,6 +113,7 @@ public class StoreInServiceImpl implements StoreInService {
 		this.adsService = adsService;
 		this.sysConf = sysConf;
 		this.enterpriseService = enterpriseService;
+		this.searchHistoryDao = searchHistoryDao;
 	}
 
 	@Override
@@ -341,7 +368,7 @@ public class StoreInServiceImpl implements StoreInService {
 	}
 
 	@Override
-	public Page<StoreIn> pageStoresByTypesAndKeyword(final PageInfo pageInfo, String types, String keyword) {
+	public Page<StoreIn> pageStoresByTypesAndKeyword(final PageInfo pageInfo, String types, String keyword, HttpServletRequest request) {
 		if (!StringUtils.isEmpty(keyword)) {
 			// keyword 只过滤店铺名称,可以使用此方法,否则,搜索多个字段需要生成查询条件
 			pageInfo.filter("storeName", keyword);
@@ -355,13 +382,38 @@ public class StoreInServiceImpl implements StoreInService {
 		// 设置排序
 		pageInfo.sorting(Sort.Direction.DESC, "totalReserve", "createTime");
 
-		return storeDao.findAll(new Specification<StoreIn>() {
+		Page<StoreIn> storeInPage =  storeDao.findAll(new Specification<StoreIn>() {
 			@Override
 			public Predicate toPredicate(Root<StoreIn> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
 				query.where(pageInfo.getPredicates(root, query, builder));
 				return null;
 			}
 		}, pageInfo);
+
+		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);
+				searchHistory.setType(Type.SEARCH_STORE.name());
+				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()));
+				}
+			}
+		}
+
+		return storeInPage;
 	}
 
 	@Override

+ 38 - 0
src/main/java/com/uas/platform/b2c/trade/seek/service/impl/SeekPurchaseBomServiceImpl.java

@@ -7,7 +7,9 @@ import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandDao;
+import com.uas.platform.b2c.prod.product.brand.modal.Brand;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
+import com.uas.platform.b2c.prod.product.component.modal.Component;
 import com.uas.platform.b2c.trade.seek.dao.*;
 import com.uas.platform.b2c.trade.seek.model.*;
 import com.uas.platform.b2c.trade.seek.service.SeekPurchaseBomService;
@@ -534,6 +536,9 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
                 inquiryItem.setProduceDate(batch.getProduceDate());
                 inquiryItem.setDate(new Date());
                 inquiryItem.setEndDate(batch.getDeadline());
+                if (StringUtils.isEmpty(batch.getKind())) {
+                    batch.setKind(matchKind(batch.getBrand(), batch.getCode()));
+                }
                 inquiryItem.setProdTitle(batch.getKind());
                 inquiryItem.setSpec(batch.getSpec());
                 if (StringUtils.isEmpty(endDate)) {
@@ -589,6 +594,39 @@ public class SeekPurchaseBomServiceImpl implements SeekPurchaseBomService {
         return ResultMap.success(result);
     }
 
+    /**
+     * 根据型号和品牌类目匹配
+     * @param brand
+     * @param code
+     * @return
+     */
+    private String matchKind(String brand, String code) {
+        // 匹配类目
+        String kind = "";
+        Long brandId = null;
+        List<Brand> brands = brandDao.findByUpperNameEn(brand);
+        if (CollectionUtils.isEmpty(brands)) {
+            brands = brandDao.findByUpperNameCn(brand);
+            if (CollectionUtils.isEmpty(brands)) {
+                kind = "其他";
+            } else {
+                brandId = brands.get(0).getId();
+            }
+        } else {
+            brandId = brands.get(0).getId();
+        }
+        if (brandId != null) {
+            List<Component> components = componentDao
+                    .findByCodeAndBrandid(code, brandId);
+            if (!CollectionUtils.isEmpty(components)) {
+                kind = components.get(0).getKind().getNameCn();
+            } else {
+                kind = "其他";
+            }
+        }
+        return kind;
+    }
+
     @Override
     public Page<SeekPurchaseBomList> getSeekPurchaseBomListPage(final PageInfo pageInfo, User user, String minReleaseDate, String maxReleaseDate, String name) {
         if (user.getEnterprise() != null) {

+ 19 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/Readme.md

@@ -0,0 +1,19 @@
+## name
+
+vendor
+
+## 名称
+
+供应商资源模块
+
+## 创建人
+
+董必伟
+
+## 创建时间
+
+2018年4月25日 15:17:25
+
+## 说明
+
+供应商资源查看、对应企业物料列表、针对物料立即询价、ERP引进供应商

+ 124 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/controller/VendorIntroductionController.java

@@ -0,0 +1,124 @@
+package com.uas.platform.b2c.trade.vendor.controller;
+
+import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
+import com.uas.platform.b2c.trade.vendor.model.InviteVendorHistory;
+import com.uas.platform.b2c.trade.vendor.model.VendorIntroduction;
+import com.uas.platform.b2c.trade.vendor.service.InviteVendorHistoryService;
+import com.uas.platform.b2c.trade.vendor.service.VendorIntroductionService;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.sso.support.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 供应商资源引进模块
+ *
+ * @author dongbw
+ * @time 创建时间 :2018年4月25日 15:20:53
+ */
+@RestController
+@RequestMapping("/vendor/introduction")
+public class VendorIntroductionController {
+
+    @Autowired
+    private VendorIntroductionService vendorIntroductionService;
+
+    @Autowired
+	private InviteVendorHistoryService inviteVendorHistoryService;
+	
+	private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+
+    /**
+     * 根据关键词(非必填)获取供应商资源列表
+     *
+     * @param size  the params 一页的大小
+	 * @param page 第几页
+     * @param keyword the keyword  搜索关键字
+     * @return the Page<VendorIntroduction> 返回一页的数据
+     */
+    @RequestMapping(value = "/vendor/list", method = RequestMethod.GET)
+	public Page<VendorIntroduction> getVendorIntroductionList(int page, int size, String keyword) {
+		return vendorIntroductionService.getVendorIntroduction(page, size, keyword);
+	}
+
+	/**
+	 * 获取推荐企业物料列表(匹配到的排前面)
+	 * @param page 页数
+	 * @param size 每页条数
+	 * @param vendUU 推荐供应商企业UU
+	 * @param keyword 关键词
+	 * @return venduu企业物料list
+	 */
+	@RequestMapping(value = "/product/list", method = RequestMethod.GET)
+	public Page<V_ProductPrivate> getVendorProductList(int page, int size, Long vendUU, String keyword) {
+		Page<V_ProductPrivate> productPage = vendorIntroductionService.getVendorProductList(page, size, vendUU, keyword);
+		return productPage;
+	}
+
+	/**
+	 * 获取该物料详情
+	 * @param id 物料id
+	 * @return 物料内容
+	 */
+	@RequestMapping(value = "/product/detail", method = RequestMethod.GET)
+	public V_ProductPrivate getVendorProductDetail(Long id) {
+		V_ProductPrivate product = vendorIntroductionService.getVendorProductDetail(id);
+		return product;
+	}
+
+    /**
+     * 查找该企业待售物料数量
+     * @param vendUU 供应商UU
+     * @return 物料内容
+     */
+    @RequestMapping(value = "/product/count", method = RequestMethod.GET)
+    public ModelMap getVendorProductCount(Long vendUU) {
+        ModelMap map = new ModelMap();
+        try {
+            Integer count = vendorIntroductionService.getVendorProductCount(vendUU);
+            map.put("count", count);
+            map.put("success", true);
+        } catch (Exception e) {
+            map.put("success", false);
+            map.put("message", e.getMessage());
+        }
+        return map;
+    }
+
+	/**
+	 * 获取企业邀请完善信息历史记录
+	 * @param vendUU 供应商企业UU
+	 * @return 邀请历史记录
+	 */
+	@RequestMapping(value = "/invite/history", method = RequestMethod.GET)
+	public InviteVendorHistory getInviteVendorHistoryByVendUU(Long vendUU) {
+		InviteVendorHistory inviteVendorHistory = inviteVendorHistoryService.getInviteVendorHistoryByVendUU(vendUU);
+		return inviteVendorHistory;
+	}
+
+	/**
+	 * 邀请供应商完善信息
+	 * @param vendUU 供应商企业UU
+	 * @return 是否成功
+	 */
+	@RequestMapping(value = "/invite", method = RequestMethod.POST)
+	public ModelMap inviteVendorByVendUU(Long vendUU) {
+		ModelMap map = new ModelMap();
+		try {
+			inviteVendorHistoryService.inviteVendorByVendUU(vendUU);
+			map.put("success", true);
+			logger.log("供应商资源","邀请供应商完善信息成功,vendUU:" + vendUU);
+		} catch (Exception e) {
+			map.put("success", false);
+			map.put("message", e.getMessage());
+			logger.log("供应商资源","邀请供应商完善信息失败,vendUU:" + vendUU + "原因:" + e.getMessage());
+		}
+		return map;
+	}
+
+}

+ 21 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/dao/InviteVendorHistoryDao.java

@@ -0,0 +1,21 @@
+package com.uas.platform.b2c.trade.vendor.dao;
+
+import com.uas.platform.b2c.trade.vendor.model.InviteVendorHistory;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+/**
+ * Created by dongbw
+ * 18/04/27 15:01.
+ */
+public interface InviteVendorHistoryDao extends JpaSpecificationExecutor<InviteVendorHistory>,
+        JpaRepository<InviteVendorHistory, Long> {
+
+    /**
+     * 根据邀请企业与被邀请企业获取邀请记录
+     * @param enUU 邀请企业UU
+     * @param vendUU 被邀请企业UU
+     * @return
+     */
+    InviteVendorHistory findByEnUUAndVendUU(Long enUU, Long vendUU);
+}

+ 107 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/model/InviteVendorHistory.java

@@ -0,0 +1,107 @@
+package com.uas.platform.b2c.trade.vendor.model;
+
+import java.util.Date;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Index;
+import javax.persistence.Table;
+
+/**
+ * 邀请供应商完善信息历史
+ *
+ * @author dongbw
+ * @version 2018年4月27日 14:58:12
+ */
+@Entity(name = "trade.inviteVendorHistory")
+@Table(name = "trade$inviteVendorHistory", indexes = {
+        @Index(name = "unique_enuu_venduu", columnList = "in_enuu,in_venduu", unique = true)})
+public class InviteVendorHistory {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "in_id")
+    private Long id;
+
+    /**
+     * 邀请企业uu
+     */
+    @Column(name = "in_enuu")
+    private Long enUU;
+
+    /**
+     * 被邀请企业UU
+     */
+    @Column(name = "in_venduu")
+    private Long vendUU;
+
+    /**
+     * 最近一次邀请时间
+     */
+    @Column(name = "in_date")
+    private Date date;
+
+    /**
+     * 已邀请次数
+     */
+    @Column(name = "in_times")
+    private Integer times;
+
+    public InviteVendorHistory() {
+
+    }
+
+    public InviteVendorHistory(Long enUU, Long vendUU) {
+        this.date = new Date();
+        this.enUU = enUU;
+        this.vendUU = vendUU;
+        this.times = 1;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public Long getVendUU() {
+        return vendUU;
+    }
+
+    public void setVendUU(Long vendUU) {
+        this.vendUU = vendUU;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+}

+ 204 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/model/VendorIntroduction.java

@@ -0,0 +1,204 @@
+package com.uas.platform.b2c.trade.vendor.model;
+
+/**
+ * 供应商推荐实体
+ * Created by dongbw
+ * 18/01/18 15:40.
+ */
+public class VendorIntroduction {
+
+    /**
+     * 推荐的供应商UU
+     */
+    private Long enUU;
+
+    /**
+     * 推荐的供应商名称
+     */
+    private String enName;
+
+    /**
+     * 推荐的供应商简称
+     */
+    private String enShortname;
+
+    /**
+     * 推荐的供应商地址
+     */
+    private String enAddress;
+
+    /**
+     * 推荐的供应商电话
+     */
+    private String enTel;
+
+    /**
+     * 推荐的供应商邮箱
+     */
+    private String enEmail;
+
+    /**
+     * 公司法人
+     */
+    private String enCorporation;
+
+    /**
+     * 商业登记证号
+     */
+    private String enBusinesscode;
+
+    /**
+     * 行业
+     */
+    private String enIndustry;
+
+    /**
+     * 主营业务
+     */
+    private String enBusinessScope;
+
+    /**
+     * 联系人
+     */
+    private String enContactman;
+
+    /**
+     * 联系人电话
+     */
+    private String enContacttel;
+
+    /**
+     * 匹配物料信息 名称(品牌)
+     */
+    private String productInfo;
+
+    /**
+     * 是否开店
+     */
+    private Short isStore;
+
+    /**
+     * 是否有有效物料
+     */
+    private Short hasProduct;
+
+    public String getProductInfo() {
+        return productInfo;
+    }
+
+    public void setProductInfo(String productInfo) {
+        this.productInfo = productInfo;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+
+    public String getEnShortname() {
+        return enShortname;
+    }
+
+    public void setEnShortname(String enShortname) {
+        this.enShortname = enShortname;
+    }
+
+    public String getEnAddress() {
+        return enAddress;
+    }
+
+    public void setEnAddress(String enAddress) {
+        this.enAddress = enAddress;
+    }
+
+    public String getEnTel() {
+        return enTel;
+    }
+
+    public void setEnTel(String enTel) {
+        this.enTel = enTel;
+    }
+
+    public String getEnEmail() {
+        return enEmail;
+    }
+
+    public void setEnEmail(String enEmail) {
+        this.enEmail = enEmail;
+    }
+
+    public String getEnCorporation() {
+        return enCorporation;
+    }
+
+    public void setEnCorporation(String enCorporation) {
+        this.enCorporation = enCorporation;
+    }
+
+    public String getEnBusinesscode() {
+        return enBusinesscode;
+    }
+
+    public void setEnBusinesscode(String enBusinesscode) {
+        this.enBusinesscode = enBusinesscode;
+    }
+
+    public String getEnIndustry() {
+        return enIndustry;
+    }
+
+    public void setEnIndustry(String enIndustry) {
+        this.enIndustry = enIndustry;
+    }
+
+    public String getEnBusinessScope() {
+        return enBusinessScope;
+    }
+
+    public void setEnBusinessScope(String enBusinessScope) {
+        this.enBusinessScope = enBusinessScope;
+    }
+
+    public String getEnContactman() {
+        return enContactman;
+    }
+
+    public void setEnContactman(String enContactman) {
+        this.enContactman = enContactman;
+    }
+
+    public String getEnContacttel() {
+        return enContacttel;
+    }
+
+    public void setEnContacttel(String enContacttel) {
+        this.enContacttel = enContacttel;
+    }
+
+    public Short getIsStore() {
+        return isStore;
+    }
+
+    public void setIsStore(Short isStore) {
+        this.isStore = isStore;
+    }
+
+    public Short getHasProduct() {
+        return hasProduct;
+    }
+
+    public void setHasProduct(Short hasProduct) {
+        this.hasProduct = hasProduct;
+    }
+}

+ 23 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/service/InviteVendorHistoryService.java

@@ -0,0 +1,23 @@
+package com.uas.platform.b2c.trade.vendor.service;
+
+import com.uas.platform.b2c.trade.vendor.model.InviteVendorHistory;
+
+/**
+ * @author dongbw
+ * @version  2018年4月26日 17:24:54
+ */
+public interface InviteVendorHistoryService {
+
+    /**
+     * 获取企业邀请完善信息历史记录
+     * @param vendUU 供应商UU
+     * @return 邀请历史
+     */
+    InviteVendorHistory getInviteVendorHistoryByVendUU(Long vendUU);
+
+    /**
+     * 邀请供应商完善信息
+     * @param vendUU 供应商企业UU
+     */
+    void inviteVendorByVendUU(Long vendUU) throws Exception;
+}

+ 46 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/service/VendorIntroductionService.java

@@ -0,0 +1,46 @@
+package com.uas.platform.b2c.trade.vendor.service;
+
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
+import com.uas.platform.b2c.trade.vendor.model.VendorIntroduction;
+import com.uas.sso.support.Page;
+
+/**
+ * The interface VendorIntroduction service.
+ * @version  2018年4月26日 17:24:54
+ */
+public interface VendorIntroductionService {
+
+
+    /**
+     * 获取供应商资源列表
+     * @param page 页码
+     * @param size 每页大小
+     * @param keyword  关键词
+     * @return 供应商资源page
+     */
+    Page<VendorIntroduction> getVendorIntroduction(int page, int size, String keyword);
+
+    /**
+     * 根据vendUU获取企业物料列表
+     * @param page 页码
+     * @param size 每页尺寸
+     * @param vendUU  可开发供应商企业UU
+     * @param keyword 关键词
+     * @return 物料page
+     */
+    Page<V_ProductPrivate> getVendorProductList(int page, int size, Long vendUU, String keyword);
+
+    /**
+     * 根据id获取物料详情
+     * @param id 物料id
+     * @return 物料信息
+     */
+    V_ProductPrivate getVendorProductDetail(Long id);
+
+    /**
+     * 获取供应商产品数目
+     * @param vendUU 供应商UU
+     * @return
+     */
+    Integer getVendorProductCount(Long vendUU);
+}

+ 184 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/service/impl/InviteVendorHistoryServiceImpl.java

@@ -0,0 +1,184 @@
+package com.uas.platform.b2c.trade.vendor.service.impl;
+
+import com.uas.message.mail.service.MailService;
+import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
+import com.uas.platform.b2c.common.account.dao.UserDao;
+import com.uas.platform.b2c.common.account.model.Enterprise;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.message.model.MessageModel;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.DateFormatUtils;
+import com.uas.platform.b2c.fa.payment.utils.StringUtils;
+import com.uas.platform.b2c.trade.vendor.dao.InviteVendorHistoryDao;
+import com.uas.platform.b2c.trade.vendor.model.InviteVendorHistory;
+import com.uas.platform.b2c.trade.vendor.service.InviteVendorHistoryService;
+import com.uas.platform.core.util.HttpUtil;
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
+import org.apache.commons.collections.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The type InviteVendorHistoryService.
+ * @author dongbw
+ * @version  2018年4月26日 17:25:03
+ */
+@Service
+public class InviteVendorHistoryServiceImpl implements InviteVendorHistoryService {
+
+    @Autowired
+    private InviteVendorHistoryDao inviteVendorHistoryDao;
+
+    @Autowired
+    private EnterpriseDao enterpriseDao;
+
+    @Autowired
+    private UserDao userDao;
+
+    @Autowired
+    private MailService mailService;
+
+    /**
+     * 公共消息服务URL
+     */
+    @Value("#{sys.messageServiceUrl}")
+    private String messageServiceUrl;
+
+    /**
+     * 消息推送邮件模板id
+     */
+    @Value("#{message.inviteVendorMailTemplateId}")
+    private String inviteVendorMailTemplateId;
+
+    /**
+     * 消息类型 (在B2B消息中拼接跳转单据详情url请求时需要)
+     */
+    private final String INVITATION_TYPE = "供应商开发";
+
+    /**
+     * 消息推送方式:im
+     * 2018年4月28日 11:25:14 由于这里需要优先给企业邮箱发送短信,但是消息服务只能给个人邮件及短信发送,
+     * 所以这里只产生消息,邮件发送单独进行
+     */
+    private final String SMS_TYPE = "IM";
+
+    /**
+     * 消息推送方式:im和邮件
+     */
+    private final String SMS_TYPE_MAIL = "MAIL_AND_IM";
+
+    /**
+     * 来源应用,ERP
+     */
+    private final String PRODUCERAPP = "B2C";
+
+    /**
+     * 消费类型: 多个,MULTI
+     */
+    private final String CUST_TYPE = "MULTI";
+
+    /**
+     * 接收应用
+     */
+    private final String CONSUMERAPP = "B2B,MALL";
+
+    /**
+     * 获取企业邀请完善信息历史记录
+     *
+     * @param vendUU 供应商UU
+     * @return 邀请历史
+     */
+    @Override
+    public InviteVendorHistory getInviteVendorHistoryByVendUU(Long vendUU) {
+        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        if (null != enUU) {
+            return inviteVendorHistoryDao.findByEnUUAndVendUU(enUU, vendUU);
+        }
+        return null;
+    }
+
+    /**
+     * 邀请供应商完善信息
+     *
+     * @param vendUU 供应商企业UU
+     */
+    @Override
+    public void inviteVendorByVendUU(Long vendUU) throws Exception {
+        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        // 保存邀请记录
+        InviteVendorHistory inviteVendorHistory = inviteVendorHistoryDao.findByEnUUAndVendUU(enUU, vendUU);
+        if (null == inviteVendorHistory) {
+            inviteVendorHistory = new InviteVendorHistory(enUU, vendUU);
+        } else {
+            inviteVendorHistory.setDate(new Date());
+            inviteVendorHistory.setTimes(inviteVendorHistory.getTimes() + 1);
+        }
+        inviteVendorHistoryDao.save(inviteVendorHistory);
+        // 发送站内信和邮件
+        sendInvitation(vendUU);
+    }
+
+    /**
+     * 发送邮件
+     * @param vendEnEmail 供应商企业邮箱
+     */
+    private void sendMail(String vendEnEmail) {
+        Map<String, Object> map  = new HashedMap();
+        map.put("vendorname", SystemSession.getUser().getEnterprise().getEnName());
+        map.put("date",  DateFormatUtils.DATETIME_FORMAT.format(new Date()));
+        mailService.send(inviteVendorMailTemplateId, vendEnEmail, map);
+    }
+
+    /**
+     * 发送站内信和邮件
+     * @param vendUU 供应商UU
+     */
+    private void sendInvitation(Long vendUU) throws Exception {
+        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        Long userUU = SystemSession.getUser().getUserUU();
+        Enterprise enterprise = enterpriseDao.findByUu(vendUU);
+        List<MessageModel> models = new ArrayList<>();
+        if (null != enterprise) {
+            // 给管理员发送站内信
+            if (null != enterprise.getEnAdminuu()) {
+                User admin = userDao.findOne(enterprise.getEnAdminuu());
+                String content = "有客户查看您的物料信息,请尽快完善缺失的内容,以便获取更多商机";
+                MessageModel model = new MessageModel();
+                model.setType(INVITATION_TYPE);
+                model.setProducerApp(PRODUCERAPP);
+                model.setConsumerType(CUST_TYPE);
+                model.setConsumerApp(CONSUMERAPP);
+                model.setContent(content);
+                model.setReceiverEnuu(enterprise.getUu());
+                model.setReceiverUu(admin.getUserUU());
+                model.setSenderEnuu(enUU);
+                model.setSenderUu(userUU);
+                model.setSmsType(SMS_TYPE);
+                model.setMailTemplate(inviteVendorMailTemplateId);
+                models.add(model);
+                if (!CollectionUtils.isEmpty(models)) {
+                    HttpUtil.doPost(messageServiceUrl + "/messages", FlexJsonUtils.toJsonDeep(models));
+                }
+                // 企业邮箱为空则发管理员邮箱
+                if (StringUtils.isEmpty(enterprise.getEnEmail()) && !StringUtils.isEmpty(admin.getUserEmail())) {
+                    // 发送邮件
+                    sendMail(admin.getUserEmail());
+                }
+            }
+            // 发送通知到企业邮箱
+            if (!StringUtils.isEmpty(enterprise.getEnEmail())) {
+                // 发送邮件
+                sendMail(enterprise.getEnEmail());
+            }
+            // 发送邀请邮件, 优先企业邮箱,为空时发送管理员邮箱
+        }
+    }
+
+}

+ 201 - 0
src/main/java/com/uas/platform/b2c/trade/vendor/service/impl/VendorIntroductionServiceImpl.java

@@ -0,0 +1,201 @@
+package com.uas.platform.b2c.trade.vendor.service.impl;
+
+import com.uas.platform.b2c.common.base.dao.CommonDao;
+import com.uas.platform.b2c.core.constant.IntegerConstant;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.prod.commodity.dao.V_ProductPrivateDao;
+import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
+import com.uas.platform.b2c.trade.vendor.model.VendorIntroduction;
+import com.uas.platform.b2c.trade.vendor.service.VendorIntroductionService;
+import com.uas.sso.support.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+
+/**
+ * The type VendorIntroductionService.
+ * @version  2018年4月26日 17:25:03
+ */
+@Service
+public class VendorIntroductionServiceImpl implements VendorIntroductionService {
+
+	@Autowired
+	private CommonDao commonDao;
+
+	@Autowired
+	private V_ProductPrivateDao v_productPrivateDao;
+
+	/**
+	 * 获取供应商资源列表
+	 * @param page    页码
+	 * @param size    每页大小
+	 * @param keyword 关键词
+	 * @return 供应商资源page
+	 */
+	@Override
+	public Page<VendorIntroduction> getVendorIntroduction(int page, int size, String keyword) {
+		long start = System.currentTimeMillis();
+		if (!StringUtils.isEmpty(keyword)) {
+            keyword = keyword.trim();
+        }
+        Long enUU = 0L;
+        if (null != SystemSession.getUser() && null != SystemSession.getUser().getEnterprise()) {
+            enUU = SystemSession.getUser().getEnterprise().getUu();
+        }
+		// 查询所有企业个数
+		Integer total = getTotalCount(enUU, keyword);
+		// 查询企业
+		List<VendorIntroduction> vendorIntroductions = getEnterpriseWithCondition(enUU, keyword, page, size);
+		System.out.println("查找完企业UU" + (System.currentTimeMillis() - start));
+		return new Page<VendorIntroduction>(page, size, vendorIntroductions, total);
+	}
+
+	/**
+	 * 根据vendUU获取企业物料列表
+	 *
+	 * @param page    页码
+	 * @param size    每页尺寸
+	 * @param vendUU  可开发供应商企业UU
+	 * @param keyword 关键词
+	 * @return 物料page
+	 */
+	@Override
+	public Page<V_ProductPrivate> getVendorProductList(int page, int size, Long vendUU, String keyword) {
+		String whereCondition = " 1 = 1 ";
+		if (!StringUtils.isEmpty(keyword)) {
+		    keyword = keyword.trim();
+			// 物料名称、规格、品牌、原厂型号、单位
+			whereCondition = " (pr_title like '%" + keyword + "%' or pr_spec like '%" + keyword + "%' or pr_brand like '%"
+					+ keyword + "%' or pr_cmpcode like '%" + keyword + "%' or pr_unit like '%" + keyword + "%' or pr_kind like '%"
+					+ keyword + "%') ";
+		}
+		long start = System.currentTimeMillis();
+		// and Pr_Title not like '%测试%' and lower(Pr_Title) not like '%test%' and Pr_code not like '%测试%' and lower(Pr_code) not like '%test%'
+		String prodSql = "select a.* from (select pr_id id, pr_code prodNum, pr_title prodName, pr_spec spec, pr_cmpcode cmpCode, pr_unit unit, pr_kind kind, "
+				+ " pr_brand brand, pr_pbranden pbranden, pr_standard standard from v$product$private where ifnull(pr_b2cenabled, 1) <> 0  and pr_enuu = "
+				+ vendUU + " and pr_issale = 1 and pr_pbranden is not null and pr_pcmpcode is not null and " + whereCondition
+                + " order by pr_issale desc, pr_standard desc, pr_id desc) a limit " + (page - 1) * size + "," + size;
+		System.out.println("prod:" + prodSql);
+		// and Pr_Title not like '%测试%' and lower(Pr_Title) not like '%test%' and Pr_code not like '%测试%' and lower(Pr_code) not like '%test%'
+		String countSql = "select count(1) from v$product$private where pr_enuu = " + vendUU
+				+ " and pr_issale = 1 and pr_pbranden is not null and pr_pcmpcode is not null and ifnull(pr_b2cenabled, 1) <> 0 and " + whereCondition;
+		Integer count = commonDao.queryForObject(countSql, Integer.class);
+		List<V_ProductPrivate> products = commonDao.query(prodSql, V_ProductPrivate.class);
+		System.out.println("耗时" + (System.currentTimeMillis() - start));
+		return new Page<>(page, size, products, count);
+	}
+
+	/**
+	 * 根据id获取物料详情
+	 *
+	 * @param id 物料id
+	 * @return 物料信息
+	 */
+	@Override
+	public V_ProductPrivate getVendorProductDetail(Long id) {
+		return v_productPrivateDao.findOne(id);
+	}
+
+	/**
+	 * 获取供应商产品数目
+	 *
+	 * @param vendUU 供应商UU
+	 * @return
+	 */
+	@Override
+	public Integer getVendorProductCount(Long vendUU) {
+		return v_productPrivateDao.getCountByEnuuAndEnabled(vendUU, IntegerConstant.YES_SHORT);
+	}
+
+	/**
+	 * 获取供应商资源信息
+	 * @param enUU 本企业UU
+	 * @param keyword 关键词
+	 * @param page 页码
+	 * @param size 尺寸
+	 * @return
+	 */
+	private List<VendorIntroduction> getEnterpriseWithCondition(Long enUU, String keyword, int page, int size) {
+		StringBuilder enterpriseSql = new StringBuilder();
+//		// 查询所有符合条件的enUU的语句,按待售物料数量排序
+//		String enUUSql = getEnUUGroupByEnUUOrderByCount(enUU, keyword);
+		// 获取企业sql
+		enterpriseSql.append("select en.en_uu enUU, en.en_name enName, en.en_shortname enShortname, en.en_address enAddress, en.en_tel enTel, " +
+				"en.en_email enEmail, en.en_corporation enCorporation, en.en_businesscode enBusinesscode, en.en_industry enIndustry, en.en_Businessscope enBusinessScope " +
+				",st.st_enuu,st.st_status from sec$enterprises en left join store$info st on st.st_enuu = en.en_uu where en_name not like '%测试%'  and en_name not like '%test%' and en_uu <> ")
+			.append(enUU);
+		if (!StringUtils.isEmpty(keyword)) {
+			enterpriseSql.append(" and (en_name like '%").append(keyword).append("%' or en_address like '%").append(keyword).append("%' or en_industry like '%").append(keyword)
+			.append("%')");
+		}
+		// rownum 控制
+		String rownumSql = ") s order by isStore desc,enUU asc limit " + (page - 1) * size + "," + size ;
+//		// 查询企业简要物料信息语句
+//		String prodInfoSql = "select wm_concat(pr_title || (case when pr_brand is not null then '(' || pr_brand || ')' else ' ' end)) from v$product$private where pr_enuu=en_uu and "
+//				+ " and pr_issale = 1 and pr_b2cenabled = 1 and rownum<5 ";
+		// 查询企业是否开店语句
+		// 查找非供应商的卖当前商品的企业UU
+		// (select 1 from v$product$private where ifnull(pr_b2cenabled, 1) = 1 and pr_issale = 1 and pr_pbranden is not null and pr_pcmpcode is not null and pr_enuu = enUU limit 0,1) hasProduct
+		String vendorIntroductionUusSql = "select s.*, if( st_enuu is not null and st_status = 'OPENED', 1, 0) isStore from ("
+				+ enterpriseSql + rownumSql;
+//		String vendorIntroductionUusSql = "select s.*,( " + prodInfoSql + ") productInfo, (" + storeSql +
+//				") isStore from (select t.*,rownum as r1 from (" + enterpriseSql + rownumSql;
+        System.out.println("ens:" + vendorIntroductionUusSql);
+		return commonDao.query(vendorIntroductionUusSql, VendorIntroduction.class);
+	}
+
+	/**
+	 * 获取所有符合条件企业数量
+	 * @param enUU  本企业UU
+	 * @param keyword 关键词
+	 * @return
+	 */
+	private Integer getTotalCount(Long enUU, String keyword) {
+		StringBuilder enCountSql = new StringBuilder();
+		// 含名称、地址、、行业、经营范围搜索 物料型号、名称
+		if (!StringUtils.isEmpty(keyword)) {
+			String keywordSql = getKeywordSql(enUU, keyword);
+			enCountSql.append("select count(1) from (").append(keywordSql);
+		} else {
+			enCountSql.append("select count(1) from (select en_uu,count(1) from sec$enterprises where en_name not like '%测试%' " +
+					" and en_name not like '%test%'and en_uu <> ").append(enUU);
+		}
+		enCountSql.append(" group by en_uu )a");
+        System.out.println("en_count:" + enCountSql.toString());
+		return commonDao.queryForObject(enCountSql.toString(), Integer.class);
+	}
+
+	/**
+	 * 拼接关键词Sql
+	 * @param enUU
+	 * @param keyword
+	 * @return
+	 */
+	private String getKeywordSql(Long enUU, String keyword) {
+		return "select en_uu,count(1) as counts from sec$enterprises where en_name not like '%测试%' " +
+				"and lower(en_name) not like '%test%' and (en_name like '%"
+				+ keyword + "%' or en_address like '%" + keyword + "%' or en_industry like '%" + keyword
+				+ "%') and en_uu <> " + enUU;
+	}
+
+	/**
+	 * 拼接所有待售物料所属企业UU,按enUU分组,按物料数量倒序
+	 * @param enUU 当前企业UU
+	 * @param keyword 搜索关键词
+	 * @return
+	 */
+	private String getEnUUGroupByEnUUOrderByCount(Long enUU, String keyword) {
+		StringBuilder enUUSql = new StringBuilder();
+		// 含名称、企业执照号、地址、邮箱、电话、行业、经营范围搜索
+		if (!StringUtils.isEmpty(keyword)) {
+			enUUSql.append(getKeywordSql(enUU, keyword));
+		} else {
+			enUUSql.append("select en_uu, count(1) as counts from (select * from sec$enterprises where en_name not like '%测试%' " +
+					" and lower(en_name) not like '%test%') en where en.en_uu <> ").append(enUU);
+		}
+		enUUSql.append(" group by en_uu order by count(1) desc ");
+		return enUUSql.toString();
+	}
+}

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

@@ -4,4 +4,5 @@ plaformB2cBrandApprovedTemplateId=5b5effdf-5562-45f7-9021-18f21e29bec6
 plaformB2cBrandUnproveTemplateId=03b3d658-cd92-43a0-a53f-103492cfc595
 plaformB2cComponentApprovedTemplateId=36812a85-d0f9-4d2a-a7aa-62319f092b6f
 plaformB2cComponentUnproveTemplateId=6228240a-93ba-405f-851c-f874a6c99864
-plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160
+plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160
+inviteVendorMailTemplateId=9028790a-9fc0-4759-a2df-8c26a7f3aa9a

+ 3 - 0
src/main/resources/dev/sys.properties

@@ -49,6 +49,9 @@ kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10
 inquiryServiceUrl=http://218.17.158.219:24000
 inquiryServiceInnerUrl=http://218.17.158.219:24000
 
+#public message  service url
+messageServiceUrl=http://192.168.253.12:24000/message/
+
 #b2b
 b2b=http://218.17.158.219/b2b_test
 b2bDomain=218.17.158.219:9000/b2b_test

+ 2 - 1
src/main/resources/prod/message.properties

@@ -4,4 +4,5 @@ plaformB2cBrandApprovedTemplateId=5b5effdf-5562-45f7-9021-18f21e29bec6
 plaformB2cBrandUnproveTemplateId=03b3d658-cd92-43a0-a53f-103492cfc595
 plaformB2cComponentApprovedTemplateId=36812a85-d0f9-4d2a-a7aa-62319f092b6f
 plaformB2cComponentUnproveTemplateId=6228240a-93ba-405f-851c-f874a6c99864
-plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160
+plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160
+inviteVendorMailTemplateId=9028790a-9fc0-4759-a2df-8c26a7f3aa9a

+ 3 - 0
src/main/resources/prod/sys.properties

@@ -51,6 +51,9 @@ kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10
 inquiryServiceUrl=https://api-inquiry.usoftmall.com
 inquiryServiceInnerUrl=http://10.10.0.254:8080
 
+#public message  service url
+messageServiceUrl=http://api-message.ubtob.com/
+
 #b2b
 b2b=http://uas.ubtob.com
 b2bDomain=uas.ubtob.com

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

@@ -4,4 +4,5 @@ plaformB2cBrandApprovedTemplateId=5b5effdf-5562-45f7-9021-18f21e29bec6
 plaformB2cBrandUnproveTemplateId=03b3d658-cd92-43a0-a53f-103492cfc595
 plaformB2cComponentApprovedTemplateId=36812a85-d0f9-4d2a-a7aa-62319f092b6f
 plaformB2cComponentUnproveTemplateId=6228240a-93ba-405f-851c-f874a6c99864
-plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160
+plaformB2cSupplyChainTemplateId=b28337ba-f115-4f11-b457-15d558443160
+inviteVendorMailTemplateId=9028790a-9fc0-4759-a2df-8c26a7f3aa9a

+ 3 - 0
src/main/resources/test/sys.properties

@@ -50,6 +50,9 @@ kafka-bootstrap-servers=10.10.100.11:9292,10.10.100.12:9292,10.10.100.13:9292,10
 inquiryServiceUrl=http://218.17.158.219:24000
 inquiryServiceInnerUrl=http://218.17.158.219:24000
 
+#public message  service url
+messageServiceUrl=http://192.168.253.12:24000/message/
+
 #b2b
 b2b=http://218.17.158.219/b2b_test
 b2bDomain=218.17.158.219:9000/b2b_test

+ 3 - 0
src/main/webapp/WEB-INF/spring/webmvc.xml

@@ -118,6 +118,9 @@
 			<mvc:exclude-mapping path="/seek/release/template"/>
 			<mvc:exclude-mapping path="/erp/productReplace/update"/>
 			<mvc:exclude-mapping path="/basic/enterprise/findByName/**"/>
+			<mvc:exclude-mapping path="/basic/enterprise/**/info"/>
+			<mvc:exclude-mapping path="/vendor/introduction/vendor/**" />
+			<mvc:exclude-mapping path="/vendor/introduction/product/**" />
 			<bean class="com.uas.platform.b2c.core.filter.SSOInterceptor"></bean>
 		</mvc:interceptor>
 		<!-- 对所有的请求拦截,将Session中的User信息设置进SystemSession -->

+ 8 - 0
src/main/webapp/resources/js/admin/controllers/StoreQualificationCtrl.js

@@ -142,6 +142,14 @@ define([ 'app/app' ], function(app) {
 				$scope.brands = apply.brands || [];
 				$scope.brandsBackup = angular.copy($scope.brands);
 
+                /**
+                 * 判断品牌图片是否是PDF
+                 *
+                 */
+                angular.forEach($scope.brands, function (brand) {
+                    brand.isPdf = isPdf(brand.url);
+                });
+
 				// 处理店铺资质信息
 				angular.forEach(qualifications, function (qualification) {
 					if (qualification.type === $scope.qType.taxPayer || qualification.type === $scope.qType.taxRegistration

+ 46 - 27
src/main/webapp/resources/js/usercenter/controllers/forstore/seek_purchase_ctrl.js

@@ -352,10 +352,7 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
             }
           }
 
-          // 发布求购
-          $scope.release = function () {
-            // 校验
-            if ($scope.checkAll()) {
+          var startRelease = function (prodTitle) {
               var inquiry = {};
               var inquiryItem = {};
               inquiry.recorderUU = $scope.userInfo.userUU;
@@ -370,10 +367,10 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
               inquiryItem.userUU = $scope.userInfo.userUU;
               inquiryItem.source = "MALL";
               if ($scope.userInfo.enterprise) {
-                inquiry.enUU = $scope.userInfo.enterprise.uu;
-                inquiryItem.userName = $scope.userInfo.enterprise.enName;
+                  inquiry.enUU = $scope.userInfo.enterprise.uu;
+                  inquiryItem.userName = $scope.userInfo.enterprise.enName;
               } else {
-                inquiryItem.userName = $scope.userInfo.userName;
+                  inquiryItem.userName = $scope.userInfo.userName;
               }
               inquiryItem.userTel = $scope.userInfo.userTel;
               inquiryItem.needquantity = $scope.applyObj.amount;
@@ -386,32 +383,54 @@ define(['app/app', 'clipboard', 'QRCode'], function (app, clipboard, QRCode) {
               inquiryItem.endDate = $scope.applyObj.deadline;
               inquiryItem.encapsulation = $scope.applyObj.encapsulation;
               inquiryItem.spec = $scope.applyObj.spec;
-              inquiryItem.prodTitle = $scope.applyObj.prodTitle;
+              inquiryItem.prodTitle = prodTitle || $scope.applyObj.prodTitle || '其他';
               var inquiryItems = [];
               inquiryItems.push(inquiryItem);
               inquiry.inquiryItems = inquiryItems;
               if (seekUrl == 'https://api-inquiry.usoftmall.com') {
-                seekPurchase.saveOneSeekPurchaseProd(inquiry,
-                    function (data) {
-                      $scope.showUseFlag = false;
-                      $scope.seekPurchaseTableParams.reload();
-                      $scope.emptyForm();
-                      toaster.pop('success', '求购发布成功');
-                    }, function (res) {
-                      toaster.pop('error', res.data);
-                    });
+                  seekPurchase.saveOneSeekPurchaseProd(inquiry,
+                      function (data) {
+                          $scope.showUseFlag = false;
+                          $scope.seekPurchaseTableParams.reload();
+                          $scope.emptyForm();
+                          toaster.pop('success', '求购发布成功');
+                      }, function (res) {
+                          toaster.pop('error', res.data);
+                      });
               } else {
-                seekPurchase.saveOneSeekPurchase(inquiry,
-                    function (data) {
-                      $scope.showUseFlag = false;
-                      $scope.seekPurchaseTableParams.reload();
-                      $scope.emptyForm();
-                      toaster.pop('success', '求购发布成功');
-                    }, function (res) {
-                      toaster.pop('error', res.data);
-                    });
+                  seekPurchase.saveOneSeekPurchase(inquiry,
+                      function (data) {
+                          $scope.showUseFlag = false;
+                          $scope.seekPurchaseTableParams.reload();
+                          $scope.emptyForm();
+                          toaster.pop('success', '求购发布成功');
+                      }, function (res) {
+                          toaster.pop('error', res.data);
+                      });
               }
-
+          };
+          // 发布求购
+          $scope.release = function () {
+            // 校验
+            if ($scope.checkAll()) {
+                if (!$scope.applyObj.prodTitle || $scope.applyObj.prodTitle.length === 0) {
+                    var materialUrl = seekUrl;
+                    if (seekUrl == 'https://api-inquiry.usoftmall.com') {
+                        materialUrl = 'https://api-product.usoftmall.com/';
+                    }
+                    $http({
+                        method: 'get',
+                        dataType: 'json',
+                        url: materialUrl + '/productuser/match/getKind',
+                        params: {cmpCode: $scope.applyObj.code, brand: $scope.applyObj.brand}
+                    }).success(function (data) {
+                        startRelease(data && data.length ? data : '其他');
+                    }).error(function (response) {
+                        toaster.pop('error', response || '获取关联类目失败');
+                    });
+                } else {
+                    startRelease();
+                }
             } else {
               if (!$scope.validObj.deadline) {
                 toaster.pop('error', '截止日期不能为空');

+ 14 - 3
src/main/webapp/resources/js/vendor/app.js

@@ -639,10 +639,9 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 		}
 	});
 
-	app.run(['$rootScope', '$state', '$q', 'BaseService', 'StoreInfo', '$location', function($rootScope, $state, $q, BaseService, StoreInfo, $location) {
+	app.run(['$rootScope', '$state', '$q', 'BaseService', 'StoreInfo', '$location', 'AuthenticationService', 'toaster', function($rootScope, $state, $q, BaseService, StoreInfo, $location, AuthenticationService, toaster) {
 		$rootScope.rootPath = BaseService.getRootPath();
 		$rootScope.page = 'vendor';// 导航栏状态,'个人中心'状态激活
-
 		var getToStateName = function () {
 			if ($rootScope.store && (!$rootScope.store.status || $rootScope.store.status === 'OPENED')) {
 				return 'vendor_store_maintain';
@@ -690,7 +689,19 @@ define([ 'angularAMD', 'ngLocal', 'common/services', 'common/directives', 'commo
 			}
 
 			if ($rootScope.applyStatus === 'NONE' && $location.$$path === '/index') {
-				$state.go('vendor_store_apply');
+                AuthenticationService.getAuthentication().success(function (data) {
+                    angular.forEach(data.enterprises, function (item) {
+                        if (item.current) {
+                            data.enterprise = item;
+                        }
+                    });
+                    $rootScope.userInfo = data;
+                    if (!(!data.pwdEnable || !data.haveUserQuestion||!data.emailValidCode || data.emailValidCode != 2)) {
+                        $state.go('vendor_store_apply');
+                    }
+                }).error(function (error) {
+                    toaster.pop('error', '获取登录信息失败');
+                })
 			}
 
 			$rootScope.$on('$stateChangeStart', function (event, toState) {

+ 43 - 33
src/main/webapp/resources/js/vendor/controllers/forstore/vendor_store_apply_ctrl.js

@@ -50,41 +50,51 @@ define(['app/app', 'jquery-uploadify'], function (app) {
 		 */
 		function activate() {
 			// 获取企业信息
-			var enterprise = $rootScope.userInfo.enterprise;
-			Enterprise.getEnterpriseInfo({ enuu : enterprise.uu}, {}, function (enterprise) {
-				$scope.enterprise = enterprise || {};
-
-				StoreInfo.findLastUnPassApplyByEnuu({}, {}, function (result) {
-					console.log('UN_PASS_APPLY', result);
-					if (result) {
-						switchTab(result.type);
-						if (result.qualifications) {
-							angular.forEach(result.qualifications, function (qualification) {
-								$scope.qualifications[qualification.type] = qualification;
-							});
-						}else {
-							Enterprise.getEnterpriseDetailInfo({ enuu : enterprise.uu},{},function (enterpriseDetail) {
-								$scope.enBuinesssCode = enterpriseDetail.businessCodeImage;
-                                $scope.qualifications[$scope.qType.businessLicense] = generateQualification($scope.enBuinesssCode, $scope.qType.businessLicense);;
-                            });
-						}
-						if (result.brands) {
-							$scope.brands = [];
-							angular.forEach(result.brands, function (brand) {
-								var newBrand = {};
-								newBrand.name = brand.name;
-								newBrand.url = brand.url;
-								$scope.brands.push(newBrand);
-							});
-						}
-						$scope.reason = result.reason;
+			AuthenticationService.getAuthentication().success(function (data) {
+				angular.forEach(data.enterprises, function (item) {
+					if (item.current) {
+						data.enterprise = item;
 					}
-				}, function (error) {
-					console.log('INITIAL_ERROR', error);
 				});
-			}, function () {
-				toaster.pop('error', '获取企业信息失败');
-			});
+				$rootScope.userInfo = data;
+				var enterprise = $rootScope.userInfo.enterprise;
+				Enterprise.getEnterpriseInfo({ enuu : enterprise.uu}, {}, function (enterprise) {
+					$scope.enterprise = enterprise || {};
+
+					StoreInfo.findLastUnPassApplyByEnuu({}, {}, function (result) {
+						console.log('UN_PASS_APPLY', result);
+						if (result) {
+							switchTab(result.type);
+							if (result.qualifications) {
+								angular.forEach(result.qualifications, function (qualification) {
+									$scope.qualifications[qualification.type] = qualification;
+								});
+							}else {
+								Enterprise.getEnterpriseDetailInfo({ enuu : enterprise.uu},{},function (enterpriseDetail) {
+									$scope.enBuinesssCode = enterpriseDetail.businessCodeImage;
+									$scope.qualifications[$scope.qType.businessLicense] = generateQualification($scope.enBuinesssCode, $scope.qType.businessLicense);;
+								});
+							}
+							if (result.brands) {
+								$scope.brands = [];
+								angular.forEach(result.brands, function (brand) {
+									var newBrand = {};
+									newBrand.name = brand.name;
+									newBrand.url = brand.url;
+									$scope.brands.push(newBrand);
+								});
+							}
+							$scope.reason = result.reason;
+						}
+					}, function (error) {
+						console.log('INITIAL_ERROR', error);
+					});
+				}, function () {
+					toaster.pop('error', '获取企业信息失败');
+				});
+			}).error(function (error) {
+				toaster.pop('error', '获取登录信息失败');
+			})
 		}
 		// 获取已登录的用户信息
 		var getAuthentication = function() {

+ 22 - 2
src/main/webapp/resources/view/admin/store_qualification_maintenance.html

@@ -595,7 +595,17 @@
 							<div class="col-sm-12"><input type="text" class="form-control" placeholder="请填写原因" style="max-width: 676px;" title="reason" ng-disabled="application.status !== 'PREPARE' && !updateState" ng-model="brand.reason"/></div>
 						</div>
 						<div class="store-list-img row">
-							<div class="col-sm-4" style="width: 160px;">
+							<div class="col-sm-4" style="width: 160px;" ng-if="brand.isPdf">
+								<div class="big-img" ng-if="brand.url">
+									<div><img src="static/img/vendor/store/timg.png" alt=""></div>
+									<div class="hover-show">
+										<span class="delete" ng-click="" title="删除"></span>
+										<a target='_blank' href="{{brand.url}}"><i class="fa fa-search"></i>查看</a>
+									</div>
+								</div>
+								<div class="no-photo-img" style="height: 180px;text-align: center;line-height: 180px;border: #ccc 1px solid;" ng-if="!brand.url">未上传图片!</div>
+							</div>
+							<div class="col-sm-4" style="width: 160px;" ng-if="!brand.isPdf">
 								<div class="big-img" ng-if="brand.url">
 									<div><img ng-src="{{brand.url}}"/></div>
 									<div class="hover-show">
@@ -682,7 +692,17 @@
 							<div class="col-sm-12"><input type="text" class="form-control" placeholder="请填写原因" ng-disabled="application.status !== 'PREPARE' && !updateState" style="max-width: 676px;" title="reason" ng-model="brand.authorizedReason"/></div>
 						</div>
 						<div class="store-list-img row">
-							<div class="col-sm-4" style="width: 160px;">
+							<div class="col-sm-4" style="width: 160px;" ng-if="brand.isPdf">
+								<div class="big-img" ng-if="brand.url">
+									<div><img src="static/img/vendor/store/timg.png" alt=""></div>
+									<div class="hover-show">
+										<span class="delete" ng-click="" title="删除"></span>
+										<a target='_blank' href="{{brand.url}}"><i class="fa fa-search"></i>查看</a>
+									</div>
+								</div>
+								<div class="no-photo-img" style="height: 180px;text-align: center;line-height: 180px;border: #ccc 1px solid;" ng-if="!brand.url">未上传图片!</div>
+							</div>
+							<div class="col-sm-4" style="width: 160px;" ng-if="!brand.isPdf">
 								<div class="big-img" ng-if="brand.url">
 									<div><img ng-src="{{brand.url}}"/></div>
 									<div class="hover-show">